Re: distributed rendering

Christoph Fabianek <[email protected]> Tue, 23 Sep 2003 23:35:43 +0200
Newsgroups gmane.comp.kde.devel.kpovmodeler
Message-ID <[email protected]>
Hi,

here is the patch with the fix for the SSH transport bug and with a global 
settings page. The problems with NetSolve are bad but I know that on some 
machines its just hard to set it up - this was also the main reason why there 
is the SSH tranport as alternative. Perhaps someone else on the list with an 
internet connection not behind a firewall could volunteer and try to apply 
the patch together with the nspovray binary?
http://fsmat.at/~cfabiane/software/nspovray_i686-pc-linux-gnu_0.4pre.tar.gz

The documentation is almost done - I want to add an appendix for installing 
nspovray and testing it with the NetSolve and SSH transport.

Greetings,
   Christoph

PS: As said before, I haven't used CVS often before - since it does not 
include the new files those are attached separately. pmdistrendersettings.Plo 
belongs to the .deps directory - maybe this is an autogenerated file, but I 
haven't found how to do this. So just for sure I have attached it, too.


List archive and information: http://mail.kde.org/mailman/listinfo/kpovmodeler-devel
dist_render_23_Sep_03.patch (text/x-diff, 25.1 KB)
? pmdistrendersettings.cpp
? pmdistrendersettings.h
Index: Makefile.am
===================================================================
RCS file: /home/kde/kdegraphics/kpovmodeler/Makefile.am,v
retrieving revision 1.66
diff -u -r1.66 Makefile.am
--- Makefile.am	12 Sep 2003 20:13:16 -0000	1.66
+++ Makefile.am	23 Sep 2003 21:23:53 -0000
@@ -17,7 +17,7 @@
 	pmpovrayoutputwidget.cpp pmsettingsdialog.cpp \
 	pmcolorsettings.cpp pmgridsettings.cpp pmlayoutsettings.cpp \
 	pmobjectlibrarysettings.cpp pmobjectsettings.cpp pmpluginsettings.cpp \
-	pmpovraysettings.cpp pmpreviewsettings.cpp \
+	pmpovraysettings.cpp pmdistrendersettings.cpp pmpreviewsettings.cpp \
 	pmdockwidget.cpp pmdockwidget_private.cpp pmviewlayoutmanager.cpp \
 	pmviewbase.cpp pmviewfactory.cpp pmunknownview.cpp \
 	\
@@ -115,7 +115,7 @@
 	pmpovrayoutputwidget.h pmsettingsdialog.h \
 	pmcolorsettings.h pmgridsettings.h pmlayoutsettings.h \
 	pmobjectlibrarysettings.h pmobjectsettings.h pmpluginsettings.h \
-	pmpovraysettings.h pmpreviewsettings.h \
+	pmpovraysettings.h pmdistrendersettings.h pmpreviewsettings.h \
 	pmdockwidget.h pmdockwidget_private.h pmviewlayoutmanager.h \
 	pmviewbase.h pmviewfactory.h pmunknownview.h \
 	\
Index: pmdefaults.h
===================================================================
RCS file: /home/kde/kdegraphics/kpovmodeler/pmdefaults.h,v
retrieving revision 1.17
diff -u -r1.17 pmdefaults.h
--- pmdefaults.h	21 May 2002 19:43:30 -0000	1.17
+++ pmdefaults.h	23 Sep 2003 21:23:54 -0000
@@ -45,6 +45,14 @@
 
 // PovrayRenderWidget
 const QString c_defaultPovrayCommand = QString( "povray" );
+// distributed rendering
+const QString c_defaultNspovrayPath = QString( "" );
+const int c_defaultTransport = 1;
+const QString c_defaultTransportConfig = QString( "" );
+const int c_defaultInstances = 2;
+const int c_defaultTimeout = 120;
+const int c_defaultTilewidth = 100;
+const int c_defaultTileheight = 100;
 
 // PMSphere
 const int c_defaultSphereUSteps = 8;
Index: pmpovrayrenderwidget.cpp
===================================================================
RCS file: /home/kde/kdegraphics/kpovmodeler/pmpovrayrenderwidget.cpp,v
retrieving revision 1.21
diff -u -r1.21 pmpovrayrenderwidget.cpp
--- pmpovrayrenderwidget.cpp	4 Jul 2003 21:23:34 -0000	1.21
+++ pmpovrayrenderwidget.cpp	23 Sep 2003 21:23:57 -0000
@@ -37,6 +37,13 @@
 
 QString PMPovrayRenderWidget::s_povrayCommand = c_defaultPovrayCommand;
 QStringList PMPovrayRenderWidget::s_libraryPaths;
+QString PMPovrayRenderWidget::s_nspovrayPath = c_defaultNspovrayPath;
+int PMPovrayRenderWidget::s_defaultTransport = c_defaultTransport;
+QString PMPovrayRenderWidget::s_defaultTransportConfig = c_defaultTransportConfig;
+int PMPovrayRenderWidget::s_defaultInstances = c_defaultInstances;
+int PMPovrayRenderWidget::s_defaultTimeout = c_defaultTimeout;
+int PMPovrayRenderWidget::s_defaultTilewidth = c_defaultTilewidth;
+int PMPovrayRenderWidget::s_defaultTileheight = c_defaultTileheight;
 
 PMPovrayRenderWidget::PMPovrayRenderWidget( QWidget* parent, const char* name )
       : QWidget( parent, name )
@@ -92,7 +99,16 @@
    connect( m_pProcess, SIGNAL( processExited( KProcess* ) ),
             SLOT( slotRenderingFinished( KProcess* ) ) );
 
-   *m_pProcess << s_povrayCommand;
+   if ( m_renderMode.distributed( ) )
+   {
+      if( m_renderMode.NetSolve( ) ) {
+         m_pProcess->setEnvironment( QString( "NETSOLVE_AGENT" ), m_renderMode.transportConfig( ) );
+         m_pProcess->setEnvironment( QString( "PROXY_DIR" ), s_nspovrayPath );
+      }
+      *m_pProcess << QString( "%1/nspovray" ).arg( s_nspovrayPath );
+   } else {
+      *m_pProcess << s_povrayCommand;
+   }
 
    QStringList::ConstIterator it;
    QStringList args = m_renderMode.commandLineSwitches( );
@@ -107,10 +123,19 @@
             path.truncate( path.length( ) - 1 );
       *m_pProcess << ( QString( "+L" ) + path );
    }
-   *m_pProcess << QString( "+I" ) + m_pTempFile->name( ) << "+O-" << "+FT"
+   *m_pProcess << QString( "+I" ) + m_pTempFile->name( ) << "+FT"
                << "+K0.0" << "+KFI1" << "+KFF1" << "+KI0.0" << "+KF0.0"
                << "+SF1" << "+EF1" << "-KC" << "-D";
 
+   if ( m_renderMode.distributed() )
+   {
+      QStringList args = m_renderMode.commandLineDistributedSwitches( );
+      for( it = args.begin( ); it != args.end( ); ++it )
+          *m_pProcess << *it;
+   } else {
+      *m_pProcess << "+O-";
+   }
+
 #if ( ( KDE_VERSION_MAJOR == 2 ) && ( KDE_VERSION_MINOR >= 9 ) ) || ( KDE_VERSION_MAJOR == 3 )
    if( !documentURL.isEmpty( ) && documentURL.isLocalFile( ) )
       m_pProcess->setWorkingDirectory( documentURL.directory( ) );
