bool DatabaseTabWidget::readOnly(int index) { if (index == -1) { index = currentIndex(); } return indexDatabaseManagerStruct(index).readOnly; }
void DatabaseTabWidget::checkReloadDatabases() { QSet<QString> changedFiles; changedFiles = m_changedFiles.subtract(m_expectedFileChanges); m_changedFiles.clear(); if (changedFiles.isEmpty()) return; Q_FOREACH (DatabaseManagerStruct dbStruct, m_dbList) { QString filePath = dbStruct.filePath; Database * db = dbStruct.dbWidget->database(); if (!changedFiles.contains(filePath)) continue; QFileInfo fi(filePath); QDateTime lastModified = fi.lastModified(); if (dbStruct.lastModified == lastModified) continue; DatabaseWidget::Mode mode = dbStruct.dbWidget->currentMode(); if (mode == DatabaseWidget::None || mode == DatabaseWidget::LockedMode || !db->hasKey()) continue; ReloadBehavior reloadBehavior = ReloadBehavior(config()->get("ReloadBehavior").toInt()); if ( (reloadBehavior == AlwaysAsk) || (reloadBehavior == ReloadUnmodified && mode == DatabaseWidget::EditMode) || (reloadBehavior == ReloadUnmodified && dbStruct.modified)) { int res = QMessageBox::warning(this, fi.exists() ? tr("Database file changed") : tr("Database file removed"), tr("Do you want to discard your changes and reload?"), QMessageBox::Yes|QMessageBox::No); if (res == QMessageBox::No) continue; } if (fi.exists()) { //Ignore/cancel all edits dbStruct.dbWidget->switchToView(false); dbStruct.modified = false; //Save current group/entry Uuid currentGroup; if (Group* group = dbStruct.dbWidget->currentGroup()) currentGroup = group->uuid(); Uuid currentEntry; if (Entry* entry = dbStruct.dbWidget->entryView()->currentEntry()) currentEntry = entry->uuid(); QString searchText = dbStruct.dbWidget->searchText(); bool caseSensitive = dbStruct.dbWidget->caseSensitiveSearch(); bool allGroups = dbStruct.dbWidget->isAllGroupsSearch(); //Reload updated db CompositeKey key = db->key(); int tabPos = databaseIndex(db); closeDatabase(db); openDatabase(filePath, QString(), QString(), key, tabPos); //Restore current group/entry dbStruct = indexDatabaseManagerStruct(count() - 1); if (dbStruct.dbWidget && dbStruct.dbWidget->currentMode() == DatabaseWidget::ViewMode) { Database * db = dbStruct.dbWidget->database(); if (!currentGroup.isNull()) if (Group* group = db->resolveGroup(currentGroup)) dbStruct.dbWidget->groupView()->setCurrentGroup(group); if (!searchText.isEmpty()) dbStruct.dbWidget->search(searchText, caseSensitive, allGroups); if (!currentEntry.isNull()) if (Entry* entry = db->resolveEntry(currentEntry)) dbStruct.dbWidget->entryView()->setCurrentEntry(entry); } } else { //Ignore/cancel all edits dbStruct.dbWidget->switchToView(false); dbStruct.modified = false; //Close database closeDatabase(dbStruct.dbWidget->database()); } }