6 #include <QApplication>
10 #include <QLayoutItem>
13 #include <QScopedPointer>
15 #include <QSizePolicy>
19 #include <QVBoxLayout>
22 #include <QWidgetAction>
29 #include "gui/menus/fontmenus.h"
37 using namespace swift::gui::settings;
38 using namespace swift::gui::menus;
42 CDockWidget::CDockWidget(
bool allowStatusBar,
QWidget *parent)
45 m_allowStatusBar(allowStatusBar)
49 this->initTitleBarWidgets();
62 connect(m_input, &CMarginsInput::changedMargins,
this,
63 &CDockWidget::menuChangeMargins);
89 if (!m_titleBarWidgetOriginal) { this->initTitleBarWidgets(); }
99 if (!m_titleBarWidgetOriginal) { this->initTitleBarWidgets(); }
113 this->saveSettings(s);
127 this->saveSettings(s);
144 this->saveSettings(s);
158 m_windowTitleBackup = title;
164 if (!m_allowStatusBar || !this->
isFloating()) {
return; }
170 if (!m_allowStatusBar || !this->
isFloating()) {
return; }
176 m_windowTitleWhenDocked =
show;
188 m_offsetWhenFloating = point;
210 Q_ASSERT(innerWidget);
215 this->forceStyleSheetUpdate();
220 static const QString s(
"outerwidget");
226 static const QString s(
"innerwidget");
232 const bool changeToFloating = !this->
isFloating();
236 if (changeToFloating)
251 if (changeToFloating)
283 m_alwaysOnTop =
true;
292 m_alwaysOnTop =
false;
310 if (myself) { myself->restoreFromSettings(); }
320 if (myself) { myself->restoreFromSettings(); }
330 if (ok) { this->rememberFloatingSizeAndPosition(); }
355 event->setAccepted(
false);
364 this->rememberFloatingSizeAndPosition();
390 contextMenu->
addAction(CIcons::tableSheet16(), frameless ?
"Normal window" :
"Frameless",
this,
399 Q_ASSERT_X(m_fontMenu, Q_FUNC_INFO,
"Missing menu object");
409 contextMenu->
addAction(CIcons::tableSheet16(),
"Margins",
this, &CDockWidget::dummy);
410 contextMenu->
addAction(m_marginMenuAction);
416 this->initStatusBarAndProperties();
420 if (!m_preferredSizeWhenFloating.
isNull())
423 this->
resize(m_preferredSizeWhenFloating);
430 this->restoreFloatingSizeAndPositionDeferred();
440 void CDockWidget::onTopLevelChanged(
bool topLevel)
468 m_wasAlreadyFloating =
true;
490 void CDockWidget::initTitleBarWidgets()
493 m_titleBarWidgetEmpty =
new QWidget(
this);
497 void CDockWidget::initStatusBarAndProperties()
508 Q_ASSERT_X(outerWidget,
"CDockWidget::initStatusBar",
"No outer widget");
509 if (!outerWidget) {
return; }
512 Q_ASSERT_X(outerWidget->
layout(),
"CDockWidget::initStatusBar",
"No outer widget layout");
513 if (!outerWidget->
layout()) {
return; }
515 "CDockWidget::initStatusBar",
"No outer widget layout item");
518 m_allowStatusBar =
false;
523 QFrame *innerWidget = qobject_cast<QFrame *>(
525 Q_ASSERT_X(innerWidget,
"CDockWidget::initStatusBar",
"No inner widget");
528 m_allowStatusBar =
false;
534 if (!m_allowStatusBar) {
return; }
539 Q_ASSERT_X(vLayout,
"CDockWidget::initStatusBar",
"No outer widget layout");
542 m_allowStatusBar =
false;
550 Q_ASSERT(compWidget);
551 if (!compWidget) {
return; }
560 void CDockWidget::showContextMenu(
const QPoint &pos)
565 QAction *selectedItem = contextMenu.
data()->exec(globalPos);
566 Q_UNUSED(selectedItem)
569 void CDockWidget::onVisibilityChanged(
bool visible) { m_dockWidgetVisible =
visible; }
571 void CDockWidget::menuChangeMargins(
const QMargins &margins)
585 void CDockWidget::settingsChanged()
590 void CDockWidget::dummy()
600 void CDockWidget::forceStyleSheetUpdate()
607 void CDockWidget::rememberFloatingSizeAndPosition()
610 m_lastFloatingSize = this->
size();
611 m_lastFloatingPosition = this->
pos();
614 void CDockWidget::restoreFloatingSizeAndPosition()
616 if (!m_lastFloatingSize.
isValid() || m_lastFloatingPosition.
isNull()) {
return; }
617 this->
resize(m_lastFloatingSize);
618 this->
move(m_lastFloatingPosition);
621 void CDockWidget::restoreFloatingSizeAndPositionDeferred()
626 if (!myself) {
return; }
629 if (shift) {
return; }
632 myself->restoreFromSettings();
655 if (m.
isFailure()) { CLogMessage::preformatted(m); }
667 this->saveSettings(s);
674 this->saveSettings(s);
682 if (!
sGui) {
return; }
689 const int osFloatingX = m_offsetWhenFloating.
x();
690 const int osFloatingY = m_offsetWhenFloating.
y();
691 const int x =
pos.x() + osFloatingX;
692 const int y =
pos.y() + osFloatingY;
Main window which can be frameless.
bool handleMousePressEvent(QMouseEvent *event)
Mouse press, required for frameless window.
void addFramelessSizeGripToStatusBar(QStatusBar *statusBar)
Resize grip handle.
void hideFramelessSizeGripInStatusBar()
Resize grip handle.
virtual void setFrameless(bool frameless)
Framless.
bool handleMouseMoveEvent(QMouseEvent *event)
Mouse moving, required for frameless window.
bool isFrameless() const
Frameless?
bool isCmdWindowSizeResetSet() const
Window size reset mode set.
static QScreen * currentScreen()
Current screen.
void styleSheetsChanged()
Style sheet changed.
static QPoint mainWidgetGlobalPosition()
Position of main widget.
static QWidget * mainApplicationWidget()
Main application window widget.
void displayStatusMessages(const swift::misc::CStatusMessageList &statusMessages)
Display status messages.
void displayStatusMessage(const swift::misc::CStatusMessage &statusMessage)
Display status message.
void initStatusBar(QStatusBar *statusBar=nullptr)
Init.
QStatusBar * getStatusBar() const
Get the status bar.
static bool useStyleSheetInDerivedWidget(QWidget *derivedWidget, QStyle::PrimitiveElement element=QStyle::PE_Widget)
Use style sheets in derived widgets.
CStatusMessage setAndSave(const T &value, qint64 timestamp=0)
Write and save in the same step. Must be called from the thread in which the owner lives.
T get() const
Get a copy of the current value.
Derived & error(const char16_t(&format)[N])
Set the severity to error, providing a format string.
Streamable status message, e.g.
bool isFailure() const
Operation considered unsuccessful.
Status messages, e.g. from Core -> GUI.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
High level reusable GUI components.
Free functions in swift::misc.
QVariant data() const const
bool isEmpty() const const
Qt::KeyboardModifiers queryKeyboardModifiers()
virtual QLayoutItem * itemAt(int index) const const=0
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
T findChild(QAnyStringView name, Qt::FindChildOptions options) const const
bool setProperty(const char *name, QVariant &&value)
bool isNull() const const
bool isNull() const const
bool isValid() const const
bool isEmpty() const const
typedef KeyboardModifiers
WidgetWithChildrenShortcut
void msleep(unsigned long msecs)
QMargins contentsMargins() const const
void setContentsMargins(const QMargins &margins)
#define SWIFT_VERIFY_X(COND, WHERE, WHAT)
A weaker kind of assert.
#define SWIFT_VERIFY(COND)
A weaker kind of assert.