@@ -136,9 +161,13 @@
 
    if( !m_pProcess->start( KProcess::NotifyOnExit, KProcess::AllOutput ) )
    {
-      KMessageBox::error( this, i18n( "Couldn't call povray.\n"
-                                      "Please check your installation "
-                                      "or set another povray command." ) );
+      if ( m_renderMode.distributed() )
+         KMessageBox::error( this, i18n( "Couldn't call nspovray.\n"
+                                         "Please check your installation." ) );
+      else
+         KMessageBox::error( this, i18n( "Couldn't call povray.\n"
+                                         "Please check your installation "
+                                         "or set another povray command." ) );
       delete m_pProcess;
       m_pProcess = 0;
       return false;
@@ -369,9 +398,23 @@
 #if ( ( KDE_VERSION_MAJOR == 3 ) && ( KDE_VERSION_MINOR <= 1 ) )
    cfg->writeEntry( "PovrayCommand", s_povrayCommand );
    cfg->writeEntry( "LibraryPaths", s_libraryPaths );
+   cfg->writeEntry( "NspovrayPath", s_nspovrayPath );
+   cfg->writeEntry( "DefaultTransport", s_defaultTransport );
+   cfg->writeEntry( "DefaultTransportConfig", s_defaultTransportConfig);
+   cfg->writeEntry( "DefaultInstances", s_defaultInstances );
+   cfg->writeEntry( "DefaultTimeout", s_defaultTimeout );
+   cfg->writeEntry( "DefaultTilewidth", s_defaultTilewidth );
+   cfg->writeEntry( "DefaultTileheight", s_defaultTileheight );
 #else
    cfg->writePathEntry( "PovrayCommand", s_povrayCommand );
    cfg->writePathEntry( "LibraryPaths", s_libraryPaths );
+   cfg->writePathEntry( "NspovrayPath", s_nspovrayPath );
+   cfg->writePathEntry( "DefaultTransport", s_defaultTransport );
+   cfg->writePathEntry( "DefaultTransportConfig", s_defaultTransportConfig);
+   cfg->writePathEntry( "DefaultInstances", s_defaultInstances );
+   cfg->writePathEntry( "DefaultTimeout", s_defaultTimeout );
+   cfg->writePathEntry( "DefaultTilewidth", s_defaultTilewidth );
+   cfg->writePathEntry( "DefaultTileheight", s_defaultTileheight );
 #endif
 }
 
@@ -381,9 +424,23 @@
 #if ( ( KDE_VERSION_MAJOR == 3 ) && ( KDE_VERSION_MINOR <= 1 ) )
    s_povrayCommand = cfg->readEntry( "PovrayCommand", s_povrayCommand );
    s_libraryPaths = cfg->readListEntry( "LibraryPaths" );
+   s_nspovrayPath = cfg->readEntry( "NspovrayPath", s_nspovrayPath );
+   s_defaultTransport = cfg->readNumEntry( "DefaultTransport", s_defaultTransport );
+   s_defaultTransportConfig = cfg->readEntry( "DefaultTransportConfig", s_defaultTransportConfig );
+   s_defaultInstances = cfg->readNumEntry( "DefaultInstances", s_defaultInstances );
+   s_defaultTimeout = cfg->readNumEntry( "DefaultTimeout", s_defaultTimeout );
+   s_defaultTilewidth = cfg->readNumEntry( "DefaultTilewidth", s_defaultTilewidth );
+   s_defaultTileheight = cfg->readNumEntry( "DefaultTileheight", s_defaultTileheight );
 #else
    s_povrayCommand = cfg->readPathEntry( "PovrayCommand", s_povrayCommand );
    s_libraryPaths = cfg->readPathListEntry( "LibraryPaths" );
+   s_nspovrayCommand = cfg->readPathEntry( "NspovrayPath", s_nspovrayPath );
+   s_defaultTransport = cfg->readPathEntry( "DefaultTransport", s_defaultTransport );
+   s_nspovrayTransportConfig = cfg->readPathEntry( "DefaultTransportConfig", s_defaultTransportConfig );
+   s_defaultInstances = cfg->readPathEntry( "DefaultInstances", s_defaultInstances );
+   s_defaultTimeout = cfg->readPathEntry( "DefaultTimeout", s_defaultTimeout );
+   s_defaultTilewidth = cfg->readPathEntry( "DefaultTilewidth", s_defaultTilewidth );
+   s_defaultTileheight = cfg->readPathEntry( "DefaultTileheight", s_defaultTileheight );
 #endif
 }
 
Index: pmpovrayrenderwidget.h
===================================================================
RCS file: /home/kde/kdegraphics/kpovmodeler/pmpovrayrenderwidget.h,v
retrieving revision 1.10
diff -u -r1.10 pmpovrayrenderwidget.h
--- pmpovrayrenderwidget.h	8 Mar 2003 11:49:19 -0000	1.10
+++ pmpovrayrenderwidget.h	23 Sep 2003 21:24:01 -0000
@@ -68,18 +68,32 @@
     * Returns the rendered image
     */
    QImage image( ) const { return m_image; }
-   
+
    static void saveConfig( KConfig* cfg );
    static void restoreConfig( KConfig* cfg );
 
    /**
-    * Returns the povray command
+    * Returns the povray command / nspovray Path
     */
    static QString povrayCommand( ) { return s_povrayCommand; }
+   static QString nspovrayPath( ) { return s_nspovrayPath; }
+   static int defaultTransport( ) { return s_defaultTransport; }
+   static QString defaultTransportConfig( ) { return s_defaultTransportConfig; }
+   static int defaultInstances( ) { return s_defaultInstances; }
+   static int defaultTimeout( ) { return s_defaultTimeout; }
+   static int defaultTilewidth( ) { return s_defaultTilewidth; }
+   static int defaultTileheight( ) { return s_defaultTileheight; }
    /**
-    * Sets the povray command
+    * Sets the povray command / nspovray Path
     */
    static void setPovrayCommand( const QString& c ) { s_povrayCommand = c; }
+   static void setNspovrayPath( const QString& c ) { s_nspovrayPath = c; }
+   static void setDefaultTransport( const int c ) { s_defaultTransport = c; }
+   static void setDefaultTransportConfig( const QString& c ) { s_defaultTransportConfig = c; }
+   static void setDefaultInstances( const int c ) { s_defaultInstances = c; }
+   static void setDefaultTimeout( const int c ) { s_defaultTimeout = c; }
+   static void setDefaultTilewidth( const int c ) { s_defaultTilewidth = c; }
+   static void setDefaultTileheight( const int c ) { s_defaultTileheight = c; }
    /**
     * Returns the library paths
     */
@@ -170,6 +184,13 @@
 
    static QString s_povrayCommand;
    static QStringList s_libraryPaths;
+   static QString s_nspovrayPath;
+   static int s_defaultTransport;
+   static QString s_defaultTransportConfig;
+   static int s_defaultInstances;
+   static int s_defaultTimeout;
+   static int s_defaultTilewidth;
+   static int s_defaultTileheight;
 };
 
 #endif
