aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2015-01-30 17:00:07 -0500
committerLibravatarUnit 193 <unit193@ubuntu.com>2015-01-30 17:00:07 -0500
commit016003905ca0e8e459e3dc33e786beda8ec92f45 (patch)
tree34aba2d2e0d66fbf2c3821ee8358f56e40c4c95e /SQLiteStudio3/guiSQLiteStudio
parent724c012ada23ef480c61fe99e3c9784b91aeb1ca (diff)
Imported Upstream version 3.0.2upstream/3.0.2
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/fontedit.ui8
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/numericspinbox.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columncollatepanel.ui24
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp245
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.h16
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.ui8
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.ui35
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columnuniqueandnotnullpanel.ui24
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.ui6
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp3
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui8
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp14
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.cpp12
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp32
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp9
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp152
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h6
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqltablemodel.cpp16
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dblistmodel.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dbobjectdialogs.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp49
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.h8
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.cpp56
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.h5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.ui93
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.ui4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/bugreportlogindialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp22
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.ui180
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/constraintdialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.cpp1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/errorsconfirmdialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.ui20
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui8
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.cpp34
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.h27
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.ui77
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/messagelistdialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/searchtextdialog.ui4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/triggercolumnsdialog.ui28
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.ui4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/formmanager.cpp20
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/formmanager.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/forms/sqlformatterplugin.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro14
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.qrc5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/iconmanager.cpp5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/iconmanager.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/icons.qrc1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/img/reset_autoincrement.pngbin0 -> 708 bytes
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp7
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/mainwindow.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/mainwindow.ui7
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp3
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/sqlcompareview.cpp3
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/sqleditor.cpp88
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/sqleditor.h3
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/taskbar.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/taskbar.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.qmbin0 -> 137929 bytes
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.ts5980
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/uiconfig.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/bugreporthistorywindow.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/collationseditor.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/ddlhistorywindow.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp19
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.ui45
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/functionseditor.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp35
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.ui4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp6
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.ui34
89 files changed, 7135 insertions, 450 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/common/fontedit.ui b/SQLiteStudio3/guiSQLiteStudio/common/fontedit.ui
index d8daa9f..575208f 100644
--- a/SQLiteStudio3/guiSQLiteStudio/common/fontedit.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/common/fontedit.ui
@@ -7,24 +7,24 @@
<x>0</x>
<y>0</y>
<width>451</width>
- <height>35</height>
+ <height>37</height>
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
- <string>TextLabel</string>
+ <string notr="true">TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="button">
<property name="text">
- <string>...</string>
+ <string notr="true">...</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/common/numericspinbox.cpp b/SQLiteStudio3/guiSQLiteStudio/common/numericspinbox.cpp
index 5a48033..e1b6620 100644
--- a/SQLiteStudio3/guiSQLiteStudio/common/numericspinbox.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/common/numericspinbox.cpp
@@ -34,7 +34,6 @@ QValidator::State NumericSpinBox::validate(QString& input, int& pos) const
{
UNUSED(input);
UNUSED(pos);
- emit modified();
if (strict)
return validateStrict(input, pos);
@@ -103,6 +102,7 @@ void NumericSpinBox::setStrict(bool value, bool allowEmpty)
void NumericSpinBox::valueEdited(const QString& value)
{
setValueInternal(value);
+ emit modified();
}
QAbstractSpinBox::StepEnabled NumericSpinBox::stepEnabled() const
diff --git a/SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp b/SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp
index bda3040..a0da399 100644
--- a/SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp
@@ -51,7 +51,7 @@ void CompleterItemDelegate::paintIcon(QPainter* painter, const QStyleOptionViewI
iconRect.setSize(iconSize + QSize(spacer*2, spacer*2));
iconRect.setTopLeft(iconRect.topLeft() + QPoint(spacer, spacer));
- QIcon::State state = option.state & QStyle::State_Open ? QIcon::On : QIcon::Off;
+ QIcon::State state = (option.state & QStyle::State_Open) ? QIcon::On : QIcon::Off;
icon.paint(painter, iconRect, option.decorationAlignment, mode, state);
}
@@ -60,7 +60,7 @@ void CompleterItemDelegate::paintText(QPainter* painter, const QStyleOptionViewI
painter->save();
// Colors
- QPalette::ColorGroup cg = option.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled;
+ QPalette::ColorGroup cg = (option.state & QStyle::State_Enabled) ? QPalette::Normal : QPalette::Disabled;
if (cg == QPalette::Normal && !(option.state & QStyle::State_Active))
cg = QPalette::Inactive;
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columncollatepanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/columncollatepanel.ui
index a481875..0c3478e 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columncollatepanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columncollatepanel.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -23,7 +23,16 @@
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -46,7 +55,16 @@
<item>
<widget class="QWidget" name="namedWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp
index 3d7090a..4f402b2 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp
@@ -1,9 +1,9 @@
#include "columndefaultpanel.h"
#include "ui_columndefaultpanel.h"
-#include "parser/ast/sqlitecreatetable.h"
#include "parser/parser.h"
#include "parser/keywords.h"
#include "uiutils.h"
+#include "schemaresolver.h"
#include <QDebug>
ColumnDefaultPanel::ColumnDefaultPanel(QWidget *parent) :
@@ -34,6 +34,22 @@ void ColumnDefaultPanel::changeEvent(QEvent *e)
bool ColumnDefaultPanel::validate()
{
+ if (!ui->exprEdit->isSyntaxChecked())
+ {
+ setValidState(ui->exprEdit, false, tr("Enter a default value expression."));
+ currentMode = Mode::ERROR;
+ return false;
+ }
+
+ // First check if we already validated this text.
+ // This method is called twice, by both errors checking and syntax highlighting,
+ // because signal for textChange() is connected with call to updateValidation().
+ QString text = ui->exprEdit->toPlainText();
+ if (!lastValidatedText.isNull() && lastValidatedText == text)
+ return lastValidationResult;
+
+ lastValidatedText = text;
+
bool nameOk = true;
if (ui->namedCheck->isChecked() && ui->namedEdit->text().isEmpty())
nameOk = false;
@@ -41,12 +57,40 @@ bool ColumnDefaultPanel::validate()
bool exprOk = !ui->exprEdit->toPlainText().trimmed().isEmpty() &&
!ui->exprEdit->haveErrors();
- bool exprCheckedOk = exprOk && ui->exprEdit->isSyntaxChecked();
+ QString exprError;
+ if (exprOk)
+ {
+ // Everything looks fine, so lets do the final check - if the value is considered constant by SQLite.
+ static QString tempDdlLiteralTpl = QStringLiteral("CREATE TABLE temp.%1 (col DEFAULT %2);");
+ static QString tempDdlExprTpl = QStringLiteral("CREATE TABLE temp.%1 (col DEFAULT (%2));");
+ static QString dropTempDdl = QStringLiteral("DROP TABLE IF EXISTS temp.%1;");
+
+ QString tableName = getTempTable();
+ QString tempDdl = tempDdlExprTpl.arg(tableName, ui->exprEdit->toPlainText());
+ SqlQueryPtr res = db->exec(tempDdl);
+ if (res->isError())
+ {
+ tempDdl = tempDdlLiteralTpl.arg(tableName, ui->exprEdit->toPlainText());
+ res = db->exec(tempDdl);
+ if (res->isError())
+ {
+ exprOk = false;
+ exprError = tr("Invalid default value expression: %1").arg(res->getErrorText());
+ }
+ else
+ currentMode = Mode::LITERAL;
+ }
+ else
+ currentMode = Mode::EXPR;
+
+ db->exec(dropTempDdl.arg(tableName));
+ }
- setValidState(ui->exprEdit, exprOk, tr("Enter a default value expression."));
+ setValidState(ui->exprEdit, exprOk, exprError);
setValidState(ui->namedEdit, nameOk, tr("Enter a name of the constraint."));
- return exprCheckedOk && nameOk;
+ lastValidationResult = (exprOk && nameOk);
+ return lastValidationResult;
}
bool ColumnDefaultPanel::validateOnly()
@@ -69,18 +113,99 @@ void ColumnDefaultPanel::storeConfiguration()
if (constraint.isNull())
return;
+ if (currentMode == Mode::ERROR)
+ {
+ qCritical() << "Call to ColumnDefaultPanel::storeConfiguration() while its mode is in ERROR state.";
+ return;
+ }
+
SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data());
constr->type = SqliteCreateTable::Column::Constraint::DEFAULT;
- SqliteExprPtr expr = parseExpression(ui->exprEdit->toPlainText());
- SqliteExpr* newExpr = new SqliteExpr(*expr.data());
- newExpr->setParent(constraint.data());
- constr->expr = newExpr;
+ switch (currentMode)
+ {
+ case Mode::EXPR:
+ storeExpr(constr);
+ break;
+ case Mode::LITERAL:
+ storeLiteral(constr);
+ break;
+ case Mode::ERROR:
+ return;
+ }
if (ui->namedCheck->isChecked())
constr->name = ui->namedEdit->text();
}
+void ColumnDefaultPanel::storeExpr(SqliteCreateTable::Column::Constraint* constr)
+{
+ QString text = ui->exprEdit->toPlainText();
+ clearDefault(constr);
+ if (text.toUpper() == "NULL")
+ {
+ // We will just use literal null, no need to create expression with null.
+ constr->literalNull = true;
+ return;
+ }
+
+ Parser parser(db->getDialect());
+ SqliteExpr* newExpr = parser.parseExpr(text);
+ newExpr->setParent(constraint.data());
+ constr->expr = newExpr;
+}
+
+void ColumnDefaultPanel::storeLiteral(SqliteCreateTable::Column::Constraint* constr)
+{
+ QString text = ui->exprEdit->toPlainText();
+
+ Parser parser(db->getDialect());
+ SqliteCreateTablePtr createTable = parser.parse<SqliteCreateTable>("CREATE TABLE tab (col DEFAULT "+text+");");
+ if (!createTable || createTable->columns.size() == 0 || createTable->columns.first()->constraints.size() == 0)
+ {
+ qCritical() << "ColumnDefaultPanel::storeLiteral(): create table not parsed! Cannot store literal. Expression was:" << text;
+ return;
+ }
+
+ SqliteCreateTable::Column::Constraint* parsedConstr = createTable->columns.first()->constraints.first();
+ if (parsedConstr->type != SqliteCreateTable::Column::Constraint::Type::DEFAULT)
+ {
+ qCritical() << "ColumnDefaultPanel::storeLiteral(): parsed constraint not a DEFAULT! Cannot store literal. Expression was:" << text;
+ return;
+ }
+
+ clearDefault(constr);
+ if (!parsedConstr->id.isNull())
+ constr->id = parsedConstr->id;
+ else if (!parsedConstr->ctime.isNull())
+ constr->ctime = parsedConstr->ctime.toUpper();
+ else if (parsedConstr->expr)
+ {
+ qWarning() << "ColumnDefaultPanel::storeLiteral(): parsed constraint turned out to be an expression. This should be handled by ColumnDefaultPanel::storeExpr."
+ << "Expression was:" << text;
+ constr->expr = parsedConstr->expr;
+ parsedConstr->expr = nullptr;
+ constr->expr->setParent(constr);
+ }
+ else if (parsedConstr->literalNull)
+ constr->literalNull = true;
+ else
+ constr->literalValue = parsedConstr->literalValue;
+}
+
+void ColumnDefaultPanel::clearDefault(SqliteCreateTable::Column::Constraint* constr)
+{
+ if (constr->expr)
+ {
+ delete constr->expr;
+ constr->expr = nullptr;
+ }
+ constr->literalNull = false;
+ constr->literalValue = QVariant();
+ constr->id = QString();
+ constr->ctime = QString();
+}
+
void ColumnDefaultPanel::init()
{
setFocusProxy(ui->exprEdit);
@@ -101,101 +226,49 @@ void ColumnDefaultPanel::readConstraint()
SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data());
if (constr->expr)
+ {
ui->exprEdit->setPlainText(constr->expr->detokenize());
+ currentMode = Mode::EXPR;
+ }
else if (!constr->literalValue.isNull())
- ui->exprEdit->setPlainText(constr->literalValue.toString());
-
- if (!constr->name.isNull())
{
- ui->namedCheck->setChecked(true);
- ui->namedEdit->setText(constr->name);
+ ui->exprEdit->setPlainText(constr->literalValue.toString());
+ currentMode = Mode::LITERAL;
}
-}
-
-void ColumnDefaultPanel::updateVirtualSql()
-{
- ui->exprEdit->setDb(db);
-
- SqliteCreateTable::Column* column = dynamic_cast<SqliteCreateTable::Column*>(constraint->parentStatement());
- SqliteCreateTable* createTable = dynamic_cast<SqliteCreateTable*>(column->parentStatement());
-
- createTable->rebuildTokens();
- TokenList tokens = createTable->tokens;
- TokenList colTokens = column->tokens;
- if (createTable->columns.indexOf(column) == -1)
+ else if (!constr->id.isNull())
{
- if (createTable->columns.size() == 0)
- {
- // No columns. Cannot get any context info.
- return;
- }
-
- colTokens = createTable->columns.last()->tokens;
+ ui->exprEdit->setPlainText(constr->id);
+ currentMode = Mode::LITERAL;
}
-
- if (colTokens.size() == 0)
+ else if (!constr->ctime.isNull())
{
- qWarning() << "CREATE TABLE tokens are invalid (0) while call to ColumnDefaultPanel::updateVirtualSql().";
- return;
+ ui->exprEdit->setPlainText(constr->ctime);
+ currentMode = Mode::LITERAL;
}
-
- int idx = tokens.lastIndexOf(colTokens.last());
- if (idx == -1)
+ else if (constr->literalNull)
{
- qWarning() << "CREATE TABLE tokens are invalid while call to ColumnDefaultPanel::updateVirtualSql().";
- return;
+ ui->exprEdit->setPlainText("NULL");
+ currentMode = Mode::LITERAL;
}
- idx++;
-
- TokenList newTokens;
- newTokens << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::KEYWORD, "DEFAULT")
- << TokenPtr::create(Token::SPACE, " ");
- if (constraint->dialect == Dialect::Sqlite3)
- {
- newTokens << TokenPtr::create(Token::PAR_LEFT, "(")
- << TokenPtr::create(Token::OTHER, "%1")
- << TokenPtr::create(Token::PAR_RIGHT, ")");
- }
- else
+ if (!constr->name.isNull())
{
- newTokens << TokenPtr::create(Token::OTHER, "%1");
+ ui->namedCheck->setChecked(true);
+ ui->namedEdit->setText(constr->name);
}
-
- tokens.insert(idx, newTokens);
- QString sql = tokens.detokenize();
-
- ui->exprEdit->setVirtualSqlExpression(sql);
}
-SqliteExprPtr ColumnDefaultPanel::parseExpression(const QString& sql)
+void ColumnDefaultPanel::updateVirtualSql()
{
- Parser parser(db->getDialect());
- if (!parser.parse("SELECT "+sql))
- return SqliteExprPtr();
-
- QList<SqliteQueryPtr> queries = parser.getQueries();
- if (queries.size() == 0)
- return SqliteExprPtr();
-
- SqliteQueryPtr first = queries.first();
- if (first->queryType != SqliteQueryType::Select)
- return SqliteExprPtr();
-
- SqliteSelectPtr select = first.dynamicCast<SqliteSelect>();
- if (select->coreSelects.size() < 1)
- return SqliteExprPtr();
-
- SqliteSelect::Core* core = select->coreSelects.first();
- if (core->resultColumns.size() < 1)
- return SqliteExprPtr();
-
- SqliteSelect::Core::ResultColumn* resCol = core->resultColumns.first();
- if (!resCol->expr)
- return SqliteExprPtr();
+ static QString sql = QStringLiteral("CREATE TABLE tab (col DEFAULT %1)");
+ ui->exprEdit->setDb(db);
+ ui->exprEdit->setVirtualSqlExpression(sql.arg(db->getDialect() == Dialect::Sqlite3 ? "(%1)" : "%1"));
+}
- return resCol->expr->detach().dynamicCast<SqliteExpr>();
+QString ColumnDefaultPanel::getTempTable()
+{
+ SchemaResolver resolver(db);
+ return resolver.getUniqueName("temp", "sqlitestudio_temp_table");
}
void ColumnDefaultPanel::updateState()
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.h b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.h
index 933c2dd..3cdd962 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.h
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.h
@@ -4,6 +4,7 @@
#include "constraintpanel.h"
#include "parser/ast/sqliteconflictalgo.h"
#include "guiSQLiteStudio_global.h"
+#include "parser/ast/sqlitecreatetable.h"
#include <QWidget>
namespace Ui {
@@ -27,12 +28,25 @@ class GUI_API_EXPORT ColumnDefaultPanel : public ConstraintPanel
void storeConfiguration();
private:
+ enum class Mode
+ {
+ EXPR,
+ LITERAL,
+ ERROR
+ };
+
void init();
void readConstraint();
void updateVirtualSql();
- SqliteExprPtr parseExpression(const QString& sql);
+ QString getTempTable();
+ void storeExpr(SqliteCreateTable::Column::Constraint* constr);
+ void storeLiteral(SqliteCreateTable::Column::Constraint* constr);
+ void clearDefault(SqliteCreateTable::Column::Constraint* constr);
Ui::ColumnDefaultPanel *ui = nullptr;
+ QString lastValidatedText;
+ bool lastValidationResult = false;
+ Mode currentMode = Mode::ERROR;
private slots:
void updateState();
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.ui
index fdf55b0..0026fdb 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp
index cf234f7..f4eb3eb 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp
@@ -217,7 +217,7 @@ void ColumnForeignKeyPanel::storeConfiguration()
storeCondition(SqliteForeignKey::Condition::DELETE, ui->onDeleteCombo->currentText());
if (ui->onUpdateCheckBox->isChecked())
- storeCondition(SqliteForeignKey::Condition::UPDATE, ui->onDeleteCombo->currentText());
+ storeCondition(SqliteForeignKey::Condition::UPDATE, ui->onUpdateCombo->currentText());
if (ui->matchCheckBox->isChecked())
storeMatchCondition(ui->matchCombo->currentText());
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.ui
index c442967..23e2300 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.ui
@@ -17,7 +17,7 @@
</size>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -61,7 +61,7 @@
<item row="0" column="0">
<widget class="QCheckBox" name="onUpdateCheckBox">
<property name="text">
- <string>ON UPDATE</string>
+ <string notr="true">ON UPDATE</string>
</property>
</widget>
</item>
@@ -71,14 +71,14 @@
<item row="1" column="0">
<widget class="QCheckBox" name="onDeleteCheckBox">
<property name="text">
- <string>ON DELETE</string>
+ <string notr="true">ON DELETE</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="matchCheckBox">
<property name="text">
- <string>MATCH</string>
+ <string notr="true">MATCH</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.ui
index bedabca..d6c15d4 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.ui
@@ -17,7 +17,7 @@
</size>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -30,7 +30,16 @@
<item>
<widget class="QWidget" name="sortOrderWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -56,7 +65,16 @@
<item>
<widget class="QWidget" name="namedWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -75,7 +93,16 @@
<item>
<widget class="QWidget" name="conflictWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_3">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columnuniqueandnotnullpanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/columnuniqueandnotnullpanel.ui
index 16efc89..7a60f40 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columnuniqueandnotnullpanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columnuniqueandnotnullpanel.ui
@@ -17,13 +17,22 @@
</size>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="namedWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -42,7 +51,16 @@
<item>
<widget class="QWidget" name="conflictWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.ui
index 58f58e6..e7021b4 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.ui
@@ -7,17 +7,17 @@
<x>0</x>
<y>0</y>
<width>400</width>
- <height>197</height>
+ <height>211</height>
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="exprGroup">
<property name="title">
- <string>The expression</string>
+ <string>The condition</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp
index 60da220..7354997 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp
@@ -327,7 +327,6 @@ void TableForeignKeyPanel::storeConfiguration()
QCheckBox* check = nullptr;
QComboBox* combo = nullptr;
SqliteIndexedColumn* idxCol = nullptr;
- QString name;
for (int i = 0; i < totalColumns; i++)
{
// Local column
@@ -352,7 +351,7 @@ void TableForeignKeyPanel::storeConfiguration()
storeCondition(SqliteForeignKey::Condition::DELETE, ui->onDeleteCombo->currentText());
if (ui->onUpdateCheckBox->isChecked())
- storeCondition(SqliteForeignKey::Condition::UPDATE, ui->onDeleteCombo->currentText());
+ storeCondition(SqliteForeignKey::Condition::UPDATE, ui->onUpdateCombo->currentText());
if (ui->matchCheckBox->isChecked())
storeMatchCondition(ui->matchCombo->currentText());
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui
index 8917381..7ecbe06 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui
@@ -17,7 +17,7 @@
</size>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -129,7 +129,7 @@ but it's okay to use them anyway.</string>
<item row="0" column="0">
<widget class="QCheckBox" name="onUpdateCheckBox">
<property name="text">
- <string>ON UPDATE</string>
+ <string notr="true">ON UPDATE</string>
</property>
</widget>
</item>
@@ -139,14 +139,14 @@ but it's okay to use them anyway.</string>
<item row="1" column="0">
<widget class="QCheckBox" name="onDeleteCheckBox">
<property name="text">
- <string>ON DELETE</string>
+ <string notr="true">ON DELETE</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="matchCheckBox">
<property name="text">
- <string>MATCH</string>
+ <string notr="true">MATCH</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.ui
index 9453d3c..52c5af1 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>PrimaryKeyOrUniquePanel</string>
+ <string notr="true">PrimaryKeyOrUniquePanel</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp
index c732b6d..d631899 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp
@@ -406,12 +406,14 @@ QString SqlQueryItem::loadFullData()
return tr("This cell is not editable, because: %1").arg(SqlQueryModelColumn::resolveMessage(col->editionForbiddenReason.values().first()));
}
- if (isJustInsertedWithOutRowId())
- {
- QString msg = tr("When inserted new row to the WITHOUT ROWID table, using DEFAULT value for PRIMARY KEY, "
- "the table has to be reloaded in order to edit the new row.");
- return tr("This cell is not editable, because: %1").arg(msg);
- }
+ // This should not happen anymore (since WITHOUT ROWID tables should be handled properly now,
+ // but we will keep this here for a while, just in case.
+// if (isJustInsertedWithOutRowId())
+// {
+// QString msg = tr("When inserted new row to the WITHOUT ROWID table, using DEFAULT value for PRIMARY KEY, "
+// "the table has to be reloaded in order to edit the new row.");
+// return tr("This cell is not editable, because: %1").arg(msg);
+// }
SqlQueryModel *model = getModel();
Db* db = model->getDb();
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.cpp
index ab8f7f2..6741d08 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.cpp
@@ -7,6 +7,7 @@
#include <QPainter>
#include <QEvent>
#include <QLineEdit>
+#include <QDebug>
SqlQueryItemDelegate::SqlQueryItemDelegate(QObject *parent) :
QStyledItemDelegate(parent)
@@ -16,7 +17,6 @@ SqlQueryItemDelegate::SqlQueryItemDelegate(QObject *parent) :
void SqlQueryItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyledItemDelegate::paint(painter, option, index);
-
SqlQueryItem* item = getItem(index);
if (item->isUncommited())
@@ -54,6 +54,16 @@ QWidget* SqlQueryItemDelegate::createEditor(QWidget* parent, const QStyleOptionV
return getEditor(item->getValue().userType(), parent);
}
+QString SqlQueryItemDelegate::displayText(const QVariant& value, const QLocale& locale) const
+{
+ UNUSED(locale);
+
+ if (value.type() == QVariant::Double)
+ return value.toString();
+
+ return QStyledItemDelegate::displayText(value, locale);
+}
+
SqlQueryItem* SqlQueryItemDelegate::getItem(const QModelIndex &index) const
{
const SqlQueryModel* queryModel = dynamic_cast<const SqlQueryModel*>(index.model());
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.h b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.h
index a190202..8b894ed 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.h
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.h
@@ -14,6 +14,7 @@ class GUI_API_EXPORT SqlQueryItemDelegate : public QStyledItemDelegate
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const;
+ QString displayText(const QVariant & value, const QLocale & locale) const;
private:
SqlQueryItem* getItem(const QModelIndex &index) const;
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp
index caeab3b..cb0f27a 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp
@@ -975,7 +975,7 @@ void SqlQueryModel::handleExecFinished(SqlQueryPtr results)
{
if (results->isError())
{
- emit executionFailed(tr("Error while executing SQL query: %1").arg(results->getErrorText()));
+ emit executionFailed(tr("Error while executing SQL query on database '%1': %2").arg(db->getName(), results->getErrorText()));
return;
}
@@ -992,11 +992,18 @@ void SqlQueryModel::handleExecFinished(SqlQueryPtr results)
reloading = false;
- if (queryExecutor->isRowCountingRequired() || rowCount() < CFG_UI.General.NumberOfRowsPerPage.get())
- emit totalRowsAndPagesAvailable(); // rows were counted manually
+ bool rowsCountedManually = queryExecutor->isRowCountingRequired() || rowCount() < CFG_UI.General.NumberOfRowsPerPage.get();
+ bool countRes = false;
+ if (rowsCountedManually)
+ emit totalRowsAndPagesAvailable();
else
- queryExecutor->countResults();
+ countRes = queryExecutor->countResults();
+ if (!countRes || !queryExecutor->getAsyncMode())
+ {
+ results.clear();
+ detachDatabases();
+ }
}
void SqlQueryModel::handleExecFailed(int code, QString errorMessage)
@@ -1019,7 +1026,7 @@ void SqlQueryModel::handleExecFailed(int code, QString errorMessage)
emit executionFailed(tr("Error while loading query results: %1").arg(errorMessage));
}
else
- emit executionFailed(tr("Error while executing SQL query: %1").arg(errorMessage));
+ emit executionFailed(tr("Error while executing SQL query on database '%1': %2").arg(db->getName(), errorMessage));
restoreNumbersToQueryExecutor();
resultsCountingFinished(0, 0, 0);
@@ -1032,6 +1039,7 @@ void SqlQueryModel::resultsCountingFinished(quint64 rowsAffected, quint64 rowsRe
this->rowsAffected = rowsAffected;
this->totalRowsReturned = rowsReturned;
this->totalPages = totalPages;
+ detachDatabases();
emit totalRowsAndPagesAvailable();
}
@@ -1150,10 +1158,10 @@ void SqlQueryModel::storeStep1NumbersFromExecution()
lastExecutionTime = queryExecutor->getLastExecutionTime();
page = queryExecutor->getPage();
sortOrder = queryExecutor->getSortOrder();
+ rowsAffected = queryExecutor->getRowsAffected();
if (!queryExecutor->getSkipRowCounting())
{
- rowsAffected = queryExecutor->getRowsAffected();
totalPages = queryExecutor->getTotalPages();
if (!queryExecutor->isRowCountingRequired())
totalRowsReturned = queryExecutor->getTotalRowsReturned();
@@ -1214,6 +1222,11 @@ bool SqlQueryModel::wasSchemaModified() const
return queryExecutor->wasSchemaModified();
}
+bool SqlQueryModel::wasDataModifyingQuery() const
+{
+ return queryExecutor->wasDataModifyingQuery();
+}
+
void SqlQueryModel::updateSelectiveCommitRollbackActions(const QItemSelection& selected, const QItemSelection& deselected)
{
UNUSED(selected);
@@ -1310,6 +1323,11 @@ Icon& SqlQueryModel::getIconForIdx(int idx) const
return ICONS.SORT_COUNT_20_PLUS;
}
+void SqlQueryModel::detachDatabases()
+{
+ queryExecutor->releaseResultsAndCleanup();
+}
+
void SqlQueryModel::addNewRow()
{
int row = rowCount();
@@ -1483,7 +1501,7 @@ void SqlQueryModel::CommitUpdateQueryBuilder::setTable(const QString& table)
void SqlQueryModel::CommitUpdateQueryBuilder::setColumn(const QString& column)
{
- this->columns = {column};
+ this->columns = QStringList({column});
}
void SqlQueryModel::CommitUpdateQueryBuilder::addColumn(const QString& column)
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h
index cb626ae..cbdd606 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h
@@ -113,6 +113,7 @@ class GUI_API_EXPORT SqlQueryModel : public QStandardItemModel
* @return true if schema was modified, or false if not.
*/
bool wasSchemaModified() const;
+ bool wasDataModifyingQuery() const;
SqlQueryView* getView() const;
void setView(SqlQueryView* value);
@@ -254,6 +255,7 @@ class GUI_API_EXPORT SqlQueryModel : public QStandardItemModel
void reloadInternal();
void addNewRowInternal(int rowIdx);
Icon& getIconForIdx(int idx) const;
+ void detachDatabases();
QString query;
bool explain = false;
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp
index 62d0b45..0966ede 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp
@@ -63,7 +63,8 @@ QString SqlQueryModelColumn::resolveMessage(SqlQueryModelColumn::EditionForbidde
switch (reason)
{
case EditionForbiddenReason::COMPOUND_SELECT:
- return QObject::tr("Cannot edit columns that are result of compound SELECT statements (one that includes UNION, INTERSECT or EXCEPT keywords).");
+ return QObject::tr("Cannot edit columns that are result of compound %1 statements (one that includes %2, %3 or %4 keywords).")
+ .arg("SELECT", "UNION", "INTERSECT", "EXCEPT");
case EditionForbiddenReason::SMART_EXECUTION_FAILED:
return QObject::tr("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.");
case EditionForbiddenReason::EXPRESSION:
@@ -71,11 +72,11 @@ QString SqlQueryModelColumn::resolveMessage(SqlQueryModelColumn::EditionForbidde
case EditionForbiddenReason::SYSTEM_TABLE:
return QObject::tr("Requested column belongs to restricted SQLite table. Those tables cannot be edited directly.");
case EditionForbiddenReason::NOT_A_SELECT:
- return QObject::tr("Cannot edit results of query other than SELECT.");
+ return QObject::tr("Cannot edit results of query other than %1.").arg("SELECT");
case EditionForbiddenReason::GROUPED_RESULTS:
- return QObject::tr("Cannot edit columns that are result of aggregated SELECT statements.");
+ return QObject::tr("Cannot edit columns that are result of aggregated %1 statements.").arg("SELECT");
case EditionForbiddenReason::DISTINCT_RESULTS:
- return QObject::tr("Cannot edit columns that are result of SELECT DISTINCT statement.");
+ return QObject::tr("Cannot edit columns that are result of %1 statement.").arg("SELECT DISTINCT");
case EditionForbiddenReason::COMMON_TABLE_EXPRESSION:
return QObject::tr("Cannot edit columns that are result of common table expression statement (%1).").arg("WITH ... SELECT ...");
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp
index e4a0656..1f08b30 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp
@@ -35,88 +35,19 @@ SqlQueryView::~SqlQueryView()
delete itemDelegate;
}
-QList<SqlQueryItem*> SqlQueryView::getSelectedItems()
-{
- QList<SqlQueryItem*> items;
- QModelIndexList idxList = selectionModel()->selectedIndexes();
- QModelIndex currIdx = getCurrentIndex();
- if (!idxList.contains(currIdx) && currIdx.isValid())
- idxList << currIdx;
-
- if (idxList.size() == 0)
- return items;
-
- qSort(idxList);
- const SqlQueryModel* model = dynamic_cast<const SqlQueryModel*>(idxList.first().model());
- foreach (const QModelIndex& idx, idxList)
- items << model->itemFromIndex(idx);
-
- return items;
-}
-
-SqlQueryItem* SqlQueryView::getCurrentItem()
-{
- QModelIndex idx = getCurrentIndex();
- if (!idx.isValid())
- return nullptr;
-
- return getModel()->itemFromIndex(idx);
-}
-
-SqlQueryModel* SqlQueryView::getModel()
-{
- return dynamic_cast<SqlQueryModel*>(model());
-}
-
-void SqlQueryView::setModel(QAbstractItemModel* model)
-{
- QTableView::setModel(model);
- connect(widgetCover, SIGNAL(cancelClicked()), getModel(), SLOT(interrupt()));
- connect(getModel(), &SqlQueryModel::commitStatusChanged, this, &SqlQueryView::updateCommitRollbackActions);
- connect(getModel(), &SqlQueryModel::sortingUpdated, this, &SqlQueryView::sortingUpdated);
-}
-
-SqlQueryItem* SqlQueryView::itemAt(const QPoint& pos)
-{
- return dynamic_cast<SqlQueryItem*>(getModel()->itemFromIndex(indexAt(pos)));
-}
-
-QToolBar* SqlQueryView::getToolBar(int toolbar) const
-{
- UNUSED(toolbar);
- return nullptr;
-}
-
-void SqlQueryView::addAdditionalAction(QAction* action)
-{
- additionalActions << action;
-}
-
-QModelIndex SqlQueryView::getCurrentIndex() const
-{
- return currentIndex();
-}
-
-void SqlQueryView::mouseDoubleClickEvent(QMouseEvent* event)
-{
- SqlQueryItem* item = itemAt(event->pos());
- if (item && !handleDoubleClick(item))
- return;
-
- QTableView::mouseDoubleClickEvent(event);
-}
-
void SqlQueryView::init()
{
itemDelegate = new SqlQueryItemDelegate();
setItemDelegate(itemDelegate);
setMouseTracking(true);
+ setEditTriggers(QAbstractItemView::AnyKeyPressed);
setContextMenuPolicy(Qt::CustomContextMenu);
contextMenu = new QMenu(this);
connect(this, &QWidget::customContextMenuRequested, this, &SqlQueryView::customContextMenuRequested);
connect(CFG_UI.Fonts.DataView, SIGNAL(changed(QVariant)), this, SLOT(updateFont()));
+ connect(this, SIGNAL(activated(QModelIndex)), this, SLOT(itemActivated(QModelIndex)));
horizontalHeader()->setSortIndicatorShown(false);
horizontalHeader()->setSectionsClickable(true);
@@ -227,7 +158,84 @@ void SqlQueryView::setupHeaderMenu()
headerContextMenu->addAction(actionMap[RESET_SORTING]);
}
-bool SqlQueryView::handleDoubleClick(SqlQueryItem* item)
+QList<SqlQueryItem*> SqlQueryView::getSelectedItems()
+{
+ QList<SqlQueryItem*> items;
+ QModelIndexList idxList = selectionModel()->selectedIndexes();
+ QModelIndex currIdx = getCurrentIndex();
+ if (!idxList.contains(currIdx) && currIdx.isValid())
+ idxList << currIdx;
+
+ if (idxList.size() == 0)
+ return items;
+
+ qSort(idxList);
+ const SqlQueryModel* model = dynamic_cast<const SqlQueryModel*>(idxList.first().model());
+ foreach (const QModelIndex& idx, idxList)
+ items << model->itemFromIndex(idx);
+
+ return items;
+}
+
+SqlQueryItem* SqlQueryView::getCurrentItem()
+{
+ QModelIndex idx = getCurrentIndex();
+ if (!idx.isValid())
+ return nullptr;
+
+ return getModel()->itemFromIndex(idx);
+}
+
+SqlQueryModel* SqlQueryView::getModel()
+{
+ return dynamic_cast<SqlQueryModel*>(model());
+}
+
+void SqlQueryView::setModel(QAbstractItemModel* model)
+{
+ QTableView::setModel(model);
+ connect(widgetCover, SIGNAL(cancelClicked()), getModel(), SLOT(interrupt()));
+ connect(getModel(), &SqlQueryModel::commitStatusChanged, this, &SqlQueryView::updateCommitRollbackActions);
+ connect(getModel(), &SqlQueryModel::sortingUpdated, this, &SqlQueryView::sortingUpdated);
+}
+
+SqlQueryItem* SqlQueryView::itemAt(const QPoint& pos)
+{
+ return dynamic_cast<SqlQueryItem*>(getModel()->itemFromIndex(indexAt(pos)));
+}
+
+QToolBar* SqlQueryView::getToolBar(int toolbar) const
+{
+ UNUSED(toolbar);
+ return nullptr;
+}
+
+void SqlQueryView::addAdditionalAction(QAction* action)
+{
+ additionalActions << action;
+}
+
+QModelIndex SqlQueryView::getCurrentIndex() const
+{
+ return currentIndex();
+}
+
+void SqlQueryView::itemActivated(const QModelIndex& index)
+{
+ if (!index.isValid())
+ return;
+
+ SqlQueryItem* item = getModel()->itemFromIndex(index);
+ if (!item)
+ return;
+
+ if (!editInEditorIfNecessary(item))
+ return;
+
+ edit(getCurrentIndex());
+}
+
+bool SqlQueryView::editInEditorIfNecessary(SqlQueryItem* item)
{
if (item->getColumn()->dataType.getType() == DataType::BLOB)
{
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h
index 65486fe..a523200 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h
@@ -71,9 +71,6 @@ class GUI_API_EXPORT SqlQueryView : public QTableView, public ExtActionContainer
void addAdditionalAction(QAction* action);
QModelIndex getCurrentIndex() const;
- protected:
- void mouseDoubleClickEvent(QMouseEvent* event);
-
private:
void init();
void setupWidgetCover();
@@ -82,7 +79,7 @@ class GUI_API_EXPORT SqlQueryView : public QTableView, public ExtActionContainer
void refreshShortcuts();
void setupActionsForMenu(SqlQueryItem* currentItem, const QList<SqlQueryItem*>& selectedItems);
void setupHeaderMenu();
- bool handleDoubleClick(SqlQueryItem* item);
+ bool editInEditorIfNecessary(SqlQueryItem* item);
SqlQueryItemDelegate* itemDelegate = nullptr;
QMenu* contextMenu = nullptr;
@@ -100,6 +97,7 @@ class GUI_API_EXPORT SqlQueryView : public QTableView, public ExtActionContainer
void resetSorting();
void sortingUpdated(const QueryExecutor::SortList& sortOrder);
void updateFont();
+ void itemActivated(const QModelIndex& index);
public slots:
void executionStarted();
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqltablemodel.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqltablemodel.cpp
index d097d55..b0da325 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqltablemodel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqltablemodel.cpp
@@ -103,13 +103,15 @@ bool SqlTableModel::commitDeletedRow(const QList<SqlQueryItem*>& itemsInRow)
return false;
}
- if (itemsInRow[0]->isJustInsertedWithOutRowId())
- {
- QString msg = tr("When inserted new row to the WITHOUT ROWID table, using DEFAULT value for PRIMARY KEY, "
- "the table has to be reloaded in order to delete the new row.");
- notifyError(tr("Error while deleting row from table %1: %2").arg(table).arg(msg));
- return false;
- }
+ // This should not happen anymore (since WITHOUT ROWID tables should be handled properly now,
+ // but we will keep this here for a while, just in case.
+// if (itemsInRow[0]->isJustInsertedWithOutRowId())
+// {
+// QString msg = tr("When inserted new row to the WITHOUT ROWID table, using DEFAULT value for PRIMARY KEY, "
+// "the table has to be reloaded in order to delete the new row.");
+// notifyError(tr("Error while deleting row from table %1: %2").arg(table).arg(msg));
+// return false;
+// }
RowId rowId = itemsInRow[0]->getRowId();
if (rowId.isEmpty())
diff --git a/SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp b/SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp
index baa0f76..af9da8f 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp
@@ -55,6 +55,11 @@ Db* DbListModel::getDb(int index)
return dbList[index];
}
+int DbListModel::getIndexForDb(Db* db)
+{
+ return dbList.indexOf(db);
+}
+
void DbListModel::setSortMode(DbListModel::SortMode sortMode)
{
this->sortMode = sortMode;
diff --git a/SQLiteStudio3/guiSQLiteStudio/dblistmodel.h b/SQLiteStudio3/guiSQLiteStudio/dblistmodel.h
index 121db4d..57928df 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dblistmodel.h
+++ b/SQLiteStudio3/guiSQLiteStudio/dblistmodel.h
@@ -26,6 +26,7 @@ class GUI_API_EXPORT DbListModel : public QAbstractListModel
QModelIndex sibling(int row, int column, const QModelIndex & idx) const;
Db* getDb(int index);
+ int getIndexForDb(Db* db);
void setSortMode(SortMode sortMode);
SortMode getSortMode() const;
void setSortMode(const QString& sortMode);
diff --git a/SQLiteStudio3/guiSQLiteStudio/dbobjectdialogs.h b/SQLiteStudio3/guiSQLiteStudio/dbobjectdialogs.h
index bedbab8..f9a36ee 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dbobjectdialogs.h
+++ b/SQLiteStudio3/guiSQLiteStudio/dbobjectdialogs.h
@@ -14,6 +14,8 @@ class ViewWindow;
class GUI_API_EXPORT DbObjectDialogs : public QObject
{
+ Q_OBJECT
+
public:
explicit DbObjectDialogs(Db* db);
DbObjectDialogs(Db* db, QWidget* parentWidget);
diff --git a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp
index 8e137a4..509594d 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp
@@ -114,20 +114,21 @@ void DbTree::createActions()
createAction(INTEGRITY_CHECK, ICONS.INTEGRITY_CHECK, tr("Integrity check"), this, SLOT(integrityCheck()), this);
createAction(ADD_TABLE, ICONS.TABLE_ADD, tr("Create a table"), this, SLOT(addTable()), this);
createAction(EDIT_TABLE, ICONS.TABLE_EDIT, tr("Edit the table"), this, SLOT(editTable()), this);
- createAction(DEL_TABLE, ICONS.TABLE_DEL, tr("Drop the table"), this, SLOT(delTable()), this);
+ createAction(DEL_TABLE, ICONS.TABLE_DEL, tr("Delete the table"), this, SLOT(delTable()), this);
createAction(EXPORT_TABLE, ICONS.TABLE_EXPORT, tr("Export the table"), this, SLOT(exportTable()), this);
createAction(IMPORT_TABLE, ICONS.TABLE_IMPORT, tr("Import into the table"), this, SLOT(importTable()), this);
createAction(POPULATE_TABLE, ICONS.TABLE_POPULATE, tr("Populate table"), this, SLOT(populateTable()), this);
createAction(CREATE_SIMILAR_TABLE, ICONS.TABLE_CREATE_SIMILAR, tr("Create similar table"), this, SLOT(createSimilarTable()), this);
+ createAction(RESET_AUTOINCREMENT, ICONS.RESET_AUTOINCREMENT, tr("Reset autoincrement sequence"), this, SLOT(resetAutoincrement()), this);
createAction(ADD_INDEX, ICONS.INDEX_ADD, tr("Create an index"), this, SLOT(addIndex()), this);
createAction(EDIT_INDEX, ICONS.INDEX_EDIT, tr("Edit the index"), this, SLOT(editIndex()), this);
- createAction(DEL_INDEX, ICONS.INDEX_DEL, tr("Drop the index"), this, SLOT(delIndex()), this);
+ createAction(DEL_INDEX, ICONS.INDEX_DEL, tr("Delete the index"), this, SLOT(delIndex()), this);
createAction(ADD_TRIGGER, ICONS.TRIGGER_ADD, tr("Create a trigger"), this, SLOT(addTrigger()), this);
createAction(EDIT_TRIGGER, ICONS.TRIGGER_EDIT, tr("Edit the trigger"), this, SLOT(editTrigger()), this);
- createAction(DEL_TRIGGER, ICONS.TRIGGER_DEL, tr("Drop the trigger"), this, SLOT(delTrigger()), this);
+ createAction(DEL_TRIGGER, ICONS.TRIGGER_DEL, tr("Delete the trigger"), this, SLOT(delTrigger()), this);
createAction(ADD_VIEW, ICONS.VIEW_ADD, tr("Create a view"), this, SLOT(addView()), this);
createAction(EDIT_VIEW, ICONS.VIEW_EDIT, tr("Edit the view"), this, SLOT(editView()), this);
- createAction(DEL_VIEW, ICONS.VIEW_DEL, tr("Drop the view"), this, SLOT(delView()), this);
+ createAction(DEL_VIEW, ICONS.VIEW_DEL, tr("Delete the view"), this, SLOT(delView()), this);
createAction(ADD_COLUMN, ICONS.TABLE_COLUMN_ADD, tr("Add a column"), this, SLOT(addColumn()), this);
createAction(EDIT_COLUMN, ICONS.TABLE_COLUMN_EDIT, tr("Edit the column"), this, SLOT(editColumn()), this);
createAction(DEL_COLUMN, ICONS.TABLE_COLUMN_DELETE, tr("Delete the column"), this, SLOT(delColumn()), this);
@@ -188,7 +189,7 @@ void DbTree::updateActionStates(const QStandardItem *item)
break;
case DbTreeItem::Type::TABLE:
enabled << EDIT_TABLE << DEL_TABLE << EXPORT_TABLE << IMPORT_TABLE << POPULATE_TABLE << ADD_COLUMN << CREATE_SIMILAR_TABLE;
- enabled << ADD_INDEX << ADD_TRIGGER;
+ enabled << RESET_AUTOINCREMENT << ADD_INDEX << ADD_TRIGGER;
break;
case DbTreeItem::Type::VIRTUAL_TABLE:
// TODO change below when virtual tables can be edited
@@ -304,12 +305,12 @@ void DbTree::setupActionsForMenu(DbTreeItem* currItem, QMenu* contextMenu)
{
QList<ActionEntry> actions;
- ActionEntry dbEntry(ICONS.DATABASE, tr("Datatabase"));
+ ActionEntry dbEntry(ICONS.DATABASE, tr("Database"));
dbEntry += ADD_DB;
dbEntry += EDIT_DB;
dbEntry += DELETE_DB;
- ActionEntry dbEntryExt(ICONS.DATABASE, tr("Datatabase"));
+ ActionEntry dbEntryExt(ICONS.DATABASE, tr("Database"));
dbEntryExt += CONNECT_TO_DB;
dbEntryExt += DISCONNECT_FROM_DB;
dbEntryExt += _separator;
@@ -391,6 +392,7 @@ void DbTree::setupActionsForMenu(DbTreeItem* currItem, QMenu* contextMenu)
actions += ActionEntry(EXPORT_TABLE);
actions += ActionEntry(POPULATE_TABLE);
actions += ActionEntry(CREATE_SIMILAR_TABLE);
+ actions += ActionEntry(RESET_AUTOINCREMENT);
actions += ActionEntry(_separator);
actions += dbEntryExt;
break;
@@ -875,6 +877,7 @@ void DbTree::refreshSchema(Db* db)
return;
treeModel->refreshSchema(db);
+ updateActionsForCurrent();
}
void DbTree::copy()
@@ -929,7 +932,7 @@ void DbTree::createGroup()
while (existingItems.contains(name = QInputDialog::getText(this, tr("Create group"), tr("Group name"))) ||
(name.isEmpty() && !name.isNull()))
{
- QMessageBox::information(this, tr("Create directory"), tr("Entry with name %1 already exists in directory %2.")
+ QMessageBox::information(this, tr("Create group"), tr("Entry with name %1 already exists in group %2.")
.arg(name).arg(currItem->text()), QMessageBox::Ok);
}
@@ -1370,6 +1373,32 @@ void DbTree::createSimilarTable()
dialog.addTableSimilarTo(QString(), table);
}
+void DbTree::resetAutoincrement()
+{
+ Db* db = getSelectedDb();
+ if (!db || !db->isValid())
+ return;
+
+ DbTreeItem* item = ui->treeView->currentItem();
+ QString table = item->getTable();
+ if (table.isNull())
+ {
+ qWarning() << "Tried to reset autoincrement, while table wasn't selected in DbTree.";
+ return;
+ }
+
+ QMessageBox::StandardButton btn = QMessageBox::question(this, tr("Reset autoincrement"), tr("Are you sure you want to reset autoincrement value for table '%1'?")
+ .arg(table));
+ if (btn != QMessageBox::Yes)
+ return;
+
+ SqlQueryPtr res = db->exec("DELETE FROM sqlite_sequence WHERE name = ?;", {table});
+ if (res->isError())
+ notifyError(tr("An error occurred while trying to reset autoincrement value for table '%1': %2").arg(table, res->getErrorText()));
+ else
+ notifyInfo(tr("Autoincrement value for table '%1' has been reset successfly.").arg(table));
+}
+
void DbTree::addColumn(DbTreeItem* item)
{
Db* db = getSelectedOpenDb();
@@ -1500,7 +1529,7 @@ void DbTree::deleteItems(const QList<DbTreeItem*>& itemsToDelete)
if (deletedDatabases.contains(dbToRefresh))
continue;
- DBTREE->refreshSchema(dbToRefresh);
+ refreshSchema(dbToRefresh);
}
}
@@ -1508,6 +1537,8 @@ void DbTree::refreshSchemas()
{
foreach (Db* db, DBLIST->getDbList())
treeModel->refreshSchema(db);
+
+ updateActionsForCurrent();
}
void DbTree::interrupt()
diff --git a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.h b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.h
index b368c08..60b8dd5 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.h
+++ b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.h
@@ -83,6 +83,7 @@ class GUI_API_EXPORT DbTree : public QDockWidget, public ExtActionContainer
REFRESH_SCHEMAS,
REFRESH_SCHEMA,
CREATE_SIMILAR_TABLE,
+ RESET_AUTOINCREMENT,
_separator // Never use it directly, it's just for menu setup
};
@@ -107,6 +108,8 @@ class GUI_API_EXPORT DbTree : public QDockWidget, public ExtActionContainer
void setSelectedItem(DbTreeItem* item);
bool isMimeDataValidForItem(const QMimeData* mimeData, const DbTreeItem* item);
QToolBar* getToolBar(int toolbar) const;
+ Db* getSelectedDb();
+ Db* getSelectedOpenDb();
static bool isItemDraggable(const DbTreeItem* item);
@@ -116,8 +119,6 @@ class GUI_API_EXPORT DbTree : public QDockWidget, public ExtActionContainer
private:
void setActionEnabled(int action, bool enabled);
- Db* getSelectedDb();
- Db* getSelectedOpenDb();
TableWindow* openTable(DbTreeItem* item);
TableWindow* openTable(Db* db, const QString& database, const QString& table);
TableWindow* newTable(DbTreeItem* item);
@@ -147,6 +148,7 @@ class GUI_API_EXPORT DbTree : public QDockWidget, public ExtActionContainer
void refreshSchema(Db* db);
void refreshSchemas();
void interrupt();
+ void updateActionsForCurrent();
private slots:
void copy();
@@ -184,6 +186,7 @@ class GUI_API_EXPORT DbTree : public QDockWidget, public ExtActionContainer
void vacuumDb();
void integrityCheck();
void createSimilarTable();
+ void resetAutoincrement();
void addColumn(DbTreeItem* item);
void editColumn(DbTreeItem* item);
void delColumn(DbTreeItem* item);
@@ -191,7 +194,6 @@ class GUI_API_EXPORT DbTree : public QDockWidget, public ExtActionContainer
void deleteSelected();
void deleteItems(const QList<DbTreeItem*>& itemsToDelete);
void refreshSchema();
- void updateActionsForCurrent();
void dbConnected(Db* db);
void dbDisconnected(Db* db);
void updateDbIcon(Db* db);
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.cpp
index df790de..0d291e5 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.cpp
@@ -4,6 +4,9 @@
#include "sqlitestudio.h"
#include "iconmanager.h"
#include "services/extralicensemanager.h"
+#include "services/pluginmanager.h"
+#include "formmanager.h"
+#include "iconmanager.h"
#include <QDebug>
#include <QFile>
@@ -26,6 +29,7 @@ void AboutDialog::init(InitialMode initialMode)
ui->tabWidget->setCurrentWidget(initialMode == ABOUT ? ui->about : ui->license);
+ // About
QString distName;
switch (getDistributionType())
{
@@ -43,15 +47,23 @@ void AboutDialog::init(InitialMode initialMode)
QString newLabelValue = ui->aboutLabel->text().arg(SQLITESTUDIO->getVersionString(), distName);
ui->aboutLabel->setText(newLabelValue);
+ // Licenses
licenseContents = "";
int row = 1;
- QHash<QString,QString> licenses = SQLITESTUDIO->getExtraLicenseManager()->getLicenses();
+ QHash<QString,QString> licenses = SQLITESTUDIO->getExtraLicenseManager()->getLicensesContents();
+ QString violation;
+ QString title;
QHashIterator<QString,QString> it(licenses);
while (it.hasNext())
{
it.next();
- readLicense(row++, it.key(), it.value());
+ violation = QString();
+ title = it.key();
+ if (SQLITESTUDIO->getExtraLicenseManager()->isViolatedLicense(title))
+ violation = SQLITESTUDIO->getExtraLicenseManager()->getViolationMessage(title);
+
+ addLicense(row++, title, it.value(), violation);
}
buildIndex();
@@ -59,6 +71,18 @@ void AboutDialog::init(InitialMode initialMode)
ui->licenseEdit->setHtml(licenseContents);
indexContents.clear();
licenseContents.clear();
+
+ // Environment
+ copyAct = new QAction(tr("Copy"), this);
+ ui->appDirEdit->setText(qApp->applicationDirPath());
+ ui->cfgDirEdit->setText(CFG->getConfigDir());
+ ui->pluginDirList->addItems(filterResourcePaths(PLUGINS->getPluginDirs()));
+ ui->iconDirList->addItems(filterResourcePaths(ICONMANAGER->getIconDirs()));
+ ui->formDirList->addItems(filterResourcePaths(FORMS->getFormDirs()));
+ ui->qtVerEdit->setText(QT_VERSION_STR);
+ ui->pluginDirList->addAction(copyAct);
+ ui->iconDirList->addAction(copyAct);
+ ui->formDirList->addAction(copyAct);
}
void AboutDialog::buildIndex()
@@ -68,16 +92,19 @@ void AboutDialog::buildIndex()
for (const QString& idx : indexContents)
entries += entryTpl.arg(idx);
- licenseContents.prepend("<h3>Table of contents:</h3><ol>" + entries.join("") + "</ol>");
+ licenseContents.prepend(tr("<h3>Table of contents:</h3><ol>%2</ol>").arg(entries.join("")));
}
-void AboutDialog::readLicense(int row, const QString& title, const QString& path)
+void AboutDialog::addLicense(int row, const QString& title, const QString& contents, const QString& violation)
{
+ static_qstring(violatedTpl, "<span style=\"color: #FF0000;\">%1 (%2)</span>");
+
+ QString escapedTitle = title.toHtmlEscaped();
+ QString finalTitle = violation.isNull() ? escapedTitle : violatedTpl.arg(escapedTitle, violation);
QString rowNum = QString::number(row);
- QString contents = readFile(path);
- licenseContents += "<h3>" + rowNum + ". " + title + "</h3>";
- licenseContents += "<pre>" + contents + "</pre>";
- indexContents += title;
+ licenseContents += "<h3>" + rowNum + ". " + finalTitle + "</h3>";
+ licenseContents += "<pre>" + contents.toHtmlEscaped() + "</pre>";
+ indexContents += finalTitle;
}
QString AboutDialog::readFile(const QString& path)
@@ -92,3 +119,16 @@ QString AboutDialog::readFile(const QString& path)
file.close();
return contents;
}
+
+QStringList AboutDialog::filterResourcePaths(const QStringList& paths)
+{
+ QStringList output;
+ for (const QString& path : paths)
+ {
+ if (path.startsWith(":"))
+ continue;
+
+ output << path;
+ }
+ return output;
+}
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.h b/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.h
index 3c828c0..4d49145 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.h
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.h
@@ -26,12 +26,15 @@ class GUI_API_EXPORT AboutDialog : public QDialog
private:
void init(InitialMode initialMode);
void buildIndex();
- void readLicense(int row, const QString& title, const QString& path);
+ void addLicense(int row, const QString& title, const QString& contents, const QString& violation);
QString readFile(const QString& path);
+ static QStringList filterResourcePaths(const QStringList& paths);
+
Ui::AboutDialog *ui = nullptr;
QStringList indexContents;
QString licenseContents;
+ QAction* copyAct = nullptr;
};
#endif // ABOUTDIALOG_H
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.ui
index 67fa632..1239cf5 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.ui
@@ -17,7 +17,7 @@
<item row="0" column="1">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
- <number>1</number>
+ <number>2</number>
</property>
<widget class="QWidget" name="about">
<attribute name="title">
@@ -50,6 +50,97 @@
</item>
</layout>
</widget>
+ <widget class="QWidget" name="env">
+ <attribute name="title">
+ <string>Environment</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="3" column="0">
+ <widget class="QLabel" name="iconDirLabel">
+ <property name="text">
+ <string>Icon directories</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QListWidget" name="pluginDirList">
+ <property name="contextMenuPolicy">
+ <enum>Qt::ActionsContextMenu</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="formDirLabel">
+ <property name="text">
+ <string>Form directories</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QListWidget" name="iconDirList">
+ <property name="contextMenuPolicy">
+ <enum>Qt::ActionsContextMenu</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="pluginDirLabel">
+ <property name="text">
+ <string>Plugin directories</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="appDirLabel">
+ <property name="text">
+ <string>Application directory</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QLineEdit" name="appDirEdit">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="cfgDirLabel">
+ <property name="text">
+ <string>Configuration directory</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="2">
+ <widget class="QListWidget" name="formDirList">
+ <property name="contextMenuPolicy">
+ <enum>Qt::ActionsContextMenu</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QLineEdit" name="cfgDirEdit">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0">
+ <widget class="QLabel" name="qtVerLabel">
+ <property name="text">
+ <string>Qt version:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="2">
+ <widget class="QLabel" name="qtVerEdit">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
</widget>
</item>
<item row="0" column="0">
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp
index 7ab9c67..59a2ec6 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp
@@ -65,7 +65,6 @@ QString BugDialog::getMessageAboutReportHistory()
{
return tr("You can see all your reported bugs and ideas by selecting menu '%1' and then '%2'.").arg(MAINWINDOW->getSQLiteStudioMenu()->title())
.arg(MAINWINDOW->getAction(MainWindow::BUG_REPORT_HISTORY)->text());
- return "";
}
void BugDialog::finishedBugReport(bool success, const QString& errorMsg)
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.ui
index f2dbcf3..3871436 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string>Bugs and ideas</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -51,7 +51,7 @@
<item>
<widget class="QToolButton" name="helpButton">
<property name="text">
- <string>...</string>
+ <string notr="true">...</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugreportlogindialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugreportlogindialog.ui
index f6597bc..d1d26e6 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugreportlogindialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugreportlogindialog.ui
@@ -33,7 +33,7 @@
<item row="1" column="0">
<widget class="QLabel" name="passwordLabel">
<property name="text">
- <string>Password</string>
+ <string>Password:</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui
index ac7e5ae..2133aca 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui
@@ -36,7 +36,7 @@
<item row="1" column="3">
<widget class="QLabel" name="label">
<property name="text">
- <string>,</string>
+ <string notr="true">,</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp
index 932036e..b22ee6e 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp
@@ -21,6 +21,7 @@
#include "configmapper.h"
#include "datatype.h"
#include "uiutils.h"
+#include "translations.h"
#include <QSignalMapper>
#include <QLineEdit>
#include <QSpinBox>
@@ -186,6 +187,7 @@ void ConfigDialog::init()
initFormatterPlugins();
initDataEditors();
initShortcuts();
+ initLangs();
connect(ui->categoriesTree, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(switchPage(QTreeWidgetItem*)));
connect(ui->previewTabs, SIGNAL(currentChanged(int)), this, SLOT(updateStylePreview()));
@@ -959,6 +961,7 @@ void ConfigDialog::initInternalCustomConfigWidgets()
QList<CustomConfigWidgetPlugin*> customWidgets;
customWidgets << new StyleConfigWidget();
customWidgets << new ListToStringListHash(&CFG_UI.General.DataEditorsOrder);
+ customWidgets << new ComboDataWidget(&CFG_CORE.General.Language);
configMapper->setInternalCustomConfigWidgets(customWidgets);
}
@@ -1235,7 +1238,7 @@ void ConfigDialog::initPluginsPage()
builtIn = PLUGINS->isBuiltIn(pluginName);
title = PLUGINS->getTitle(pluginName);
if (builtIn)
- title += tr(" (built-in)", "plugins manager in configuration dialog");
+ 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);
@@ -1489,6 +1492,23 @@ void ConfigDialog::initShortcuts(CfgCategory *cfgCategory)
category->setExpanded(true);
}
+void ConfigDialog::initLangs()
+{
+ QMap<QString, QString> langs = getAvailableLanguages();
+ int idx = 0;
+ int selected = -1;
+ for (const QString& lang : langs.keys())
+ {
+ ui->langCombo->addItem(lang, langs[lang]);
+ if (langs[lang] == SQLITESTUDIO->getCurrentLang())
+ selected = idx;
+
+ idx++;
+ }
+
+ ui->langCombo->setCurrentIndex(selected);
+}
+
bool ConfigDialog::isPluginCategoryItem(QTreeWidgetItem *item) const
{
return item->parent() && item->parent()->parent() && item->parent()->parent() == getPluginsCategoryItem();
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.h b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.h
index 95e9f1a..5661c1a 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.h
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.h
@@ -56,6 +56,7 @@ class GUI_API_EXPORT ConfigDialog : public QDialog
void initDataEditors();
void initShortcuts();
void initShortcuts(CfgCategory* cfgCategory);
+ void initLangs();
void applyStyle(QWidget* widget, QStyle* style);
QTreeWidgetItem* getPluginsCategoryItem() const;
QTreeWidgetItem* getPluginsCategoryItem(PluginType* type) const;
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.ui
index 040600e..966ebca 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.ui
@@ -104,7 +104,7 @@
<string>General</string>
</property>
<property name="statusTip">
- <string>generalPage</string>
+ <string notr="true">generalPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -116,7 +116,7 @@
<string>Keyboard shortcuts</string>
</property>
<property name="statusTip">
- <string>shortcutsPage</string>
+ <string notr="true">shortcutsPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -128,7 +128,7 @@
<string>Look &amp; feel</string>
</property>
<property name="statusTip">
- <string>lookAndFeelPage</string>
+ <string notr="true">lookAndFeelPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -139,7 +139,7 @@
<string>Style</string>
</property>
<property name="statusTip">
- <string>stylePage</string>
+ <string notr="true">stylePage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -151,7 +151,7 @@
<string>Fonts</string>
</property>
<property name="statusTip">
- <string>fontsPage</string>
+ <string notr="true">fontsPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -163,7 +163,7 @@
<string>Colors</string>
</property>
<property name="statusTip">
- <string>colorsPage</string>
+ <string notr="true">colorsPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -176,7 +176,7 @@
<string>Plugins</string>
</property>
<property name="statusTip">
- <string>pluginsPage</string>
+ <string notr="true">pluginsPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -187,7 +187,7 @@
<string>Code formatters</string>
</property>
<property name="statusTip">
- <string>formatterPluginsPage</string>
+ <string notr="true">formatterPluginsPage</string>
</property>
</item>
</item>
@@ -196,7 +196,7 @@
<string>Data browsing</string>
</property>
<property name="statusTip">
- <string>dataBrowsingPage</string>
+ <string notr="true">dataBrowsingPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -207,7 +207,7 @@
<string>Data editors</string>
</property>
<property name="statusTip">
- <string>dataEditorsPage</string>
+ <string notr="true">dataEditorsPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -227,7 +227,7 @@
</sizepolicy>
</property>
<property name="currentIndex">
- <number>2</number>
+ <number>6</number>
</property>
<widget class="QWidget" name="dataBrowsingPage">
<layout class="QVBoxLayout" name="verticalLayout_21">
@@ -259,7 +259,7 @@
<number>99999</number>
</property>
<property name="cfg" stdset="0">
- <string>General.NumberOfRowsPerPage</string>
+ <string notr="true">General.NumberOfRowsPerPage</string>
</property>
</widget>
</item>
@@ -288,7 +288,7 @@
<number>600</number>
</property>
<property name="cfg" stdset="0">
- <string>General.MaxInitialColumnWith</string>
+ <string notr="true">General.MaxInitialColumnWith</string>
</property>
</widget>
</item>
@@ -334,7 +334,7 @@
<item>
<widget class="QListWidget" name="dataEditorsTypesList">
<property name="cfg" stdset="0">
- <string>General.DataEditorsOrder</string>
+ <string notr="true">General.DataEditorsOrder</string>
</property>
</widget>
</item>
@@ -433,7 +433,7 @@
<number>9999999</number>
</property>
<property name="cfg" stdset="0">
- <string>General.DdlHistorySize</string>
+ <string notr="true">General.DdlHistorySize</string>
</property>
</widget>
</item>
@@ -450,7 +450,7 @@
<string>Don't show DDL preview dialog when commiting schema changes</string>
</property>
<property name="cfg" stdset="0">
- <string>General.DontShowDdlPreview</string>
+ <string notr="true">General.DontShowDdlPreview</string>
</property>
</widget>
</item>
@@ -478,7 +478,7 @@
<number>999999</number>
</property>
<property name="cfg" stdset="0">
- <string>General.SqlHistorySize</string>
+ <string notr="true">General.SqlHistorySize</string>
</property>
</widget>
</item>
@@ -501,7 +501,7 @@
<string>Execute only the query under the cursor</string>
</property>
<property name="cfg" stdset="0">
- <string>General.ExecuteCurrentQueryOnly</string>
+ <string notr="true">General.ExecuteCurrentQueryOnly</string>
</property>
</widget>
</item>
@@ -520,7 +520,7 @@
<string>Automatically check for updates at startup</string>
</property>
<property name="cfg" stdset="0">
- <string>General.CheckUpdatesOnStartup</string>
+ <string notr="true">General.CheckUpdatesOnStartup</string>
</property>
</widget>
</item>
@@ -539,7 +539,7 @@
<string>Restore last session (active MDI windows) after startup</string>
</property>
<property name="cfg" stdset="0">
- <string>General.RestoreSession</string>
+ <string notr="true">General.RestoreSession</string>
</property>
</widget>
</item>
@@ -651,12 +651,35 @@
<number>0</number>
</property>
<item>
+ <widget class="QGroupBox" name="langGroup">
+ <property name="title">
+ <string>Language</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_30">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Changing language requires application restart to take effect.</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="langCombo">
+ <property name="cfg" stdset="0">
+ <string notr="true">General.Language</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<widget class="QGroupBox" name="dbListGroup">
<property name="title">
<string>Database list</string>
</property>
<layout class="QGridLayout" name="gridLayout">
- <item row="3" column="0">
+ <item row="4" column="0">
<widget class="QCheckBox" name="sortColumns">
<property name="toolTip">
<string>If switched off, then columns will be sorted in the order they are typed in CREATE TABLE statement.</string>
@@ -665,21 +688,21 @@
<string>Sort table columns alphabetically</string>
</property>
<property name="cfg" stdset="0">
- <string>General.SortColumns</string>
+ <string notr="true">General.SortColumns</string>
</property>
</widget>
</item>
- <item row="0" column="0">
+ <item row="1" column="0">
<widget class="QCheckBox" name="expandTablesCheck">
<property name="text">
<string>Expand tables node when connected to a database</string>
</property>
<property name="cfg" stdset="0">
- <string>General.ExpandTables</string>
+ <string notr="true">General.ExpandTables</string>
</property>
</widget>
</item>
- <item row="5" column="0">
+ <item row="6" column="0">
<widget class="QGroupBox" name="addLabelsGroup">
<property name="toolTip">
<string>&lt;p&gt;Additional labels are those displayed next to the names on the databases list (they are blue, unless configured otherwise). Enabling this option will result in labels for databases, invalid databases and aggregated nodes (column group, index group, trigger group). For more labels see options below.&lt;p&gt;</string>
@@ -694,7 +717,7 @@
<bool>false</bool>
</property>
<property name="cfg" stdset="0">
- <string>General.ShowDbTreeLabels</string>
+ <string notr="true">General.ShowDbTreeLabels</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_20">
<item>
@@ -706,7 +729,7 @@
<string>Display labels for regular tables</string>
</property>
<property name="cfg" stdset="0">
- <string>General.ShowRegularTableLabels</string>
+ <string notr="true">General.ShowRegularTableLabels</string>
</property>
</widget>
</item>
@@ -719,24 +742,24 @@
<string>Display labels for virtual tables</string>
</property>
<property name="cfg" stdset="0">
- <string>General.ShowVirtualTableLabels</string>
+ <string notr="true">General.ShowVirtualTableLabels</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
- <item row="1" column="0">
+ <item row="2" column="0">
<widget class="QCheckBox" name="expandViewsCheck">
<property name="text">
<string>Expand views node when connected to a database</string>
</property>
<property name="cfg" stdset="0">
- <string>General.ExpandViews</string>
+ <string notr="true">General.ExpandViews</string>
</property>
</widget>
</item>
- <item row="2" column="0">
+ <item row="3" column="0">
<widget class="QCheckBox" name="sortObjects">
<property name="toolTip">
<string>If this option is switched off, then objects will be sorted in order they appear in sqlite_master table (which is in order they were created)</string>
@@ -745,17 +768,17 @@
<string>Sort objects (tables, indexes, triggers and views) alphabetically</string>
</property>
<property name="cfg" stdset="0">
- <string>General.SortObjects</string>
+ <string notr="true">General.SortObjects</string>
</property>
</widget>
</item>
- <item row="4" column="0">
+ <item row="5" column="0">
<widget class="QCheckBox" name="dispSysTableCheck">
<property name="text">
<string>Display system tables and indexes on the list</string>
</property>
<property name="cfg" stdset="0">
- <string>General.ShowSystemObjects</string>
+ <string notr="true">General.ShowSystemObjects</string>
</property>
</widget>
</item>
@@ -777,7 +800,7 @@
<string>Open Table Windows with the data tab for start</string>
</property>
<property name="cfg" stdset="0">
- <string>General.OpenTablesOnData</string>
+ <string notr="true">General.OpenTablesOnData</string>
</property>
</widget>
</item>
@@ -799,7 +822,7 @@
<string>Open View Windows with the data tab for start</string>
</property>
<property name="cfg" stdset="0">
- <string>General.OpenViewsOnData</string>
+ <string notr="true">General.OpenViewsOnData</string>
</property>
</widget>
</item>
@@ -943,7 +966,7 @@
<item>
<widget class="QComboBox" name="activeStyleCombo">
<property name="cfg" stdset="0">
- <string>General.Style</string>
+ <string notr="true">General.Style</string>
</property>
</widget>
</item>
@@ -991,7 +1014,7 @@
<item row="1" column="6">
<widget class="QCheckBox" name="previewCheckBox">
<property name="text">
- <string>CheckBox</string>
+ <string notr="true">CheckBox</string>
</property>
</widget>
</item>
@@ -1015,7 +1038,7 @@
<item row="0" column="3" colspan="2">
<widget class="QPushButton" name="previewPushButton">
<property name="text">
- <string>PushButton</string>
+ <string notr="true">PushButton</string>
</property>
</widget>
</item>
@@ -1039,46 +1062,46 @@
<widget class="QTreeWidget" name="previewTreeWidget">
<column>
<property name="text">
- <string>Column</string>
+ <string notr="true">Column</string>
</property>
</column>
<item>
<property name="text">
- <string>123</string>
+ <string notr="true">123</string>
</property>
<item>
<property name="text">
- <string>11111</string>
+ <string notr="true">11111</string>
</property>
</item>
<item>
<property name="text">
- <string>22222</string>
+ <string notr="true">22222</string>
</property>
</item>
<item>
<property name="text">
- <string>33333</string>
+ <string notr="true">33333</string>
</property>
</item>
</item>
<item>
<property name="text">
- <string>456</string>
+ <string notr="true">456</string>
</property>
<item>
<property name="text">
- <string>44444</string>
+ <string notr="true">44444</string>
</property>
</item>
<item>
<property name="text">
- <string>55555</string>
+ <string notr="true">55555</string>
</property>
</item>
<item>
<property name="text">
- <string>66666</string>
+ <string notr="true">66666</string>
</property>
</item>
</item>
@@ -1087,7 +1110,7 @@
<item row="0" column="5">
<widget class="QToolButton" name="previewToolButton">
<property name="text">
- <string>...</string>
+ <string notr="true">...</string>
</property>
</widget>
</item>
@@ -1097,20 +1120,23 @@
<item row="0" column="6">
<widget class="QRadioButton" name="previewRadioButton">
<property name="text">
- <string>RadioButton</string>
+ <string notr="true">RadioButton</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QComboBox" name="previewComboBox">
+ <property name="currentText">
+ <string notr="true">ABC</string>
+ </property>
<item>
<property name="text">
- <string>ABC</string>
+ <string notr="true">ABC</string>
</property>
</item>
<item>
<property name="text">
- <string>XYZ</string>
+ <string notr="true">XYZ</string>
</property>
</item>
</widget>
@@ -1118,7 +1144,7 @@
<item row="3" column="3" colspan="5">
<widget class="QTextEdit" name="previewTextEdit">
<property name="html">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <string notr="true">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
@@ -1226,7 +1252,7 @@ p, li { white-space: pre-wrap; }
<item>
<widget class="FontEdit" name="sqlEditorFont" native="true">
<property name="cfg" stdset="0">
- <string>Fonts.SqlEditor</string>
+ <string notr="true">Fonts.SqlEditor</string>
</property>
</widget>
</item>
@@ -1242,7 +1268,7 @@ p, li { white-space: pre-wrap; }
<item>
<widget class="FontEdit" name="dbTreeFont" native="true">
<property name="cfg" stdset="0">
- <string>Fonts.DbTree</string>
+ <string notr="true">Fonts.DbTree</string>
</property>
</widget>
</item>
@@ -1258,7 +1284,7 @@ p, li { white-space: pre-wrap; }
<item>
<widget class="FontEdit" name="dbTreeLabelFont" native="true">
<property name="cfg" stdset="0">
- <string>Fonts.DbTreeLabel</string>
+ <string notr="true">Fonts.DbTreeLabel</string>
</property>
</widget>
</item>
@@ -1274,7 +1300,7 @@ p, li { white-space: pre-wrap; }
<item>
<widget class="FontEdit" name="dataViewFont" native="true">
<property name="cfg" stdset="0">
- <string>Fonts.DataView</string>
+ <string notr="true">Fonts.DataView</string>
</property>
</widget>
</item>
@@ -1290,7 +1316,7 @@ p, li { white-space: pre-wrap; }
<item>
<widget class="FontEdit" name="statusFieldfont" native="true">
<property name="cfg" stdset="0">
- <string>Fonts.StatusField</string>
+ <string notr="true">Fonts.StatusField</string>
</property>
</widget>
</item>
@@ -1374,7 +1400,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorKeywordFg</string>
+ <string notr="true">Colors.SqlEditorKeywordFg</string>
</property>
</widget>
</item>
@@ -1390,7 +1416,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorStringFg</string>
+ <string notr="true">Colors.SqlEditorStringFg</string>
</property>
</widget>
</item>
@@ -1406,7 +1432,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorCommentFg</string>
+ <string notr="true">Colors.SqlEditorCommentFg</string>
</property>
</widget>
</item>
@@ -1422,7 +1448,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorForeground</string>
+ <string notr="true">Colors.SqlEditorForeground</string>
</property>
</widget>
</item>
@@ -1438,7 +1464,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorCurrentLineBg</string>
+ <string notr="true">Colors.SqlEditorCurrentLineBg</string>
</property>
</widget>
</item>
@@ -1454,7 +1480,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorLineNumAreaBg</string>
+ <string notr="true">Colors.SqlEditorLineNumAreaBg</string>
</property>
</widget>
</item>
@@ -1480,7 +1506,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorParenthesisBg</string>
+ <string notr="true">Colors.SqlEditorParenthesisBg</string>
</property>
</widget>
</item>
@@ -1527,7 +1553,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorBlobFg</string>
+ <string notr="true">Colors.SqlEditorBlobFg</string>
</property>
</widget>
</item>
@@ -1564,7 +1590,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorNumberFg</string>
+ <string notr="true">Colors.SqlEditorNumberFg</string>
</property>
</widget>
</item>
@@ -1580,7 +1606,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorBindParamFg</string>
+ <string notr="true">Colors.SqlEditorBindParamFg</string>
</property>
</widget>
</item>
@@ -1606,7 +1632,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorValidObject</string>
+ <string notr="true">Colors.SqlEditorValidObject</string>
</property>
</widget>
</item>
@@ -1641,7 +1667,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.DataUncommited</string>
+ <string notr="true">Colors.DataUncommited</string>
</property>
</widget>
</item>
@@ -1667,7 +1693,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.DataUncommitedError</string>
+ <string notr="true">Colors.DataUncommitedError</string>
</property>
</widget>
</item>
@@ -1690,7 +1716,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.DataNullFg</string>
+ <string notr="true">Colors.DataNullFg</string>
</property>
</widget>
</item>
@@ -1713,7 +1739,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.DataDeletedBg</string>
+ <string notr="true">Colors.DataDeletedBg</string>
</property>
</widget>
</item>
@@ -1748,7 +1774,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.DbTreeLabelsFg</string>
+ <string notr="true">Colors.DbTreeLabelsFg</string>
</property>
</widget>
</item>
@@ -1780,7 +1806,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.StatusFieldInfoFg</string>
+ <string notr="true">Colors.StatusFieldInfoFg</string>
</property>
</widget>
</item>
@@ -1803,7 +1829,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.StatusFieldWarnFg</string>
+ <string notr="true">Colors.StatusFieldWarnFg</string>
</property>
</widget>
</item>
@@ -1826,7 +1852,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.StatusFieldErrorFg</string>
+ <string notr="true">Colors.StatusFieldErrorFg</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/constraintdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/constraintdialog.ui
index 7df34d8..addfb9f 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/constraintdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/constraintdialog.ui
@@ -17,7 +17,7 @@
</size>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string notr="true">Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.cpp
index c94546e..8af131e 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.cpp
@@ -45,7 +45,6 @@ void DbConverterDialog::init()
{
ui->setupUi(this);
limitDialogWidth(this);
- setWindowTitle(tr("Convert database"));
widgetCover = new WidgetCover(this);
widgetCover->setVisible(false);
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.ui
index d328e99..f6bf009 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string>Convert database</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/errorsconfirmdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/errorsconfirmdialog.ui
index 81cdb17..615a6fd 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/errorsconfirmdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/errorsconfirmdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string>Errors</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.ui
index 9f84232..333d887 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Export dialog</string>
+ <string>Export</string>
</property>
<property name="options">
<set>QWizard::CancelButtonOnLeft|QWizard::NoDefaultButton</set>
@@ -111,7 +111,7 @@
<item row="1" column="1">
<widget class="QLabel" name="exportTableSeparatorLabel">
<property name="text">
- <string>.</string>
+ <string notr="true">.</string>
</property>
</widget>
</item>
@@ -289,8 +289,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>298</width>
- <height>288</height>
+ <width>483</width>
+ <height>318</height>
</rect>
</property>
<property name="styleSheet">
@@ -347,7 +347,7 @@
<item row="0" column="2">
<widget class="QToolButton" name="exportFileButton">
<property name="text">
- <string>...</string>
+ <string notr="true">...</string>
</property>
</widget>
</item>
@@ -422,16 +422,16 @@
</widget>
<customwidgets>
<customwidget>
+ <class>SqlEditor</class>
+ <extends>QPlainTextEdit</extends>
+ <header>sqleditor.h</header>
+ </customwidget>
+ <customwidget>
<class>VerifiableWizardPage</class>
<extends>QWizardPage</extends>
<header>common/verifiablewizardpage.h</header>
<container>1</container>
</customwidget>
- <customwidget>
- <class>SqlEditor</class>
- <extends>QPlainTextEdit</extends>
- <header>sqleditor.h</header>
- </customwidget>
</customwidgets>
<resources/>
<connections/>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui
index b853ab8..c8756f7 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui
@@ -47,7 +47,7 @@
<item row="1" column="2">
<widget class="QLabel" name="tableSeparatorLabel">
<property name="text">
- <string>.</string>
+ <string notr="true">.</string>
</property>
</widget>
</item>
@@ -103,8 +103,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>269</width>
- <height>280</height>
+ <width>479</width>
+ <height>310</height>
</rect>
</property>
<property name="styleSheet">
@@ -169,7 +169,7 @@
<item>
<widget class="QToolButton" name="inputFileButton">
<property name="text">
- <string>...</string>
+ <string notr="true">...</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.ui
index e231550..4e2cbac 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.ui
@@ -17,7 +17,7 @@
</size>
</property>
<property name="windowTitle">
- <string>Index dialog</string>
+ <string>Index</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.cpp
new file mode 100644
index 0000000..38f6fe0
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.cpp
@@ -0,0 +1,34 @@
+#include "languagedialog.h"
+#include "ui_languagedialog.h"
+
+LanguageDialog::LanguageDialog(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::LanguageDialog)
+{
+ ui->setupUi(this);
+}
+
+LanguageDialog::~LanguageDialog()
+{
+ delete ui;
+}
+
+void LanguageDialog::setLanguages(const QMap<QString, QString>& langs)
+{
+ for (const QString& langName : langs.keys())
+ ui->comboBox->addItem(langName, langs[langName]);
+}
+
+QString LanguageDialog::getSelectedLang() const
+{
+ return ui->comboBox->currentData().toString();
+}
+
+void LanguageDialog::setSelectedLang(const QString& lang)
+{
+ int idx = ui->comboBox->findData(lang);
+ if (idx < 0)
+ idx = 0;
+
+ ui->comboBox->setCurrentIndex(idx);
+}
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.h b/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.h
new file mode 100644
index 0000000..7fc0607
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.h
@@ -0,0 +1,27 @@
+#ifndef LANGUAGEDIALOG_H
+#define LANGUAGEDIALOG_H
+
+#include <QMap>
+#include <QDialog>
+
+namespace Ui {
+ class LanguageDialog;
+}
+
+class LanguageDialog : public QDialog
+{
+ Q_OBJECT
+
+ public:
+ explicit LanguageDialog(QWidget *parent = 0);
+ ~LanguageDialog();
+
+ void setLanguages(const QMap<QString, QString>& langs);
+ QString getSelectedLang() const;
+ void setSelectedLang(const QString& lang);
+
+ private:
+ Ui::LanguageDialog *ui;
+};
+
+#endif // LANGUAGEDIALOG_H
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.ui
new file mode 100644
index 0000000..afd118e
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.ui
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>LanguageDialog</class>
+ <widget class="QDialog" name="LanguageDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>374</width>
+ <height>81</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Language</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Please choose language:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QComboBox" name="comboBox"/>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>LanguageDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>LanguageDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/messagelistdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/messagelistdialog.ui
index 10ee6b8..010c866 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/messagelistdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/messagelistdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string notr="true">Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/searchtextdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/searchtextdialog.ui
index ce9e12e..30113af 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/searchtextdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/searchtextdialog.ui
@@ -7,11 +7,11 @@
<x>0</x>
<y>0</y>
<width>403</width>
- <height>184</height>
+ <height>195</height>
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string>Find or replace</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/triggercolumnsdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/triggercolumnsdialog.ui
index 4326fca..861e17b 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/triggercolumnsdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/triggercolumnsdialog.ui
@@ -11,10 +11,19 @@
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string>Trigger columns</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -52,12 +61,21 @@
<rect>
<x>0</x>
<y>0</y>
- <width>320</width>
- <height>239</height>
+ <width>316</width>
+ <height>237</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
</layout>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.ui
index bf3da0a..723f903 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Trigger dialog</string>
+ <string>Trigger</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -87,7 +87,7 @@
<string>List of columns for UPDATE OF action.</string>
</property>
<property name="text">
- <string>...</string>
+ <string notr="true">...</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/formmanager.cpp b/SQLiteStudio3/guiSQLiteStudio/formmanager.cpp
index 9df36d0..0ee7d43 100644
--- a/SQLiteStudio3/guiSQLiteStudio/formmanager.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/formmanager.cpp
@@ -46,6 +46,11 @@ QStringList FormManager::getAvailableForms() const
return widgetNameToFullPath.keys();
}
+QStringList FormManager::getFormDirs() const
+{
+ return formDirs;
+}
+
QWidget* FormManager::createWidgetByFullPath(const QString& path)
{
QWidget* widget = uiLoader->load(path);
@@ -104,22 +109,21 @@ void FormManager::init()
void FormManager::load()
{
- QStringList dirs;
- dirs += qApp->applicationDirPath() + "/forms";
- dirs += ":/forms";
- dirs += QDir(CFG->getConfigDir()).absoluteFilePath("forms");
+ formDirs += qApp->applicationDirPath() + "/forms";
+ formDirs += ":/forms";
+ formDirs += QDir(CFG->getConfigDir()).absoluteFilePath("forms");
QString envDirs = SQLITESTUDIO->getEnv("SQLITESTUDIO_FORMS");
if (!envDirs.isNull())
- dirs += envDirs.split(PATH_LIST_SEPARATOR);
+ formDirs += envDirs.split(PATH_LIST_SEPARATOR);
- dirs += PLUGINS->getPluginDirs();
+ formDirs += PLUGINS->getPluginDirs();
#ifdef FORMS_DIR
- dirs += STRINGIFY(FORMS_DIR);
+ formDirs += STRINGIFY(FORMS_DIR);
#endif
- foreach (QString dirPath, dirs)
+ foreach (QString dirPath, formDirs)
loadRecurently(dirPath, "");
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/formmanager.h b/SQLiteStudio3/guiSQLiteStudio/formmanager.h
index 41f98ce..fbffd7e 100644
--- a/SQLiteStudio3/guiSQLiteStudio/formmanager.h
+++ b/SQLiteStudio3/guiSQLiteStudio/formmanager.h
@@ -19,6 +19,7 @@ class GUI_API_EXPORT FormManager : public QObject
QWidget* createWidget(const QString& name);
bool hasWidget(const QString& name);
QStringList getAvailableForms() const;
+ QStringList getFormDirs() const;
private:
void init();
@@ -30,6 +31,7 @@ class GUI_API_EXPORT FormManager : public QObject
UiLoader* uiLoader = nullptr;
QHash<QString,QString> widgetNameToFullPath;
QStringList resourceForms;
+ QStringList formDirs;
private slots:
void rescanResources(Plugin* plugin, PluginType* pluginType);
diff --git a/SQLiteStudio3/guiSQLiteStudio/forms/sqlformatterplugin.ui b/SQLiteStudio3/guiSQLiteStudio/forms/sqlformatterplugin.ui
index 67f1bd6..87e13fd 100644
--- a/SQLiteStudio3/guiSQLiteStudio/forms/sqlformatterplugin.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/forms/sqlformatterplugin.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro
index 2195415..93796ea 100644
--- a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro
+++ b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro
@@ -27,6 +27,8 @@ QMAKE_CXXFLAGS += -pedantic
DEFINES += GUISQLITESTUDIO_LIBRARY
+TRANSLATIONS += translations/guiSQLiteStudio_pl.ts
+
SOURCES +=\
mainwindow.cpp \
iconmanager.cpp \
@@ -164,7 +166,8 @@ SOURCES +=\
windows/bugreporthistorywindow.cpp \
dialogs/newversiondialog.cpp \
dialogs/quitconfirmdialog.cpp \
- common/datawidgetmapper.cpp
+ common/datawidgetmapper.cpp \
+ dialogs/languagedialog.cpp
HEADERS += mainwindow.h \
iconmanager.h \
@@ -307,7 +310,8 @@ HEADERS += mainwindow.h \
dialogs/newversiondialog.h \
guiSQLiteStudio_global.h \
dialogs/quitconfirmdialog.h \
- common/datawidgetmapper.h
+ common/datawidgetmapper.h \
+ dialogs/languagedialog.h
FORMS += mainwindow.ui \
dbtree/dbtree.ui \
@@ -354,10 +358,12 @@ FORMS += mainwindow.ui \
dialogs/bugreportlogindialog.ui \
windows/bugreporthistorywindow.ui \
dialogs/newversiondialog.ui \
- dialogs/quitconfirmdialog.ui
+ dialogs/quitconfirmdialog.ui \
+ dialogs/languagedialog.ui
RESOURCES += \
- icons.qrc
+ icons.qrc \
+ guiSQLiteStudio.qrc
OTHER_FILES +=
diff --git a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.qrc b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.qrc
new file mode 100644
index 0000000..31e0f16
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/msg">
+ <file>translations/guiSQLiteStudio_pl.qm</file>
+ </qresource>
+</RCC>
diff --git a/SQLiteStudio3/guiSQLiteStudio/iconmanager.cpp b/SQLiteStudio3/guiSQLiteStudio/iconmanager.cpp
index efe22a1..63dde26 100644
--- a/SQLiteStudio3/guiSQLiteStudio/iconmanager.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/iconmanager.cpp
@@ -62,6 +62,11 @@ void IconManager::init()
connect(PLUGINS, SIGNAL(pluginsInitiallyLoaded()), this, SLOT(pluginsInitiallyLoaded()));
}
+QStringList IconManager::getIconDirs() const
+{
+ return iconDirs;
+}
+
void IconManager::rescanResources(const QString& pluginName)
{
if (!pluginName.isNull() && PLUGINS->isBuiltIn(pluginName))
diff --git a/SQLiteStudio3/guiSQLiteStudio/iconmanager.h b/SQLiteStudio3/guiSQLiteStudio/iconmanager.h
index 8cb7dbe..8a30d99 100644
--- a/SQLiteStudio3/guiSQLiteStudio/iconmanager.h
+++ b/SQLiteStudio3/guiSQLiteStudio/iconmanager.h
@@ -153,6 +153,7 @@ class GUI_API_EXPORT IconManager : public QObject
DEF_ICON(RELOAD, "reload")
DEF_ICON(RENAME_FN_ARG, "rename_fn_arg")
DEF_ICO3(RENAME_DATATYPE, RENAME_FN_ARG)
+ DEF_ICON(RESET_AUTOINCREMENT, "reset_autoincrement")
DEF_ICON(RESULTS_BELOW, "results_below")
DEF_ICON(RESULTS_IN_TAB, "results_in_tab")
DEF_ICON(ROLLBACK, "rollback")
@@ -244,6 +245,7 @@ class GUI_API_EXPORT IconManager : public QObject
QMovie* getMovie(const QString& name);
QIcon* getIcon(const QString& name);
void init();
+ QStringList getIconDirs() const;
private:
IconManager();
diff --git a/SQLiteStudio3/guiSQLiteStudio/icons.qrc b/SQLiteStudio3/guiSQLiteStudio/icons.qrc
index f923fe9..d89afa9 100644
--- a/SQLiteStudio3/guiSQLiteStudio/icons.qrc
+++ b/SQLiteStudio3/guiSQLiteStudio/icons.qrc
@@ -190,5 +190,6 @@
<file>img/abort24.png</file>
<file>img/close.png</file>
<file>img/go_back.png</file>
+ <file>img/reset_autoincrement.png</file>
</qresource>
</RCC>
diff --git a/SQLiteStudio3/guiSQLiteStudio/img/reset_autoincrement.png b/SQLiteStudio3/guiSQLiteStudio/img/reset_autoincrement.png
new file mode 100644
index 0000000..d39f06d
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/img/reset_autoincrement.png
Binary files differ
diff --git a/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp
index 7dbde8c..bc492df 100644
--- a/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp
@@ -147,6 +147,8 @@ void MainWindow::init()
widgetCover->getContainerLayout()->addWidget(updatingSubBar, 2, 0);
connect(UPDATES, SIGNAL(updatingProgress(QString,int,int)), this, SLOT(handleUpdatingProgress(QString,int,int)));
connect(UPDATES, SIGNAL(updatingError(QString)), this, SLOT(handleUpdatingError()));
+
+ connect(CFG_CORE.General.Language, SIGNAL(changed(QVariant)), this, SLOT(notifyAboutLanguageChange()));
}
void MainWindow::cleanUp()
@@ -195,6 +197,11 @@ void MainWindow::updateWindowActions()
actionMap[RESTORE_WINDOW]->setEnabled(hasClosedWindowToRestore());
}
+void MainWindow::notifyAboutLanguageChange()
+{
+ notifyInfo(tr("You need to restart application to make the language change take effect."));
+}
+
MdiArea *MainWindow::getMdiArea() const
{
return dynamic_cast<MdiArea*>(ui->mdiArea);
diff --git a/SQLiteStudio3/guiSQLiteStudio/mainwindow.h b/SQLiteStudio3/guiSQLiteStudio/mainwindow.h
index df12621..4e9f5c0 100644
--- a/SQLiteStudio3/guiSQLiteStudio/mainwindow.h
+++ b/SQLiteStudio3/guiSQLiteStudio/mainwindow.h
@@ -170,6 +170,7 @@ class GUI_API_EXPORT MainWindow : public QMainWindow, public ExtActionContainer
void updateWindowActions();
private slots:
+ void notifyAboutLanguageChange();
void cleanUp();
void openSqlEditorSlot();
void refreshMdiWindows();
diff --git a/SQLiteStudio3/guiSQLiteStudio/mainwindow.ui b/SQLiteStudio3/guiSQLiteStudio/mainwindow.ui
index 0ae72c8..1dbf462 100644
--- a/SQLiteStudio3/guiSQLiteStudio/mainwindow.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/mainwindow.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>SQLiteStudio (?.?.?)</string>
+ <string notr="true">SQLiteStudio (?.?.?)</string>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
@@ -57,7 +57,7 @@
<x>0</x>
<y>0</y>
<width>964</width>
- <height>22</height>
+ <height>19</height>
</rect>
</property>
</widget>
@@ -95,6 +95,9 @@
</attribute>
</widget>
<widget class="TaskBar" name="taskBar">
+ <property name="mouseTracking">
+ <bool>true</bool>
+ </property>
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.h b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.h
index b6f6d7c..d51150b 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.h
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.h
@@ -5,6 +5,8 @@
class GUI_API_EXPORT MultiEditorDate : public MultiEditorDateTime
{
+ Q_OBJECT
+
public:
explicit MultiEditorDate(QWidget *parent = 0);
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp
index 198f71b..526f5c4 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp
@@ -2,6 +2,7 @@
#include "common/numericspinbox.h"
#include <QVariant>
#include <QVBoxLayout>
+#include <QDebug>
MultiEditorNumeric::MultiEditorNumeric(QWidget* parent)
: MultiEditorWidget(parent)
@@ -32,7 +33,7 @@ void MultiEditorNumeric::setReadOnly(bool value)
QString MultiEditorNumeric::getTabLabel()
{
- return tr("Number");
+ return tr("Number", "numeric multi editor tab name");
}
void MultiEditorNumeric::focusThisWidget()
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.h b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.h
index 65d0409..c74d27a 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.h
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.h
@@ -9,6 +9,8 @@ class NumericSpinBox;
class GUI_API_EXPORT MultiEditorNumeric : public MultiEditorWidget
{
+ Q_OBJECT
+
public:
explicit MultiEditorNumeric(QWidget *parent = 0);
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.h b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.h
index 56bf60e..1fb05f3 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.h
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.h
@@ -6,6 +6,8 @@
class GUI_API_EXPORT MultiEditorTime : public MultiEditorDateTime
{
+ Q_OBJECT
+
public:
explicit MultiEditorTime(QWidget *parent = 0);
diff --git a/SQLiteStudio3/guiSQLiteStudio/sqlcompareview.cpp b/SQLiteStudio3/guiSQLiteStudio/sqlcompareview.cpp
index 0b5b91d..057ed1f 100644
--- a/SQLiteStudio3/guiSQLiteStudio/sqlcompareview.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/sqlcompareview.cpp
@@ -107,7 +107,6 @@ void SqlCompareView::setupHighlighting(const QString& left, const QString& right
{
QList<Diff> diffs = diff->diff_main(left, right);
int leftPos = 0;
- int rightPos = 0;
int lgt = 0;
for (const Diff& d : diffs)
{
@@ -120,11 +119,9 @@ void SqlCompareView::setupHighlighting(const QString& left, const QString& right
break;
case EQUAL:
leftPos += lgt;
- rightPos += lgt;
break;
case INSERT:
rightView->setTextBackgroundColor(leftPos, leftPos + lgt - 1, Qt::green);
- rightPos += lgt;
break;
}
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/sqleditor.cpp b/SQLiteStudio3/guiSQLiteStudio/sqleditor.cpp
index 52e1676..edafce5 100644
--- a/SQLiteStudio3/guiSQLiteStudio/sqleditor.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/sqleditor.cpp
@@ -28,6 +28,7 @@
#include <QTextBlock>
#include <QScrollBar>
#include <QFileDialog>
+#include <QtConcurrent/QtConcurrent>
CFG_KEYS_DEFINE(SqlEditor)
@@ -184,6 +185,7 @@ Db* SqlEditor::getDb() const
void SqlEditor::setDb(Db* value)
{
db = value;
+ refreshValidObjects();
scheduleQueryParser(true);
}
@@ -194,34 +196,41 @@ void SqlEditor::setAutoCompletion(bool enabled)
void SqlEditor::customContextMenuRequested(const QPoint &pos)
{
- if (objectLinksEnabled)
- {
- const DbObject* obj = getValidObjectForPosition(pos);
- QString objName = toPlainText().mid(obj->from, (obj->to - obj->from + 1));
+ if (objectLinksEnabled && handleValidObjectContextMenu(pos))
+ return;
- validObjContextMenu->clear();
+ contextMenu->popup(mapToGlobal(pos));
+}
- DbTreeItem* item = nullptr;
- for (DbTreeItem::Type type : {DbTreeItem::Type::TABLE, DbTreeItem::Type::INDEX, DbTreeItem::Type::TRIGGER, DbTreeItem::Type::VIEW})
- {
- item = DBTREE->getModel()->findItem(type, objName);
- if (item)
- break;
- }
+bool SqlEditor::handleValidObjectContextMenu(const QPoint& pos)
+{
+ const DbObject* obj = getValidObjectForPosition(pos);
+ if (!obj)
+ return false;
- if (item)
- {
- DBTREE->setSelectedItem(item);
- DBTREE->setupActionsForMenu(item, validObjContextMenu);
- if (validObjContextMenu->actions().size() == 0)
- return;
+ QString objName = toPlainText().mid(obj->from, (obj->to - obj->from + 1));
- DBTREE->updateActionStates(item);
- validObjContextMenu->popup(mapToGlobal(pos));
- }
- return;
+ validObjContextMenu->clear();
+
+ DbTreeItem* item = nullptr;
+ for (DbTreeItem::Type type : {DbTreeItem::Type::TABLE, DbTreeItem::Type::INDEX, DbTreeItem::Type::TRIGGER, DbTreeItem::Type::VIEW})
+ {
+ item = DBTREE->getModel()->findItem(type, objName);
+ if (item)
+ break;
}
- contextMenu->popup(mapToGlobal(pos));
+
+ if (!item)
+ return false;
+
+ DBTREE->setSelectedItem(item);
+ DBTREE->setupActionsForMenu(item, validObjContextMenu);
+ if (validObjContextMenu->actions().size() == 0)
+ return false;
+
+ DBTREE->updateActionStates(item);
+ validObjContextMenu->popup(mapToGlobal(pos));
+ return true;
}
void SqlEditor::updateUndoAction(bool enabled)
@@ -487,17 +496,21 @@ void SqlEditor::refreshValidObjects()
if (!db || !db->isValid())
return;
- objectsInNamedDb.clear();
-
- SchemaResolver resolver(db);
- QSet<QString> databases = resolver.getDatabases();
- databases << "main";
- QStringList objects;
- foreach (const QString& dbName, databases)
+ QtConcurrent::run([this]()
{
- objects = resolver.getAllObjects();
- objectsInNamedDb[dbName] << objects;
- }
+ QMutexLocker lock(&objectsInNamedDbMutex);
+ objectsInNamedDb.clear();
+
+ SchemaResolver resolver(db);
+ QSet<QString> databases = resolver.getDatabases();
+ databases << "main";
+ QStringList objects;
+ foreach (const QString& dbName, databases)
+ {
+ objects = resolver.getAllObjects();
+ objectsInNamedDb[dbName] << objects;
+ }
+ });
}
Dialect SqlEditor::getDialect()
@@ -707,10 +720,7 @@ void SqlEditor::indentNewLine()
void SqlEditor::showSearchDialog()
{
if (!searchDialog)
- {
searchDialog = new SearchTextDialog(textLocator, this);
- searchDialog->setWindowTitle(tr("Find or replace", "sql editor find/replace dialog"));
- }
if (searchDialog->isVisible())
searchDialog->hide();
@@ -855,6 +865,7 @@ void SqlEditor::checkForValidObjects()
if (!db || !db->isValid())
return;
+ QMutexLocker lock(&objectsInNamedDbMutex);
Dialect dialect = db->getDialect();
QList<SqliteStatement::FullObject> fullObjects;
QString dbName;
@@ -1022,7 +1033,7 @@ void SqlEditor::saveToFile()
QFile file(fName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
- notifyError(tr("Could not open file '%1'' for writing: %2").arg(fName).arg(file.errorString()));
+ notifyError(tr("Could not open file '%1' for writing: %2").arg(fName).arg(file.errorString()));
return;
}
@@ -1046,7 +1057,7 @@ void SqlEditor::loadFromFile()
QFile file(fName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
- notifyError(tr("Could not open file '%1'' for reading: %2").arg(fName).arg(file.errorString()));
+ notifyError(tr("Could not open file '%1' for reading: %2").arg(fName).arg(file.errorString()));
return;
}
@@ -1393,6 +1404,7 @@ void SqlEditor::handleValidObjectCursor(const QPoint& point)
}
viewport()->setCursor(isValid ? Qt::PointingHandCursor : Qt::IBeamCursor);
}
+
bool SqlEditor::getVirtualSqlCompleteSemicolon() const
{
return virtualSqlCompleteSemicolon;
diff --git a/SQLiteStudio3/guiSQLiteStudio/sqleditor.h b/SQLiteStudio3/guiSQLiteStudio/sqleditor.h
index d525e20..43be251 100644
--- a/SQLiteStudio3/guiSQLiteStudio/sqleditor.h
+++ b/SQLiteStudio3/guiSQLiteStudio/sqleditor.h
@@ -9,6 +9,7 @@
#include <QTextEdit>
#include <QFont>
#include <QHash>
+#include <QMutex>
class CompleterWindow;
class QTimer;
@@ -185,6 +186,7 @@ class GUI_API_EXPORT SqlEditor : public QPlainTextEdit, public ExtActionContaine
const DbObject* getValidObjectForPosition(int position, bool movedLeft);
const DbObject* getValidObjectForPosition(const QPoint& point);
void handleValidObjectCursor(const QPoint& point);
+ bool handleValidObjectContextMenu(const QPoint& pos);
SqliteSyntaxHighlighter* highlighter = nullptr;
QMenu* contextMenu = nullptr;
@@ -197,6 +199,7 @@ class GUI_API_EXPORT SqlEditor : public QPlainTextEdit, public ExtActionContaine
QTimer* queryParserTimer = nullptr;
Parser* queryParser = nullptr;
QHash<QString,QStringList> objectsInNamedDb;
+ QMutex objectsInNamedDbMutex;
bool objectLinksEnabled = false;
QList<DbObject> validDbObjects;
QWidget* lineNumberArea = nullptr;
diff --git a/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp b/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp
index ba797f6..359dc29 100644
--- a/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp
@@ -10,7 +10,6 @@
#include <QStyle>
#include <QRubberBand>
#include <QApplication>
-#include <QDebug>
#include <QMenu>
TaskBar::TaskBar(const QString& title, QWidget *parent) :
@@ -179,6 +178,7 @@ bool TaskBar::handleMouseMoveEvent(QMouseEvent* event)
drag->setMimeData(generateMimeData());
dragStartIndex = tasks.indexOf(dragStartTask);
+ drag->start(Qt::MoveAction);
return true;
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/taskbar.h b/SQLiteStudio3/guiSQLiteStudio/taskbar.h
index 2cf6d56..652b3f6 100644
--- a/SQLiteStudio3/guiSQLiteStudio/taskbar.h
+++ b/SQLiteStudio3/guiSQLiteStudio/taskbar.h
@@ -39,7 +39,6 @@ class GUI_API_EXPORT TaskBar : public QToolBar
QAction* getNextClosestAction(const QPoint& position);
void dragTaskTo(QAction* task, const QPoint& position);
void dragTaskTo(QAction* task, int positionIndex);
- QAction* getDragTask(const QMimeData* data);
QMimeData* generateMimeData();
int getActiveTaskIdx();
diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.qm b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.qm
new file mode 100644
index 0000000..61124ad
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.qm
Binary files differ
diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.ts b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.ts
new file mode 100644
index 0000000..ca582d3
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.ts
@@ -0,0 +1,5980 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>AboutDialog</name>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="14"/>
+ <source>About SQLiteStudio and licenses</source>
+ <translation>O SQLiteStudio i licencje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="24"/>
+ <source>About</source>
+ <translation>O programie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="30"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;SQLiteStudio v%1&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Free, open-source, cross-platform SQLite database manager.&lt;br/&gt;&lt;a href=&quot;http://sqlitestudio.pl&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://sqlitestudio.pl&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;%2&lt;br/&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Author and active maintainer:&lt;br/&gt;SalSoft (&lt;a href=&quot;http://salsoft.com.pl&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://salsoft.com.pl&lt;/span&gt;&lt;/a&gt;)&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;SQLiteStudio v%1&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Darmowy, otwartoźródłowy, wieloplatformowy menadżer baz danych SQLite.&lt;br/&gt;&lt;a href=&quot;http://sqlitestudio.pl&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://sqlitestudio.pl&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;%2&lt;br/&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Autor i aktywny opiekun:&lt;br/&gt;SalSoft (&lt;a href=&quot;http://salsoft.com.pl&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://salsoft.com.pl&lt;/span&gt;&lt;/a&gt;)&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="41"/>
+ <source>Licenses</source>
+ <translation>Licencje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="55"/>
+ <source>Environment</source>
+ <translation>Środowisko</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="61"/>
+ <source>Icon directories</source>
+ <translation>Katalogi ikon</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="75"/>
+ <source>Form directories</source>
+ <translation>Katalogi formularzy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="89"/>
+ <source>Plugin directories</source>
+ <translation>Katalogi wtyczek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="96"/>
+ <source>Application directory</source>
+ <translation>Katalog aplikacji</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="110"/>
+ <source>Configuration directory</source>
+ <translation>Katalog konfiguracji</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="131"/>
+ <source>Qt version:</source>
+ <translation>Wersja Qt:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.cpp" line="37"/>
+ <source>Portable distribution.</source>
+ <translation>Dystrybucja przenośna.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.cpp" line="40"/>
+ <source>MacOS X application boundle distribution.</source>
+ <translation>Dytrybucja aplikacji MacOS X.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.cpp" line="43"/>
+ <source>Operating system managed distribution.</source>
+ <translation>Dystrybucja zarządzana przez system operacyjny.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.cpp" line="76"/>
+ <source>Copy</source>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.cpp" line="95"/>
+ <source>&lt;h3&gt;Table of contents:&lt;/h3&gt;&lt;ol&gt;%2&lt;/ol&gt;</source>
+ <translation>&lt;h3&gt;Zawartość:&lt;/h3&gt;&lt;ol&gt;%2&lt;/ol&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>BugDialog</name>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="14"/>
+ <source>Bugs and ideas</source>
+ <translation>Błędy i pomysły</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="20"/>
+ <source>Reporter</source>
+ <translation>Zgłaszający</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="36"/>
+ <source>E-mail address</source>
+ <translation>Adres e-mail</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="43"/>
+ <location filename="../dialogs/bugdialog.cpp" line="121"/>
+ <source>Log in</source>
+ <translation>Zaloguj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="68"/>
+ <source>Short description</source>
+ <translation>Krótki opis</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="80"/>
+ <source>Detailed description</source>
+ <translation>Opis szczegółowy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="92"/>
+ <source>Show more details</source>
+ <translation>Pokaż więcej szczegółów</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="119"/>
+ <source>SQLiteStudio version</source>
+ <translation>Wersja SQLiteStudio</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="131"/>
+ <source>Operating system</source>
+ <translation>System operacyjny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="143"/>
+ <source>Loaded plugins</source>
+ <translation>Załadowane wtyczki</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="39"/>
+ <source>Send</source>
+ <translation>Wyślij</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="66"/>
+ <source>You can see all your reported bugs and ideas by selecting menu &apos;%1&apos; and then &apos;%2&apos;.</source>
+ <translation>Możesz zobaczyć wszystkie błędy i pomysły zgłoszone przez ciebie wybierając menu &apos;%1&apos; i dalej &apos;%2&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="74"/>
+ <source>A bug report sent successfully.</source>
+ <translation>Błąd został zgłoszony pomyślnie.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="79"/>
+ <source>An error occurred while sending a bug report: %1
+%2</source>
+ <translation>Wystąpił błąd podczas zgłaszania błędu: %1
+%2</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="80"/>
+ <location filename="../dialogs/bugdialog.cpp" line="94"/>
+ <source>You can retry sending. The contents will be restored when you open a report dialog after an error like this.</source>
+ <translation>Możesz spróbować powtórzyć wysyłkę. Zawartość będzie przywrócona, kiedy otworzysz okno zgłaszania po błędzie takim jak ten.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="88"/>
+ <source>An idea proposal sent successfully.</source>
+ <translation>Pomysł został zgłoszony pomyślnie.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="93"/>
+ <source>An error occurred while sending an idea proposal: %1
+%2</source>
+ <translation>Wystąpił błąd podczas zgłaszania pomysłu: %1
+%2</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="105"/>
+ <source>A bug report</source>
+ <translation>Zgłoś błąd</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="106"/>
+ <source>Describe problem in few words</source>
+ <translation>Opisz problem w kilku słowach</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="107"/>
+ <source>Describe problem and how to reproduce it</source>
+ <translation>Opisz problem, oraz jak go powtórzyć</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="111"/>
+ <source>A new feature idea</source>
+ <translation>Zgłoś pomysł</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="112"/>
+ <source>A title for your idea</source>
+ <translation>Tytuł twojego pomysłu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="113"/>
+ <source>Describe your idea in more details</source>
+ <translation>Opisz twój pomysł szerzej</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="118"/>
+ <source>Reporting as an unregistered user, using e-mail address.</source>
+ <translation>Zgłaszanie jako niezarejestrowany użytkownik, używając adresu e-mail.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="127"/>
+ <source>Reporting as a registered user.</source>
+ <translation>Zgłaszanie jako zarejestrowany użytkownik.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="131"/>
+ <source>Log out</source>
+ <translation>Wyloguj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="144"/>
+ <source>Providing true email address will make it possible to contact you regarding your report. To learn more, press &apos;help&apos; button on the right side.</source>
+ <translation>Podanie prawdziwego adresu e-mail pozwoli na skontaktowanie się z tobą w związku z twoim zgłoszeniem. Aby dowiedzieć się więcej, kliknij przycisk &apos;pomoc&apos; po prawej stronie.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="146"/>
+ <source>Enter vaild e-mail address, or log in.</source>
+ <translation>Wpisz poprawny adres e-mail, lub zaloguj się.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="148"/>
+ <source>Short description requires at least 10 characters, but not more than 100. Longer description can be entered in the field below.</source>
+ <translation>Krótki opis wymaga przynajmniej 10 znaków, ale nie więcej niż 100. Dłuższy opis może być wpisany w polu poniżej.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="151"/>
+ <source>Long description requires at least 30 characters.</source>
+ <translation>Długi opis wymaga przynajmniej 30 znaków.</translation>
+ </message>
+</context>
+<context>
+ <name>BugReportHistoryWindow</name>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.ui" line="36"/>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="119"/>
+ <source>Title</source>
+ <translation>Tytuł</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.ui" line="41"/>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="119"/>
+ <source>Reported at</source>
+ <translation>Zgłoszony dnia</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.ui" line="46"/>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="119"/>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="45"/>
+ <source>Reports history</source>
+ <translation>Historia zgłoszeń</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="50"/>
+ <source>Clear reports history</source>
+ <translation>Wyczyść historię zgłoszeń</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="51"/>
+ <source>Delete selected entry</source>
+ <translation>Usuń wybraną pozycję</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="90"/>
+ <source>Invalid response from server.</source>
+ <translation>Niepoprawna odpowiedź z serwera.</translation>
+ </message>
+</context>
+<context>
+ <name>BugReportLoginDialog</name>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="14"/>
+ <source>Log in</source>
+ <translation>Zaloguj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="20"/>
+ <source>Credentials</source>
+ <translation>Dane do logowania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="26"/>
+ <source>Login:</source>
+ <translation>Login:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="36"/>
+ <source>Password:</source>
+ <translation>Hasło:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="53"/>
+ <source>Validation</source>
+ <translation>Walidacja</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="59"/>
+ <source>Validate</source>
+ <translation>Sprawdź</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="73"/>
+ <source>Validation result message</source>
+ <translation>Treść wyniku walidacji</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.cpp" line="45"/>
+ <source>Abort</source>
+ <translation>Przerwij</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.cpp" line="65"/>
+ <source>A login must be at least 2 characters long.</source>
+ <translation>Login musi mieć przynajmniej 2 znaki.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.cpp" line="66"/>
+ <source>A password must be at least 5 characters long.</source>
+ <translation>Hasło musi mieć przynajmniej 5 znaków.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.cpp" line="91"/>
+ <source>Valid</source>
+ <translation>Poprawne</translation>
+ </message>
+</context>
+<context>
+ <name>CollationsEditor</name>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="75"/>
+ <source>Filter collations</source>
+ <translation>Filtruj zestawienia</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="110"/>
+ <source>Collation name:</source>
+ <translation>Nazwa zestawienia:</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="120"/>
+ <source>Implementation language:</source>
+ <translation>Język implementacji:</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="152"/>
+ <source>Databases</source>
+ <translation>Bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="158"/>
+ <source>Register in all databases</source>
+ <translation>Zarejestruj we wszystkich bazach danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="165"/>
+ <source>Register in following databases:</source>
+ <translation>Zarejestruj w następujących bazach danych:</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="186"/>
+ <source>Implementation code:</source>
+ <translation>Kod implementacji:</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="52"/>
+ <source>Collations editor</source>
+ <translation>Edytor zestawień</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="57"/>
+ <source>Commit all collation changes</source>
+ <translation>Zatwierdź wszystkie zmiany w zestawieniach</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="58"/>
+ <source>Rollback all collation changes</source>
+ <translation>Wycofaj wszystkie zmiany w zestawieniach</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="60"/>
+ <source>Create new collation</source>
+ <translation>Utwórz nowe zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="61"/>
+ <source>Delete selected collation</source>
+ <translation>Usuń wybrane zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="63"/>
+ <source>Editing collations manual</source>
+ <translation>Podręcznik edycji zestawień</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="283"/>
+ <source>Enter a non-empty, unique name of the collation.</source>
+ <translation>Podaj niepustą, unikalną nazwę zestawienia.</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="291"/>
+ <source>Pick the implementation language.</source>
+ <translation>Wybierz język implementacji.</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="294"/>
+ <source>Enter a non-empty implementation code.</source>
+ <translation>Wprowadź niepusty kod implementacji.</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="388"/>
+ <source>Collations editor window has uncommited modifications.</source>
+ <translation>Okno edytora zestawień ma niezatwierdzone zmiany.</translation>
+ </message>
+</context>
+<context>
+ <name>ColorButton</name>
+ <message>
+ <location filename="../common/colorbutton.cpp" line="29"/>
+ <source>Pick a color</source>
+ <translation>Wybierz kolor</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnCollatePanel</name>
+ <message>
+ <location filename="../constraints/columncollatepanel.ui" line="41"/>
+ <source>Collation name:</source>
+ <translation>Nazwa zestawienia:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columncollatepanel.ui" line="73"/>
+ <source>Named constraint:</source>
+ <translation>Ograniczenie nazwane:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columncollatepanel.cpp" line="80"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columncollatepanel.cpp" line="81"/>
+ <source>Enter a collation name.</source>
+ <translation>Wprowadź nazwę zestawienia.</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnDefaultPanel</name>
+ <message>
+ <location filename="../constraints/columndefaultpanel.ui" line="20"/>
+ <source>Default value:</source>
+ <translation>Domyślna wartość:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columndefaultpanel.ui" line="35"/>
+ <source>Named constraint:</source>
+ <translation>Ograniczenie nazwane:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columndefaultpanel.cpp" line="39"/>
+ <source>Enter a default value expression.</source>
+ <translation>Wprowadź wyrażenie wartości domyślnej.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columndefaultpanel.cpp" line="78"/>
+ <source>Invalid default value expression: %1</source>
+ <translation>Niepoprawna wartość wyrażenia domyślnego: %1</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columndefaultpanel.cpp" line="90"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnDialog</name>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="14"/>
+ <source>Column</source>
+ <translation>Kolumna</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="23"/>
+ <source>Name and type</source>
+ <translation>Nazwa i typ</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="56"/>
+ <source>Data type:</source>
+ <translation>Typ danych:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="63"/>
+ <source>Column name:</source>
+ <translation>Nazwa kolumny:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="73"/>
+ <source>Size:</source>
+ <translation>Rozmiar:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="96"/>
+ <source>Constraints</source>
+ <translation>Ograniczenia</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="109"/>
+ <source>Unique</source>
+ <translation>Wartości unikalne</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="116"/>
+ <location filename="../dialogs/columndialog.ui" line="130"/>
+ <location filename="../dialogs/columndialog.ui" line="172"/>
+ <location filename="../dialogs/columndialog.ui" line="179"/>
+ <location filename="../dialogs/columndialog.ui" line="186"/>
+ <location filename="../dialogs/columndialog.ui" line="193"/>
+ <location filename="../dialogs/columndialog.ui" line="200"/>
+ <source>Configure</source>
+ <translation>Konfiguruj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="123"/>
+ <source>Foreign Key</source>
+ <translation>Klucz obcy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="137"/>
+ <source>Collate</source>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="144"/>
+ <source>Not NULL</source>
+ <translation>Niepuste</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="151"/>
+ <source>Check condition</source>
+ <translation>Sprawdzaj warunek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="158"/>
+ <source>Primary Key</source>
+ <translation>Klucz główny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="165"/>
+ <source>Default</source>
+ <translation>Wartość domyślna</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="264"/>
+ <source>Advanced mode</source>
+ <translation>Tryb zaawandowany</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="83"/>
+ <source>Add constraint</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="84"/>
+ <source>Edit constraint</source>
+ <comment>column dialog</comment>
+ <translation>Edytuj ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="85"/>
+ <location filename="../dialogs/columndialog.cpp" line="229"/>
+ <source>Delete constraint</source>
+ <comment>column dialog</comment>
+ <translation>Usuń ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="86"/>
+ <source>Move constraint up</source>
+ <comment>column dialog</comment>
+ <translation>Przenieś ograniczenie w górę</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="87"/>
+ <source>Move constraint down</source>
+ <comment>column dialog</comment>
+ <translation>Przenieś ograniczenie w dół</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="89"/>
+ <source>Add a primary key</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj klucz główny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="90"/>
+ <source>Add a foreign key</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj klucz obcy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="91"/>
+ <source>Add an unique constraint</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj ograniczenie wartości unikalnych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="92"/>
+ <source>Add a check constraint</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj ograniczenie sprawdzania wartości</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="93"/>
+ <source>Add a not null constraint</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj ograniczenie niepustych wartości</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="94"/>
+ <source>Add a collate constraint</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj ograniczenie zestawienia</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="95"/>
+ <source>Add a default constraint</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj ograniczenie wartości domyślnej</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="228"/>
+ <source>Are you sure you want to delete constraint &apos;%1&apos;?</source>
+ <comment>column dialog</comment>
+ <translation>Czy na pewno chcesz usunąć ograniczenie &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="290"/>
+ <source>Correct the constraint&apos;s configuration.</source>
+ <translation>Popraw konfigurację ograniczenia.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="293"/>
+ <source>This constraint is not officially supported by SQLite 2,
+but it&apos;s okay to use it.</source>
+ <translation>To ograniczenie nie jest oficjalnie wspireane przez SQLite 2,
+ale można go używać.</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnDialogConstraintsModel</name>
+ <message>
+ <location filename="../dialogs/columndialogconstraintsmodel.cpp" line="328"/>
+ <source>Type</source>
+ <comment>column dialog constraints</comment>
+ <translation>Typ</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialogconstraintsmodel.cpp" line="330"/>
+ <source>Name</source>
+ <comment>column dialog constraints</comment>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialogconstraintsmodel.cpp" line="332"/>
+ <source>Details</source>
+ <comment>column dialog constraints</comment>
+ <translation>Szczegóły</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnForeignKeyPanel</name>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.ui" line="29"/>
+ <source>Foreign table:</source>
+ <translation>Tabela obca:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.ui" line="45"/>
+ <source>Foreign column:</source>
+ <translation>Kolumn obca:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.ui" line="58"/>
+ <source>Reactions</source>
+ <translation>Reakcje</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.ui" line="97"/>
+ <source>Deferred foreign key</source>
+ <translation>Klucz obcy odroczony</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.ui" line="115"/>
+ <source>Named constraint</source>
+ <translation>Nazwane ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.ui" line="122"/>
+ <source>Constraint name</source>
+ <translation>Nazwa ograniczenia</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.cpp" line="40"/>
+ <source>Pick the foreign table.</source>
+ <translation>Wybierz tabelę obcą</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.cpp" line="41"/>
+ <source>Pick the foreign column.</source>
+ <translation>Wybierz kolumnę obcą</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.cpp" line="42"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnPrimaryKeyPanel</name>
+ <message>
+ <location filename="../constraints/columnprimarykeypanel.ui" line="26"/>
+ <source>Autoincrement</source>
+ <translation>Autoinkrementacja</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnprimarykeypanel.ui" line="48"/>
+ <source>Sort order:</source>
+ <translation>Kierunek sortowania:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnprimarykeypanel.ui" line="83"/>
+ <source>Named constraint:</source>
+ <translation>Ograniczenie nazwane:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnprimarykeypanel.ui" line="111"/>
+ <source>On conflict:</source>
+ <translation>W razie konfliktu:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnprimarykeypanel.cpp" line="87"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnprimarykeypanel.cpp" line="103"/>
+ <source>Autoincrement (only for %1 type columns)</source>
+ <comment>column primary key</comment>
+ <translation>Autoinkrementacja (tylko dla kolumn o typie %1)</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnUniqueAndNotNullPanel</name>
+ <message>
+ <location filename="../constraints/columnuniqueandnotnullpanel.ui" line="41"/>
+ <source>Named constraint:</source>
+ <translation>Ograniczenie nazwane:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnuniqueandnotnullpanel.ui" line="69"/>
+ <source>On conflict:</source>
+ <translation>W razie konfliktu:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnuniqueandnotnullpanel.cpp" line="73"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+</context>
+<context>
+ <name>CompleterWindow</name>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="159"/>
+ <source>Column: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Kolumna: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="161"/>
+ <source>Table: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Tabela: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="163"/>
+ <source>Index: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Indeks: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="165"/>
+ <source>Trigger: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Wyzwalacz: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="167"/>
+ <source>View: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Widok: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="169"/>
+ <source>Database: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Baza danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="181"/>
+ <source>Keyword: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Słowo kluczowe: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="183"/>
+ <source>Function: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Funkcja: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="185"/>
+ <source>Operator: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Operator: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="187"/>
+ <source>String</source>
+ <comment>completer statusbar</comment>
+ <translation>Tekst</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="189"/>
+ <source>Number</source>
+ <comment>completer statusbar</comment>
+ <translation>Liczba</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="191"/>
+ <source>Binary data</source>
+ <comment>completer statusbar</comment>
+ <translation>Dane binarne</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="193"/>
+ <source>Collation: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Zestawienie: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="195"/>
+ <source>Pragma function: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Funkcja pragma: %1</translation>
+ </message>
+</context>
+<context>
+ <name>ConfigDialog</name>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="14"/>
+ <location filename="../dialogs/configdialog.ui" line="1216"/>
+ <source>Configuration</source>
+ <translation>Konfiguracja</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="73"/>
+ <source>Search</source>
+ <translation>Szukaj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="104"/>
+ <source>General</source>
+ <translation>Ogólne</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="116"/>
+ <source>Keyboard shortcuts</source>
+ <translation>Skróty klawiszowe</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="128"/>
+ <source>Look &amp; feel</source>
+ <translation>Wygląd i zachowanie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="139"/>
+ <source>Style</source>
+ <translation>Style</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="151"/>
+ <source>Fonts</source>
+ <translation>Czcionki</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="163"/>
+ <source>Colors</source>
+ <translation>Kolory</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="176"/>
+ <source>Plugins</source>
+ <translation>Wtyczki</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="187"/>
+ <source>Code formatters</source>
+ <translation>Formatery kodu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="196"/>
+ <source>Data browsing</source>
+ <translation>Przeglądanie danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="207"/>
+ <source>Data editors</source>
+ <translation>Edytory danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="237"/>
+ <source>Data browsing and editing</source>
+ <translation>Przeglądanie i edycja danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="243"/>
+ <source>Number of data rows per page:</source>
+ <translation>Liczba wierszy danych na stronie:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="269"/>
+ <location filename="../dialogs/configdialog.ui" line="279"/>
+ <source>&lt;p&gt;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.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Kiedy dane są wczytane do widoku siatki, szerokość kolumn jest automatycznie dostosowywana. Ta wartość ogranicza początkową szerokość tego dostosowywania, ale użytkownik nadal może rozszerzać kolumnę ręcznie poza ten limit.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="272"/>
+ <source>Limit initial data column width to (in pixels):</source>
+ <translation>Ogranicz początkową szerokość kolumn danych (w pikselach):</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="328"/>
+ <source>Data types</source>
+ <translation>Type danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="366"/>
+ <source>Available editors:</source>
+ <translation>Dostępne edytory:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="382"/>
+ <source>Editors selected for this data type:</source>
+ <translation>Edytory wybrane dla tego typu danych:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="418"/>
+ <source>Schema editing</source>
+ <translation>Edycja schematu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="430"/>
+ <source>Number of DDL changes kept in history.</source>
+ <translation>Liczba zmian DDL trzymanych w historii.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="443"/>
+ <source>DDL history size:</source>
+ <translation>Rozmiar historii DDL:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="450"/>
+ <source>Don&apos;t show DDL preview dialog when commiting schema changes</source>
+ <translation>Nie pokazuj okna podglądu DDL podczas zatwierdzania zmian schematu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="463"/>
+ <source>SQL queries</source>
+ <translation>Zapytania SQL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="475"/>
+ <location filename="../dialogs/configdialog.ui" line="488"/>
+ <source>Number of queries kept in the history.</source>
+ <translation>Liczba zapytań trzymana w historii.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="491"/>
+ <source>History size:</source>
+ <translation>Rozmiar historii:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="498"/>
+ <source>&lt;p&gt;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.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Jeśli w oknie edytora SQL jest więcej niż jedno zapytanie, to (jeśli ta opcja jest włączona) tylko jedno zapytanie będzie wykonana - to, które znajduje się pod kursorem pisania. W przeciwnym wypadku wszystkie zapytania będą wykonywane. Zawsze możesz ograniczyć zapytania do wywołania przez zaznaczenie tych zapytań, które chcesz wywołać.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="501"/>
+ <source>Execute only the query under the cursor</source>
+ <translation>Wykonuj tylko zapytania będące pod kursorem</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="514"/>
+ <source>Updates</source>
+ <translation>Aktualizacje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="520"/>
+ <source>Automatically check for updates at startup</source>
+ <translation>Sprawdzaj aktualizacje automatycznie przy starcie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="533"/>
+ <source>Session</source>
+ <translation>Sesje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="539"/>
+ <source>Restore last session (active MDI windows) after startup</source>
+ <translation>Przywróć ostatnią sesję (aktywne okna MDI) po starcie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="581"/>
+ <source>Filter shortcuts by name or key combination</source>
+ <translation>Filtruj skróty po nazwie, lub kombinacji klawiszy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="622"/>
+ <source>Action</source>
+ <translation>Akcja</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="627"/>
+ <source>Key combination</source>
+ <translation>Kombinacja klawiszy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="662"/>
+ <source>Changing language requires application restart to take effect.</source>
+ <translation>Zmiana języka wymaga restartu aplikacji, aby zadziałać.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="679"/>
+ <source>Database list</source>
+ <translation>Lista baz</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="685"/>
+ <source>If switched off, then columns will be sorted in the order they are typed in CREATE TABLE statement.</source>
+ <translation>Gdy wyłączone, to kolumny będą ułożone w takiej kolejności, w jakiej wystąpiły w zapytaniu CREATE TABLE.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="688"/>
+ <source>Sort table columns alphabetically</source>
+ <translation>Sortuj kolumny tabel alfabetycznie.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="698"/>
+ <source>Expand tables node when connected to a database</source>
+ <translation>Rozwiń listę tabel po połączeniu z bazą danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="708"/>
+ <source>&lt;p&gt;Additional labels are those displayed next to the names on the databases list (they are blue, unless configured otherwise). Enabling this option will result in labels for databases, invalid databases and aggregated nodes (column group, index group, trigger group). For more labels see options below.&lt;p&gt;</source>
+ <translation>&lt;p&gt;Dodatkowe etykiety, to te wyświetlane obok nazw na liście baz danych (są niebieskie, chyba że skonfigurowano je inaczej). Włączenie tej opcji spowoduje wyświetlenie etykiet dla baz danych, niepoprawnych baz danych, oraz dla węzłów agregujących (grupa kolumn, grupa indeksów, grupa wyzwalaczy). Więcej etykiet jest dostępne niżej.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="711"/>
+ <source>Display additional labels on the list</source>
+ <translation>Wyświetlaj dodatkowe etykiety na liście</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="726"/>
+ <source>For regular tables labels will show number of columns, indexes and triggers for each of tables.</source>
+ <translation>Dla zwykłych tabel etykiety będą pokazywać liczbę kolumn, inseksów, oraz wyzwalaczy dla tych tabel.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="729"/>
+ <source>Display labels for regular tables</source>
+ <translation>Wyświetlaj etykiety dla zwykłych tabel</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="739"/>
+ <source>Virtual tables will be marked with a &apos;virtual&apos; label.</source>
+ <translation>Tabele wirtualne będą oznaczone etykietą &apos;wirtualna&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="742"/>
+ <source>Display labels for virtual tables</source>
+ <translation>Wyświetlaj etykiety dla tabel wirtualnych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="755"/>
+ <source>Expand views node when connected to a database</source>
+ <translation>Rozwiń listę widoków po połączeniu z bazą.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="765"/>
+ <source>If this option is switched off, then objects will be sorted in order they appear in sqlite_master table (which is in order they were created)</source>
+ <translation>Gdy ta opcja jest wyłączona, to wszystkie obiekty będą ułożone w takiej kolejności, w jakiej występują w tabeli sqlite_master (czyli w takiej, w jakiej zostały stworzone)</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="768"/>
+ <source>Sort objects (tables, indexes, triggers and views) alphabetically</source>
+ <translation>Sortuj obiekty (tabele, indeksy, wyzwalacze i widoki) alfabetycznie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="778"/>
+ <source>Display system tables and indexes on the list</source>
+ <translation>Wyświetlaj tabele i indeksy systemowe na liście</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="791"/>
+ <source>Table windows</source>
+ <translation>Okna tabel</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="797"/>
+ <source>When enabled, Table Windows will show up with the data tab, instead of the structure tab.</source>
+ <translation>Gdy włączone, Okna Tabel będą się pokazywać z zakładką danych, zamiast z zakładką struktury.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="800"/>
+ <source>Open Table Windows with the data tab for start</source>
+ <translation>Otwieraj Okna Tabeli z zakładką danych na początek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="813"/>
+ <source>View windows</source>
+ <translation>Okna Widoków</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="819"/>
+ <source>When enabled, View Windows will show up with the data tab, instead of the structure tab.</source>
+ <translation>Gdy włączone, Okna Widoków będą się pokazywać z zakładką danych, zamiast z zakładką struktury.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="822"/>
+ <source>Open View Windows with the data tab for start</source>
+ <translation>Otwieraj Okna Widoku z zakładką danych na początek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="933"/>
+ <source>Hide built-in plugins</source>
+ <translation>Ukryj wtyczki wbudowane</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="962"/>
+ <source>Current style:</source>
+ <translation>Aktualny styl:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="979"/>
+ <source>Preview</source>
+ <translation>Podgląd</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="989"/>
+ <source>Enabled</source>
+ <translation>Włączone</translation>
+ </message>
+ <message>
+ <source>Column</source>
+ <translation type="obsolete">Kolumna</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1162"/>
+ <source>Disabled</source>
+ <translation>Wyłączone</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="656"/>
+ <location filename="../dialogs/configdialog.ui" line="1206"/>
+ <source>Language</source>
+ <translation>Język</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1211"/>
+ <source>Active formatter plugin</source>
+ <translation>Aktywna wtyczka formatera</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1249"/>
+ <source>SQL editor font</source>
+ <translation>Czcionka edytora SQL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1265"/>
+ <source>Database list font</source>
+ <translation>Czcionka listy baz danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1281"/>
+ <source>Database list additional label font</source>
+ <translation>Czcionka dodatkowych etykiety listy baz danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1297"/>
+ <source>Data view font</source>
+ <translation>Czcionka widoku danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1313"/>
+ <source>Status field font</source>
+ <translation>Czcionka pola statusu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1371"/>
+ <source>SQL editor colors</source>
+ <translation>Kolory edytora SQL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1377"/>
+ <source>Current line background</source>
+ <translation>Tło bieżącej linii</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1384"/>
+ <source>&lt;p&gt;SQL strings are enclosed with single quote characters.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Łańcuchy znaków SQL są zamknięte pomiędzy znakami apostrofu.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1387"/>
+ <source>String foreground</source>
+ <translation>Czcionka łańcucha znaków</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1490"/>
+ <source>&lt;p&gt;Bind parameters are placeholders for values yet to be provided by the user. They have one of the forms:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;:param_name&lt;/li&gt;&lt;li&gt;$param_name&lt;/li&gt;&lt;li&gt;@param_name&lt;/li&gt;&lt;li&gt;?&lt;/li&gt;&lt;/ul&gt;</source>
+ <translation>&lt;b&gt;Parametry wiążące to wyrażenia zastępcze dla wartości, które mają być dopiero dostarczone przez użytkownika. Mają one jedną z form: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;:nazwa_parametru&lt;/li&gt;&lt;li&gt;$nazwa_parametru&lt;/li&gt;&lt;li&gt;@nazwa_parametru&lt;/li&gt;&lt;li&gt;?&lt;/li&gt;&lt;/ul&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1493"/>
+ <source>Bind parameter foreground</source>
+ <translation>Czcionka parametru wiążącego</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1516"/>
+ <source>Highlighted parenthesis background</source>
+ <translation>Tło podświetlonych nawiasów</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1523"/>
+ <source>&lt;p&gt;BLOB values are binary values represented as hexadecimal numbers, like:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;X&apos;12B4&apos;&lt;/li&gt;&lt;li&gt;x&apos;46A2F4&apos;&lt;/li&gt;&lt;/ul&gt;</source>
+ <translation>&lt;p&gt;Wartości BLOB są wartościami binarnymi, reprezentowanymi jako liczby heksadecymalne, jak np:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;X&apos;12B4&apos;&lt;/li&gt;&lt;li&gt;x&apos;46A2F4&apos;&lt;/li&gt;&lt;/ul&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1526"/>
+ <source>BLOB value foreground</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1533"/>
+ <source>Regular foreground</source>
+ <translation>Standardowa czcionka</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1540"/>
+ <source>Line numbers area background</source>
+ <translation>Tło obszaru numerów linii</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1563"/>
+ <source>Keyword foreground</source>
+ <translation>Czcionka słowa kluczowego</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1570"/>
+ <source>Number foreground</source>
+ <translation>Czcionka liczby</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1577"/>
+ <source>Comment foreground</source>
+ <translation>Czcionka komentarza</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1616"/>
+ <source>&lt;p&gt;Valid objects are name of tables, indexes, triggers, or views that exist in the SQLite database.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Poprawne obiekty to nazwy tabel, indekstów, wyzwalaczy i widoków, które istnieją w basie SQLite.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1619"/>
+ <source>Valid objects foreground</source>
+ <translation>Czcionka poprawnych obiektów</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1645"/>
+ <source>Data view colors</source>
+ <translation>Kolory widoku danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1651"/>
+ <source>&lt;p&gt;Any data changes will be outlined with this color, until they&apos;re commited to the database.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Jakakolwiek zmiana danych będzie obrysowana tym kolorem, dopóki nie zostanie zatwierdzona do bazy danych.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1654"/>
+ <source>Uncommited data outline color</source>
+ <translation>Kolor obrysu niezatwierdzonych danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1677"/>
+ <source>&lt;p&gt;In case of error while commiting data changes, the problematic cell will be outlined with this color.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;W przypadku błędu podczas zatwierdzania zmian danych, komórka będąca przyczyną problemu zostanie obrysowana tym kolorem.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1680"/>
+ <source>Commit error outline color</source>
+ <translation>Kolor obrysu błędu zatwierdzania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1703"/>
+ <source>NULL value foreground</source>
+ <translation>Kolor czcionki wartości NULL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1726"/>
+ <source>Deleted row background</source>
+ <translation>Tło wiersza usuniętego</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1752"/>
+ <source>Database list colors</source>
+ <translation>Kolory listy baz danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1758"/>
+ <source>&lt;p&gt;Additional labels are those which tell you SQLite version, number of objects deeper in the tree, etc.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Dodatkowe etykiety to te, które mówią o wersji SQLite, liczbie obiektów w głębszych częściach drzewa, itp.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1761"/>
+ <source>Additional labels foreground</source>
+ <translation>Czcionka dodatkowych etykiet</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1787"/>
+ <source>Status field colors</source>
+ <translation>Kolory pola statusu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1793"/>
+ <source>Information message foreground</source>
+ <translation>Czcionka wiadomości informującej</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1816"/>
+ <source>Warning message foreground</source>
+ <translation>Czcionka wiadomości ostrzegającej</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1839"/>
+ <source>Error message foreground</source>
+ <translation>Czcionka wiadomości błędu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="765"/>
+ <source>Description:</source>
+ <comment>plugin details</comment>
+ <translation>Opis:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="766"/>
+ <source>Category:</source>
+ <comment>plugin details</comment>
+ <translation>Kategoria:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="767"/>
+ <source>Version:</source>
+ <comment>plugin details</comment>
+ <translation>Wersja:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="768"/>
+ <source>Author:</source>
+ <comment>plugin details</comment>
+ <translation>Autor:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="770"/>
+ <source>Internal name:</source>
+ <comment>plugin details</comment>
+ <translation>Nazwa wewnętrzna:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="771"/>
+ <source>Dependencies:</source>
+ <comment>plugin details</comment>
+ <translation>Zależności:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="772"/>
+ <source>Conflicts:</source>
+ <comment>plugin details</comment>
+ <translation>Konflikty:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="776"/>
+ <source>Plugin details</source>
+ <translation>Szczegóły wtyczki</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1177"/>
+ <source>Plugins are loaded/unloaded immediately when checked/unchecked, but modified list of plugins to load at startup is not saved until you commit the whole configuration dialog.</source>
+ <translation>Wtyczki są ładowane/wyładowywane natychmiast po zaznaczeniu/odznaczeniu, ale zmodyfikowana lista wtyczek, które należy załadować przy starcie nie jest zapisana, dopóki nie zatwierdzisz całego okna configuracji.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1241"/>
+ <source>%1 (built-in)</source>
+ <comment>plugins manager in configuration dialog</comment>
+ <translation>%1 (wbudowany)</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1254"/>
+ <source>Details</source>
+ <translation>Szczegóły</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1266"/>
+ <source>No plugins in this category.</source>
+ <translation>Brak wtyczek w tej kategorii.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1362"/>
+ <source>Add new data type</source>
+ <translation>Dodaj nowy typ danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1366"/>
+ <source>Rename selected data type</source>
+ <translation>Zmień nazwę wybranego typu danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1370"/>
+ <source>Delete selected data type</source>
+ <translation>Usuń wybrany typ danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1374"/>
+ <source>Help for configuring data type editors</source>
+ <translation>Pomoc w konfiguracji edytorów typów danych</translation>
+ </message>
+</context>
+<context>
+ <name>ConstraintCheckPanel</name>
+ <message>
+ <location filename="../constraints/constraintcheckpanel.ui" line="20"/>
+ <source>The condition</source>
+ <translation>Warunek</translation>
+ </message>
+ <message>
+ <location filename="../constraints/constraintcheckpanel.ui" line="35"/>
+ <source>Named constraint:</source>
+ <translation>Ograniczenie nazwane:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/constraintcheckpanel.ui" line="51"/>
+ <source>On conflict</source>
+ <translation>W razie konfliktu</translation>
+ </message>
+ <message>
+ <location filename="../constraints/constraintcheckpanel.cpp" line="46"/>
+ <source>Enter a valid condition.</source>
+ <translation>Wprowadź poprawny warunek.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/constraintcheckpanel.cpp" line="47"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+</context>
+<context>
+ <name>ConstraintDialog</name>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="62"/>
+ <source>New constraint</source>
+ <comment>constraint dialog</comment>
+ <translation>Nowe ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="63"/>
+ <source>Create</source>
+ <comment>constraint dialog</comment>
+ <translation>Utwórz</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="66"/>
+ <source>Edit constraint</source>
+ <comment>dialog window</comment>
+ <translation>Edytuj ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="67"/>
+ <source>Apply</source>
+ <comment>constraint dialog</comment>
+ <translation>Zastosuj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="170"/>
+ <source>Primary key</source>
+ <comment>table constraints</comment>
+ <translation>Klucz główny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="174"/>
+ <source>Foreign key</source>
+ <comment>table constraints</comment>
+ <translation>Klucz obcy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="178"/>
+ <source>Unique</source>
+ <comment>table constraints</comment>
+ <translation>Wartości unikalne</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="182"/>
+ <source>Not NULL</source>
+ <comment>table constraints</comment>
+ <translation>Niepuste</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="186"/>
+ <source>Check</source>
+ <comment>table constraints</comment>
+ <translation>Warunek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="190"/>
+ <source>Collate</source>
+ <comment>table constraints</comment>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="194"/>
+ <source>Default</source>
+ <comment>table constraints</comment>
+ <translation>Wartość domyślna</translation>
+ </message>
+</context>
+<context>
+ <name>ConstraintTabModel</name>
+ <message>
+ <location filename="../windows/constrainttabmodel.cpp" line="68"/>
+ <source>Table</source>
+ <comment>table constraints</comment>
+ <translation>Tabela</translation>
+ </message>
+ <message>
+ <location filename="../windows/constrainttabmodel.cpp" line="109"/>
+ <source>Column (%1)</source>
+ <comment>table constraints</comment>
+ <translation>Kolumna (%1)</translation>
+ </message>
+ <message>
+ <location filename="../windows/constrainttabmodel.cpp" line="153"/>
+ <source>Scope</source>
+ <comment>table constraints</comment>
+ <translation>Zakres</translation>
+ </message>
+ <message>
+ <location filename="../windows/constrainttabmodel.cpp" line="155"/>
+ <source>Type</source>
+ <comment>table constraints</comment>
+ <translation>Typ</translation>
+ </message>
+ <message>
+ <location filename="../windows/constrainttabmodel.cpp" line="157"/>
+ <source>Details</source>
+ <comment>table constraints</comment>
+ <translation>Szczegóły</translation>
+ </message>
+ <message>
+ <location filename="../windows/constrainttabmodel.cpp" line="159"/>
+ <source>Name</source>
+ <comment>table constraints</comment>
+ <translation>Nazwa</translation>
+ </message>
+</context>
+<context>
+ <name>DataView</name>
+ <message>
+ <location filename="../dataview.cpp" line="95"/>
+ <source>Filter data</source>
+ <comment>data view</comment>
+ <translation>Filtruj dane</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="104"/>
+ <source>Grid view</source>
+ <translation>Widok siatki</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="105"/>
+ <source>Form view</source>
+ <translation>Widok formularza</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="148"/>
+ <source>Refresh table data</source>
+ <comment>data view</comment>
+ <translation>Odśwież dane tabeli</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="162"/>
+ <source>First page</source>
+ <comment>data view</comment>
+ <translation>Pierwsza strona</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="163"/>
+ <source>Previous page</source>
+ <comment>data view</comment>
+ <translation>Poprzednia strona</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="165"/>
+ <source>Next page</source>
+ <comment>data view</comment>
+ <translation>Następna strona</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="166"/>
+ <source>Last page</source>
+ <comment>data view</comment>
+ <translation>Ostatnia strona</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="171"/>
+ <source>Apply filter</source>
+ <comment>data view</comment>
+ <translation>Zastosuj filtr</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="186"/>
+ <source>Commit changes for selected cells</source>
+ <comment>data view</comment>
+ <translation>Zatwierdź zmiany dla wybranych komórek</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="187"/>
+ <source>Rollback changes for selected cells</source>
+ <comment>data view</comment>
+ <translation>Wycofaj zmiany dla wybranych komórek</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="188"/>
+ <source>Show grid view of results</source>
+ <comment>sql editor</comment>
+ <translation>Pokaż widok siatki dla wyników</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="189"/>
+ <source>Show form view of results</source>
+ <comment>sql editor</comment>
+ <translation>Pokaż widok formularza dla wyników</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="258"/>
+ <source>Filter by text</source>
+ <comment>data view</comment>
+ <translation>Filtruj po tekście</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="259"/>
+ <source>Filter by the Regular Expression</source>
+ <comment>data view</comment>
+ <translation>Filtruj używając Wyrażeń Regularnych</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="260"/>
+ <source>Filter by SQL expression</source>
+ <comment>data view</comment>
+ <translation>Filtruj używając wyrażenia SQL</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="291"/>
+ <source>Tabs on top</source>
+ <comment>data view</comment>
+ <translation>Karty na górze</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="292"/>
+ <source>Tabs at bottom</source>
+ <comment>data view</comment>
+ <translation>Karty na dole</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="510"/>
+ <source>Total number of rows is being counted.
+Browsing other pages will be possible after the row counting is done.</source>
+ <translation>Całkowita liczba wierszy jest liczona.
+Przeglądanie pozostałych stron będzie możliwe kiedy liczenie wierszy zostanie zakończone.</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="521"/>
+ <source>Row: %1</source>
+ <translation>Wiersz: %1</translation>
+ </message>
+</context>
+<context>
+ <name>DbConverterDialog</name>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="20"/>
+ <source>Source database</source>
+ <translation>Źródłowa baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="29"/>
+ <source>Source database version:</source>
+ <translation>Wersja źródłowej bazy:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="46"/>
+ <source>Target database</source>
+ <translation>Docelowa baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="52"/>
+ <source>Target version:</source>
+ <translation>Wersja docelowej bazy:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="59"/>
+ <source>This is the file that will be created as a result of the conversion.</source>
+ <translation>To jest plik, który będzie stworzony jako wynik konwersji.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="66"/>
+ <source>Target file:</source>
+ <translation>Docelowy plik:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="73"/>
+ <source>Name of the new database:</source>
+ <translation>Nazwa nowej bazy:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="90"/>
+ <source>This is the name that the converted database will be added to SQLiteStudio with.</source>
+ <translation>To jest nazwa z jaką skonwertowana baza będzie dodana do SQLiteStudio.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="14"/>
+ <source>Convert database</source>
+ <translation>Konwertuj bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="123"/>
+ <source>Select source database</source>
+ <translation>Wybierz źródłową bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="129"/>
+ <source>Enter valid and writable file path.</source>
+ <translation>Wprowadź poprawną ścieżkę do pliku, do której masz prawo zapisywać.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="131"/>
+ <source>Entered file exists and will be overwritten.</source>
+ <translation>Podany plik istnieje i zostanie nadpisany.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="135"/>
+ <source>Enter a not empty, unique name (as in the list of databases on the left).</source>
+ <translation>Wprowadź niepustą, unikalną nazwę (w kontekście listy baz danych po lewej).</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="140"/>
+ <source>No valid target dialect available. Conversion not possible.</source>
+ <translation>Nie ma dostępnego poprawnego docelowego dialektu. Konwersja nie jest możliwa.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="142"/>
+ <source>Select valid target dialect.</source>
+ <translation>Wybierz poprawny docelowy dialekt.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="194"/>
+ <source>Database %1 has been successfully converted and now is available under new name: %2</source>
+ <translation>Baza danych %1 została przekonwertowana pomyślnie i jest teraz dostępna pod nazwą: %2</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="206"/>
+ <source>SQL statements conversion</source>
+ <translation>Konwersja zapytań SQL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="214"/>
+ <source>Following error occurred while converting SQL statements to the target SQLite version:</source>
+ <translation>Następujące błędy wystąpiły podczas konwersji zapytań SQL do docelowej wersji SQLite:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="215"/>
+ <source>Would you like to ignore those errors and proceed?</source>
+ <translation>Czy chcesz zignorować te błędy i kontynuować?</translation>
+ </message>
+</context>
+<context>
+ <name>DbDialog</name>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="20"/>
+ <source>Database</source>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="43"/>
+ <source>Database driver</source>
+ <translation>Sterownik bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="59"/>
+ <source>Name</source>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="66"/>
+ <source>Type</source>
+ <translation>Typ</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="78"/>
+ <source>Browse for database file on local computer</source>
+ <translation>Przeglądaj w poszukiwaniu pliku bazy danych na lokalnym komputerze</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="90"/>
+ <source>File</source>
+ <translation>Plik</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="97"/>
+ <source>Generate name basing on file path</source>
+ <translation>Generuj nazwę bazując na ścieżce do pliku</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="110"/>
+ <source>Permanent</source>
+ <translation>Trwała</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="132"/>
+ <source>&lt;p&gt;Enable this if you want the database to be stored in configuration file and restored every time SQLiteStudio is started.&lt;/p&gt;</source>
+ <extracomment>aasfd</extracomment>
+ <translation>&lt;p&gt;Włącz to, jeśli chcesz aby baza danych była przechowywana w pliku konfiguracji i przywracana za każdym razem, gdy startuje SQLiteStudio.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="164"/>
+ <source>Test database connection</source>
+ <translation>Testuj połączenie z bazą</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.cpp" line="279"/>
+ <source>Browse</source>
+ <translation>Przeglądaj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.cpp" line="516"/>
+ <source>The name will be auto-generated</source>
+ <translation>Nazwa będzie generowana automatycznie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.cpp" line="521"/>
+ <source>Type the name</source>
+ <translation>Wprowadź nazwę</translation>
+ </message>
+</context>
+<context>
+ <name>DbObjectDialogs</name>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="174"/>
+ <source>Delete table</source>
+ <translation>Usuń tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="175"/>
+ <source>Are you sure you want to delete table %1?</source>
+ <translation>Czy na pewno chcesz usunąć tabelę %1?</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="179"/>
+ <source>Delete index</source>
+ <translation>Usuń indeks</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="180"/>
+ <source>Are you sure you want to delete index %1?</source>
+ <translation>Czy na pewno chcesz usunąć indeks %1?</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="184"/>
+ <source>Delete trigger</source>
+ <translation>Usuń wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="185"/>
+ <source>Are you sure you want to delete trigger %1?</source>
+ <translation>Czy na pewno chcesz usunąć wyzwalacz %1?</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="189"/>
+ <source>Delete view</source>
+ <translation>Usuń widok</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="190"/>
+ <source>Are you sure you want to delete view %1?</source>
+ <translation>Czy na pewno chcesz usunąć widok %1?</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="218"/>
+ <source>Error while dropping %1: %2</source>
+ <translation>Błąd podczas porzucania %1: %2</translation>
+ </message>
+</context>
+<context>
+ <name>DbTree</name>
+ <message>
+ <location filename="../dbtree/dbtree.ui" line="23"/>
+ <source>Databases</source>
+ <translation>Bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.ui" line="67"/>
+ <source>Filter by name</source>
+ <translation>Filtruj po nazwie</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="99"/>
+ <source>Copy</source>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="100"/>
+ <source>Paste</source>
+ <translation>Wklej</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="101"/>
+ <source>Select all</source>
+ <translation>Zaznacz wszystko</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="102"/>
+ <source>Create a group</source>
+ <translation>Utwórz grupę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="103"/>
+ <source>Delete the group</source>
+ <translation>Usuń grupę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="104"/>
+ <source>Rename the group</source>
+ <translation>Zmień nazwę grupy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="105"/>
+ <source>Add a database</source>
+ <translation>Dodaj bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="106"/>
+ <source>Edit the database</source>
+ <translation>Edytuj bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="107"/>
+ <source>Remove the database</source>
+ <translation>Usuń bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="108"/>
+ <source>Connect to the database</source>
+ <translation>Połącz z bazą danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="109"/>
+ <source>Disconnect from the database</source>
+ <translation>Rozłącz się z bazą danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="110"/>
+ <source>Import</source>
+ <translation>Importuj</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="111"/>
+ <source>Export the database</source>
+ <translation>Eksportuj bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="112"/>
+ <source>Convert database type</source>
+ <translation>Konwertuj typ bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="113"/>
+ <source>Vacuum</source>
+ <translation>Odkurz</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="114"/>
+ <source>Integrity check</source>
+ <translation>Sprawdź spójność</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="115"/>
+ <source>Create a table</source>
+ <translation>Utwórz tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="116"/>
+ <source>Edit the table</source>
+ <translation>Edytuj tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="935"/>
+ <source>Entry with name %1 already exists in group %2.</source>
+ <translation>Pozycja o nazwie %1 istnieje już w grupie %2.</translation>
+ </message>
+ <message>
+ <source>Drop the table</source>
+ <translation type="obsolete">Porzuć tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="118"/>
+ <source>Export the table</source>
+ <translation>Eksportuj tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="119"/>
+ <source>Import into the table</source>
+ <translation>Importuj do tabeli</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="120"/>
+ <source>Populate table</source>
+ <translation>Zaludnij tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="121"/>
+ <source>Create similar table</source>
+ <translation>Utwórz podobną tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="123"/>
+ <source>Create an index</source>
+ <translation>Utwórz indeks</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="124"/>
+ <source>Edit the index</source>
+ <translation>Edytuj indeks</translation>
+ </message>
+ <message>
+ <source>Drop the index</source>
+ <translation type="obsolete">Porzuć indeks</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="126"/>
+ <source>Create a trigger</source>
+ <translation>Utwórz wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="127"/>
+ <source>Edit the trigger</source>
+ <translation>Edytuj wyzwalacz</translation>
+ </message>
+ <message>
+ <source>Drop the trigger</source>
+ <translation type="obsolete">Porzuć wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="129"/>
+ <source>Create a view</source>
+ <translation>Utwórz widok</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="130"/>
+ <source>Edit the view</source>
+ <translation>Edytuj widok</translation>
+ </message>
+ <message>
+ <source>Drop the view</source>
+ <translation type="obsolete">Porzuć widok</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="132"/>
+ <source>Add a column</source>
+ <translation>Dodaj kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="133"/>
+ <source>Edit the column</source>
+ <translation>Edytuj kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="134"/>
+ <source>Delete the column</source>
+ <translation>Usuń kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="135"/>
+ <source>Delete selected items</source>
+ <translation>Usuń wybrane elementy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="136"/>
+ <source>Clear filter</source>
+ <translation>Wyczyść filtr</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="137"/>
+ <source>Refresh all database schemas</source>
+ <translation>Odśwież schematy wszystkich baz danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="138"/>
+ <source>Refresh selected database schema</source>
+ <translation>Odśwież schemat wybranej bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="117"/>
+ <source>Delete the table</source>
+ <translation>Usuń tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="122"/>
+ <source>Reset autoincrement sequence</source>
+ <translation>Wyzeruj sekwencję autoinkrementacji</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="125"/>
+ <source>Delete the index</source>
+ <translation>Usuń indeks</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="128"/>
+ <source>Delete the trigger</source>
+ <translation>Usuń wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="131"/>
+ <source>Delete the view</source>
+ <translation>Usuń widok</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="308"/>
+ <location filename="../dbtree/dbtree.cpp" line="313"/>
+ <source>Database</source>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="323"/>
+ <source>Grouping</source>
+ <translation>Grupowanie</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="932"/>
+ <location filename="../dbtree/dbtree.cpp" line="935"/>
+ <source>Create group</source>
+ <translation>Utwórz grupę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="932"/>
+ <source>Group name</source>
+ <translation>Nazwa grupy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="953"/>
+ <source>Delete group</source>
+ <translation>Usuń grupę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="954"/>
+ <source>Are you sure you want to delete group %1?
+All objects from this group will be moved to parent group.</source>
+ <translation>Czy na pewno chcesz usunąć grupę %1?
+Wszystkie obiekty z tej grupy zostaną przeniesione do nadrzędnej grupy.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1014"/>
+ <source>Delete database</source>
+ <translation>Usuń bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1014"/>
+ <source>Are you sure you want to delete database &apos;%1&apos;?</source>
+ <translation>Czy na pewno chcesz usunąć bazę danych &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1050"/>
+ <location filename="../dbtree/dbtree.cpp" line="1260"/>
+ <source>Cannot import, because no import plugin is loaded.</source>
+ <translation>Nie można zaimportować, ponieważ żadna wtyczka importu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1070"/>
+ <location filename="../dbtree/dbtree.cpp" line="1235"/>
+ <source>Cannot export, because no export plugin is loaded.</source>
+ <translation>Nie można wyeksportować, ponieważ żadna wtyczka eksportu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1334"/>
+ <source>Error while executing VACUUM on the database %1: %2</source>
+ <translation>Błąd podczas wykonywania VACUUM na bazie danych %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1336"/>
+ <source>VACUUM execution finished successfully.</source>
+ <translation>Wykonanie VACUUM przebiegło pomyślnie.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1353"/>
+ <source>Integrity check (%1)</source>
+ <translation>Sprawdzanie spójności (%1)</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1390"/>
+ <source>Reset autoincrement</source>
+ <translation>Wyzeruj autoinkrementację</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1390"/>
+ <source>Are you sure you want to reset autoincrement value for table &apos;%1&apos;?</source>
+ <translation>Czy na pewno chcesz wyzerować wartość autoinkrementacji dla tabeli &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1397"/>
+ <source>An error occurred while trying to reset autoincrement value for table &apos;%1&apos;: %2</source>
+ <translation>Wystąpił błąd podczas próby wyzerowania wartości autoinkrementacji dla tabeli &apos;%1&apos;: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1399"/>
+ <source>Autoincrement value for table &apos;%1&apos; has been reset successfly.</source>
+ <translation>Wartość autoinkrementacji dla tabeli &apos;%1&apos; została pomyślnie wyzerowana.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1501"/>
+ <source>Following objects will be deleted: %1.</source>
+ <translation>Następujące obiekty zostaną usunięte: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1504"/>
+ <source>Following databases will be removed from list: %1.</source>
+ <translation>Następujące bazy danych zostaną usunięte z listy: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1507"/>
+ <source>Remainig objects from deleted group will be moved in place where the group used to be.</source>
+ <translation>Pozostałe obiekty z usuniętej grupy będą przeniesione w miejsce, gdzie dotychczas była ta grupa.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1509"/>
+ <source>%1&lt;br&gt;&lt;br&gt;Are you sure you want to continue?</source>
+ <translation>%1&lt;br&gt;&lt;br&gt;Czy na pewno chcesz kontynuować?</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1511"/>
+ <source>Delete objects</source>
+ <translation>Usuń obiekty</translation>
+ </message>
+</context>
+<context>
+ <name>DbTreeItemDelegate</name>
+ <message>
+ <location filename="../dbtree/dbtreeitemdelegate.cpp" line="92"/>
+ <source>error</source>
+ <comment>dbtree labels</comment>
+ <translation>błąd</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemdelegate.cpp" line="109"/>
+ <source>(system table)</source>
+ <comment>database tree label</comment>
+ <translation>(tabela systemowa)</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemdelegate.cpp" line="127"/>
+ <source>(virtual)</source>
+ <comment>virtual table label</comment>
+ <translation>(wirtualna)</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemdelegate.cpp" line="139"/>
+ <source>(system index)</source>
+ <comment>database tree label</comment>
+ <translation>(indeks systemowy)</translation>
+ </message>
+</context>
+<context>
+ <name>DbTreeModel</name>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="405"/>
+ <source>Database: %1</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Baza danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="410"/>
+ <source>Version:</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Wersja:</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="411"/>
+ <source>File size:</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Rozmiar pliku:</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="412"/>
+ <source>Encoding:</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Kodowanie:</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="417"/>
+ <source>Error details:</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Szczegóły błędu:</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="427"/>
+ <source>Table : %1</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Tablela: : %1</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="450"/>
+ <source>Columns (%1):</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Kolumny (%1):</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="453"/>
+ <source>Indexes (%1):</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Indeksy (%1):</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="456"/>
+ <source>Triggers (%1):</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Wyzwalacze (%1):</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1071"/>
+ <source>Copy</source>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1072"/>
+ <source>Move</source>
+ <translation>Przenieś</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1074"/>
+ <source>Include data</source>
+ <translation>Również dane</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1075"/>
+ <source>Include indexes</source>
+ <translation>Również indeksy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1076"/>
+ <source>Include triggers</source>
+ <translation>Również wyzwalacze</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1078"/>
+ <source>Abort</source>
+ <translation>Przerwij</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1154"/>
+ <source>Referenced tables</source>
+ <translation>Tabele powiązane</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1155"/>
+ <source>Do you want to include following referenced tables as well:
+%1</source>
+ <translation>Czy chcesz zawrzeć również powiązane tabele:
+%1</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1164"/>
+ <source>Name conflict</source>
+ <translation>Konflikt nazwy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1165"/>
+ <source>Following object already exists in the target database.
+Please enter new, unique name, or press &apos;%1&apos; to abort the operation:</source>
+ <translation>Następująy obiekt istnieje już w docelowej bazie danych.
+Proszę podać nową, unikalną nazwę, lub nacisnąć &apos;%1&apos;, aby przerwać operację.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1178"/>
+ <source>SQL statements conversion</source>
+ <translation>Konwersja zapytań SQL</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1186"/>
+ <source>Following error occurred while converting SQL statements to the target SQLite version:</source>
+ <translation>Następujące błędy wystąpiły podczas konwersji zapytań SQL do docelowej wersji SQLite:</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1187"/>
+ <source>Would you like to ignore those errors and proceed?</source>
+ <translation>Czy chcesz zignorować te błędy i kontynuować?</translation>
+ </message>
+</context>
+<context>
+ <name>DdlHistoryWindow</name>
+ <message>
+ <location filename="../windows/ddlhistorywindow.ui" line="35"/>
+ <source>Filter by database:</source>
+ <translation>Filtruj po bazie danych:</translation>
+ </message>
+ <message>
+ <location filename="../windows/ddlhistorywindow.cpp" line="73"/>
+ <source>-- Queries executed on database %1 (%2)
+-- Date and time of execution: %3
+%4</source>
+ <translation>-- Zapytania wykonane na bazie %1 (%2)
+-- Data i godzina wykonania: %3
+%4</translation>
+ </message>
+ <message>
+ <location filename="../windows/ddlhistorywindow.cpp" line="124"/>
+ <source>DDL history</source>
+ <translation>Historia DDL</translation>
+ </message>
+</context>
+<context>
+ <name>DdlPreviewDialog</name>
+ <message>
+ <location filename="../dialogs/ddlpreviewdialog.ui" line="14"/>
+ <source>Queries to be executed</source>
+ <translation>Zapytania do wykonania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/ddlpreviewdialog.ui" line="42"/>
+ <source>Don&apos;t show again</source>
+ <translation>Nie pokazuj więcej</translation>
+ </message>
+</context>
+<context>
+ <name>DebugConsole</name>
+ <message>
+ <location filename="../debugconsole.ui" line="14"/>
+ <source>SQLiteStudio Debug Console</source>
+ <translation>Konsola Debugowania SQLiteStudio</translation>
+ </message>
+</context>
+<context>
+ <name>EditorWindow</name>
+ <message>
+ <location filename="../windows/editorwindow.ui" line="39"/>
+ <source>Query</source>
+ <translation>Zapytanie</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.ui" line="109"/>
+ <source>History</source>
+ <translation>Historia</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="130"/>
+ <source>Results in the separate tab</source>
+ <translation>Wyniki w osobnej karcie</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="131"/>
+ <source>Results below the query</source>
+ <translation>Wyniki pod zapytaniem</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="164"/>
+ <location filename="../windows/editorwindow.cpp" line="166"/>
+ <source>SQL editor %1</source>
+ <translation>Edytor SQL %1</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="324"/>
+ <source>Results</source>
+ <translation>Wyniki</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="357"/>
+ <source>Execute query</source>
+ <translation>Wykonaj zapytanie</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="358"/>
+ <source>Explain query</source>
+ <translation>Wytłumacz zapytanie</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="361"/>
+ <source>Clear execution history</source>
+ <comment>sql editor</comment>
+ <translation>Wymaż historię zapytań</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="363"/>
+ <source>Export results</source>
+ <comment>sql editor</comment>
+ <translation>Wyeksportuj wyniki</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="365"/>
+ <source>Create view from query</source>
+ <comment>sql editor</comment>
+ <translation>Utwórz widok z zapytania</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="374"/>
+ <source>Previous database</source>
+ <translation>Poprzednia baza danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="375"/>
+ <source>Next database</source>
+ <translation>Następna baza danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="378"/>
+ <source>Show next tab</source>
+ <comment>sql editor</comment>
+ <translation>Pokaż następną kartę</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="379"/>
+ <source>Show previous tab</source>
+ <comment>sql editor</comment>
+ <translation>Pokaż poprzednią kartę</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="380"/>
+ <source>Focus results below</source>
+ <comment>sql editor</comment>
+ <translation>Aktywuj wyniki poniżej</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="381"/>
+ <source>Focus SQL editor above</source>
+ <comment>sql editor</comment>
+ <translation>Aktywuj edytor SQL powyżej</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="455"/>
+ <source>Active database (%1/%2)</source>
+ <translation>Aktywna baza danych (%1/%2)</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="495"/>
+ <source>Query finished in %1 second(s). Rows affected: %2</source>
+ <translation>Zapytanie ukończone w %1 sekund(y). Liczba przetworzonych wierszy: %2</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="499"/>
+ <source>Query finished in %1 second(s).</source>
+ <translation>Zapytanie ukończone w %1 sekund(y).</translation>
+ </message>
+ <message>
+ <source>Query finished in %2 second(s).</source>
+ <translation type="obsolete">Zapytanie ukończone w %2 sekund(y).</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="601"/>
+ <source>Clear execution history</source>
+ <translation>Wymaż historię zapytań</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="601"/>
+ <source>Are you sure you want to erase the entire SQL execution history? This cannot be undone.</source>
+ <translation>Czy na pewno chcesz wymazać całą historię zapytań SQL? Tego nie można odwrócić.</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="613"/>
+ <source>Cannot export, because no export plugin is loaded.</source>
+ <translation>Nie można wyeksportować, ponieważ żadna wtyczka eksportu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="634"/>
+ <source>No database selected in the SQL editor. Cannot create a view for unknown database.</source>
+ <translation>Nie wybrano bazdy danych w edytorze SQL. Nie można utworzyć widoku dla nieznanej bazy.</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="664"/>
+ <source>Editor window &quot;%1&quot; has uncommited data.</source>
+ <translation>Okno edytora &quot;%1&quot; ma niezatwierdzone dane.</translation>
+ </message>
+</context>
+<context>
+ <name>ErrorsConfirmDialog</name>
+ <message>
+ <location filename="../dialogs/errorsconfirmdialog.ui" line="14"/>
+ <source>Errors</source>
+ <translation>Błędy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/errorsconfirmdialog.ui" line="20"/>
+ <source>Following errors occured:</source>
+ <translation>Wystąpiły następujące błędy:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/errorsconfirmdialog.ui" line="34"/>
+ <source>Would you like to proceed?</source>
+ <translation>Czy chcesz kontynuować?</translation>
+ </message>
+</context>
+<context>
+ <name>ExportDialog</name>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="14"/>
+ <source>Export</source>
+ <translation>Eksportuj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="21"/>
+ <source>What do you want to export?</source>
+ <translation>Co chcesz eksportować?</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="36"/>
+ <source>A database</source>
+ <translation>Bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="46"/>
+ <source>A single table</source>
+ <translation>Pojedynczą tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="53"/>
+ <source>Query results</source>
+ <translation>Wyniki zapytania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="65"/>
+ <source>Table to export</source>
+ <translation>Tabela do wyeksportowania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="100"/>
+ <source>Database</source>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="107"/>
+ <source>Table</source>
+ <translation>Tabela</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="124"/>
+ <source>Options</source>
+ <translation>Opcje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="130"/>
+ <source>When this option is unchecked, then only table DDL (CREATE TABLE statement) is exported.</source>
+ <translation>Gdy ta opcja jest odznaczona, to tylko DDL tabeli (zapytanie CREATE TABLE) jest eksportowane.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="133"/>
+ <source>Export table data</source>
+ <translation>Eksportuj dane tabeli</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="143"/>
+ <source>Export table indexes</source>
+ <translation>Eksportuj indeksy tabeli</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="153"/>
+ <source>Export table triggers</source>
+ <translation>Eksportuj wyzwalacze tabeli</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="175"/>
+ <source>Note, that exporting table indexes and triggers may be unsupported by some output formats.</source>
+ <translation>Zwróć uwagę, że eksportowanie indeksów i wyzwalaczy tabeli może nie być obsługiwane przez niektóre formaty wyjściowe.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="189"/>
+ <source>Select database objects to export</source>
+ <translation>Wybierz obiekty bazy danych do eksportu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="202"/>
+ <source>Export data from tables</source>
+ <translation>Eksportuj dane z tabel</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="212"/>
+ <source>Select all</source>
+ <translation>Zaznacz wszystko</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="219"/>
+ <source>Deselect all</source>
+ <translation>Odznacz wszystko</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="229"/>
+ <location filename="../dialogs/exportdialog.ui" line="249"/>
+ <source>Database:</source>
+ <translation>Baza danych:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="237"/>
+ <source>Query to export results for</source>
+ <translation>Zapytanie dla wyników do eksportu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="256"/>
+ <source>Query to be executed for results:</source>
+ <translation>Zapytanie, które należy wykonać dla wyników:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="264"/>
+ <source>Export format and options</source>
+ <translation>Format eksportu i opcje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="318"/>
+ <source>Export format</source>
+ <translation>Format eksportu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="330"/>
+ <source>Output</source>
+ <translation>Wyjście</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="336"/>
+ <source>Exported file path</source>
+ <translation>Ścieżka do wyeksportowanego pliku</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="343"/>
+ <source>Clipboard</source>
+ <translation>Schowek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="357"/>
+ <source>File</source>
+ <translation>Plik</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="382"/>
+ <source>Exported text encoding:</source>
+ <translation>Kodowanie wyeksportowanego tekstu:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="398"/>
+ <source>Export format options</source>
+ <translation>Opcje formatu eksportowania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="51"/>
+ <source>Cancel</source>
+ <translation>Anuluj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="141"/>
+ <location filename="../dialogs/exportdialog.cpp" line="165"/>
+ <location filename="../dialogs/exportdialog.cpp" line="188"/>
+ <source>Select database to export.</source>
+ <translation>Wybierz bazę do eksportu.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="142"/>
+ <source>Select table to export.</source>
+ <translation>Wybierz tabelę do eksportu.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="166"/>
+ <source>Enter valid query to export.</source>
+ <translation>Wprowadź poprawne zapytanie do eksportu.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="189"/>
+ <source>Select at least one object to export.</source>
+ <translation>Wybierz przynajmniej jeden obiekt do eksportu.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="212"/>
+ <source>You must provide a file name to export to.</source>
+ <translation>Musisz podać nazwę pliku do którego należy wyeksportować.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="219"/>
+ <source>Path you provided is an existing directory. You cannot overwrite it.</source>
+ <translation>Ścieżka którą podałeś jest istniejącym katalogiem. Nie można go nadpisać.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="225"/>
+ <source>The directory &apos;%1&apos; does not exist.</source>
+ <translation>Katalog &apos;%1&apos; nie istnieje.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="231"/>
+ <source>The file &apos;%1&apos; exists and will be overwritten.</source>
+ <translation>Plik &apos;%1&apos; istnieje i zostanie nadpisany.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="402"/>
+ <source>All files (*)</source>
+ <translation>Wszystkie pliki (*)</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="405"/>
+ <source>Pick file to export to</source>
+ <translation>Wybierz plik do eksportu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="694"/>
+ <source>Internal error during export. This is a bug. Please report it.</source>
+ <translation>Wystąpił wewnętrzny błąd podczas eksportu. To jest błąd programu. Proszę to zgłosić.</translation>
+ </message>
+</context>
+<context>
+ <name>FontEdit</name>
+ <message>
+ <location filename="../common/fontedit.cpp" line="61"/>
+ <source>Choose font</source>
+ <comment>font configuration</comment>
+ <translation>Wybierz czcionkę</translation>
+ </message>
+</context>
+<context>
+ <name>Form</name>
+ <message>
+ <location filename="../forms/sqlformatterplugin.ui" line="20"/>
+ <source>Active SQL formatter plugin</source>
+ <translation>Aktywna wtyczka formatera SQL</translation>
+ </message>
+</context>
+<context>
+ <name>FormView</name>
+ <message>
+ <location filename="../formview.cpp" line="253"/>
+ <source>Commit row</source>
+ <comment>form view</comment>
+ <translation>Zatwierdź wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="254"/>
+ <source>Rollback row</source>
+ <comment>form view</comment>
+ <translation>Wycofaj wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="255"/>
+ <source>First row</source>
+ <comment>form view</comment>
+ <translation>Pierwszy wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="256"/>
+ <source>Previous row</source>
+ <comment>form view</comment>
+ <translation>Poprzedni wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="257"/>
+ <source>Next row</source>
+ <comment>form view</comment>
+ <translation>Następny wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="258"/>
+ <source>Last row</source>
+ <comment>form view</comment>
+ <translation>Ostatni wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="259"/>
+ <source>Insert new row</source>
+ <comment>form view</comment>
+ <translation>Wstaw nowy wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="260"/>
+ <source>Delete current row</source>
+ <comment>form view</comment>
+ <translation>Usuń bieżący wiersz</translation>
+ </message>
+</context>
+<context>
+ <name>FunctionsEditor</name>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="81"/>
+ <source>Filter funtions</source>
+ <translation>Filtruj funkcje</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="151"/>
+ <source>Function name:</source>
+ <translation>Nazwa funkcji:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="161"/>
+ <source>Implementation language:</source>
+ <translation>Język implementacji:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="171"/>
+ <source>Type:</source>
+ <translation>Typ:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="187"/>
+ <source>Input arguments</source>
+ <translation>Argumenty wejściowe</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="193"/>
+ <source>Undefined</source>
+ <translation>Niezdefiniowane</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="235"/>
+ <source>Databases</source>
+ <translation>Bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="241"/>
+ <source>Register in all databases</source>
+ <translation>Zarejestruj we wszystkich bazach danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="248"/>
+ <source>Register in following databases:</source>
+ <translation>Zarejestruj w następujących bazach danych:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="278"/>
+ <source>Initialization code:</source>
+ <translation>Kod inicjalizacji:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="294"/>
+ <location filename="../windows/functionseditor.cpp" line="426"/>
+ <source>Function implementation code:</source>
+ <translation>Kod implementacji funkcji:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="310"/>
+ <source>Final step implementation code:</source>
+ <translation>Kod implementacji ostatniego kroku:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="54"/>
+ <source>SQL function editor</source>
+ <translation>Edytor funkcji SQL</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="59"/>
+ <source>Commit all function changes</source>
+ <translation>Zatwierdź zmiany we wszystkich funkcjach</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="60"/>
+ <source>Rollback all function changes</source>
+ <translation>Wycofaj zmiany we wszystkich funkcjach</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="62"/>
+ <source>Create new function</source>
+ <translation>Utwórz nową funkcję</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="63"/>
+ <source>Delete selected function</source>
+ <translation>Usuń wybraną funkcję</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="65"/>
+ <source>Custom SQL functions manual</source>
+ <translation>Podręcznik własnych funkcji SQL</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="68"/>
+ <source>Add function argument</source>
+ <translation>Dodaj argument funkcji</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="69"/>
+ <source>Rename function argument</source>
+ <translation>Zmień nazwę argumentu funkcji</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="70"/>
+ <source>Delete function argument</source>
+ <translation>Usuń argument funkcji</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="72"/>
+ <source>Move function argument up</source>
+ <translation>Przesuń argument funkcji w górę</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="73"/>
+ <source>Move function argument down</source>
+ <translation>Przesuń argument funkcji w dół</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="111"/>
+ <source>Scalar</source>
+ <translation>Skalarna</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="112"/>
+ <source>Aggregate</source>
+ <translation>Agregacyjna</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="410"/>
+ <source>Enter a non-empty, unique name of the function.</source>
+ <translation>Wprowadź niepustą, unikalną nazwę funkcji</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="422"/>
+ <source>Pick the implementation language.</source>
+ <translation>Wybierz język implementacji.</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="426"/>
+ <source>Per step code:</source>
+ <translation>Kod pojedynczego kroku:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="432"/>
+ <source>Enter a non-empty implementation code.</source>
+ <translation>Wprowadź niepusty kod implementacji.</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="505"/>
+ <source>argument</source>
+ <comment>new function argument name in function editor window</comment>
+ <translation>argument</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="631"/>
+ <source>Functions editor window has uncommited modifications.</source>
+ <translation>Okno edytora funkcji ma niezatwierdzone zmiany.</translation>
+ </message>
+</context>
+<context>
+ <name>ImportDialog</name>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="14"/>
+ <source>Import data</source>
+ <translation>Importuj dane</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="21"/>
+ <source>Table to import to</source>
+ <translation>Tabela do której należy importować</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="36"/>
+ <source>Table</source>
+ <translation>Tabela</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="43"/>
+ <source>Database</source>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="84"/>
+ <source>Data source to import from</source>
+ <translation>Źródło danych z którego należy importować</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="129"/>
+ <source>Data source type</source>
+ <translation>Typ źródła danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="141"/>
+ <source>Options</source>
+ <translation>OOpcje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="147"/>
+ <source>Input file:</source>
+ <translation>Plik wejściowy:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="182"/>
+ <source>Text encoding:</source>
+ <translation>Kodowanie tekstu:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="195"/>
+ <source>Data source options</source>
+ <translation>Opcje źródła danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="71"/>
+ <source>Cancel</source>
+ <translation>Anuluj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="101"/>
+ <source>If you type table name that doesn&apos;t exist, it will be created.</source>
+ <translation>Jeśli wpiszesz nazwę tabeli, która nie istnieje, to zostanie ona stworzona.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="101"/>
+ <source>Enter the table name</source>
+ <translation>Wprowadź nazwę tabeli</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="119"/>
+ <source>Select import plugin.</source>
+ <translation>Wybierz wtyczkę importu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="128"/>
+ <source>You must provide a file to import from.</source>
+ <translation>Musisz podać plik z którego należy zaimportować.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="135"/>
+ <source>The file &apos;%1&apos; does not exist.</source>
+ <translation>Plik &apos;%1&apos; nie istnieje.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="141"/>
+ <source>Path you provided is a directory. A regular file is required.</source>
+ <translation>Ścieżka którą podałeś jest katalogiem. Wymagany jest zwykły plik.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="325"/>
+ <source>Pick file to import from</source>
+ <translation>Wybierz plik do importu</translation>
+ </message>
+</context>
+<context>
+ <name>IndexDialog</name>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="20"/>
+ <location filename="../dialogs/indexdialog.ui" line="30"/>
+ <source>Index</source>
+ <translation>Indeks</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="36"/>
+ <source>On table:</source>
+ <translation>Na tabeli:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="43"/>
+ <source>Index name:</source>
+ <translation>Nazwa indeksu:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="50"/>
+ <source>Partial index condition</source>
+ <translation>Warunek indeksu częściowego:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="67"/>
+ <source>Unique index</source>
+ <translation>Indeks unikalny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="90"/>
+ <source>Column</source>
+ <translation>Kolumna</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="95"/>
+ <source>Collation</source>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="100"/>
+ <source>Sort</source>
+ <translation>Sortowanie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="115"/>
+ <source>DDL</source>
+ <translation>DDL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="65"/>
+ <source>Tried to open index dialog for closed or inexisting database.</source>
+ <translation>Próbowano otworzyć okno indeksu dla zamkniętej lub nieistniejącej bazy.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="131"/>
+ <source>Could not process index %1 correctly. Unable to open an index dialog.</source>
+ <translation>Nie udało się przetworzyć poprawnie indeksu %1. Nie można otworzyć okna indeksu.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="185"/>
+ <source>Pick the table for the index.</source>
+ <translation>Wybierz tabelę dla indeksu.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="186"/>
+ <source>Select at least one column.</source>
+ <translation>Zaznacz przynajmniej jedną kolumnę.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="187"/>
+ <source>Enter a valid condition.</source>
+ <translation>Wprowadź poprawny warunek.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="236"/>
+ <source>default</source>
+ <comment>index dialog</comment>
+ <translation>domyślne</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="247"/>
+ <source>Sort order</source>
+ <comment>table constraints</comment>
+ <translation>Kierunek sortowania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="452"/>
+ <location filename="../dialogs/indexdialog.cpp" line="465"/>
+ <source>Error</source>
+ <comment>index dialog</comment>
+ <translation>Błąd</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="453"/>
+ <source>Cannot create unique index, because values in selected columns are not unique. Would you like to execute SELECT query to see problematic values?</source>
+ <translation>Nie można utworzyć indeksu, ponieważ wartości w wybranych kolumnach nie są unikalne. Czy chcesz wykonać zapytanie SELECT, aby zobaczyć wartości stwarzające problem?</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="465"/>
+ <source>An error occurred while executing SQL statements:
+%1</source>
+ <translation>Wystąpił błąd podczas wykonywania zapytań SQL:
+%1</translation>
+ </message>
+</context>
+<context>
+ <name>LanguageDialog</name>
+ <message>
+ <location filename="../dialogs/languagedialog.ui" line="14"/>
+ <source>Language</source>
+ <translation>Język</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/languagedialog.ui" line="20"/>
+ <source>Please choose language:</source>
+ <translation>Proszę wybrać język:</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <location filename="../mainwindow.ui" line="66"/>
+ <source>Database toolbar</source>
+ <translation>Pasek narzędzi baz danych</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.ui" line="77"/>
+ <source>Structure toolbar</source>
+ <translation>Pasek narzędzi struktury</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.ui" line="88"/>
+ <source>Tools</source>
+ <translation>Narzędzia</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.ui" line="105"/>
+ <source>Window list</source>
+ <translation>Lista okien</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.ui" line="119"/>
+ <source>View toolbar</source>
+ <translation>Pasek narzędzi widoku</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="104"/>
+ <source>Configuration widgets</source>
+ <translation>Kontrolki konfiguracji</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="105"/>
+ <source>Syntax highlighting engines</source>
+ <translation>Silniki podświetlania składni</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="106"/>
+ <source>Data editors</source>
+ <translation>Edytory danych</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="118"/>
+ <source>Running in debug mode. Press %1 or use &apos;Help / Open debug console&apos; menu entry to open the debug console.</source>
+ <translation>Uruchomiono tryb debugowania. Wciśnij %1 lub wybierz menu &apos;Pomoc / Otwórz konsolę debugowania&apos; aby otworzyć konsolę debugowania.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="120"/>
+ <source>Running in debug mode. Debug messages are printed to the standard output.</source>
+ <translation>Uruchomiono tryb debugowania. Wiadomości debugujące są wyświetlane na standardowym wyjściu.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="202"/>
+ <source>You need to restart application to make the language change take effect.</source>
+ <translation>Należy zrestartować aplikację, aby nastąpiła zmiana języka.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="245"/>
+ <source>Open SQL editor</source>
+ <translation>Otwórz edytor SQL</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="246"/>
+ <source>Open DDL history</source>
+ <translation>Otwórz historię DDL</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="247"/>
+ <source>Open SQL functions editor</source>
+ <translation>Otwórz edytor funkcji SQL</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="248"/>
+ <source>Open collations editor</source>
+ <translation>Otwórz edytor zestawień</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="249"/>
+ <source>Import</source>
+ <translation>Importuj</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="250"/>
+ <source>Export</source>
+ <translation>Eksportuj</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="252"/>
+ <source>Open configuration dialog</source>
+ <translation>Otwórz okno konfiguracji</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="254"/>
+ <source>Tile windows</source>
+ <translation>Ustaw okna w płytki</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="255"/>
+ <source>Tile windows horizontally</source>
+ <translation>Ustaw okno poziomo</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="256"/>
+ <source>Tile windows vertically</source>
+ <translation>Ustaw okna pionowo</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="257"/>
+ <source>Cascade windows</source>
+ <translation>Ustaw okna caskadowo</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="258"/>
+ <source>Next window</source>
+ <translation>Następne okno</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="259"/>
+ <source>Previous window</source>
+ <translation>Poprzednie okno</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="260"/>
+ <source>Hide status field</source>
+ <translation>Ukryj pole statusu</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="262"/>
+ <source>Close selected window</source>
+ <translation>Zamknij wybrane okno</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="263"/>
+ <source>Close all windows but selected</source>
+ <translation>Zamknij wszystkie okna, oprócz wybranego</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="264"/>
+ <source>Close all windows</source>
+ <translation>Zamknij wszystkie okna</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="265"/>
+ <source>Restore recently closed window</source>
+ <translation>Przywróć ostatnio zamknięte okno</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="266"/>
+ <source>Rename selected window</source>
+ <translation>Zmień nazwę wybranego okna</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="268"/>
+ <source>Open Debug Console</source>
+ <translation>Otwórz Konsolę Debugowania</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="269"/>
+ <source>Report a bug</source>
+ <translation>Zgłoś błąd</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="270"/>
+ <source>Propose a new feature</source>
+ <translation>Zgłoś pomysł</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="271"/>
+ <source>About</source>
+ <translation>O programie</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="272"/>
+ <source>Licenses</source>
+ <translation>Licencje</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="273"/>
+ <source>Open home page</source>
+ <translation>Otwórz stronę domową</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="274"/>
+ <source>Open forum page</source>
+ <translation>Otwórz stronę forum</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="275"/>
+ <source>User Manual</source>
+ <translation>Podręcznik Użytkownika</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="276"/>
+ <source>SQLite documentation</source>
+ <translation>Dokumentacja SQLite</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="277"/>
+ <source>Report history</source>
+ <translation>Historia zgłoszeń</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="278"/>
+ <source>Check for updates</source>
+ <translation>Sprawdź aktualizacje</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="315"/>
+ <source>Database</source>
+ <comment>menubar</comment>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="335"/>
+ <source>Structure</source>
+ <comment>menubar</comment>
+ <translation>Struktura</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="356"/>
+ <source>View</source>
+ <comment>menubar</comment>
+ <translation>Widok</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="360"/>
+ <source>Window list</source>
+ <comment>menubar view menu</comment>
+ <translation>Lista okien</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="381"/>
+ <source>Tools</source>
+ <comment>menubar</comment>
+ <translation>Narzędzia</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="395"/>
+ <source>Help</source>
+ <translation>Pomoc</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="549"/>
+ <source>Could not set style: %1</source>
+ <comment>main window</comment>
+ <translation>Nie udało się ustawić stylu: %1</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="621"/>
+ <source>Cannot export, because no export plugin is loaded.</source>
+ <translation>Nie można wyeksportować, ponieważ żadna wtyczka eksportu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="633"/>
+ <source>Cannot import, because no import plugin is loaded.</source>
+ <translation>Nie można zaimportować, ponieważ żadna wtyczka importu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="662"/>
+ <source>Rename window</source>
+ <translation>Zmień nazwę okna</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="662"/>
+ <source>Enter new name for the window:</source>
+ <translation>Wprowadź nową nazwę dla okna:</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="730"/>
+ <source>New updates are available. &lt;a href=&quot;%1&quot;&gt;Click here for details&lt;/a&gt;.</source>
+ <translation>Nowe aktualizacje są dostępne: &lt;a href=&quot;%1&quot;&gt;Kliknij aby poznać szczegóły&lt;/a&gt;.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="738"/>
+ <source>You&apos;re running the most recent version. No updates are available.</source>
+ <translation>Uruchomiona jest najnowsza wersja. Nie ma dostępnych aktualizacji.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="837"/>
+ <source>Database passed in command line parameters (%1) has been temporarily added to the list under name: %2</source>
+ <translation>Baza danych podana w linii poleceń (%1) jest tymczasowo dodana do listy pod nazwą: %2</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="842"/>
+ <source>Could not add database %1 to list.</source>
+ <translation>Nie udało się dodać bazy danych %1 do listy.</translation>
+ </message>
+</context>
+<context>
+ <name>MdiWindow</name>
+ <message>
+ <location filename="../mdiwindow.cpp" line="190"/>
+ <source>Uncommited changes</source>
+ <translation>Niezatwierdzone dane</translation>
+ </message>
+ <message>
+ <location filename="../mdiwindow.cpp" line="195"/>
+ <source>Close anyway</source>
+ <translation>Zamknij mimo to</translation>
+ </message>
+ <message>
+ <location filename="../mdiwindow.cpp" line="197"/>
+ <source>Don&apos;t close</source>
+ <translation>Nie zamykaj</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditor</name>
+ <message>
+ <location filename="../multieditor/multieditor.cpp" line="53"/>
+ <source>Null value</source>
+ <comment>multieditor</comment>
+ <translation>Wartość null</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditor.cpp" line="68"/>
+ <source>Configure editors for this data type</source>
+ <translation>Skonfiguruj edytory dla tego typu danych</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditor.cpp" line="271"/>
+ <source>Data editor plugin &apos;%1&apos; not loaded, while it is defined for editing &apos;%1&apos; data type.</source>
+ <translation>Wtyczka edytora danych &apos;%1&apos; nie jest załadowana, podczas gdy jest ona zdefiniowana do edycji typu danych &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditor.cpp" line="356"/>
+ <source>Deleted</source>
+ <comment>multieditor</comment>
+ <translation>Usunięto</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditor.cpp" line="358"/>
+ <source>Read only</source>
+ <comment>multieditor</comment>
+ <translation>Tylko do odczytu</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorBool</name>
+ <message>
+ <location filename="../multieditor/multieditorbool.cpp" line="130"/>
+ <source>Boolean</source>
+ <translation>Logiczna</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorDate</name>
+ <message>
+ <location filename="../multieditor/multieditordate.cpp" line="14"/>
+ <source>Date</source>
+ <translation>Data</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorDateTime</name>
+ <message>
+ <location filename="../multieditor/multieditordatetime.cpp" line="181"/>
+ <source>Date &amp; time</source>
+ <translation>Data i czas</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorHex</name>
+ <message>
+ <location filename="../multieditor/multieditorhex.cpp" line="39"/>
+ <source>Hex</source>
+ <translation>Heks</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorNumeric</name>
+ <message>
+ <source>Number</source>
+ <translation type="obsolete">Liczba</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditornumeric.cpp" line="36"/>
+ <source>Number</source>
+ <comment>numeric multi editor tab name</comment>
+ <translation>Liczba</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorText</name>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="45"/>
+ <source>Text</source>
+ <translation>Tekst</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="106"/>
+ <source>Tab changes focus</source>
+ <translation>Tabulator zmienia aktywność</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="107"/>
+ <source>Cut</source>
+ <translation>Wytnij</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="108"/>
+ <source>Copy</source>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="109"/>
+ <source>Paste</source>
+ <translation>Wklej</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="110"/>
+ <source>Delete</source>
+ <translation>Usuń</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="111"/>
+ <source>Undo</source>
+ <translation>Cofnij</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="112"/>
+ <source>Redo</source>
+ <translation>Przywróć</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorTime</name>
+ <message>
+ <location filename="../multieditor/multieditortime.cpp" line="16"/>
+ <source>Time</source>
+ <translation>Czas</translation>
+ </message>
+</context>
+<context>
+ <name>NewConstraintDialog</name>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.ui" line="20"/>
+ <source>New constraint</source>
+ <translation>Nowe ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="87"/>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="97"/>
+ <source>Primary Key</source>
+ <comment>new constraint dialog</comment>
+ <translation>Klucz główny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="89"/>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="99"/>
+ <source>Foreign Key</source>
+ <comment>new constraint dialog</comment>
+ <translation>Klucz obcy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="91"/>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="101"/>
+ <source>Unique</source>
+ <comment>new constraint dialog</comment>
+ <translation>Wartości unikalne</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="92"/>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="102"/>
+ <source>Check</source>
+ <comment>new constraint dialog</comment>
+ <translation>Warunek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="103"/>
+ <source>Not NULL</source>
+ <comment>new constraint dialog</comment>
+ <translation>Niepuste</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="105"/>
+ <source>Collate</source>
+ <comment>new constraint dialog</comment>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="107"/>
+ <source>Default</source>
+ <comment>new constraint dialog</comment>
+ <translation>Wartość domyślna</translation>
+ </message>
+</context>
+<context>
+ <name>NewVersionDialog</name>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="14"/>
+ <source>SQLiteStudio updates</source>
+ <translation>Aktualizacje SQLiteStudio</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="26"/>
+ <source>New updates are available!</source>
+ <translation>Dostępne są nowe aktualizacje!</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="70"/>
+ <source>Component</source>
+ <translation>Komponent</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="75"/>
+ <source>Current version</source>
+ <translation>Obecna wersja</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="80"/>
+ <source>Update version</source>
+ <translation>Wersja aktualizacji</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="91"/>
+ <source>Check for updates on startup</source>
+ <translation>Sprawdzaj aktualizacje na starcie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="101"/>
+ <source>Update to new version!</source>
+ <translation>Aktualizuj do nowej wersji!</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="114"/>
+ <source>The update will be automatically downloaded and installed. This will also restart application at the end.</source>
+ <translation>Aktualizacja będzie pobrana i zainstalowana automatycznie. Spowoduje to również na końcu restart aplikacji.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="121"/>
+ <source>Not now.</source>
+ <translation>Nie teraz.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="134"/>
+ <source>Don&apos;t install the update and close this window.</source>
+ <translation>Nie instaluj aktualizacji i zamknij to okno.</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConfigDialog</name>
+ <message>
+ <location filename="../dialogs/populateconfigdialog.ui" line="14"/>
+ <source>Populating configuration</source>
+ <translation>Konfiguracja zaludniania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populateconfigdialog.cpp" line="54"/>
+ <source>Configuring &lt;b&gt;%1&lt;/b&gt; for column &lt;b&gt;%2&lt;/b&gt;</source>
+ <translation>Konfigurowanie &lt;b&gt;%1&lt;/b&gt; dla kolumny &lt;b&gt;%2&lt;/b&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDialog</name>
+ <message>
+ <location filename="../dialogs/populatedialog.ui" line="14"/>
+ <source>Populate table</source>
+ <translation>Zaludnij tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.ui" line="26"/>
+ <source>Database</source>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.ui" line="44"/>
+ <source>Table</source>
+ <translation>Tabela</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.ui" line="72"/>
+ <source>Columns</source>
+ <translation>Kolumny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.ui" line="102"/>
+ <source>Number of rows to populate:</source>
+ <translation>Liczba wierszy do zaludnienia:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.cpp" line="42"/>
+ <source>Populate</source>
+ <comment>populate dialog button</comment>
+ <translation>Zaludnij</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.cpp" line="158"/>
+ <source>Configure</source>
+ <translation>Konfiguruj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.cpp" line="256"/>
+ <source>Populating configuration for this column is invalid or incomplete.</source>
+ <translation>Konfiguracja zaludniania dla tej kolumny jest niepoprawna lub niekompletna.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.cpp" line="287"/>
+ <source>Select database with table to populate</source>
+ <translation>Wybierz bazę danych z tabelą do zaludnienia</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.cpp" line="288"/>
+ <source>Select table to populate</source>
+ <translation>Wybierz tabelę do zaludnienia</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.cpp" line="289"/>
+ <source>You have to select at least one column.</source>
+ <translation>Musisz zaznaczyć przynajmniej jedną kolumnę.</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="69"/>
+ <source>The query execution mechanism had problems with extracting ROWID&apos;s properly. This might be a bug in the application. You may want to report this.</source>
+ <translation>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ć.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="71"/>
+ <source>Requested column is a result of SQL expression, instead of a simple column selection. Such columns cannot be edited.</source>
+ <translation>Ta kolumna jest wynikiem wyrażenia SQL, a nie zwykłej selekcji kolumny. Takie kolumny nie mogą być edytowane.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="73"/>
+ <source>Requested column belongs to restricted SQLite table. Those tables cannot be edited directly.</source>
+ <translation>Ta kolumna należy do systemowej tabeli SQLite. Te tabele nie mogą być edytowane bezpośrednio.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="66"/>
+ <source>Cannot edit columns that are result of compound %1 statements (one that includes %2, %3 or %4 keywords).</source>
+ <translation>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).</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="75"/>
+ <source>Cannot edit results of query other than %1.</source>
+ <translation>Nie można edytować wyników zapytania innego niż %1.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="77"/>
+ <source>Cannot edit columns that are result of aggregated %1 statements.</source>
+ <translation>Nie można edytować kolumn, które są wynikiem zapytania agregacyjnego %1.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="79"/>
+ <source>Cannot edit columns that are result of %1 statement.</source>
+ <translation>Nie można edytować kolumn, które są wynikiem zapytania %1.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="81"/>
+ <source>Cannot edit columns that are result of common table expression statement (%1).</source>
+ <translation>Nie można edytować kolumn, które są wynikiem zapytania ze wspólnym wyrażeniem tabeli (%1).</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="353"/>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="389"/>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="407"/>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="443"/>
+ <source>on conflict: %1</source>
+ <comment>data view tooltip</comment>
+ <translation>w razie konfliktu: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="373"/>
+ <source>references table %1, column %2</source>
+ <comment>data view tooltip</comment>
+ <translation>odwołuje się do tabeli %1, kolumny %2</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="440"/>
+ <source>condition: %1</source>
+ <comment>data view tooltip</comment>
+ <translation>warunek: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="460"/>
+ <source>collation name: %1</source>
+ <comment>data view tooltip</comment>
+ <translation>nazwa zestawienia: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="19"/>
+ <source>Data grid view</source>
+ <translation>Widok siatki danych</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="20"/>
+ <source>Copy cell(s) contents to clipboard</source>
+ <translation>Skopiuj zawartość komórek do schowka.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="22"/>
+ <source>Paste cell(s) contents from clipboard</source>
+ <translation>Wklej zawartość komórkek ze schowka.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="24"/>
+ <source>Set empty value to selected cell(s)</source>
+ <translation>Ustaw pustą wartość dla wybranych komórek</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="25"/>
+ <source>Set NULL value to selected cell(s)</source>
+ <translation>Ustaw wartość NULL dla wybranych komórek</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="26"/>
+ <source>Commit changes to cell(s) contents</source>
+ <translation>Zatwierdź zmiany dla zawartości komórek</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="27"/>
+ <source>Rollback changes to cell(s) contents</source>
+ <translation>Wycofaj zmiany dla zawartości komórek</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="28"/>
+ <source>Delete selected data row</source>
+ <translation>Usuń wybrane wiersze danych</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="29"/>
+ <source>Insert new data row</source>
+ <translation>Wstaw nowy wiersz danych</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="30"/>
+ <source>Open contents of selected cell in a separate editor</source>
+ <translation>Otwórz zawartość wybranej komórki w osobnym edytorze</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="487"/>
+ <source>Total pages available: %1</source>
+ <translation>Liczba dostępnych stron: %1</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="497"/>
+ <source>Total rows loaded: %1</source>
+ <translation>Liczba załadowanych wierszy: %1</translation>
+ </message>
+ <message>
+ <location filename="../dataview.h" line="17"/>
+ <source>Data view (both grid and form)</source>
+ <translation>Widok danych (zarówno siatki i formularza)</translation>
+ </message>
+ <message>
+ <location filename="../dataview.h" line="18"/>
+ <source>Refresh data</source>
+ <translation>Odśwież dane</translation>
+ </message>
+ <message>
+ <location filename="../dataview.h" line="19"/>
+ <source>Switch to grid view of the data</source>
+ <translation>Przełącz do widoku siatki danych</translation>
+ </message>
+ <message>
+ <location filename="../dataview.h" line="20"/>
+ <source>Switch to form view of the data</source>
+ <translation>Przełącz do widoku formularza danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="26"/>
+ <source>Database list</source>
+ <translation>Lista baz</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="27"/>
+ <source>Delete selected item</source>
+ <translation>Usuń zaznaczony element</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="28"/>
+ <source>Clear filter contents</source>
+ <translation>Wyczyść zawartość filtra</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="29"/>
+ <source>Refresh schema</source>
+ <translation>Odśwież schemat</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="30"/>
+ <source>Refresh all schemas</source>
+ <translation>Odśwież wszystkie schematy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="31"/>
+ <source>Add database</source>
+ <translation>Dodaj bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="32"/>
+ <source>Select all items</source>
+ <translation>Zaznacz wszystkie elementy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="33"/>
+ <source>Copy selected item(s)</source>
+ <translation>Kopiuj zaznaczone elementy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="34"/>
+ <location filename="../multieditor/multieditortext.h" line="15"/>
+ <location filename="../sqleditor.h" line="24"/>
+ <source>Paste from clipboard</source>
+ <translation>Wklej ze schowka</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemfactory.cpp" line="47"/>
+ <source>Tables</source>
+ <translation>Tabele</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemfactory.cpp" line="52"/>
+ <source>Indexes</source>
+ <translation>Indeksy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemfactory.cpp" line="57"/>
+ <source>Triggers</source>
+ <translation>Wyzwalacze</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemfactory.cpp" line="62"/>
+ <source>Views</source>
+ <translation>Widoki</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemfactory.cpp" line="67"/>
+ <source>Columns</source>
+ <translation>Kolumny</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="16"/>
+ <source>Data form view</source>
+ <translation>Widok formularza danych</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="17"/>
+ <source>Commit changes for current row</source>
+ <translation>Zatawierdź zmiany dla bieżącego wiersza</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="18"/>
+ <source>Rollback changes for current row</source>
+ <translation>Wycofaj zmiany dla bieżącego wiersza</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="19"/>
+ <source>Go to first row on current page</source>
+ <translation>Przejdź do pierwszego wiersza na bieżącej stronie</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="20"/>
+ <source>Go to next row</source>
+ <translation>Przejdź do następnego wiersza</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="21"/>
+ <source>Go to previous row</source>
+ <translation>Przejdź do poprzedniego wiersza</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="22"/>
+ <source>Go to last row on current page</source>
+ <translation>Przejdź do ostatniego wiersza na bieżącej stronie</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="23"/>
+ <source>Insert new row</source>
+ <translation>Wstaw nowy wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="24"/>
+ <source>Delete current row</source>
+ <translation>Usuń bieżący wiersz</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="42"/>
+ <source>Main window</source>
+ <translation>Okno główne</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="43"/>
+ <source>Open SQL editor</source>
+ <translation>Otwórz edytor SQL</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="44"/>
+ <source>Previous window</source>
+ <translation>Poprzednie okno</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="45"/>
+ <source>Next window</source>
+ <translation>Następne okno</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="46"/>
+ <source>Hide status area</source>
+ <translation>Ukryj pole statusu</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="47"/>
+ <source>Open configuration dialog</source>
+ <translation>Otwórz okno konfiguracji</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="48"/>
+ <source>Open Debug Console</source>
+ <translation>Otwórz Konsolę Debugowania</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.h" line="12"/>
+ <source>Cell text value editor</source>
+ <translation>Edytor tekstowy wartości komórki</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.h" line="13"/>
+ <location filename="../sqleditor.h" line="22"/>
+ <source>Cut selected text</source>
+ <translation>Wytnij wybrany tekst</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.h" line="14"/>
+ <location filename="../sqleditor.h" line="23"/>
+ <source>Copy selected text</source>
+ <translation>Skopiuj wybrany tekst</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.h" line="16"/>
+ <location filename="../sqleditor.h" line="25"/>
+ <source>Delete selected text</source>
+ <translation>Usuń wybrany tekst</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.h" line="17"/>
+ <location filename="../sqleditor.h" line="27"/>
+ <source>Undo</source>
+ <translation>Cofnij</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.h" line="18"/>
+ <location filename="../sqleditor.h" line="28"/>
+ <source>Redo</source>
+ <translation>Przywróć</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="21"/>
+ <source>SQL editor input field</source>
+ <translation>Pole wprowadzania edytora SQL</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="26"/>
+ <source>Select whole editor contents</source>
+ <translation>Zaznacz całą zawartość edytora</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="29"/>
+ <source>Save contents into a file</source>
+ <translation>Zapisz zawartość do pliku</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="30"/>
+ <source>Load contents from a file</source>
+ <translation>Wczytaj zawartość z pliku</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="31"/>
+ <source>Find in text</source>
+ <translation>Znajdź w tekście</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="32"/>
+ <source>Find next</source>
+ <translation>Znajdź następny</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="33"/>
+ <source>Find previous</source>
+ <translation>Znajdź poprzedni</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="34"/>
+ <source>Replace in text</source>
+ <translation>Zmień w tekście</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="35"/>
+ <source>Delete current line</source>
+ <translation>Usuń bieżącą linię</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="36"/>
+ <source>Request code assistant</source>
+ <translation>Wywołaj asystenta kodu</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="37"/>
+ <source>Format contents</source>
+ <translation>Formatuj zawartość</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="38"/>
+ <source>Move selected block of text one line down</source>
+ <translation>Przenieś wybrany blok tekstu o jedną linię w dół</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="39"/>
+ <source>Move selected block of text one line up</source>
+ <translation>Przenieś wybrany blok tekstu o jedną linię w górę</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="40"/>
+ <source>Copy selected block of text and paste it a line below</source>
+ <translation>Skopiuj wybrany blok tekstu i wklej go poniżej</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="41"/>
+ <source>Copy selected block of text and paste it a line above</source>
+ <translation>Skopiuj wybrany blok tekstu i wklej go powyżej</translation>
+ </message>
+ <message>
+ <location filename="../uiutils.cpp" line="32"/>
+ <source>All SQLite databases</source>
+ <translation>Wszystkie bazy danych SQLite</translation>
+ </message>
+ <message>
+ <location filename="../uiutils.cpp" line="35"/>
+ <source>All files</source>
+ <translation>Wszystkie pliki</translation>
+ </message>
+ <message>
+ <location filename="../uiutils.cpp" line="38"/>
+ <source>Database file</source>
+ <translation>Plik bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.h" line="11"/>
+ <source>Reports history window</source>
+ <translation>Okno history zgłoszeń</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.h" line="12"/>
+ <source>Delete selected entry</source>
+ <translation>Usuń wybraną pozycję</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="26"/>
+ <source>SQL editor window</source>
+ <translation>Okno edytora SQL</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="27"/>
+ <source>Execute query</source>
+ <translation>Wykonaj zapytanie</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="28"/>
+ <source>Execute &quot;%1&quot; query</source>
+ <translation>Wykonaj zapytanie &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="29"/>
+ <source>Switch current working database to previous on the list</source>
+ <translation>Zmień roboczą bazę danych na poprzednią z listy</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="30"/>
+ <source>Switch current working database to next on the list</source>
+ <translation>Zmień roboczą bazę danych na następną z listy</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="31"/>
+ <source>Go to next editor tab</source>
+ <translation>Przejdź do następnej karty edytora</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="32"/>
+ <source>Go to previous editor tab</source>
+ <translation>Przejdź do poprzedniej karty edytora</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="33"/>
+ <source>Move keyboard input focus to the results view below</source>
+ <translation>Przenieś aktywność klawiatury do widoku wyników poniżej</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="34"/>
+ <source>Move keyboard input focus to the SQL editor above</source>
+ <translation>Przenieś aktywność klawiatury do edytora SQL powyżej</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="30"/>
+ <source>Table window</source>
+ <translation>Okno tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="31"/>
+ <source>Refresh table structure</source>
+ <translation>Odśwież strukturę tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="32"/>
+ <source>Add new column</source>
+ <translation>Dodaj nową kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="33"/>
+ <source>Edit selected column</source>
+ <translation>Edytuj wybraną kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="34"/>
+ <source>Delete selected column</source>
+ <translation>Usuń wybraną kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="35"/>
+ <source>Export table data</source>
+ <translation>Eksportuj dane tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="36"/>
+ <source>Import data to the table</source>
+ <translation>Importuj dane do tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="37"/>
+ <source>Add new table constraint</source>
+ <translation>Dodaj nowe ograniczenie tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="38"/>
+ <source>Edit selected table constraint</source>
+ <translation>Edytuj wybrane ograniczenie tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="39"/>
+ <source>Delete selected table constraint</source>
+ <translation>Usuń wybrane ograniczenie tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="40"/>
+ <source>Refresh table index list</source>
+ <translation>Odśwież listę indeksów tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="41"/>
+ <source>Add new index</source>
+ <translation>Dodaj nowy indeks</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="42"/>
+ <source>Edit selected index</source>
+ <translation>Edytuj wybrany indeks</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="43"/>
+ <source>Delete selected index</source>
+ <translation>Usuń wybrany indeks</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="44"/>
+ <source>Refresh table trigger list</source>
+ <translation>Odśwież listę wyzwalaczy tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="45"/>
+ <location filename="../windows/viewwindow.h" line="25"/>
+ <source>Add new trigger</source>
+ <translation>Dodaj nowy wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="46"/>
+ <location filename="../windows/viewwindow.h" line="26"/>
+ <source>Edit selected trigger</source>
+ <translation>Edytuj wybrany wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="47"/>
+ <location filename="../windows/viewwindow.h" line="27"/>
+ <source>Delete selected trigger</source>
+ <translation>Usuń wybrany wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="48"/>
+ <location filename="../windows/viewwindow.h" line="28"/>
+ <source>Go to next tab</source>
+ <translation>Przejdź do następnej karty</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="49"/>
+ <location filename="../windows/viewwindow.h" line="29"/>
+ <source>Go to previous tab</source>
+ <translation>Przejdź do poprzedniej karty</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.h" line="23"/>
+ <source>A view window</source>
+ <translation>Okno widoku</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.h" line="24"/>
+ <source>Refresh view trigger list</source>
+ <translation>Odśwież listę wizwalaczy widoku</translation>
+ </message>
+</context>
+<context>
+ <name>QuitConfirmDialog</name>
+ <message>
+ <location filename="../dialogs/quitconfirmdialog.ui" line="14"/>
+ <source>Uncommited changes</source>
+ <translation>Niezatwierdzone dane</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/quitconfirmdialog.ui" line="20"/>
+ <source>Are you sure you want to quit the application?
+
+Following items are pending:</source>
+ <translation>Czy na pewno chcesz zamknąć aplikację?
+
+Następujące elementy są w toku:</translation>
+ </message>
+</context>
+<context>
+ <name>SearchTextDialog</name>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="14"/>
+ <source>Find or replace</source>
+ <translation>Znajdź lub zastąp</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="23"/>
+ <source>Find:</source>
+ <translation>Znajdź:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="36"/>
+ <source>Case sensitive</source>
+ <translation>Uwzględniaj wielkość liter</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="43"/>
+ <source>Search backwards</source>
+ <translation>Szukaj wstecz</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="50"/>
+ <source>Regular expression matching</source>
+ <translation>Dopasowywanie wyrażeniem regularnym</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="60"/>
+ <source>Replace &amp;&amp;
+find next</source>
+ <translation>Zastąp i
+znajdź następny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="78"/>
+ <source>Replace with:</source>
+ <translation>Zastąp:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="91"/>
+ <source>Replace all</source>
+ <translation>Zastąp wszystkie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="98"/>
+ <source>Find</source>
+ <translation>Znajdź</translation>
+ </message>
+</context>
+<context>
+ <name>SortDialog</name>
+ <message>
+ <location filename="../dialogs/sortdialog.ui" line="14"/>
+ <source>Sort by columns</source>
+ <translation>Sortuj wg. kolumn</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/sortdialog.ui" line="45"/>
+ <location filename="../dialogs/sortdialog.cpp" line="48"/>
+ <source>Column</source>
+ <translation>Kolumna</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/sortdialog.ui" line="50"/>
+ <location filename="../dialogs/sortdialog.cpp" line="48"/>
+ <source>Order</source>
+ <translation>Kierunek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/sortdialog.cpp" line="178"/>
+ <source>Sort by: %1</source>
+ <translation>Sortuj po: %1</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/sortdialog.cpp" line="242"/>
+ <source>Move column up</source>
+ <translation>Przesuń kolumnę w górę</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/sortdialog.cpp" line="243"/>
+ <source>Move column down</source>
+ <translation>Przesuń kolumnę w dół</translation>
+ </message>
+</context>
+<context>
+ <name>SqlEditor</name>
+ <message>
+ <location filename="../sqleditor.cpp" line="118"/>
+ <source>Cut</source>
+ <comment>sql editor</comment>
+ <translation>Wytnij</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="119"/>
+ <source>Copy</source>
+ <comment>sql editor</comment>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="120"/>
+ <source>Paste</source>
+ <comment>sql editor</comment>
+ <translation>Wklej</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="121"/>
+ <source>Delete</source>
+ <comment>sql editor</comment>
+ <translation>Usuń</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="122"/>
+ <source>Select all</source>
+ <comment>sql editor</comment>
+ <translation>Zaznacz wszystko</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="123"/>
+ <source>Undo</source>
+ <comment>sql editor</comment>
+ <translation>Cofnij</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="124"/>
+ <source>Redo</source>
+ <comment>sql editor</comment>
+ <translation>Przywróć</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="125"/>
+ <source>Complete</source>
+ <comment>sql editor</comment>
+ <translation>Dopełnij</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="126"/>
+ <source>Format SQL</source>
+ <comment>sql editor</comment>
+ <translation>Formatuj SQL</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="127"/>
+ <source>Save SQL to file</source>
+ <comment>sql editor</comment>
+ <translation>Zapisz SQL do pliku</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="128"/>
+ <source>Load SQL from file</source>
+ <comment>sql editor</comment>
+ <translation>Wczytaj SQL z pliku</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="129"/>
+ <source>Delete line</source>
+ <comment>sql editor</comment>
+ <translation>Usuń linię</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="130"/>
+ <source>Move block down</source>
+ <comment>sql editor</comment>
+ <translation>Przesuń blok w dół</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="131"/>
+ <source>Move block up</source>
+ <comment>sql editor</comment>
+ <translation>Przesuń blok w górę</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="132"/>
+ <source>Copy block down</source>
+ <comment>sql editor</comment>
+ <translation>Skopiuj blok w dół</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="133"/>
+ <source>Copy up down</source>
+ <comment>sql editor</comment>
+ <translation>Skopiuj blok w górę</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="134"/>
+ <source>Find</source>
+ <comment>sql editor</comment>
+ <translation>Znajdź</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="135"/>
+ <source>Find next</source>
+ <comment>sql editor</comment>
+ <translation>Znajdź następny</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="136"/>
+ <source>Find previous</source>
+ <comment>sql editor</comment>
+ <translation>Znajdź poprzedni</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="137"/>
+ <source>Replace</source>
+ <comment>sql editor</comment>
+ <translation>Zastąp</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="412"/>
+ <source>Syntax completion can be used only when a valid database is set for the SQL editor.</source>
+ <translation>Dopełnianie składni może być użyte tylko wtedy, gdy poprawna baza danych jest ustawiona w edytorze SQL.</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="800"/>
+ <source>Contents of the SQL editor are huge, so errors detecting and existing objects highlighting are temporarily disabled.</source>
+ <translation>Zawartość edytora SQL jest ogromna, więc sprawdzanie błędów i podświetlanie istniejących obiektów zostało tymczasowo wyłączone.</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="1027"/>
+ <source>Save to file</source>
+ <translation>Zapisz do pliku</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="1036"/>
+ <source>Could not open file &apos;%1&apos; for writing: %2</source>
+ <translation>Nie udało się otworzyć pliku &apos;%1&apos; do zapisu: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="1050"/>
+ <source>SQL scripts (*.sql);;All files (*)</source>
+ <translation>Skrypty SQL (*.sql);;Wszystkie pliki (*)</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="1051"/>
+ <source>Open file</source>
+ <translation>Otwórz plik</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="1060"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Nie udało się otworzyć pliku &apos;%1&apos; do odczytu: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="1267"/>
+ <source>Reached the end of document. Hit the find again to restart the search.</source>
+ <translation>Osiągnięto koniec dokumentu. Wciśnij szukanie ponownie, aby zrestartować szukanie.</translation>
+ </message>
+</context>
+<context>
+ <name>SqlQueryItem</name>
+ <message>
+ <location filename="../datagrid/sqlqueryitem.cpp" line="259"/>
+ <source>Column:</source>
+ <comment>data view tooltip</comment>
+ <translation>Kolumna:</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryitem.cpp" line="260"/>
+ <source>Data type:</source>
+ <comment>data view</comment>
+ <translation>Typ danych:</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryitem.cpp" line="263"/>
+ <source>Table:</source>
+ <comment>data view tooltip</comment>
+ <translation>Tabela:</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryitem.cpp" line="293"/>
+ <source>Constraints:</source>
+ <comment>data view tooltip</comment>
+ <translation>Ograniczenie:</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryitem.cpp" line="406"/>
+ <source>This cell is not editable, because: %1</source>
+ <translation>Tej komórki nie można edytować, ponieważ: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryitem.cpp" line="423"/>
+ <source>Cannot load the data for a cell that refers to the already closed database.</source>
+ <translation>Nie można załadować danych dla komórki, która odwołuje się do zamkniętej już bazy danych.</translation>
+ </message>
+</context>
+<context>
+ <name>SqlQueryItemDelegate</name>
+ <message>
+ <location filename="../datagrid/sqlqueryitemdelegate.cpp" line="41"/>
+ <location filename="../datagrid/sqlqueryitemdelegate.cpp" line="47"/>
+ <source>Cannot edit this cell. Details: %2</source>
+ <translation>Nie można edytować tej komórki. Szczegóły: %2</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryitemdelegate.cpp" line="41"/>
+ <source>The row is marked for deletion.</source>
+ <translation>Wiersz jest zaznaczony do usunięcia.</translation>
+ </message>
+</context>
+<context>
+ <name>SqlQueryModel</name>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="61"/>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="430"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation>Tylko jedno zapytanie może być wykonywane w danym momencie.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="93"/>
+ <source>Uncommited data</source>
+ <translation>Niezatwierdzone dane</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="94"/>
+ <source>There are uncommited data changes. Do you want to proceed anyway? All uncommited changes will be lost.</source>
+ <translation>Niektóre zmiany w danych nie zostały zatwierdzone. Czy na pewno chcesz kontynuować? Wszystkie niezatwierdzone zmiany zostaną utracone.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="340"/>
+ <source>Cannot commit the data for a cell that refers to the already closed database.</source>
+ <translation>Nie można zatwierdzić danych dla komórki, która odnosi się do zamkniętej już bazy danych.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="346"/>
+ <source>Could not begin transaction on the database. Details: %1</source>
+ <translation>Nie udało się rozpocząć transakcji na bazie danych. Szczegóły: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="383"/>
+ <source>An error occurred while commiting the transaction: %1</source>
+ <translation>Wystąpił błąd podczas zatwierdzania transakcji: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="402"/>
+ <source>An error occurred while rolling back the transaction: %1</source>
+ <translation>Wystąpił błąd podczas wycofywania transakcji: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="513"/>
+ <source>Tried to commit a cell which is not editable (yet modified and waiting for commit)! This is a bug. Please report it.</source>
+ <translation>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ć.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="539"/>
+ <source>An error occurred while commiting the data: %1</source>
+ <translation>Wystąpił błąd podczas zatwierdzania danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="978"/>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="1029"/>
+ <source>Error while executing SQL query on database &apos;%1&apos;: %2</source>
+ <translation>Błąd podczas wykonywania zapytania SQL na bazie &apos;%1&apos;: %2</translation>
+ </message>
+ <message>
+ <source>Error while executing SQL query: %1</source>
+ <translation type="obsolete">Błąd podczas wykonywania zapytania SQL: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="1026"/>
+ <source>Error while loading query results: %1</source>
+ <translation>Błąd podczas wczytywania wyników zapytania: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="1346"/>
+ <source>Insert multiple rows</source>
+ <translation>Wstaw wiele wierszy</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="1346"/>
+ <source>Number of rows to insert:</source>
+ <translation>Liczba wierszy do wstawienia:</translation>
+ </message>
+</context>
+<context>
+ <name>SqlQueryView</name>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="69"/>
+ <source>Copy</source>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="70"/>
+ <source>Copy as...</source>
+ <translation>Kopiuj jako...</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="71"/>
+ <source>Paste</source>
+ <translation>Wklej</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="72"/>
+ <source>Paste as...</source>
+ <translation>Wklej jako...</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="73"/>
+ <source>Set NULL values</source>
+ <translation>Ustaw wartości NULL</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="74"/>
+ <source>Erase values</source>
+ <translation>Wymaż wartości</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="75"/>
+ <source>Edit value in editor</source>
+ <translation>Edytuj wartość w edytorze</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="76"/>
+ <source>Commit</source>
+ <translation>Zatwierdź</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="77"/>
+ <source>Rollback</source>
+ <translation>Wycofaj</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="78"/>
+ <source>Commit selected cells</source>
+ <translation>Zatwierdź zaznaczone komórki</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="79"/>
+ <source>Rollback selected cells</source>
+ <translation>Wycofaj zaznaczone komórki</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="80"/>
+ <source>Define columns to sort by</source>
+ <translation>Zdefiniuj kolumny po których sortować</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="81"/>
+ <source>Remove custom sorting</source>
+ <translation>Wycofaj własne sortowanie</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="82"/>
+ <source>Insert row</source>
+ <translation>Wstaw wiersz</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="83"/>
+ <source>Insert multiple rows</source>
+ <translation>Wstaw wiele wierszy</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="84"/>
+ <source>Delete selected row</source>
+ <translation>Usuń zaznaczony wiersz</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="443"/>
+ <source>Edit value</source>
+ <translation>Edytuj wartość</translation>
+ </message>
+</context>
+<context>
+ <name>SqlTableModel</name>
+ <message>
+ <location filename="../datagrid/sqltablemodel.cpp" line="74"/>
+ <source>Error while commiting new row: %1</source>
+ <translation>Błąd podczas zatwierdzania nowego wiersza: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqltablemodel.cpp" line="132"/>
+ <source>Error while deleting row from table %1: %2</source>
+ <translation>Błąd podczas usuwania wiersza z tabeli %1: %2</translation>
+ </message>
+</context>
+<context>
+ <name>StatusField</name>
+ <message>
+ <location filename="../statusfield.ui" line="14"/>
+ <source>Status</source>
+ <translation>Status</translation>
+ </message>
+ <message>
+ <location filename="../statusfield.cpp" line="161"/>
+ <source>Copy</source>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../statusfield.cpp" line="168"/>
+ <source>Clear</source>
+ <translation>Wyczyść</translation>
+ </message>
+</context>
+<context>
+ <name>TableConstraintsModel</name>
+ <message>
+ <location filename="../windows/tableconstraintsmodel.cpp" line="75"/>
+ <source>Type</source>
+ <comment>table constraints</comment>
+ <translation>Typ</translation>
+ </message>
+ <message>
+ <location filename="../windows/tableconstraintsmodel.cpp" line="77"/>
+ <source>Details</source>
+ <comment>table constraints</comment>
+ <translation>Szczegóły</translation>
+ </message>
+ <message>
+ <location filename="../windows/tableconstraintsmodel.cpp" line="79"/>
+ <source>Name</source>
+ <comment>table constraints</comment>
+ <translation>Nazwa</translation>
+ </message>
+</context>
+<context>
+ <name>TableForeignKeyPanel</name>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="29"/>
+ <source>Foreign table:</source>
+ <translation>Tabela obca:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="48"/>
+ <source>SQLite 2 does not support foreign keys officially,
+but it&apos;s okay to use them anyway.</source>
+ <translation>SQLite 2 oficjalnie nie obsługuje kluczy obcych,
+ale można ich używać.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="62"/>
+ <source>Columns</source>
+ <translation>Kolumny</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="77"/>
+ <source>Local column</source>
+ <translation>Kolumna lokalna</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="90"/>
+ <source>Foreign column</source>
+ <translation>Kolumna obca</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="126"/>
+ <source>Reactions</source>
+ <translation>Reakcje</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="165"/>
+ <source>Deferred foreign key</source>
+ <translation>Klucz obcy odroczony</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="183"/>
+ <source>Named constraint</source>
+ <translation>Nazwane ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="190"/>
+ <source>Constraint name</source>
+ <translation>Nazwa ograniczenia</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.cpp" line="53"/>
+ <source>Pick the foreign column.</source>
+ <translation>Wybierz kolumnę obcą</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.cpp" line="65"/>
+ <source>Pick the foreign table.</source>
+ <translation>Wybierz tabelę obcą</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.cpp" line="66"/>
+ <source>Select at least one foreign column.</source>
+ <translation>Wybierz przynajmnie jedną kolumnę obcą.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.cpp" line="67"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.cpp" line="209"/>
+ <source>Foreign column</source>
+ <comment>table constraints</comment>
+ <translation>Kolumna obca</translation>
+ </message>
+</context>
+<context>
+ <name>TablePrimaryKeyAndUniquePanel</name>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="32"/>
+ <source>Columns</source>
+ <translation>Kolumny</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="59"/>
+ <source>Column</source>
+ <translation>Kolumna</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="84"/>
+ <source>Collation</source>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="109"/>
+ <source>Sort</source>
+ <translation>Sortowanie</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="142"/>
+ <source>Valid only for a single column with INTEGER data type</source>
+ <translation>Dozwolone tylko dla jednej kolumny o typie danych INTEGER</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="145"/>
+ <source>Autoincrement</source>
+ <translation>Autoinkrementacja</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="167"/>
+ <source>Named constraint</source>
+ <translation>Nazwane ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="174"/>
+ <source>Constraint name</source>
+ <translation>Nazwa ograniczenia</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="199"/>
+ <source>On conflict</source>
+ <translation>W razie konfliktu</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.cpp" line="86"/>
+ <source>Collate</source>
+ <comment>table constraints</comment>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.cpp" line="93"/>
+ <source>Sort order</source>
+ <comment>table constraints</comment>
+ <translation>Kierunek sortowania</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.cpp" line="169"/>
+ <source>Select at least one column.</source>
+ <translation>Zaznacz przynajmniej jedną kolumnę.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.cpp" line="170"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+</context>
+<context>
+ <name>TableStructureModel</name>
+ <message>
+ <location filename="../windows/tablestructuremodel.cpp" line="299"/>
+ <source>Name</source>
+ <comment>table structure columns</comment>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablestructuremodel.cpp" line="301"/>
+ <source>Data type</source>
+ <comment>table structure columns</comment>
+ <translation>Typ danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablestructuremodel.cpp" line="315"/>
+ <source>Default value</source>
+ <comment>table structure columns</comment>
+ <translation>Domyślna wartość</translation>
+ </message>
+</context>
+<context>
+ <name>TableWindow</name>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="36"/>
+ <source>Structure</source>
+ <translation>Struktura</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="60"/>
+ <source>Table name:</source>
+ <translation>Nazwa tabeli:</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="184"/>
+ <source>Data</source>
+ <translation>Dane</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="201"/>
+ <source>Constraints</source>
+ <translation>Ograniczenia</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="215"/>
+ <source>Indexes</source>
+ <translation>Indeksy</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="244"/>
+ <source>Triggers</source>
+ <translation>Wyzwalacze</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="276"/>
+ <source>DDL</source>
+ <translation>DDL</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="180"/>
+ <source>Export table</source>
+ <comment>table window</comment>
+ <translation>Eksportuj tabelę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="181"/>
+ <source>Import data to table</source>
+ <comment>table window</comment>
+ <translation>Importuj do tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="182"/>
+ <source>Populate table</source>
+ <comment>table window</comment>
+ <translation>Zaludnij tabelę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="196"/>
+ <source>Refresh structure</source>
+ <comment>table window</comment>
+ <translation>Odśwież strukturę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="198"/>
+ <source>Commit structure changes</source>
+ <comment>table window</comment>
+ <translation>Zatwierdź zmiany w strukturze</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="199"/>
+ <source>Rollback structure changes</source>
+ <comment>table window</comment>
+ <translation>Wycofaj zmiany w strukturze</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="200"/>
+ <source>Add column</source>
+ <comment>table window</comment>
+ <translation>Dodaj kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="201"/>
+ <source>Edit column</source>
+ <comment>table window</comment>
+ <translation>Edytuj kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="202"/>
+ <location filename="../windows/tablewindow.cpp" line="289"/>
+ <source>Delete column</source>
+ <comment>table window</comment>
+ <translation>Usuń kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="203"/>
+ <source>Move column up</source>
+ <comment>table window</comment>
+ <translation>Przesuń kolumnę w górę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="204"/>
+ <source>Move column down</source>
+ <comment>table window</comment>
+ <translation>Przesuń kolumnę w dół</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="210"/>
+ <source>Create similar table</source>
+ <comment>table window</comment>
+ <translation>Utwórz podobną tabelę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="211"/>
+ <source>Reset autoincrement value</source>
+ <comment>table window</comment>
+ <translation>Wyzeruj wartość autoinkrementacji</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="214"/>
+ <source>Add table constraint</source>
+ <comment>table window</comment>
+ <translation>Dodaj ograniczenie tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="215"/>
+ <source>Edit table constraint</source>
+ <comment>table window</comment>
+ <translation>Edytuj ograniczenie tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="216"/>
+ <source>Delete table constraint</source>
+ <comment>table window</comment>
+ <translation>Usuń ograniczenie tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="217"/>
+ <source>Move table constraint up</source>
+ <comment>table window</comment>
+ <translation>Przesuń ograniczenie tabeli w górę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="218"/>
+ <source>Move table constraint down</source>
+ <comment>table window</comment>
+ <translation>Przesuń ograniczenie tabeli w dół</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="220"/>
+ <source>Add table primary key</source>
+ <comment>table window</comment>
+ <translation>Dodaj klucz główny tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="221"/>
+ <source>Add table foreign key</source>
+ <comment>table window</comment>
+ <translation>Dodaj klucz obcy tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="222"/>
+ <source>Add table unique constraint</source>
+ <comment>table window</comment>
+ <translation>Dodaj ograniczenie unikalnych wartości tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="223"/>
+ <source>Add table check constraint</source>
+ <comment>table window</comment>
+ <translation>Dodaj ograniczenie warunkiem tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="241"/>
+ <source>Refresh index list</source>
+ <comment>table window</comment>
+ <translation>Odśwież listę indeksów</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="243"/>
+ <source>Create index</source>
+ <comment>table window</comment>
+ <translation>Utwórz indeks</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="244"/>
+ <source>Edit index</source>
+ <comment>table window</comment>
+ <translation>Edytuj indeks</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="245"/>
+ <source>Delete index</source>
+ <comment>table window</comment>
+ <translation>Usuń indeks</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="251"/>
+ <source>Refresh trigger list</source>
+ <comment>table window</comment>
+ <translation>Odśwież listę wyzwalaczy</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="253"/>
+ <source>Create trigger</source>
+ <comment>table window</comment>
+ <translation>Utwórz wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="254"/>
+ <source>Edit trigger</source>
+ <comment>table window</comment>
+ <translation>Edytuj wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="255"/>
+ <source>Delete trigger</source>
+ <comment>table window</comment>
+ <translation>Usuń wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="288"/>
+ <source>Are you sure you want to delete column &apos;%1&apos;?</source>
+ <comment>table window</comment>
+ <translation>Czy na pewno chcesz usunąć kolumnę &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="316"/>
+ <source>Following problems will take place while modifying the table.
+Would you like to proceed?</source>
+ <comment>table window</comment>
+ <translation>Następujące problemy wystąpią podczas modyfikacji tabeli.
+Czy chcesz kontynuować?</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="318"/>
+ <source>Table modification</source>
+ <comment>table window</comment>
+ <translation>Modyfikacja tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="456"/>
+ <source>Could not load data for table %1. Error details: %2</source>
+ <translation>Nie udało się załadować danych dla tabeli %1. Szczegóły błędu: %2</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="569"/>
+ <source>Could not process the %1 table correctly. Unable to open a table window.</source>
+ <translation>Nie udało się przetworzyć poprawnie tabeli %1. Nie można otworzyć okna tabeli.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="637"/>
+ <source>Could not restore window, because database %1 could not be resolved.</source>
+ <translation>Nie można przywrócić okna, ponieważ nie znaleziono bazy danych %1.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="646"/>
+ <source>Could not restore window, because the table %1 doesn&apos;t exist in the database %2.</source>
+ <translation>Nie można przywrócić okna, ponieważ tabela %1 już nie jestnieje w bazie danych %2.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="671"/>
+ <location filename="../windows/tablewindow.cpp" line="673"/>
+ <source>New table %1</source>
+ <translation>Nowa tabela %1</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="824"/>
+ <source>Could not commit table structure. Error message: %1</source>
+ <comment>table window</comment>
+ <translation>Nie udało się zatwierdzić struktury tabeli. Treść błędu: %1</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="845"/>
+ <source>Reset autoincrement</source>
+ <translation>Wyzeruj autoinkrementację</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="845"/>
+ <source>Are you sure you want to reset autoincrement value for table &apos;%1&apos;?</source>
+ <translation>Czy na pewno chcesz wyzerować wartość autoinkrementacji dla tabeli &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="852"/>
+ <source>An error occurred while trying to reset autoincrement value for table &apos;%1&apos;: %2</source>
+ <translation>Wystąpił błąd podczas próby wyzerowania wartości autoinkrementacji dla tabeli &apos;%1&apos;: %2</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="854"/>
+ <source>Autoincrement value for table &apos;%1&apos; has been reset successfly.</source>
+ <translation>Wartość autoinkrementacji dla tabeli &apos;%1&apos; została pomyślnie wyzerowana.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="933"/>
+ <source>Empty name</source>
+ <translation>Pusta nazwa</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="933"/>
+ <source>A blank name for the table is allowed in SQLite, but it is not recommended.
+Are you sure you want to create a table with blank name?</source>
+ <translation>Pusta nazwa dla tabeli jest dozwolona w SQLite, ale nie jest zalecana.
+Czy na pewno chcesz utworzyć tabelę o pustej nazwie?</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="942"/>
+ <source>Cannot create a table without at least one column.</source>
+ <translation>Nie można utworzyć tabeli bez przynajmniej jednej kolumny.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="968"/>
+ <source>Cannot create table %1, if it has no primary key defined. Either uncheck the %2, or define a primary key.</source>
+ <translation>Nie można utworzyć tabeli %1, jeśli nie ma zdefiniowanego klucza głównego. Albo udznacz %2, albo zdefiniuj klucz główny.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="975"/>
+ <source>Cannot use autoincrement for primary key when %1 clause is used. Either uncheck the %2, or the autoincrement in a primary key.</source>
+ <translation>Nie można użyć autoinkrementacji dla klucza głównego, kiedy klauzula %1 jest użyta. Albo odnacz %2, albo autonkrementację w kluczu głównym.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1105"/>
+ <source>Are you sure you want to delete table constraint &apos;%1&apos;?</source>
+ <comment>table window</comment>
+ <translation>Czy na pewno chcesz usunąć ograniczenie tabeli &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1106"/>
+ <source>Delete constraint</source>
+ <comment>table window</comment>
+ <translation>Usuń ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1160"/>
+ <source>Cannot export, because no export plugin is loaded.</source>
+ <translation>Nie można wyeksportować, ponieważ żadna wtyczka eksportu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1173"/>
+ <source>Cannot import, because no import plugin is loaded.</source>
+ <translation>Nie można zaimportować, ponieważ żadna wtyczka importu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1205"/>
+ <source>Uncommited changes</source>
+ <translation>Niezatwierdzone dane</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1206"/>
+ <source>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?</source>
+ <translation>Zmiany w strukturze nie zostały zatwierdzone. Nie można przeglądać, ani edytować danych, dopóki struktura tabeli nie zostanie ustalona.
+Czy chcesz zatwierdzić strukturę, czy jednak chcesz wrócić do karty struktury?</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1209"/>
+ <source>Go back to structure tab</source>
+ <translation>Wróć do karty struktury</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1209"/>
+ <source>Commit modifications and browse data.</source>
+ <translation>Zatwierdź modyfikacje i przeglądaj dane.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1359"/>
+ <source>Name</source>
+ <comment>table window indexes</comment>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1360"/>
+ <source>Unique</source>
+ <comment>table window indexes</comment>
+ <translation>Wartości unikalne</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1361"/>
+ <source>Columns</source>
+ <comment>table window indexes</comment>
+ <translation>Kolumny</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1362"/>
+ <source>Partial index condition</source>
+ <comment>table window indexes</comment>
+ <translation>Warunek indeksu częściowego:</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1415"/>
+ <source>Name</source>
+ <comment>table window triggers</comment>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1416"/>
+ <source>Event</source>
+ <comment>table window triggers</comment>
+ <translation>Zdarzenie</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1417"/>
+ <source>Condition</source>
+ <comment>table window triggers</comment>
+ <translation>Warunek</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1418"/>
+ <source>Details</source>
+ <comment>table window triggers</comment>
+ <translation>Szczegóły</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1506"/>
+ <source>Table window &quot;%1&quot; has uncommited structure modifications and data.</source>
+ <translation>Okno tabeli &quot;%1&quot; ma niezatwierdzone modyfikacje struktury i danych.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1508"/>
+ <source>Table window &quot;%1&quot; has uncommited data.</source>
+ <translation>Okno tabeli &quot;%1&quot; ma niezatwierdzone dane.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1510"/>
+ <source>Table window &quot;%1&quot; has uncommited structure modifications.</source>
+ <translation>Okno tabeli &quot;%1&quot; ma niezatwierdzone modyfikacje struktury.</translation>
+ </message>
+</context>
+<context>
+ <name>TriggerColumnsDialog</name>
+ <message>
+ <location filename="../dialogs/triggercolumnsdialog.ui" line="14"/>
+ <source>Trigger columns</source>
+ <translation>Kolumny wyzwalacza</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggercolumnsdialog.ui" line="47"/>
+ <source>Triggering columns:</source>
+ <translation>Kolumny wyzwalające:</translation>
+ </message>
+</context>
+<context>
+ <name>TriggerDialog</name>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="14"/>
+ <location filename="../dialogs/triggerdialog.ui" line="24"/>
+ <source>Trigger</source>
+ <translation>Wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="30"/>
+ <source>On table:</source>
+ <translation>Na tabeli:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="40"/>
+ <source>Action:</source>
+ <translation>Akcja:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="56"/>
+ <location filename="../dialogs/triggerdialog.ui" line="124"/>
+ <source>&lt;p&gt;SQL condition that will be evaluated before the actual trigger code. In case the condition returns false, the trigger will not be fired for that row.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Warunek SQL, który będzie wykonany przed właściwym kodem wyzwalacza. W przypadku gdy warunek zwróci fałsz, wyzwalacz nie zostanie uruchomiony dla tego wiersza.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="59"/>
+ <source>Pre-condition:</source>
+ <translation>Warunek wstępny:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="66"/>
+ <source>The scope is still not fully supported by the SQLite database.</source>
+ <translation>Zakres wciąż nie jest w pełni obsługiwany przez bazy danych SQLite.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="73"/>
+ <source>Trigger name:</source>
+ <translation>Nazwa wyzwalacza:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="80"/>
+ <source>When:</source>
+ <translation>Kiedy:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="87"/>
+ <source>List of columns for UPDATE OF action.</source>
+ <translation>Lista kolumn dla akcji UPDATE OF.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="97"/>
+ <source>Scope:</source>
+ <translation>Zakres:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="104"/>
+ <source>Code:</source>
+ <translation>Kod:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="111"/>
+ <source>Trigger statements to be executed.</source>
+ <translation>Zapytania wyzwalacz do wykonania.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="132"/>
+ <source>DDL</source>
+ <translation>DDL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.cpp" line="145"/>
+ <source>On view:</source>
+ <translation>Na widoku:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.cpp" line="168"/>
+ <source>Could not process trigger %1 correctly. Unable to open a trigger dialog.</source>
+ <translation>Nie udało się przetworzyć poprawnie wyzwalacza %1. Nie można otworzyć okna wyzwalacza.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.cpp" line="338"/>
+ <source>Enter a valid condition.</source>
+ <translation>Wprowadź poprawny warunek.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.cpp" line="339"/>
+ <source>Enter a valid trigger code.</source>
+ <translation>Wprowadź poprawny kod wyzwalacza.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.cpp" line="411"/>
+ <source>Error</source>
+ <comment>trigger dialog</comment>
+ <translation>Błąd</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.cpp" line="411"/>
+ <source>An error occurred while executing SQL statements:
+%1</source>
+ <translation>Wystąpił błąd podczas wykonywania zapytań SQL:
+%1</translation>
+ </message>
+</context>
+<context>
+ <name>VersionConvertSummaryDialog</name>
+ <message>
+ <location filename="../dialogs/versionconvertsummarydialog.ui" line="14"/>
+ <source>Database version convert</source>
+ <translation>Konwersja bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/versionconvertsummarydialog.ui" line="20"/>
+ <source>Following changes to the SQL statements will be made:</source>
+ <translation>Dokonane będą następujące zmiany w zapytaniach SQL:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/versionconvertsummarydialog.cpp" line="10"/>
+ <source>Before</source>
+ <translation>Przed</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/versionconvertsummarydialog.cpp" line="11"/>
+ <source>After</source>
+ <translation>Po</translation>
+ </message>
+</context>
+<context>
+ <name>ViewWindow</name>
+ <message>
+ <location filename="../windows/viewwindow.ui" line="36"/>
+ <source>Query</source>
+ <translation>Zapytanie</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.ui" line="60"/>
+ <source>View name:</source>
+ <translation>Nazwa widoku:</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.ui" line="77"/>
+ <source>Data</source>
+ <translation>Dane</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.ui" line="87"/>
+ <source>Triggers</source>
+ <translation>Wyzwalacze</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.ui" line="119"/>
+ <source>DDL</source>
+ <translation>DDL</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="115"/>
+ <source>Could not restore window, because database %1 could not be resolved.</source>
+ <translation>Nie można przywrócić okna, ponieważ nie znaleziono bazy danych %1.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="121"/>
+ <source>Could not restore window, because database %1 could not be open.</source>
+ <translation>Nie można przywrócić okna, ponieważ nie udało się otworzyć bazy danych %1.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="130"/>
+ <source>Could not restore window, because the view %1 doesn&apos;t exist in the database %2.</source>
+ <translation>Nie można przywrócić okna, ponieważ widok %1 już nie jestnieje w bazie danych %2.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="155"/>
+ <location filename="../windows/viewwindow.cpp" line="157"/>
+ <source>New view %1</source>
+ <translation>Nowy widok %1</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="275"/>
+ <source>Refresh the view</source>
+ <comment>view window</comment>
+ <translation>Odśwież widok</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="277"/>
+ <source>Commit the view changes</source>
+ <comment>view window</comment>
+ <translation>Zatwierdź zmiany w widoku</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="278"/>
+ <source>Rollback the view changes</source>
+ <comment>view window</comment>
+ <translation>Wycofaj zmiany w widoku</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="285"/>
+ <source>Refresh trigger list</source>
+ <comment>view window</comment>
+ <translation>Odśwież listę wyzwalaczy</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="287"/>
+ <source>Create new trigger</source>
+ <comment>view window</comment>
+ <translation>Utwórz nowy wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="288"/>
+ <source>Edit selected trigger</source>
+ <comment>view window</comment>
+ <translation>Edytuj wybrany wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="289"/>
+ <source>Delete selected trigger</source>
+ <comment>view window</comment>
+ <translation>Usuń wybrany wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="310"/>
+ <source>View window &quot;%1&quot; has uncommited structure modifications and data.</source>
+ <translation>Okno widoku &quot;%1&quot; ma niezatwierdzone modyfikacje struktury i danych.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="312"/>
+ <source>View window &quot;%1&quot; has uncommited data.</source>
+ <translation>Okno widoku &quot;%1&quot; ma niezatwierdzone dane.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="314"/>
+ <source>View window &quot;%1&quot; has uncommited structure modifications.</source>
+ <translation>Okno widoku &quot;%1&quot; ma niezatwierdzone modyfikacje struktury.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="455"/>
+ <source>Could not load data for view %1. Error details: %2</source>
+ <translation>Nie udało się załadować danych dla widoku %1. Szczegóły błędu: %2</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="466"/>
+ <source>Uncommited changes</source>
+ <translation>Niezatwierdzone dane</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="467"/>
+ <source>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?</source>
+ <translation>Zmiany w strukturze nie zostały zatwierdzone. Nie można przeglądać, ani edytować danych, dopóki struktura widoku nie zostanie ustalona.
+Czy chcesz zatwierdzić strukturę, czy jednak chcesz wrócić do karty struktury?</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="470"/>
+ <source>Go back to structure tab</source>
+ <translation>Wróć do karty struktury</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="470"/>
+ <source>Commit modifications and browse data.</source>
+ <translation>Zatwierdź modyfikacje i przeglądaj dane.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="528"/>
+ <source>Could not commit view changes. Error message: %1</source>
+ <comment>view window</comment>
+ <translation>Nie udało się zatwierdzić widoku. Treść błędu: %1</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="606"/>
+ <source>Name</source>
+ <comment>view window triggers</comment>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="607"/>
+ <source>Instead of</source>
+ <comment>view window triggers</comment>
+ <translation>Zamiast</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="608"/>
+ <source>Condition</source>
+ <comment>view window triggers</comment>
+ <translation>Warunek</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="609"/>
+ <source>Details</source>
+ <comment>table window triggers</comment>
+ <translation>Szczegóły</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="649"/>
+ <source>Could not process the %1 view correctly. Unable to open a view window.</source>
+ <translation>Nie udało się przetworzyć poprawnie widoku %1. Nie można otworzyć okna widoku.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="684"/>
+ <source>Empty name</source>
+ <translation>Pusta nazwa</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="684"/>
+ <source>A blank name for the view is allowed in SQLite, but it is not recommended.
+Are you sure you want to create a view with blank name?</source>
+ <translation>Pusta nazwa dla widoku jest dozwolona w SQLite, ale nie jest zalecana.
+Czy na pewno chcesz utworzyć widok o pustej nazwie?</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="699"/>
+ <source>The SELECT statement could not be parsed. Please correct the query and retry.
+Details: %1</source>
+ <translation>Zapytanie SELECT nie mogło być poprawnie przeanalizowane. Proszę poprawić zapytanie i spróbować ponownie.
+Szczegóły: %1</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="707"/>
+ <source>The view could not be modified due to internal SQLiteStudio error. Please report this!</source>
+ <translation>Widok nie mógł być zmodyfikowany w związku z wewnętrznym błędem SQLiteStudio. Proszę to zgłosić!</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="733"/>
+ <source>The view code could not be parsed properly for execution. This is a SQLiteStudio&apos;s bug. Please report it.</source>
+ <translation>Kod widok nie mógł być poprawnie przeanalizowany. To jest błąd SQLiteStudio Proszę to zgłosić!</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="746"/>
+ <source>Following problems will take place while modifying the view.
+Would you like to proceed?</source>
+ <comment>view window</comment>
+ <translation>Następujące problemy wystąpią podczas modyfikacji widoku.
+Czy chcesz kontynuować?</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="748"/>
+ <source>View modification</source>
+ <comment>view window</comment>
+ <translation>Modyfikacja widoku</translation>
+ </message>
+</context>
+<context>
+ <name>WidgetCover</name>
+ <message>
+ <location filename="../common/widgetcover.cpp" line="198"/>
+ <source>Interrupt</source>
+ <translation>Przerwij</translation>
+ </message>
+</context>
+</TS>
diff --git a/SQLiteStudio3/guiSQLiteStudio/uiconfig.h b/SQLiteStudio3/guiSQLiteStudio/uiconfig.h
index 608ce47..e6cfea2 100644
--- a/SQLiteStudio3/guiSQLiteStudio/uiconfig.h
+++ b/SQLiteStudio3/guiSQLiteStudio/uiconfig.h
@@ -80,6 +80,7 @@ CFG_CATEGORIES(Ui,
CFG_ENTRY(Cfg::DataEditorsOrder, DataEditorsOrder, Cfg::DataEditorsOrder())
CFG_ENTRY(QString, FileDialogLastPath, QString())
CFG_ENTRY(int, MaxInitialColumnWith, 600)
+ CFG_ENTRY(bool, LanguageAsked, false)
)
)
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/bugreporthistorywindow.ui b/SQLiteStudio3/guiSQLiteStudio/windows/bugreporthistorywindow.ui
index 3218822..2211ec2 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/bugreporthistorywindow.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/bugreporthistorywindow.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/collationseditor.ui b/SQLiteStudio3/guiSQLiteStudio/windows/collationseditor.ui
index 635ae59..98e7ddb 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/collationseditor.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/collationseditor.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/ddlhistorywindow.ui b/SQLiteStudio3/guiSQLiteStudio/windows/ddlhistorywindow.ui
index 6591198..33cdb66 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/ddlhistorywindow.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/ddlhistorywindow.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp
index 7856a5e..590a2fd 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp
@@ -17,13 +17,13 @@
#include "parser/lexer.h"
#include "common/utils_sql.h"
#include "parser/parser.h"
+#include "dbobjectdialogs.h"
+#include "dialogs/exportdialog.h"
#include <QComboBox>
#include <QDebug>
#include <QStringListModel>
#include <QActionGroup>
#include <QMessageBox>
-#include <dbobjectdialogs.h>
-#include <dialogs/exportdialog.h>
CFG_KEYS_DEFINE(EditorWindow)
EditorWindow::ResultsDisplayMode EditorWindow::resultsDisplayMode;
@@ -94,6 +94,10 @@ void EditorWindow::init()
initActions();
updateShortcutTips();
+ Db* treeSelectedDb = DBTREE->getSelectedOpenDb();
+ if (treeSelectedDb)
+ dbCombo->setCurrentIndex(dbComboModel->getIndexForDb(treeSelectedDb));
+
Db* currentDb = getCurrentDb();
resultsModel->setDb(currentDb);
ui->sqlEdit->setDb(currentDb);
@@ -484,7 +488,16 @@ void EditorWindow::executionSuccessful()
{
double secs = ((double)resultsModel->getExecutionTime()) / 1000;
QString time = QString::number(secs, 'f', 3);
- notifyInfo(tr("Query finished in %2 second(s).").arg(time));
+
+ if (resultsModel->wasDataModifyingQuery())
+ {
+ QString rowsAffected = QString::number(resultsModel->getTotalRowsAffected());
+ notifyInfo(tr("Query finished in %1 second(s). Rows affected: %2").arg(time, rowsAffected));
+ }
+ else
+ {
+ notifyInfo(tr("Query finished in %1 second(s).").arg(time));
+ }
lastQueryHistoryId = CFG->addSqlHistory(resultsModel->getQuery(), resultsModel->getDb()->getName(), resultsModel->getExecutionTime(), 0);
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h
index 0052a74..4666386 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h
@@ -25,7 +25,7 @@ class SqlEditor;
CFG_KEY_LIST(EditorWindow, QObject::tr("SQL editor window"),
CFG_KEY_ENTRY(EXEC_QUERY, Qt::Key_F9, QObject::tr("Execute query"))
- CFG_KEY_ENTRY(EXPLAIN_QUERY, Qt::Key_F8, QObject::tr("Execute \"EXPLAIN\" query"))
+ CFG_KEY_ENTRY(EXPLAIN_QUERY, Qt::Key_F8, QObject::tr("Execute \"%1\" query").arg("EXPLAIN"))
CFG_KEY_ENTRY(PREV_DB, Qt::CTRL + Qt::Key_Up, QObject::tr("Switch current working database to previous on the list"))
CFG_KEY_ENTRY(NEXT_DB, Qt::CTRL + Qt::Key_Down, QObject::tr("Switch current working database to next on the list"))
CFG_KEY_ENTRY(SHOW_NEXT_TAB, Qt::ALT + Qt::Key_Right, QObject::tr("Go to next editor tab"))
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.ui b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.ui
index b0d598b..51d5503 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.ui
@@ -11,10 +11,19 @@
</rect>
</property>
<property name="windowTitle">
- <string>SQL editor</string>
+ <string notr="true">SQL editor</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -42,7 +51,16 @@
</widget>
<widget class="QWidget" name="resultsContainer" native="true">
<layout class="QVBoxLayout" name="verticalLayout_5">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
</layout>
@@ -59,7 +77,16 @@
<item>
<widget class="QWidget" name="resultsFrame" native="true">
<layout class="QVBoxLayout" name="verticalLayout_6">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -116,6 +143,11 @@
</widget>
<customwidgets>
<customwidget>
+ <class>SqlView</class>
+ <extends>QPlainTextEdit</extends>
+ <header>sqlview.h</header>
+ </customwidget>
+ <customwidget>
<class>DataView</class>
<extends>QTabWidget</extends>
<header>dataview.h</header>
@@ -126,11 +158,6 @@
<extends>QPlainTextEdit</extends>
<header>sqleditor.h</header>
</customwidget>
- <customwidget>
- <class>SqlView</class>
- <extends>QPlainTextEdit</extends>
- <header>sqlview.h</header>
- </customwidget>
</customwidgets>
<resources/>
<connections/>
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/functionseditor.ui b/SQLiteStudio3/guiSQLiteStudio/windows/functionseditor.ui
index d5d5015..45d291d 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/functionseditor.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/functionseditor.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp
index 56accd0..1b47433 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp
@@ -208,6 +208,7 @@ void TableWindow::createStructureActions()
ui->structureToolBar->addAction(actionMap[POPULATE]);
ui->structureToolBar->addSeparator();
createAction(CREATE_SIMILAR, ICONS.TABLE_CREATE_SIMILAR, tr("Create similar table", "table window"), this, SLOT(createSimilarTable()), ui->structureToolBar);
+ createAction(RESET_AUTOINCREMENT, ICONS.RESET_AUTOINCREMENT, tr("Reset autoincrement value", "table window"), this, SLOT(resetAutoincrement()), ui->structureToolBar);
// Table constraints
createAction(ADD_TABLE_CONSTRAINT, ICONS.TABLE_CONSTRAINT_ADD, tr("Add table constraint", "table window"), this, SLOT(addConstraint()), ui->tableConstraintsToolbar, ui->tableConstraintsView);
@@ -834,6 +835,24 @@ void TableWindow::rollbackStructure()
updateStructureCommitState();
updateStructureToolbarState();
updateTableConstraintsToolbarState();
+ updateDdlTab();
+}
+
+void TableWindow::resetAutoincrement()
+{
+ if (!existingTable)
+ return;
+
+ QMessageBox::StandardButton btn = QMessageBox::question(this, tr("Reset autoincrement"), tr("Are you sure you want to reset autoincrement value for table '%1'?")
+ .arg(table));
+ if (btn != QMessageBox::Yes)
+ return;
+
+ SqlQueryPtr res = db->exec("DELETE FROM sqlite_sequence WHERE name = ?;", {table});
+ if (res->isError())
+ notifyError(tr("An error occurred while trying to reset autoincrement value for table '%1': %2").arg(table, res->getErrorText()));
+ else
+ notifyInfo(tr("Autoincrement value for table '%1' has been reset successfly.").arg(table));
}
void TableWindow::addColumn()
@@ -947,15 +966,15 @@ bool TableWindow::validate(bool skipWarning)
if (!hasPk)
{
- notifyError(tr("Cannot create table without ROWID, if it has no PRIMARY KEY defined."
- " Either uncheck the WITHOUT ROWID, or define a PRIMARY KEY."));
+ notifyError(tr("Cannot create table %1, if it has no primary key defined."
+ " Either uncheck the %2, or define a primary key.").arg("WITHOUT ROWID", "WITHOUT ROWID"));
return false;
}
if (isPkAutoIncr)
{
- notifyError(tr("Cannot use AUTOINCREMENT for PRIMARY KEY when WITHOUT ROWID clause is used."
- " Either uncheck the WITHOUT ROWID, or the AUTOINCREMENT in a PRIMARY KEY."));
+ notifyError(tr("Cannot use autoincrement for primary key when %1 clause is used."
+ " Either uncheck the %2, or the autoincrement in a primary key.").arg("WITHOUT ROWID", "WITHOUT ROWID"));
return false;
}
}
@@ -1023,9 +1042,12 @@ void TableWindow::applyInitialTab()
void TableWindow::updateDdlTab()
{
- CodeFormatter* formatter = SQLITESTUDIO->getCodeFormatter();
createTable->rebuildTokens();
- ui->ddlEdit->setPlainText(formatter->format("sql", createTable->detokenize(), db));
+ QString ddl = createTable->detokenize();
+ if (createTable->columns.size() > 0)
+ ddl = SQLITESTUDIO->getCodeFormatter()->format("sql", ddl, db);
+
+ ui->ddlEdit->setPlainText(ddl);
}
void TableWindow::updateNewTableState()
@@ -1037,6 +1059,7 @@ void TableWindow::updateNewTableState()
actionMap[IMPORT]->setEnabled(existingTable);
actionMap[POPULATE]->setEnabled(existingTable);
actionMap[CREATE_SIMILAR]->setEnabled(existingTable);
+ actionMap[RESET_AUTOINCREMENT]->setEnabled(existingTable);
actionMap[REFRESH_STRUCTURE]->setEnabled(existingTable);
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.h b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.h
index b0ee1e3..54d544f 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.h
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.h
@@ -79,6 +79,7 @@ class GUI_API_EXPORT TableWindow : public MdiChild
IMPORT,
POPULATE,
CREATE_SIMILAR,
+ RESET_AUTOINCREMENT,
// Indexes tab
REFRESH_INDEXES,
ADD_INDEX,
@@ -189,6 +190,7 @@ class GUI_API_EXPORT TableWindow : public MdiChild
void changesSuccessfullyCommited();
void changesFailedToCommit(int errorCode, const QString& errorText);
void rollbackStructure();
+ void resetAutoincrement();
void editColumn();
void delColumn();
void moveColumnUp();
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.ui b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.ui
index 8c46443..f1fe409 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
@@ -74,7 +74,7 @@
<item>
<widget class="QCheckBox" name="withoutRowIdCheck">
<property name="text">
- <string>WITHOUT ROWID</string>
+ <string notr="true">WITHOUT ROWID</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp
index a37f387..a699801 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp
@@ -284,9 +284,9 @@ void ViewWindow::createTriggersTabActions()
{
createAction(REFRESH_TRIGGERS, ICONS.RELOAD, tr("Refresh trigger list", "view window"), this, SLOT(refreshTriggers()), ui->triggersToolbar, ui->triggersList);
ui->triggersToolbar->addSeparator();
- createAction(ADD_TRIGGER, ICONS.TRIGGER_ADD, tr("Create new triger", "view window"), this, SLOT(addTrigger()), ui->triggersToolbar, ui->triggersList);
- createAction(EDIT_TRIGGER, ICONS.TRIGGER_EDIT, tr("Edit selected triger", "view window"), this, SLOT(editTrigger()), ui->triggersToolbar, ui->triggersList);
- createAction(DEL_TRIGGER, ICONS.TRIGGER_DEL, tr("Delete selected triger", "view window"), this, SLOT(deleteTrigger()), ui->triggersToolbar, ui->triggersList);
+ createAction(ADD_TRIGGER, ICONS.TRIGGER_ADD, tr("Create new trigger", "view window"), this, SLOT(addTrigger()), ui->triggersToolbar, ui->triggersList);
+ createAction(EDIT_TRIGGER, ICONS.TRIGGER_EDIT, tr("Edit selected trigger", "view window"), this, SLOT(editTrigger()), ui->triggersToolbar, ui->triggersList);
+ createAction(DEL_TRIGGER, ICONS.TRIGGER_DEL, tr("Delete selected trigger", "view window"), this, SLOT(deleteTrigger()), ui->triggersToolbar, ui->triggersList);
}
QString ViewWindow::getView() const
{
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.ui b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.ui
index 734a265..94f5ea7 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.ui
@@ -11,10 +11,19 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -33,7 +42,16 @@
<item>
<widget class="QWidget" name="nameWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -116,6 +134,11 @@
</widget>
<customwidgets>
<customwidget>
+ <class>SqlView</class>
+ <extends>QPlainTextEdit</extends>
+ <header>sqlview.h</header>
+ </customwidget>
+ <customwidget>
<class>DataView</class>
<extends>QTabWidget</extends>
<header>dataview.h</header>
@@ -126,11 +149,6 @@
<extends>QPlainTextEdit</extends>
<header>sqleditor.h</header>
</customwidget>
- <customwidget>
- <class>SqlView</class>
- <extends>QPlainTextEdit</extends>
- <header>sqlview.h</header>
- </customwidget>
</customwidgets>
<resources/>
<connections/>