diff --git a/widgets/MW_menu.cpp b/widgets/MW_menu.cpp index 98e7d29b..2f72434d 100644 --- a/widgets/MW_menu.cpp +++ b/widgets/MW_menu.cpp @@ -180,16 +180,6 @@ void MainWindow::init_menu() setItemEnabled(Database.isOpen()); } -int MainWindow::changeDB(QString fname) -{ - if (fname.isEmpty()) - return 1; - close_database(); - if (!database_model::isRemoteDB(fname)) - homedir = QFileInfo(fname).canonicalPath(); - return init_database(fname); -} - void MainWindow::update_history_menu() { QStringList hist = history.get(); @@ -212,7 +202,7 @@ void MainWindow::update_history_menu() void MainWindow::open_database(QAction* a) { - changeDB(a->data().toString()); + init_database(a->data().toString()); } void MainWindow::new_database() @@ -225,7 +215,7 @@ void MainWindow::new_database() // in Qt's OS X file open dialog, // the filename actually ends with that extension. // Otherwise usability breaks in jarring ways. - changeDB(getFullFilename(fname, selectedFilter)); + init_database(getFullFilename(fname, selectedFilter)); } void MainWindow::load_database() @@ -233,7 +223,7 @@ void MainWindow::load_database() load_db l; QString fname = QFileDialog::getOpenFileName(this, l.caption, homedir, l.filter); - changeDB(fname); + init_database(fname); } void MainWindow::setOptions() diff --git a/widgets/MainWindow.cpp b/widgets/MainWindow.cpp index 3632e8d4..61456337 100644 --- a/widgets/MainWindow.cpp +++ b/widgets/MainWindow.cpp @@ -551,6 +551,7 @@ void MainWindow::openRemoteSqlDB() enum open_result MainWindow::init_database(const QString &name, const Passwd &pass) { + close_database(); try { Database.open(name, pass); return init_database(); @@ -567,6 +568,10 @@ enum open_result MainWindow::init_database() { if (!Database.isOpen()) return open_abort; + + if (!database_model::isRemoteDB(Database.name())) + homedir = QFileInfo(Database.name()).canonicalPath(); + setItemEnabled(true); dbindex->setText(tr("Database") + ": " + compressFilename(Database.name())); @@ -623,13 +628,13 @@ void MainWindow::close_database() .arg(tabView->currentIndex()); history.addEntry(Database.name()); + foreach(XcaTreeView *v, views) + v->setModel(NULL); Database.close(); setItemEnabled(false); dbindex->clear(); update_history_menu(); - foreach(XcaTreeView *v, views) - v->setModel(NULL); enableTokenMenu(pkcs11::libraries.loaded()); } diff --git a/widgets/MainWindow.h b/widgets/MainWindow.h index 473e3d4f..fd0c4280 100644 --- a/widgets/MainWindow.h +++ b/widgets/MainWindow.h @@ -79,7 +79,6 @@ class MainWindow: public QMainWindow, public Ui::MainWindow NIDlist *read_nidlist(QString name); QLabel *statusLabel; QString homedir; - int changeDB(QString fname); void keyPressEvent(QKeyEvent *e); void update_history_menu(); diff --git a/widgets/OpenDb.cpp b/widgets/OpenDb.cpp index 7fe67643..1761e797 100644 --- a/widgets/OpenDb.cpp +++ b/widgets/OpenDb.cpp @@ -94,7 +94,7 @@ OpenDb::OpenDb(QWidget *parent, const QString &db) if (database_model::isRemoteDB(db)) { setupDatabaseName(db); sqlite = false; - show_connection_settings = false; + show_connection_settings = true; } else if (hasSqLite() && !db.isEmpty()) { dbName->setText(db); sqlite = true; diff --git a/widgets/XcaProxyModel.cpp b/widgets/XcaProxyModel.cpp index 2bd62456..f7bd342d 100644 --- a/widgets/XcaProxyModel.cpp +++ b/widgets/XcaProxyModel.cpp @@ -11,7 +11,7 @@ bool XcaProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const { - db_base *db = (db_base *)sourceModel(); + db_base *db = dynamic_cast(sourceModel()); if (!db) return QSortFilterProxyModel::lessThan(left, right); @@ -51,6 +51,8 @@ bool XcaProxyModel::lessThan(const QModelIndex &left, bool XcaProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { + if (!sourceModel()) + return false; QModelIndex idx = sourceModel()->index(sourceRow, 0, sourceParent); return sourceModel()->data(idx, Qt::UserRole).toBool(); } diff --git a/widgets/XcaTreeView.cpp b/widgets/XcaTreeView.cpp index c6378201..9d6fb3cc 100644 --- a/widgets/XcaTreeView.cpp +++ b/widgets/XcaTreeView.cpp @@ -96,7 +96,7 @@ void XcaTreeView::setModel(QAbstractItemModel *model) basemodel = dynamic_cast(model); proxy->setSourceModel(model); - QTreeView::setModel(proxy); + QTreeView::setModel(model ? proxy : NULL); if (basemodel) { setRootIsDecorated(basemodel->treeViewMode());