summaryrefslogtreecommitdiff
path: root/src/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r--src/mainwindow.cpp90
1 files changed, 68 insertions, 22 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 0a8a160..52cf5e6 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -15,6 +15,7 @@
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#include <cmath>
+#include <QApplication>
#include <QByteArray>
#include <QCloseEvent>
#include <QMenuBar>
@@ -28,20 +29,37 @@
#include <QSettings>
#include <QMessageBox>
#include <QDebug>
-#include "mainwindow.h"
-#include "items/database/databasetable.h"
+#include <QDockWidget>
+#include <QStackedWidget>
+#include "diagramitem.h"
+#include "diagramitemfactory.h"
+#include "diagramitemproperties.h"
#include "commands.h"
#include "utils/iconprovider.h"
+#include "mainwindow.h"
using namespace std;
+class MainWindow::MainWindowPrivate
+{
+public:
+ MainWindowPrivate()
+ {}
+
+ QDockWidget *itemPropsDock;
+ QStackedWidget *propertyEditorsStack;
+ QMap<QString, int> propertyEditorsIndexes;
+};
+
MainWindow::MainWindow()
- : QMainWindow(), m_model(NULL)
+ : QMainWindow(), d(new MainWindowPrivate), m_model(NULL)
{
m_undoGroup = new QUndoGroup(this);
- setupActions();
setupUi();
+ setupActions();
+ setupToolBar();
+ setupMenuBar();
newModel();
QIcon icon;
@@ -64,6 +82,7 @@ MainWindow::~MainWindow()
if (m_model) {
m_undoGroup->removeStack(m_model->undoStack());
}
+ delete d;
}
void
@@ -129,20 +148,25 @@ MainWindow::saveWindowState()
void
MainWindow::setupUi()
{
- setupToolBar();
- setupMenuBar();
-
- m_properties = new TableProperties(this, this);
+ d->itemPropsDock = new QDockWidget(tr("&Properties"), this);
+ d->itemPropsDock->setObjectName("itemPropsDock");
+ d->itemPropsDock->setFeatures(
+ QDockWidget::AllDockWidgetFeatures |
+ QDockWidget::DockWidgetVerticalTitleBar);
+ addDockWidget(Qt::BottomDockWidgetArea, d->itemPropsDock);
+
+ d->propertyEditorsStack = new QStackedWidget(d->itemPropsDock);
+ d->propertyEditorsStack->addWidget(new QWidget(this));
+ foreach (QString name, DiagramItemFactory::keys()) {
+ QWidget *editor = DiagramItemFactory::createPropertiesEditor(name, this);
+ if (editor)
+ d->propertyEditorsIndexes[name] = d->propertyEditorsStack->addWidget(editor);
+ }
+ d->itemPropsDock->setWidget(d->propertyEditorsStack);
m_view = new DiagramView(this);
- m_splitter = new QSplitter(Qt::Vertical, this);
- setCentralWidget(m_splitter);
- m_splitter->addWidget(m_view);
- m_splitter->addWidget(m_properties);
-
- m_splitter->setStretchFactor(0, 6);
- m_splitter->setStretchFactor(1, 1);
+ setCentralWidget(m_view);
}
void
@@ -347,6 +371,8 @@ MainWindow::setupMenuBar()
menu->addAction(m_actionDelete);
QMenu *viewMenu = menuBar()->addMenu(tr("&View"));
+ viewMenu->addAction(d->itemPropsDock->toggleViewAction());
+ viewMenu->addSeparator();
viewMenu->addAction(m_actionShowGrid);
menu = menuBar()->addMenu(tr("&Help"));
@@ -493,9 +519,29 @@ MainWindow::newModel(DiagramDocument *newModel)
void
MainWindow::updateSelection()
{
- DatabaseTable *table = m_model->selectedTable();
- m_properties->setTable(table);
- if (table) {
+ QList<DiagramItem *> items = m_model->selectedItems();
+
+ // Update the property editor
+ bool enablePropertiesEditor = false;
+ DiagramItemProperties *previousEditor = qobject_cast<DiagramItemProperties *>(d->propertyEditorsStack->currentWidget());
+ if (previousEditor)
+ previousEditor->setCurrentItem(NULL);
+ if (items.size() == 1) {
+ DiagramItem *item = items.first();
+ QString itemTypeName = item->typeName();
+ if (d->propertyEditorsIndexes.contains(itemTypeName)) {
+ int index = d->propertyEditorsIndexes.value(itemTypeName);
+ d->propertyEditorsStack->setCurrentIndex(index);
+ static_cast<DiagramItemProperties *>(d->propertyEditorsStack->currentWidget())->setCurrentItem(item);
+ enablePropertiesEditor = true;
+ }
+ }
+ if (!enablePropertiesEditor)
+ d->propertyEditorsStack->setCurrentIndex(0);
+ d->propertyEditorsStack->setEnabled(enablePropertiesEditor);
+
+ // Update edit actions
+ if (items.size() > 0) {
m_actionCut->setEnabled(true);
m_actionCopy->setEnabled(true);
m_actionDelete->setEnabled(true);
@@ -597,16 +643,16 @@ MainWindow::updateRecentFileActions()
void
MainWindow::cut()
{
- DatabaseTable *table = m_model->selectedTable();
+/* DatabaseTable *table = m_model->selectedTable();
QApplication::clipboard()->setMimeData(table->toMimeData());
- m_model->deleteSelectedItems();
+ m_model->deleteSelectedItems();*/
}
void
MainWindow::copy()
{
- DatabaseTable *table = m_model->selectedTable();
- QApplication::clipboard()->setMimeData(table->toMimeData());
+/* DatabaseTable *table = m_model->selectedTable();
+ QApplication::clipboard()->setMimeData(table->toMimeData());*/
}
void