Index: pmrendermode.cpp
===================================================================
RCS file: /home/kde/kdegraphics/kpovmodeler/pmrendermode.cpp,v
retrieving revision 1.6
diff -u -r1.6 pmrendermode.cpp
--- pmrendermode.cpp	6 Sep 2003 04:20:38 -0000	1.6
+++ pmrendermode.cpp	23 Sep 2003 21:24:06 -0000
@@ -19,6 +19,7 @@
 #include <klocale.h>
 
 #include "pmxmlhelper.h"
+#include "pmpovrayrenderwidget.h"
 
 
 PMRenderMode::PMRenderMode( )
@@ -51,6 +52,14 @@
    m_description = i18n( "New mode" );
 
    m_alpha = false;
+
+   m_distributed = false;
+   m_transport = PMPovrayRenderWidget::defaultTransport( );
+   m_transportConfig = PMPovrayRenderWidget::defaultTransportConfig( );;
+   m_instances = PMPovrayRenderWidget::defaultInstances( );
+   m_timeout = PMPovrayRenderWidget::defaultTimeout( );
+   m_tilewidth = PMPovrayRenderWidget::defaultTilewidth( );
+   m_tileheight = PMPovrayRenderWidget::defaultTileheight( );
 }
 
 PMRenderMode::PMRenderMode( const QDomElement& e )
@@ -75,6 +84,13 @@
    m_antialiasJitterAmount = hlp.doubleAttribute( "aa_jitter_amount", m_antialiasJitterAmount );
    m_antialiasDepth = hlp.intAttribute( "aa_depth", m_antialiasDepth );
    m_alpha = hlp.boolAttribute( "alpha", m_alpha );
+   m_distributed = hlp.boolAttribute ("distributed", m_distributed );
+   m_transport = hlp.intAttribute( "transport", m_transport );
+   m_transportConfig = hlp.stringAttribute( "transportConfig", m_transportConfig );
+   m_instances = hlp.intAttribute( "instances", m_instances );
+   m_timeout = hlp.intAttribute( "timeout", m_timeout );
+   m_tilewidth = hlp.intAttribute( "tilewidth", m_tilewidth );
+   m_tileheight = hlp.intAttribute( "tileheight", m_tileheight );
 }
 
 void PMRenderMode::serialize( QDomElement& e ) const
@@ -96,6 +112,13 @@
    e.setAttribute( "aa_jitter_amount", m_antialiasJitterAmount );
    e.setAttribute( "aa_depth", m_antialiasDepth );
    e.setAttribute( "alpha", m_alpha );
+   e.setAttribute( "distributed", m_distributed );
+   e.setAttribute( "transport", m_transport );
+   e.setAttribute( "transportConfig", m_transportConfig );
+   e.setAttribute( "instances", m_instances );
+   e.setAttribute( "timeout", m_timeout );
+   e.setAttribute( "tilewidth", m_tilewidth );
+   e.setAttribute( "tileheight", m_tileheight );
 }
 
 void PMRenderMode::setHeight( int height )
@@ -155,6 +178,36 @@
       m_samplingMethod = AntialiasingNonRecursive;
 }
 
+void PMRenderMode::setTransport( int transport )
+{
+   if( ( transport >= 0 ) && ( transport <= 1 ) )
+      m_transport = transport;
+}
+
+void PMRenderMode::setInstances( int instances )
+{
+   if( instances >= 0 )
+      m_instances = instances;
+}
+
+void PMRenderMode::setTimeout( int timeout )
+{
+   if( timeout >= 0 )
+      m_timeout = timeout;
+}
+
+void PMRenderMode::setTilewidth( int tilewidth )
+{
+   if( tilewidth >= 0 )
+      m_tilewidth = tilewidth;
+}
+
+void PMRenderMode::setTileheight( int tileheight )
+{
+   if( tileheight >= 0 )
+      m_tileheight = tileheight;
+}
+
 QStringList PMRenderMode::commandLineSwitches( ) const
 {
    QStringList cl;
@@ -215,6 +268,29 @@
    else
       cl.append( QString( "-UA" ) );
 
+   return cl;
+}
+
+QStringList PMRenderMode::commandLineDistributedSwitches( ) const
+{
+   QStringList cl;
+   cl.append( QString( "--kpm" ) );
+
+   if ( NetSolve( ) )
+      cl.append( QString( "--netsolve" ) );
+   else {
+      cl.append( QString( "--ssh" ) );
+      cl.append( PMPovrayRenderWidget::nspovrayPath( ) + transportConfig( ) );
+   }
+
+   cl.append( QString( "--dist" ) );
+   cl.append( QString( "%1" ).arg( m_instances ) );
+
+   cl.append( QString( "--timeout" ) );
+   cl.append( QString( "%1" ).arg( m_timeout ) );
+
+   cl.append( QString( "--tile" ) );
+   cl.append( QString( "%1x" ).arg( m_tilewidth ) + QString( "%1" ).arg( m_tileheight ) );
    return cl;
 }
 
Index: pmrendermode.h
===================================================================
RCS file: /home/kde/kdegraphics/kpovmodeler/pmrendermode.h,v
retrieving revision 1.6
diff -u -r1.6 pmrendermode.h
--- pmrendermode.h	30 Dec 2002 19:55:16 -0000	1.6
+++ pmrendermode.h	23 Sep 2003 21:24:08 -0000
@@ -92,11 +92,29 @@
    void setAlpha( bool on ) { m_alpha = on; }
    bool alpha( ) const { return m_alpha; }
    
-   
+   void setDistributed( bool on ) { m_distributed = on; }
+   bool distributed( ) const { return m_distributed; }
+   void setTransport( int m_transport );
+   int transport( ) const { return m_transport; }
+   bool NetSolve( ) const { return (m_transport == 0); }
+   void setTransportConfig( const QString& tpconf ) { m_transportConfig = tpconf; }
+   QString transportConfig( ) const { return m_transportConfig; }
+   void setInstances( int instances );
+   int instances( ) const { return m_instances; }
+   void setTimeout( int timeout );
+   int timeout( ) const { return m_timeout; }
+   void setTilewidth( int tilewidth );
+   int tilewidth( ) const { return m_tilewidth; }
+   void setTileheight( int tileheight );
+   int tileheight( ) const { return m_tileheight; }
+
+
    /**
     * Returns the settings as povray command line switches
     */
    QStringList commandLineSwitches( ) const;
+   /* command line switches for nspovray */
+   QStringList commandLineDistributedSwitches( ) const;
    /**
     * Saves the data
     */
@@ -120,6 +138,14 @@
    int m_antialiasDepth;
 
    bool m_alpha;
+   bool m_distributed;
+   int m_transport;
+   QString m_transportConfig;
+   int m_instances;
+   int m_timeout;
+   int m_tilewidth;
+   int m_tileheight;
+
 };
 
 typedef QPtrList<PMRenderMode> PMRenderModeList;
Index: pmrendermodesdialog.cpp
===================================================================
RCS file: /home/kde/kdegraphics/kpovmodeler/pmrendermodesdialog.cpp,v
retrieving revision 1.6
diff -u -r1.6 pmrendermodesdialog.cpp
--- pmrendermodesdialog.cpp	18 May 2003 19:57:25 -0000	1.6
+++ pmrendermodesdialog.cpp	23 Sep 2003 21:24:11 -0000
@@ -30,6 +30,7 @@
 
 #include <klocale.h>
 #include <kconfig.h>
+#include <kiconloader.h>
 #include <kmessagebox.h>
 #include <kfiledialog.h>
 
