kde-extraapps/kdevplatform/shell/mainwindow_actions.cpp
2015-07-26 14:23:17 +03:00

243 lines
6 KiB
C++

/* This file is part of the KDevelop project
Copyright 2002 Falk Brettschneider <falkbr@kdevelop.org>
Copyright 2003 John Firebaugh <jfirebaugh@kde.org>
Copyright 2006 Adam Treat <treat@kde.org>
Copyright 2006, 2007 Alexander Dymo <adymo@kdevelop.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <kconfiggroup.h>
#include <kapplication.h>
#include <kaboutapplicationdialog.h>
#include <knotifyconfigwidget.h>
#include <ktogglefullscreenaction.h>
#include <ktexteditor/editor.h>
#include <sublime/area.h>
#include <sublime/view.h>
#include "core.h"
#include "documentcontroller.h"
#include "mainwindow_p.h"
#include "sessiondialog.h"
#include "uicontroller.h"
#include "mainwindow.h"
#include "loadedpluginsdialog.h"
#include <interfaces/ipartcontroller.h>
namespace KDevelop {
// merge the gotoNext and gotoPrev code, to prevent copy/paste errors
static void gotoPrevNextWindow(bool next)
{
UiController* ui = Core::self()->uiControllerInternal();
if( !ui->activeSublimeWindow() )
return;
Sublime::Area* activeArea = ui->activeArea();
if (!activeArea)
return;
Sublime::View* activeView = ui->activeSublimeWindow()->activeView();
Sublime::AreaIndex* index = activeArea->indexOf(activeView);
if (!index)
return;
int viewIndex = index->views().indexOf(activeView);
viewIndex = next ? viewIndex + 1 : viewIndex -1;
if (viewIndex < 0)
viewIndex = index->views().count() - 1;
else if (viewIndex >= index->views().count())
viewIndex = 0;
if (viewIndex >= 0 && viewIndex < index->views().count())
ui->activeSublimeWindow()->activateView(index->views().at(viewIndex));
}
void MainWindowPrivate::gotoNextWindow()
{
gotoPrevNextWindow(true);
}
void MainWindowPrivate::gotoPreviousWindow()
{
gotoPrevNextWindow(false);
}
void MainWindowPrivate::newToolbarConfig()
{
m_mainWindow->applyMainWindowSettings( KConfigGroup(KGlobal::config(), "MainWindow") );
}
void MainWindowPrivate::settingsDialog()
{
Core::self()->uiControllerInternal()->showSettingsDialog();
}
void MainWindowPrivate::newWindow()
{
Core::self()->uiController()->switchToArea(m_mainWindow->area()->objectName(), UiController::NewWindow);
}
void MainWindowPrivate::splitHorizontal()
{
split(Qt::Vertical);
}
void MainWindowPrivate::splitVertical()
{
split(Qt::Horizontal);
}
void MainWindowPrivate::split(Qt::Orientation orientation)
{
if (!m_mainWindow->area())
return;
Sublime::View *view = m_mainWindow->activeView();
if (!view)
return;
Sublime::View *newView = view->document()->createView();
m_mainWindow->area()->addView(newView, view, orientation);
m_mainWindow->activateView(newView);
}
static void gotoPrevNextSplit(bool next)
{
UiController* ui = Core::self()->uiControllerInternal();
if( !ui->activeSublimeWindow() )
return;
Sublime::Area* area = ui->activeSublimeWindow()->area();
if (!area)
return;
QList<Sublime::View*> topViews = ui->activeSublimeWindow()->getTopViews();
Sublime::View *activeView = ui->activeSublimeWindow()->activeView();
if (!activeView)
return;
int viewIndex = topViews.indexOf(activeView);
viewIndex = next ? viewIndex + 1 : viewIndex -1;
if (viewIndex < 0)
viewIndex = topViews.count() - 1;
else if (viewIndex >= topViews.count())
viewIndex = 0;
if (viewIndex >= 0 && viewIndex < topViews.count())
ui->activeSublimeWindow()->activateView(topViews.at(viewIndex));
}
void MainWindowPrivate::gotoNextSplit()
{
gotoPrevNextSplit(true);
}
void MainWindowPrivate::gotoPreviousSplit()
{
gotoPrevNextSplit(false);
}
void MainWindowPrivate::toggleFullScreen(bool fullScreen)
{
KToggleFullScreenAction::setFullScreen( m_mainWindow, fullScreen );
}
void MainWindowPrivate::fileNew()
{
Core::self()->documentControllerInternal()->openDocument(DocumentController::nextEmptyDocumentUrl());
}
void MainWindowPrivate::viewAddNewToolView()
{
Core::self()->uiControllerInternal()->selectNewToolViewToAdd(m_mainWindow);
}
void MainWindowPrivate::quitAll()
{
s_quitRequested = true;
QApplication::closeAllWindows();
//if (Core::self()->documentController()->saveAllDocuments(IDocument::Default))
// return qApp->exit();
s_quitRequested = false;
}
void MainWindowPrivate::configureNotifications()
{
KNotifyConfigWidget::configure(m_mainWindow);
}
void MainWindowPrivate::showAboutPlatform()
{
KAboutApplicationDialog dlg(Core::self()->componentData().aboutData(), m_mainWindow );
dlg.exec();
}
void MainWindowPrivate::showLoadedPlugins()
{
LoadedPluginsDialog dlg(m_mainWindow);
dlg.exec();
}
void MainWindowPrivate::showEditorConfig()
{
KTextEditor::Editor* editor = Core::self()->partController()->editorPart();
if (editor->configDialogSupported()) {
editor->configDialog(m_mainWindow);
editor->writeConfig();
}
}
void MainWindowPrivate::contextMenuFileNew()
{
m_mainWindow->activateView(m_tabView);
fileNew();
}
void MainWindowPrivate::contextMenuSplitHorizontal()
{
m_mainWindow->activateView(m_tabView);
splitHorizontal();
}
void MainWindowPrivate::contextMenuSplitVertical()
{
m_mainWindow->activateView(m_tabView);
splitVertical();
}
void MainWindowPrivate::reloadAll()
{
foreach ( IDocument* doc, Core::self()->documentController()->openDocuments() ) {
doc->reload();
}
}
}