From a5b034d4a9c44f9bc1e83b01de82530f8fc63013 Mon Sep 17 00:00:00 2001 From: Unit 193 Date: Sat, 4 Apr 2015 14:41:04 -0400 Subject: Imported Upstream version 3.0.4 --- .../guiSQLiteStudio/common/ipvalidator.cpp | 95 + SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.h | 35 + .../completer/completeritemdelegate.cpp | 29 +- .../guiSQLiteStudio/completer/completerwindow.cpp | 2 +- .../guiSQLiteStudio/datagrid/sqlqueryitem.cpp | 2 +- .../guiSQLiteStudio/datagrid/sqlquerymodel.cpp | 77 +- .../guiSQLiteStudio/datagrid/sqlquerymodel.h | 15 +- .../datagrid/sqlquerymodelcolumn.cpp | 6 +- .../guiSQLiteStudio/datagrid/sqlquerymodelcolumn.h | 1 + .../guiSQLiteStudio/datagrid/sqlqueryview.cpp | 145 +- .../guiSQLiteStudio/datagrid/sqlqueryview.h | 3 + SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp | 17 +- SQLiteStudio3/guiSQLiteStudio/dblistmodel.h | 6 + SQLiteStudio3/guiSQLiteStudio/dbobjlistmodel.cpp | 21 +- SQLiteStudio3/guiSQLiteStudio/dbobjlistmodel.h | 3 +- SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.ui | 2 +- .../guiSQLiteStudio/dbtree/dbtreemodel.cpp | 16 +- .../guiSQLiteStudio/dialogs/columndialog.ui | 6 + .../guiSQLiteStudio/dialogs/configdialog.cpp | 2 +- SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.cpp | 173 +- SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.h | 9 +- SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.ui | 255 ++- .../guiSQLiteStudio/dialogs/exportdialog.cpp | 17 +- .../guiSQLiteStudio/dialogs/exportdialog.h | 1 + .../guiSQLiteStudio/dialogs/importdialog.cpp | 13 +- .../guiSQLiteStudio/dialogs/importdialog.ui | 28 +- .../guiSQLiteStudio/dialogs/triggerdialog.cpp | 31 +- .../guiSQLiteStudio/dialogs/triggerdialog.h | 5 + SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro | 6 +- SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.qrc | 2 + SQLiteStudio3/guiSQLiteStudio/iconmanager.h | 3 +- SQLiteStudio3/guiSQLiteStudio/icons.qrc | 2 +- .../guiSQLiteStudio/img/database_invalid.png | Bin 692 -> 0 bytes SQLiteStudio3/guiSQLiteStudio/img/plus.png | Bin 0 -> 711 bytes SQLiteStudio3/guiSQLiteStudio/img/sort_ind_asc.png | Bin 376 -> 356 bytes .../guiSQLiteStudio/img/sort_ind_desc.png | Bin 383 -> 348 bytes SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp | 12 +- SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp | 18 + SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp | 9 + SQLiteStudio3/guiSQLiteStudio/taskbar.cpp | 67 + SQLiteStudio3/guiSQLiteStudio/taskbar.h | 6 + .../translations/guiSQLiteStudio_de.ts | 362 ++-- .../translations/guiSQLiteStudio_es.ts | 362 ++-- .../translations/guiSQLiteStudio_fr.qm | Bin 144642 -> 144539 bytes .../translations/guiSQLiteStudio_fr.ts | 384 ++-- .../translations/guiSQLiteStudio_pl.qm | Bin 139079 -> 140919 bytes .../translations/guiSQLiteStudio_pl.ts | 386 ++-- .../translations/guiSQLiteStudio_pt_BR.ts | 362 ++-- .../translations/guiSQLiteStudio_ru.qm | Bin 140399 -> 143567 bytes .../translations/guiSQLiteStudio_ru.ts | 388 ++-- .../translations/guiSQLiteStudio_sk.qm | Bin 27 -> 80073 bytes .../translations/guiSQLiteStudio_sk.ts | 1867 ++++++++++---------- .../translations/guiSQLiteStudio_zh_CN.qm | Bin 16 -> 33741 bytes .../translations/guiSQLiteStudio_zh_CN.ts | 1246 ++++++------- SQLiteStudio3/guiSQLiteStudio/uiconfig.h | 1 + SQLiteStudio3/guiSQLiteStudio/uidebug.cpp | 57 +- SQLiteStudio3/guiSQLiteStudio/uidebug.h | 15 +- SQLiteStudio3/guiSQLiteStudio/uiutils.cpp | 8 +- SQLiteStudio3/guiSQLiteStudio/uiutils.h | 2 +- .../guiSQLiteStudio/windows/editorwindow.cpp | 4 +- .../guiSQLiteStudio/windows/editorwindow.h | 2 +- .../guiSQLiteStudio/windows/tablewindow.cpp | 2 + 62 files changed, 3789 insertions(+), 2799 deletions(-) create mode 100644 SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.cpp create mode 100644 SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.h delete mode 100644 SQLiteStudio3/guiSQLiteStudio/img/database_invalid.png create mode 100644 SQLiteStudio3/guiSQLiteStudio/img/plus.png (limited to 'SQLiteStudio3/guiSQLiteStudio') diff --git a/SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.cpp b/SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.cpp new file mode 100644 index 0000000..35c8b75 --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.cpp @@ -0,0 +1,95 @@ +#include "ipvalidator.h" +#include + +QString IpValidator::reStr = "^%1(\\d%2)%1\\.%1(\\d%2)%1\\.%1(\\d%2)%1\\.%1(\\d%2)%1$"; + +IpValidator::IpValidator(QObject* parent) : + QValidator(parent) +{ +} + +IpValidator::~IpValidator() +{ +} + +QValidator::State IpValidator::validate(QString& input, int&) const +{ + QString regexp = getPattern(acceptWhiteSpaces, false, whitespaceCharacter); + QRegularExpression re(regexp); + QRegularExpressionMatch match = re.match(input); + if (!match.hasMatch()) + return Invalid; + + QString part; + int value; + bool ok; + for (int i = 1; i <= 4; i++) + { + part = match.captured(i); + if (part.isEmpty()) + { + if (acceptEmptyParts) + continue; + else + return Invalid; + } + + value = part.toInt(&ok); + if (!ok) + return Invalid; + + if (value > 255 || value < 0) + return Invalid; + } + + return Acceptable; +} + +bool IpValidator::getAcceptWhiteSpaces() const +{ + return acceptWhiteSpaces; +} + +void IpValidator::setAcceptWhiteSpaces(bool value) +{ + acceptWhiteSpaces = value; +} +bool IpValidator::getAcceptEmptyParts() const +{ + return acceptEmptyParts; +} + +void IpValidator::setAcceptEmptyParts(bool value) +{ + acceptEmptyParts = value; +} +QChar IpValidator::getWhitespaceCharacter() const +{ + return whitespaceCharacter; +} + +void IpValidator::setWhitespaceCharacter(const QChar& value) +{ + whitespaceCharacter = value; +} + +bool IpValidator::check(const QString& input, bool acceptWhiteSpaces) +{ + QString regexp = getPattern(acceptWhiteSpaces, true, ' '); + QRegularExpression re(regexp); + return re.match(input).hasMatch(); +} + +QString IpValidator::getPattern(bool acceptWhiteSpaces, bool requireFull, QChar whitespaceCharacter) +{ + QString countChar = requireFull ? "+" : "*"; + if (acceptWhiteSpaces) + { + if (whitespaceCharacter == ' ') + return reStr.arg("\\s*", countChar); + else + return reStr.arg(whitespaceCharacter + QString("*"), countChar); + } + else + return reStr.arg("", countChar); +} diff --git a/SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.h b/SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.h new file mode 100644 index 0000000..1c9ca4d --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.h @@ -0,0 +1,35 @@ +#ifndef IPVALIDATOR_H +#define IPVALIDATOR_H + +#include + +class IpValidator : public QValidator +{ + public: + IpValidator(QObject* parent = 0); + ~IpValidator(); + + State validate(QString& input, int&) const; + + bool getAcceptWhiteSpaces() const; + void setAcceptWhiteSpaces(bool value); + + bool getAcceptEmptyParts() const; + void setAcceptEmptyParts(bool value); + + QChar getWhitespaceCharacter() const; + void setWhitespaceCharacter(const QChar& value); + + static bool check(const QString& input, bool acceptWhiteSpaces = false); + + private: + static QString getPattern(bool acceptWhiteSpaces, bool requireFull, QChar whitespaceCharacter); + + bool acceptWhiteSpaces = false; + bool acceptEmptyParts = false; + QChar whitespaceCharacter = ' '; + + static QString reStr; +}; + +#endif // IPVALIDATOR_H diff --git a/SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp b/SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp index a0da399..3268960 100644 --- a/SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp @@ -1,5 +1,6 @@ #include "completeritemdelegate.h" #include "completermodel.h" +#include "common/unused.h" #include #include #include @@ -21,8 +22,7 @@ void CompleterItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& QStyleOptionViewItem opt = option; initStyleOption(&opt, index); - QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); - + paintBackground(painter, opt, index); paintIcon(painter, opt, index); paintText(painter, opt, index); } @@ -36,6 +36,25 @@ QSize CompleterItemDelegate::sizeHint(const QStyleOptionViewItem& option, const return size; } +void CompleterItemDelegate::paintBackground(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + UNUSED(index); + + painter->save(); + QPalette::ColorGroup cg = (option.state & QStyle::State_Enabled) ? QPalette::Normal : QPalette::Disabled; + if (cg == QPalette::Normal && !(option.state & QStyle::State_Active)) + cg = QPalette::Inactive; + + QColor bg = option.palette.color(cg, QPalette::Base); + if (option.state & QStyle::State_Selected) + bg = option.palette.color(cg, QPalette::Highlight); + + painter->setPen(Qt::NoPen); + painter->setBrush(bg); + painter->drawRect(option.rect); + painter->restore(); +} + void CompleterItemDelegate::paintIcon(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { QIcon icon = index.data(Qt::DecorationRole).value(); @@ -69,15 +88,9 @@ void CompleterItemDelegate::paintText(QPainter* painter, const QStyleOptionViewI QColor labelColor = option.palette.color(cg, QPalette::Link); if (option.state & QStyle::State_Selected) { -#ifdef Q_OS_WIN32 - prefixColor = option.palette.color(cg, QPalette::Text); - valueColor = option.palette.color(cg, QPalette::Text); - labelColor = option.palette.color(cg, QPalette::Text); -#else prefixColor = option.palette.color(cg, QPalette::HighlightedText); valueColor = option.palette.color(cg, QPalette::HighlightedText); labelColor = option.palette.color(cg, QPalette::HighlightedText); -#endif } // Using ascent() to measure usual height of the font, excluding anything below baseline. diff --git a/SQLiteStudio3/guiSQLiteStudio/completer/completerwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/completer/completerwindow.cpp index 34ae30b..544adca 100644 --- a/SQLiteStudio3/guiSQLiteStudio/completer/completerwindow.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/completer/completerwindow.cpp @@ -138,7 +138,7 @@ void CompleterWindow::changeEvent(QEvent *e) void CompleterWindow::keyPressEvent(QKeyEvent* e) { - if (e->key() == Qt::Key_Return) + if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) { accept(); return; diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp index 53227fd..9b8dd03 100644 --- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp @@ -94,7 +94,7 @@ bool SqlQueryItem::isDeletedRow() const void SqlQueryItem::setDeletedRow(bool isDeleted) { - if (isDeleted) + if (isDeleted && !getOldValue().isValid()) setOldValue(getValue()); QStandardItem::setData(QVariant(isDeleted), DataRole::DELETED); diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp index 7fe3a68..8024abf 100644 --- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include SqlQueryModel::SqlQueryModel(QObject *parent) : @@ -224,20 +225,21 @@ QList > SqlQueryModel::groupItemsByRows(const QList> SqlQueryModel::groupItemsByTable(const QList& items) +QHash > SqlQueryModel::groupItemsByTable(const QList& items) { - QHash> itemsByTable; - Table table; + QHash> itemsByTable; + AliasedTable table; foreach (SqlQueryItem* item, items) { if (item->getColumn()) { table.setDatabase(item->getColumn()->database.toLower()); table.setTable(item->getColumn()->table.toLower()); + table.setTableAlias(item->getColumn()->tableAlias.toLower()); itemsByTable[table] << item; } else - itemsByTable[Table()] << item; + itemsByTable[AliasedTable()] << item; } return itemsByTable; @@ -373,12 +375,16 @@ void SqlQueryModel::commitInternal(const QList& items) return; } + // Getting number of rows to be added and deleted, so we can update totalPages at the end + int numberOfItemsAdded = groupItemsByRows(findItems(SqlQueryItem::DataRole::NEW_ROW, true)).size(); + int numberOfItemsDeleted = groupItemsByRows(findItems(SqlQueryItem::DataRole::DELETED, true)).size(); + // Removing "commit error" mark from items that are going to be commited now for (SqlQueryItem* item : items) item->setCommitingError(false); // Grouping by row and commiting - QList > groupedItems = groupItemsByRows(items); + QList> groupedItems = groupItemsByRows(items); bool ok = true; foreach (const QList& itemsInRow, groupedItems) { @@ -433,6 +439,14 @@ void SqlQueryModel::commitInternal(const QList& items) dbNameToAttachNameMapForCommit.clear(); for (Db* dbToDetach : dbListToDetach) db->detach(dbToDetach); + + + // Updating added/deleted counts, to honor rows not deleted because of some errors + numberOfItemsAdded -= groupItemsByRows(findItems(SqlQueryItem::DataRole::NEW_ROW, true)).size(); + numberOfItemsDeleted -= groupItemsByRows(findItems(SqlQueryItem::DataRole::DELETED, true)).size(); + int itemsAddedDeletedDelta = numberOfItemsAdded - numberOfItemsDeleted; + + recalculateRowsAndPages(itemsAddedDeletedDelta); } void SqlQueryModel::rollbackInternal(const QList& items) @@ -497,7 +511,7 @@ bool SqlQueryModel::commitEditedRow(const QList& itemsInRow) Dialect dialect = db->getDialect(); - QHash> itemsByTable = groupItemsByTable(itemsInRow); + QHash> itemsByTable = groupItemsByTable(itemsInRow); // Values QString query; @@ -507,9 +521,9 @@ bool SqlQueryModel::commitEditedRow(const QList& itemsInRow) RowId rowId; RowId newRowId; CommitUpdateQueryBuilder queryBuilder; - QHashIterator> it(itemsByTable); + QHashIterator> it(itemsByTable); QList items; - Table table; + AliasedTable table; while (it.hasNext()) { it.next(); @@ -713,7 +727,7 @@ QList SqlQueryModel::loadRow(SqlResultsRowPtr row) RowId SqlQueryModel::getRowIdValue(SqlResultsRowPtr row, int columnIdx) { RowId rowId; - Table table = tablesForColumns[columnIdx]; + AliasedTable table = tablesForColumns[columnIdx]; QHash rowIdColumns = tableToRowIdColumn[table]; QHashIterator it(rowIdColumns); QString col; @@ -795,7 +809,7 @@ RowId SqlQueryModel::getNewRowId(const RowId& currentRowId, const QListgetRowIdResultColumns()) { table.setDatabase(resCol->dbName); table.setTable(resCol->table); + table.setTableAlias(resCol->tableAlias); tableToRowIdColumn[table] = resCol->queryExecutorAliasToColumn; totalRowIdCols += resCol->queryExecutorAliasToColumn.size(); } @@ -850,10 +865,10 @@ void SqlQueryModel::readColumnDetails() editionForbiddenGlobalReasons << SqlQueryModelColumn::convert(reason); // Reading all the details from query executor source tables - QHash tableDetails = readTableDetails(); + QHash tableDetails = readTableDetails(); // Preparing for processing - Table table; + AliasedTable table; Column column; TableDetails details; TableDetails::ColumnDetails colDetails; @@ -871,7 +886,7 @@ void SqlQueryModel::readColumnDetails() modelColumn->editionForbiddenReason += editionForbiddenGlobalReasons; // Getting details of given table and column - table = Table(modelColumn->database, modelColumn->table); + table = AliasedTable(modelColumn->database, modelColumn->table, modelColumn->tableAlias); column = Column(modelColumn->database, modelColumn->table, modelColumn->column); details = tableDetails[table]; @@ -906,15 +921,15 @@ void SqlQueryModel::readColumnDetails() } } -QHash SqlQueryModel::readTableDetails() +QHash SqlQueryModel::readTableDetails() { - QHash results; + QHash results; SqliteQueryPtr query; SqliteCreateTablePtr createTable; Dialect dialect = db->getDialect(); SchemaResolver resolver(getDb()); QString database; - Table table; + AliasedTable table; QString columnName; foreach (const QueryExecutor::SourceTablePtr& srcTable, queryExecutor->getSourceTables()) @@ -932,7 +947,7 @@ QHash SqlQueryModel::readTableDetails() // Table details TableDetails tableDetails; - table = {database, srcTable->table}; + table = {database, srcTable->table, srcTable->alias}; // Table constraints foreach (SqliteCreateTable::Constraint* tableConstr, createTable->constraints) @@ -965,18 +980,18 @@ QHash SqlQueryModel::readTableDetails() } -QList SqlQueryModel::getTablesForColumns() +QList SqlQueryModel::getTablesForColumns() { - QList
columnTables; - Table table; + QList columnTables; + AliasedTable table; foreach (SqlQueryModelColumnPtr column, columns) { if (column->editionForbiddenReason.size() > 0) { - columnTables << Table(); + columnTables << AliasedTable(); continue; } - table = Table(column->database, column->table); + table = AliasedTable(column->database, column->table, column->tableAlias); columnTables << table; } return columnTables; @@ -1034,7 +1049,10 @@ void SqlQueryModel::handleExecFinished(SqlQueryPtr results) bool rowsCountedManually = queryExecutor->isRowCountingRequired() || rowCount() < CFG_UI.General.NumberOfRowsPerPage.get(); bool countRes = false; if (rowsCountedManually) + { emit totalRowsAndPagesAvailable(); + emit storeExecutionInHistory(); + } else countRes = queryExecutor->countResults(); @@ -1080,6 +1098,7 @@ void SqlQueryModel::resultsCountingFinished(quint64 rowsAffected, quint64 rowsRe this->totalPages = totalPages; detachDatabases(); emit totalRowsAndPagesAvailable(); + emit storeExecutionInHistory(); } void SqlQueryModel::itemValueEdited(SqlQueryItem* item) @@ -1375,6 +1394,18 @@ QString SqlQueryModel::getDatabaseForCommit(const QString& database) return database; } +void SqlQueryModel::recalculateRowsAndPages(int rowsDelta) +{ + totalRowsReturned += rowsDelta; + + int rowsPerPage = CFG_UI.General.NumberOfRowsPerPage.get(); + totalPages = (int)qCeil(((double)totalRowsReturned) / ((double)rowsPerPage)); + emit totalRowsAndPagesAvailable(); + + if (rowCount() == 0) + reload(); +} + void SqlQueryModel::addNewRow() { int row = rowCount(); diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h index bdba29b..3e92bb2 100644 --- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h +++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h @@ -120,7 +120,7 @@ class GUI_API_EXPORT SqlQueryModel : public QStandardItemModel void setView(SqlQueryView* value); static QList> groupItemsByRows(const QList& items); - static QHash > groupItemsByTable(const QList& items); + static QHash > groupItemsByTable(const QList& items); protected: class CommitUpdateQueryBuilder : public RowIdConditionBuilder @@ -204,7 +204,7 @@ class GUI_API_EXPORT SqlQueryModel : public QStandardItemModel QList getTableColumnModels(const QString& table); void updateItem(SqlQueryItem* item, const QVariant& value, int columnIndex, const RowId& rowId); RowId getNewRowId(const RowId& currentRowId, const QList items); - void updateRowIdForAllItems(const Table& table, const RowId& rowId, const RowId& newRowId); + void updateRowIdForAllItems(const AliasedTable& table, const RowId& rowId, const RowId& newRowId); QueryExecutor* queryExecutor = nullptr; Db* db = nullptr; @@ -241,8 +241,8 @@ class GUI_API_EXPORT SqlQueryModel : public QStandardItemModel void updateColumnHeaderLabels(); void executeQueryInternal(); void internalExecutionStopped(); - QHash readTableDetails(); - QList
getTablesForColumns(); + QHash readTableDetails(); + QList getTablesForColumns(); QList getColumnEditionEnabledList(); QList toItemList(const QModelIndexList& indexes) const; bool commitRow(const QList& itemsInRow); @@ -258,6 +258,7 @@ class GUI_API_EXPORT SqlQueryModel : public QStandardItemModel Icon& getIconForIdx(int idx) const; void detachDatabases(); QString getDatabaseForCommit(const QString& database); + void recalculateRowsAndPages(int rowsDelta); QString query; bool explain = false; @@ -323,7 +324,7 @@ class GUI_API_EXPORT SqlQueryModel : public QStandardItemModel QueryExecutor::SortList sortOrder; QHash columnMap; - QHash> tableToRowIdColumn; + QHash> tableToRowIdColumn; QStringList headerColumns; int rowNumBase = 0; SqlQueryView* view = nullptr; @@ -342,7 +343,7 @@ class GUI_API_EXPORT SqlQueryModel : public QStandardItemModel * @brief tablesForColumns * List of tables associated to \link #columns by order index. */ - QList
tablesForColumns; + QList tablesForColumns; /** * @brief columnEditionStatus @@ -418,6 +419,8 @@ class GUI_API_EXPORT SqlQueryModel : public QStandardItemModel */ void totalRowsAndPagesAvailable(); + void storeExecutionInHistory(); + /** * @brief commitStatusChanged * @param commitAvailable Tells if there's anything to commit/rollback or not. diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp index 0966ede..3a2457c 100644 --- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp @@ -7,6 +7,7 @@ SqlQueryModelColumn::SqlQueryModelColumn(const QueryExecutor::ResultColumnPtr& r displayName = resultColumn->displayName; column = resultColumn->column; table = resultColumn->table; + tableAlias = resultColumn->tableAlias; database = resultColumn->database.isEmpty() ? "main": resultColumn->database; foreach (QueryExecutor::ColumnEditionForbiddenReason reason, resultColumn->editionForbiddenReasons) editionForbiddenReason << SqlQueryModelColumn::convert(reason); @@ -223,7 +224,10 @@ SqlQueryModelColumn::Constraint* SqlQueryModelColumn::Constraint::create(const Q int idx = tableConstraint->getAffectedColumnIdx(column); if (idx < 0 || tableConstraint->foreignKey->indexedColumns.size() <= idx) { - qWarning() << "Could not find FK column for definition:" << tableConstraint->detokenize(); + // This case is perfectly fine if there are for example 2 foreign keys on the table, + // for 2 different columns. For each of those columns there will be 1 FK + // that enters here. + //qWarning() << "Could not find FK column for definition:" << tableConstraint->detokenize(); return nullptr; } diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.h b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.h index fb55fe5..e0f11e0 100644 --- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.h +++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.h @@ -156,6 +156,7 @@ class GUI_API_EXPORT SqlQueryModelColumn QString column; QString table; QString database; + QString tableAlias; DataType dataType; QSet editionForbiddenReason; QList constraints; diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp index 1f08b30..23a4991 100644 --- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp @@ -11,6 +11,7 @@ #include "multieditor/multieditordialog.h" #include "uiconfig.h" #include "dialogs/sortdialog.h" +#include "services/notifymanager.h" #include #include #include @@ -21,6 +22,8 @@ #include #include #include +#include +#include CFG_KEYS_DEFINE(SqlQueryView) @@ -245,6 +248,59 @@ bool SqlQueryView::editInEditorIfNecessary(SqlQueryItem* item) return true; } +void SqlQueryView::paste(const QList >& data) +{ + QList selectedItems = getSelectedItems(); + if (selectedItems.isEmpty()) + { + notifyWarn(tr("No items selected to paste clipboard contents to.")); + return; + } + + qSort(selectedItems); + SqlQueryItem* topLeft = selectedItems.first(); + + int columnCount = getModel()->columnCount(); + int rowCount = getModel()->rowCount(); + int rowIdx = topLeft->row(); + int colIdx = topLeft->column(); + + SqlQueryItem* item = nullptr; + + foreach (const QList& cells, data) + { + // Check if we're out of rows range + if (rowIdx >= rowCount) + { + // No more rows available. + qDebug() << "Tried to paste more rows than available in the grid."; + break; + } + + foreach (const QVariant& cell, cells) + { + // Get current cell + if (colIdx >= columnCount) + { + // No more columns available. + qDebug() << "Tried to paste more columns than available in the grid."; + break; + } + item = getModel()->itemFromIndex(rowIdx, colIdx); + + // Set value to the cell + item->setValue(cell, false, false); + + // Go to next cell + colIdx++; + } + + // Go to next row, first cell + rowIdx++; + colIdx = topLeft->column(); + } +} + void SqlQueryView::updateCommitRollbackActions(bool enabled) { actionMap[COMMIT]->setEnabled(enabled); @@ -324,69 +380,80 @@ void SqlQueryView::copy() QList selectedItems = getSelectedItems(); QList > groupedItems = SqlQueryModel::groupItemsByRows(selectedItems); + QVariant itemValue; QStringList cells; QList rows; + QPair>> theDataPair; + QList> theData; + QList theDataRow; + foreach (const QList& itemsInRows, groupedItems) { foreach (SqlQueryItem* item, itemsInRows) - cells << item->getFullValue().toString(); + { + itemValue = item->getFullValue(); + cells << itemValue.toString(); + theDataRow << itemValue; + } rows << cells; cells.clear(); + + theData << theDataRow; + theDataRow.clear(); } + QMimeData* mimeData = new QMimeData(); QString tsv = TsvSerializer::serialize(rows); - qApp->clipboard()->setText(tsv); + mimeData->setText(tsv); + + QString md5 = QCryptographicHash::hash(tsv.toUtf8(), QCryptographicHash::Md5); + theDataPair.first = md5; + theDataPair.second = theData; + + QByteArray serializedData; + QDataStream stream(&serializedData, QIODevice::WriteOnly); + stream << theDataPair; + mimeData->setData(mimeDataId, serializedData); + + qApp->clipboard()->setMimeData(mimeData); } void SqlQueryView::paste() { - QList deserializedRows = TsvSerializer::deserialize(qApp->clipboard()->text()); - - QList selectedItems = getSelectedItems(); - qSort(selectedItems); - SqlQueryItem* topLeft = selectedItems.first(); + const QMimeData* mimeData = qApp->clipboard()->mimeData(); + if (mimeData->hasFormat(mimeDataId)) + { + QString tsv = mimeData->text(); + QString md5 = QCryptographicHash::hash(tsv.toUtf8(), QCryptographicHash::Md5); - int columnCount = getModel()->columnCount(); - int rowCount = getModel()->rowCount(); - int rowIdx = topLeft->row(); - int colIdx = topLeft->column(); + QPair>> theDataPair; + QByteArray serializedData = mimeData->data(mimeDataId); + QDataStream stream(&serializedData, QIODevice::ReadOnly); + stream >> theDataPair; - SqlQueryItem* item = nullptr; - - foreach (const QStringList& cells, deserializedRows) - { - // Check if we're out of rows range - if (rowIdx >= rowCount) + if (md5 == theDataPair.first) { - // No more rows available. - qDebug() << "Tried to paste more rows than available in the grid."; - break; + paste(theDataPair.second); + return; } + } - foreach (const QString& cell, cells) - { - // Get current cell - if (colIdx >= columnCount) - { - // No more columns available. - qDebug() << "Tried to paste more columns than available in the grid."; - break; - } - item = getModel()->itemFromIndex(rowIdx, colIdx); - - // Set value to the cell - item->setValue(cell, false, false); + QList deserializedRows = TsvSerializer::deserialize(mimeData->text()); - // Go to next cell - colIdx++; - } + QList dataRow; + QList> dataToPaste; + for (const QStringList& cells : deserializedRows) + { + for (const QString& cell : cells) + dataRow << cell; - // Go to next row, first cell - rowIdx++; - colIdx = topLeft->column(); + dataToPaste << dataRow; + dataRow.clear(); } + + paste(dataToPaste); } void SqlQueryView::copyAs() diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h index a523200..f409559 100644 --- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h +++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h @@ -80,6 +80,9 @@ class GUI_API_EXPORT SqlQueryView : public QTableView, public ExtActionContainer void setupActionsForMenu(SqlQueryItem* currentItem, const QList& selectedItems); void setupHeaderMenu(); bool editInEditorIfNecessary(SqlQueryItem* item); + void paste(const QList>& data); + + constexpr static const char* mimeDataId = "application/x-sqlitestudio-data-view-data"; SqlQueryItemDelegate* itemDelegate = nullptr; QMenu* contextMenu = nullptr; diff --git a/SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp b/SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp index af9da8f..8153fed 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp @@ -77,6 +77,8 @@ void DbListModel::setSortMode(const QString& sortMode) this->sortMode = SortMode::LikeDbTree; else if (sortMode == "Alphabetical") this->sortMode = SortMode::Alphabetical; + else if (sortMode == "AlphabeticalCaseInsensitive") + this->sortMode = SortMode::AlphabeticalCaseInsensitive; else this->sortMode = SortMode::ConnectionOrder; @@ -91,6 +93,8 @@ QString DbListModel::getSortModeString() const return "LikeDbTree"; case DbListModel::SortMode::Alphabetical: return "Alphabetical"; + case DbListModel::SortMode::AlphabeticalCaseInsensitive: + return "AlphabeticalCaseInsensitive"; case DbListModel::SortMode::ConnectionOrder: break; } @@ -119,6 +123,12 @@ void DbListModel::sort() qSort(dbList.begin(), dbList.end(), comparer); break; } + case DbListModel::SortMode::AlphabeticalCaseInsensitive: + { + AlphaComparer comparer(Qt::CaseInsensitive); + qSort(dbList.begin(), dbList.end(), comparer); + break; + } case DbListModel::SortMode::ConnectionOrder: break; } @@ -183,7 +193,12 @@ bool DbListModel::DbTreeComparer::operator()(Db* db1, Db* db2) return dbTreeOrder.indexOf(db1->getName()) < dbTreeOrder.indexOf(db2->getName()); } +DbListModel::AlphaComparer::AlphaComparer(Qt::CaseSensitivity cs) : + cs(cs) +{ +} + bool DbListModel::AlphaComparer::operator()(Db* db1, Db* db2) { - return db1->getName().compare(db2->getName()) < 0; + return db1->getName().compare(db2->getName(), cs) < 0; } diff --git a/SQLiteStudio3/guiSQLiteStudio/dblistmodel.h b/SQLiteStudio3/guiSQLiteStudio/dblistmodel.h index 57928df..c375674 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dblistmodel.h +++ b/SQLiteStudio3/guiSQLiteStudio/dblistmodel.h @@ -15,6 +15,7 @@ class GUI_API_EXPORT DbListModel : public QAbstractListModel { LikeDbTree, Alphabetical, + AlphabeticalCaseInsensitive, ConnectionOrder }; @@ -49,7 +50,12 @@ class GUI_API_EXPORT DbListModel : public QAbstractListModel class AlphaComparer { public: + AlphaComparer(Qt::CaseSensitivity cs = Qt::CaseSensitive); + bool operator()(Db* db1, Db* db2); + + private: + Qt::CaseSensitivity cs; }; void sort(); diff --git a/SQLiteStudio3/guiSQLiteStudio/dbobjlistmodel.cpp b/SQLiteStudio3/guiSQLiteStudio/dbobjlistmodel.cpp index 99d3f27..00914a1 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dbobjlistmodel.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/dbobjlistmodel.cpp @@ -14,12 +14,7 @@ QVariant DbObjListModel::data(const QModelIndex& index, int role) const return QVariant(); if (role == Qt::DisplayRole || role == Qt::EditRole) - { - if (sortMode == SortMode::Alphabetical) - return objectList[index.row()]; - else - return unsortedObjectList[index.row()]; - } + return objectList[index.row()]; return QVariant(); } @@ -84,7 +79,19 @@ void DbObjListModel::updateList() resolver.setIgnoreSystemObjects(!includeSystemObjects); objectList = resolver.getObjects(typeString().toLower()); unsortedObjectList = objectList; - qSort(objectList); + + switch (sortMode) + { + case SortMode::Alphabetical: + objectList.sort(); + break; + case SortMode::AlphabeticalCaseInsensitive: + objectList.sort(Qt::CaseInsensitive); + break; + case SortMode::LikeInDb: + break; + } + endResetModel(); } diff --git a/SQLiteStudio3/guiSQLiteStudio/dbobjlistmodel.h b/SQLiteStudio3/guiSQLiteStudio/dbobjlistmodel.h index cac1202..4ae3608 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dbobjlistmodel.h +++ b/SQLiteStudio3/guiSQLiteStudio/dbobjlistmodel.h @@ -14,7 +14,8 @@ class GUI_API_EXPORT DbObjListModel : public QAbstractListModel enum class SortMode { LikeInDb, - Alphabetical + Alphabetical, + AlphabeticalCaseInsensitive }; enum class ObjectType diff --git a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.ui b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.ui index 52b0c7b..755c9b0 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.ui +++ b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.ui @@ -14,7 +14,7 @@ false - QDockWidget::AllDockWidgetFeatures + QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea diff --git a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp index 281510f..a4e736f 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp @@ -222,15 +222,16 @@ void DbTreeModel::restoreGroup(const Config::DbGroupPtr& group, QList* dbLi } else { - // If db is managed by manager, it means it was successfully loaded. - // Otherwise there was a problem with the file, or with plugin for that database - // and we still want to have dbtree item for that database, we will just hide it. - // Later, when plugin is loaded, item might become visible. + db = DBLIST->getByName(group->referencedDbName); + + // Databases referenced in groups must exist on database list. If not, we ignore them. + // Even invalid (no plugin, no file) databases have entry in dblist. + if (!db) + return; + item = DbTreeItemFactory::createDb(group->referencedDbName, this); item->setDb(group->referencedDbName); - - db = DBLIST->getByName(group->referencedDbName); - if (db && dbList) + if (dbList) dbList->removeOne(db); } @@ -297,6 +298,7 @@ void DbTreeModel::dbUpdated(const QString& oldName, Db* db) item->setText(db->getName()); item->setDb(db->getName()); + item->updateDbIcon(); } void DbTreeModel::dbRemoved(Db* db) diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui index 2133aca..1ac6cbb 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui @@ -31,6 +31,9 @@ 0 + + Scale + @@ -48,6 +51,9 @@ 0 + + Precision + diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp index b22ee6e..1ff053f 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp @@ -1238,7 +1238,7 @@ void ConfigDialog::initPluginsPage() builtIn = PLUGINS->isBuiltIn(pluginName); title = PLUGINS->getTitle(pluginName); if (builtIn) - title += tr("%1 (built-in)", "plugins manager in configuration dialog").arg(title); + title = tr("%1 (built-in)", "plugins manager in configuration dialog").arg(title); item = new QTreeWidgetItem({title}); item->setCheckState(0, PLUGINS->isLoaded(pluginName) ? Qt::Checked : Qt::Unchecked); diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.cpp index a2a9c36..05d50af 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.cpp @@ -15,6 +15,7 @@ #include #include #include +#include DbDialog::DbDialog(Mode mode, QWidget *parent) : QDialog(parent), @@ -54,26 +55,6 @@ QString DbDialog::getName() return ui->nameEdit->text(); } -Db* DbDialog::getDb() -{ - if (ui->typeCombo->currentIndex() < 0) - return nullptr; - - Db* testDb = nullptr; - QHash options = collectOptions(); - QString path = ui->fileEdit->text(); - foreach (DbPlugin* plugin, dbPlugins) - { - if (options.contains(DB_PLUGIN) && options[DB_PLUGIN].toString() != plugin->getName()) - continue; - - testDb = plugin->getInstance("", path, options); - if (testDb) - return testDb; - } - return testDb; -} - bool DbDialog::isPermanent() { return ui->permamentCheckBox->isChecked(); @@ -95,17 +76,18 @@ void DbDialog::showEvent(QShowEvent *e) { if (db) { + disableTypeAutodetection = true; int idx = ui->typeCombo->findText(db->getTypeLabel()); ui->typeCombo->setCurrentIndex(idx); - ui->typeCombo->setEnabled(false); // converting to other type is in separate dialog, it's different feature ui->generateCheckBox->setChecked(false); ui->fileEdit->setText(db->getPath()); ui->nameEdit->setText(db->getName()); + disableTypeAutodetection = false; } else if (ui->typeCombo->count() > 0) { - int idx = ui->typeCombo->findText("SQLite3"); // we should have SQLite3 plugin + int idx = ui->typeCombo->findText("SQLite 3", Qt::MatchFixedString); // we should have SQLite 3 plugin if (idx > -1) ui->typeCombo->setCurrentIndex(idx); else @@ -126,24 +108,30 @@ void DbDialog::init() { ui->setupUi(this); - ui->browseButton->setIcon(ICONS.DATABASE_FILE); - dbPlugins = PLUGINS->getLoadedPlugins(); - foreach (DbPlugin* dbPlugin, dbPlugins) - { - ui->typeCombo->addItem(dbPlugin->getLabel()); - } + ui->browseCreateButton->setIcon(ICONS.PLUS); - ui->browseButton->setVisible(true); + for (DbPlugin* dbPlugin : PLUGINS->getLoadedPlugins()) + dbPlugins[dbPlugin->getLabel()] = dbPlugin; + + QStringList typeLabels; + typeLabels += dbPlugins.keys(); + typeLabels.sort(Qt::CaseInsensitive); + ui->typeCombo->addItems(typeLabels); + + ui->browseCreateButton->setVisible(true); ui->testConnIcon->setVisible(false); connect(ui->fileEdit, SIGNAL(textChanged(QString)), this, SLOT(fileChanged(QString))); connect(ui->nameEdit, SIGNAL(textChanged(QString)), this, SLOT(nameModified(QString))); connect(ui->generateCheckBox, SIGNAL(toggled(bool)), this, SLOT(generateNameSwitched(bool))); - connect(ui->browseButton, SIGNAL(clicked()), this, SLOT(browseClicked())); + connect(ui->browseCreateButton, SIGNAL(clicked()), this, SLOT(browseClicked())); + connect(ui->browseOpenButton, SIGNAL(clicked()), this, SLOT(browseClicked())); connect(ui->testConnButton, SIGNAL(clicked()), this, SLOT(testConnectionClicked())); connect(ui->typeCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(dbTypeChanged(int))); generateNameSwitched(true); + + layout()->setSizeConstraint(QLayout::SetFixedSize); } void DbDialog::updateOptions() @@ -153,10 +141,14 @@ void DbDialog::updateOptions() // Remove olds foreach (QWidget* w, optionWidgets) { - ui->gridLayout->removeWidget(w); + ui->optionsGrid->removeWidget(w); delete w; } - adjustSize(); + + customBrowseHandler = nullptr; + ui->pathGroup->setTitle(tr("File")); + ui->browseOpenButton->setToolTip(tr("Browse for existing database file on local computer")); + ui->browseCreateButton->setVisible(true); optionWidgets.clear(); optionKeyToWidget.clear(); @@ -166,31 +158,43 @@ void DbDialog::updateOptions() lastWidgetInTabOrder = ui->permamentCheckBox; // Retrieve new list - DbPlugin* plugin = nullptr; - if (dbPlugins.count() > 0) + if (ui->typeCombo->currentIndex() > -1) { - int idx = ui->typeCombo->currentIndex(); - if (idx > -1 ) + DbPlugin* plugin = dbPlugins[ui->typeCombo->currentText()]; + QList optList = plugin->getOptionsList(); + if (optList.size() > 0) { - plugin = dbPlugins[idx]; - QList optList = plugin->getOptionsList(); - if (optList.size() > 0) + // Add new options + int row = ADDITIONAL_ROWS_BEGIN_INDEX; + for (const DbPluginOption& opt : optList) { - // Add new options - int row = ADDITIONAL_ROWS_BEGIN_INDEX; - foreach (DbPluginOption opt, optList) - addOption(opt, row++); + addOption(opt, row); + row++; } } } - adjustSize(); + setUpdatesEnabled(true); } -void DbDialog::addOption(const DbPluginOption& option, int row) +void DbDialog::addOption(const DbPluginOption& option, int& row) { + if (option.type == DbPluginOption::CUSTOM_PATH_BROWSE) + { + // This option does not add any editor, but has it's own label for path edit. + row--; + ui->pathGroup->setTitle(option.label); + ui->browseCreateButton->setVisible(false); + if (!option.toolTip.isEmpty()) + ui->browseOpenButton->setToolTip(option.toolTip); + + customBrowseHandler = option.customBrowseHandler; + return; + } + QLabel* label = new QLabel(option.label, this); + label->setAlignment(Qt::AlignVCenter|Qt::AlignRight); QWidget* editor = nullptr; QWidget* editorHelper = nullptr; // TODO, based on plugins for Url handlers @@ -204,15 +208,15 @@ void DbDialog::addOption(const DbPluginOption& option, int row) optionKeyToWidget[option.key] = editor; optionKeyToType[option.key] = option.type; - ui->gridLayout->addWidget(label, row, 0); - ui->gridLayout->addWidget(editor, row, 1); + ui->optionsGrid->addWidget(label, row, 0); + ui->optionsGrid->addWidget(editor, row, 1); setTabOrder(lastWidgetInTabOrder, editor); lastWidgetInTabOrder = editor; if (editorHelper) { - ui->gridLayout->addWidget(editorHelper, row, 2); + ui->optionsGrid->addWidget(editorHelper, row, 2); optionWidgets << editorHelper; helperToKey[editorHelper] = option.key; @@ -307,6 +311,8 @@ QWidget *DbDialog::getEditor(const DbPluginOption& opt, QWidget*& editorHelper) connect(sb, SIGNAL(valueChanged(double)), this, SLOT(propertyChanged())); break; } + case DbPluginOption::CUSTOM_PATH_BROWSE: + return nullptr; // should not happen ever, asserted one stack level before default: // TODO plugin based handling of custom editors qWarning() << "Unhandled DbDialog option for creating editor."; @@ -344,6 +350,8 @@ QVariant DbDialog::getValueFrom(DbPluginOption::Type type, QWidget *editor) case DbPluginOption::CHOICE: value = dynamic_cast(editor)->currentText(); break; + case DbPluginOption::CUSTOM_PATH_BROWSE: + break; // should not happen ever default: // TODO plugin based handling of custom editors qWarning() << "Unhandled DbDialog option for value."; @@ -373,6 +381,8 @@ void DbDialog::setValueFor(DbPluginOption::Type type, QWidget *editor, const QVa case DbPluginOption::CHOICE: dynamic_cast(editor)->setCurrentText(value.toString()); break; + case DbPluginOption::CUSTOM_PATH_BROWSE: + break; // should not happen ever default: qWarning() << "Unhandled DbDialog option to set value."; // TODO plugin based handling of custom editors @@ -382,18 +392,19 @@ void DbDialog::setValueFor(DbPluginOption::Type type, QWidget *editor, const QVa void DbDialog::updateType() { + if (disableTypeAutodetection) + return; + QFileInfo file(ui->fileEdit->text()); if (!file.exists() || file.isDir()) - { - ui->typeCombo->setEnabled(true); return; - } - DbPlugin* validPlugin = nullptr; + QString currentPluginLabel = ui->typeCombo->currentText(); + QList validPlugins; QHash options; QString path = ui->fileEdit->text(); Db* probeDb = nullptr; - foreach (DbPlugin* plugin, dbPlugins) + for (DbPlugin* plugin : dbPlugins) { probeDb = plugin->getInstance("", path, options); if (probeDb) @@ -401,15 +412,15 @@ void DbDialog::updateType() delete probeDb; probeDb = nullptr; - validPlugin = plugin; - break; + if (plugin->getLabel() == currentPluginLabel) + return; // current plugin is among valid plugins, no need to change anything + + validPlugins << plugin; } } - if (validPlugin) - ui->typeCombo->setCurrentText(validPlugin->getLabel()); - - ui->typeCombo->setEnabled(!validPlugin); + if (validPlugins.size() > 0) + ui->typeCombo->setCurrentText(validPlugins.first()->getLabel()); } QHash DbDialog::collectOptions() @@ -424,7 +435,7 @@ QHash DbDialog::collectOptions() DbPlugin* plugin = nullptr; if (dbPlugins.count() > 0) { - plugin = dbPlugins[ui->typeCombo->currentIndex()]; + plugin = dbPlugins[ui->typeCombo->currentText()]; options[DB_PLUGIN] = plugin->getName(); } @@ -433,9 +444,32 @@ QHash DbDialog::collectOptions() bool DbDialog::testDatabase() { + if (ui->typeCombo->currentIndex() < 0) + return false; + QString path = ui->fileEdit->text(); - bool existed = QFile::exists(path); - bool res = getDb() != nullptr; + if (path.isEmpty()) + return false; + + QUrl url(path); + if (url.scheme().isEmpty()) + url.setScheme("file"); + + bool existed = false; + if (url.isLocalFile() && QFile::exists(path)) + existed = QFile::exists(path); + + QHash options = collectOptions(); + DbPlugin* plugin = dbPlugins[ui->typeCombo->currentText()]; + Db* testDb = plugin->getInstance("", path, options); + + bool res = false; + if (testDb) + { + res = true; + delete testDb; + } + if (!existed) { QFile file(path); @@ -522,10 +556,9 @@ void DbDialog::valueForNameGenerationChanged() if (!ui->generateCheckBox->isChecked()) return; - DbPlugin* plugin = nullptr; if (dbPlugins.count() > 0) { - plugin = dbPlugins[ui->typeCombo->currentIndex()]; + DbPlugin* plugin = dbPlugins[ui->typeCombo->currentText()]; QString generatedName = plugin->generateDbName(ui->fileEdit->text()); generatedName = generateUniqueName(generatedName, existingDatabaseNames); ui->nameEdit->setText(generatedName); @@ -549,7 +582,7 @@ void DbDialog::generateNameSwitched(bool checked) { if (checked) { - ui->nameEdit->setPlaceholderText(tr("The name will be auto-generated")); + ui->nameEdit->setPlaceholderText(tr("Auto-generated")); valueForNameGenerationChanged(); } else @@ -570,6 +603,14 @@ void DbDialog::fileChanged(const QString &arg1) void DbDialog::browseClicked() { + if (customBrowseHandler) + { + customBrowseHandler(ui->fileEdit->text()); + return; + } + + bool createMode = (sender() == ui->browseCreateButton); + QFileInfo fileInfo(ui->fileEdit->text()); QString dir; if (ui->fileEdit->text().isEmpty()) @@ -581,7 +622,7 @@ void DbDialog::browseClicked() else dir = getFileDialogInitPath(); - QString path = getDbPath(dir); + QString path = getDbPath(createMode, dir); if (path.isNull()) return; diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.h b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.h index b2c0d68..ce73b11 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.h +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.h @@ -47,12 +47,11 @@ class GUI_API_EXPORT DbDialog : public QDialog private: void init(); void updateOptions(); - void addOption(const DbPluginOption& option, int row); + void addOption(const DbPluginOption& option, int& row); QWidget* getEditor(const DbPluginOption& opt, QWidget *&editorHelper); QVariant getValueFrom(DbPluginOption::Type type, QWidget* editor); void setValueFor(DbPluginOption::Type type, QWidget* editor, const QVariant& value); void updateType(); - Db* getDb(); bool testDatabase(); bool validate(); void updateState(); @@ -61,14 +60,16 @@ class GUI_API_EXPORT DbDialog : public QDialog Mode mode; QStringList existingDatabaseNames; Db* db = nullptr; - QList dbPlugins; + QHash dbPlugins; QList optionWidgets; QHash optionKeyToWidget; QHash optionKeyToType; QHash helperToKey; QWidget* lastWidgetInTabOrder = nullptr; + DbPluginOption::CustomBrowseHandler customBrowseHandler = nullptr; + bool disableTypeAutodetection = false; - static const constexpr int ADDITIONAL_ROWS_BEGIN_INDEX = 4; + static const constexpr int ADDITIONAL_ROWS_BEGIN_INDEX = 1; private slots: void typeChanged(int index); diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.ui index fb53428..6f35079 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.ui +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbdialog.ui @@ -7,7 +7,7 @@ 0 0 455 - 200 + 365 @@ -21,127 +21,124 @@ - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Database driver - - - - - - - - - true - - - - - - - Name - - - - - - - Type - - - - - - - - - - - - Browse for database file on local computer - - - - - - - - - - - - File - - - - - - - Generate name basing on file path - - - - - - true - - - - - - - Permanent - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - <p>Enable this if you want the database to be stored in configuration file and restored every time SQLiteStudio is started.</p> - - - - - - true - - - - - - + + + Database type + + + + + + Database driver + + + + + + + + + + File + + + + + + + + + Create new database file + + + + + + + :/icons/img/plus.png:/icons/img/plus.png + + + + + + + + + + + :/icons/img/open_sql_file.png:/icons/img/open_sql_file.png + + + + + + + + + + Name (on the list) + + + + + + true + + + + + + + Generate name basing on file path + + + Generate automatically + + + true + + + + + + + + + + Options + + + + + + <p>Enable this if you want the database to be stored in configuration file and restored every time SQLiteStudio is started.</p> + + + Permanent (keep it in configuration) + + + true + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 360 + 1 + + + @@ -161,7 +158,7 @@ - Test database connection + Test connection @@ -190,15 +187,9 @@ - - fileEdit - browseButton - nameEdit - generateCheckBox - typeCombo - permamentCheckBox - - + + + buttonBox diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.cpp index e495dd9..91b4087 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.cpp @@ -124,6 +124,14 @@ void ExportDialog::setDatabaseMode(Db* db) this->db = db; } +void ExportDialog::setPreselectedDb(Db *db) +{ + if (!db->isOpen()) + return; + + this->db = db; +} + void ExportDialog::initModePage() { connect(ui->subjectDatabaseRadio, SIGNAL(clicked()), this, SLOT(updateExportMode())); @@ -146,10 +154,11 @@ void ExportDialog::initTablePage() dbListModel = new DbListModel(this); dbListModel->setCombo(ui->exportTableDbNameCombo); - dbListModel->setSortMode(DbListModel::SortMode::Alphabetical); + dbListModel->setSortMode(DbListModel::SortMode::AlphabeticalCaseInsensitive); tablesModel = new DbObjListModel(this); tablesModel->setType(DbObjListModel::ObjectType::TABLE); + tablesModel->setSortMode(DbObjListModel::SortMode::AlphabeticalCaseInsensitive); connect(this, SIGNAL(tablePageCompleteChanged()), ui->tablePage, SIGNAL(completeChanged())); } @@ -295,6 +304,9 @@ void ExportDialog::tablePageDisplayed() if (table.isNull()) // table mode selected by user, not forced by setTableMode(). { ui->exportTableDbNameCombo->setModel(dbListModel); + if (db) + ui->exportTableDbNameCombo->setCurrentText(db->getName()); + connect(ui->exportTableDbNameCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(updateDbTables())); ui->exportTableNameCombo->setModel(tablesModel); @@ -313,6 +325,9 @@ void ExportDialog::queryPageDisplayed() if (query.isNull()) // query mode selected by user, not forced by setQueryMode(). { ui->queryDatabaseCombo->setModel(dbListModel); + if (db) + ui->queryDatabaseCombo->setCurrentText(db->getName()); + connect(ui->queryDatabaseCombo, SIGNAL(currentIndexChanged(int)), ui->queryPage, SIGNAL(completeChanged())); } diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.h b/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.h index 296aa4d..0471172 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.h +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.h @@ -26,6 +26,7 @@ class GUI_API_EXPORT ExportDialog : public QWizard void setTableMode(Db* db, const QString& table); void setQueryMode(Db* db, const QString& query); void setDatabaseMode(Db* db); + void setPreselectedDb(Db* db); int nextId() const; bool isPluginConfigValid() const; diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.cpp index 32ec30f..c16b90e 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.cpp @@ -83,12 +83,13 @@ void ImportDialog::initTablePage() { dbListModel = new DbListModel(this); dbListModel->setCombo(ui->dbNameCombo); - dbListModel->setSortMode(DbListModel::SortMode::Alphabetical); + dbListModel->setSortMode(DbListModel::SortMode::AlphabeticalCaseInsensitive); ui->dbNameCombo->setModel(dbListModel); tablesModel = new DbObjListModel(this); tablesModel->setIncludeSystemObjects(false); tablesModel->setType(DbObjListModel::ObjectType::TABLE); + tablesModel->setSortMode(DbObjListModel::SortMode::AlphabeticalCaseInsensitive); ui->tableNameCombo->setModel(tablesModel); refreshTables(); @@ -166,14 +167,6 @@ void ImportDialog::updateStandardOptions() bool showFileName = currentPlugin->standardOptionsToEnable().testFlag(ImportManager::FILE_NAME); bool showCodec = currentPlugin->standardOptionsToEnable().testFlag(ImportManager::CODEC); - if (!showFileName && !showCodec) - { - ui->dsOptionsGroup->setVisible(false); - return; - } - - ui->dsOptionsGroup->setVisible(true); - int row = 0; QGridLayout* grid = dynamic_cast(ui->dsOptionsGroup->layout()); if (showFileName) @@ -355,6 +348,8 @@ void ImportDialog::accept() if (currentPlugin->standardOptionsToEnable().testFlag(ImportManager::CODEC)) stdConfig.codec = ui->codecCombo->currentText(); + stdConfig.ignoreErrors = ui->ignoreErrorsCheck->isChecked(); + Db* db = DBLIST->getByName(ui->dbNameCombo->currentText());; if (!db) { diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui index c8756f7..dfa8ace 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui @@ -103,8 +103,8 @@ 0 0 - 479 - 310 + 269 + 280 @@ -141,13 +141,6 @@ Options - - - - Input file: - - - @@ -183,9 +176,26 @@ + + + + Input file: + + + + + + + <p>If enabled, any constraint violation, or invalid data format (wrong column count), or any other problem encountered during import will be ignored and the importing will be continued.</p> + + + Ignore errors + + + diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.cpp index 0707bd3..12baafd 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.cpp @@ -19,6 +19,9 @@ #include #include +QStringList TriggerDialog::tableEventNames; +QStringList TriggerDialog::viewEventNames; + TriggerDialog::TriggerDialog(Db* db, QWidget *parent) : QDialog(parent), db(db), @@ -54,6 +57,18 @@ void TriggerDialog::setTrigger(const QString& name) initTrigger(); } +void TriggerDialog::staticInit() +{ + tableEventNames = QStringList({ + SqliteCreateTrigger::time(SqliteCreateTrigger::Time::null), + SqliteCreateTrigger::time(SqliteCreateTrigger::Time::AFTER), + SqliteCreateTrigger::time(SqliteCreateTrigger::Time::BEFORE) + }); + viewEventNames = QStringList({ + SqliteCreateTrigger::time(SqliteCreateTrigger::Time::INSTEAD_OF) + }); +} + void TriggerDialog::changeEvent(QEvent *e) { QDialog::changeEvent(e); @@ -99,6 +114,9 @@ void TriggerDialog::init() }); } + // Event combo - default values + ui->whenCombo->addItems(tableEventNames + viewEventNames); + // Precondition connect(ui->preconditionCheck, SIGNAL(clicked()), this, SLOT(updateState())); connect(ui->preconditionEdit, SIGNAL(errorsChecked(bool)), this, SLOT(updateValidation())); @@ -128,22 +146,19 @@ void TriggerDialog::initTrigger() } // Event combo + QString eventValue = ui->whenCombo->currentText(); + ui->whenCombo->clear(); if (forTable) { - ui->whenCombo->addItems({ - SqliteCreateTrigger::time(SqliteCreateTrigger::Time::null), - SqliteCreateTrigger::time(SqliteCreateTrigger::Time::BEFORE), - SqliteCreateTrigger::time(SqliteCreateTrigger::Time::AFTER) - }); + ui->whenCombo->addItems(tableEventNames); } else { - ui->whenCombo->addItems({ - SqliteCreateTrigger::time(SqliteCreateTrigger::Time::INSTEAD_OF) - }); + ui->whenCombo->addItems(viewEventNames); ui->whenCombo->setEnabled(false); ui->onLabel->setText(tr("On view:")); } + ui->whenCombo->setCurrentText(eventValue); if (!view.isNull() || !table.isNull()) { diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.h b/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.h index d8e7ed4..712ea5e 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.h +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.h @@ -22,6 +22,8 @@ class GUI_API_EXPORT TriggerDialog : public QDialog void setParentView(const QString& name); void setTrigger(const QString& name); + static void staticInit(); + protected: void changeEvent(QEvent *e); @@ -35,6 +37,9 @@ class GUI_API_EXPORT TriggerDialog : public QDialog QString getTargetObjectName() const; void rebuildTrigger(); + static QStringList tableEventNames; + static QStringList viewEventNames; + QString originalTriggerName; QString trigger; QString table; diff --git a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro index 55b7380..e32aff5 100644 --- a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro +++ b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro @@ -174,7 +174,8 @@ SOURCES +=\ dialogs/newversiondialog.cpp \ dialogs/quitconfirmdialog.cpp \ common/datawidgetmapper.cpp \ - dialogs/languagedialog.cpp + dialogs/languagedialog.cpp \ + common/ipvalidator.cpp HEADERS += mainwindow.h \ iconmanager.h \ @@ -318,7 +319,8 @@ HEADERS += mainwindow.h \ guiSQLiteStudio_global.h \ dialogs/quitconfirmdialog.h \ common/datawidgetmapper.h \ - dialogs/languagedialog.h + dialogs/languagedialog.h \ + common/ipvalidator.h FORMS += mainwindow.ui \ dbtree/dbtree.ui \ diff --git a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.qrc b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.qrc index 40dfe53..4f33880 100644 --- a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.qrc +++ b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.qrc @@ -3,5 +3,7 @@ translations/guiSQLiteStudio_pl.qm translations/guiSQLiteStudio_ru.qm translations/guiSQLiteStudio_fr.qm + translations/guiSQLiteStudio_sk.qm + translations/guiSQLiteStudio_zh_CN.qm diff --git a/SQLiteStudio3/guiSQLiteStudio/iconmanager.h b/SQLiteStudio3/guiSQLiteStudio/iconmanager.h index 8a30d99..cf4f2ec 100644 --- a/SQLiteStudio3/guiSQLiteStudio/iconmanager.h +++ b/SQLiteStudio3/guiSQLiteStudio/iconmanager.h @@ -84,9 +84,9 @@ class GUI_API_EXPORT IconManager : public QObject DEF_ICON(DATABASE_EXPORT_WIZARD, "database_export_wizard") DEF_ICON(DATABASE_FILE, "database_file") DEF_ICON(DATABASE_IMPORT_WIZARD, "database_import_wizard") - DEF_ICO2(DATABASE_INVALID, DATABASE, WARNING) DEF_ICON(DATABASE_NETWORK, "database_network") DEF_ICON(DATABASE_OFFLINE, "database_offline") + DEF_ICO2(DATABASE_INVALID, DATABASE_OFFLINE, WARNING) DEF_ICON(DATABASE_ONLINE, "database_online") DEF_ICON(DATABASE_RELOAD, "database_reload") DEF_ICON(DDL_HISTORY, "ddl_history") @@ -150,6 +150,7 @@ class GUI_API_EXPORT IconManager : public QObject DEF_ICON(PAGE_PREV, "page_prev") DEF_ICO3(MOVE_LEFT, PAGE_PREV) DEF_ICO3(MOVE_RIGHT, PAGE_NEXT) + DEF_ICON(PLUS, "plus") DEF_ICON(RELOAD, "reload") DEF_ICON(RENAME_FN_ARG, "rename_fn_arg") DEF_ICO3(RENAME_DATATYPE, RENAME_FN_ARG) diff --git a/SQLiteStudio3/guiSQLiteStudio/icons.qrc b/SQLiteStudio3/guiSQLiteStudio/icons.qrc index d89afa9..6612814 100644 --- a/SQLiteStudio3/guiSQLiteStudio/icons.qrc +++ b/SQLiteStudio3/guiSQLiteStudio/icons.qrc @@ -38,7 +38,6 @@ img/database_disconnect.png img/database_export.png img/database_file.png - img/database_invalid.png img/database_network.png img/database_reload.png img/database.png @@ -191,5 +190,6 @@ img/close.png img/go_back.png img/reset_autoincrement.png + img/plus.png diff --git a/SQLiteStudio3/guiSQLiteStudio/img/database_invalid.png b/SQLiteStudio3/guiSQLiteStudio/img/database_invalid.png deleted file mode 100644 index 7ccd0a3..0000000 Binary files a/SQLiteStudio3/guiSQLiteStudio/img/database_invalid.png and /dev/null differ diff --git a/SQLiteStudio3/guiSQLiteStudio/img/plus.png b/SQLiteStudio3/guiSQLiteStudio/img/plus.png new file mode 100644 index 0000000..1138739 Binary files /dev/null and b/SQLiteStudio3/guiSQLiteStudio/img/plus.png differ diff --git a/SQLiteStudio3/guiSQLiteStudio/img/sort_ind_asc.png b/SQLiteStudio3/guiSQLiteStudio/img/sort_ind_asc.png index b8e6af1..7d30175 100644 Binary files a/SQLiteStudio3/guiSQLiteStudio/img/sort_ind_asc.png and b/SQLiteStudio3/guiSQLiteStudio/img/sort_ind_asc.png differ diff --git a/SQLiteStudio3/guiSQLiteStudio/img/sort_ind_desc.png b/SQLiteStudio3/guiSQLiteStudio/img/sort_ind_desc.png index 6d88b78..9427ceb 100644 Binary files a/SQLiteStudio3/guiSQLiteStudio/img/sort_ind_desc.png and b/SQLiteStudio3/guiSQLiteStudio/img/sort_ind_desc.png differ diff --git a/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp index fe61b95..373b21d 100644 --- a/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp @@ -571,10 +571,6 @@ FormManager* MainWindow::getFormManager() const void MainWindow::setupDefShortcuts() { BIND_SHORTCUTS(MainWindow, Action); - - QList bindings = QKeySequence::keyBindings(QKeySequence::Close); - if (bindings.size() > 0) - actionMap[Action::CLOSE_WINDOW]->setShortcut(bindings.first()); } void MainWindow::openSqlEditorSlot() @@ -627,6 +623,10 @@ void MainWindow::exportAnything() } ExportDialog dialog(this); + Db* db = DBTREE->getSelectedOpenDb(); + if (db) + dialog.setPreselectedDb(db); + dialog.exec(); } @@ -639,6 +639,10 @@ void MainWindow::importAnything() } ImportDialog dialog(this); + Db* db = DBTREE->getSelectedOpenDb(); + if (db) + dialog.setDb(db); + dialog.exec(); } diff --git a/SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp b/SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp index d53874c..0d07bcb 100644 --- a/SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp @@ -4,6 +4,7 @@ #include "mdichild.h" #include "mdiwindow.h" #include "taskbar.h" +#include "uiconfig.h" #include #include #include @@ -35,6 +36,12 @@ MdiWindow *MdiArea::addSubWindow(MdiChild *mdiChild) if (!mdiChild->handleInitialFocus()) mdiChild->setFocus(); + if (taskBar) + { + if (taskBar->getTasks().size() == 1 && CFG_UI.General.OpenMaximized.get()) + mdiWin->setWindowState(mdiWin->windowState()|Qt::WindowMaximized); + } + emit windowListChanged(); return mdiWin; } @@ -111,12 +118,23 @@ void MdiArea::windowDestroyed(MdiWindow* window) return; QAction* action = winToActionMap[window]; + QAction* taskToSelect = nullptr; + if (!MAINWINDOW->isClosingApp()) + { + taskToSelect = taskBar->getNextTask(action); + if (!taskToSelect) + taskToSelect = taskBar->getPrevTask(action); + } + winToActionMap.remove(window); actionToWinMap.remove(action); taskBar->removeTask(action); delete action; emit windowListChanged(); + + if (taskToSelect) + taskBar->setActiveTask(taskToSelect); } void MdiArea::windowActivated() diff --git a/SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp index 0e8d298..f2257c6 100644 --- a/SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp @@ -5,6 +5,7 @@ #include "mainwindow.h" #include "services/dbmanager.h" #include "db/db.h" +#include "uiconfig.h" #include #include #include @@ -143,6 +144,14 @@ void MdiWindow::changeEvent(QEvent* event) } else QMdiSubWindow::changeEvent(event); + + if (!MAINWINDOW->isClosingApp()) + { + bool wasMaximized = changeEvent->oldState().testFlag(Qt::WindowMaximized); + bool isMaximized = windowState().testFlag(Qt::WindowMaximized); + if (wasMaximized != isMaximized && CFG_UI.General.OpenMaximized.get() != isMaximized) + CFG_UI.General.OpenMaximized.set(isMaximized); + } } void MdiWindow::closeEvent(QCloseEvent* e) diff --git a/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp b/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp index 359dc29..b63c58d 100644 --- a/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp @@ -65,6 +65,22 @@ void TaskBar::mousePressed() dragStartTask->trigger(); } +void TaskBar::taskBarMenuAboutToShow() +{ + // This is a hack. We want to display "Ctrl+W" shortcut to the user in this menu, but assigning that shortcut + // permanently to the action makes it ambigous to Qt, because it's already a standard shortcut, + // thus making Qt confused and this shortcut working only every second time. + // Here we assign the shortcut only for the time of displaying the menu. Rest of the time it's not assigned. + QList bindings = QKeySequence::keyBindings(QKeySequence::Close); + if (bindings.size() > 0) + MAINWINDOW->getAction(MainWindow::Action::CLOSE_WINDOW)->setShortcut(bindings.first()); +} + +void TaskBar::taskBarMenuAboutToHide() +{ + MAINWINDOW->getAction(MainWindow::Action::CLOSE_WINDOW)->setShortcut(QKeySequence()); +} + int TaskBar::getActiveTaskIdx() { QAction* checked = taskGroup.checkedAction(); @@ -95,6 +111,14 @@ void TaskBar::prevTask() tasks[idx]->trigger(); } +void TaskBar::setActiveTask(QAction* task) +{ + if (!task) + return; + + task->trigger(); +} + void TaskBar::initContextMenu(ExtActionContainer* mainWin) { // MainWindow is passed as argument to this function, so it's not referenced with MAINWINDOW macro, @@ -107,6 +131,8 @@ void TaskBar::initContextMenu(ExtActionContainer* mainWin) taskMenu->addAction(mainWin->getAction(MainWindow::RESTORE_WINDOW)); taskMenu->addAction(mainWin->getAction(MainWindow::RENAME_WINDOW)); + connect(taskMenu, SIGNAL(aboutToShow()), this, SLOT(taskBarMenuAboutToShow())); + connect(taskMenu, SIGNAL(aboutToHide()), this, SLOT(taskBarMenuAboutToHide())); connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(taskBarMenuRequested(QPoint))); } @@ -313,3 +339,44 @@ int TaskBar::count() { return tasks.count(); } + +QAction* TaskBar::getActiveTask() const +{ + QAction* checked = taskGroup.checkedAction(); + if (!checked) + return nullptr; + + return checked; +} + +QAction* TaskBar::getNextTask(QAction* from) const +{ + if (!from) + from = getActiveTask(); + + if (!from) + return nullptr; + + int idx = tasks.indexOf(from); + idx++; + if (idx < tasks.size()) + return tasks[idx]; + + return nullptr; +} + +QAction* TaskBar::getPrevTask(QAction* from) const +{ + if (!from) + from = getActiveTask(); + + if (!from) + return nullptr; + + int idx = tasks.indexOf(from); + idx--; + if (idx > 0) + return tasks[idx]; + + return nullptr; +} diff --git a/SQLiteStudio3/guiSQLiteStudio/taskbar.h b/SQLiteStudio3/guiSQLiteStudio/taskbar.h index 652b3f6..a7b7d4f 100644 --- a/SQLiteStudio3/guiSQLiteStudio/taskbar.h +++ b/SQLiteStudio3/guiSQLiteStudio/taskbar.h @@ -23,6 +23,9 @@ class GUI_API_EXPORT TaskBar : public QToolBar QList getTasks() const; bool isEmpty(); int count(); + QAction* getActiveTask() const; + QAction* getNextTask(QAction* from = nullptr) const; + QAction* getPrevTask(QAction* from = nullptr) const; protected: void mousePressEvent(QMouseEvent* event); @@ -63,11 +66,14 @@ class GUI_API_EXPORT TaskBar : public QToolBar public slots: void nextTask(); void prevTask(); + void setActiveTask(QAction* task); void initContextMenu(ExtActionContainer *mainWin); private slots: void taskBarMenuRequested(const QPoint& p); void mousePressed(); + void taskBarMenuAboutToShow(); + void taskBarMenuAboutToHide(); }; #endif // TASKBAR_H diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_de.ts b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_de.ts index 6790149..55a5e5e 100644 --- a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_de.ts +++ b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_de.ts @@ -1,6 +1,6 @@ - + AboutDialog @@ -505,73 +505,83 @@ - + + Scale + + + + + Precision + + + + Data type: - + Column name: - + Size: - + Constraints - + Unique - - - - - - - + + + + + + + Configure - + Foreign Key - + Collate - + Not NULL - + Check condition - + Primary Key - + Default - + Advanced mode @@ -1821,88 +1831,104 @@ Browsing other pages will be possible after the row counting is done. - + + Database type + + + + Database driver - - Name + + Generate automatically - - Type + + Options + + + + + Permanent (keep it in configuration) - - Browse for database file on local computer + + Test connection - + + Create new database file + + + + + File - - Generate name basing on file path + + Name (on the list) - - Permanent + + Generate name basing on file path - + <p>Enable this if you want the database to be stored in configuration file and restored every time SQLiteStudio is started.</p> aasfd - - Test database connection + + Browse for existing database file on local computer - + Browse - + Enter an unique database name. - + This name is already in use. Please enter unique name. - + Enter a database file path. - + This database is already on the list under name: %1 - + Select a database type. - - The name will be auto-generated + + Auto-generated - + Type the name @@ -2318,123 +2344,123 @@ All objects from this group will be moved to parent group. DbTreeModel - + Database: %1 dbtree tooltip - + Version: dbtree tooltip - + File size: dbtree tooltip - + Encoding: dbtree tooltip - + Error details: dbtree tooltip - + Table : %1 dbtree tooltip - + Columns (%1): dbtree tooltip - + Indexes (%1): dbtree tooltip - + Triggers (%1): dbtree tooltip - + Copy - + Move - + Include data - + Include indexes - + Include triggers - + Abort - + Referenced tables - + Do you want to include following referenced tables as well: %1 - + Name conflict - + Following object already exists in the target database. Please enter new, unique name, or press '%1' to abort the operation: - + SQL statements conversion - + Following error occurred while converting SQL statements to the target SQLite version: - + Would you like to ignore those errors and proceed? @@ -2788,59 +2814,59 @@ Please enter new, unique name, or press '%1' to abort the operation: - - - + + + Select database to export. - + Select table to export. - + Enter valid query to export. - + Select at least one object to export. - + You must provide a file name to export to. - + Path you provided is an existing directory. You cannot overwrite it. - + The directory '%1' does not exist. - + The file '%1' exists and will be overwritten. - + All files (*) - + Pick file to export to - + Internal error during export. This is a bug. Please report it. @@ -3111,17 +3137,27 @@ Please enter new, unique name, or press '%1' to abort the operation: - + Input file: - + Text encoding: + + + <p>If enabled, any constraint violation, or invalid data format (wrong column count), or any other problem encountered during import will be ignored and the importing will be continued.</p> + + + Ignore errors + + + + Data source options @@ -3131,37 +3167,37 @@ Please enter new, unique name, or press '%1' to abort the operation: - + If you type table name that doesn't exist, it will be created. - + Enter the table name - + Select import plugin. - + You must provide a file to import from. - + The file '%1' does not exist. - + Path you provided is a directory. A regular file is required. - + Pick file to import from @@ -3532,7 +3568,7 @@ Please enter new, unique name, or press '%1' to abort the operation: - + Cannot export, because no export plugin is loaded. @@ -3542,37 +3578,37 @@ Please enter new, unique name, or press '%1' to abort the operation: - + Rename window - + Enter new name for the window: - + New updates are available. <a href="%1">Click here for details</a>. - + You're running the most recent version. No updates are available. - + Database passed in command line parameters (%1) was already on the list under name: %2 - + Database passed in command line parameters (%1) has been temporarily added to the list under name: %2 - + Could not add database %1 to list. @@ -3580,17 +3616,17 @@ Please enter new, unique name, or press '%1' to abort the operation: MdiWindow - + Uncommited changes - + Close anyway - + Don't close @@ -3900,68 +3936,68 @@ Please enter new, unique name, or press '%1' to abort the operation: QObject - + Cannot edit columns that are result of compound %1 statements (one that includes %2, %3 or %4 keywords). - + The query execution mechanism had problems with extracting ROWID's properly. This might be a bug in the application. You may want to report this. - + Requested column is a result of SQL expression, instead of a simple column selection. Such columns cannot be edited. - + Requested column belongs to restricted SQLite table. Those tables cannot be edited directly. - + Cannot edit results of query other than %1. - + Cannot edit columns that are result of aggregated %1 statements. - + Cannot edit columns that are result of %1 statement. - + Cannot edit columns that are result of common table expression statement (%1). - - - - + + + + on conflict: %1 data view tooltip - + references table %1, column %2 data view tooltip - + condition: %1 data view tooltip - + collation name: %1 data view tooltip @@ -4319,7 +4355,8 @@ Please enter new, unique name, or press '%1' to abort the operation: - + + Database file @@ -4810,69 +4847,69 @@ find next SqlQueryModel - - + + Only one query can be executed simultaneously. - + Uncommited data - + There are uncommited data changes. Do you want to proceed anyway? All uncommited changes will be lost. - + Cannot commit the data for a cell that refers to the already closed database. - + Could not begin transaction on the database. Details: %1 - + An error occurred while commiting the transaction: %1 - + An error occurred while rolling back the transaction: %1 - + Tried to commit a cell which is not editable (yet modified and waiting for commit)! This is a bug. Please report it. - + An error occurred while commiting the data: %1 - - + + Error while executing SQL query on database '%1': %2 - + Error while loading query results: %1 - + Insert multiple rows - + Number of rows to insert: @@ -4880,87 +4917,92 @@ find next SqlQueryView - + Copy - + Copy as... - + Paste - + Paste as... - + Set NULL values - + Erase values - + Edit value in editor - + Commit - + Rollback - + Commit selected cells - + Rollback selected cells - + Define columns to sort by - + Remove custom sorting - + Insert row - + Insert multiple rows - + Delete selected row - + + No items selected to paste clipboard contents to. + + + + Edit value @@ -5566,41 +5608,41 @@ Do you want to commit the structure, or do you want to go back to the structure - + Name table window triggers - + Event table window triggers - + Condition table window triggers - + Details table window triggers - + Table window "%1" has uncommited structure modifications and data. - + Table window "%1" has uncommited data. - + Table window "%1" has uncommited structure modifications. @@ -5688,33 +5730,33 @@ Do you want to commit the structure, or do you want to go back to the structure - + On view: - + Could not process trigger %1 correctly. Unable to open a trigger dialog. - + Enter a valid condition. - + Enter a valid trigger code. - + Error trigger dialog - + An error occurred while executing SQL statements: %1 diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_es.ts b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_es.ts index edc3e21..428d538 100644 --- a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_es.ts +++ b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_es.ts @@ -1,6 +1,6 @@ - + AboutDialog @@ -505,73 +505,83 @@ - + + Scale + + + + + Precision + + + + Data type: - + Column name: - + Size: - + Constraints - + Unique - - - - - - - + + + + + + + Configure - + Foreign Key - + Collate - + Not NULL - + Check condition - + Primary Key - + Default - + Advanced mode @@ -1821,88 +1831,104 @@ Browsing other pages will be possible after the row counting is done. - + + Database type + + + + Database driver - - Name + + Generate automatically - - Type + + Options + + + + + Permanent (keep it in configuration) - - Browse for database file on local computer + + Test connection - + + Create new database file + + + + + File - - Generate name basing on file path + + Name (on the list) - - Permanent + + Generate name basing on file path - + <p>Enable this if you want the database to be stored in configuration file and restored every time SQLiteStudio is started.</p> aasfd - - Test database connection + + Browse for existing database file on local computer - + Browse - + Enter an unique database name. - + This name is already in use. Please enter unique name. - + Enter a database file path. - + This database is already on the list under name: %1 - + Select a database type. - - The name will be auto-generated + + Auto-generated - + Type the name @@ -2318,123 +2344,123 @@ All objects from this group will be moved to parent group. DbTreeModel - + Database: %1 dbtree tooltip - + Version: dbtree tooltip - + File size: dbtree tooltip - + Encoding: dbtree tooltip - + Error details: dbtree tooltip - + Table : %1 dbtree tooltip - + Columns (%1): dbtree tooltip - + Indexes (%1): dbtree tooltip - + Triggers (%1): dbtree tooltip - + Copy - + Move - + Include data - + Include indexes - + Include triggers - + Abort - + Referenced tables - + Do you want to include following referenced tables as well: %1 - + Name conflict - + Following object already exists in the target database. Please enter new, unique name, or press '%1' to abort the operation: - + SQL statements conversion - + Following error occurred while converting SQL statements to the target SQLite version: - + Would you like to ignore those errors and proceed? @@ -2788,59 +2814,59 @@ Please enter new, unique name, or press '%1' to abort the operation: - - - + + + Select database to export. - + Select table to export. - + Enter valid query to export. - + Select at least one object to export. - + You must provide a file name to export to. - + Path you provided is an existing directory. You cannot overwrite it. - + The directory '%1' does not exist. - + The file '%1' exists and will be overwritten. - + All files (*) - + Pick file to export to - + Internal error during export. This is a bug. Please report it. @@ -3111,17 +3137,27 @@ Please enter new, unique name, or press '%1' to abort the operation: - + Input file: - + Text encoding: + + + <p>If enabled, any constraint violation, or invalid data format (wrong column count), or any other problem encountered during import will be ignored and the importing will be continued.</p> + + + Ignore errors + + + + Data source options @@ -3131,37 +3167,37 @@ Please enter new, unique name, or press '%1' to abort the operation: - + If you type table name that doesn't exist, it will be created. - + Enter the table name - + Select import plugin. - + You must provide a file to import from. - + The file '%1' does not exist. - + Path you provided is a directory. A regular file is required. - + Pick file to import from @@ -3532,7 +3568,7 @@ Please enter new, unique name, or press '%1' to abort the operation: - + Cannot export, because no export plugin is loaded. @@ -3542,37 +3578,37 @@ Please enter new, unique name, or press '%1' to abort the operation: - + Rename window - + Enter new name for the window: - + New updates are available. <a href="%1">Click here for details</a>. - + You're running the most recent version. No updates are available. - + Database passed in command line parameters (%1) was already on the list under name: %2 - + Database passed in command line parameters (%1) has been temporarily added to the list under name: %2 - + Could not add database %1 to list. @@ -3580,17 +3616,17 @@ Please enter new, unique name, or press '%1' to abort the operation: MdiWindow - + Uncommited changes - + Close anyway - + Don't close @@ -3900,68 +3936,68 @@ Please enter new, unique name, or press '%1' to abort the operation: QObject - + Cannot edit columns that are result of compound %1 statements (one that includes %2, %3 or %4 keywords). - + The query execution mechanism had problems with extracting ROWID's properly. This might be a bug in the application. You may want to report this. - + Requested column is a result of SQL expression, instead of a simple column selection. Such columns cannot be edited. - + Requested column belongs to restricted SQLite table. Those tables cannot be edited directly. - + Cannot edit results of query other than %1. - + Cannot edit columns that are result of aggregated %1 statements. - + Cannot edit columns that are result of %1 statement. - + Cannot edit columns that are result of common table expression statement (%1). - - - - + + + + on conflict: %1 data view tooltip - + references table %1, column %2 data view tooltip - + condition: %1 data view tooltip - + collation name: %1 data view tooltip @@ -4319,7 +4355,8 @@ Please enter new, unique name, or press '%1' to abort the operation: - + + Database file @@ -4810,69 +4847,69 @@ find next SqlQueryModel - - + + Only one query can be executed simultaneously. - + Uncommited data - + There are uncommited data changes. Do you want to proceed anyway? All uncommited changes will be lost. - + Cannot commit the data for a cell that refers to the already closed database. - + Could not begin transaction on the database. Details: %1 - + An error occurred while commiting the transaction: %1 - + An error occurred while rolling back the transaction: %1 - + Tried to commit a cell which is not editable (yet modified and waiting for commit)! This is a bug. Please report it. - + An error occurred while commiting the data: %1 - - + + Error while executing SQL query on database '%1': %2 - + Error while loading query results: %1 - + Insert multiple rows - + Number of rows to insert: @@ -4880,87 +4917,92 @@ find next SqlQueryView - + Copy - + Copy as... - + Paste - + Paste as... - + Set NULL values - + Erase values - + Edit value in editor - + Commit - + Rollback - + Commit selected cells - + Rollback selected cells - + Define columns to sort by - + Remove custom sorting - + Insert row - + Insert multiple rows - + Delete selected row - + + No items selected to paste clipboard contents to. + + + + Edit value @@ -5566,41 +5608,41 @@ Do you want to commit the structure, or do you want to go back to the structure - + Name table window triggers - + Event table window triggers - + Condition table window triggers - + Details table window triggers - + Table window "%1" has uncommited structure modifications and data. - + Table window "%1" has uncommited data. - + Table window "%1" has uncommited structure modifications. @@ -5688,33 +5730,33 @@ Do you want to commit the structure, or do you want to go back to the structure - + On view: - + Could not process trigger %1 correctly. Unable to open a trigger dialog. - + Enter a valid condition. - + Enter a valid trigger code. - + Error trigger dialog - + An error occurred while executing SQL statements: %1 diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_fr.qm b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_fr.qm index bdd914e..42d19a7 100644 Binary files a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_fr.qm and b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_fr.qm differ diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_fr.ts b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_fr.ts index 480d4ad..6fa9ba0 100644 --- a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_fr.ts +++ b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_fr.ts @@ -1,6 +1,6 @@ - + AboutDialog @@ -506,73 +506,83 @@ Nom et type - + + Scale + + + + + Precision + + + + Data type: Type de données: - + Column name: Nom de colonne: - + Size: Taille: - + Constraints Contraintes - + Unique Unique - - - - - - - + + + + + + + Configure Configurer - + Foreign Key Clé étranère - + Collate Jointure - + Not NULL Non NULL - + Check condition Vérifiez la contition - + Primary Key Clé primaire - + Default Défaut - + Advanced mode Mode avancé @@ -1823,88 +1833,128 @@ Browsing other pages will be possible after the row counting is done. Base de donnée - + + Database type + + + + Database driver Pilote de base de données - + + Generate automatically + + + + + Options + Options + + + + Permanent (keep it in configuration) + + + + + Test connection + + + Name - Nom + Nom - Type - Type + Type - Browse for database file on local computer - Navigation de la base de données en local + Navigation de la base de données en local - + + Create new database file + + + + + File Fichier - + + Name (on the list) + + + + Generate name basing on file path Génération du nom basé sur le chemin du fichier - Permanent - Permanent + Permanent - + <p>Enable this if you want the database to be stored in configuration file and restored every time SQLiteStudio is started.</p> aasfd <p>Autorisez-ceci si vous voulez que la base de données soit stockée dans le fichier de configuration et restauré chaque fois SQLiteStudio est lancé.</p> - Test database connection - Test de connexion + Test de connexion - + + Browse for existing database file on local computer + + + + Browse Navigateur - + Enter an unique database name. - + This name is already in use. Please enter unique name. - + Enter a database file path. - + This database is already on the list under name: %1 - + Select a database type. - + + Auto-generated + + + The name will be auto-generated - Le non sera généré automatiquement + Le non sera généré automatiquement - + Type the name Saississez le nom @@ -2321,125 +2371,125 @@ Tous les objets de ce groupe seront déplacés dans le groupe parent. DbTreeModel - + Database: %1 dbtree tooltip Base de données: %1 - + Version: dbtree tooltip Version: - + File size: dbtree tooltip Taille fichier: - + Encoding: dbtree tooltip Codage: - + Error details: dbtree tooltip Détails erreur: - + Table : %1 dbtree tooltip Table: %1 - + Columns (%1): dbtree tooltip Colonnes:(%1): - + Indexes (%1): dbtree tooltip Index (%1): - + Triggers (%1): dbtree tooltip Déclencheurs (%1): - + Copy Copier - + Move Déplcer - + Include data Données incluses - + Include indexes Index inclus - + Include triggers Déclencheurs inclus - + Abort Abandonner - + Referenced tables Tables référencées - + Do you want to include following referenced tables as well: %1 Vous voulez inclure des tables référencées suivantes aussi : %1 - + Name conflict Conflit de nom - + Following object already exists in the target database. Please enter new, unique name, or press '%1' to abort the operation: L'objet suivant existe déjà dans la base de données cible. Entrez SVP un nouveau nom, unique, ou cliquez '%1' pour d'interrompre l'opération : - + SQL statements conversion Conversion des déclarations SQL - + Following error occurred while converting SQL statements to the target SQLite version: L'erreur suivante est survenue en convertissant des déclarations de SQL de la version cible SQLite : - + Would you like to ignore those errors and proceed? Voulez-vous ignorer ces erreurs et procéder? @@ -2795,59 +2845,59 @@ Entrez SVP un nouveau nom, unique, ou cliquez '%1' pour d'interro annuler - - - + + + Select database to export. Sélecctionnez la base de données à exporter. - + Select table to export. Sélectionnez la table à exporter. - + Enter valid query to export. Saississez une requête valide à exporter. - + Select at least one object to export. Sélectionnez au moins un objet à exporter. - + You must provide a file name to export to. Vous devez fournir le nom d'un fichier à exporter. - + Path you provided is an existing directory. You cannot overwrite it. Le chemin fourni est un répertoire existant. Vous ne pouvez pas l'écraser. - + The directory '%1' does not exist. Le répertoire %1 n'existe pas. - + The file '%1' exists and will be overwritten. Le fichier '%1' existe et sera écrasé. - + All files (*) tous les fichiers(*) - + Pick file to export to Sélectionnez un fichier à exporter - + Internal error during export. This is a bug. Please report it. Erreur interne pendant l'exportation. c'est un bug. SVP veuillez le reporter. @@ -3118,17 +3168,27 @@ Entrez SVP un nouveau nom, unique, ou cliquez '%1' pour d'interro Options - + Input file: Fichier: - + Text encoding: Texte codé: + + + <p>If enabled, any constraint violation, or invalid data format (wrong column count), or any other problem encountered during import will be ignored and the importing will be continued.</p> + + + Ignore errors + + + + Data source options Optrions de source de données @@ -3138,37 +3198,37 @@ Entrez SVP un nouveau nom, unique, ou cliquez '%1' pour d'interro Annuler - + If you type table name that doesn't exist, it will be created. Si vous saississez un nom de table inexistant, celle-ci sera créée. - + Enter the table name Saississez un nom de table - + Select import plugin. Sélectionnez un plugin d'importation. - + You must provide a file to import from. Vous devez fournir un fichier à importer. - + The file '%1' does not exist. Le fichier '%1' n'existe pas. - + Path you provided is a directory. A regular file is required. Le chemin indiqué est un répertoire. Un fichier est requis. - + Pick file to import from Sélectionnez le fichier d'importation @@ -3540,7 +3600,7 @@ Entrez SVP un nouveau nom, unique, ou cliquez '%1' pour d'interro Impossible de positionner le style: %1 - + Cannot export, because no export plugin is loaded. Exportation impossible, aucun plugin d'exportation n'est chargé. @@ -3550,37 +3610,37 @@ Entrez SVP un nouveau nom, unique, ou cliquez '%1' pour d'interro Importation impossible, aucun plugin d'importation n'est chargé. - + Rename window Renommer la fenêtre - + Enter new name for the window: Saississez un nouveau nom de fenêtre: - + New updates are available. <a href="%1">Click here for details</a>. Une nouvelle mise à jour est disponible. <a href="%1"> cliquez ici pour détails</a>. - + You're running the most recent version. No updates are available. Vous utilisez la dernière version. Aucune mise à jour de disponible. - + Database passed in command line parameters (%1) was already on the list under name: %2 - + Database passed in command line parameters (%1) has been temporarily added to the list under name: %2 La base de données passée en paramètre dans la ligne de commande (%1)a été temporaire ajoutée à la liste sous le nom: %2 - + Could not add database %1 to list. Impossible d'ajouter la base de données %1 à la liste. @@ -3588,17 +3648,17 @@ Entrez SVP un nouveau nom, unique, ou cliquez '%1' pour d'interro MdiWindow - + Uncommited changes Modification non enregistrées - + Close anyway Fermer - + Don't close Ne pas fermer @@ -3908,68 +3968,68 @@ Entrez SVP un nouveau nom, unique, ou cliquez '%1' pour d'interro QObject - + Cannot edit columns that are result of compound %1 statements (one that includes %2, %3 or %4 keywords). impossible d'éditer les colonnes qui ont le résultat composé des déclarations %1 (inclus %2, %3 ou %4 mots-clés). - + The query execution mechanism had problems with extracting ROWID's properly. This might be a bug in the application. You may want to report this. Le mécanisme d'exécution de la requête a eu des problèmes avec l'extraction du ROWID'S. Ceci pourrait être un bogue de l'application. Vous pouvez le rapporter. - + Requested column is a result of SQL expression, instead of a simple column selection. Such columns cannot be edited. La colonne demandée est un résultat d'expression de SQL, au lieu d'une sélection de colonne simple. De telles colonnes ne peuvent pas être éditées. - + Requested column belongs to restricted SQLite table. Those tables cannot be edited directly. La colonne demandée appartient à une table limitée SQLite. Ces tables ne peuvent pas être éditées directement. - + Cannot edit results of query other than %1. Impossible d'éditer les résultats de la requëte autrement que %1. - + Cannot edit columns that are result of aggregated %1 statements. Impossible d'éditer les colonnes qui sont le résultat de déclarations agrégées %1. - + Cannot edit columns that are result of %1 statement. Impossible d'éditer les colonnesqui sont le résultat de déclaration %1. - + Cannot edit columns that are result of common table expression statement (%1). Impossible d'éditer les colonnes qui sont le résultat de table commune de déclaration (%1). - - - - + + + + on conflict: %1 data view tooltip Sur conflit %1 - + references table %1, column %2 data view tooltip Références table %1, colonne %2 - + condition: %1 data view tooltip Condition: %1 - + collation name: %1 data view tooltip Nom de collation: %1 @@ -4327,7 +4387,8 @@ Entrez SVP un nouveau nom, unique, ou cliquez '%1' pour d'interro Tous les fichiers - + + Database file Fichier base de données @@ -4819,69 +4880,69 @@ recherche suivant SqlQueryModel - - + + Only one query can be executed simultaneously. Uniquement une seule requête peut être exécutée à la fois. - + Uncommited data Données non enregistrées - + There are uncommited data changes. Do you want to proceed anyway? All uncommited changes will be lost. - + Cannot commit the data for a cell that refers to the already closed database. Impossible d'enregistrer les données pour la cell qui référe à une base de données déjà fermée. - + Could not begin transaction on the database. Details: %1 Impossible de lancer la transaction sur la base de données. Détails: %1 - + An error occurred while commiting the transaction: %1 Une erreur est survenuelors de l'enregistrement de la transaction: %1 - + An error occurred while rolling back the transaction: %1 Une erreur est survenuelors de l'annulation de la transaction: %1 - + Tried to commit a cell which is not editable (yet modified and waiting for commit)! This is a bug. Please report it. Tentative d'enregistrement d'une une cellule qui n'est pas modifiable! Ceci est un bogue. Rapportez-le SVP. - + An error occurred while commiting the data: %1 Une erreur est survenuelors de l'enregistrement des données: %1 - - + + Error while executing SQL query on database '%1': %2 Erreur pendant l'exécution de la requête sur la base de données %1: %2 - + Error while loading query results: %1 Erreur lors du chargement des résultats de la requête: %1 - + Insert multiple rows Insérer plusieurs lignes - + Number of rows to insert: Nombre de lignes à inserrer: @@ -4889,87 +4950,92 @@ recherche suivant SqlQueryView - + Copy Copier - + Copy as... Copier comme ... - + Paste Coller - + Paste as... Coller comme ... - + Set NULL values Valeurs NULL positionnées - + Erase values valeurs écrasées - + Edit value in editor Valeur modifiée par l'éditeur - + Commit Enregistrer - + Rollback Annuler - + Commit selected cells Enregistrer les cellules sélectionnées - + Rollback selected cells Annuler les modifications des cellules sélectionnées - + Define columns to sort by Définit les colonnes triées par - + Remove custom sorting Enléve le tri personnalisé - + Insert row Insérer une ligne - + Insert multiple rows Insérer plusieurs lignes - + Delete selected row Supprimer les lignes sélectionnées - + + No items selected to paste clipboard contents to. + + + + Edit value Modifier la valeur @@ -5578,41 +5644,41 @@ Voulez-vous enregistrer la structure, ou voulez-vous retourner à l'onglet Condition partielle d'index - + Name table window triggers Nom - + Event table window triggers Événement - + Condition table window triggers Condition - + Details table window triggers Details - + Table window "%1" has uncommited structure modifications and data. La fenêtre de table "%1" n'a pas enregistré les modifications de structure et de données. - + Table window "%1" has uncommited data. La fenêtre de table "%1" n'a pas enregistrer les données. - + Table window "%1" has uncommited structure modifications. La fenêtre de table "%1" n'a pas enregistré les modifications de structure. @@ -5700,33 +5766,33 @@ Voulez-vous enregistrer la structure, ou voulez-vous retourner à l'onglet DDL - + On view: Sur vue: - + Could not process trigger %1 correctly. Unable to open a trigger dialog. Impossible d'exécuter correctement le déclencheur %1. Ouverture invalide du dialogue de déclencheur. - + Enter a valid condition. Saisissez une condition valide. - + Enter a valid trigger code. Saisissez un code de déclencheur valide. - + Error trigger dialog Erreur - + An error occurred while executing SQL statements: %1 Une erreur survenue lors de l'exécution de l'intruction SQL: %1 diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.qm b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.qm index c8c85a8..f927e35 100644 Binary files a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.qm and b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.qm differ diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.ts b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.ts index 48ff371..dcd9b50 100644 --- a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.ts +++ b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.ts @@ -1,6 +1,6 @@ - + AboutDialog @@ -507,75 +507,85 @@ Nazwa i typ - + + Scale + Skala + + + + Precision + Precyzja + + + Data type: Typ danych: - + Column name: Nazwa kolumny: - + Size: Rozmiar: - + Constraints Ograniczenia - + Unique Wartości unikalne - - - - - - - + + + + + + + Configure Konfiguruj - + Foreign Key Klucz obcy - + Collate Zestawienie - + Not NULL Niepuste - + Check condition Sprawdzaj warunek - + Primary Key Klucz główny - + Default Wartość domyślna - + Advanced mode - Tryb zaawandowany + Tryb zaawansowany @@ -1829,88 +1839,128 @@ Przeglądanie pozostałych stron będzie możliwe kiedy liczenie wierszy zostani Baza danych - + + Database type + Typ bazy danych + + + Database driver Sterownik bazy danych - + + Generate automatically + Generuj automatycznie + + + + Options + Opcje + + + + Permanent (keep it in configuration) + Trwała (trzymaj w konfiguracji) + + + + Test connection + Testuj połączenie + + Name - Nazwa + Nazwa - Type - Typ + Typ - Browse for database file on local computer - Przeglądaj w poszukiwaniu pliku bazy danych na lokalnym komputerze + Przeglądaj w poszukiwaniu pliku bazy danych na lokalnym komputerze + + + + Create new database file + Utwórz nową bazę - + + File Plik - + + Name (on the list) + Nazwa (na liście) + + + Generate name basing on file path Generuj nazwę bazując na ścieżce do pliku - Permanent - Trwała + Trwała - + <p>Enable this if you want the database to be stored in configuration file and restored every time SQLiteStudio is started.</p> aasfd <p>Włącz to, jeśli chcesz aby baza danych była przechowywana w pliku konfiguracji i przywracana za każdym razem, gdy startuje SQLiteStudio.</p> - Test database connection - Testuj połączenie z bazą + Testuj połączenie z bazą - + + Browse for existing database file on local computer + Przeglądaj lokalny komputer w poszukiwaniu istniejącej bazy + + + Browse Przeglądaj - + Enter an unique database name. Wprowadź unikalną nazwę bazy danych. - + This name is already in use. Please enter unique name. Ta nazwa jest już w użyciu. Proszę wprowadzić unikalną nazwę. - + Enter a database file path. Wprowadź ścieżkę do pliku bazy danych. - + This database is already on the list under name: %1 Ta baza jest już na liście pod nazwą: %1 - + Select a database type. Wybierz typ bazy danych. - + + Auto-generated + Auto-generowana + + The name will be auto-generated - Nazwa będzie generowana automatycznie + Nazwa będzie generowana automatycznie - + Type the name Wprowadź nazwę @@ -2343,125 +2393,125 @@ Wszystkie obiekty z tej grupy zostaną przeniesione do nadrzędnej grupy. DbTreeModel - + Database: %1 dbtree tooltip Baza danych: %1 - + Version: dbtree tooltip Wersja: - + File size: dbtree tooltip Rozmiar pliku: - + Encoding: dbtree tooltip Kodowanie: - + Error details: dbtree tooltip Szczegóły błędu: - + Table : %1 dbtree tooltip Tablela: : %1 - + Columns (%1): dbtree tooltip Kolumny (%1): - + Indexes (%1): dbtree tooltip Indeksy (%1): - + Triggers (%1): dbtree tooltip Wyzwalacze (%1): - + Copy Kopiuj - + Move Przenieś - + Include data Również dane - + Include indexes Również indeksy - + Include triggers Również wyzwalacze - + Abort Przerwij - + Referenced tables Tabele powiązane - + Do you want to include following referenced tables as well: %1 Czy chcesz zawrzeć również powiązane tabele: %1 - + Name conflict Konflikt nazwy - + Following object already exists in the target database. Please enter new, unique name, or press '%1' to abort the operation: Następująy obiekt istnieje już w docelowej bazie danych. Proszę podać nową, unikalną nazwę, lub nacisnąć '%1', aby przerwać operację. - + SQL statements conversion Konwersja zapytań SQL - + Following error occurred while converting SQL statements to the target SQLite version: Następujące błędy wystąpiły podczas konwersji zapytań SQL do docelowej wersji SQLite: - + Would you like to ignore those errors and proceed? Czy chcesz zignorować te błędy i kontynuować? @@ -2821,59 +2871,59 @@ Proszę podać nową, unikalną nazwę, lub nacisnąć '%1', aby przer Anuluj - - - + + + Select database to export. Wybierz bazę do eksportu. - + Select table to export. Wybierz tabelę do eksportu. - + Enter valid query to export. Wprowadź poprawne zapytanie do eksportu. - + Select at least one object to export. Wybierz przynajmniej jeden obiekt do eksportu. - + You must provide a file name to export to. Musisz podać nazwę pliku do którego należy wyeksportować. - + Path you provided is an existing directory. You cannot overwrite it. Ścieżka którą podałeś jest istniejącym katalogiem. Nie można go nadpisać. - + The directory '%1' does not exist. Katalog '%1' nie istnieje. - + The file '%1' exists and will be overwritten. Plik '%1' istnieje i zostanie nadpisany. - + All files (*) Wszystkie pliki (*) - + Pick file to export to Wybierz plik do eksportu - + Internal error during export. This is a bug. Please report it. Wystąpił wewnętrzny błąd podczas eksportu. To jest błąd programu. Proszę to zgłosić. @@ -3144,17 +3194,27 @@ Proszę podać nową, unikalną nazwę, lub nacisnąć '%1', aby przer OOpcje - + Input file: Plik wejściowy: - + Text encoding: Kodowanie tekstu: + + + <p>If enabled, any constraint violation, or invalid data format (wrong column count), or any other problem encountered during import will be ignored and the importing will be continued.</p> + <p>Jeśli włączone, to jakiekolwiek naruszenia ograniczeń, lub niepoprawny format danych (niepoprawna liczba kolumn), lub jakikolwiek inny problem, który wystąpi podczas importu zostanie zignorowany i importowanie będzie kontynuowane.</p> + + Ignore errors + Ignoruj błędy + + + Data source options Opcje źródła danych @@ -3164,37 +3224,37 @@ Proszę podać nową, unikalną nazwę, lub nacisnąć '%1', aby przer Anuluj - + If you type table name that doesn't exist, it will be created. Jeśli wpiszesz nazwę tabeli, która nie istnieje, to zostanie ona stworzona. - + Enter the table name Wprowadź nazwę tabeli - + Select import plugin. Wybierz wtyczkę importu - + You must provide a file to import from. Musisz podać plik z którego należy zaimportować. - + The file '%1' does not exist. Plik '%1' nie istnieje. - + Path you provided is a directory. A regular file is required. Ścieżka którą podałeś jest katalogiem. Wymagany jest zwykły plik. - + Pick file to import from Wybierz plik do importu @@ -3566,7 +3626,7 @@ Proszę podać nową, unikalną nazwę, lub nacisnąć '%1', aby przer Nie udało się ustawić stylu: %1 - + Cannot export, because no export plugin is loaded. Nie można wyeksportować, ponieważ żadna wtyczka eksportu nie została załadowana. @@ -3576,37 +3636,37 @@ Proszę podać nową, unikalną nazwę, lub nacisnąć '%1', aby przer Nie można zaimportować, ponieważ żadna wtyczka importu nie została załadowana. - + Rename window Zmień nazwę okna - + Enter new name for the window: Wprowadź nową nazwę dla okna: - + New updates are available. <a href="%1">Click here for details</a>. Nowe aktualizacje są dostępne: <a href="%1">Kliknij aby poznać szczegóły</a>. - + You're running the most recent version. No updates are available. Uruchomiona jest najnowsza wersja. Nie ma dostępnych aktualizacji. - + Database passed in command line parameters (%1) was already on the list under name: %2 Baza danych podana w parametrach linii poleceń (%1) była już na liście pod nazwą: %2 - + Database passed in command line parameters (%1) has been temporarily added to the list under name: %2 Baza danych podana w linii poleceń (%1) jest tymczasowo dodana do listy pod nazwą: %2 - + Could not add database %1 to list. Nie udało się dodać bazy danych %1 do listy. @@ -3614,17 +3674,17 @@ Proszę podać nową, unikalną nazwę, lub nacisnąć '%1', aby przer MdiWindow - + Uncommited changes Niezatwierdzone dane - + Close anyway Zamknij mimo to - + Don't close Nie zamykaj @@ -3938,68 +3998,68 @@ Proszę podać nową, unikalną nazwę, lub nacisnąć '%1', aby przer QObject - + The query execution mechanism had problems with extracting ROWID's properly. This might be a bug in the application. You may want to report this. Mechanizm wykonywania zapytań miał problemy z wyciągnięciem własności ROWID. To może być błąd aplikacji. Możesz to zgłosić. - + Requested column is a result of SQL expression, instead of a simple column selection. Such columns cannot be edited. Ta kolumna jest wynikiem wyrażenia SQL, a nie zwykłej selekcji kolumny. Takie kolumny nie mogą być edytowane. - + Requested column belongs to restricted SQLite table. Those tables cannot be edited directly. Ta kolumna należy do systemowej tabeli SQLite. Te tabele nie mogą być edytowane bezpośrednio. - + Cannot edit columns that are result of compound %1 statements (one that includes %2, %3 or %4 keywords). Nie można edytować kolumn, które są wynikiem złożonego zapytania %1 (tego, które zawiera słowo kluczowe %2, %3, lub %4). - + Cannot edit results of query other than %1. Nie można edytować wyników zapytania innego niż %1. - + Cannot edit columns that are result of aggregated %1 statements. Nie można edytować kolumn, które są wynikiem zapytania agregacyjnego %1. - + Cannot edit columns that are result of %1 statement. Nie można edytować kolumn, które są wynikiem zapytania %1. - + Cannot edit columns that are result of common table expression statement (%1). Nie można edytować kolumn, które są wynikiem zapytania ze wspólnym wyrażeniem tabeli (%1). - - - - + + + + on conflict: %1 data view tooltip w razie konfliktu: %1 - + references table %1, column %2 data view tooltip odwołuje się do tabeli %1, kolumny %2 - + condition: %1 data view tooltip warunek: %1 - + collation name: %1 data view tooltip nazwa zestawienia: %1 @@ -4357,7 +4417,8 @@ Proszę podać nową, unikalną nazwę, lub nacisnąć '%1', aby przer Wszystkie pliki - + + Database file Plik bazy danych @@ -4851,54 +4912,54 @@ znajdź następny SqlQueryModel - - + + Only one query can be executed simultaneously. Tylko jedno zapytanie może być wykonywane w danym momencie. - + Uncommited data Niezatwierdzone dane - + There are uncommited data changes. Do you want to proceed anyway? All uncommited changes will be lost. Niektóre zmiany w danych nie zostały zatwierdzone. Czy na pewno chcesz kontynuować? Wszystkie niezatwierdzone zmiany zostaną utracone. - + Cannot commit the data for a cell that refers to the already closed database. Nie można zatwierdzić danych dla komórki, która odnosi się do zamkniętej już bazy danych. - + Could not begin transaction on the database. Details: %1 Nie udało się rozpocząć transakcji na bazie danych. Szczegóły: %1 - + An error occurred while commiting the transaction: %1 Wystąpił błąd podczas zatwierdzania transakcji: %1 - + An error occurred while rolling back the transaction: %1 Wystąpił błąd podczas wycofywania transakcji: %1 - + Tried to commit a cell which is not editable (yet modified and waiting for commit)! This is a bug. Please report it. Próbowano zatwierdzić komórkę, której nie można edytować (a mimo to została zmodyfikowana i czeka na zatwierdzenie)! To jest błąd. Proszę to zgłosić. - + An error occurred while commiting the data: %1 Wystąpił błąd podczas zatwierdzania danych: %1 - - + + Error while executing SQL query on database '%1': %2 Błąd podczas wykonywania zapytania SQL na bazie '%1': %2 @@ -4907,17 +4968,17 @@ znajdź następny Błąd podczas wykonywania zapytania SQL: %1 - + Error while loading query results: %1 Błąd podczas wczytywania wyników zapytania: %1 - + Insert multiple rows Wstaw wiele wierszy - + Number of rows to insert: Liczba wierszy do wstawienia: @@ -4925,87 +4986,92 @@ znajdź następny SqlQueryView - + Copy Kopiuj - + Copy as... Kopiuj jako... - + Paste Wklej - + Paste as... Wklej jako... - + Set NULL values Ustaw wartości NULL - + Erase values Wymaż wartości - + Edit value in editor Edytuj wartość w edytorze - + Commit Zatwierdź - + Rollback Wycofaj - + Commit selected cells Zatwierdź zaznaczone komórki - + Rollback selected cells Wycofaj zaznaczone komórki - + Define columns to sort by Zdefiniuj kolumny po których sortować - + Remove custom sorting Wycofaj własne sortowanie - + Insert row Wstaw wiersz - + Insert multiple rows Wstaw wiele wierszy - + Delete selected row Usuń zaznaczony wiersz - + + No items selected to paste clipboard contents to. + Nie wybrano elementów do których należy wkleić zawartość schowka. + + + Edit value Edytuj wartość @@ -5615,41 +5681,41 @@ Czy chcesz zatwierdzić strukturę, czy jednak chcesz wrócić do karty struktur Warunek indeksu częściowego: - + Name table window triggers Nazwa - + Event table window triggers Zdarzenie - + Condition table window triggers Warunek - + Details table window triggers Szczegóły - + Table window "%1" has uncommited structure modifications and data. Okno tabeli "%1" ma niezatwierdzone modyfikacje struktury i danych. - + Table window "%1" has uncommited data. Okno tabeli "%1" ma niezatwierdzone dane. - + Table window "%1" has uncommited structure modifications. Okno tabeli "%1" ma niezatwierdzone modyfikacje struktury. @@ -5737,33 +5803,33 @@ Czy chcesz zatwierdzić strukturę, czy jednak chcesz wrócić do karty struktur DDL - + On view: Na widoku: - + Could not process trigger %1 correctly. Unable to open a trigger dialog. Nie udało się przetworzyć poprawnie wyzwalacza %1. Nie można otworzyć okna wyzwalacza. - + Enter a valid condition. Wprowadź poprawny warunek. - + Enter a valid trigger code. Wprowadź poprawny kod wyzwalacza. - + Error trigger dialog Błąd - + An error occurred while executing SQL statements: %1 Wystąpił błąd podczas wykonywania zapytań SQL: diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pt_BR.ts b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pt_BR.ts index b83a8f3..450cfbf 100644 --- a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pt_BR.ts +++ b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pt_BR.ts @@ -1,6 +1,6 @@ - + AboutDialog @@ -505,73 +505,83 @@ - + + Scale + + + + + Precision + + + + Data type: - + Column name: - + Size: - + Constraints - + Unique - - - - - - - + + + + + + + Configure - + Foreign Key - + Collate - + Not NULL - + Check condition - + Primary Key - + Default - + Advanced mode @@ -1821,88 +1831,104 @@ Browsing other pages will be possible after the row counting is done. - + + Database type + + + + Database driver - - Name + + Generate automatically - - Type + + Options + + + + + Permanent (keep it in configuration) - - Browse for database file on local computer + + Test connection - + + Create new database file + + + + + File - - Generate name basing on file path + + Name (on the list) - - Permanent + + Generate name basing on file path - + <p>Enable this if you want the database to be stored in configuration file and restored every time SQLiteStudio is started.</p> aasfd - - Test database connection + + Browse for existing database file on local computer - + Browse - + Enter an unique database name. - + This name is already in use. Please enter unique name. - + Enter a database file path. - + This database is already on the list under name: %1 - + Select a database type. - - The name will be auto-generated + + Auto-generated - + Type the name @@ -2318,123 +2344,123 @@ All objects from this group will be moved to parent group. DbTreeModel - + Database: %1 dbtree tooltip - + Version: dbtree tooltip - + File size: dbtree tooltip - + Encoding: dbtree tooltip - + Error details: dbtree tooltip - + Table : %1 dbtree tooltip - + Columns (%1): dbtree tooltip - + Indexes (%1): dbtree tooltip - + Triggers (%1): dbtree tooltip - + Copy - + Move - + Include data - + Include indexes - + Include triggers - + Abort - + Referenced tables - + Do you want to include following referenced tables as well: %1 - + Name conflict - + Following object already exists in the target database. Please enter new, unique name, or press '%1' to abort the operation: - + SQL statements conversion - + Following error occurred while converting SQL statements to the target SQLite version: - + Would you like to ignore those errors and proceed? @@ -2788,59 +2814,59 @@ Please enter new, unique name, or press '%1' to abort the operation: - - - + + + Select database to export. - + Select table to export. - + Enter valid query to export. - + Select at least one object to export. - + You must provide a file name to export to. - + Path you provided is an existing directory. You cannot overwrite it. - + The directory '%1' does not exist. - + The file '%1' exists and will be overwritten. - + All files (*) - + Pick file to export to - + Internal error during export. This is a bug. Please report it. @@ -3111,17 +3137,27 @@ Please enter new, unique name, or press '%1' to abort the operation: - + Input file: - + Text encoding: + + + <p>If enabled, any constraint violation, or invalid data format (wrong column count), or any other problem encountered during import will be ignored and the importing will be continued.</p> + + + Ignore errors + + + + Data source options @@ -3131,37 +3167,37 @@ Please enter new, unique name, or press '%1' to abort the operation: - + If you type table name that doesn't exist, it will be created. - + Enter the table name - + Select import plugin. - + You must provide a file to import from. - + The file '%1' does not exist. - + Path you provided is a directory. A regular file is required. - + Pick file to import from @@ -3532,7 +3568,7 @@ Please enter new, unique name, or press '%1' to abort the operation: - + Cannot export, because no export plugin is loaded. @@ -3542,37 +3578,37 @@ Please enter new, unique name, or press '%1' to abort the operation: - + Rename window - + Enter new name for the window: - + New updates are available. <a href="%1">Click here for details</a>. - + You're running the most recent version. No updates are available. - + Database passed in command line parameters (%1) was already on the list under name: %2 - + Database passed in command line parameters (%1) has been temporarily added to the list under name: %2 - + Could not add database %1 to list. @@ -3580,17 +3616,17 @@ Please enter new, unique name, or press '%1' to abort the operation: MdiWindow - + Uncommited changes - + Close anyway - + Don't close @@ -3900,68 +3936,68 @@ Please enter new, unique name, or press '%1' to abort the operation: QObject - + Cannot edit columns that are result of compound %1 statements (one that includes %2, %3 or %4 keywords). - + The query execution mechanism had problems with extracting ROWID's properly. This might be a bug in the application. You may want to report this. - + Requested column is a result of SQL expression, instead of a simple column selection. Such columns cannot be edited. - + Requested column belongs to restricted SQLite table. Those tables cannot be edited directly. - + Cannot edit results of query other than %1. - + Cannot edit columns that are result of aggregated %1 statements. - + Cannot edit columns that are result of %1 statement. - + Cannot edit columns that are result of common table expression statement (%1). - - - - + + + + on conflict: %1 data view tooltip - + references table %1, column %2 data view tooltip - + condition: %1 data view tooltip - + collation name: %1 data view tooltip @@ -4319,7 +4355,8 @@ Please enter new, unique name, or press '%1' to abort the operation: - + + Database file @@ -4810,69 +4847,69 @@ find next SqlQueryModel - - + + Only one query can be executed simultaneously. - + Uncommited data - + There are uncommited data changes. Do you want to proceed anyway? All uncommited changes will be lost. - + Cannot commit the data for a cell that refers to the already closed database. - + Could not begin transaction on the database. Details: %1 - + An error occurred while commiting the transaction: %1 - + An error occurred while rolling back the transaction: %1 - + Tried to commit a cell which is not editable (yet modified and waiting for commit)! This is a bug. Please report it. - + An error occurred while commiting the data: %1 - - + + Error while executing SQL query on database '%1': %2 - + Error while loading query results: %1 - + Insert multiple rows - + Number of rows to insert: @@ -4880,87 +4917,92 @@ find next SqlQueryView - + Copy - + Copy as... - + Paste - + Paste as... - + Set NULL values - + Erase values - + Edit value in editor - + Commit - + Rollback - + Commit selected cells - + Rollback selected cells - + Define columns to sort by - + Remove custom sorting - + Insert row - + Insert multiple rows - + Delete selected row - + + No items selected to paste clipboard contents to. + + + + Edit value @@ -5566,41 +5608,41 @@ Do you want to commit the structure, or do you want to go back to the structure - + Name table window triggers - + Event table window triggers - + Condition table window triggers - + Details table window triggers - + Table window "%1" has uncommited structure modifications and data. - + Table window "%1" has uncommited data. - + Table window "%1" has uncommited structure modifications. @@ -5688,33 +5730,33 @@ Do you want to commit the structure, or do you want to go back to the structure - + On view: - + Could not process trigger %1 correctly. Unable to open a trigger dialog. - + Enter a valid condition. - + Enter a valid trigger code. - + Error trigger dialog - + An error occurred while executing SQL statements: %1 diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_ru.qm b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_ru.qm index d3a90ca..3e51d97 100644 Binary files a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_ru.qm and b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_ru.qm differ diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_ru.ts b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_ru.ts index a3d8093..467ca92 100644 --- a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_ru.ts +++ b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_ru.ts @@ -51,7 +51,7 @@ SQLite 3 version: - + Версия SQLite 3: @@ -507,73 +507,83 @@ Имя и тип - + + Scale + Размер + + + + Precision + Точность + + + Data type: Тип данных: - + Column name: Имя столбца: - + Size: Размер: - + Constraints Ограничения - + Unique Уникальность - - - - - - - + + + + + + + Configure Настроить - + Foreign Key Внешний ключ - + Collate Сравнение - + Not NULL Не NULL - + Check condition Проверка условия - + Primary Key Первичный ключ - + Default - + Advanced mode Расширенный режим @@ -1824,88 +1834,128 @@ Browsing other pages will be possible after the row counting is done. База данных - + + Database type + Тип базы данных + + + Database driver Драйвер базы данных - + + Generate automatically + Сгенерировать автоматически + + + + Options + Опции + + + + Permanent (keep it in configuration) + Постоянная (сохранить базу в конфигурационном файле) + + + + Test connection + Тест соединения + + Name Имя - Type Тип - Browse for database file on local computer - Указать файл базы данных на локальном компьютере + Указать файл базы данных на локальном компьютере + + + + Create new database file + Создать новый файл базы данных - + + File Файл - + + Name (on the list) + Имя (в списке) + + + Generate name basing on file path Генерировать имя на основе пути к файлу - Permanent Запомнить - + <p>Enable this if you want the database to be stored in configuration file and restored every time SQLiteStudio is started.</p> aasfd <p>Активируйте эту опцию для сохранения базы данных в конфигурационном файле и добавления её в список при каждом запуске SQLiteStudio.</p> - Test database connection Тест соединения с базой данных - + + Browse for existing database file on local computer + Указать существующий файл базы данных на локальном компьютере + + + Browse Обзор - + Enter an unique database name. - + Введите уникальное имя базы данных. - + This name is already in use. Please enter unique name. - + Данное имя уже используется. Пожалуйста, укажите уникальное имя. - + Enter a database file path. - + Введите путь к базе данных. - + This database is already on the list under name: %1 - + Указанная база данных уже находится в списке под именем %1 - + Select a database type. - + Выберите тип базы данных. + + + + Auto-generated + Автоматически сгенерировано - The name will be auto-generated Имя будет сгенерировано автоматически - + Type the name Введите имя @@ -2321,125 +2371,125 @@ All objects from this group will be moved to parent group. DbTreeModel - + Database: %1 dbtree tooltip База данных: %1 - + Version: dbtree tooltip Версия: - + File size: dbtree tooltip Размер файла: - + Encoding: dbtree tooltip Кодировка: - + Error details: dbtree tooltip Подробности ошибки: - + Table : %1 dbtree tooltip Таблица: %1 - + Columns (%1): dbtree tooltip Столбцы (%1): - + Indexes (%1): dbtree tooltip Индексы (%1): - + Triggers (%1): dbtree tooltip Триггеры (%1): - + Copy Копировать - + Move Переместить - + Include data Включая данные - + Include indexes Включая индексы - + Include triggers Включая триггеры - + Abort Прервать - + Referenced tables Связанные таблицы - + Do you want to include following referenced tables as well: %1 Вы хотите также включить следующие связанные таблицы: %1 - + Name conflict Конфликт имён - + Following object already exists in the target database. Please enter new, unique name, or press '%1' to abort the operation: Данный объект уже существует в целевой базе данных. Пожалуйста введите новое уникальное имя или нажмите %1 для прерывания операции: - + SQL statements conversion Конвертация конструкций SQL - + Following error occurred while converting SQL statements to the target SQLite version: При конвертации конструкций SQL в новую версию SQLite произошла ошибка: - + Would you like to ignore those errors and proceed? Вы хотите проигнорировать эти ошибки и продолжить? @@ -2795,59 +2845,59 @@ Please enter new, unique name, or press '%1' to abort the operation:Отмена - - - + + + Select database to export. Выберите базу данных для экспорта. - + Select table to export. Выберите таблицу для экспорта. - + Enter valid query to export. Введи корректный запрос для экспорта. - + Select at least one object to export. Выберите хотя бы один объект для экспорта. - + You must provide a file name to export to. Необходимо указать имя файла, в который будет произведён экспорт. - + Path you provided is an existing directory. You cannot overwrite it. Указанный путь является существующим каталогом. Его невозможно перезаписать. - + The directory '%1' does not exist. Каталог '%1' не существует. - + The file '%1' exists and will be overwritten. Файл '%1' существует и будет перезаписан. - + All files (*) Все файлы (*) - + Pick file to export to Выберите файл для экспорта - + Internal error during export. This is a bug. Please report it. Внутренняя ошибка во время экспорта. Пожалуйста, вышлите отчёт об этой ошибке. @@ -3118,17 +3168,27 @@ Please enter new, unique name, or press '%1' to abort the operation:Опции - + Input file: Файл-источник: - + Text encoding: Кодировка текста: + + + <p>If enabled, any constraint violation, or invalid data format (wrong column count), or any other problem encountered during import will be ignored and the importing will be continued.</p> + <p>Если опция активирована, все нарушения ограничений, неправильный формат данных (неверное количество столбцов) и любые другие проблемы, возникшие при осуществлении импорта, будут проигнорированы и импорт будет продолжен.</p> + + Ignore errors + Игнорировать ошибки + + + Data source options Опции источника данных @@ -3138,37 +3198,37 @@ Please enter new, unique name, or press '%1' to abort the operation:Отмена - + If you type table name that doesn't exist, it will be created. Если вы введёте несуществующее имя таблицы, она будет создана. - + Enter the table name Введите имя таблицы - + Select import plugin. Выберите модуль импорта. - + You must provide a file to import from. Необходимо указать файл, из которого осуществляется импорт. - + The file '%1' does not exist. Файл '%1' не существует. - + Path you provided is a directory. A regular file is required. Указанный путь является каталогом. Необходимо указать файл. - + Pick file to import from Выберите файл для импорта @@ -3540,7 +3600,7 @@ Please enter new, unique name, or press '%1' to abort the operation:Невозможно применить стиль: %1 - + Cannot export, because no export plugin is loaded. Невозможно произвести экспорт, т.к. не загружено ни одного модуля экспорта. @@ -3550,37 +3610,37 @@ Please enter new, unique name, or press '%1' to abort the operation:Невозможно произвести импорт, т.к. не загружено ни одного модуля импорта. - + Rename window Переименовать окно - + Enter new name for the window: Введите новое имя для окна: - + New updates are available. <a href="%1">Click here for details</a>. Доступны обновления. <a href="%1">Нажмите здесь для подробностей</a>. - + You're running the most recent version. No updates are available. Установлена последняя версия. Обновлений нет. - + Database passed in command line parameters (%1) was already on the list under name: %2 - + База данных, переданная через аргументы командной строки (%1), уже находится в списке под именем %2 - + Database passed in command line parameters (%1) has been temporarily added to the list under name: %2 - База данных, переданная через аргумент командной строки (%1), была временно добавлена в список под именем %2 + База данных, переданная через аргументы командной строки (%1), была временно добавлена в список под именем %2 - + Could not add database %1 to list. Невозможно добавить базу данных %1 в список. @@ -3588,17 +3648,17 @@ Please enter new, unique name, or press '%1' to abort the operation: MdiWindow - + Uncommited changes Неподтверждённые изменения - + Close anyway Всё равно закрыть - + Don't close Не закрывать @@ -3908,68 +3968,68 @@ Please enter new, unique name, or press '%1' to abort the operation: QObject - + Cannot edit columns that are result of compound %1 statements (one that includes %2, %3 or %4 keywords). Невозможно редактировать столцбы, являющиеся результатом составных конструкций %1 (те, которые включают ключевые слова %2, %3 и %4). - + The query execution mechanism had problems with extracting ROWID's properly. This might be a bug in the application. You may want to report this. В механизме выполнения запросов возникли проблемы при корректном извлечении значений ROWID. Предположительно это ошибка в приложении. Возможно стоит отправить отчёт об ошибке. - + Requested column is a result of SQL expression, instead of a simple column selection. Such columns cannot be edited. Запрошенный столбец является результатом SQL выражения, а не просто выбором столбца. Такие столбцы не могут быть отредактированы. - + Requested column belongs to restricted SQLite table. Those tables cannot be edited directly. Запрошенный столбец принадлежит служебной таблице SQLite. Эти таблицы нельзя редактировать напрямую. - + Cannot edit results of query other than %1. Невозможно редактировать результаты запросов, отличных от %1. - + Cannot edit columns that are result of aggregated %1 statements. Невозможно редактировать столцбы, являющиеся результатом агрегирующих конструкций %1. - + Cannot edit columns that are result of %1 statement. Невозможно редактировать столцбы, являющиеся результатом конструкции %1. - + Cannot edit columns that are result of common table expression statement (%1). Невозможно редактировать столцбы, являющиеся результатом обобщённого табличного выражения (%1). - - - - + + + + on conflict: %1 data view tooltip при конфликте: %1 - + references table %1, column %2 data view tooltip ссылается на таблицу %1, столбец %2 - + condition: %1 data view tooltip условие: %1 - + collation name: %1 data view tooltip имя сравнения: %1 @@ -4327,7 +4387,8 @@ Please enter new, unique name, or press '%1' to abort the operation:Все файлы - + + Database file Файл баз данных @@ -4820,69 +4881,69 @@ find next SqlQueryModel - - + + Only one query can be executed simultaneously. Одновременно может быть выполнен только один запрос. - + Uncommited data Неподтверждённые данные - + There are uncommited data changes. Do you want to proceed anyway? All uncommited changes will be lost. Имеются неподтверждённые изменения данных. Вы действительно хотите продолжить? Все неподтверждённые изменения будут утеряны. - + Cannot commit the data for a cell that refers to the already closed database. Невозможно подтвердить данные для ячейки, которая ссылается на уже закрытую базу данных. - + Could not begin transaction on the database. Details: %1 Невозможно начать транзакцию в базе данных. Подробности: %1 - + An error occurred while commiting the transaction: %1 При завершении транзакции возникла ошибка: %1 - + An error occurred while rolling back the transaction: %1 При отмене транзакции возникла ошибка: %1 - + Tried to commit a cell which is not editable (yet modified and waiting for commit)! This is a bug. Please report it. Попытка подтверждения данных для нередактируемой ячейки (которая тем не менее была изменена и ожидает подтверждения). Это программная ошибка. Пожалуйста, отправьте о ней отчёт. - + An error occurred while commiting the data: %1 При подтверждении данных произошла ошибка: %1 - - + + Error while executing SQL query on database '%1': %2 Ошибка при выполнении SQL запроса к базе данных '%1': %2 - + Error while loading query results: %1 Ошибка при загрузке результатов запроса: %1 - + Insert multiple rows Вставить несколько строк - + Number of rows to insert: Количество вставляемых строк: @@ -4890,87 +4951,92 @@ find next SqlQueryView - + Copy Копировать - + Copy as... Копировать как... - + Paste Вставить - + Paste as... Вставить как... - + Set NULL values Установить значения на NULL - + Erase values Стереть содержимое - + Edit value in editor Править содержимое в редакторе - + Commit Подтвердить - + Rollback Откатить - + Commit selected cells Подтвердить выбранные ячейки - + Rollback selected cells Откатить выбранные ячейки - + Define columns to sort by Определить столбцы для сортировки - + Remove custom sorting Сбросить указанную сортировку - + Insert row Вставить строку - + Insert multiple rows Вставить несколько строк - + Delete selected row Удалить выбранную строку - + + No items selected to paste clipboard contents to. + Не выбраны элементы для вставки в них содержимого буфера обмена. + + + Edit value Править содержимое @@ -5580,41 +5646,41 @@ Do you want to commit the structure, or do you want to go back to the structure Условие для частичного индекса - + Name table window triggers Имя - + Event table window triggers Событие - + Condition table window triggers Условие - + Details table window triggers Подробности - + Table window "%1" has uncommited structure modifications and data. В окне таблицы "%1" имеются неподтверждённые изменения структуры и данных. - + Table window "%1" has uncommited data. В окне таблицы "%1" имеются неподтверждённые изменения данных. - + Table window "%1" has uncommited structure modifications. В окне таблицы "%1" имеются неподтверждённые изменения структуры. @@ -5702,33 +5768,33 @@ Do you want to commit the structure, or do you want to go back to the structure DDL - + On view: Для представления: - + Could not process trigger %1 correctly. Unable to open a trigger dialog. Не удалось корректно обработать триггер %1. Невозможно открыть окно триггера. - + Enter a valid condition. Введите корректное условие. - + Enter a valid trigger code. Введите корректный код триггера. - + Error trigger dialog Ошибка - + An error occurred while executing SQL statements: %1 При выполнении конструкций SQL произошла ошибка: diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_sk.qm b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_sk.qm index 1776294..a2ccadd 100644 Binary files a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_sk.qm and b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_sk.qm differ diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_sk.ts b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_sk.ts index c71f491..26e0fb1 100644 --- a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_sk.ts +++ b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_sk.ts @@ -6,87 +6,87 @@ About SQLiteStudio and licenses - + O programe SQLiteStudio a licenciách About - + O programe <html><head/><body><p align="center"><span style=" font-size:11pt; font-weight:600;">SQLiteStudio v%1</span></p><p align="center">Free, open-source, cross-platform SQLite database manager.<br/><a href="http://sqlitestudio.pl"><span style=" text-decoration: underline; color:#0000ff;">http://sqlitestudio.pl</span></a><br/></p><p align="center">%2<br/></p><p align="center">Author and active maintainer:<br/>SalSoft (<a href="http://salsoft.com.pl"><span style=" text-decoration: underline; color:#0000ff;">http://salsoft.com.pl</span></a>)<br/></p></body></html> - + <html><head/><body><p align="center"><span style=" font-size:11pt; font-weight:600;">SQLiteStudio v%1</span></p><p align="center">Slobodný, open-source, multi-platformový SQLite databázový manažér.<br/><a href="http://sqlitestudio.pl"><span style=" text-decoration: underline; color:#0000ff;">http://sqlitestudio.pl</span></a><br/></p><p align="center">%2<br/></p><p align="center">Autor a aktívny správca:<br/>SalSoft (<a href="http://salsoft.com.pl"><span style=" text-decoration: underline; color:#0000ff;">http://salsoft.com.pl</span></a>)<br/></p></body></html> Licenses - + Licencie Environment - + Prostredie Icon directories - + Adresáre s ikonami Form directories - + Adresáre so štýlmi Plugin directories - + Adresáre s pluginmi Application directory - + Adresár aplikácie SQLite 3 version: - + Verzia SQLite3: Configuration directory - + Adresár s konfiguráciou Qt version: - + Verzia Qt: Portable distribution. - + Prenosná distribúcia. MacOS X application boundle distribution. - + MacOS X aplikačná distribúcia. Operating system managed distribution. - + Distribúcia spravovaná operačným systémom. Copy - + Kopírovať <h3>Table of contents:</h3><ol>%2</ol> - + <h3>Tabuľka obsahu:</h3><ol>%2</ol> @@ -94,74 +94,75 @@ Bugs and ideas - + Chyby a nápady Reporter - + Reportér E-mail address - + emailová adresa Log in - + Prihlásenie Short description - + Krátky popis Detailed description - + Detailný popis Show more details - + Zobraziť viacej detailov SQLiteStudio version - + Verzia SQLiteStudio Operating system - + Operačný systém Loaded plugins - + Načítané pluginy Send - + Odoslať You can see all your reported bugs and ideas by selecting menu '%1' and then '%2'. - + Všetky svoje nahlásené chyby a nápady môžte vidieť výberom '%1' a následne '%2'. A bug report sent successfully. - + Správa o chybe bola úspešne odoslaná. An error occurred while sending a bug report: %1 %2 - + Vyskytol sa problém pri posielaní správy o chybe: %1 +%2 @@ -252,7 +253,7 @@ Title - + Titulok @@ -264,7 +265,7 @@ URL - + URL @@ -279,7 +280,7 @@ Delete selected entry - + Vymazať vybranú položku @@ -292,7 +293,7 @@ Log in - + Prihlásenie @@ -302,12 +303,12 @@ Login: - + Meno: Password: - + Heslo: @@ -327,17 +328,17 @@ Abort - + Zrušiť A login must be at least 2 characters long. - + meno musí mať dĺžku minimálne 2 znaky. A password must be at least 5 characters long. - + Heslo musí mať dĺžku minimálne 5 znakov. @@ -350,22 +351,22 @@ Filter collations - + Filtrovať porovnávania Collation name: - + Názov porovnánavania: Implementation language: - + Implementačný jazyk: Databases - + Databázy @@ -385,27 +386,27 @@ Collations editor - + Editor porovnávaní Commit all collation changes - + Potvrdiť všetky zmeny v porovnávaní Rollback all collation changes - + Vrátiť späť všetky zmeny v porovnávaní Create new collation - + Vytvoriť nové porovnávanie Delete selected collation - + Vymazať vybrané porovnávanie @@ -430,7 +431,7 @@ Collations editor window has uncommited modifications. - + Okno editora porovnávaní obsahuje nepotvrdené zmeny. @@ -438,7 +439,7 @@ Pick a color - + Vyberte farbu @@ -446,22 +447,22 @@ Collation name: - + Názov porovnánavania: Named constraint: - + Pomenovanie obmedzenia: Enter a name of the constraint. - + Zadajte názov obmedzenia. Enter a collation name. - + Zadajte názov porovnávania. @@ -469,12 +470,12 @@ Default value: - + Prednastavená hodnota: Named constraint: - + Pomenovanie obmedzenia: @@ -489,7 +490,7 @@ Enter a name of the constraint. - + Zadajte názov obmedzenia. @@ -497,132 +498,142 @@ Column - + Stĺpec Name and type + Názov a typ + + + + Scale - - Data type: + + Precision - + + Data type: + Datový typ: + + + Column name: - + Názov stĺpca: - + Size: - + Veľkosť: - + Constraints - + Obmedzenia - + Unique - + Jedinečný - - - - - - - + + + + + + + Configure - + Konfigurovať - + Foreign Key - + Cudzí klúč - + Collate - + Porovnanie - + Not NULL - + Nie NULL - + Check condition - + Primary Key - + Primárny klúč - + Default - + Prednastavená hodnota - + Advanced mode - + Rozšírený mód Add constraint column dialog - + Pridať obmedzenie Edit constraint column dialog - + Upraviť obmedzenie Delete constraint column dialog - + Vymazať obmedzenie Move constraint up column dialog - + Posunúť obmedzenie hore Move constraint down column dialog - + Posunúť obmedzenie dole Add a primary key column dialog - + Pridať primárny kľúč Add a foreign key column dialog - + Pridať cudzí kľúč Add an unique constraint column dialog - + Pridať jedinečné obmedzenie @@ -672,19 +683,19 @@ but it's okay to use it. Type column dialog constraints - + Typ Name column dialog constraints - + Názov Details column dialog constraints - + Detaily @@ -692,17 +703,17 @@ but it's okay to use it. Foreign table: - + Cudzia tabuľka: Foreign column: - + Cudzí stĺpec: Reactions - + Reakcie @@ -712,27 +723,27 @@ but it's okay to use it. Named constraint - + Pomenovanie obmedzenia Constraint name - + Názov obmedzenia Pick the foreign table. - + Vyberte cudziu tabuľku. Pick the foreign column. - + Vyberte cudzí stĺpec. Enter a name of the constraint. - + Zadajte názov obmedzenia. @@ -740,33 +751,33 @@ but it's okay to use it. Autoincrement - + Autoikrement Sort order: - + Zoradiť: Named constraint: - + Pomenovanie obmedzenia: On conflict: - + Pri konflikte: Enter a name of the constraint. - + Zadajte názov obmedzenia. Autoincrement (only for %1 type columns) column primary key - + Autoinkrement (iba pre stĺpec typu %1) @@ -774,17 +785,17 @@ but it's okay to use it. Named constraint: - + Pomenovanie obmedzenia: On conflict: - + Pri konflikte: Enter a name of the constraint. - + Zadajte názov obmedzenia. @@ -793,85 +804,85 @@ but it's okay to use it. Column: %1 completer statusbar - + Stĺpec: %1 Table: %1 completer statusbar - + Tabuľka: %1 Index: %1 completer statusbar - + Index: %1 Trigger: %1 completer statusbar - + Spúšťač: %1 View: %1 completer statusbar - + Pohľad: %1 Database: %1 completer statusbar - + Databáza: %1 Keyword: %1 completer statusbar - + Kľúčové slovo: %1 Function: %1 completer statusbar - + Funkcia: %1 Operator: %1 completer statusbar - + Operátor: %1 String completer statusbar - + Reťazec Number completer statusbar - + Číslo Binary data completer statusbar - + Binárne dáta Collation: %1 completer statusbar - + Porovnávanie: %1 Pragma function: %1 completer statusbar - + Pragma funkcia : %1 @@ -880,72 +891,72 @@ but it's okay to use it. Configuration - + Konfigurácia Search - + Hľadať General - + Všeobecné Keyboard shortcuts - + Klávesové skratky Look & feel - + Vzhľad Style - + Štýl Fonts - + Fonty Colors - + Farby Plugins - + Pluginy Code formatters - + Formát kódu Data browsing - + Prezeranie dát Data editors - + Editory dát Data browsing and editing - + Prezeranie a úprava dát Number of data rows per page: - + Počet data riadkov na stranu: @@ -961,12 +972,12 @@ but it's okay to use it. Data types - + Datové typy Available editors: - + Dostupné editory: @@ -976,38 +987,38 @@ but it's okay to use it. Schema editing - + Úprava schémy Number of DDL changes kept in history. - + Počet DDL zmien uchovávaných v histórii. DDL history size: - + Veľkosť DDL histórie: Don't show DDL preview dialog when commiting schema changes - + Nezobrazovať náhľad DDL pri potvrdzovaní zmien v schéme SQL queries - + SQL dotazy Number of queries kept in the history. - + Počet dotazov uchovávaných v histórii. History size: - + Veľkosť SQL histórie: @@ -1022,53 +1033,53 @@ but it's okay to use it. Updates - + Aktualizácie Automatically check for updates at startup - + Kontrolovať aktualizácie pri štarte Session - + Sedenie Restore last session (active MDI windows) after startup - + Obnoviť posledné sedenie (aktívne okná) pri štarte Filter shortcuts by name or key combination - + Filtrovať podľa názvu alebo klávesovej skratky Action - + Akcia Key combination - + Klávesová skratka Language - + Jazyk Changing language requires application restart to take effect. - + Je potrebné reštartovať aplikáciu aby sa zmena jazyka prejavila. Database list - + Zoznam databáz @@ -1168,7 +1179,7 @@ but it's okay to use it. Hide built-in plugins - + Nezobrazovať interné pluginy @@ -1386,7 +1397,7 @@ but it's okay to use it. Version: plugin details - + Verzia: @@ -1431,7 +1442,7 @@ but it's okay to use it. Details - + Detaily @@ -1441,17 +1452,17 @@ but it's okay to use it. Add new data type - + Pridať nový datový typ Rename selected data type - + Premenovať vybraný datový typ Delete selected data type - + Vymazať vybraný datový typ @@ -1464,27 +1475,27 @@ but it's okay to use it. The condition - + Podmienka Named constraint: - + Pomenovanie obmedzenia: On conflict - + Pri konflikte Enter a valid condition. - + Zadajte platnú podmienku. Enter a name of the constraint. - + Zadajte názov obmedzenia. @@ -1493,49 +1504,49 @@ but it's okay to use it. New constraint constraint dialog - + Nové obmedzenie Create constraint dialog - + Vytvoriť Edit constraint dialog window - + Upraviť obmedzenie Apply constraint dialog - + Aplikovať Primary key table constraints - + Primárny klúč Foreign key table constraints - + Cudzí klúč Unique table constraints - + Jedinečnosť Not NULL table constraints - + Nie NULL @@ -1547,13 +1558,13 @@ but it's okay to use it. Collate table constraints - + Porovnanie Default table constraints - + Prednastavená hodnota @@ -1562,13 +1573,13 @@ but it's okay to use it. Table table constraints - + Tabuľka Column (%1) table constraints - + Stĺpec (%1) @@ -1580,19 +1591,19 @@ but it's okay to use it. Type table constraints - + Typ Details table constraints - + Detaily Name table constraints - + Názov @@ -1601,118 +1612,119 @@ but it's okay to use it. Filter data data view - + Filtrovať Grid view - + Tabuľkové zobrazenie Form view - + Formulárové zobrazenie Refresh table data data view - + Obnoviť dáta v tabuľke First page data view - + Prvá strana Previous page data view - + Predchádzajúca strana Next page data view - + Nasledujúca strana Last page data view - + Posledná strana Apply filter data view - + Aplikovať filter Commit changes for selected cells data view - + Potvrdiť zmeny pre vybrané bunky Rollback changes for selected cells data view - + Vrátiť späť zmeny pre vybrané bunky Show grid view of results sql editor - + Výsledky zobraziť v tabuľke Show form view of results sql editor - + Výsledky zobraziť vo formulári Filter by text data view - + Filtrovať pomocou textu Filter by the Regular Expression data view - + Filtrovať pomocou regulárneho výrazu Filter by SQL expression data view - + Filtrovať pomocou SQL výrazu Tabs on top data view - + Záložky hore Tabs at bottom data view - + Záložky dole Total number of rows is being counted. Browsing other pages will be possible after the row counting is done. - + Spočítava sa celkový počet riadkov. +Prezeranie ďalších strán bude možné až po dokončení spočítavania. Row: %1 - + Riadok:%1 @@ -1720,27 +1732,27 @@ Browsing other pages will be possible after the row counting is done. Convert database - + Konvertovať databázu Source database - + Zdrojová databáza Source database version: - + Verzia zdrojovej databázy: Target database - + Cieľová databáza Target version: - + Cieľová databáza: @@ -1750,12 +1762,12 @@ Browsing other pages will be possible after the row counting is done. Target file: - + Cieľový súbor: Name of the new database: - + Názov novej databázy: @@ -1818,93 +1830,133 @@ Browsing other pages will be possible after the row counting is done. Database + Databáza + + + + Database type - + Database driver + Databázový ovládač + + + + Generate automatically - - Name + + Options + Voľby + + + + Permanent (keep it in configuration) - - Type + + Test connection - + Name + Názov + + + Type + Typ + + Browse for database file on local computer + Hľadať databázový súbor na lokálnom počítači + + + + Create new database file - + + File + Súbor + + + + Name (on the list) - + Generate name basing on file path - + Generovať názov na základe cesty k súboru - Permanent - + Uložiť natrvalo - + <p>Enable this if you want the database to be stored in configuration file and restored every time SQLiteStudio is started.</p> aasfd - + <p>Databáza sa uloží do konfiguračného súboru a bude obnovená pri každom spustení SQLiteStudia.</p> - Test database connection + Otestovať spojenie s databázou + + + + Browse for existing database file on local computer - + Browse - + Prehľadávať - + Enter an unique database name. - + Zadajte názov databázy. - + This name is already in use. Please enter unique name. - + Tento názov už existuje. Prosím zadajte iný názov. - + Enter a database file path. - + Zadajte cestu k databázovému súboru. - + This database is already on the list under name: %1 - + Táto databáza už je v zozname pod názvom: %1 - + Select a database type. + Vyberte typ databázy. + + + + Auto-generated - The name will be auto-generated - + Názov bude vygenerovaný automaticky - + Type the name - + Zadajte meno @@ -1912,47 +1964,48 @@ Browsing other pages will be possible after the row counting is done. Delete table - + Vymazať tabuľku Are you sure you want to delete table %1? - + Ste si istý, že chcete vymazať tabuľku %1? Delete index - + Vymazať index Are you sure you want to delete index %1? - + Ste si istý, že chcete vymazať index %1? Delete trigger - + Vymazať spúšťač Are you sure you want to delete trigger %1? - + Ste si istý, že chcete vymazať spúšťač %1? Delete view - + Vymazať pohľad Are you sure you want to delete view %1? - + Ste si istý, že chcete vymazať pohľad %1? + Error while dropping %1: %2 - + Vyskystla sa chyba počas mazania %1: %2 @@ -1960,260 +2013,261 @@ Browsing other pages will be possible after the row counting is done. Databases - + Databázy Filter by name - + Filtrovať podľa názvu Copy - + Kopírovať Paste - + Vložiť Select all - + Vybrať všetko Create a group - + Vytvoriť skupinu Delete the group - + Vymazať skupinu Rename the group - + Premenovať skupinu Add a database - + Pridať databázu Edit the database - + Upraviť databázu Remove the database - + Odstrániť databázu Connect to the database - + Pripojiť sa k databáze Disconnect from the database - + Odpojiť sa od databázy Import - + Importovať Export the database - + Exportovať databázu Convert database type - + Konvertovať databázu Vacuum - + Vacuum Integrity check - + Kontrola integrity Create a table - + Vytvoriť tabuľku Edit the table - + Upraviť tabuľku Delete the table - + Vymazať tabuľku Export the table - + Exportovať tabuľku Import into the table - + Importovať do tabuľky Populate table - + Naplniť tabuľku Create similar table - + Vytvoriť rovnakú tabuľku Reset autoincrement sequence - + Resetovať sekvenciu autoinkrementu Create an index - + Vytvoriť index Edit the index - + Upraviť index Delete the index - + Vymazať index Create a trigger - + Vytvoriť spúšťač Edit the trigger - + Upraviť spúšťač Delete the trigger - + Vymazať spúšťač Create a view - + Vytvoriť pohľad Edit the view - + Upraviť pohľad Delete the view - + Vymazať pohľad Add a column - + Pridať stĺpec Edit the column - + Upraviť stĺpec Delete the column - + Vymazať stĺpec Delete selected items - + Vymazať vybrané položky Clear filter - + Zrušiť filter Refresh all database schemas - + Obnoviť všetky databázové schémy Refresh selected database schema - + Obnoviť vybranú databázovú schému Database - + Databáza Grouping - + Zoskupovanie Create group - + Vytvoriť skupinu Group name - + Názov skupiny Entry with name %1 already exists in group %2. - + Položka s názvom %1 už existuje v skupine %2. Delete group - + Vymazať skupinu Are you sure you want to delete group %1? All objects from this group will be moved to parent group. - + Ste si istý, že chcete vymazať skupinu %1? +Všetky objekty z tejto skupiny budú presunuté do nadradenej skupiny. Delete database - + Vymazať databázu Are you sure you want to delete database '%1'? - + Ste si istý, že chcete vymazať databázu '%1'? @@ -2230,32 +2284,32 @@ All objects from this group will be moved to parent group. Error while executing VACUUM on the database %1: %2 - + Vyskytla sa chyba počas vykonávania príkazu VACUUM na databáze %1: %2 VACUUM execution finished successfully. - + VACUUM úspešne skončilo. Integrity check (%1) - + Kontrola integrity (%1) Reset autoincrement - + Resetovať autoinkrement Are you sure you want to reset autoincrement value for table '%1'? - + Ste si istý, že chcete zresetovať hodnotu autoinkrementu pre tabuľku %1 ? An error occurred while trying to reset autoincrement value for table '%1': %2 - + Vyskytla sa chyba pri pokuse o zresetovanie hodnoty autoinkrementu pre tebuľku '%1': %2 @@ -2318,123 +2372,123 @@ All objects from this group will be moved to parent group. DbTreeModel - + Database: %1 dbtree tooltip - + Databáza: %1 - + Version: dbtree tooltip - + Verzia: - + File size: dbtree tooltip - + Veľkosť súboru: - + Encoding: dbtree tooltip - + Kódovanie: - + Error details: dbtree tooltip - + Detaily chyby: - + Table : %1 dbtree tooltip - + Tabuľka : %1 - + Columns (%1): dbtree tooltip - + Stĺpce (%1): - + Indexes (%1): dbtree tooltip - + Indexy (%1): - + Triggers (%1): dbtree tooltip - + Spúšťače (%1): - + Copy - + Kopírovať - + Move - + Include data - + Include indexes - + Include triggers - + Abort - + Zrušiť - + Referenced tables - + Do you want to include following referenced tables as well: %1 - + Name conflict - + Following object already exists in the target database. Please enter new, unique name, or press '%1' to abort the operation: - + SQL statements conversion - + Following error occurred while converting SQL statements to the target SQLite version: - + Would you like to ignore those errors and proceed? @@ -2456,7 +2510,7 @@ Please enter new, unique name, or press '%1' to abort the operation: DDL history - + DDL história @@ -2464,12 +2518,12 @@ Please enter new, unique name, or press '%1' to abort the operation: Queries to be executed - + Dotazy, ktoré budú vykonané Don't show again - + Znovu nezobrazovať @@ -2485,83 +2539,83 @@ Please enter new, unique name, or press '%1' to abort the operation: Query - + Dotaz History - + História Results in the separate tab - + Výsledky zobraziť v samostatnej záložke Results below the query - + Výsledky zobraziť pod dotaz SQL editor %1 - + SQL editor %1 Results - + Výsledky Execute query - + Vykonať dotaz Explain query - + Vysvetliť dotaz Clear execution history sql editor - + Vyprázdniť históriu dotazov Export results sql editor - + Vyexportovať výsledky Create view from query sql editor - + Vytvoriť pohľad z dotazu Previous database - + Predchádzajúca databáza Next database - + Nasledujúca databáza Show next tab sql editor - + Zobraziť nasledujúcu záložku Show previous tab sql editor - + Zobraziť predchádzajúcu záložku @@ -2578,42 +2632,42 @@ Please enter new, unique name, or press '%1' to abort the operation: Active database (%1/%2) - + Aktívna databáza (%1/%2) Query finished in %1 second(s). Rows affected: %2 - + Dotaz trval %1 sekúnd. Počet dotknutých riadkov: %2 Query finished in %1 second(s). - + Dotaz trval %1 sekúnd. Clear execution history - + Vyprázdniť históriu dotazov Are you sure you want to erase the entire SQL execution history? This cannot be undone. - + Ste si istý, že chete vymazať celú históriu SQL dotazov? Túto operáciu nieje možné vrátiť späť. Cannot export, because no export plugin is loaded. - + Nemôžem exportovať, lebo nebol načítaný žiaden plugin na export. No database selected in the SQL editor. Cannot create a view for unknown database. - + Nebola vybraná žiadna databáza v SQL editore. Nemôžem vytvoriť view pre neznámu databázu. Editor window "%1" has uncommited data. - + Okno editora "%1" obsahuje nepotrdené dáta. @@ -2639,210 +2693,210 @@ Please enter new, unique name, or press '%1' to abort the operation: Export - + Export What do you want to export? - + Čo chcete exportovať? A database - + Databáza A single table - + Jednotlivá tabuľka Query results - + Výsledky dotazu Table to export - + Tabuľka na export Database - + Databáza Table - + Tabuľka Options - + Voľby When this option is unchecked, then only table DDL (CREATE TABLE statement) is exported. - + Ak táto voľba nebude označená, tak sa vyexportuje len DDL tabuľky(príkaz CREATE TABLE). Export table data - + Exportovať dáta tabuľky Export table indexes - + Exportovať indexy tabuľky Export table triggers - + Exportovať spúšťače tabuľky Note, that exporting table indexes and triggers may be unsupported by some output formats. - + Poznámka. Niektoré exportné formáty nemusia podporovať export indexov a spúšťačov. Select database objects to export - + Vyberte databázové objekty, ktoré chcete exportovať Export data from tables - + Exportovať dáta z tabuliek Select all - + Vybrať všetko Deselect all - + Zrušiť výber Database: - + Databáza: Query to export results for - + Dotaz pre export výsledkov pre Query to be executed for results: - + Dotaz, ktorý bude vykonaný pre získanie dát: Export format and options - + Formát exportu a možnosti Export format - + Formát exportu Output - + Výstup Exported file path - + Cesta k výstupnému súboru Clipboard - + Schránka File - + Súbor Exported text encoding: - + Kódovanie vyexportovaného textu: Export format options - + Možnosti formátu exportu Cancel - + Zrušiť - - - + + + Select database to export. - + Vyberte databázu, ktorú chcete exportovať. - + Select table to export. - + Vyberte tabuľku, ktorú chcete exportovať. - + Enter valid query to export. - + Zadajte platný dotaz pre export. - + Select at least one object to export. - + Vyberte aspoň jeden objekt pre export. - + You must provide a file name to export to. - + Musíte zadať názov súboru, do ktorého sa budú exportovať dáta. - + Path you provided is an existing directory. You cannot overwrite it. - + Cesta, ktorú ste zadali je existujúci adresár. Nemôžte ho prepísať. - + The directory '%1' does not exist. - + Adresár %1 neexistuje. - + The file '%1' exists and will be overwritten. - + Súbor %1 už existuje a bude prepísaný. - + All files (*) - + Všetky súbory (*) - + Pick file to export to - + Výber súboru do ktorého sa budú exportovať dáta - + Internal error during export. This is a bug. Please report it. - + Počas exportu sa vyskytla interná chyba. Toto je chyba v programe. Prosím nahláste ju. @@ -2868,49 +2922,49 @@ Please enter new, unique name, or press '%1' to abort the operation: Commit row form view - + Potvrdiť riadok Rollback row form view - + Vrátiť späť riadok First row form view - + Prvý riadok Previous row form view - + Predchádzajúci riadok Next row form view - + Nasledujúci riadok Last row form view - + Posledný riadok Insert new row form view - + Vložiť nový riadok Delete current row form view - + Vymazať aktuálny riadok @@ -2933,7 +2987,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Type: - + Typ: @@ -2948,7 +3002,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Databases - + Databázy @@ -3078,92 +3132,102 @@ Please enter new, unique name, or press '%1' to abort the operation: Import data - + Import dát Table to import to - + Tabuľka na import Table - + Tabuľka Database - + Databáza Data source to import from - + Dátový zdroj na import Data source type - + Typ dátového zdroja Options - + Voľby - + Input file: - + Vstupný súbor: - + Text encoding: + Kódovanie textu: + + + + <p>If enabled, any constraint violation, or invalid data format (wrong column count), or any other problem encountered during import will be ignored and the importing will be continued.</p> - Data source options + Ignore errors + + + Data source options + Nastavenia dátového zdroja + Cancel - + Zrušiť - + If you type table name that doesn't exist, it will be created. - + Ak zadáte názov neexistujúcej tabuľky, tak bude vytvorená. - + Enter the table name - + Zadajte názov tabuľky - + Select import plugin. - + Vyberte importný plugin. - + You must provide a file to import from. - + Musíte zadať súbor, z ktorého sa budú importovať dáta. - + The file '%1' does not exist. - + Súbor %1 neexistuje. - + Path you provided is a directory. A regular file is required. - + Cesta, ktorú ste zadali je adresár. Prosím zadajte celú cestu. - + Pick file to import from - + Výber súboru, z ktorého sa budú importovať dáta @@ -3172,17 +3236,17 @@ Please enter new, unique name, or press '%1' to abort the operation: Index - + Index On table: - + Na tabuľke: Index name: - + Názov indexu: @@ -3192,27 +3256,27 @@ Please enter new, unique name, or press '%1' to abort the operation: Unique index - + Jedinečný index Column - + Stĺpec Collation - + Porovnávanie Sort - + Zoradiť DDL - + DDL @@ -3232,12 +3296,12 @@ Please enter new, unique name, or press '%1' to abort the operation: Select at least one column. - + Vyberte minimálne jeden stĺpec. Enter a valid condition. - + Zadajte platnú podmienku. @@ -3249,7 +3313,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Sort order table constraints - + Zoradiť @@ -3275,12 +3339,12 @@ Please enter new, unique name, or press '%1' to abort the operation: Language - + Jazyk Please choose language: - + Prosím vyberte si jazyk: @@ -3288,27 +3352,27 @@ Please enter new, unique name, or press '%1' to abort the operation: Database toolbar - + Databázová lišta Structure toolbar - + Lišta štruktúr Tools - + Nástroje Window list - + Lišta okien View toolbar - + Lišta pohľadov @@ -3323,7 +3387,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Data editors - + Editory dát @@ -3333,77 +3397,77 @@ Please enter new, unique name, or press '%1' to abort the operation: Running in debug mode. Debug messages are printed to the standard output. - + Beží v ladiacom móde. Ladiace správy sú vypisované na štandardný výstup. You need to restart application to make the language change take effect. - + Je potrebné reštartovať aplikáciu aby sa zmena jazyka prejavila. Open SQL editor - + Otvoriť SQL editor Open DDL history - + Otvoriť DDL históriu Open SQL functions editor - + Otvoriť editor SQL funkcií Open collations editor - + Otvoriť editor porovnávaní Import - + Import Export - + Export Open configuration dialog - + Konfigurácia Tile windows - + Oddeliť okná Tile windows horizontally - + Oddeliť okná horizontálne Tile windows vertically - + Oddeliť okná vertikálne Cascade windows - + Okná kaskádovito Next window - + Nasledujúce okno Previous window - + Predchádzajúce okno @@ -3413,184 +3477,184 @@ Please enter new, unique name, or press '%1' to abort the operation: Close selected window - + Zatvoriť vybrané okno Close all windows but selected - + Zatvoriť všetky okná okrem vybraného Close all windows - + Zatvoriť všetky okná Restore recently closed window - + Obnoviť posledné zatvorené okno Rename selected window - + Premenovať vybrané okno Open Debug Console - + Otvoriť ladiacu konzolu Report a bug - + Nahlásiť chybu Propose a new feature - + Navrhnúť novú funkciu About - + O programe Licenses - + Licencie Open home page - + Otvoriť domovskú stránku Open forum page - + Otvoriť fórum User Manual - + Užívateľský manuál SQLite documentation - + Dokumentácia SQLite Report history - + História hlásení Check for updates - + Skontrolovať akutalizácie Database menubar - + Databázy Structure menubar - + Štruktúry View menubar - + Zobrazenie Window list menubar view menu - + Lišta okien Tools menubar - + Nástroje Help - + Pomoc Could not set style: %1 main window - + Nemôžem nastaviť štýl: %1 - + Cannot export, because no export plugin is loaded. - + Nemôžem exportovať, lebo nebol načítaný žiaden plugin na export. Cannot import, because no import plugin is loaded. - + Nemôžem importovať, lebo nebol načítaný žiaden plugin na import. - + Rename window - + Premenovať okno - + Enter new name for the window: - + Zadajte nový názov pre okno: - + New updates are available. <a href="%1">Click here for details</a>. - + Nové aktualizácie sú dostupné. <a href="%1">Kliknite sem pre zobrazenie detailov</a>. - + You're running the most recent version. No updates are available. - + Niesú dostupné žiadne aktualizácie. Používate aktuálnu verziu. - + Database passed in command line parameters (%1) was already on the list under name: %2 - + Database passed in command line parameters (%1) has been temporarily added to the list under name: %2 - + Could not add database %1 to list. - + Nemôžem pridať databázu %1 do zoznamu. MdiWindow - + Uncommited changes - + Nepotvrdené zmeny - + Close anyway - + Don't close @@ -3601,7 +3665,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Null value multieditor - + Hodnota null @@ -3639,7 +3703,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Date - + Dátum @@ -3647,7 +3711,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Date & time - + Dátum a čas @@ -3664,7 +3728,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Number numeric multi editor tab name - + Číslo @@ -3682,22 +3746,22 @@ Please enter new, unique name, or press '%1' to abort the operation: Cut - + Vystrihnúť Copy - + Kopírovať Paste - + Vložiť Delete - + Vymazať @@ -3723,28 +3787,28 @@ Please enter new, unique name, or press '%1' to abort the operation: New constraint - + Nové obmedzenie Primary Key new constraint dialog - + Primárny klúč Foreign Key new constraint dialog - + Cudzí klúč Unique new constraint dialog - + Jedinečnosť @@ -3757,19 +3821,19 @@ Please enter new, unique name, or press '%1' to abort the operation: Not NULL new constraint dialog - + Nie NULL Collate new constraint dialog - + Porovnanie Default new constraint dialog - + Prednastavená hodnota @@ -3782,7 +3846,7 @@ Please enter new, unique name, or press '%1' to abort the operation: New updates are available! - + Nové aktualizácie sú dostupné! @@ -3792,7 +3856,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Current version - + Nainštalovaná verzia @@ -3802,7 +3866,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Check for updates on startup - + Kontrolovať aktualizácie pri štarte @@ -3843,38 +3907,38 @@ Please enter new, unique name, or press '%1' to abort the operation: Populate table - + Naplniť tabuľku Database - + Databáza Table - + Tabuľka Columns - + Stĺpce Number of rows to populate: - + Počet riadkov na naplnenie: Populate populate dialog button - + Naplniť Configure - + Konfigurovať @@ -3884,319 +3948,319 @@ Please enter new, unique name, or press '%1' to abort the operation: Select database with table to populate - + Vyberte databázu s tabuľkou na naplnenie Select table to populate - + Vyberte tabuľku na naplnenie You have to select at least one column. - + Musíte vybrať minimálne jeden stĺpec. QObject - + Cannot edit columns that are result of compound %1 statements (one that includes %2, %3 or %4 keywords). - + The query execution mechanism had problems with extracting ROWID's properly. This might be a bug in the application. You may want to report this. - + Requested column is a result of SQL expression, instead of a simple column selection. Such columns cannot be edited. - + Requested column belongs to restricted SQLite table. Those tables cannot be edited directly. - + Cannot edit results of query other than %1. - + Cannot edit columns that are result of aggregated %1 statements. - + Cannot edit columns that are result of %1 statement. - + Cannot edit columns that are result of common table expression statement (%1). - - - - + + + + on conflict: %1 data view tooltip - + Pri konflikte: %1 - + references table %1, column %2 data view tooltip - + condition: %1 data view tooltip - + collation name: %1 data view tooltip - + Názov porovnánavania: %1 Data grid view - + Tabuľkové zobrazenie dát Copy cell(s) contents to clipboard - + Kopírovať obsah buniek do schránky Paste cell(s) contents from clipboard - + Vložiť obsah buniek zo schránky Set empty value to selected cell(s) - + Vymazať hodnoty z vybraných buniek Set NULL value to selected cell(s) - + Nastaviť NULL hodnotu vo vybraných bunkách Commit changes to cell(s) contents - + Potvrdiť zmeny v bunkách Rollback changes to cell(s) contents - + Vrátiť späť zmeny v bunkách Delete selected data row - + Vymazať vybraný riadok Insert new data row - + Vložiť nový riadok Open contents of selected cell in a separate editor - + Otvoriť obsah vybranej bunky v samostatnom editore Total pages available: %1 - + Celkový počet strán: %1 Total rows loaded: %1 - + Celkový počet riadkov: %1 Data view (both grid and form) - + Zobrazenie dát (tabuľka a formulár) Refresh data - + Obnoviť dáta Switch to grid view of the data - + Prepnúť na tabuľkové zobrazenie dát Switch to form view of the data - + Prepnúť na formulárové zobrazenie dát Database list - + Zoznam databáz Delete selected item - + Vymazať vybranú položku Clear filter contents - + Vymazať filter Refresh schema - + Obnoviť schému Refresh all schemas - + Obnoviť všetky schémy Add database - + Pridať databázu Select all items - + Vybrať všetky položky Copy selected item(s) - + Kopírovať vybrané položky Paste from clipboard - + Vložiť zo schránky Tables - + Tabuľky Indexes - + Indexy Triggers - + Spúšťače Views - + Pohľady Columns - + Stĺpce Data form view - + Formulárové zobrazenie dát Commit changes for current row - + Potvrdiť zmeny pre aktuálny riadok Rollback changes for current row - + Vrátiť späť zmeny na aktuálnom riadku Go to first row on current page - + Prejsť na prvý riadok na aktuálnej strane Go to next row - + Prejsť na nasledujúci riadok Go to previous row - + Prejsť na predchádzajúci riadok Go to last row on current page - + Prejsť na posledný riadok na aktuálnej strane Insert new row - + Vložiť nový riadok Delete current row - + Vymazať aktuálny riadok Main window - + Hlavné okno Open SQL editor - + Otvoriť SQL editor Previous window - + Predchádzajúce okno Next window - + Nasledujúce okno Hide status area - + Skryť status okno Open configuration dialog - + Otvoriť konfiguračné okno Open Debug Console - + Otvoriť ladiacu konzolu @@ -4207,19 +4271,19 @@ Please enter new, unique name, or press '%1' to abort the operation: Cut selected text - + Vystrihnúť vybraný text Copy selected text - + Kopírovať vybraný text Delete selected text - + Vymazať vybraný text @@ -4241,72 +4305,72 @@ Please enter new, unique name, or press '%1' to abort the operation: Select whole editor contents - + Označiť všetko Save contents into a file - + Uložiť SQL do súboru Load contents from a file - + Načítať SQL zo súboru Find in text - + Nájsť v SQL Find next - + Nájsť ďalší Find previous - + Nájsť predchádzajúci Replace in text - + Nahradiť v SQL Delete current line - + Vymazať aktuálny riadok Request code assistant - + Otvoriť SQL pomocníka Format contents - + Formátovať SQL Move selected block of text one line down - + Presunúť blok kódu o riadok nižšie Move selected block of text one line up - + Presunúť blok kódu o riadok vyššie Copy selected block of text and paste it a line below - + Kopírovať blok kódu a vložiť ho na riadok nižšie Copy selected block of text and paste it a line above - + Kopírovať blok kódu a vložiť ho na riadok vyššie @@ -4319,9 +4383,10 @@ Please enter new, unique name, or press '%1' to abort the operation: - + + Database file - + Databázový súbor @@ -4331,7 +4396,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Delete selected entry - + Vymazať vybranú položku @@ -4341,7 +4406,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Execute query - + Vykonať dotaz @@ -4386,102 +4451,102 @@ Please enter new, unique name, or press '%1' to abort the operation: Refresh table structure - + Obnoviť štruktúru tabuľky Add new column - + Pridať nový stĺpec Edit selected column - + Upraviť vybraný stĺpec Delete selected column - + Vymazať vybraný stĺpec Export table data - + Exportovať dáta z tabuľky Import data to the table - + Importovať dáta do tabuľky Add new table constraint - + Pridať nové obmedzenie Edit selected table constraint - + Upraviť vybrané obmedzenie Delete selected table constraint - + Vymazaťˇvybrané obmedzenie Refresh table index list - + Obnoviť zoznam indexov Add new index - + Pridať nový index Edit selected index - + Upraviť vybraný index Delete selected index - + Vymazať vybraný index Refresh table trigger list - + Obnoviť zoznam spúšťačov Add new trigger - + Pridať nový spúšťač Edit selected trigger - + Upraviť vybraný spúšťač Delete selected trigger - + Vymazať vybraný spúšťač Go to next tab - + Prechod na nasledujúcu záložku Go to previous tab - + Prechod na predchádzajúcu záložku @@ -4499,7 +4564,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Uncommited changes - + Nepotvrdené zmeny @@ -4514,22 +4579,22 @@ Following items are pending: Find or replace - + Nájsť alebo nahradiť Find: - + Nájsť: Case sensitive - + Rozlišovať veľké písmená Search backwards - + Hľadať spätne @@ -4540,22 +4605,23 @@ Following items are pending: Replace && find next - + Nahradiť a +nájsť ďalší Replace with: - + Nahradiť s: Replace all - + Nahradiť všetko Find - + Nájsť @@ -4563,34 +4629,34 @@ find next Sort by columns - + Zoradiť podľa stĺpcov Column - + Stĺpec Order - + Usporiadanie Sort by: %1 - + Zoradiť podľa : %1 Move column up - + Posunúť stĺpec hore Move column down - + Posunúť stĺpec dole @@ -4605,13 +4671,13 @@ find next Copy sql editor - + Kopírovať Paste sql editor - + Vložiť @@ -4623,7 +4689,7 @@ find next Select all sql editor - + Vybrať všetko @@ -4647,25 +4713,25 @@ find next Format SQL sql editor - + Formátovať SQL Save SQL to file sql editor - + Uložiť SQL do súboru Load SQL from file sql editor - + Načítať SQL zo súboru Delete line sql editor - + Vymazať riadok @@ -4695,25 +4761,25 @@ find next Find sql editor - + Nájsť Find next sql editor - + Nájsť ďalší Find previous sql editor - + Nájsť predchádzajúci Replace sql editor - + Nahradiť @@ -4728,7 +4794,7 @@ find next Save to file - + Uložiť do súboru @@ -4743,7 +4809,7 @@ find next Open file - + Otvoriť súbor @@ -4762,30 +4828,30 @@ find next Column: data view tooltip - + Stĺpec: Data type: data view - + Datový typ: Table: data view tooltip - + Tabuľka: Constraints: data view tooltip - + Obmedzenia: This cell is not editable, because: %1 - + Táto bunka nieje editovateľná, pretože: %1 @@ -4810,159 +4876,164 @@ find next SqlQueryModel - - + + Only one query can be executed simultaneously. - + Nemôže byť spustených viacero dotazov súčasne. - + Uncommited data - + Nepotvrdené dáta - + There are uncommited data changes. Do you want to proceed anyway? All uncommited changes will be lost. - + Sú tu nepotvrdené zmeny. Chcete aj napriek tomu pokračovať? Všetky nepotvrdené zmeny budú stratené. - + Cannot commit the data for a cell that refers to the already closed database. - + Nemôžem potrdiť dáta bunky, ktorá odkazuje na už uzatvorenú databázu. - + Could not begin transaction on the database. Details: %1 - + Nemôžem začať tranzakciu na databáze. Detaily: %1 - + An error occurred while commiting the transaction: %1 - + Vyskytla sa chyba počas potvrdzovania tranzakcie: %1 - + An error occurred while rolling back the transaction: %1 - + Vyskytla sa chyba počas vracania späť tranzakcie: %1 - + Tried to commit a cell which is not editable (yet modified and waiting for commit)! This is a bug. Please report it. - + Nastal pokus o potvrdenie zmien v bunke, ktorú nieje možné upravovať (napriek tomu bola upravená a čaká na potvrdenie)! Toto je chyba. Prosím nahláste ju. - + An error occurred while commiting the data: %1 - + Vyskytla sa chyba počas potvrdzovania dát: %1 - - + + Error while executing SQL query on database '%1': %2 - + Vyskytla sa chyba počas vykonávania SQL dotazu na databáze '%1': %2 - + Error while loading query results: %1 - + Vyskytla sa chyba počas načítavania výsledkov dotazu: %1 - + Insert multiple rows - + Vložiť viacero riadkov - + Number of rows to insert: - + Počet vkládaných riadkov: SqlQueryView - + Copy - + Kopírovať - + Copy as... - + Kopírovať ako... - + Paste - + Vložiť - + Paste as... - + Vložiť ako... - + Set NULL values - + Nastaviť null hodnoty - + Erase values - + Vymazať hodnoty - + Edit value in editor - + Upraviť hodnotu v editory - + Commit - + Potvrdiť - + Rollback - + Vrátiť späť - + Commit selected cells - + Potvrdiť vybrané bunky - + Rollback selected cells - + Vrátiť späť vybrané bunky - + Define columns to sort by - + Vybrať stĺpce na zoradenie podľa - + Remove custom sorting - + Odstrániť užívateľské triedenie - + Insert row - + Vložiť riadok - + Insert multiple rows - + Vložiť viacero riadkov - + Delete selected row - + Vymazať viacero riadkov + + + + No items selected to paste clipboard contents to. + Neboli vybrané žiadne položky na vloženie obsahu schránky. - + Edit value - + Upraviť hodnotu @@ -4970,12 +5041,12 @@ find next Error while commiting new row: %1 - + Vyskytla sa chyba počas potvrdzovania nového riadka: %1 Error while deleting row from table %1: %2 - + Vyskytla sa chyba počas mazania riadka z tabuľky %1: %2 @@ -4983,17 +5054,17 @@ find next Status - + Status Copy - + Kopírovať Clear - + Vyčistiť @@ -5002,19 +5073,19 @@ find next Type table constraints - + Typ Details table constraints - + Detaily Name table constraints - + Názov @@ -5022,7 +5093,7 @@ find next Foreign table: - + Cudzia tabuľka: @@ -5033,22 +5104,22 @@ but it's okay to use them anyway. Columns - + Stĺpce Local column - + Lokálny stĺpec Foreign column - + Cudzí stĺpec Reactions - + Reakcie @@ -5058,22 +5129,22 @@ but it's okay to use them anyway. Named constraint - + Pomenovanie obmedzenia Constraint name - + Názov obmedzenia Pick the foreign column. - + Vyberte cudzí stĺpec. Pick the foreign table. - + Vyberte cudziu tabuľku. @@ -5083,13 +5154,13 @@ but it's okay to use them anyway. Enter a name of the constraint. - + Zadajte názov obmedzenia. Foreign column table constraints - + Cudzí stĺpec @@ -5097,69 +5168,69 @@ but it's okay to use them anyway. Columns - + Stĺpce Column - + Stĺpec Collation - + Porovnávanie Sort - + Zoradiť Valid only for a single column with INTEGER data type - + Platné len pre jeden stĺpec s datovým typom INTEGER Autoincrement - + Autoinkrement Named constraint - + Pomenovanie obmedzenia Constraint name - + Názov obmedzenia On conflict - + Pri konflikte Collate table constraints - + Porovnať Sort order table constraints - + Zoradiť Select at least one column. - + Vyberte minimálne jeden stĺpec. Enter a name of the constraint. - + Zadajte názov obmedzenia. @@ -5168,19 +5239,19 @@ but it's okay to use them anyway. Name table structure columns - + Názov Data type table structure columns - + Datový typ Default value table structure columns - + Prednastavená hodnota @@ -5188,164 +5259,164 @@ but it's okay to use them anyway. Structure - + Štruktúra Table name: - + Názov tabuľky: Data - + Dáta Constraints - + Obmedzovače Indexes - + Indexy Triggers - + Spúšťače DDL - + DDL Export table table window - + Exportovať tabuľku Import data to table table window - + Importovať dáta do tabuľky Populate table table window - + Naplniť tabuľku Refresh structure table window - + Obnoviť štruktúru Commit structure changes table window - + Potvrdiť zmeny štruktúr Rollback structure changes table window - + Vrátiť späť zmeny štruktúr Add column table window - + Pridať stĺpec Edit column table window - + Upraviť stĺpec Delete column table window - + Vymazať stĺpec Move column up table window - + Posunúť stĺpec hore Move column down table window - + Posunúť stĺpec dole Create similar table table window - + Vytvoriť rovnakú tabuľku Reset autoincrement value table window - + Resetovať hodnotu autoinkrementu Add table constraint table window - + Pridať obmedzenie Edit table constraint table window - + Upraviť obmedzenie Delete table constraint table window - + Vymazať obmedzenie Move table constraint up table window - + Posunúť obmedzenie hore Move table constraint down table window - + Posunúť obmedzenie dole Add table primary key table window - + Pridať primárny kľúč Add table foreign key table window - + Pridať cudzí kľúč Add table unique constraint table window - + Pridať jedinečné obmedzenie @@ -5357,55 +5428,55 @@ but it's okay to use them anyway. Refresh index list table window - + Obnoviť zoznam indexov Create index table window - + Vytvoriť index Edit index table window - + Upraviť index Delete index table window - + Vymazať index Refresh trigger list table window - + Obnoviť zoznam spúšťačov Create trigger table window - + Vytvoriť spúšťač Edit trigger table window - + Upraviť spúšťač Delete trigger table window - + Vymazať spúšťač Are you sure you want to delete column '%1'? table window - + Ste si istý, že chcete vymazať stĺpec '%1' ? @@ -5455,17 +5526,17 @@ Would you like to proceed? Reset autoincrement - + Resetovať autoinkrement Are you sure you want to reset autoincrement value for table '%1'? - + Ste si istý, že chcete zresetovať hodnotu autoinkrementu pre tabuľku %1 ? An error occurred while trying to reset autoincrement value for table '%1': %2 - + Vyskytla sa chyba pri pokuse o zresetovanie hodnoty autoinkrementu pre tebuľku '%1': %2 @@ -5502,13 +5573,13 @@ Are you sure you want to create a table with blank name? Are you sure you want to delete table constraint '%1'? table window - + Ste si istý, že chcete vymazať obmedzenie '%1'? Delete constraint table window - + Vymazať obmedzenie @@ -5523,41 +5594,42 @@ Are you sure you want to create a table with blank name? Uncommited changes - + Nepotvrdené zmeny There are uncommited structure modifications. You cannot browse or edit data until you have table structure settled. Do you want to commit the structure, or do you want to go back to the structure tab? - + Sú tu nepotvrdené zmeny štruktúr. Nemôžte prezerať alebo editovať dáta dokiaľ nebude štruktúra tabuľky jasná. +Chcete potvrdiť štruktúru alebo sa chcete vrátiť do záložky štruktúr? Go back to structure tab - + Choď späť na záložku štruktúr Commit modifications and browse data. - + Potvrdiť zmeny a prezerať dáta. Name table window indexes - + Názov Unique table window indexes - + Jedinečný Columns table window indexes - + Stĺpce @@ -5566,43 +5638,43 @@ Do you want to commit the structure, or do you want to go back to the structure - + Name table window triggers - + Názov - + Event table window triggers - + Udalosť - + Condition table window triggers - + Podmienka - + Details table window triggers - + Detaily - + Table window "%1" has uncommited structure modifications and data. - + V okne tabuľky %1 sú nepotvrdené zmeny štruktúry a dáta. - + Table window "%1" has uncommited data. - + V okne tabuľky %1 sú nepotvrdené dáta. - + Table window "%1" has uncommited structure modifications. - + V okne tabuľky %1 sú nepotvrdené zmeny štruktúry. @@ -5624,17 +5696,17 @@ Do you want to commit the structure, or do you want to go back to the structure Trigger - + Spúšťač On table: - + Na tabuľke: Action: - + Akcia: @@ -5655,12 +5727,12 @@ Do you want to commit the structure, or do you want to go back to the structure Trigger name: - + Názov spúšťača: When: - + Kedy: @@ -5675,7 +5747,7 @@ Do you want to commit the structure, or do you want to go back to the structure Code: - + Kód: @@ -5685,36 +5757,36 @@ Do you want to commit the structure, or do you want to go back to the structure DDL - + DDL - + On view: - + Could not process trigger %1 correctly. Unable to open a trigger dialog. - + Enter a valid condition. - + Zadajte platnú podmienku. - + Enter a valid trigger code. - + Zadajte validný kód spúšťača. - + Error trigger dialog - + An error occurred while executing SQL statements: %1 @@ -5748,27 +5820,27 @@ Do you want to commit the structure, or do you want to go back to the structure Query - + Dotaz View name: - + Názov pohľadu: Data - + Dáta Triggers - + Spúšťače DDL - + DDL @@ -5795,43 +5867,43 @@ Do you want to commit the structure, or do you want to go back to the structure Refresh the view view window - + Obnoviť pohľad Commit the view changes view window - + Potvrdiť zmeny v pohľade Rollback the view changes view window - + Vrátiť späť zmeny v pohľade Refresh trigger list view window - + Obnoviť zoznam spúšťačov Create new trigger view window - + Vytvoriť nový spúšťač Edit selected trigger view window - + Upraviť vybraný spúšťač Delete selected trigger view window - + Vymazať vybraný spúšťač @@ -5856,35 +5928,36 @@ Do you want to commit the structure, or do you want to go back to the structure Uncommited changes - + Nepotvrdené zmeny There are uncommited structure modifications. You cannot browse or edit data until you have the view structure settled. Do you want to commit the structure, or do you want to go back to the structure tab? - + Sú tu nepotvrdené zmeny štruktúr. Nemôžte prezerať alebo editovať dáta dokiaľ nebude štruktúra tabuľky jasná. +Chcete potvrdiť štruktúru alebo sa chcete vrátiť do záložky štruktúr? Go back to structure tab - + Choď späť na záložku štruktúr Commit modifications and browse data. - + Potvrdiť zmeny a prezerať dáta. Could not commit view changes. Error message: %1 view window - + Nemôžem potvrdiť zmeny v pohľade. Chyba: %1 Name view window triggers - + Názov @@ -5896,13 +5969,13 @@ Do you want to commit the structure, or do you want to go back to the structure Condition view window triggers - + Podmienka Details table window triggers - + Detaily diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_zh_CN.qm b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_zh_CN.qm index be651ee..8879190 100644 Binary files a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_zh_CN.qm and b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_zh_CN.qm differ diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_zh_CN.ts b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_zh_CN.ts index a0dd959..9a6bd32 100644 --- a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_zh_CN.ts +++ b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_zh_CN.ts @@ -1,92 +1,92 @@ - + AboutDialog About SQLiteStudio and licenses - + 关于 SQLiteStudio 和许可协议 About - + 关于 <html><head/><body><p align="center"><span style=" font-size:11pt; font-weight:600;">SQLiteStudio v%1</span></p><p align="center">Free, open-source, cross-platform SQLite database manager.<br/><a href="http://sqlitestudio.pl"><span style=" text-decoration: underline; color:#0000ff;">http://sqlitestudio.pl</span></a><br/></p><p align="center">%2<br/></p><p align="center">Author and active maintainer:<br/>SalSoft (<a href="http://salsoft.com.pl"><span style=" text-decoration: underline; color:#0000ff;">http://salsoft.com.pl</span></a>)<br/></p></body></html> - + <html><head/><body><p align="center"><span style=" font-size:11pt; font-weight:600;">SQLiteStudio v%1</span></p><p align="center">自由,开源,跨平台的 SQLite 数据库管理工具。<br/><a href="http://sqlitestudio.pl"><span style=" text-decoration: underline; color:#0000ff;">http://sqlitestudio.pl</span></a><br/></p><p align="center">%2<br/></p><p align="center">作者和活跃维护人:<br/>SalSoft (<a href="http://salsoft.com.pl"><span style=" text-decoration: underline; color:#0000ff;">http://salsoft.com.pl</span></a>)<br/></p></body></html> Licenses - + 许可协议 Environment - + 环境 Icon directories - + 图标目录 Form directories - + 表格目录 Plugin directories - + 插件目录 Application directory - + 应用程序目录 SQLite 3 version: - + SQLite 3 版本: Configuration directory - + 配置文件目录 Qt version: - + Qt版本: Portable distribution. - + 便携版。 MacOS X application boundle distribution. - + MacOS X 应用版。 Operating system managed distribution. - + 系统提供版。 Copy - + 复制 <h3>Table of contents:</h3><ol>%2</ol> - + <h3>目录:</h3><ol>%2</ol> @@ -94,156 +94,158 @@ Bugs and ideas - + Bugs 和想法 Reporter - + 上报人 E-mail address - + E-mail 地址 Log in - + 登录 Short description - + 简要描述 Detailed description - + 详细描述 Show more details - + 更多详细信息 SQLiteStudio version - + SQLiteStudio 版本 Operating system - + 操作系统 Loaded plugins - + 已加载插件 Send - + 发送 You can see all your reported bugs and ideas by selecting menu '%1' and then '%2'. - + 您可以通过选择菜单 “1%”下的“%2”来查看全部您报告的bugs和想法。 A bug report sent successfully. - + Bug报告提交成功。 An error occurred while sending a bug report: %1 %2 - + 提交bug报告时发生了错误:%1 +%2 You can retry sending. The contents will be restored when you open a report dialog after an error like this. - + 您可以重新发送试试。当你在发生错误后重新打开上报对话框时,你之前输入的内容将会恢复。 An idea proposal sent successfully. - + 提交建议成功。 An error occurred while sending an idea proposal: %1 %2 - + 在提交建议时发生错误:%1 +%2 A bug report - + Bug报告 Describe problem in few words - + 简要描述一下问题 Describe problem and how to reproduce it - + 描述一下问题,怎么复现问题 A new feature idea - + 新功能建议 A title for your idea - + 您的建议题目 Describe your idea in more details - + 仔细描述一下您的想法 Reporting as an unregistered user, using e-mail address. - + 使用e-mail地址以未注册用户身份上报。 Reporting as a registered user. - + 作为已注册用户报告。 Log out - + 退出 Providing true email address will make it possible to contact you regarding your report. To learn more, press 'help' button on the right side. - + 使用真实email地址有助于您上报后联系到您。如果想了解更多,请点击右方的“帮助”按钮。 Enter vaild e-mail address, or log in. - + 输入正确的e-mail地址,或者登录。 Short description requires at least 10 characters, but not more than 100. Longer description can be entered in the field below. - + 简要描述至少10个字符,但不超过100个字符。更详细的描述内容请在下面的区域填写。 Long description requires at least 30 characters. - + 详细描述内容至少30个字符。 @@ -252,39 +254,39 @@ Title - + 标题 Reported at - + 报告时间 URL - + URL Reports history - + 报告历史 Clear reports history - + 清空报告历史 Delete selected entry - + 删除选中项 Invalid response from server. - + 无效的服务器回应。 @@ -292,57 +294,59 @@ Log in - + 登录 Credentials - + 认证信息 Login: - + 登录名: Password: - + 密码: Validation - + 这里不是很确认。Not sure about this translation. + 确认 Validate - + not sure about this translation + 确认 Validation result message - + 验证信息 Abort - + 中止 A login must be at least 2 characters long. - + 登录名至少2个字符。 A password must be at least 5 characters long. - + 密码至少5个字符。 Valid - + 已验证 @@ -350,87 +354,87 @@ Filter collations - + 过滤器排序规则 Collation name: - + 排序规则名称: Implementation language: - + 实现语言: Databases - + 数据库 Register in all databases - + 在所有数据库中注册 Register in following databases: - + 在下列数据库中注册: Implementation code: - + 实现代码: Collations editor - + 排序编辑器 Commit all collation changes - + 提交全部排序规则更改 Rollback all collation changes - + 回滚所有排序更改 Create new collation - + 创建新排序规则 Delete selected collation - + 删除选中排序规则 Editing collations manual - + 手动更改排序规则 Enter a non-empty, unique name of the collation. - + 为排序规则输入一个非空唯一的名称。 Pick the implementation language. - + 选择实现语言。 Enter a non-empty implementation code. - + 输入非空实现代码。 Collations editor window has uncommited modifications. - + 排序规则编辑器存在未提交的改动。 @@ -438,7 +442,7 @@ Pick a color - + 选择一种颜色 @@ -446,22 +450,22 @@ Collation name: - + 排序名称: Named constraint: - + 约束名: Enter a name of the constraint. - + 输入约束名称。 Enter a collation name. - + 输入排序规则名称。 @@ -469,27 +473,27 @@ Default value: - + 默认值: Named constraint: - + 已命名的约束: Enter a default value expression. - + 默认值表达式。 Invalid default value expression: %1 - + 无效的默认值表达式:%1 Enter a name of the constraint. - + 输入约束名: @@ -497,173 +501,183 @@ Column - + 字段 Name and type - + 名称和类型 + + + + Scale + 小数长度 + + + + Precision + 精度 - + Data type: - + 数据类型: - + Column name: - + 字段名: - + Size: - + 大小: - + Constraints - + 约束 - + Unique - + 唯一 - - - - - - - + + + + + + + Configure - + 配置 - + Foreign Key - + 外键 - + Collate - + 排序规则 - + Not NULL - + 非空 - + Check condition - + 条件 - + Primary Key - + 主键 - + Default - + 默认 - + Advanced mode - + 高级模式 Add constraint column dialog - + 添加约束 Edit constraint column dialog - + 编辑约束 Delete constraint column dialog - + 删除约束 Move constraint up column dialog - + 上移约束 Move constraint down column dialog - + 下移约束 Add a primary key column dialog - + 添加主键 Add a foreign key column dialog - + 添加外键 Add an unique constraint column dialog - + 添加唯一约束 Add a check constraint column dialog - + 添加条件约束 Add a not null constraint column dialog - + 添加非空约束 Add a collate constraint column dialog - + 添加排序规则约束 Add a default constraint column dialog - + 添加默认约束 Are you sure you want to delete constraint '%1'? column dialog - + 您确定要删除约束“%1”吗? Correct the constraint's configuration. - + 修正约束配置。 This constraint is not officially supported by SQLite 2, but it's okay to use it. - + SQLite2没有官方支持该约束,但是可以使用。 @@ -672,19 +686,19 @@ but it's okay to use it. Type column dialog constraints - + 类型 Name column dialog constraints - + 名称 Details column dialog constraints - + 详情 @@ -692,7 +706,7 @@ but it's okay to use it. Foreign table: - + @@ -717,7 +731,7 @@ but it's okay to use it. Constraint name - + 约束名称 @@ -732,7 +746,7 @@ but it's okay to use it. Enter a name of the constraint. - + 输入约束名称 @@ -745,7 +759,7 @@ but it's okay to use it. Sort order: - + 排序: @@ -755,7 +769,7 @@ but it's okay to use it. On conflict: - + 冲突: @@ -766,7 +780,7 @@ but it's okay to use it. Autoincrement (only for %1 type columns) column primary key - + Autoincrement (只能%1类型的字段才能有该属性) @@ -779,12 +793,12 @@ but it's okay to use it. On conflict: - + 冲突: Enter a name of the constraint. - + 输入约束名。 @@ -793,49 +807,49 @@ but it's okay to use it. Column: %1 completer statusbar - + 字段:%1 Table: %1 completer statusbar - + 表:%1 Index: %1 completer statusbar - + 索引:%1 Trigger: %1 completer statusbar - + 触发器:%1 View: %1 completer statusbar - + 视图:%1 Database: %1 completer statusbar - + 数据库:%1 Keyword: %1 completer statusbar - + 关键字:%1 Function: %1 completer statusbar - + 函数:%1 @@ -847,19 +861,19 @@ but it's okay to use it. String completer statusbar - + 字符串 Number completer statusbar - + 数值 Binary data completer statusbar - + 二进制数据 @@ -900,144 +914,144 @@ but it's okay to use it. Look & feel - + 外观 Style - + 风格 Fonts - + 字体 Colors - + 颜色 Plugins - + 插件 Code formatters - + 代码格式化 Data browsing - + 浏览数据 Data editors - + 数据编辑器 Data browsing and editing - + 流量和编辑数据 Number of data rows per page: - + 每页的行数: <p>When the data is read into grid view columns width is automatically adjusted. This value limits the initial width for the adjustment, but user can still resize the column manually over this limit.</p> - + <p>在以列表方式显示数据时,列宽度会自动调整。该值控制初始列宽度,之后您可以手动调整列宽度,不受此限制。</p> Limit initial data column width to (in pixels): - + 限制宽度(单位:像素): Data types - + 数据类型 Available editors: - + 可用的编辑器: Editors selected for this data type: - + 已选的该数据类型编辑器: Schema editing - + 架构编辑 Number of DDL changes kept in history. - + 数据库定义(DDL)的更改历史记录数量。 DDL history size: - + 数据库定义(DDL)历史大小: Don't show DDL preview dialog when commiting schema changes - + 当提交schema变动时不显示数据库定义(DDL)预览对话框 SQL queries - + SQL查询 Number of queries kept in the history. - + 查询历史记录数量。 History size: - + 历史大小: <p>If there is more than one query in the SQL editor window, then (if this option is enabled) only a single query will be executed - the one under the keyboard insertion cursor. Otherwise all queries will be executed. You can always limit queries to be executed by selecting those queries before calling to execute.</p> - + <p>如果SQL编辑器中有多个语句,如果启用该选项,只执行光标下的语句;反之则执行全部语句。另外您可以选择需要执行的语句来执行</p> Execute only the query under the cursor - + 只执行光标下的语句 Updates - + 更新 Automatically check for updates at startup - + 在启动时自己检查更新 Session - + 会话 Restore last session (active MDI windows) after startup - + 启动后恢复上一次会话。 @@ -1052,38 +1066,38 @@ but it's okay to use it. Key combination - + 按键编定 Language - + 语言 Changing language requires application restart to take effect. - + 更改语言后,重启程序生效。 Database list - + 数据库列表 If switched off, then columns will be sorted in the order they are typed in CREATE TABLE statement. - + 如果关闭,将会以 CREATE TABLE 中的顺序对列进行排序。 Sort table columns alphabetically - + 按字母对列排序 Expand tables node when connected to a database - + 当连接到数据库时,展开数据库节点。 @@ -1178,67 +1192,67 @@ but it's okay to use it. Preview - + 预览 Enabled - + 已启用 Disabled - + 已禁用 Active formatter plugin - + 启用格式化插件 SQL editor font - + SQL编辑器字体 Database list font - + 数据库字体 Database list additional label font - + 数据库额外标签字体 Data view font - + 数据浏览字体 Status field font - + 状态栏字体 SQL editor colors - + SQL编辑器颜色 Current line background - + 当前行的背景色 <p>SQL strings are enclosed with single quote characters.</p> - + <p>单引号内的SQL字符串</p> String foreground - + 字符串颜色 @@ -1263,32 +1277,32 @@ but it's okay to use it. BLOB value foreground - + BLOB值的颜色 Regular foreground - + 背景色 Line numbers area background - + 行号的背景色 Keyword foreground - + 关键字的颜色 Number foreground - + 数字颜色 Comment foreground - + 注释颜色 @@ -1328,17 +1342,17 @@ but it's okay to use it. NULL value foreground - + NULL值的颜色 Deleted row background - + 已删除行的背景色 Database list colors - + 数据库列表颜色 @@ -1358,47 +1372,47 @@ but it's okay to use it. Information message foreground - + 信息颜色 Warning message foreground - + 警告信息颜色 Error message foreground - + 错误信息颜色 Description: plugin details - + 描述: Category: plugin details - + 分类: Version: plugin details - + 版本: Author: plugin details - + 作者: Internal name: plugin details - + 内部名字: @@ -1415,7 +1429,7 @@ but it's okay to use it. Plugin details - + 插件详情 @@ -1431,27 +1445,27 @@ but it's okay to use it. Details - + 详情 No plugins in this category. - + 该分类下没有插件。 Add new data type - + 添加新的数据类型 Rename selected data type - + 重命名选择的数据类型 Delete selected data type - + 删除已选数据类型 @@ -1493,7 +1507,7 @@ but it's okay to use it. New constraint constraint dialog - + 新约束 @@ -1505,7 +1519,7 @@ but it's okay to use it. Edit constraint dialog window - + 编辑约束 @@ -1529,31 +1543,31 @@ but it's okay to use it. Unique table constraints - + 唯一 Not NULL table constraints - + 非空 Check table constraints - + 条件 Collate table constraints - + 排序规则 Default table constraints - + 默认 @@ -1562,7 +1576,7 @@ but it's okay to use it. Table table constraints - + @@ -1580,19 +1594,19 @@ but it's okay to use it. Type table constraints - + 类型 Details table constraints - + 详情 Name table constraints - + 名称 @@ -1818,91 +1832,115 @@ Browsing other pages will be possible after the row counting is done. Database + 数据库 + + + + Database type - + Database driver - - Name + + Generate automatically - - Type + + Options + 选项 + + + + Permanent (keep it in configuration) - - Browse for database file on local computer + + Test connection - - File + Name + 名称 + + + Type + 类型 + + + + Create new database file - - Generate name basing on file path + + + File + 文件 + + + + Name (on the list) - - Permanent + + Generate name basing on file path - + <p>Enable this if you want the database to be stored in configuration file and restored every time SQLiteStudio is started.</p> aasfd - - Test database connection + + Browse for existing database file on local computer - + Browse - + Enter an unique database name. - + This name is already in use. Please enter unique name. - + Enter a database file path. - + This database is already on the list under name: %1 - + Select a database type. - - The name will be auto-generated + + Auto-generated - + Type the name @@ -1960,7 +1998,7 @@ Browsing other pages will be possible after the row counting is done. Databases - + 数据库 @@ -1970,17 +2008,17 @@ Browsing other pages will be possible after the row counting is done. Copy - + 复制 Paste - + 粘贴 Select all - + 全选 @@ -2025,7 +2063,7 @@ Browsing other pages will be possible after the row counting is done. Import - + 导入 @@ -2171,7 +2209,7 @@ Browsing other pages will be possible after the row counting is done. Database - + 数据库 @@ -2318,123 +2356,123 @@ All objects from this group will be moved to parent group. DbTreeModel - + Database: %1 dbtree tooltip - + 数据库:%1 - + Version: dbtree tooltip - + 版本: - + File size: dbtree tooltip - + Encoding: dbtree tooltip - + Error details: dbtree tooltip - + Table : %1 dbtree tooltip - + Columns (%1): dbtree tooltip - + Indexes (%1): dbtree tooltip - + Triggers (%1): dbtree tooltip - + Copy - + 复制 - + Move - + Include data - + Include indexes - + Include triggers - + Abort - + 中止 - + Referenced tables - + Do you want to include following referenced tables as well: %1 - + Name conflict - + Following object already exists in the target database. Please enter new, unique name, or press '%1' to abort the operation: - + SQL statements conversion - + Following error occurred while converting SQL statements to the target SQLite version: - + Would you like to ignore those errors and proceed? @@ -2477,7 +2515,7 @@ Please enter new, unique name, or press '%1' to abort the operation: SQLiteStudio Debug Console - + SQLiteStudio 调试终端 @@ -2639,47 +2677,47 @@ Please enter new, unique name, or press '%1' to abort the operation: Export - + 导出 What do you want to export? - + 您想导出什么? A database - + 数据库 A single table - + 一张表 Query results - + 查询结果 Table to export - + 要导出的表 Database - + 数据库 Table - + Options - + 选项 @@ -2689,17 +2727,17 @@ Please enter new, unique name, or press '%1' to abort the operation: Export table data - + 导出表里的数据 Export table indexes - + 导出表的索引 Export table triggers - + 导出表的触发器 @@ -2719,18 +2757,18 @@ Please enter new, unique name, or press '%1' to abort the operation: Select all - + 全选 Deselect all - + 全不选 Database: - + 数据库: @@ -2745,102 +2783,102 @@ Please enter new, unique name, or press '%1' to abort the operation: Export format and options - + 导出格式和选项 Export format - + 导出格式 Output - + 输出 Exported file path - + 导出文件路径 Clipboard - + 剪贴板 File - + 文件 Exported text encoding: - + 导出编码: Export format options - + 导出格式选项 Cancel - + 取消 - - - + + + Select database to export. - + 选择要导出的数据库。 - + Select table to export. - + 选择要导出的表。 - + Enter valid query to export. - + Select at least one object to export. - + You must provide a file name to export to. - + Path you provided is an existing directory. You cannot overwrite it. - + The directory '%1' does not exist. - + The file '%1' exists and will be overwritten. - + All files (*) - + 所有文件 (*) - + Pick file to export to - + Internal error during export. This is a bug. Please report it. @@ -2851,7 +2889,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Choose font font configuration - + 字体选择 @@ -2859,7 +2897,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Active SQL formatter plugin - + 激活SQL语句格式化插件 @@ -2928,7 +2966,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Implementation language: - + 实现语言: @@ -2948,17 +2986,17 @@ Please enter new, unique name, or press '%1' to abort the operation: Databases - + 数据库 Register in all databases - + 在所有数据库中注册 Register in following databases: - + 在下列数据库中注册: @@ -3049,7 +3087,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Pick the implementation language. - + 选择实现语言。 @@ -3059,7 +3097,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Enter a non-empty implementation code. - + 输入非空实现代码。 @@ -3088,12 +3126,12 @@ Please enter new, unique name, or press '%1' to abort the operation: Table - + Database - + 数据库 @@ -3108,60 +3146,70 @@ Please enter new, unique name, or press '%1' to abort the operation: Options - + 选项 - + Input file: - + Text encoding: + + + <p>If enabled, any constraint violation, or invalid data format (wrong column count), or any other problem encountered during import will be ignored and the importing will be continued.</p> + + + Ignore errors + + + + Data source options Cancel - + 取消 - + If you type table name that doesn't exist, it will be created. - + Enter the table name - + Select import plugin. - + You must provide a file to import from. - + The file '%1' does not exist. - + Path you provided is a directory. A regular file is required. - + Pick file to import from @@ -3172,7 +3220,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Index - + 索引 @@ -3182,7 +3230,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Index name: - + 索引名: @@ -3192,12 +3240,12 @@ Please enter new, unique name, or press '%1' to abort the operation: Unique index - + 唯一索引 Column - + 字段 @@ -3275,12 +3323,12 @@ Please enter new, unique name, or press '%1' to abort the operation: Language - + 语言 Please choose language: - + 请选择一门语言: @@ -3298,32 +3346,32 @@ Please enter new, unique name, or press '%1' to abort the operation: Tools - + 工具 Window list - + 窗口列表 View toolbar - + 查看工具栏 Configuration widgets - + 配置部件 Syntax highlighting engines - + 语法高亮引擎 Data editors - + 数据编辑器 @@ -3343,17 +3391,17 @@ Please enter new, unique name, or press '%1' to abort the operation: Open SQL editor - + 打开SQL编辑器 Open DDL history - + 打开数据库定义(DDL)历史 Open SQL functions editor - + 打开SQL函数编辑器 @@ -3363,167 +3411,167 @@ Please enter new, unique name, or press '%1' to abort the operation: Import - + 导入 Export - + 导出 Open configuration dialog - + 打开配置对话框 Tile windows - + 平铺窗口 Tile windows horizontally - + 水平排列窗口 Tile windows vertically - + 垂直排列窗口 Cascade windows - + 层叠窗口 Next window - + 下一个窗口 Previous window - + 上一个窗口 Hide status field - + 隐藏状态栏 Close selected window - + 关闭当前窗口 Close all windows but selected - + 关闭其它窗口 Close all windows - + 关闭全部窗口 Restore recently closed window - + 恢复最近关闭的窗口 Rename selected window - + 重命名当前窗口 Open Debug Console - + 打开调试终端 Report a bug - + 提交Bug Propose a new feature - + 提交新功能建议 About - + 关于 Licenses - + 许可 Open home page - + 访问主页 Open forum page - + 访问论坛 User Manual - + 用户手册 SQLite documentation - + SQLite文档 Report history - + 报告历史 Check for updates - + 检查更新 Database menubar - + 数据库 Structure menubar - + 结构 View menubar - + 查看 Window list menubar view menu - + 窗口列表 Tools menubar - + 工具 Help - + 帮助 @@ -3532,7 +3580,7 @@ Please enter new, unique name, or press '%1' to abort the operation: - + Cannot export, because no export plugin is loaded. @@ -3542,37 +3590,37 @@ Please enter new, unique name, or press '%1' to abort the operation: - + Rename window - + 重命名窗口 - + Enter new name for the window: - + 窗口的新名称: - + New updates are available. <a href="%1">Click here for details</a>. - + 有新更新 <a href="%1">点此查看更新详情</a>. - + You're running the most recent version. No updates are available. - + 您使用的是最新版,不需要更新。 - + Database passed in command line parameters (%1) was already on the list under name: %2 - + Database passed in command line parameters (%1) has been temporarily added to the list under name: %2 - + Could not add database %1 to list. @@ -3580,19 +3628,19 @@ Please enter new, unique name, or press '%1' to abort the operation: MdiWindow - + Uncommited changes - + 未提交的更改 - + Close anyway - + 仍然关闭 - + Don't close - + 不关闭 @@ -3601,7 +3649,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Null value multieditor - + Null 值 @@ -3617,13 +3665,13 @@ Please enter new, unique name, or press '%1' to abort the operation: Deleted multieditor - + 已删除 Read only multieditor - + 只读 @@ -3631,7 +3679,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Boolean - + 布尔 @@ -3639,7 +3687,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Date - + 日期 @@ -3647,7 +3695,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Date & time - + 日期和时间 @@ -3655,7 +3703,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Hex - + 十六进制 @@ -3664,7 +3712,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Number numeric multi editor tab name - + 数值 @@ -3682,32 +3730,32 @@ Please enter new, unique name, or press '%1' to abort the operation: Cut - + 剪切 Copy - + 复制 Paste - + 粘贴 Delete - + 删除 Undo - + 撤销 Redo - + 恢复 @@ -3715,7 +3763,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Time - + 时间 @@ -3723,53 +3771,53 @@ Please enter new, unique name, or press '%1' to abort the operation: New constraint - + 新约束 Primary Key new constraint dialog - + 主键 Foreign Key new constraint dialog - + 外键 Unique new constraint dialog - + 唯一 Check new constraint dialog - + 条件 Not NULL new constraint dialog - + 非空 Collate new constraint dialog - + 排序规则 Default new constraint dialog - + 默认 @@ -3777,52 +3825,52 @@ Please enter new, unique name, or press '%1' to abort the operation: SQLiteStudio updates - + SQLiteStudio 更新 New updates are available! - + 有新更新! Component - + 组件 Current version - + 当年版本 Update version - + 可更新版本 Check for updates on startup - + 在启动时检查更新 Update to new version! - + 更新到新版本! The update will be automatically downloaded and installed. This will also restart application at the end. - + 本次更新将会自动下载和安装。在更新后会重启程序。 Not now. - + 现在不更新。 Don't install the update and close this window. - + 不安装更新并关闭本窗口。 @@ -3835,7 +3883,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Configuring <b>%1</b> for column <b>%2</b> - + 给字段 <b>%2</b> 配置 <b>%1</b> @@ -3848,17 +3896,17 @@ Please enter new, unique name, or press '%1' to abort the operation: Database - + 数据库 Table - + Columns - + 字段 @@ -3874,7 +3922,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Configure - + 配置 @@ -3894,74 +3942,74 @@ Please enter new, unique name, or press '%1' to abort the operation: You have to select at least one column. - + 您至少得选择一个字段。 QObject - + Cannot edit columns that are result of compound %1 statements (one that includes %2, %3 or %4 keywords). - + The query execution mechanism had problems with extracting ROWID's properly. This might be a bug in the application. You may want to report this. - + Requested column is a result of SQL expression, instead of a simple column selection. Such columns cannot be edited. - + Requested column belongs to restricted SQLite table. Those tables cannot be edited directly. - + Cannot edit results of query other than %1. - + Cannot edit columns that are result of aggregated %1 statements. - + Cannot edit columns that are result of %1 statement. - + Cannot edit columns that are result of common table expression statement (%1). - - - - + + + + on conflict: %1 data view tooltip - + references table %1, column %2 data view tooltip - + condition: %1 data view tooltip - + collation name: %1 data view tooltip @@ -4049,7 +4097,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Database list - + 数据库列表 @@ -4116,7 +4164,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Columns - + 字段 @@ -4171,17 +4219,17 @@ Please enter new, unique name, or press '%1' to abort the operation: Open SQL editor - + 打开SQL编辑器 Previous window - + 上一个窗口 Next window - + 下一个窗口 @@ -4191,12 +4239,12 @@ Please enter new, unique name, or press '%1' to abort the operation: Open configuration dialog - + 打开配置对话框 Open Debug Console - + 打开调试终端 @@ -4225,13 +4273,13 @@ Please enter new, unique name, or press '%1' to abort the operation: Undo - + 撤销 Redo - + 恢复 @@ -4261,12 +4309,12 @@ Please enter new, unique name, or press '%1' to abort the operation: Find next - + 查找下一个 Find previous - + 查找上一个 @@ -4319,7 +4367,8 @@ Please enter new, unique name, or press '%1' to abort the operation: - + + Database file @@ -4331,7 +4380,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Delete selected entry - + 删除选中项 @@ -4406,7 +4455,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Export table data - + 导出表里的数据 @@ -4499,7 +4548,7 @@ Please enter new, unique name, or press '%1' to abort the operation: Uncommited changes - + 未提交的更改 @@ -4555,7 +4604,7 @@ find next Find - + 查找 @@ -4569,7 +4618,7 @@ find next Column - + 字段 @@ -4599,85 +4648,85 @@ find next Cut sql editor - + 剪切 Copy sql editor - + 复制 Paste sql editor - + 粘贴 Delete sql editor - + 删除 Select all sql editor - + 全选 Undo sql editor - + 撤销 Redo sql editor - + 恢复 Complete sql editor - + 完成 Format SQL sql editor - + 格式化SQL Save SQL to file sql editor - + 保存SQL到文件 Load SQL from file sql editor - + 从文件加载SQL Delete line sql editor - + 删除行 Move block down sql editor - + 整块下移 Move block up sql editor - + 整块上移 @@ -4695,25 +4744,25 @@ find next Find sql editor - + 查找 Find next sql editor - + 查找下一个 Find previous sql editor - + 查找上一个 Replace sql editor - + 替换 @@ -4728,7 +4777,7 @@ find next Save to file - + 保存到文件 @@ -4738,12 +4787,12 @@ find next SQL scripts (*.sql);;All files (*) - + SQL文件(*.sql);;所有文件(*) Open file - + 打开文件 @@ -4753,7 +4802,7 @@ find next Reached the end of document. Hit the find again to restart the search. - + 已搜索到文档底部。点击查找从头程序开始搜索。 @@ -4768,7 +4817,7 @@ find next Data type: data view - + 数据类型: @@ -4810,69 +4859,69 @@ find next SqlQueryModel - - + + Only one query can be executed simultaneously. - + Uncommited data - + There are uncommited data changes. Do you want to proceed anyway? All uncommited changes will be lost. - + Cannot commit the data for a cell that refers to the already closed database. - + Could not begin transaction on the database. Details: %1 - + An error occurred while commiting the transaction: %1 - + An error occurred while rolling back the transaction: %1 - + Tried to commit a cell which is not editable (yet modified and waiting for commit)! This is a bug. Please report it. - + An error occurred while commiting the data: %1 - - + + Error while executing SQL query on database '%1': %2 - + Error while loading query results: %1 - + Insert multiple rows - + Number of rows to insert: @@ -4880,87 +4929,92 @@ find next SqlQueryView - + Copy - + 复制 - + Copy as... - + Paste - + 粘贴 - + Paste as... - + Set NULL values - + Erase values - + Edit value in editor - + Commit - + Rollback - + Commit selected cells - + Rollback selected cells - + Define columns to sort by - + Remove custom sorting - + Insert row - + Insert multiple rows - + Delete selected row - + + No items selected to paste clipboard contents to. + + + + Edit value @@ -4983,17 +5037,17 @@ find next Status - + 状态 Copy - + 复制 Clear - + 清除 @@ -5002,19 +5056,19 @@ find next Type table constraints - + 类型 Details table constraints - + 详情 Name table constraints - + 名称 @@ -5033,7 +5087,7 @@ but it's okay to use them anyway. Columns - + 字段 @@ -5063,7 +5117,7 @@ but it's okay to use them anyway. Constraint name - + 约束名称 @@ -5097,12 +5151,12 @@ but it's okay to use them anyway. Columns - + 字段 Column - + 字段 @@ -5132,7 +5186,7 @@ but it's okay to use them anyway. Constraint name - + 约束名称 @@ -5143,7 +5197,7 @@ but it's okay to use them anyway. Collate table constraints - + 排序规则 @@ -5168,7 +5222,7 @@ but it's okay to use them anyway. Name table structure columns - + 名称 @@ -5188,7 +5242,7 @@ but it's okay to use them anyway. Structure - + 结构 @@ -5203,7 +5257,7 @@ but it's okay to use them anyway. Constraints - + 约束 @@ -5508,7 +5562,7 @@ Are you sure you want to create a table with blank name? Delete constraint table window - + 删除约束 @@ -5523,7 +5577,7 @@ Are you sure you want to create a table with blank name? Uncommited changes - + 未提交的更改 @@ -5545,19 +5599,19 @@ Do you want to commit the structure, or do you want to go back to the structure Name table window indexes - + 名称 Unique table window indexes - + 唯一 Columns table window indexes - + 字段 @@ -5566,41 +5620,41 @@ Do you want to commit the structure, or do you want to go back to the structure - + Name table window triggers - + 名称 - + Event table window triggers - + Condition table window triggers - + Details table window triggers - + 详情 - + Table window "%1" has uncommited structure modifications and data. - + Table window "%1" has uncommited data. - + Table window "%1" has uncommited structure modifications. @@ -5688,33 +5742,33 @@ Do you want to commit the structure, or do you want to go back to the structure - + On view: - + Could not process trigger %1 correctly. Unable to open a trigger dialog. - + Enter a valid condition. - + Enter a valid trigger code. - + Error trigger dialog - + An error occurred while executing SQL statements: %1 @@ -5856,7 +5910,7 @@ Do you want to commit the structure, or do you want to go back to the structure Uncommited changes - + 未提交的更改 @@ -5884,7 +5938,7 @@ Do you want to commit the structure, or do you want to go back to the structure Name view window triggers - + 名称 @@ -5902,7 +5956,7 @@ Do you want to commit the structure, or do you want to go back to the structure Details table window triggers - + 详情 diff --git a/SQLiteStudio3/guiSQLiteStudio/uiconfig.h b/SQLiteStudio3/guiSQLiteStudio/uiconfig.h index e6cfea2..3372979 100644 --- a/SQLiteStudio3/guiSQLiteStudio/uiconfig.h +++ b/SQLiteStudio3/guiSQLiteStudio/uiconfig.h @@ -81,6 +81,7 @@ CFG_CATEGORIES(Ui, CFG_ENTRY(QString, FileDialogLastPath, QString()) CFG_ENTRY(int, MaxInitialColumnWith, 600) CFG_ENTRY(bool, LanguageAsked, false) + CFG_ENTRY(bool, OpenMaximized, true) ) ) diff --git a/SQLiteStudio3/guiSQLiteStudio/uidebug.cpp b/SQLiteStudio3/guiSQLiteStudio/uidebug.cpp index 9504bda..00aaac4 100644 --- a/SQLiteStudio3/guiSQLiteStudio/uidebug.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/uidebug.cpp @@ -3,12 +3,14 @@ #include "qio.h" #include "debugconsole.h" #include "common/global.h" +#include #include DebugConsole* sqliteStudioUiDebugConsole = nullptr; MsgHandlerThreadProxy* msgHandlerThreadProxy = nullptr; bool UI_DEBUG_ENABLED = false; bool UI_DEBUG_CONSOLE = true; +QString UI_DEBUG_FILE; void uiMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { @@ -39,18 +41,22 @@ void uiMessageHandler(QtMsgType type, const QMessageLogContext &context, const Q } } -void setUiDebug(bool enabled, bool useUiConsole) +void setUiDebug(bool enabled, bool useUiConsole, const QString& file) { UI_DEBUG_ENABLED = enabled; - UI_DEBUG_CONSOLE = useUiConsole; + UI_DEBUG_CONSOLE = useUiConsole && file.isEmpty(); + UI_DEBUG_FILE = file; safe_delete(msgHandlerThreadProxy); safe_delete(sqliteStudioUiDebugConsole); if (enabled) { - if (useUiConsole) + if (UI_DEBUG_CONSOLE) sqliteStudioUiDebugConsole = new DebugConsole(); - msgHandlerThreadProxy = new MsgHandlerThreadProxy(); + if (file.isEmpty()) + msgHandlerThreadProxy = new MsgHandlerThreadProxy(); + else + msgHandlerThreadProxy = new MsgHandlerThreadProxy(file); } } @@ -72,6 +78,27 @@ bool isDebugConsoleEnabled() MsgHandlerThreadProxy::MsgHandlerThreadProxy(QObject *parent) : QObject(parent) +{ + init(); +} + +MsgHandlerThreadProxy::MsgHandlerThreadProxy(const QString &file, QObject *parent) : + QObject(parent) +{ + initFile(file); + init(); +} + +MsgHandlerThreadProxy::~MsgHandlerThreadProxy() +{ + if (outFile) + { + outFile->close(); + safe_delete(outFile); + } +} + +void MsgHandlerThreadProxy::init() { if (sqliteStudioUiDebugConsole) { @@ -80,6 +107,13 @@ MsgHandlerThreadProxy::MsgHandlerThreadProxy(QObject *parent) : connect(this, SIGNAL(criticalRequested(QString)), sqliteStudioUiDebugConsole, SLOT(critical(QString))); connect(this, SIGNAL(fatalRequested(QString)), sqliteStudioUiDebugConsole, SLOT(fatal(QString))); } + else if (outFile) + { + connect(this, SIGNAL(debugRequested(QString)), this, SLOT(printToFile(QString))); + connect(this, SIGNAL(warnRequested(QString)), this, SLOT(printToFile(QString))); + connect(this, SIGNAL(criticalRequested(QString)), this, SLOT(printToFile(QString))); + connect(this, SIGNAL(fatalRequested(QString)), this, SLOT(printToFile(QString))); + } else { connect(this, SIGNAL(debugRequested(QString)), this, SLOT(print(QString))); @@ -89,6 +123,15 @@ MsgHandlerThreadProxy::MsgHandlerThreadProxy(QObject *parent) : } } +void MsgHandlerThreadProxy::initFile(const QString &fileName) +{ + outFile = new QFile(fileName); + if (outFile->open(QIODevice::WriteOnly)) + outFileStream.setDevice(outFile); + else + safe_delete(outFile); +} + void MsgHandlerThreadProxy::debug(const QString &msg) { emit debugRequested(msg); @@ -114,3 +157,9 @@ void MsgHandlerThreadProxy::print(const QString& txt) qOut << txt << "\n"; qOut.flush(); } + +void MsgHandlerThreadProxy::printToFile(const QString &txt) +{ + outFileStream << txt << "\n"; + outFileStream.flush(); +} diff --git a/SQLiteStudio3/guiSQLiteStudio/uidebug.h b/SQLiteStudio3/guiSQLiteStudio/uidebug.h index d1b04b7..d2a2a51 100644 --- a/SQLiteStudio3/guiSQLiteStudio/uidebug.h +++ b/SQLiteStudio3/guiSQLiteStudio/uidebug.h @@ -3,6 +3,9 @@ #include "guiSQLiteStudio_global.h" #include +#include + +class QFile; class GUI_API_EXPORT MsgHandlerThreadProxy : public QObject { @@ -10,6 +13,15 @@ class GUI_API_EXPORT MsgHandlerThreadProxy : public QObject public: explicit MsgHandlerThreadProxy(QObject* parent = 0); + MsgHandlerThreadProxy(const QString& file, QObject* parent = 0); + ~MsgHandlerThreadProxy(); + + private: + void init(); + void initFile(const QString& fileName); + + QFile* outFile = nullptr; + QTextStream outFileStream; public slots: void debug(const QString& msg); @@ -25,10 +37,11 @@ class GUI_API_EXPORT MsgHandlerThreadProxy : public QObject private slots: void print(const QString& txt); + void printToFile(const QString& txt); }; GUI_API_EXPORT void uiMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg); -GUI_API_EXPORT void setUiDebug(bool enabled, bool useUiConsole = true); +GUI_API_EXPORT void setUiDebug(bool enabled, bool useUiConsole = true, const QString& file = QString()); GUI_API_EXPORT void showUiDebugConsole(); GUI_API_EXPORT bool isDebugEnabled(); GUI_API_EXPORT bool isDebugConsoleEnabled(); diff --git a/SQLiteStudio3/guiSQLiteStudio/uiutils.cpp b/SQLiteStudio3/guiSQLiteStudio/uiutils.cpp index 182cdb2..72dde94 100644 --- a/SQLiteStudio3/guiSQLiteStudio/uiutils.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/uiutils.cpp @@ -22,7 +22,7 @@ const QStringList pageSizes = { const QStringList pageSizesWithDimensions; -QString getDbPath(const QString &startWith) +QString getDbPath(bool newFileMode, const QString &startWith) { QString dir = startWith; if (dir.isNull()) @@ -35,8 +35,10 @@ QString getDbPath(const QString &startWith) filters += QObject::tr("All files")+" (*)"; QString filter = filters.join(";;"); - QString path = QFileDialog::getSaveFileName(0, QObject::tr("Database file"), dir, filter, &filters[0], QFileDialog::DontConfirmOverwrite); - return path; + if (newFileMode) + return QFileDialog::getSaveFileName(0, QObject::tr("Database file"), dir, filter, &filters[0], QFileDialog::DontConfirmOverwrite); + else + return QFileDialog::getOpenFileName(0, QObject::tr("Database file"), dir, filter, &filters[0]); } void setValidState(QWidget *widget, bool valid, const QString& message) diff --git a/SQLiteStudio3/guiSQLiteStudio/uiutils.h b/SQLiteStudio3/guiSQLiteStudio/uiutils.h index b1c78f3..01652b7 100644 --- a/SQLiteStudio3/guiSQLiteStudio/uiutils.h +++ b/SQLiteStudio3/guiSQLiteStudio/uiutils.h @@ -7,7 +7,7 @@ class QWidget; -GUI_API_EXPORT QString getDbPath(const QString& startWith = QString::null); +GUI_API_EXPORT QString getDbPath(bool newFileMode, const QString& startWith = QString::null); GUI_API_EXPORT void setValidState(QWidget* widget, bool valid, const QString& message = QString()); GUI_API_EXPORT void setValidStateWihtTooltip(QWidget* widget, const QString& tooltip, bool valid, const QString& message = QString()); GUI_API_EXPORT void setValidStateWarning(QWidget* widget, const QString& warning); diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp index 590a2fd..c494702 100644 --- a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp @@ -104,7 +104,7 @@ void EditorWindow::init() connect(resultsModel, SIGNAL(executionSuccessful()), this, SLOT(executionSuccessful())); connect(resultsModel, SIGNAL(executionFailed(QString)), this, SLOT(executionFailed(QString))); - connect(resultsModel, SIGNAL(totalRowsAndPagesAvailable()), this, SLOT(totalRowsAndPagesAvailable())); + connect(resultsModel, SIGNAL(storeExecutionInHistory()), this, SLOT(storeExecutionInHistory())); // SQL history list ui->historyList->setModel(CFG->getSqlHistoryModel()); @@ -520,7 +520,7 @@ void EditorWindow::executionFailed(const QString &errorText) updateState(); } -void EditorWindow::totalRowsAndPagesAvailable() +void EditorWindow::storeExecutionInHistory() { qint64 rowsReturned = resultsModel->getTotalRowsReturned(); qint64 rowsAffected = resultsModel->getTotalRowsAffected(); diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h index 4666386..d952b1b 100644 --- a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h +++ b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h @@ -134,7 +134,7 @@ class GUI_API_EXPORT EditorWindow : public MdiChild void dbChanged(); void executionSuccessful(); void executionFailed(const QString& errorText); - void totalRowsAndPagesAvailable(); + void storeExecutionInHistory(); void updateResultsDisplayMode(); void prevDb(); void nextDb(); diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp index fdbbac2..77a4adc 100644 --- a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp @@ -1406,6 +1406,7 @@ void TableWindow::updateIndexes() } ui->indexList->resizeColumnsToContents(); + ui->indexList->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch); updateIndexesState(); } @@ -1453,6 +1454,7 @@ void TableWindow::updateTriggers() } ui->triggerList->resizeColumnsToContents(); + ui->triggerList->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Stretch); updateTriggersState(); } -- cgit v1.2.3