[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-bugs-dist
Subject: [Bug 59320] Split windows in editor to view the same file
From: Alexander Dymo <adymo () kdevelop ! org>
Date: 2007-03-18 20:43:54
Message-ID: 20070318204354.379.qmail () ktown ! kde ! org
[Download RAW message or body]
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
http://bugs.kde.org/show_bug.cgi?id=59320
adymo kdevelop org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|REOPENED |RESOLVED
Resolution| |FIXED
------- Additional Comments From adymo kdevelop org 2007-03-18 21:43 -------
SVN commit 643941 by dymo:
- refactored KDevelop::PartDocument: splitted it into 2 classes PartDocument for \
generic KPart handling and TextDocument to work with KTextEditor::Document
- made UiController ask PartController whether the document is text or not and load \
TextDocument or PartDocument respectively
- modified TextDocument to always create a KTextEditor::View of already opened part
(this means we will finally open multiple views for the same document)
PS: this grants the 2nd "most wanted" wish in KDevelop but I'd like to note that I've \
implemented this splitting + multiple views per document feature only for KDevelop4.
BUG: 59320
M +2 -2 interfaces/idocument.h
M +2 -0 shell/CMakeLists.txt
M +1 -1 shell/mainwindow_p.cpp
M +20 -19 shell/partdocument.cpp
M +13 -3 shell/partdocument.h
A shell/textdocument.cpp [License: LGPL (v2+)]
A shell/textdocument.h [License: LGPL (v2+)]
M +8 -2 shell/uicontroller.cpp
--- trunk/KDE/kdevelop/lib/interfaces/idocument.h #643940:643941
@ -65,9 +65,9 @
virtual KMimeType::Ptr mimeType() const = 0;
/**
- * Returns the part, if this document is a KPart or 0 otherwise.
+ * Returns the part for given p view if this document is a KPart document or 0 \
otherwise.
*/
- virtual KParts::Part* part() const = 0;
+ virtual KParts::Part* partForView(QWidget *view) const = 0;
/**
* Returns the text editor, if this is a text document or 0 otherwise.
--- trunk/KDE/kdevelop/lib/shell/CMakeLists.txt #643940:643941
@ -23,6 +23,7 @
project.cpp
partcontroller.cpp
partdocument.cpp
+ textdocument.cpp
languagecontroller.cpp
language.cpp
)
@ -46,6 +47,7 @
project.h
partcontroller.h
partdocument.h
+ textdocument.h
languagecontroller.h
language.h
DESTINATION ${INCLUDE_INSTALL_DIR}/kdevelop/shell
--- trunk/KDE/kdevelop/lib/shell/mainwindow_p.cpp #643940:643941
@ -91,7 +91,7 @
if (doc)
{
//activate part if it is not yet activated
- KParts::Part *part = doc->partForWidget(view->widget());
+ KParts::Part *part = doc->partForView(view->widget());
if (Core::self()->partController()->activePart() != part)
Core::self()->partController()->setActivePart(part);
}
--- trunk/KDE/kdevelop/lib/shell/partdocument.cpp #643940:643941
@ -26,7 +26,7 @
struct PartDocumentPrivate {
PartController *partController;
- QMap<QWidget*, KParts::Part*> partForWidget;
+ QMap<QWidget*, KParts::Part*> partForView;
};
PartDocument::PartDocument(PartController *partController, Sublime::Controller \
*controller, const KUrl &url) @ -44,22 +44,27 @
QWidget *PartDocument::createViewWidget(QWidget *parent)
{
Q_UNUSED( parent );
- KParts::Part *part;
- if (url().isEmpty())
- part = d->partController->createTextPart(url(), "", false);
- else
- part = d->partController->createTextPart(url(), "", true);
+ KParts::Part *part = d->partController->createPart(url());
d->partController->addPart(part);
QWidget *w = part->widget();
- d->partForWidget[w] = part;
+ d->partForView[w] = part;
return w;
}
-KParts::Part *PartDocument::partForWidget(QWidget *w)
+KParts::Part *PartDocument::partForView(QWidget *view) const
{
- return d->partForWidget[w];
+ return d->partForView[view];
}
+PartController *PartDocument::partController()
+{
+ return d->partController;
+}
+
+
+
+//KDevelop::IDocument implementation
+
KUrl PartDocument::url() const
{
return Sublime::UrlDocument::url();
@ -67,26 +72,21 @
KMimeType::Ptr PartDocument::mimeType() const
{
- return KMimeType::mimeType("text/plain");
+ return KMimeType::findByUrl(url());
}
-void PartDocument::save()
-{
-}
-
KTextEditor::Document *PartDocument::textDocument() const
{
return 0;
}
-KParts::Part *PartDocument::part() const
+bool PartDocument::isActive() const
{
- return 0;
+ return false;
}
-bool PartDocument::isActive() const
+void PartDocument::save()
{
- return false;
}
void PartDocument::close()
@ -97,7 +97,7 @
{
}
-IDocument::DocumentState KDevelop::PartDocument::state() const
+IDocument::DocumentState PartDocument::state() const
{
return Clean;
}
@ -105,4 +105,5 @
}
#include "partdocument.moc"
+
// kate: space-indent on; indent-width 4; tab-width 4; replace-tabs on
--- trunk/KDE/kdevelop/lib/shell/partdocument.h #643940:643941
@ -34,7 +34,15 @
class PartController;
-//FIXME adymo: refactor
+/**
+The generic document which represents KParts.
+
+This document is used by shell when more specific document classes
+are incapable of loading the url.
+
+This document loads one KPart (read-only or read-write) per view
+and sets part widget to be a view widget.
+*/
class PartDocument: public Sublime::UrlDocument, public IDocument {
Q_OBJECT
public:
@ -42,11 +50,10 @
virtual ~PartDocument();
virtual QWidget *createViewWidget(QWidget *parent = 0);
- KParts::Part *partForWidget(QWidget *w);
+ virtual KParts::Part *partForView(QWidget *view) const;
virtual KUrl url() const;
virtual KMimeType::Ptr mimeType() const;
- virtual KParts::Part* part() const;
virtual KTextEditor::Document* textDocument() const;
virtual void save();
virtual void reload();
@ -54,6 +61,9 @
virtual bool isActive() const;
virtual DocumentState state() const;
+protected:
+ PartController *partController();
+
private:
class PartDocumentPrivate *d;
};
--- trunk/KDE/kdevelop/lib/shell/uicontroller.cpp #643940:643941
@ -36,6 +36,7 @
#include "partcontroller.h"
#include "mainwindow.h"
#include "partdocument.h"
+#include "textdocument.h"
namespace KDevelop {
@ -136,7 +137,12 @
//get a part document
if (!d->parts.contains(url))
- d->parts[url] = new PartDocument(d->core->partController(), this, url);
+ {
+ if (d->core->partController()->isTextType(KMimeType::findByUrl(url)))
+ d->parts[url] = new TextDocument(d->core->partController(), this, url);
+ else
+ d->parts[url] = new PartDocument(d->core->partController(), this, url);
+ }
PartDocument *doc = d->parts[url];
//find a view if there's one already opened in this area
@ -158,7 +164,7 @
area->addView(partView, activeMainWindow()->activeView());
}
activeMainWindow()->activateView(partView);
- d->core->partController()->setActivePart(doc->partForWidget(partView->widget()), \
partView->widget()); + \
d->core->partController()->setActivePart(doc->partForView(partView->widget()), \
partView->widget()); /// todo adymo: activate and focus the partView
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic