diff options
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r-- | src/mainwindow.cpp | 90 |
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 |