summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukáš Lalinský <lalinsky@gmail.com>2008-12-12 18:45:34 +0100
committerLukáš Lalinský <lalinsky@gmail.com>2008-12-12 18:45:34 +0100
commit2b09f7747c171c4c39538c844a616b60424f16a3 (patch)
tree7cbe6234224dd777916477659d237eb106e07e9f
parent3a309a16e62a622f1b2ef90871086b274353e9d6 (diff)
downloaddbmodel-2b09f7747c171c4c39538c844a616b60424f16a3.tar.gz
dbmodel-2b09f7747c171c4c39538c844a616b60424f16a3.tar.bz2
Support for relationship modality
-rw-r--r--src/domutils.h25
-rw-r--r--src/items/database/database.pri3
-rw-r--r--src/items/database/databaserelationship.cpp69
-rw-r--r--src/items/database/databaserelationship.h16
-rw-r--r--src/items/database/databaserelationshipproperties.cpp115
-rw-r--r--src/items/database/databaserelationshipproperties.h8
-rw-r--r--src/items/database/databaserelationshipproperties.ui134
-rw-r--r--translations/dbmodel_en.ts70
-rw-r--r--translations/dbmodel_sk.ts78
9 files changed, 428 insertions, 90 deletions
diff --git a/src/domutils.h b/src/domutils.h
index 3fc50d0..bb42ac1 100644
--- a/src/domutils.h
+++ b/src/domutils.h
@@ -17,6 +17,7 @@
#ifndef DOMUTILS_H
#define DOMUTILS_H
+#include <QDebug>
#include <QDomDocument>
#include <QDomElement>
#include <QMetaEnum>
@@ -74,4 +75,28 @@ readEnumElement(QDomElement &parent, const QString &name, T defaultValue, const
return defaultValue;
}
+inline void
+appendBoolElement(QDomDocument doc, QDomElement element, const QString &name, bool value, const QString &trueName = "True", const QString &falseName = "False")
+{
+ appendStringElement(doc, element, name, value ? trueName : falseName);
+}
+
+inline bool
+readBoolElement(QDomElement &parent, const QString &name, bool defaultValue, const QString &trueName = "True", const QString &falseName = "False")
+{
+ QDomElement element = parent.firstChildElement(name);
+ if (!element.isNull()) {
+ QString value = element.text();
+ if (value == trueName) {
+ return true;
+ }
+ else if (value == falseName) {
+ return false;
+ }
+ else {
+ qWarning() << "Invalid value for" << name << ":" << value << "(must be either" << trueName << "or" << falseName << ")";
+ }
+ }
+ return defaultValue;
+}
#endif
diff --git a/src/items/database/database.pri b/src/items/database/database.pri
index 9a7ebe9..5fd4397 100644
--- a/src/items/database/database.pri
+++ b/src/items/database/database.pri
@@ -21,3 +21,6 @@ HEADERS += \
databasetableproperties.h \
databaserelationship.h \
databaserelationshipproperties.h
+
+FORMS += \
+ databaserelationshipproperties.ui
diff --git a/src/items/database/databaserelationship.cpp b/src/items/database/databaserelationship.cpp
index 780c0bb..c51d9d7 100644
--- a/src/items/database/databaserelationship.cpp
+++ b/src/items/database/databaserelationship.cpp
@@ -26,7 +26,9 @@ class DatabaseRelationship::PrivateData
{
public:
PrivateData() :
- cardinality(ZeroOrMore),
+ cardinality(OneToMany),
+ childOptional(false),
+ parentOptional(false),
onUpdateAction(NoAction),
onDeleteAction(NoAction)
{
@@ -60,6 +62,8 @@ public:
}
Cardinality cardinality;
+ bool childOptional;
+ bool parentOptional;
Action onUpdateAction;
Action onDeleteAction;
@@ -68,20 +72,20 @@ public:
QPainterPath targetEnd;
QPolygonF line;
- QPainterPath crowsFootPath(Cardinality cardinality)
+ QPainterPath crowsFootPath(bool toMany, bool optional)
{
- switch (cardinality) {
- case ZeroOrMore:
+ if (toMany) {
+ if (optional) // 0..*
return paths[0];
- case OneOrMore:
+ else // 1..*
return paths[1];
- case ZeroOrOne:
+ }
+ else {
+ if (optional) // 0..1
return paths[2];
- case One:
+ else // 1..1
return paths[3];
}
- Q_ASSERT(false);
- return QPainterPath();
}
QPainterPath arrowHeadPath()
@@ -126,9 +130,37 @@ DatabaseRelationship::setCardinality(Cardinality cardinality)
}
bool
-DatabaseRelationship::isRequired() const
+DatabaseRelationship::isChildOptional() const
{
- return true; // FIXME
+ return d->childOptional;
+}
+
+void
+DatabaseRelationship::setChildOptional(bool optional)
+{
+ if (d->childOptional != optional) {
+ d->childOptional = optional;
+ emit propertyChanged("childOptional", optional);
+ updateLayout();
+ update();
+ }
+}
+
+bool
+DatabaseRelationship::isParentOptional() const
+{
+ return d->parentOptional;
+}
+
+void
+DatabaseRelationship::setParentOptional(bool optional)
+{
+ if (d->parentOptional != optional) {
+ d->parentOptional = optional;
+ emit propertyChanged("parentOptional", optional);
+ updateLayout();
+ update();
+ }
}
QRectF
@@ -337,8 +369,8 @@ DatabaseRelationship::updateLayout()
break;
case DiagramDocument::CrowsFoot:
d->fillEnds = false;
- d->targetEnd = d->crowsFootPath(d->cardinality);
- d->sourceEnd = d->crowsFootPath(isRequired() ? One : ZeroOrOne);
+ d->targetEnd = d->crowsFootPath(d->cardinality != OneToOne, isParentOptional());
+ d->sourceEnd = d->crowsFootPath(d->cardinality == ManyToMany, isChildOptional());
break;
}
@@ -368,7 +400,12 @@ DatabaseRelationship::loadFromXml(QDomElement element, DiagramDocument *document
DiagramConnection::loadFromXml(element, document);
QDomElement relationshipeElement = element.firstChildElement("relationship");
if (!relationshipeElement.isNull()) {
- setCardinality(readEnumElement(relationshipeElement, "cardinality", ZeroOrMore, this, "Cardinality"));
+ setCardinality(readEnumElement(relationshipeElement, "cardinality", OneToMany, this, "Cardinality"));
+ QDomElement modalityElement = relationshipeElement.firstChildElement("modality");
+ if (!modalityElement.isNull()) {
+ setChildOptional(readBoolElement(modalityElement, "child", false, "Optional", "Mandatory"));
+ setParentOptional(readBoolElement(modalityElement, "parent", false, "Optional", "Mandatory"));
+ }
}
}
@@ -379,6 +416,10 @@ DatabaseRelationship::saveToXml(QDomDocument doc, QDomElement element)
QDomElement relationshipeElement = doc.createElement("relationship");
element.appendChild(relationshipeElement);
appendEnumElement(doc, relationshipeElement, "cardinality", d->cardinality, this, "Cardinality");
+ QDomElement modalityElement = doc.createElement("modality");
+ relationshipeElement.appendChild(modalityElement);
+ appendBoolElement(doc, modalityElement, "child", d->childOptional, "Optional", "Mandatory");
+ appendBoolElement(doc, modalityElement, "parent", d->parentOptional, "Optional", "Mandatory");
}
DiagramItemProperties *
diff --git a/src/items/database/databaserelationship.h b/src/items/database/databaserelationship.h
index 9b5f0af..5d7e812 100644
--- a/src/items/database/databaserelationship.h
+++ b/src/items/database/databaserelationship.h
@@ -28,6 +28,8 @@ class DatabaseRelationship : public DiagramConnection
Q_OBJECT
Q_ENUMS(Cardinality Action)
Q_PROPERTY(Cardinality cardinality READ cardinality WRITE setCardinality);
+ Q_PROPERTY(bool childOptional READ isChildOptional WRITE setChildOptional);
+ Q_PROPERTY(bool parentOptional READ isParentOptional WRITE setParentOptional);
public:
DatabaseRelationship(DiagramItem *parent = 0);
@@ -54,14 +56,16 @@ public:
//! Returns true if the foreign key on the child table is also the primary key
bool isIdentifying() const;
- //! Returns true if the foreign key on the child table is required (NOT NULL)
- bool isRequired() const;
+ bool isChildOptional() const;
+ void setChildOptional(bool optional);
+
+ bool isParentOptional() const;
+ void setParentOptional(bool optional);
enum Cardinality {
- ZeroOrMore,
- OneOrMore,
- ZeroOrOne,
- One
+ OneToOne,
+ OneToMany,
+ ManyToMany,
};
//! Returns the cardinality of the relationship
diff --git a/src/items/database/databaserelationshipproperties.cpp b/src/items/database/databaserelationshipproperties.cpp
index 94b2e78..bcdc104 100644
--- a/src/items/database/databaserelationshipproperties.cpp
+++ b/src/items/database/databaserelationshipproperties.cpp
@@ -24,6 +24,7 @@
#include "diagramdocument.h"
#include "databaserelationship.h"
#include "databaserelationshipproperties.h"
+#include "ui_databaserelationshipproperties.h"
class DatabaseRelationshipProperties::PrivateData
{
@@ -34,6 +35,8 @@ public:
QWidget *nameEdit;
QCheckBox *generateNameCheckBox;
QComboBox *cardinalityComboBox;
+ Ui_DatabaseRelationshipForm ui;
+ QButtonGroup *cardinalityButtonGroup;
};
DatabaseRelationshipProperties::DatabaseRelationshipProperties(QWidget *parent)
@@ -46,32 +49,19 @@ QWidget *
DatabaseRelationshipProperties::createRelationshipPage()
{
QWidget *page = new QWidget(this);
- QGridLayout *layout = new QGridLayout(page);
-
- int row = 0;
- d->nameEdit = new QLineEdit(page);
- layout->addWidget(new QLabel(tr("Name:"), page), row, 0);
- layout->addWidget(d->nameEdit, row, 1);
- d->generateNameCheckBox = new QCheckBox(tr("Generated"), page);
- connect(d->generateNameCheckBox, SIGNAL(toggled(bool)), d->nameEdit, SLOT(setDisabled(bool)));
- d->generateNameCheckBox->setChecked(true);
- layout->addWidget(d->generateNameCheckBox, row, 2);
-
- row++;
- d->cardinalityComboBox = new QComboBox(page);
- d->cardinalityComboBox->addItem("Zero or more", DatabaseRelationship::ZeroOrMore);
- d->cardinalityComboBox->addItem("One or more", DatabaseRelationship::OneOrMore);
- d->cardinalityComboBox->addItem("Zero or one", DatabaseRelationship::ZeroOrOne);
- d->cardinalityComboBox->addItem("Exactly one", DatabaseRelationship::One);
- connect(d->cardinalityComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setRelationshipCardinality(int)));
- QHBoxLayout *hbox = new QHBoxLayout();
- hbox->addWidget(d->cardinalityComboBox);
- hbox->addStretch();
- layout->addWidget(new QLabel(tr("Cardinality:"), page), row, 0);
- layout->addLayout(hbox, row, 1, 1, 2);
-
- row++;
- layout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding), row, 0, row, 3);
+ d->ui.setupUi(page);
+
+ connect(d->ui.automaticNameCheckBox, SIGNAL(toggled(bool)), d->ui.nameEdit, SLOT(setDisabled(bool)));
+
+ d->cardinalityButtonGroup = new QButtonGroup(this);
+ d->cardinalityButtonGroup->addButton(d->ui.cardinalityOneToOneRadioButton);
+ d->cardinalityButtonGroup->addButton(d->ui.cardinalityOneToManyRadioButton);
+ d->cardinalityButtonGroup->addButton(d->ui.cardinalityManyToManyRadioButton);
+ connect(d->cardinalityButtonGroup, SIGNAL(buttonClicked(QAbstractButton *)),
+ SLOT(setCardinality(QAbstractButton *)));
+
+ connect(d->ui.modalityChildCheckBox, SIGNAL(toggled(bool)), SLOT(setChildOptional(bool)));
+ connect(d->ui.modalityParentCheckBox, SIGNAL(toggled(bool)), SLOT(setParentOptional(bool)));
return page;
}
@@ -83,8 +73,9 @@ DatabaseRelationshipProperties::switchCurrentItem(DiagramItem *oldItem, DiagramI
disconnect(oldItem, 0, this, 0);
DatabaseRelationship *relationship = currentRelationship();
if (relationship) {
- int index = d->cardinalityComboBox->findData(relationship->cardinality());
- d->cardinalityComboBox->setCurrentIndex(index);
+ updateCardinality();
+ updateChildOptional();
+ updateParentOptional();
connect(relationship, SIGNAL(propertyChanged(const QString &, const QVariant &)), SLOT(updateProperty(const QString &, const QVariant &)));
}
else {
@@ -95,11 +86,47 @@ void
DatabaseRelationshipProperties::updateProperty(const QString &name, const QVariant &value)
{
if (name == "cardinality") {
- int index = d->cardinalityComboBox->findData(value);
- d->cardinalityComboBox->setCurrentIndex(index);
+ updateCardinality();
+ }
+ else if (name == "childOptional") {
+ updateChildOptional();
+ }
+ else if (name == "childOptional") {
+ updateParentOptional();
}
}
+void
+DatabaseRelationshipProperties::updateCardinality()
+{
+ DatabaseRelationship *relationship = currentRelationship();
+ switch (relationship->cardinality()) {
+ case DatabaseRelationship::OneToOne:
+ d->ui.cardinalityOneToOneRadioButton->setChecked(true);
+ break;
+ case DatabaseRelationship::OneToMany:
+ d->ui.cardinalityOneToManyRadioButton->setChecked(true);
+ break;
+ case DatabaseRelationship::ManyToMany:
+ d->ui.cardinalityManyToManyRadioButton->setChecked(true);
+ break;
+ }
+}
+
+void
+DatabaseRelationshipProperties::updateChildOptional()
+{
+ DatabaseRelationship *relationship = currentRelationship();
+ d->ui.modalityChildCheckBox->setChecked(relationship->isChildOptional());
+}
+
+void
+DatabaseRelationshipProperties::updateParentOptional()
+{
+ DatabaseRelationship *relationship = currentRelationship();
+ d->ui.modalityParentCheckBox->setChecked(relationship->isParentOptional());
+}
+
DatabaseRelationship *
DatabaseRelationshipProperties::currentRelationship()
{
@@ -107,11 +134,33 @@ DatabaseRelationshipProperties::currentRelationship()
}
void
-DatabaseRelationshipProperties::setRelationshipCardinality(int index)
+DatabaseRelationshipProperties::setCardinality(QAbstractButton *button)
{
+ DatabaseRelationship::Cardinality cardinality;
+ if (button == d->ui.cardinalityOneToOneRadioButton)
+ cardinality = DatabaseRelationship::OneToOne;
+ else if (button == d->ui.cardinalityOneToManyRadioButton)
+ cardinality = DatabaseRelationship::OneToMany;
+ else if (button == d->ui.cardinalityManyToManyRadioButton)
+ cardinality = DatabaseRelationship::ManyToMany;
+
DatabaseRelationship *relationship = currentRelationship();
- DatabaseRelationship::Cardinality cardinality =
- DatabaseRelationship::Cardinality(d->cardinalityComboBox->itemData(index).toInt());
relationship->document()->undoStack()->push(
new SetObjectPropertyCommand(relationship, "cardinality", cardinality));
}
+
+void
+DatabaseRelationshipProperties::setChildOptional(bool optional)
+{
+ DatabaseRelationship *relationship = currentRelationship();
+ relationship->document()->undoStack()->push(
+ new SetObjectPropertyCommand(relationship, "childOptional", optional));
+}
+
+void
+DatabaseRelationshipProperties::setParentOptional(bool optional)
+{
+ DatabaseRelationship *relationship = currentRelationship();
+ relationship->document()->undoStack()->push(
+ new SetObjectPropertyCommand(relationship, "parentOptional", optional));
+}
diff --git a/src/items/database/databaserelationshipproperties.h b/src/items/database/databaserelationshipproperties.h
index 0d758d2..7229139 100644
--- a/src/items/database/databaserelationshipproperties.h
+++ b/src/items/database/databaserelationshipproperties.h
@@ -19,6 +19,7 @@
#include "diagramitemproperties.h"
class DatabaseRelationship;
+class QAbstractButton;
class DatabaseRelationshipProperties : public DiagramItemProperties
{
@@ -30,10 +31,15 @@ public:
protected:
void switchCurrentItem(DiagramItem *oldItem, DiagramItem *newItem);
+ void updateCardinality();
+ void updateChildOptional();
+ void updateParentOptional();
protected slots:
void updateProperty(const QString &name, const QVariant &value);
- void setRelationshipCardinality(int index);
+ void setCardinality(QAbstractButton *button);
+ void setChildOptional(bool);
+ void setParentOptional(bool);
private:
class PrivateData;
diff --git a/src/items/database/databaserelationshipproperties.ui b/src/items/database/databaserelationshipproperties.ui
new file mode 100644
index 0000000..4bc8bac
--- /dev/null
+++ b/src/items/database/databaserelationshipproperties.ui
@@ -0,0 +1,134 @@
+<ui version="4.0" >
+ <class>DatabaseRelationshipForm</class>
+ <widget class="QWidget" name="DatabaseRelationshipForm" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>501</width>
+ <height>142</height>
+ </rect>
+ </property>
+ <layout class="QGridLayout" name="gridLayout" >
+ <item row="0" column="0" >
+ <widget class="QLabel" name="label_3" >
+ <property name="text" >
+ <string>Name:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" >
+ <layout class="QHBoxLayout" name="horizontalLayout" >
+ <item>
+ <widget class="QLineEdit" name="nameEdit" />
+ </item>
+ <item>
+ <widget class="QCheckBox" name="automaticNameCheckBox" >
+ <property name="text" >
+ <string>Automatic</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="0" >
+ <widget class="QLabel" name="label" >
+ <property name="text" >
+ <string>Cardinality:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1" >
+ <layout class="QHBoxLayout" name="horizontalLayout_2" >
+ <item>
+ <widget class="QRadioButton" name="cardinalityOneToOneRadioButton" >
+ <property name="text" >
+ <string>1:1</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="cardinalityOneToManyRadioButton" >
+ <property name="text" >
+ <string>1:N</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="cardinalityManyToManyRadioButton" >
+ <property name="text" >
+ <string>M:N</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="0" >
+ <widget class="QLabel" name="label_2" >
+ <property name="text" >
+ <string>Modality:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1" >
+ <layout class="QHBoxLayout" name="horizontalLayout_3" >
+ <item>
+ <widget class="QCheckBox" name="modalityParentCheckBox" >
+ <property name="text" >
+ <string>Parent is optional</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="modalityChildCheckBox" >
+ <property name="text" >
+ <string>Child is optional</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item row="3" column="0" colspan="2" >
+ <spacer name="verticalSpacer" >
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0" >
+ <size>
+ <width>418</width>
+ <height>27</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/translations/dbmodel_en.ts b/translations/dbmodel_en.ts
index cbcffbd..79b14c7 100644
--- a/translations/dbmodel_en.ts
+++ b/translations/dbmodel_en.ts
@@ -1,54 +1,86 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS><TS version="1.1" language="en">
-<defaultcodec></defaultcodec>
<context>
<name>ColumnListModel</name>
<message>
- <location filename="../src/items/database/columnlistmodel.cpp" line="173"/>
+ <location filename="../src/items/database/columnlistmodel.cpp" line="176"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/items/database/columnlistmodel.cpp" line="175"/>
+ <location filename="../src/items/database/columnlistmodel.cpp" line="178"/>
<source>Data Type</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/items/database/columnlistmodel.cpp" line="177"/>
+ <location filename="../src/items/database/columnlistmodel.cpp" line="180"/>
<source>Req&apos;d</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/items/database/columnlistmodel.cpp" line="179"/>
+ <location filename="../src/items/database/columnlistmodel.cpp" line="182"/>
<source>PK</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/items/database/columnlistmodel.cpp" line="181"/>
+ <location filename="../src/items/database/columnlistmodel.cpp" line="184"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>DatabaseRelationshipProperties</name>
+ <name>DatabaseRelationshipForm</name>
<message>
- <location filename="../src/items/database/databaserelationshipproperties.cpp" line="42"/>
- <source>&amp;Relationship</source>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="16"/>
+ <source>Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/items/database/databaserelationshipproperties.cpp" line="53"/>
- <source>Name:</source>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="28"/>
+ <source>Automatic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/items/database/databaserelationshipproperties.cpp" line="55"/>
- <source>Generated</source>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="37"/>
+ <source>Cardinality:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/items/database/databaserelationshipproperties.cpp" line="70"/>
- <source>Cardinality:</source>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="46"/>
+ <source>1:1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="53"/>
+ <source>1:N</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="60"/>
+ <source>M:N</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="82"/>
+ <source>Modality:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="91"/>
+ <source>Parent is optional</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="98"/>
+ <source>Child is optional</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DatabaseRelationshipProperties</name>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.cpp" line="45"/>
+ <source>&amp;Relationship</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -334,17 +366,17 @@ Do you want to save your changes?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/mainwindow.cpp" line="667"/>
+ <location filename="../src/mainwindow.cpp" line="670"/>
<source>&amp;%1. %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/mainwindow.cpp" line="724"/>
+ <location filename="../src/mainwindow.cpp" line="727"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/mainwindow.cpp" line="730"/>
+ <location filename="../src/mainwindow.cpp" line="733"/>
<source>&lt;p&gt;
&lt;b&gt;Database Modeller&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://oxygene.sk/lukas/dbmodel/&quot;&gt;http://oxygene.sk/lukas/dbmodel/&lt;/a&gt;&lt;br /&gt;
@@ -354,7 +386,7 @@ Copyright (C) 2008 Lukas Lalinsky
<translation>&lt;p&gt;&lt;b&gt;Database Modeller&lt;/b&gt;&lt;br /&gt;&lt;a href=&quot;http://oxygene.sk/lukas/dbmodel/&quot;&gt;http://oxygene.sk/lukas/dbmodel/&lt;/a&gt;&lt;br /&gt;Copyright (C) 2008 Lukáš Lalinský&lt;/p&gt;</translation>
</message>
<message>
- <location filename="../src/mainwindow.cpp" line="739"/>
+ <location filename="../src/mainwindow.cpp" line="742"/>
<source>Untitled</source>
<translation type="unfinished"></translation>
</message>
diff --git a/translations/dbmodel_sk.ts b/translations/dbmodel_sk.ts
index 92e69c6..ac126a2 100644
--- a/translations/dbmodel_sk.ts
+++ b/translations/dbmodel_sk.ts
@@ -1,54 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS><TS version="1.1" language="sk">
+<defaultcodec></defaultcodec>
<context>
<name>ColumnListModel</name>
<message>
- <location filename="../src/items/database/columnlistmodel.cpp" line="173"/>
+ <location filename="../src/items/database/columnlistmodel.cpp" line="176"/>
<source>Name</source>
<translation>Názov</translation>
</message>
<message>
- <location filename="../src/items/database/columnlistmodel.cpp" line="175"/>
+ <location filename="../src/items/database/columnlistmodel.cpp" line="178"/>
<source>Data Type</source>
<translation>Dátový typ</translation>
</message>
<message>
- <location filename="../src/items/database/columnlistmodel.cpp" line="177"/>
+ <location filename="../src/items/database/columnlistmodel.cpp" line="180"/>
<source>Req&apos;d</source>
<translation>Požadovaný</translation>
</message>
<message>
- <location filename="../src/items/database/columnlistmodel.cpp" line="179"/>
+ <location filename="../src/items/database/columnlistmodel.cpp" line="182"/>
<source>PK</source>
<translation>Primárny kľúč</translation>
</message>
<message>
- <location filename="../src/items/database/columnlistmodel.cpp" line="181"/>
+ <location filename="../src/items/database/columnlistmodel.cpp" line="184"/>
<source>Notes</source>
<translation>Poznámky</translation>
</message>
</context>
<context>
+ <name>DatabaseRelationshipForm</name>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="16"/>
+ <source>Name:</source>
+ <translation>Názov:</translation>
+ </message>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="28"/>
+ <source>Automatic</source>
+ <translation>Automatické</translation>
+ </message>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="37"/>
+ <source>Cardinality:</source>
+ <translation>Kardinalita:</translation>
+ </message>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="46"/>
+ <source>1:1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="53"/>
+ <source>1:N</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="60"/>
+ <source>M:N</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="82"/>
+ <source>Modality:</source>
+ <translation>Modalita:</translation>
+ </message>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="91"/>
+ <source>Parent is optional</source>
+ <translation>Rodič je nepovinný</translation>
+ </message>
+ <message>
+ <location filename="../src/items/database/databaserelationshipproperties.ui" line="98"/>
+ <source>Child is optional</source>
+ <translation>Potomok je nepovinný</translation>
+ </message>
+</context>
+<context>
<name>DatabaseRelationshipProperties</name>
<message>
- <location filename="../src/items/database/databaserelationshipproperties.cpp" line="42"/>
+ <location filename="../src/items/database/databaserelationshipproperties.cpp" line="45"/>
<source>&amp;Relationship</source>
<translation>&amp;Vzťah</translation>
</message>
<message>
<location filename="../src/items/database/databaserelationshipproperties.cpp" line="53"/>
<source>Name:</source>
- <translation>Názov:</translation>
- </message>
- <message>
- <location filename="../src/items/database/databaserelationshipproperties.cpp" line="55"/>
- <source>Generated</source>
- <translation type="unfinished"></translation>
+ <translation type="obsolete">Názov:</translation>
</message>
<message>
<location filename="../src/items/database/databaserelationshipproperties.cpp" line="70"/>
<source>Cardinality:</source>
- <translation>Kardinalita:</translation>
+ <translation type="obsolete">Kardinalita:</translation>
</message>
</context>
<context>
@@ -284,7 +328,7 @@ Do you want to save your changes?</source>
<translation>Dokument bol zmenený. Chcete uložiť Vaše zmeny?</translation>
</message>
<message>
- <location filename="../src/mainwindow.cpp" line="667"/>
+ <location filename="../src/mainwindow.cpp" line="670"/>
<source>&amp;%1. %2</source>
<translation></translation>
</message>
@@ -299,7 +343,7 @@ Do you want to save your changes?</source>
<translation>&amp;Pomocník</translation>
</message>
<message>
- <location filename="../src/mainwindow.cpp" line="724"/>
+ <location filename="../src/mainwindow.cpp" line="727"/>
<source>About</source>
<translation>O aplikácii</translation>
</message>
@@ -324,7 +368,7 @@ Do you want to save your changes?</source>
<translation>Zobraziť m&amp;riežku</translation>
</message>
<message>
- <location filename="../src/mainwindow.cpp" line="739"/>
+ <location filename="../src/mainwindow.cpp" line="742"/>
<source>Untitled</source>
<translation>Nepomenované</translation>
</message>
@@ -349,7 +393,7 @@ Do you want to save your changes?</source>
<translation></translation>
</message>
<message>
- <location filename="../src/mainwindow.cpp" line="730"/>
+ <location filename="../src/mainwindow.cpp" line="733"/>
<source>&lt;p&gt;
&lt;b&gt;Database Modeller&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://oxygene.sk/lukas/dbmodel/&quot;&gt;http://oxygene.sk/lukas/dbmodel/&lt;/a&gt;&lt;br /&gt;