diff --git a/CMakeLists.txt b/CMakeLists.txt index f85853d..7edd012 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.0) cmake_policy(SET CMP0017 NEW) # need include() with .cmake project(qad) set(qad_MAJOR 1) -set(qad_MINOR 16) +set(qad_MINOR 17) set(qad_REVISION 0) set(qad_SUFFIX ) set(qad_COMPANY SHS) diff --git a/libs/sql_table/sql_record_widget.cpp b/libs/sql_table/sql_record_widget.cpp index eac9bdc..e367aeb 100644 --- a/libs/sql_table/sql_record_widget.cpp +++ b/libs/sql_table/sql_record_widget.cpp @@ -322,8 +322,10 @@ bool SQLRecordWidget::isEmpty() const { void SQLRecordWidget::updateRelations() { relations.clear(); + QSqlDatabase db(QSqlDatabase::database(connection_name)); + if (!db.isOpen()) return; for (int i = 0; i < relations_src.size(); ++i) { - QSqlQuery q(QString("SELECT %1,%2 FROM %3").arg(relations_src[i].key, relations_src[i].ocol, relations_src[i].table), QSqlDatabase::database(connection_name)); + QSqlQuery q(QString("SELECT %1,%2 FROM %3").arg(relations_src[i].key, relations_src[i].ocol, relations_src[i].table), db); QList > cr; while (q.next()) cr << QPair(q.value(0).toInt(), q.value(1).toString()); diff --git a/libs/widgets/session_manager.cpp b/libs/widgets/session_manager.cpp index e05d830..0774eea 100644 --- a/libs/widgets/session_manager.cpp +++ b/libs/widgets/session_manager.cpp @@ -42,6 +42,12 @@ void SessionManager::removeMainWidget(QWidget * e) { } +void SessionManager::addEntry(const QString & name, QMainWindow * e) { + mwindows.push_back(QPair(name, e)); + mw_splitters[e] = e->findChildren(); +} + + void SessionManager::save() { if (file_.isEmpty()) { qDebug() << "[SessionManager] filename is empty"; @@ -54,8 +60,8 @@ void SessionManager::save() { sr.setValue(mwindows[i].first + " state", mwindows[i].second->saveState(), false); sr.setValue(mwindows[i].first + " window state", (int)mwindows[i].second->windowState(), false); sr.setValue(mwindows[i].first + " geometry " + QString::number((int)mwindows[i].second->windowState()), mwindows[i].second->saveGeometry(), false); - QList sp = mwindows[i].second->findChildren(); - foreach (QSplitter * s, sp) + QList spl = mw_splitters[mwindows[i].second]; + foreach (QSplitter * s, spl) sr.setValue(mwindows[i].first + " splitter " + s->objectName(), s->saveState(), false); } for (int i = 0; i < widgets.size(); ++i) { @@ -165,8 +171,8 @@ void SessionManager::load(bool onlyMainwindow) { QByteArray ba = sr.getValue(mwindows[i].first + " state").toByteArray(); if (!ba.isEmpty()) mw->restoreState(ba); - QList sp = mw->findChildren(); - foreach (QSplitter * s, sp) { + QList spl = mw_splitters[mw]; + foreach (QSplitter * s, spl) { ba = sr.getValue(mwindows[i].first + " splitter " + s->objectName()).toByteArray(); if (!ba.isEmpty()) s->restoreState(ba); @@ -261,6 +267,7 @@ void SessionManager::clear(bool with_filename) { bools.clear(); ints.clear(); floats.clear(); + mw_splitters.clear(); if (with_filename) setFile(""); } diff --git a/libs/widgets/session_manager.h b/libs/widgets/session_manager.h index b3c84fa..4d55e11 100644 --- a/libs/widgets/session_manager.h +++ b/libs/widgets/session_manager.h @@ -52,42 +52,42 @@ public: void setFile(const QString & file); - void addEntry(QMainWindow * e) {mwindows.push_back(QPair(e->objectName(), e));} - void addEntry(QCheckBox * e) {checks.push_back(QPair(e->objectName(), e));} - void addEntry(QLineEdit * e) {lines.push_back(QPair(e->objectName(), e));} - void addEntry(QComboBox * e) {combos.push_back(QPair(e->objectName(), e));} - void addEntry(QDoubleSpinBox * e) {dspins.push_back(QPair(e->objectName(), e));} - void addEntry(QSpinBox * e) {spins.push_back(QPair(e->objectName(), e));} - void addEntry(SpinSlider * e) {spinsliders.push_back(QPair(e->objectName(), e));} - void addEntry(EvalSpinBox * e) {evals.push_back(QPair(e->objectName(), e));} - void addEntry(QTabWidget * e) {tabs.push_back(QPair(e->objectName(), e));} - void addEntry(QGroupBox * e) {groups.push_back(QPair(e->objectName(), e));} - void addEntry(QAction * e) {actions.push_back(QPair(e->objectName(), e));} - void addEntry(QAbstractButton * e) {buttons.push_back(QPair(e->objectName(), e));} - void addEntry(QStackedWidget * e) {stacks.push_back(QPair(e->objectName(), e));} - void addMainWidget(QWidget * e) {widgets.push_back(QPair(e->objectName(), e));} + void addEntry(QMainWindow * e) {addEntry(e->objectName(), e);} + void addEntry(QCheckBox * e) {addEntry(e->objectName(), e);} + void addEntry(QLineEdit * e) {addEntry(e->objectName(), e);} + void addEntry(QComboBox * e) {addEntry(e->objectName(), e);} + void addEntry(QDoubleSpinBox * e) {addEntry(e->objectName(), e);} + void addEntry(QSpinBox * e) {addEntry(e->objectName(), e);} + void addEntry(SpinSlider * e) {addEntry(e->objectName(), e);} + void addEntry(EvalSpinBox * e) {addEntry(e->objectName(), e);} + void addEntry(QTabWidget * e) {addEntry(e->objectName(), e);} + void addEntry(QGroupBox * e) {addEntry(e->objectName(), e);} + void addEntry(QAction * e) {addEntry(e->objectName(), e);} + void addEntry(QAbstractButton * e) {addEntry(e->objectName(), e);} + void addEntry(QStackedWidget * e) {addEntry(e->objectName(), e);} + void addMainWidget(QWidget * e) {addMainWidget(e->objectName(), e);} void removeMainWidget(QWidget * e); - void addEntry(const QString & name, QMainWindow * e) {mwindows.push_back(QPair(name, e));} - void addEntry(const QString & name, QCheckBox * e) {checks.push_back(QPair(name, e));} - void addEntry(const QString & name, QLineEdit * e) {lines.push_back(QPair(name, e));} - void addEntry(const QString & name, QComboBox * e) {combos.push_back(QPair(name, e));} - void addEntry(const QString & name, QDoubleSpinBox * e) {dspins.push_back(QPair(name, e));} - void addEntry(const QString & name, QSpinBox * e) {spins.push_back(QPair(name, e));} - void addEntry(const QString & name, SpinSlider * e) {spinsliders.push_back(QPair(name, e));} - void addEntry(const QString & name, EvalSpinBox * e) {evals.push_back(QPair(name, e));} - void addEntry(const QString & name, QTabWidget * e) {tabs.push_back(QPair(name, e));} - void addEntry(const QString & name, QGroupBox * e) {groups.push_back(QPair(name, e));} + void addEntry(const QString & name, QMainWindow * e); + void addEntry(const QString & name, QCheckBox * e) {checks.push_back(QPair(name, e));} + void addEntry(const QString & name, QLineEdit * e) {lines.push_back(QPair(name, e));} + void addEntry(const QString & name, QComboBox * e) {combos.push_back(QPair(name, e));} + void addEntry(const QString & name, QDoubleSpinBox * e) {dspins.push_back(QPair(name, e));} + void addEntry(const QString & name, QSpinBox * e) {spins.push_back(QPair(name, e));} + void addEntry(const QString & name, SpinSlider * e) {spinsliders.push_back(QPair(name, e));} + void addEntry(const QString & name, EvalSpinBox * e) {evals.push_back(QPair(name, e));} + void addEntry(const QString & name, QTabWidget * e) {tabs.push_back(QPair(name, e));} + void addEntry(const QString & name, QGroupBox * e) {groups.push_back(QPair(name, e));} void addEntry(const QString & name, QAbstractButton * e) {buttons.push_back(QPair(name, e));} - void addEntry(const QString & name, QStackedWidget * e) {stacks.push_back(QPair(name, e));} - void addEntry(const QString & name, QAction * e) {actions.push_back(QPair(name, e));} - void addEntry(const QString & name, QStringList * e) {stringlists.push_back(QPair(name, e));} - void addEntry(const QString & name, QString * e) {strings.push_back(QPair(name, e));} - void addEntry(const QString & name, QColor * e) {colors.push_back(QPair(name, e));} - void addEntry(const QString & name, bool * e) {bools.push_back(QPair(name, e));} - void addEntry(const QString & name, int * e) {ints.push_back(QPair(name, e));} - void addEntry(const QString & name, float * e) {floats.push_back(QPair(name, e));} - void addMainWidget(const QString & name, QWidget * e) {widgets.push_back(QPair(name, e));} + void addEntry(const QString & name, QStackedWidget * e) {stacks.push_back(QPair(name, e));} + void addEntry(const QString & name, QAction * e) {actions.push_back(QPair(name, e));} + void addEntry(const QString & name, QStringList * e) {stringlists.push_back(QPair(name, e));} + void addEntry(const QString & name, QString * e) {strings.push_back(QPair(name, e));} + void addEntry(const QString & name, QColor * e) {colors.push_back(QPair(name, e));} + void addEntry(const QString & name, bool * e) {bools.push_back(QPair(name, e));} + void addEntry(const QString & name, int * e) {ints.push_back(QPair(name, e));} + void addEntry(const QString & name, float * e) {floats.push_back(QPair(name, e));} + void addMainWidget(const QString & name, QWidget * e) {widgets.push_back(QPair(name, e));} private: QMap metaFunctions(const QSet & objects, QByteArray fname); @@ -112,6 +112,7 @@ private: QVector > bools; QVector > ints; QVector > floats; + QMap > mw_splitters; QString file_; public slots: