mirror of
https://bitbucket.org/smil3y/kde-extraapps.git
synced 2025-02-27 04:13:05 +00:00
180 lines
5.1 KiB
C++
180 lines
5.1 KiB
C++
![]() |
/*
|
||
|
Copyright David Nolden <david.nolden.kdevelop@art-master.de>
|
||
|
|
||
|
This program is free software; you can redistribute it and/or modify
|
||
|
it under the terms of the GNU General Public License as published by
|
||
|
the Free Software Foundation; either version 2 of the License, or
|
||
|
(at your option) any later version.
|
||
|
|
||
|
This program 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 General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License along
|
||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||
|
*/
|
||
|
|
||
|
#include "workingsettoolbutton.h"
|
||
|
|
||
|
#include <QMenu>
|
||
|
#include <QContextMenuEvent>
|
||
|
|
||
|
#include <KLocalizedString>
|
||
|
#include <KColorUtils>
|
||
|
|
||
|
#include <sublime/mainwindow.h>
|
||
|
#include <sublime/area.h>
|
||
|
|
||
|
#include "core.h"
|
||
|
#include "mainwindow.h"
|
||
|
#include "workingset.h"
|
||
|
#include "workingsetcontroller.h"
|
||
|
#include "workingsethelpers.h"
|
||
|
#include "documentcontroller.h"
|
||
|
|
||
|
#include <interfaces/iuicontroller.h>
|
||
|
#include <interfaces/idocumentcontroller.h>
|
||
|
#include <util/activetooltip.h>
|
||
|
|
||
|
using namespace KDevelop;
|
||
|
|
||
|
WorkingSetToolButton::WorkingSetToolButton(QWidget* parent, WorkingSet* set)
|
||
|
: QToolButton(parent), m_set(set), m_toolTipEnabled(true)
|
||
|
{
|
||
|
setFocusPolicy(Qt::NoFocus);
|
||
|
setWorkingSet(set);
|
||
|
setAutoRaise(true);
|
||
|
|
||
|
connect(this, SIGNAL(clicked(bool)), SLOT(buttonTriggered()));
|
||
|
}
|
||
|
|
||
|
WorkingSet* WorkingSetToolButton::workingSet() const
|
||
|
{
|
||
|
return m_set;
|
||
|
}
|
||
|
|
||
|
void WorkingSetToolButton::setWorkingSet(WorkingSet* set)
|
||
|
{
|
||
|
m_set = set;
|
||
|
|
||
|
setIcon(set ? set->icon() : QIcon());
|
||
|
}
|
||
|
|
||
|
void WorkingSetToolButton::contextMenuEvent(QContextMenuEvent* ev)
|
||
|
{
|
||
|
showTooltip();
|
||
|
|
||
|
ev->accept();
|
||
|
}
|
||
|
|
||
|
void WorkingSetToolButton::intersectSet()
|
||
|
{
|
||
|
Q_ASSERT(m_set);
|
||
|
|
||
|
m_set->setPersistent(true);
|
||
|
|
||
|
filterViews(Core::self()->workingSetControllerInternal()->getWorkingSet(mainWindow()->area()->workingSet())->fileList().toSet() & m_set->fileList().toSet());
|
||
|
}
|
||
|
|
||
|
void WorkingSetToolButton::subtractSet()
|
||
|
{
|
||
|
Q_ASSERT(m_set);
|
||
|
|
||
|
m_set->setPersistent(true);
|
||
|
|
||
|
filterViews(Core::self()->workingSetControllerInternal()->getWorkingSet(mainWindow()->area()->workingSet())->fileList().toSet() - m_set->fileList().toSet());
|
||
|
}
|
||
|
|
||
|
void WorkingSetToolButton::mergeSet()
|
||
|
{
|
||
|
Q_ASSERT(m_set);
|
||
|
|
||
|
QSet< QString > loadFiles = m_set->fileList().toSet() - Core::self()->workingSetControllerInternal()->getWorkingSet(mainWindow()->area()->workingSet())->fileList().toSet();
|
||
|
foreach(const QString& file, loadFiles)
|
||
|
Core::self()->documentController()->openDocument(file);
|
||
|
}
|
||
|
|
||
|
void WorkingSetToolButton::duplicateSet()
|
||
|
{
|
||
|
Q_ASSERT(m_set);
|
||
|
|
||
|
if(!Core::self()->documentControllerInternal()->saveAllDocumentsForWindow(mainWindow(), KDevelop::IDocument::Default, true))
|
||
|
return;
|
||
|
WorkingSet* set = Core::self()->workingSetControllerInternal()->newWorkingSet("clone");
|
||
|
set->setPersistent(true);
|
||
|
set->saveFromArea(mainWindow()->area(), mainWindow()->area()->rootIndex());
|
||
|
mainWindow()->area()->setWorkingSet(set->id());
|
||
|
}
|
||
|
|
||
|
void WorkingSetToolButton::loadSet()
|
||
|
{
|
||
|
Q_ASSERT(m_set);
|
||
|
|
||
|
m_set->setPersistent(true);
|
||
|
|
||
|
if(!Core::self()->documentControllerInternal()->saveAllDocumentsForWindow(mainWindow(), KDevelop::IDocument::Default, true))
|
||
|
return;
|
||
|
mainWindow()->area()->setWorkingSet(QString(m_set->id()));
|
||
|
}
|
||
|
|
||
|
void WorkingSetToolButton::closeSet(bool ask)
|
||
|
{
|
||
|
Q_ASSERT(m_set);
|
||
|
|
||
|
m_set->setPersistent(true);
|
||
|
m_set->saveFromArea(mainWindow()->area(), mainWindow()->area()->rootIndex());
|
||
|
|
||
|
if(ask && !Core::self()->documentControllerInternal()->saveAllDocumentsForWindow(mainWindow(), KDevelop::IDocument::Default, true))
|
||
|
return;
|
||
|
mainWindow()->area()->setWorkingSet(QString());
|
||
|
}
|
||
|
|
||
|
bool WorkingSetToolButton::event(QEvent* e)
|
||
|
{
|
||
|
if(m_toolTipEnabled && e->type() == QEvent::ToolTip) {
|
||
|
showTooltip();
|
||
|
e->accept();
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return QToolButton::event(e);
|
||
|
}
|
||
|
|
||
|
void WorkingSetToolButton::showTooltip()
|
||
|
{
|
||
|
Q_ASSERT(m_set);
|
||
|
static WorkingSetToolButton* oldTooltipButton;
|
||
|
|
||
|
WorkingSetController* controller = Core::self()->workingSetControllerInternal();
|
||
|
|
||
|
if(controller->tooltip() && oldTooltipButton == this)
|
||
|
return;
|
||
|
|
||
|
oldTooltipButton = this;
|
||
|
|
||
|
controller->showToolTip(m_set, QCursor::pos() + QPoint(10, 20));
|
||
|
|
||
|
QRect extended(parentWidget()->mapToGlobal(geometry().topLeft()),
|
||
|
parentWidget()->mapToGlobal(geometry().bottomRight()));
|
||
|
controller->tooltip()->addExtendRect(extended);
|
||
|
}
|
||
|
|
||
|
void WorkingSetToolButton::buttonTriggered()
|
||
|
{
|
||
|
Q_ASSERT(m_set);
|
||
|
|
||
|
if(mainWindow()->area()->workingSet() == m_set->id()) {
|
||
|
showTooltip();
|
||
|
}else{
|
||
|
//Only close the working-set if the file was saved before
|
||
|
if(!Core::self()->documentControllerInternal()->saveAllDocumentsForWindow(mainWindow(), KDevelop::IDocument::Default, true))
|
||
|
return;
|
||
|
m_set->setPersistent(true);
|
||
|
mainWindow()->area()->setWorkingSet(m_set->id());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#include "moc_workingsettoolbutton.cpp"
|