Changeset View
Changeset View
Standalone View
Standalone View
kmymoney/dialogs/kgeneratesqldlg.cpp
Context not available. | |||||
2 | kgeneratesqldlg.cpp | 2 | kgeneratesqldlg.cpp | ||
---|---|---|---|---|---|
3 | ------------------- | 3 | ------------------- | ||
4 | copyright : (C) 2009 by Tony Bloomfield <tonybloom@users.sourceforge.net> | 4 | copyright : (C) 2009 by Tony Bloomfield <tonybloom@users.sourceforge.net> | ||
5 | (C) 2017 by Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> | ||||
5 | 6 | | |||
6 | ***************************************************************************/ | 7 | ***************************************************************************/ | ||
7 | 8 | | |||
Context not available. | |||||
17 | #include "kgeneratesqldlg.h" | 18 | #include "kgeneratesqldlg.h" | ||
18 | 19 | | |||
19 | // ---------------------------------------------------------------------------- | 20 | // ---------------------------------------------------------------------------- | ||
20 | // System includes | 21 | // Std Includes | ||
22 | | ||||
23 | #include <memory> | ||||
21 | 24 | | |||
22 | #include <sys/types.h> | 25 | // ---------------------------------------------------------------------------- | ||
26 | // System includes | ||||
23 | 27 | | |||
24 | // ---------------------------------------------------------------------------- | 28 | // ---------------------------------------------------------------------------- | ||
25 | // QT Includes | 29 | // QT Includes | ||
Context not available. | |||||
38 | #include <KHelpClient> | 42 | #include <KHelpClient> | ||
39 | #include <QDialogButtonBox> | 43 | #include <QDialogButtonBox> | ||
40 | #include <QPushButton> | 44 | #include <QPushButton> | ||
41 | #include <QVBoxLayout> | | |||
42 | 45 | | |||
43 | // ---------------------------------------------------------------------------- | 46 | // ---------------------------------------------------------------------------- | ||
44 | // Project Includes | 47 | // Project Includes | ||
45 | 48 | | |||
49 | #include "ui_kgeneratesqldlg.h" | ||||
50 | | ||||
46 | #include "mymoneyfile.h" | 51 | #include "mymoneyfile.h" | ||
47 | #include "storage/mymoneystoragesql.h" | | |||
48 | #include "storage/mymoneyseqaccessmgr.h" | 52 | #include "storage/mymoneyseqaccessmgr.h" | ||
49 | #include "kguiutils.h" | 53 | #include "kguiutils.h" | ||
50 | #include "misc/platformtools.h" | 54 | #include "misc/platformtools.h" | ||
55 | #include "mymoneydbdriver.h" | ||||
56 | #include "mymoneydbdef.h" | ||||
51 | 57 | | |||
52 | KGenerateSqlDlg::KGenerateSqlDlg(QWidget *) | 58 | class KGenerateSqlDlgPrivate | ||
53 | { | 59 | { | ||
54 | m_buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel|QDialogButtonBox::Help); | 60 | Q_DISABLE_COPY(KGenerateSqlDlgPrivate) | ||
55 | m_createTablesButton = m_buttonBox->addButton(i18n("Create Tables"), QDialogButtonBox::ButtonRole::AcceptRole); | 61 | Q_DECLARE_PUBLIC(KGenerateSqlDlg) | ||
56 | m_saveSqlButton = m_buttonBox->addButton(i18n("Save SQL"), QDialogButtonBox::ButtonRole::ActionRole); | 62 | | ||
57 | Q_ASSERT(m_createTablesButton); | 63 | public: | ||
58 | Q_ASSERT(m_saveSqlButton); | 64 | KGenerateSqlDlgPrivate(KGenerateSqlDlg *qq) : | ||
59 | 65 | q_ptr(qq), | |||
60 | QPushButton *okButton = m_buttonBox->button(QDialogButtonBox::Ok); | 66 | ui(new Ui::KGenerateSqlDlg) | ||
61 | okButton->setDefault(true); | 67 | { | ||
62 | okButton->setShortcut(Qt::CTRL | Qt::Key_Return); | 68 | } | ||
63 | connect(m_buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); | | |||
64 | connect(m_buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); | | |||
65 | | ||||
66 | m_widget = new KGenerateSqlDlgDecl(); | | |||
67 | QVBoxLayout *mainLayout = new QVBoxLayout; | | |||
68 | setLayout(mainLayout); | | |||
69 | mainLayout->addWidget(m_widget); | | |||
70 | | ||||
71 | QWidget *mainWidget = new QWidget(this); | | |||
72 | setLayout(mainLayout); | | |||
73 | mainLayout->addWidget(mainWidget); | | |||
74 | mainLayout->addWidget(m_buttonBox); | | |||
75 | initializeForm(); | | |||
76 | } | | |||
77 | 69 | | |||
78 | KGenerateSqlDlg::~KGenerateSqlDlg() | 70 | ~KGenerateSqlDlgPrivate() | ||
71 | { | ||||
72 | delete ui; | ||||
73 | } | ||||
74 | | ||||
75 | void init() | ||||
76 | { | ||||
77 | Q_Q(KGenerateSqlDlg); | ||||
78 | ui->setupUi(q); | ||||
79 | m_createTablesButton = ui->buttonBox->addButton(i18n("Create Tables"), QDialogButtonBox::ButtonRole::AcceptRole); | ||||
80 | m_saveSqlButton = ui->buttonBox->addButton(i18n("Save SQL"), QDialogButtonBox::ButtonRole::ActionRole); | ||||
81 | Q_ASSERT(m_createTablesButton); | ||||
82 | Q_ASSERT(m_saveSqlButton); | ||||
83 | | ||||
84 | q->connect(ui->buttonBox, &QDialogButtonBox::accepted, q, &QDialog::accept); | ||||
85 | q->connect(ui->buttonBox, &QDialogButtonBox::rejected, q, &QDialog::reject); | ||||
86 | initializeForm(); | ||||
87 | } | ||||
88 | | ||||
89 | void initializeForm() | ||||
90 | { | ||||
91 | Q_Q(KGenerateSqlDlg); | ||||
92 | m_requiredFields = nullptr; | ||||
93 | // at this point, we don't know which fields are required, so disable everything but the list | ||||
94 | m_saveSqlButton->setEnabled(false); | ||||
95 | m_createTablesButton->setEnabled(false); | ||||
96 | ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); | ||||
97 | | ||||
98 | ui->urlSqlite->clear(); | ||||
99 | ui->textDbName->clear(); | ||||
100 | ui->textHostName->clear(); | ||||
101 | ui->textPassword->clear(); | ||||
102 | ui->textUserName->clear(); | ||||
103 | ui->textSQL->clear(); | ||||
104 | ui->urlSqlite->setEnabled(false); | ||||
105 | ui->textDbName->setEnabled(false); | ||||
106 | ui->textHostName->setEnabled(false); | ||||
107 | ui->textPassword->setEnabled(false); | ||||
108 | ui->textUserName->setEnabled(false); | ||||
109 | ui->textSQL->setEnabled(false); | ||||
110 | | ||||
111 | q->connect(ui->buttonBox->button(QDialogButtonBox::Help), &QPushButton::clicked, q, &KGenerateSqlDlg::slotHelp); | ||||
112 | } | ||||
113 | | ||||
114 | QString selectedDriver() | ||||
115 | { | ||||
116 | auto drivers = ui->listDrivers->selectedItems(); | ||||
117 | if (drivers.count() != 1) { | ||||
118 | return QString(); | ||||
119 | } | ||||
120 | | ||||
121 | return drivers[0]->text().section(' ', 0, 0); | ||||
122 | } | ||||
123 | | ||||
124 | KGenerateSqlDlg *q_ptr; | ||||
125 | Ui::KGenerateSqlDlg *ui; | ||||
126 | QPushButton *m_createTablesButton; | ||||
127 | QPushButton *m_saveSqlButton; | ||||
128 | | ||||
129 | QList<QString> m_supportedDrivers; | ||||
130 | //MyMoneyDbDrivers m_map; | ||||
131 | std::unique_ptr<kMandatoryFieldGroup> m_requiredFields; | ||||
132 | bool m_sqliteSelected; | ||||
133 | QExplicitlySharedDataPointer<MyMoneyDbDriver> m_dbDriver; | ||||
134 | QString m_dbName; | ||||
135 | MyMoneySeqAccessMgr* m_storage; | ||||
136 | bool m_mustDetachStorage; | ||||
137 | }; | ||||
138 | | ||||
139 | | ||||
140 | KGenerateSqlDlg::KGenerateSqlDlg(QWidget *parent) : | ||||
141 | QDialog(parent), | ||||
142 | d_ptr(new KGenerateSqlDlgPrivate(this)) | ||||
79 | { | 143 | { | ||
80 | // Stub required to delete m_requiredFields | 144 | Q_D(KGenerateSqlDlg); | ||
145 | d->init(); | ||||
81 | } | 146 | } | ||
82 | 147 | | |||
83 | void KGenerateSqlDlg::initializeForm() | 148 | KGenerateSqlDlg::~KGenerateSqlDlg() | ||
84 | { | 149 | { | ||
85 | m_requiredFields = nullptr; | 150 | Q_D(KGenerateSqlDlg); | ||
86 | // at this point, we don't know which fields are required, so disable everything but the list | 151 | delete d; | ||
87 | m_saveSqlButton->setEnabled(false); | | |||
88 | m_createTablesButton->setEnabled(false); | | |||
89 | QPushButton* okButton = m_buttonBox->button(QDialogButtonBox::Ok); | | |||
90 | Q_ASSERT(okButton); | | |||
91 | okButton->setEnabled(false); | | |||
92 | | ||||
93 | m_widget->urlSqlite->clear(); | | |||
94 | m_widget->textDbName->clear(); | | |||
95 | m_widget->textHostName->clear(); | | |||
96 | m_widget->textPassword->clear(); | | |||
97 | m_widget->textUserName->clear(); | | |||
98 | m_widget->textSQL->clear(); | | |||
99 | m_widget->urlSqlite->setEnabled(false); | | |||
100 | m_widget->textDbName->setEnabled(false); | | |||
101 | m_widget->textHostName->setEnabled(false); | | |||
102 | m_widget->textPassword->setEnabled(false); | | |||
103 | m_widget->textUserName->setEnabled(false); | | |||
104 | m_widget->textSQL->setEnabled(false); | | |||
105 | | ||||
106 | connect(m_buttonBox->button(QDialogButtonBox::Help), &QPushButton::clicked, this, &KGenerateSqlDlg::slotHelp); | | |||
107 | } | 152 | } | ||
108 | 153 | | |||
109 | int KGenerateSqlDlg::exec() | 154 | int KGenerateSqlDlg::exec() | ||
110 | { | 155 | { | ||
156 | Q_D(KGenerateSqlDlg); | ||||
111 | // list drivers supported by KMM | 157 | // list drivers supported by KMM | ||
112 | QMap<QString, QString> map = MyMoneyDbDriver::driverMap(); | 158 | auto map = MyMoneyDbDriver::driverMap(); | ||
113 | // list drivers installed on system | 159 | // list drivers installed on system | ||
114 | QStringList list = QSqlDatabase::drivers(); | 160 | auto list = QSqlDatabase::drivers(); | ||
115 | // join the two | 161 | // join the two | ||
116 | QStringList::Iterator it = list.begin(); | 162 | QStringList::Iterator it = list.begin(); | ||
117 | while (it != list.end()) { | 163 | while (it != list.end()) { | ||
118 | QString dname = *it; | 164 | QString dname = *it; | ||
119 | if (map.keys().contains(dname)) { // only keep if driver is supported | 165 | if (map.keys().contains(dname)) { // only keep if driver is supported | ||
120 | dname = dname + " - " + map[dname]; | 166 | dname = dname + " - " + map[dname]; | ||
121 | m_supportedDrivers.append(dname); | 167 | d->m_supportedDrivers.append(dname); | ||
122 | } | 168 | } | ||
123 | ++it; | 169 | ++it; | ||
124 | } | 170 | } | ||
125 | if (m_supportedDrivers.count() == 0) { | 171 | if (d->m_supportedDrivers.count() == 0) { | ||
126 | // why does KMessageBox not have a standard dialog with Help button? | 172 | // why does KMessageBox not have a standard dialog with Help button? | ||
127 | if ((KMessageBox::questionYesNo(this, | 173 | if ((KMessageBox::questionYesNo(this, | ||
128 | i18n("In order to use a database, you need to install some additional software. Click Help for more information"), | 174 | i18n("In order to use a database, you need to install some additional software. Click Help for more information"), | ||
Context not available. | |||||
133 | } | 179 | } | ||
134 | return (1); | 180 | return (1); | ||
135 | } | 181 | } | ||
136 | m_widget->listDrivers->clear(); | 182 | d->ui->listDrivers->clear(); | ||
137 | m_widget->listDrivers->addItems(m_supportedDrivers); | 183 | d->ui->listDrivers->addItems(d->m_supportedDrivers); | ||
138 | connect(m_widget->listDrivers, SIGNAL(itemSelectionChanged()), | 184 | connect(d->ui->listDrivers, &QListWidget::itemSelectionChanged, | ||
139 | this, SLOT(slotdriverSelected())); | 185 | this, &KGenerateSqlDlg::slotdriverSelected); | ||
140 | return (QDialog::exec()); | 186 | return (QDialog::exec()); | ||
141 | } | 187 | } | ||
142 | 188 | | |||
143 | void KGenerateSqlDlg::slotcreateTables() | 189 | void KGenerateSqlDlg::slotcreateTables() | ||
144 | { | 190 | { | ||
145 | if (m_sqliteSelected) { | 191 | Q_D(KGenerateSqlDlg); | ||
146 | m_dbName = m_widget->urlSqlite->text(); | 192 | if (d->m_sqliteSelected) { | ||
193 | d->m_dbName = d->ui->urlSqlite->text(); | ||||
147 | } else { | 194 | } else { | ||
148 | m_dbName = m_widget->textDbName->text(); | 195 | d->m_dbName = d->ui->textDbName->text(); | ||
149 | } | 196 | } | ||
150 | // check that the database has been pre-created | 197 | // check that the database has been pre-created | ||
151 | { // all queries etc. must be in a block - see 'remove database' API doc | 198 | { // all queries etc. must be in a block - see 'remove database' API doc | ||
152 | Q_ASSERT(!selectedDriver().isEmpty()); | 199 | Q_ASSERT(!d->selectedDriver().isEmpty()); | ||
153 | 200 | | |||
154 | QSqlDatabase dbase = QSqlDatabase::addDatabase(selectedDriver(), "creation"); | 201 | QSqlDatabase dbase = QSqlDatabase::addDatabase(d->selectedDriver(), "creation"); | ||
155 | dbase.setHostName(m_widget->textHostName->text()); | 202 | dbase.setHostName(d->ui->textHostName->text()); | ||
156 | dbase.setDatabaseName(m_dbName); | 203 | dbase.setDatabaseName(d->m_dbName); | ||
157 | dbase.setUserName(m_widget->textUserName->text()); | 204 | dbase.setUserName(d->ui->textUserName->text()); | ||
158 | dbase.setPassword(m_widget->textPassword->text()); | 205 | dbase.setPassword(d->ui->textPassword->text()); | ||
159 | if (!dbase.open()) { | 206 | if (!dbase.open()) { | ||
160 | KMessageBox::error(this, | 207 | KMessageBox::error(this, | ||
161 | i18n("Unable to open database.\n" | 208 | i18n("Unable to open database.\n" | ||
Context not available. | |||||
165 | } | 212 | } | ||
166 | QSqlQuery q(dbase); | 213 | QSqlQuery q(dbase); | ||
167 | QString message(i18n("Tables successfully created")); | 214 | QString message(i18n("Tables successfully created")); | ||
168 | QStringList commands = m_widget->textSQL->toPlainText().split('\n'); | 215 | QStringList commands = d->ui->textSQL->toPlainText().split('\n'); | ||
169 | QStringList::ConstIterator cit; | 216 | QStringList::ConstIterator cit; | ||
170 | for (cit = commands.constBegin(); cit != commands.constEnd(); ++cit) { | 217 | for (cit = commands.constBegin(); cit != commands.constEnd(); ++cit) { | ||
171 | if (!(*cit).isEmpty()) { | 218 | if (!(*cit).isEmpty()) { | ||
Context not available. | |||||
185 | } | 232 | } | ||
186 | QSqlDatabase::removeDatabase("creation"); | 233 | QSqlDatabase::removeDatabase("creation"); | ||
187 | 234 | | |||
188 | QPushButton* okButton = m_buttonBox->button(QDialogButtonBox::Ok); | 235 | auto okButton = d->ui->buttonBox->button(QDialogButtonBox::Ok); | ||
189 | Q_ASSERT(okButton); | 236 | Q_ASSERT(okButton); | ||
190 | okButton->setEnabled(true); | 237 | okButton->setEnabled(true); | ||
191 | } | 238 | } | ||
192 | 239 | | |||
193 | void KGenerateSqlDlg::slotsaveSQL() | 240 | void KGenerateSqlDlg::slotsaveSQL() | ||
194 | { | 241 | { | ||
195 | QString fileName = QFileDialog::getSaveFileName( | 242 | Q_D(KGenerateSqlDlg); | ||
196 | this, | 243 | auto fileName = QFileDialog::getSaveFileName( | ||
197 | i18n("Select output file"), | 244 | this, | ||
198 | QString(), | 245 | i18n("Select output file"), | ||
199 | QString()); | 246 | QString(), | ||
247 | QString()); | ||||
200 | if (fileName.isEmpty()) return; | 248 | if (fileName.isEmpty()) return; | ||
201 | QFile out(fileName); | 249 | QFile out(fileName); | ||
202 | if (!out.open(QIODevice::WriteOnly)) return; | 250 | if (!out.open(QIODevice::WriteOnly)) return; | ||
203 | QTextStream s(&out); | 251 | QTextStream s(&out); | ||
204 | MyMoneyDbDef db; | 252 | MyMoneyDbDef db; | ||
205 | s << m_widget->textSQL->toPlainText(); | 253 | s << d->ui->textSQL->toPlainText(); | ||
206 | out.close(); | 254 | out.close(); | ||
207 | 255 | | |||
208 | QPushButton* okButton = m_buttonBox->button(QDialogButtonBox::Ok); | 256 | auto okButton = d->ui->buttonBox->button(QDialogButtonBox::Ok); | ||
209 | Q_ASSERT(okButton); | 257 | Q_ASSERT(okButton); | ||
210 | okButton->setEnabled(true); | 258 | okButton->setEnabled(true); | ||
211 | } | 259 | } | ||
212 | 260 | | |||
213 | QString KGenerateSqlDlg::selectedDriver() | | |||
214 | { | | |||
215 | QList<QListWidgetItem *> drivers = m_widget->listDrivers->selectedItems(); | | |||
216 | if (drivers.count() != 1) { | | |||
217 | return QString(); | | |||
218 | } | | |||
219 | | ||||
220 | return drivers[0]->text().section(' ', 0, 0); | | |||
221 | } | | |||
222 | | ||||
223 | void KGenerateSqlDlg::slotdriverSelected() | 261 | void KGenerateSqlDlg::slotdriverSelected() | ||
224 | { | 262 | { | ||
225 | const QString driverName = selectedDriver(); | 263 | Q_D(KGenerateSqlDlg); | ||
264 | const auto driverName = d->selectedDriver(); | ||||
226 | if (driverName.isEmpty()) { | 265 | if (driverName.isEmpty()) { | ||
227 | initializeForm(); | 266 | d->initializeForm(); | ||
228 | return; | 267 | return; | ||
229 | } | 268 | } | ||
230 | 269 | | |||
231 | m_dbDriver = MyMoneyDbDriver::create(driverName); | 270 | d->m_dbDriver = MyMoneyDbDriver::create(driverName); | ||
232 | if (!m_dbDriver->isTested()) { | 271 | if (!d->m_dbDriver->isTested()) { | ||
233 | int rc = KMessageBox::warningContinueCancel(0, | 272 | int rc = KMessageBox::warningContinueCancel(0, | ||
234 | i18n("Database type %1 has not been fully tested in a KMyMoney environment.\n" | 273 | i18n("Database type %1 has not been fully tested in a KMyMoney environment.\n" | ||
235 | "Please make sure you have adequate backups of your data.\n" | 274 | "Please make sure you have adequate backups of your data.\n" | ||
Context not available. | |||||
237 | "kmymoney-devel@kde.org", driverName), | 276 | "kmymoney-devel@kde.org", driverName), | ||
238 | ""); | 277 | ""); | ||
239 | if (rc == KMessageBox::Cancel) { | 278 | if (rc == KMessageBox::Cancel) { | ||
240 | m_widget->listDrivers->clearSelection(); | 279 | d->ui->listDrivers->clearSelection(); | ||
241 | initializeForm(); | 280 | d->initializeForm(); | ||
242 | return; | 281 | return; | ||
243 | } | 282 | } | ||
244 | } | 283 | } | ||
245 | 284 | | |||
246 | m_requiredFields.reset(new kMandatoryFieldGroup(this)); | 285 | d->m_requiredFields.reset(new kMandatoryFieldGroup(this)); | ||
247 | // currently, only sqlite need an external file | 286 | // currently, only sqlite need an external file | ||
248 | if (m_dbDriver->requiresExternalFile()) { | 287 | if (d->m_dbDriver->requiresExternalFile()) { | ||
249 | m_sqliteSelected = true; | 288 | d->m_sqliteSelected = true; | ||
250 | m_widget->urlSqlite->setMode(KFile::Mode::File); | 289 | d->ui->urlSqlite->setMode(KFile::Mode::File); | ||
251 | m_widget->urlSqlite->setEnabled(true); | 290 | d->ui->urlSqlite->setEnabled(true); | ||
252 | m_requiredFields->add(m_widget->urlSqlite); | 291 | d->m_requiredFields->add(d->ui->urlSqlite); | ||
253 | 292 | | |||
254 | m_widget->textDbName->setEnabled(false); | 293 | d->ui->textDbName->setEnabled(false); | ||
255 | m_widget->textHostName->setEnabled(false); | 294 | d->ui->textHostName->setEnabled(false); | ||
256 | m_widget->textUserName->setEnabled(false); | 295 | d->ui->textUserName->setEnabled(false); | ||
257 | } else { // not sqlite3 | 296 | } else { // not sqlite3 | ||
258 | m_sqliteSelected = false; | 297 | d->m_sqliteSelected = false; | ||
259 | m_widget->urlSqlite->setEnabled(false); | 298 | d->ui->urlSqlite->setEnabled(false); | ||
260 | m_widget->textDbName->setEnabled(true); | 299 | d->ui->textDbName->setEnabled(true); | ||
261 | m_widget->textHostName->setEnabled(true); | 300 | d->ui->textHostName->setEnabled(true); | ||
262 | m_widget->textUserName->setEnabled(true); | 301 | d->ui->textUserName->setEnabled(true); | ||
263 | m_requiredFields->add(m_widget->textDbName); | 302 | d->m_requiredFields->add(d->ui->textDbName); | ||
264 | m_requiredFields->add(m_widget->textHostName); | 303 | d->m_requiredFields->add(d->ui->textHostName); | ||
265 | m_requiredFields->add(m_widget->textUserName); | 304 | d->m_requiredFields->add(d->ui->textUserName); | ||
266 | m_widget->textDbName->setText("KMyMoney"); | 305 | d->ui->textDbName->setText("KMyMoney"); | ||
267 | m_widget->textHostName->setText("localhost"); | 306 | d->ui->textHostName->setText("localhost"); | ||
268 | m_widget->textUserName->setText(""); | 307 | d->ui->textUserName->setText(""); | ||
269 | m_widget->textUserName->setText(platformTools::osUsername()); | 308 | d->ui->textUserName->setText(platformTools::osUsername()); | ||
270 | m_widget->textPassword->setText(""); | 309 | d->ui->textPassword->setText(""); | ||
271 | } | 310 | } | ||
272 | 311 | | |||
273 | m_widget->textPassword->setEnabled(m_dbDriver->isPasswordSupported()); | 312 | d->ui->textPassword->setEnabled(d->m_dbDriver->isPasswordSupported()); | ||
274 | m_requiredFields->setOkButton(m_createTablesButton); | 313 | d->m_requiredFields->setOkButton(d->m_createTablesButton); | ||
275 | m_widget->textSQL->setEnabled(true); | 314 | d->ui->textSQL->setEnabled(true); | ||
276 | // check if we have a storage; if not, create a skeleton one | 315 | // check if we have a storage; if not, create a skeleton one | ||
277 | // we need a storage for MyMoneyDbDef to generate standard accounts | 316 | // we need a storage for MyMoneyDbDef to generate standard accounts | ||
278 | m_storage = new MyMoneySeqAccessMgr; | 317 | d->m_storage = new MyMoneySeqAccessMgr; | ||
279 | m_mustDetachStorage = true; | 318 | d->m_mustDetachStorage = true; | ||
280 | try { | 319 | try { | ||
281 | MyMoneyFile::instance()->attachStorage(m_storage); | 320 | MyMoneyFile::instance()->attachStorage(d->m_storage); | ||
282 | } catch (const MyMoneyException &) { | 321 | } catch (const MyMoneyException &) { | ||
283 | m_mustDetachStorage = false; // there is already a storage attached | 322 | d->m_mustDetachStorage = false; // there is already a storage attached | ||
284 | } | 323 | } | ||
285 | MyMoneyDbDef db; | 324 | MyMoneyDbDef db; | ||
286 | m_widget->textSQL->setText | 325 | d->ui->textSQL->setText | ||
287 | (db.generateSQL(m_dbDriver)); | 326 | (db.generateSQL(d->m_dbDriver)); | ||
288 | if (m_mustDetachStorage) { | 327 | if (d->m_mustDetachStorage) { | ||
289 | MyMoneyFile::instance()->detachStorage(); | 328 | MyMoneyFile::instance()->detachStorage(); | ||
290 | } | 329 | } | ||
291 | delete m_storage; | 330 | delete d->m_storage; | ||
292 | 331 | | |||
293 | m_saveSqlButton->setEnabled(true); | 332 | d->m_saveSqlButton->setEnabled(true); | ||
294 | connect(m_saveSqlButton, &QPushButton::clicked, this, &KGenerateSqlDlg::slotsaveSQL); | 333 | connect(d->m_saveSqlButton, &QPushButton::clicked, this, &KGenerateSqlDlg::slotsaveSQL); | ||
295 | connect(m_createTablesButton, &QPushButton::clicked, this, &KGenerateSqlDlg::slotcreateTables); | 334 | connect(d->m_createTablesButton, &QPushButton::clicked, this, &KGenerateSqlDlg::slotcreateTables); | ||
296 | } | 335 | } | ||
297 | 336 | | |||
298 | void KGenerateSqlDlg::slotHelp() | 337 | void KGenerateSqlDlg::slotHelp() | ||
Context not available. |