CTitlebarWidget
::CTitlebarWidget( QWidget* Parent
) :{
// Set the object name.
setObjectName( "Titlebar" );
// Connect the dock signal when the floating state change.
connect( Parent, SIGNAL( topLevelChanged( bool ) ), this, SLOT( ChangeFloatingState( bool ) ) );
// Create the title label.
m_TitleLabel
= new QLabel( Parent
->windowTitle
() );
m_TitleLabel->setObjectName( "TitlebarLabel" );
// Minimize button.
m_MinimizeButton->setObjectName( "TitlebarMinimizeButton" );
connect( m_MinimizeButton, SIGNAL( clicked() ), this, SLOT( MinimizeButton() ) );
// Maximize button.
m_MaximizeButton->setObjectName( "TitlebarMaximizeButton" );
connect( m_MaximizeButton, SIGNAL( clicked() ), this, SLOT( ChangeParentMaximizeState() ) );
// Float button.
m_FloatButton->setObjectName( "TitlebarFloatButton" );
connect( m_FloatButton, SIGNAL( clicked() ), this, SLOT( FloatButton() ) );
// Close button.
m_CloseButton->setObjectName( "TitlebarCloseButton" );
connect( m_CloseButton, SIGNAL( clicked() ), Parent, SLOT( close() ) );
// Create the control layout.
ControlLayout->setMargin( 0 );
ControlLayout->setSpacing( 0 );
ControlLayout->addWidget( m_MinimizeButton );
ControlLayout->addWidget( m_MaximizeButton );
ControlLayout->addWidget( m_FloatButton );
ControlLayout->addWidget( m_CloseButton );
// Set the floating state.
CDockWidget* ParentDock = static_cast< CDockWidget* >( Parent );
ChangeFloatingState( ParentDock->isFloating() );
// Create the layout.
Layout->setMargin( 4 );
Layout->addWidget( m_TitleLabel );
Layout->addLayout( ControlLayout );
// Set the layout.
setLayout( Layout );
}
void CTitlebarWidget::SetTitle( const QString& Title )
{
m_TitleLabel->setText( Title );
}
QString CTitlebarWidget
::GetTitle() const {
return m_TitleLabel->text();
}
void CTitlebarWidget
::mouseDoubleClickEvent( QMouseEvent* event
) {
ChangeParentMaximizeState();
}
void CTitlebarWidget
::mouseMoveEvent( QMouseEvent* event
) {
// Base class.
QFrame::mouseMoveEvent( event
);
// Check if we move with the left button.
if( event->buttons() == Qt::MouseButton::LeftButton )
{
// Cast the parent.
CDockWidget* Parent = static_cast< CDockWidget* >( parent() );
// Change parent state.
if( Parent->isMaximized() )
Parent->showNormal();
}
}
void CTitlebarWidget::MinimizeButton()
{
CDockWidget* Parent = static_cast< CDockWidget* >( parent() );
Parent->setFloating( false );
}
void CTitlebarWidget::FloatButton()
{
CDockWidget* Parent = static_cast< CDockWidget* >( parent() );
Parent->setFloating( true );
}
void CTitlebarWidget::ChangeParentMaximizeState()
{
// Cast the parent.
CDockWidget* Parent = static_cast< CDockWidget* >( parent() );
// Change parent state.
if( Parent->isMaximized() )
Parent->showNormal();
else
Parent->showMaximized();
}
void CTitlebarWidget::ChangeFloatingState( bool Floating )
{
if( Floating )
{
m_MinimizeButton->setVisible( true );
m_MaximizeButton->setVisible( true );
m_FloatButton->setVisible( false );
}
else
{
m_MinimizeButton->setVisible( false );
m_MaximizeButton->setVisible( false );
m_FloatButton->setVisible( true );
}
}