66 lines
1.7 KiB
C++
66 lines
1.7 KiB
C++
#include "gtl_gui_dock.h"
|
|
|
|
|
|
namespace gtl
|
|
{
|
|
namespace gui
|
|
{
|
|
dock::dock(QWidget* parent)
|
|
: QDockWidget(parent)
|
|
{
|
|
_title = new dock_title(this);
|
|
setTitleBarWidget(_title);
|
|
|
|
connect(_title, &dock_title::close, this, &QDockWidget::close);
|
|
connect(_title, &dock_title::pin, this, &dock::pin);
|
|
connect(_title, &dock_title::maximize, this, &dock::maximize);
|
|
|
|
connect(this, &QDockWidget::topLevelChanged, this, &dock::floating_changed);
|
|
}
|
|
|
|
void dock::set_title(QString title)
|
|
{
|
|
_title->set_text(title);
|
|
}
|
|
|
|
void dock::pin(bool value)
|
|
{
|
|
setFloating(!value);
|
|
setAllowedAreas(value ? Qt::LeftDockWidgetArea : Qt::NoDockWidgetArea);
|
|
|
|
// if (value)
|
|
// set_is_maximized(false);
|
|
|
|
_title->set_pin_status(!value);
|
|
}
|
|
|
|
void dock::floating_changed(bool value)
|
|
{
|
|
setAllowedAreas(value ? Qt::LeftDockWidgetArea : Qt::NoDockWidgetArea);
|
|
_title->set_pin_status(value);
|
|
}
|
|
|
|
void dock::maximize(bool value)
|
|
{
|
|
if (value)
|
|
{
|
|
_state = saveGeometry();
|
|
_is_floating = isFloating();
|
|
|
|
setFloating(true);
|
|
setAllowedAreas(Qt::NoDockWidgetArea);
|
|
|
|
showMaximized();
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
restoreGeometry(_state);
|
|
setFloating(_is_floating);
|
|
setAllowedAreas(!_is_floating ? Qt::LeftDockWidgetArea : Qt::NoDockWidgetArea);
|
|
}
|
|
}
|
|
}
|
|
}
|