[rkward-cvs] SF.net SVN: rkward: [763] trunk/rkward/rkward
tfry at users.sourceforge.net
tfry at users.sourceforge.net
Tue Sep 26 16:53:44 UTC 2006
Revision: 763
http://svn.sourceforge.net/rkward/?rev=763&view=rev
Author: tfry
Date: 2006-09-26 09:53:29 -0700 (Tue, 26 Sep 2006)
Log Message:
-----------
More work on new document MDI
Modified Paths:
--------------
trunk/rkward/rkward/dataeditor/rkeditor.cpp
trunk/rkward/rkward/dataeditor/rkeditor.h
trunk/rkward/rkward/dataeditor/rkeditordataframe.cpp
trunk/rkward/rkward/misc/rkworkplace.cpp
trunk/rkward/rkward/misc/rkworkplace.h
trunk/rkward/rkward/rkward.cpp
trunk/rkward/rkward/windows/Makefile.am
trunk/rkward/rkward/windows/rkcommandeditorwindow.cpp
trunk/rkward/rkward/windows/rkcommandeditorwindow.h
trunk/rkward/rkward/windows/rkhtmlwindow.cpp
trunk/rkward/rkward/windows/rkhtmlwindow.h
Added Paths:
-----------
trunk/rkward/rkward/windows/rkmdiwindow.cpp
trunk/rkward/rkward/windows/rkmdiwindow.h
trunk/rkward/rkward/windows/rkworkplaceview.cpp
trunk/rkward/rkward/windows/rkworkplaceview.h
Modified: trunk/rkward/rkward/dataeditor/rkeditor.cpp
===================================================================
--- trunk/rkward/rkward/dataeditor/rkeditor.cpp 2006-09-25 17:57:13 UTC (rev 762)
+++ trunk/rkward/rkward/dataeditor/rkeditor.cpp 2006-09-26 16:53:29 UTC (rev 763)
@@ -16,7 +16,7 @@
***************************************************************************/
#include "rkeditor.h"
-RKEditor::RKEditor (QWidget *parent) : RKMDIWindow (parent, RKWorkplace::DataEditorWindow) {
+RKEditor::RKEditor (QWidget *parent) : RKMDIWindow (parent, RKMDIWindow::DataEditorWindow) {
}
Modified: trunk/rkward/rkward/dataeditor/rkeditor.h
===================================================================
--- trunk/rkward/rkward/dataeditor/rkeditor.h 2006-09-25 17:57:13 UTC (rev 762)
+++ trunk/rkward/rkward/dataeditor/rkeditor.h 2006-09-26 16:53:29 UTC (rev 763)
@@ -24,7 +24,7 @@
#include <kparts/part.h>
#include <kmdichildview.h>
-#include "../misc/rkworkplace.h"
+#include "../windows/rkmdiwindow.h"
class RCommandChain;
class RKDrag;
Modified: trunk/rkward/rkward/dataeditor/rkeditordataframe.cpp
===================================================================
--- trunk/rkward/rkward/dataeditor/rkeditordataframe.cpp 2006-09-25 17:57:13 UTC (rev 762)
+++ trunk/rkward/rkward/dataeditor/rkeditordataframe.cpp 2006-09-26 16:53:29 UTC (rev 763)
@@ -259,7 +259,6 @@
if (object == getObject ()) {
setCaption (object->getShortName ());
- RKWorkplace::mainWorkplace ()->updateWindowCaption (this);
return;
}
Modified: trunk/rkward/rkward/misc/rkworkplace.cpp
===================================================================
--- trunk/rkward/rkward/misc/rkworkplace.cpp 2006-09-25 17:57:13 UTC (rev 762)
+++ trunk/rkward/rkward/misc/rkworkplace.cpp 2006-09-26 16:53:29 UTC (rev 763)
@@ -25,6 +25,7 @@
#include "../windows/detachedwindowcontainer.h"
#include "../windows/rkcommandeditorwindow.h"
#include "../windows/rkhtmlwindow.h"
+#include "../windows/rkworkplaceview.h"
#include "../core/robject.h"
#include "../core/rcontainerobject.h"
#include "../core/robjectlist.h"
@@ -45,29 +46,22 @@
main_workplace = this;
wview = new RKWorkplaceView (parent);
- connect (wview, SIGNAL (currentChanged (QWidget *)), this, SLOT (activeAttachedChanged (QWidget *)));
part_manager = new KParts::PartManager (RKGlobals::rkApp ());
}
RKWorkplace::~RKWorkplace () {
RK_TRACE (APP);
- closeAll ();
+// closeAll (); // not needed, as the windows will autodelete themselves using QObject mechanism. Of course, closeAll () should be called *before* quitting.
}
void RKWorkplace::attachWindow (RKMDIWindow *window) {
RK_TRACE (APP);
RK_ASSERT (windows.find (window) != windows.end ()); // This should not happen for now.
- connect (window, SIGNAL (captionChanged (RKMDIWindow *)), this, SLOT (updateWindowCaption (RKMDIWindow *)));
- window->state = Attached;
+ window->state = RKMDIWindow::Attached;
+ view ()->addPage (window);
- window->reparent (view (), QPoint (0, 0));
- view ()->addTab (window, *(window->icon ()), window->shortCaption ());
- window->show ();
- view ()->setCurrentPage (view ()->indexOf (window));
- window->setFocus ();
-
RK_ASSERT (window->getPart ());
part_manager->addPart (window->getPart ());
}
@@ -76,8 +70,7 @@
RK_TRACE (APP);
RK_ASSERT (windows.find (window) != windows.end ()); // Can't detach a window that is not attached
- disconnect (window, SIGNAL (captionChanged (RKMDIWindow *)), this, SLOT (updateWindowCaption (RKMDIWindow *)));
- window->state = Detached;
+ window->state = RKMDIWindow::Detached;
RK_ASSERT (window->getPart ());
part_manager->removePart (window->getPart ());
@@ -90,9 +83,8 @@
void RKWorkplace::addWindow (RKMDIWindow *window) {
RK_TRACE (APP);
- connect (window, SIGNAL (destroyed (QObject *)), this, SLOT (windowDestroyed (QObject *)));
-
windows.append (window);
+ connect (window, SIGNAL (destroyed (QObject *)), this, SLOT (windowDestroyed (QObject *)));
attachWindow (window);
}
@@ -191,7 +183,7 @@
RK_TRACE (APP);
for (RKWorkplaceObjectList::const_iterator it = windows.constBegin (); it != windows.constEnd (); ++it) {
- if ((*it)->type == DataEditorWindow) {
+ if ((*it)->type == RKMDIWindow::DataEditorWindow) {
static_cast<RKEditor *> (*it)->flushChanges ();
}
}
@@ -232,30 +224,14 @@
RKMDIWindow *window = static_cast<RKMDIWindow *> (object);
RK_ASSERT (windows.find (window) != windows.end ());
+ view ()->removePage (window, true);
windows.remove (window);
}
-void RKWorkplace::updateWindowCaption (RKMDIWindow *window) {
- RK_TRACE (APP);
-
- RK_ASSERT (windows.find (window) != windows.end ());
- view ()->changeTab (window, window->shortCaption ());
- if (window == activeAttachedWindow ()) emit (changeCaption ());
-}
-
-void RKWorkplace::activeAttachedChanged (QWidget *window) {
- RK_TRACE (APP);
- RKMDIWindow *w = static_cast<RKMDIWindow *>(window);
- RK_ASSERT (windows.find (w) != windows.end ());
- RK_ASSERT (window);
-
- emit (changeCaption ());
-}
-
RKMDIWindow *RKWorkplace::activeAttachedWindow () {
RK_TRACE (APP);
- return (static_cast<RKMDIWindow *> (view ()->currentPage ()));
+ return (static_cast<RKMDIWindow *> (view ()->activePage ()));
}
void RKWorkplace::activateWindow (RKMDIWindow *window) {
Modified: trunk/rkward/rkward/misc/rkworkplace.h
===================================================================
--- trunk/rkward/rkward/misc/rkworkplace.h 2006-09-25 17:57:13 UTC (rev 762)
+++ trunk/rkward/rkward/misc/rkworkplace.h 2006-09-26 16:53:29 UTC (rev 763)
@@ -25,6 +25,7 @@
#include <kurl.h>
#include <kparts/part.h>
+#include "../windows/rkmdiwindow.h"
#include "../rbackend/rcommandreceiver.h"
class RObject;
@@ -32,7 +33,6 @@
class RKWorkplaceView;
class KParts::PartManager;
class RKEditor;
-class RKMDIWindow;
/** This class (only one instance will probably be around) keeps track of which windows are opened in the
workplace, which are detached, etc. Will replace RKEditorManager.
@@ -46,20 +46,6 @@
RKWorkplace (QWidget *parent);
~RKWorkplace ();
- enum ObjectType {
- DataEditorWindow=1,
- CommandEditorWindow=2,
- OutputWindow=4,
- HelpWindow=8,
- AnyType=DataEditorWindow | CommandEditorWindow | OutputWindow | HelpWindow
- };
-
- enum ObjectState {
- Attached=1,
- Detached=2,
- AnyState=Attached | Detached
- };
-
RKWorkplaceView *view () { return wview; };
typedef QValueList<RKMDIWindow *> RKWorkplaceObjectList;
@@ -86,19 +72,16 @@
/** Closes all windows of the given type(s). Default call (no arguments) closes all windows
@param type: A bitwise OR of RKWorkplaceObjectType
@param state: A bitwise OR of RKWorkplaceObjectState */
- void closeAll (int type=AnyType, int state=AnyState);
+ void closeAll (int type=RKMDIWindow::AnyType, int state=RKMDIWindow::AnyState);
void saveWorkplace (RCommandChain *chain=0);
void restoreWorkplace (RCommandChain *chain=0);
static RKWorkplace *mainWorkplace () { return main_workplace; };
signals:
- void lastWindowClosed ();
- void changeCaption ();
+ void lastWindowClosed (); // TODO: unused so far
public slots:
void windowDestroyed (QObject *window);
- void updateWindowCaption (RKMDIWindow *window);
- void activeAttachedChanged (QWidget *window);
protected:
void rCommandDone (RCommand *command);
private:
@@ -110,32 +93,4 @@
KParts::PartManager *part_manager;
};
-/** This is a separate class mostly for future extension. right now, it's just a QTabWidget */
-class RKWorkplaceView : public QTabWidget {
-public:
- RKWorkplaceView (QWidget *parent) : QTabWidget (parent) {};
- ~RKWorkplaceView () {};
-};
-
-class RKMDIWindow : public QWidget {
- Q_OBJECT
-protected:
- RKMDIWindow (QWidget *parent, RKWorkplace::ObjectType type) : QWidget (parent) { RKMDIWindow::type=type; state=RKWorkplace::Attached; };
- ~RKMDIWindow () {};
-public:
- virtual bool isModified () = 0;
- virtual QString fullCaption () { return shortCaption (); };
- virtual QString shortCaption () { return caption (); };
- virtual KParts::Part *getPart () = 0;
- void setCaption (const QString &caption) { QWidget::setCaption (caption); emit (captionChanged (this)); };
- virtual QWidget *getWindow () { return getPart ()->widget (); };
-signals:
- void captionChanged (RKMDIWindow *);
-protected:
-friend class RKWorkplace;
- RKWorkplace::ObjectType type;
-private:
- RKWorkplace::ObjectState state;
-};
-
#endif
Modified: trunk/rkward/rkward/rkward.cpp
===================================================================
--- trunk/rkward/rkward/rkward.cpp 2006-09-25 17:57:13 UTC (rev 762)
+++ trunk/rkward/rkward/rkward.cpp 2006-09-26 16:53:29 UTC (rev 763)
@@ -67,6 +67,7 @@
#include "agents/rkloadagent.h"
#include "windows/rcontrolwindow.h"
#include "windows/rkhtmlwindow.h"
+#include "windows/rkworkplaceview.h"
#include "misc/rkworkplace.h"
#include "khelpdlg.h"
#include "rkconsole.h"
@@ -83,6 +84,7 @@
RKReadLineDialog::readLine (0, QString(), QString(), 0, 0); // TODO: see above
new RKEditorDataFramePart (0);
DetachedWindowContainer (0);
+ new RKWorkplaceView (0);
}
RKwardApp::RKwardApp (KURL *load_url) : DCOPObject ("rkwardapp"), KMdiMainFrm (0, 0, KMdi::IDEAlMode) {
@@ -128,7 +130,7 @@
connect (RKWorkplace::mainWorkplace ()->part_manager, SIGNAL (partAdded (KParts::Part *)), this, SLOT (partAdded (KParts::Part *)));
connect (RKWorkplace::mainWorkplace ()->part_manager, SIGNAL (partRemoved (KParts::Part *)), this, SLOT (partRemoved (KParts::Part *)));
connect (RKWorkplace::mainWorkplace ()->part_manager, SIGNAL (activePartChanged (KParts::Part *)), this, SLOT (createGUI (KParts::Part *)));
- connect (RKWorkplace::mainWorkplace (), SIGNAL (changeCaption (const QString &)), this, SLOT (setCaption (const QString &)));
+ connect (RKWorkplace::mainWorkplace ()->view (), SIGNAL (captionChanged (const QString &)), this, SLOT (setCaption (const QString &)));
toolviews_manager = new KParts::PartManager( this );
@@ -147,6 +149,7 @@
}
}
+#warning Obsolete, remove
void RKwardApp::addWindow (KMdiChildView *view, int flags) {
RK_TRACE (APP);
@@ -612,7 +615,7 @@
void RKwardApp::slotCloseAllEditors () {
RK_TRACE (APP);
- RKWorkplace::mainWorkplace ()->closeAll (RKWorkplace::DataEditorWindow);
+ RKWorkplace::mainWorkplace ()->closeAll (RKMDIWindow::DataEditorWindow);
}
void RKwardApp::slotDetachWindow () {
@@ -692,10 +695,7 @@
QString wcaption = RKGlobals::rObjectList ()->getWorkspaceURL ().fileName ();
if (wcaption.isEmpty ()) wcaption = RKGlobals::rObjectList ()->getWorkspaceURL ().prettyURL ();
if (wcaption.isEmpty ()) wcaption = i18n ("[Unnamed Workspace]");
- QWidget *aw = RKWorkplace::mainWorkplace ()->activeAttachedWindow ();
- if (aw) {
- wcaption.append (" - " + aw->caption ());
- }
+ wcaption.append (" - " + RKWorkplace::mainWorkplace ()->view ()->activeCaption ());
KMdiMainFrm::setCaption (wcaption);
}
Modified: trunk/rkward/rkward/windows/Makefile.am
===================================================================
--- trunk/rkward/rkward/windows/Makefile.am 2006-09-25 17:57:13 UTC (rev 762)
+++ trunk/rkward/rkward/windows/Makefile.am 2006-09-26 16:53:29 UTC (rev 763)
@@ -2,8 +2,8 @@
METASOURCES = AUTO
noinst_LIBRARIES = libwindows.a
noinst_HEADERS = rkcommandeditorwindow.h rkcommandeditorwindowpart.h \
- rkhtmlwindow.h rcontrolwindow.h detachedwindowcontainer.h
+ rkhtmlwindow.h rcontrolwindow.h detachedwindowcontainer.h rkmdiwindow.h rkworkplaceview.h
libwindows_a_SOURCES = rkcommandeditorwindow.cpp rkcommandeditorwindowpart.cpp \
- rkhtmlwindow.cpp rcontrolwindow.cpp detachedwindowcontainer.cpp
+ rkhtmlwindow.cpp rcontrolwindow.cpp detachedwindowcontainer.cpp rkmdiwindow.cpp rkworkplaceview.cpp
rcdir = $(kde_datadir)/rkward
rc_DATA = rkcommandeditorwindowpart.rc rkoutputwindow.rc rkhelpwindow.rc detachedwindowcontainer.rc
Modified: trunk/rkward/rkward/windows/rkcommandeditorwindow.cpp
===================================================================
--- trunk/rkward/rkward/windows/rkcommandeditorwindow.cpp 2006-09-25 17:57:13 UTC (rev 762)
+++ trunk/rkward/rkward/windows/rkcommandeditorwindow.cpp 2006-09-26 16:53:29 UTC (rev 763)
@@ -56,7 +56,7 @@
#define GET_HELP_URL 1
-RKCommandEditorWindow::RKCommandEditorWindow (QWidget *parent, bool use_r_highlighting) : RKMDIWindow (parent, RKWorkplace::CommandEditorWindow) {
+RKCommandEditorWindow::RKCommandEditorWindow (QWidget *parent, bool use_r_highlighting) : RKMDIWindow (parent, RKMDIWindow::CommandEditorWindow) {
RK_TRACE (COMMANDEDITOR);
KLibFactory *factory = KLibLoader::self()->factory( "libkatepart" );
@@ -81,6 +81,8 @@
connect (m_doc, SIGNAL (fileNameChanged ()), this, SLOT (updateCaption ()));
connect (m_doc, SIGNAL (modifiedChanged ()), this, SLOT (updateCaption ())); // of course most of the time this causes a redundant call to updateCaption. Not if a modification is undone, however.
if (use_r_highlighting) setRHighlighting ();
+
+ updateCaption (); // initialize
}
RKCommandEditorWindow::~RKCommandEditorWindow () {
@@ -177,7 +179,6 @@
if (isModified ()) name.append (i18n (" [modified]"));
setCaption (name);
- emit (captionChanged (this));
}
void RKCommandEditorWindow::showHelp () {
Modified: trunk/rkward/rkward/windows/rkcommandeditorwindow.h
===================================================================
--- trunk/rkward/rkward/windows/rkcommandeditorwindow.h 2006-09-25 17:57:13 UTC (rev 762)
+++ trunk/rkward/rkward/windows/rkcommandeditorwindow.h 2006-09-26 16:53:29 UTC (rev 763)
@@ -24,7 +24,7 @@
#include <kate/document.h>
#include <kurl.h>
-#include "../misc/rkworkplace.h"
+#include "../windows/rkmdiwindow.h"
/**
\brief Provides an editor window for R-commands, as well as a text-editor window in general.
Modified: trunk/rkward/rkward/windows/rkhtmlwindow.cpp
===================================================================
--- trunk/rkward/rkward/windows/rkhtmlwindow.cpp 2006-09-25 17:57:13 UTC (rev 762)
+++ trunk/rkward/rkward/windows/rkhtmlwindow.cpp 2006-09-26 16:53:29 UTC (rev 763)
@@ -34,9 +34,11 @@
#include "../rkward.h"
#include "../settings/rksettingsmodulegeneral.h"
#include "../misc/rkcommonfunctions.h"
+#include "../misc/rkworkplace.h"
+#include "../windows/rkworkplaceview.h"
#include "../debug.h"
-RKHTMLWindow::RKHTMLWindow (QWidget *parent) : RKMDIWindow (parent, RKWorkplace::HelpWindow) {
+RKHTMLWindow::RKHTMLWindow (QWidget *parent) : RKMDIWindow (parent, RKMDIWindow::HelpWindow) {
RK_TRACE (APP);
scroll_position=0;
@@ -164,7 +166,7 @@
RKOutputWindow::RKOutputWindow (QWidget *parent) : RKHTMLWindow (parent), KXMLGUIClient () {
RK_TRACE (APP);
- type = RKWorkplace::OutputWindow;
+ type = RKMDIWindow::OutputWindow;
// strip down the khtmlpart's GUI. remove some stuff we definitely don't need.
RKCommonFunctions::removeContainers (khtmlpart, QStringList::split (',', "tools,security,extraToolBar,saveBackground,saveFrame,printFrame,kget_menu"), true);
Modified: trunk/rkward/rkward/windows/rkhtmlwindow.h
===================================================================
--- trunk/rkward/rkward/windows/rkhtmlwindow.h 2006-09-25 17:57:13 UTC (rev 762)
+++ trunk/rkward/rkward/windows/rkhtmlwindow.h 2006-09-26 16:53:29 UTC (rev 763)
@@ -25,7 +25,7 @@
#include <qptrlist.h>
-#include "../misc/rkworkplace.h"
+#include "../windows/rkmdiwindow.h"
class KHTMLPart;
class KActionCollection;
Added: trunk/rkward/rkward/windows/rkmdiwindow.cpp
===================================================================
--- trunk/rkward/rkward/windows/rkmdiwindow.cpp (rev 0)
+++ trunk/rkward/rkward/windows/rkmdiwindow.cpp 2006-09-26 16:53:29 UTC (rev 763)
@@ -0,0 +1,60 @@
+/***************************************************************************
+ rkmdiwindow - description
+ -------------------
+ begin : Tue Sep 26 2006
+ copyright : (C) 2006 by Thomas Friedrichsmeier
+ email : tfry at users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "rkmdiwindow.h"
+
+#include "../misc/rkworkplace.h"
+
+#include "../debug.h"
+
+RKMDIWindow::RKMDIWindow (QWidget *parent, Type type) : QWidget (parent) {
+ RK_TRACE (APP);
+
+ RKMDIWindow::type = type;
+ state = Attached;
+}
+
+RKMDIWindow::~RKMDIWindow () {
+ RK_TRACE (APP);
+}
+
+//virtual
+QString RKMDIWindow::fullCaption () {
+ RK_TRACE (APP);
+ return shortCaption ();
+}
+
+//virtual
+QString RKMDIWindow::shortCaption () {
+ RK_TRACE (APP);
+ return caption ();
+}
+
+// virtual from QWidget
+void RKMDIWindow::setCaption (const QString &caption) {
+ RK_TRACE (APP);
+ QWidget::setCaption (caption);
+ emit (captionChanged (this));
+}
+
+//virtual
+QWidget *RKMDIWindow::getWindow () {
+ RK_TRACE (APP);
+ return getPart ()->widget ();
+}
+
+#include "rkmdiwindow.moc"
Added: trunk/rkward/rkward/windows/rkmdiwindow.h
===================================================================
--- trunk/rkward/rkward/windows/rkmdiwindow.h (rev 0)
+++ trunk/rkward/rkward/windows/rkmdiwindow.h 2006-09-26 16:53:29 UTC (rev 763)
@@ -0,0 +1,66 @@
+/***************************************************************************
+ rkmdiwindow - description
+ -------------------
+ begin : Tue Sep 26 2006
+ copyright : (C) 2006 by Thomas Friedrichsmeier
+ email : tfry at users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef RKMDIWINDOW_H
+#define RKMDIWINDOW_H
+
+#include <qwidget.h>
+
+#include <kparts/part.h>
+
+class RKWorkplace;
+
+/** Base class for rkward document mdi windows */
+class RKMDIWindow : public QWidget {
+ Q_OBJECT
+public:
+ enum Type {
+ DataEditorWindow=1,
+ CommandEditorWindow=2,
+ OutputWindow=4,
+ HelpWindow=8,
+ AnyType=DataEditorWindow | CommandEditorWindow | OutputWindow | HelpWindow
+ };
+
+ enum State {
+ Attached=1,
+ Detached=2,
+ AnyState=Attached | Detached
+ };
+protected:
+/** constructor
+ at param parent parent widget
+ at param type Type of window */
+ RKMDIWindow (QWidget *parent, Type type);
+ ~RKMDIWindow ();
+public:
+ virtual bool isModified () = 0;
+ virtual QString fullCaption ();
+ virtual QString shortCaption ();
+ virtual KParts::Part *getPart () = 0;
+ void setCaption (const QString &caption);
+ virtual QWidget *getWindow ();
+signals:
+ void captionChanged (RKMDIWindow *);
+protected:
+friend class RKWorkplace;
+ Type type;
+private:
+ State state;
+};
+
+#endif
Added: trunk/rkward/rkward/windows/rkworkplaceview.cpp
===================================================================
--- trunk/rkward/rkward/windows/rkworkplaceview.cpp (rev 0)
+++ trunk/rkward/rkward/windows/rkworkplaceview.cpp 2006-09-26 16:53:29 UTC (rev 763)
@@ -0,0 +1,160 @@
+/***************************************************************************
+ rkworkplaceview - description
+ -------------------
+ begin : Tue Sep 26 2006
+ copyright : (C) 2006 by Thomas Friedrichsmeier
+ email : tfry at users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "rkworkplaceview.h"
+
+#include <qtabbar.h>
+#include <qwidgetstack.h>
+#include <qlayout.h>
+#include <qiconset.h>
+
+#include "rkmdiwindow.h"
+
+#include "../debug.h"
+
+RKWorkplaceView::RKWorkplaceView (QWidget *parent) : QWidget (parent) {
+ RK_TRACE (APP);
+
+ QVBoxLayout *vbox = new QVBoxLayout (this);
+ tabs = new QTabBar (this);
+ tabs->hide ();
+ connect (tabs, SIGNAL (selected (int)), this, SLOT (setPage (int)));
+ vbox->addWidget (tabs);
+
+ widgets = new QWidgetStack (this);
+ vbox->addWidget (widgets);
+}
+
+RKWorkplaceView::~RKWorkplaceView () {
+ RK_TRACE (APP);
+}
+
+void RKWorkplaceView::addPage (RKMDIWindow *widget) {
+ RK_TRACE (APP);
+
+ widgets->addWidget (widget);
+ int id = tabs->addTab (new QTab (*(widget->icon ()), widget->shortCaption ()));
+ pages.insert (id, widget);
+ connect (widget, SIGNAL (captionChanged (RKMDIWindow *)), this, SLOT (childCaptionChanged (RKMDIWindow *)));
+ widget->show ();
+
+ if (!tabs->isShown ()) {
+ if (tabs->count () > 1) tabs->show ();
+ }
+
+ tabs->setCurrentTab (id); // activates the newly added window
+}
+
+void RKWorkplaceView::removePage (RKMDIWindow *widget, bool destroyed) {
+ RK_TRACE (APP);
+
+ int id = idOfWidget (widget);
+ RK_DO (if (id == -1) qDebug ("did not find page in RKWorkplaceView::removePage"), APP, DL_WARNING);
+ pages.remove (id);
+ if (!destroyed) disconnect (widget, SIGNAL (captionChanged (RKMDIWindow *)), this, SLOT (childCaptionChanged (RKMDIWindow *)));
+
+ int oldindex = tabs->indexOf (tabs->currentTab ());
+ int oldcount = tabs->count ();
+ QTab *new_tab = tabs->tab (oldindex);
+ if (widget == activePage ()) {
+ if (oldindex >= 1) {
+ new_tab = tabs->tabAt (oldindex - 1);
+ } else if (oldindex < (oldcount - 1)) {
+ new_tab = tabs->tabAt (oldindex + 1);
+ } else {
+ new_tab = 0;
+ }
+ }
+ if (new_tab == 0) RK_ASSERT (oldcount == 1);
+
+ if (new_tab) tabs->setCurrentTab (new_tab);
+ else emit (pageChanged (0));
+
+ if (oldcount <= 2) tabs->hide ();
+
+ widgets->removeWidget (widget);
+ tabs->removeTab (tabs->tab (oldindex));
+}
+
+void RKWorkplaceView::setActivePage (RKMDIWindow *widget) {
+ RK_TRACE (APP);
+
+ int id = idOfWidget (widget);
+ RK_DO (if (id == -1) qDebug ("did not find page in RKWorkplaceView::setActivePage"), APP, DL_WARNING);
+
+ tabs->setCurrentTab (id);
+}
+
+RKMDIWindow *RKWorkplaceView::activePage () {
+ RK_TRACE (APP);
+
+ if (tabs->currentTab () == -1) return 0;
+ RK_ASSERT (pages[tabs->currentTab ()] == widgets->visibleWidget ());
+ return (pages[tabs->currentTab ()]);
+}
+
+QString RKWorkplaceView::activeCaption () {
+ RK_TRACE (APP);
+
+ RKMDIWindow *window = activePage ();
+ if (!window) return QString ();
+ return window->shortCaption ();
+}
+
+void RKWorkplaceView::setPage (int page) {
+ RK_TRACE (APP);
+ RK_ASSERT (pages.find (page) != pages.end ());
+
+ if (tabs->currentTab () != page) {
+ tabs->setCurrentTab (page);
+ return; // will get here again via signal from tabs
+ }
+
+ RKMDIWindow *window = pages[page];
+ widgets->raiseWidget (window);
+ window->setFocus ();
+ setCaption (window->shortCaption ());
+}
+
+void RKWorkplaceView::childCaptionChanged (RKMDIWindow *widget) {
+ RK_TRACE (APP);
+
+ int id = idOfWidget (widget);
+ QTab *tab = tabs->tab (id);
+ RK_ASSERT (tab);
+ tab->setText (widget->shortCaption ());
+ if (id == tabs->currentTab ()) setCaption (widget->shortCaption ());
+}
+
+int RKWorkplaceView::idOfWidget (RKMDIWindow *widget) {
+ RK_TRACE (APP);
+
+ for (PageMap::const_iterator it = pages.constBegin (); it != pages.constEnd (); ++it) {
+ if (it.data () == widget) return it.key ();
+ }
+
+ return -1;
+}
+
+void RKWorkplaceView::setCaption (const QString &caption) {
+ RK_TRACE (APP);
+
+ QWidget::setCaption (caption);
+ emit (captionChanged (caption));
+}
+
+#include "rkworkplaceview.moc"
Added: trunk/rkward/rkward/windows/rkworkplaceview.h
===================================================================
--- trunk/rkward/rkward/windows/rkworkplaceview.h (rev 0)
+++ trunk/rkward/rkward/windows/rkworkplaceview.h 2006-09-26 16:53:29 UTC (rev 763)
@@ -0,0 +1,56 @@
+/***************************************************************************
+ rkworkplaceview - description
+ -------------------
+ begin : Tue Sep 26 2006
+ copyright : (C) 2006 by Thomas Friedrichsmeier
+ email : tfry at users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef RKWORKPLACEVIEW_H
+#define RKWORKPLACEVIEW_H
+
+#include <qwidget.h>
+#include <qmap.h>
+
+class QTabBar;
+class QWidgetStack;
+class RKMDIWindow;
+
+/** The widget containing all the MDI document windows. Right now it mostly acts as a QTabWidget (is not one, as unfortunately, QTabWidget always has a sunken frame), but might be extended to allow switching between different view modes */
+class RKWorkplaceView : public QWidget {
+ Q_OBJECT
+public:
+ RKWorkplaceView (QWidget *parent);
+ ~RKWorkplaceView ();
+
+ void addPage (RKMDIWindow *widget);
+ void removePage (RKMDIWindow *widget, bool destroyed=false);
+
+ void setActivePage (RKMDIWindow *widget);
+ RKMDIWindow *activePage ();
+ QString activeCaption ();
+ void setCaption (const QString &caption);
+signals:
+ void pageChanged (RKMDIWindow *widget);
+ void captionChanged (const QString &new_caption);
+public slots:
+ void setPage (int page);
+ void childCaptionChanged (RKMDIWindow *widget);
+private:
+ QTabBar *tabs;
+ QWidgetStack *widgets;
+ typedef QMap<int, RKMDIWindow*> PageMap;
+ PageMap pages;
+ int idOfWidget (RKMDIWindow *widget);
+};
+
+#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the rkward-tracker
mailing list