summaryrefslogtreecommitdiffstats
path: root/kpovmodeler/pmobjectselect.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kpovmodeler/pmobjectselect.cpp')
-rw-r--r--kpovmodeler/pmobjectselect.cpp361
1 files changed, 361 insertions, 0 deletions
diff --git a/kpovmodeler/pmobjectselect.cpp b/kpovmodeler/pmobjectselect.cpp
new file mode 100644
index 00000000..fb9fa0ce
--- /dev/null
+++ b/kpovmodeler/pmobjectselect.cpp
@@ -0,0 +1,361 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2002 by Andreas Zehender
+**************************************************************************
+
+**************************************************************************
+* *
+* 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 "pmobjectselect.h"
+#include "pmfactory.h"
+#include <klocale.h>
+#include <kiconloader.h>
+
+PMListBoxObject::PMListBoxObject( QListBox* listbox, PMObject* obj,
+ QListBoxItem* after )
+ : QListBoxPixmap( listbox,
+ SmallIcon( obj->pixmap( ), PMFactory::instance( ) ),
+ checkName( obj->name( ) ), after )
+{
+ m_pObject = obj;
+}
+
+PMListBoxObject::PMListBoxObject( QListBox* listbox, PMObject* obj )
+ : QListBoxPixmap( listbox,
+ SmallIcon( obj->pixmap( ), PMFactory::instance( ) ),
+ checkName( obj->name( ) ) )
+{
+ m_pObject = obj;
+}
+
+PMListBoxObject::PMListBoxObject( PMObject* obj )
+ : QListBoxPixmap( SmallIcon( obj->pixmap( ), PMFactory::instance( ) ),
+ checkName( obj->name( ) ) )
+{
+ m_pObject = obj;
+}
+
+PMListBoxObject::PMListBoxObject( QListBox* listbox, PMObject* obj,
+ const QString& text, QListBoxItem* after )
+ : QListBoxPixmap( listbox,
+ SmallIcon( obj->pixmap( ), PMFactory::instance( ) ),
+ text, after )
+{
+ m_pObject = obj;
+}
+
+PMListBoxObject::PMListBoxObject( QListBox* listbox, PMObject* obj,
+ const QString& text )
+ : QListBoxPixmap( listbox,
+ SmallIcon( obj->pixmap( ), PMFactory::instance( ) ),
+ text )
+{
+ m_pObject = obj;
+}
+
+PMListBoxObject::PMListBoxObject( PMObject* obj, const QString& text )
+ : QListBoxPixmap( SmallIcon( obj->pixmap( ), PMFactory::instance( ) ),
+ text )
+{
+ m_pObject = obj;
+}
+
+QString PMListBoxObject::checkName( const QString& text )
+{
+ if( text.isEmpty( ) )
+ return i18n( "(unnamed)" );
+ return text;
+}
+
+PMListBoxObject::~PMListBoxObject( )
+{
+}
+
+
+QSize PMObjectSelect::s_size = QSize( 200, 300 );
+
+
+PMObjectSelect::PMObjectSelect( QWidget* parent, const char* name, bool modal )
+ : KDialogBase( parent, name, modal, i18n( "Choose Object" ), Ok | Cancel )
+{
+ m_pSelectedObject = 0;
+ m_pListBox = new QListBox( this );
+ setMainWidget( m_pListBox );
+ setInitialSize( s_size );
+
+ connect( m_pListBox, SIGNAL( highlighted( QListBoxItem* ) ),
+ SLOT( slotHighlighted( QListBoxItem* ) ) );
+ connect( m_pListBox, SIGNAL( selected( QListBoxItem* ) ),
+ SLOT( slotSelected( QListBoxItem* ) ) );
+ enableButtonOK( false );
+}
+
+PMObjectSelect::~PMObjectSelect( )
+{
+ s_size = size( );
+}
+
+void PMObjectSelect::addObject( PMObject* obj )
+{
+ m_pListBox->insertItem( new PMListBoxObject( obj ) );
+}
+
+int PMObjectSelect::selectObject( PMObject* link, const QString& t,
+ PMObject* & obj, QWidget* parent )
+{
+ PMObject* last = link;
+ PMObject* scene;
+ bool stop = false;
+ bool found = false;
+
+ do
+ {
+ scene = last->parent( );
+ if( scene )
+ {
+ if( scene->type( ) == "Scene" )
+ {
+ last = last->prevSibling( );
+ stop = true;
+ found = true;
+ }
+ else
+ last = last->parent( );
+ }
+ else
+ stop = true;
+ }
+ while( !stop );
+
+ if( found )
+ {
+ PMObjectSelect s( parent );
+
+ PMObject* o = scene->firstChild( );
+ bool l = false;
+
+ while( o && !l && last )
+ {
+ if( o->type( ) == t )
+ s.m_pListBox->insertItem( new PMListBoxObject( o ) );
+
+ if( o == last )
+ l = true;
+ else
+ o = o->nextSibling( );
+ }
+
+ int result = s.exec( );
+ if( result == Accepted )
+ obj = s.selectedObject( );
+
+ return result;
+ }
+ else
+ kdError( PMArea ) << "PMObjectSelect: Link does not seem to be correctly inserted in the scene.\n";
+ return Rejected;
+}
+
+int PMObjectSelect::selectObject( PMObject* link,
+ const QStringList& t,
+ PMObject* & obj, QWidget* parent )
+{
+ PMObject* last = link;
+ PMObject* scene;
+ bool stop = false;
+ bool found = false;
+
+ do
+ {
+ scene = last->parent( );
+ if( scene )
+ {
+ if( scene->type( ) == "Scene" )
+ {
+ last = last->prevSibling( );
+ stop = true;
+ found = true;
+ }
+ else
+ last = last->parent( );
+ }
+ else
+ stop = true;
+ }
+ while( !stop );
+
+ if( found )
+ {
+ PMObjectSelect s( parent );
+
+ PMObject* o = scene->firstChild( );
+ bool l = false;
+
+ while( o && !l && last )
+ {
+ if( t.findIndex( o->type( ) ) >= 0 )
+ s.m_pListBox->insertItem( new PMListBoxObject( o ) );
+
+ if( o == last )
+ l = true;
+ else
+ o = o->nextSibling( );
+ }
+
+ int result = s.exec( );
+ if( result == Accepted )
+ obj = s.selectedObject( );
+
+ return result;
+ }
+ else
+ kdError( PMArea ) << "PMObjectSelect: Link does not seem to be correctly inserted in the scene.\n";
+ return Rejected;
+}
+
+int PMObjectSelect::selectDeclare( PMObject* link, const QString& declareType,
+ PMObject* & obj, QWidget* parent )
+{
+ PMObject* last = link;
+ PMObject* scene;
+ bool stop = false;
+ bool found = false;
+
+ do
+ {
+ scene = last->parent( );
+ if( scene )
+ {
+ if( scene->type( ) == "Scene" )
+ {
+ last = last->prevSibling( );
+ stop = true;
+ found = true;
+ }
+ else
+ last = last->parent( );
+ }
+ else
+ stop = true;
+ }
+ while( !stop );
+
+ if( found )
+ {
+ PMObjectSelect s( parent );
+
+ PMObject* o = scene->firstChild( );
+ PMDeclare* decl;
+
+ bool l = false;
+
+ while( o && !l && last )
+ {
+ if( o->type( ) == "Declare" )
+ {
+ decl = ( PMDeclare* ) o;
+ if( decl->declareType( ) == declareType )
+ s.m_pListBox->insertItem( new PMListBoxObject( o ) );
+ }
+
+ if( o == last )
+ l = true;
+ else
+ o = o->nextSibling( );
+ }
+
+ int result = s.exec( );
+ if( result == Accepted )
+ obj = s.selectedObject( );
+
+ return result;
+ }
+ else
+ kdError( PMArea ) << "PMObjectSelect: Link does not seem to be correctly inserted in the scene.\n";
+ return Rejected;
+}
+
+int PMObjectSelect::selectDeclare( PMObject* link, const QStringList& declareTypes,
+ PMObject* & obj, QWidget* parent )
+{
+ PMObject* last = link;
+ PMObject* scene;
+ bool stop = false;
+ bool found = false;
+
+ do
+ {
+ scene = last->parent( );
+ if( scene )
+ {
+ if( scene->type( ) == "Scene" )
+ {
+ last = last->prevSibling( );
+ stop = true;
+ found = true;
+ }
+ else
+ last = last->parent( );
+ }
+ else
+ stop = true;
+ }
+ while( !stop );
+
+ if( found )
+ {
+ PMObjectSelect s( parent );
+
+ PMObject* o = scene->firstChild( );
+ PMDeclare* decl;
+
+ bool l = false;
+
+ while( o && !l && last )
+ {
+ if( o->type( ) == "Declare" )
+ {
+ decl = ( PMDeclare* ) o;
+ if( declareTypes.findIndex( decl->declareType( ) ) >= 0 )
+ s.m_pListBox->insertItem( new PMListBoxObject( o ) );
+ }
+
+ if( o == last )
+ l = true;
+ else
+ o = o->nextSibling( );
+ }
+
+ int result = s.exec( );
+ if( result == Accepted )
+ obj = s.selectedObject( );
+
+ return result;
+ }
+ else
+ kdError( PMArea ) << "PMObjectSelect: Link does not seem to be correctly inserted in the scene.\n";
+ return Rejected;
+}
+
+void PMObjectSelect::slotHighlighted( QListBoxItem* lbi )
+{
+ m_pSelectedObject = ( ( PMListBoxObject* ) lbi )->object( );
+ enableButtonOK( true );
+}
+
+void PMObjectSelect::slotSelected( QListBoxItem* lbi )
+{
+ m_pSelectedObject = ( ( PMListBoxObject* ) lbi )->object( );
+ enableButtonOK( true );
+ accept( );
+}
+#include "pmobjectselect.moc"