@@ -358,14 +359,59 @@
 
    tabLayout->addStretch( 1 );
 
-   
+   // distribued rendering options tab
+   tab = new QWidget( );
+   m_pTabWidget->addTab( tab, i18n( "Distributed rendering" ) );
+   tabLayout = new QVBoxLayout( tab, marginHint( ), spacingHint( ) );
+
+   m_pDistributedBox = new QCheckBox( i18n( "Use distributed rendering" ), tab );
+   tabLayout->addWidget( m_pDistributedBox );
+
+   QHBoxLayout* distHelpLayout = new QHBoxLayout( tabLayout );
+   QGridLayout* distLayout = new QGridLayout( distHelpLayout, 6, 2 );
+   distLayout->addWidget( new QLabel( i18n( "Transport:" ), tab ), 0, 0 );
+   m_pTransportCombo = new QComboBox( tab );
+   distLayout->addWidget( m_pTransportCombo, 0, 1 );
+   m_pTransportCombo->insertItem( i18n( "NetSolve" ) );
+   m_pTransportCombo->insertItem( i18n( "SSH" ) );
+
+   m_pTransportConfigLabel = new QLabel( i18n( "Hostfile:" ), tab );
+   distLayout->addWidget( m_pTransportConfigLabel, 1, 0 );
+   m_pTransportConfigLineEdit = new QLineEdit( tab );
+   distLayout->addWidget( m_pTransportConfigLineEdit, 1, 1 );
+
+   distLayout->addWidget( new QLabel( i18n( "Instances:" ), tab ), 2, 0 );
+   m_pInstancesEdit = new PMIntEdit( tab );
+   m_pInstancesEdit->setValidation( true, 1, false, 0 );
+   distLayout->addWidget( m_pInstancesEdit, 2, 1 );
+
+   distLayout->addWidget( new QLabel( i18n( "Timeout (sec):" ), tab ), 3, 0 );
+   m_pTimeoutEdit = new PMIntEdit( tab );
+   m_pTimeoutEdit->setValidation( true, 1, false, 0 );
+   distLayout->addWidget( m_pTimeoutEdit, 3, 1 );
+
+   distLayout->addWidget( new QLabel( i18n( "Tile width:" ), tab ), 4, 0 );
+   m_pTileWidthEdit = new PMIntEdit( tab );
+   m_pTileWidthEdit->setValidation( true, 1, false, 0 );
+   distLayout->addWidget( m_pTileWidthEdit, 4, 1 );
+
+   distLayout->addWidget( new QLabel( i18n( "Tile height:" ), tab ), 5, 0 );
+   m_pTileHeightEdit = new PMIntEdit( tab );
+   m_pTileHeightEdit->setValidation( true, 1, false, 0 );
+   distLayout->addWidget( m_pTileHeightEdit, 5, 1 );
+
+   distHelpLayout->addStretch( 1 );
+
+   tabLayout->addStretch( 1 );
+
+
    resize( s_size );
-   
+
    // display the mode BEFORE the signals are connected!!!
    displayMode( );
 
    enableButtonOK( false );
-   
+
    // connect signals
    connect( m_pDescriptionEdit, SIGNAL( textChanged( const QString& ) ), SLOT( slotTextChanged( const QString& ) ) );
    connect( m_pHeightEdit, SIGNAL( dataChanged( ) ), SLOT( slotChanged( ) ) );
@@ -384,6 +430,13 @@
    connect( m_pJitterAmountEdit, SIGNAL( dataChanged( ) ), SLOT( slotChanged( ) ) );
    connect( m_pAntialiasDepthEdit, SIGNAL( dataChanged( ) ), SLOT( slotChanged( ) ) );
    connect( m_pAlphaBox, SIGNAL( toggled( bool ) ), SLOT( slotToggled( bool ) ) );
+   connect( m_pDistributedBox, SIGNAL( toggled( bool ) ), SLOT( slotDistributedToggled( bool ) ) );
+   connect( m_pTransportCombo, SIGNAL( activated( int ) ), SLOT( slotTransportChanged( int ) ) );
+   connect( m_pTransportConfigLineEdit, SIGNAL( textChanged( const QString& ) ), SLOT( slotTextChanged( const QString& ) ) );
+   connect( m_pInstancesEdit, SIGNAL( dataChanged( ) ), SLOT( slotChanged( ) ) );
+   connect( m_pTimeoutEdit, SIGNAL( dataChanged( ) ), SLOT( slotChanged( ) ) );
+   connect( m_pTileWidthEdit, SIGNAL( dataChanged( ) ), SLOT( slotChanged( ) ) );
+   connect( m_pTileHeightEdit, SIGNAL( dataChanged( ) ), SLOT( slotChanged( ) ) );
 }
 
 void PMRenderModeDialog::saveConfig( KConfig* cfg )
@@ -433,6 +486,13 @@
          m_pMode->setAntialiasingDepth( m_pAntialiasDepthEdit->value( ) );
       }
       m_pMode->setAlpha( m_pAlphaBox->isChecked( ) );
+      m_pMode->setDistributed( m_pDistributedBox->isChecked( ) );
+      m_pMode->setTransport( m_pTransportCombo->currentItem( ) );
+      m_pMode->setTransportConfig( m_pTransportConfigLineEdit->text( ) );
+      m_pMode->setInstances( m_pInstancesEdit->value( ) );
+      m_pMode->setTimeout( m_pTimeoutEdit->value( ) );
+      m_pMode->setTilewidth( m_pTileWidthEdit->value( ) );
+      m_pMode->setTileheight( m_pTileHeightEdit->value( ) );
       return true;
    }
    return false;
@@ -515,6 +575,15 @@
    m_pJitterAmountEdit->setValue( m_pMode->antialiasingJitterAmount( ) );
    m_pAntialiasDepthEdit->setValue( m_pMode->antialiasingDepth( ) );
    m_pAlphaBox->setChecked( m_pMode->alpha( ) );
+   m_pDistributedBox->setChecked( m_pMode->distributed( ) );
+   enableDistributed( m_pMode->distributed( ) );
+   m_pTransportCombo->setCurrentItem( m_pMode->transport( ) );
+   setTransportConfigLabel( m_pMode->transport( ) );
+   m_pTransportConfigLineEdit->setText( m_pMode->transportConfig( ) );
+   m_pInstancesEdit->setValue( m_pMode->instances( ) );
+   m_pTimeoutEdit->setValue( m_pMode->timeout( ) );
+   m_pTileWidthEdit->setValue( m_pMode->tilewidth( ) );
+   m_pTileHeightEdit->setValue( m_pMode->tileheight( ) );
 }
 
 void PMRenderModeDialog::enableSubsection( bool yes )
@@ -539,13 +608,39 @@
    m_pJitterAmountEdit->setEnabled( yes );
 }
 
