File indexing completed on 2024-05-12 04:38:23
0001 /* 0002 SPDX-FileCopyrightText: David Nolden <david.nolden.kdevelop@art-master.de> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "workingsettoolbutton.h" 0008 0009 #include <QContextMenuEvent> 0010 0011 #include <sublime/mainwindow.h> 0012 #include <sublime/area.h> 0013 0014 #include "core.h" 0015 #include "mainwindow.h" 0016 #include "workingset.h" 0017 #include "workingsetcontroller.h" 0018 #include "workingsethelpers.h" 0019 #include "documentcontroller.h" 0020 0021 #include <interfaces/idocumentcontroller.h> 0022 #include <util/activetooltip.h> 0023 0024 using namespace KDevelop; 0025 0026 WorkingSetToolButton::WorkingSetToolButton(QWidget* parent, WorkingSet* set) 0027 : QToolButton(parent), m_set(set), m_toolTipEnabled(true) 0028 { 0029 setFocusPolicy(Qt::NoFocus); 0030 setWorkingSet(set); 0031 setAutoRaise(true); 0032 0033 connect(this, &WorkingSetToolButton::clicked, this, &WorkingSetToolButton::buttonTriggered); 0034 } 0035 0036 WorkingSet* WorkingSetToolButton::workingSet() const 0037 { 0038 return m_set; 0039 } 0040 0041 void WorkingSetToolButton::setWorkingSet(WorkingSet* set) 0042 { 0043 m_set = set; 0044 0045 setIcon(set ? set->icon() : QIcon()); 0046 } 0047 0048 void WorkingSetToolButton::contextMenuEvent(QContextMenuEvent* ev) 0049 { 0050 showTooltip(ev->globalPos()); 0051 0052 ev->accept(); 0053 } 0054 0055 void WorkingSetToolButton::intersectSet() 0056 { 0057 Q_ASSERT(m_set); 0058 0059 m_set->setPersistent(true); 0060 0061 filterViews(Core::self()->workingSetControllerInternal()->workingSet(mainWindow()->area()->workingSet())->fileSet() & m_set->fileSet()); 0062 } 0063 0064 void WorkingSetToolButton::subtractSet() 0065 { 0066 Q_ASSERT(m_set); 0067 0068 m_set->setPersistent(true); 0069 0070 filterViews(Core::self()->workingSetControllerInternal()->workingSet(mainWindow()->area()->workingSet())->fileSet() - m_set->fileSet()); 0071 } 0072 0073 void WorkingSetToolButton::mergeSet() 0074 { 0075 Q_ASSERT(m_set); 0076 0077 const QSet<QString> loadFiles = m_set->fileSet() - Core::self()->workingSetControllerInternal()->workingSet(mainWindow()->area()->workingSet())->fileSet(); 0078 for (const QString& file : loadFiles) { 0079 Core::self()->documentController()->openDocument(QUrl::fromUserInput(file)); 0080 } 0081 } 0082 0083 void WorkingSetToolButton::duplicateSet() 0084 { 0085 Q_ASSERT(m_set); 0086 0087 if(!Core::self()->documentControllerInternal()->saveAllDocumentsForWindow(mainWindow(), KDevelop::IDocument::Default, true)) 0088 return; 0089 WorkingSet* set = Core::self()->workingSetControllerInternal()->newWorkingSet(QStringLiteral("clone")); 0090 set->setPersistent(true); 0091 set->saveFromArea(mainWindow()->area()); 0092 mainWindow()->area()->setWorkingSet(set->id()); 0093 } 0094 0095 void WorkingSetToolButton::loadSet() 0096 { 0097 Q_ASSERT(m_set); 0098 0099 m_set->setPersistent(true); 0100 0101 if(!Core::self()->documentControllerInternal()->saveAllDocumentsForWindow(mainWindow(), KDevelop::IDocument::Default, true)) 0102 return; 0103 mainWindow()->area()->setWorkingSet(QString(m_set->id())); 0104 } 0105 0106 void WorkingSetToolButton::closeSet() 0107 { 0108 Q_ASSERT(m_set); 0109 0110 m_set->setPersistent(true); 0111 m_set->saveFromArea(mainWindow()->area()); 0112 0113 if(!Core::self()->documentControllerInternal()->saveAllDocumentsForWindow(mainWindow(), KDevelop::IDocument::Default, true)) 0114 return; 0115 mainWindow()->area()->setWorkingSet(QString()); 0116 } 0117 0118 bool WorkingSetToolButton::event(QEvent* e) 0119 { 0120 if(m_toolTipEnabled && e->type() == QEvent::ToolTip) { 0121 auto* helpEvent = static_cast<QHelpEvent*>(e); 0122 showTooltip(helpEvent->globalPos()); 0123 e->accept(); 0124 return true; 0125 } 0126 0127 return QToolButton::event(e); 0128 } 0129 0130 void WorkingSetToolButton::showTooltip(const QPoint& globalPos) 0131 { 0132 Q_ASSERT(m_set); 0133 static WorkingSetToolButton* oldTooltipButton; 0134 0135 WorkingSetController* controller = Core::self()->workingSetControllerInternal(); 0136 0137 if(controller->tooltip() && oldTooltipButton == this) 0138 return; 0139 0140 oldTooltipButton = this; 0141 0142 controller->showToolTip(m_set, globalPos + QPoint(10, 20)); 0143 0144 QRect extended(parentWidget()->mapToGlobal(geometry().topLeft()), 0145 parentWidget()->mapToGlobal(geometry().bottomRight())); 0146 controller->tooltip()->setHandleRect(extended); 0147 } 0148 0149 void WorkingSetToolButton::buttonTriggered() 0150 { 0151 Q_ASSERT(m_set); 0152 0153 if(mainWindow()->area()->workingSet() == m_set->id()) { 0154 showTooltip(QCursor::pos()); 0155 }else{ 0156 //Only close the working-set if the file was saved before 0157 if(!Core::self()->documentControllerInternal()->saveAllDocumentsForWindow(mainWindow(), KDevelop::IDocument::Default, true)) 0158 return; 0159 m_set->setPersistent(true); 0160 mainWindow()->area()->setWorkingSet(m_set->id()); 0161 } 0162 } 0163 0164 #include "moc_workingsettoolbutton.cpp"