diff --git a/libs/widgets/KoModeBox.cpp b/libs/widgets/KoModeBox.cpp --- a/libs/widgets/KoModeBox.cpp +++ b/libs/widgets/KoModeBox.cpp @@ -71,7 +71,7 @@ } KoCanvasBase *canvas; - QGridLayout *layout; + QVBoxLayout *layout; QList toolActions; // toolActions maintained by toolmanager QList addedToolActions; //tools in the order added to QToolBox QMap addedWidgets; @@ -128,19 +128,15 @@ d->verticalTabsSide = (VerticalTabsSide)cfg.readEntry("ModeBoxVerticalTabsSide", (int)TopSide); d->horizontalTabsSide = (HorizontalTabsSide)cfg.readEntry("ModeBoxHorizontalTabsSide", (int)LeftSide); - d->layout = new QGridLayout(); + d->layout = new QVBoxLayout(); d->stack = new QStackedWidget(); d->tabBar = new QTabBar(); - setIconSize(); - d->tabBar->setExpanding(d->horizontalMode); - if (d->horizontalMode) { - switchTabsSide(d->verticalTabsSide); - } else { - switchTabsSide(d->horizontalTabsSide); - } + d->tabBar->setIconSize(QSize(22,22)); + d->tabBar->setExpanding(true); d->tabBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - d->layout->addWidget(d->stack, 0, 1); + d->layout->addWidget(d->tabBar, 0); + d->layout->addWidget(d->stack, 1); d->layout->setContentsMargins(0,0,0,0); setLayout(d->layout); @@ -183,37 +179,7 @@ void KoModeBox::locationChanged(Qt::DockWidgetArea area) { - resize(0,0); - switch(area) { - case Qt::TopDockWidgetArea: - case Qt::BottomDockWidgetArea: - d->horizontalMode = true; - d->layout->removeWidget(d->stack); - d->layout->addWidget(d->stack, 1, 0); - d->layout->setColumnStretch(1, 0); - d->layout->setRowStretch(1, 100); - break; - case Qt::LeftDockWidgetArea: - case Qt::RightDockWidgetArea: - d->horizontalMode = false; - d->layout->removeWidget(d->stack); - d->layout->addWidget(d->stack, 0, 1); - d->layout->setColumnStretch(1, 100); - d->layout->setRowStretch(1, 0); - break; - default: - break; - } - d->layout->setSizeConstraint(QLayout::SetMinAndMaxSize); - d->layout->invalidate(); - - setIconSize(); - d->tabBar->setExpanding(d->horizontalMode); - if (d->horizontalMode) { - switchTabsSide(d->verticalTabsSide); - } else { - switchTabsSide(d->horizontalTabsSide); - } + // TODO } void KoModeBox::setActiveTool(KoCanvasController *canvas, int id) @@ -301,30 +267,6 @@ return QIcon(QPixmap::fromImage(pm)); } -QIcon KoModeBox::createSimpleIcon(KoToolAction *toolAction) const -{ - QSize iconSize = d->tabBar->iconSize(); - - // This must be a QImage, as drawing to a QPixmap outside the - // UI thread will cause sporadic crashes. - QImage pm(iconSize, QImage::Format_ARGB32_Premultiplied); - pm.fill(Qt::transparent); - QPainter p(&pm); - if (!d->horizontalMode) { - if (d->horizontalTabsSide == LeftSide ) { - p.rotate(90); - p.translate(0,-iconSize.width()); - } else { - p.rotate(-90); - p.translate(-iconSize.height(),0); - } - } - - QIcon::fromTheme(toolAction->iconName()).paint(&p, 0, 0, iconSize.height(), iconSize.width()); - - return QIcon(QPixmap::fromImage(pm)); -} - void KoModeBox::addItem(KoToolAction *toolAction) { QWidget *oldwidget = d->addedWidgets[toolAction->buttonGroupId()]; @@ -345,25 +287,12 @@ d->addedWidgets[toolAction->buttonGroupId()] = widget; // Create a rotated icon with text - if (d->iconMode == IconAndText) { - if (d->horizontalMode) { - d->tabBar->addTab(QIcon::fromTheme(toolAction->iconName()), toolAction->iconText()); - } else { - d->tabBar->addTab(createTextIcon(toolAction), QString()); - } - } else { - int index = d->tabBar->addTab(createSimpleIcon(toolAction), QString()); - d->tabBar->setTabToolTip(index, toolAction->toolTip()); - } + int index = d->tabBar->addTab(QIcon::fromTheme(toolAction->iconName()), QString()); + d->tabBar->setTabToolTip(index, toolAction->iconText()); d->tabBar->blockSignals(false); ScrollArea *sa = new ScrollArea(); - if (d->horizontalMode) { - sa->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); - sa->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - } else { - sa->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - sa->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); - } + sa->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + sa->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); sa->setWidgetResizable(true); sa->setContentsMargins(0,0,0,0); sa->setWidget(widget); @@ -459,66 +388,40 @@ layout->setRowStretch(1, 0); layout->setRowStretch(2, 0); - if (d->horizontalMode) { - layout->setRowStretch(0, 1); - layout->setRowStretch(1, 2); - layout->setRowStretch(2, 1); - layout->setHorizontalSpacing(2); - layout->setVerticalSpacing(0); - foreach(QWidget *widget, optionWidgetList) { - if (!widget->windowTitle().isEmpty()) { - QLabel *l; - layout->addWidget(l = new QLabel(widget->windowTitle()), 0, cnt, 1, 1, Qt::AlignLeft); - d->currentAuxWidgets.insert(l); - } - layout->addWidget(widget, 1, cnt++, 2, 1); - widget->show(); - if (widget != optionWidgetList.last()) { - QFrame *s; - layout->addWidget(s = new QFrame(), 1, cnt, 1, 1, Qt::AlignHCenter); - layout->setColumnMinimumWidth(cnt++, 16); - s->setFrameStyle(QFrame::VLine | QFrame::Sunken); - d->currentAuxWidgets.insert(s); - ++cnt; - } - layout->setColumnStretch(cnt, 100); + layout->setColumnStretch(0, 1); + layout->setColumnStretch(1, 2); + layout->setColumnStretch(2, 1); + layout->setHorizontalSpacing(0); + layout->setVerticalSpacing(2); + int specialCount = 0; + foreach(QWidget *widget, optionWidgetList) { + if (!widget->windowTitle().isEmpty()) { + QLabel *l; + layout->addWidget(l = new QLabel(widget->windowTitle()), cnt++, 0, 1, 3, Qt::AlignHCenter); + d->currentAuxWidgets.insert(l); } - } else { - layout->setColumnStretch(0, 1); - layout->setColumnStretch(1, 2); - layout->setColumnStretch(2, 1); - layout->setHorizontalSpacing(0); - layout->setVerticalSpacing(2); - int specialCount = 0; - foreach(QWidget *widget, optionWidgetList) { - if (!widget->windowTitle().isEmpty()) { - QLabel *l; - layout->addWidget(l = new QLabel(widget->windowTitle()), cnt++, 0, 1, 3, Qt::AlignHCenter); - d->currentAuxWidgets.insert(l); - } - layout->addWidget(widget, cnt++, 0, 1, 3); - QLayout *subLayout = widget->layout(); - if (subLayout) { - for (int i = 0; i < subLayout->count(); ++i) { - QWidget *spacerWidget = subLayout->itemAt(i)->widget(); - if (spacerWidget && spacerWidget->objectName().contains("SpecialSpacer")) { - specialCount++; - } + layout->addWidget(widget, cnt++, 0, 1, 3); + QLayout *subLayout = widget->layout(); + if (subLayout) { + for (int i = 0; i < subLayout->count(); ++i) { + QWidget *spacerWidget = subLayout->itemAt(i)->widget(); + if (spacerWidget && spacerWidget->objectName().contains("SpecialSpacer")) { + specialCount++; } } - widget->show(); - if (widget != optionWidgetList.last()) { - QFrame *s; - layout->addWidget(s = new QFrame(), cnt, 1, 1, 1); - layout->setRowMinimumHeight(cnt++, 16); - s->setFrameStyle(QFrame::HLine | QFrame::Sunken); - d->currentAuxWidgets.insert(s); - } } - if (specialCount == optionWidgetList.count()) { - layout->setRowStretch(cnt, 100); + widget->show(); + if (widget != optionWidgetList.last()) { + QFrame *s; + layout->addWidget(s = new QFrame(), cnt, 1, 1, 1); + layout->setRowMinimumHeight(cnt++, 16); + s->setFrameStyle(QFrame::HLine | QFrame::Sunken); + d->currentAuxWidgets.insert(s); } } + if (specialCount == optionWidgetList.count()) { + layout->setRowStretch(cnt, 100); + } } void ScrollArea::showEvent(QShowEvent *e) @@ -579,17 +482,16 @@ } } -void KoModeBox::slotContextMenuRequested(const QPoint &pos) -{ +void KoModeBox::slotContextMenuRequested(const QPoint &pos) { QMenu menu; - KSelectAction* textAction = new KSelectAction(i18n("Text"), &menu); + KSelectAction *textAction = new KSelectAction(i18n("Text"), &menu); connect(textAction, SIGNAL(triggered(int)), SLOT(switchIconMode(int))); menu.addAction(textAction); textAction->addAction(i18n("Icon and Text")); textAction->addAction(i18n("Icon only")); textAction->setCurrentItem(d->iconMode); - KSelectAction* buttonPositionAction = new KSelectAction(i18n("Tabs side"), &menu); + KSelectAction *buttonPositionAction = new KSelectAction(i18n("Tabs side"), &menu); connect(buttonPositionAction, SIGNAL(triggered(int)), SLOT(switchTabsSide(int))); menu.addAction(buttonPositionAction); if (d->horizontalMode) { @@ -605,55 +507,3 @@ menu.exec(d->tabBar->mapToGlobal(pos)); } -void KoModeBox::switchIconMode(int mode) -{ - d->iconMode = static_cast(mode); - setIconSize(); - updateShownTools(QList()); - - KConfigGroup cfg = KSharedConfig::openConfig()->group("calligra"); - cfg.writeEntry("ModeBoxIconMode", (int)d->iconMode); - -} - -void KoModeBox::switchTabsSide(int side) -{ - if (d->horizontalMode) { - d->verticalTabsSide = static_cast(side); - if (d->verticalTabsSide == TopSide) { - d->layout->removeWidget(d->tabBar); - d->tabBar->setShape(QTabBar::RoundedNorth); - d->layout->addWidget(d->tabBar, 0, 0); - } else { - d->layout->removeWidget(d->tabBar); - d->tabBar->setShape(QTabBar::RoundedSouth); - d->layout->addWidget(d->tabBar, 2, 0); - } - - KConfigGroup cfg = KSharedConfig::openConfig()->group("calligra"); - cfg.writeEntry("ModeBoxVerticalTabsSide", (int)d->verticalTabsSide); - } else { - d->horizontalTabsSide = static_cast(side); - if (d->horizontalTabsSide == LeftSide) { - d->layout->removeWidget(d->tabBar); - d->tabBar->setShape(QTabBar::RoundedWest); - d->layout->addWidget(d->tabBar, 0, 0); - } else { - d->layout->removeWidget(d->tabBar); - d->tabBar->setShape(QTabBar::RoundedEast); - d->layout->addWidget(d->tabBar, 0, 2); - } - - KConfigGroup cfg = KSharedConfig::openConfig()->group("calligra"); - cfg.writeEntry("ModeBoxHorizontalTabsSide", (int)d->horizontalTabsSide); - } - updateShownTools(QList()); -} - -void KoModeBox::setIconSize() const { - if (!d->horizontalMode && d->iconMode == IconAndText) { - d->tabBar->setIconSize(QSize(32,64)); - } else { - d->tabBar->setIconSize(QSize(22,22)); - } -} diff --git a/libs/widgets/KoModeBoxDocker.cpp b/libs/widgets/KoModeBoxDocker.cpp --- a/libs/widgets/KoModeBoxDocker.cpp +++ b/libs/widgets/KoModeBoxDocker.cpp @@ -30,11 +30,11 @@ : m_modeBox(modeBox) { setWidget(modeBox); - setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable); + setFeatures(QDockWidget::NoDockWidgetFeatures); setWindowTitle(""); setObjectName("ModeBox"); - connect(this, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), this, SLOT(locationChanged(Qt::DockWidgetArea))); + connect(this, &KoModeBoxDocker::dockLocationChanged, this, &KoModeBoxDocker::locationChanged); } void KoModeBoxDocker::setCanvas(KoCanvasBase *canvas) diff --git a/libs/widgets/KoModeBox_p.h b/libs/widgets/KoModeBox_p.h --- a/libs/widgets/KoModeBox_p.h +++ b/libs/widgets/KoModeBox_p.h @@ -105,12 +105,6 @@ /// slot for context menu of the tabbar void slotContextMenuRequested(const QPoint &pos); - /// switch icon mode - void switchIconMode(int); - - /// switch tabs side - void switchTabsSide(int); - /** * Add a tool to the modebox. * The tools should all be added before the first showing since adding will not really add @@ -141,9 +135,7 @@ }; QIcon createTextIcon(KoToolAction *toolAction) const; - QIcon createSimpleIcon(KoToolAction *toolAction) const; void addItem(KoToolAction *toolAction); - void setIconSize() const; private: class Private; diff --git a/plugins/textshape/TextTool.h b/plugins/textshape/TextTool.h --- a/plugins/textshape/TextTool.h +++ b/plugins/textshape/TextTool.h @@ -41,6 +41,7 @@ #include #include #include +#include #include @@ -67,6 +68,21 @@ class MockCanvas; class TextToolSelection; +class SimpleWidgetTitleProxyStyle : public QProxyStyle +{ + Q_OBJECT +public: + void drawControl( ControlElement element, const QStyleOption *option, + QPainter *painter, const QWidget *widget) const override + { + if (element == CE_DockWidgetTitle) { + qDebug() << "yeah"; + } else { + qDebug() << "not yeah" << element; + } + } +}; + /** * This is the tool for the text-shape (which is a flake-based plugin). */ diff --git a/plugins/textshape/TextTool.cpp b/plugins/textshape/TextTool.cpp --- a/plugins/textshape/TextTool.cpp +++ b/plugins/textshape/TextTool.cpp @@ -109,6 +109,10 @@ #include #include +#include +#include +#include + class TextToolSelection : public KoToolSelection { @@ -2199,6 +2203,7 @@ { QList > widgets; SimpleCharacterWidget *scw = new SimpleCharacterWidget(this, 0); + scw->setStyle(new SimpleWidgetTitleProxyStyle()); SimpleParagraphWidget *spw = new SimpleParagraphWidget(this, 0); if (m_textEditor.data()) { // connect(m_textEditor.data(), SIGNAL(paragraphStyleApplied(KoParagraphStyle*)), spw, SLOT(slotParagraphStyleApplied(KoParagraphStyle*))); diff --git a/plugins/textshape/TextToolFactory.cpp b/plugins/textshape/TextToolFactory.cpp --- a/plugins/textshape/TextToolFactory.cpp +++ b/plugins/textshape/TextToolFactory.cpp @@ -30,7 +30,7 @@ { setToolTip(i18n("Text editing")); setToolType(dynamicToolType()+",calligrawords,calligraauthor"); - setIconName(koIconName("tool-text")); + setIconName(koIconName("dialog-text-and-font")); setPriority(1); setActivationShapeId(TextShape_SHAPEID "," AnnotationShape_SHAPEID); } diff --git a/plugins/textshape/dialogs/SimpleCharacterWidget.cpp b/plugins/textshape/dialogs/SimpleCharacterWidget.cpp --- a/plugins/textshape/dialogs/SimpleCharacterWidget.cpp +++ b/plugins/textshape/dialogs/SimpleCharacterWidget.cpp @@ -42,6 +42,7 @@ #include #include + SimpleCharacterWidget::SimpleCharacterWidget(TextTool *tool, QWidget *parent) : QWidget(parent), m_styleManager(0),