+void PMRenderModeDialog::enableDistributed( bool yes )
+{
+   m_pTransportCombo->setEnabled( yes );
+   m_pTransportConfigLineEdit->setEnabled( yes );
+   m_pInstancesEdit->setEnabled( yes );
+   m_pTimeoutEdit->setEnabled( yes );
+   m_pTileWidthEdit->setEnabled( yes );
+   m_pTileHeightEdit->setEnabled( yes );
+}
+
+void PMRenderModeDialog::setTransportConfigLabel( int transport )
+{
+   switch( transport )
+   {
+      case 0:
+         m_pTransportConfigLabel->setText( i18n( "Agent:" ) );
+         break;
+      case 1:
+         m_pTransportConfigLabel->setText( i18n( "Hostfile:" ) );
+         break;
+      default:
+         m_pTransportConfigLabel->setText( QString( "" ) );
+         break;
+   }
+}
+
 int PMRenderModeDialog::qualityToIndex( int quality )
 {
    if( quality < 0 )
       quality = 0;
    if( quality > 11 )
       quality = 11;
-   
+
    return c_qualityToIndex[quality];
 }
 
@@ -584,6 +679,10 @@
 {
    slotChanged( );
    enableSubsection( on );
+   if ( on == true ) {
+      m_pDistributedBox->setChecked( false );
+      enableDistributed( false );
+   }
 }
 
 void PMRenderModeDialog::slotAntialiasingToggled( bool on )
@@ -596,6 +695,23 @@
 {
    slotChanged( );
    enableJitter( on );
+}
+
+void PMRenderModeDialog::slotDistributedToggled( bool on )
+{
+   slotChanged( );
+   enableDistributed( on );
+   if ( on == true ) {
+      m_pSubsectionBox->setChecked( false );
+      enableSubsection( false );
+   }
+}
+
+void PMRenderModeDialog::slotTransportChanged( int item )
+{
+   setTransportConfigLabel( item );
+   m_pTransportConfigLineEdit->setText( QString( "" ) );
+   slotActivated( item );
 }
 
 void PMRenderModeDialog::slotToggled( bool )
Index: pmrendermodesdialog.h
===================================================================
RCS file: /home/kde/kdegraphics/kpovmodeler/pmrendermodesdialog.h,v
retrieving revision 1.4
diff -u -r1.4 pmrendermodesdialog.h
--- pmrendermodesdialog.h	30 Dec 2002 19:55:16 -0000	1.4
+++ pmrendermodesdialog.h	23 Sep 2003 21:24:11 -0000
@@ -128,7 +128,9 @@
    void slotAntialiasingToggled( bool );
    void slotJitterToggled( bool );
    void slotToggled( bool );
-   
+   void slotDistributedToggled( bool );
+   void slotTransportChanged( int );
+
 private:
    /**
     * Saves the current changes. Returns true if successful.
@@ -148,7 +150,9 @@
    void enableJitter( bool yes );
    int qualityToIndex( int quality );
    int indexToQuality( int index );
-   
+   void enableDistributed( bool yes );
+   void setTransportConfigLabel( int transport );
+
    PMRenderMode* m_pMode;
    
    QTabWidget* m_pTabWidget;
@@ -172,6 +176,16 @@
    // output
    QCheckBox* m_pAlphaBox;
    
+   // distributed rendering
+   QCheckBox* m_pDistributedBox;
+   QComboBox* m_pTransportCombo;
+   QLabel* m_pTransportConfigLabel;
+   QLineEdit* m_pTransportConfigLineEdit;
+   PMIntEdit* m_pInstancesEdit;
+   PMIntEdit* m_pTimeoutEdit;
+   PMIntEdit* m_pTileWidthEdit;
+   PMIntEdit* m_pTileHeightEdit;
+
    static QSize s_size;
 };
 
Index: pmsettingsdialog.cpp
===================================================================
RCS file: /home/kde/kdegraphics/kpovmodeler/pmsettingsdialog.cpp,v
retrieving revision 1.41
diff -u -r1.41 pmsettingsdialog.cpp
--- pmsettingsdialog.cpp	26 Feb 2003 20:07:27 -0000	1.41
+++ pmsettingsdialog.cpp	23 Sep 2003 21:24:12 -0000
@@ -27,6 +27,7 @@
 #include "pmlayoutsettings.h"
 #include "pmobjectlibrarysettings.h"
 #include "pmpluginsettings.h"
+#include "pmdistrendersettings.h"
 
 #include "pmrendermanager.h"
 #include "pmdebug.h"
@@ -115,6 +116,12 @@
    sl.append( i18n( "Plugins" ) );
    w = addVBoxPage( sl, i18n( "Plugin Settings" ) );
    p = new PMPluginSettings( w );
+   registerPage( w, p );
+
+   sl.clear( );
+   sl.append( i18n( "Distributed Rendering" ) );
+   w = addVBoxPage( sl, i18n( "Distributed Rendering Settings" ) );
+   p = new PMDistRenderSettings( w );
    registerPage( w, p );
 
    displaySettings( );
pmdistrendersettings.cpp (text/x-c++src, 6.2 KB)
/*
**************************************************************************
                                 description
                             --------------------
    copyright            : (C) 2003 by Christoph Fabianek
    email                : [email protected]
**************************************************************************

**************************************************************************
*                                                                        *
*  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 "pmdistrendersettings.h"

#include "pmdocumentationmap.h"
#include "pmpovrayrenderwidget.h"
#include "pmdefaults.h"
#include "pmresourcelocator.h"
#include "pmtext.h"

#include <qlayout.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include <qlistbox.h>
#include <qcombobox.h>
#include <qgroupbox.h>
#include <qlabel.h>
#include <klocale.h>
#include <kiconloader.h>
#include <kmessagebox.h>
#include <kfiledialog.h>

#include "pmlineedits.h"


PMDistRenderSettings::PMDistRenderSettings( QWidget* parent, const char* name )
      : PMSettingsDialogPage( parent, name )
{
   QHBoxLayout* hlayout;
   QVBoxLayout* vlayout;
   QVBoxLayout* gvl;
   QGroupBox* gb;

   vlayout = new QVBoxLayout( this, 0, KDialog::spacingHint( ) );

   gb = new QGroupBox( i18n( "nspovray" ), this );
   gvl = new QVBoxLayout( gb, KDialog::marginHint( ), KDialog::spacingHint( ) );
   gvl->addSpacing( 10 );
   hlayout = new QHBoxLayout( gvl );
   hlayout->addWidget( new QLabel( i18n( "Path:" ), gb ) );
   m_pNspovrayPath = new QLineEdit( gb );
   hlayout->addWidget( m_pNspovrayPath );
   m_pBrowseNspovrayPath = new QPushButton( gb );
   m_pBrowseNspovrayPath->setPixmap( SmallIcon( "fileopen" ) );
   connect( m_pBrowseNspovrayPath, SIGNAL( clicked( ) ),
            SLOT( slotBrowseNspovrayPath( ) ) );
   hlayout->addWidget( m_pBrowseNspovrayPath );
   vlayout->addWidget( gb );

   gb = new QGroupBox( i18n( "Default values" ), this );
   gvl = new QVBoxLayout( gb, KDialog::marginHint( ), KDialog::spacingHint( ) );
   gvl->addSpacing( 10 );
   hlayout = new QHBoxLayout( gvl );
   QGridLayout* distLayout = new QGridLayout( hlayout, 6, 2 );

   distLayout->addWidget( new QLabel( i18n( "Transport:" ), gb ), 0, 0 );
   m_pDefaultTransportCombo = new QComboBox( gb );
   distLayout->addWidget( m_pDefaultTransportCombo, 0, 1 );
   m_pDefaultTransportCombo->insertItem( i18n( "NetSolve" ) );
   m_pDefaultTransportCombo->insertItem( i18n( "SSH" ) );

   m_pDefaultTransportConfigLabel = new QLabel( i18n( "Hostfile:" ), gb );
   distLayout->addWidget( m_pDefaultTransportConfigLabel, 1, 0  );
   m_pDefaultTransportConfigLineEdit = new QLineEdit( gb );
   distLayout->addWidget( m_pDefaultTransportConfigLineEdit, 1, 1  );

   distLayout->addWidget( new QLabel( i18n( "Instances:" ), gb ), 2, 0  );
   m_pDefaultInstancesEdit = new PMIntEdit( gb );
   m_pDefaultInstancesEdit->setValidation( true, 1, false, 0 );
   distLayout->addWidget( m_pDefaultInstancesEdit, 2, 1  );

   distLayout->addWidget( new QLabel( i18n( "Timeout (sec):" ), gb ), 3, 0  );
   m_pDefaultTimeoutEdit = new PMIntEdit( gb );
   m_pDefaultTimeoutEdit->setValidation( true, 1, false, 0 );
   distLayout->addWidget( m_pDefaultTimeoutEdit, 3, 1  );

   distLayout->addWidget( new QLabel( i18n( "Tile width:" ), gb ), 4, 0  );
   m_pDefaultTileWidthEdit = new PMIntEdit( gb );
   m_pDefaultTileWidthEdit->setValidation( true, 1, false, 0 );
   distLayout->addWidget( m_pDefaultTileWidthEdit, 4, 1  );

   distLayout->addWidget( new QLabel( i18n( "Tile height:" ), gb ), 5, 0  );
   m_pDefaultTileHeightEdit = new PMIntEdit( gb );
   m_pDefaultTileHeightEdit->setValidation( true, 1, false, 0 );
   distLayout->addWidget( m_pDefaultTileHeightEdit, 5, 1  );

   hlayout->addStretch( 1 );

   vlayout->addWidget( gb );
   vlayout->addStretch( 1 );
}

void PMDistRenderSettings::displaySettings( )
{
   m_pNspovrayPath->setText( PMPovrayRenderWidget::nspovrayPath( ) );
   m_pDefaultTransportCombo->setCurrentItem( PMPovrayRenderWidget::defaultTransport( ) );
   m_pDefaultTransportConfigLineEdit->setText( PMPovrayRenderWidget::defaultTransportConfig( ) );
   m_pDefaultInstancesEdit->setValue( PMPovrayRenderWidget::defaultInstances( ) );
   m_pDefaultTimeoutEdit->setValue( PMPovrayRenderWidget::defaultTimeout( ) );
   m_pDefaultTileWidthEdit->setValue( PMPovrayRenderWidget::defaultTilewidth( ) );
   m_pDefaultTileHeightEdit->setValue( PMPovrayRenderWidget::defaultTileheight( ) );
}

void PMDistRenderSettings::displayDefaults( )
{
   m_pNspovrayPath->setText( c_defaultNspovrayPath );
   m_pDefaultTransportCombo->setCurrentItem( c_defaultTransport );
   m_pDefaultTransportConfigLineEdit->setText( c_defaultTransportConfig );
   m_pDefaultInstancesEdit->setValue( c_defaultInstances );
   m_pDefaultTimeoutEdit->setValue( c_defaultTimeout );
   m_pDefaultTileWidthEdit->setValue( c_defaultTilewidth );
   m_pDefaultTileHeightEdit->setValue( c_defaultTileheight );
}

bool PMDistRenderSettings::validateData( )
{
   return true;
}

void PMDistRenderSettings::applySettings( )
{
   PMPovrayRenderWidget::setNspovrayPath( m_pNspovrayPath->text( ) );
   PMPovrayRenderWidget::setDefaultTransport( m_pDefaultTransportCombo->currentItem( ) );
   PMPovrayRenderWidget::setDefaultTransportConfig( m_pDefaultTransportConfigLineEdit->text( ) );
   PMPovrayRenderWidget::setDefaultInstances( m_pDefaultInstancesEdit->value( ) );
   PMPovrayRenderWidget::setDefaultTimeout( m_pDefaultTimeoutEdit->value( ) );
   PMPovrayRenderWidget::setDefaultTilewidth( m_pDefaultTileWidthEdit->value( ) );
   PMPovrayRenderWidget::setDefaultTileheight( m_pDefaultTileHeightEdit->value( ) );
}

void PMDistRenderSettings::slotBrowseNspovrayPath( )
{
   QString str = KFileDialog::getExistingDirectory( );

   if( !str.isEmpty( ) )
      m_pNspovrayPath->setText( str );
}

#include "pmdistrendersettings.moc"
pmdistrendersettings.h (text/x-chdr, 2 KB)
/*
**************************************************************************
                                 description
                             --------------------
    copyright            : (C) 2003 by Christoph Fabianek
    email                : [email protected]
**************************************************************************

**************************************************************************
*                                                                        *
*  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 PMDISTRENDERSETTINGS_H
#define PMDISTRENDERSETTINGS_H

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include "pmsettingsdialog.h"

class QLineEdit;
class QPushButton;
class QComboBox;
class QListBox;

/**
 * Povray configuration dialog page
 */
