Ejemplo n.º 1
0
bool DatabaseTabWidget::readOnly(int index)
{
    if (index == -1) {
        index = currentIndex();
    }

    return indexDatabaseManagerStruct(index).readOnly;
}
Ejemplo n.º 2
0
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());
        }
    }