mirror of
https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git
synced 2024-11-15 21:25:44 +08:00
Added missing FloatingWidgetTitleBar.cpp and missing stylesheet file for linux
This commit is contained in:
parent
e98fd5bcb3
commit
5425f2b9e1
187
src/FloatingWidgetTitleBar.cpp
Normal file
187
src/FloatingWidgetTitleBar.cpp
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
** Qt Advanced Docking System
|
||||||
|
** Copyright (C) 2017 Uwe Kindler
|
||||||
|
**
|
||||||
|
** This library is free software; you can redistribute it and/or
|
||||||
|
** modify it under the terms of the GNU Lesser General Public
|
||||||
|
** License as published by the Free Software Foundation; either
|
||||||
|
** version 2.1 of the License, or (at your option) any later version.
|
||||||
|
**
|
||||||
|
** This library is distributed in the hope that it will be useful,
|
||||||
|
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
** Lesser General Public License for more details.
|
||||||
|
**
|
||||||
|
** You should have received a copy of the GNU Lesser General Public
|
||||||
|
** License along with this library; If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
/// \file FloatingWidgetTitleBar.cpp
|
||||||
|
/// \author Uwe Kindler
|
||||||
|
/// \date 13.05.2019
|
||||||
|
/// \brief Implementation of CFloatingWidgetTitleBar class
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
// INCLUDES
|
||||||
|
//============================================================================
|
||||||
|
#include "FloatingWidgetTitleBar.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
#include <QPushButton>
|
||||||
|
#include <QToolButton>
|
||||||
|
#include <QPixmap>
|
||||||
|
#include <QStyle>
|
||||||
|
#include <QMouseEvent>
|
||||||
|
|
||||||
|
#include "ads_globals.h"
|
||||||
|
#include "ElidingLabel.h"
|
||||||
|
#include "FloatingDockContainer.h"
|
||||||
|
|
||||||
|
namespace ads
|
||||||
|
{
|
||||||
|
|
||||||
|
using tTabLabel = CElidingLabel;
|
||||||
|
using tCloseButton = QPushButton;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Private data class of public interface CFloatingWidgetTitleBar
|
||||||
|
*/
|
||||||
|
struct FloatingWidgetTitleBarPrivate
|
||||||
|
{
|
||||||
|
CFloatingWidgetTitleBar* _this; ///< public interface class
|
||||||
|
QLabel* IconLabel = nullptr;
|
||||||
|
tTabLabel* TitleLabel;
|
||||||
|
tCloseButton* CloseButton = nullptr;
|
||||||
|
CFloatingDockContainer* FloatingWidget = nullptr;
|
||||||
|
eDragState DragState = DraggingInactive;
|
||||||
|
|
||||||
|
FloatingWidgetTitleBarPrivate(CFloatingWidgetTitleBar* _public) : _this(_public) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the complete layout including all controls
|
||||||
|
*/
|
||||||
|
void createLayout();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void FloatingWidgetTitleBarPrivate::createLayout()
|
||||||
|
{
|
||||||
|
TitleLabel = new tTabLabel();
|
||||||
|
TitleLabel->setElideMode(Qt::ElideRight);
|
||||||
|
TitleLabel->setText("DockWidget->windowTitle()");
|
||||||
|
TitleLabel->setObjectName("floatingTitleLabel");
|
||||||
|
TitleLabel->setAlignment(Qt::AlignLeft);
|
||||||
|
|
||||||
|
CloseButton = new tCloseButton();
|
||||||
|
CloseButton->setObjectName("floatingTitleCloseButton");
|
||||||
|
CloseButton->setFlat(true);
|
||||||
|
//CloseButton->setAutoRaise(true);
|
||||||
|
// The standard icons do does not look good on high DPI screens
|
||||||
|
QIcon CloseIcon;
|
||||||
|
QPixmap normalPixmap = _this->style()->standardPixmap(QStyle::SP_TitleBarCloseButton, 0, CloseButton);
|
||||||
|
CloseIcon.addPixmap(normalPixmap, QIcon::Normal);
|
||||||
|
CloseIcon.addPixmap(internal::createTransparentPixmap(normalPixmap, 0.25), QIcon::Disabled);
|
||||||
|
CloseButton->setIcon(_this->style()->standardIcon(QStyle::SP_TitleBarCloseButton));
|
||||||
|
CloseButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||||
|
CloseButton->setVisible(true);
|
||||||
|
CloseButton->setFocusPolicy(Qt::NoFocus);
|
||||||
|
_this->connect(CloseButton, SIGNAL(clicked()), SIGNAL(closeRequested()));
|
||||||
|
|
||||||
|
QFontMetrics fm(TitleLabel->font());
|
||||||
|
int Spacing = qRound(fm.height() / 4.0);
|
||||||
|
|
||||||
|
// Fill the layout
|
||||||
|
QBoxLayout* Layout = new QBoxLayout(QBoxLayout::LeftToRight);
|
||||||
|
Layout->setContentsMargins(6,0,0,0);
|
||||||
|
Layout->setSpacing(0);
|
||||||
|
_this->setLayout(Layout);
|
||||||
|
Layout->addWidget(TitleLabel, 1);
|
||||||
|
Layout->addSpacing(Spacing);
|
||||||
|
Layout->addWidget(CloseButton);
|
||||||
|
Layout->setAlignment(Qt::AlignCenter);
|
||||||
|
|
||||||
|
TitleLabel->setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
CFloatingWidgetTitleBar::CFloatingWidgetTitleBar(CFloatingDockContainer *parent)
|
||||||
|
: QWidget(parent),
|
||||||
|
d(new FloatingWidgetTitleBarPrivate(this))
|
||||||
|
{
|
||||||
|
d->FloatingWidget = parent;
|
||||||
|
d->createLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
CFloatingWidgetTitleBar::~CFloatingWidgetTitleBar()
|
||||||
|
{
|
||||||
|
delete d;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CFloatingWidgetTitleBar::mousePressEvent(QMouseEvent* ev)
|
||||||
|
{
|
||||||
|
if (ev->button() == Qt::LeftButton)
|
||||||
|
{
|
||||||
|
d->DragState = DraggingFloatingWidget;
|
||||||
|
d->FloatingWidget->startDragging(ev->pos(), d->FloatingWidget->size(), this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Super::mousePressEvent(ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CFloatingWidgetTitleBar::mouseReleaseEvent(QMouseEvent* ev)
|
||||||
|
{
|
||||||
|
d->DragState = DraggingInactive;
|
||||||
|
Super::mouseReleaseEvent(ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CFloatingWidgetTitleBar::mouseMoveEvent(QMouseEvent* ev)
|
||||||
|
{
|
||||||
|
if (!(ev->buttons() & Qt::LeftButton) || DraggingInactive == d->DragState)
|
||||||
|
{
|
||||||
|
d->DragState = DraggingInactive;
|
||||||
|
Super::mouseMoveEvent(ev);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// move floating window
|
||||||
|
if (DraggingFloatingWidget == d->DragState)
|
||||||
|
{
|
||||||
|
d->FloatingWidget->moveFloating();
|
||||||
|
Super::mouseMoveEvent(ev);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Super::mouseMoveEvent(ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CFloatingWidgetTitleBar::enableCloseButton(bool Enable)
|
||||||
|
{
|
||||||
|
d->CloseButton->setEnabled(Enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
void CFloatingWidgetTitleBar::setTitle(const QString& Text)
|
||||||
|
{
|
||||||
|
d->TitleLabel->setText(Text);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace ads
|
96
src/stylesheets/default_linux.css
Normal file
96
src/stylesheets/default_linux.css
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* Default style sheet on Windows Platforms
|
||||||
|
* Note: Always use CSS-classes with and without "ads--" namespace to support Qt4 & Qt5
|
||||||
|
*/
|
||||||
|
|
||||||
|
ads--CDockContainerWidget
|
||||||
|
{
|
||||||
|
background: palette(dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockContainerWidget QSplitter::handle
|
||||||
|
{
|
||||||
|
background: palette(dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockAreaWidget
|
||||||
|
{
|
||||||
|
background: palette(window);
|
||||||
|
border: 1px solid white;
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockAreaWidget #tabsMenuButton::menu-indicator
|
||||||
|
{
|
||||||
|
image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ads--CDockWidgetTab
|
||||||
|
{
|
||||||
|
background: palette(window);
|
||||||
|
border-color: palette(light);
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 0 1px 0 0;
|
||||||
|
padding: 0 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockWidgetTab[activeTab="true"]
|
||||||
|
{
|
||||||
|
background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:0.5, stop:0 palette(window), stop:1 palette(light));
|
||||||
|
/*background: palette(highlight);*/
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockWidgetTab QLabel
|
||||||
|
{
|
||||||
|
color: palette(dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockWidgetTab[activeTab="true"] QLabel
|
||||||
|
{
|
||||||
|
color: palette(foreground);
|
||||||
|
}
|
||||||
|
|
||||||
|
ads--CDockWidget
|
||||||
|
{
|
||||||
|
background: palette(light);
|
||||||
|
border-color: palette(light);
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tabsMenuButton,
|
||||||
|
#closeButton,
|
||||||
|
#undockButton
|
||||||
|
{
|
||||||
|
padding: 0px -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QScrollArea#dockWidgetScrollArea
|
||||||
|
{
|
||||||
|
padding: 0px;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#tabCloseButton
|
||||||
|
{
|
||||||
|
margin-top: 2px;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
padding: 0px -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tabCloseButton:hover
|
||||||
|
{
|
||||||
|
border: 1px solid rgba(0, 0, 0, 32);
|
||||||
|
background: rgba(0, 0, 0, 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
#tabCloseButton:pressed
|
||||||
|
{
|
||||||
|
background: rgba(0, 0, 0, 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user