class PMDistRenderSettings : public PMSettingsDialogPage
{
   Q_OBJECT
public:
   /**
    * Default constructor
    */
   PMDistRenderSettings( QWidget* parent, const char* name = 0 );
   /** */
   virtual void displaySettings( );
   /** */
   virtual bool validateData( );
   /** */
   virtual void applySettings( );
   /** */
   virtual void displayDefaults( );
   
protected slots:
   /**
    * Called when the browse button for the nspovray path is clicked
    */
   void slotBrowseNspovrayPath( );

private:
   QLineEdit* m_pNspovrayPath;
   QPushButton* m_pBrowseNspovrayPath;
   QComboBox* m_pDefaultTransportCombo;
   QLabel* m_pDefaultTransportConfigLabel;
   QLineEdit* m_pDefaultTransportConfigLineEdit;
   PMIntEdit* m_pDefaultInstancesEdit;
   PMIntEdit* m_pDefaultTimeoutEdit;
   PMIntEdit* m_pDefaultTileWidthEdit;
   PMIntEdit* m_pDefaultTileHeightEdit;
};

#endif
pmdistrendersettings.Plo (text/plain, 11.4 KB)
pmdistrendersettings.lo .libs/pmdistrendersettings.o:  \
 pmdistrendersettings.cpp pmdistrendersettings.h ../config.h \
  pmsettingsdialog.h /usr/include/kde/kdialogbase.h \
  /usr/include/kde/kdialog.h /usr/share/qt3/include/qdialog.h \
  /usr/share/qt3/include/qwidget.h /usr/share/qt3/include/qwindowdefs.h \
  /usr/share/qt3/include/qobjectdefs.h /usr/share/qt3/include/qglobal.h \
  /usr/share/qt3/include/qconfig.h /usr/share/qt3/include/qmodules.h \
  /usr/share/qt3/include/qfeatures.h /usr/share/qt3/include/qstring.h \
  /usr/share/qt3/include/qcstring.h /usr/share/qt3/include/qmemarray.h \
  /usr/share/qt3/include/qgarray.h /usr/share/qt3/include/qshared.h \
  /usr/share/qt3/include/qwinexport.h /usr/include/string.h \
  /usr/include/features.h /usr/include/sys/cdefs.h \
  /usr/include/gnu/stubs.h \
  /usr/lib/gcc-lib/i486-linux/3.3.2/include/stddef.h \
  /usr/include/xlocale.h \
  /usr/lib/gcc-lib/i486-linux/3.3.2/include/limits.h \
  /usr/lib/gcc-lib/i486-linux/3.3.2/include/syslimits.h \
  /usr/include/limits.h /usr/include/bits/posix1_lim.h \
  /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
  /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
  /usr/include/bits/stdio_lim.h /usr/share/qt3/include/qnamespace.h \
  /usr/share/qt3/include/qobject.h /usr/share/qt3/include/qevent.h \
  /usr/share/qt3/include/qregion.h /usr/share/qt3/include/qrect.h \
  /usr/share/qt3/include/qsize.h /usr/share/qt3/include/qpoint.h \
  /usr/share/qt3/include/qmime.h /usr/share/qt3/include/qmap.h \
  /usr/share/qt3/include/qdatastream.h /usr/share/qt3/include/qiodevice.h \
  /usr/share/qt3/include/qpair.h /usr/share/qt3/include/qvaluelist.h \
  /usr/share/qt3/include/qtl.h /usr/share/qt3/include/qtextstream.h \
  /usr/include/stdio.h /usr/include/bits/types.h \
  /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h \
  /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
  /usr/include/bits/wchar.h /usr/include/gconv.h \
  /usr/lib/gcc-lib/i486-linux/3.3.2/include/stdarg.h \
  /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \
  /usr/share/qt3/include/qpaintdevice.h /usr/share/qt3/include/qpalette.h \
  /usr/share/qt3/include/qcolor.h /usr/share/qt3/include/qstringlist.h \
  /usr/share/qt3/include/qstrlist.h /usr/share/qt3/include/qptrlist.h \
  /usr/share/qt3/include/qglist.h /usr/share/qt3/include/qptrcollection.h \
  /usr/share/qt3/include/qbrush.h /usr/share/qt3/include/qfont.h \
  /usr/share/qt3/include/qfontmetrics.h \
  /usr/share/qt3/include/qfontinfo.h /usr/share/qt3/include/qsizepolicy.h \
  /usr/include/kde/kjanuswidget.h /usr/share/qt3/include/qpixmap.h \
  /usr/share/qt3/include/qsplitter.h /usr/share/qt3/include/qframe.h \
  /usr/include/kde/klistbox.h /usr/share/qt3/include/qlistbox.h \
  /usr/share/qt3/include/qscrollview.h \
  /usr/share/qt3/include/qscrollbar.h \
  /usr/share/qt3/include/qrangecontrol.h /usr/include/kde/kguiitem.h \
  /usr/share/qt3/include/qiconset.h /usr/include/kde/kicontheme.h \
  /usr/include/kde/kglobal.h /usr/include/kde/kinstance.h \
  /usr/include/kde/kstdguiitem.h /usr/share/qt3/include/qvaluevector.h \
  pmdocumentationmap.h /usr/include/kde/kstaticdeleter.h \
  pmpovrayrenderwidget.h /usr/share/qt3/include/qimage.h \
  /usr/share/qt3/include/qbuffer.h pmrendermode.h \
  /usr/share/qt3/include/qdom.h pmdefaults.h /usr/include/math.h \
  /usr/include/bits/huge_val.h /usr/include/bits/nan.h \
  /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \
  /usr/include/bits/mathinline.h pmresourcelocator.h \
  /usr/share/qt3/include/qcache.h /usr/share/qt3/include/qgcache.h \
  /usr/share/qt3/include/qgdict.h pmtext.h pmsolidobject.h \
  pmgraphicalobject.h pmnamedobject.h pmcompositeobject.h pmobject.h \
  /usr/include/kde/kdebug.h pmmatrix.h pmmath.h \
  /usr/X11R6/include/GL/gl.h /usr/X11R6/include/GL/glext.h \
  pmcontrolpoint.h pmvector.h pmmetaobject.h \
  /usr/share/qt3/include/qdict.h pmvariant.h pmcolor.h pmthreestate.h \
  pmdebug.h /usr/share/qt3/include/qlayout.h \
  /usr/share/qt3/include/qlineedit.h /usr/share/qt3/include/qpushbutton.h \
  /usr/share/qt3/include/qbutton.h /usr/share/qt3/include/qkeysequence.h \
  /usr/share/qt3/include/qcombobox.h /usr/share/qt3/include/qgroupbox.h \
  /usr/share/qt3/include/qlabel.h /usr/include/kde/klocale.h \
  /usr/include/kde/kiconloader.h /usr/share/qt3/include/qmovie.h \
  /usr/include/kde/kmessagebox.h /usr/include/kde/kfiledialog.h \
  /usr/include/kde/kfile.h /usr/share/qt3/include/qdir.h \
  /usr/share/qt3/include/qfileinfo.h /usr/share/qt3/include/qfile.h \
  /usr/share/qt3/include/qdatetime.h /usr/include/kde/kurl.h \
  /usr/include/kde/kmimetype.h /usr/include/sys/types.h \
  /usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h \
  /usr/include/sys/select.h /usr/include/bits/select.h \
  /usr/include/bits/sigset.h /usr/include/bits/time.h \
  /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \
  /usr/include/bits/sched.h /usr/include/sys/stat.h \
  /usr/include/bits/stat.h /usr/include/kde/ksycocatype.h \
  /usr/include/kde/kservicetype.h /usr/include/kde/ksycocaentry.h \
  /usr/include/kde/ksharedptr.h /usr/include/kde/kservice.h \
  /usr/share/qt3/include/qvariant.h /usr/include/kde/ksimpleconfig.h \
  /usr/include/kde/kconfig.h /usr/include/kde/kconfigbase.h \
  /usr/include/kde/kconfigdata.h /usr/include/kde/kio/jobclasses.h \
  /usr/share/qt3/include/qguardedptr.h /usr/include/kde/kio/global.h \
  pmlineedits.h pmdistrendersettings.moc \
  /usr/share/qt3/include/qmetaobject.h \
  /usr/share/qt3/include/qconnection.h \
  /usr/share/qt3/include/qapplication.h \
  /usr/share/qt3/include/qdesktopwidget.h \
  /usr/share/qt3/include/qasciidict.h \
  /usr/share/qt3/include/qtranslator.h \
  /usr/share/qt3/include/private/qucomextra_p.h \
  /usr/share/qt3/include/private/qucom_p.h /usr/share/qt3/include/quuid.h

