[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kdevelop-bugs
Subject:    [Bug 59320] Split windows in editor to view the same file
From:       Alexander Dymo <adymo () kdevelop ! org>
Date:       2007-03-18 20:43:53
Message-ID: 20070318204353.345.qmail () ktown ! kde ! org
[Download RAW message or body]

------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
         
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