cutter/src/widgets/CutterDockWidget.h

84 lines
2.6 KiB
C
Raw Normal View History

#ifndef CUTTERWIDGET_H
#define CUTTERWIDGET_H
#include <QDockWidget>
#include "common/RefreshDeferrer.h"
class MainWindow;
class CutterDockWidget : public QDockWidget
{
Q_OBJECT
public:
explicit CutterDockWidget(MainWindow *parent, QAction *action = nullptr);
~CutterDockWidget() override;
bool eventFilter(QObject *object, QEvent *event) override;
2019-01-12 19:25:43 +00:00
bool isVisibleToUser() { return isVisibleToUserCurrent; }
2019-04-27 09:46:29 +00:00
/**
* @brief Set whether the Widget should be deleted after it is closed.
* This is especially important for extra widgets.
*/
void setTransient(bool v) { isTransient = v; }
2019-03-06 20:30:39 +00:00
/**
* @brief Convenience method for creating and registering a RefreshDeferrer without any parameters
* @param refreshNowFunc lambda taking no parameters, called when a refresh should occur
2019-01-13 14:26:55 +00:00
*/
template<typename Func>
RefreshDeferrer *createRefreshDeferrer(Func refreshNowFunc)
{
auto *deferrer = new RefreshDeferrer(nullptr, this);
deferrer->registerFor(this);
connect(deferrer, &RefreshDeferrer::refreshNow, this, [refreshNowFunc](const RefreshDeferrerParamsResult) {
refreshNowFunc();
});
return deferrer;
}
2019-03-06 20:30:39 +00:00
/**
* @brief Convenience method for creating and registering a RefreshDeferrer with a replacing Accumulator
* @param replaceIfNull passed to the ReplacingRefreshDeferrerAccumulator
* @param refreshNowFunc lambda taking a single parameter of type ParamResult, called when a refresh should occur
2019-01-13 14:26:55 +00:00
*/
template<class ParamResult, typename Func>
2019-01-13 13:59:08 +00:00
RefreshDeferrer *createReplacingRefreshDeferrer(bool replaceIfNull, Func refreshNowFunc)
{
2019-01-13 13:59:08 +00:00
auto *deferrer = new RefreshDeferrer(new ReplacingRefreshDeferrerAccumulator<ParamResult>(replaceIfNull), this);
deferrer->registerFor(this);
connect(deferrer, &RefreshDeferrer::refreshNow, this, [refreshNowFunc](const RefreshDeferrerParamsResult paramsResult) {
2019-01-13 13:59:08 +00:00
auto *result = static_cast<const ParamResult *>(paramsResult);
refreshNowFunc(result);
});
return deferrer;
}
signals:
void becameVisibleToUser();
void closed();
public slots:
void toggleDockWidget(bool show);
protected:
virtual QWidget* widgetToFocusOnRaise();
void closeEvent(QCloseEvent *event) override;
QAction *getBoundAction() const;
QString getDockNumber();
MainWindow *mainWindow;
private:
QAction *action;
2019-04-27 09:46:29 +00:00
bool isTransient = false;
bool isVisibleToUserCurrent = false;
void updateIsVisibleToUser();
};
#endif // CUTTERWIDGET_H