pmdistrendersettings.h:

../config.h:

pmsettingsdialog.h:

/usr/include/kde/kdialogbase.h:

/usr/include/kde/kdialog.h:

/usr/share/qt3/include/qdialog.h:

/usr/share/qt3/include/qwidget.h:

/usr/share/qt3/include/qwindowdefs.h:

/usr/share/qt3/include/qobjectdefs.h:

/usr/share/qt3/include/qglobal.h:

/usr/share/qt3/include/qconfig.h:

/usr/share/qt3/include/qmodules.h:

/usr/share/qt3/include/qfeatures.h:

/usr/share/qt3/include/qstring.h:

/usr/share/qt3/include/qcstring.h:

/usr/share/qt3/include/qmemarray.h:

/usr/share/qt3/include/qgarray.h:

/usr/share/qt3/include/qshared.h:

/usr/share/qt3/include/qwinexport.h:

/usr/include/string.h:

/usr/include/features.h:

/usr/include/sys/cdefs.h:

/usr/include/gnu/stubs.h:

/usr/lib/gcc-lib/i486-linux/3.3.2/include/stddef.h:

/usr/include/xlocale.h:

/usr/lib/gcc-lib/i486-linux/3.3.2/include/limits.h:

/usr/lib/gcc-lib/i486-linux/3.3.2/include/syslimits.h:

