forked from qt-creator/qt-creator
new editor split system seems to be working now
This commit is contained in:
@@ -569,16 +569,19 @@ void EditorManager::closeView(Core::Internal::EditorView *view)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (view == m_d->m_view) {
|
if (view == m_d->m_view) {
|
||||||
closeEditors(QList<IEditor *>() << view->currentEditor());
|
if (IEditor *e = view->currentEditor())
|
||||||
|
closeEditors(QList<IEditor *>() << e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
emptyView(view);
|
emptyView(view);
|
||||||
|
|
||||||
SplitterOrView *splitterOrView = m_d->m_splitter->findView(view);
|
SplitterOrView *splitterOrView = m_d->m_splitter->findView(view);
|
||||||
|
Q_ASSERT(splitterOrView);
|
||||||
Q_ASSERT(splitterOrView->view() == view);
|
Q_ASSERT(splitterOrView->view() == view);
|
||||||
SplitterOrView *splitter = m_d->m_splitter->findSplitter(splitterOrView);
|
SplitterOrView *splitter = m_d->m_splitter->findSplitter(splitterOrView);
|
||||||
Q_ASSERT(splitterOrView->hasEditors() == false);
|
Q_ASSERT(splitterOrView->hasEditors() == false);
|
||||||
|
splitterOrView->hide();
|
||||||
delete splitterOrView;
|
delete splitterOrView;
|
||||||
|
|
||||||
splitter->unsplit();
|
splitter->unsplit();
|
||||||
@@ -590,6 +593,7 @@ void EditorManager::closeView(Core::Internal::EditorView *view)
|
|||||||
else
|
else
|
||||||
setCurrentView(newCurrent);
|
setCurrentView(newCurrent);
|
||||||
}
|
}
|
||||||
|
updateEditorHistory();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorManager::closeEditor(Core::IEditor *editor)
|
void EditorManager::closeEditor(Core::IEditor *editor)
|
||||||
@@ -726,8 +730,11 @@ bool EditorManager::closeEditors(const QList<IEditor*> editorsToClose, bool askA
|
|||||||
delete editor;
|
delete editor;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentView)
|
if (currentView) {
|
||||||
activateEditor(currentView, currentView->currentEditor());
|
setCurrentView(m_d->m_splitter->findView(currentView));
|
||||||
|
if (IEditor *e = currentView->currentEditor())
|
||||||
|
activateEditor(currentView, e);
|
||||||
|
}
|
||||||
|
|
||||||
return !closingFailed;
|
return !closingFailed;
|
||||||
}
|
}
|
||||||
@@ -744,27 +751,29 @@ IEditor *EditorManager::pickUnusedEditor() const
|
|||||||
|
|
||||||
void EditorManager::activateEditor(IEditor *editor, OpenEditorFlags flags)
|
void EditorManager::activateEditor(IEditor *editor, OpenEditorFlags flags)
|
||||||
{
|
{
|
||||||
|
|
||||||
SplitterOrView *splitterOrView = m_d->m_currentView;
|
SplitterOrView *splitterOrView = m_d->m_currentView;
|
||||||
setCurrentView(0);
|
setCurrentView(0);
|
||||||
|
|
||||||
qDebug() << "currentView" << splitterOrView;
|
if (editor && (flags & ActivateInPlace)) {
|
||||||
|
SplitterOrView *place = m_d->m_splitter->findView(editor);
|
||||||
|
if (place && !place->isSplitter()) {
|
||||||
|
splitterOrView = place;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!splitterOrView)
|
if (!splitterOrView)
|
||||||
splitterOrView = m_d->m_splitter->findEmptyView();
|
splitterOrView = m_d->m_splitter->findEmptyView();
|
||||||
qDebug() << "empty" << splitterOrView;
|
|
||||||
|
|
||||||
|
|
||||||
if (!splitterOrView && m_d->m_currentEditor)
|
if (!splitterOrView && m_d->m_currentEditor)
|
||||||
splitterOrView = m_d->m_splitter->findView(m_d->m_currentEditor);
|
splitterOrView = m_d->m_splitter->findView(m_d->m_currentEditor);
|
||||||
qDebug() << "current editor" << splitterOrView;
|
|
||||||
|
|
||||||
if (!splitterOrView)
|
if (!splitterOrView)
|
||||||
splitterOrView = m_d->m_splitter->findFirstView();
|
splitterOrView = m_d->m_splitter->findFirstView();
|
||||||
qDebug() << "first" << splitterOrView;
|
|
||||||
if (!splitterOrView) {
|
if (!splitterOrView) {
|
||||||
splitterOrView = m_d->m_splitter;
|
splitterOrView = m_d->m_splitter;
|
||||||
}
|
}
|
||||||
qDebug() << "origin" << splitterOrView;
|
|
||||||
|
|
||||||
activateEditor(splitterOrView->view(), editor, flags);
|
activateEditor(splitterOrView->view(), editor, flags);
|
||||||
}
|
}
|
||||||
@@ -805,6 +814,7 @@ void EditorManager::activateEditor(Core::Internal::EditorView *view, Core::IEdit
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool hasCurrent = (view->currentEditor() != 0);
|
bool hasCurrent = (view->currentEditor() != 0);
|
||||||
|
|
||||||
editor = placeEditor(view, editor);
|
editor = placeEditor(view, editor);
|
||||||
if (!(flags & NoActivate) || !hasCurrent)
|
if (!(flags & NoActivate) || !hasCurrent)
|
||||||
view->setCurrentEditor(editor);
|
view->setCurrentEditor(editor);
|
||||||
@@ -1310,6 +1320,10 @@ void EditorManager::updateActions()
|
|||||||
m_d->m_goBackAction->setEnabled(m_d->currentNavigationHistoryPosition > 0);
|
m_d->m_goBackAction->setEnabled(m_d->currentNavigationHistoryPosition > 0);
|
||||||
m_d->m_goForwardAction->setEnabled(m_d->currentNavigationHistoryPosition < m_d->m_navigationHistory.size()-1);
|
m_d->m_goForwardAction->setEnabled(m_d->currentNavigationHistoryPosition < m_d->m_navigationHistory.size()-1);
|
||||||
|
|
||||||
|
bool hasSplitter = m_d->m_splitter->isSplitter();
|
||||||
|
m_d->m_unsplitAction->setEnabled(hasSplitter);
|
||||||
|
m_d->m_gotoOtherWindowAction->setEnabled(hasSplitter);
|
||||||
|
|
||||||
m_d->m_openInExternalEditorAction->setEnabled(curEditor != 0);
|
m_d->m_openInExternalEditorAction->setEnabled(curEditor != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1434,7 +1448,6 @@ QByteArray EditorManager::saveState() const
|
|||||||
QByteArray bytes;
|
QByteArray bytes;
|
||||||
QDataStream stream(&bytes, QIODevice::WriteOnly);
|
QDataStream stream(&bytes, QIODevice::WriteOnly);
|
||||||
|
|
||||||
qDebug() << "saveState";
|
|
||||||
stream << QByteArray("EditorManagerV1");
|
stream << QByteArray("EditorManagerV1");
|
||||||
|
|
||||||
stream << m_d->m_editorStates;
|
stream << m_d->m_editorStates;
|
||||||
@@ -1447,7 +1460,6 @@ QByteArray EditorManager::saveState() const
|
|||||||
editors.prepend(m_d->m_currentEditor);
|
editors.prepend(m_d->m_currentEditor);
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << "save editors:" << editorCount;
|
|
||||||
|
|
||||||
stream << editorCount;
|
stream << editorCount;
|
||||||
foreach (IEditor *editor, editors) {
|
foreach (IEditor *editor, editors) {
|
||||||
@@ -1674,8 +1686,11 @@ void EditorManager::split(Qt::Orientation orientation)
|
|||||||
if (!view)
|
if (!view)
|
||||||
view = m_d->m_currentEditor ? m_d->m_splitter->findView(m_d->m_currentEditor)
|
view = m_d->m_currentEditor ? m_d->m_splitter->findView(m_d->m_currentEditor)
|
||||||
: m_d->m_splitter->findFirstView();
|
: m_d->m_splitter->findFirstView();
|
||||||
if (view)
|
if (view) {
|
||||||
view->split(orientation);
|
view->split(orientation);
|
||||||
|
updateEditorHistory();
|
||||||
|
}
|
||||||
|
updateActions();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorManager::split()
|
void EditorManager::split()
|
||||||
@@ -1698,6 +1713,7 @@ void EditorManager::unsplit()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
closeView(viewToClose->view());
|
closeView(viewToClose->view());
|
||||||
|
updateActions();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorManager::gotoOtherWindow()
|
void EditorManager::gotoOtherWindow()
|
||||||
|
@@ -104,7 +104,9 @@ public:
|
|||||||
|
|
||||||
enum OpenEditorFlag {
|
enum OpenEditorFlag {
|
||||||
NoActivate = 1,
|
NoActivate = 1,
|
||||||
IgnoreNavigationHistory = 2
|
IgnoreNavigationHistory = 2,
|
||||||
|
ActivateInPlace = 4
|
||||||
|
|
||||||
};
|
};
|
||||||
Q_DECLARE_FLAGS(OpenEditorFlags, OpenEditorFlag)
|
Q_DECLARE_FLAGS(OpenEditorFlags, OpenEditorFlag)
|
||||||
|
|
||||||
|
@@ -34,6 +34,7 @@
|
|||||||
#include "editorview.h"
|
#include "editorview.h"
|
||||||
#include "editormanager.h"
|
#include "editormanager.h"
|
||||||
#include "coreimpl.h"
|
#include "coreimpl.h"
|
||||||
|
#include "minisplitter.h"
|
||||||
|
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
@@ -199,8 +200,6 @@ void EditorModel::itemChanged()
|
|||||||
emitDataChanged(qobject_cast<IEditor*>(sender()));
|
emitDataChanged(qobject_cast<IEditor*>(sender()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//================EditorView====================
|
//================EditorView====================
|
||||||
|
|
||||||
EditorView::EditorView(EditorModel *model, QWidget *parent) :
|
EditorView::EditorView(EditorModel *model, QWidget *parent) :
|
||||||
@@ -354,8 +353,6 @@ bool EditorView::hasEditor(IEditor *editor) const
|
|||||||
|
|
||||||
void EditorView::closeView()
|
void EditorView::closeView()
|
||||||
{
|
{
|
||||||
if (editorCount() == 0)
|
|
||||||
return;
|
|
||||||
EditorManager *em = CoreImpl::instance()->editorManager();
|
EditorManager *em = CoreImpl::instance()->editorManager();
|
||||||
em->closeView(this);
|
em->closeView(this);
|
||||||
}
|
}
|
||||||
@@ -397,8 +394,6 @@ void EditorView::setCurrentEditor(IEditor *editor)
|
|||||||
if (!editor || m_container->count() <= 0
|
if (!editor || m_container->count() <= 0
|
||||||
|| m_container->indexOf(editor->widget()) == -1)
|
|| m_container->indexOf(editor->widget()) == -1)
|
||||||
return;
|
return;
|
||||||
if (editor)
|
|
||||||
qDebug() << "EditorView::setCurrentEditor" << editor << editor->file()->fileName();
|
|
||||||
|
|
||||||
const int idx = m_container->indexOf(editor->widget());
|
const int idx = m_container->indexOf(editor->widget());
|
||||||
QTC_ASSERT(idx >= 0, return);
|
QTC_ASSERT(idx >= 0, return);
|
||||||
@@ -664,7 +659,7 @@ SplitterOrView *SplitterOrView::findNextView_helper(SplitterOrView *view, bool *
|
|||||||
void SplitterOrView::split(Qt::Orientation orientation)
|
void SplitterOrView::split(Qt::Orientation orientation)
|
||||||
{
|
{
|
||||||
Q_ASSERT(m_view && m_splitter == 0);
|
Q_ASSERT(m_view && m_splitter == 0);
|
||||||
m_splitter = new QSplitter(this);
|
m_splitter = new MiniSplitter(this);
|
||||||
m_splitter->setOrientation(orientation);
|
m_splitter->setOrientation(orientation);
|
||||||
m_layout->addWidget(m_splitter);
|
m_layout->addWidget(m_splitter);
|
||||||
EditorManager *em = CoreImpl::instance()->editorManager();
|
EditorManager *em = CoreImpl::instance()->editorManager();
|
||||||
@@ -674,7 +669,6 @@ void SplitterOrView::split(Qt::Orientation orientation)
|
|||||||
|
|
||||||
m_view->removeEditor(e);
|
m_view->removeEditor(e);
|
||||||
m_splitter->addWidget(new SplitterOrView(e));
|
m_splitter->addWidget(new SplitterOrView(e));
|
||||||
m_view = 0;
|
|
||||||
|
|
||||||
if (e->duplicateSupported()) {
|
if (e->duplicateSupported()) {
|
||||||
Core::IEditor *duplicate = em->duplicateEditor(e);
|
Core::IEditor *duplicate = em->duplicateEditor(e);
|
||||||
@@ -695,10 +689,9 @@ void SplitterOrView::split(Qt::Orientation orientation)
|
|||||||
m_view = 0;
|
m_view = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
em->setCurrentView(findFirstView());
|
||||||
if (e)
|
if (e)
|
||||||
em->activateEditor(e);
|
em->activateEditor(e);
|
||||||
else
|
|
||||||
em->setCurrentView(findFirstView());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SplitterOrView::close()
|
void SplitterOrView::close()
|
||||||
@@ -728,37 +721,35 @@ void SplitterOrView::unsplit()
|
|||||||
if (!m_splitter)
|
if (!m_splitter)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
qDebug() << "unsplit" << this << m_splitter;
|
Q_ASSERT(m_splitter->count() == 1);
|
||||||
#if 0
|
EditorManager *em = CoreImpl::instance()->editorManager();
|
||||||
SplitterOrView *splitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(0));
|
SplitterOrView *childSplitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(0));
|
||||||
Q_ASSERT(splitterOrView != 0);
|
|
||||||
|
|
||||||
qDebug() << "splitter or view is" << splitterOrView;
|
QSplitter *oldSplitter = m_splitter;
|
||||||
|
m_splitter = 0;
|
||||||
|
|
||||||
if (editor) { // pick the other side
|
if (childSplitterOrView->isSplitter()) {
|
||||||
if (SplitterOrView *view = findView(editor)) {
|
Q_ASSERT(childSplitterOrView->view() == 0);
|
||||||
qDebug() << "view to close is" << view;
|
m_splitter = childSplitterOrView->splitter();
|
||||||
view->close();
|
|
||||||
delete view;
|
|
||||||
}
|
|
||||||
splitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(0));
|
|
||||||
qDebug() << "other splitter or view is" << splitterOrView;
|
|
||||||
}
|
|
||||||
|
|
||||||
QSplitter *old_splitter = m_splitter;
|
|
||||||
EditorView *old_view = m_view;
|
|
||||||
|
|
||||||
m_splitter = splitterOrView->splitter();
|
|
||||||
m_view = splitterOrView->view();
|
|
||||||
|
|
||||||
qDebug() << "new splitter/view" << m_splitter << m_view;
|
|
||||||
|
|
||||||
if (m_splitter)
|
|
||||||
m_layout->addWidget(m_splitter);
|
m_layout->addWidget(m_splitter);
|
||||||
if (m_view)
|
m_layout->setCurrentWidget(m_splitter);
|
||||||
m_layout->addWidget(m_view);
|
} else {
|
||||||
|
EditorView *childView = childSplitterOrView->view();
|
||||||
// delete old_view;
|
Q_ASSERT(childView);
|
||||||
// delete old_splitter;
|
if (m_view) {
|
||||||
#endif
|
if (IEditor *e = childView->currentEditor()) {
|
||||||
|
childView->removeEditor(e);
|
||||||
|
m_view->addEditor(e);
|
||||||
|
m_view->setCurrentEditor(e);
|
||||||
|
}
|
||||||
|
em->emptyView(childView);
|
||||||
|
} else {
|
||||||
|
m_view = childView;
|
||||||
|
childSplitterOrView->m_layout->removeWidget(m_view);
|
||||||
|
m_layout->addWidget(m_view);
|
||||||
|
}
|
||||||
|
m_layout->setCurrentWidget(m_view);
|
||||||
|
}
|
||||||
|
delete oldSplitter;
|
||||||
|
em->setCurrentView(findFirstView());
|
||||||
}
|
}
|
||||||
|
@@ -46,15 +46,6 @@ const int OpenEditorsWindow::WIDTH = 300;
|
|||||||
const int OpenEditorsWindow::HEIGHT = 200;
|
const int OpenEditorsWindow::HEIGHT = 200;
|
||||||
const int OpenEditorsWindow::MARGIN = 4;
|
const int OpenEditorsWindow::MARGIN = 4;
|
||||||
|
|
||||||
bool OpenEditorsWindow::isSameFile(IEditor *editorA, IEditor *editorB) const
|
|
||||||
{
|
|
||||||
if (editorA == editorB)
|
|
||||||
return true;
|
|
||||||
if (!editorA || !editorB)
|
|
||||||
return false;
|
|
||||||
return editorA->file()->fileName() == editorB->file()->fileName();
|
|
||||||
}
|
|
||||||
|
|
||||||
OpenEditorsWindow::OpenEditorsWindow(QWidget *parent) :
|
OpenEditorsWindow::OpenEditorsWindow(QWidget *parent) :
|
||||||
QWidget(parent, Qt::Popup),
|
QWidget(parent, Qt::Popup),
|
||||||
m_editorList(new QTreeWidget(this)),
|
m_editorList(new QTreeWidget(this)),
|
||||||
@@ -209,7 +200,16 @@ void OpenEditorsWindow::setEditors(const QList<IEditor *>&editors, IEditor *curr
|
|||||||
|
|
||||||
m_editorList->clear();
|
m_editorList->clear();
|
||||||
|
|
||||||
|
QList<IEditor *> doneList;
|
||||||
|
QList<IFile *>doneFileList;
|
||||||
foreach (IEditor *editor, editors) {
|
foreach (IEditor *editor, editors) {
|
||||||
|
if (doneList.contains(editor))
|
||||||
|
continue;
|
||||||
|
doneList += editor;
|
||||||
|
if (!editor->widget()->isVisible() && doneFileList.contains(editor->file()))
|
||||||
|
continue;
|
||||||
|
doneFileList += editor->file();
|
||||||
|
|
||||||
QTreeWidgetItem *item = new QTreeWidgetItem();
|
QTreeWidgetItem *item = new QTreeWidgetItem();
|
||||||
|
|
||||||
QString title = editor->displayName();
|
QString title = editor->displayName();
|
||||||
@@ -219,7 +219,7 @@ void OpenEditorsWindow::setEditors(const QList<IEditor *>&editors, IEditor *curr
|
|||||||
item->setText(0, title);
|
item->setText(0, title);
|
||||||
item->setToolTip(0, editor->file()->fileName());
|
item->setToolTip(0, editor->file()->fileName());
|
||||||
item->setData(0, Qt::UserRole, QVariant::fromValue(editor));
|
item->setData(0, Qt::UserRole, QVariant::fromValue(editor));
|
||||||
item->setFlags(Qt::ItemIsSelectable);
|
//item->setFlags(Qt::ItemIsSelectable);
|
||||||
|
|
||||||
item->setTextAlignment(0, Qt::AlignLeft);
|
item->setTextAlignment(0, Qt::AlignLeft);
|
||||||
|
|
||||||
@@ -236,7 +236,7 @@ void OpenEditorsWindow::selectEditor(QTreeWidgetItem *item)
|
|||||||
if (item)
|
if (item)
|
||||||
editor = item->data(0, Qt::UserRole).value<IEditor*>();
|
editor = item->data(0, Qt::UserRole).value<IEditor*>();
|
||||||
if (editor)
|
if (editor)
|
||||||
EditorManager::instance()->activateEditor(editor);
|
EditorManager::instance()->activateEditor(editor, EditorManager::ActivateInPlace);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenEditorsWindow::editorClicked(QTreeWidgetItem *item)
|
void OpenEditorsWindow::editorClicked(QTreeWidgetItem *item)
|
||||||
|
Reference in New Issue
Block a user