Added support for dock widget feature DockWidgetDeleteOnClose, added toolbar action for creation of dynamic editors to demo appication, added new material design icons to improve demo gui

This commit is contained in:
Uwe Kindler
2019-12-10 14:44:44 +01:00
parent 45af8867b2
commit 05f8ce15a2
21 changed files with 366 additions and 14 deletions
+44 -12
View File
@@ -51,6 +51,7 @@
#include <QComboBox>
#include <QInputDialog>
#include <QRubberBand>
#include <QPlainTextEdit>
#include <QMap>
#include <QElapsedTimer>
@@ -115,6 +116,18 @@ static void appendFeaturStringToWindowTitle(ads::CDockWidget* DockWidget)
+ QString(" (%1)").arg(featuresString(DockWidget)));
}
/**
* Helper function to create an SVG icon
*/
static QIcon svgIcon(const QString& File)
{
// This is a workaround, because because in item views SVG icons are not
// properly scaled an look blurry or pixelate
QIcon SvgIcon(File);
SvgIcon.addPixmap(SvgIcon.pixmap(92));
return SvgIcon;
}
//============================================================================
static ads::CDockWidget* createCalendarDockWidget(QMenu* ViewMenu)
@@ -124,6 +137,7 @@ static ads::CDockWidget* createCalendarDockWidget(QMenu* ViewMenu)
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Calendar %1").arg(CalendarCount++));
DockWidget->setWidget(w);
DockWidget->setToggleViewActionMode(ads::CDockWidget::ActionModeShow);
DockWidget->setIcon(svgIcon(":/adsdemo/images/date_range.svg"));
ViewMenu->addAction(DockWidget->toggleViewAction());
return DockWidget;
}
@@ -199,7 +213,6 @@ void MainWindowPrivate::createContent()
// Test container docking
QMenu* ViewMenu = ui.menuView;
auto DockWidget = createCalendarDockWidget(ViewMenu);
DockWidget->setIcon(_this->style()->standardIcon(QStyle::SP_DialogOpenButton));
DockWidget->setFeature(ads::CDockWidget::DockWidgetClosable, false);
DockManager->addDockWidget(ads::LeftDockWidgetArea, DockWidget);
DockManager->addDockWidget(ads::LeftDockWidgetArea, createLongTextLabelDockWidget(ViewMenu));
@@ -229,17 +242,9 @@ void MainWindowPrivate::createContent()
DockManager->addDockWidget(ads::RightDockWidgetArea, createLongTextLabelDockWidget(ViewMenu), RighDockArea);
DockManager->addDockWidget(ads::CenterDockWidgetArea, createLongTextLabelDockWidget(ViewMenu), BottomDockArea);
// Test creation of floating dock widgets
DockWidget = createFileSystemTreeDockWidget(ViewMenu);
auto FloatingWidget = DockManager->addDockWidgetFloating(DockWidget);
FloatingWidget->move(QPoint(20, 20));
FloatingWidget = DockManager->addDockWidgetFloating(createLongTextLabelDockWidget(ViewMenu));
FloatingWidget->move(QPoint(100, 100));
auto Action = ui.menuView->addAction(QString("Set %1 floating").arg(DockWidget->windowTitle()));
DockWidget->connect(Action, SIGNAL(triggered()), SLOT(setFloating()));
for (auto DockWidget : DockManager->dockWidgetsMap())
{
_this->connect(DockWidget, SIGNAL(viewToggled(bool)), SLOT(onViewToggled(bool)));
@@ -251,11 +256,13 @@ void MainWindowPrivate::createContent()
void MainWindowPrivate::createActions()
{
ui.toolBar->addAction(ui.actionSaveState);
ui.actionSaveState->setIcon(_this->style()->standardIcon(QStyle::SP_DialogSaveButton));
ui.toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
ui.actionSaveState->setIcon(svgIcon(":/adsdemo/images/save.svg"));
ui.toolBar->addAction(ui.actionRestoreState);
ui.actionRestoreState->setIcon(_this->style()->standardIcon(QStyle::SP_DialogOpenButton));
ui.actionRestoreState->setIcon(svgIcon(":/adsdemo/images/restore.svg"));
SavePerspectiveAction = new QAction("Save Perspective", _this);
SavePerspectiveAction = new QAction("Create Perspective", _this);
SavePerspectiveAction->setIcon(svgIcon(":/adsdemo/images/picture_in_picture.svg"));
_this->connect(SavePerspectiveAction, SIGNAL(triggered()), SLOT(savePerspective()));
PerspectiveListAction = new QWidgetAction(_this);
PerspectiveComboBox = new QComboBox(_this);
@@ -265,6 +272,11 @@ void MainWindowPrivate::createActions()
ui.toolBar->addSeparator();
ui.toolBar->addAction(PerspectiveListAction);
ui.toolBar->addAction(SavePerspectiveAction);
QAction* a = ui.toolBar->addAction("Create Editor");
a->setToolTip("Creates floating dynamic dockable editor windows that are deleted on close");
a->setIcon(svgIcon(":/adsdemo/images/note_add.svg"));
_this->connect(a, SIGNAL(triggered()), SLOT(createEditor()));
}
@@ -410,3 +422,23 @@ void CMainWindow::onViewToggled(bool Open)
qDebug() << DockWidget->objectName() << " viewToggled(" << Open << ")";
}
//============================================================================
void CMainWindow::createEditor()
{
static int EditorCount = 0;
QPlainTextEdit* w = new QPlainTextEdit();
w->setPlaceholderText("This is an editor. If you close the editor, it will be "
"deleted. Enter your text here.");
w->setStyleSheet("border: none");
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Editor %1").arg(EditorCount++));
DockWidget->setWidget(w);
DockWidget->setToggleViewActionMode(ads::CDockWidget::ActionModeShow);
DockWidget->setIcon(svgIcon(":/adsdemo/images/edit.svg"));
DockWidget->setFeature(ads::CDockWidget::DockWidgetDeleteOnClose, true);
d->ui.menuView->addAction(DockWidget->toggleViewAction());
auto FloatingWidget = d->DockManager->addDockWidgetFloating(DockWidget);
FloatingWidget->move(QPoint(20, 20));
}