/usr/include/limits.h:

/usr/include/bits/posix1_lim.h:

/usr/include/bits/local_lim.h:

/usr/include/linux/limits.h:

/usr/include/bits/posix2_lim.h:

/usr/include/bits/xopen_lim.h:

/usr/include/bits/stdio_lim.h:

/usr/share/qt3/include/qnamespace.h:

/usr/share/qt3/include/qobject.h:

/usr/share/qt3/include/qevent.h:

/usr/share/qt3/include/qregion.h:

/usr/share/qt3/include/qrect.h:

/usr/share/qt3/include/qsize.h:

/usr/share/qt3/include/qpoint.h:

/usr/share/qt3/include/qmime.h:

/usr/share/qt3/include/qmap.h:

/usr/share/qt3/include/qdatastream.h:

/usr/share/qt3/include/qiodevice.h:

/usr/share/qt3/include/qpair.h:

/usr/share/qt3/include/qvaluelist.h:

/usr/share/qt3/include/qtl.h:

/usr/share/qt3/include/qtextstream.h:

/usr/include/stdio.h:

/usr/include/bits/types.h:

/usr/include/bits/wordsize.h:

/usr/include/bits/typesizes.h:

/usr/include/libio.h:

/usr/include/_G_config.h:

/usr/include/wchar.h:

/usr/include/bits/wchar.h:

/usr/include/gconv.h:

/usr/lib/gcc-lib/i486-linux/3.3.2/include/stdarg.h:

/usr/include/bits/sys_errlist.h:

/usr/include/bits/stdio.h:

/usr/share/qt3/include/qpaintdevice.h:

/usr/share/qt3/include/qpalette.h:

/usr/share/qt3/include/qcolor.h:

/usr/share/qt3/include/qstringlist.h:

/usr/share/qt3/include/qstrlist.h:

/usr/share/qt3/include/qptrlist.h:

/usr/share/qt3/include/qglist.h:

/usr/share/qt3/include/qptrcollection.h:

/usr/share/qt3/include/qbrush.h:

/usr/share/qt3/include/qfont.h:

/usr/share/qt3/include/qfontmetrics.h:

/usr/share/qt3/include/qfontinfo.h:

/usr/share/qt3/include/qsizepolicy.h:

/usr/include/kde/kjanuswidget.h:

/usr/share/qt3/include/qpixmap.h:

/usr/share/qt3/include/qsplitter.h:

/usr/share/qt3/include/qframe.h:

/usr/include/kde/klistbox.h:

/usr/share/qt3/include/qlistbox.h:

/usr/share/qt3/include/qscrollview.h:

/usr/share/qt3/include/qscrollbar.h:

/usr/share/qt3/include/qrangecontrol.h:

/usr/include/kde/kguiitem.h:

/usr/share/qt3/include/qiconset.h:

/usr/include/kde/kicontheme.h:

/usr/include/kde/kglobal.h:

/usr/include/kde/kinstance.h:

/usr/include/kde/kstdguiitem.h:

/usr/share/qt3/include/qvaluevector.h:

pmdocumentationmap.h:

/usr/include/kde/kstaticdeleter.h:

pmpovrayrenderwidget.h:

/usr/share/qt3/include/qimage.h:

/usr/share/qt3/include/qbuffer.h:

pmrendermode.h:

/usr/share/qt3/include/qdom.h:

pmdefaults.h:

/usr/include/math.h:

/usr/include/bits/huge_val.h:

/usr/include/bits/nan.h:

/usr/include/bits/mathdef.h:

/usr/include/bits/mathcalls.h:

/usr/include/bits/mathinline.h:

pmresourcelocator.h:

/usr/share/qt3/include/qcache.h:

/usr/share/qt3/include/qgcache.h:

/usr/share/qt3/include/qgdict.h:

pmtext.h:

pmsolidobject.h:

pmgraphicalobject.h:

pmnamedobject.h:

pmcompositeobject.h:

pmobject.h:

/usr/include/kde/kdebug.h:

pmmatrix.h:

pmmath.h:

/usr/X11R6/include/GL/gl.h:

/usr/X11R6/include/GL/glext.h:

pmcontrolpoint.h:

pmvector.h:

pmmetaobject.h:

/usr/share/qt3/include/qdict.h:

pmvariant.h:

pmcolor.h:

pmthreestate.h:

pmdebug.h:

/usr/share/qt3/include/qlayout.h:

/usr/share/qt3/include/qlineedit.h:

/usr/share/qt3/include/qpushbutton.h:

/usr/share/qt3/include/qbutton.h:

/usr/share/qt3/include/qkeysequence.h:

/usr/share/qt3/include/qcombobox.h:

/usr/share/qt3/include/qgroupbox.h:

/usr/share/qt3/include/qlabel.h:

/usr/include/kde/klocale.h:

/usr/include/kde/kiconloader.h:

/usr/share/qt3/include/qmovie.h:

/usr/include/kde/kmessagebox.h:

/usr/include/kde/kfiledialog.h:

/usr/include/kde/kfile.h:

/usr/share/qt3/include/qdir.h:

/usr/share/qt3/include/qfileinfo.h:

/usr/share/qt3/include/qfile.h:

/usr/share/qt3/include/qdatetime.h:

/usr/include/kde/kurl.h:

/usr/include/kde/kmimetype.h:

/usr/include/sys/types.h:

/usr/include/time.h:

/usr/include/endian.h:

/usr/include/bits/endian.h:

/usr/include/sys/select.h:

/usr/include/bits/select.h:

/usr/include/bits/sigset.h:

/usr/include/bits/time.h:

/usr/include/sys/sysmacros.h:

/usr/include/bits/pthreadtypes.h:

/usr/include/bits/sched.h:

/usr/include/sys/stat.h:

/usr/include/bits/stat.h:

/usr/include/kde/ksycocatype.h:

/usr/include/kde/kservicetype.h:

/usr/include/kde/ksycocaentry.h:

/usr/include/kde/ksharedptr.h:

/usr/include/kde/kservice.h:

/usr/share/qt3/include/qvariant.h:

/usr/include/kde/ksimpleconfig.h:

/usr/include/kde/kconfig.h:

/usr/include/kde/kconfigbase.h:

/usr/include/kde/kconfigdata.h:

/usr/include/kde/kio/jobclasses.h:

/usr/share/qt3/include/qguardedptr.h:

/usr/include/kde/kio/global.h:

pmlineedits.h:

pmdistrendersettings.moc:

/usr/share/qt3/include/qmetaobject.h:

/usr/share/qt3/include/qconnection.h:

/usr/share/qt3/include/qapplication.h:

/usr/share/qt3/include/qdesktopwidget.h:

/usr/share/qt3/include/qasciidict.h:

/usr/share/qt3/include/qtranslator.h:

/usr/share/qt3/include/private/qucomextra_p.h:

/usr/share/qt3/include/private/qucom_p.h:

/usr/share/qt3/include/quuid.h: