summaryrefslogtreecommitdiffstats
path: root/kpovmodeler/pmpovraysettings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kpovmodeler/pmpovraysettings.cpp')
-rw-r--r--kpovmodeler/pmpovraysettings.cpp308
1 files changed, 308 insertions, 0 deletions
diff --git a/kpovmodeler/pmpovraysettings.cpp b/kpovmodeler/pmpovraysettings.cpp
new file mode 100644
index 00000000..0b2824ae
--- /dev/null
+++ b/kpovmodeler/pmpovraysettings.cpp
@@ -0,0 +1,308 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2003 by Andreas Zehender
+ email : zehender@kde.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 "pmpovraysettings.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>
+
+PMPovraySettings::PMPovraySettings( QWidget* parent, const char* name )
+ : PMSettingsDialogPage( parent, name )
+{
+ m_selectionIndex = 0;
+
+ QHBoxLayout* hlayout;
+ QVBoxLayout* vlayout;
+ QVBoxLayout* gvl;
+ QGroupBox* gb;
+
+ vlayout = new QVBoxLayout( this, 0, KDialog::spacingHint( ) );
+
+ gb = new QGroupBox( i18n( "Povray Command" ), this );
+ gvl = new QVBoxLayout( gb, KDialog::marginHint( ), KDialog::spacingHint( ) );
+ gvl->addSpacing( 10 );
+ hlayout = new QHBoxLayout( gvl );
+ hlayout->addWidget( new QLabel( i18n( "Command:" ), gb ) );
+ m_pPovrayCommand = new QLineEdit( gb );
+ hlayout->addWidget( m_pPovrayCommand );
+ m_pBrowsePovrayCommand = new QPushButton( gb );
+ m_pBrowsePovrayCommand->setPixmap( SmallIcon( "fileopen" ) );
+ connect( m_pBrowsePovrayCommand, SIGNAL( clicked( ) ),
+ SLOT( slotBrowsePovrayCommand( ) ) );
+ hlayout->addWidget( m_pBrowsePovrayCommand );
+ vlayout->addWidget( gb );
+
+ gb = new QGroupBox( i18n( "Povray User Documentation" ), this );
+ gvl = new QVBoxLayout( gb, KDialog::marginHint( ), KDialog::spacingHint( ) );
+ gvl->addSpacing( 10 );
+ hlayout = new QHBoxLayout( gvl );
+ hlayout->addWidget( new QLabel( i18n( "Path:" ), gb ) );
+ m_pDocumentationPath = new QLineEdit( gb );
+ hlayout->addWidget( m_pDocumentationPath );
+ m_pBrowseDocumentationPath = new QPushButton( gb );
+ m_pBrowseDocumentationPath->setPixmap( SmallIcon( "fileopen" ) );
+ connect( m_pBrowseDocumentationPath, SIGNAL( clicked( ) ),
+ SLOT( slotBrowsePovrayDocumentation( ) ) );
+ hlayout->addWidget( m_pBrowseDocumentationPath );
+ vlayout->addWidget( gb );
+ hlayout = new QHBoxLayout( gvl );
+ hlayout->addWidget( new QLabel( i18n( "Version:" ), gb ) );
+ m_pDocumentationVersion = new QComboBox( false, gb );
+ QValueList<QString> versions = PMDocumentationMap::theMap( )->availableVersions( );
+ QValueListIterator<QString> it;
+ for( it = versions.begin( ); it != versions.end( ); ++it )
+ m_pDocumentationVersion->insertItem( *it );
+ hlayout->addWidget( m_pDocumentationVersion );
+ hlayout->addStretch( );
+
+ gb = new QGroupBox( i18n( "Library Paths" ), this );
+ gvl = new QVBoxLayout( gb, KDialog::marginHint( ), KDialog::spacingHint( ) );
+ gvl->addSpacing( 10 );
+ hlayout = new QHBoxLayout( gvl );
+ m_pLibraryPaths = new QListBox( gb );
+ connect( m_pLibraryPaths, SIGNAL( highlighted( int ) ),
+ SLOT( slotPathSelected( int ) ) );
+ hlayout->addWidget( m_pLibraryPaths );
+
+ QVBoxLayout* bl = new QVBoxLayout( hlayout );
+ m_pAddLibraryPath = new QPushButton( i18n( "Add..." ), gb );
+ connect( m_pAddLibraryPath, SIGNAL( clicked( ) ), SLOT( slotAddPath( ) ) );
+ bl->addWidget( m_pAddLibraryPath );
+ m_pRemoveLibraryPath = new QPushButton( i18n( "Remove" ), gb );
+ connect( m_pRemoveLibraryPath, SIGNAL( clicked( ) ),
+ SLOT( slotRemovePath( ) ) );
+ bl->addWidget( m_pRemoveLibraryPath );
+ m_pChangeLibraryPath = new QPushButton( i18n( "Edit..." ), gb );
+ connect( m_pChangeLibraryPath, SIGNAL( clicked( ) ),
+ SLOT( slotEditPath( ) ) );
+ bl->addWidget( m_pChangeLibraryPath );
+ m_pLibraryPathUp = new QPushButton( i18n( "Up" ), gb );
+ connect( m_pLibraryPathUp, SIGNAL( clicked( ) ), SLOT( slotPathUp( ) ) );
+ bl->addWidget( m_pLibraryPathUp );
+ m_pLibraryPathDown = new QPushButton( i18n( "Down" ), gb );
+ connect( m_pLibraryPathDown, SIGNAL( clicked( ) ),
+ SLOT( slotPathDown( ) ) );
+ bl->addWidget( m_pLibraryPathDown );
+ bl->addStretch( 1 );
+ vlayout->addWidget( gb );
+
+ vlayout->addStretch( 1 );
+}
+
+void PMPovraySettings::displaySettings( )
+{
+ m_pPovrayCommand->setText( PMPovrayRenderWidget::povrayCommand( ) );
+ m_pDocumentationPath->setText( PMDocumentationMap::theMap( )->povrayDocumentationPath( ) );
+ int c = m_pDocumentationVersion->count( );
+ QString s = PMDocumentationMap::theMap( )->documentationVersion( );
+ int i;
+ for( i = 0; i < c; i++ )
+ if( m_pDocumentationVersion->text( i ) == s )
+ m_pDocumentationVersion->setCurrentItem( i );
+
+ bool sb = m_pLibraryPaths->signalsBlocked( );
+ m_pLibraryPaths->blockSignals( true );
+ m_pLibraryPaths->clear( );
+ QStringList plist = PMPovrayRenderWidget::povrayLibraryPaths( );
+ QStringList::ConstIterator it = plist.begin( );
+ m_selectionIndex = -1;
+ for( ; it != plist.end( ); ++it )
+ {
+ m_pLibraryPaths->insertItem( *it );
+ m_selectionIndex++;
+ }
+
+ m_pRemoveLibraryPath->setEnabled( false );
+ m_pChangeLibraryPath->setEnabled( false );
+ m_pLibraryPathUp->setEnabled( false );
+ m_pLibraryPathDown->setEnabled( false );
+ m_pLibraryPaths->blockSignals( sb );
+}
+
+void PMPovraySettings::displayDefaults( )
+{
+ m_pPovrayCommand->setText( c_defaultPovrayCommand );
+ m_pDocumentationVersion->setCurrentItem( 0 );
+ m_pDocumentationPath->setText( QString::null );
+ m_pLibraryPaths->clear();
+
+}
+
+bool PMPovraySettings::validateData( )
+{
+ return true;
+}
+
+void PMPovraySettings::applySettings( )
+{
+ PMPovrayRenderWidget::setPovrayCommand( m_pPovrayCommand->text( ) );
+ PMDocumentationMap::theMap( )->setPovrayDocumentationPath(
+ m_pDocumentationPath->text( ) );
+ PMDocumentationMap::theMap( )->setDocumentationVersion(
+ m_pDocumentationVersion->currentText( ) );
+ QStringList plist;
+ int num = ( signed ) m_pLibraryPaths->count( );
+ int i;
+ for( i = 0; i < num; i++ )
+ plist.append( m_pLibraryPaths->text( i ) );
+
+ if( PMPovrayRenderWidget::povrayLibraryPaths( ) != plist )
+ {
+ PMPovrayRenderWidget::setPovrayLibraryPaths( plist );
+ PMResourceLocator::clearCache( );
+ PMText::povrayLibraryPathsChanged( );
+ emit repaintViews( );
+ }
+}
+
+void PMPovraySettings::slotAddPath( )
+{
+ if( m_pLibraryPaths->count( ) >= 20 )
+ KMessageBox::error( this, i18n( "Povray only supports up to 20 library paths." ) );
+ else
+ {
+ QString path = KFileDialog::getExistingDirectory( QString::null, this );
+ if( !path.isEmpty( ) )
+ {
+#if ( QT_VERSION >= 300 )
+ QListBoxItem* item = m_pLibraryPaths->findItem( path, ExactMatch );
+#else
+ QListBoxItem* item = 0;
+#endif
+ if( !item )
+ {
+ m_pLibraryPaths->insertItem( path, m_selectionIndex + 1 );
+ m_pLibraryPaths->setCurrentItem( m_selectionIndex + 1 );
+ }
+ else
+ KMessageBox::error( this, i18n( "The list of library paths already contains this path." ) );
+ }
+ }
+}
+
+void PMPovraySettings::slotRemovePath( )
+{
+ m_pLibraryPaths->removeItem( m_selectionIndex );
+ if( ( unsigned ) m_selectionIndex >= m_pLibraryPaths->count( ) )
+ m_selectionIndex--;
+ m_pLibraryPaths->setCurrentItem( m_selectionIndex );
+}
+
+void PMPovraySettings::slotPathUp( )
+{
+ QListBoxItem* lbi = m_pLibraryPaths->item( m_selectionIndex );
+ if( lbi )
+ {
+ QString text = lbi->text( );
+ m_pLibraryPaths->removeItem( m_selectionIndex );
+ if( m_selectionIndex > 0 )
+ m_selectionIndex--;
+ m_pLibraryPaths->insertItem( text, m_selectionIndex );
+ m_pLibraryPaths->setCurrentItem( m_selectionIndex );
+ }
+}
+
+void PMPovraySettings::slotPathDown( )
+{
+ QListBoxItem* lbi = m_pLibraryPaths->item( m_selectionIndex );
+ if( lbi )
+ {
+ QString text = lbi->text( );
+ m_pLibraryPaths->removeItem( m_selectionIndex );
+ if( ( unsigned ) m_selectionIndex < m_pLibraryPaths->count( ) )
+ m_selectionIndex++;
+ m_pLibraryPaths->insertItem( text, m_selectionIndex );
+ m_pLibraryPaths->setCurrentItem( m_selectionIndex );
+ }
+}
+
+void PMPovraySettings::slotEditPath( )
+{
+ QListBoxItem* lbi = m_pLibraryPaths->item( m_selectionIndex );
+ if( lbi )
+ {
+ QString text = lbi->text( );
+ QString path = KFileDialog::getExistingDirectory( text, this );
+ if( !path.isEmpty( ) )
+ {
+#if ( QT_VERSION >= 300 )
+ QListBoxItem* item = m_pLibraryPaths->findItem( path, ExactMatch );
+#else
+ QListBoxItem* item = 0;
+#endif
+ if( !item )
+ m_pLibraryPaths->changeItem( path, m_selectionIndex );
+ else if( item != lbi )
+ KMessageBox::error( this, i18n( "The list of library paths already contains this path." ) );
+ }
+ }
+}
+
+void PMPovraySettings::slotPathSelected( int index )
+{
+ m_selectionIndex = index;
+ QListBoxItem* lbi = m_pLibraryPaths->item( m_selectionIndex );
+ if( lbi )
+ {
+ m_pRemoveLibraryPath->setEnabled( true );
+ m_pChangeLibraryPath->setEnabled( true );
+ m_pLibraryPathUp->setEnabled( index > 0 );
+ m_pLibraryPathDown->setEnabled( index < ( ( signed ) m_pLibraryPaths->count( ) - 1 ) );
+ }
+ else
+ {
+ m_pRemoveLibraryPath->setEnabled( false );
+ m_pChangeLibraryPath->setEnabled( false );
+ m_pLibraryPathUp->setEnabled( false );
+ m_pLibraryPathDown->setEnabled( false );
+ }
+}
+
+void PMPovraySettings::slotBrowsePovrayCommand( )
+{
+ QString str = KFileDialog::getOpenFileName( QString::null, QString::null );
+
+ if( !str.isEmpty() )
+ {
+ m_pPovrayCommand->setText( str );
+ }
+}
+
+void PMPovraySettings::slotBrowsePovrayDocumentation( )
+{
+ QString str = KFileDialog::getExistingDirectory( );
+
+ if( !str.isEmpty( ) )
+ m_pDocumentationPath->setText( str );
+}
+
+#include "pmpovraysettings.moc"