16#include <kseparator.h>
47 this->setObjectName(configId +
"DockerHud");
48 this->setAutoFillBackground(
true);
50 m_d->borrowerName = borrowerName;
51 m_d->configId = configId;
53 QVBoxLayout *layout =
new QVBoxLayout();
54 QHBoxLayout *menuLayout =
new QHBoxLayout();
58 m_d->dockerMenu =
new QToolButton();
59 m_d->dockerMenu->setAutoRaise(
true);
60 m_d->dockerMenu->setToolTip(i18n(
"Configure docker panel"));
62 menuLayout->addWidget(
m_d->dockerMenu);
64 m_d->dockerComboBox =
new QComboBox();
65 menuLayout->addWidget(
m_d->dockerComboBox);
67 layout->addLayout(menuLayout);
68 layout->addWidget(
new KSeparator());
69 m_d->dockerLayout =
new QVBoxLayout();
70 layout->addLayout(
m_d->dockerLayout);
71 this->setLayout(layout);
73 m_d->dockerIOULabel =
new QLabel(i18nc(
"%1 is the name of the widget",
"Docker is open in %1. Close %1 to show here.", borrowerName));
74 m_d->dockerIOULabel->setWordWrap(
true);
75 m_d->dockerIOULabel->setAlignment(Qt::AlignCenter);
84 delete m_d->dockerIOULabel;
89 if (
m_d->isBorrowing) {
94 if (this->isVisible() &&
m_d->isShown) {
103 const QString dockerId =
m_d->dockerComboBox->currentData().toString();
104 QDockWidget *docker = mainWindow->findChild<QDockWidget*>(dockerId);
105 if (docker ==
nullptr) {
112 if (!owners.empty() && owners.last() != this->objectName()) {
118 Q_FOREACH(QString waitingWidgetId, owners) {
123 if (!owners.contains(this->objectName())) {
124 owners.append(this->objectName());
129 m_d->oldDockerParent = docker;
133 if (docker->objectName() ==
"AnimationCurvesDocker" || docker->objectName() ==
"TimelineDocker") {
138 m_d->dockerLayout->addWidget(widgetArea);
142 m_d->dockerLayout->addWidget(docker->widget());
143 docker->setWidget(
m_d->dockerIOULabel);
146 m_d->dockerLayout->setStretch(
m_d->dockerLayout->count()-1, 1);
148 m_d->isBorrowing =
true;
151 QString dockerId =
m_d->oldDockerParent->objectName();
154 if (!owners->isEmpty()) {
155 const int idx = owners->indexOf(this->objectName());
156 const bool wasOwner = idx == owners->count()-1;
158 owners->removeAt(idx);
170 if (
m_d->dockerLayout->count() == 2) {
179 QWidget* dockerInside =
m_d->dockerLayout->takeAt(0)->widget();
180 m_d->oldDockerParent->setWidget(dockerInside);
181 dockerInside->setParent(
m_d->oldDockerParent);
183 m_d->oldDockerParent =
nullptr;
184 m_d->isBorrowing =
false;
187 if (!beingTaken && !owners->empty()) {
198 for(
int i = 0; i <
m_d->dockerComboBox->count(); i++) {
199 currentDockerNames.append(
m_d->dockerComboBox->itemText(i));
200 currentDockerIds.append(
m_d->dockerComboBox->itemData(i));
208 Q_FOREACH(QDockWidget* docker, dockers) {
209 if (!currentDockerIds.contains(docker->objectName())) {
210 dockerNames.append(docker->windowTitle());
211 dockerIds.append(docker->objectName());
216 i18n(
"Available dockers"), i18n(
"Current dockers"),
217 dockerNames, dockerIds, currentDockerNames, currentDockerIds,
this);
219 if (config.exec() == QDialog::Accepted) {
223 m_d->dockerComboBox->setCurrentIndex(
m_d->dockerComboBox->findData(currentDocker, Qt::UserRole));
226 if (
m_d->dockerComboBox->currentData().isNull() &&
m_d->dockerComboBox->count() != 0) {
227 m_d->dockerComboBox->setCurrentIndex(0);
238 m_d->dockerComboBox->clear();
244 Q_FOREACH(QString objName, dockerList) {
245 QDockWidget *docker = mainWindow->findChild<QDockWidget*>(objName);
246 if (docker !=
nullptr) {
247 m_d->dockerComboBox->addItem(docker->windowTitle(), docker->objectName());
271 if (!
m_d->isConnected) {
277 QWidget::showEvent(event);
284 QWidget::hideEvent(event);
289 m_d->isShown = isShown;
303 m_d->isConnected =
true;
308 m_d->dockerIOULabel->setText(i18nc(
"%1 is the name of the widget",
309 "Docker is open in %1. Close %1 to show here.", borrowerName));
310 m_d->dockerLayout->addWidget(
m_d->dockerIOULabel);
311 m_d->dockerLayout->setStretchFactor(
m_d->dockerIOULabel, 1);
312 m_d->dockerIOULabel->show();
317 m_d->dockerIOULabel->hide();
318 m_d->dockerLayout->takeAt(0)->widget();
319 m_d->dockerIOULabel->setText(i18nc(
"%1 is the name of the widget",
320 "Docker is open in %1. Close %1 to show here.",
m_d->borrowerName));
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void writeList(const QString &name, const QList< T > &value)
QList< T > readList(const QString &name, const QList< T > &defaultValue=QList< T >())
void writeEntry(const QString &name, const T &value)
T readEntry(const QString &name, const T &defaultValue=T())
QList< QVariant > getChosenData()
void hideEvent(QHideEvent *event) override
void showBorrowerLabel(QString borrowerName)
void returnDocker(bool beingTaken=false)
void writeDockerList(QList< QVariant >)
const QScopedPointer< Private > m_d
void tryConnectToDockers()
void borrowOrReturnDocker()
KisDockerHud(QString borrowerName, QString configId)
QString readCurrentDocker()
void setIsShown(bool isShown)
void showEvent(QShowEvent *event) override
static QHash< QString, QList< QString > > borrowedWidgetOwners
void writeCurrentDocker()
QList< QDockWidget * > dockWidgets() const
Return the list of dock widgets belonging to this main window.
static KisPart * instance()
KisMainWindow * currentMainwindow() const
A special utility titlebar with a title and controls, as well as a central area for adding frequently...
void setWidgetArea(QWidget *widgetArea)
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
QIcon loadIcon(const QString &name)
QVBoxLayout * dockerLayout
QComboBox * dockerComboBox
QDockWidget * oldDockerParent