summaryrefslogtreecommitdiffstats
path: root/kmdi/test
diff options
context:
space:
mode:
Diffstat (limited to 'kmdi/test')
-rw-r--r--kmdi/test/Makefile.am10
-rw-r--r--kmdi/test/README16
-rw-r--r--kmdi/test/hello.cpp104
-rw-r--r--kmdi/test/hello.h38
-rw-r--r--kmdi/test/main.cpp103
-rw-r--r--kmdi/test/mainwidget.cpp147
-rw-r--r--kmdi/test/mainwidget.h71
7 files changed, 489 insertions, 0 deletions
diff --git a/kmdi/test/Makefile.am b/kmdi/test/Makefile.am
new file mode 100644
index 000000000..73e0b8a13
--- /dev/null
+++ b/kmdi/test/Makefile.am
@@ -0,0 +1,10 @@
+check_PROGRAMS = kfourchildren
+METASOURCES = AUTO
+
+INCLUDES = -I$(top_srcdir)/kmdi -I.. $(all_includes)
+
+kfourchildren_SOURCES = hello.cpp main.cpp mainwidget.cpp
+kfourchildren_LDFLAGS = -no-undefined $(all_libraries)
+kfourchildren_LDADD = $(top_builddir)/kmdi/libkmdi.la \
+ $(top_builddir)/kutils/libkutils.la
+
diff --git a/kmdi/test/README b/kmdi/test/README
new file mode 100644
index 000000000..0cdeae7ef
--- /dev/null
+++ b/kmdi/test/README
@@ -0,0 +1,16 @@
+This example shows the use of KMdi.
+Either you inherit your views from KMdiChildView or you wrap your common widgets by KMdiChildViews.
+Your main widget must inherit from KMdiMainFrm.
+
+
+
+Call
+ qmake kFourChildren -o Makefile
+ make
+to build the example app.
+Likely you must set the environment variable KDEDIR (to e.g. /opt/kde3).
+
+
+
+Find more details on:
+ http://www.geocities.com/gigafalk/qextmdi.htm
diff --git a/kmdi/test/hello.cpp b/kmdi/test/hello.cpp
new file mode 100644
index 000000000..f3a10f65c
--- /dev/null
+++ b/kmdi/test/hello.cpp
@@ -0,0 +1,104 @@
+/****************************************************************************
+** $Id$
+**
+** Copyright (C) 1992-1999 Troll Tech AS. All rights reserved.
+**
+** This file is part of an example program for Qt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#include "hello.h"
+#include <qpushbutton.h>
+#include <qtimer.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+
+/*
+ Constructs a Hello widget. Starts a 40 ms animation timer.
+*/
+
+Hello::Hello( const char *title, const char *text, QWidget *parentWidget )
+ : KMdiChildView(title, parentWidget), t(text), b(0)
+{
+ QTimer *timer = new QTimer(this);
+ QObject::connect( timer, SIGNAL(timeout()), SLOT(animate()) );
+ timer->start( 40 );
+
+ resize( 260, 130 );
+}
+
+
+/*
+ This private slot is called each time the timer fires.
+*/
+
+void Hello::animate()
+{
+ b = (b + 1) & 15;
+ repaint( false );
+}
+
+
+/*
+ Handles mouse button release events for the Hello widget.
+
+ We emit the clicked() signal when the mouse is released inside
+ the widget.
+*/
+
+void Hello::mouseReleaseEvent( QMouseEvent *e )
+{
+ if ( rect().contains( e->pos() ) )
+ emit clicked();
+}
+
+
+/*
+ Handles paint events for the Hello widget.
+
+ Flicker-free update. The text is first drawn in the pixmap and the
+ pixmap is then blt'ed to the screen.
+*/
+
+void Hello::paintEvent( QPaintEvent * )
+{
+ static int sin_tbl[16] = {
+ 0, 38, 71, 92, 100, 92, 71, 38, 0, -38, -71, -92, -100, -92, -71, -38};
+
+ if ( t.isEmpty() )
+ return;
+
+ // 1: Compute some sizes, positions etc.
+ QFontMetrics fm = fontMetrics();
+ int w = fm.width(t) + 20;
+ int h = fm.height() * 2;
+ int pmx = width()/2 - w/2;
+ int pmy = height()/2 - h/2;
+
+ // 2: Create the pixmap and fill it with the widget's background
+ QPixmap pm( w, h );
+ pm.fill( this, pmx, pmy );
+
+ // 3: Paint the pixmap. Cool wave effect
+ QPainter p;
+ int x = 10;
+ int y = h/2 + fm.descent();
+ int i = 0;
+ p.begin( &pm );
+ p.setFont( font() );
+ while ( !t[i].isNull() ) {
+ int i16 = (b+i) & 15;
+ p.setPen( QColor((15-i16)*16,255,255,QColor::Hsv) );
+ p.drawText( x, y-sin_tbl[i16]*h/800, t.mid(i,1), 1 );
+ x += fm.width( t[i] );
+ i++;
+ }
+ p.end();
+
+ // 4: Copy the pixmap to the Hello widget
+ bitBlt( this, pmx, pmy, &pm );
+}
+
+#include "hello.moc"
+
diff --git a/kmdi/test/hello.h b/kmdi/test/hello.h
new file mode 100644
index 000000000..59c18f3f2
--- /dev/null
+++ b/kmdi/test/hello.h
@@ -0,0 +1,38 @@
+/****************************************************************************
+** $Id$
+**
+** Copyright (C) 1992-1999 Troll Tech AS. All rights reserved.
+**
+** This file is part of an example program for Qt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#ifndef HELLO_H
+#define HELLO_H
+
+#include <qstring.h>
+#include <kmdichildview.h>
+
+class QWidget;
+class QMouseEvent;
+class QPaintEvent;
+
+class Hello : public KMdiChildView
+{
+ Q_OBJECT
+public:
+ Hello( const char *title, const char *text, QWidget* parentWidget = 0 );
+signals:
+ void clicked();
+protected:
+ void mouseReleaseEvent( QMouseEvent * );
+ void paintEvent( QPaintEvent * );
+private slots:
+ void animate();
+private:
+ QString t;
+ int b;
+};
+
+#endif
diff --git a/kmdi/test/main.cpp b/kmdi/test/main.cpp
new file mode 100644
index 000000000..95d9c2f83
--- /dev/null
+++ b/kmdi/test/main.cpp
@@ -0,0 +1,103 @@
+//----------------------------------------------------------------------------
+// filename : main.cpp
+//----------------------------------------------------------------------------
+// Project : Qt MDI extension
+//
+// begin : 07/1999 by Szymon Stefanek as part of kvirc
+// (an IRC application)
+// changes : 09/1999 by Falk Brettschneider to create an
+// stand-alone Qt extension set of
+// classes and a Qt-based library
+// 02/2000 by Massimo Morin (mmorin@schedsys.com)
+//
+// copyright : (C) 1999-2000 by Szymon Stefanek (stefanek@tin.it)
+// and
+// Falk Brettschneider
+// email : falkbr@kdevelop.org (Falk Brettschneider)
+//----------------------------------------------------------------------------
+//
+//----------------------------------------------------------------------------
+//
+// This program 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.
+//
+//----------------------------------------------------------------------------
+
+#ifndef NO_KDE
+# include <kapplication.h>
+ KApplication* theApp;
+#else
+# include <qapplication.h>
+ QApplication* theApp;
+#endif
+
+//#include <iostream.h>
+#include "mainwidget.h"
+#include "hello.h"
+
+#define SHOW(v) cout << #v << " -> " << v << endl;
+
+int main( int argc, char **argv )
+{
+#ifndef NO_KDE
+ KApplication a(argc,argv,"KFourChildren");
+#else
+ QApplication a(argc,argv);
+#endif
+ theApp = &a;
+
+ RestartWidget* restartWidget = new RestartWidget;
+ MainWidget* mainWdg = new MainWidget(restartWidget->dockConfig,restartWidget->mdimode);
+ restartWidget->setWindow(mainWdg);
+
+ Hello* h1 = new Hello( "Hello1", "Click the right mouse button on the mainframe!", mainWdg);
+ h1->setTabCaption("Tab changed");
+ h1->setBackgroundColor( Qt::white );
+ mainWdg->addWindow( h1);
+// SHOW(h1->caption());
+// SHOW(h1->tabCaption());
+
+ QWidget* w = new QWidget(mainWdg);
+ KMdiChildView* h2 = mainWdg->createWrapper(w, "I'm a common but wrapped QWidget!", "Hello2");
+ mainWdg->addWindow( h2 );
+// SHOW(h2->caption());
+// SHOW(h2->tabCaption());
+
+ Hello* h3 = new Hello( "Hello3", "Dock me using the taskbar button context menu!", 0);
+ h3->setBackgroundColor( Qt::white );
+ h3->setFont( QFont("times",20,QFont::Bold) );
+ mainWdg->addWindow( h3, KMdi::Detach ); // undock this!
+ h3->setGeometry( 20, 20, 400, 100);
+
+ Hello* h4 = new Hello( "Hello4", "Hello world!", mainWdg);
+ h4->setMDICaption("Hello4 both changed");
+ h4->setFont( QFont("times",32,QFont::Bold) );
+ mainWdg->addWindow( h4);
+// SHOW(h4->caption());
+// SHOW(h4->tabCaption());
+
+ Hello* h5 = new Hello( "Hello5", "I'm not a MDI widget :-(");
+ h5->setGeometry(40, 40, 400, 100);
+ h5->setFont( QFont("times",20,QFont::Bold) );
+ h5->setCaption("MDI Test Application");
+ h5->show();
+
+#if 0
+ KMdiIterator<KMdiChildView*> *it = mainWdg->createIterator();
+ for ( it->first(); !it->isDone(); it->next()) {
+ //cout << "--> " << it->currentItem()->caption() << endl;
+
+ }
+ //delete it;
+#endif
+
+ mainWdg->resize(500,500);
+ a.setMainWidget( restartWidget );
+ restartWidget->show();
+ mainWdg->show();
+
+ mainWdg->cascadeWindows();
+ return a.exec();
+}
diff --git a/kmdi/test/mainwidget.cpp b/kmdi/test/mainwidget.cpp
new file mode 100644
index 000000000..872f9df27
--- /dev/null
+++ b/kmdi/test/mainwidget.cpp
@@ -0,0 +1,147 @@
+/***************************************************************************
+ mainwidget.cpp - description
+ -------------------
+ begin : Mon Nov 8 1999
+ copyright : (C) 1999 by Falk Brettschneider
+ email : falkbr@kdevelop.org
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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 <qlayout.h>
+#include <qmenubar.h>
+#include <qtoolbar.h>
+#include <qmultilineedit.h>
+#include <qlistview.h>
+#include <qfile.h>
+#include <kmdimainfrm.h>
+#include <kmditoolviewaccessor.h>
+
+#include "mainwidget.h"
+
+MainWidget::MainWidget(QDomElement& dockConfig,KMdi::MdiMode mode)
+: KMdiMainFrm(0L, "theMDIMainFrm",mode)
+ ,m_dockConfig(dockConfig)
+{
+ setIDEAlModeStyle(1); // KDEV3
+
+ dockManager->setReadDockConfigMode(KDockManager::RestoreAllDockwidgets);
+ initMenu();
+
+ if (m_dockConfig.hasChildNodes()) {
+ readDockConfig(m_dockConfig);
+ }
+
+ QMultiLineEdit* mle = new QMultiLineEdit(0L,"theMultiLineEditWidget");
+ mle->setText("This is a QMultiLineEdit widget.");
+ addToolWindow( mle, KDockWidget::DockBottom, m_pMdi, 70);
+
+ QMultiLineEdit* mle2 = new QMultiLineEdit(0L,"theMultiLineEditWidget2");
+ addToolWindow( mle2, KDockWidget::DockCenter, mle, 70);
+
+ QMultiLineEdit* mle3 = new QMultiLineEdit(0L,"theMultiLineEditWidget3");
+ addToolWindow( mle3, KDockWidget::DockCenter, mle, 70);
+
+ QMultiLineEdit* mle4 = new QMultiLineEdit(0L,"theMultiLineEditWidget4");
+ addToolWindow( mle4, KDockWidget::DockCenter, mle, 70);
+
+ KMdiToolViewAccessor *tva=createToolWindow();
+ tva->setWidgetToWrap(new QMultiLineEdit(tva->wrapperWidget(),"theMultiLineEditWidget5"));
+ tva->placeAndShow(KDockWidget::DockCenter,mle,70);
+
+ QListView* lv = new QListView(0L,"theListViewWidget");
+#include "../res/filenew.xpm"
+ lv->setIcon(filenew);
+ lv->addColumn("Test", 50);
+ lv->addColumn("KMDI", 70);
+ new QListViewItem(lv,QString("test"),QString("test"));
+ addToolWindow( lv, KDockWidget::DockLeft, m_pMdi, 35, "1");
+
+ QListView* lv2 = new QListView(0L,"theListViewWidget2");
+ lv2->setIcon(filenew);
+ lv2->addColumn("Test2", 50);
+ lv2->addColumn("KMDI2", 70);
+ new QListViewItem(lv,QString("test2"),QString("test2"));
+ addToolWindow( lv2, KDockWidget::DockCenter, lv, 35, "2");
+
+ QListView* lv3 = new QListView(0L,"theListViewWidget3");
+ lv3->setIcon(filenew);
+ lv3->addColumn("Test3", 50);
+ lv3->addColumn("KMDI3", 70);
+ new QListViewItem(lv,QString("test3"),QString("test3"));
+ addToolWindow( lv3, KDockWidget::DockCenter, lv, 35, "3");
+
+ dockManager->finishReadDockConfig();
+
+ setMenuForSDIModeSysButtons( menuBar());
+}
+
+MainWidget::~MainWidget()
+{
+ writeDockConfig(m_dockConfig);
+ QDomDocument doc = m_dockConfig.ownerDocument();
+ QString s = doc.toString();
+ QFile f("/tmp/dc.txt");
+ f.open(IO_ReadWrite);
+ f.writeBlock(s.latin1(), s.length());
+ f.close();
+}
+
+void MainWidget::initMenu()
+{
+ menuBar()->insertItem("&Window", windowMenu());
+ menuBar()->insertItem("&Docking", dockHideShowMenu());
+}
+
+/** additionally fit the system menu button position to the menu position */
+void MainWidget::resizeEvent( QResizeEvent *pRSE)
+{
+ KMdiMainFrm::resizeEvent( pRSE);
+ setSysButtonsAtMenuPosition();
+}
+
+RestartWidget::RestartWidget():KMainWindow()
+{
+ mdimode=KMdi::ChildframeMode;
+ QVBoxLayout* bl = new QVBoxLayout(this);
+ QLabel* l = new QLabel("This is for the testing of\nKMdiMainFrm::read/writeDockConfig().\n", this);
+ QCheckBox* b1 = new QCheckBox("KMdiMainFrm close/restart", this);
+ b1->toggle();
+ QObject::connect(b1, SIGNAL(stateChanged(int)), this, SLOT(onStateChanged(int)));
+ bl->add(l);
+ bl->add(b1);
+ bl->setMargin(10);
+ bl->activate();
+ show();
+
+ dockConfig = domDoc.createElement("dockConfig");
+ domDoc.appendChild(dockConfig);
+}
+
+void RestartWidget::onStateChanged(int on)
+{
+ if (on) {
+ m_w = new MainWidget(dockConfig,mdimode);
+ m_w->resize(500,500);
+ m_w->show();
+ }
+ else {
+ mdimode=m_w->mdiMode();
+ m_w->close();
+ delete m_w;
+ }
+
+}
+
+void RestartWidget::setWindow(MainWidget *w) {
+ m_w=w;
+}
+
+#include "mainwidget.moc"
diff --git a/kmdi/test/mainwidget.h b/kmdi/test/mainwidget.h
new file mode 100644
index 000000000..d8f61c1cb
--- /dev/null
+++ b/kmdi/test/mainwidget.h
@@ -0,0 +1,71 @@
+/***************************************************************************
+ mainwidget.h - description
+ -------------------
+ begin : Mon Nov 8 1999
+ copyright : (C) 1999 by Falk Brettschneider
+ email : falkbr@kdevelop.org
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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 MAINWIDGET_H
+#define MAINWIDGET_H
+
+#include <qcheckbox.h>
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qdom.h>
+#include <kmdimainfrm.h>
+
+/**
+ *@author Falk Brettschneider
+ */
+class MainWidget : public KMdiMainFrm
+{
+ Q_OBJECT
+public:
+ MainWidget(QDomElement& dockConfig,KMdi::MdiMode mode);
+ virtual ~MainWidget();
+ void initMenu();
+
+protected: // Protected methods
+ virtual void resizeEvent( QResizeEvent *pRSE);
+private:
+ QDomElement m_dockConfig;
+};
+
+
+
+/**
+ *@author Falk Brettschneider
+ * This allows me to test KMdiMainFrm::read/writeDockConfig by
+ * closing and restarting the MainWidget via checkbox click.
+ */
+class RestartWidget : public KMainWindow
+{
+ Q_OBJECT
+// methods
+public:
+ RestartWidget();
+ void setWindow(MainWidget *w);
+
+private slots:
+ void onStateChanged(int on);
+
+// attributes
+public:
+ QDomDocument domDoc;
+ QDomElement dockConfig;
+ KMdi::MdiMode mdimode;
+private:
+ MainWidget *m_w;
+};
+
+#endif