10 #include <QGuiApplication>
13 #include <QMainWindow>
15 #include <QMouseEvent>
19 #include <QStringBuilder>
21 #include <QToolButton>
26 #include "ui_navigatordialog.h"
36 using namespace swift::gui::settings;
44 CNavigatorDialog::CNavigatorDialog(
QWidget *parent)
73 this->onStyleSheetsChanged();
83 this->insertOwnActions();
86 this->onStyleSheetsChanged();
92 auto *gridLayout =
new QGridLayout(ui->fr_NavigatorDialogInner);
93 gridLayout->setObjectName(
"gl_CNavigatorDialog");
94 gridLayout->setSpacing(0);
95 gridLayout->setContentsMargins(0, 0, 0, 0);
96 ui->fr_NavigatorDialogInner->setLayout(gridLayout);
103 if (!action) {
continue; }
104 auto *tb =
new QToolButton(ui->fr_NavigatorDialogInner);
105 tb->setDefaultAction(action);
106 tb->setObjectName(this->
objectName() % u
':' % action->objectName());
107 if (!action->text().isEmpty()) { tb->setToolTip(action->text()); }
108 gridLayout->addWidget(tb, r, c++);
110 if (c < columns) {
continue; }
114 m_currentColumns = gridLayout->columnCount();
115 this->adjustNavigatorSize(gridLayout);
126 m_mainWindow->
show();
142 visible ?
false : m_originalQuitOnLastWindow);
145 else { m_watchdog.
stop(); }
172 if (!m.
isSuccess()) { CLogMessage::preformatted(m); }
175 void CNavigatorDialog::onStyleSheetsChanged()
182 this->adjustNavigatorSize();
240 if (m_firstBuild) {
return; }
258 void CNavigatorDialog::showContextMenu(
const QPoint &pos)
262 this->addToContextMenu(contextMenu.data());
263 QAction *selectedItem = contextMenu.
data()->exec(globalPos);
264 Q_UNUSED(selectedItem);
267 void CNavigatorDialog::changeLayout()
271 QString v(a->data().toString());
278 void CNavigatorDialog::menuChangeMargins(
const QMargins &margins)
281 this->adjustNavigatorSize();
284 void CNavigatorDialog::dummyFunction()
289 void CNavigatorDialog::onSettingsChanged()
294 void CNavigatorDialog::insertOwnActions()
301 a =
new QAction(CIcons::save16(),
"Save state",
this);
309 a =
new QAction(i,
"Close",
this);
315 int CNavigatorDialog::columnsForRows(
int rows)
317 Q_ASSERT_X(rows >= 0, Q_FUNC_INFO,
"no rows");
319 int c = items / rows;
320 return (c * rows) < items ? c + 1 : c;
323 QGridLayout *CNavigatorDialog::myGridLayout()
const {
return qobject_cast<QGridLayout *>(this->
layout()); }
325 void CNavigatorDialog::adjustNavigatorSize(
QGridLayout *layout)
328 Q_ASSERT_X(gridLayout, Q_FUNC_INFO,
"Missing layout");
331 int h = 16 * gridLayout->
rowCount();
335 h = h + margins.
top() + margins.
bottom();
336 w = w + margins.
left() + margins.
right();
339 const QSize min(w + 2, h + 2);
340 ui->fr_NavigatorDialogInner->setMinimumSize(min);
345 void CNavigatorDialog::onWatchdog()
352 void CNavigatorDialog::addToContextMenu(
QMenu *contextMenu)
const
354 QAction *a = contextMenu->
addAction(CIcons::resize16(),
"1 row",
this, &CNavigatorDialog::changeLayout);
356 a = contextMenu->
addAction(CIcons::resize16(),
"2 rows",
this, &CNavigatorDialog::changeLayout);
358 a = contextMenu->
addAction(CIcons::resize16(),
"1 column",
this, &CNavigatorDialog::changeLayout);
360 a = contextMenu->
addAction(CIcons::resize16(),
"2 columns",
this, &CNavigatorDialog::changeLayout);
362 const QString frameLessActionText = this->
isFrameless() ?
"Normal window" :
"Frameless";
364 contextMenu->
addAction(
"Adjust margins",
this, &CNavigatorDialog::dummyFunction);
365 contextMenu->
addAction(m_marginMenuAction);
bool isShuttingDown() const
Is application shutting down?
Main window which can be frameless.
bool handleMousePressEvent(QMouseEvent *event)
Mouse press, required for frameless window.
virtual void setFrameless(bool frameless)
Framless.
QPoint m_framelessDragPosition
position, if moving is handled with frameless window
bool handleMouseMoveEvent(QMouseEvent *event)
Mouse moving, required for frameless window.
bool isFrameless() const
Frameless?
const CStyleSheetUtility & getStyleSheetUtility() const
Style sheet handling.
void styleSheetsChanged()
Style sheet changed.
static bool stayOnTop(bool onTop, QWidget *widget)
Window flags / stay on top.
static void deleteLayout(QLayout *layout, bool deleteWidgets)
Delete hierarchy of layouts.
static bool useStyleSheetInDerivedWidget(QWidget *derivedWidget, QStyle::PrimitiveElement element=QStyle::PE_Widget)
Use style sheets in derived widgets.
QString style(const QString &fileName) const
Style for given file name.
static const QString & fileNameNavigator()
File name navigator.qss.
void navigatorClosed()
Navigator closed.
void paintEvent(QPaintEvent *event)
void showNavigator(bool visible)
Visibility visibility.
void changeEvent(QEvent *evt)
void buildNavigator(int columns)
Navigator.
void saveToSettings()
Save to settings.
void enterEvent(QEnterEvent *event)
void restoreFromSettings()
Restore from settings.
void mouseReleaseEvent(QMouseEvent *event)
void mousePressEvent(QMouseEvent *event)
void windowFlagsChanged()
Can be used as notification if window mode changes.
void mouseMoveEvent(QMouseEvent *event)
void toggleNavigatorVisibility()
Toggle visibility.
~CNavigatorDialog()
Destructor.
void toggleFrameless()
Toggle frameless mode.
void reject()
Called when dialog is closed.
Settings for navigator bar.
void setColumns(int columns)
Set columns.
bool isFramless() const
Frameless?
void setGeometry(const QByteArray &ba)
Set geometry.
QByteArray getGeometry() const
Geometry.
QMargins getMargins() const
Margins.
void setFrameless(bool frameless)
Frameless.
int getColumns() const
Number pf columns.
void setMargins(const QMargins &margins)
Set margins.
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.
Streamable status message, e.g.
bool isSuccess() const
Operation considered successful.
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
void setData(const QVariant &data)
void triggered(bool checked)
virtual void setVisible(bool visible) override
QEvent::Type type() const const
int columnCount() const const
int rowCount() const const
QMargins contentsMargins() const const
qsizetype size() const const
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QObject * sender() const const
void setObjectName(QAnyStringView name)
QMargins contentsMargins() const const
void setContentsMargins(const QMargins &margins)