+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : Vladimir Klyachin (OCN)
-# Module : suit
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-
-VPATH=.:@srcdir@:@srcdir@/resources
-
-@COMMENCE@
-
-# header files
-
-EXPORT_HEADERS= Qtx.h \
- QtxAction.h \
- QtxColorScale.h \
- QtxComboBox.h \
- QtxDblSpinBox.h \
- QtxDialog.h \
- QtxDockAction.h \
- QtxDockWindow.h \
- QtxGroupBox.h \
- QtxIntSpinBox.h \
- QtxListAction.h \
- QtxListBox.h \
- QtxListOfOperations.h \
- QtxLogoMgr.h \
- QtxMenuButton.h \
- QtxMRUAction.h \
- QtxOperations.h \
- QtxPathDialog.h \
- QtxPopupMgr.h \
- QtxResourceMgr.h \
- QtxStdOperations.h \
- QtxTable.h \
- QtxToolBar.h \
- QtxToolTip.h \
- QtxParser.h \
- QtxPopupMenu.h \
- QtxActionMgr.h \
- QtxActionMenuMgr.h \
- QtxActionToolMgr.h \
- QtxMainWindow.h \
- QtxWorkspaceAction.h \
- QtxWorkstackAction.h \
- QtxListResourceEdit.h \
- QtxWorkstack.h \
- QtxResourceEdit.h \
- QtxListView.h \
- QtxDirListEditor.h \
- QtxDblValidator.h \
- QtxSplash.h
-
-# .po files to transform in .qm
-
-PO_FILES = \
-
-# Libraries targets
-
-LIB = libqtx.la
-
-LIB_SRC= \
- Qtx.cxx \
- QtxAction.cxx \
- QtxColorScale.cxx \
- QtxComboBox.cxx \
- QtxDblSpinBox.cxx \
- QtxDialog.cxx \
- QtxDockAction.cxx \
- QtxDockWindow.cxx \
- QtxGroupBox.cxx \
- QtxIntSpinBox.cxx \
- QtxListAction.cxx \
- QtxListBox.cxx \
- QtxListOfOperations.cxx \
- QtxLogoMgr.cxx \
- QtxMenuButton.cxx \
- QtxMRUAction.cxx \
- QtxPathDialog.cxx \
- QtxPopupMgr.cxx \
- QtxResourceMgr.cxx \
- QtxStdOperations.cxx \
- QtxTable.cxx \
- QtxToolBar.cxx \
- QtxToolTip.cxx \
- QtxOperations.cxx \
- QtxParser.cxx \
- QtxPopupMenu.cxx \
- QtxActionMgr.cxx \
- QtxActionMenuMgr.cxx \
- QtxActionToolMgr.cxx \
- QtxMainWindow.cxx \
- QtxWorkspaceAction.cxx \
- QtxWorkstackAction.cxx \
- QtxListResourceEdit.cxx \
- QtxResourceEdit.cxx \
- QtxWorkstack.cxx \
- QtxListView.cxx \
- QtxDirListEditor.cxx \
- QtxDblValidator.cxx \
- QtxSplash.cxx
-
-LIB_MOC = \
- QtxAction.h \
- QtxColorScale.h \
- QtxComboBox.h \
- QtxDblSpinBox.h \
- QtxDialog.h \
- QtxDockAction.h \
- QtxDockWindow.h \
- QtxGroupBox.h \
- QtxIntSpinBox.h \
- QtxListAction.h \
- QtxListBox.h \
- QtxLogoMgr.h \
- QtxMenuButton.h \
- QtxMRUAction.h \
- QtxPathDialog.h \
- QtxPopupMgr.h \
- QtxPopupMenu.h \
- QtxTable.h \
- QtxToolBar.h \
- QtxToolTip.h \
- QtxActionMgr.h \
- QtxActionMenuMgr.h \
- QtxActionToolMgr.h \
- QtxMainWindow.h \
- QtxWorkspaceAction.h \
- QtxWorkstackAction.h \
- QtxWorkstack.h \
- QtxListView.h \
- QtxListResourceEdit.h \
- QtxDirListEditor.h \
- QtxDblValidator.h \
- QtxSplash.h
-
-RESOURCES_FILES = \
-
-CPPFLAGS+=$(QT_INCLUDES)
-
-LDFLAGS+=$(QT_MT_LIBS)
-
-@CONCLUDE@
-
-
--- /dev/null
+TEMPLATE = lib
+DESTDIR = ../../lib
+MOC_DIR = ../../moc
+OBJECTS_DIR = ../../obj/$$TARGET
+
+QT += xml
+CONFIG -= debug release debug_and_release
+CONFIG += qt thread debug dll shared
+
+win32:DEFINES += WIN32
+DEFINES += QTX_EXPORTS
+
+HEADERS = *.h
+
+SOURCES = *.cxx
+
+includes.files = $$HEADERS
+includes.path = ../../include
+
+INSTALLS += includes
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxDblSpinBox.cxx
-// Author: Sergey TELKOV
-
-#include "QtxDblSpinBox.h"
-
-#include <qlineedit.h>
-#include <qvalidator.h>
-#include <qapplication.h>
-
-#include <float.h>
-
-/*!
- \class QtxDblSpinBox::Validator [internal]
- Validator for QtxDblSpinBox (getted from Trolltech Qt - SpinBoxValidator)
-*/
-class QtxDblSpinBox::Validator : public QDoubleValidator
-{
-public:
- Validator( QtxDblSpinBox* sb, const char* name )
- : QDoubleValidator( sb, name ), spinBox( sb ) {}
-
- virtual State validate( QString& str, int& pos ) const;
-
-private:
- QtxDblSpinBox* spinBox;
-};
-
-
-/*!
- Checks string and \return QValidator::State
-*/
-QValidator::State QtxDblSpinBox::Validator::validate( QString& str, int& pos ) const
-{
- QString pref = spinBox->prefix();
- QString suff = spinBox->suffix();
- uint overhead = pref.length() + suff.length();
- State state = Invalid;
-
- if ( overhead == 0 )
- state = QDoubleValidator::validate( str, pos );
- else
- {
- if ( str.length() >= overhead && str.startsWith( pref ) &&
- str.right( suff.length() ) == suff )
- {
- QString core = str.mid( pref.length(), str.length() - overhead );
- int corePos = pos - pref.length();
- state = QDoubleValidator::validate( core, corePos );
- pos = corePos + pref.length();
- str.replace( pref.length(), str.length() - overhead, core );
- }
- else
- {
- state = QDoubleValidator::validate( str, pos );
- if ( state == Invalid )
- {
- QString special = spinBox->specialValueText().stripWhiteSpace();
- QString candidate = str.stripWhiteSpace();
- if ( special.startsWith( candidate ) )
- {
- if ( candidate.length() == special.length() )
- state = Acceptable;
- else
- state = Intermediate;
- }
- }
- }
- }
- return state;
-}
-
-/*!
- Constructor
-*/
-QtxDblSpinBox::QtxDblSpinBox( QWidget* parent, const char* name )
-: QSpinBox( parent, name ),
-myCleared( false ),
-myBlocked( false ),
-myPrecision( 0 )
-{
- myMin = -DBL_MAX;
- myMax = DBL_MAX;
- myStep = QRangeControl::lineStep();
- myValue = 0;
- setValidator( new Validator( this, "double_spinbox_validator" ) );
- rangeChange();
- updateDisplay();
-
- connect( editor(), SIGNAL( textChanged( const QString& ) ), this, SLOT( onTextChanged( const QString& ) ) );
-}
-
-/*!
- Constructor
-*/
-QtxDblSpinBox::QtxDblSpinBox( double min, double max, double step, QWidget* parent, const char* name )
-: QSpinBox( parent, name ),
-myMin( min ),
-myMax( max ),
-myStep( step ),
-myCleared( false ),
-myBlocked( false ),
-myPrecision( 0 )
-{
- myValue = myMin;
- setValidator( new Validator( this, "double_spinbox_validator" ) );
- rangeChange();
- updateDisplay();
-
- connect( editor(), SIGNAL( textChanged( const QString& ) ), this, SLOT( onTextChanged( const QString& ) ) );
-}
-
-/*!
- Destructor
-*/
-QtxDblSpinBox::~QtxDblSpinBox()
-{
-}
-
-/*!
- \return min value of spin box
-*/
-double QtxDblSpinBox::minValue() const
-{
- return myMin;
-}
-
-/*!
- \return max value of spin box
-*/
-double QtxDblSpinBox::maxValue() const
-{
- return myMax;
-}
-
-/*!
- Changes min value of spin box
- \param min - new min value
-*/
-void QtxDblSpinBox::setMinValue( int min )
-{
- setMinValue( (double)min );
-}
-
-/*!
- Changes min value of spin box
- \param min - new min value
-*/
-void QtxDblSpinBox::setMinValue( double min )
-{
- if ( myMin != min )
- {
- myMin = min;
- rangeChange();
- }
-}
-
-/*!
- Changes max value of spin box
- \param max - new max value
-*/
-void QtxDblSpinBox::setMaxValue( int max )
-{
- setMaxValue( (double)max );
-}
-
-/*!
- Changes max value of spin box
- \param max - new max value
-*/
-void QtxDblSpinBox::setMaxValue( double max )
-{
- if ( myMax != max )
- {
- myMax = max;
- rangeChange();
- }
-}
-
-/*!
- Changes min and max value of spin box
- \param min - new min value
- \param max - new max value
-*/
-void QtxDblSpinBox::setRange( int min, int max )
-{
- setRange( (double)min, (double)max );
-}
-
-/*!
- Changes min and max value of spin box
- \param min - new min value
- \param max - new max value
-*/
-void QtxDblSpinBox::setRange( double min, double max )
-{
- if ( myMin != min || myMax != max )
- {
- myMin = min;
- myMax = max;
- rangeChange();
- }
-}
-
-/*!
- \return step of spin box
-*/
-double QtxDblSpinBox::lineStep() const
-{
- return myStep;
-}
-
-/*!
- Changes step of spin box
- \param step - new step
-*/
-void QtxDblSpinBox::setLineStep( int step )
-{
- setLineStep( (double)step );
-}
-
-/*!
- Changes step of spin box
- \param step - new step
-*/
-void QtxDblSpinBox::setLineStep( double step )
-{
- myStep = step;
-}
-
-/*!
- \return value of spin box
-*/
-double QtxDblSpinBox::value() const
-{
- QSpinBox::value();
-
- return myValue;
-}
-
-/*!
- Changes value of spin box
- \param val - new value of spin box
-*/
-void QtxDblSpinBox::setValue( int val )
-{
- setValue( (double)val );
-}
-
-/*!
- Changes value of spin box
- \param val - new value of spin box
-*/
-void QtxDblSpinBox::setValue( double val )
-{
- myCleared = false;
- double prevVal = myValue;
- myValue = bound( val );
- if ( prevVal != myValue )
- valueChange();
-}
-
-/*!
- Adds step to value
-*/
-void QtxDblSpinBox::stepUp()
-{
- interpretText();
- if ( wrapping() && myValue + myStep > myMax )
- setValue( myMin );
- else
- setValue( myValue + myStep );
-}
-
-/*!
- Subtracks step from value
-*/
-void QtxDblSpinBox::stepDown()
-{
- interpretText();
- if ( wrapping() && myValue - myStep < myMin )
- setValue( myMax );
- else
- setValue( myValue - myStep );
-}
-
-/*!
- \return number of digit after comma
-*/
-int QtxDblSpinBox::precision() const
-{
- return myPrecision;
-}
-
-/*!
- Changes number of digit after comma
- \param prec - new digit number
-*/
-void QtxDblSpinBox::setPrecision( const int prec )
-{
- int newPrec = QMAX( prec, 0 );
- int oldPrec = QMAX( myPrecision, 0 );
- myPrecision = prec;
- if ( newPrec != oldPrec )
- updateDisplay();
-}
-
-/*!
- \return true if spin box is cleared
-*/
-bool QtxDblSpinBox::isCleared() const
-{
- return myCleared;
-}
-
-/*!
- Changes cleared status of spin box
- \param on - new status
-*/
-void QtxDblSpinBox::setCleared( const bool on )
-{
- if ( myCleared == on )
- return;
-
- myCleared = on;
- updateDisplay();
-}
-
-/*!
- Selects all content of spin box editor
-*/
-void QtxDblSpinBox::selectAll()
-{
-#if QT_VER >= 3
- QSpinBox::selectAll();
-#else
- editor()->selectAll();
-#endif
-}
-
-/*!
- Custom event filter, updates text of spin box editor
-*/
-bool QtxDblSpinBox::eventFilter( QObject* o, QEvent* e )
-{
- if ( !myCleared || o != editor() || !editor()->text().stripWhiteSpace().isEmpty() )
- {
- bool state = QSpinBox::eventFilter( o, e );
- if ( e->type() == QEvent::FocusOut && o == editor() )
- updateDisplay();
- return state;
- }
-
- if ( e->type() == QEvent::FocusOut || e->type() == QEvent::Leave || e->type() == QEvent::Hide )
- return false;
-
- if ( e->type() == QEvent::KeyPress &&
- ( ((QKeyEvent*)e)->key() == Key_Tab || ((QKeyEvent*)e)->key() == Key_BackTab ) )
- {
- QApplication::sendEvent( this, e );
- return true;
- }
-
- return QSpinBox::eventFilter( o, e );
-}
-
-/*!
- Updates text of editor
-*/
-void QtxDblSpinBox::updateDisplay()
-{
- if ( myBlocked )
- return;
-
- bool upd = editor()->isUpdatesEnabled();
- editor()->setUpdatesEnabled( false );
-
- bool isBlock = myBlocked;
- myBlocked = true;
-
- QString txt = currentValueText();
-
- if ( myValue >= myMax )
- QSpinBox::setValue( QSpinBox::maxValue() );
- else if ( myValue <= myMin )
- QSpinBox::setValue( QSpinBox::minValue() );
- else
- QSpinBox::setValue( ( QSpinBox::minValue() + QSpinBox::maxValue() ) / 2 );
-
- QSpinBox::updateDisplay();
-
- editor()->setUpdatesEnabled( upd );
-
- editor()->setText( myCleared ? QString::null : txt );
- if ( !myCleared && editor()->hasFocus() )
- {
- if ( editor()->text() == specialValueText() )
- editor()->selectAll();
- else
- editor()->setSelection( prefix().length(), editor()->text().length() - prefix().length() - suffix().length() );
- }
- else
- editor()->setCursorPosition( 0 );
-
- myBlocked = isBlock;
-}
-
-/*!
- Sets double value by text in editor
-*/
-void QtxDblSpinBox::interpretText()
-{
- myCleared = false;
-
- bool ok = true;
- bool done = false;
- double newVal = 0;
- if ( !specialValueText().isEmpty() )
- {
- QString s = QString( text() ).stripWhiteSpace();
- QString t = QString( specialValueText() ).stripWhiteSpace();
- if ( s == t )
- {
- newVal = minValue();
- done = true;
- }
- }
- if ( !done )
- newVal = mapTextToDoubleValue( &ok );
- if ( ok )
- setValue( newVal );
- updateDisplay();
-}
-
-/*!
- Emits signal "valueChanged"
-*/
-void QtxDblSpinBox::valueChange()
-{
- updateDisplay();
- emit valueChanged( myValue );
- emit valueChanged( currentValueText() );
-}
-
-/*!
- Attune parameters on range changing
-*/
-void QtxDblSpinBox::rangeChange()
-{
- double min = QMIN( myMin, myMax );
- double max = QMAX( myMin, myMax );
- myMin = min;
- myMax = max;
- QDoubleValidator* v = ::qt_cast<QDoubleValidator*>( validator() );
- if ( v )
- v->setRange( myMin, myMax );
-
- if ( myMin == myMax )
- QSpinBox::setRange( 0, 0 );
- else
- QSpinBox::setRange( 0, 2 );
-
- setValue( myValue );
- updateDisplay();
-}
-
-/*!
- \return text of editor
-*/
-QString QtxDblSpinBox::currentValueText()
-{
- QString s;
- if ( (myValue == minValue()) && !specialValueText().isEmpty() )
- s = specialValueText();
- else
- {
- s = prefix();
- s.append( mapValueToText( myValue ) );
- s.append( suffix() );
- }
- return s;
-}
-
-/*!
- Converts number to string
- \param v - number to be converted
-*/
-QString QtxDblSpinBox::mapValueToText( double v )
-{
- QString s;
- s.setNum( v, myPrecision >= 0 ? 'f' : 'g', myPrecision == 0 ? 6 : QABS( myPrecision ) );
- return removeTrailingZeroes( s );
-}
-
-/*!
- Converts value to string
-*/
-QString QtxDblSpinBox::mapValueToText( int )
-{
- QString s;
- s.setNum( myValue, myPrecision >= 0 ? 'f' : 'g', myPrecision == 0 ? 6 : QABS( myPrecision ) );
- return removeTrailingZeroes( s );
-}
-
-/*!
- Converts current text of editor to double
-*/
-double QtxDblSpinBox::mapTextToDoubleValue( bool* ok )
-{
- QString s = text();
- double newVal = s.toDouble( ok );
- if ( !(*ok) && !( !prefix() && !suffix() ) )
- {
- s = cleanText();
- newVal = s.toDouble( ok );
- }
- return newVal;
-}
-
-/*!
- \return value corrected in accordance with borders
- \param val - value to be corrected
-*/
-double QtxDblSpinBox::bound( double val )
-{
- double newVal = val;
- if ( newVal > myMax )
- newVal = myMax;
- if ( newVal < myMin )
- newVal = myMin;
- return newVal;
-}
-
-/*!
- Custom handler for leave event
-*/
-void QtxDblSpinBox::leaveEvent( QEvent* e )
-{
- if ( !myCleared )
- QSpinBox::leaveEvent( e );
-}
-
-/*!
- Custom handler for wheel event
-*/
-void QtxDblSpinBox::wheelEvent( QWheelEvent* e )
-{
- if ( !isEnabled() )
- return;
-
- QSpinBox::wheelEvent( e );
- updateDisplay();
-}
-
-/*!
- SLOT: called if text is changed
-*/
-void QtxDblSpinBox::onTextChanged( const QString& str )
-{
- if ( !myBlocked )
- myCleared = false;
-}
-
-/*!
- \return string without excess zeros in start and in end
-*/
-QString QtxDblSpinBox::removeTrailingZeroes( const QString& src ) const
-{
- QString delim( "." );
-
- int idx = src.findRev( delim );
- if ( idx == -1 )
- return src;
-
- QString iPart = src.left( idx );
- QString fPart = src.mid( idx + 1 );
-
- while ( !fPart.isEmpty() && fPart.at( fPart.length() - 1 ) == '0' )
- fPart.remove( fPart.length() - 1, 1 );
-
- QString res = iPart;
- if ( !fPart.isEmpty() )
- res += delim + fPart;
-
- return res;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxDblSpinBox.h
-// Author: Sergey TELKOV
-
-#ifndef QTXDBLSPINBOX_H
-#define QTXDBLSPINBOX_H
-
-#include "Qtx.h"
-
-#include <qspinbox.h>
-
-/*!
- \class QtxDblSpinBox
- Spin box for real numbers.
-*/
-class QTX_EXPORT QtxDblSpinBox : public QSpinBox
-{
- Q_OBJECT
-
- class Validator;
-
-public:
- typedef enum QSpinBox::ButtonSymbols ButtonSymbols;
-
-public:
- QtxDblSpinBox( QWidget* = 0, const char* = 0 );
- QtxDblSpinBox( double, double, double = 1, QWidget* = 0, const char* = 0 );
- virtual ~QtxDblSpinBox();
-
- double minValue() const;
- double maxValue() const;
- void setMinValue( int );
- void setMaxValue( int );
- void setMinValue( double );
- void setMaxValue( double );
- void setRange( int, int );
- virtual void setRange( double, double );
-
- double lineStep() const;
- void setLineStep( int );
- virtual void setLineStep( double );
-
- double value() const;
-
- int precision() const;
- virtual void setPrecision( const int );
-
- bool isCleared() const;
- virtual void setCleared( const bool );
-
- virtual bool eventFilter( QObject*, QEvent* );
-
-signals:
- void valueChanged( double );
- void valueChanged( const QString& );
-
-public slots:
- virtual void stepUp();
- virtual void stepDown();
- virtual void selectAll();
- virtual void setValue( int );
- virtual void setValue( double );
-
-protected slots:
- virtual void onTextChanged( const QString& );
-
-protected:
- virtual void updateDisplay();
- virtual void interpretText();
-
- virtual void valueChange();
- virtual void rangeChange();
-
- QString currentValueText();
- virtual QString mapValueToText( int );
- virtual QString mapValueToText( double );
- virtual double mapTextToDoubleValue( bool* );
-
- virtual void leaveEvent( QEvent* );
- virtual void wheelEvent( QWheelEvent* );
-
- double bound( double );
-
- QString removeTrailingZeroes( const QString& ) const;
-
-private:
- double myMin;
- double myMax;
- double myStep;
- double myValue;
- bool myCleared;
- bool myBlocked;
- int myPrecision;
-};
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxDblValidator.cxx
-// Author: Alexandre SOLOVYOV
-
-#include "QtxDblValidator.h"
-
-/*!
- Constructor
- \param bot - minimal possible value
- \param top - maximal possible value
- \param dec - number of digits
- \param o - parent object
- \param name - name of validator
-*/
-QtxDblValidator::QtxDblValidator( const double bot, const double top, const int dec,
- QObject* o, const char* name )
-: QDoubleValidator( bot, top, dec, o, name )
-{
-}
-
-/*!
- Destructor
-*/
-QtxDblValidator::~QtxDblValidator()
-{
-}
-
-/*!
- Corrects string: if it represent double value less then bottom, it becomes equal to bottom,
- if it is more then top, it becomes equal to top, if it isn't number is becomes '0'
-*/
-void QtxDblValidator::fixup( QString& str ) const
-{
- bool ok = false;
- double d = str.toDouble( &ok );
- if( ok )
- {
- if( d<bottom() )
- str = QString::number( bottom() );
- else if( d>top() )
- str = QString::number( top() );
- }
- else
- str = "0";
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxDblValidator.h
-// Author: Alexandre SOLOVYOV
-
-#ifndef QTX_DOUBLE_VALIDATOR
-#define QTX_DOUBLE_VALIDATOR
-
-#include "Qtx.h"
-
-#include <qvalidator.h>
-
-class QTX_EXPORT QtxDblValidator : public QDoubleValidator
-{
- Q_OBJECT
-
-public:
- QtxDblValidator( const double, const double, const int,
- QObject*, const char* = 0 );
- ~QtxDblValidator();
-
- virtual void fixup( QString& ) const;
-};
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxDialog.cxx
-// Author: Sergey TELKOV
-
-#include "QtxDialog.h"
-
-#include "QtxGroupBox.h"
-
-#include <qlabel.h>
-#include <qframe.h>
-#include <qlayout.h>
-#include <qpushbutton.h>
-#include <qapplication.h>
-
-/*!
- Class: QtxDialog::Area
- Level: Internal
-*/
-class QtxDialog::Area : public QFrame
-{
-public:
- Area( Orientation, QtxDialog*, QWidget* = 0 );
- virtual ~Area();
-
- bool isBorderEnabled() const;
- void setBorderEnabled( const bool );
-
- void setBorderWidget( QLabel* );
-
- void insertButton( QButton* );
- void removeButton( QButton* );
- bool contains( QButton* ) const;
-
- int policy() const;
- void setPolicy( const int );
-
- void layoutButtons();
-
- const QPtrList<QButton>& buttons() const;
-
-private:
- void updateBorder();
-
-private:
- QtxDialog* myDlg;
- QLabel* myLine;
- bool myBorder;
- int myPolicy;
- QPtrList<QButton> myButtons;
- Orientation myOrientation;
-};
-
-/*!
- Contructor
-*/
-QtxDialog::Area::Area( Orientation o, QtxDialog* dlg, QWidget* parent )
-: QFrame( parent ),
-myDlg( dlg ),
-myLine( 0 ),
-myBorder( false ),
-myPolicy( Position ),
-myOrientation( o )
-{
- if ( myOrientation == Qt::Horizontal )
- setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ) );
- else
- setSizePolicy( QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred ) );
-
- hide();
-}
-
-/*!
- Destructor
-*/
-QtxDialog::Area::~Area()
-{
-}
-
-/*!
- Inserts button to area
- \param b - button
-*/
-void QtxDialog::Area::insertButton( QButton* b )
-{
- if ( !b || myButtons.findRef( b ) != -1 )
- return;
-
- QWidget* parent = b->parentWidget();
- if ( parent != this )
- b->reparent( this, 0, QPoint( 0, 0 ), b->isVisibleTo( parent ) );
-
- myButtons.append( b );
-
- if ( myDlg )
- myDlg->adjustButtons();
- layoutButtons();
-
- show();
-
- updateBorder();
-}
-
-/*!
- Removes button from area
- \param b - button
-*/
-void QtxDialog::Area::removeButton( QButton* b )
-{
- if ( !b )
- return;
-
- myButtons.removeRef( b );
-
- if ( myButtons.isEmpty() )
- hide();
-
- updateBorder();
-
- if ( myDlg )
- myDlg->adjustButtons();
-
- layoutButtons();
-}
-
-/*!
- \return true if area contains button
- \param b - button
-*/
-bool QtxDialog::Area::contains( QButton* b ) const
-{
- return myButtons.containsRef( b );
-}
-
-/*!
- \return policy of button layouting.
-*/
-int QtxDialog::Area::policy() const
-{
- return myPolicy;
-}
-
-/*!
- Changes policy of button layouting.
- \param p - new policy
-*/
-void QtxDialog::Area::setPolicy( const int p )
-{
- if ( myPolicy == p )
- return;
-
- myPolicy = p;
- layoutButtons();
-}
-
-/*!
- \return true if border enabled
-*/
-bool QtxDialog::Area::isBorderEnabled() const
-{
- return myLine && myBorder;
-}
-
-/*!
- Enables/disable separator between main frame and button frame
- \param on - new state
-*/
-void QtxDialog::Area::setBorderEnabled( const bool on )
-{
- if ( !myLine || myBorder == on )
- return;
-
- myBorder = on;
- updateBorder();
-}
-
-/*!
- Sets label as separator between main frame and button frame
- \param line - new separator
-*/
-void QtxDialog::Area::setBorderWidget( QLabel* line )
-{
- if ( myLine == line )
- return;
-
- delete myLine;
- myLine = line;
- updateBorder();
-}
-
-/*!
- \return const reference to list of buttons
-*/
-const QPtrList<QButton>& QtxDialog::Area::buttons() const
-{
- return myButtons;
-}
-
-/*!
- Updates visibility of border
-*/
-void QtxDialog::Area::updateBorder()
-{
- if ( !myLine )
- return;
-
- bool isVis = isVisibleTo( parentWidget() );
-#if QT_VER >= 3
- if ( isVis )
-#else
- if ( isVis && myBorder )
-#endif
- myLine->show();
- else
- myLine->hide();
-
- myLine->setLineWidth( myBorder ? 1 : 0 );
-}
-
-/*!
- Installs buttons into layout
-*/
-void QtxDialog::Area::layoutButtons()
-{
- int aPolicy = policy();
-
- QMap<QButton*, int> buttonId;
- for ( QPtrListIterator<QButton> it1( myButtons ); it1.current(); ++it1 )
- buttonId.insert( it1.current(), 0 );
-
- QPtrList<QButton> src;
- for ( ButtonMap::Iterator mit = myDlg->myButton.begin();
- mit != myDlg->myButton.end(); ++mit )
- {
- if ( buttonId.contains( mit.data() ) )
- {
- buttonId[mit.data()] = mit.key();
- if ( mit.key() >= 0 )
- src.append( mit.data() );
- }
- }
-
- for ( QPtrListIterator<QButton> it2( myButtons ); it2.current(); ++it2 )
- if ( buttonId[it2.current()] < 0 )
- src.append( it2.current() );
-
- QPtrList<QButton> left, right, center, other;
- for ( QPtrListIterator<QButton> it( src ); it.current(); ++it )
- {
- if ( !it.current()->isVisibleTo( this ) )
- continue;
-
- int aPosition = myDlg->buttonPosition( it.current() );
- if ( aPosition == -1 )
- continue;
-
- if ( aPolicy != QtxDialog::Position )
- other.append( it.current() );
- else if ( aPosition == QtxDialog::Left )
- left.append( it.current() );
- else if ( aPosition == QtxDialog::Right )
- right.append( it.current() );
- else if ( aPosition == QtxDialog::Center )
- center.append( it.current() );
- }
-
- delete layout();
-
- QBoxLayout* buttonLayout = 0;
- if ( myOrientation == Qt::Vertical )
- buttonLayout = new QVBoxLayout( this, 0, 5 );
- else
- buttonLayout = new QHBoxLayout( this, 0, 5 );
-
- if ( !buttonLayout )
- return;
-
- if ( aPolicy == QtxDialog::Position )
- {
- for ( QPtrListIterator<QButton> lit( left ); lit.current(); ++lit )
- buttonLayout->addWidget( lit.current() );
- buttonLayout->addStretch( 1 );
- for ( QPtrListIterator<QButton> cit( center ); cit.current(); ++cit )
- buttonLayout->addWidget( cit.current() );
- buttonLayout->addStretch( 1 );
- for ( QPtrListIterator<QButton> rit( right ); rit.current(); ++rit )
- buttonLayout->addWidget( rit.current() );
- }
- else
- {
- for ( QPtrListIterator<QButton> oit( other ); oit.current(); ++oit )
- {
- buttonLayout->addWidget( oit.current() );
- if ( aPolicy == QtxDialog::Uniform && !oit.atLast() )
- buttonLayout->addStretch( 1 );
- }
- }
-
- QWidgetList wids;
- if ( layout() )
- {
- for ( QLayoutIterator it = layout()->iterator(); it.current(); ++it )
- {
- if ( !it.current()->widget() )
- continue;
-
- if ( QApplication::reverseLayout() )
- wids.prepend( it.current()->widget() );
- else
- wids.append( it.current()->widget() );
- }
- }
- Qtx::setTabOrder( wids );
-}
-
-
-/*!
- \class QtxDialog::Border
-
- Special label used as separator between main frame and button frame
-*/
-class QtxDialog::Border : public QLabel
-{
-public:
- Border( QWidget* = 0 );
- virtual ~Border();
-
- virtual void setLineWidth( int );
-
- virtual QSize sizeHint() const;
- virtual QSize minimumSizeHint() const;
-};
-
-/*!
- Constructor
-*/
-QtxDialog::Border::Border( QWidget* parent )
-: QLabel( parent )
-{
- setAlignment( Qt::AlignCenter );
-}
-
-/*!
- Destructor
-*/
-QtxDialog::Border::~Border()
-{
-}
-
-/*!
- Set line width of separator
- \param lw - new line width
-*/
-void QtxDialog::Border::setLineWidth( int lw )
-{
- bool isOn = lineWidth() > 0;
-
- QLabel::setLineWidth( lw );
-
- if ( isOn != ( lineWidth() > 0 ) )
- updateGeometry();
-}
-
-/*!
- \return the recommended size for the widget
-*/
-QSize QtxDialog::Border::sizeHint() const
-{
- QSize sz( 5, 5 );
-
-#if QT_VER >= 3
- if ( lineWidth() > 0 )
- {
- if ( frameShape() == VLine )
- sz += QSize( 5 + lineWidth(), 0 );
- else if ( frameShape() == HLine )
- sz += QSize( 0, 5 + lineWidth() );
- }
-#endif
-
- return sz;
-}
-
-/*!
- \return the recommended minimum size for the widget
-*/
-QSize QtxDialog::Border::minimumSizeHint() const
-{
- return sizeHint();
-}
-
-/*!
- Constructor
- Construct a dialog with specified parent and name.
- \param modal define modal status of dialog (default non modal dialog created).
- \param allowResize - if it is true then dialog can be resize by user (default non resizable dialog created).
- \param Button flags specified control buttons for dialog (default buttons is OK, Cancel and Help).
- \param Widget flags used as in any widget.
-*/
-QtxDialog::QtxDialog( QWidget* parent, const char* name,
- bool modal, bool allowResize, const int f, WFlags wf )
-: QDialog( parent, name, modal,
- wf | WStyle_Customize | WStyle_Title | WStyle_SysMenu |
-#ifdef WIN32
- ( allowResize ? WStyle_NormalBorder : WStyle_NoBorderEx ) |
-#else
- WStyle_NormalBorder |
-#endif
- ( allowResize ? WStyle_Maximize : 0 ) ),
-mySender( 0 ),
-myAlignment( 0 ),
-myInited( false ),
-myDialogFlags( Accept | SetFocus )
-{
- QVBoxLayout* base = new QVBoxLayout( this, 5, 0 );
- QtxGroupBox* main = new QtxGroupBox( 1, Qt::Horizontal, "", this );
- main->setFrameStyle( QFrame::NoFrame );
- main->setInsideMargin( 0 );
- main->setInsideSpacing( 0 );
- base->addWidget( main );
-
- Area* topArea = new Area( Qt::Horizontal, this, main );
- QLabel* topLine = new Border( main );
- QtxGroupBox* midGroup = new QtxGroupBox( 1, Qt::Vertical, "", main );
- QLabel* botLine = new Border( main );
- Area* botArea = new Area( Qt::Horizontal, this, main );
-
- midGroup->setFrameStyle( QFrame::NoFrame );
- midGroup->setInsideMargin( 0 );
- midGroup->setInsideSpacing( 0 );
-
- Area* leftArea = new Area( Qt::Vertical, this, midGroup );
- QLabel* leftLine = new Border( midGroup );
- myMainFrame = new QFrame( midGroup );
- QLabel* rightLine = new Border( midGroup );
- Area* rightArea = new Area( Qt::Vertical, this, midGroup );
-
- myMainFrame->setSizePolicy( QSizePolicy( QSizePolicy::Expanding,
- QSizePolicy::Expanding ) );
-
- topLine->setFrameStyle( QFrame::Sunken | QFrame::HLine );
- botLine->setFrameStyle( QFrame::Sunken | QFrame::HLine );
- leftLine->setFrameStyle( QFrame::Sunken | QFrame::VLine );
- rightLine->setFrameStyle( QFrame::Sunken | QFrame::VLine );
- topArea->setBorderWidget( topLine );
- botArea->setBorderWidget( botLine );
- leftArea->setBorderWidget( leftLine );
- rightArea->setBorderWidget( rightLine );
-
- myArea.insert( TopArea, topArea );
- myArea.insert( BottomArea, botArea );
- myArea.insert( LeftArea, leftArea );
- myArea.insert( RightArea, rightArea );
-
- for ( AreaMap::Iterator itr = myArea.begin(); itr != myArea.end(); ++ itr )
- itr.data()->setBorderEnabled( false );
-
- myButton.insert( OK, new QPushButton( tr( "&OK" ), this ) );
- myButton.insert( Cancel, new QPushButton( tr( "&Cancel" ), this ) );
- myButton.insert( Close, new QPushButton( tr( "C&lose" ), this ) );
- myButton.insert( Help, new QPushButton( tr( "&Help" ), this ) );
- myButton.insert( Apply, new QPushButton( tr( "&Apply" ), this ) );
- myButton.insert( Yes, new QPushButton( tr( "&Yes" ), this ) );
- myButton.insert( No, new QPushButton( tr( "&No" ), this ) );
-
- for ( ButtonMap::Iterator it = myButton.begin(); it != myButton.end(); ++it )
- {
- ((QPushButton*)it.data())->setAutoDefault( false );
-#if QT_VER >= 3
- connect( it.data(), SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
-#endif
- }
-
- setButtonPosition( Left, OK | Cancel | Apply );
- setButtonPosition( Center, Yes | No | Close );
- setButtonPosition( Right, Help );
- setButtonPlace( BottomArea, All );
-
- connect( myButton[Apply], SIGNAL( clicked() ), this, SIGNAL( dlgApply() ) );
- connect( myButton[Help], SIGNAL( clicked() ), this, SIGNAL( dlgHelp() ) );
-
- connect( myButton[OK], SIGNAL( clicked() ), this, SLOT( onAccept() ) );
- connect( myButton[Cancel], SIGNAL( clicked() ), this, SLOT( onReject() ) );
- connect( myButton[Yes], SIGNAL( clicked() ), this, SLOT( onAccept() ) );
- connect( myButton[No], SIGNAL( clicked() ), this, SLOT( onReject() ) );
- connect( myButton[Close], SIGNAL( clicked() ), this, SLOT( onReject() ) );
-
- QPixmap icon;
- if ( qApp && qApp->mainWidget() && qApp->mainWidget()->icon() )
- setIcon( *qApp->mainWidget()->icon() );
-
- myButtonFlags = f;
-
-#ifndef WIN32
- if ( !allowResize )
- setMaximumSize( minimumSize() );
-#endif
-
- update();
-}
-
-/*!
- Name: ~QtxDialog [public]
- Desc: Destructor
-*/
-
-QtxDialog::~QtxDialog()
-{
-}
-
-/*!
- Name: setButtonFlags [public]
- Desc: Allow to set specified control button(s) into dialog.
-*/
-
-void QtxDialog::setButtonFlags( const int f )
-{
- int old = myButtonFlags;
- myButtonFlags = myButtonFlags | f;
- if ( old != myButtonFlags )
- update();
-}
-
-/*!
- Name: clearButtonFlags [public]
- Desc: Allow to unset specified control button(s) from dialog.
-*/
-
-void QtxDialog::clearButtonFlags( const int f )
-{
- int old = myButtonFlags;
- myButtonFlags = myButtonFlags & ~f;
- if ( old != myButtonFlags )
- update();
-}
-
-/*!
- Name: testButtonFlags [public]
- Desc: Return true if specified control button is used in dialog.
-*/
-
-bool QtxDialog::testButtonFlags( const int f ) const
-{
- return ( myButtonFlags & f ) == f;
-}
-
-/*!
- Name: setDialogFlags [public]
- Desc: Allow to set the dialog flags.
-
- Following flags can be used:
- Accept - Allow to control dialog accepting. See also acceptData().
- Reject - Allow to control dialog rejecting. See also rejectData().
- AlignOnce - Allow to align dialog only when it first time shown.
- SetFocus - Allow to set focus on dialog when it shown. User can use
- setFocusProxy() and specify own initial focus widget.
-*/
-
-void QtxDialog::setDialogFlags( const int f )
-{
- myDialogFlags = myDialogFlags | f;
-}
-
-/*!
- Name: clearDialogFlags [public]
- Desc: Allow to clear the dialog flags. See also setDialogFlags().
-*/
-
-void QtxDialog::clearDialogFlags( const int f )
-{
- myDialogFlags = myDialogFlags & ~f;
-}
-
-/*!
- Name: testDialogFlags [public]
- Desc: Returns true if specified dialog flag is setted (see setDialogFlags()).
-*/
-
-bool QtxDialog::testDialogFlags( const int f ) const
-{
- return ( myDialogFlags & f ) == f;
-}
-
-/*!
- Name: mainFrame [public]
- Desc: Returns main frame of dialog. Main frame should contains all
- elements of dialog except control buttons.
-*/
-
-QFrame* QtxDialog::mainFrame() const
-{
- return myMainFrame;
-}
-
-/*!
- Name: buttonPosition [public]
- Desc: Returns position of specified button.
-*/
-
-int QtxDialog::buttonPosition( const int id ) const
-{
- int pos = -1;
- if ( myPosition.contains( id ) )
- pos = myPosition[id];
- return pos;
-}
-
-/*!
- Name: setButtonPosition [public]
- Desc: Sets the position for specified button(s). Following positions
- may be used: Left, Right, Center, Top, Bottom.
-*/
-
-void QtxDialog::setButtonPosition( const int pos, const int id )
-{
- ButtonMap map = buttons( id );
-
- QMap<QObject*, int> changed;
- for ( ButtonMap::Iterator it = map.begin(); it != map.end(); ++it )
- {
- if ( myPosition[it.key()] == pos )
- continue;
-
- myPosition[it.key()] = pos;
- if ( button( it.key() ) )
- changed.insert( button( it.key() )->parent(), 0 );
- }
-
- for ( AreaMap::Iterator itr = myArea.begin(); itr != myArea.end(); ++itr )
- if ( changed.contains( itr.data() ) )
- itr.data()->layoutButtons();
-}
-
-/*!
- Name: setPlacePosition [public]
- Desc: Sets button position for all buttons in given place.
-*/
-
-void QtxDialog::setPlacePosition( const int pos, const int area )
-{
- if ( !myArea.contains( area ) )
- return;
-
- Area* anArea = myArea[area];
-
- bool changed = false;
- for ( ButtonMap::Iterator it = myButton.begin(); it != myButton.end(); ++it )
- {
- if ( !anArea->contains( it.data() ) )
- continue;
-
- changed = changed && myPosition[it.key()] != pos;
-
- myPosition[it.key()] = pos;
- }
-
- if ( changed )
- anArea->layoutButtons();
-}
-
-/*!
- Name: placePolicy [public]
- Desc: Returns policy of button layouting for specified place.
-
- Following place may be used:
- TopArea - Horizontal area in the top side of dialog.
- BottomArea - Horizontal area in the bottom side of dialog.
- LeftArea - Vertical area in the left side of dialog.
- RightArea - Vertical area in the right side of dialog.
-
- Following policy may be used:
- Position - Buttons placed according their position.
- Expand - Buttons fills all available space.
- Uniform - Buttons uniformly placed in area.
-*/
-
-int QtxDialog::placePolicy( const int area ) const
-{
- int res = -1;
- if ( myArea.contains( area ) )
- res = myArea[area]->policy();
- return res;
-}
-
-/*!
- Name: setPlacePolicy [public]
- Desc: Sets the policy of button layouting for specified place.
- See also placePolicy().
-*/
-
-void QtxDialog::setPlacePolicy( const int policy, const int area )
-{
- if ( area < 0 )
- for ( AreaMap::Iterator itr = myArea.begin(); itr != myArea.end(); ++itr )
- itr.data()->setPolicy( policy );
- else if ( myArea.contains( area ) )
- myArea[area]->setPolicy( policy );
-}
-
-/*!
- Name: setButtonPlace [public]
- Desc: Move given button(s) into specified place.
-*/
-
-void QtxDialog::setButtonPlace( const int area, const int ids )
-{
- if ( !myArea.contains( area ) )
- return;
-
- Area* anArea = myArea[area];
-
- ButtonMap map = buttons( ids );
-
- QMap<Area*, int> areaMap;
- for ( AreaMap::ConstIterator aIt = myArea.begin(); aIt != myArea.end(); ++aIt )
- areaMap.insert( aIt.data(), 0 );
-
- for ( ButtonMap::Iterator it = map.begin(); it != map.end(); ++it )
- {
- Area* old = (Area*)it.data()->parent();
- if ( old == anArea )
- continue;
-
- if ( areaMap.contains( old ) )
- old->removeButton( it.data() );
- anArea->insertButton( it.data() );
- }
-}
-
-/*!
- Name: isBorderEnabled [public]
- Desc: Returns true if border is shown for specified button area.
-*/
-
-bool QtxDialog::isBorderEnabled( const int area ) const
-{
- bool res = false;
- if ( myArea.contains( area ) )
- res = myArea[area]->isBorderEnabled();
- return res;
-}
-
-/*!
- Name: setBorderEnabled [public]
- Desc: Show/hide border for specified button area. Border are
- line which separate main frame and control buttons.
-*/
-
-void QtxDialog::setBorderEnabled( const bool on, const int area )
-{
- if ( !myArea.contains( area ) )
- return;
-
- if ( myArea[area]->isBorderEnabled() == on )
- return;
-
- myArea[area]->setBorderEnabled( on );
-
- if ( isVisible() )
- {
- QApplication::sendPostedEvents();
- adjustSize();
- }
-}
-
-/*!
- Name: isButtonEnabled [public]
- Desc: Returns true if all specified button(s) is enabled.
-*/
-
-bool QtxDialog::isButtonEnabled( const int f ) const
-{
- ButtonMap map = buttons( f );
- bool result = !map.isEmpty();
- for ( ButtonMap::Iterator it = map.begin(); it != map.end(); ++it )
- result = result && it.data()->isEnabled();
- return result;
-}
-
-/*!
- Name: setButtonEnabled [public]
- Desc: Enable/disable specified button(s).
-*/
-
-void QtxDialog::setButtonEnabled( const bool on, const int ids )
-{
- ButtonMap map = buttons( ids );
- for ( ButtonMap::Iterator it = map.begin(); it != map.end(); ++it )
- it.data()->setEnabled( on );
-}
-
-/*!
- Name: hasButtonFocus [public]
- Desc: Retruns true if specified button has keyboard focus.
-*/
-
-bool QtxDialog::hasButtonFocus( const int id ) const
-{
- bool res = false;
- QButton* pb = button( id );
- if ( pb )
- res = pb->hasFocus();
- return res;
-}
-
-/*!
- Name: setButtonFocus [public]
- Desc: Sets the keyboard focus on specified button.
-*/
-
-void QtxDialog::setButtonFocus( const int id )
-{
- QButton* pb = button( id );
- if ( pb )
- pb->setFocus();
-}
-
-/*!
- Name: buttonText [public]
- Desc: Return text of specified button.
-*/
-
-QString QtxDialog::buttonText( const int id )
-{
- QString retval;
- QButton* but = button( id );
- if ( but )
- retval = but->text();
- return retval;
-}
-
-/*!
- Name: setButtonText [public]
- Desc: Sets text to specified button.
-*/
-
-void QtxDialog::setButtonText( const int id, const QString& text )
-{
- QButton* but = button( id );
- if ( but && but->text() != text )
- {
- but->setText( text );
- adjustButtons();
- }
-}
-
-/*!
- Name: setAlignment [public]
- Desc: Sets alignment policy. Returns the previous alignment.
- Use the function before the first show of the dialog.
- If dialog flag AlignOnce is setted then align will performed
- only one time otherwise dialog will be aligned every time
- when it shown. Dialog will be aligned relative to it parent.
-
- Following align flags may be used:
- Qtx::AlignAuto - Align to center of desktop (default).
- Qtx::AlignLeft - Align left side of dialog to left side of parent.
- Qtx::AlignRight - Align right side of dialog to right side of parent.
- Qtx::AlignTop - Align top side of dialog to top side of parent.
- Qtx::AlignBottom - Align bottom side of dialog to bottom side of parent.
- Qtx::AlignHCenter - Align dialog to center of parent in horizontal dimension.
- Qtx::AlignVCenter - Align dialog to center of parent in vertical dimension.
- Qtx::AlignCenter - Align dialog to center of parent in both dimensions.
- Qtx::AlignOutLeft - Align right side of dialog to left side of parent.
- Qtx::AlignOutRight - Align left side of dialog to right side of parent.
- Qtx::AlignOutTop - Align bottom side of dialog to top side of parent.
- Qtx::AlignOutBottom - Align top side of dialog to bottom side of parent.
-*/
-
-uint QtxDialog::setAlignment( uint align )
-{
- uint oldAlign = myAlignment;
- myAlignment = align;
- return oldAlign;
-}
-
-/*!
- Name: update [virtual public slot]
- Desc: Updates dialog, show selected buttons and hide unselected.
-*/
-
-void QtxDialog::update()
-{
- for ( ButtonMap::Iterator it = myButton.begin(); it != myButton.end(); ++it )
- if ( it.key() >= 0 )
- testButtonFlags( it.key() ) ? it.data()->show() : it.data()->hide();
-
- for ( AreaMap::Iterator itr = myArea.begin(); itr != myArea.end(); ++itr )
- itr.data()->layoutButtons();
-
- adjustButtons();
-
- QDialog::update();
-}
-
-/*!
- Name: show [virtual public]
- Desc: Show dialog, set keyboard focus on dialog.
-*/
-
-void QtxDialog::show()
-{
- QDialog::show();
-
- if ( testDialogFlags( SetFocus ) )
- setFocus();
-
- myInited = true;
-}
-
-/*!
- Name: hide [virtual public]
- Desc: Hides dialog, processed all posted events.
-*/
-
-void QtxDialog::hide()
-{
- QDialog::hide();
- qApp->processEvents();
-}
-
-/*!
- Name: userButton [public]
- Desc: Return user dialog button using specified identificator.
-*/
-
-QButton* QtxDialog::userButton( const int id ) const
-{
- QButton* b = 0;
- if ( id < -1 && myButton.contains( id ) )
- b = myButton[id];
- return b;
-}
-
-/*!
- Name: userButtonIds [public]
- Desc: Return list of user dialog button identificators.
-*/
-
-QValueList<int> QtxDialog::userButtonIds() const
-{
- QValueList<int> retlist;
- for ( ButtonMap::ConstIterator it = myButton.begin(); it != myButton.end(); ++it )
- if ( it.key() < 0 )
- retlist.append( it.key() );
- return retlist;
-}
-
-/*!
- Name: insertButton [public]
- Desc: Add new user dialog button. Function return identificator of
- newly added button in successfull case otherwise -1 will be returned.
-*/
-
-int QtxDialog::insertButton( const QString& text, const int area )
-{
- if ( !myArea.contains( area ) )
- return -1;
-
- int id = -2;
- while ( myButton.contains( id ) )
- id--;
-
- Area* anArea = myArea[area];
- QButton* b = createButton( this );
- if ( b )
- {
- b->setText( text );
- myButton.insert( id, b );
- myPosition.insert( id, Left );
-
- connect( b, SIGNAL( clicked() ), this, SLOT( onButton() ) );
-#if QT_VER >= 3
- connect( b, SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
-#endif
-
- anArea->insertButton( b );
- update();
- }
- else
- id = -1;
-
- return id;
-}
-
-/*!
- Name: removeButton [public]
- Desc: Remove user dialog button with specified identificator. If
- identificator equal -1 then method will remove all user dialog buttons.
-*/
-
-void QtxDialog::removeButton( const int id )
-{
- if ( id >= 0 )
- return;
-
- ButtonMap map;
- if ( id == -1 )
- {
- for ( ButtonMap::Iterator it = myButton.begin(); it != myButton.end(); ++it )
- {
- if ( it.key() < 0 )
- map.insert( it.key(), it.data() );
- }
- }
- else if ( myButton.contains( id ) )
- map.insert( id, myButton[id] );
-
- for ( ButtonMap::Iterator itr = map.begin(); itr != map.end(); ++itr )
- {
- for ( AreaMap::Iterator it = myArea.begin(); it != myArea.end(); ++it )
- it.data()->removeButton( itr.data() );
-
- myButton.remove( itr.key() );
- myPosition.remove( itr.key() );
-
- delete itr.data();
- }
- update();
-}
-
-/*!
- Name: setUnits [static public]
- Desc: Sets specified measure units in given label. Measure units close
- in braces. If measure units not exist then they will be added.
- For example:
- 1. Label contains text 'Radius'.
- setUnits( aLabel, "mm" ) => aLabel contains 'Radius (mm)'
- setUnits( aLabel, "cm" ) => aLabel contains 'Radius (cm)'
- 2. Label "aLabel" contains text 'Radius ():'.
- setUnits( aLabel, "mm" ) => aLabel contains 'Radius (mm):'
- setUnits( aLabel, "cm" ) => aLabel contains 'Radius (cm):'
-*/
-
-void QtxDialog::setUnits( QLabel* aLabel, const QString& aUnits )
-{
- QString label = aLabel->text();
- int begin;
- int end = label.findRev( ')' );
-
- QString startLabel = label;
- QString finalLabel;
-
- if ( end != -1 )
- {
- begin = label.left( end ).findRev( '(' );
- if ( begin != -1 )
- {
- startLabel = label.mid( 0, begin );
- finalLabel = label.mid( end + 1 );
- }
- }
- else
- {
- startLabel = startLabel.stripWhiteSpace();
- if ( startLabel.at( startLabel.length() - 1 ) == ':' )
- {
- finalLabel = startLabel.mid( startLabel.length() - 1 );
- startLabel = startLabel.mid( 0, startLabel.length() - 1 );
- }
- }
- if ( aUnits.length() )
- label = startLabel.stripWhiteSpace() +
- " (" + aUnits + ") " + finalLabel.stripWhiteSpace();
- else
- label = startLabel.stripWhiteSpace() +
- " " + finalLabel.stripWhiteSpace();
- aLabel->setText( label );
-}
-
-/*!
- Name: acceptData [virtual protected]
- Desc: If returns true dialog will be accepted and closed. This method
- called if dialog flag Accept is setted.
-*/
-
-bool QtxDialog::acceptData() const
-{
- return true;
-}
-
-/*!
- Name: rejectData [virtual protected]
- Desc: If returns true dialog will be rejected and closed. This method
- called if dialog flag Reject is setted.
-*/
-
-bool QtxDialog::rejectData() const
-{
- return true;
-}
-
-/*!
- Name: createButton [virtual protected]
- Desc: Create new user button. Invoked from method "insertButton".
-*/
-
-QButton* QtxDialog::createButton( QWidget* parent )
-{
- QPushButton* pb = new QPushButton( parent );
- pb->setAutoDefault( false );
- return pb;
-}
-
-/*!
- Name: button [protected]
- Desc: Return pointer on control button specified by identifier.
- If identifier is wrong then null pointer will returned.
-*/
-
-QButton* QtxDialog::button( const int f ) const
-{
- QButton* retval = 0;
- if ( myButton.contains( f ) )
- retval = myButton[f];
- return retval;
-}
-
-/*!
- Name: buttons [protected]
- Desc: Return map with control dialog buttons accordance to given button flags.
-*/
-
-QtxDialog::ButtonMap QtxDialog::buttons( const int f ) const
-{
- ButtonMap retmap;
- if ( f < -1 )
- {
- if ( myButton.contains( f ) )
- retmap.insert( f, myButton[f] );
- }
- else
- {
- for ( ButtonMap::ConstIterator it = myButton.begin(); it != myButton.end(); ++it )
- if ( f == -1 || ( it.key() >= 0 && f & it.key() ) )
- retmap.insert( it.key(), it.data() );
- }
-
- return retmap;
-}
-
-/*!
- Name: buttonId [protected]
- Desc: Return identifier of specified button.
-*/
-
-int QtxDialog::buttonId( const QButton* b ) const
-{
- int id = -1;
- for ( ButtonMap::ConstIterator it = myButton.begin(); it != myButton.end() && id == -1; ++it )
- if ( it.data() == b )
- id = it.key();
- return id;
-}
-
-/*!
- Name: buttonPosition
- Desc: Returns position of specified button. [protected]
-*/
-
-int QtxDialog::buttonPosition( QButton* b ) const
-{
- return buttonPosition( buttonId( b ) );
-}
-
-/*!
- Name: showEvent [virtual protected]
- Desc: Aligns this dialog according the parent widget and alignment
- policy before the show.
-*/
-
-void QtxDialog::showEvent( QShowEvent* e )
-{
- if ( !testDialogFlags( AlignOnce ) || !myInited )
- Qtx::alignWidget( this, parentWidget(), myAlignment );
- QDialog::showEvent( e );
-}
-
-/*!
- Name: hideEvent [virtual protected]
- Desc: Process all existing events when dialog is closed.
-*/
-
-void QtxDialog::hideEvent( QHideEvent* e )
-{
- qApp->processEvents();
- QDialog::hideEvent( e );
-}
-
-/*!
- Name: childEvent [virtual protected]
- Desc: Setting up layout when size grip is added.
-*/
-
-void QtxDialog::childEvent( QChildEvent* e )
-{
- QDialog::childEvent( e );
- if ( layout() && e->inserted() && e->child()->inherits( "QSizeGrip" ) )
- {
- layout()->setMargin( 12 );
-#if QT_VER >= 3
- connect( e->child(), SIGNAL( destroyed() ), this, SLOT( onSizeGripDestroyed() ) );
-#endif
- }
-}
-
-/*!
- Name: keyPressEvent [virtual protected]
- Desc: Calls reject() if key Escape is pressed.
- Calls accept() if key "Ctrl+Enter" is pressed.
- Process key "F1" and emit signal dlgHelp().
- Transfer key "Ctrl+(Shift+)Tab" press event to Tab Widget.
-*/
-
-void QtxDialog::keyPressEvent( QKeyEvent* e )
-{
- QDialog::keyPressEvent( e );
- if ( e->isAccepted() )
- return;
-
- if ( ( e->state() == 0 ) && ( e->key() == Key_Escape ) )
- reject();
-
- if ( ( e->state() == ControlButton ) && ( e->key() == Key_Return ) )
- {
- if ( testButtonFlags( OK ) || testButtonFlags( Yes ) )
- accept();
- else if ( testButtonFlags( Apply ) && isButtonEnabled( Apply ) )
- emit dlgApply();
- e->accept();
- }
-
- if ( e->key() == Key_F1 && testButtonFlags( Help ) && isButtonEnabled( Help ) )
- {
- e->accept();
- emit dlgHelp();
- }
-
- if ( ( e->key() == Key_Tab ) && ( e->state() & ControlButton ) )
- {
- QObject* tab = child( 0, "QTabWidget" );
- if ( tab )
- tab->event( e );
- }
-}
-
-/*!
- Name: closeEvent [virtual protected]
- Desc: Reject the dialog.
-*/
-
-void QtxDialog::closeEvent( QCloseEvent* )
-{
- reject();
-}
-
-/*!
- Name: accept [virtual protected slot]
- Desc: Invoke function acceptData() if it needed and if acceptData() return
- false does nothing. Otherwise hides the dialog and sets the result code
- to Accepted. Emit signal according to the pressed control button.
-*/
-
-void QtxDialog::accept()
-{
- if ( !mySender )
- {
- if ( testButtonFlags( OK ) )
- mySender = button( OK );
- else if ( testButtonFlags( Yes ) )
- mySender = button( Yes );
- else
- mySender = button( Close );
- }
-
- if ( !mySender || !mySender->isWidgetType() ||
- !((QWidget*)mySender)->isEnabled() )
- return;
-
- if ( testDialogFlags( Accept ) && !acceptData() )
- return;
-
- QDialog::accept();
-
- emitSignal();
-}
-
-/*!
- Name: reject [virtual protected slot]
- Desc: Invoke function rejectData() if it needed and if rejectData() return
- false does nothing. Otherwise hides the dialog and sets the result code
- to Rejected. Emit signal according to the pressed control button. (If
- dialog was closed by key Escape or by close event emit signal dlgCancel(),
- or dlgClose(), or dlgNo().
-*/
-
-void QtxDialog::reject()
-{
- if ( testDialogFlags( Reject ) && !rejectData() )
- return;
-
- if ( !mySender )
- {
- if ( testButtonFlags( Cancel ) )
- mySender = button( Cancel );
- else if ( testButtonFlags( No ) )
- mySender = button( No );
- else
- mySender = button( Close );
- }
-
- if ( !mySender || !mySender->isWidgetType() ||
- !((QWidget*)mySender)->isEnabled() )
- return;
-
- QDialog::reject();
-
- emitSignal();
-}
-
-/*!
- Name: reject [private]
- Desc: Emit signal appropriate to control button.
-*/
-
-void QtxDialog::emitSignal()
-{
- qApp->processEvents();
- QApplication::syncX();
-
- int id = buttonId( (QButton*)mySender );
- mySender = 0;
-
- switch ( id )
- {
- case OK:
- emit dlgOk();
- break;
- case Cancel:
- emit dlgCancel();
- break;
- case Close:
- emit dlgClose();
- break;
- case Yes:
- emit dlgYes();
- break;
- case No:
- emit dlgNo();
- break;
- }
-}
-
-/*!
- Name: onAccept [private slot]
- Desc: Process signals "clicked()" from control buttons "OK", "Yes". Invoke accept().
-*/
-
-void QtxDialog::onAccept()
-{
- const QObject* obj = sender();
- mySender = obj;
- accept();
-}
-
-/*!
- Name: onReject [private slot]
- Desc: Process signals "clicked()" from control buttons "Cancel", "No", "Close".
- Invoke reject().
-*/
-
-void QtxDialog::onReject()
-{
- const QObject* obj = sender();
- mySender = obj;
- reject();
-}
-
-/*!
- Name: onButton [private slot]
- Desc: Receive signal "clicked()" from user buttons and emit signal
- "dlgButton( int )" with identificator of clicked user button.
-*/
-
-void QtxDialog::onButton()
-{
- int id = buttonId( (QButton*)sender() );
- if ( id != -1 )
- emit dlgButton( id );
-}
-
-/*!
- Name: onDestroyed [private slot]
- Desc: Remove user button if it was destroyed.
-*/
-
-void QtxDialog::onDestroyed( QObject* obj )
-{
- QButton* b = (QButton*)obj;
- int id = buttonId( b );
- if ( id == -1 )
- return;
-
- myButton.remove( id );
- myPosition.remove( id );
- for ( AreaMap::Iterator it = myArea.begin(); it != myArea.end(); ++it )
- it.data()->removeButton( b );
-}
-
-/*!
- Name: onSizeGripDestroyed [private slot]
- Desc: Setting up layout when size grip is destroyed.
-*/
-
-void QtxDialog::onSizeGripDestroyed()
-{
- if ( layout() )
- layout()->setMargin( 5 );
-}
-
-/*!
- Name: adjustButtons [private]
- Desc: Setting the equal with for all buttons.
-*/
-
-void QtxDialog::adjustButtons()
-{
- int minWidth = 0;
- for ( AreaMap::Iterator aIt = myArea.begin(); aIt != myArea.end(); ++aIt )
- for ( QPtrListIterator<QButton> bIt( aIt.data()->buttons() ); bIt.current(); ++bIt )
- if ( bIt.current()->isVisibleTo( this ) )
- minWidth = QMAX( minWidth, bIt.current()->sizeHint().width() );
-
- for ( AreaMap::Iterator aItr = myArea.begin(); aItr != myArea.end(); ++aItr )
- for ( QPtrListIterator<QButton> bItr( aItr.data()->buttons() ); bItr.current(); ++bItr )
- if ( bItr.current()->isVisibleTo( this ) )
- bItr.current()->setMinimumWidth( minWidth );
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxDialog.hxx
-// Author: Sergey TELKOV
-
-#ifndef QTXDIALOG_H
-#define QTXDIALOG_H
-
-#include "Qtx.h"
-
-#include <qmap.h>
-#include <qdialog.h>
-#include <qvaluelist.h>
-
-class QFrame;
-class QLabel;
-class QButton;
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-class QTX_EXPORT QtxDialog : public QDialog
-{
- Q_OBJECT
-
- class Area;
- class Border;
-
-public:
- typedef enum { Position, Expand, Uniform } PlacePolicy;
- typedef enum { TopArea, BottomArea, LeftArea, RightArea } ButtonArea;
- typedef enum { Left, Right, Center, Top = Left, Bottom = Right } ButtonPosition;
-
- typedef enum { None = 0x00000000,
- OK = 0x00000001,
- Apply = 0x00000002,
- Cancel = 0x00000004,
- Yes = 0x00000008,
- No = 0x00000010,
- Close = 0x00000020,
- Help = 0x00000040,
- OKCancel = OK | Cancel,
- YesNo = Yes | No,
- Standard = OK | Cancel | Help,
- All = Standard | YesNo | Apply | Close } ButtonFlags;
-
- typedef enum { Accept = 0x000001,
- Reject = 0x000002,
- AlignOnce = 0x000004,
- SetFocus = 0x000008 } DialogFlags;
-
-public:
- QtxDialog( QWidget* = 0, const char* = 0, bool = false,
- bool = false, const int = Standard, WFlags = 0 );
- virtual ~QtxDialog();
-
- void setDialogFlags( const int );
- void clearDialogFlags( const int );
- bool testDialogFlags( const int ) const;
-
- void setButtonFlags( const int );
- void clearButtonFlags( const int );
- bool testButtonFlags( const int ) const;
-
- int buttonPosition( const int ) const;
- void setButtonPosition( const int, const int = -1 );
- void setPlacePosition( const int, const int );
-
- int placePolicy( const int ) const;
- void setPlacePolicy( const int, const int );
- void setButtonPlace( const int, const int );
-
- QString buttonText( const int );
- void setButtonText( const int, const QString& text );
-
- void setButtonFocus( const int );
- bool hasButtonFocus( const int ) const;
-
- bool isButtonEnabled( const int ) const;
- void setButtonEnabled( const bool, const int );
-
- bool isBorderEnabled( const int ) const;
- void setBorderEnabled( const bool, const int );
-
- void removeButton( const int );
- int insertButton( const QString&, const int = BottomArea );
-
- QValueList<int> userButtonIds() const;
- QButton* userButton( const int ) const;
-
- virtual void show();
- virtual void hide();
-
- uint setAlignment( uint align );
- static void setUnits( QLabel*, const QString& );
-
-signals:
- void dlgButton( int );
- void dlgParamChanged();
-
- void dlgHelp();
- void dlgApply();
-
- void dlgOk();
- void dlgNo();
- void dlgYes();
- void dlgClose();
- void dlgCancel();
-
-public slots:
- void update();
-
-protected slots:
- virtual void accept();
- virtual void reject();
-
-private slots:
- void onAccept();
- void onReject();
- void onButton();
- void onSizeGripDestroyed();
- void onDestroyed( QObject* );
-
-protected:
- typedef QMap<int, QButton*> ButtonMap;
-
-protected:
- QFrame* mainFrame() const;
-
- virtual bool acceptData() const;
- virtual bool rejectData() const;
-
- virtual QButton* createButton( QWidget* );
-
- QButton* button( const int ) const;
- ButtonMap buttons( const int = All ) const;
- int buttonId( const QButton* ) const;
- int buttonPosition( QButton* ) const;
-
- virtual void showEvent( QShowEvent* );
- virtual void hideEvent( QHideEvent* );
- virtual void closeEvent( QCloseEvent* );
- virtual void childEvent( QChildEvent* );
- virtual void keyPressEvent( QKeyEvent* );
-
-private:
- void adjustButtons();
- void emitSignal();
-
-private:
- typedef QMap<int, Area*> AreaMap;
- typedef QMap<int, int> PositionMap;
-
- friend class Area;
-
-private:
- AreaMap myArea;
- ButtonMap myButton;
- PositionMap myPosition;
-
- bool myInited;
- const QObject* mySender;
- uint myAlignment;
- QFrame* myMainFrame;
- int myButtonFlags;
- int myDialogFlags;
-};
-
-#ifdef WIN32
-#pragma warning( default:4251 )
-#endif
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#include "QtxDirListEditor.h"
-
-#include <qlabel.h>
-#include <qlayout.h>
-#include <qpushbutton.h>
-#include <qmessagebox.h>
-#include <qfiledialog.h>
-#include <qapplication.h>
-
-#define MARGIN_SIZE 11
-#define SPACING_SIZE 6
-#define SPACER_SIZE 5
-
-static const char* delete_icon[] = {
-"16 16 3 1",
-"` c #810000",
-" c none",
-"# c #ffffff",
-" ",
-" ",
-" ``# ``# ",
-" ````# ``# ",
-" ````# ``# ",
-" ```# `# ",
-" `````# ",
-" ```# ",
-" `````# ",
-" ```# ``# ",
-" ```# ``# ",
-" ```# `# ",
-" ```# `# ",
-" `# `# ",
-" ",
-" "
-};
-
-static const char* insert_icon[] = {
-"16 16 5 1",
-"` c #000000",
-". c #ffff00",
-"# c #9d9da1",
-" c none",
-"b c #ffffff",
-" ",
-" ",
-" # #b #. ",
-" # #.#.` ` ` ",
-" .#.b#### ` ",
-" ### .. ",
-" . # .# ` ",
-" #` #. ",
-" # ` ",
-" ` ",
-" ` ",
-" ` ",
-" ` ",
-" ` ` ` ` ` ` ",
-" ",
-" "
-};
-
-static const char* movedown_icon[] = {
-"16 16 2 1",
-"` c #000000",
-" c none",
-" ",
-" ",
-" ``` ",
-" ``` ",
-" ``` ",
-" ``` ",
-" ``` ",
-" ``` ",
-" ``````````` ",
-" ````````` ",
-" ``````` ",
-" ````` ",
-" ``` ",
-" ` ",
-" ",
-" "
-};
-
-static const char* moveup_icon[] = {
-"16 16 2 1",
-"` c #000000",
-" c none",
-" ",
-" ",
-" ` ",
-" ``` ",
-" ````` ",
-" ``````` ",
-" ````````` ",
-" ``````````` ",
-" ``` ",
-" ``` ",
-" ``` ",
-" ``` ",
-" ``` ",
-" ``` ",
-" ",
-" "
-};
-
-/*!
- Constructor
-*/
-QtxDirListEditor::QtxDirListEditor( QWidget* parent )
-: QWidget( parent )
-{
- myEdited = false;
- myLastSelected = 0;
- myEdit = 0;
- myBtn = 0;
-
- QGridLayout* topLayout = new QGridLayout(this);
- topLayout->setMargin(0);
- topLayout->setSpacing(0);
-
- setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
-
- myDirList = new QListBox(this);
- myDirList->setSelectionMode(QListBox::Single);
- myDirList->setHScrollBarMode(QListBox::AlwaysOff);
- myDirList->horizontalScrollBar()->installEventFilter(this);
- myDirList->verticalScrollBar()->installEventFilter(this);
- myDirList->insertItem(tr("<empty>"));
- myDirList->installEventFilter(this);
-
- QHBoxLayout* ctrlLayout = new QHBoxLayout;
- ctrlLayout->setMargin(0);
- ctrlLayout->setSpacing(0);
-
- // QLabel* lab = new QLabel(myDirList, tr("DIRECTORIES_LBL"), this);
-
- QToolButton* insertBtn = new QToolButton(this);
- insertBtn->setIconSet(QPixmap( insert_icon ));
- insertBtn->setAutoRaise(true);
-
- QToolButton* deleteBtn = new QToolButton(this);
- deleteBtn->setIconSet(QPixmap( delete_icon ));
- deleteBtn->setAutoRaise(true);
-
- QToolButton* upBtn = new QToolButton(this);
- upBtn->setIconSet(QPixmap( moveup_icon ));
- upBtn->setAutoRaise(true);
-
- QToolButton* downBtn = new QToolButton(this);
- downBtn->setIconSet(QPixmap( movedown_icon ));
- downBtn->setAutoRaise(true);
-
- // ctrlLayout->addWidget(lab);
- ctrlLayout->addItem(new QSpacerItem(SPACER_SIZE, SPACER_SIZE, QSizePolicy::Expanding, QSizePolicy::Minimum));
- ctrlLayout->addWidget(insertBtn);
- ctrlLayout->addWidget(deleteBtn);
- ctrlLayout->addWidget(upBtn);
- ctrlLayout->addWidget(downBtn);
-
- QHBoxLayout* btnLayout = new QHBoxLayout;
- btnLayout->setMargin(0);
- btnLayout->setSpacing(6);
-
- topLayout->addLayout(ctrlLayout, 0, 0);
- topLayout->addWidget(myDirList, 1, 0);
- topLayout->addLayout(btnLayout, 2, 0);
-
- connect(myDirList, SIGNAL(mouseButtonClicked(int, QListBoxItem*, const QPoint&)),
- this, SLOT(onMouseButtonClicked(int, QListBoxItem*, const QPoint&)));
- connect(myDirList, SIGNAL(doubleClicked(QListBoxItem*)),
- this, SLOT(onDblClicked(QListBoxItem*)));
-
- connect(insertBtn, SIGNAL(clicked()), this, SLOT(onInsert()));
- connect(deleteBtn, SIGNAL(clicked()), this, SLOT(onDelete()));
- connect(upBtn, SIGNAL(clicked()), this, SLOT(onUp()));
- connect(downBtn, SIGNAL(clicked()), this, SLOT(onDown()));
-}
-
-/*!
- Destructor
-*/
-QtxDirListEditor::~QtxDirListEditor()
-{
-}
-
-/*!
- Gets list of paths
-*/
-void QtxDirListEditor::getPathList(QStringList& list)
-{
- // Finish the path editing
- if (myEdit) {
- validate(true);
-
- myEdit->deleteLater();
- myBtn->deleteLater();
- myEdit = 0;
- myBtn = 0;
- myEdited = false;
- myDirList->setFocus();
- }
-
- list.clear();
- for (unsigned i = 0; i < myDirList->count()-1; i++)
- list.append(myDirList->text(i));
-}
-
-/*!
- Sets list of paths
-*/
-void QtxDirListEditor::setPathList(const QStringList& list) {
- myDirList->clear();
- myDirList->insertItem(tr("<empty>"));
- for (unsigned i = 0; i < list.count(); i++)
- myDirList->insertItem(list[i], myDirList->count()-1);
-}
-
-/*!
- Validates entered path, returns true if OK
-*/
-bool QtxDirListEditor::validate( const bool quietMode )
-{
- if ( myEdited )
- {
- QString dirPath = QFileInfo( myEdit->text().stripWhiteSpace() ).filePath();
-/*
-#ifndef WNT
- if ( dirPath.startsWith( "~") ) {
- dirPath = dirPath.remove(0,1);
- QString user;
- int slashPos = dirPath.find("/");
- if ( slashPos >= 0 ) {
- user = dirPath.left(slashPos);
- dirPath = dirPath.mid(slashPos);
- }
- else {
- user = dirPath;
- dirPath = "";
- }
- if ( user.isEmpty() )
- user = getenv( "USER" );
-
- struct passwd* user_data = getpwnam( user.latin1() );
- if ( user_data == NULL ) {
- // unknown user or something another error
- QMessageBox::critical(this,
- tr("Error"),
- tr("Unknown user %1").arg(user),
- tr("Ok"));
- myEdit->setFocus();
- return false;
- }
- dirPath = user_data->pw_dir + dirPath;
- }
-#endif
-*/
- QDir dir(dirPath);
- QListBoxItem* found = 0;
- for (unsigned i = 0; i < myDirList->count()-1; i++) {
- QDir aDir(myDirList->text(i));
- if ( aDir.canonicalPath().isNull() && myDirList->text(i) == dir.absPath() ||
- !aDir.canonicalPath().isNull() && aDir.exists() && aDir.canonicalPath() == dir.canonicalPath()) {
- found = myDirList->item(i);
- break;
- }
- }
- if (dirPath.isEmpty()) {
- if (found) {
- // it should be last (empty) item in the list - nothing to do
- return true;
- }
- else {
- // delete directory from the list
- removeDir(myLastSelected);
- return true;
- }
- }
- else {
- if (found) {
- if (found != myLastSelected) {
- // it is forbidden to add directory more then once
- if ( !quietMode )
- QMessageBox::critical(this,
- tr("Error"),
- tr("Directory already specified."),
- tr("Ok"));
- myEdit->setFocus();
- return false;
- }
- }
- else {
- if (!dir.exists()) {
- if ( !quietMode && QMessageBox::information(this,
- tr("Warning"),
- tr("%1\n\nThe directory doesn't exist.\nAdd directory anyway?").arg(dir.absPath()),
- tr("Yes"), tr("No"), QString::null, 1, 1) == 1) {
- myEdit->setFocus();
- return false;
- }
- }
- // append
- appendDir(myLastSelected, dir.absPath());
- }
- }
- }
- return true;
-}
-
-/*!
- Appends/changes directory
-*/
-void QtxDirListEditor::appendDir(QListBoxItem* item, const QString& dir) {
- int index = myDirList->index(item);
- if (index >= 0 && index < (int)myDirList->count()) {
- if (index == (int)myDirList->count()-1) {
- // it is the last item (new), well, insert it before the last (empty)
- myDirList->insertItem(dir, myDirList->count()-1);
- }
- else {
- // change item
- myDirList->changeItem(dir, index);
- }
- }
-}
-
-/*!
- Removes directory from list
-*/
-void QtxDirListEditor::removeDir(QListBoxItem* item) {
- // do not remove last item (empty)
- int index = myDirList->index(item);
- if (index >= 0 && index < (int)myDirList->count()-1) {
- delete item;
- myLastSelected = myDirList->item(index);
- myDirList->setSelected(myLastSelected, true);
- }
-}
-
-/*!
- Resize event
-*/
-void QtxDirListEditor::resizeEvent(QResizeEvent* event) {
- QWidget::resizeEvent(event);
- if ( myEdited ) {
- myEdit->resize(myDirList->viewport()->width()-myBtn->sizeHint().width(), myEdit->height());
- myBtn->move(myEdit->width(), myEdit->y());
- }
-}
-
-/*!
- Called when user clicks inside directories list box
-*/
-void QtxDirListEditor::onMouseButtonClicked(int button,
- QListBoxItem* item,
- const QPoint& point) {
- if (myEdited) {
- if (!validate()) {
- myDirList->setCurrentItem(myLastSelected);
- myDirList->setSelected(myLastSelected, true);
- return;
- }
- delete myEdit;
- delete myBtn;
- myEdit = 0;
- myBtn = 0;
- myEdited = false;
- myDirList->setFocus();
- }
- if (item) {
- myDirList->setCurrentItem(item);
- myDirList->setSelected(item, true);
- myDirList->ensureCurrentVisible();
- qApp->processEvents();
- if (button == LeftButton && myLastSelected == item) {
- QRect ir = myDirList->itemRect(myLastSelected);
-
- myEdit = new QLineEdit(myDirList->viewport());
- myBtn = new QToolButton(myDirList->viewport());
- myBtn->setText(" ... ");
- connect(myBtn, SIGNAL(clicked()), this, SLOT(onBtnClicked()));
- myEdit->setGeometry(0,
- ir.top()-(myEdit->sizeHint().height()-ir.height())/2,
- myDirList->viewport()->width()-myBtn->sizeHint().width(),
- myEdit->sizeHint().height());
- myBtn->setGeometry (myEdit->width(),
- ir.top()-(myEdit->sizeHint().height()-ir.height())/2,
- myBtn->sizeHint().width(),
- myEdit->sizeHint().height());
- connect(myEdit, SIGNAL(returnPressed()), this, SLOT(onEditFinished()));
- myEdited = true;
- myEdit->show();
- myBtn->show();
- if (myDirList->index(myLastSelected) != (int)myDirList->count()-1)
- myEdit->setText(myLastSelected->text());
- myEdit->selectAll();
- myEdit->setCursorPosition(myEdit->text().length());
- myEdit->installEventFilter(this);
- myEdit->setFocus();
- }
- }
- else {
- myDirList->clearSelection();
- }
- myLastSelected = item;
-}
-
-/*!
- Called when user double-clicks on any item
-*/
-void QtxDirListEditor::onDblClicked(QListBoxItem* item) {
- onMouseButtonClicked(LeftButton, item, QPoint(0,0));
-}
-
-/*!
- <...> (Browse dir) button slot
-*/
-void QtxDirListEditor::onBtnClicked() {
- QString dir = myEdit->text().stripWhiteSpace().isEmpty() ?
- QString::null :
- myEdit->text().stripWhiteSpace();
-
- dir = QFileDialog::getExistingDirectory(dir, this, 0, tr("Select directory"), true);
-
- if (!dir.isEmpty()) {
- myEdit->setText(dir);
- myEdit->selectAll();
- myEdit->setCursorPosition(myEdit->text().length());
- }
-}
-
-/*!
- Called when user finises editing of path by pressing <Enter>
-*/
-void QtxDirListEditor::onEditFinished() {
- if (myEdit) {
- if (!validate()) {
- myDirList->setCurrentItem(myLastSelected);
- myDirList->setSelected(myLastSelected, true);
- return;
- }
- myEdit->deleteLater();
- myBtn->deleteLater();
- myEdit = 0;
- myBtn = 0;
- myEdited = false;
- myDirList->setFocus();
- }
-}
-
-/*!
- Event filter
-*/
-bool QtxDirListEditor::eventFilter(QObject* object, QEvent* event) {
- if ( myEdited ) {
- if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonDblClick) {
- if (object == myDirList->horizontalScrollBar() || object == myDirList->verticalScrollBar()) {
- if (!validate()) {
- myDirList->setCurrentItem(myLastSelected);
- myDirList->setSelected(myLastSelected, true);
- return true;
- }
- delete myEdit;
- delete myBtn;
- myEdit = 0;
- myBtn = 0;
- myEdited = false;
- myDirList->setFocus();
- }
- }
- else if (event->type() == QEvent::KeyPress) {
- QKeyEvent* ke = (QKeyEvent*)event;
- if (ke->key() == Key_Tab)
- return true;
- if (object == myDirList) {
- return true;
- }
- else if (object == myEdit) {
- if ( ke->key() == Key_Up || ke->key() == Key_Down || ke->key() == Key_PageUp || ke->key() == Key_PageDown ||
- ( ke->key() == Key_Home || ke->key() == Key_End || ke->key() == Key_Prior || ke->key() == Key_Next ) &&
- (ke->state() & ControlButton) ) {
- return true;
- }
- else if ( ke->key() == Key_Escape ) {
- delete myEdit;
- delete myBtn;
- myEdit = 0;
- myBtn = 0;
- myEdited = false;
- myDirList->setFocus();
- return true;
- }
- }
- }
- }
- return QWidget::eventFilter(object, event);
-}
-
-/*!
- <Insert> button slot
-*/
-void QtxDirListEditor::onInsert() {
- if (!myEdited) {
- myLastSelected = 0;
- onMouseButtonClicked(LeftButton, myDirList->item(myDirList->count()-1), QPoint(0,0));
- onMouseButtonClicked(LeftButton, myDirList->item(myDirList->count()-1), QPoint(0,0));
- }
-}
-
-/*!
- <Delete> button slot
-*/
-void QtxDirListEditor::onDelete() {
- if (!myEdited && myDirList->currentItem() >=0) {
- removeDir(myDirList->item(myDirList->currentItem()));
- myDirList->setFocus();
- }
-}
-
-/*!
- <Move up> button slot
-*/
-void QtxDirListEditor::onUp() {
- if (!myEdited && myLastSelected) {
- int index = myDirList->currentItem();
- if (index > 0 && index < (int)myDirList->count()-1 && myDirList->isSelected(index)) {
- QString t = myDirList->text(index-1);
- myDirList->changeItem(myDirList->text(index), index-1);
- myDirList->changeItem(t, index);
- myDirList->setCurrentItem(index-1);
- myLastSelected = myDirList->item(index-1);
- myDirList->setSelected(myLastSelected, true);
- myDirList->setFocus();
- }
- }
-}
-
-/*!
- <Move down> button slot
-*/
-void QtxDirListEditor::onDown() {
- if (!myEdited && myLastSelected) {
- int index = myDirList->currentItem();
- if (index >= 0 && index < (int)myDirList->count()-2 && myDirList->isSelected(index)) {
- QString t = myDirList->text(index+1);
- myDirList->changeItem(myDirList->text(index), index+1);
- myDirList->changeItem(t, index);
- myDirList->setCurrentItem(index+1);
- myLastSelected = myDirList->item(index+1);
- myDirList->setSelected(myLastSelected, true);
- myDirList->setFocus();
- }
- }
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef QTX_DIRLISTEDITOR_H
-#define QTX_DIRLISTEDITOR_H
-
-#include "Qtx.h"
-
-#include <qwidget.h>
-#include <qtoolbutton.h>
-#include <qlineedit.h>
-#include <qlistbox.h>
-#include <qcombobox.h>
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-/*!
- * \brief The GUI implementation of the directory list
- */
-class QTX_EXPORT QtxDirListEditor : public QWidget {
-
- Q_OBJECT
-
-public:
-
- /*!
- * \brief Constructor
- * \param parent - the parent of the widget
- */
- QtxDirListEditor(QWidget* parent);
-
- /*!
- * \brief Destructor
- */
- ~QtxDirListEditor();
-
- /*!
- * \brief Gets list of paths
- * \param list - the returned reference to the list of paths
- */
- void getPathList(QStringList& list);
-
- /*!
- * \brief Sets list of paths
- * \param list - the list of paths to set
- */
- void setPathList(const QStringList& list);
-
- /*!
- * \brief Event filter, redefined from QObject class
- */
- bool eventFilter(QObject* object, QEvent* event);
-
-protected:
-
- /*!
- * \brief Validates entered path
- * \retval bool - returns status (true if OK)
- */
- bool validate( const bool quietMode = false );
-
- /*!
- * \brief Appends/changes path
- * \param item - the item in QListBox
- * \param dir - the path
- */
- void appendDir(QListBoxItem* item, const QString& dir);
-
- /*!
- * \brief Removes directory from list
- * \param item - the item in QListBox
- */
- void removeDir(QListBoxItem* item);
-
- /*!
- * \brief Resize event handler, reimplemented from QWidget
- * \param event - the resize event
- */
- void resizeEvent(QResizeEvent* event);
-
-protected slots:
-
- /*!
- * \brief Called when user clicks inside directories list box
- */
- void onMouseButtonClicked(int, QListBoxItem*, const QPoint&);
-
- /*!
- * \brief Called when user double-clicks on any item
- */
- void onDblClicked(QListBoxItem*);
-
- /*!
- * \brief <...> (Browse dir) button slot
- */
- void onBtnClicked();
-
- /*!
- * \brief Ccalled when user finises editing of path by pressing <Enter>
- */
- void onEditFinished();
-
- /*!
- * \brief <Insert> button slot
- */
- void onInsert();
-
- /*!
- * \brief <Delete> button slot
- */
- void onDelete();
-
- /*!
- * \brief <Move up> button slot
- */
- void onUp();
-
- /*!
- * \brief <Move down> button slot
- */
- void onDown();
-
-private:
- QListBox* myDirList; //!< directory list
- QLineEdit* myEdit; //!< path edit box
- QToolButton* myBtn; //!< browse pah button
- bool myEdited; //!< edit mode flag
- QListBoxItem* myLastSelected; //!< last selected row
-
-};
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxDockAction.cxx
-// Author: Sergey TELKOV
-
-#include "QtxDockAction.h"
-
-#include "QtxResourceMgr.h"
-
-#include <qevent.h>
-#include <qtoolbar.h>
-#include <qdockarea.h>
-#include <qdockwindow.h>
-#include <qmainwindow.h>
-#include <qobjectlist.h>
-#include <qapplication.h>
-
-/*!
- Name: QtxDockAction [public]
- Desc: Constructs an Dock action with given main window and name.
-*/
-
-QtxDockAction::QtxDockAction( QMainWindow* mw, const char* name )
-: QtxAction( "Windows and Toolbars", "Windows and Toolbars", 0, mw, name ),
-myMain( mw ),
-myAutoAdd( true ),
-mySeparate( true ),
-myAutoPlace( false )
-{
- initialize( mw );
-}
-
-/*!
- Name: QtxDockAction [public]
- Desc: This constructor creates an action with the following properties: the
- description text, the menu text and. It is a child of given main window
- and named specified name.
-*/
-
-QtxDockAction::QtxDockAction( const QString& text, const QString& menuText, QMainWindow* mw, const char* name )
-: QtxAction( text, menuText, 0, mw, name ),
-myMain( mw ),
-myAutoAdd( true ),
-mySeparate( true ),
-myAutoPlace( false )
-{
- initialize( mw );
-}
-
-/*!
- Name: QtxDockAction [public]
- Desc: This constructor creates an action with the following properties: the
- description text, the menu text, the icon or iconset icon and keyboard
- accelerator. It is a child of given main window and named specified name.
-*/
-
-QtxDockAction::QtxDockAction( const QString& text, const QIconSet& icon, const QString& menuText, QMainWindow* mw, const char* name )
-: QtxAction( text, icon, menuText, 0, mw, name ),
-myMain( mw ),
-myAutoAdd( true ),
-mySeparate( true ),
-myAutoPlace( false )
-{
- initialize( mw );
-}
-
-/*!
- Name: ~QtxDockAction [public]
- Desc: Removes all added popup items.
-*/
-
-QtxDockAction::~QtxDockAction()
-{
- for ( MenuMap::ConstIterator mIt = myMenu.begin(); mIt != myMenu.end(); ++mIt )
- removeFrom( mIt.key() );
-
- for ( InfoMap::ConstIterator iIt = myInfo.begin(); iIt != myInfo.end(); ++iIt )
- delete iIt.data().a;
-}
-
-/*!
- Name: mainWindow [public]
- Desc: Returns the main window which contains managed dock windows.
-*/
-
-QMainWindow* QtxDockAction::mainWindow() const
-{
- return myMain;
-}
-
-/*!
- Name: isAutoAdd [public]
- Desc: Returns the auto add property. If this property is setted then all newly
- appeared dock windows will be automatically added.
-*/
-
-bool QtxDockAction::isAutoAdd() const
-{
- return myAutoAdd;
-}
-
-/*!
- Name: setAutoAdd [public]
- Desc: Sets the auto add property. If this property is setted then all newly
- appeared dock windows will be automatically added.
-*/
-
-void QtxDockAction::setAutoAdd( const bool on )
-{
- myAutoAdd = on;
-}
-
-/*!
- Name: isAutoPlace [public]
- Desc: Returns the auto place property. If this property is setted then all newly
- added dock windows will be automatically placed according stored place information.
-*/
-
-bool QtxDockAction::isAutoPlace() const
-{
- return myAutoPlace;
-}
-
-/*!
- Name: setAutoPlace [public]
- Desc: Sets the auto place property. If this property is setted then all newly
- added dock windows will be automatically placed according stored place
- information.
-*/
-
-void QtxDockAction::setAutoPlace( const bool on )
-{
- myAutoPlace = on;
-}
-
-/*!
- Name: isSeparate [public]
- Desc: Returns the 'separate' property.
-*/
-
-bool QtxDockAction::isSeparate() const
-{
- return mySeparate;
-}
-
-/*!
- Name: setSeparate [public]
- Desc: Sets the 'separate' property. If this property is 'true' then toolbars and
- dock windows menu items will be placed in different popup menus otherwise
- their will be placed in one common popup menu. This property will be
- affected in next method 'addTo'.
-*/
-
-void QtxDockAction::setSeparate( const bool on )
-{
- if ( mySeparate == on )
- return;
-
- mySeparate = on;
- updateMenus();
-}
-
-/*!
- Name: addTo [public]
- Desc: Add the dock windows sub menu item to the end of specified popup.
-*/
-
-bool QtxDockAction::addTo( QWidget* wid )
-{
- return addTo( wid, -1 );
-}
-
-/*!
- Name: addTo [public]
- Desc: Add the dock windows sub menu item to specified popup at the given index.
-*/
-
-bool QtxDockAction::addTo( QWidget* wid, const int idx )
-{
- if ( !wid || !wid->inherits( "QPopupMenu" ) )
- return false;
-
- QPopupMenu* pm = (QPopupMenu*)wid;
- checkPopup( pm );
-
- if ( myMenu.contains( pm ) )
- return false;
-
- MenuInfo mInfo;
- mInfo.dock = new QPopupMenu( pm );
- mInfo.tool = isSeparate() ? new QPopupMenu( pm ) : 0;
-
- QString dock, tool;
- splitMenuText( dock, tool );
-
- myMenu.insert( pm, mInfo );
-
- int index = idx;
-
- if ( mInfo.dock )
- iconSet().isNull() ? pm->insertItem ( dock, mInfo.dock, -1, index ) :
- pm->insertItem ( iconSet(), dock, mInfo.dock, -1, index );
-
- if ( index >= 0 )
- index++;
-
- if ( mInfo.tool )
- iconSet().isNull() ? pm->insertItem ( tool, mInfo.tool, -1, index ) :
- pm->insertItem ( iconSet(), tool, mInfo.tool, -1, index );
-
- connect( pm, SIGNAL( aboutToShow() ), this, SLOT( onAboutToShow() ) );
- connect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onPopupDestroyed( QObject* ) ) );
-
- return true;
-}
-
-/*!
- Name: removeFrom [public]
- Desc: Removes dock window sub menu from specified popup.
-*/
-
-bool QtxDockAction::removeFrom( QWidget* wid )
-{
- QPopupMenu* pm = (QPopupMenu*)wid;
-
- if ( myMenu.contains( pm ) )
- {
- pm->removeItem( findId( pm, myMenu[pm].dock ) );
- pm->removeItem( findId( pm, myMenu[pm].tool ) );
-
- delete myMenu[pm].dock;
- delete myMenu[pm].tool;
- myMenu.remove( pm );
-
- disconnect( pm, SIGNAL( aboutToShow() ), this, SLOT( onAboutToShow() ) );
- disconnect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onPopupDestroyed( QObject* ) ) );
- }
-
- return QtxAction::removeFrom( wid );
-}
-
-/*!
- Sets menu text of action
- \param txt - new menu text
-*/
-void QtxDockAction::setMenuText( const QString& txt )
-{
- if ( menuText() == txt )
- return;
-
- QtxAction::setMenuText( txt );
- updateMenus();
-}
-
-/*!
- Name: addDockWindow [public]
- Desc: Add dock window to internal data structures. Action will be include all added
- dock windows in to menu and manage their place configuration.
-*/
-
-bool QtxDockAction::addDockWindow( QDockWindow* dw )
-{
- if ( !dw || !mainWindow() )
- return false;
-
- if ( myInfo.contains( dw ) )
- return false;
-
- myInfo.insert( dw, DockInfo() );
-
- DockInfo& inf = myInfo[dw];
- inf.name = windowName( dw );
- QAction* a = inf.a = new QAction( mainWindow(), 0, true );
-
- autoLoadPlaceInfo( dw );
-
- bool block = a->signalsBlocked();
- a->blockSignals( true );
- a->setOn( dw->isVisibleTo( mainWindow() ) );
- a->blockSignals( block );
-
- updateInfo( dw );
- savePlaceInfo( dw );
-
- dw->installEventFilter( this );
-
- connect( a, SIGNAL( toggled( bool ) ), this, SLOT( onToggled( bool ) ) );
- connect( dw, SIGNAL( destroyed( QObject* ) ), this, SLOT( onWindowDestroyed( QObject* ) ) );
- connect( dw, SIGNAL( visibilityChanged( bool ) ), this, SLOT( onVisibilityChanged( bool ) ) );
-
- return true;
-}
-
-/*!
- Name: removeDockWindow [public]
- Desc: Remove dock window from internal data structures. Action will not manage this window.
-*/
-
-bool QtxDockAction::removeDockWindow( QDockWindow* dw )
-{
- if ( !myInfo.contains( dw ) )
- return false;
-
- myGeom.remove( myInfo[dw].name );
-
- delete myInfo[dw].a;
- myInfo.remove( dw );
-
- dw->removeEventFilter( this );
-
- disconnect( dw, SIGNAL( destroyed( QObject* ) ), this, SLOT( onWindowDestroyed( QObject* ) ) );
- disconnect( dw, SIGNAL( visibilityChanged( bool ) ), this, SLOT( onVisibilityChanged( bool ) ) );
-
- return true;
-}
-
-/*!
- Name: eventFilter [public]
- Desc: Event filter process caption and icon changing of managed dock windows
- and try to add newly appeared dock windows.
-*/
-
-bool QtxDockAction::eventFilter( QObject* o, QEvent* e )
-{
- if ( o->inherits( "QDockWindow" ) && ( e->type() == QEvent::CaptionChange ||
- e->type() == QEvent::IconChange ) )
- updateInfo( (QDockWindow*)o );
-
- if ( o->inherits( "QDockArea" ) && e->type() == QEvent::ChildRemoved )
- {
- QChildEvent* ce = (QChildEvent*)e;
- if ( ce->child() && ce->child()->inherits( "QDockWindow" ) )
- savePlaceInfo( (QDockWindow*)ce->child() );
- }
-
- if ( o->inherits( "QDockArea" ) && e->type() == QEvent::ChildInserted )
- {
- QChildEvent* ce = (QChildEvent*)e;
- if ( ce->child() && ce->child()->inherits( "QDockWindow" ) )
- QApplication::postEvent( this, new QCustomEvent( (QEvent::Type)AutoAdd, ce->child() ) );
- }
-
- return false;
-}
-
-/*!
- Name: restoreGeometry [public]
- Desc: Retrieve the dock window geometry. If dock window specified as 0
- then all windows geometry will be restored.
-*/
-
-void QtxDockAction::restoreGeometry( QDockWindow* dw ) const
-{
- if ( !dw )
- loadPlaceInfo();
- else
- loadPlaceInfo( dw );
-}
-
-/*!
- Name: storeGeometry [public]
- Desc: Store the dock window geometry. If dock window specified as 0
- then all windows geometry will be stored.
-*/
-
-void QtxDockAction::storeGeometry( QDockWindow* dw )
-{
- QPtrList<QDockWindow> dwList;
-
- if ( dw )
- dwList.append( dw );
- else
- dockWindows( dwList );
-
- for ( QPtrListIterator<QDockWindow> it( dwList ); it.current(); ++it )
- savePlaceInfo( it.current() );
-}
-
-/*!
- Name: loadGeometry [public]
- Desc: Retrieve the dock windows geometry information from the specified resource manager section.
-*/
-
-void QtxDockAction::loadGeometry( QtxResourceMgr* resMgr, const QString& section, const bool clear )
-{
- QString sec = section.stripWhiteSpace();
- if ( !resMgr || sec.isEmpty() )
- return;
-
- myNames = QStringList::split( "|", resMgr->stringValue( sec, "windows_list", QString::null ) );
-
- QMap<QString, int> map;
- QStringList params = resMgr->parameters( sec );
- for ( QStringList::const_iterator it = params.begin(); it != params.end(); ++it )
- {
- QString p = QStringList::split( ".", *it, true ).first().stripWhiteSpace();
- if ( !p.isEmpty() )
- map.insert( p, 0 );
- }
-
- for ( QMap<QString, int>::ConstIterator itr = map.begin(); itr != map.end(); ++itr )
- {
- GeomInfo inf;
- if ( !clear && myGeom.contains( itr.key() ) )
- inf = myGeom[itr.key()];
- else
- {
- inf.vis = true; inf.newLine = false; inf.place = DockTop;
- inf.index = 0; inf.offset = 0;
- inf.x = 0; inf.y = 0; inf.w = 0; inf.h = 0;
- inf.fixW = -1; inf.fixH = -1;
- }
- if ( loadGeometry( resMgr, sec, itr.key(), inf ) )
- myGeom.insert( itr.key(), inf );
- }
-}
-
-/*!
- Name: saveGeometry [public]
- Desc: Store the dock windows geometry information into the specified resource manager section.
-*/
-
-void QtxDockAction::saveGeometry( QtxResourceMgr* resMgr, const QString& section, const bool clear ) const
-{
- QString sec = section.stripWhiteSpace();
- if ( !resMgr || sec.isEmpty() )
- return;
-
- QtxDockAction* that = (QtxDockAction*)this;
- that->storeGeometry();
-
- that->myNames.clear();
- collectNames( Minimized, that->myNames );
- for ( int i = DockTornOff; i < Minimized; i++ )
- collectNames( i, that->myNames );
-
- if ( clear )
- resMgr->remove( sec );
-
- resMgr->setValue( sec, "windows_list", myNames.join( "|" ) );
-
- for ( GeomMap::ConstIterator it = myGeom.begin(); it != myGeom.end(); ++it )
- saveGeometry( resMgr, sec, it.key(), it.data() );
-}
-
-/*!
- Name: onAboutToShow [private slots]
- Desc: Prepare sub popup with dock windows list when parent popup is shown.
-*/
-
-void QtxDockAction::onAboutToShow()
-{
- const QObject* obj = sender();
- if ( obj && obj->inherits( "QPopupMenu" ) )
- {
- QPopupMenu* pm = (QPopupMenu*)obj;
- fillPopup( pm );
- pm->setItemEnabled( findId( pm, myMenu[pm].dock ), isEnabled() && myMenu[pm].dock && myMenu[pm].dock->count() );
- pm->setItemEnabled( findId( pm, myMenu[pm].tool ), isEnabled() && myMenu[pm].tool && myMenu[pm].tool->count() );
- }
-}
-
-/*!
- Name: onToggled [private slots]
- Desc: Show or hide dock window when user toggled window item in popup.
-*/
-
-void QtxDockAction::onToggled( bool on )
-{
- QDockWindow* dw = dockWindow( (QAction*)sender() );
- if ( dw )
- on ? dw->show() : dw->hide();
-}
-
-/*!
- Name: onPopupDestroyed [private slots]
- Desc: Remove destroyed popup from data structures.
-*/
-
-void QtxDockAction::onPopupDestroyed( QObject* obj )
-{
- myMenu.remove( (QPopupMenu*)obj );
-}
-
-/*!
- Name: onWindowDestroyed [private slots]
- Desc: Remove information about destroyed dock window.
-*/
-
-void QtxDockAction::onWindowDestroyed( QObject* obj )
-{
- QDockWindow* dw = (QDockWindow*)obj;
- if ( !myInfo.contains( dw ) )
- return;
-
- delete myInfo[dw].a;
- myInfo.remove( dw );
-}
-
-/*!
- Name: onVisibilityChanged [private slots]
- Desc: Toggle corresponded action when visibility state of dock window changed.
-*/
-
-void QtxDockAction::onVisibilityChanged( bool on )
-{
- const QObject* obj = sender();
- if ( !obj || !obj->inherits( "QDockWindow" ) )
- return;
-
- QDockWindow* dw = (QDockWindow*)obj;
-
- QAction* a = action( dw );
- if ( a && a->isOn() != on )
- {
- bool block = a->signalsBlocked();
- a->blockSignals( true );
- a->setOn( on );
- a->blockSignals( block );
- }
-
- savePlaceInfo( dw );
-}
-
-/*!
- Name: onDockWindowPositionChanged [private slots]
- Desc: Update dock window place information
-*/
-
-void QtxDockAction::onDockWindowPositionChanged( QDockWindow* dw )
-{
- savePlaceInfo( dw );
-}
-
-/*!
- Name: event [protected]
- Desc: Check consistency the popup content and internal datas.
- Synchronize internal data structures with popup content.
-*/
-
-bool QtxDockAction::event( QEvent* e )
-{
- if ( e->type() == (int)AutoAdd )
- {
- QCustomEvent* ce = (QCustomEvent*)e;
- QDockWindow* dw = (QDockWindow*)ce->data();
- if ( !myInfo.contains( dw ) )
- {
- autoAddDockWindow( dw );
- autoLoadPlaceInfo( dw );
- }
- }
-
- return QtxAction::event( e );
-}
-
-/*!
- Name: checkPopup [private]
- Desc: Check consistency the popup content and internal datas.
- Synchronize internal data structures with popup content.
-*/
-
-void QtxDockAction::checkPopup( QPopupMenu* pm )
-{
- if ( !myMenu.contains( pm ) )
- return;
-
- int id = findId( pm, myMenu[pm].dock );
- if ( id == -1 )
- {
- delete myMenu[pm].dock;
- myMenu[pm].dock = 0;
- }
- id = findId( pm, myMenu[pm].tool );
- if ( id == -1 )
- {
- delete myMenu[pm].tool;
- myMenu[pm].tool = 0;
- }
-
- if ( !myMenu[pm].dock )
- {
- delete myMenu[pm].tool;
- myMenu.remove( pm );
- disconnect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
- }
-}
-
-/*!
- Name: fillPopup [private]
- Desc: Clear the popup and the add to it required actions.
-*/
-
-void QtxDockAction::fillPopup( QPopupMenu* pm ) const
-{
- if ( !pm || !mainWindow() )
- return;
-
- if ( !myMenu.contains( pm ) )
- return;
-
- QPopupMenu* dockMenu = myMenu[pm].dock;
- QPopupMenu* toolMenu = myMenu[pm].tool;
-
- for ( InfoMap::ConstIterator mit = myInfo.begin(); mit != myInfo.end(); ++mit )
- {
- mit.data().a->removeFrom( dockMenu );
- mit.data().a->removeFrom( toolMenu );
- }
-
- if ( dockMenu )
- dockMenu->clear();
-
- if ( toolMenu )
- toolMenu->clear();
-
- QPtrList<QDockWindow> dockList;
- dockWindows( dockList, mainWindow() );
-
- if ( dockList.isEmpty() )
- return;
-
- QPtrList<QAction> toolBars, windows;
- for ( QPtrListIterator<QDockWindow> it( dockList ); it.current(); ++it )
- {
- if ( !myInfo.contains( it.current() ) )
- {
- QtxDockAction* that = (QtxDockAction*)this;
- that->autoAddDockWindow( it.current() );
- }
-
- if ( !mainWindow()->appropriate( it.current() ) ||
- it.current()->caption().isEmpty() || !action( it.current() ) )
- continue;
-
- if ( isToolBar( it.current() ) )
- toolBars.append( action( it.current() ) );
- else
- windows.append( action( it.current() ) );
- }
-
- for ( QPtrListIterator<QAction> wit( windows ); wit.current(); ++wit )
- wit.current()->addTo( dockMenu );
-
- dockMenu->insertSeparator();
-
- for ( QPtrListIterator<QAction> tit( toolBars ); tit.current(); ++tit )
- tit.current()->addTo( toolMenu ? toolMenu : dockMenu );
-
- Qtx::simplifySeparators( dockMenu );
- Qtx::simplifySeparators( toolMenu );
-}
-
-/*!
- Name: isToolBar [private]
- Desc: Returns 'true' if dock window is a toolbar.
-*/
-
-bool QtxDockAction::isToolBar( QDockWindow* dw ) const
-{
- return dw && dw->inherits( "QToolBar" );
-}
-
-/*!
- Name: findId [private]
- Desc: Returns identificator of popup item which contains sub popup 'pm' in the popup 'cont'.
-*/
-
-int QtxDockAction::findId( QPopupMenu* cont, QPopupMenu* pm ) const
-{
- if ( !cont || !pm )
- return -1;
-
- int id = -1;
-
- for ( int i = 0; i < (int)cont->count() && id == -1; i++ )
- {
- QMenuData* md = 0;
- QMenuItem* item = cont->findItem( cont->idAt( i ), &md );
- if ( item && md == cont && item->popup() == pm )
- id = item->id();
- }
- return id;
-}
-
-/*!
- Name: dockWindows [private]
- Desc: Returns all dock windows of the main window.
-*/
-
-void QtxDockAction::dockWindows( QPtrList<QDockWindow>& lst, QMainWindow* main ) const
-{
- lst.clear();
-
- QMainWindow* mw = main ? main : mainWindow();
- if ( !mw )
- return;
-
- QObjectList* objs = mw->queryList( "QDockWindow" );
- if ( objs )
- {
- for ( QObjectListIt it( *objs ); it.current(); ++it )
- {
- QDockWindow* dockWin = ::qt_cast<QDockWindow*>( it.current() );
- if ( dockWin && dockMainWindow( mw, dockWin ) )
- lst.append( dockWin );
- }
- }
- delete objs;
-}
-
-/*!
- \return true if main window is parent of object
- \param mw - main window
- \param win - object
-*/
-bool QtxDockAction::dockMainWindow( QMainWindow* mw, QObject* win ) const
-{
- if ( !mw || !win )
- return false;
-
- while ( win )
- {
- if ( win->parent() && win->parent() == mw )
- return true;
-
- if ( ::qt_cast<QMainWindow*>( win->parent() ) )
- return false;
-
- win = win->parent();
- }
-
- return false;
-}
-
-/*!
- Name: updateInfo [private]
- Desc: Updates icon and caption info of dock window in the corresponded action.
-*/
-
-void QtxDockAction::updateInfo( QDockWindow* dw )
-{
- QAction* a = action( dw );
- if ( !a )
- return;
-
- a->setText( dw->caption() );
- a->setMenuText( dw->caption() );
-
- if ( isToolBar( dw ) )
- a->setStatusTip( tr( "Toggles toolbar \"%1\" on/off" ).arg( dw->caption() ) );
- else
- a->setStatusTip( tr( "Toggles window \"%1\" on/off" ).arg( dw->caption() ) );
-
- const QPixmap* icon = dw->icon();
- if ( icon )
- a->setIconSet( *icon );
-}
-
-/*!
- Name: savePlaceInfo [private]
- Desc: Store the place and geometry information from specified dock window.
-*/
-
-void QtxDockAction::savePlaceInfo( QDockWindow* dw )
-{
- if ( !myInfo.contains( dw ) )
- return;
-
- if ( !myGeom.contains( myInfo[dw].name ) )
- myGeom.insert( myInfo[dw].name, GeomInfo() );
-
- GeomInfo& inf = myGeom[myInfo[dw].name];
-
- Dock dock;
- inf.vis = dw->isVisibleTo( mainWindow() );
- mainWindow()->getLocation( dw, dock, inf.index, inf.newLine, inf.offset );
-
- inf.place = dock;
- inf.x = dw->x();
- inf.y = dw->y();
- inf.w = dw->width();
- inf.h = dw->height();
- inf.fixW = dw->fixedExtent().width();
- inf.fixH = dw->fixedExtent().height();
-}
-
-/*!
- Name: loadPlaceInfo [private]
- Desc: Retrieve the stored place and geometry information to specified dock window.
-*/
-
-void QtxDockAction::loadPlaceInfo( QDockWindow* dw ) const
-{
- if ( !myInfo.contains( dw ) )
- return;
-
- QMainWindow* mw = mainWindow();
- if ( !mw )
- return;
-
- QObject* p = dw->parent();
- if ( !( !p || p == mw || ( p->parent() && p->parent() == mw ) ) )
- return;
-
- QString winName = myInfo[dw].name;
- if ( winName.isEmpty() || !myGeom.contains( winName ) )
- return;
-
- GeomInfo inf = myGeom[myInfo[dw].name];
-
- mainWindow()->moveDockWindow( dw, (Qt::Dock)inf.place, inf.newLine, inf.index, inf.offset );
- dw->setGeometry( inf.x, inf.y, inf.w, inf.h );
-
- dw->setFixedExtentWidth( inf.fixW );
- dw->setFixedExtentHeight( inf.fixH );
-
- QtxDockAction* that = (QtxDockAction*)this;
- that->myGeom.insert( myInfo[dw].name, inf );
-}
-
-/*!
- Name: loadPlaceInfo [private]
- Desc: Retrieve the stored place and geometry information to all dock windows.
-*/
-
-void QtxDockAction::loadPlaceInfo() const
-{
- QMainWindow* mw = mainWindow();
- if ( !mw )
- return;
-
- typedef QPtrList<QDockWindow> DockWinList;
-
- DockWinList lst;
- dockWindows( lst, mw );
-
- QMap<QString, QDockWindow*> nameMap;
- for ( QPtrListIterator<QDockWindow> itr( lst ); itr.current(); ++itr )
- {
- QObject* p = itr.current()->parent();
- if ( !( !p || p == mw || ( p->parent() && p->parent() == mw ) ) )
- continue;
-
- QString name;
- if ( myInfo.contains( itr.current() ) )
- name = myInfo[itr.current()].name;
-
- if ( !myGeom.contains( name ) )
- continue;
-
- nameMap.insert( name, itr.current() );
- }
-
- DockWinList winList;
- for ( QStringList::const_iterator iter = myNames.begin(); iter != myNames.end(); ++iter )
- {
- if ( nameMap.contains( *iter ) )
- winList.append( nameMap[*iter] );
- nameMap.remove( *iter );
- }
-
- for ( QMap<QString, QDockWindow*>::ConstIterator mIt = nameMap.begin(); mIt != nameMap.end(); ++mIt )
- winList.append( mIt.data() );
-
- QMap<int, DockWinList> winMap;
- QMap<QDockWindow*, GeomInfo*> geomMap;
-
- for ( QPtrListIterator<QDockWindow> it( winList ); it.current(); ++it )
- {
- QString name;
- if ( myInfo.contains( it.current() ) )
- name = myInfo[it.current()].name;
-
- if ( !myGeom.contains( name ) )
- continue;
-
- //! collect pointer of info to have fresh info data after processEvents();
- GeomInfo* inf = (GeomInfo*)&( myGeom[name] );
- geomMap.insert( it.current(), inf );
- if ( !winMap.contains( inf->place ) )
- winMap.insert( inf->place, DockWinList() );
- winMap[inf->place].append( it.current() );
- }
-
- loadPlaceArea( DockMinimized, mw, 0,
- winMap.contains( DockMinimized ) ? winMap[DockMinimized] : DockWinList(), geomMap );
- for ( int i = DockTornOff; i < DockMinimized; i++ )
- {
- loadPlaceArea( i, mw, dockArea( i ), winMap.contains( i ) ? winMap[i] : DockWinList(), geomMap );
- }
-}
-
-/*!
- Name: loadPlaceArea [private]
- Desc: Set the place and geometry information to all dock windows in the area.
-*/
-
-void QtxDockAction::loadPlaceArea( const int place, QMainWindow* mw, QDockArea* area,
- const QPtrList<QDockWindow>& dockList,
- const QMap<QDockWindow*, GeomInfo*>& geomMap ) const
-{
- for ( QPtrListIterator<QDockWindow> it( dockList ); it.current(); ++it )
- {
- if ( !geomMap.contains( it.current() ) )
- continue;
-
- GeomInfo* inf = geomMap[it.current()];
- mw->moveDockWindow( it.current(), (Qt::Dock)place, inf->newLine, inf->index, inf->offset );
- }
-
- if ( !area )
- return;
-
- qApp->processEvents();
-
- for ( QPtrListIterator<QDockWindow> itr( dockList ); itr.current(); ++itr )
- {
- QDockWindow* dw = itr.current();
- if ( !geomMap.contains( dw ) )
- continue;
-
- GeomInfo* inf = geomMap[dw];
- if ( place != DockTornOff )
- {
- dw->setNewLine( inf->newLine );
- dw->setOffset( inf->offset );
- dw->setFixedExtentWidth( inf->fixW );
- dw->setFixedExtentHeight( inf->fixH );
- }
- dw->setGeometry( inf->x, inf->y, inf->w, inf->h );
-
- QAction* a = action( dw );
- if ( a )
- {
- bool block = a->signalsBlocked();
- a->blockSignals( true );
- a->setOn( inf->vis );
- a->blockSignals( block );
- }
-
- if ( mainWindow() && mainWindow()->appropriate( dw ) )
- inf->vis ? dw->show() : dw->hide();
- }
-
- QWidget* wid = area;
- if ( wid->layout() )
- {
- wid->layout()->invalidate();
- wid->layout()->activate();
- }
-}
-
-/*!
- Name: action [private]
- Desc: Returns action for the given dock window.
-*/
-
-QAction* QtxDockAction::action( QDockWindow* dw ) const
-{
- QAction* a = 0;
- if ( myInfo.contains( dw ) )
- a = myInfo[dw].a;
- return a;
-}
-
-/*!
- Name: dockWindow [private]
- Desc: Returns dock window for the given action.
-*/
-
-QDockWindow* QtxDockAction::dockWindow( const QAction* a ) const
-{
- QDockWindow* dw = 0;
- for ( InfoMap::ConstIterator it = myInfo.begin(); it != myInfo.end() && !dw; ++it )
- {
- if ( it.data().a == a )
- dw = it.key();
- }
- return dw;
-}
-
-/*!
- Name: initialize [private]
- Desc: Initialisation of the object. Sets the event filters and add existing dock windows.
-*/
-
-void QtxDockAction::initialize( QMainWindow* mw )
-{
- if ( !mw )
- return;
-
- QPtrList<QDockWindow> lst;
- dockWindows( lst, mw );
-
- for ( QPtrListIterator<QDockWindow> it( lst ); it.current(); ++it )
- QApplication::postEvent( this, new QCustomEvent( (QEvent::Type)AutoAdd, it.current() ) );
-
- if ( mw->topDock() )
- mw->topDock()->installEventFilter( this );
- if ( mw->leftDock() )
- mw->leftDock()->installEventFilter( this );
- if ( mw->rightDock() )
- mw->rightDock()->installEventFilter( this );
- if ( mw->bottomDock() )
- mw->bottomDock()->installEventFilter( this );
-
- connect( mw, SIGNAL( dockWindowPositionChanged( QDockWindow* ) ),
- this, SLOT( onDockWindowPositionChanged( QDockWindow* ) ) );
-}
-
-/*!
- Name: windowName [private]
- Desc: Generate the dock window name.
-*/
-
-QString QtxDockAction::windowName( QDockWindow* dw ) const
-{
- QString name;
-
- if ( dw )
- {
- name = dw->name( "" );
- if ( name.isEmpty() )
- name = dw->caption();
- }
-
- return name;
-}
-
-/*!
- Name: autoAddDockWindow [private]
- Desc: Add the dock window if auto add property is setted.
-*/
-
-bool QtxDockAction::autoAddDockWindow( QDockWindow* dw )
-{
- if ( !isAutoAdd() )
- return false;
-
- return addDockWindow( dw );
-}
-
-/*!
- Name: autoLoadPlaceInfo [private]
- Desc: Retieve the dock window place geometry if auto place property is setted.
-*/
-
-void QtxDockAction::autoLoadPlaceInfo( QDockWindow* dw )
-{
- if ( isAutoPlace() )
- loadPlaceInfo( dw );
-}
-
-/*!
- Name: splitMenuText [private]
- Desc:
-*/
-
-void QtxDockAction::splitMenuText( QString& dock, QString& tool ) const
-{
- dock = tool = menuText();
- if ( !isSeparate() )
- return;
-
- QStringList lst = splitText( menuText(), "|" );
- if ( lst.count() < 2 )
- lst = splitText( menuText(), "and" );
-
- dock = lst.first();
- tool = lst.last();
-}
-
-/*!
- Name: splitText [private]
- Desc:
-*/
-
-QStringList QtxDockAction::splitText( const QString& str, const QString& sep ) const
-{
- QStringList res;
-
- int idx = str.lower().find( sep.lower() );
- if ( idx != -1 )
- {
- res.append( str.mid( 0, idx ).stripWhiteSpace() );
- res.append( str.mid( idx + sep.length() ).stripWhiteSpace() );
- }
-
- return res;
-}
-
-/*!
- Name: dockPlace [private]
- Desc:
-*/
-
-int QtxDockAction::dockPlace( const QString& dockName ) const
-{
- static QMap<QString, int> dockNameMap;
- if ( dockNameMap.isEmpty() )
- {
- dockNameMap["top"] = DockTop;
- dockNameMap["bottom"] = DockBottom;
- dockNameMap["left"] = DockLeft;
- dockNameMap["right"] = DockRight;
- dockNameMap["tornoff"] = DockTornOff;
- dockNameMap["torn_off"] = DockTornOff;
- dockNameMap["outside"] = DockTornOff;
- dockNameMap["undock"] = DockTornOff;
- dockNameMap["minimized"] = DockMinimized;
- dockNameMap["unmanaged"] = DockUnmanaged;
- }
-
- int res = -1;
- if ( dockNameMap.contains( dockName.lower() ) )
- res = dockNameMap[dockName.lower()];
- return res;
-}
-
-/*!
- Name: dockArea [private]
- Desc:
-*/
-
-QDockArea* QtxDockAction::dockArea( const int place ) const
-{
- if ( !mainWindow() )
- return 0;
-
- QDockArea* area = 0;
- switch ( place )
- {
- case DockTop:
- area = mainWindow()->topDock();
- break;
- case DockBottom:
- area = mainWindow()->bottomDock();
- break;
- case DockLeft:
- area = mainWindow()->leftDock();
- break;
- case DockRight:
- area = mainWindow()->rightDock();
- break;
- }
- return area;
-}
-
-/*!
- Name: loadGeometry [private]
- Desc:
-*/
-
-bool QtxDockAction::loadGeometry( QtxResourceMgr* resMgr, const QString& sec,
- const QString& name, GeomInfo& inf ) const
-{
- if ( !resMgr || sec.isEmpty() || name.isEmpty() )
- return false;
-
- QString tmpl = QString( "%1.%2" ).arg( name );
-
- inf.vis = resMgr->booleanValue( sec, tmpl.arg( "visible" ), inf.vis );
- inf.newLine = resMgr->booleanValue( sec, tmpl.arg( "new_line" ), inf.newLine );
-
- inf.index = resMgr->integerValue( sec, tmpl.arg( "index" ), inf.index );
- inf.offset = resMgr->integerValue( sec, tmpl.arg( "offset" ), inf.offset );
-
- inf.x = resMgr->integerValue( sec, tmpl.arg( "x" ), inf.x );
- inf.y = resMgr->integerValue( sec, tmpl.arg( "y" ), inf.y );
- inf.w = resMgr->integerValue( sec, tmpl.arg( "width" ), inf.w );
- inf.h = resMgr->integerValue( sec, tmpl.arg( "height" ), inf.h );
-
- inf.fixW = resMgr->integerValue( sec, tmpl.arg( "fixed_width" ), inf.fixW );
- inf.fixH = resMgr->integerValue( sec, tmpl.arg( "fixed_height" ), inf.fixH );
-
- int place = -1;
- if ( !resMgr->value( sec, tmpl.arg( "place" ), place ) )
- {
- QString placeStr;
- if ( resMgr->value( sec, tmpl.arg( "place" ), placeStr ) )
- place = dockPlace( placeStr );
- }
-
- if ( place >= DockUnmanaged && place <= DockMinimized )
- inf.place = place;
-
- return true;
-}
-
-/*!
- Name: saveGeometry [private]
- Desc:
-*/
-
-bool QtxDockAction::saveGeometry( QtxResourceMgr* resMgr, const QString& sec,
- const QString& name, const GeomInfo& inf ) const
-{
- if ( !resMgr || sec.isEmpty() || name.isEmpty() )
- return false;
-
- QString tmpl = QString( "%1.%2" ).arg( name );
-
- resMgr->setValue( sec, tmpl.arg( "visible" ), inf.vis );
- resMgr->setValue( sec, tmpl.arg( "new_line" ), inf.newLine );
- resMgr->setValue( sec, tmpl.arg( "index" ), inf.index );
- resMgr->setValue( sec, tmpl.arg( "offset" ), inf.offset );
- resMgr->setValue( sec, tmpl.arg( "x" ), inf.x );
- resMgr->setValue( sec, tmpl.arg( "y" ), inf.y );
- resMgr->setValue( sec, tmpl.arg( "width" ), inf.w );
- resMgr->setValue( sec, tmpl.arg( "height" ), inf.h );
- resMgr->setValue( sec, tmpl.arg( "fixed_width" ), inf.fixW );
- resMgr->setValue( sec, tmpl.arg( "fixed_height" ), inf.fixH );
- resMgr->setValue( sec, tmpl.arg( "place" ), inf.place );
-
- return true;
-}
-
-/*!
- Name: collectNames [private]
- Desc:
-*/
-
-void QtxDockAction::collectNames( const int place, QStringList& lst ) const
-{
- QPtrList<QDockWindow> winList;
- QDockArea* area = dockArea( place );
- if ( area )
- winList = area->dockWindowList();
- else
- winList = mainWindow()->dockWindows( (Qt::Dock)place );
-
- for ( QPtrListIterator<QDockWindow> it( winList ); it.current(); ++it )
- {
- QString name;
- if ( myInfo.contains( it.current() ) )
- name = myInfo[it.current()].name;
- if ( name.isEmpty() )
- name = windowName( it.current() );
- if ( name.isEmpty() )
- continue;
-
- lst.append( name );
- }
-}
-
-/*!
- Updates menu of action
-*/
-void QtxDockAction::updateMenus()
-{
- for ( MenuMap::Iterator it = myMenu.begin(); it != myMenu.end(); ++it )
- {
- QPopupMenu* pm = it.key();
- MenuInfo& inf = it.data();
-
- int toolId = findId( pm, inf.tool );
- int dockId = findId( pm, inf.dock );
-
- int index = pm->indexOf( dockId );
-
- if ( isSeparate() && !inf.tool )
- inf.tool = new QPopupMenu( pm );
-
- pm->removeItem( dockId );
- pm->removeItem( toolId );
-
- if ( !isSeparate() && inf.tool )
- {
- delete inf.tool;
- inf.tool = 0;
- }
-
- QString dock, tool;
- splitMenuText( dock, tool );
-
- if ( inf.dock )
- iconSet().isNull() ? pm->insertItem ( dock, inf.dock, -1, index ) :
- pm->insertItem ( iconSet(), dock, inf.dock, -1, index );
-
- if ( index >= 0 )
- index++;
-
- if ( inf.tool )
- iconSet().isNull() ? pm->insertItem ( tool, inf.tool, -1, index ) :
- pm->insertItem ( iconSet(), tool, inf.tool, -1, index );
- }
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxDockAction.h
-// Author: Sergey TELKOV
-
-#ifndef QTX_DOCKACTION_H
-#define QTX_DOCKACTION_H
-
-#include "QtxAction.h"
-
-#include <qevent.h>
-#include <qptrlist.h>
-#include <qpopupmenu.h>
-
-class QAction;
-class QDockArea;
-class QDockWindow;
-class QMainWindow;
-class QtxResourceMgr;
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-class QTX_EXPORT QtxDockAction : public QtxAction
-{
- Q_OBJECT
-
- Q_PROPERTY( bool autoAdd READ isAutoAdd WRITE setAutoAdd )
- Q_PROPERTY( bool autoPlace READ isAutoPlace WRITE setAutoPlace )
- Q_PROPERTY( bool separate READ isSeparate WRITE setSeparate )
-
-public:
- QtxDockAction( QMainWindow*, const char* = 0 );
- QtxDockAction( const QString&, const QString&, QMainWindow*, const char* = 0 );
- QtxDockAction( const QString&, const QIconSet&, const QString&, QMainWindow*, const char* = 0 );
- virtual ~QtxDockAction();
-
- QMainWindow* mainWindow() const;
-
- bool isAutoAdd() const;
- void setAutoAdd( const bool );
-
- bool isAutoPlace() const;
- void setAutoPlace( const bool );
-
- bool isSeparate() const;
- void setSeparate( const bool );
-
- virtual bool addTo( QWidget* );
- virtual bool addTo( QWidget*, const int );
- virtual bool removeFrom( QWidget* );
- virtual void setMenuText( const QString& );
-
- bool addDockWindow( QDockWindow* );
- bool removeDockWindow( QDockWindow* );
-
- virtual bool eventFilter( QObject*, QEvent* );
-
- virtual void storeGeometry( QDockWindow* = 0 );
- virtual void restoreGeometry( QDockWindow* = 0 ) const;
-
- virtual void loadGeometry( QtxResourceMgr*, const QString&, const bool = true );
- virtual void saveGeometry( QtxResourceMgr*, const QString&, const bool = true ) const;
-
-private slots:
- void onAboutToShow();
- void onToggled( bool );
- void onVisibilityChanged( bool );
- void onPopupDestroyed( QObject* );
- void onWindowDestroyed( QObject* );
- void onDockWindowPositionChanged( QDockWindow* );
-
-protected:
- virtual bool event( QEvent* );
-
-private:
- QAction* action( QDockWindow* ) const;
- QDockWindow* dockWindow( const QAction* ) const;
-
- void checkPopup( QPopupMenu* );
- void fillPopup( QPopupMenu* ) const;
- int findId( QPopupMenu*, QPopupMenu* ) const;
-
- void initialize( QMainWindow* );
- void updateInfo( QDockWindow* );
- bool isToolBar( QDockWindow* ) const;
- void dockWindows( QPtrList<QDockWindow>&, QMainWindow* = 0 ) const;
-
- QString windowName( QDockWindow* ) const;
- void savePlaceInfo( QDockWindow* );
- void loadPlaceInfo( QDockWindow* ) const;
- void loadPlaceInfo() const;
-
- bool autoAddDockWindow( QDockWindow* );
- void autoLoadPlaceInfo( QDockWindow* );
-
- void splitMenuText( QString&, QString& ) const;
- QStringList splitText( const QString&, const QString& ) const;
-
- QDockArea* dockArea( const int ) const;
- int dockPlace( const QString& ) const;
-
- void collectNames( const int, QStringList& ) const;
-
- void updateMenus();
-
- bool dockMainWindow( QMainWindow*, QObject* ) const;
-
-private:
- enum { AutoAdd = QEvent::User, LoadArea };
-
- typedef struct { bool vis, newLine;
- int place, index, offset;
- int x, y, w, h, fixW, fixH; } GeomInfo;
- typedef struct { QString name; QAction* a; } DockInfo;
- typedef struct { QPopupMenu *dock, *tool; } MenuInfo;
-
- typedef QMap<QDockWindow*, DockInfo> InfoMap;
- typedef QMap<QString, GeomInfo> GeomMap;
- typedef QMap<QPopupMenu*, MenuInfo> MenuMap;
-
-private:
- bool loadGeometry( QtxResourceMgr*, const QString&,
- const QString&, GeomInfo& ) const;
- bool saveGeometry( QtxResourceMgr*, const QString&,
- const QString&, const GeomInfo& ) const;
- void loadPlaceArea( const int, QMainWindow*, QDockArea*,
- const QPtrList<QDockWindow>&,
- const QMap<QDockWindow*, GeomInfo*>& ) const;
-
-private:
- InfoMap myInfo;
- MenuMap myMenu;
- GeomMap myGeom;
- QMainWindow* myMain;
- QStringList myNames;
-
- bool myAutoAdd;
- bool mySeparate;
- bool myAutoPlace;
-};
-
-#ifdef WIN32
-#pragma warning( default:4251 )
-#endif
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxGroupBox.cxx
-// Author: Sergey TELKOV
-
-#include "QtxGroupBox.h"
-
-#include <qhbox.h>
-#include <qlayout.h>
-#include <qtoolbutton.h>
-#include <qapplication.h>
-#include <qobjectlist.h>
-
-/*!
- Constructor
-*/
-QtxGroupBox::QtxGroupBox( QWidget* parent, const char* name )
-: QGroupBox( parent, name ),
-myContainer( 0 )
-{
-}
-
-/*!
- Constructor
-*/
-QtxGroupBox::QtxGroupBox( const QString& title, QWidget* parent, const char* name )
-: QGroupBox( title, parent, name ),
-myContainer( 0 )
-{
- initialize();
-}
-
-/*!
- Constructor
-*/
-QtxGroupBox::QtxGroupBox( int strips, Orientation o, QWidget* parent, const char* name )
-: QGroupBox( strips, o, parent, name ),
-myContainer( 0 )
-{
- initialize();
-}
-
-/*!
- Constructor
-*/
-QtxGroupBox::QtxGroupBox( int strips, Orientation o, const QString& title,
- QWidget* parent, const char* name )
-: QGroupBox( strips, o, title, parent, name ),
-myContainer( 0 )
-{
- initialize();
-}
-
-/*!
- Destructor
-*/
-QtxGroupBox::~QtxGroupBox()
-{
- delete myContainer;
-}
-
-/*!
- Creates horizontal box as container
-*/
-void QtxGroupBox::initialize()
-{
- myContainer = new QHBox( this, 0, WStyle_Customize | WStyle_NoBorderEx | WStyle_Tool );
-
- updateTitle();
-}
-
-#if QT_VER < 3
-
-/*!
- \return the width of the empty space between the items in the group and the frame of the group
-*/
-int QtxGroupBox::insideMargin() const
-{
- int m = 0;
- if ( layout() )
- m = layout()->margin();
- return m;
-}
-
-/*!
- \return the width of the empty space between each of the items in the group
-*/
-int QtxGroupBox::insideSpacing() const
-{
- int s = 0;
- if ( layout() )
- s = layout()->spacing();
- return s;
-}
-
-/*!
- Sets the width of the empty space between the items in the group and the frame of the group
-*/
-void QtxGroupBox::setInsideMargin( int m )
-{
- if ( layout() )
- layout()->setMargin( m );
-}
-
-/*!
- Sets the width of the empty space between each of the items in the group
-*/
-void QtxGroupBox::setInsideSpacing( int s )
-{
- if ( layout() )
- layout()->setSpacing( s );
-}
-
-#endif
-
-/*!
- Inserts title widget
- \param wid - new title widget
-*/
-void QtxGroupBox::insertTitleWidget( QWidget* wid )
-{
- if ( !myContainer )
- return;
-
- wid->reparent( myContainer, QPoint( 0, 0 ), true );
- wid->installEventFilter( this );
-
- updateTitle();
-}
-
-/*!
- Removes title widget
- \param wid - title widget
-*/
-void QtxGroupBox::removeTitleWidget( QWidget* wid )
-{
- if ( !myContainer || wid->parentWidget() != myContainer )
- return;
-
- wid->reparent( 0, QPoint( 0, 0 ), false );
- wid->removeEventFilter( this );
-
- updateTitle();
-}
-
-/*!
- Calculates margin
-*/
-void QtxGroupBox::adjustInsideMargin()
-{
- QApplication::sendPostedEvents( myContainer, QEvent::ChildInserted );
-
- myContainer->resize( myContainer->minimumSizeHint() );
-
- setInsideMargin( myContainer->height() );
-}
-
-/*!
- Sets the alignment of the group box title
-*/
-void QtxGroupBox::setAlignment( int align )
-{
- QGroupBox::setAlignment( align );
-
- updateTitle();
-}
-
-/*!
- Sets title of groop box
-*/
-void QtxGroupBox::setTitle( const QString& title )
-{
- QGroupBox::setTitle( title );
-
- updateTitle();
-}
-
-/*!
- Changes the layout of the group box
- \param strips - number of column/rows
- \param o - orientation
-*/
-void QtxGroupBox::setColumnLayout( int strips, Orientation o )
-{
- if ( myContainer )
- myContainer->reparent( 0, QPoint( 0, 0 ), false );
-
- QGroupBox::setColumnLayout( strips, o );
-
- if ( myContainer )
- myContainer->reparent( this, QPoint( 0, 0 ), false );
-
- updateTitle();
-}
-
-/*!
- Shows group box
-*/
-void QtxGroupBox::show()
-{
- QGroupBox::show();
-
- updateTitle();
-}
-
-/*!
- Updates group box
-*/
-void QtxGroupBox::update()
-{
- QGroupBox::update();
-
- updateTitle();
-}
-
-/*!
- \return the recommended size for the widget
-*/
-QSize QtxGroupBox::sizeHint() const
-{
- QSize sz = QGroupBox::sizeHint();
-
- int sw = titleSize().width();
-
- if ( myContainer )
- {
- if ( alignment() == AlignCenter )
- sw += 2 * ( myContainer->width() + 5 );
- else
- sw += 1 * ( myContainer->width() + 5 );
- }
-
- sw += frameRect().left();
-
- return QSize( QMAX( sz.width(), sw ), sz.height() );
-}
-
-/*!
- \return the recommended minimum size for the widget
-*/
-QSize QtxGroupBox::minimumSizeHint() const
-{
- QSize sz = QGroupBox::minimumSizeHint();
-
- int sw = titleSize().width() + myContainer ? myContainer->width() + 5 : 0;
-
- if ( myContainer )
- {
- if ( alignment() == AlignCenter )
- sw += 2 * ( myContainer->width() + 5 );
- else
- sw += 1 * ( myContainer->width() + 5 );
- }
-
- sw += frameRect().left();
-
- return QSize( QMAX( sz.width(), sw ), sz.height() );
-}
-
-/*!
- Custom event filter
-*/
-bool QtxGroupBox::eventFilter( QObject* obj, QEvent* e )
-{
- QEvent::Type type = e->type();
- if ( myContainer && obj->parent() == myContainer &&
- ( type == QEvent::Show || type == QEvent::ShowToParent ||
- type == QEvent::Hide || type == QEvent::HideToParent ) )
- QApplication::postEvent( this, new QCustomEvent( QEvent::User ) );
-
- return QGroupBox::eventFilter( obj, e );
-}
-
-/*!
- Custom resize event filter
-*/
-void QtxGroupBox::resizeEvent( QResizeEvent* e )
-{
- QGroupBox::resizeEvent( e );
-
- updateTitle();
-}
-
-/*!
- Custom child event filter
-*/
-void QtxGroupBox::childEvent( QChildEvent* e )
-{
- if ( e->type() == QEvent::ChildInserted && e->child() == myContainer )
- return;
-
- QGroupBox::childEvent( e );
-}
-
-/*!
- Event filter of custom items
-*/
-void QtxGroupBox::customEvent( QCustomEvent* )
-{
- updateTitle();
-}
-
-/*!
- On frame changed
-*/
-void QtxGroupBox::frameChanged()
-{
- updateTitle();
-}
-
-/*!
- \return size of title
-*/
-QSize QtxGroupBox::titleSize() const
-{
- QSize sz( 0, 0 );
-
- if ( layout() )
- {
- QSpacerItem* si = 0;
- for ( QLayoutIterator it = layout()->iterator(); it.current() && !si; ++it )
- si = it.current()->spacerItem();
- if ( si )
- sz = si->sizeHint();
- }
-
- int w = sz.width();
- int h = sz.height() + insideMargin();
-
- return QSize( w, h );
-}
-
-/*!
- Updates title
-*/
-void QtxGroupBox::updateTitle()
-{
- if ( !myContainer )
- return;
-
- int align = alignment();
- if ( align == AlignAuto )
- align = QApplication::reverseLayout() ? AlignRight : AlignLeft;
-
- if ( title().isEmpty() )
- align = AlignRight;
-
- QSize ts = titleSize();
-
- int m = 5;
-
- int w = frameRect().width() - ts.width();
- if ( align == AlignCenter )
- w = w / 2;
-
- w -= m;
-
- QApplication::sendPostedEvents( myContainer, QEvent::ChildInserted );
- myContainer->resize( myContainer->minimumSizeHint() );
-
- bool vis = false;
- const QObjectList* list = myContainer->children();
- if ( list )
- {
- for ( QObjectListIt it( *list ); it.current() && !vis; ++it )
- vis = it.current()->isWidgetType() &&
- ((QWidget*)it.current())->isVisibleTo( myContainer );
- }
-
- if ( myContainer->height() > ts.height() || myContainer->width() > w || !vis )
- myContainer->hide();
- else
- {
- int x = 0;
- if ( align == AlignRight )
- x = frameRect().left() + m;
- else
- x = frameRect().right() - myContainer->width() - m;
-
- int y = frameRect().top() - ( myContainer->height() - frameWidth() ) / 2;
-
- QPoint pos( x, QMAX( 0, y ) );
- pos = mapToGlobal( pos );
- if ( myContainer->parentWidget() )
- pos = myContainer->parentWidget()->mapFromGlobal( pos );
- myContainer->move( pos );
- myContainer->show();
- }
-
- updateGeometry();
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxGroupBox.h
-// Author: Sergey TELKOV
-
-#ifndef QTXGROUPBOX_H
-#define QTXGROUPBOX_H
-
-#include "Qtx.h"
-
-#include <qgroupbox.h>
-#include <qwidgetlist.h>
-
-class QTX_EXPORT QtxGroupBox : public QGroupBox
-{
- Q_OBJECT
-
-public:
- QtxGroupBox( QWidget* = 0, const char* = 0 );
- QtxGroupBox( const QString&, QWidget* = 0, const char* = 0 );
- QtxGroupBox( int, Orientation, QWidget* = 0, const char* = 0 );
- QtxGroupBox( int, Orientation, const QString&, QWidget* = 0, const char* = 0 );
- virtual ~QtxGroupBox();
-
-#if QT_VER < 3
- int insideMargin() const;
- int insideSpacing() const;
- void setInsideMargin( int );
- void setInsideSpacing( int );
-#endif
-
- virtual void setAlignment( int );
- virtual void setTitle( const QString& );
- virtual void setColumnLayout( int, Orientation );
-
- virtual void insertTitleWidget( QWidget* );
- virtual void removeTitleWidget( QWidget* );
-
- virtual void show();
- virtual void update();
-
- void adjustInsideMargin();
-
- virtual QSize sizeHint() const;
- virtual QSize minimumSizeHint() const;
-
- virtual bool eventFilter( QObject*, QEvent* );
-
-protected:
- virtual void frameChanged();
- virtual void childEvent( QChildEvent* );
- virtual void resizeEvent( QResizeEvent* );
- virtual void customEvent( QCustomEvent* );
-
-private:
- void initialize();
- void updateTitle();
- QSize titleSize() const;
-
-private:
- QWidget* myContainer;
-};
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxIntSpinBox.cxx
-// Author: Sergey TELKOV
-
-#include "QtxIntSpinBox.h"
-
-#include <qlineedit.h>
-#include <qapplication.h>
-
-/*!
- Constructor
-*/
-QtxIntSpinBox::QtxIntSpinBox( QWidget* parent, const char* name )
-: QSpinBox( parent, name ),
-myCleared( false ),
-myBlocked( false )
-{
- connect( editor(), SIGNAL( textChanged( const QString& ) ), this, SLOT( onTextChanged( const QString& ) ) );
-}
-
-/*!
- Constructor
-*/
-QtxIntSpinBox::QtxIntSpinBox( int min, int max, int step, QWidget* parent, const char* name )
-: QSpinBox( min, max, step, parent, name ),
-myCleared( false ),
-myBlocked( false )
-{
- connect( editor(), SIGNAL( textChanged( const QString& ) ), this, SLOT( onTextChanged( const QString& ) ) );
-}
-
-/*!
- Destructor
-*/
-QtxIntSpinBox::~QtxIntSpinBox()
-{
-}
-
-/*!
- \return true if spin box is cleared
-*/
-bool QtxIntSpinBox::isCleared() const
-{
- return myCleared;
-}
-
-/*!
- Changes cleared status of spin box
- \param on - new status
-*/
-void QtxIntSpinBox::setCleared( const bool on )
-{
- if ( myCleared == on )
- return;
-
- myCleared = on;
- updateDisplay();
-}
-
-/*!
- Changes value of spin box
- \param val - new value of spin box
-*/
-void QtxIntSpinBox::setValue( int value )
-{
- myCleared = false;
-
- QSpinBox::setValue( value );
-}
-
-/*!
- Custom event filter
-*/
-bool QtxIntSpinBox::eventFilter( QObject* o, QEvent* e )
-{
- if ( !myCleared || o != editor() || !editor()->text().stripWhiteSpace().isEmpty() )
- return QSpinBox::eventFilter( o, e );
-
- if ( e->type() == QEvent::FocusOut || e->type() == QEvent::Leave || e->type() == QEvent::Hide )
- return false;
-
- if ( e->type() == QEvent::KeyPress &&
- ( ((QKeyEvent*)e)->key() == Key_Tab || ((QKeyEvent*)e)->key() == Key_BackTab ) )
- {
- QApplication::sendEvent( this, e );
- return true;
- }
-
- return QSpinBox::eventFilter( o, e );
-}
-
-/*!
- Sets integer value by text in editor
-*/
-void QtxIntSpinBox::interpretText()
-{
- myCleared = false;
-
- QSpinBox::interpretText();
-}
-
-/*!
- Updates text of editor
-*/
-void QtxIntSpinBox::updateDisplay()
-{
- if ( myBlocked )
- return;
-
- bool block = myBlocked;
- myBlocked = true;
-
- QSpinBox::updateDisplay();
-
- if ( myCleared )
- editor()->clear();
- else if ( editor()->hasFocus() )
- {
- if ( editor()->text() == specialValueText() )
- editor()->selectAll();
- else
- editor()->setSelection( prefix().length(), editor()->text().length() - prefix().length() - suffix().length() );
- }
-
- myBlocked = block;
-}
-
-/*!
- Custom handler for leave event
-*/
-void QtxIntSpinBox::leaveEvent( QEvent* e )
-{
- if ( !myCleared )
- QSpinBox::leaveEvent( e );
-}
-
-/*!
- Custom handler for wheel event
-*/
-void QtxIntSpinBox::wheelEvent( QWheelEvent* e )
-{
- if ( !isEnabled() )
- return;
-
- QSpinBox::wheelEvent( e );
- updateDisplay();
-}
-
-/*!
- SLOT: called if text is changed
-*/
-void QtxIntSpinBox::onTextChanged( const QString& )
-{
- if ( !myBlocked )
- myCleared = false;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxIntSpinBox.h
-// Author: Sergey TELKOV
-
-#ifndef QTXINTSPINBOX_H
-#define QTXINTSPINBOX_H
-
-#include "Qtx.h"
-
-#include <qspinbox.h>
-
-class QTX_EXPORT QtxIntSpinBox : public QSpinBox
-{
- Q_OBJECT
-
-public:
- QtxIntSpinBox( QWidget* = 0, const char* = 0 );
- QtxIntSpinBox( int, int, int = 1, QWidget* = 0, const char* = 0 );
- virtual ~QtxIntSpinBox();
-
- bool isCleared() const;
- virtual void setCleared( const bool );
-
- virtual bool eventFilter( QObject*, QEvent* );
-
-public slots:
- virtual void setValue( int );
-
-protected slots:
- virtual void onTextChanged( const QString& );
-
-protected:
- virtual void interpretText();
- virtual void updateDisplay();
- virtual void leaveEvent( QEvent* );
- virtual void wheelEvent( QWheelEvent* );
-
-private:
- bool myCleared;
- bool myBlocked;
-};
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxListAction.cxx
-// Author: Sergey TELKOV (Based on code by Eugene AKSENOV)
-
-#include "QtxListAction.h"
-
-#include <qvbox.h>
-#include <qlabel.h>
-#include <qlayout.h>
-#include <qtooltip.h>
-#include <qlistbox.h>
-#include <qtoolbar.h>
-#include <qwmatrix.h>
-#include <qpopupmenu.h>
-#include <qtoolbutton.h>
-#include <qobjectlist.h>
-#include <qapplication.h>
-
-static const char* list_arrow_icon[] = {
-"10 6 2 1",
-"# c #000000",
-" c none",
-" ",
-" ####### ",
-" ##### ",
-" ### ",
-" # ",
-" "
-};
-
-/*!
- \class QtxListAction::ToolButton
- Custom tool button
-*/
-class QtxListAction::ToolButton : public QToolButton
-{
-public:
- ToolButton( QtxListAction*, QWidget* = 0, const char* = 0 );
- virtual ~ToolButton();
-
- virtual QSize sizeHint() const;
-
-private:
- QtxListAction* myAction;
-};
-
-/*!
- Constructor
-*/
-QtxListAction::ToolButton::ToolButton( QtxListAction* a, QWidget* parent, const char* name )
-: QToolButton( parent, name ),
-myAction( a )
-{
- setIconSet( QPixmap( list_arrow_icon ) );
-}
-
-/*!
- Destructor
-*/
-QtxListAction::ToolButton::~ToolButton()
-{
- if ( myAction )
- myAction->controlDeleted( this );
-}
-
-/*!
- \return the recommended size for the widget
-*/
-QSize QtxListAction::ToolButton::sizeHint() const
-{
- QSize sz = iconSet().pixmap().size();
- return QSize( sz.width() + 2, sz.height() + 2 );
-}
-
-/*!
- Constructs an list action with given parent and name. If toggle is true the
- action will be a toggle action, otherwise it will be a command action.
-*/
-QtxListAction::QtxListAction( QObject* parent, const char* name, bool toggle )
-: QtxAction( parent, name, toggle ),
-myFrame( 0 ),
-myMode( Item ),
-myRaise( false )
-{
- initialize();
-}
-
-/*!
- This constructor creates an action with the following properties: the
- description text, the icon or iconset icon, the menu text and keyboard
- accelerator. It is a child of given parent and named specified name.
- If toggle is true the action will be a toggle action, otherwise it will
- be a command action.
-*/
-
-QtxListAction::QtxListAction( const QString& text, const QIconSet& icon,
- const QString& menuText, int accel,
- QObject* parent, const char* name, bool toggle )
-: QtxAction( text, icon, menuText, accel, parent, name, toggle ),
-myFrame( 0 ),
-myMode( Item ),
-myRaise( false )
-{
- initialize();
-}
-
-/*!
- This constructor creates an action with the following properties: the
- description text, the menu text and keyboard accelerator. It is a child
- of given parent and named specified name. If toggle is true the action
- will be a toggle action, otherwise it will be a command action.
-*/
-
-QtxListAction::QtxListAction( const QString& text, const QString& menuText,
- int accel, QObject* parent, const char* name, bool toggle )
-: QtxAction( text, menuText, accel, parent, name, toggle ),
-myFrame( 0 ),
-myMode( Item ),
-myRaise( false )
-{
- initialize();
-}
-
-/*!
- Destructor.
-*/
-
-QtxListAction::~QtxListAction()
-{
- if ( myFrame ) {
- myFrame->myAction = 0;
- delete myFrame;
- myFrame = 0;
- }
-}
-
-/*!
- Name: popupMode [public]
- Desc: Returns popup mode. If popup mode "Item" (default) then action will
- be added into popup menu as menu item. If popup mode "SubMenu" then
- action will be added into popup menu as sub menu with list of items.
-*/
-
-int QtxListAction::popupMode() const
-{
- return myMode;
-}
-
-/*!
- Name: setPopupMode [public]
- Desc: Set the popup mode. Popup mode define way in this action will be
- added into popup menu. This function should be used before addTo.
-*/
-
-void QtxListAction::setPopupMode( const int mode )
-{
- myMode = mode;
-}
-
-/*!
- \return list of names
-*/
-QStringList QtxListAction::names() const
-{
- QStringList lst;
- if ( myFrame )
- lst = myFrame->names();
- return lst;
-}
-
-/*!
- Name: addNames [public]
- Desc: Fills the list of actions. Removes the old contents from
- the list if 'clear' is true.
-*/
-
-void QtxListAction::addNames( const QStringList& names, bool clear )
-{
- if ( !myFrame )
- return;
-
- if ( clear )
- myFrame->clear();
-
- myFrame->addNames( names );
-
- QStringList lst = myFrame->names();
- for ( PopupsMap::Iterator pit = myPopups.begin(); pit != myPopups.end(); ++pit )
- {
- int i = 1;
- QPopupMenu* pm = (QPopupMenu*)pit.key();
- for ( QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it )
- pit.data().popup->insertItem( *it, i++ );
- pm->setItemEnabled( pit.data().id, isEnabled() && pit.data().popup->count() );
- }
-
- for ( ButtonsMap::Iterator bit = myButtons.begin(); bit != myButtons.end(); ++bit )
- {
- bit.data().drop->setEnabled( isEnabled() && !lst.isEmpty() );
- bit.data().main->setEnabled( isEnabled() && !lst.isEmpty() );
- }
-}
-
-/*!
- Name: addTo [virtual public]
- Desc: Adds this control to 'popup' or 'toolbar'.
-*/
-
-bool QtxListAction::addTo( QWidget* w )
-{
- if ( myButtons.contains( w ) || myPopups.contains( w ) )
- return false;
-
- if ( !w->inherits( "QPopupMenu" ) || popupMode() != SubMenu )
- if ( !QtxAction::addTo( w ) )
- return false;
-
-#if QT_VER < 3
- if ( w->children() )
- addedTo( (QWidget*)w->children()->getLast(), w );
-#endif
-
- if ( w->inherits( "QToolBar" ) )
- {
- Buttons& entry = myButtons[w];
- QHBox* dropWrap = new QHBox( w );
- entry.drop = new ToolButton( this, dropWrap, "qt_dockwidget_internal" );
-
- entry.drop->setTextLabel( text() );
- entry.drop->setToggleButton( true );
- entry.drop->setAutoRaise( entry.main->autoRaise() );
-
- entry.main->setEnabled( isEnabled() && !myFrame->names().isEmpty() );
- entry.drop->setEnabled( isEnabled() && !myFrame->names().isEmpty() );
-
- entry.main->installEventFilter( this );
- entry.drop->installEventFilter( this );
-
- QToolTip::add( entry.drop, toolTip(), myTipGroup, statusTip() );
-
- connect( entry.drop, SIGNAL( toggled( bool ) ), this, SLOT( onExpand( bool ) ) );
- }
- else if ( w->inherits( "QPopupMenu" ) && popupMode() == SubMenu )
- {
- Popups entry;
- QPopupMenu* pm = (QPopupMenu*)w;
-
- entry.popup = new QPopupMenu( pm );
- entry.id = pm->insertItem( text(), entry.popup );
-
- int i = 1;
- QStringList lst = myFrame->names();
- for ( QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it )
- {
- int id = entry.popup->insertItem( *it );
- entry.popup->setItemParameter( id, i++ );
- }
- pm->setItemEnabled( entry.id, isEnabled() && entry.popup->count() );
- myPopups.insert( w, entry );
-
- connect( entry.popup, SIGNAL( activated( int ) ), this, SLOT( onActivated( int ) ) );
- }
-
-#if QT_VER >= 3
- connect( w, SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
-#endif
-
- return true;
-}
-
-/*!
- Name: addTo [virtual public]
- Desc: Adds this control to 'popup' or 'toolbar'. Allow to specify index
- for adding into 'popup'.
-*/
-
-bool QtxListAction::addTo( QWidget* w, const int idx )
-{
- return QtxAction::addTo( w, idx );
-}
-
-/*!
- Name: removeFrom [virtual public]
- Desc: Removes this control from 'popup' or 'toolbar'.
-*/
-
-bool QtxListAction::removeFrom( QWidget* w )
-{
- if ( !QtxAction::removeFrom( w ) )
- return false;
-
- if ( w->inherits( "QToolBar" ) )
- {
- if ( myFrame )
- myFrame->hide();
-
- if ( myButtons.contains( w ) )
- {
- Buttons& entry = myButtons[w];
-
- if ( entry.drop->parent() && entry.drop->parent()->parent() == w )
- delete entry.drop->parent();
- else
- delete entry.drop;
- }
- myButtons.remove( w );
- }
- else if ( w->inherits( "QPopupMenu" ) )
- myPopups.remove( w );
-
-#if QT_VER >= 3
- disconnect( w, SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
-#endif
-
- return true;
-}
-
-/*!
- Name: setEnabled [virtual public slot]
- Desc: Enables/disables this control.
-*/
-
-void QtxListAction::setEnabled( bool enable )
-{
- QtxAction::setEnabled( enable );
-
- bool isOn = enable && !myFrame->names().isEmpty();
-
- for ( ButtonsMap::Iterator bit = myButtons.begin(); bit != myButtons.end(); ++bit )
- {
- bit.data().drop->setEnabled( isOn );
- bit.data().main->setEnabled( isOn );
- }
-
- for ( PopupsMap::Iterator pit = myPopups.begin(); pit != myPopups.end(); ++pit )
- {
- QPopupMenu* cont = (QPopupMenu*)pit.key();
- cont->setItemEnabled( pit.data().id, isOn );
- }
-}
-
-/*!
- Name: setMaxLines [public]
- Desc: Sets max number of lines that list frame shows
- without vertical scroll bar. Default value is 5.
-*/
-
-void QtxListAction::setMaxLines( int nlines )
-{
- myFrame->setMaxLines( nlines );
-}
-
-/*!
- Name: setMaxLineChars [public]
- Desc: Sets max number of characters in a line which list frame shows
- without truncation. Default value is 12 (the widest char size is used).
-*/
-
-void QtxListAction::setMaxLineChars( int nchars )
-{
- myFrame->setMaxLineChars( nchars );
-}
-
-/*!
- Name: setComment [public]
- Desc: Sets the format Qt string for comments displayed under the list
- of actions for one action and for several actions.
- Ex. "Undo %1 actions" format string will work as "Undo 3 actions"
- when 3 actions are selected. The default format string is "%1".
-*/
-
-void QtxListAction::setComment( const QString& c, const QString& sc )
-{
- if ( !myFrame )
- return;
-
- myFrame->setSingleComment( sc.isEmpty() ? c : sc );
- myFrame->setMultipleComment( c );
-}
-
-/*!
- Name: eventFilter [virtual public]
- Desc: Reimplemented to paint the tool buttons in 2D/3D.
-*/
-
-bool QtxListAction::eventFilter( QObject* o, QEvent* e )
-{
- if ( !myRaise && ( e->type() == QEvent::Enter || e->type() == QEvent::Leave ) )
- {
- QWidget* obj = 0;
- QWidget* wid = widget( (QWidget*)o );
- if ( o == mainButton( wid ) )
- obj = dropButton( wid );
- else if ( o == dropButton( wid ) )
- obj = mainButton( wid );
-
- if ( obj )
- {
- myRaise = true;
- QApplication::sendEvent( obj, e );
- obj->repaint();
- myRaise = false;
- }
- }
- return QObject::eventFilter( o, e );
-}
-
-/*!
- Name: addedTo [protected]
- Desc: Reimplemented for internal reasons.
-*/
-
-void QtxListAction::addedTo( QWidget* actionWidget, QWidget* container )
-{
-#if QT_VER >= 3
- QtxAction::addedTo( actionWidget, container );
-#endif
-
- if ( !container->inherits( "QToolBar" ) )
- return;
-
- Buttons entry;
- entry.main = (QToolButton*)actionWidget;
-
- myButtons.insert( container, entry );
-}
-
-/*!
- Name: initialize [private]
- Desc: Initialization of object QtxListAction.
-*/
-
-void QtxListAction::initialize()
-{
- myTipGroup = new QToolTipGroup( this );
-
- myFrame = new QtxListFrame( this, qApp->mainWidget() );
- myFrame->setMaxLines( 5 );
- myFrame->setMaxLineChars( 7 );
-
- myFrame->hide();
-
- connect( myFrame, SIGNAL( hided() ), this, SLOT( onHided() ) );
- connect( this, SIGNAL( activated() ), this, SLOT( onSingle() ) );
- connect( myFrame, SIGNAL( selected( int ) ), this, SLOT( onMultiple( int ) ) );
-
- connect( myTipGroup, SIGNAL( removeTip() ), this, SLOT( clearStatusText() ) );
- connect( myTipGroup, SIGNAL( showTip( const QString& ) ), this, SLOT( showStatusText( const QString& ) ) );
-}
-
-/*!
- Name: onSingle [private slot]
- Desc: Called when a single action is selected.
-*/
-
-void QtxListAction::onSingle()
-{
- emit activated( 1 );
-}
-
-/*!
- Name: onMultiple [private slot]
- Desc: Called when multiple actions are selected.
-*/
-
-void QtxListAction::onMultiple( int numActions )
-{
- if ( myFrame )
- myFrame->hide();
-
- if ( numActions > 0 )
- emit activated( numActions );
-}
-
-/*!
- Name: onExpand [private slot]
- Desc: Activates the list of actions.
-*/
-
-void QtxListAction::onExpand( bool on )
-{
- const QObject* obj = sender();
- if ( on )
- {
- QWidget* wid = widget( (QToolButton*)obj );
- QToolButton* main = mainButton( wid );
- myFrame->setOwner( main );
- if ( main )
- myFrame->show();
- }
- else
- myFrame->hide();
-}
-
-/*!
- SLOT: called when frame is hidden
-*/
-void QtxListAction::onHided()
-{
- for ( ButtonsMap::Iterator bit = myButtons.begin(); bit != myButtons.end(); ++bit )
- {
- bool block = bit.data().drop->signalsBlocked();
- bit.data().drop->blockSignals( true );
- bit.data().drop->setOn( false );
- bit.data().drop->blockSignals( block );
- }
-}
-
-/*!
- Name: onActivated [private slot]
- Desc: Called when a sub menu item is activated.
-*/
-
-void QtxListAction::onActivated( int id )
-{
- QPopupMenu* pm = (QPopupMenu*)sender();
- int num = pm->itemParameter( id );
- if ( num > 0 )
- emit activated( num );
-}
-
-/*!
- Name: onDestroyed [private slot]
- Desc: Called when a container widget is destroyed.
-*/
-
-void QtxListAction::onDestroyed( QObject* obj )
-{
- if ( !obj->isWidgetType() )
- return;
-
- myPopups.remove( (QWidget*)obj );
- myButtons.remove( (QWidget*)obj );
-}
-
-/*!
- Name: widget [private]
- Desc: Returns container widget for specified control.
-*/
-
-QWidget* QtxListAction::widget( QWidget* obj ) const
-{
- QWidget* wid = 0;
- for ( PopupsMap::ConstIterator pit = myPopups.begin(); pit != myPopups.end() && !wid; ++pit )
- if ( pit.data().popup == obj )
- wid = pit.key();
-
- for ( ButtonsMap::ConstIterator bit = myButtons.begin(); bit != myButtons.end() && !wid; ++bit )
- if ( bit.data().main == obj || bit.data().drop == obj )
- wid = bit.key();
-
- return wid;
-}
-
-/*!
- Name: listPopup [private]
- Desc: Returns sub popup menu widget for specified container.
-*/
-
-QPopupMenu* QtxListAction::listPopup( QWidget* wid ) const
-{
- QPopupMenu* p = 0;
- if ( myPopups.contains( wid ) )
- p = myPopups[wid].popup;
- return p;
-}
-
-/*!
- Name: mainButton [private]
- Desc: Returns main tool button for specified container.
-*/
-
-QToolButton* QtxListAction::mainButton( QWidget* wid ) const
-{
- QToolButton* mb = 0;
- if ( myButtons.contains( wid ) )
- mb = myButtons[wid].main;
- return mb;
-}
-
-/*!
- Name: dropButton [private]
- Desc: Returns drop tool button for specified container.
-*/
-
-QToolButton* QtxListAction::dropButton( QWidget* wid ) const
-{
- QToolButton* db = 0;
- if ( myButtons.contains( wid ) )
- db = myButtons[wid].drop;
- return db;
-}
-
-/*!
- Name: controlDeleted [private]
- Desc: Called when action child controls deleted.
-*/
-
-void QtxListAction::controlDeleted( QWidget* wid )
-{
- QWidget* w = 0;
- for ( ButtonsMap::Iterator it = myButtons.begin(); it != myButtons.end() && !w; ++it )
- {
- if ( it.data().main == wid || it.data().drop == wid )
- w = it.key();
- }
-
- if ( w )
- {
- if ( myFrame )
- myFrame->hide();
-
- myButtons.remove( w );
- }
-}
-
-/*!
- \class QtxListFrame
- Frame for the list of actions
-*/
-class QtxListFrame::ScrollEvent : public QCustomEvent
-{
-public:
- enum { Scroll = User + 1 };
-
- ScrollEvent( bool down ) : QCustomEvent( Scroll ), myDown( down ) {};
- virtual ~ScrollEvent() {};
-
- bool isDown() const { return myDown; };
-
-private:
- bool myDown;
-};
-
-/*!
- Class: QtxListAction
- Level: Public
-*/
-
-/*!
- Constructor
-*/
-QtxListFrame::QtxListFrame( QtxListAction* a, QWidget* parent, WFlags f )
-: QFrame( parent, 0, WStyle_Customize | WStyle_NoBorderEx | WType_Popup | WStyle_Tool | WStyle_StaysOnTop ),
-myList( 0 ),
-myOwner( 0 ),
-myAction( a ),
-myComment( 0 ),
-myMaxLines( 5 ),
-myMaxLineChars( 10 ),
-myScrollVal( 0 ),
-myScrollBlock( false )
-{
- QVBoxLayout* theLayout = new QVBoxLayout( this, 3 );
- theLayout->setResizeMode( QLayout::FreeResize );
-
- myList = new QListBox( this );
- myList->setSelectionMode( QListBox::Multi );
- myList->setHScrollBarMode( QScrollView::AlwaysOff );
- myList->setFocusPolicy( NoFocus );
-
- QPalette p = myList->palette();
- p.setColor( QPalette::Inactive, QColorGroup::Highlight,
- p.color( QPalette::Active, QColorGroup::Highlight ) );
- p.setColor( QPalette::Inactive, QColorGroup::HighlightedText,
- p.color( QPalette::Active, QColorGroup::HighlightedText ) );
- myList->setPalette( p );
-
- /* We'll have the vertical scroll bar only and
- truncate the names which are too wide */
- connect( myList, SIGNAL( contentsMoving( int, int ) ), this, SLOT( onScroll( int, int ) ) );
-
- myComment = new QLabel( this );
- myComment->setFrameStyle( Panel | Sunken );
- myComment->setAlignment( AlignCenter );
- myMultipleComment = "%1";
-
- theLayout->addWidget( myList );
- theLayout->addWidget( myComment );
-
- setFrameStyle( Panel | Raised );
-}
-
-/*!
- Destructor
-*/
-QtxListFrame::~QtxListFrame()
-{
- if ( myAction )
- myAction->myFrame = 0;
-}
-
-/*!
- Clears list of names [ public ]
-*/
-
-void QtxListFrame::clear()
-{
- myNames.clear();
- setNames( myNames );
-}
-
-/*!
- Adds a names to the list. Truncates the name to fit to the frame width.
- Use QtxListAction::setMaxLineChar( int ) to set the width in characters. [ public ]
-*/
-
-void QtxListFrame::addNames( const QStringList& names )
-{
- for ( QStringList::ConstIterator it = names.begin(); it != names.end(); ++it )
- myNames.append( *it );
- setNames( myNames );
-}
-
-/*!
- Sets a names to the list. Truncates the name to fit to the frame width.
- Use QtxListAction::setMaxLineChar( int ) to set the width in characters. [ public ]
-*/
-
-void QtxListFrame::setNames( const QStringList& names )
-{
- if ( !myList )
- return;
-
- myList->clear();
-
- for ( QStringList::ConstIterator it = names.begin(); it != names.end(); ++it )
- {
- QString s = *it;
- QFontMetrics fm = myList->fontMetrics();
- int maxW = myMaxLineChars * fm.maxWidth();
- int w = fm.width( s );
- if ( w > maxW )
- {
- QString extra( "..." );
- int len = s.length();
- int extraLen = fm.width( extra ) + 1;
- while ( true )
- {
- w = fm.width( s, --len );
- if ( w + extraLen < maxW )
- {
- s = s.left( len );
- break;
- }
- }
- s += extra;
- }
- myList->insertItem( s );
- }
-}
-
-/*!
- \return list of names
-*/
-const QStringList QtxListFrame::names() const
-{
- return myNames;
-}
-
-/*!
- Sets max number of lines shown without activation of vertical scroll bar. [ public ]
-*/
-
-void QtxListFrame::setMaxLines( int maxLines )
-{
- myMaxLines = maxLines;
-}
-
-/*!
- Sets max number of chars in line ( the rest will be truncated ). [ public ]
-*/
-
-void QtxListFrame::setMaxLineChars( int maxChars )
-{
- if ( myMaxLineChars == maxChars )
- return;
-
- myMaxLineChars = maxChars;
- setNames( myNames );
-}
-
-/*!
- Sets the format of single comment. [ public ]
-*/
-
-void QtxListFrame::setSingleComment( const QString& comment )
-{
- mySingleComment = comment;
- setNames( myNames );
- updateComment();
-}
-
-/*!
- Sets the format of multiple comment. [ public ]
-*/
-
-void QtxListFrame::setMultipleComment( const QString& comment )
-{
- myMultipleComment = comment;
- setNames( myNames );
- updateComment();
-}
-
-/*!
- Updates comment display. [ public ]
-*/
-
-void QtxListFrame::updateComment()
-{
- QString com;
- int selNum = selected();
- if ( selNum > 1 )
- com = myMultipleComment;
- else if ( selNum > 0 && !mySingleComment.isEmpty() )
- com = mySingleComment;
-
- if ( !com.isEmpty() )
- com = com.arg( selNum );
-
- myComment->setText( com );
-}
-
-/*!
- Sets owner
- \param wo - new owner
-*/
-void QtxListFrame::setOwner( QWidget* wo )
-{
- myOwner = wo;
- if ( myOwner )
- {
- QPoint lpos;
- if ( myOwner->parentWidget() && myOwner->parentWidget()->inherits( "QToolBar" ) &&
- ((QToolBar*)myOwner->parentWidget())->orientation() == Qt::Vertical )
- lpos = QPoint( myOwner->x() + myOwner->width() + 2, myOwner->y() );
- else
- lpos = QPoint( myOwner->x(), myOwner->y() + myOwner->height() + 2 );
- QPoint gpos = myOwner->parentWidget() ? myOwner->parentWidget()->mapToGlobal( lpos )
- : myOwner->mapToGlobal( lpos );
- if ( parentWidget() )
- move( parentWidget()->mapFromGlobal( gpos ) );
- else
- move( gpos );
- }
-}
-
-/*!
- Validates the action. [ private slot ]
-*/
-
-void QtxListFrame::accept()
-{
- emit selected( selected() );
-}
-
-/*!
- Cancels the action. [ private slot ]
-*/
-
-void QtxListFrame::reject()
-{
- emit selected( 0 );
-}
-
-/*!
- Initializes / shows the frame. [ virtual public slot ]
-*/
-
-void QtxListFrame::show()
-{
- int cnt = (int)myList->count();
- if ( cnt )
- {
- myScrollVal = 0;
- myList->setTopItem( 0 );
- myList->clearSelection();
- myList->setMinimumSize( 0, ( QMIN( cnt + 1, myMaxLines ) ) * myList->itemHeight() + 1 );
- setSelected( 1 );
-
- int linstep = myList->itemHeight();
- myList->verticalScrollBar()->setLineStep( linstep );
- myList->verticalScrollBar()->setPageStep( myMaxLines * linstep );
-
- QFontMetrics fm = myList->fontMetrics();
- layout()->invalidate();
- int maxHeight = layout()->minimumSize().height() + layout()->margin();
- int maxWidth = myMaxLineChars * fm.maxWidth();
- for ( uint i = 0; i <= myList->count(); i++ )
- maxWidth = QMAX( maxWidth, fm.width( myList->text( i ) ) );
-
- resize( width(), maxHeight );
-
- myList->updateGeometry();
-
- QApplication::sendPostedEvents();
-
- myList->resizeContents( myList->contentsWidth(),
- myList->itemHeight() * cnt );
- if ( myList->contentsHeight() > myList->visibleHeight() )
- maxWidth += myList->verticalScrollBar()->width();
-
- QString single = mySingleComment.arg( cnt );
- QString multi = myMultipleComment.arg( cnt );
- int comWidth = QMAX( myComment->fontMetrics().width( single ), myComment->fontMetrics().width( multi ) );
- if ( myComment->frameWidth() )
- comWidth += myComment->fontMetrics().width( "x" );
-
- maxWidth = QMAX( maxWidth, comWidth );
-
- resize( maxWidth, maxHeight );
- updateComment();
-
- qApp->installEventFilter( this );
-
- QFrame::show();
- }
-}
-
-/*!
- Cleanup. [ virtual public slot ]
-*/
-
-void QtxListFrame::hide()
-{
- qApp->removeEventFilter( this );
- QFrame::hide();
- emit hided();
-}
-
-/*!
- Processes KeyUp/KeyDown, PageUp/PageDown, CR and Esc keys.
- Returns 'true' if event is eaten, 'false' otherwise. [ private ]
-*/
-
-bool QtxListFrame::handleKeyEvent( QObject* , QKeyEvent* e )
-{
- if ( e->type() == QEvent::KeyRelease )
- return true;
-
- int selNum = selected();
- switch( e->key() )
- {
- case Key_Up:
- setSelected( QMAX( 1, selNum - 1 ) );
- break;
- case Key_Down:
- setSelected( QMAX( 1, selNum + 1 ) );
- break;
- case Key_PageUp:
- setSelected( QMAX( 1, selNum - myMaxLines ) );
- break;
- case Key_PageDown:
- setSelected( selNum += myMaxLines );
- break;
- case Key_Home:
- setSelected( 1 );
- break;
- case Key_End:
- setSelected( myList->count() );
- break;
- case Key_Return:
- accept();
- break;
- case Key_Escape:
- reject();
- break;
- }
- return true;
-}
-
-/*!
- Selects items on move, validates on button release. If object 'o' is not our name list,
- we close the frame. Returns 'true' if event is eaten, 'false' otherwise. [ private ]
-*/
-
-bool QtxListFrame::handleMouseEvent( QObject* o, QMouseEvent* e )
-{
- switch( e->type() )
- {
- case QEvent::MouseButtonPress:
- {
- if ( o != myList->viewport() && !isPopup() )
- reject();
- return true;
- }
- case QEvent::MouseMove:
- {
- if ( o == myList->viewport() )
- {
- QListBoxItem* lbi = myList->itemAt( e->pos() );
- if ( lbi )
- setSelected( myList->index( lbi ) + 1 );
- }
- break;
- }
- case QEvent::MouseButtonRelease:
- {
- if ( o == myList->viewport() )
- accept();
- else
- reject();
- break;
- }
- default:
- break;
- }
- return true;
-}
-
-/*!
- Custom event filter
-*/
-bool QtxListFrame::event( QEvent* e )
-{
- if ( e->type() != (int)ScrollEvent::Scroll )
- return QFrame::event( e );
-
- ScrollEvent* se = (ScrollEvent*)e;
- if ( se->isDown() )
- setSelected( myList->topItem() + myList->numItemsVisible() );
- else
- setSelected( myList->topItem() + 1 );
-
- return true;
-}
-
-/*!
- Watches mouse events on the viewport of the list. [ virtual public ]
-*/
-
-bool QtxListFrame::eventFilter( QObject* o, QEvent* e )
-{
- bool isKeyEvent = ( e->type() == QEvent::KeyPress ||
- e->type() == QEvent::KeyRelease );
- bool isMouseEvent = ( e->type() == QEvent::MouseMove ||
- e->type() == QEvent::MouseButtonPress ||
- e->type() == QEvent::MouseButtonRelease ||
- e->type() == QEvent::MouseButtonDblClick );
-
- if ( isKeyEvent )
- {
- if ( handleKeyEvent( o, ( QKeyEvent* )e ) )
- return true;
- }
- else if ( isMouseEvent && o != myList->verticalScrollBar() )
- {
- if ( handleMouseEvent( o, ( QMouseEvent*)e ) )
- return true;
- }
-
- if ( o != this && ( e->type() == QEvent::Resize || e->type() == QEvent::Move ) )
- setOwner( myOwner );
-
- return QFrame::eventFilter( o, e );
-}
-
-/*!
- Selects operations while scrolling the list. [ private slot ]
-*/
-
-void QtxListFrame::onScroll( int x, int y )
-{
- int dx = y - myScrollVal;
- if ( !myScrollBlock )
- QApplication::postEvent( this, new ScrollEvent( dx > 0 ) );
- myScrollVal = y;
-}
-
-/*!
- Selects the actions [ 0 - lastSel ]. [ public ]
-*/
-
-void QtxListFrame::setSelected( const int lastSel )
-{
- int last = QMIN( lastSel, (int)myList->count() );
-
- for ( int i = 0; i < (int)myList->count(); i++ )
- myList->setSelected( i, i < last );
-
- int item = last - 1;
-
- myScrollBlock = true;
-
- if ( item < myList->topItem() )
- myList->setTopItem( item );
-
- if ( item >= myList->topItem() + myList->numItemsVisible() )
- myList->setTopItem( item - myList->numItemsVisible() + 1 );
-
- myScrollBlock = false;
-
- myList->clearFocus();
-
- updateComment();
-}
-
-/*!
- return number of selected items
-*/
-int QtxListFrame::selected() const
-{
- uint sel = 0;
- while ( sel < myList->count() && myList->isSelected( sel ) )
- sel++;
- return sel;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxListAction.hxx
-// Author: Sergey TELKOV (Based on code by Eugene AKSENOV)
-
-#ifndef QTXLISTACTION_H
-#define QTXLISTACTION_H
-
-#include "QtxAction.h"
-
-#include <qmap.h>
-#include <qframe.h>
-#include <qstringlist.h>
-
-class QLabel;
-class QListBox;
-class QPopupMenu;
-class QToolButton;
-class QToolTipGroup;
-
-class QtxListFrame;
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-class QTX_EXPORT QtxListAction : public QtxAction
-{
- Q_OBJECT
-
- Q_PROPERTY( QStringList names READ names WRITE addNames )
-
- class ToolButton;
-
-public:
- enum { Item, SubMenu } PopupMode;
-
-public:
- QtxListAction( QObject* = 0, const char* = 0, bool = false );
- QtxListAction( const QString&, const QIconSet&, const QString&, int, QObject*, const char* = 0, bool = false );
- QtxListAction( const QString&, const QString&, int, QObject*, const char* = 0, bool = false );
- virtual ~QtxListAction();
-
-public:
- virtual bool addTo( QWidget* );
- virtual bool addTo( QWidget*, const int );
-
- virtual bool removeFrom( QWidget* );
- virtual bool eventFilter( QObject*, QEvent* );
-
- int popupMode() const;
- void setPopupMode( const int );
-
- QStringList names() const;
- void addNames( const QStringList&, bool = true );
- void setComment( const QString&, const QString& = QString::null );
-
- void setMaxLines( int );
- void setMaxLineChars( int );
-
-signals:
- void activated( int );
-
-public slots:
- virtual void setEnabled( bool );
-
-private slots:
- void onHided();
- void onSingle();
- void onExpand( bool );
- void onMultiple( int );
- void onActivated( int );
- void onDestroyed( QObject* );
-
-protected:
- virtual void addedTo( QWidget*, QWidget* );
-
-private:
- void initialize();
- QWidget* widget( QWidget* ) const;
- QPopupMenu* listPopup( QWidget* ) const;
- QToolButton* mainButton( QWidget* ) const;
- QToolButton* dropButton( QWidget* ) const;
-
- void controlDeleted( QWidget* );
-
-private:
- typedef struct { int id; QPopupMenu* popup; } Popups;
- typedef struct { QToolButton* main; QToolButton* drop; } Buttons;
- typedef QMap<QWidget*, Popups> PopupsMap;
- typedef QMap<QWidget*, Buttons> ButtonsMap;
-
-private:
- int myMode;
- QtxListFrame* myFrame;
- bool myRaise;
- PopupsMap myPopups;
- ButtonsMap myButtons;
- QToolTipGroup* myTipGroup;
-
- friend class ToolButton;
- friend class QtxListFrame;
-};
-
-/*!
- \class QtxListFrame
-*/
-class QtxListFrame : public QFrame
-{
- Q_OBJECT
-
- class ScrollEvent;
-
-public:
- QtxListFrame( QtxListAction*, QWidget* parent, WFlags f = 0 );
- virtual ~QtxListFrame();
-
- void clear();
- const QStringList names() const;
- void addNames( const QStringList& );
-
- void setSingleComment( const QString& );
- void setMultipleComment( const QString& );
-
- int selected() const;
- void setSelected( const int );
-
- void setMaxLines( int );
- void setMaxLineChars( int );
-
- virtual bool event( QEvent* );
- virtual bool eventFilter( QObject*, QEvent* );
-
- void setOwner( QWidget* );
-
- void updateComment();
-
-signals:
- void hided();
- void selected( int );
-
-public slots:
- virtual void show();
- virtual void hide();
-
-private slots:
- void reject();
- void accept();
-
- void onScroll( int, int );
-
-private:
- void setNames( const QStringList& );
- bool handleKeyEvent( QObject*, QKeyEvent* );
- bool handleMouseEvent( QObject*, QMouseEvent* );
-
- friend class QtxListAction;
-
-private:
- QListBox* myList;
- QStringList myNames;
- QWidget* myOwner;
- QtxListAction* myAction;
- QLabel* myComment;
-
- QString mySingleComment;
- QString myMultipleComment;
-
- int myMaxLines;
- int myMaxLineChars;
-
- int myScrollVal;
- bool myScrollBlock;
-};
-
-#ifdef WIN32
-#pragma warning( default:4251 )
-#endif
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxListBox.cxx
-// Author: Sergey TELKOV
-
-#include "QtxListBox.h"
-
-#include <qpixmap.h>
-#include <qlineedit.h>
-
-/*!
- Constructor
-*/
-QtxListBox::QtxListBox( QWidget* parent, const char* name, WFlags f )
-: QListBox( parent, name, f ),
-myEditor( 0 ),
-myEditIndex( -1 ),
-myEditState( false ),
-myEditDefault( true ),
-myModifEnabled( true )
-{
- connect( this, SIGNAL( contentsMoving( int, int ) ),
- this, SLOT( onContentsMoving( int, int ) ) );
-}
-
-/*!
- Destructor
-*/
-QtxListBox::~QtxListBox()
-{
-}
-
-/*!
- \return true if editing is enabled
-*/
-bool QtxListBox::isEditEnabled() const
-{
- return myEditState;
-}
-
-/*!
- Enables/disables editing
- \param on - new state
-*/
-void QtxListBox::setEditEnabled( bool on )
-{
- if ( isEditEnabled() == on )
- return;
-
- myEditState = on;
-
- if ( !isEditEnabled() )
- endEdition( defaultEditAction() );
-}
-
-/*!
- \return default edit action
- \sa setDefaultEditAction()
-*/
-bool QtxListBox::defaultEditAction() const
-{
- return myEditDefault;
-}
-
-/*!
- Changes default edit action.
- Pressing of ENTER button always accepts new value of edited item.
- But other ways, such as focus out or edition of other item accepts
- new value of edited item only if "default edit action" is true
- \param def - new value
-*/
-void QtxListBox::setDefaultEditAction( bool def )
-{
- myEditDefault = def;
-}
-
-/*!
- \return modification enabled state
- \sa setModificationEnabled()
-*/
-bool QtxListBox::isModificationEnabled() const
-{
- return myModifEnabled;
-}
-
-/*!
- Changes "modification enabled" state
- If it is true, then pressing of CTRL + { Up, Down, Home, End } allows move items in list
- \param on - new state
-*/
-void QtxListBox::setModificationEnabled( bool on )
-{
- myModifEnabled = on;
-}
-
-/*!
- \return current edited item
-*/
-QListBoxItem* QtxListBox::editedItem() const
-{
- return item( editedIndex() );
-}
-
-/*!
- \return current edited index
-*/
-int QtxListBox::editedIndex() const
-{
- return myEditIndex;
-}
-
-/*!
- Starts edition of item
- \param idx - index of item
-*/
-void QtxListBox::startEdition( const int idx )
-{
- if ( idx < 0 || editedIndex() == idx || !isEditEnabled() )
- return;
-
- QLineEdit* ed = editor();
- if ( !ed )
- return;
-
- endEdition( defaultEditAction() );
-
- myEditIndex = idx;
-
- ensureItemVisible( myEditIndex );
-
- ed->setText( text( myEditIndex ) );
- updateEditor();
- ed->show();
-
- ed->setFocus();
-}
-
-/*!
- Starts edition of item
- \param item - item to be edited
-*/
-void QtxListBox::startEdition( const QListBoxItem* item )
-{
- startEdition( index( item ) );
-}
-
-/*!
- Finishes edition of item
- \param action - if it is true, then new values must be accepted
-*/
-void QtxListBox::endEdition( const bool action )
-{
- int idx = editedIndex();
- QLineEdit* ed = editor();
-
- if ( idx < 0 || !ed )
- return;
-
- myEditIndex = -1;
-
- ed->hide();
-
- if ( action )
- {
- int cur = currentItem();
-
- if ( pixmap( idx ) )
- changeItem( *pixmap( idx ), ed->text(), idx );
- else
- changeItem( ed->text(), idx );
-
- setCurrentItem( cur );
-
- emit itemEdited( idx );
- emit itemEdited( item( idx ) );
- }
-}
-
-/*!
- Ensures that the item is visible.
- \param idx - index of item
-*/
-void QtxListBox::ensureItemVisible( const int idx )
-{
- if ( idx < 0 )
- return;
-
- if ( itemVisible( idx ) )
- return;
-
- setTopItem( idx );
-}
-
-/*!
- Ensures that the item is visible.
- \param item - item to be made visible
-*/
-void QtxListBox::ensureItemVisible( const QListBoxItem* item )
-{
- ensureItemVisible( index( item ) );
-}
-
-/*!
- \return validator of item editor
-*/
-const QValidator* QtxListBox::validator() const
-{
- const QValidator* v = 0;
- if ( editor() )
- v = editor()->validator();
- return v;
-}
-
-/*!
- Removes validator of item editor
-*/
-void QtxListBox::clearValidator()
-{
- if ( editor() )
- editor()->clearValidator();
-}
-
-/*!
- Changes validator of item editor
- \param v - new validator
-*/
-void QtxListBox::setValidator( const QValidator* v )
-{
- if ( editor() )
- editor()->setValidator( v );
-}
-
-/*!
- Moves item to top
- \param idx - index of item
-*/
-void QtxListBox::moveItemToTop( const int idx )
-{
- moveItem( idx, -idx );
-}
-
-/*!
- Moves item to bottom
- \param idx - index of item
-*/
-void QtxListBox::moveItemToBottom( const int idx )
-{
- moveItem( idx, count() - idx );
-}
-
-/*!
- Moves item
- \param idx - index of item
- \param step - changing of position
-*/
-void QtxListBox::moveItem( const int idx, const int step )
-{
- QListBoxItem* i = item( idx );
- if ( !i || step == 0 )
- return;
-
- QListBoxItem* cur = item( currentItem() );
-
- takeItem( i );
- insertItem( i, QMAX( 0, idx + step ) );
-
- setCurrentItem( index( cur ) );
-
- int pos = index( i );
- if ( myEditIndex == idx )
- myEditIndex = pos;
-
- updateEditor();
-
- if ( idx != pos )
- emit itemMoved( idx, pos );
-}
-
-/*!
- Inserts empty item
- \param i - position of item (if it is less than 0, then current position is used)
-*/
-void QtxListBox::createItem( const int i )
-{
- if ( !isEditEnabled() )
- return;
-
- int idx = i < 0 ? currentItem() : i;
- idx = idx < 0 ? count() : idx;
- idx = QMIN( (int)count(), idx );
-
- insertItem( "", idx );
- setCurrentItem( idx );
- startEdition( idx );
-}
-
-/*!
- Removes item
- \param i - position of item (if it is less than 0, then current position is used)
-*/
-void QtxListBox::deleteItem( const int i )
-{
- if ( !isEditEnabled() )
- return;
-
- int idx = i < 0 ? currentItem() : i;
- if ( idx < 0 )
- return;
-
- if ( editedIndex() == idx )
- endEdition( defaultEditAction() );
-
- removeItem( idx );
- updateEditor();
-}
-
-/*!
- Scrolls the content so that the point is in the top-left corner.
- \param x, y - point co-ordinates
-*/
-void QtxListBox::setContentsPos( int x, int y )
-{
- QListBox::setContentsPos( x, y );
-
- updateEditor();
-}
-
-/*!
- Custom event filter, performs finish of edition on focus out, escape/return/enter pressing
-*/
-bool QtxListBox::eventFilter( QObject* o, QEvent* e )
-{
- if ( editor() == o )
- {
- if ( e->type() == QEvent::FocusOut )
- endEdition( defaultEditAction() );
-
- if ( e->type() == QEvent::KeyPress )
- {
- QKeyEvent* ke = (QKeyEvent*)e;
- if ( ke->key() == Key_Escape )
- endEdition( false );
- else if ( ke->key() == Key_Enter || ke->key() == Key_Return )
- endEdition( true );
- }
- }
-
- return QListBox::eventFilter( o, e );
-}
-
-/*!
- Custom key press event handler
- Allows to move items by CTRL + { Up, Down, Home, End }
-*/
-void QtxListBox::keyPressEvent( QKeyEvent* e )
-{
- if ( e->key() == Key_Up && e->state() & ControlButton && isModificationEnabled() )
- moveItem( currentItem(), -1 );
- else if ( e->key() == Key_Down && e->state() & ControlButton && isModificationEnabled() )
- moveItem( currentItem(), 1 );
- else if ( e->key() == Key_Home && e->state() & ControlButton && isModificationEnabled() )
- moveItemToTop( currentItem() );
- else if ( e->key() == Key_End && e->state() & ControlButton && isModificationEnabled() )
- moveItemToBottom( currentItem() );
- else if ( e->key() == Key_Insert && e->state() & ControlButton )
- createItem( currentItem() );
- else if ( e->key() == Key_Delete && e->state() & ControlButton )
- deleteItem( currentItem() );
- else
- QListBox::keyPressEvent( e );
-}
-
-/*!
- Custom resize event handler
-*/
-void QtxListBox::viewportResizeEvent( QResizeEvent* e )
-{
- QListBox::viewportResizeEvent( e );
-
- updateEditor();
-}
-
-/*!
- Custom mouse double click event handler
-*/
-void QtxListBox::mouseDoubleClickEvent( QMouseEvent* e )
-{
- if ( isEditEnabled() )
- startEdition( itemAt( e->pos() ) );
- else
- QListBox::mouseDoubleClickEvent( e );
-}
-
-/*!
- Updates editor on contents moving
-*/
-void QtxListBox::onContentsMoving( int, int )
-{
- updateEditor();
-}
-
-/*!
- \return item editor
-*/
-QLineEdit* QtxListBox::editor() const
-{
- if ( !myEditor )
- {
- QtxListBox* that = (QtxListBox*)this;
- that->createEditor();
- }
- return myEditor;
-}
-
-/*!
- Creates item editor
-*/
-void QtxListBox::createEditor()
-{
- if ( myEditor )
- return;
-
- myEditor = new QLineEdit( viewport() );
-
- myEditor->setLineWidth( 1 );
- myEditor->setMidLineWidth( 0 );
- myEditor->setFrameStyle( QFrame::Box | QFrame::Plain );
- myEditor->installEventFilter( this );
-
- myEditor->hide();
-
- addChild( myEditor );
-}
-
-/*!
- Updates item editor
-*/
-void QtxListBox::updateEditor()
-{
- if ( !editedItem() || !editor() )
- return;
-
- QRect r = itemRect( editedItem() );
- if ( !r.isValid() )
- return;
-
- int m = editor()->lineWidth();
- r.addCoords( m, 0, 0, 0 );
-
- const QPixmap* pix = pixmap( editedIndex() );
- if ( pix )
- r.addCoords( pix->width() + 2, 0, 0, 0 );
-
- editor()->setGeometry( r );
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxListBox.h
-// Author: Sergey TELKOV
-
-#ifndef QTXLISTBOX_H
-#define QTXLISTBOX_H
-
-#include "Qtx.h"
-
-#include <qlistbox.h>
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-class QLineEdit;
-class QValidator;
-
-class QTX_EXPORT QtxListBox : public QListBox
-{
- Q_OBJECT
-
-public:
- QtxListBox( QWidget* = 0, const char* = 0, WFlags = 0 );
- virtual ~QtxListBox();
-
- bool isEditEnabled() const;
- bool defaultEditAction() const;
- bool isModificationEnabled() const;
-
- QListBoxItem* editedItem() const;
- int editedIndex() const;
-
- void startEdition( const int );
- void startEdition( const QListBoxItem* );
- void endEdition( const bool );
-
- void ensureItemVisible( const int );
- void ensureItemVisible( const QListBoxItem* );
-
- virtual bool eventFilter( QObject*, QEvent* );
-
- const QValidator* validator() const;
-
- void moveItemToTop( const int );
- void moveItemToBottom( const int );
- void moveItem( const int, const int );
-
- void createItem( const int = -1 );
- void deleteItem( const int = -1 );
-
-signals:
- void itemEdited( int );
- void itemEdited( QListBoxItem* );
- void itemMoved( int, int );
-
-public slots:
- virtual void setEditEnabled( bool );
- virtual void setDefaultEditAction( bool );
- virtual void setModificationEnabled( bool );
-
- virtual void clearValidator();
- virtual void setValidator( const QValidator* );
- virtual void setContentsPos( int, int );
-
-private slots:
- void onContentsMoving( int, int );
-
-protected:
- virtual void keyPressEvent( QKeyEvent* );
- virtual void viewportResizeEvent( QResizeEvent* );
- virtual void mouseDoubleClickEvent( QMouseEvent* );
-
-private:
- QLineEdit* editor() const;
- void createEditor();
- void updateEditor();
-
-private:
- QLineEdit* myEditor;
- int myEditIndex;
- bool myEditState;
- bool myEditDefault;
- bool myModifEnabled;
-};
-
-#ifdef WIN32
-#pragma warning( default:4251 )
-#endif
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include "QtxListOfOperations.h"
-#include <stdarg.h>
-
-/*!
- Constructor
-*/
-QtxListOfOperations::QtxListOfOperations()
-{
-}
-
-/*!
- Destructor
-*/
-QtxListOfOperations::~QtxListOfOperations()
-{
-}
-
-/*!
- \return fills list with brackets symbols
- \param list - list to be filled
- \param open - if it is true, it is necessary to fill with open brackets otherwise with close
-*/
-void QtxListOfOperations::bracketsList( QStringList& list, bool open ) const
-{
- OperationSetsIterator anIt = mySets.begin(),
- aLast = mySets.end();
- QStringList custom;
- for( ; anIt!=aLast; anIt++ )
- {
- custom.clear();
- (*anIt).myOperations->bracketsList( custom, open );
- QStringList::const_iterator aSIt = custom.begin(),
- aSLast = custom.end();
- for( ; aSIt!=aSLast; aSIt++ )
- if( list.contains( *aSIt )==0 )
- list.append( *aSIt );
- }
-}
-
-/*!
- Fills list with operation names
-*/
-void QtxListOfOperations::opersList( QStringList& list ) const
-{
- OperationSetsIterator anIt = mySets.begin(),
- aLast = mySets.end();
- QStringList custom;
- for( ; anIt!=aLast; anIt++ )
- {
- custom.clear();
- (*anIt).myOperations->opersList( custom );
- QStringList::const_iterator aSIt = custom.begin(),
- aSLast = custom.end();
- for( ; aSIt!=aSLast; aSIt++ )
- if( list.contains( *aSIt )==0 )
- list.append( *aSIt );
- }
-}
-
-/*!
- Create some value by it's string representation
-*/
-bool QtxListOfOperations::createValue( const QString& str, QtxValue& val ) const
-{
- bool ok;
- OperationSetsIterator anIt = mySets.begin(),
- aLast = mySets.end();
- for( ; anIt!=aLast; anIt++ )
- {
- ok = (*anIt).myOperations->createValue( str, val );
- if( ok )
- break;
- }
- return ok;
-}
-
-/*!
- \return priority of operation
-*/
-int QtxListOfOperations::prior( const QString& op, bool isBin ) const
-{
- OperationSetsIterator anIt = mySets.begin(),
- aLast = mySets.end();
- int prior = 0;
- for( ; anIt!=aLast; anIt++ )
- {
- prior = (*anIt).myOperations->prior( op, isBin );
- if( prior>0 )
- {
- prior+=(*anIt).myAddPrior;
- break;
- }
- }
- return prior>0 ? prior : 0;
-}
-
-/*!
- \return whether values with passed types are valid for arguments of operation
- \param op - name of operation
- \param t1 - type of first argument
- \param t2 - type of second argument
-*/
-QtxParser::Error QtxListOfOperations::isValid( const QString& op,
- const QVariant::Type t1,
- const QVariant::Type t2 ) const
-{
- OperationSetsIterator anIt = mySets.begin(),
- aLast = mySets.end();
- QtxParser::Error err = QtxParser::OK;
- for( ; anIt!=aLast; anIt++ )
- {
- err = (*anIt).myOperations->isValid( op, t1, t2 );
- if( err==QtxParser::OK )
- break;
- }
- return err;
-}
-
-/*!
- Calculates result of operation
- \return one of error states
- \param op - name of operation
- \param v1 - first operation argument (must be used also to store result)
- \param v2 - second operation argument
-*/
-QtxParser::Error QtxListOfOperations::calculate( const QString& op,
- QtxValue& v1,
- QtxValue& v2 ) const
-{
- const char* deb = op.latin1();
-
- OperationSetsIterator anIt = mySets.begin(),
- aLast = mySets.end();
- QtxValue nv1, nv2;
- for( ; anIt!=aLast; anIt++ )
- {
- nv1 = v1;
- nv2 = v2;
- if( (*anIt).myOperations->isValid( op, v1.type(), v2.type() ) == QtxParser::OK )
- {
- QtxParser::Error err = (*anIt).myOperations->calculate( op, nv1, nv2 );
- if( err==QtxParser::OK || err==QtxParser::InvalidResult )
- {
- QString oop = (*anIt).myName;
- const char* ooo = oop.latin1();
- v1 = nv1; v2 = nv2;
- return err;
- }
- }
- }
- return QtxParser::InvalidOperation;
-}
-
-/*!
- Clears list of operations
-*/
-void QtxListOfOperations::clear()
-{
- mySets.clear();
-}
-
-/*!
- \return true if list contains operations
- \param name - name of operation
-*/
-bool QtxListOfOperations::has( const QString& name ) const
-{
- OperationSetsIterator anIt = mySets.begin(),
- aLast = mySets.end();
- for( ; anIt!=aLast; anIt++ )
- if( (*anIt).myName == name )
- return true;
- return false;
-}
-
-/*!
- Appends operations to list
- \param name - name of operations
- \param oper - operations
- \param prior - additional prior
-*/
-void QtxListOfOperations::append( const QString& name, QtxOperations* oper,
- int prior )
-{
- insert( name, oper, prior );
-}
-
-/*!
- Prepends operations to list
- \param name - name of operations
- \param oper - operations
- \param prior - additional prior
-*/
-void QtxListOfOperations::prepend( const QString& name, QtxOperations* oper,
- int prior )
-{
- insert( name, oper, prior, 0 );
-}
-
-/*!
- Inserts operations to list
- \param name - name of operations
- \param oper - operations
- \param prior - additional prior
- \param pos - insert position
-*/
-void QtxListOfOperations::insert( const QString& name, QtxOperations* oper,
- int prior, int pos )
-{
- if( has( name ) || oper==NULL || prior<0 )
- return;
-
- OperationSet op;
- op.myName = name;
- op.myOperations = oper;
- op.myAddPrior = prior;
- if( pos<0 )
- mySets.append( op );
- else
- mySets.insert( mySets.at( pos ), op );
-}
-
-/*!
- Removes operations from list
- \param name - name of operations
-*/
-void QtxListOfOperations::remove( const QString& name )
-{
- OperationSets::iterator anIt = mySets.begin(),
- aLast = mySets.end();
- for( ; anIt!=aLast; anIt++ )
- if( (*anIt).myName == name )
- {
- mySets.erase( anIt );
- break;
- }
-}
-
-/*!
- \return count of operations in list
-*/
-int QtxListOfOperations::count() const
-{
- return mySets.count();
-}
-
-/*!
- \return operations by name
- \name - name of operations
-*/
-QtxOperations* QtxListOfOperations::operations( const QString& name ) const
-{
- OperationSetsIterator anIt = mySets.begin(),
- aLast = mySets.end();
- for( ; anIt!=aLast; anIt++ )
- if( (*anIt).myName == name )
- return (*anIt).myOperations;
- return NULL;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxListOfOperations.h
-// Author: Alexander SOLOVYOV
-
-#ifndef __QTX_LIST_OF_OPERATIONS_HEADER__
-#define __QTX_LIST_OF_OPERATIONS_HEADER__
-
-#include "Qtx.h"
-#include "QtxOperations.h"
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-
-/*!
- Class: QtxListOfOperations
-
- This class provides special variant of QtxOperations. It contains list of QtxOperations* with
- fixed order. When it is necessary to calculate operation or get it's priority, this operation is
- being found starting from first item. It makes possible to create unions of operations. Every QtxOperations*
- has priority, which is added to priority of operation, so that it makes possible to increase priority of
- whole group of operations
-*/
-class QTX_EXPORT QtxListOfOperations : public QtxOperations
-{
-public:
- QtxListOfOperations();
- virtual ~QtxListOfOperations();
-
- virtual void opersList( QStringList& ) const;
- virtual void bracketsList( QStringList&, bool open ) const;
-
- virtual bool createValue( const QString&, QtxValue& ) const;
- virtual int prior ( const QString&, bool isBin ) const;
- virtual QtxParser::Error isValid( const QString&,
- const QVariant::Type,
- const QVariant::Type ) const;
- virtual QtxParser::Error calculate( const QString&, QtxValue&, QtxValue& ) const;
-
- void clear ();
- bool has ( const QString& ) const;
- void append ( const QString&, QtxOperations*, int prior );
- void prepend( const QString&, QtxOperations*, int prior );
- void insert ( const QString&, QtxOperations*, int prior, int pos = -1 );
- void remove ( const QString& );
- int count () const;
- QtxOperations* operations( const QString& ) const;
-
-private:
- typedef struct
- {
- QString myName;
- QtxOperations* myOperations;
- int myAddPrior;
-
- } OperationSet;
-
- typedef QValueList< OperationSet > OperationSets;
- typedef OperationSets::const_iterator OperationSetsIterator;
-
- OperationSets mySets;
-};
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxListResourceEdit.cxx
-// Author: Sergey TELKOV
-
-#include "QtxListResourceEdit.h"
-
-#include <qhbox.h>
-#include <qvbox.h>
-#include <qlabel.h>
-#include <qlayout.h>
-#include <qlistbox.h>
-#include <qcombobox.h>
-#include <qlineedit.h>
-#include <qcheckbox.h>
-#include <qtabwidget.h>
-#include <qvalidator.h>
-#include <qobjectlist.h>
-#include <qcolordialog.h>
-#include <qwidgetstack.h>
-#include <qtoolbutton.h>
-#include <qfontdialog.h>
-#include <qfontdatabase.h>
-#include <qfileinfo.h>
-#include <qfiledialog.h>
-#include <qapplication.h>
-
-#include "QtxIntSpinBox.h"
-#include "QtxDblSpinBox.h"
-#include "QtxComboBox.h"
-#include "QtxDirListEditor.h"
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::QtxListResourceEdit( QtxResourceMgr* mgr, QWidget* parent )
-: QFrame( parent ),
-QtxResourceEdit( mgr )
-{
- QVBoxLayout* main = new QVBoxLayout( this, 0, 5 );
- QGroupBox* base = new QGroupBox( 1, Qt::Vertical, "", this );
- base->setFrameStyle( QFrame::NoFrame );
- base->setInsideMargin( 0 );
- main->addWidget( base );
-
- myList = new QListBox( base );
- myStack = new QWidgetStack( base );
-
- myList->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) );
- myStack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
-
- myList->setSelectionMode( QListBox::Single );
-
- connect( myList, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
-
- setFocusProxy( myList );
-
- updateState();
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::~QtxListResourceEdit()
-{
-}
-
-/*!
- Sets value to widget
- \param id - id of widget
- \param prop - name of resource
- \param val - value of resource
-*/
-void QtxListResourceEdit::setItemProperty( const int id, const QString& prop, const QVariant& val )
-{
- Item* i = item( id );
- if ( !i )
- return;
-
- bool prev = i->isEmpty();
-
- QtxResourceEdit::setItemProperty( id, prop, val );
-
- bool next = i->isEmpty();
-
- if ( prev != next )
- updateVisible();
-}
-
-/*!
- SLOT: called if main list selection changed, raises resource group widgets
-*/
-void QtxListResourceEdit::onSelectionChanged()
-{
- QString title = myList->text( myList->index( myList->selectedItem() ) );
- if ( title.isEmpty() )
- return;
-
- Item* i = 0;
- QPtrList<Item> lst;
- childItems( lst );
- for ( QPtrListIterator<Item> it( lst ); it.current() && !i; ++it )
- {
- if ( it.current()->title() == title )
- i = it.current();
- }
-
- if ( i )
- myStack->raiseWidget( i->id() );
-}
-
-/*!
- Custom activity after item addition
- \param i - added item
-*/
-void QtxListResourceEdit::itemAdded( QtxResourceEdit::Item* i )
-{
- if ( !i )
- return;
-
- QPtrList<Item> items;
- childItems( items );
-
- if ( items.contains( i ) || items.contains( i->parentItem() ) )
- updateVisible();
-}
-
-/*!
- Creates and \return category
- \param title - category title
-*/
-QtxResourceEdit::Item* QtxListResourceEdit::createItem( const QString& title, const int )
-{
- Item* i = item( title, -1 );
- if ( i )
- return i;
-
- Category* category = new Category( this, myStack );
- myStack->addWidget( category, category->id() );
-
- updateVisible();
-
- if ( !myList->selectedItem() )
- myList->setSelected( 0, true );
-
- updateState();
-
- return category;
-}
-
-/*!
- Emits signal about resource changing
- \param map - map of changed resources
-*/
-void QtxListResourceEdit::changedResources( const QMap<Item*, QString>& map )
-{
- QMap<int, QString> idMap;
- for ( QMap<Item*, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
- {
- idMap.insert( it.key()->id(), it.data() );
-
- emit resourceChanged( it.key()->id() );
-
- QString sec, param;
- it.key()->resource( sec, param );
- emit resourceChanged( sec, param );
- }
-
- emit resourcesChanged( idMap );
-}
-
-/*!
- Updates widgets with accordance with main list selection
-*/
-void QtxListResourceEdit::updateState()
-{
- if ( myList->selectedItem() && myStack->visibleWidget() )
- myStack->show();
- else
- myStack->hide();
-
- myList->setShown( myList->count() > 1 );
-}
-
-/*!
- Updates visibility state
-*/
-void QtxListResourceEdit::updateVisible()
-{
- QPtrList<Item> items;
- childItems( items );
-
- QString name = myList->text( myList->index( myList->selectedItem() ) );
-
- myList->clear();
- for ( QPtrListIterator<Item> it( items ); it.current(); ++it )
- {
- if ( it.current()->isEmpty() )
- continue;
-
- myList->insertItem( it.current()->title() );
- }
-
- int idx = -1;
- for ( int i = 0; i < (int)myList->count() && idx == -1; i++ )
- {
- if ( myList->text( i ) == name )
- idx = i;
- }
-
- myList->setSelected( QMAX( idx, 0 ), true );
-
- updateState();
-}
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::Category::Category( QtxListResourceEdit* edit, QWidget* parent )
-: QFrame( parent ),
-Item( edit )
-{
- QVBoxLayout* main = new QVBoxLayout( this );
- QGroupBox* base = new QGroupBox( 1, Qt::Horizontal, "", this );
- base->setFrameStyle( QFrame::NoFrame );
- base->setInsideMargin( 0 );
- main->addWidget( base, 1 );
-
- myTabs = new QTabWidget( base );
- myInfo = new QLabel( base );
-
- myInfo->setAlignment( Qt::AlignCenter );
- myInfo->setFrameStyle( QFrame::WinPanel | QFrame::Raised );
- myInfo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
-
- updateState();
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::Category::~Category()
-{
-}
-
-/*!
- \return true if it is empty
-*/
-bool QtxListResourceEdit::Category::isEmpty() const
-{
- return Item::isEmpty() && myInfo->text().isEmpty();
-}
-
-/*!
- \return category type
-*/
-int QtxListResourceEdit::Category::type() const
-{
- return -1;
-}
-
-/*!
- Default empty implementation of resources storing
-*/
-void QtxListResourceEdit::Category::store()
-{
-}
-
-/*!
- Default empty implementation of resources retrieving
-*/
-void QtxListResourceEdit::Category::retrieve()
-{
-}
-
-/*!
- \return value of property
- \param prop - property name
-*/
-QVariant QtxListResourceEdit::Category::property( const QString& prop ) const
-{
- QVariant var;
- if ( prop == QString( "information" ) || prop == QString( "info" ) )
- var = myInfo->text();
- return var;
-}
-
-/*!
- Sets property value
- \param name - name of property
- \param var - value of property
-*/
-void QtxListResourceEdit::Category::setProperty( const QString& name, const QVariant& var )
-{
- QVariant prop = var;
- if ( !prop.cast( QVariant::String ) )
- return;
-
- if ( name == QString( "information" ) || name == QString( "info" ) )
- myInfo->setText( prop.toString() );
-
- updateState();
-}
-
-/*!
- Creates new tab
- \param title - name of tab
-*/
-QtxResourceEdit::Item* QtxListResourceEdit::Category::createItem( const QString& title, const int )
-{
- Item* i = item( title, id() );
- if ( i )
- return i;
-
- Tab* tab = new Tab( resourceEdit(), this, this );
- myTabs->addTab( tab, title );
-
- updateState();
-
- return tab;
-}
-
-/*!
- Updates category
-*/
-void QtxListResourceEdit::Category::updateState()
-{
- if ( myTabs->count() )
- myTabs->show();
- else
- myTabs->hide();
-
- if ( !myTabs->count() && !myInfo->text().isEmpty() )
- myInfo->show();
- else
- myInfo->hide();
-}
-
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::Tab::Tab( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
-: QFrame( parent ),
-Item( edit, pItem )
-{
- QVBoxLayout* main = new QVBoxLayout( this );
- QVBox* vbox = new QVBox( this );
- vbox->setMargin( 5 );
- myMainFrame = vbox;
- main->addWidget( myMainFrame );
- main->addStretch( 1 );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::Tab::~Tab()
-{
-}
-
-/*!
- \return tab type
-*/
-int QtxListResourceEdit::Tab::type() const
-{
- return -1;
-}
-
-/*!
- Default empty implementation of resources storing
-*/
-void QtxListResourceEdit::Tab::store()
-{
-}
-
-/*!
- Default empty implementation of resources retrieving
-*/
-void QtxListResourceEdit::Tab::retrieve()
-{
-}
-
-/*!
- Delayed initialization of a widget
-*/
-void QtxListResourceEdit::Tab::polish()
-{
- QFrame::polish();
-
- adjustLabels();
-}
-
-/*!
- Creates new group
- \param title - name of group
-*/
-QtxResourceEdit::Item* QtxListResourceEdit::Tab::createItem( const QString& title, const int )
-{
- Item* i = item( title, id() );
- if ( i )
- return i;
-
- Group* group = new Group( title, resourceEdit(), this, myMainFrame );
-
- return group;
-}
-
-/*!
- Adjusts sizes of labels
-*/
-void QtxListResourceEdit::Tab::adjustLabels()
-{
- QObjectList* labels = queryList( "QLabel" );
- if ( labels )
- {
- int w = 0;
- for ( QObjectListIt it1( *labels ); it1.current(); ++it1 )
- {
- if ( it1.current()->isWidgetType() )
- {
- QWidget* wid = (QWidget*)it1.current();
- w = QMAX( w, wid->sizeHint().width() );
- }
- }
- for ( QObjectListIt it2( *labels ); it2.current(); ++it2 )
- {
- if ( it2.current()->isWidgetType() )
- {
- QWidget* wid = (QWidget*)it2.current();
- wid->setMinimumWidth( w );
- }
- }
- delete labels;
- }
-}
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::Group::Group( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
-: QGroupBox( 2, Qt::Horizontal, title, parent ),
-Item( edit, pItem )
-{
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::Group::~Group()
-{
-}
-
-/*!
- \return group type
-*/
-int QtxListResourceEdit::Group::type() const
-{
- return -1;
-}
-
-/*!
- Default empty implementation of resources storing
-*/
-void QtxListResourceEdit::Group::store()
-{
-}
-
-/*!
- Default empty implementation of resources retrieving
-*/
-void QtxListResourceEdit::Group::retrieve()
-{
-}
-
-/*!
- \return value of property
- \param prop - property name
-*/
-QVariant QtxListResourceEdit::Group::property( const QString& prop ) const
-{
- QVariant var;
- if ( prop == "columns" )
- var = QVariant( columns() );
- else if ( prop == "orientation" )
- var = QVariant( orientation() );
- else if ( prop == "frame" )
- var = QVariant( frameStyle() != QFrame::NoFrame );
- return var;
-}
-
-/*!
- Sets property value
- \param name - name of property
- \param var - value of property
-*/
-void QtxListResourceEdit::Group::setProperty( const QString& name, const QVariant& var )
-{
- QVariant prop = var;
- if ( !prop.cast( QVariant::Int ) )
- return;
-
- if ( name == QString( "columns" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
- setColumns( prop.toInt() );
- else if ( name == QString( "orientation" ) && prop.cast( QVariant::Int ) )
- {
- int o = prop.toInt();
- if ( o == Qt::Horizontal || o == Qt::Vertical )
- setOrientation( (Orientation)o );
- }
- else if ( name == "frame" && prop.cast( QVariant::Bool ) )
- {
- setInsideMargin( prop.toBool() ? 5 : 0 );
- QGroupBox::setTitle( prop.toBool() ? Item::title() : QString::null );
- setFrameStyle( prop.toBool() ? QFrame::Box | QFrame::Sunken : QFrame::NoFrame );
- }
-}
-
-/*!
- Sets title of group
- \param title - new title of group
-*/
-void QtxListResourceEdit::Group::setTitle( const QString& title )
-{
- Item::setTitle( title );
- QGroupBox::setTitle( title );
-}
-
-/*!
- Creates new item
- \param title - title of new item
- \type - type of new item
-*/
-QtxResourceEdit::Item* QtxListResourceEdit::Group::createItem( const QString& title, const int type )
-{
- Item* item = 0;
-
- switch ( type )
- {
- case Color:
- item = new ColorItem( title, resourceEdit(), this, this );
- break;
- case Bool:
- item = new StateItem( title, resourceEdit(), this, this );
- break;
- case String:
- item = new StringItem( title, resourceEdit(), this, this );
- break;
- case Selector:
- item = new SelectItem( title, resourceEdit(), this, this );
- break;
- case DblSpin:
- item = new DoubleSpinItem( title, resourceEdit(), this, this );
- break;
- case IntSpin:
- item = new IntegerSpinItem( title, resourceEdit(), this, this );
- break;
- case Double:
- item = new DoubleEditItem( title, resourceEdit(), this, this );
- break;
- case Integer:
- item = new IntegerEditItem( title, resourceEdit(), this, this );
- break;
- case Space:
- item = new Spacer( resourceEdit(), this, this );
- break;
- case GroupBox:
- item = new Group( title, resourceEdit(), this, this );
- break;
- case Font:
- item = new FontItem( title, resourceEdit(), this, this );
- break;
- case DirList:
- item = new DirListItem( title, resourceEdit(), this, this );
- break;
- case File:
- item = new FileItem( title, resourceEdit(), this, this );
- break;
- }
-
- return item;
-}
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::PrefItem::PrefItem( const int type, QtxResourceEdit* edit, Item* pi, QWidget* parent )
-: QHBox( parent ),
-Item( edit, pi ),
-myType( type )
-{
- setSpacing( 5 );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::PrefItem::~PrefItem()
-{
-}
-
-/*!
- \return preference item type
-*/
-int QtxListResourceEdit::PrefItem::type() const
-{
- return myType;
-}
-
-/*!
- Doesn't create item, \return 0 by default
-*/
-QtxResourceEdit::Item* QtxListResourceEdit::PrefItem::createItem( const QString&, const int )
-{
- return 0;
-}
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::Spacer::Spacer( QtxResourceEdit* edit, Item* pItem, QWidget* parent )
-: PrefItem( Space, edit, pItem, parent )
-{
- setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::Spacer::~Spacer()
-{
-}
-
-/*!
- Default empty implementation of resources storing
-*/
-void QtxListResourceEdit::Spacer::store()
-{
-}
-
-/*!
- Default empty implementation of resources retrieving
-*/
-void QtxListResourceEdit::Spacer::retrieve()
-{
-}
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::SelectItem::SelectItem( const QString& title, QtxResourceEdit* edit,
- Item* pItem, QWidget* parent )
-: PrefItem( Selector, edit, pItem, parent )
-{
- new QLabel( title, this );
- myList = new QComboBox( false, this );
- myList->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::SelectItem::~SelectItem()
-{
-}
-
-/*!
- Stores value to resource manager
-*/
-void QtxListResourceEdit::SelectItem::store()
-{
- int idx = myList->currentItem();
- if ( myIndex.contains( idx ) )
- setInteger( myIndex[idx] );
-}
-
-/*!
- Retrieve value to resource manager
-*/
-void QtxListResourceEdit::SelectItem::retrieve()
-{
- int id = getInteger( -1 );
-
- int idx = -1;
- for ( QMap<int, int>::ConstIterator it = myIndex.begin(); it != myIndex.end() && idx == -1; ++it )
- {
- if ( it.data() == id )
- idx = it.key();
- }
-
- myList->setCurrentItem( idx );
-}
-
-/*!
- \return value of property
- \param prop - property name
-*/
-QVariant QtxListResourceEdit::SelectItem::property( const QString& name ) const
-{
- QVariant val;
- if ( name == QString( "strings" ) )
- {
- QStringList lst;
- for ( int i = 0; i < (int)myList->count(); i++ )
- lst.append( myList->text( i ) );
- val = QVariant( lst );
- }
- else if ( name == QString( "indexes" ) )
- {
- QValueList<QVariant> lst;
- for ( int i = 0; i < (int)myList->count(); i++ )
- lst.append( myIndex.contains( i ) ? myIndex[i] : 0 );
- val = QVariant( lst );
- }
- return val;
-}
-
-/*!
- Sets property value
- \param name - name of property
- \param var - value of property
-*/
-void QtxListResourceEdit::SelectItem::setProperty( const QString& name, const QVariant& val )
-{
- if ( name == QString( "strings" ) )
- setStrings( val );
- else if ( name == QString( "indexes" ) )
- setIndexes( val );
-}
-
-/*!
- Sets property "strings" - items for selection in combo box
- \param var - must be string list: list of items
-*/
-void QtxListResourceEdit::SelectItem::setStrings( const QVariant& var )
-{
- if ( var.type() != QVariant::StringList )
- return;
-
- setStrings( var.toStringList() );
-}
-
-/*!
- Sets property "indexes" - corresponding indices of items in combo box
- \param var - must be list of integer variants: list of indices
-*/
-void QtxListResourceEdit::SelectItem::setIndexes( const QVariant& var )
-{
- if ( var.type() != QVariant::List )
- return;
-
- QValueList<QVariant> varList = var.toList();
- QValueList<int> lst;
- for ( QValueList<QVariant>::const_iterator it = varList.begin(); it != varList.end(); ++it )
- {
- if ( (*it).canCast( QVariant::Int ) )
- lst.append( (*it).toInt() );
- }
- setIndexes( lst );
-}
-
-/*!
- Sets property "strings" - items for selection in combo box
- \param lst - list of items
-*/
-void QtxListResourceEdit::SelectItem::setStrings( const QStringList& lst )
-{
- myList->clear();
- myList->insertStringList( lst );
-}
-
-/*!
- Sets property "indexes" - corresponding indices of items in combo box
- \param var - list of indices
-*/
-void QtxListResourceEdit::SelectItem::setIndexes( const QValueList<int>& lst )
-{
- myIndex.clear();
-
- int idx = 0;
- for ( QValueList<int>::const_iterator it = lst.begin(); it != lst.end(); ++it, idx++ )
- myIndex.insert( idx, *it );
-}
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::StateItem::StateItem( const QString& title, QtxResourceEdit* edit,
- Item* pItem, QWidget* parent )
-: PrefItem( Bool, edit, pItem, parent )
-{
- myState = new QCheckBox( title, this );
- myState->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::StateItem::~StateItem()
-{
-}
-
-/*!
- Stores value to resource manager
-*/
-void QtxListResourceEdit::StateItem::store()
-{
- setBoolean( myState->isChecked() );
-}
-
-/*!
- Retrieve value to resource manager
-*/
-void QtxListResourceEdit::StateItem::retrieve()
-{
- myState->setChecked( getBoolean() );
-}
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::StringItem::StringItem( const QString& title, QtxResourceEdit* edit,
- Item* pItem, QWidget* parent )
-: PrefItem( String, edit, pItem, parent )
-{
- new QLabel( title, this );
- myString = new QLineEdit( this );
- myString->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::StringItem::~StringItem()
-{
-}
-
-/*!
- Stores value to resource manager
-*/
-void QtxListResourceEdit::StringItem::store()
-{
- setString( myString->text() );
-}
-
-/*!
- Retrieve value to resource manager
-*/
-void QtxListResourceEdit::StringItem::retrieve()
-{
- myString->setText( getString() );
-}
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::IntegerEditItem::IntegerEditItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
-: PrefItem( Integer, edit, pItem, parent )
-{
- new QLabel( title, this );
- myInteger = new QLineEdit( this );
- myInteger->setValidator( new QIntValidator( myInteger ) );
- myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::IntegerEditItem::~IntegerEditItem()
-{
-}
-
-/*!
- Stores value to resource manager
-*/
-void QtxListResourceEdit::IntegerEditItem::store()
-{
- setString( myInteger->text() );
-}
-
-/*!
- Retrieve value to resource manager
-*/
-void QtxListResourceEdit::IntegerEditItem::retrieve()
-{
- myInteger->setText( getString() );
-}
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::IntegerSpinItem::IntegerSpinItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
-: PrefItem( IntSpin, edit, pItem, parent )
-{
- new QLabel( title, this );
- myInteger = new QtxIntSpinBox( this );
- myInteger->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::IntegerSpinItem::~IntegerSpinItem()
-{
-}
-
-/*!
- Stores value to resource manager
-*/
-void QtxListResourceEdit::IntegerSpinItem::store()
-{
- setInteger( myInteger->value() );
-}
-
-/*!
- Retrieve value to resource manager
-*/
-void QtxListResourceEdit::IntegerSpinItem::retrieve()
-{
- myInteger->setValue( getInteger() );
-}
-
-/*!
- \return value of property
- \param prop - property name
-*/
-QVariant QtxListResourceEdit::IntegerSpinItem::property( const QString& name ) const
-{
- QVariant var;
- if ( name == QString( "minimum" ) || name == QString( "min" ) )
- var = QVariant( myInteger->minValue() );
- else if ( name == QString( "maximum" ) || name == QString( "max" ) )
- var = QVariant( myInteger->maxValue() );
- else if ( name == QString( "step" ) )
- var = QVariant( myInteger->lineStep() );
- else if ( name == QString( "special" ) )
- var = QVariant( myInteger->specialValueText() );
- else if ( name == QString( "prefix" ) )
- var = QVariant( myInteger->prefix() );
- else if ( name == QString( "suffix" ) )
- var = QVariant( myInteger->suffix() );
- return var;
-}
-
-/*!
- Sets property value
- \param name - name of property
- \param var - value of property
-*/
-void QtxListResourceEdit::IntegerSpinItem::setProperty( const QString& name, const QVariant& var )
-{
- QVariant prop = var;
-
- if ( ( name == QString( "minimum" ) || name == QString( "min" ) ) && prop.cast( QVariant::Int ) )
- myInteger->setMinValue( prop.toInt() );
- else if ( ( name == QString( "maximum" ) || name == QString( "max" ) ) && prop.cast( QVariant::Int ) )
- myInteger->setMaxValue( prop.toInt() );
- else if ( name == QString( "step" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
- myInteger->setLineStep( prop.toInt() );
- else if ( name == QString( "special" ) && prop.cast( QVariant::String ) )
- myInteger->setSpecialValueText( prop.toString() );
- else if ( name == QString( "prefix" ) && prop.cast( QVariant::String ) )
- myInteger->setPrefix( prop.toString() );
- else if ( name == QString( "suffix" ) && prop.cast( QVariant::String ) )
- myInteger->setSuffix( prop.toString() );
-}
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::DoubleEditItem::DoubleEditItem( const QString& title, QtxResourceEdit* edit,
- Item* pItem, QWidget* parent )
-: PrefItem( Double, edit, pItem, parent )
-{
- new QLabel( title, this );
- myDouble = new QLineEdit( this );
- myDouble->setValidator( new QDoubleValidator( myDouble ) );
- myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::DoubleEditItem::~DoubleEditItem()
-{
-}
-
-/*!
- Stores value to resource manager
-*/
-void QtxListResourceEdit::DoubleEditItem::store()
-{
- setString( myDouble->text() );
-}
-
-/*!
- Retrieve value to resource manager
-*/
-void QtxListResourceEdit::DoubleEditItem::retrieve()
-{
- myDouble->setText( getString() );
-}
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::DoubleSpinItem::DoubleSpinItem( const QString& title, QtxResourceEdit* edit,
- Item* pItem, QWidget* parent )
-: PrefItem( DblSpin, edit, pItem, parent )
-{
- new QLabel( title, this );
- myDouble = new QtxDblSpinBox( this );
- myDouble->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::DoubleSpinItem::~DoubleSpinItem()
-{
-}
-
-/*!
- Stores value to resource manager
-*/
-void QtxListResourceEdit::DoubleSpinItem::store()
-{
- setDouble( myDouble->value() );
-}
-
-/*!
- Retrieve value to resource manager
-*/
-void QtxListResourceEdit::DoubleSpinItem::retrieve()
-{
- myDouble->setValue( getDouble() );
-}
-
-/*!
- \return value of property
- \param prop - property name
-*/
-QVariant QtxListResourceEdit::DoubleSpinItem::property( const QString& name ) const
-{
- QVariant var;
- if ( name == QString( "minimum" ) || name == QString( "min" ) )
- var = QVariant( myDouble->minValue() );
- else if ( name == QString( "maximum" ) || name == QString( "max" ) )
- var = QVariant( myDouble->maxValue() );
- else if ( name == QString( "precision" ) )
- var = QVariant( myDouble->precision() );
- else if ( name == QString( "step" ) )
- var = QVariant( myDouble->lineStep() );
- else if ( name == QString( "special" ) )
- var = QVariant( myDouble->specialValueText() );
- else if ( name == QString( "prefix" ) )
- var = QVariant( myDouble->prefix() );
- else if ( name == QString( "suffix" ) )
- var = QVariant( myDouble->suffix() );
- return var;
-}
-
-/*!
- Sets property value
- \param name - name of property
- \param var - value of property
-*/
-void QtxListResourceEdit::DoubleSpinItem::setProperty( const QString& name, const QVariant& var )
-{
- QVariant prop = var;
-
- if ( ( name == QString( "minimum" ) || name == QString( "min" ) ) && prop.cast( QVariant::Double ) )
- myDouble->setMinValue( prop.toDouble() );
- else if ( ( name == QString( "maximum" ) || name == QString( "max" ) ) && prop.cast( QVariant::Double ) )
- myDouble->setMaxValue( prop.toDouble() );
- else if ( name == QString( "step" ) && prop.cast( QVariant::Double ) && prop.toDouble() > 0 )
- myDouble->setLineStep( prop.toDouble() );
- else if ( name == QString( "precision" ) && prop.cast( QVariant::Int ) && prop.toInt() > 0 )
- myDouble->setPrecision( prop.toInt() );
- else if ( name == QString( "special" ) && prop.cast( QVariant::String ) )
- myDouble->setSpecialValueText( prop.toString() );
- else if ( name == QString( "prefix" ) && prop.cast( QVariant::String ) )
- myDouble->setPrefix( prop.toString() );
- else if ( name == QString( "suffix" ) && prop.cast( QVariant::String ) )
- myDouble->setSuffix( prop.toString() );
-}
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::ColorItem::ColorItem( const QString& title, QtxResourceEdit* edit,
- Item* pItem, QWidget* parent )
-: PrefItem( Color, edit, pItem, parent )
-{
- /*!
- \class QtxListResourceEdit::ColorItem::ColorSelector
- \brief Label, showing color and allowing to pick color with help of standard color dialog
- */
- class ColorSelector : public QLabel
- {
- public:
- ColorSelector( QWidget* parent = 0 ) : QLabel( parent )
- {
- setFrameStyle( WinPanel | Raised );
- }
- virtual ~ColorSelector() {}
- virtual QSize minimumSizeHint() const
- {
- return QLabel::minimumSizeHint() + QSize( 0, 2 );
- }
-
- protected:
- virtual void mousePressEvent( QMouseEvent* e )
- {
- if ( e->button() == LeftButton )
- {
- setFrameStyle( WinPanel | Sunken );
- QColor c = QColorDialog::getColor( paletteBackgroundColor(), this );
- if ( c.isValid() )
- setPaletteBackgroundColor( c );
-
- setFrameStyle( WinPanel | Raised );
- }
- }
- };
-
- new QLabel( title, this );
- myColor = new ColorSelector( this );
- myColor->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::ColorItem::~ColorItem()
-{
-}
-
-/*!
- Stores value to resource manager
-*/
-void QtxListResourceEdit::ColorItem::store()
-{
- setColor( myColor->paletteBackgroundColor() );
-}
-
-/*!
- Retrieve value to resource manager
-*/
-void QtxListResourceEdit::ColorItem::retrieve()
-{
- myColor->setPaletteBackgroundColor( getColor() );
-}
-
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::FontItem::FontItem( const QString& title, QtxResourceEdit* edit,
- Item* pItem, QWidget* parent )
-: PrefItem( Font, edit, pItem, parent )
-{
- new QLabel( title, this );
- myFamilies = new QtxComboBox( false, this );
- mySizes = new QtxComboBox( true, this );
- mySizes->setInsertionPolicy( QComboBox::NoInsertion );
- myBold = new QCheckBox( tr( "Bold" ), this );
- myItalic = new QCheckBox( tr( "Italic" ), this );
- myUnderline = new QCheckBox( tr( "Shadow" ), this );
- myPreview = new QToolButton( this );
- myPreview->setText( "..." );
-
- myFamilies->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred );
- mySizes->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred );
-
- connect( myFamilies, SIGNAL( activated( int ) ), this, SLOT( onActivateFamily( int ) ) );
- connect( myPreview, SIGNAL( clicked() ), this, SLOT( onPreview() ) );
-
- setProperty( "system", ( bool )true );
- setProperty( "widget_flags", ( int )All );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::FontItem::~FontItem()
-{
-}
-
-/*!
- Stores value to resource manager
-*/
-void QtxListResourceEdit::FontItem::store()
-{
- QFont f( family(), size() );
- bool bold, italic, underline;
- params( bold, italic, underline );
- f.setBold( bold );
- f.setItalic( italic );
- f.setUnderline( underline );
- Item::setFont( f );
-}
-
-/*!
- Retrieve value to resource manager
-*/
-void QtxListResourceEdit::FontItem::retrieve()
-{
- QFont f = getFont();
- setFamily( f.family() );
- setSize( f.pointSize() );
- setParams( f.bold(), f.italic(), f.underline() );
-}
-
-/*!
- \return value of property
- \param prop - property name
-*/
-QVariant QtxListResourceEdit::FontItem::property( const QString& name ) const
-{
- if( name=="system" )
- return myIsSystem;
-
- else if( name=="widget_flags" )
- return ( int )myFlags;
-
- if( myIsSystem )
- {
- if( name=="families" )
- {
- QFontDatabase fdb;
- return fdb.families();
- }
-
- else if( name=="default_family" )
- {
- QFontDatabase fdb;
- QStringList fam = fdb.families();
- if( fam.count()>0 )
- return fam.first();
- else
- return QString::null;
- }
-
- else
- {
- QStringList parts = QStringList::split( ":", name );
- if( parts.count()==2 )
- {
- if( parts[1]=="default_bold" || parts[1]=="default_italic" || parts[1]=="default_underline" )
- return false;
-
- else if( parts[1]=="sizes" )
- {
- QFontDatabase fdb;
- QValueList<int> sizes = fdb.pointSizes( parts[0] );
- QValueList<QVariant> vsizes;
- QValueList<int>::const_iterator anIt = sizes.begin(),
- aLast = sizes.end();
- for( ; anIt!=aLast; anIt++ )
- vsizes.append( *anIt );
-
- return vsizes;
- }
-
- else if( parts[1]=="default_size" )
- {
- if( parts[0].isEmpty() )
- return 0;
-
- QFontDatabase fdb;
- QValueList<int> sizes = fdb.pointSizes( parts[0] );
- if( sizes.count()>0 )
- return sizes.first();
- else
- return 0;
- }
- }
- }
- }
-
- else if( myProperties.contains( name ) )
- return myProperties[ name ];
-
- return QVariant();
-}
-
-/*!
- Sets property value
- \param name - name of property
- \param var - value of property
-*/
-void QtxListResourceEdit::FontItem::setProperty( const QString& name, const QVariant& value )
-{
- if( name=="system" )
- {
- if( !value.canCast( QVariant::Bool ) )
- return;
-
- bool isSystem = value.toBool();
- if( myIsSystem==isSystem )
- return;
-
- myIsSystem = isSystem;
-
- QVariant families = property( "families" );
- QString fam = family();
-
- myFamilies->clear();
- if( families.canCast( QVariant::StringList ) )
- {
- QStringList list = families.toStringList();
- myFamilies->insertStringList( list );
- }
-
- setFamily( fam );
- setSize( -1 ); //set default size
- }
-
- else if( name=="widget_flags" )
- {
- if( !value.canCast( QVariant::Int ) )
- return;
-
- int wf = value.toInt();
-
- myFlags = wf;
- myFamilies ->setShown( wf & Family );
- mySizes ->setShown( wf & Size );
- mySizes->lineEdit()->setReadOnly( ( wf & UserSize )==0 );
- myBold ->setShown( wf & Bold );
- myItalic ->setShown( wf & Italic );
- myUnderline->setShown( wf & Underline );
- bool isSystem = property( "system" ).canCast( QVariant::Bool ) ? property( "system" ).toBool() : false;
- myPreview->setShown( ( wf & Preview ) && isSystem );
-
- internalUpdate();
- }
-
- else
- myProperties[ name ] = value;
-}
-
-/*!
- Sets family of font
- \param f - new family
-*/
-void QtxListResourceEdit::FontItem::setFamily( const QString& f )
-{
- QString curtext;
- if( myFamilies->isShown() )
- {
- if( myFamilies->listBox()->findItem( f, Qt::ExactMatch ) )
- curtext = f;
- }
- else
- {
- QVariant deffam = property( "default_family" );
- if( deffam.canCast( QVariant::String ) )
- curtext = deffam.toString();
- }
-
- if ( curtext.isEmpty() )
- curtext = (QApplication::font()).family();
-
- int idx = -1;
- for ( int i = 0; i < (int)myFamilies->count() && idx < 0; i++ )
- {
- if ( myFamilies->text( i ) == curtext )
- idx = i;
- }
-
- if ( idx >= 0 )
- myFamilies->setCurrentItem( idx );
-
- onActivateFamily( idx );
-}
-
-/*!
- \return family of font
-*/
-QString QtxListResourceEdit::FontItem::family() const
-{
- return myFamilies->currentText();
-}
-
-/*!
- Sets size of font
- \param s - new size of font
-*/
-void QtxListResourceEdit::FontItem::setSize( const int s )
-{
- int cursize = -1;
- if( mySizes->isShown() && s>0 )
- {
- if( ( myFlags & UserSize ) || mySizes->listBox()->findItem( QString( "%1" ).arg( s ), Qt::ExactMatch ) )
- cursize = s;
- }
- else
- {
- QVariant defsize = property( QString( "%1:default_size" ).arg( family() ) );
- if( defsize.canCast( QVariant::Int ) )
- cursize = defsize.toInt();
- }
-
- mySizes->setCurrentText( cursize>0 ? QString( "%1" ).arg( cursize ) : "" );
-}
-
-/*!
- \return size of font
-*/
-int QtxListResourceEdit::FontItem::size() const
-{
- QString s = mySizes->currentText();
- bool ok;
- int pSize = s.toInt( &ok );
- return ( ok ? pSize : 0 );
-}
-
-/*!
- Sets font parameters
- \param bold - is font bold
- \param italic - is font italic
- \param underline - is font underlined
-*/
-void QtxListResourceEdit::FontItem::setParams( const bool bold, const bool italic, const bool underline )
-{
- bool curbold = false, curitalic = false, curunderline = false;
- if( myBold->isShown() )
- curbold = bold;
- else
- {
- QVariant def = property( QString( "%1:default_bold" ).arg( family() ) );
- if( def.canCast( QVariant::Bool ) )
- curbold = def.toBool();
- }
- if( myItalic->isShown() )
- curitalic = italic;
- else
- {
- QVariant def = property( QString( "%1:default_italic" ).arg( family() ) );
- if( def.canCast( QVariant::Bool ) )
- curitalic = def.toBool();
- }
- if( myUnderline->isShown() )
- curunderline = underline;
- else
- {
- QVariant def = property( QString( "%1:default_underline" ).arg( family() ) );
- if( def.canCast( QVariant::Bool ) )
- curunderline = def.toBool();
- }
- myBold->setChecked( curbold );
- myItalic->setChecked( curitalic );
- myUnderline->setChecked( curunderline );
-}
-
-/*!
- \return font parameters
- \param bold - is font bold
- \param italic - is font italic
- \param underline - is font underlined
-*/
-void QtxListResourceEdit::FontItem::params( bool& bold, bool& italic, bool& underline )
-{
- bold = myBold->isChecked();
- italic = myItalic->isChecked();
- underline = myUnderline->isChecked();
-}
-
-/*!
- Updates internal selection of font properties
-*/
-void QtxListResourceEdit::FontItem::internalUpdate()
-{
- setFamily( family() );
- setSize( size() );
- bool b1, b2, b3;
- params( b1, b2, b3 );
- setParams( b1, b2, b3 );
-}
-
-/*!
- SLOT: called if family is activated, updates list of possible sizes
-*/
-void QtxListResourceEdit::FontItem::onActivateFamily( int )
-{
- QVariant sizes = property( QString( "%1:sizes" ).arg( family() ) );
-
- int s = size();
- mySizes->clear();
- if( sizes.canCast( QVariant::List ) )
- {
- QValueList<QVariant> list = sizes.toList();
- QStringList sizeItems;
- QValueList<QVariant>::const_iterator anIt = list.begin(),
- aLast = list.end();
- for( ; anIt!=aLast; anIt++ )
- if( (*anIt).canCast( QVariant::Int ) && (*anIt).toInt()>0 )
- sizeItems.append( QString( "%1" ).arg( (*anIt).toInt() ) );
- mySizes->insertStringList( sizeItems );
- }
- setSize( s );
-}
-
-/*!
- SLOT: called if it is necessary to show font preview
-*/
-void QtxListResourceEdit::FontItem::onPreview()
-{
- QFont f( family(), size() );
- bool bold, italic, underline;
- params( bold, italic, underline );
- f.setBold( bold );
- f.setItalic( italic );
- f.setUnderline( underline );
-
- bool ok;
- f = QFontDialog::getFont( &ok, f );
-
- if( ok )
- {
- setFamily( f.family() );
- setSize( f.pointSize() );
- setParams( f.bold(), f.italic(), f.underline() );
- }
-}
-
-
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::DirListItem::DirListItem( const QString& title, QtxResourceEdit* edit, Item* pItem, QWidget* parent )
-: PrefItem( Font, edit, pItem, parent )
-{
- myDirListEditor = new QtxDirListEditor( this );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::DirListItem::~DirListItem()
-{
-}
-
-/*!
- Stores value to resource manager
-*/
-void QtxListResourceEdit::DirListItem::store()
-{
- QStringList list;
- myDirListEditor->getPathList(list);
- setString( QString(list.join(";")) );
-}
-
-/*!
- Retrieve value to resource manager
-*/
-void QtxListResourceEdit::DirListItem::retrieve()
-{
- myDirListEditor->setPathList(QStringList::split(";", getString()));
-}
-
-
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::FileItem::FileItem( const QString& title, QtxResourceEdit* edit,
- Item* pItem, QWidget* parent )
-: PrefItem( Font, edit, pItem, parent ),
- myFlags( QFileInfo::ReadUser ),
- myIsExisting( true ),
- myIsReadOnly ( true ),
- myFileDlg( 0 )
-{
- new QLabel( title, this );
- myFile = new QLineEdit( this );
- myFile->setValidator( new FileValidator( this, myFile ) );
- myFile->setReadOnly( myIsReadOnly );
- myOpenFile = new QToolButton( this );
- myOpenFile->setText( "..." );
- connect( myOpenFile, SIGNAL( clicked() ), this, SLOT( onOpenFile() ) );
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::FileItem::~FileItem()
-{
- if( myFileDlg )
- delete myFileDlg;
-}
-
-/*!
- Stores value to resource manager
-*/
-void QtxListResourceEdit::FileItem::store()
-{
- setString( myFile->text() );
-}
-
-/*!
- Retrieve value to resource manager
-*/
-void QtxListResourceEdit::FileItem::retrieve()
-{
- myFile->setText( getString() );
-}
-
-/*!
- \return value of property
- \param prop - property name
-*/
-QVariant QtxListResourceEdit::FileItem::property( const QString& name ) const
-{
- if( name=="filter" )
- return myFilter;
- else if( name=="existing" )
- return myIsExisting;
- else if( name=="flags" )
- return myFlags;
- else if( name=="readOnly")
- return myIsReadOnly;
-
- return QVariant();
-}
-
-/*!
- Sets property value
- \param name - name of property
- \param var - value of property
-*/
-void QtxListResourceEdit::FileItem::setProperty( const QString& name, const QVariant& value )
-{
- if( name=="filter" )
- {
- if( value.canCast( QVariant::String ) )
- {
- myFilter.clear();
- myFilter.append( value.toString() );
- }
- else if( value.canCast( QVariant::StringList ) )
- myFilter = value.toStringList();
- }
- else if( name=="existing" && value.canCast( QVariant::Bool ) )
- myIsExisting = value.toBool();
-
- else if( name=="flags" && value.canCast( QVariant::UInt ) )
- myFlags = value.toUInt();
-
- else if( name=="readOnly" && value.canCast( QVariant::Bool) ) {
- myIsReadOnly = value.toBool();
- myFile->setReadOnly( myIsReadOnly );
- }
-}
-
-/*!
- SLOT: called if user click "Open File" button, shows dialog
-*/
-void QtxListResourceEdit::FileItem::onOpenFile()
-{
- if( !myFileDlg )
- {
- myFileDlg = new QFileDialog( "." );
- connect( myFileDlg, SIGNAL( fileHighlighted( const QString& ) ), this, SLOT( onFileSelected( const QString& ) ) );
- }
-
- myFileDlg->setCaption( title() );
- myFileDlg->setFilters( myFilter );
- myFileDlg->setMode( myIsExisting ? QFileDialog::ExistingFile : QFileDialog::AnyFile );
-
- if( myFileDlg->exec()==QDialog::Accepted )
- {
- QString selFile = QDir::convertSeparators( myFileDlg->selectedFile() );
- myFile->setText( selFile );
- }
-}
-
-/*!
- \return true if file satisfies permissions
- \param f - file name
-*/
-bool QtxListResourceEdit::FileItem::isFileCorrect( const QString& f ) const
-{
- bool res = false;
- QFileInfo info( f );
- if( !myIsExisting || info.exists() )
- res = info.isFile() && info.permission( myFlags );
-
- return res;
-}
-
-/*!
- SLOT: called if user has selected file in file dialog, checks file permissions and passes it's name to widget
- \param f - file name
-*/
-void QtxListResourceEdit::FileItem::onFileSelected( const QString& f )
-{
- if( myFileDlg && !isFileCorrect( f ) )
- myFileDlg->setSelection( "" );
-}
-
-
-/*!
- Constructor
-*/
-QtxListResourceEdit::FileItem::FileValidator::FileValidator( FileItem* item, QObject* parent )
-: QValidator( parent ),
- myItem( item )
-{
-}
-
-/*!
- Destructor
-*/
-QtxListResourceEdit::FileItem::FileValidator::~FileValidator()
-{
-}
-
-/*!
- Check file permissions
- \param f - file name
-*/
-QValidator::State QtxListResourceEdit::FileItem::FileValidator::validate( QString& f, int& ) const
-{
- if( myItem && myItem->isFileCorrect( f ) )
- return QValidator::Acceptable;
- else
- return QValidator::Intermediate;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxListResourceEdit.h
-// Author: Sergey TELKOV
-
-#ifndef QTXLISTRESOURCEEDIT_H
-#define QTXLISTRESOURCEEDIT_H
-
-#include "QtxResourceEdit.h"
-
-#include <qmap.h>
-#include <qhbox.h>
-#include <qframe.h>
-#include <qgroupbox.h>
-#include <qvalidator.h>
-
-class QLabel;
-class QListBox;
-class QLineEdit;
-class QCheckBox;
-class QComboBox;
-class QTabWidget;
-class QWidgetStack;
-
-class QtxIntSpinBox;
-class QtxDblSpinBox;
-
-class QtxDirListEditor;
-
-/*!
- \class QtxListResourceEdit
- GUI implementation of QtxResourceEdit - manager of resources
-*/
-
-class QTX_EXPORT QtxListResourceEdit : public QFrame, public QtxResourceEdit
-{
- Q_OBJECT
-
-public:
- class Tab;
- class Group;
- class Category;
- class PrefItem;
-
- class Spacer;
- class ColorItem;
- class StateItem;
- class SelectItem;
- class StringItem;
- class DoubleSpinItem;
- class DoubleEditItem;
- class IntegerSpinItem;
- class IntegerEditItem;
- class FontItem;
- class FileItem;
- class DirListItem;
-
- enum { Space, Bool, Color, String, Selector, DblSpin, IntSpin, Double, Integer, GroupBox, Font, DirList, File, User };
-
-public:
- QtxListResourceEdit( QtxResourceMgr*, QWidget* = 0 );
- virtual ~QtxListResourceEdit();
-
- virtual void setItemProperty( const int, const QString&, const QVariant& );
-
-signals:
- void resourceChanged( int );
- void resourceChanged( QString&, QString& );
- void resourcesChanged( const QMap<int, QString>& );
-
-private slots:
- void onSelectionChanged();
-
-protected:
- virtual void itemAdded( Item* );
- virtual Item* createItem( const QString&, const int );
- virtual void changedResources( const QMap<Item*, QString>& );
-
-private:
- void updateState();
- void updateVisible();
-
-private:
- QListBox* myList;
- QWidgetStack* myStack;
-};
-
-/*!
- \class QtxListResourceEdit::Category
- GUI implementation of 'Category' frame
-*/
-
-class QtxListResourceEdit::Category : public QFrame, public Item
-{
-public:
- Category( QtxListResourceEdit*, QWidget* = 0 );
- virtual ~Category();
-
- virtual bool isEmpty() const;
-
- virtual int type() const;
- virtual void store();
- virtual void retrieve();
-
- virtual QVariant property( const QString& ) const;
- virtual void setProperty( const QString&, const QVariant& );
-
-protected:
- virtual Item* createItem( const QString&, const int );
-
-private:
- void updateState();
-
-private:
- QLabel* myInfo;
- QTabWidget* myTabs;
-};
-
-/*!
- \class QtxListResourceEdit::Tab
- GUI implementation of resources tab.
-*/
-
-class QtxListResourceEdit::Tab : public QFrame, public Item
-{
-public:
- Tab( QtxResourceEdit*, Item*, QWidget* = 0 );
- virtual ~Tab();
-
- virtual int type() const;
- virtual void store();
- virtual void retrieve();
-
-public:
- virtual void polish();
-
-protected:
- virtual Item* createItem( const QString&, const int );
-
-private:
- void adjustLabels();
-
-private:
- QWidget* myMainFrame;
-};
-
-/*!
- \class QtxListResourceEdit::Group
- GUI implementation of resources group.
-*/
-
-class QtxListResourceEdit::Group : public QGroupBox, public Item
-{
-public:
- Group( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
- virtual ~Group();
-
- virtual int type() const;
- virtual void store();
- virtual void retrieve();
-
- virtual QVariant property( const QString& ) const;
- virtual void setProperty( const QString&, const QVariant& );
-
- virtual void setTitle( const QString& );
-
-protected:
- virtual Item* createItem( const QString&, const int );
-};
-
-/*!
- \class QtxListResourceEdit::PrefItem
- Base class for preferences items.
-*/
-
-class QtxListResourceEdit::PrefItem : public QHBox, public Item
-{
-public:
- PrefItem( const int, QtxResourceEdit*, Item* = 0, QWidget* = 0 );
- virtual ~PrefItem();
-
- virtual int type() const;
-
-protected:
- virtual Item* createItem( const QString&, const int );
-
-private:
- int myType;
-};
-
-/*!
- \class QtxListResourceEdit::Spacer
- GUI implementation of resources spacer.
-*/
-
-class QtxListResourceEdit::Spacer : public PrefItem
-{
-public:
- Spacer( QtxResourceEdit*, Item*, QWidget* = 0 );
- virtual ~Spacer();
-
- virtual void store();
- virtual void retrieve();
-};
-
-/*!
- \class QtxListResourceEdit::SelectItem
- GUI implementation of resources selector item.
-*/
-
-class QtxListResourceEdit::SelectItem : public PrefItem
-{
-public:
- SelectItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
- virtual ~SelectItem();
-
- virtual void store();
- virtual void retrieve();
-
- virtual QVariant property( const QString& ) const;
- virtual void setProperty( const QString&, const QVariant& );
-
-private:
- void setStrings( const QVariant& );
- void setIndexes( const QVariant& );
-
- void setStrings( const QStringList& );
- void setIndexes( const QValueList<int>& );
-
-private:
- QComboBox* myList;
- QMap<int, int> myIndex;
-};
-
-/*!
- \class QtxListResourceEdit::StateItem
- GUI implementation of resources bool item.
-*/
-class QtxListResourceEdit::StateItem : public PrefItem
-{
-public:
- StateItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
- virtual ~StateItem();
-
- virtual void store();
- virtual void retrieve();
-
-private:
- QCheckBox* myState;
-};
-
-/*!
- \class QtxListResourceEdit::StringItem
- GUI implementation of resources string item.
-*/
-
-class QtxListResourceEdit::StringItem : public PrefItem
-{
-public:
- StringItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
- virtual ~StringItem();
-
- virtual void store();
- virtual void retrieve();
-
-private:
- QLineEdit* myString;
-};
-
-/*!
- \class QtxListResourceEdit::IntegerEditItem
- GUI implementation of resources integer item.
-*/
-
-class QtxListResourceEdit::IntegerEditItem : public PrefItem
-{
-public:
- IntegerEditItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
- virtual ~IntegerEditItem();
-
- virtual void store();
- virtual void retrieve();
-
-private:
- QLineEdit* myInteger;
-};
-
-/*!
- \class QtxListResourceEdit::IntegerSpinItem
- GUI implementation of resources integer item.
-*/
-
-class QtxListResourceEdit::IntegerSpinItem : public PrefItem
-{
-public:
- IntegerSpinItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
- virtual ~IntegerSpinItem();
-
- virtual void store();
- virtual void retrieve();
-
- virtual QVariant property( const QString& ) const;
- virtual void setProperty( const QString&, const QVariant& );
-
-private:
- QtxIntSpinBox* myInteger;
-};
-
-/*!
- \class QtxListResourceEdit::DoubleEditItem
- GUI implementation of resources double item.
-*/
-
-class QtxListResourceEdit::DoubleEditItem : public PrefItem
-{
-public:
- DoubleEditItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
- virtual ~DoubleEditItem();
-
- virtual void store();
- virtual void retrieve();
-
-private:
- QLineEdit* myDouble;
-};
-
-/*!
- \class QtxListResourceEdit::DoubleSpinItem
- GUI implementation of resources double item.
-*/
-
-class QtxListResourceEdit::DoubleSpinItem : public PrefItem
-{
-public:
- DoubleSpinItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
- virtual ~DoubleSpinItem();
-
- virtual void store();
- virtual void retrieve();
-
- virtual QVariant property( const QString& ) const;
- virtual void setProperty( const QString&, const QVariant& );
-
-private:
- QtxDblSpinBox* myDouble;
-};
-
-/*!
- \class QtxListResourceEdit::ColorItem
- GUI implementation of resources color item.
-*/
-
-class QtxListResourceEdit::ColorItem : public PrefItem
-{
-public:
- ColorItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
- virtual ~ColorItem();
-
- virtual void store();
- virtual void retrieve();
-
-private:
- QWidget* myColor;
-};
-
-class QtxComboBox;
-class QToolButton;
-
-/*!
- \class QtxListResourceEdit::FontItem
- GUI implementation of resources font item.
-*/
-class QtxListResourceEdit::FontItem : public PrefItem
-{
- Q_OBJECT
-
-public:
- typedef enum
- {
- Family = 0x01,
- Size = 0x02,
- UserSize = 0x04,
- Bold = 0x08,
- Italic = 0x10,
- Underline = 0x20,
- Preview = 0x40,
-
- All = Family | Size | UserSize | Bold | Italic | Underline | Preview
-
- } WidgetFlags;
-
-public:
- FontItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
- virtual ~FontItem();
-
- virtual void store();
- virtual void retrieve();
-
- virtual QVariant property( const QString& ) const;
- virtual void setProperty( const QString&, const QVariant& );
-
-private slots:
- void onActivateFamily( int );
- void onPreview();
-
-private:
- void setFamily( const QString& );
- QString family() const;
- void setSize( const int );
- int size() const;
- void setParams( const bool, const bool, const bool );
- void params( bool&, bool&, bool& );
- void internalUpdate();
-
-private:
- int myFlags;
- bool myIsSystem;
- QtxComboBox *myFamilies, *mySizes;
- QCheckBox *myBold, *myItalic, *myUnderline;
- QToolButton *myPreview;
- QMap<QString, QVariant> myProperties;
-};
-
-
-/*!
- \class QtxListResourceEdit
- \brief GUI implementation of resources directory list item.
-*/
-class QtxListResourceEdit::DirListItem : public PrefItem
-{
- Q_OBJECT
-
-public:
-
- /*!
- * \brief Constructor
- */
- DirListItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
- /*!
- * \brief Destructor
- */
- virtual ~DirListItem();
-
- /*!
- * \brief Stores the data
- */
- virtual void store();
-
- /*!
- * \brief Retrieves the data
- */
- virtual void retrieve();
-
-private:
- QtxDirListEditor* myDirListEditor; //!< The widget wich implements in GUI the list of directories
-};
-
-class QtxComboBox;
-class QToolButton;
-class QFileDialog;
-
-/*!
- \class QtxListResourceEdit::FontItem
- GUI implementation of resources font item.
-*/
-
-class QtxListResourceEdit::FileItem : public PrefItem
-{
- Q_OBJECT
-
-private:
- /*!
- \class QtxListResourceEdit::FileItem::FileValidator
- custom file validator: checks files on some rights
- */
-
- class FileValidator : public QValidator
- {
- public:
- FileValidator( FileItem*, QObject* );
- ~FileValidator();
-
- virtual QValidator::State validate( QString&, int& ) const;
-
- private:
- FileItem* myItem;
- };
-
-public:
- FileItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
- virtual ~FileItem();
-
- virtual void store();
- virtual void retrieve();
-
- virtual QVariant property( const QString& ) const;
- virtual void setProperty( const QString&, const QVariant& );
-
- virtual bool isFileCorrect( const QString& ) const;
-
-private slots:
- void onOpenFile();
- void onFileSelected( const QString& );
-
-private:
- uint myFlags;
- bool myIsReadOnly;
- QStringList myFilter;
- bool myIsExisting;
- QLineEdit* myFile;
- QToolButton* myOpenFile;
- QFileDialog* myFileDlg;
-};
-
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include "QtxListView.h"
-
-#include <qheader.h>
-#include <qpopupmenu.h>
-#include <qpushbutton.h>
-
-static const char* list_xpm[] = {
-"16 16 6 1",
-". c None",
-"a c #E3E9EB",
-"b c #798391",
-"c c #EBEBEB",
-"d c #ABB4BE",
-"e c #030E1F",
-"................",
-"................",
-"................",
-"...aaaaaaaaaa...",
-"..abbbbbbbbbbe..",
-"..abecbecbecbe..",
-"..abbbbbbbbbbe..",
-"..abecbecbecbe..",
-"..abecaaaaaaaa..",
-"..abeccdbbbbbb..",
-"..abecccdbbbbe..",
-"..abbbbe.dbbe...",
-"...eeeee..de....",
-"................",
-"................",
-"................" };
-
-/*!
- Constructor
-*/
-QtxListView::QtxListView( const int state, QWidget* parent, const char* name, WFlags f )
-: QListView( parent, name, f ),
-myButton( 0 ),
-myHeaderState( state )
-{
- initialize();
-}
-
-/*!
- Constructor
-*/
-QtxListView::QtxListView( QWidget* parent, const char* name, WFlags f )
-: QListView( parent, name, f ),
-myButton( 0 ),
-myHeaderState( HeaderAuto )
-{
- initialize();
-}
-
-/*!
- Initialization
-*/
-void QtxListView::initialize()
-{
- if ( myHeaderState == HeaderButton )
- {
- QPixmap p( list_xpm );
-
- QPushButton* but = new QPushButton( this );
- but->setDefault( false );
- but->setFlat( true );
- but->setIconSet( p );
- but->setBackgroundPixmap( p );
- if ( p.mask() )
- but->setMask( *p.mask() );
- myButton = but;
-
- connect( myButton, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) );
- }
- else
- {
- header()->installEventFilter( this );
- }
-
- myPopup = new QPopupMenu( this );
- connect( myPopup, SIGNAL( activated( int ) ), this, SLOT( onShowHide( int ) ) );
- connect( header(), SIGNAL( sizeChange( int, int, int ) ), this, SLOT( onHeaderResized() ) );
-}
-
-/*!
- Destructor
-*/
-QtxListView::~QtxListView()
-{
-}
-
-/*!
- Add new column
- \param label - column title
- \param width - column width
-*/
-int QtxListView::addColumn( const QString& label, int width )
-{
- int res = QListView::addColumn( label, width );
- for ( int i = myAppropriate.count(); i <= res; i++ )
- myAppropriate.append( 1 );
- onHeaderResized();
- return res;
-}
-
-/*!
- Add new column
- \param iconset - column icon
- \param label - column title
- \param width - column width
-*/
-int QtxListView::addColumn( const QIconSet& iconset, const QString& label, int width )
-{
- int res = QListView::addColumn( iconset, label, width );
- for ( int i = myAppropriate.count(); i <= res; i++ )
- myAppropriate.append( 1 );
- onHeaderResized();
- return res;
-}
-
-/*!
- Removes column
- \param index - column index
-*/
-void QtxListView::removeColumn( int index )
-{
- QListView::removeColumn( index );
- if ( index >= 0 && index < (int)myAppropriate.count() )
- myAppropriate.remove( myAppropriate.at( index ) );
- onHeaderResized();
-}
-
-/*!
- \return true if column is situated in popup for show/hide columns
-*/
-bool QtxListView::appropriate( const int index ) const
-{
- return index >= 0 && index < (int)myAppropriate.count() && myAppropriate[index];
-}
-
-/*!
- Sets appropriate state: whether column is situated in popup for show/hide columns
- \param index - column index
- \param on - new state
-*/
-void QtxListView::setAppropriate( const int index, const bool on )
-{
- if ( index < 0 || index >= (int)myAppropriate.count() )
- return;
-
- myAppropriate[index] = on ? 1 : 0;
-}
-
-/*!
- Resizes list view and header
-*/
-void QtxListView::resize( int w, int h )
-{
- QListView::resize( w, h );
- onHeaderResized();
-}
-
-/*!
- Shows list view
-*/
-void QtxListView::show()
-{
- QListView::show();
- onHeaderResized();
-}
-
-/*!
- Update on resize contents
-*/
-void QtxListView::resizeContents( int w, int h )
-{
-/*
- if ( myButton && myButton->isVisibleTo( myButton->parentWidget() ) )
- {
- if ( header()->orientation() == Qt::Horizontal )
- w += myButton->width();
- else
- h += myButton->width();
- }
-*/
- QListView::resizeContents( w, h );
-
- onHeaderResized();
-}
-
-/*!
- Shows column
- \param ind - column index
-*/
-void QtxListView::show( int ind )
-{
- setShown( ind, true );
-}
-
-/*!
- Hides column
- \param ind - column index
-*/
-void QtxListView::hide( int ind )
-{
- setShown( ind, false );
-}
-
-/*!
- \return true if column is shown
- \param ind - column index
-*/
-bool QtxListView::isShown( int ind ) const
-{
- if ( ind>=0 && ind<header()->count() )
- return columnWidth( ind ) > 0 || header()->isResizeEnabled( ind );
- else
- return false;
-}
-
-/*!
- Shows/hides column
- \param ind - column index
- \param sh - new is shown state
-*/
-void QtxListView::setShown( int ind, bool sh )
-{
- if( ind<0 || ind>=header()->count() || isShown( ind )==sh )
- return;
-
- ColumnData& data = myColumns[ind];
- if ( sh )
- {
- int w = data.width;
- bool resizeable = data.resizeable;
- myColumns.remove( ind );
-
- setColumnWidth( ind, w );
- header()->setResizeEnabled( resizeable, ind );
- }
- else
- {
- int w = columnWidth( ind );
- bool r = header()->isResizeEnabled( ind );
- setColumnWidth( ind, 0 );
- header()->setResizeEnabled( false, ind );
- data.width = w;
- data.resizeable = r;
- }
- updateContents();
-}
-
-/*!
- Changes column width
- \param c - column index
- \param w - new width
-*/
-void QtxListView::setColumnWidth( int c, int w )
-{
- if ( myColumns.contains( c ) )
- myColumns[c].width = w;
-
- QListView::setColumnWidth( c, !myColumns.contains( c ) ? w : 0 );
-}
-
-/*!
- \return the recommended size for the widget
-*/
-QSize QtxListView::sizeHint() const
-{
- QSize sz = QListView::sizeHint();
-
- if ( myButton && myButton->isVisibleTo( myButton->parentWidget() ) )
- sz.setWidth( sz.width() + 2 + myButton->width() );
-
- return sz;
-}
-
-/*!
- \return the recommended minimum size for the widget
-*/
-QSize QtxListView::minimumSizeHint() const
-{
- QSize sz = QListView::minimumSizeHint();
-
- if ( myButton && myButton->isVisibleTo( myButton->parentWidget() ) )
- sz.setWidth( sz.width() + 2 + myButton->width() );
-
- return sz;
-}
-
-/*!
- SLOT: called if header is resized
-*/
-void QtxListView::onHeaderResized()
-{
- if ( myHeaderState == HeaderAuto )
- {
- int c = 0;
- for ( int i = 0; i < columns(); i++ )
- {
- if ( !header()->label( i ).isEmpty() ||
- ( header()->iconSet( i ) && !header()->iconSet( i )->isNull() ) )
- c++;
- }
-
- if ( c > 1 )
- header()->show();
- else
- header()->hide();
- }
-
- if ( !myButton || !header()->isVisibleTo( this ) )
- return;
-
- int lw = lineWidth();
- int h = header()->size().height() - 1;
- myButton->setFixedSize( h, h );
-
- int x = header()->headerWidth() - header()->offset() + 2;
- if ( x < header()->width() - h )
- x = header()->width() - h;
-
- if ( myHeaderState == HeaderButton )
- {
- if ( header()->orientation() == Qt::Horizontal )
- myButton->move( lw+x, lw );
- else
- myButton->move( lw, lw+x );
- }
-}
-
-/*!
- Shows popup filled with column names to show/hide column
- \param x, y - position of popup
-*/
-void QtxListView::showPopup( const int x, const int y )
-{
- myPopup->clear();
- for ( int i = 0; i < columns(); i++ )
- {
- if ( appropriate( i ) )
- {
- int id = myPopup->insertItem( header()->label( i ), i );
- myPopup->setItemChecked( id, isShown( i ) );
- }
- }
-
- if( myPopup->count() )
- myPopup->exec( mapToGlobal( QPoint( x, y ) ) );
-}
-
-/*!
- SLOT: shows popup on button ".." click
-*/
-void QtxListView::onButtonClicked()
-{
- if ( myHeaderState != HeaderButton )
- return;
-
- int x = myButton->x(),
- y = myButton->y() + myButton->height();
-
- showPopup( x, y );
-}
-
-/*!
- SLOT: called on popup action is activated, toggles shown state of column
- \param id - column index
-*/
-void QtxListView::onShowHide( int id )
-{
- //if ( myHeaderState != HeaderButton )
- // return;
-
- setShown( id, !isShown( id ) );
-}
-
-/*!
- Receives all resize events sent to the viewport
-*/
-void QtxListView::viewportResizeEvent( QResizeEvent* e )
-{
- QListView::viewportResizeEvent( e );
- onHeaderResized();
-}
-
-/*!
- Custom event filter, shows popup on right button click
-*/
-bool QtxListView::eventFilter( QObject* o, QEvent* e )
-{
- if( o==header() && e->type()==QEvent::MouseButtonPress )
- {
- QMouseEvent* me = ( QMouseEvent* )e;
- if( me->button()==Qt::RightButton )
- {
- showPopup( me->x()+2, me->y()+2 );
- return true;
- }
- }
-
- return QListView::eventFilter( o, e );
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#ifndef QTXLISTVIEW_H
-#define QTXLISTVIEW_H
-
-#include "Qtx.h"
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-#include <qlistview.h>
-#include <qiconset.h>
-
-class QButton;
-class QPopupMenu;
-
-class QTX_EXPORT QtxListView : public QListView
-{
- Q_OBJECT
-
-public:
- enum { HeaderAuto, HeaderButton, NoHeaderButton };
-
-public:
- QtxListView( QWidget* = 0, const char* = 0, WFlags = 0 );
- QtxListView( const int, QWidget* = 0, const char* = 0, WFlags = 0 );
- virtual ~QtxListView();
-
- virtual int addColumn( const QString&, int = -1 );
- virtual int addColumn( const QIconSet&, const QString&, int width = -1 );
-
- virtual void removeColumn( int );
-
- virtual void resize( int, int );
-
- void show( int );
- void hide( int );
-
- bool isShown( int ) const;
- void setShown( int, bool );
-
- bool appropriate( const int ) const;
- virtual void setAppropriate( const int, const bool );
-
- virtual void setColumnWidth( int, int );
-
- virtual QSize sizeHint() const;
- virtual QSize minimumSizeHint() const;
-
-public slots:
- virtual void show();
- virtual void resizeContents( int, int );
-
-protected slots:
- void onHeaderResized();
- void onButtonClicked();
- void onShowHide( int );
-
-protected:
- virtual void viewportResizeEvent( QResizeEvent* );
- virtual bool eventFilter( QObject*, QEvent* );
- virtual void showPopup( const int x, const int y );
-
-private:
- typedef struct { int width; bool resizeable; } ColumnData;
- typedef QMap<int, ColumnData> ColumnsMap;
-
-private:
- void initialize();
-
-private:
- QPopupMenu* myPopup;
- QButton* myButton;
- ColumnsMap myColumns;
- QIntList myAppropriate;
- int myHeaderState;
-};
-
-#ifdef WIN32
-#pragma warning( default:4251 )
-#endif
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#include "QtxLogoMgr.h"
-
-#include <qhbox.h>
-#include <qlabel.h>
-#include <qstyle.h>
-#include <qimage.h>
-#include <qbitmap.h>
-#include <qlayout.h>
-#include <qmenubar.h>
-#include <qapplication.h>
-
-/*!
- Constructor
-*/
-QtxLogoMgr::QtxLogoMgr( QMenuBar* mb )
-: QObject( mb ),
-myMenus( mb ),
-myId( 0 )
-{
-}
-
-/*!
- Destructor
-*/
-QtxLogoMgr::~QtxLogoMgr()
-{
-}
-
-/*!
- Returns the menubar.
-*/
-QMenuBar* QtxLogoMgr::menuBar() const
-{
- return myMenus;
-}
-
-/*!
- Returns the count of the existed logos.
-*/
-int QtxLogoMgr::count() const
-{
- return myLogos.count();
-}
-
-/*!
- Insert new logo to the menu bar area
-*/
-void QtxLogoMgr::insert( const QString& id, const QPixmap& pix, const int index )
-{
- if ( pix.isNull() )
- return;
-
- LogoInfo* inf = 0;
-
- int idx = find( id );
- if ( idx < 0 )
- {
- idx = index < (int)myLogos.count() ? index : -1;
- if ( idx < 0 )
- inf = &( *myLogos.append( LogoInfo() ) );
- else
- inf = &( *myLogos.insert( myLogos.at( idx ), LogoInfo() ) );
- }
- else
- inf = &( *myLogos.at( idx ) );
-
-
- inf->id = id;
- inf->pix = pix;
-
- generate();
-}
-
-/*!
- Removes a logo
-*/
-void QtxLogoMgr::remove( const QString& id )
-{
- int idx = find( id );
- if ( idx < 0 )
- return;
-
- myLogos.remove( myLogos.at( idx ) );
-
- generate();
-}
-
-/*!
- Removes all logos
-*/
-void QtxLogoMgr::clear()
-{
- myLogos.clear();
- generate();
-}
-
-/*!
- Inserts logo to menu bar
-*/
-void QtxLogoMgr::generate()
-{
- if ( !menuBar() )
- return;
-
- if ( myId )
- menuBar()->removeItem( myId );
-
- myId = 0;
-
- if ( myLogos.isEmpty() )
- return;
-
- class LogoBox : public QHBox
- {
- public:
- LogoBox( QWidget* parent = 0, const char* name = 0, WFlags f = 0 ) : QHBox( parent, name, f ) {};
-
- void addSpacing( int spacing )
- {
- QApplication::sendPostedEvents( this, QEvent::ChildInserted );
- ((QHBoxLayout*)layout())->addSpacing( spacing );
- }
-
- protected:
- void drawContents( QPainter* p )
- {
- if ( parentWidget()->inherits( "QMenuBar" ) )
- style().drawControl( QStyle::CE_MenuBarEmptyArea, p, this, contentsRect(), colorGroup() );
- else
- QHBox::drawContents( p );
- }
- };
-
- LogoBox* cnt = new LogoBox( menuBar() );
- cnt->setSpacing( 3 );
-
- for ( LogoList::const_iterator it = myLogos.begin(); it != myLogos.end(); ++it )
- {
- QPixmap pix = (*it).pix;
- if ( !pix.mask() )
- {
- QImage img = pix.convertToImage();
- QBitmap bm;
- if ( img.hasAlphaBuffer() )
- bm = img.createAlphaMask();
- else
- bm = img.createHeuristicMask();
- pix.setMask( bm );
- }
-
- QLabel* logoLab = new QLabel( cnt );
- logoLab->setPixmap( (*it).pix );
- logoLab->setScaledContents( false );
- logoLab->setAlignment( QLabel::AlignCenter );
-
- if ( pix.mask() )
- logoLab->setMask( *pix.mask() );
- }
-
- QApplication::sendPostedEvents( cnt, QEvent::ChildInserted );
- cnt->addSpacing( 2 );
-
- myId = menuBar()->insertItem( cnt );
-
- QApplication::sendPostedEvents( menuBar()->parentWidget(), QEvent::LayoutHint );
- QApplication::postEvent( menuBar()->parentWidget(), new QEvent( QEvent::LayoutHint ) );
-}
-
-/*!
- \return index of found logo
- \param id - logo id
-*/
-int QtxLogoMgr::find( const QString& id ) const
-{
- int idx = -1;
- for ( uint i = 0; i < myLogos.count() && idx < 0; i++ )
- {
- if ( (*myLogos.at( i ) ).id == id )
- idx = i;
- }
- return idx;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef QTX_LOGOMGR_H
-#define QTX_LOGOMGR_H
-
-#include "Qtx.h"
-
-class QMenuBar;
-
-#include <qobject.h>
-#include <qpixmap.h>
-
-#ifdef WIN32
-#pragma warning( disable : 4251 )
-#endif
-
-class QTX_EXPORT QtxLogoMgr : public QObject
-{
- Q_OBJECT
-
-public:
- QtxLogoMgr( QMenuBar* );
- virtual ~QtxLogoMgr();
-
- int count() const;
-
- void insert( const QString&, const QPixmap&, const int = -1 );
- void remove( const QString& );
- void clear();
-
- QMenuBar* menuBar() const;
-
-private:
- void generate();
- int find( const QString& ) const;
-
-private:
- typedef struct { QString id; QPixmap pix; } LogoInfo;
- typedef QValueList<LogoInfo> LogoList;
-
-private:
- int myId;
- QMenuBar* myMenus;
- LogoList myLogos;
-};
-
-#ifdef WIN32
-#pragma warning( default : 4251 )
-#endif
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxMRUAction.cxx
-// Author: Sergey TELKOV
-
-#include "QtxMRUAction.h"
-
-#include "QtxResourceMgr.h"
-
-#include <qpopupmenu.h>
-
-/*!
- Name: QtxMRUAction [public]
- Desc: Constructs an MRU action with given parent and name.
-*/
-
-QtxMRUAction::QtxMRUAction( QObject* parent, const char* name )
-: QtxAction( "Most Recently Used", "Most Recently Used", 0, parent, name ),
-myVisCount( 5 ),
-myPopupMode( SubMenu ),
-myInsertMode( MoveFirst )
-{
-}
-
-/*!
- Name: QtxMRUAction [public]
- Desc: This constructor creates an action with the following properties: the
- description text, the menu text and. It is a child of given parent and
- named specified name.
-*/
-
-QtxMRUAction::QtxMRUAction( const QString& text, const QString& menuText, QObject* parent, const char* name )
-: QtxAction( text, menuText, 0, parent, name ),
-myVisCount( 5 ),
-myPopupMode( SubMenu ),
-myInsertMode( MoveFirst )
-{
-}
-
-/*!
- Name: QtxMRUAction [public]
- Desc: This constructor creates an action with the following properties: the
- description text, the menu text, the icon or iconset icon and keyboard
- accelerator. It is a child of given parent and named specified name.
-*/
-
-QtxMRUAction::QtxMRUAction( const QString& text, const QIconSet& icon, const QString& menuText, QObject* parent, const char* name )
-: QtxAction( text, icon, menuText, 0, parent, name ),
-myVisCount( 5 ),
-myPopupMode( SubMenu ),
-myInsertMode( MoveFirst )
-{
-}
-
-/*!
- Name: ~QtxMRUAction [public]
- Desc: This destructor removes all added popup items.
-*/
-
-QtxMRUAction::~QtxMRUAction()
-{
- for ( ItemsMap::ConstIterator iIt = myItems.begin(); iIt != myItems.end(); ++iIt )
- removeFrom( iIt.key() );
-
- for ( MenusMap::ConstIterator mIt = myMenus.begin(); mIt != myMenus.end(); ++mIt )
- removeFrom( mIt.key() );
-}
-
-/*!
- Name: insertMode [public]
- Desc: Returns the insert mode.
-*/
-
-int QtxMRUAction::insertMode() const
-{
- return myInsertMode;
-}
-
-/*!
- Name: setInsertMode [public]
- Desc: Returns the insert mode. Can be following values:
- MoveFirst - place the specified link to the first position in any case
- MoveLast - place the specified link to the last position in any case
- AddFirst - if inserted link doesn't exist then add to the first position
- AddLast - if inserted link doesn't exist then add to the lase position
-*/
-
-void QtxMRUAction::setInsertMode( const int mode )
-{
- myInsertMode = mode;
-}
-
-/*!
- Name: popupMode [public]
- Desc: Returns the popup mode.
-*/
-
-int QtxMRUAction::popupMode() const
-{
- return myPopupMode;
-}
-
-/*!
- Name: setPopupMode [public]
- Desc: Set the popup mode. If this mode is 'Items' then method "addTo" creates the
- items in the specified popup menu. If mode is 'SubMenu' then items will be
- create in sub popup menu which will be placed in specified popup.
-*/
-
-void QtxMRUAction::setPopupMode( const int mode )
-{
- myPopupMode = mode;
-}
-
-/*!
- Name: count [public]
- Desc: Returns the number of links.
-*/
-
-int QtxMRUAction::count() const
-{
- return myLinks.count();
-}
-
-/*!
- Name: isEmpty [public]
- Desc: Returns 'true' if there is no links.
-*/
-
-bool QtxMRUAction::isEmpty() const
-{
- return myLinks.isEmpty();
-}
-
-/*!
- Name: visibleCount [public]
- Desc: Returns the number of first links which will be added to popup menu.
- If 'visibleCount' less than 1 then all links will be used.
-*/
-
-int QtxMRUAction::visibleCount() const
-{
- return myVisCount;
-}
-
-/*!
- Name: setVisibleCount [public]
- Desc: Sets the number of links which will be used in popup menu.
-*/
-
-void QtxMRUAction::setVisibleCount( int num )
-{
- if ( myVisCount == num )
- return;
-
- myVisCount = num;
-
- updateState();
-}
-
-/*!
- Name: insert [public]
- Desc: Insert the link according to the insert mode.
-*/
-
-void QtxMRUAction::insert( const QString& link )
-{
- if ( myLinks.contains( link ) && ( insertMode() == AddFirst || insertMode() == AddLast ) )
- return;
-
- myLinks.remove( link );
-
- switch ( insertMode() )
- {
- case AddFirst:
- case MoveFirst:
- myLinks.prepend( link );
- break;
- case AddLast:
- case MoveLast:
- myLinks.append( link );
- break;
- }
-
- updateState();
-}
-
-/*!
- Name: remove [public]
- Desc: Removes link with specified index.
-*/
-
-void QtxMRUAction::remove( const int idx )
-{
- if ( idx < 0 || idx >= (int)myLinks.count() )
- return;
-
- myLinks.remove( myLinks.at( idx ) );
-
- updateState();
-}
-
-/*!
- Name: remove [public]
- Desc: Removes specified link.
-*/
-
-void QtxMRUAction::remove( const QString& link )
-{
- if ( myLinks.remove( link ) )
- updateState();
-}
-
-/*!
- Name: item [public]
- Desc: Returns the link with specified index.
-*/
-
-QString QtxMRUAction::item( const int idx ) const
-{
- QString res;
- if ( idx >= 0 && idx < (int)myLinks.count() )
- res = myLinks[idx];
- return res;
-}
-
-/*!
- Name: find [public]
- Desc: Find specified link. If link exists then returns index otherwise -1 returned.
-*/
-
-int QtxMRUAction::find( const QString& link ) const
-{
- return myLinks.findIndex( link );
-}
-
-/*!
- Name: contains [public]
- Desc: Returns 'true' if given link exist.
-*/
-
-bool QtxMRUAction::contains( const QString& link ) const
-{
- return myLinks.contains( link );
-}
-
-/*!
- Name: addTo [public]
- Desc: Add the MRU links to the end of specified popup according to the popup mode.
-*/
-
-bool QtxMRUAction::addTo( QWidget* wid )
-{
- if ( !wid || !wid->inherits( "QPopupMenu" ) )
- return false;
-
- QPopupMenu* pm = (QPopupMenu*)wid;
- checkPopup( pm );
-
- int mode = popupMode();
-
- if ( ( mode == Items && myItems.contains( pm ) ) ||
- ( mode == SubMenu && myMenus.contains( pm ) ) )
- return false;
-
- bool exist = myItems.contains( pm ) || myMenus.contains( pm );
-
- if ( mode == SubMenu && !QtxAction::addTo( wid ) )
- return false;
-
- if ( mode == Items )
- {
- myItems.insert( pm, Item() );
- myItems[pm].pId = myItems[pm].nId -1;
- connect( pm, SIGNAL( activated( int ) ), this, SLOT( onActivated( int ) ) );
- }
- else if ( mode == SubMenu )
- {
- myMenus.insert( pm, new QPopupMenu( pm ) );
- setPopup( pm, pm->idAt( pm->count() - 1 ), myMenus[pm] );
- connect( myMenus[pm], SIGNAL( activated( int ) ), this, SLOT( onActivated( int ) ) );
- }
-
- if ( !exist )
- {
- connect( pm, SIGNAL( aboutToShow() ), this, SLOT( onAboutToShow() ) );
- connect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
- }
-
- return insertLinks( pm, mode );
-}
-
-/*!
- Name: addTo [public]
- Desc: Add the MRU links to the specified popup at given index according to the popup mode.
-*/
-
-bool QtxMRUAction::addTo( QWidget* wid, const int idx )
-{
- if ( !QtxAction::addTo( wid, idx ) )
- return false;
-
- QPopupMenu* pm = (QPopupMenu*)wid;
-
- removeLinks( pm, popupMode() );
- insertLinks( pm, popupMode(), idx );
-
- return true;
-}
-
-/*!
- Name: removeFrom [public]
- Desc: Removes all MRU links from specified popup.
-*/
-
-bool QtxMRUAction::removeFrom( QWidget* wid )
-{
- QtxAction::removeFrom( wid );
-
- QPopupMenu* pm = (QPopupMenu*)wid;
- if ( !wid || !wid->inherits( "QPopupMenu" ) )
- return false;
-
- if ( myItems.contains( pm ) )
- {
- removeLinks( pm, Items );
- myItems.remove( pm );
- disconnect( pm, SIGNAL( activated( int ) ), this, SLOT( onActivated( int ) ) );
- }
- if ( myMenus.contains( pm ) )
- {
- removeLinks( pm, SubMenu );
- delete myMenus[pm];
- myMenus.remove( pm );
- }
-
- disconnect( pm, SIGNAL( aboutToShow() ), this, SLOT( onAboutToShow() ) );
- disconnect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
-
- return true;
-}
-
-/*!
- Name: loadLinks [public]
- Desc: Load the MRU links from specified resource manager section.
- If parameter 'clear' is 'true' then link list will be cleared first.
-*/
-
-void QtxMRUAction::loadLinks( QtxResourceMgr* resMgr, const QString& section, const bool clear )
-{
- if ( !resMgr || section.isEmpty() )
- return;
-
- if ( clear )
- myLinks.clear();
-
- QString itemPrefix( "item_" );
-
- QMap<QString, int> map;
- for ( QStringList::const_iterator itr = myLinks.begin(); itr != myLinks.end(); ++ itr )
- map.insert( *itr, 0 );
-
- QStringList items = resMgr->parameters( section );
- for ( QStringList::const_iterator it = items.begin(); it != items.end(); ++it )
- {
- if ( !(*it).startsWith( itemPrefix ) )
- continue;
-
- QString link = resMgr->stringValue( section, *it, QString::null );
- if ( link.isEmpty() || map.contains( link ) )
- continue;
-
- myLinks.append( link );
- map.insert( link, 0 );
- }
-
- updateState();
-}
-
-/*!
- Name: saveLinks [public]
- Desc: Save the MRU links into specified resource manager section.
- If parameter 'clear' is 'true' then section will be cleared first.
-*/
-
-void QtxMRUAction::saveLinks( QtxResourceMgr* resMgr, const QString& section, const bool clear ) const
-{
- if ( !resMgr || section.isEmpty() )
- return;
-
- if ( clear )
- resMgr->remove( section );
-
- QStringList lst;
- QMap<QString, int> map;
- for ( QStringList::const_iterator itr = myLinks.begin(); itr != myLinks.end(); ++itr )
- map.insert( *lst.append( *itr ), 0 );
-
- QString itemPrefix( "item_" );
- QStringList items = resMgr->parameters( section );
- for ( QStringList::const_iterator it = items.begin(); it != items.end(); ++it )
- {
- if ( !(*it).startsWith( itemPrefix ) )
- continue;
-
- QString link = resMgr->stringValue( section, *it, QString::null );
- if ( !link.isEmpty() && !map.contains( link ) )
- map.insert( *lst.append( link ), 0 );
-
- resMgr->remove( section, *it );
- }
-
- int counter = 0;
- for ( QStringList::const_iterator iter = lst.begin(); iter != lst.end(); ++iter, counter++ )
- resMgr->setValue( section, itemPrefix + QString().sprintf( "%03d", counter ), *iter );
-}
-
-/*!
- Name: setEnabled [public slot]
- Desc: Enable or disable all popup items with MRU links.
-*/
-
-void QtxMRUAction::setEnabled( bool on )
-{
- QtxAction::setEnabled( on );
-
- for ( ItemsMap::ConstIterator iter = myItems.begin(); iter != myItems.end(); ++iter )
- for ( QIntList::const_iterator it = iter.data().idList.begin(); it != iter.data().idList.end(); ++it )
- iter.key()->setItemEnabled( *it, on );
-}
-
-/*!
- Name: onAboutToShow [private slots]
- Desc: Enable or disable sub menu item according to number of MRU links
- in sub popup when parent popup is shown.
-*/
-
-void QtxMRUAction::onAboutToShow()
-{
- const QObject* obj = sender();
- if ( obj && obj->inherits( "QPopupMenu" ) )
- {
- QPopupMenu* pm = (QPopupMenu*)obj;
- if ( myMenus.contains( pm ) )
- pm->setItemEnabled( findId( pm, myMenus[pm]), isEnabled() && myMenus[pm] && myMenus[pm]->count() );
- }
-}
-
-/*!
- Name: onActivated [private slot]
- Desc: Process popup item activation and emit signal activated with selected MRU link.
-*/
-
-void QtxMRUAction::onActivated( int id )
-{
- const QObject* obj = sender();
- if ( !obj->inherits( "QPopupMenu" ) )
- return;
-
- QPopupMenu* pm = (QPopupMenu*)obj;
-
- QString link;
- if ( ( myItems.contains( pm ) && myItems[pm].idList.contains( id ) ) ||
- ( myMenus.contains( (QPopupMenu*)pm->parent() ) && myMenus[(QPopupMenu*)pm->parent()] == pm ) )
- link = pm->text( id );
-
- if ( !link.isEmpty() )
- emit activated( link );
-}
-
-/*!
- Name: onDestroyed [private slot]
- Desc: Removes deleted popup menu from internal data structures.
-*/
-
-void QtxMRUAction::onDestroyed( QObject* obj )
-{
- if ( !obj )
- return;
-
- myItems.remove( (QPopupMenu*)obj );
- myMenus.remove( (QPopupMenu*)obj );
-}
-
-/*!
- Name: updateState [private]
- Desc: Updates the state of all popup menus which contains MRU link items.
-*/
-
-void QtxMRUAction::updateState()
-{
- for ( ItemsMap::ConstIterator iIt = myItems.begin(); iIt != myItems.end(); ++iIt )
- updatePopup( iIt.key(), Items );
-
- for ( MenusMap::ConstIterator mIt = myMenus.begin(); mIt != myMenus.end(); ++mIt )
- updatePopup( mIt.key(), SubMenu );
-}
-
-/*!
- Name: checkPopup [private]
- Desc: Check consistency the popup content and internal datas.
- Synchronize internal data structures with popup content.
-*/
-
-void QtxMRUAction::checkPopup( QPopupMenu* pm )
-{
- if ( myItems.contains( pm ) )
- {
- bool found = true;
- for ( QIntList::const_iterator it = myItems[pm].idList.begin(); it != myItems[pm].idList.end() && found; ++it )
- found = pm->indexOf( *it ) != -1;
- if ( !found )
- {
- removeLinks( pm, Items );
- myItems.remove( pm );
- disconnect( pm, SIGNAL( activated( int ) ), this, SLOT( onActivated( int ) ) );
- }
- }
- if ( myMenus.contains( pm ) )
- {
- int id = findId( pm, myMenus[pm] );
- if ( id == -1 )
- {
- delete myMenus[pm];
- myMenus.remove( pm );
- }
- }
-
- if ( !myItems.contains( pm ) && !myMenus.contains( pm ) )
- disconnect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
-}
-
-/*!
- Name: updatePopup [private]
- Desc: Updates the MRU link items state in the specified popup menu.
-*/
-
-void QtxMRUAction::updatePopup( QPopupMenu* pm, const int mode )
-{
- if ( !pm )
- return;
-
- int idx = -1;
- if ( mode == Items && myItems.contains( pm ) )
- {
- if ( !myItems[pm].idList.isEmpty() )
- idx = pm->indexOf( myItems[pm].idList.first() );
- else
- {
- int pIdx = pm->indexOf( myItems[pm].pId );
- int nIdx = pm->indexOf( myItems[pm].nId );
- if ( pIdx != -1 )
- idx = pIdx + 1;
- else if ( nIdx != -1 )
- idx = nIdx - 1;
- }
- }
-
- removeLinks( pm, mode );
- insertLinks( pm, mode, idx );
-}
-
-/*!
- Name: removeLinks [private]
- Desc: Removes MRU link items from specified popup.
-*/
-
-bool QtxMRUAction::removeLinks( QPopupMenu* pm, const int mode )
-{
- if ( !pm )
- return false;
-
- if ( mode == SubMenu && myMenus.contains( pm ) )
- myMenus[pm]->clear();
- else if ( mode == Items && myItems.contains( pm ) )
- {
- for ( QIntList::const_iterator it = myItems[pm].idList.begin(); it != myItems[pm].idList.end(); ++it )
- pm->removeItem( *it );
- myItems[pm].idList.clear();
- }
-
- return true;
-}
-
-/*!
- Name: insertLinks [private]
- Desc: Inserts MRU link items to the specified popup.
-*/
-
-bool QtxMRUAction::insertLinks( QPopupMenu* pm, const int mode, const int idx )
-{
- if ( !pm )
- return false;
-
- int count = visibleCount() < 0 ? myLinks.count() : visibleCount();
- bool isOn = isEnabled();
- if ( mode == SubMenu && myMenus.contains( pm ) )
- {
- for ( QStringList::const_iterator it = myLinks.begin(); it != myLinks.end() && count > 0; ++it, count-- )
- {
- int id = myMenus[pm]->insertItem( *it, -1 );
- myMenus[pm]->setItemEnabled( id, isOn );
- }
- }
- else if ( mode == Items )
- {
- QIntList ids;
- int index = idx;
- for ( QStringList::const_iterator it = myLinks.begin(); it != myLinks.end() && count > 0; ++it, count-- )
- {
- ids.append( pm->insertItem( *it, -1, index ) );
- pm->setItemEnabled( ids.last(), isOn );
- if ( index >= 0 )
- index++;
- }
- myItems[pm].idList = ids;
- if ( !myItems[pm].idList.isEmpty() )
- {
- myItems[pm].pId = pm->idAt( pm->indexOf( myItems[pm].idList.first() ) - 1 );
- myItems[pm].nId = pm->idAt( pm->indexOf( myItems[pm].idList.first() ) + 1 );
- }
- }
- return true;
-}
-
-/*!
- Name: findId [private]
- Desc: Returns identificator of popup item which contains sub popup 'pm' in the popup 'cont'.
-*/
-
-int QtxMRUAction::findId( QPopupMenu* cont, QPopupMenu* pm ) const
-{
- if ( !cont || !pm )
- return -1;
-
- int id = -1;
-
- for ( int i = 0; i < (int)cont->count() && id == -1; i++ )
- {
- QMenuData* md = 0;
- QMenuItem* item = cont->findItem( cont->idAt( i ), &md );
- if ( item && md == cont && item->popup() == pm )
- id = item->id();
- }
- return id;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxMRUAction.h
-// Author: Sergey TELKOV
-
-#ifndef QTXMRUACTION_H
-#define QTXMRUACTION_H
-
-#include "QtxAction.h"
-
-#include <qmap.h>
-#include <qstringlist.h>
-
-class QPopupMenu;
-class QtxResourceMgr;
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-class QTX_EXPORT QtxMRUAction : public QtxAction
-{
- Q_OBJECT
-
- Q_PROPERTY( int visibleCount READ visibleCount WRITE setVisibleCount )
-
-public:
- enum { Items, SubMenu };
- enum { MoveFirst, MoveLast, AddFirst, AddLast };
-
-public:
- QtxMRUAction( QObject* = 0, const char* = 0 );
- QtxMRUAction( const QString&, const QString&, QObject*, const char* = 0 );
- QtxMRUAction( const QString&, const QIconSet&, const QString&, QObject*, const char* = 0 );
- virtual ~QtxMRUAction();
-
- int insertMode() const;
- void setInsertMode( const int );
-
- int popupMode() const;
- void setPopupMode( const int );
-
- int count() const;
- bool isEmpty() const;
-
- int visibleCount() const;
- void setVisibleCount( const int );
-
- void remove( const int );
- void remove( const QString& );
- void insert( const QString& );
-
- QString item( const int ) const;
- int find( const QString& ) const;
- bool contains( const QString& ) const;
-
- virtual bool addTo( QWidget* );
- virtual bool addTo( QWidget*, const int );
-
- virtual bool removeFrom( QWidget* );
-
- virtual void loadLinks( QtxResourceMgr*, const QString&, const bool = true );
- virtual void saveLinks( QtxResourceMgr*, const QString&, const bool = true ) const;
-
-signals:
- void activated( QString );
-
-public slots:
- virtual void setEnabled( bool );
-
-private slots:
- void onAboutToShow();
- void onActivated( int );
- void onDestroyed( QObject* );
-
-private:
- void updateState();
- void checkPopup( QPopupMenu* );
- void updatePopup( QPopupMenu*, const int );
- bool removeLinks( QPopupMenu*, const int );
- bool insertLinks( QPopupMenu*, const int, const int = -1 );
-
- int findId( QPopupMenu*, QPopupMenu* ) const;
-
-private:
- typedef struct { int pId, nId; QIntList idList; } Item;
- typedef QMap<QPopupMenu*, Item> ItemsMap;
- typedef QMap<QPopupMenu*, QPopupMenu*> MenusMap;
-
-private:
- QStringList myLinks;
- ItemsMap myItems;
- MenusMap myMenus;
- int myVisCount;
- int myPopupMode;
- int myInsertMode;
-};
-
-#endif
#include "QtxToolBar.h"
#include "QtxResourceMgr.h"
-#include <qlayout.h>
-#include <qmenubar.h>
-#include <qstatusbar.h>
-#include <qapplication.h>
+#include <QtGui/qlayout.h>
+#include <QtGui/qmenubar.h>
+#include <QtGui/qstatusbar.h>
+#include <QtGui/qapplication.h>
+#include <QtGui/qdesktopwidget.h>
/*!
Class: QtxMainWindow::Filter [Internal]
Descr: Main window with support of dockable menubar/status bar
and geometry store/retrieve.
*/
-QtxMainWindow::QtxMainWindow( QWidget* parent, const char* name, WFlags f )
-: QMainWindow( parent, name, f ),
+QtxMainWindow::QtxMainWindow( QWidget* parent, Qt::WindowFlags f )
+: QMainWindow( parent ),
myMode( -1 ),
myMenuBar( NULL ),
myStatusBar( NULL )
if ( on && !myMenuBar )
{
- mb->setCaption( tr( "Menu bar" ) );
- QtxToolBar* dockMb = new QtxToolBar( true, this, "menu bar container" );
+ mb->setWindowTitle( tr( "Menu bar" ) );
+ QtxToolBar* dockMb = new QtxToolBar( true, this );
+ dockMb->setObjectName( "menu_bar_container" );
myMenuBar = dockMb;
new Filter( mb, this, myMenuBar );
- dockMb->setWidget( mb );
- dockMb->setNewLine( true );
- dockMb->setStretchable( true );
- dockMb->setResizeEnabled( false );
+ dockMb->addWidget( mb );
+ dockMb->setAllowedAreas( Qt::TopToolBarArea | Qt::BottomToolBarArea );
+ addToolBar( Qt::TopToolBarArea, dockMb );
- moveDockWindow( dockMb, DockTop );
- setDockEnabled( dockMb, Left, false );
- setDockEnabled( dockMb, Right, false );
-
- setAppropriate( dockMb, false );
+// setAppropriate( dockMb, false );
connect( dockMb, SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
}
else if ( !on && myMenuBar )
{
- mb->reparent( this, QPoint( 0, 0 ), mb->isVisibleTo( mb->parentWidget() ) );
+ mb->setParent( this );
disconnect( myMenuBar, SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
delete myMenuBar;
myMenuBar = 0;
if ( on && !myStatusBar )
{
- sb->setCaption( tr( "Status bar" ) );
- QtxToolBar* dockSb = new QtxToolBar( true, this, "status bar container" );
+ sb->setWindowTitle( tr( "Status bar" ) );
+ QtxToolBar* dockSb = new QtxToolBar( true, this );
+ dockSb->setObjectName( "status_bar_container" );
myStatusBar = dockSb;
new Filter( sb, this, myStatusBar );
- dockSb->setWidget( sb );
- dockSb->setNewLine( true );
- dockSb->setStretchable( true );
- dockSb->setResizeEnabled( false );
sb->setMinimumWidth( 250 );
-
sb->setSizeGripEnabled( false );
- moveDockWindow( dockSb, DockBottom );
- setDockEnabled( dockSb, Left, false );
- setDockEnabled( dockSb, Right, false );
+ dockSb->addWidget( sb );
+ dockSb->setAllowedAreas( Qt::TopToolBarArea | Qt::BottomToolBarArea );
+ addToolBar( Qt::BottomToolBarArea, dockSb );
- setAppropriate( dockSb, false );
+// setAppropriate( dockSb, false );
connect( dockSb, SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
}
else if ( !on && myStatusBar )
{
- sb->reparent( this, QPoint( 0, 0 ), sb->isVisibleTo( sb->parentWidget() ) );
+ sb->setParent( this );
disconnect( myStatusBar, SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
delete myStatusBar;
myStatusBar = 0;
*/
void QtxMainWindow::loadGeometry( QtxResourceMgr* resMgr, const QString& section )
{
- QString sec = section.stripWhiteSpace();
+ QString sec = section.trimmed();
if ( !resMgr || sec.isEmpty() )
return;
move( win_x, win_y );
myMode = -1;
-
+/*
if ( vis )
- QApplication::postEvent( this, new QCustomEvent( QEvent::User, (void*)winState ) );
+ QApplication::postEvent( this, new QEvent( QEvent::User, (void*)winState ) );
else
myMode = winState;
+*/
}
/*!
*/
void QtxMainWindow::show()
{
+/*
if ( myMode != -1 )
QApplication::postEvent( this, new QCustomEvent( QEvent::User, (void*)myMode ) );
-
+*/
myMode = -1;
QMainWindow::show();
/*!
Handler of custom events
*/
-void QtxMainWindow::customEvent( QCustomEvent* e )
+void QtxMainWindow::customEvent( QEvent* e )
{
QMainWindow::customEvent( e );
- size_t mode = size_t(e->data());
+ int mode = WS_Normal;
+// int mode = (int)e->data();
switch ( mode )
{
case WS_Normal:
*/
void QtxMainWindow::saveGeometry( QtxResourceMgr* resMgr, const QString& section ) const
{
- QString sec = section.stripWhiteSpace();
+ QString sec = section.trimmed();
if ( !resMgr || sec.isEmpty() )
return;
*/
void QtxMainWindow::setAppropriate( QDockWindow* dw, bool a )
{
- QMainWindow::setAppropriate( dw, myStatusBar != dw && myMenuBar != dw && a );
+// QMainWindow::setAppropriate( dw, myStatusBar != dw && myMenuBar != dw && a );
}
/*!
*/
void QtxMainWindow::setUpLayout()
{
- QMainWindow::setUpLayout();
+// QMainWindow::setUpLayout();
if ( myMenuBar && layout() )
layout()->setMenuBar( 0 );
}
int res = -1;
- QString stateStr = str.stripWhiteSpace().lower();
+ QString stateStr = str.trimmed().toLower();
if ( winStateMap.contains( stateStr ) )
res = winStateMap[stateStr];
return res;
}
int res = WP_Absolute;
- QString posStr = str.stripWhiteSpace().lower();
+ QString posStr = str.trimmed().toLower();
if ( winPosMap.contains( posStr ) )
res = winPosMap[posStr];
return res;
#include "Qtx.h"
-#include <qmainwindow.h>
+#include <QtGui/qmainwindow.h>
class QDockWindow;
class QtxResourceMgr;
enum { WP_Absolute, WP_Center, WP_Left, WP_Right, WP_Top = WP_Left, WP_Bottom = WP_Right };
public:
- QtxMainWindow( QWidget* = 0, const char* = 0, WFlags = WType_TopLevel );
+ QtxMainWindow( QWidget* = 0, Qt::WindowFlags = 0 );
virtual ~QtxMainWindow();
bool isDockableMenuBar() const;
protected:
virtual void setUpLayout();
- virtual void customEvent( QCustomEvent* );
+ virtual void customEvent( QEvent* );
private slots:
void onDestroyed( QObject* );
private:
int myMode;
- QDockWindow* myMenuBar;
- QDockWindow* myStatusBar;
+ QToolBar* myMenuBar;
+ QToolBar* myStatusBar;
};
#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxMenuButton.cxx
-// Author: Sergey TELKOV
-
-#include "QtxMenuButton.h"
-
-#include <qstyle.h>
-#include <qpainter.h>
-#include <qpopupmenu.h>
-#include <qpointarray.h>
-#include <qapplication.h>
-
-class QtxMenuButton::PopupMenu : public QPopupMenu
-{
-public:
- PopupMenu( QtxMenuButton* mb ) : QPopupMenu( mb ), myMenuButton( mb ) {};
- virtual ~PopupMenu() {};
-
- virtual void setMinimumSize( int, int );
-
-private:
- QtxMenuButton* myMenuButton;
-};
-
-/*!
- Sets the widget's minimum size
- \param w - width
- \param h - height
-*/
-void QtxMenuButton::PopupMenu::setMinimumSize( int w, int h )
-{
- if ( myMenuButton->isAlignWidth() &&
- ( myMenuButton->position() == Top || myMenuButton->position() == Bottom ) )
- w = QMAX( w, myMenuButton->width() );
-
- QPopupMenu::setMinimumSize( w, h );
-}
-
-
-/*!
- Constructor
- \param pos - position
- \param parent - parent widget
- \param name - name
-*/
-QtxMenuButton::QtxMenuButton( int pos, QWidget* parent, const char* name )
-: QPushButton( parent, name ),
-myPos( pos )
-{
- initialize();
-}
-
-/*!
- Constructor
- \param text - button text
- \param parent - parent widget
- \param name - name
-*/
-QtxMenuButton::QtxMenuButton( const QString& text, QWidget* parent, const char* name )
-: QPushButton( parent, name ),
-myPos( Bottom )
-{
- setText( text );
- initialize();
-}
-
-/*!
- Constructor
- \param pos - position
- \param text - button text
- \param parent - parent widget
- \param name - name
-*/
-QtxMenuButton::QtxMenuButton( int pos, const QString& text, QWidget* parent, const char* name )
-: QPushButton( parent, name ),
-myPos( pos )
-{
- setText( text );
- initialize();
-}
-
-/*!
- Constructor
- \param parent - parent widget
- \param name - name
-*/
-QtxMenuButton::QtxMenuButton( QWidget* parent, const char* name )
-: QPushButton( parent, name ),
-myPos( Bottom )
-{
- initialize();
-}
-
-/*!
- Destructor
-*/
-QtxMenuButton::~QtxMenuButton()
-{
-}
-
-/*!
- Initialization
-*/
-void QtxMenuButton::initialize()
-{
- myArrow = true;
- myAlign = true;
-
- setAutoDefault( false );
- myPopup = new PopupMenu( this );
- myPopup->hide();
-
- connect( myPopup, SIGNAL( activated( int ) ), this, SIGNAL( activated( int ) ) );
- connect( this, SIGNAL( clicked() ), this, SLOT( onShowPopup() ) );
-}
-
-/*!
- \return position
-*/
-int QtxMenuButton::position() const
-{
- return myPos;
-}
-
-/*!
- \return true if align is enabled
-*/
-bool QtxMenuButton::isAlignWidth() const
-{
- return myAlign;
-}
-
-/*!
- \return true if arrow is shown
-*/
-bool QtxMenuButton::isArrowEnabled() const
-{
- return myArrow;
-}
-
-/*!
- Changes position
- \param pos - new position
-*/
-void QtxMenuButton::setPosition( const int pos )
-{
- if ( myPos == pos )
- return;
-
- myPos = pos;
- if ( myPopup->isVisible() )
- onShowPopup();
-}
-
-/*!
- Changes align state
- \param on - new align state
-*/
-void QtxMenuButton::setAlignWidth( const bool on )
-{
- if ( myAlign == on )
- return;
-
- myAlign = on;
- updateGeometry();
-}
-
-/*!
- Enables/disable arrow
- \param on - new enabled state
-*/
-void QtxMenuButton::setArrowEnabled( const bool on )
-{
- if ( myArrow == on )
- return;
-
- myArrow = on;
- repaint();
-}
-
-/*!
- Clears popup
-*/
-void QtxMenuButton::clear()
-{
- if ( myPopup )
- myPopup->clear();
- onShowPopup();
- updateGeometry();
-}
-
-/*!
- Removes item from popup
- \param id - item id
-*/
-void QtxMenuButton::removeItem( int id )
-{
- if ( myPopup )
- myPopup->removeItem( id );
- updateGeometry();
-}
-
-/*!
- Inserts separator into popup
- \param id - position
-*/
-int QtxMenuButton::insertSeparator( int id )
-{
- int res = -1;
- if ( myPopup )
- res = myPopup->insertSeparator( id );
- return res;
-}
-
-/*!
- Inserts item into popup
- \param t - menu text
- \param id - item id
- \param index - position
-*/
-int QtxMenuButton::insertItem( const QString& t, int id, int index )
-{
- int resId = -1;
- if ( myPopup )
- resId = myPopup->insertItem( t, id, index );
-
- if ( resId != -1 )
- updateGeometry();
-
- return resId;
-}
-
-/*!
- Inserts item into popup
- \param is - icons
- \param t - menu text
- \param id - item id
- \param index - position
-*/
-int QtxMenuButton::insertItem( const QIconSet& is, const QString& t, int id, int index )
-{
- int resId = -1;
- if ( myPopup )
- resId = myPopup->insertItem( is, t, id, index );
-
- if ( resId != -1 )
- updateGeometry();
-
- return resId;
-}
-
-/*!
- SLOT: calls when button is clicked, shows popup
-*/
-void QtxMenuButton::onShowPopup()
-{
- if ( !myPopup || !myPopup->count() )
- {
- myPopup->hide();
- return;
- }
-
- QPoint p = mapToGlobal( QPoint( 0, 0 ) );
- int x = p.x();
- int y = p.y() + 1;
- int margin = 0;
- int xoffset = 0;
- int yoffset = 0;
- switch ( position() )
- {
- case Left:
- xoffset = -1 * ( myPopup->sizeHint().width() + margin );
- break;
- case Right:
- xoffset = width() + margin;
- break;
- case Top:
- yoffset = -1 * ( myPopup->sizeHint().height() + margin );
- break;
- case Bottom:
- default:
- yoffset = height() + margin;
- break;
- }
- int dw = QApplication::desktop()->width();
- int dh = QApplication::desktop()->height();
- x = QMIN( QMAX( x + xoffset, 0 ), dw );
- y = QMIN( QMAX( y + yoffset, 0 ), dh );
-
- myPopup->exec( QPoint( x, y ) );
-}
-
-/*!
- Custom event handler
-*/
-bool QtxMenuButton::event( QEvent* e )
-{
- if ( e->type() == QEvent::MouseButtonPress ||
- e->type() == QEvent::MouseButtonDblClick ||
- e->type() == QEvent::MouseButtonRelease )
- {
- onShowPopup();
- return false;
- }
-
- return QPushButton::event( e );
-}
-
-/*!
- \return the recommended size for the widget
-*/
-QSize QtxMenuButton::sizeHint() const
-{
- QSize sz = QPushButton::sizeHint();
- if ( ( position() == Top || position() == Bottom ) && myPopup && myAlign )
- sz = QSize( QMAX( sz.width(), myPopup->sizeHint().width() ), sz.height() );
-
- return sz;
-}
-
-/*!
- \return the recommended minimum size for the widget
-*/
-QSize QtxMenuButton::minimumSizeHint() const
-{
- QSize sz = QPushButton::minimumSizeHint();
- if ( ( position() == Top || position() == Bottom ) && myPopup && myAlign )
- sz = QSize( QMAX( sz.width(), myPopup->sizeHint().width() ), sz.height() );
-
- return sz;
-}
-
-/*!
- Custom resize event handler
-*/
-void QtxMenuButton::resizeEvent( QResizeEvent* re )
-{
- if ( re )
- QPushButton::resizeEvent( re );
-
- if ( ( position() == Top || position() == Bottom ) && myPopup && myAlign )
- myPopup->setMinimumWidth( re ? re->size().width() : width() );
-}
-
-/*!
- \return corresponding popup
-*/
-QPopupMenu* QtxMenuButton::popup() const
-{
- return myPopup;
-}
-
-/*!
- Draws label
-*/
-void QtxMenuButton::drawButtonLabel( QPainter* p )
-{
- QPushButton::drawButtonLabel( p );
-/*
- QStyle::SFlags flags = QStyle::Style_Default;
- if ( isEnabled() )
- flags |= QStyle::Style_Enabled;
- if ( hasFocus() )
- flags |= QStyle::Style_HasFocus;
-*/
-#if QT_VER < 3
- QRect r = rect();
-#else
- QRect r = style().subRect( QStyle::SR_PushButtonContents, this );
-#endif
-
- if ( myArrow && myPopup && myPopup->count() )
- {
- int w = 7;
- int h = 7;
- int margin = 5;
-
- QRect ar( 0, 0, w, h );
- if ( position() == Left || position() == Top )
- r.moveBy( ar.width() + 2 * margin, 0 );
- else
- ar.moveBy( r.width() - ar.width() - 2 * margin, 0 );
-
- r.setWidth( r.width() - ar.width() - 2 * margin );
-
- ar.moveBy( margin, ( height() - h ) / 2 );
-
- QPointArray arrow( 3 );
- switch ( position() )
- {
- case Left:
- arrow.putPoints( 0, 3, ar.left(), ar.top() + ar.height() / 2, ar.right(), ar.top(), ar.right(), ar.bottom() );
- break;
- case Right:
- arrow.putPoints( 0, 3, ar.left(), ar.top(), ar.left(), ar.bottom(), ar.right(), ar.top() + ar.height() / 2 );
- break;
- case Top:
- arrow.putPoints( 0, 3, ar.left(), ar.bottom(), ar.right(), ar.bottom(), ar.left() + ar.width() / 2, ar.top() );
- break;
- case Bottom:
- default:
- arrow.putPoints( 0, 3, ar.left(), ar.top(), ar.right(), ar.top(), ar.left() + ar.width() / 2, ar.bottom() );
- break;
- }
-
- p->setPen( colorGroup().text() );
- p->setBrush( colorGroup().text() );
- p->drawPolygon( arrow, true );
- }
-
-// style().drawControl( QStyle::CE_PushButtonLabel, p, this, r, colorGroup(), flags );
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxMenuButton.h
-// Author: Sergey TELKOV
-
-#ifndef QTXMENUBUTTON_H
-#define QTXMENUBUTTON_H
-
-#include "Qtx.h"
-
-#include <qpushbutton.h>
-
-class QIconSet;
-class QPopupMenu;
-
-class QTX_EXPORT QtxMenuButton : public QPushButton
-{
- Q_OBJECT
-
- class PopupMenu;
-
-public:
- enum { Left, Right, Top, Bottom };
-
-public:
- QtxMenuButton( int, QWidget* = 0, const char* = 0 );
- QtxMenuButton( const QString&, QWidget* = 0, const char* = 0 );
- QtxMenuButton( int, const QString&, QWidget* = 0, const char* = 0 );
- QtxMenuButton( QWidget* = 0, const char* = 0 );
- virtual ~QtxMenuButton();
-
- int position() const;
- void setPosition( const int );
-
- bool isAlignWidth() const;
- void setAlignWidth( const bool );
-
- bool isArrowEnabled() const;
- void setArrowEnabled( const bool );
-
- void clear();
- void removeItem( int );
- int insertSeparator( int = -1 );
- int insertItem( const QString&, int = -1, int = -1 );
- int insertItem( const QIconSet&, const QString&, int = -1, int = -1 );
-
- virtual QSize sizeHint() const;
- virtual QSize minimumSizeHint() const;
-
-signals:
- void activated( int );
-
-private slots:
- void onShowPopup();
-
-protected:
- QPopupMenu* popup() const;
- virtual bool event( QEvent* );
- virtual void resizeEvent( QResizeEvent* );
- virtual void drawButtonLabel( QPainter* );
-
-private:
- void initialize();
-
-private:
- int myPos;
- bool myArrow;
- bool myAlign;
- QPopupMenu* myPopup;
-};
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include "QtxOperations.h"
-
-/*!
- Default constructor
-*/
-QtxOperations::QtxOperations()
-{
-}
-
-/*!
- Destructor
-*/
-QtxOperations::~QtxOperations()
-{
-}
-
-/*!
- Creates QtxValue by it's string representation
-*/
-bool QtxOperations::createValue( const QString& str, QtxValue& v ) const
-{
- v = str;
- return false;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxOperations.h
-// Author: Alexander SOLOVYOV
-
-#ifndef __QTX_OPERATIONS_HEADER__
-#define __QTX_OPERATIONS_HEADER__
-
-#include "Qtx.h"
-#include "QtxParser.h"
-
-class QTX_EXPORT QtxOperations
-{
-public:
- QtxOperations();
- virtual ~QtxOperations();
-
- virtual void opersList( QStringList& ) const = 0;
- //list of possible operations
-
- virtual void bracketsList( QStringList&, bool open ) const = 0;
- //list of open/close brackets
-
- virtual bool createValue( const QString&, QtxValue& ) const;
- //by default, the String value will be set, it corresponds to parameter
- //base method returns false (always parameter)
- //successor's method returns true if it has created custom value
- //or call base if it hasn't
-
- virtual int prior( const QString&, bool isBin ) const = 0;
- //returns prioritet of operation;
- //if operation is impossible, it must return 0 or less
-
- virtual QtxParser::Error isValid( const QString&,
- const QVariant::Type,
- const QVariant::Type ) const = 0;
- //return OK if this parameter types is valid for operation
- //return OperandsNotMatch or InvalidOperation otherwise
-
- virtual QtxParser::Error calculate( const QString&, QtxValue&, QtxValue& ) const = 0;
- //process binary operation with values
- //for unary operation the second QtxValue will be passed as invalid
-};
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include "QtxParser.h"
-#include "QtxOperations.h"
-
-/*!
- Constructor
-*/
-QtxParser::QtxParser( QtxOperations* operations, const QString& expr )
-: myOperations( operations )
-{
- if( myOperations )
- {
- setLastError( OK );
- setExpr( expr );
- }
- else
- setLastError( OperationsNull );
-}
-
-/*!
- Destructor
-*/
-QtxParser::~QtxParser()
-{
-}
-
-/*!
- Search elements of list as substrings starting on 'offset'
- \returns the least position of substrings inside string
- \param list - list of substrings
- \param str - string where search
- \param offset - starting index for search
- \param matchLen - the length of appropriate substring
- \param listind - list index of appropriate substring
-*/
-int QtxParser::search( const QStringList& list, const QString& str, int offset,
- int& matchLen, int& listind )
-{
- QStringList::const_iterator anIt = list.begin(), aLast = list.end();
- int min = -1;
- for( int ind = 0; anIt!=aLast; anIt++, ind++ )
- {
- //const char* where = str.latin1(), *what = (*anIt).latin1();
- int pos = str.find( *anIt, offset );
- if( pos>=0 && ( min < 0 || min > pos ||
- ( min==pos && matchLen< (int)(*anIt).length() ) ) )
- {
- min = pos;
- listind = ind;
- matchLen = (*anIt).length();
- }
- }
- if( min<0 )
- matchLen = 0;
- return min;
-}
-
-/*!
- \return substring
- \param str - string
- \param pos - start position of substring
- \param len - length of substring
-*/
-QString QtxParser::note( const QString& str, int pos, int len )
-{
- return str.mid( pos, len ).stripWhiteSpace();
-}
-
-/*!
- First step of parsing: finding tokens, determining its types and creating of unsorted pseudo-postfix (with brackets)
- \param expr - string expression
- \param post - postfix to be created
-*/
-bool QtxParser::prepare( const QString& expr, Postfix& post )
-{
- int pos = 0, len = expr.length();
- QValueStack< int > aBracketStack;
- QStringList anOpers, anOpenBr, aCloseBr;
- if( myOperations )
- {
- myOperations->bracketsList( anOpenBr, true );
- myOperations->bracketsList( aCloseBr, false );
- myOperations->opersList( anOpers );
- }
- else
- {
- setLastError( OperationsNull );
- return false;
- }
-
- while( pos < len && lastError()==OK )
- {
- PostfixItem item;
- while( expr[ pos ].isSpace() && pos<len ) pos++;
- if( pos>=len )
- break;
-
- int mBrLen = 0, mLen = 0, br_ind = -1, op_ind = -1;
- int oPos = search( anOpenBr, expr, pos, mBrLen, br_ind ),
- cPos = oPos==pos ? -1 : search( aCloseBr, expr, pos, mBrLen, br_ind ),
- opPos = search( anOpers, expr, pos, mLen, op_ind );
-
- if( expr[ pos ]=="'" )
- {
- int vpos = pos+1;
- while ( vpos< (int)expr.length() && expr[ vpos ]!="'" )
- vpos++;
-
- mLen = vpos-pos+1;
-
- int res = myOperations->createValue( note( expr, pos, mLen ), item.myValue );
- item.myType = res ? Value : Param;
- post.append( item );
- pos = vpos+1;
- continue;
- }
-
- if( oPos==pos )
- {
- aBracketStack.push( br_ind );
- item.myValue = note( expr, pos, mBrLen );
- item.myType = Open;
- post.append( item );
- }
-
- else if( cPos==pos )
- {
- if( aBracketStack.count()==0 )
- {
- setLastError( ExcessClose );
- break;
- }
- if( br_ind!=aBracketStack.top() )
- {
- setLastError( BracketsNotMatch );
- break;
- }
- else
- {
- aBracketStack.pop();
- item.myValue = note( expr, pos, mBrLen );
- item.myType = Close;
- post.append( item );
- }
- }
- else
- mBrLen = 0;
-
- if( opPos==pos )
- {
- mBrLen = 0;
- item.myValue = note( expr, pos, mLen );
- item.myType = Binary;
- //the type is set by default;
- //the method setOperationTypes will set correct types
-
- if( oPos==pos )
- post.insert( post.at( post.count()-1 ), item );
- else
- post.append( item );
- }
- else
- {
- mLen = 0;
- if( oPos!=pos && cPos!=pos )
- {
- int i;
- for( i=pos+1; i<(int)expr.length(); i++ )
- if( expr[ i ].isSpace() )
- break;
-
- int vpos = i;
- if( oPos>=0 && oPos<vpos )
- vpos = oPos;
- if( cPos>=0 && cPos<vpos )
- vpos = cPos;
- if( opPos>=0 && opPos<vpos )
- vpos = opPos;
-
- while( vpos<(int)expr.length() &&
- ( expr[vpos].isLetter() || expr[vpos].isDigit() || expr[vpos]=='_' ) )
- vpos++;
-
- mLen = vpos-pos;
- bool res = myOperations->createValue( note( expr, pos, mLen ), item.myValue );
- item.myType = res ? Value : Param;
- post.append( item );
- }
- }
-
- pos+=mBrLen+mLen;
- }
-
- //Bracket checking
- PostfixIterator anIt = post.begin(),
- aLast = post.end();
- int brValue = 0;
- for( ; anIt!=aLast; anIt++ )
- if( (*anIt).myType==Open )
- brValue++;
- else if( (*anIt).myType==Close )
- if( brValue>0 )
- brValue--;
- else
- {
- setLastError( ExcessClose );
- break;
- }
- if( brValue>0 )
- setLastError( CloseExpected );
-
- return lastError()==OK;
-}
-
-/*!
- Second step of parsing: determining types of operations
- \param post - unsorted postfix
-*/
-bool QtxParser::setOperationTypes( Postfix& post )
-{
- Postfix::iterator aStart = post.begin(),
- aLast = post.end(),
- anIt = aStart, aPrev, aNext;
- QStringList anOpen, aClose;
- if( myOperations )
- {
- myOperations->bracketsList( anOpen, true );
- myOperations->bracketsList( aClose, false );
- }
- else
- return false;
-
- for( ; anIt!=aLast; anIt++ )
- {
- aPrev = anIt; aPrev--;
- aNext = anIt; aNext++;
- if( (*anIt).myType != Binary )
- continue;
-
- if( ( anIt==aStart || (*aPrev).myType == Open ||
- (*aPrev).myType == Pre ||
- (*aPrev).myType == Binary )
- &&
- aNext!=aLast && ( (*aNext).myType == Value ||
- (*aNext).myType == Param ||
- (*aNext).myType == Open ||
- (*aNext).myType == Binary ) )
- (*anIt).myType = Pre;
-
- else if( anIt!=aStart && ( (*aPrev).myType == Close ||
- (*aPrev).myType == Param ||
- (*aPrev).myType == Value ||
- (*aPrev).myType == Pre ||
- (*aPrev).myType == Post ||
- (*aPrev).myType == Binary )
- &&
- ( aNext==aLast || (*aNext).myType == Close ) )
- (*anIt).myType = Post;
-
- if( anOpen.contains( ( *anIt ).myValue.toString() )>0 )
- (*anIt).myType = Pre;
- else if( aClose.contains( ( *anIt ).myValue.toString() )>0 )
- (*anIt).myType = Post;
- }
-
- return lastError()==OK;
-}
-
-/*!
- \return how many global brackets there is (for example '((2+3))' has 2 global brackets)
- \param post - postfix to be checked
- \param f - start index to search
- \param l - last index to search
-*/
-int QtxParser::globalBrackets( const QtxParser::Postfix& post, int f, int l )
-{
- int i,
- start_br = 0,
- fin_br = 0,
- br = 0,
- br_num = 0,
- min_br_num = (l-f+1)*5;
-
- for( i=f; i<=l; i++ )
- if( post[ i ].myType==QtxParser::Open )
- start_br++;
- else
- break;
- for( i=l; i>=f; i-- )
- if( post[ i ].myType==QtxParser::Close )
- fin_br++;
- else
- break;
-
- br = start_br<fin_br ? start_br : fin_br;
- for( i=f+br; i<=l-br; i++ )
- {
- if( post[i].myType==QtxParser::Open )
- br_num++;
- else if( post[i].myType==QtxParser::Close )
- br_num--;
- if( br_num<min_br_num )
- min_br_num = br_num;
- }
-
- return br+min_br_num;
-}
-
-/*!
- Third step of parsing: sorting of postfix in order to convert it to real postfix
- \param post - source postfix
- \param res - destination postfix
- \param anOpen - list of open brackets
- \param aClose - list of close brackets
- \param f - start index of postfix to sorting
- \param l - last index of postfix to sorting
-*/
-bool QtxParser::sort( const Postfix& post, Postfix& res,
- const QStringList& anOpen,
- const QStringList& aClose,
- int f, int l )
-{
- if( l<f )
- return true;
-
- if( f<0 )
- f = 0;
- if( l<0 )
- l = post.count()-1;
-
- int br = globalBrackets( post, f, l );
- f+=br; l-=br;
-
- if( f==l && f>=0 )
- res.append( post[ f ] );
- if( l<=f )
- return true;
-
- if( myOperations )
- {
- int min = -1;
- QIntList argmin;
- QValueList< PostfixItemType > min_types;
-
- //Find operation with minimal priority
- //PostfixIterator anIt = post.at( f ),
- // aLast = post.at( l+1 );
- for( int i=0, j=f; j<=l; i++, j++ )
- {
- const PostfixItem& item = post[ j ];
- PostfixItemType tt = item.myType;
- if( tt==Binary || tt==Pre || tt==Post )
- {
- int cur_pr = myOperations->prior( item.myValue.toString(), tt==Binary );
- if( cur_pr>0 )
- {
- if( min<0 || min>=cur_pr )
- {
- if( min==cur_pr )
- {
- argmin.append( f+i );
- min_types.append( tt );
- }
- else
- {
- min = cur_pr;
- argmin.clear(); argmin.append( f+i );
- min_types.clear(); min_types.append( tt );
- }
- }
- }
- else
- {
- setLastError( InvalidOperation );
- break;
- }
- }
- else if( tt==Open )
- {
- QString opBr = item.myValue.toString();
- int ind = anOpen.findIndex( opBr ), brValue = 0;
- while( j<=l )
- {
- const PostfixItem& anItem = post[ j ];
- if( anItem.myType==Open )
- brValue++;
-
- if( anItem.myType==Close )
- {
- brValue--;
- QString clBr = anItem.myValue.toString();
- if( aClose.findIndex( clBr )==ind && brValue==0 )
- break;
- }
- i++; j++;
- }
- if( brValue>0 )
- {
- setLastError( CloseExpected );
- break;
- }
- }
- }
-
- if( lastError()==OK )
- if( min>=0 )
- {
- QValueList< Postfix > parts;
- QIntList::const_iterator anIt = argmin.begin(),
- aLast = argmin.end();
- Postfix one;
- bool ok = sort( post, one, anOpen, aClose, f, *anIt - 1 );
- parts.append( one );
- one.clear();
- for( ; anIt!=aLast && ok; anIt++ )
- {
- QIntList::const_iterator aNext = anIt; aNext++;
- ok = sort( post, one, anOpen, aClose, *anIt + 1, aNext==aLast ? l : *aNext - 1 );
- parts.append( one );
- one.clear();
- }
- if( !ok )
- return false;
-
- QValueList< Postfix >::const_iterator aPIt = parts.begin();
- QValueList< PostfixItemType >::const_iterator aTIt = min_types.begin();
- QValueStack< PostfixItem > aStack;
- res += (*aPIt); aPIt++;
- anIt = argmin.begin();
- for( ; anIt!=aLast; anIt++, aPIt++, aTIt++ )
- {
- if( *aTIt==Pre )
- if( anOpen.contains( post[ *anIt ].myValue.toString() )==0 )
- {
- res+=(*aPIt);
- aStack.push( post[ *anIt ] );
- }
- else
- {
- res.append( post[ *anIt ] );
- res+=(*aPIt);
- }
- else
- {
- res+=(*aPIt);
- while( !aStack.isEmpty() )
- {
- res.append( aStack.top() );
- aStack.pop();
- }
- res.append( post[ *anIt ] );
- }
- }
- while( !aStack.isEmpty() )
- {
- res.append( aStack.top() );
- aStack.pop();
- }
- }
- else
- { //there are no operations
- PostfixIterator anIt = post.at( f ),
- aLast = post.at( l+1 );
- for( ; anIt!=aLast; anIt++ )
- if( (*anIt).myType==Value || (*anIt).myType==Param )
- res.append( *anIt );
- }
- }
- else
- setLastError( OperationsNull );
-
- return lastError()==OK;
-}
-
-/*!
- Build posfix by expression
- \param expr - string expression
-*/
-bool QtxParser::parse( const QString& expr )
-{
- myPost.clear();
-
- Postfix p;
- QStringList opens, closes;
-
- if( myOperations )
- {
- setLastError( OK );
- myOperations->bracketsList( opens, true );
- myOperations->bracketsList( closes, false );
- }
- else
- {
- setLastError( OperationsNull );
- return false;
- }
-
- //return prepare( expr, myPost ) && setOperationTypes( myPost );
- return prepare( expr, p ) && setOperationTypes( p ) &&
- sort( p, myPost, opens, closes );
-}
-
-/*!
- Calculate operation
- \param op - operation name
- \param v1 - first argument (it is not valid for unary prefix operations and it is used to store result)
- \param v2 - second argument (it is not valid for unary postfix operations)
-*/
-bool QtxParser::calculate( const QString& op, QtxValue& v1, QtxValue& v2 )
-{
- Error err = myOperations->isValid( op, v1.type(), v2.type() );
- if( err==OK )
- setLastError( myOperations->calculate( op, v1, v2 ) );
- else
- setLastError( err );
-
- return lastError()==OK;
-}
-
-/*!
- Calculates expression without postfix rebuilding
- \return QtxValue as result (it is invalid if there were errors during calculation)
-*/
-QtxValue QtxParser::calculate()
-{
- setLastError( OK );
-
- QStringList anOpen, aClose;
- if( myOperations )
- {
- myOperations->bracketsList( anOpen, true );
- myOperations->bracketsList( aClose, false );
- }
- else
- {
- setLastError( OperationsNull );
- return QtxValue();
- }
-
- QtxValueStack aStack;
- PostfixIterator anIt = myPost.begin(),
- aLast = myPost.end();
- for( ; anIt!=aLast && lastError()==OK; anIt++ )
- {
- QString nn = (*anIt).myValue.toString();
- if( (*anIt).myType==Param )
- {
- if( has( nn ) )
- {
- QVariant& v = myParameters[ nn ];
- if( v.isValid() )
- aStack.push( v );
- else
- setLastError( InvalidToken );
- }
- else
- setLastError( InvalidToken );
- }
-
- else if( (*anIt).myType==Value )
- aStack.push( (*anIt).myValue );
-
- else if( (*anIt).myType==Pre || (*anIt).myType==Post )
- {
- if( anOpen.contains( nn )>0 )
- {
- QtxValue inv;
- if( calculate( nn, inv, inv ) )
- aStack.push( QtxValue() );
- }
- else if( aClose.contains( nn )>0 )
- {
- QValueList< QtxValue > set;
- while( true )
- {
- if( aStack.count()==0 )
- {
- setLastError( StackUnderflow );
- break;
- }
- if( aStack.top().isValid() )
- {
- set.append( aStack.top() );
- aStack.pop();
- }
- else
- {
- aStack.pop();
- break;
- }
- }
-
- QtxValue qSet = set, inv;
- if( calculate( nn, qSet, inv ) )
- aStack.push( set );
- }
- else if( aStack.count()>=1 )
- {
- QtxValue inv;
- QtxValue* v1 = &aStack.top(), *v2 = &inv; //"post-" case
- if( (*anIt).myType==Pre )
- {
- v2 = &aStack.top(); v1 = &inv;
- }
-
- calculate( nn, *v1, *v2 );
- }
- else
- setLastError( StackUnderflow );
- }
-
- else if( (*anIt).myType==Binary )
- {
- if( aStack.count()>=2 )
- {
- QVariant v2 = aStack.top(); aStack.pop();
- calculate( nn, aStack.top(), v2 );
- }
- else
- setLastError( StackUnderflow );
- }
- }
-
- QtxValue res;
- if( lastError()==OK )
- {
- int count = aStack.count();
- if( count==0 )
- setLastError( StackUnderflow );
- else if( count==1 )
- res = aStack.top();
- else
- setLastError( ExcessData );
- }
- return res;
-}
-
-/*!
- Change expression, rebuild postfix and calculate it
- \return QtxValue as result (it is invalid if there were errors during calculation)
-*/
-QtxValue QtxParser::calculate( const QString& expr )
-{
- setExpr( expr );
- return calculate();
-}
-
-/*!
- Change expression and rebuild postfix
-*/
-bool QtxParser::setExpr( const QString& expr )
-{
- return parse( expr );
-}
-
-/*!
- \return true, if parser contain parameter
- \param name - name of parameter
-*/
-bool QtxParser::has( const QString& name ) const
-{
- return myParameters.contains( name.stripWhiteSpace() );
-}
-
-/*!
- Sets parameter value
- \param name - name of parameter
- \param value - value of parameter
-*/
-void QtxParser::set( const QString& name, const QtxValue& value )
-{
- myParameters[ name.stripWhiteSpace() ] = value;
-}
-
-/*!
- Removes parameter
- \param name - name of parameter
-*/
-bool QtxParser::remove( const QString& name )
-{
- QString sname = name.stripWhiteSpace();
- bool res = has( sname );
- if( res )
- myParameters.remove( sname );
- return res;
-}
-
-/*!
- \return value of parameter (result is invalid if there is no such parameter)
- \param name - name of parameter
-*/
-QtxValue QtxParser::value( const QString& name ) const
-{
- QString sname = name.stripWhiteSpace();
- if( has( sname ) )
- return myParameters[ sname ].toString();
- else
- return QtxValue();
-}
-
-/*!
- Searches first parameter with assigned invalid QtxValue
- \return true if it is found
- \param name - variable to return name of parameter
-*/
-bool QtxParser::firstInvalid( QString& name ) const
-{
- QMap< QString, QtxValue >::const_iterator anIt = myParameters.begin(),
- aLast = myParameters.end();
- for( ; anIt!=aLast; anIt++ )
- if( !anIt.data().isValid() )
- {
- name = anIt.key();
- return true;
- }
- return false;
-}
-
-/*!
- Removes all parameters with assigned invalid QtxValues
-*/
-void QtxParser::removeInvalids()
-{
- QStringList toDelete;
- QMap< QString, QtxValue >::const_iterator anIt = myParameters.begin(),
- aLast = myParameters.end();
- for( ; anIt!=aLast; anIt++ )
- if( !anIt.data().isValid() )
- toDelete.append( anIt.key() );
-
- QStringList::const_iterator aLIt = toDelete.begin(),
- aLLast = toDelete.end();
- for( ; aLIt!=aLLast; aLIt++ )
- myParameters.remove( *aLIt );
-}
-
-/*!
- \return last error occured during parsing
-*/
-QtxParser::Error QtxParser::lastError() const
-{
- return myLastError;
-}
-
-/*!
- Sets last error occured during parsing (for internal using only)
-*/
-void QtxParser::setLastError( QtxParser::Error err )
-{
- myLastError = err;
-}
-
-/*!
- \return string dump of internal parser postfix
-*/
-QString QtxParser::dump() const
-{
- return dump( myPost );
-}
-
-/*!
- \return string dump of postfix
- \param post - postfix to be dumped
-*/
-QString QtxParser::dump( const Postfix& post ) const
-{
- QString res;
-
- if( myOperations )
- {
- PostfixIterator anIt = post.begin(),
- aLast = post.end();
- for( ; anIt!=aLast; anIt++ )
- {
- if( (*anIt).myType == Value &&
- ( ( *anIt ).myValue.type()==QVariant::String ||
- ( *anIt ).myValue.type()==QVariant::CString ) )
- res += "'" + ( *anIt ).myValue.toString() + "'";
- else
- res += ( *anIt ).myValue.toString();
- if( (*anIt).myType == Pre )
- res += "(pre)";
- else if( (*anIt).myType == Post )
- res += "(post)";
- else if( (*anIt).myType == Binary )
- res += "(bin)";
-
- res += "_";
- }
- }
- return res;
-}
-
-/*!
- Fills list with names of parameters
- \param list - list to be filled
-*/
-void QtxParser::paramsList( QStringList& list )
-{
- PostfixIterator anIt = myPost.begin(),
- aLast = myPost.end();
- for( ; anIt!=aLast; anIt++ )
- if( (*anIt).myType==Param )
- {
- QString name = (*anIt).myValue.toString();
- if( list.contains( name )==0 )
- list.append( name );
- }
-}
-
-/*!
- Removes all parameters
-*/
-void QtxParser::clear()
-{
- myParameters.clear();
-}
-
-/*!
- \return string representation for list of QtxValues
- \param list - list to be converted
-*/
-QString QtxParser::toString( const QValueList< QtxValue >& list )
-{
- QValueList< QtxValue >::const_iterator anIt = list.begin(),
- aLast = list.end();
- QString res = "set : [ ";
- for( ; anIt!=aLast; anIt++ )
- res+=(*anIt).toString()+" ";
- res+="]";
- return res;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxParser.h
-// Author: Alexander SOLOVYOV
-
-#ifndef __QTX_PARSER_HEADER__
-#define __QTX_PARSER_HEADER__
-
-#include "Qtx.h"
-#include <qvaluestack.h>
-#include <qvariant.h>
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-
-class QtxOperations;
-
-/*! \var QtxValue
- \brief Alias for QVariant
-*/
-typedef QVariant QtxValue;
-
-
-/*!
- \class QtxParser
-
- This class allows to calculate values of expressions using different set of operations.
- It is provided some of standard set of operations (arithmetics, logic, strings, etc - in QtxStdOperations.h).
- This parser allows to use parameters with help of methods has(), set(), remove(), value(). It uses
- postfix representation of expressions and uses class QtxOperations in order to make certain operation
- Every instance of parser contains only one postfix, so that if expression has been changed, then postfix
- must be rebuilt. In order to increase performance of frequent calculation for many of expressions it is
- recommended to use different instances of parser for expressions
-
-*/
-class QTX_EXPORT QtxParser
-{
-public:
- /*!
- \enum Error
- \brief Errors during parsing
- */
- typedef enum
- {
- OK, /*! \var All right */
- OperandsNotMatch, /*! \var Types of arguments are invalid for this operation */
- InvalidResult, /*! \var Operation cannot find result (for example, division by zero) */
- InvalidOperation, /*! \var Name of operation is unknown */
- OperationsNull, /*! \var Internal operations pointer of parser is null */
- InvalidToken, /*! \var It isn't operation, parameter of value */
- CloseExpected, /*! \var Close bracket is expected */
- ExcessClose, /*! \var The one of close bracket is excess */
- BracketsNotMatch, /*! \var Last open and this close bracket are different, for example [) */
- StackUnderflow, /*! \var There is no arguments in stack for operation */
- ExcessData /*! \var The parsing is finished, but there is more then one value in stack */
-
- } Error;
-
-public:
- QtxParser( QtxOperations*, const QString& = QString::null );
- virtual ~QtxParser();
-
- QtxValue calculate();
- QtxValue calculate( const QString& );
- bool setExpr( const QString& );
-
- virtual void clear();
- virtual bool has ( const QString& name ) const;
- virtual void set ( const QString& name, const QtxValue& value );
- virtual bool remove( const QString& name );
- virtual QtxValue value ( const QString& name ) const;
-
- bool firstInvalid( QString& ) const;
- void removeInvalids();
- QString dump() const;
- Error lastError() const;
- void paramsList( QStringList& );
-
- static QString toString( const QValueList< QtxValue >& );
-
-protected:
- /*!
- \enum PostfixItemType
- \brief Types of postfix representation elements
- */
- typedef enum
- {
- Value, /*! \var Value (number, string, etc.)*/
- Param, /*! \var Parameter */
- Open, /*! \var Open bracket */
- Close, /*! \var Close bracket */
- Pre, /*! \var Unary prefix operation */
- Post, /*! \var Unary postfix operation */
- Binary /*! \var Binary operation */
-
- } PostfixItemType;
-
- /*! \var postfix representation element */
- typedef struct
- {
- QtxValue myValue;
- PostfixItemType myType;
-
- } PostfixItem;
-
- /*! \var postfix representation */
- typedef QValueList< PostfixItem > Postfix;
-
- /*! \var postfix representation iterator */
- typedef Postfix::const_iterator PostfixIterator;
-
-protected:
- QString dump( const Postfix& ) const;
- virtual bool prepare( const QString&, Postfix& );
- virtual bool setOperationTypes( Postfix& );
- virtual bool sort( const Postfix&, Postfix&,
- const QStringList&, const QStringList&,
- int f=-1, int l=-1 );
-
- virtual bool parse( const QString& );
- virtual void setLastError( const Error );
-
- bool calculate( const QString&, QtxValue&, QtxValue& );
-
- static int search ( const QStringList&, const QString&, int offset,
- int& matchLen, int& listind );
- static QString note ( const QString& str, int pos, int len );
- static int globalBrackets( const Postfix&, int, int );
-
-private:
- /*! \var stack of QtxValues */
- typedef QValueStack < QtxValue > QtxValueStack;
-
-private:
- QtxOperations* myOperations;
- QMap< QString, QtxValue > myParameters;
- Error myLastError;
- Postfix myPost;
-};
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxPathDialog.cxx
-// Author: Sergey TELKOV
-
-#include "QtxPathDialog.h"
-
-#include "QtxGroupBox.h"
-
-#include <qdir.h>
-#include <qlabel.h>
-#include <qpixmap.h>
-#include <qlayout.h>
-#include <qlineedit.h>
-#include <qfileinfo.h>
-#include <qobjectlist.h>
-#include <qstringlist.h>
-#include <qfiledialog.h>
-#include <qmessagebox.h>
-#include <qpushbutton.h>
-
-static const char* open_icon[] = {
-"16 16 5 1",
-" c none",
-". c #ffff00",
-"# c #848200",
-"a c #ffffff",
-"b c #000000",
-" ",
-" bbb ",
-" b b b",
-" bb",
-" bbb bbb",
-" ba.abbbbbbb ",
-" b.a.a.a.a.b ",
-" ba.a.a.a.ab ",
-" b.a.abbbbbbbbbb",
-" ba.ab#########b",
-" b.ab#########b ",
-" bab#########b ",
-" bb#########b ",
-" bbbbbbbbbbb ",
-" ",
-" "
-};
-
-/*!
- Constructor.
-*/
-QtxPathDialog::QtxPathDialog( const bool import, QWidget* parent, const bool modal, const bool resize, const int buttons, WFlags f )
-: QtxDialog( parent, 0, modal, resize, buttons, f ),
-myDefault( -1 ),
-myEntriesFrame( 0 ),
-myOptionsFrame( 0 )
-{
- initialize();
-
- setCaption( tr( import ? "Open file" : "Save file" ) );
-
- setDefaultEntry( createFileEntry( tr( "File name" ), import ? OpenFile : SaveFile ) );
- QLineEdit* le = fileEntry( defaultEntry() );
- if ( le )
- le->setMinimumWidth( 200 );
-
- validate();
-
- setFocusProxy( le );
-}
-
-/*!
- Constructor.
-*/
-QtxPathDialog::QtxPathDialog( QWidget* parent, const bool modal, const bool resize, const int buttons, WFlags f )
-: QtxDialog( parent, 0, modal, resize, buttons, f ),
-myDefault( -1 ),
-myEntriesFrame( 0 ),
-myOptionsFrame( 0 )
-{
- initialize();
-}
-
-/*!
- Destructor.
-*/
-QtxPathDialog::~QtxPathDialog()
-{
-}
-
-/*!
- \return file name
-*/
-QString QtxPathDialog::fileName() const
-{
- return fileName( defaultEntry() );
-}
-
-/*!
- Sets file name
- \param txt - new file name
- \param autoExtension - auto extension determination by file
-*/
-void QtxPathDialog::setFileName( const QString& txt, const bool autoExtension )
-{
- setFileName( defaultEntry(), txt, autoExtension );
-}
-
-/*!
- \return filter
-*/
-QString QtxPathDialog::filter() const
-{
- return myFilter;
-}
-
-/*!
- Changes filter (filter is a list of masks, separated by ';;')
- \param fltr - new filter
-*/
-void QtxPathDialog::setFilter( const QString& fltr )
-{
- myFilter = fltr;
-}
-
-/*!
- Shows path dialog
-*/
-void QtxPathDialog::show()
-{
- if ( hasVisibleChildren( myEntriesFrame ) )
- myEntriesFrame->show();
- else
- myEntriesFrame->hide();
-
- if ( hasVisibleChildren( myOptionsFrame ) )
- myOptionsFrame->show();
- else
- myOptionsFrame->hide();
-
- QtxDialog::show();
-}
-
-/*!
- SLOT: called if user click button to show standard file dialog
-*/
-void QtxPathDialog::onBrowse()
-{
- const QObject* obj = sender();
-
- int id = -1;
-
- for ( FileEntryMap::Iterator it = myEntries.begin(); it != myEntries.end() && id == -1; ++it )
- if ( it.data().btn == obj )
- id = it.key();
-
- if ( id == -1 )
- return;
-
- FileEntry& entry = myEntries[id];
-
- bool isDir = entry.mode != OpenFile && entry.mode != SaveFile;
-
- if ( !entry.dlg )
- {
- entry.dlg = new QFileDialog( QDir::current().path(), QString::null, this, 0, true );
- entry.dlg->setCaption( caption() );
- switch ( entry.mode )
- {
- case NewDir:
- case OpenDir:
- case SaveDir:
- isDir = true;
- entry.dlg->setMode( QFileDialog::DirectoryOnly );
- break;
- case SaveFile:
- entry.dlg->setMode( QFileDialog::AnyFile );
- break;
- case OpenFile:
- default:
- entry.dlg->setMode( QFileDialog::ExistingFile );
- break;
- }
- }
-
- if ( !isDir )
- entry.dlg->setFilters( prepareFilters() );
- entry.dlg->setSelection( fileName( id ) );
-
- if ( entry.dlg->exec() != Accepted )
- return;
-
- QString fName = entry.dlg->selectedFile();
-
- if ( fName.isEmpty() )
- return;
-
- if ( QFileInfo( fName ).extension().isEmpty() && !isDir )
- fName = autoExtension( fName, entry.dlg->selectedFilter() );
-
- fName = QDir::convertSeparators( fName );
- QString prev = QDir::convertSeparators( fileName( id ) );
- if ( isDir )
- {
- while ( prev.length() && prev.at( prev.length() - 1 ) == QDir::separator() )
- prev.remove( prev.length() - 1, 1 );
- while ( fName.length() && fName.at( fName.length() - 1 ) == QDir::separator() )
- fName.remove( fName.length() - 1, 1 );
- }
-
- if ( prev == fName )
- return;
-
- setFileName( id, fName );
- fileNameChanged( id, fName );
-
- if ( id == defaultEntry() )
- emit fileNameChanged( fName );
-}
-
-/*!
- SLOT: called if user presses RETURN in line edit
-*/
-void QtxPathDialog::onReturnPressed()
-{
- const QObject* obj = sender();
-
- int id = -1;
- for ( FileEntryMap::Iterator it = myEntries.begin(); it != myEntries.end() && id == -1; ++it )
- if ( it.data().edit == obj )
- id = it.key();
-
- if ( id == -1 )
- return;
-
- fileNameChanged( id, fileName( id ) );
-
- if ( id == defaultEntry() )
- emit fileNameChanged( fileName() );
-}
-
-/*!
- SLOT: called if text in line edit is changed
-*/
-void QtxPathDialog::onTextChanged( const QString& )
-{
- validate();
-}
-
-/*!
- Checks validity of text and according to it enables/disables OK, Yes buttons
-*/
-void QtxPathDialog::validate()
-{
- setButtonEnabled( isValid(), OK | Yes );
-}
-
-/*!
- \return true if selected file is valid
-*/
-bool QtxPathDialog::isValid()
-{
- bool ok = true;
- for ( FileEntryMap::Iterator it = myEntries.begin(); it != myEntries.end() && ok; ++it )
- if ( it.data().edit->isEnabled() )
- ok = !it.data().edit->text().stripWhiteSpace().isEmpty();
-
- return ok;
-}
-
-/*!
- \return true entered data is accepted
-*/
-bool QtxPathDialog::acceptData() const
-{
- bool ok = true;
-
- QWidget* parent = (QWidget*)this;
-
- FileEntryMap::ConstIterator it;
- for ( it = myEntries.begin(); it != myEntries.end() && ok; ++it )
- {
- const FileEntry& entry = it.data();
- QFileInfo fileInfo( entry.edit->text() );
- if ( entry.edit->text().isEmpty() )
- {
- QMessageBox::critical( parent, caption(), tr( "File name not specified" ),
- QMessageBox::Ok, QMessageBox::NoButton );
- ok = false;
- }
- else switch ( entry.mode )
- {
- case OpenFile:
- if ( !fileInfo.exists() )
- {
- QMessageBox::critical( parent, caption(), tr( "File \"%1\" does not exist" ).arg( fileInfo.filePath() ),
- QMessageBox::Ok, QMessageBox::NoButton );
- ok = false;
- }
- break;
- case SaveFile:
- if ( fileInfo.exists() )
- ok = QMessageBox::warning( parent, caption(), tr( "File \"%1\" already exist. Do you want to overwrite it?" ).arg( fileInfo.filePath() ),
- QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes;
- break;
- case OpenDir:
- if ( !fileInfo.exists() || !fileInfo.isDir() )
- {
- QMessageBox::critical( parent, caption(), tr( "Directory \"%1\" does not exist" ).arg( fileInfo.filePath() ),
- QMessageBox::Ok, QMessageBox::NoButton );
- ok = false;
- }
- break;
- case SaveDir:
- if ( fileInfo.exists() && !fileInfo.isDir() )
- {
- QMessageBox::critical( parent, caption(), tr( "Directory \"%1\" can't be created because file with the same name exist" ).arg( fileInfo.filePath() ),
- QMessageBox::Ok, QMessageBox::NoButton );
- ok = false;
- }
- break;
- case NewDir:
- if ( fileInfo.exists() )
- {
- if ( !fileInfo.isDir() )
- {
- QMessageBox::critical( parent, caption(), tr( "Directory \"%1\" can't be created because file with the same name exist" ).arg( fileInfo.filePath() ),
- QMessageBox::Ok, QMessageBox::NoButton );
- ok = false;
- }
- else if ( QDir( fileInfo.filePath() ).count() > 2 )
- ok = QMessageBox::warning( parent, caption(), tr( "Directory \"%1\" not empty. Do you want to remove all files in this directory?" ).arg( fileInfo.filePath() ),
- QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes;
- }
- break;
- default:
- break;
- }
-
- if ( !ok )
- entry.edit->setFocus();
- }
-
- return ok;
-}
-
-/*!
- Some custom activity on file name changing (must be redefined, default implementation is empty
-*/
-void QtxPathDialog::fileNameChanged( int, QString )
-{
-}
-
-/*!
- \return frame with options
-*/
-QFrame* QtxPathDialog::optionsFrame()
-{
- return myOptionsFrame;
-}
-
-/*!
- \return file name
- \param id - id of file entry
-*/
-QString QtxPathDialog::fileName( const int id ) const
-{
- QString res;
- if ( myEntries.contains( id ) )
- res = myEntries[id].edit->text();
-
- return res;
-}
-
-/*!
- Change file name of file entry
- \param id - id of file entry
- \param txt - new file name
- \param autoExt - assign extension automatically
-*/
-void QtxPathDialog::setFileName( const int id, const QString& txt, const bool autoExt )
-{
- int mode;
- QLineEdit* le = fileEntry( id, mode );
-
- if ( le )
- {
- if ( autoExt && ( mode == OpenFile || mode == SaveFile ) )
- le->setText( autoExtension( txt ) );
- else
- le->setText( txt );
- }
-}
-
-/*!
- \return line edit of file entry
- \param id - id of file entry
-*/
-QLineEdit* QtxPathDialog::fileEntry( const int id ) const
-{
- QLineEdit* le = 0;
- if ( myEntries.contains( id ) )
- le = myEntries[id].edit;
-
- return le;
-}
-
-/*!
- \return line edit and mode of file entry
- \param id - id of file entry
- \param theMode - for return mode of file entry
-*/
-QLineEdit* QtxPathDialog::fileEntry( const int theId, int& theMode ) const
-{
- QLineEdit* le = 0;
- if ( myEntries.contains( theId ) )
- {
- le = myEntries[theId].edit;
- theMode = myEntries[theId].mode;
- }
-
- return le;
-}
-
-/*!
- Creates file entry
- \return id of just created file entry
- \param lab - title of entry
- \param mode - mode of entry
- \param id - proposed id (if it is -1, then id will be chosen automatically)
-*/
-int QtxPathDialog::createFileEntry( const QString& lab, const int mode, const int id )
-{
- int num = id;
- if ( num == -1 )
- {
- num--;
- while ( myEntries.contains( num ) )
- num--;
- }
-
- FileEntry entry;
- entry.dlg = 0;
- entry.mode = mode;
-
- new QLabel( lab, myEntriesFrame );
- entry.edit = new QLineEdit( myEntriesFrame );
- entry.btn = new QPushButton( myEntriesFrame );
- entry.btn->setAutoDefault( false );
- entry.btn->setPixmap( QPixmap( open_icon ) );
-
- connect( entry.btn, SIGNAL( clicked() ), this, SLOT( onBrowse() ) );
- connect( entry.edit, SIGNAL( returnPressed() ), this, SLOT( onReturnPressed() ) );
- connect( entry.edit, SIGNAL( textChanged( const QString& ) ), this, SLOT( onTextChanged( const QString& ) ) );
-
- myEntries.insert( num, entry );
-
- return num;
-}
-
-/*!
- \return id of default entry
-*/
-int QtxPathDialog::defaultEntry() const
-{
- return myDefault;
-}
-
-/*!
- Change default entry id
- \param id - new default entry id
-*/
-void QtxPathDialog::setDefaultEntry( const int id )
-{
- myDefault = id;
-}
-
-/*!
- Initialize dialog layout
-*/
-void QtxPathDialog::initialize()
-{
- setCaption( tr( "File dialog" ) );
-
- QVBoxLayout* main = new QVBoxLayout( mainFrame() );
- QtxGroupBox* mainGroup = new QtxGroupBox( 1, Qt::Horizontal, "", mainFrame() );
- mainGroup->setFrameStyle( QFrame::NoFrame );
- mainGroup->setInsideMargin( 0 );
- main->addWidget( mainGroup );
-
- myEntriesFrame = new QGroupBox( 3, Qt::Horizontal, "", mainGroup );
- myOptionsFrame = new QFrame( mainGroup );
-}
-
-/*!
- \return list of filters
-*/
-QStringList QtxPathDialog::prepareFilters() const
-{
- QStringList res;
- if ( !myFilter.isEmpty() )
- {
- res = QStringList::split( ";;", myFilter );
- bool allFilter = false;
- for ( QStringList::ConstIterator it = res.begin(); it != res.end() && !allFilter; ++it )
- {
- QStringList wildCards = filterWildCards( *it );
- allFilter = wildCards.findIndex( "*.*" ) != -1;
- }
-
- if ( !allFilter )
- res.append( tr( "All files (*.*)" ) );
- }
-
- return res;
-}
-
-/*!
- \return list of filters with filtered wild cards
-*/
-QStringList QtxPathDialog::filterWildCards( const QString& theFilter ) const
-{
- QStringList res;
-
- int b = theFilter.findRev( "(" );
- int e = theFilter.findRev( ")" );
- if ( b != -1 && e != -1 )
- {
- QString content = theFilter.mid( b + 1, e - b - 1 ).stripWhiteSpace();
- QStringList lst = QStringList::split( " ", content );
- for ( QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it )
- if ( (*it).find( "." ) != -1 )
- res.append( (*it).stripWhiteSpace() );
- }
- return res;
-}
-
-/*!
- \return file name with assigned extension
- \param theFileName - source file name
- \param theFilter - list of filters
-*/
-QString QtxPathDialog::autoExtension( const QString& theFileName, const QString& theFilter ) const
-{
- QString fName = theFileName;
-
- if ( fName.isEmpty() )
- return fName;
-
- QString filter = theFilter;
- if ( filter.isEmpty() )
- {
- QStringList filters = prepareFilters();
- if ( !filters.isEmpty() )
- filter = filters.first();
- }
-
- QStringList wildCards = filterWildCards( filter );
- if ( !wildCards.isEmpty() )
- {
- QString ext = wildCards.first();
- if ( ext.find( "." ) != -1 )
- ext = ext.mid( ext.find( "." ) + 1 );
-
- if ( !ext.isEmpty() && !ext.contains( "*" ) )
- fName = QDir::convertSeparators( fName ) + QString( "." ) + ext;
- }
-
- return fName;
-}
-
-/*!
- \return true if widget has visible children
- \param wid - widget
-*/
-bool QtxPathDialog::hasVisibleChildren( QWidget* wid ) const
-{
- bool res = false;
- if ( wid )
- {
- const QObjectList* aChildren = wid->children();
- if ( aChildren )
- {
- for ( QObjectListIt it( *aChildren ); it.current() && !res; ++it )
- {
- if ( it.current()->isWidgetType() )
- res = ((QWidget*)it.current())->isVisibleTo( wid );
- }
- }
- }
- return res;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxPathDialog.h
-// Author: Sergey TELKOV
-
-#ifndef QTXPATHDIALOG_H
-#define QTXPATHDIALOG_H
-
-#include "QtxDialog.h"
-
-#include <qmap.h>
-
-class QFrame;
-class QLineEdit;
-class QPushButton;
-class QFileDialog;
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-class QTX_EXPORT QtxPathDialog : public QtxDialog
-{
- Q_OBJECT
-
-protected:
- QtxPathDialog( QWidget* = 0, const bool = true, const bool = false, const int = Standard, WFlags = 0 );
-
-public:
- QtxPathDialog( const bool, QWidget* = 0, const bool = true, const bool = false, const int = Standard, WFlags = 0 );
- virtual ~QtxPathDialog();
-
- QString fileName() const;
- void setFileName( const QString&, const bool = false );
-
- QString filter() const;
- void setFilter( const QString& );
-
- virtual void show();
-
-signals:
- void fileNameChanged( QString );
-
-protected slots:
- void validate();
-
-private slots:
- void onBrowse();
- void onReturnPressed();
- void onTextChanged( const QString& );
-
-protected:
- virtual bool isValid();
- virtual bool acceptData() const;
- virtual void fileNameChanged( int, QString );
-
- QFrame* optionsFrame();
- QString fileName( const int ) const;
- void setFileName( const int, const QString&, const bool = false );
-
- QLineEdit* fileEntry( const int ) const;
- QLineEdit* fileEntry( const int, int& ) const;
- int createFileEntry( const QString&, const int, const int = -1 );
-
- int defaultEntry() const;
- void setDefaultEntry( const int );
-
-private:
- void initialize();
- QStringList prepareFilters() const;
- bool hasVisibleChildren( QWidget* ) const;
- QStringList filterWildCards( const QString& ) const;
- QString autoExtension( const QString&, const QString& = QString::null ) const;
-
-protected:
- enum { OpenFile, SaveFile, OpenDir, SaveDir, NewDir };
-
-private:
- typedef struct { int mode; QLineEdit* edit;
- QPushButton* btn; QFileDialog* dlg; } FileEntry;
- typedef QMap<int, FileEntry> FileEntryMap;
-
-private:
- QString myFilter;
- FileEntryMap myEntries;
- int myDefault;
- QFrame* myEntriesFrame;
- QFrame* myOptionsFrame;
-};
-
-#ifdef WIN32
-#pragma warning( default:4251 )
-#endif
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#include "QtxPopupMenu.h"
-
-#include <qpainter.h>
-
-/*!
- Class: QtxPopupMenu::TitleMenuItem [Internal]
- Descr: Custom menu item for popup title.
-*/
-
-class QtxPopupMenu::TitleMenuItem : public QCustomMenuItem
-{
-public:
- TitleMenuItem( const QString&, const QIconSet&, const int );
- virtual ~TitleMenuItem();
-
- virtual bool fullSpan() const;
- virtual bool isSeparator() const;
- virtual void setFont( const QFont& );
-
- virtual void paint( QPainter*, const QColorGroup&, bool, bool, int, int, int, int );
- virtual QSize sizeHint();
-
-private:
- QString myText;
- QIconSet myIcon;
- QFont myFont;
- int myAlign;
-};
-
-/*!
- Constructor
-*/
-QtxPopupMenu::TitleMenuItem::TitleMenuItem( const QString& txt, const QIconSet& ico, const int align )
-: QCustomMenuItem(),
-myText( txt ),
-myIcon( ico ),
-myAlign( align )
-{
-}
-
-/*!
- Destructor
-*/
-QtxPopupMenu::TitleMenuItem::~TitleMenuItem()
-{
-}
-
-/*!
- \return TRUE if this item wants to span the entire popup menu width
-*/
-bool QtxPopupMenu::TitleMenuItem::fullSpan() const
-{
- return true;
-}
-
-/*!
- \return TRUE if this item is just a separator
-*/
-bool QtxPopupMenu::TitleMenuItem::isSeparator() const
-{
- return false;
-}
-
-/*!
- Changes font of item
- \param font - new font
-*/
-void QtxPopupMenu::TitleMenuItem::setFont( const QFont& font )
-{
- myFont = font;
- myFont.setBold( true );
-}
-
-/*!
- Draws item
-*/
-void QtxPopupMenu::TitleMenuItem::paint( QPainter* p, const QColorGroup& cg,
- bool act, bool enabled, int x, int y, int w, int h )
-{
- QFont f = p->font();
- p->setFont( myFont );
-
- p->fillRect( x, y, w, h, cg.brush( QColorGroup::Dark ) );
-
- p->setPen( cg.shadow() );
- p->drawRect( x, y, w, h );
-
- int m = 3;
- int s = 3;
- int iw = p->fontMetrics().width( myText ) + ( myIcon.isNull() ? 0 : myIcon.pixmap().width() + s );
- int ih = QMAX( ( myIcon.isNull() ? 0 : myIcon.pixmap().height() ), p->fontMetrics().height() );
-
- int ix = x;
- int iy = y + m;
-
- if ( myAlign & AlignLeft )
- ix = x;
- else if ( myAlign & AlignRight )
- ix = x + ( w - iw );
- else if ( myAlign & AlignHCenter )
- ix = x + ( w - iw ) / 2;
-
- if ( myAlign & AlignTop )
- iy = y;
- else if ( myAlign & AlignBottom )
- iy = y + ( h - ih - m );
- else if ( myAlign & AlignVCenter )
- iy = y + ( h - ih ) / 2;
-
- if ( !myIcon.isNull() )
- {
- p->drawPixmap( ix, iy + ( ih - myIcon.pixmap().height() ) / 2, myIcon.pixmap() );
- ix += myIcon.pixmap().width() + s;
- }
-
- p->setPen( cg.brightText() );
- p->drawText( ix, iy + ( ih - p->fontMetrics().height() ) / 2 +
- p->fontMetrics().ascent(), myText, 0, -1 );
-
- p->setFont( f );
-}
-
-/*!
- \return the recommended size for item
-*/
-QSize QtxPopupMenu::TitleMenuItem::sizeHint()
-{
- QFontMetrics fM( myFont );
-
- int m = 3;
- int s = 3;
- int w = fM.width( myText ) + ( myIcon.isNull() ? 0 : myIcon.pixmap().width() + s );
- int h = QMAX( ( myIcon.isNull() ? 0 : myIcon.pixmap().height() ), fM.height() ) + 2 * m;
-
- return QSize( w, h );
-}
-
-/*!
- Constructor
-*/
-QtxPopupMenu::QtxPopupMenu( QWidget* parent, const char* name )
-: QPopupMenu( parent, name ),
-myId( -1 ),
-myPolicy( TitleAuto ),
-myAlign( AlignCenter )
-{
-}
-
-/*!
- Destructor
-*/
-QtxPopupMenu::~QtxPopupMenu()
-{
-}
-
-/*!
- \return popup menu title
-*/
-QString QtxPopupMenu::titleText() const
-{
- return myText;
-}
-
-/*!
- \return popup menu icon
-*/
-QIconSet QtxPopupMenu::titleIcon() const
-{
- return myIcon;
-}
-
-/*!
- \return popup menu title policy
-*/
-int QtxPopupMenu::titlePolicy() const
-{
- return myPolicy;
-}
-
-/*!
- \return popup menu title alignment
-*/
-int QtxPopupMenu::titleAlignment() const
-{
- return myAlign;
-}
-
-/*!
- Changes title text
- \param txt - new text
-*/
-void QtxPopupMenu::setTitleText( const QString& txt )
-{
- if ( myText == txt )
- return;
-
- myText = txt;
-
- updateTitle();
-}
-
-/*!
- Changes title icon
- \param icon - new icon
-*/
-void QtxPopupMenu::setTitleIcon( const QIconSet& ico )
-{
- myIcon = ico;
-
- updateTitle();
-}
-
-/*!
- Changes title policy
- \param p - new policy
-*/
-void QtxPopupMenu::setTitlePolicy( const int p )
-{
- if ( myPolicy == p )
- return;
-
- myPolicy = p;
-
- updateTitle();
-}
-
-/*!
- Changes title alignment
- \param a - new alignment
-*/
-void QtxPopupMenu::setTitleAlignment( const int a )
-{
- if ( myAlign == a )
- return;
-
- myAlign = a;
-
- updateTitle();
-}
-
-/*!
- Shows menu
-*/
-void QtxPopupMenu::show()
-{
- insertTitle();
-
- QPopupMenu::show();
-}
-
-/*!
- Hides menu
-*/
-void QtxPopupMenu::hide()
-{
- QPopupMenu::hide();
-
- removeTitle();
-}
-
-/*!
- Creates title item
- \param txt - item text
- \param icon - item icon
- \param align - item alignment
-*/
-QtxPopupMenu::TitleMenuItem* QtxPopupMenu::createTitleItem( const QString& txt, const QIconSet& ico,
- const int align ) const
-{
- return new TitleMenuItem( txt, ico, align );
-}
-
-/*!
- Inserts title item to popup menu
-*/
-void QtxPopupMenu::insertTitle()
-{
- if ( myId != -1 || titlePolicy() == TitleOff ||
- ( titlePolicy() == TitleAuto && titleText().stripWhiteSpace().isEmpty() ) )
- return;
-
- TitleMenuItem* item = createTitleItem( titleText(), titleIcon(), titleAlignment() );
-
- myId = insertItem( item, -1, 0 );
- setItemEnabled( myId, false );
-}
-
-/*!
- Removes title item from popup menu
-*/
-void QtxPopupMenu::removeTitle()
-{
- if ( myId == -1 )
- return;
-
- removeItem( myId );
- myId = -1;
-}
-
-/*!
- Updates title item
-*/
-void QtxPopupMenu::updateTitle()
-{
- if ( myId != -1 )
- {
- removeTitle();
- insertTitle();
- }
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef QTXPOPUPMENU_H
-#define QTXPOPUPMENU_H
-
-#include "Qtx.h"
-
-#include <qstring.h>
-#include <qiconset.h>
-#include <qpopupmenu.h>
-
-class QTX_EXPORT QtxPopupMenu : public QPopupMenu
-{
- Q_OBJECT
-
-protected:
- class TitleMenuItem;
-
-public:
- enum { TitleAuto, TitleOn, TitleOff };
-
-public:
- QtxPopupMenu( QWidget* = 0, const char* = 0 );
- virtual ~QtxPopupMenu();
-
- QString titleText() const;
- QIconSet titleIcon() const;
-
- int titlePolicy() const;
- int titleAlignment() const;
-
- virtual void setTitleText( const QString& );
- virtual void setTitleIcon( const QIconSet& );
-
- virtual void setTitlePolicy( const int );
- virtual void setTitleAlignment( const int );
-
-public slots:
- virtual void show();
- virtual void hide();
-
-protected:
- virtual TitleMenuItem* createTitleItem( const QString&, const QIconSet&, const int ) const;
-
-private:
- void updateTitle();
- void insertTitle();
- void removeTitle();
-
-private:
- int myId;
- QString myText;
- QIconSet myIcon;
- int myAlign;
- int myPolicy;
-};
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include "QtxPopupMgr.h"
-#include "QtxListOfOperations.h"
-#include "QtxStdOperations.h"
-#include "QtxAction.h"
-
-#include <qpopupmenu.h>
-#include <qdatetime.h>
-
-
-/*!
- \return value of global parameter (depending on whole selection, but not dependending on one object of selection)
- \param str - name of parameter
-
- By default, it returns count of selected objects ("selcount") and list of parameters ("$<name>")
-*/
-QtxValue QtxPopupMgr::Selection::globalParam( const QString& str ) const
-{
- if( str==selCountParam() )
- return count();
-
- else if( str[0]==equality() )
- {
- QtxSets::ValueSet set;
- QString par = str.mid( 1 );
-
- for( int i=0, n=count(); i<n; i++ )
- {
- QtxValue v = param( i, par );
- if( v.isValid() )
- QtxSets::add( set, v );
- else
- return QtxValue();
- }
- return set;
- }
-
- else
- return QtxValue();
-}
-
-/*!
- \return symbole to detect name of parameter list
-*/
-QChar QtxPopupMgr::Selection::equality() const
-{
- return defEquality();
-}
-
-/*!
- \return name of parameter for count of selected objects
-*/
-QString QtxPopupMgr::Selection::selCountParam() const
-{
- return defSelCountParam();
-}
-
-/*!
- \return default symbole to detect name of parameter list
-*/
-QChar QtxPopupMgr::Selection::defEquality()
-{
- return '$';
-}
-
-/*!
- \return default name of parameter for count of selected objects
-*/
-QString QtxPopupMgr::Selection::defSelCountParam()
-{
- return "selcount";
-}
-
-
-
-/*!
- \class QtxCacheSelection
-
- Special selection class, that caches parameter values.
- Every parameter during popup building is calculated only one time,
- although it may be included to many rules. After calculation
- it is stored in internal map
-*/
-
-class QtxCacheSelection : public QtxPopupMgr::Selection
-{
-public:
- QtxCacheSelection( QtxPopupMgr::Selection* );
- virtual ~QtxCacheSelection();
-
- virtual int count() const;
- virtual QtxValue param( const int, const QString& ) const;
- virtual QtxValue globalParam( const QString& ) const;
-
-private:
- typedef QMap< QString, QtxValue > CacheMap;
-
- QtxPopupMgr::Selection* mySel;
- CacheMap myParamCache;
-};
-
-/*!
- Constructor
- \param sel - base selection used for parameter calculation
-*/
-QtxCacheSelection::QtxCacheSelection( QtxPopupMgr::Selection* sel )
-: mySel( sel )
-{
-}
-
-/*!
- Destructor
-*/
-QtxCacheSelection::~QtxCacheSelection()
-{
-}
-
-/*!
- \return count of selected objects
-*/
-int QtxCacheSelection::count() const
-{
- return mySel ? mySel->count() : 0;
-}
-
-/*!
- Calculates and caches parameters.
- Already calculated parameters are returned without calculation
- \return parameter value
- \param i - index of selected object
- \param name - name of parameter
-*/
-QtxValue QtxCacheSelection::param( const int i, const QString& name ) const
-{
- QString param_name = name + "#####" + QString::number( i );
- if( myParamCache.contains( param_name ) )
- return myParamCache[ param_name ];
- else
- {
- QtxValue v;
- if( mySel )
- v = mySel->param( i, name );
- if( v.isValid() )
- ( ( CacheMap& )myParamCache ).insert( param_name, v );
- return v;
- }
-}
-
-/*!
- Calculates and caches global parameters.
- Already calculated parameters are returned without calculation
- \return parameter value
- \param name - name of parameter
-*/
-QtxValue QtxCacheSelection::globalParam( const QString& name ) const
-{
- if( myParamCache.contains( name ) )
- return myParamCache[ name ];
- else
- {
- QtxValue v;
- if( mySel )
- v = mySel->globalParam( name );
- if( v.isValid() )
- ( ( CacheMap& )myParamCache ).insert( name, v );
- return v;
- }
-}
-
-
-
-
-/*!
- Constructor
- \param mgr - popup manager
-*/
-QtxPopupMgr::Operations::Operations( QtxPopupMgr* mgr )
-: QtxStrings(),
- myPopupMgr( mgr )
-{
- QStringList aList;
- aList.append( "every" );
- aList.append( "any" );
- aList.append( "onlyone" );
- addOperations( aList );
-
- myParser = new QtxParser( mgr->myOperations );
-}
-
-/*!
- Destructor
- Deletes internal parser
-*/
-QtxPopupMgr::Operations::~Operations()
-{
- delete myParser;
-}
-
-/*!
- \return priority of popup operation 'op'.
- \param isBin indicate whether the operation is binary
-*/
-int QtxPopupMgr::Operations::prior( const QString& op, bool isBin ) const
-{
- if( !isBin && ( op=="every" || op=="any" || op=="onlyone" ) )
- return 1;
- else
- return QtxStrings::prior( op, isBin );
-
-}
-
-/*!
- Calculates result of operation
- \return one of error states
- \param op - name of operation
- \param v1 - first operation argument (must be used also to store result)
- \param v2 - second operation argument
-*/
-QtxParser::Error QtxPopupMgr::Operations::calculate
- ( const QString& op, QtxValue& v1, QtxValue& v2 ) const
-{
- int ind = -1;
- if( op=="every" )
- ind = 0;
- else if( op=="any" )
- ind = 1;
- else if( op=="onlyone" )
- ind = 2;
-
- if( ind>=0 && ind<=2 )
- {
- QString val_name = op + "(" + v2.toString() + ")";
- QtxParser::Error err = QtxParser::OK;
-
- if( !myValues.contains( val_name ) )
- {
- myParser->setExpr( v2.toString() );
- QStringList params, specific;
- myParser->paramsList( params );
-
- myParser->clear();
- myPopupMgr->setParams( myParser, specific );
-
- QtxPopupMgr::Selection* sel = myPopupMgr->myCurrentSelection;
-
- int global_result = 0;
- if( sel )
- for( int i=0, n=sel->count(); i<n; i++ )
- {
- QStringList::const_iterator anIt = specific.begin(),
- aLast = specific.end();
- for( ; anIt!=aLast; anIt++ )
- {
- QtxValue v = sel->param( i, *anIt );
- if( v.isValid() )
- myParser->set( *anIt, v );
- else
- return QtxParser::InvalidToken;
- }
-
- QtxValue res = myParser->calculate();
- err = myParser->lastError();
- if( err==QtxParser::OK )
- if( res.type()==QVariant::Bool )
- {
- if( res.toBool() )
- global_result++;
- if( ind==2 && global_result>1 )
- break;
- }
- else
- return QtxParser::InvalidResult;
- else
- return err;
- }
-
- QtxValue& vv = ( QtxValue& )myValues[ val_name ];
- vv = ( ind==0 && global_result==sel->count() ) ||
- ( ind==1 ) ||
- ( ind==2 && global_result==1 );
- }
-
- v2 = myValues[ val_name ];
-
- return err;
- }
- else
- return QtxStrings::calculate( op, v1, v2 );
-}
-
-/*!
- Clears internal map of values
-*/
-void QtxPopupMgr::Operations::clear()
-{
- myValues.clear();
-}
-
-
-
-
-
-
-
-
-/*!
- Constructor
-*/
-QtxPopupMgr::QtxPopupMgr( QPopupMenu* popup, QObject* parent )
-: QtxActionMenuMgr( popup, parent ),
- myCurrentSelection( 0 )
-{
- createOperations();
-}
-
-/*!
- Destructor
-*/
-QtxPopupMgr::~QtxPopupMgr()
-{
-}
-
-/*!
- Creates popup operations instance
-*/
-void QtxPopupMgr::createOperations()
-{
- myOperations = new QtxListOfOperations;
- myOperations->prepend( "logic", new QtxLogic(), 0 );
- myOperations->prepend( "arithm", new QtxArithmetics(), 50 );
- myOperations->append( "strings", new QtxStrings(), 100 );
- myOperations->append( "sets", new QtxSets(), 150 );
- myOperations->append( "custom", new Operations( this ), 200 );
-}
-
-/*!
- Additional version of registerAction
- \param act - action to be registered
- \param visible - rule for visibility state
- \param toggle - rule for toggle on state
- \param id - proposed id (if it is less than 0, then id will be generated automatically)
-*/
-int QtxPopupMgr::registerAction( QAction* act,
- const QString& visible,
- const QString& toggle,
- const int id )
-{
- int _id = QtxActionMenuMgr::registerAction( act, id );
- setRule( _id, visible, true );
- setRule( _id, toggle, false );
- return _id;
-}
-
-/*!
- Removes action from internal map
- \param id - action id
-*/
-void QtxPopupMgr::unRegisterAction( const int id )
-{
- QAction* act = action( id );
-
- myVisibility.remove( act );
- myToggle.remove( act );
-
- remove( id );
- //QtxActionMenuMgr::unRegisterAction( id );
-}
-
-/*!
- \return true if manager has rule for action
- \param act - action
- \param visibility - if it is true, then rule for "visibility" is checked, otherwise - for "toggle"
-*/
-bool QtxPopupMgr::hasRule( QAction* act, bool visibility ) const
-{
- return map( visibility ).contains( act );
-}
-
-/*!
- \return true if manager has rule for action
- \param id - action id
- \param visibility - if it is true, then rule for "visibility" is checked, otherwise - for "toggle"
-*/
-bool QtxPopupMgr::hasRule( const int id, bool visibility ) const
-{
- return hasRule( action( id ), visibility );
-}
-
-/*!
- Sets new rule for action
- \param act - action
- \param rule - string expression of rule
- \param visibility - if it is true, then rule for "visibility" will be set, otherwise - for "toggle"
-*/
-void QtxPopupMgr::setRule( QAction* act, const QString& rule, bool visibility )
-{
- if( !act || rule.isEmpty() )
- return;
-
- if( !hasRule( act, visibility ) )
- {
- QtxParser* p = new QtxParser( myOperations, rule );
- if( p->lastError()==QtxParser::OK )
- map( visibility ).insert( act, p );
- else
- delete p;
- }
- else
- {
- QtxParser* p = map( visibility )[ act ];
- p->setExpr( rule );
- if( p->lastError()!=QtxParser::OK )
- p->setExpr( QString() );
- }
-}
-
-/*!
- Sets new rule for action
- \param id - action id
- \param rule - string expression of rule
- \param visibility - if it is true, then rule for "visibility" will be set, otherwise - for "toggle"
-*/
-void QtxPopupMgr::setRule( const int id, const QString& rule, bool visibility )
-{
- setRule( action( id ), rule, visibility );
-}
-
-/*!
- \return true if parser has finished work without errors
- \param p - parser
-*/
-bool result( QtxParser* p )
-{
- bool res = false;
- if( p )
- {
- QtxValue vv = p->calculate();
- res = p->lastError()==QtxParser::OK &&
- ( ( vv.type()==QVariant::Int && vv.toInt()!=0 ) ||
- ( vv.type()==QVariant::Bool && vv.toBool() ) );
- }
- return res;
-}
-
-/*!
- Fills parser parameters with help of Selection::globalParam() method
- \param p - parser
- \param specific - list will be filled with names of parameters depending on selection objects (not global)
-*/
-void QtxPopupMgr::setParams( QtxParser* p, QStringList& specific ) const
-{
- if( !p || !myCurrentSelection )
- return;
-
- QStringList params;
-
- p->paramsList( params );
- QStringList::const_iterator anIt = params.begin(),
- aLast = params.end();
- for( ; anIt!=aLast; anIt++ )
- {
- QtxValue v = myCurrentSelection->globalParam( *anIt );
- if( v.isValid() )
- p->set( *anIt, v );
- else
- specific.append( *anIt );
- }
-}
-
-/*!
- \return true if 'v1'<'v2'
- This function can work with many types of values
-*/
-bool operator<( const QtxValue& v1, const QtxValue& v2 )
-{
- QVariant::Type t1 = v1.type(), t2 = v2.type();
- if( t1==t2 )
- {
- switch( t1 )
- {
- case QVariant::Int:
- return v1.toInt() < v2.toInt();
-
- case QVariant::Double:
- return v1.toDouble() < v2.toDouble();
-
- case QVariant::CString:
- case QVariant::String:
- return v1.toString() < v2.toString();
-
- case QVariant::StringList:
- case QVariant::List:
- {
- const QValueList<QtxValue>& aList1 = v1.toList(), aList2 = v2.toList();
- QValueList<QtxValue>::const_iterator
- anIt1 = aList1.begin(), aLast1 = aList1.end(),
- anIt2 = aList2.begin(), aLast2 = aList2.end();
- for( ; anIt1!=aLast1 && anIt2!=aLast2; anIt1++, anIt2++ )
- if( (*anIt1)!=(*anIt2) )
- return (*anIt1)<(*anIt2);
-
- return anIt1==aLast1 && anIt2!=aLast2;
- }
-
- default:
- return v1.toString()<v2.toString();
- }
- }
- else
- return t1<t2;
-}
-
-/*!
- \return true if rule of action is satisfied on current selection
- \param act - action
- \param visibility - what rule is checked: for visibility(true) or for toggle(false)
-*/
-bool QtxPopupMgr::isSatisfied( QAction* act, bool visibility ) const
-{
- QString menu = act->menuText();
-
- bool res = false;
- if( !act )
- return res;
-
- if( hasRule( act, visibility ) )
- {
- QtxParser* p = map( visibility )[ act ];
- QStringList specific;
- p->clear();
- ( ( Operations* )myOperations->operations( "custom" ) )->clear();
-
- setParams( p, specific );
-
- QMap<QValueList<QtxValue>,int> aCorteges;
- QValueList<QtxValue> c;
-
- if( specific.count()>0 )
- if( myCurrentSelection )
- {
- res = false;
-
- for( int i=0, n=myCurrentSelection->count(); i<n && !res; i++ )
- {
- QStringList::const_iterator anIt1 = specific.begin(), aLast1 = specific.end();
- c.clear();
- for( ; anIt1!=aLast1; anIt1++ )
- c.append( myCurrentSelection->param( i, *anIt1 ) );
- aCorteges.insert( c, 0 );
- }
-
- //qDebug( QString( "%1 corteges" ).arg( aCorteges.count() ) );
- QMap<QValueList<QtxValue>,int>::const_iterator anIt = aCorteges.begin(), aLast = aCorteges.end();
- for( ; anIt!=aLast; anIt++ )
- {
- QStringList::const_iterator anIt1 = specific.begin(), aLast1 = specific.end();
- const QValueList<QtxValue>& aCortege = anIt.key();
- QValueList<QtxValue>::const_iterator anIt2 = aCortege.begin();
- for( ; anIt1!=aLast1; anIt1++, anIt2++ )
- p->set( *anIt1, *anIt2 );
- res = res || result( p );
- }
-
- /*
- for( int i=0, n=myCurrentSelection->count(); i<n && !res; i++ )
- {
- QStringList::const_iterator anIt1 = specific.begin(), aLast1 = specific.end();
- for( ; anIt1!=aLast1; anIt1++ )
- p->set( *anIt1, myCurrentSelection->param( i, *anIt1 ) );
- res = res || result( p );
- }*/
- }
- else
- res = false;
- else
- res = result( p );
- }
-
- return res;
-}
-
-/*!
- \return true if item corresponding to action is visible
- \param actId - action id
- \param place - index of place
-*/
-bool QtxPopupMgr::isVisible( const int actId, const int place ) const
-{
- bool res = QtxActionMenuMgr::isVisible( actId, place );
- QAction* act = action( actId );
- if( hasRule( act, true ) )
- res = res && isSatisfied( act, true );
- return res;
-}
-
-/*!
- Updates popup according to selection
- \param p - popup menu
- \param sel - selection
-*/
-void QtxPopupMgr::updatePopup( QPopupMenu* p, Selection* sel )
-{
- QTime t1 = QTime::currentTime();
-
- if( !p || !sel )
- return;
-
- myCurrentSelection = new QtxCacheSelection( sel );
- RulesMap::iterator anIt = myToggle.begin(),
- aLast = myToggle.end();
- for( ; anIt!=aLast; anIt++ )
- if( anIt.key()->isToggleAction() && hasRule( anIt.key(), false ) )
- anIt.key()->setOn( isSatisfied( anIt.key(), false ) );
-
- setWidget( ( QWidget* )p );
- updateMenu();
- QTime t2 = QTime::currentTime();
- qDebug( QString( "update popup time = %1 msecs" ).arg( t1.msecsTo( t2 ) ) );
- qDebug( QString( "number of objects = %1" ).arg( myCurrentSelection->count() ) );
-
- delete myCurrentSelection;
-}
-
-/*!
- \return reference to map of rules
- \param visibility - type of map: visibility of toggle
-*/
-QtxPopupMgr::RulesMap& QtxPopupMgr::map( bool visibility ) const
-{
- return ( RulesMap& )( visibility ? myVisibility : myToggle );
-}
-
-/*!
- Loads actions description from file
- \param fname - name of file
- \param r - reader of file
- \return true on success
-*/
-bool QtxPopupMgr::load( const QString& fname, QtxActionMgr::Reader& r )
-{
- PopupCreator cr( &r, this );
- return r.read( fname, cr );
-}
-
-
-
-
-/*!
- Constructor
- \param r - menu reader
- \param mgr - menu manager
-*/
-QtxPopupMgr::PopupCreator::PopupCreator( QtxActionMgr::Reader* r,
- QtxPopupMgr* mgr )
-: QtxActionMgr::Creator( r ),
- myMgr( mgr )
-{
-}
-
-/*!
- Destructor
-*/QtxPopupMgr::PopupCreator::~PopupCreator()
-{
-}
-
-
-/*!
- Appends new menu items
- \param tag - tag of item
- \param subMenu - it has submenu
- \param attr - list of attributes
- \param pId - id of action corresponding to parent item
-*/
-int QtxPopupMgr::PopupCreator::append( const QString& tag, const bool subMenu,
- const ItemAttributes& attr, const int pId )
-{
- if( !myMgr || !reader() )
- return -1;
-
- QString label = reader()->option( "label", "label" ),
- id = reader()->option( "id", "id" ),
- pos = reader()->option( "pos", "pos" ),
- group = reader()->option( "group", "group" ),
- tooltip = reader()->option( "tooltip", "tooltip" ),
- sep = reader()->option( "separator", "separator" ),
- accel = reader()->option( "accel", "accel" ),
- icon = reader()->option( "icon", "icon" ),
- toggle = reader()->option( "toggle", "toggle" );
-
- int res = -1, actId = intValue( attr, id, -1 );;
- if( subMenu )
- res = myMgr->insert( strValue( attr, label ), pId, intValue( attr, group, 0 ), intValue( attr, pos, -1 ) );
- else if( tag==sep )
- res = myMgr->insert( separator(), pId, intValue( attr, group, 0 ), intValue( attr, pos, -1 ) );
- else //if( !myMgr->contains( actId ) )
- {
- QPixmap pix; QIconSet set;
- QString name = strValue( attr, icon );
- if( !name.isEmpty() )
- {
- if( loadPixmap( name, pix ) )
- set = QIconSet( pix );
- }
-
- QString actLabel = strValue( attr, label );
- QtxAction* newAct = new QtxAction( strValue( attr, tooltip ), set, actLabel,
- QKeySequence( strValue( attr, accel ) ),
- myMgr );
- newAct->setToolTip( strValue( attr, tooltip ) );
- QString toggleact = strValue( attr, toggle );
- bool isToggle = !toggleact.isEmpty();
- newAct->setToggleAction( isToggle );
- newAct->setOn( toggleact.lower()=="true" );
-
- connect( newAct );
- int aid = myMgr->registerAction( newAct, visibleRule( attr ),
- isToggle ? toggleRule( attr ) : QString::null,
- actId );
- res = myMgr->insert( aid, pId, intValue( attr, group, 0 ), intValue( attr, pos, -1 ) );
- }
-
- return res;
-}
-
-/*!
- \return visibility rule by attributes
- Default implementation is empty
-*/
-QString QtxPopupMgr::PopupCreator::visibleRule( const ItemAttributes& ) const
-{
- return QString::null;
-}
-
-/*!
- \return toggle rule by attributes
- Default implementation is empty
-*/
-QString QtxPopupMgr::PopupCreator::toggleRule( const ItemAttributes& ) const
-{
- return QString::null;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#ifndef __QTX_POPUP_MGR_HEADER__
-#define __QTX_POPUP_MGR_HEADER__
-
-#include "Qtx.h"
-#include "QtxActionMenuMgr.h"
-#include "QtxParser.h"
-#include "QtxStdOperations.h"
-
-#include <qmap.h>
-
-class QtxListOfOperations;
-
-class QTX_EXPORT QtxPopupMgr : public QtxActionMenuMgr
-{
- Q_OBJECT
-
-public:
- class QTX_EXPORT Selection
- {
- public:
- virtual int count() const = 0;
- virtual QtxValue param( const int, const QString& ) const = 0;
- virtual QtxValue globalParam( const QString& ) const;
-
- virtual QChar equality() const;
- virtual QString selCountParam() const;
-
- static QChar defEquality();
- static QString defSelCountParam();
- };
-
-protected:
- class Operations : public QtxStrings
- {
- public:
- Operations( QtxPopupMgr* );
- virtual ~Operations();
-
- virtual int prior( const QString&, bool isBin ) const;
- virtual QtxParser::Error calculate( const QString&, QtxValue&, QtxValue& ) const;
-
- void clear();
-
- private:
- QtxPopupMgr* myPopupMgr;
- QtxParser* myParser;
- QMap< QString, QtxValue > myValues;
- };
-
- friend class Operations;
-
-protected:
- class PopupCreator;
-
-public:
- QtxPopupMgr( QPopupMenu*, QObject* = 0 );
- virtual ~QtxPopupMgr();
-
- virtual int registerAction( QAction*,
- const QString& visible,
- const QString& toggle = QString::null,
- const int = -1 );
- virtual void unRegisterAction( const int );
-
- virtual bool isVisible( const int actId, const int place ) const;
-
- bool hasRule( QAction*, bool visibility ) const;
- bool hasRule( const int, bool visibility ) const;
- void setRule( QAction*, const QString&, bool visibility );
- void setRule( const int, const QString&, bool visibility );
- void updatePopup( QPopupMenu*, Selection* );
-
- //return name of parameter corresponding to selected objects count
- //it will be set automatically
-
- virtual bool load( const QString&, QtxActionMgr::Reader& );
-
-protected:
- typedef QMap< QAction*, QtxParser* > RulesMap;
-
-protected:
- virtual bool isSatisfied( QAction*, bool visibility ) const;
- void setParams( QtxParser*, QStringList& ) const;
- RulesMap& map( bool visibility ) const;
-
- void createOperations();
-
-private:
- RulesMap myVisibility, myToggle;
- Selection* myCurrentSelection;
- QtxListOfOperations* myOperations;
-};
-
-
-
-class QtxPopupMgr::PopupCreator : public QtxActionMgr::Creator
-{
-public:
- PopupCreator( QtxActionMgr::Reader*, QtxPopupMgr* );
- virtual ~PopupCreator();
-
- virtual int append( const QString&, const bool,
- const ItemAttributes&, const int );
-
- virtual QString visibleRule( const ItemAttributes& ) const;
- virtual QString toggleRule( const ItemAttributes& ) const;
-
-private:
- QtxPopupMgr* myMgr;
-};
-
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxResourceEdit.cxx
-// Author: Sergey TELKOV
-
-#include "QtxResourceEdit.h"
-
-#include "QtxResourceMgr.h"
-
-
-/*!
- Constructor
-*/
-QtxResourceEdit::QtxResourceEdit( QtxResourceMgr* mgr )
-: myResMgr( mgr )
-{
-}
-
-/*!
- Destructor
-*/
-QtxResourceEdit::~QtxResourceEdit()
-{
- ItemMap items;
- for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
- items.insert( it.key(), it.data() );
-
- for ( ItemMap::ConstIterator itr = items.begin(); itr != items.end(); ++itr )
- if ( myItems.contains( itr.key() ) )
- delete itr.data();
-}
-
-/*!
- \return assigned resource manager
-*/
-QtxResourceMgr* QtxResourceEdit::resourceMgr() const
-{
- return myResMgr;
-}
-
-/*!
- Adds new item
- \param label - label of widget to edit preference
- \param pId - parent item id
- \param type - type of item
- \param section - section of resource assigned with item
- \param param - name of resource assigned with item
-*/
-int QtxResourceEdit::addItem( const QString& label, const int pId, const int type,
- const QString& section, const QString& param )
-{
- Item* i = createItem( label, type, pId );
- if ( !i )
- return -1;
-
- if ( !myItems.contains( i->id() ) )
- {
- myItems.insert( i->id(), i );
-
- i->setTitle( label );
- i->setResource( section, param );
-
- if ( !i->parentItem() && !myChildren.contains( i ) )
- myChildren.append( i );
-
- itemAdded( i );
- }
-
- return i->id();
-}
-
-/*!
- \return value of item property
- \param id - item id
- \propName - propertyName
-*/
-QVariant QtxResourceEdit::itemProperty( const int id, const QString& propName ) const
-{
- QVariant propValue;
- Item* i = item( id );
- if ( i )
- propValue = i->property( propName );
- return propValue;
-}
-
-/*!
- Sets value of item property
- \param id - item id
- \propName - propertyName
- \propValue - new value of property
-*/
-void QtxResourceEdit::setItemProperty( const int id, const QString& propName, const QVariant& propValue )
-{
- Item* i = item( id );
- if ( i )
- i->setProperty( propName, propValue );
-}
-
-/*!
- \return resource assigned with item
- \param id - item id
- \param section - to return section of resource
- \param param - to return name of resource
-*/
-void QtxResourceEdit::resource( const int id, QString& sec, QString& param ) const
-{
- Item* i = item( id );
- if ( i )
- i->resource( sec, param );
-}
-
-/*!
- Stores all values to resource manager
-*/
-void QtxResourceEdit::store()
-{
- QMap<Item*, QString> before;
- resourceValues( before );
-
- for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
- it.data()->store();
-
- QMap<Item*, QString> after;
- resourceValues( after );
-
- QMap<Item*, QString> changed;
- differentValues( before, after, changed );
-
- changedResources( changed );
-}
-
-/*!
- Retrieve all values from resource manager
-*/
-void QtxResourceEdit::retrieve()
-{
- for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
- it.data()->retrieve();
-}
-
-/*!
- Stores all values to backup container
-*/
-void QtxResourceEdit::toBackup()
-{
- myBackup.clear();
- resourceValues( myBackup );
-}
-
-/*!
- Retrieve all values from backup container
-*/
-void QtxResourceEdit::fromBackup()
-{
- QMap<Item*, QString> before;
- resourceValues( before );
-
- setResourceValues( myBackup );
-
- QMap<Item*, QString> after;
- resourceValues( after );
-
- QMap<Item*, QString> changed;
- differentValues( before, after, changed );
-
- changedResources( changed );
-}
-
-/*!
- Updates resource edit (default implementation is empty)
-*/
-void QtxResourceEdit::update()
-{
-}
-
-/*!
- \return item by it's id
- \param id - item id
-*/
-QtxResourceEdit::Item* QtxResourceEdit::item( const int id ) const
-{
- Item* i = 0;
- if ( myItems.contains( id ) )
- i = myItems[id];
- return i;
-}
-
-/*!
- \return item by it's title (finds first item)
- \param title - item title
-*/
-QtxResourceEdit::Item* QtxResourceEdit::item( const QString& title ) const
-{
- Item* i = 0;
- for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end() && !i; ++it )
- {
- if ( it.data()->title() == title )
- i = it.data();
- }
- return i;
-}
-
-/*!
- \return item by it's title and parent id
- \param title - item title
- \param pId - parent id
-*/
-QtxResourceEdit::Item* QtxResourceEdit::item( const QString& title, const int pId ) const
-{
- Item* i = 0;
- Item* pItem = item( pId );
- for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end() && !i; ++it )
- {
- if ( it.data()->parentItem() == pItem && it.data()->title() == title )
- i = it.data();
- }
- return i;
-}
-
-/*!
- Creates item
- \return new item
- \param label - text of label for new item
- \param type - type of new item
- \param pId - parent id
-*/
-QtxResourceEdit::Item* QtxResourceEdit::createItem( const QString& label, const int type, const int pId )
-{
- Item* i = 0;
- if ( pId < 0 )
- i = createItem( label, type );
- else
- {
- Item* pItem = item( pId );
- if ( pItem )
- {
- i = pItem->createItem( label, type );
- pItem->insertChild( i );
- }
- }
-
- return i;
-}
-
-/*!
- Removes item
- \param item - item to be removed
-*/
-void QtxResourceEdit::removeItem( Item* item )
-{
- if ( !item )
- return;
-
- myChildren.remove( item );
- myItems.remove( item->id() );
-
- itemRemoved( item );
-}
-
-/*!
- \return children items of resource edit
- \param lst - list of items to be filled with children
-*/
-void QtxResourceEdit::childItems( QPtrList<Item>& lst ) const
-{
- lst.clear();
- for ( QPtrListIterator<Item> it( myChildren ); it.current(); ++it )
- lst.append( it.current() );
-}
-
-/*!
- \return all resources values from widgets
- \param map - map to be filled by resources values
-*/
-void QtxResourceEdit::resourceValues( QMap<int, QString>& map ) const
-{
- QString sect, name;
- for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
- {
- it.data()->resource( sect, name );
- if( myResMgr->hasValue( sect, name ) )
- map.insert( it.key(), it.data()->resourceValue() );
- }
-}
-
-/*!
- \return all resources values from widgets
- \param map - map to be filled by resources values
-*/
-void QtxResourceEdit::resourceValues( QMap<Item*, QString>& map ) const
-{
- QString sect, name;
- for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
- {
- it.data()->resource( sect, name );
- if( myResMgr->hasValue( sect, name ) )
- map.insert( it.data(), it.data()->resourceValue() );
- }
-}
-
-/*!
- Sets to widgets all resources values from map
- \param map - map with resources values
-*/
-void QtxResourceEdit::setResourceValues( QMap<int, QString>& map ) const
-{
- for ( QMap<int, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
- {
- Item* i = item( it.key() );
- if ( i )
- i->setResourceValue( it.data() );
- }
-}
-
-/*!
- Sets to widgets all resources values from map
- \param map - map with resources values
-*/
-void QtxResourceEdit::setResourceValues( QMap<Item*, QString>& map ) const
-{
- for ( QMap<Item*, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
- it.key()->setResourceValue( it.data() );
-}
-
-/*!
- Compares two map of resources values and finds different ones
- \param map1 - first map
- \param map2 - second map
- \param resMap - map to be filled with different values
- \param fromFirst - if it is true, then resMap will be filled with values from first map, otherwise - from second
-*/
-void QtxResourceEdit::differentValues( const QMap<int, QString>& map1, const QMap<int, QString>& map2,
- QMap<int, QString>& resMap, const bool fromFirst ) const
-{
- resMap.clear();
- const QMap<int, QString>& later = fromFirst ? map1 : map2;
- const QMap<int, QString>& early = fromFirst ? map2 : map1;
-
- for ( QMap<int, QString>::ConstIterator it = later.begin(); it != later.end(); ++it )
- {
- if ( !early.contains( it.key() ) || early[it.key()] != it.data() )
- resMap.insert( it.key(), it.data() );
- }
-}
-
-/*!
- Compares two map of resources values and finds different ones
- \param map1 - first map
- \param map2 - second map
- \param resMap - map to be filled with different values
- \param fromFirst - if it is true, then resMap will be filled with values from first map, otherwise - from second
-*/
-void QtxResourceEdit::differentValues( const QMap<Item*, QString>& map1, const QMap<Item*, QString>& map2,
- QMap<Item*, QString>& resMap, const bool fromFirst ) const
-{
- resMap.clear();
- const QMap<Item*, QString>& later = fromFirst ? map1 : map2;
- const QMap<Item*, QString>& early = fromFirst ? map2 : map1;
-
- for ( QMap<Item*, QString>::ConstIterator it = later.begin(); it != later.end(); ++it )
- {
- if ( !early.contains( it.key() ) || early[it.key()] != it.data() )
- resMap.insert( it.key(), it.data() );
- }
-}
-
-/*!
- Makes some activity on resource changing (called from store() method)
- \sa store()
-*/
-void QtxResourceEdit::changedResources( const QMap<Item*, QString>& )
-{
-}
-
-/*!
- Some activity on item addition (default implementation is empty)
-*/
-void QtxResourceEdit::itemAdded( Item* )
-{
-}
-
-/*!
- Some activity on item removing (default implementation is empty)
-*/
-void QtxResourceEdit::itemRemoved( Item* )
-{
-}
-
-/*!
- Constructor
-*/
-QtxResourceEdit::Item::Item( QtxResourceEdit* edit, Item* parent )
-: myEdit( edit ),
-myParent( 0 )
-{
- myId = generateId();
-
- if ( parent )
- parent->insertChild( this );
-}
-
-/*!
- Destructor
-*/
-QtxResourceEdit::Item::~Item()
-{
- if ( resourceEdit() )
- resourceEdit()->removeItem( this );
-}
-
-/*!
- \return id of item
-*/
-int QtxResourceEdit::Item::id() const
-{
- return myId;
-}
-
-/*!
- \return parent item
-*/
-QtxResourceEdit::Item* QtxResourceEdit::Item::parentItem() const
-{
- return myParent;
-}
-
-/*!
- Appends child and (if necessary) removes item from old parent
- \param item - item to be added
-*/
-void QtxResourceEdit::Item::insertChild( Item* item )
-{
- if ( !item || myChildren.contains( item ) )
- return;
-
- if ( item->parentItem() && item->parentItem() != this )
- item->parentItem()->removeChild( item );
-
- item->myParent = this;
- myChildren.append( item );
-}
-
-/*!
- Removes child
- \param item - item to be removed
-*/
-void QtxResourceEdit::Item::removeChild( Item* item )
-{
- if ( !item || !myChildren.contains( item ) )
- return;
-
- myChildren.remove( item );
- item->myParent = 0;
-}
-
-/*!
- Fills list with children items
- \param lst - list to be filled with
-*/
-void QtxResourceEdit::Item::childItems( QPtrList<Item>& lst ) const
-{
- for ( ItemListIterator it( myChildren ); it.current(); ++it )
- lst.append( it.current() );
-}
-
-/*!
- \return true if there is no children of this item
-*/
-bool QtxResourceEdit::Item::isEmpty() const
-{
- return myChildren.isEmpty();
-}
-
-/*!
- \return title of item
-*/
-QString QtxResourceEdit::Item::title() const
-{
- return myTitle;
-}
-
-/*!
- \return assigned resource placement
- \param sec - to return section
- \param param - to return param name
-*/
-void QtxResourceEdit::Item::resource( QString& sec, QString& param ) const
-{
- sec = myResSection;
- param = myResParameter;
-}
-
-/*!
- Sets item title
- \param title - new item title
-*/
-void QtxResourceEdit::Item::setTitle( const QString& title )
-{
- myTitle = title;
-}
-
-/*!
- Assigns new resource to item
- \param sec - section
- \param sec - param name
-*/
-void QtxResourceEdit::Item::setResource( const QString& sec, const QString& param )
-{
- myResSection = sec;
- myResParameter = param;
-}
-
-/*!
- Updates item (default implementation is empty)
-*/
-void QtxResourceEdit::Item::update()
-{
-}
-
-/*!
- \return property value
-*/
-QVariant QtxResourceEdit::Item::property( const QString& ) const
-{
- return QVariant();
-}
-
-/*!
- Sets property value
-*/
-void QtxResourceEdit::Item::setProperty( const QString&, const QVariant& )
-{
-}
-
-/*!
- \return value of assigned resource
-*/
-QString QtxResourceEdit::Item::resourceValue() const
-{
- return getString();
-}
-
-/*!
- Sets value of assigned resource
- \param val - new value
-*/
-void QtxResourceEdit::Item::setResourceValue( const QString& val )
-{
- setString( val );
-}
-
-/*!
- \return corresponding resource manager
-*/
-QtxResourceMgr* QtxResourceEdit::Item::resourceMgr() const
-{
- QtxResourceMgr* resMgr = 0;
- if ( resourceEdit() )
- resMgr = resourceEdit()->resourceMgr();
- return resMgr;
-}
-
-/*!
- \return corresponding resource edit
-*/
-QtxResourceEdit* QtxResourceEdit::Item::resourceEdit() const
-{
- return myEdit;
-}
-
-/*!
- \return integer value of resource corresponding to item
- \param val - default value (it is returned if there is no such resource)
-*/
-int QtxResourceEdit::Item::getInteger( const int val ) const
-{
- QtxResourceMgr* resMgr = resourceMgr();
- return resMgr ? resMgr->integerValue( myResSection, myResParameter, val ) : val;
-}
-
-/*!
- \return double value of resource corresponding to item
- \param val - default value (it is returned if there is no such resource)
-*/
-double QtxResourceEdit::Item::getDouble( const double val ) const
-{
- QtxResourceMgr* resMgr = resourceMgr();
- return resMgr ? resMgr->doubleValue( myResSection, myResParameter, val ) : val;
-}
-
-/*!
- \return boolean value of resource corresponding to item
- \param val - default value (it is returned if there is no such resource)
-*/
-bool QtxResourceEdit::Item::getBoolean( const bool val ) const
-{
- QtxResourceMgr* resMgr = resourceMgr();
- return resMgr ? resMgr->booleanValue( myResSection, myResParameter, val ) : val;
-}
-
-/*!
- \return string value of resource corresponding to item
- \param val - default value (it is returned if there is no such resource)
-*/
-QString QtxResourceEdit::Item::getString( const QString& val ) const
-{
- QtxResourceMgr* resMgr = resourceMgr();
- return resMgr ? resMgr->stringValue( myResSection, myResParameter, val ) : val;
-}
-
-/*!
- \return color value of resource corresponding to item
- \param val - default value (it is returned if there is no such resource)
-*/
-QColor QtxResourceEdit::Item::getColor( const QColor& val ) const
-{
- QtxResourceMgr* resMgr = resourceMgr();
- return resMgr ? resMgr->colorValue( myResSection, myResParameter, val ) : val;
-}
-
-/*!
- \return font value of resource corresponding to item
- \param val - default value (it is returned if there is no such resource)
-*/
-QFont QtxResourceEdit::Item::getFont( const QFont& val ) const
-{
- QtxResourceMgr* resMgr = resourceMgr();
- return resMgr ? resMgr->fontValue( myResSection, myResParameter, val ) : val;
-}
-
-/*!
- Sets value of resource
- \param val - value
-*/
-void QtxResourceEdit::Item::setInteger( const int val )
-{
- QtxResourceMgr* resMgr = resourceMgr();
- if ( resMgr )
- resMgr->setValue( myResSection, myResParameter, val );
-}
-
-/*!
- Sets value of resource
- \param val - value
-*/
-void QtxResourceEdit::Item::setDouble( const double val )
-{
- QtxResourceMgr* resMgr = resourceMgr();
- if ( resMgr )
- resMgr->setValue( myResSection, myResParameter, val );
-}
-
-/*!
- Sets value of resource
- \param val - value
-*/
-void QtxResourceEdit::Item::setBoolean( const bool val )
-{
- QtxResourceMgr* resMgr = resourceMgr();
- if ( resMgr )
- resMgr->setValue( myResSection, myResParameter, val );
-}
-
-/*!
- Sets value of resource
- \param val - value
-*/
-void QtxResourceEdit::Item::setString( const QString& val )
-{
- QtxResourceMgr* resMgr = resourceMgr();
- if ( resMgr )
- resMgr->setValue( myResSection, myResParameter, val );
-}
-
-/*!
- Sets value of resource
- \param val - value
-*/
-void QtxResourceEdit::Item::setColor( const QColor& val )
-{
- QtxResourceMgr* resMgr = resourceMgr();
- if ( resMgr )
- resMgr->setValue( myResSection, myResParameter, val );
-}
-
-/*!
- Sets value of resource
- \param val - value
-*/
-void QtxResourceEdit::Item::setFont( const QFont& val )
-{
- QtxResourceMgr* resMgr = resourceMgr();
- if ( resMgr )
- resMgr->setValue( myResSection, myResParameter, val );
-}
-
-/*!
- \return other item
- \param id - other item id
-*/
-QtxResourceEdit::Item* QtxResourceEdit::Item::item( const int id ) const
-{
- return resourceEdit() ? resourceEdit()->item( id ) : 0;
-}
-
-/*!
- \return other item
- \param title - other item title
-*/
-QtxResourceEdit::Item* QtxResourceEdit::Item::item( const QString& title ) const
-{
- return resourceEdit() ? resourceEdit()->item( title ) : 0;
-}
-
-/*!
- \return other item
- \param title - other item title
- \param id - parent item id
-*/
-QtxResourceEdit::Item* QtxResourceEdit::Item::item( const QString& title, const int id ) const
-{
- return resourceEdit() ? resourceEdit()->item( title, id ) : 0;
-}
-
-/*!
- \return free item id
-*/
-int QtxResourceEdit::Item::generateId()
-{
- static int _id = 0;
- return _id++;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxResourceEdit.h
-// Author: Sergey TELKOV
-
-#ifndef QTXRESOURCEEDIT_H
-#define QTXRESOURCEEDIT_H
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-#include "Qtx.h"
-
-class QString;
-class QtxResourceMgr;
-
-#include <qcolor.h>
-#include <qvariant.h>
-#include <qfont.h>
-
-/*!
- \class QtxResourceEdit
- Class for managing preferences items
-*/
-class QTX_EXPORT QtxResourceEdit
-{
-public:
- class Item;
-
-public:
- QtxResourceEdit( QtxResourceMgr* );
- virtual ~QtxResourceEdit();
-
- QtxResourceMgr* resourceMgr() const;
-
- virtual int addItem( const QString& label, const int pId = -1, const int = -1,
- const QString& section = QString::null,
- const QString& param = QString::null );
-
- QVariant itemProperty( const int, const QString& ) const;
- virtual void setItemProperty( const int, const QString&, const QVariant& );
-
- void resource( const int, QString&, QString& ) const;
-
- virtual void store();
- virtual void retrieve();
-
- virtual void update();
-
- virtual void toBackup();
- virtual void fromBackup();
-
-protected:
- Item* item( const int ) const;
- Item* item( const QString& ) const;
- Item* item( const QString&, const int ) const;
-
- virtual Item* createItem( const QString&, const int ) = 0;
-
- void resourceValues( QMap<int, QString>& ) const;
- void resourceValues( QMap<Item*, QString>& ) const;
-
- void setResourceValues( QMap<int, QString>& ) const;
- void setResourceValues( QMap<Item*, QString>& ) const;
-
- void differentValues( const QMap<int, QString>&, const QMap<int, QString>&,
- QMap<int, QString>&, const bool fromFirst = false ) const;
- void differentValues( const QMap<Item*, QString>&, const QMap<Item*, QString>&,
- QMap<Item*, QString>&, const bool fromFirst = false ) const;
-
- virtual void changedResources( const QMap<Item*, QString>& );
-
- virtual void itemAdded( Item* );
- virtual void itemRemoved( Item* );
-
- void childItems( QPtrList<Item>& ) const;
-
-private:
- void removeItem( Item* );
- Item* createItem( const QString&, const int, const int );
-
-private:
- typedef QMap<int, Item*> ItemMap;
-
-private:
- ItemMap myItems;
- QtxResourceMgr* myResMgr;
- QMap<Item*, QString> myBackup;
- QPtrList<Item> myChildren;
-
- friend class QtxResourceEdit::Item;
-};
-
-/*!
- \class QtxResourceEditor::Item
- Class for incapsulation of one preference item
-*/
-
-class QTX_EXPORT QtxResourceEdit::Item
-{
-public:
- Item( QtxResourceEdit*, Item* = 0 );
- virtual ~Item();
-
- int id() const;
- virtual int type() const = 0;
-
- Item* parentItem() const;
- void childItems( QPtrList<Item>& ) const;
-
- virtual bool isEmpty() const;
-
- QString title() const;
- void resource( QString&, QString& ) const;
-
- virtual void setTitle( const QString& );
- virtual void setResource( const QString&, const QString& );
-
- virtual void update();
-
- QVariant property( const QString& ) const;
- virtual void setProperty( const QString&, const QVariant& );
-
- virtual void store() = 0;
- virtual void retrieve() = 0;
-
- virtual Item* createItem( const QString&, const int ) = 0;
-
- QString resourceValue() const;
- void setResourceValue( const QString& );
-
- virtual void insertChild( Item* );
- virtual void removeChild( Item* );
-
-protected:
- QtxResourceMgr* resourceMgr() const;
- QtxResourceEdit* resourceEdit() const;
-
- int getInteger( const int = 0 ) const;
- double getDouble( const double = 0.0 ) const;
- bool getBoolean( const bool = false ) const;
- QColor getColor( const QColor& = QColor() ) const;
- QFont getFont( const QFont& = QFont() ) const;
- QString getString( const QString& = QString::null ) const;
-
- void setInteger( const int );
- void setDouble( const double );
- void setBoolean( const bool );
- void setColor( const QColor& );
- void setFont( const QFont& );
- void setString( const QString& );
-
- Item* item( const int ) const;
- Item* item( const QString& ) const;
- Item* item( const QString&, const int ) const;
-
-protected:
- typedef QPtrList<Item> ItemList;
- typedef QPtrListIterator<Item> ItemListIterator;
-
-private:
- static int generateId();
-
-private:
- int myId;
- Item* myParent;
- ItemList myChildren;
-
- QString myTitle;
- QString myResSection;
- QString myResParameter;
-
- QtxResourceEdit* myEdit;
-};
-
-#ifdef WIN32
-#pragma warning( default:4251 )
-#endif
-
-#endif
//
#include "QtxResourceMgr.h"
-#include <qdir.h>
-#include <qfile.h>
-#include <qregexp.h>
-#include <qpixmap.h>
-#include <qtranslator.h>
-#include <qapplication.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qfile.h>
+#include <QtCore/qregexp.h>
+#include <QtCore/qtextstream.h>
+#include <QtCore/qtranslator.h>
+
+#include <QtGui/qpixmap.h>
+#include <QtGui/qapplication.h>
#ifndef QT_NO_DOM
-#include <qdom.h>
+#include <QtXml/qdom.h>
#endif
+#define EMULATE_GLOBAL_CONTEXT
+
#include <stdlib.h>
/*!
Level: Internal
*/
+class QtxResourceMgr::Resources
+{
+public:
+ Resources( const QtxResourceMgr*, const QString& );
+ virtual ~Resources();
+
+ QString file() const;
+ void setFile( const QString& );
+
+ QString value( const QString&, const QString&, const bool ) const;
+ void setValue( const QString&, const QString&, const QString& );
+
+ bool hasSection( const QString& ) const;
+ bool hasValue( const QString&, const QString& ) const;
+
+ void removeSection( const QString& );
+ void removeValue( const QString&, const QString& );
+
+ QPixmap loadPixmap( const QString&, const QString&, const QString& ) const;
+ QTranslator* loadTranslator( const QString&, const QString&, const QString& ) const;
+
+ QString environmentVariable( const QString&, int&, int& ) const;
+ QString makeSubstitution( const QString&, const QString&, const QString& ) const;
+
+ void clear();
+
+ QStringList sections() const;
+ QStringList parameters( const QString& ) const;
+
+ QString path( const QString&, const QString&, const QString& ) const;
+
+protected:
+ QtxResourceMgr* resMgr() const;
+
+private:
+ Section section( const QString& );
+ const Section section( const QString& ) const;
+
+ QString fileName( const QString&, const QString&, const QString& ) const;
+
+private:
+ typedef QMap<QString, Section> SectionMap;
+
+private:
+ QtxResourceMgr* myMgr;
+ SectionMap mySections;
+ QString myFileName;
+ QMap<QString,QPixmap> myPixmapCache;
+
+ friend class QtxResourceMgr::Format;
+};
+
QtxResourceMgr::Resources::Resources( const QtxResourceMgr* mgr, const QString& fileName )
: myFileName( fileName ),
myMgr( const_cast<QtxResourceMgr*>( mgr ) )
*/
void QtxResourceMgr::Resources::setValue( const QString& sect, const QString& name, const QString& val )
{
- Section& s = section( sect );
- s.insert( name, val );
+ if ( !mySections.contains( sect ) )
+ mySections.insert( sect, Section() );
+
+ mySections[sect].insert( name, val );
}
/*!
*/
void QtxResourceMgr::Resources::removeValue( const QString& sect, const QString& name )
{
- if ( !hasSection( sect ) )
+ if ( !mySections.contains( sect ) )
return;
- Section& s = section( sect );
- s.remove( name );
+ mySections[sect].remove( name );
- if ( s.isEmpty() )
+ if ( mySections[sect].isEmpty() )
mySections.remove( sect );
}
/*!
\return instance of section by it's name. Section will be created if it doesn't exist
*/
-QtxResourceMgr::Section& QtxResourceMgr::Resources::section( const QString& sn )
+QtxResourceMgr::Section QtxResourceMgr::Resources::section( const QString& sn )
{
if ( !mySections.contains( sn ) )
mySections.insert( sn, Section() );
/*!
\return instance of section by it's name. Section will be created if it doesn't exist
*/
-const QtxResourceMgr::Section& QtxResourceMgr::Resources::section( const QString& sn ) const
+const QtxResourceMgr::Section QtxResourceMgr::Resources::section( const QString& sn ) const
{
return mySections[sn];
}
if ( !path.isEmpty() )
{
if ( QFileInfo( path ).isRelative() )
- path = Qtx::addSlash( QFileInfo( myFileName ).dirPath( true ) ) + path;
+ path = Qtx::addSlash( Qtx::dir( myFileName, true ) ) + path;
path = Qtx::addSlash( path ) + name;
}
{
QString fname = QDir::convertSeparators( path );
QFileInfo inf( fname );
- fname = inf.absFilePath();
+ fname = inf.absoluteFilePath();
return fname;
}
return QString();
QTranslator* QtxResourceMgr::Resources::loadTranslator( const QString& sect, const QString& prefix, const QString& name ) const
{
QTranslator* trans = new QTranslator( 0 );
- if ( !trans->load( fileName( sect, prefix, name ) ) )
+ QString fname = fileName( sect, prefix, name );
+#ifdef EMULATE_GLOBAL_CONTEXT
+ char* buf = 0;
+ QFile file( fname );
+ int len = file.size();
+ if ( len )
+ {
+ buf = new char[len];
+ if ( !file.open( QIODevice::ReadOnly ) || len != (uint)file.read( buf, len ) )
+ {
+ delete buf;
+ buf = 0;
+ }
+ file.close();
+ }
+ if ( buf )
+ {
+ char* pattern = "@default";
+ size_t pl = strlen( pattern );
+ for ( size_t i = 0; i < len - pl; i++ )
+ {
+ char* cur = buf + i;
+ if ( !strncmp( cur, pattern, pl ) )
+ {
+ *cur = '\0';
+ i += pl - 1;
+ }
+ }
+
+ if ( !trans->load( (uchar*)buf, len ) )
+ {
+ delete buf;
+ buf = 0;
+ }
+ }
+
+ if ( !buf )
+#else
+ if ( !trans->load( Qtx::file( fname, false ), Qtx::dir( fname ) ) )
+#endif
{
delete trans;
trans = 0;
QRegExp rx( "\\$\\{([a-zA-Z]+[a-zA-Z0-9_]*)\\}|\\$\\(([a-zA-Z]+[a-zA-Z0-9_]*)\\)|\\$([a-zA-Z]+[a-zA-Z0-9_]*)|\\%([a-zA-Z]+[a-zA-Z0-9_]*)\\%" );
- int pos = rx.search( str, start );
+ int pos = rx.indexIn( str, start );
if ( pos != -1 )
{
start = pos;
len = rx.matchedLength();
QStringList caps = rx.capturedTexts();
for ( uint i = 1; i <= caps.count() && varName.isEmpty(); i++ )
- varName = *caps.at( i );
+ varName = caps[i];
}
return varName;
}
if ( envName.isNull() )
break;
- QString newStr = QString::null;
- if ( ::getenv( envName ) )
- newStr = QString( ::getenv( envName ) );
+ QString newStr;
+ if ( ::getenv( envName.toLatin1() ) )
+ newStr = QString( ::getenv( envName.toLatin1() ) );
if ( newStr.isNull() )
{
bool QtxResourceMgr::IniFormat::load( const QString& fname, QMap<QString, Section>& secMap )
{
QFile file( fname );
- if ( !file.open( IO_ReadOnly ) )
+ if ( !file.open( QFile::ReadOnly ) )
return false;
QTextStream ts( &file );
if ( data.isNull() )
break;
- data = data.stripWhiteSpace();
+ data = data.trimmed();
if ( data.isEmpty() )
continue;
continue;
QRegExp rx( "^\\[([\\w\\s\\._]*)\\]$" );
- if ( rx.search( data ) != -1 )
+ if ( rx.indexIn( data ) != -1 )
{
section = rx.cap( 1 );
if ( section.isEmpty() )
{
res = false;
- qWarning( QString( "Empty section in line %1" ).arg( line ) );
+ qWarning( "Empty section in line %d", line );
}
}
else if ( data.contains( "=" ) && !section.isEmpty() )
{
- int pos = data.find( separator );
- QString key = data.left( pos ).stripWhiteSpace();
- QString val = data.mid( pos + 1 ).stripWhiteSpace();
+ int pos = data.indexOf( separator );
+ QString key = data.left( pos ).trimmed();
+ QString val = data.mid( pos + 1 ).trimmed();
secMap[section].insert( key, val );
}
else
{
res = false;
- section.isEmpty() ? qWarning( "Current section is empty" ) :
- qWarning( QString( "Error in line: %1" ).arg( line ) );
+ section.isEmpty() ? qWarning( "Current section is empty" ) : qWarning( "Error in line: %d", line );
}
}
bool QtxResourceMgr::IniFormat::save( const QString& fname, const QMap<QString, Section>& secMap )
{
QFile file( fname );
- if ( !file.open( IO_WriteOnly ) )
+ if ( !file.open( QFile::WriteOnly ) )
return false;
+ QTextStream ts( &file );
+
bool res = true;
for ( QMap<QString, Section>::ConstIterator it = secMap.begin(); it != secMap.end() && res; ++it )
{
- QString data = QString( "[%1]\n" ).arg( it.key() );
- for ( Section::ConstIterator iter = it.data().begin(); iter != it.data().end(); ++iter )
- data += iter.key() + " = " + iter.data() + "\n";
- data += "\n";
+ QStringList data( QString( "[%1]" ).arg( it.key() ) );
+ for ( Section::ConstIterator iter = it.value().begin(); iter != it.value().end(); ++iter )
+ data.append( iter.key() + " = " + iter.value() );
+ data.append( "" );
- res = file.writeBlock( data.latin1(), data.length() ) == (int)data.length();
+ for ( QStringList::const_iterator itr = data.begin(); itr != data.end(); ++itr )
+ ts << *itr << endl;
}
file.close();
#ifndef QT_NO_DOM
QFile file( fname );
- if ( !file.open( IO_ReadOnly ) )
+ if ( !file.open( QFile::ReadOnly ) )
{
qDebug( "File cannot be opened" );
return false;
#endif
- if( res )
- qDebug( QString( "File '%1' is loaded successfully" ).arg( fname ) );
+ if ( res )
+ qDebug( "File '%s' is loaded successfully", (const char*)fname.toLatin1() );
return res;
}
#ifndef QT_NO_DOM
QFile file( fname );
- if ( !file.open( IO_WriteOnly ) )
+ if ( !file.open( QFile::WriteOnly ) )
return false;
QDomDocument doc( docTag() );
QDomElement sect = doc.createElement( sectionTag() );
sect.setAttribute( nameAttribute(), it.key() );
root.appendChild( sect );
- for ( Section::ConstIterator iter = it.data().begin(); iter != it.data().end(); ++iter )
+ for ( Section::ConstIterator iter = it.value().begin(); iter != it.value().end(); ++iter )
{
QDomElement val = doc.createElement( parameterTag() );
val.setAttribute( nameAttribute(), iter.key() );
- val.setAttribute( valueAttribute(), iter.data() );
+ val.setAttribute( valueAttribute(), iter.value() );
sect.appendChild( val );
}
}
- QString docStr = doc.toString();
- res = file.writeBlock( docStr.latin1(), docStr.length() ) == (int)docStr.length();
+ QTextStream ts( &file );
+ QStringList docStr = doc.toString().split( "\n" );
+ for ( QStringList::const_iterator itr = docStr.begin(); itr != docStr.end(); ++itr )
+ ts << *itr << endl;
+
file.close();
#endif
if ( status )
res->mySections = sections;
else
- qDebug( "QtxResourceMgr: Could not load resource file \"%s\"", res->myFileName.latin1() );
+ qDebug( "QtxResourceMgr: Could not load resource file \"%s\"", (const char*)res->myFileName.toLatin1() );
return status;
}
envVar = envVar.arg( appName );
QString dirs;
- if ( ::getenv( envVar ) )
- dirs = ::getenv( envVar );
+ if ( ::getenv( envVar.toLatin1() ) )
+ dirs = ::getenv( envVar.toLatin1() );
#ifdef WIN32
QString dirsep = ";"; // for Windows: ";" is used as directories separator
#else
QString dirsep = "[:|;]"; // for Linux: both ":" and ";" can be used
#endif
- setDirList( QStringList::split( QRegExp(dirsep), dirs ) );
+ setDirList( dirs.split( QRegExp( dirsep ), QString::SkipEmptyParts ) );
installFormat( new XmlFormat() );
installFormat( new IniFormat() );
QStringList prefList = myTranslator.keys();
for ( QStringList::const_iterator it = prefList.begin(); it != prefList.end(); ++it )
removeTranslators( *it );
- for ( ResListIterator resIt( myResources ); resIt.current(); ++resIt )
- delete resIt.current();
+ for ( ResList::iterator resIt = myResources.begin(); resIt != myResources.end(); ++resIt )
+ delete *resIt;
myResources.clear();
- for ( FormatListIterator formIt( myFormats ); formIt.current(); ++formIt )
- delete formIt.current();
+ for ( FormatList::iterator formIt = myFormats.begin(); formIt != myFormats.end(); ++formIt )
+ delete *formIt;
}
/*!
*/
void QtxResourceMgr::clear()
{
- for ( ResListIterator it( myResources ); it.current(); ++it )
- it.current()->clear();
+ for ( ResList::iterator it = myResources.begin(); it != myResources.end(); ++it )
+ (*it)->clear();
}
/*!
boolMap["false"] = boolMap["no"] = boolMap["off"] = false;
}
- val = val.lower();
+ val = val.toLower();
bool res = boolMap.contains( val );
if ( res )
bVal = boolMap[val];
return false;
bool res = true;
- QStringList vals = QStringList::split( ",", val, true );
+ QStringList vals = val.split( "," );
QIntList nums;
for ( QStringList::const_iterator it = vals.begin(); it != vals.end() && res; ++it )
{
int pack = val.toInt( &res );
if ( res )
- Qtx::rgbSet( pack, cVal );
+ cVal = Qtx::rgbSet( pack );
}
return res;
if ( !value( sect, name, val, true ) )
return false;
- QStringList fontDescr = QStringList::split( ",", val );
+ QStringList fontDescr = val.split( ",", QString::SkipEmptyParts );
if ( fontDescr.count() < 2 )
return false;
for ( int i = 1; i < (int)fontDescr.count(); i++ )
{
- QString curval = fontDescr[i].stripWhiteSpace().lower();
+ QString curval = fontDescr[i].trimmed().toLower();
if ( curval == QString( "bold" ) )
fVal.setBold( true );
else if ( curval == QString( "italic" ) )
bool ok = false;
- ResListIterator it( myResources );
+ ResList::const_iterator it = myResources.begin();
if ( ignoreUserValues() )
++it;
- for ( ; it.current() && !ok; ++it )
+ for ( ; it != myResources.end() && !ok; ++it )
{
- ok = it.current()->hasValue( sect, name );
+ ok = (*it)->hasValue( sect, name );
if ( ok )
- val = it.current()->value( sect, name, subst );
+ val = (*it)->value( sect, name, subst );
}
return ok;
initialize();
bool ok = false;
- for ( ResListIterator it( myResources ); it.current() && !ok; ++it )
- ok = it.current()->hasValue( sect, name );
+ for ( ResList::const_iterator it = myResources.begin(); it != myResources.end() && !ok; ++it )
+ ok = (*it)->hasValue( sect, name );
return ok;
}
initialize();
bool ok = false;
- for ( ResListIterator it( myResources ); it.current() && !ok; ++it )
- ok = it.current()->hasSection( sect );
+ for ( ResList::const_iterator it = myResources.begin(); it != myResources.end() && !ok; ++it )
+ ok = (*it)->hasSection( sect );
return ok;
}
{
initialize();
- for ( ResListIterator it( myResources ); it.current(); ++it )
- it.current()->removeSection( sect );
+ for ( ResList::iterator it = myResources.begin(); it != myResources.end(); ++it )
+ (*it)->removeSection( sect );
}
/*!
{
initialize();
- for ( ResListIterator it( myResources ); it.current(); ++it )
- it.current()->removeValue( sect, name );
+ for ( ResList::iterator it = myResources.begin(); it != myResources.end(); ++it )
+ (*it)->removeValue( sect, name );
}
/*!
{
QString fmt;
if ( !myFormats.isEmpty() )
- fmt = myFormats.getFirst()->format();
+ fmt = myFormats[0]->format();
return fmt;
}
if ( !form )
return;
- myFormats.remove( form );
+ myFormats.removeAll( form );
myFormats.prepend( form );
if ( myResources.isEmpty() )
return;
- ResListIterator resIt( myResources );
- if ( myResources.count() > myDirList.count() && resIt.current() ) {
- resIt.current()->setFile( userFileName( appName() ) );
+ ResList::iterator resIt = myResources.begin();
+ if ( myResources.count() > myDirList.count() && resIt != myResources.end() )
+ {
+ (*resIt)->setFile( userFileName( appName() ) );
++resIt;
}
- for ( QStringList::const_iterator it = myDirList.begin(); it != myDirList.end() && resIt.current(); ++it, ++resIt )
- resIt.current()->setFile( Qtx::addSlash( *it ) + globalFileName( appName() ) );
+ for ( QStringList::const_iterator it = myDirList.begin(); it != myDirList.end() && resIt != myResources.end(); ++it, ++resIt )
+ (*resIt)->setFile( Qtx::addSlash( *it ) + globalFileName( appName() ) );
}
/*!
QtxResourceMgr::Format* QtxResourceMgr::format( const QString& fmt ) const
{
Format* form = 0;
- for ( FormatListIterator it( myFormats ); it.current() && !form; ++it )
+ for ( FormatList::const_iterator it = myFormats.begin(); it != myFormats.end() && !form; ++it )
{
- if ( it.current()->format() == fmt )
- form = it.current();
+ if ( (*it)->format() == fmt )
+ form = *it;
}
return form;
*/
void QtxResourceMgr::removeFormat( QtxResourceMgr::Format* form )
{
- myFormats.remove( form );
+ myFormats.removeAll( form );
}
/*!
return false;
bool res = true;
- for ( ResListIterator it( myResources ); it.current(); ++it )
- res = fmt->load( it.current() ) && res;
+ for ( ResList::iterator it = myResources.begin(); it != myResources.end(); ++it )
+ res = fmt->load( *it ) && res;
return res;
}
if ( !fmt )
return false;
- Resources* r = myResources.getFirst();
- if( !r )
+ Resources* r = myResources[0];
+ if ( !r )
return false;
QString old = r->file();
if ( myResources.isEmpty() )
return true;
- return fmt->save( myResources.getFirst() );
+ return fmt->save( myResources[0] );
}
/*!
initialize();
QMap<QString, int> map;
- for ( ResListIterator it( myResources ); it.current(); ++it )
+ for ( ResList::const_iterator it = myResources.begin(); it != myResources.end(); ++it )
{
- QStringList lst = it.current()->sections();
+ QStringList lst = (*it)->sections();
for ( QStringList::const_iterator itr = lst.begin(); itr != lst.end(); ++itr )
map.insert( *itr, 0 );
}
typedef IMap<QString, int> PMap;
#endif
PMap pmap;
- ResListIterator it( myResources );
- it.toLast();
- for ( ; it.current(); --it ) {
- QStringList lst = it.current()->parameters( sec );
+ ResList lst;
+ for ( ResList::const_iterator itr = myResources.begin(); itr != myResources.end(); ++itr )
+ lst.prepend( *itr );
+
+ for ( ResList::const_iterator it = lst.begin(); it != lst.end(); ++it )
+ {
+ QStringList lst = (*it)->parameters( sec );
for ( QStringList::const_iterator itr = lst.begin(); itr != lst.end(); ++itr )
pmap.insert( *itr, 0, false );
}
QString QtxResourceMgr::path( const QString& sect, const QString& prefix, const QString& name ) const
{
QString res;
- for ( ResListIterator it( myResources ); it.current() && res.isEmpty(); ++it )
- res = it.current()->path( sect, prefix, name );
+ for ( ResList::const_iterator it = myResources.begin(); it != myResources.end() && res.isEmpty(); ++it )
+ res = (*it)->path( sect, prefix, name );
return res;
}
initialize();
QPixmap pix;
- for ( ResListIterator it( myResources ); it.current() && pix.isNull(); ++it )
- pix = it.current()->loadPixmap( resSection(), prefix, name );
+ for ( ResList::const_iterator it = myResources.begin(); it != myResources.end() && pix.isNull(); ++it )
+ pix = (*it)->loadPixmap( resSection(), prefix, name );
if ( pix.isNull() )
pix = defPix;
return pix;
if ( lang.isEmpty() )
{
lang = QString( "en" );
- qWarning( QString( "Language not specified. Assumed: %1" ).arg( lang ) );
+ qWarning( "Language not specified. Assumed: %s", (const char*)lang.toLatin1() );
}
substMap.insert( 'L', lang );
QString trs;
if ( value( langSection(), "translators", trs, false ) && !trs.isEmpty() )
{
- QStringList translators = QStringList::split( "|", option( "translators" ) );
- QStringList newTranslators = QStringList::split( "|", trs );
+ QStringList translators = option( "translators" ).split( "|", QString::SkipEmptyParts );
+ QStringList newTranslators = trs.split( "|", QString::SkipEmptyParts );
for ( uint i = 0; i < newTranslators.count(); i++ )
- if ( translators.find( newTranslators[i] ) == translators.end() )
+ {
+ if ( translators.indexOf( newTranslators[i] ) < 0 )
translators += newTranslators[i];
+ }
setOption( "translators", translators.join( "|" ) );
}
- QStringList trList = QStringList::split( "|", option( "translators" ) );
+ QStringList trList = option( "translators" ).split( "|", QString::SkipEmptyParts );
if ( trList.isEmpty() )
{
trList.append( "%P_msg_%L.qm" );
- qWarning( QString( "Translators not defined. Assumed: %1" ).arg( trList.first() ) );
+ qWarning( "Translators not defined. Assumed: %s", (const char*)trList[0].toLatin1() );
}
QStringList prefixList;
QStringList trs;
for ( QStringList::const_iterator it = trList.begin(); it != trList.end(); ++it )
- trs.append( substMacro( *it, substMap ).stripWhiteSpace() );
+ trs.append( substMacro( *it, substMap ).trimmed() );
loadTranslators( prefix, trs );
}
{
initialize();
+ ResList lst;
+ for ( ResList::iterator iter = myResources.begin(); iter != myResources.end(); ++iter )
+ lst.prepend( *iter );
+
QTranslator* trans = 0;
- ResListIterator it( myResources );
- it.toLast();
- for ( ; it.current(); --it )
+
+ for ( ResList::iterator it = lst.begin(); it != lst.end(); ++it )
{
for ( QStringList::const_iterator itr = translators.begin(); itr != translators.end(); ++itr )
{
- trans = it.current()->loadTranslator( resSection(), prefix, *itr );
+ trans = (*it)->loadTranslator( resSection(), prefix, *itr );
if ( trans )
{
if ( !myTranslator[prefix].contains( trans ) )
myTranslator[prefix].append( trans );
- qApp->installTranslator( trans );
+ QApplication::instance()->installTranslator( trans );
}
}
}
initialize();
QTranslator* trans = 0;
- ResListIterator it( myResources );
- it.toLast();
- for ( ; it.current(); --it )
+ ResList::iterator it = myResources.end();
+ for ( ; it != myResources.begin(); --it )
{
- trans = it.current()->loadTranslator( resSection(), prefix, name );
+ trans = (*it)->loadTranslator( resSection(), prefix, name );
if ( trans )
{
if ( !myTranslator[prefix].contains( trans ) )
myTranslator[prefix].append( trans );
- qApp->installTranslator( trans );
+ QApplication::instance()->installTranslator( trans );
}
}
}
if ( !myTranslator.contains( prefix ) )
return;
- for ( TransListIterator it( myTranslator[prefix] ); it.current(); ++it )
+ for ( TransList::iterator it = myTranslator[prefix].begin(); it != myTranslator[prefix].end(); ++it )
{
- qApp->removeTranslator( it.current() );
- delete it.current();
+ QApplication::instance()->removeTranslator( *it );
+ delete *it;
}
myTranslator.remove( prefix );
if ( !myTranslator.contains( prefix ) )
return;
- for ( TransListIterator it( myTranslator[prefix] ); it.current(); ++it )
+ for ( TransList::iterator it = myTranslator[prefix].begin(); it != myTranslator[prefix].end(); ++it )
{
- qApp->removeTranslator( it.current() );
- qApp->installTranslator( it.current() );
+ QApplication::instance()->removeTranslator( *it );
+ QApplication::instance()->installTranslator( *it );
}
}
void QtxResourceMgr::setDirList( const QStringList& dl )
{
myDirList = dl;
- for ( ResListIterator it( myResources ); it.current(); ++it )
- delete it.current();
+ for ( ResList::iterator it = myResources.begin(); it != myResources.end(); ++it )
+ delete *it;
myResources.clear();
}
QString QtxResourceMgr::userFileName( const QString& appName, const bool /*for_load*/ ) const
{
QString fileName;
- QString pathName = QDir::homeDirPath();
+ QString pathName = QDir::homePath();
#ifdef WIN32
fileName = QString( "%1.%2" ).arg( appName ).arg( currentFormat() );
QRegExp rx( "%[A-Za-z%]" );
int idx = 0;
- while ( ( idx = rx.search( trg, idx ) ) >= 0 )
+ while ( ( idx = rx.indexIn( trg, idx ) ) >= 0 )
{
QChar spec = trg.at( idx + 1 );
QString subst;
#include "Qtx.h"
-#include <qmap.h>
-#include <qcolor.h>
-#include <qfont.h>
-#include <qpixmap.h>
-#include <qstringlist.h>
-#include <qtranslator.h>
-#include <qvaluelist.h>
+#include <QtCore/qmap.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qstringlist.h>
+#include <QtCore/qtranslator.h>
+
+#include <QtGui/qcolor.h>
+#include <QtGui/qfont.h>
+#include <QtGui/qpixmap.h>
class QPixmap;
QString substMacro( const QString&, const QMap<QChar, QString>& ) const;
private:
- typedef QPtrList<Resources> ResList;
- typedef QPtrList<Format> FormatList;
- typedef QMap<QString, QString> OptionsMap;
- typedef QPtrListIterator<Resources> ResListIterator;
- typedef QPtrListIterator<Format> FormatListIterator;
-
- typedef QPtrList<QTranslator> TransList;
- typedef QMap<QString, TransList> TransListMap;
- typedef QPtrListIterator<QTranslator> TransListIterator;
+ typedef QList<Resources*> ResList;
+ typedef QList<QTranslator*> TransList;
+ typedef QList<Format*> FormatList;
+ typedef QMap<QString, QString> OptionsMap;
+ typedef QMap<QString, TransList> TransListMap;
private:
QString myAppName;
QMap<QString, QString> myOpt;
};
-/*!
- Class: QtxResourceMgr::Resources
-*/
-
-class QtxResourceMgr::Resources
-{
-public:
- Resources( const QtxResourceMgr*, const QString& );
- virtual ~Resources();
-
- QString file() const;
- void setFile( const QString& );
-
- QString value( const QString&, const QString&, const bool ) const;
- void setValue( const QString&, const QString&, const QString& );
-
- bool hasSection( const QString& ) const;
- bool hasValue( const QString&, const QString& ) const;
-
- void removeSection( const QString& );
- void removeValue( const QString&, const QString& );
-
- QPixmap loadPixmap( const QString&, const QString&, const QString& ) const;
- QTranslator* loadTranslator( const QString&, const QString&, const QString& ) const;
-
- QString environmentVariable( const QString&, int&, int& ) const;
- QString makeSubstitution( const QString&, const QString&, const QString& ) const;
-
- void clear();
-
- QStringList sections() const;
- QStringList parameters( const QString& ) const;
-
- QString path( const QString&, const QString&, const QString& ) const;
-
-protected:
- QtxResourceMgr* resMgr() const;
-
-private:
- Section& section( const QString& );
- const Section& section( const QString& ) const;
-
- QString fileName( const QString&, const QString&, const QString& ) const;
-
-private:
- typedef QMap<QString, Section> SectionMap;
-
-private:
- SectionMap mySections;
- QString myFileName;
- QMap<QString,QPixmap> myPixmapCache;
- QtxResourceMgr* myMgr;
-
- friend class QtxResourceMgr::Format;
-};
-
/*!
Class: QtxResourceMgr::IMapIterator
*/
operator bool() const { return myIndex >= 0; }
const Key& key() const { return myMap->key( myIndex ); }
- Value& data() { return myMap->value( myIndex ); }
- const Value& data() const { return myMap->value( myIndex ); }
+ Value& value() { return myMap->value( myIndex ); }
+ const Value& value() const { return myMap->value( myIndex ); }
- Value& operator*() { return data(); }
+ Value& operator*() { return value(); }
IMapIterator& operator++() { myIndex++; init(); return *this; }
IMapIterator operator++( int ) { IMapIterator i = *this; myIndex++; init(); return i; }
operator bool() const { return myIndex >= 0; }
const Key& key() const { return myMap->key( myIndex ); }
- const Value& data() const { return myMap->value( myIndex ); }
-
- const Value& operator*() const { return data(); }
+ const Value value() const { return myMap->value( myIndex ); }
+ const Value operator*() const { return value(); }
+
IMapConstIterator& operator++() { myIndex++; init(); return *this; }
IMapConstIterator operator++( int ) { IMapConstIterator i = *this; myIndex++; init(); return i; }
IMapConstIterator& operator--() { myIndex--; init(); return *this; }
void clear() { myKeys.clear(); myData.clear(); }
- QValueList<Key> keys() const { return myKeys; }
- QValueList<Value> values() const { QValueList<Value> l; for ( int i = 0; i < count(); i++ ) l.append( value( i ) ); return l; }
- bool contains ( const Key& key ) const { return myData.contains( key ); }
+ QList<Key> keys() const { return myKeys; }
+ QList<Value> values() const { QList<Value> l; for ( int i = 0; i < count(); i++ ) l.append( value( i ) ); return l; }
+ bool contains ( const Key& key ) const { return myData.contains( key ); }
Iterator begin() { return Iterator( this ); }
Iterator end() { return Iterator( this, count() ); }
if ( myData.find( key ) == myData.end() || overwrite )
{
if ( myData.find( key ) != myData.end() && overwrite )
- myKeys.remove( myKeys.find( key ) );
+ myKeys.removeAt( myKeys.indexOf( key ) );
myKeys.append( key );
myData[key] = value;
}
return Iterator( this, index( key ) );
}
- int index( const Key& key ) const { return myKeys.findIndex( key ); }
+ int index( const Key& key ) const { return myKeys.indexOf( key ); }
Iterator at( const int index ) { return Iterator( this, index ); }
ConstIterator at( const int index ) const { return ConstIterator( this, index ); }
return myKeys[index];
}
- Value& value( const int index )
+ Value value( const int index )
{
if ( index < 0 || index >= (int)myKeys.count() )
return dummyValue;
return myData[ myKeys[index] ];
}
- Value& operator[]( const Key& key )
+ Value operator[]( const Key& key )
{
if ( myData.find( key ) == myData.end() )
insert( key, Value() );
return myData[ key ];
}
- const Value& operator[]( const Key& key ) const
+ const Value operator[]( const Key& key ) const
{
if ( myData.find( key ) == myData.end() )
return dummyValue;
- return myData[ key ];
+ return myData[key];
}
void erase( Iterator it ) { remove( it ); }
{
if ( index >= 0 && index < (int)myKeys.count() )
{
- myData.remove( myKeys[ index ] );
- myKeys.remove( myKeys.at( index ) );
+ myData.remove( myKeys[index] );
+ myKeys.removeAt( index );
}
}
private:
- QValueList<Key> myKeys;
+ QList<Key> myKeys;
QMap<Key,Value> myData;
Key dummyKey;
Value dummyValue;
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxSplash.cxx
-// Author: Vadim SANDLER
-
-#include "QtxSplash.h"
-
-#include <qapplication.h>
-#include <qpainter.h>
-#include <qpixmap.h>
-#include <qmessagebox.h>
-
-const int _PROGRESS_EVENT = QEvent::User + 10;
-const int _PROGRESS_WIDTH = 10;
-
-/*!
- Class ProgressEvent [ internal ].
-*/
-class ProgressEvent: public QCustomEvent
-{
-public:
- ProgressEvent( const QString& msg, const int progress = 0 )
- : QCustomEvent( id() ),
- myMessage( msg ),
- myProgress( progress )
- {}
- QString message() const { return myMessage; }
- int progress() const { return myProgress; }
- static int id() { return _PROGRESS_EVENT; }
-
-private:
- QString myMessage;
- int myProgress;
-};
-
-// Only one instance of splash screen is allowed
-QtxSplash* QtxSplash::mySplash = 0;
-
-/*!
- Construct a splash screen that will display the \a pixmap.
-*/
-QtxSplash::QtxSplash( const QPixmap& pixmap )
- : QWidget( 0, 0, WStyle_Customize | WStyle_StaysOnTop | WX11BypassWM | WStyle_NoBorder )
-{
- myAlignment = AlignBottom | AlignRight;
- myColor = white;
- myHideOnClick = false;
- myProgress = 0;
- myTotal = 0;
- myGradientType = Vertical;
- myError = 0;
- myStartColor = red;
-
- setPixmap( pixmap );
-}
-
-/*!
- Destructor.
-*/
-QtxSplash::~QtxSplash()
-{
- mySplash = 0;
-}
-
-/*!
- Returns an only instance of splash screen.
- If \a px is valid sets this pixmap to the splash screen.
-*/
-QtxSplash* QtxSplash::splash( const QPixmap& px )
-{
- if ( !mySplash )
- mySplash = new QtxSplash( px );
- else if ( !px.isNull() )
- mySplash->setPixmap( px );
- return mySplash;
-}
-
-/*!
- Sends the status message and (optionally) progress to the splash screen.
- Can be used, for example, from the progress thread.
-*/
-void QtxSplash::setStatus( const QString& msg,
- const int progress )
-{
- if ( mySplash ) {
- QApplication::postEvent( mySplash, new ProgressEvent( msg, progress ) );
- qApp->processEvents();
- }
-}
-
-/*!
- Sets error status and shows error message box to the user.
-*/
-void QtxSplash::error( const QString& error, const QString& title, const int code )
-{
- printf("QtxSplash::error: %s\n",error.latin1());
- if ( mySplash ) {
- mySplash->setError( code );
- QMessageBox::critical( mySplash,
- title.isEmpty() ? tr( "Error" ) : title,
- error,
- tr( "&OK" ) );
- }
-}
-
-/*!
- Sets the pixmap that will be used as the splash screen's image to
- \a pixmap.
-*/
-void QtxSplash::setPixmap( const QPixmap& pixmap )
-{
- myPixmap = pixmap;
- QRect r( 0, 0, myPixmap.size().width(), myPixmap.size().height() );
- resize( myPixmap.size() );
- move( QApplication::desktop()->screenGeometry().center() - r.center() );
- repaint();
-}
-
-/*!
- Returns the pixmap that is used in the splash screen.
-*/
-QPixmap QtxSplash::pixmap() const
-{
- return myPixmap;
-}
-
-/*!
- Sets/clear the 'hide on mouse click' flag.
- Default is FALSE.
- When this flag is set, user can hide the splash screen window
- by clicking on it with mouse.
- But for this to work it is necessary to call periodically
- QApplication::processEvents() in order to allow event loop to process
- events because usually main application loop is not yet started
- at that moment.
-*/
-void QtxSplash::setHideOnClick( const bool on )
-{
- myHideOnClick = on;
-}
-
-/*!
- Returns the 'hide on mouse click' flag.
-*/
-bool QtxSplash::hideOnClick() const
-{
- return myHideOnClick;
-}
-
-/*!
- Sets total progress steps to \a total.
-*/
-void QtxSplash::setTotalSteps( const int total )
-{
- myTotal = total;
- repaint();
-}
-
-/*!
- Return total progress steps number.
- \sa setTotalSteps(), setProgress()
-*/
-int QtxSplash::totalSteps() const
-{
- return myTotal;
-}
-
-/*!
- Sets progress to \a progress.
-*/
-void QtxSplash::setProgress( const int progress )
-{
- myProgress = progress;
- repaint();
-}
-
-/*!
- Return current progress.
- \sa setProgress(), setTotalSteps()
-*/
-int QtxSplash::progress() const
-{
- return myProgress;
-}
-
-/*!
- Sets progress to \a progress and total progress steps to \a total.
-*/
-void QtxSplash::setProgress( const int progress, const int total )
-{
- myTotal = total;
- myProgress = progress;
- repaint();
-}
-
-/*!
- Sets progress bar colors to \a startColor and \a endColor.
- If the colors differ the gradient color bar is drawed.
- If the \a endColor is not valid, \a startColor is used instead.
- \a gradientType sets the type of gradient to be used for progress
- bar - horizontal or vertical. Default is vertical.
-*/
-void QtxSplash::setProgressColors( const QColor& startColor,
- const QColor& endColor,
- const int gradientType )
-{
- myStartColor = startColor;
- myEndColor = endColor;
- myGradientType = gradientType;
- repaint();
-}
-
-/*!
- Return progress colors and gradient type (horizontal or vertical).
- \sa setProgressColors()
-*/
-int QtxSplash::progressColors( QColor& startColor, QColor& endColor )
-{
- startColor = myStartColor;
- endColor = myEndColor;
- return myGradientType;
-}
-
-/*!
- Sets message text alignment flags to \a alignment.
- Default is AlignBottom | AlignRight.
-*/
-void QtxSplash::setTextAlignment( const int alignment )
-{
- myAlignment = alignment;
- repaint();
-}
-
-/*!
- Return message text alignment flags.
- \sa setTextAlignment()
-*/
-int QtxSplash::textAlignment() const
-{
- return myAlignment;
-}
-
-/*!
- Sets message text color to \a color.
- Default is white.
- \sa setTextColors()
-*/
-void QtxSplash::setTextColor( const QColor& color )
-{
- myColor = color;
- myShadowColor = QColor();
- repaint();
-}
-
-/*!
- Return message text color.
- \sa setTextColor()
-*/
-QColor QtxSplash::textColor() const
-{
- return myColor;
-}
-
-/*!
- Sets message text color to \a color and text shadow color to \a shadow.
- \sa setTextColor()
-*/
-void QtxSplash::setTextColors( const QColor& color, const QColor& shadow )
-{
- myColor = color;
- myShadowColor = shadow;
- repaint();
-}
-
-/*!
- Return message text color and text shadow color.
- \sa setTextColors()
-*/
-void QtxSplash::textColors( QColor& color, QColor& shadow ) const
-{
- color = myColor;
- shadow = myShadowColor;
-}
-
-/*!
- Returns current status message.
-*/
-QString QtxSplash::message() const
-{
- return myMessage;
-}
-
-/*!
- Return error code. If no errors were occured returns 0.
- Error code can be set by error( QString&, QString, int ).
-*/
-int QtxSplash::error() const
-{
- return myError;
-}
-
-/*!
- Makes the splash screen wait until the widget \a mainWin is displayed
- before calling close() on itself.
-*/
-void QtxSplash::finish( QWidget* mainWin )
-{
- if ( mainWin ) {
-#if defined(Q_WS_X11)
- extern void qt_wait_for_window_manager( QWidget* w );
- qt_wait_for_window_manager( mainWin );
-#endif
- }
- close();
-}
-
-/*!
- Repaint the splash screen.
-*/
-void QtxSplash::repaint()
-{
- drawContents();
- QWidget::repaint();
- QApplication::flush();
-}
-
-/*!
- Draws the \a message text onto the splash screen with color \a
- color and aligns the text according to the flags in \a alignment.
-*/
-void QtxSplash::message( const QString& msg,
- int alignment,
- const QColor& color )
-{
- myMessage = msg;
- myAlignment = alignment;
- myColor = color;
- repaint();
-}
-
-/*!
- This is an overloaded member function, provided for convenience.
- It behaves essentially like the above function.
- Draws the \a message text onto the splash screen with default color
- and aligns the text according to the default alignment flags.
-*/
-void QtxSplash::message( const QString& msg )
-{
- myMessage = msg;
- repaint();
-}
-
-/*!
- Removes the message being displayed on the splash screen.
- \sa message()
-*/
-void QtxSplash::clear()
-{
- myMessage = QString::null;
- repaint();
-}
-
-/*!
- Draw the contents of the splash screen using painter \a painter.
-*/
-void QtxSplash::drawContents( QPainter* painter )
-{
- QRect r = rect();
- if ( myTotal > 0 ) {
- // draw progress bar outline rectangle
- painter->setPen( palette().active().dark() );
- painter->drawLine( r.x()+5,
- r.height()-5-_PROGRESS_WIDTH,
- r.width()-5,
- r.height()-5-_PROGRESS_WIDTH );
- painter->drawLine( r.x()+5,
- r.height()-5-_PROGRESS_WIDTH,
- r.x()+5,
- r.height()-5 );
- painter->setPen( palette().active().light() );
- painter->drawLine( r.x()+5,
- r.height()-5,
- r.width()-5,
- r.height()-5 );
- painter->drawLine( r.width()-5,
- r.height()-5-_PROGRESS_WIDTH,
- r.width()-5,
- r.height()-5 );
- // draw progress bar
- if ( myGradientType == Horizontal ) {
- int tng = r.width() - r.x() - 11;
- int ng = (int) ( 1.0 * tng * ( myProgress > 0 ? myProgress : 0 ) / myTotal );
- int h1, h2, s1, s2, v1, v2;
- myStartColor.hsv( &h1, &s1, &v1 );
- myEndColor.isValid() ? myEndColor.hsv( &h2, &s2, &v2 ) :
- myStartColor.hsv( &h2, &s2, &v2 );
- for ( int i = 0; i < ng; i++ ) {
- painter->setPen( QColor( h1 + ((h2-h1)*i)/(tng-1),
- s1 + ((s2-s1)*i)/(tng-1),
- v1 + ((v2-v1)*i)/(tng-1),
- QColor::Hsv ) );
- painter->drawLine( r.x()+6+i,
- r.height()-5-_PROGRESS_WIDTH+1,
- r.x()+6+i,
- r.height()-6 );
- }
- }
- else {
- int ng = (int) ( 1.0 * (r.width() - r.x() - 11) * ( myProgress > 0 ? myProgress : 0 ) / myTotal );
- int h1, h2, s1, s2, v1, v2;
- myStartColor.hsv( &h1, &s1, &v1 );
- myEndColor.isValid() ? myEndColor.hsv( &h2, &s2, &v2 ) :
- myStartColor.hsv( &h2, &s2, &v2 );
- for ( int i = 0; i < _PROGRESS_WIDTH-1; i++ ) {
- painter->setPen( QColor( h1 + ((h2-h1)*i)/(_PROGRESS_WIDTH-2),
- s1 + ((s2-s1)*i)/(_PROGRESS_WIDTH-2),
- v1 + ((v2-v1)*i)/(_PROGRESS_WIDTH-2),
- QColor::Hsv ) );
- painter->drawLine( r.x()+6,
- r.height()-5-_PROGRESS_WIDTH+1+i,
- r.x()+6+ng-1,
- r.height()-5-_PROGRESS_WIDTH+1+i );
- }
- }
- }
- // draw status
- if ( !myMessage.isEmpty() ) {
- QFontMetrics f( font() );
- int spacing = f.lineSpacing();
- int shift = myTotal > 0 ? _PROGRESS_WIDTH : _PROGRESS_WIDTH; // : 0
- int i = myMessage.length() - 1;
- while( i >= 0 && myMessage[ i-- ] == '\n' )
- shift += spacing;
- QRect r1( r.x() + 5, r.y() + 5, r.width() - 10, r.height() - 10 - shift );
- QRect r2 = r1;
- if ( myAlignment & Qt::AlignLeft ) r2.setLeft ( r2.left() + 1 );
- if ( myAlignment & Qt::AlignTop ) r2.setTop ( r2.top() + 1 );
- if ( myAlignment & Qt::AlignRight ) r2.setRight ( r2.right() + 1 );
- if ( myAlignment & Qt::AlignBottom ) r2.setBottom( r2.bottom() + 1 );
- if ( myShadowColor.isValid() ) {
- painter->setPen( myShadowColor );
- painter->drawText( r2, myAlignment, myMessage );
- }
- painter->setPen( myColor );
- painter->drawText( r1, myAlignment, myMessage );
- }
-}
-
-/*!
- Mouse press event.
- Hides splash screen if the 'hide on mouse click' flag is set.
- \sa setHideOnClick()
-*/
-void QtxSplash::mousePressEvent( QMouseEvent* )
-{
- if ( myHideOnClick )
- hide();
-}
-
-/*!
- Processes custom event sent by setStatus() method.
- \sa setStatus().
-*/
-void QtxSplash::customEvent( QCustomEvent* ce )
-{
- if ( ce->type() == ProgressEvent::id() ) {
- ProgressEvent* pe = (ProgressEvent*)ce;
- pe->message().isEmpty() ? clear() : message( pe->message() );
- setProgress( pe->progress() );
- qApp->processEvents();
- }
-}
-
-/*!
- Draws the splash screen window [ internal ].
-*/
-void QtxSplash::drawContents()
-{
- QPixmap textPix = myPixmap;
- QPainter painter( &textPix, this );
- drawContents( &painter );
- setErasePixmap( textPix );
-}
-
-/*!
- Sets error code [ internal ].
-*/
-void QtxSplash::setError( const int code )
-{
- myError = code;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxSplash.h
-// Author: Vadim SANDLER
-
-#ifndef QTXSPLASH_H
-#define QTXSPLASH_H
-
-#include "Qtx.h"
-
-#include <qpixmap.h>
-#include <qwidget.h>
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-class QTX_EXPORT QtxSplash : public QWidget
-{
- Q_OBJECT
-
-private:
- QtxSplash( const QPixmap& = QPixmap() );
-
-public:
- enum { Horizontal, Vertical };
-
- virtual ~QtxSplash();
-
- static QtxSplash* splash( const QPixmap& = QPixmap() );
- static void setStatus( const QString&, const int = 0 );
- static void error( const QString&, const QString& = QString::null, const int = -1 );
-
- void setPixmap( const QPixmap& );
- QPixmap pixmap() const;
-
- void setHideOnClick( const bool );
- bool hideOnClick() const;
-
- void setTotalSteps( const int );
- int totalSteps() const;
- void setProgress( const int );
- int progress() const;
- void setProgress( const int, const int );
- void setProgressColors( const QColor&,
- const QColor& = QColor(),
- const int = Vertical );
- int progressColors( QColor&, QColor& );
-
- void setTextAlignment( const int );
- int textAlignment() const;
-
- void setTextColor( const QColor& );
- QColor textColor() const;
- void setTextColors( const QColor&, const QColor& = QColor() );
- void textColors( QColor&, QColor& ) const;
-
- QString message() const;
-
- int error() const;
-
- void finish( QWidget* );
- void repaint();
-
-public slots:
- void message( const QString&,
- const int,
- const QColor& = white );
- void message( const QString& );
- void clear();
-
-protected:
- virtual void mousePressEvent( QMouseEvent* );
- virtual void customEvent( QCustomEvent* );
- virtual void drawContents( QPainter* );
-
-private:
- void drawContents();
- void setError( const int );
-
-private:
- static QtxSplash* mySplash;
-
- QPixmap myPixmap;
- QString myMessage;
- int myAlignment;
- QColor myColor;
- QColor myShadowColor;
- bool myHideOnClick;
- int myProgress;
- int myTotal;
- QColor myStartColor;
- QColor myEndColor;
- int myGradientType;
- int myError;
-};
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#include "QtxStdOperations.h"
-
-#include <math.h>
-#include <stdlib.h>
-
-/*!
- Default constructor
-*/
-QtxStdOperations::QtxStdOperations()
-{
-}
-
-/*!
- Destructor
-*/
-QtxStdOperations::~QtxStdOperations()
-{
-}
-
-/*!
- Fills list of brackets treated as open (when 'open' is 'true') or close ('open' is 'false')
-*/
-void QtxStdOperations::bracketsList( QStringList& list, bool open ) const
-{
- if( open )
- list.append( "(" );
- else
- list.append( ")" );
-}
-
-/*!
- Fills list with operation names by copying of internal list of operations
-*/
-void QtxStdOperations::opersList( QStringList& list ) const
-{
- list += myOpers;
-}
-
-/*!
- Add operation names from list to internal list of operations
-*/
-void QtxStdOperations::addOperations( const QStringList& list )
-{
- QStringList::const_iterator anIt = list.begin(),
- aLast = list.end();
- for( ; anIt!=aLast; anIt++ )
- if( myOpers.contains( *anIt )==0 )
- myOpers.append( *anIt );
-}
-
-/*!
- Append operation names from 'list' to internal list of operations
-*/
-void QtxStdOperations::addTypes( const ListOfTypes& list )
-{
- ListOfTypes::const_iterator anIt = list.begin(),
- aLast = list.end();
- for( ; anIt!=aLast; anIt++ )
- if( myTypes.contains( *anIt )==0 )
- myTypes.append( *anIt );
-}
-
-/*!
- \return whether values with passed types are valid for arguments of operation
- \param op - name of operation
- \param t1 - type of first argument
- \param t2 - type of second argument
-*/
-QtxParser::Error QtxStdOperations::isValid( const QString& op,
- const QVariant::Type t1,
- const QVariant::Type t2 ) const
-{
- if( ( t1==QVariant::Invalid || myTypes.contains( t1 ) ) &&
- ( t2==QVariant::Invalid || myTypes.contains( t2 ) ) &&
- ( t1!=QVariant::Invalid || t2!=QVariant::Invalid ) )
- if( prior( op, t1!=QVariant::Invalid && t2!=QVariant::Invalid ) > 0 )
- return QtxParser::OK;
- else
- return QtxParser::InvalidOperation;
- else
- return QtxParser::OperandsNotMatch;
-}
-
-
-
-
-
-
-
-
-/*!
- Default constructor
-*/
-QtxArithmetics::QtxArithmetics()
-: QtxStdOperations()
-{
- QStringList aList;
- aList.append( "+" );
- aList.append( "-" );
- aList.append( "*" );
- aList.append( "/" );
- aList.append( "=" );
- aList.append( "<" );
- aList.append( ">" );
- aList.append( "<=" );
- aList.append( ">=" );
- aList.append( "<>" );
- aList.append( "!=" ); // same as "<>" - for C++ addicts
- addOperations( aList );
-
- ListOfTypes aTypes;
- aTypes.append( QVariant::Int );
- aTypes.append( QVariant::UInt );
- aTypes.append( QVariant::Double );
- addTypes( aTypes );
-}
-
-/*!
- Destructor
-*/
-QtxArithmetics::~QtxArithmetics()
-{
-}
-
-/*!
- Creates numbers by it's string representation [redefined virtual]
-*/
-bool QtxArithmetics::createValue( const QString& str, QtxValue& v ) const
-{
- bool ok = false;
- v = str.toInt( &ok );
-
- if( !ok )
- {
- v = str.toDouble( &ok );
- if( !ok )
- ok = QtxStdOperations::createValue( str, v );
- }
- return ok;
-}
-
-/*!
- \return priority of arithmetic operation 'op'.
- \param isBin indicate whether the operation is binary
-*/
-int QtxArithmetics::prior( const QString& op, bool isBin ) const
-{
- if( isBin )
- if( op=="<" || op==">" || op=="=" ||
- op=="<=" || op==">=" || op=="<>" || op=="!=" )
- return 1;
- else if( op=="+" || op=="-" )
- return 2;
- else if( op=="*" || op=="/" )
- return 3;
- else
- return 0;
- else if( op=="+" || op=="-" )
- return 5;
- else
- return 0;
-}
-
-void set( QVariant& v1, bool v2 )
-{
- v1 = QVariant( v2, 0 );
-}
-
-/*!
- Calculates result of operation
- \return one of error states
- \param op - name of operation
- \param v1 - first operation argument (must be used also to store result)
- \param v2 - second operation argument
-*/
-QtxParser::Error QtxArithmetics::calculate( const QString& op,
- QtxValue& v1, QtxValue& v2 ) const
-{
- QtxParser::Error err = QtxParser::OK;
-
- if( v1.isValid() && v2.isValid() )
- // binary operations
- if( ( v1.type()==QVariant::Int || v1.type()==QVariant::UInt ) &&
- ( v2.type()==QVariant::Int || v2.type()==QVariant::UInt ) )
- {
- int _v1 = v1.toInt(),
- _v2 = v2.toInt();
-
- if( op=="+" )
- v1 = _v1 + _v2;
- else if( op=="-" )
- v1 = _v1 - _v2;
- else if( op=="*" )
- v1 = _v1 * _v2;
- else if( op=="/" )
- if( _v2!=0 )
- if( _v1%_v2==0 )
- v1 = _v1 / _v2;
- else
- v1 = double( _v1 ) / double( _v2 );
- else
- err = QtxParser::InvalidResult;
- else if( op=="<" )
- set( v1, _v1<_v2 );
- else if( op==">" )
- set( v1, _v1>_v2 );
- else if( op=="=" )
- set( v1, _v1==_v2 );
- else if( op=="<=" )
- set( v1, _v1<=_v2 );
- else if( op==">=" )
- set( v1, _v1>=_v2 );
- else if( op=="<>" || op=="!=" )
- set( v1, _v1!=_v2 );
- }
- else if( ( v1.type()==QVariant::Int || v1.type()==QVariant::Double ) &&
- ( v2.type()==QVariant::Int || v2.type()==QVariant::Double ) )
- {
- double _v1 = v1.toDouble(),
- _v2 = v2.toDouble();
-
- if( op=="+" )
- v1 = _v1 + _v2;
- else if( op=="-" )
- v1 = _v1 - _v2;
- else if( op=="*" )
- v1 = _v1 * _v2;
- else if( op=="/" )
- if( _v2!=0 )
- v1 = _v1 / _v2;
- else
- err = QtxParser::InvalidResult;
- else if( op=="<" )
- set( v1, _v1<_v2 );
- else if( op==">" )
- set( v1, _v1>_v2 );
- else if( op=="=" )
- set( v1, _v1==_v2 );
- else if( op=="<=" )
- set( v1, _v1<=_v2 );
- else if( op==">=" )
- set( v1, _v1>=_v2 );
- else if( op=="<>" || op=="!=" )
- set( v1, _v1!=_v2 );
- }
- else
- // prefix operations
- if( op=="-" )
- if( v2.type()==QVariant::Int )
- v2 = -v2.toInt();
- else if( v2.type()==QVariant::Double )
- v2 = -v2.toDouble();
-
- return err;
-}
-
-
-
-
-
-
-
-
-
-
-
-/*!
- Default constructor
-*/
-QtxLogic::QtxLogic()
-: QtxStdOperations()
-{
- QStringList aList;
- aList.append( "and" );
- aList.append( "&&" );
- aList.append( "or" );
- aList.append( "||" );
- aList.append( "xor" );
- aList.append( "not" );
- aList.append( "!" );
- aList.append( "imp" );
- aList.append( "=" );
- addOperations( aList );
-
- ListOfTypes aTypes;
- aTypes.append( QVariant::Bool );
- aTypes.append( QVariant::Int );
- aTypes.append( QVariant::UInt );
- addTypes( aTypes );
-}
-
-/*!
- Destructor
-*/
-QtxLogic::~QtxLogic()
-{
-}
-
-/*!
- Creates value 'true' or 'false' it's string representation [redefined virtual]
-*/
-bool QtxLogic::createValue( const QString& str, QtxValue& v ) const
-{
- bool ok = true;
- if( str.lower()=="true" )
- v = QtxValue( true, 0 );
- else if( str.lower()=="false" )
- v = QtxValue( false, 0 );
- else
- ok = QtxStdOperations::createValue( str, v );
-
- return ok;
-}
-
-/*!
- \return priority of arithmetic operation 'op'.
- \param isBin indicate whether the operation is binary
-*/
-int QtxLogic::prior( const QString& op, bool isBin ) const
-{
- if( isBin )
- if( op=="and" || op=="or" || op=="xor" ||
- op=="&&" || op=="||" ||
- op=="imp" )
- return 1;
- else if( op=="=" )
- return 2;
- else
- return 0;
- else if( op=="not" || op=="!" )
- return 5;
- else
- return 0;
-}
-
-bool boolean_value( const QtxValue& v )
-{
- if( v.type()==QVariant::Bool )
- return v.toBool();
- else if( v.type()==QVariant::Int )
- return v.toInt()!=0;
- else if( v.type()==QVariant::UInt )
- return v.toUInt()!=0;
- else
- return false;
-}
-
-/*!
- Calculates result of operation
- \return one of error states
- \param op - name of operation
- \param v1 - first operation argument (must be used also to store result)
- \param v2 - second operation argument
-*/
-QtxParser::Error QtxLogic::calculate( const QString& op,
- QtxValue& v1, QtxValue& v2 ) const
-{
- QtxParser::Error err = QtxParser::OK;
- bool val1 = boolean_value( v1 ),
- val2 = boolean_value( v2 );
- if( v1.isValid() && v2.isValid() )
- {
- if( op=="and" || op=="&&" )
- set( v1, val1 && val2 );
- else if( op=="or" || op=="||" )
- set( v1, val1 || val2 );
- else if( op=="xor" )
- set( v1, ( !val1 && val2 ) || ( val1 && !val2 ) );
- else if( op=="imp" )
- set( v1, !val1 || val2 );
- else if( op=="=" )
- set( v1, val1==val2 );
- }
- else
- if( op=="not" || op=="!" )
- set( v2, !val2 );
-
- return err;
-}
-
-
-
-
-
-
-/*!
- Default constructor
-*/
-QtxFunctions::QtxFunctions()
-: QtxStdOperations()
-{
- QStringList aList;
- aList.append( "sqrt" );
- aList.append( "abs" );
- aList.append( "sin" );
- aList.append( "cos" );
- aList.append( "rad2grad" );
- aList.append( "grad2rad" );
- addOperations( aList );
-
- ListOfTypes aTypes;
- aTypes.append( QVariant::Int );
- aTypes.append( QVariant::Double );
- addTypes( aTypes );
-}
-
-/*!
- Destructor
-*/
-QtxFunctions::~QtxFunctions()
-{
-}
-
-/*!
- Creates numbers by it's string representation [redefined virtual]
-*/
-bool QtxFunctions::createValue( const QString& str, QtxValue& v ) const
-{
- bool ok = false;
- v = str.toInt( &ok );
-
- if( !ok )
- {
- v = str.toDouble( &ok );
- if( !ok )
- ok = QtxStdOperations::createValue( str, v );
- }
- return ok;
-}
-
-/*!
- \return priority of arithmetic operation 'op'.
- \param isBin indicate whether the operation is binary
-*/
-int QtxFunctions::prior( const QString& op, bool isBin ) const
-{
- if( isBin )
- return 0;
- else if( op=="sqrt" || op=="abs" || op=="sin" || op=="cos" ||
- op=="rad2grad" || op=="grad2rad" )
- return 1;
- else
- return 0;
-}
-
-/*!
- Calculates result of operation
- \return one of error states
- \param op - name of operation
- \param v1 - first operation argument (must be used also to store result)
- \param v2 - second operation argument
-*/
-QtxParser::Error QtxFunctions::calculate( const QString& op,
- QtxValue& v1, QtxValue& v2 ) const
-{
- QtxParser::Error err = QtxParser::OK;
- double val = v2.toDouble();
- if( op=="sqrt" )
- if( val>=0 )
- v2 = sqrt( val );
- else
- err = QtxParser::InvalidResult;
- else if( op=="abs" )
- if( v2.type()==QVariant::Int )
- v2 = abs( v2.toInt() );
- else
- v2 = fabs( v2.toDouble() );
- else if( op=="sin" )
- v2 = sin( val );
- else if( op=="cos" )
- v2 = cos( val );
- else if( op=="grad2rad" )
- v2 = val * 3.14159256 / 180.0;
- else if( op=="rad2grad" )
- v2 = val * 180.0 / 3.14159256;
-
- return err;
-}
-
-
-
-
-
-
-
-
-/*!
- Default constructor
-*/
-QtxStrings::QtxStrings()
-: QtxStdOperations()
-{
- QStringList aList;
- aList.append( "+" );
- aList.append( "=" );
- aList.append( "<" );
- aList.append( ">" );
- aList.append( "<=" );
- aList.append( ">=" );
- aList.append( "<>" );
- aList.append( "!=" ); // same as "<>" - for C++ addicts
- aList.append( "length" );
- aList.append( "lower" );
- aList.append( "upper" );
- addOperations( aList );
-
- ListOfTypes aTypes;
- aTypes.append( QVariant::Int );
- aTypes.append( QVariant::Double );
- aTypes.append( QVariant::String );
- aTypes.append( QVariant::CString );
- addTypes( aTypes );
-}
-
-
-/*!
- Destructor
-*/
-QtxStrings::~QtxStrings()
-{
-}
-
-/*!
- Creates string QtxValue by it's Qt string representation [redefined virtual]
-*/
-bool QtxStrings::createValue( const QString& str, QtxValue& v ) const
-{
- QChar st = str[0],
- fin = str[ ( int )( str.length()-1 ) ];
- if( st=="'" && fin=="'" )
- {
- v = str.mid( 1, str.length()-2 );
- return true;
- }
- else
- return QtxStdOperations::createValue( str, v );
-}
-
-/*!
- \return priority of arithmetic operation 'op'.
- \param isBin indicate whether the operation is binary
-*/
-int QtxStrings::prior( const QString& op, bool isBin ) const
-{
- if( isBin )
- if( op=="+" )
- return 2;
- else if( op=="=" || op=="<" || op==">" ||
- op=="<=" || op==">=" || op=="<>" || op=="!=" )
- return 1;
- else
- return 0;
- else
- if( op=="length" || op=="lower" || op=="upper" )
- return 5;
- else
- return 0;
-}
-
-/*!
- Calculates result of operation
- \return one of error states
- \param op - name of operation
- \param v1 - first operation argument (must be used also to store result)
- \param v2 - second operation argument
-*/
-QtxParser::Error QtxStrings::calculate( const QString& op,
- QtxValue& v1, QtxValue& v2 ) const
-{
- QtxParser::Error err = QtxParser::OK;
- if( v1.isValid() && v2.isValid() )
- {
- QString _v1 = v1.toString(),
- _v2 = v2.toString();
- if( op=="+" )
- v1 = _v1 + _v2;
- else if( op=="=" )
- set( v1, _v1==_v2 );
- else if( op=="<" )
- set( v1, _v1<_v2 );
- else if( op==">" )
- set( v1, _v1>_v2 );
- else if( op=="<>" || op=="!=" )
- set( v1, _v1!=_v2 );
- else if( op=="<=" )
- set( v1, _v1<_v2 || _v1==_v2 );
- else if( op==">=" )
- set( v1, _v1>_v2 || _v1==_v2 );
- }
- else if( !v1.isValid() && v2.isValid() )
- {
- QString val = v2.toString();
- if( op=="length" )
- v2 = ( int )val.length();
- else if( op=="lower" )
- v2 = val.lower();
- else if( op=="upper" )
- v2 = val.upper();
- }
-
- return err;
-}
-
-
-
-
-
-
-/*!
- Default constructor
-*/
-QtxSets::QtxSets()
-{
- QStringList aList;
- aList.append( "{" );
- aList.append( "}" );
- aList.append( "=" );
- aList.append( "<>" );
- aList.append( "!=" ); // same as "<>" - for C++ addicts
- aList.append( "+" );
- aList.append( "-" );
- aList.append( "*" );
- aList.append( "in" );
- aList.append( "count" );
- addOperations( aList );
-
- ListOfTypes aTypes;
- aTypes.append( QVariant::List );
- addTypes( aTypes );
-}
-
-/*!
- Destructor
-*/
-QtxSets::~QtxSets()
-{
-}
-
-/*!
- Fills list of brackets treated as open (when 'open' is 'true') or close ('open' is 'false')
-*/
-void QtxSets::bracketsList( QStringList& list, bool open ) const
-{
- if( open )
- list.append( "{" );
- else
- list.append( "}" );
- QtxStdOperations::bracketsList( list, open );
-}
-
-/*!
- Creates set of QtxValues by their string representation [redefined virtual]
-*/
-bool QtxSets::createValue( const QString& str, QtxValue& val ) const
-{
- return QtxStdOperations::createValue( str, val );
-}
-
-/*!
- \return priority of arithmetic operation 'op'.
- \param isBin indicate whether the operation is binary
-*/
-int QtxSets::prior( const QString& op, bool isBin ) const
-{
- if( isBin )
- if( op=="=" || op=="<>" || op=="!=" )
- return 1;
- else if( op=="+" || op=="-" || op=="*" )
- return 2;
- else if( op=="in" )
- return 3;
- else
- return 0;
-
- else
- if( op=="{" || op=="}" )
- return 5;
- else if( op=="count" )
- return 4;
- else
- return 0;
-}
-
-/*!
- \return whether values with passed types are valid for arguments of operation
- \param op - name of operation
- \param t1 - type of first argument
- \param t2 - type of second argument
-*/
-QtxParser::Error QtxSets::isValid( const QString& op,
- const QVariant::Type t1,
- const QVariant::Type t2 ) const
-{
- if( op=="{" )
- return QtxParser::OK;
- else if( op=="in" )
- if( t1!=QVariant::Invalid && t2==QVariant::List )
- return QtxParser::OK;
- else
- return QtxParser::OperandsNotMatch;
- else
- return QtxStdOperations::isValid( op, t1, t2 );
-}
-
-/*!
- Adds new value 'v' to set 'set' [static]
-*/
-void QtxSets::add( ValueSet& set, const QtxValue& v )
-{
- if( v.isValid() && set.contains( v )==0 )
- set.append( v );
-}
-
-/*!
- Adds values from set 's2' to set 's1'
-*/
-void QtxSets::add( ValueSet& s1, const ValueSet& s2 )
-{
- ValueSet::const_iterator anIt = s2.begin(),
- aLast = s2.end();
- for( ; anIt!=aLast; anIt++ )
- add( s1, *anIt );
-}
-
-/*!
- Removes value 'v' from set 'set'
-*/
-void QtxSets::remove( ValueSet& set, const QtxValue& v )
-{
- set.remove( v );
-}
-
-/*!
- Removes values of set 's2' from set 's1'
-*/
-void QtxSets::remove( ValueSet& s1, const ValueSet& s2 )
-{
- ValueSet::const_iterator anIt = s2.begin(),
- aLast = s2.end();
- for( ; anIt!=aLast; anIt++ )
- s1.remove( *anIt );
-}
-
-/*!
- Calculates result of operation
- \return one of error states
- \param op - name of operation
- \param v1 - first operation argument (must be used also to store result)
- \param v2 - second operation argument
-*/
-QtxParser::Error QtxSets::calculate( const QString& op, QtxValue& v1, QtxValue& v2 ) const
-{
- QtxParser::Error err = QtxParser::OK;
-
- if( op!="{" )
- if( op=="}" )
- {
- ValueSet aNewList;
- add( aNewList, v1.toList() );
- v1 = aNewList;
- }
-
- else if( op=="=" || op=="<>" || op=="!=" || op=="+" || op=="-" || op=="*" )
- {
- ValueSet aNewList;
- add( aNewList, v1.toList() );
-
- if( op=="=" || op=="<>" || op=="!=" || op=="-" )
- {
- remove( aNewList, v2.toList() );
-
- if( op=="=" )
- set( v1, aNewList.isEmpty() && v1.toList().count()==v2.toList().count() );
- else if( op=="<>" || op=="!=" )
- set( v1, !aNewList.isEmpty() || v1.toList().count()!=v2.toList().count() );
- else
- v1 = aNewList;
- }
- else if( op=="+" )
- {
- add( aNewList, v2.toList() );
- v1 = aNewList;
- }
- else if( op=="*" )
- {
- ValueSet toDelete;
- add( toDelete, aNewList );
- remove( toDelete, v2.toList() );
- remove( aNewList, toDelete );
- v1 = aNewList;
- }
- }
- else if( op=="count" )
- v2 = ( int )v2.toList().count();
- else if( op=="in" )
- {
- if( v1.type()==QVariant::List )
- {
- bool res = true;
- ValueSet::const_iterator anIt = v1.toList().begin(),
- aLast = v1.toList().end();
- for( ; anIt!=aLast && res; anIt++ )
- res = v2.toList().contains( *anIt )>0;
-
- set( v1, res );
- }
- else
- {
- const QValueList< QVariant >& list = v2.toList();
- v1 = ( bool )( list.find( v1 )!=list.end() );
- }
- }
-
- return err;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxStdOperations.h
-// Author: Alexander SOLOVYOV
-
-#ifndef __QTX_STD_OPERATIONS_HEADER__
-#define __QTX_STD_OPERATIONS_HEADER__
-
-#include "Qtx.h"
-#include "QtxOperations.h"
-
-/*!
- \class QtxStdOperations
- Provides simplified interface for standard operations.
- Conatins list of operation names, priority and possible types
-*/
-class QTX_EXPORT QtxStdOperations : public QtxOperations
-{
-public:
- QtxStdOperations();
- virtual ~QtxStdOperations();
-
- virtual void opersList( QStringList& ) const;
- virtual void bracketsList( QStringList&, bool open ) const;
-
- virtual QtxParser::Error isValid( const QString&,
- const QVariant::Type,
- const QVariant::Type ) const;
-protected:
- typedef QValueList< QVariant::Type > ListOfTypes;
-
- void addOperations( const QStringList& );
- void addTypes( const ListOfTypes& );
-
-private:
- QStringList myOpers;
- ListOfTypes myTypes;
-};
-
-/*!
- \class QtxArithmetics
- Provides set of arithmetic operations for parser
-*/
-class QTX_EXPORT QtxArithmetics : public QtxStdOperations
-{
-public:
- QtxArithmetics();
- virtual ~QtxArithmetics();
-
- virtual bool createValue( const QString&, QtxValue& ) const;
- virtual int prior( const QString&, bool isBin ) const;
- virtual QtxParser::Error calculate( const QString&, QtxValue&, QtxValue& ) const;
-};
-
-/*!
- \class QtxLogic
- Provides set of logic operations for parser
-*/
-class QTX_EXPORT QtxLogic : public QtxStdOperations
-{
-public:
- QtxLogic();
- virtual ~QtxLogic();
-
- virtual bool createValue( const QString&, QtxValue& ) const;
- virtual int prior( const QString&, bool isBin ) const;
- virtual QtxParser::Error calculate( const QString&, QtxValue&, QtxValue& ) const;
-};
-
-/*!
- \class QtxFunctions
- Provides set of more complex operations for parser (sqrt, sin, cos, etc)
-*/
-class QTX_EXPORT QtxFunctions : public QtxStdOperations
-{
-public:
- QtxFunctions();
- virtual ~QtxFunctions();
-
- virtual bool createValue( const QString&, QtxValue& ) const;
- virtual int prior( const QString&, bool isBin ) const;
- virtual QtxParser::Error calculate( const QString&, QtxValue&, QtxValue& ) const;
-};
-
-/*!
- \class QtxStrings
- Provides set of string operations for parser
-*/
-class QTX_EXPORT QtxStrings : public QtxStdOperations
-{
-public:
- QtxStrings();
- virtual ~QtxStrings();
-
- virtual bool createValue( const QString&, QtxValue& ) const;
- virtual int prior( const QString&, bool isBin ) const;
- virtual QtxParser::Error calculate( const QString&, QtxValue&, QtxValue& ) const;
-};
-
-/*!
- \class QtxSets
- Provides set of operations with sets for parser
-*/
-class QTX_EXPORT QtxSets : public QtxStdOperations
-{
-public:
- typedef QValueList< QtxValue > ValueSet;
-
-public:
- QtxSets();
- virtual ~QtxSets();
-
- virtual void bracketsList( QStringList&, bool open ) const;
- virtual bool createValue( const QString&, QtxValue& ) const;
- virtual int prior( const QString&, bool isBin ) const;
- virtual QtxParser::Error isValid( const QString&,
- const QVariant::Type,
- const QVariant::Type ) const;
- virtual QtxParser::Error calculate( const QString&, QtxValue&, QtxValue& ) const;
-
- static void add( ValueSet&, const QtxValue& );
- static void add( ValueSet&, const ValueSet& );
- static void remove( ValueSet&, const QtxValue& );
- static void remove( ValueSet&, const ValueSet& );
-};
-
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxTable.cxx
-// Author: Sergey TELKOV
-
-#include "QtxTable.h"
-
-#ifndef QT_NO_TABLE
-
-#include <qlineedit.h>
-
-/*!
- Constructor
-*/
-QtxTable::QtxTable( QWidget* parent, const char* name )
-: QTable( parent, name ),
-myHeaderEditor( 0 ),
-myEditedHeader( 0 ),
-myEditedSection( -1 )
-{
- connect( verticalHeader(), SIGNAL( sizeChange( int, int, int ) ),
- this, SLOT( onHeaderSizeChange( int, int, int ) ) );
- connect( horizontalHeader(), SIGNAL( sizeChange( int, int, int ) ),
- this, SLOT( onHeaderSizeChange( int, int, int ) ) );
- connect( verticalScrollBar(), SIGNAL( valueChanged( int ) ), this, SLOT( onScrollBarMoved( int ) ) );
- connect( horizontalScrollBar(), SIGNAL( valueChanged( int ) ), this, SLOT( onScrollBarMoved( int ) ) );
-}
-
-/*!
- Constructor
-*/
-QtxTable::QtxTable( int numRows, int numCols, QWidget* parent, const char* name )
-: QTable( numRows, numCols, parent, name ),
-myHeaderEditor( 0 ),
-myEditedHeader( 0 ),
-myEditedSection( -1 )
-{
- connect( verticalHeader(), SIGNAL( sizeChange( int, int, int ) ),
- this, SLOT( onHeaderSizeChange( int, int, int ) ) );
- connect( horizontalHeader(), SIGNAL( sizeChange( int, int, int ) ),
- this, SLOT( onHeaderSizeChange( int, int, int ) ) );
- connect( verticalScrollBar(), SIGNAL( valueChanged( int ) ), this, SLOT( onScrollBarMoved( int ) ) );
- connect( horizontalScrollBar(), SIGNAL( valueChanged( int ) ), this, SLOT( onScrollBarMoved( int ) ) );
-}
-
-/*!
- Destructor
-*/
-QtxTable::~QtxTable()
-{
-}
-
-/*!
- \return true if header is editable
- \param o - header orientation
-*/
-bool QtxTable::headerEditable( Orientation o ) const
-{
- return myHeaderEditable.contains( o ) ? myHeaderEditable[o] : false;
-}
-
-/*!
- Changes editable state of header
- \param o - header orientation
- \param on - new state
-*/
-void QtxTable::setHeaderEditable( Orientation o, const bool on )
-{
- if ( headerEditable( o ) == on )
- return;
-
- myHeaderEditable.insert( o, on );
-
- QHeader* hdr = header( o );
-
- if ( !on && myEditedHeader == hdr )
- endHeaderEdit( false );
-
- if ( on )
- hdr->installEventFilter( this );
- else
- hdr->removeEventFilter( this );
-}
-
-/*!
- Starts edition of header
- \param o - header orientation
- \param sec - column/row
-*/
-bool QtxTable::editHeader( Orientation o, const int sec )
-{
- return beginHeaderEdit( o, sec );
-}
-
-/*!
- Finishes edition of header
- \param accept - whether new value must be accepted
-*/
-void QtxTable::endEditHeader( const bool accept )
-{
- endHeaderEdit( accept );
-}
-
-/*!
- Finishes edition and hides table
-*/
-void QtxTable::hide()
-{
- endHeaderEdit();
-
- QTable::hide();
-}
-
-/*!
- Custom event filter
- Starts edition of header by double click
- Finishes edition by escape/return/enter pressing
-*/
-bool QtxTable::eventFilter( QObject* o, QEvent* e )
-{
- if ( e->type() == QEvent::MouseButtonDblClick )
- {
- QMouseEvent* me = (QMouseEvent*)e;
- if ( o == horizontalHeader() )
- {
- beginHeaderEdit( Horizontal, me->pos() );
- return true;
- }
- else if ( o == verticalHeader() )
- {
- beginHeaderEdit( Vertical, me->pos() );
- return true;
- }
- }
-
- if ( o == myHeaderEditor && e->type() == QEvent::KeyPress && isHeaderEditing() )
- {
- QKeyEvent* ke = (QKeyEvent*)e;
- if ( ke->key() == Key_Escape )
- {
- endHeaderEdit( false );
- return true;
- }
-
- if ( ke->key() == Key_Return || ke->key() == Key_Enter )
- {
- endHeaderEdit( true );
- return true;
- }
-
- return false;
- }
-
- if ( o == myHeaderEditor && e->type() == QEvent::FocusOut &&
- isHeaderEditing() && ((QFocusEvent*)e)->reason() != QFocusEvent::Popup )
- {
- endHeaderEdit();
- return true;
- }
-
- if ( e->type() == QEvent::Wheel && isHeaderEditing() )
- return true;
-
- return QTable::eventFilter( o, e );
-}
-
-/*!
- SLOT: called on scroll
-*/
-void QtxTable::onScrollBarMoved( int )
-{
- updateHeaderEditor();
-}
-
-/*!
- SLOT: called on header size changing
-*/
-void QtxTable::onHeaderSizeChange( int, int, int )
-{
- if ( sender() == myEditedHeader )
- updateHeaderEditor();
-}
-
-/*!
- Custom resize event handler
-*/
-void QtxTable::resizeEvent( QResizeEvent* e )
-{
- QTable::resizeEvent( e );
-
- updateHeaderEditor();
-}
-
-/*!
- Starts edition of header
- \param o - header orientation
- \param sec - column/row
-*/
-bool QtxTable::beginHeaderEdit( Orientation o, const int section )
-{
- if ( !headerEditable( o ) || !header( o ) || !header( o )->isVisibleTo( this ) )
- return false;
-
- endHeaderEdit();
-
- QHeader* hdr = header( o );
-
- QRect r = headerSectionRect( hdr, section );
- if ( !r.isValid() )
- return false;
-
- if ( o == Horizontal )
- r.setLeft( QMAX( r.left(), leftMargin() ) );
- else
- r.setTop( QMAX( r.top(), topMargin() ) );
-
- myHeaderEditor = createHeaderEditor( hdr, section );
- if ( !myHeaderEditor )
- return false;
-
- myEditedHeader = hdr;
- myEditedSection = section;
-
- myHeaderEditor->reparent( this, QPoint( 0, 0 ), false );
-
- updateHeaderEditor();
-
- myHeaderEditor->show();
-
- myHeaderEditor->setActiveWindow();
- myHeaderEditor->setFocus();
-
- myHeaderEditor->installEventFilter( this );
-
- return true;
-}
-
-/*!
- Finishes edition of header
- \param accept - whether new value must be accepted
-*/
-void QtxTable::endHeaderEdit( const bool accept )
-{
- if ( !isHeaderEditing() )
- return;
-
- QString oldTxt = myEditedHeader ? myEditedHeader->label( myEditedSection ) : QString::null;
-
- if ( accept && myEditedHeader )
- setHeaderContentFromEditor( myEditedHeader, myEditedSection, myHeaderEditor );
-
- QString newTxt = myEditedHeader ? myEditedHeader->label( myEditedSection ) : QString::null;
-
- int sec = myEditedSection;
- QHeader* hdr = myEditedHeader;
-
- myEditedHeader = 0;
- myEditedSection = -1;
-
- myHeaderEditor->hide();
- myHeaderEditor->deleteLater();
- myHeaderEditor = 0;
-
- if ( oldTxt != newTxt )
- {
- emit headerEdited( hdr, sec );
- emit headerEdited( hdr == horizontalHeader() ? Horizontal : Vertical, sec );
- }
-}
-
-/*!
- \return true if header is being edited
-*/
-bool QtxTable::isHeaderEditing() const
-{
- return myHeaderEditor && myEditedHeader && myEditedSection != -1;
-}
-
-/*!
- Creates and \return header editor
- \param hdr - header
- \param sec - column/row
- \param init - init editor with value
-*/
-QWidget* QtxTable::createHeaderEditor( QHeader* hdr, const int sec, const bool init )
-{
- QLineEdit* ed = new QLineEdit( 0 );
-
- if ( init && hdr )
- ed->setText( hdr->label( sec ) );
-
- return ed;
-}
-
-/*!
- Initialize editor with value
- \param hdr - header
- \param sec - column/row
- \param editor - editor
-*/
-void QtxTable::setHeaderContentFromEditor( QHeader* hdr, const int sec, QWidget* editor )
-{
- if ( !hdr || !editor )
- return;
-
- if ( editor->inherits( "QLineEdit" ) )
- hdr->setLabel( sec, ((QLineEdit*)editor)->text() );
-}
-
-/*!
- \return header
- \param o - orientation
-*/
-QHeader* QtxTable::header( Orientation o ) const
-{
- return o == Horizontal ? horizontalHeader() : verticalHeader();
-}
-
-/*!
- Starts edition of header
- \param o - header orientation
- \param p - point
-*/
-void QtxTable::beginHeaderEdit( Orientation o, const QPoint& p )
-{
- QHeader* hdr = header( o );
- if ( !hdr )
- return;
-
- int pos = o == Horizontal ? p.x() : p.y();
- int sec = hdr->sectionAt( hdr->offset() + pos );
-
- beginHeaderEdit( o, sec );
-}
-
-/*!
- \return rectangle of header section
- \param hdr - header
- \param sec - column/row
-*/
-QRect QtxTable::headerSectionRect( QHeader* hdr, const int sec ) const
-{
- QRect r( -1, -1, -1, -1 );
-
- if ( !hdr )
- return r;
-
- r = hdr->sectionRect( sec );
- if ( r.isValid() )
- r = QRect( mapFromGlobal( hdr->mapToGlobal( r.topLeft() ) ), r.size() );
-
- return r;
-}
-
-/*!
- Updates header editor
-*/
-void QtxTable::updateHeaderEditor()
-{
- if ( !myHeaderEditor || !myEditedHeader || myEditedSection < 0 )
- return;
-
- QRect r = headerSectionRect( myEditedHeader, myEditedSection );
- if ( !r.isValid() )
- return;
-
- if ( myEditedHeader == horizontalHeader() )
- {
- r.setLeft( QMAX( r.left(), leftMargin() ) );
- r.setRight( QMIN( r.right(), width() - rightMargin() - 2 ) );
- }
- else
- {
- r.setTop( QMAX( r.top(), topMargin() ) );
- r.setBottom( QMIN( r.bottom(), height() - bottomMargin() - 2 ) );
- }
-
- myHeaderEditor->resize( r.size() );
- myHeaderEditor->move( r.topLeft() );
-}
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxTable.h
-// Author: Sergey TELKOV
-
-#ifndef QTX_TABLE_H
-#define QTX_TABLE_H
-
-#include "Qtx.h"
-
-#include <qtable.h>
-
-#ifndef QT_NO_TABLE
-
-class QHeader;
-
-class QTX_EXPORT QtxTable : public QTable
-{
- Q_OBJECT
-
- class HeaderEditor;
-
-public:
- QtxTable( QWidget* = 0, const char* = 0 );
- QtxTable( int, int, QWidget* = 0, const char* = 0 );
- virtual ~QtxTable();
-
- bool headerEditable( Orientation ) const;
-
- bool editHeader( Orientation, const int );
- void endEditHeader( const bool = true );
-
- virtual bool eventFilter( QObject*, QEvent* );
-
-signals:
- void headerEdited( QHeader*, int );
- void headerEdited( Orientation, int );
-
-public slots:
- virtual void hide();
- virtual void setHeaderEditable( Orientation, bool );
-
-private slots:
- void onScrollBarMoved( int );
- void onHeaderSizeChange( int, int, int );
-
-protected:
- virtual void resizeEvent( QResizeEvent* );
-
- virtual bool beginHeaderEdit( Orientation, const int );
- virtual void endHeaderEdit( const bool = true );
- bool isHeaderEditing() const;
- virtual QWidget* createHeaderEditor( QHeader*, const int, const bool = true );
- virtual void setHeaderContentFromEditor( QHeader*, const int, QWidget* );
-
- QHeader* header( Orientation o ) const;
-
-private:
- void updateHeaderEditor();
- void beginHeaderEdit( Orientation, const QPoint& );
- QRect headerSectionRect( QHeader*, const int ) const;
-
-private:
- QWidget* myHeaderEditor;
- QHeader* myEditedHeader;
- int myEditedSection;
- QMap<int, bool> myHeaderEditable;
-};
-
-#endif
-
-#endif
#include "QtxToolBar.h"
-#include <qlayout.h>
-#include <qpixmap.h>
-#include <qdockarea.h>
-#include <qobjectlist.h>
-#include <qmainwindow.h>
-#include <qapplication.h>
+#include <QtGui/qaction.h>
+#include <QtGui/qlayout.h>
+#include <QtGui/qpixmap.h>
+#include <QtGui/qmainwindow.h>
+#include <QtGui/qapplication.h>
/*!
Class: QtxToolBar::Watcher [Internal]
virtual bool eventFilter( QObject*, QEvent* );
protected:
- virtual void customEvent( QCustomEvent* );
+ virtual void customEvent( QEvent* );
private:
enum { Install = QEvent::User, Update };
void showContainer();
void hideContainer();
- void updateIcon();
- void updateCaption();
void updateVisibility();
private:
: QObject( cont ),
myCont( cont ),
myState( true ),
-myEmpty( true )
+myEmpty( false )
{
+/*
if ( myCont->mainWindow() )
myState = myCont->mainWindow()->appropriate( myCont );
-
+*/
myCont->installEventFilter( this );
myVisible = myCont->isVisibleTo( myCont->parentWidget() );
*/
bool QtxToolBar::Watcher::eventFilter( QObject* o, QEvent* e )
{
- if ( o == myCont && e->type() == QEvent::ChildInserted )
- QApplication::postEvent( this, new QCustomEvent( Install ) );
-
- if ( o != myCont && e->type() == QEvent::IconChange )
- updateIcon();
-
- if ( o != myCont && e->type() == QEvent::CaptionChange )
- updateCaption();
+ if ( o == myCont && e->type() == QEvent::ChildAdded )
+ QApplication::postEvent( this, new QEvent( (QEvent::Type)Install ) );
bool updVis = ( o != myCont && ( e->type() == QEvent::Show || e->type() == QEvent::ShowToParent ||
e->type() == QEvent::Hide || e->type() == QEvent::HideToParent ) ) ||
myCont = 0;
QApplication::sendPostedEvents( this, Update );
myCont = cont;
- QApplication::postEvent( this, new QCustomEvent( Update ) );
+ QApplication::postEvent( this, new QEvent( (QEvent::Type)Update ) );
}
return false;
/*!
Event handler of custom events
*/
-void QtxToolBar::Watcher::customEvent( QCustomEvent* e )
+void QtxToolBar::Watcher::customEvent( QEvent* e )
{
switch ( e->type() )
{
case Install:
installFilters();
- updateIcon();
- updateCaption();
case Update:
updateVisibility();
}
if ( !myCont )
return;
- const QObjectList* objList = myCont->children();
- if ( !objList )
- return;
-
- for ( QObjectListIt it( *objList ); it.current(); ++it )
+ const QObjectList& objList = myCont->children();
+ for ( QObjectList::const_iterator it = objList.begin(); it != objList.end(); ++it )
{
- if ( it.current()->isWidgetType() &&
- qstrcmp( "qt_dockwidget_internal", it.current()->name() ) )
- it.current()->installEventFilter( this );
+ if ( (*it)->isWidgetType() && qstrcmp( "qt_dockwidget_internal", (*it)->objectName().toLatin1() ) )
+ (*it)->installEventFilter( this );
}
}
bool vis = false;
- const QObjectList* objList = myCont->children();
- if ( objList )
+ const QObjectList& objList = myCont->children();
+ for ( QObjectList::const_iterator it = objList.begin(); it != objList.end() && !vis; ++it )
{
- for ( QObjectListIt it( *objList ); it.current() && !vis; ++it )
- {
- if ( !it.current()->isWidgetType() ||
- !qstrcmp( "qt_dockwidget_internal", it.current()->name() ) )
- continue;
+ QObject* obj = *it;
+ if ( !obj->isWidgetType() || !qstrcmp( "qt_dockwidget_internal", obj->objectName().toLatin1() ) )
+ continue;
- QWidget* wid = (QWidget*)it.current();
- vis = wid->isVisibleTo( wid->parentWidget() );
- }
+ if ( obj->inherits( "QToolBarHandle" ) || obj->inherits( "QToolBarExtension" ) )
+ continue;
+
+ QWidget* wid = (QWidget*)*it;
+ vis = wid->isVisibleTo( wid->parentWidget() );
}
QMainWindow* mw = myCont->mainWindow();
{
myEmpty = !vis;
if ( !myEmpty )
- mw->setAppropriate( myCont, myState );
+ myCont->toggleViewAction()->setVisible( myState );
else
{
- myState = mw->appropriate( myCont );
- mw->setAppropriate( myCont, false );
+ myState = myCont->toggleViewAction()->isVisible();
+ myCont->toggleViewAction()->setVisible( false );
}
}
vis ? showContainer() : hideContainer();
}
-/*!
- Updates icon
-*/
-void QtxToolBar::Watcher::updateIcon()
-{
- if ( !myCont || !myCont->widget() )
- return;
-
- const QPixmap* ico = myCont->widget()->icon();
- myCont->setIcon( ico ? *ico : QPixmap() );
-}
-
-/*!
- Updates caption
-*/
-void QtxToolBar::Watcher::updateCaption()
-{
- if ( myCont && myCont->widget() && !myCont->widget()->caption().isNull() )
- myCont->setCaption( myCont->widget()->caption() );
-}
-
/*!
Constructor
*/
-QtxToolBar::QtxToolBar( const bool watch, const QString& label, QMainWindow* main,
- QWidget* parent, bool newLine, const char* name, WFlags f )
-: QToolBar( label, main, parent, newLine, name, f ),
+QtxToolBar::QtxToolBar( const bool watch, const QString& label, QWidget* parent )
+: QToolBar( label, parent ),
myWatcher( 0 ),
myStretch( false )
{
/*!
Constructor
*/
-QtxToolBar::QtxToolBar( const QString& label, QMainWindow* main,
- QWidget* parent, bool newLine, const char* name, WFlags f )
-: QToolBar( label, main, parent, newLine, name, f ),
+QtxToolBar::QtxToolBar( const QString& label, QWidget* parent )
+: QToolBar( label, parent ),
myWatcher( 0 ),
myStretch( false )
{
/*!
Constructor
*/
-QtxToolBar::QtxToolBar( const bool watch, QMainWindow* main, const char* name )
-: QToolBar( main, name ),
+QtxToolBar::QtxToolBar( const bool watch, QWidget* parent )
+: QToolBar( parent ),
myWatcher( 0 ),
myStretch( false )
{
/*!
Constructor
*/
-QtxToolBar::QtxToolBar( QMainWindow* main, const char* name )
-: QToolBar( main, name ),
+QtxToolBar::QtxToolBar( QWidget* parent )
+: QToolBar( parent ),
myWatcher( 0 ),
myStretch( false )
{
{
}
-/*!
- Change the toolbar's main widget
- \param wid - new main widget
-*/
-void QtxToolBar::setWidget( QWidget* wid )
-{
- if ( wid )
- wid->reparent( this, QPoint( 0, 0 ), wid->isVisibleTo( wid->parentWidget() ) );
-
- QToolBar::setWidget( wid );
-
- if ( !boxLayout() )
- return;
-
- for ( QLayoutIterator it = boxLayout()->iterator(); it.current(); ++it )
- {
- if ( it.current()->widget() == wid )
- {
- it.deleteCurrent();
- break;
- }
- }
-}
-
-/*!
- \return true if toolbar is stretchable
-*/
-bool QtxToolBar::isStretchable() const
-{
- return myStretch;
-}
-
-/*!
- Sets stretchable state of toolbar
- \param on - new state
-*/
-void QtxToolBar::setStretchable( const bool on )
-{
- if ( myStretch == on )
- return;
-
- myStretch = on;
-
- boxLayout()->setStretchFactor( widget(), myStretch ? 1 : 0 );
-
- if ( myStretch != isHorizontalStretchable() ||
- myStretch != isVerticalStretchable() )
- {
- if ( orientation() == Horizontal )
- setHorizontalStretchable( myStretch );
- else
- setVerticalStretchable( myStretch );
- }
-}
-
/*!
\return the recommended size for the widget
*/
QSize QtxToolBar::sizeHint() const
{
QSize sz = QToolBar::sizeHint();
-
+/*
if ( place() == InDock && isStretchable() && area() )
{
if ( orientation() == Horizontal )
else
sz.setHeight( area()->height() );
}
-
+*/
return sz;
}
QSize QtxToolBar::minimumSizeHint() const
{
QSize sz = QToolBar::minimumSizeHint();
-
+/*
if ( place() == InDock && isStretchable() && area() )
{
if ( orientation() == Horizontal )
else
sz.setHeight( area()->height() );
}
-
+*/
return sz;
}
/*!
Shows toolbar
*/
-void QtxToolBar::show()
+void QtxToolBar::setVisible( bool visible )
{
if ( myWatcher )
- myWatcher->shown( this );
+ {
+ if ( visible )
+ myWatcher->shown( this );
+ else
+ myWatcher->hided( this );
+ }
- QToolBar::show();
+ QToolBar::setVisible( visible );
}
/*!
- Hides toolbar
+ Returns the main window
*/
-void QtxToolBar::hide()
+QMainWindow* QtxToolBar::mainWindow() const
{
- if ( myWatcher )
- myWatcher->hided( this );
-
- QToolBar::hide();
+ QMainWindow* mw = 0;
+ QWidget* wid = parentWidget();
+ while ( !mw && wid )
+ {
+ mw = ::qobject_cast<QMainWindow*>( wid );
+ wid = wid->parentWidget();
+ }
+ return mw;
}
#include "Qtx.h"
-#include <qtoolbar.h>
+#include <QtGui/qtoolbar.h>
class QTX_EXPORT QtxToolBar : public QToolBar
{
class Watcher;
public:
- QtxToolBar( const bool, const QString&, QMainWindow*, QWidget*, bool = false, const char* = 0, WFlags = 0 );
- QtxToolBar( const QString&, QMainWindow*, QWidget*, bool = false, const char* = 0, WFlags = 0 );
- QtxToolBar( const bool, QMainWindow* = 0, const char* = 0 );
- QtxToolBar( QMainWindow* = 0, const char* = 0 );
+ QtxToolBar( const bool, const QString&, QWidget* );
+ QtxToolBar( const QString&, QWidget* );
+ QtxToolBar( const bool, QWidget* = 0 );
+ QtxToolBar( QWidget* = 0 );
virtual ~QtxToolBar();
- virtual void setWidget( QWidget* );
-
- bool isStretchable() const;
- virtual void setStretchable( const bool );
-
virtual QSize sizeHint() const;
virtual QSize minimumSizeHint() const;
+ QMainWindow* mainWindow() const;
+
public slots:
- virtual void show();
- virtual void hide();
+ virtual void setVisible( bool );
private:
Watcher* myWatcher;
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxToolTip.cxx
-// Author: Sergey TELKOV
-
-#include "QtxToolTip.h"
-
-#include <qfont.h>
-#include <qtimer.h>
-#include <qcursor.h>
-#include <qfontmetrics.h>
-#include <qapplication.h>
-
-#define TOOLTIP_SHOW_DELAY 0500
-#define TOOLTIP_HIDE_DELAY 7000
-
-/*!
- Constructor
-*/
-QtxToolTip::QtxToolTip( QWidget* parent )
-: QLabel( parent, "", WStyle_Customize | WStyle_NoBorder | WX11BypassWM | WStyle_Tool | WStyle_StaysOnTop | WType_TopLevel )
-{
- setIndent( 3 );
- setAlignment( Qt::AlignLeft | Qt::AlignVCenter );
- setBackgroundColor( QColor( 255, 255, 231 ) );
-
- myWidgetRegion = QRect( -1, -1, -1, -1 );
-
- setFrameShape( QFrame::Panel );
- setFrameShadow( QFrame::Plain );
-
- parent->setMouseTracking( true );
- parent->installEventFilter( this );
- installEventFilter( this );
-
- mySleepTimer = new QTimer( this );
- myWakeUpTimer = new QTimer( this );
- connect( mySleepTimer, SIGNAL( timeout() ), this, SLOT( onSleepTimeOut() ) );
- connect( myWakeUpTimer, SIGNAL( timeout() ), this, SLOT( onWakeUpTimeOut() ) );
-
- myWakeUpDelayTime = 700;
- myShowDelayTime = 5000;
-}
-
-/*!
- Destructor
-*/
-QtxToolTip::~QtxToolTip()
-{
-}
-
-/*!
- Custom event filter
-*/
-bool QtxToolTip::eventFilter( QObject* o, QEvent* e )
-{
- if ( ( e->type() == QEvent::Destroy ) || ( e->type() == QEvent::Close ) || ( e->type() == QEvent::Hide ) )
- {
- hideTip();
- }
- if ( e->type() == QEvent::Leave )
- {
- if ( isVisible() && ( o == this ) )
- hideTip();
- myWakeUpTimer->stop();
- }
- if ( e->type() == QEvent::MouseMove )
- {
- QMouseEvent* me = (QMouseEvent*)e;
- QPoint thePos = parentWidget()->mapFromGlobal( me->globalPos() );
- if ( myWakeUpTimer->isActive() )
- {
- myWakeUpTimer->stop();
- myWakeUpTimer->start( myWakeUpDelayTime, true );
- }
- if ( isVisible() )
- {
- if ( !myWidgetRegion.contains( thePos ) )
- {
- hideTip();
- myWidgetRegion = QRect( -1, -1, -1, -1 );
- }
- }
- else
- {
- if ( !myWidgetRegion.isValid() || myWidgetRegion.contains( thePos ) )
- myWakeUpTimer->start( myWakeUpDelayTime, true );
- }
- }
- if ( e->type() == QEvent::KeyPress )
- {
- hideTip();
- }
- if ( o == parent() && ( e->type() == QEvent::MouseButtonPress ||
- e->type() == QEvent::MouseButtonRelease ) )
- {
- hideTip();
- }
- return false;
-}
-
-/*!
- Shows tool tip
- \param aPos - position
- \param text - tooltip text
- \param aWidgetRegion - rectangle
-*/
-void QtxToolTip::showTip( const QPoint& aPos, const QString& text, const QRect& aWidgetRegion )
-{
- QFontMetrics theFM = fontMetrics();
- int theHeight = theFM.height();
- int theWidth = theFM.width( text ) + 2;
- showTip( QRect( QPoint( aPos.x(), aPos.y() + 10 ), QSize( theWidth, theHeight ) ), text, aWidgetRegion );
-}
-
-/*!
- Shows tool tip
- \param aRegion - tooltip region
- \param text - tooltip text
- \param aWidgetRegion - widget rectangle
-*/
-void QtxToolTip::showTip( const QRect& aRegion, const QString& text, const QRect& aWidgetRegion )
-{
- setText( text );
- myWidgetRegion = aWidgetRegion;
- setGeometry( aRegion );
- if ( myShowDelayTime != 0 )
- mySleepTimer->start( myShowDelayTime, true );
- show();
-}
-
-/*!
- Hides tooltip
-*/
-void QtxToolTip::hideTip()
-{
- hide();
- myWidgetRegion = QRect( -1, -1, -1, -1 );
- mySleepTimer->stop();
-}
-
-/*!
- It is called when there is a possibility that a tool tip should be shown and
- must decide whether there is a tool tip for the point p in the widget that this QToolTip object relates to
- \param pos - position
-*/
-void QtxToolTip::maybeTip( const QPoint& pos )
-{
- QString text;
- QRect textRegion, theRegion( -1, -1, -1, -1 );
- QFont theFnt = font();
-
- emit maybeTip( pos, text, theFnt, textRegion, theRegion );
-
- if ( theRegion.isValid() )
- {
- setFont( theFnt );
- int margin = lineWidth() + indent();
- QRect dspRegion( QPoint( textRegion.x() - margin, textRegion.y() ),
- QSize( textRegion.width() + 2 * margin, textRegion.height() ) );
- QRect tipRegion( parentWidget()->mapToGlobal( dspRegion.topLeft() ), dspRegion.size() );
- if ( tipRegion.left() < 0 )
- tipRegion.moveBy( -1 * tipRegion.left(), 0 );
- showTip( tipRegion, text, theRegion );
- }
-}
-
-/*!
- SLOT: called when sleep time is out
-*/
-void QtxToolTip::onSleepTimeOut()
-{
- mySleepTimer->stop();
- hideTip();
-}
-
-/*!
- SLOT: called when wake time is out
-*/
-void QtxToolTip::onWakeUpTimeOut()
-{
- myWakeUpTimer->stop();
- QPoint pos = QCursor::pos();
- if ( parentWidget() )
- pos = parentWidget()->mapFromGlobal( pos );
- maybeTip( pos );
-}
-
-/*!
- Custom mouse press event handler
-*/
-void QtxToolTip::mousePressEvent( QMouseEvent* e )
-{
- hideTip();
- QWidget* reciever = parentWidget();
- QMouseEvent* me = new QMouseEvent( QEvent::MouseButtonPress,
- reciever->mapFromGlobal( e->globalPos() ),
- e->button(), e->state() );
- QApplication::sendEvent( reciever, me );
-}
-
-/*!
- Custom mouse double click event handler
-*/
-void QtxToolTip::mouseDoubleClickEvent( QMouseEvent* e )
-{
- hideTip();
- QWidget* reciever = parentWidget();
- QMouseEvent* me = new QMouseEvent( QEvent::MouseButtonDblClick,
- reciever->mapFromGlobal( e->globalPos() ),
- e->button(), e->state() );
- QApplication::sendEvent( reciever, me );
-}
-
-/*!
- Sets wake delay time
- \param theTime
-*/
-void QtxToolTip::setWakeUpDelayTime( int theTime )
-{
- if( !(theTime < 0) )
- myWakeUpDelayTime = theTime;
-}
-
-/*!
- Sets show delay time
- \param theTime
-*/
-void QtxToolTip::setShowDelayTime( int theTime )
-{
- if( !(theTime < 0) )
- myShowDelayTime = theTime;
-}
-
-/*!
- \return timer measuring time of sleeping
-*/
-QTimer* QtxToolTip::sleepTimer() const
-{
- return mySleepTimer;
-}
-
-/*!
- \return timer measuring time of waking up
-*/
-QTimer* QtxToolTip::wakeUpTimer() const
-{
- return myWakeUpTimer;
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxToolTip.h
-// Author: Sergey TELKOV
-
-#ifndef QTXTOOLTIP_H
-#define QTXTOOLTIP_H
-
-#include "Qtx.h"
-
-#include <qlabel.h>
-
-class QTimer;
-
-class QTX_EXPORT QtxToolTip : public QLabel
-{
- Q_OBJECT
-
-public:
- QtxToolTip( QWidget* = 0 );
- virtual ~QtxToolTip();
-
- void hideTip();
-
- virtual void showTip( const QPoint& aPos,
- const QString& text, const QRect& aWidgetRegion );
- virtual void showTip( const QRect& aRegion,
- const QString& text, const QRect& aWidgetRegion );
-
- virtual bool eventFilter( QObject* o, QEvent* e );
-
- void setWakeUpDelayTime( int );
- void setShowDelayTime( int );
-
- int wakeUpDelayTime() const { return myWakeUpDelayTime; }
- int showDelayTime() const { return myShowDelayTime; }
-
-signals:
- void maybeTip( QPoint, QString&, QFont&, QRect&, QRect& );
-
-protected slots:
- void onSleepTimeOut();
- void onWakeUpTimeOut();
-
-protected:
- virtual void maybeTip( const QPoint& );
- virtual void mousePressEvent( QMouseEvent* );
- virtual void mouseDoubleClickEvent( QMouseEvent* );
-
- QTimer* sleepTimer() const;
- QTimer* wakeUpTimer() const;
-
-private:
- QTimer* myWakeUpTimer;
- QTimer* mySleepTimer;
- QRect myWidgetRegion;
-
- int myShowDelayTime;
- int myWakeUpDelayTime;
-};
-
-#endif
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxWorkspaceAction.cxx
-// Author: Sergey TELKOV
-
-#include "QtxWorkspaceAction.h"
-
-#include <qpopupmenu.h>
-#include <qworkspace.h>
-#include <qwidgetlist.h>
-
-/*!
- Constructor
-*/
-QtxWorkspaceAction::QtxWorkspaceAction( QWorkspace* ws, QObject* parent, const char* name )
-: QtxAction( tr( "Controls windows into workspace" ), tr( "Workspace management" ), 0, parent, name ),
-myFlags( Standard ),
-myWorkspace( ws )
-{
- myItem.insert( Cascade, new QtxAction( tr( "Arranges the windows as overlapping tiles" ),
- tr( "Cascade" ), 0, this, 0, false ) );
- myItem.insert( Tile, new QtxAction( tr( "Arranges the windows as nonoverlapping tiles" ),
- tr( "Tile" ), 0, this, 0, false ) );
- myItem.insert( HTile, new QtxAction( tr( "Arranges the windows as nonoverlapping horizontal tiles" ),
- tr( "Tile horizontally" ), 0, this, 0, false ) );
- myItem.insert( VTile, new QtxAction( tr( "Arranges the windows as nonoverlapping vertical tiles" ),
- tr( "Tile vertically" ), 0, this, 0, false ) );
-
- connect( myItem[Tile], SIGNAL( activated() ), this, SLOT( tile() ) );
- connect( myItem[Cascade], SIGNAL( activated() ), this, SLOT( cascade() ) );
- connect( myItem[HTile], SIGNAL( activated() ), this, SLOT( tileVertical() ) );
- connect( myItem[VTile], SIGNAL( activated() ), this, SLOT( tileHorizontal() ) );
-}
-
-/*!
- Destructor
-*/
-QtxWorkspaceAction::~QtxWorkspaceAction()
-{
-}
-
-/*!
- \return corresponding workspace
-*/
-QWorkspace* QtxWorkspaceAction::workspace() const
-{
- return myWorkspace;
-}
-
-/*!
- \return set of action flags
-*/
-int QtxWorkspaceAction::items() const
-{
- return myFlags;
-}
-
-/*!
- Sets action flags
- \param flags - new set of flags
-*/
-void QtxWorkspaceAction::setItems( const int flags )
-{
- if ( !flags || flags == myFlags || !( flags & Operations ) )
- return;
-
- myFlags = flags;
-}
-
-/*!
- \return true if action contains all flags
- \param flags - new set of flags
-*/
-bool QtxWorkspaceAction::hasItems( const int flags ) const
-{
- return ( myFlags & flags ) == flags;
-}
-
-/*!
- \return accelerator of item
- \param id - item id
-*/
-int QtxWorkspaceAction::accel( const int id ) const
-{
- int a = 0;
- if ( myItem.contains( id ) )
- a = myItem[id]->accel();
- return a;
-}
-
-/*!
- \return icons of item
- \param id - item id
-*/
-QIconSet QtxWorkspaceAction::iconSet( const int id ) const
-{
- QIconSet ico;
- if ( myItem.contains( id ) )
- ico = myItem[id]->iconSet();
- return ico;
-}
-
-/*!
- \return menu text of item
- \param id - item id
-*/
-QString QtxWorkspaceAction::menuText( const int id ) const
-{
- QString txt;
- if ( myItem.contains( id ) )
- txt = myItem[id]->menuText();
- return txt;
-}
-
-/*!
- \return status tip of item
- \param id - item id
-*/
-QString QtxWorkspaceAction::statusTip( const int id ) const
-{
- QString txt;
- if ( myItem.contains( id ) )
- txt = myItem[id]->statusTip();
- return txt;
-}
-
-/*!
- Changes accelerator of item
- \param id - item id
- \param a - new accelerator
-*/
-void QtxWorkspaceAction::setAccel( const int id, const int a )
-{
- if ( myItem.contains( id ) )
- myItem[id]->setAccel( a );
-}
-
-/*!
- Changes icons of item
- \param id - item id
- \param ico - new icons
-*/
-void QtxWorkspaceAction::setIconSet( const int id, const QIconSet& ico )
-{
- if ( myItem.contains( id ) )
- myItem[id]->setIconSet( ico );
-}
-
-/*!
- Changes menu text of item
- \param id - item id
- \param txt - new menu text
-*/
-void QtxWorkspaceAction::setMenuText( const int id, const QString& txt )
-{
- if ( myItem.contains( id ) )
- myItem[id]->setMenuText( txt );
-}
-
-/*!
- Changes status tip of item
- \param id - item id
- \param txt - new status tip
-*/
-void QtxWorkspaceAction::setStatusTip( const int id, const QString& txt )
-{
- if ( myItem.contains( id ) )
- myItem[id]->setStatusTip( txt );
-}
-
-/*!
- Adds action to widget
- \param wid - widget
-*/
-bool QtxWorkspaceAction::addTo( QWidget* wid )
-{
- return addTo( wid, -1 );
-}
-
-/*!
- Adds action to widget
- \param wid - widget
- \param idx - position
-*/
-bool QtxWorkspaceAction::addTo( QWidget* wid, const int idx )
-{
- if ( !wid || !wid->inherits( "QPopupMenu" ) )
- return false;
-
- QPopupMenu* pm = (QPopupMenu*)wid;
- checkPopup( pm );
-
- if ( myMenu.contains( pm ) )
- return false;
-
- myMenu.insert( pm, QIntList() );
- fillPopup( pm, idx );
-
- connect( pm, SIGNAL( aboutToShow() ), this, SLOT( onAboutToShow() ) );
- connect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onPopupDestroyed( QObject* ) ) );
-
- return true;
-}
-
-/*!
- Removes action from widget
- \param wid - widget
-*/
-bool QtxWorkspaceAction::removeFrom( QWidget* wid )
-{
- if ( !wid || !wid->inherits( "QPopupMenu" ) )
- return false;
-
- QPopupMenu* pm = (QPopupMenu*)wid;
- if ( !myMenu.contains( pm ) )
- return false;
-
- clearPopup( pm );
-
- disconnect( pm, SIGNAL( aboutToShow() ), this, SLOT( onAboutToShow() ) );
- disconnect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onPopupDestroyed( QObject* ) ) );
-
- myMenu.remove( pm );
-
- return true;
-}
-
-/*!
- Performs action
- \param type - action type
-*/
-void QtxWorkspaceAction::perform( const int type )
-{
- switch ( type )
- {
- case Cascade:
- cascade();
- break;
- case Tile:
- tile();
- break;
- case VTile:
- tileVertical();
- break;
- case HTile:
- tileHorizontal();
- break;
- }
-}
-
-/*!
- Performs tile action
-*/
-void QtxWorkspaceAction::tile()
-{
- QWorkspace* ws = workspace();
- if ( !ws )
- return;
-
- ws->tile();
-}
-
-/*!
- Performs cascade action
-*/
-void QtxWorkspaceAction::cascade()
-{
- QWorkspace* ws = workspace();
- if ( !ws )
- return;
-
- ws->cascade();
-
- int w = ws->width();
- int h = ws->height();
-
- QWidgetList winList = ws->windowList();
- for ( QWidgetListIt it( winList ); it.current(); ++it )
- it.current()->resize( int( w * 0.8 ), int( h * 0.8 ) );
-}
-
-/*!
- Performs tile vertical action
-*/
-void QtxWorkspaceAction::tileVertical()
-{
- QWorkspace* wrkSpace = workspace();
- if ( !wrkSpace )
- return;
-
- QWidgetList winList = wrkSpace->windowList();
- if ( winList.isEmpty() )
- return;
-
- int count = 0;
- for ( QWidgetListIt itr( winList ); itr.current(); ++itr )
- if ( !itr.current()->testWState( WState_Minimized ) )
- count++;
-
- if ( !count )
- return;
-
- int y = 0;
-
- int heightForEach = wrkSpace->height() / count;
- for ( QWidgetListIt it( winList ); it.current(); ++it )
- {
- QWidget* win = it.current();
- if ( win->testWState( WState_Minimized ) )
- continue;
-
- if ( win->testWState( WState_Maximized ) )
- {
- win->hide();
- win->showNormal();
- }
- int prefH = win->minimumHeight() + win->parentWidget()->baseSize().height();
- int actualH = QMAX( heightForEach, prefH );
-
- win->parentWidget()->setGeometry( 0, y, wrkSpace->width(), actualH );
- y += actualH;
- }
-}
-
-/*!
- Performs tile horizontal action
-*/
-void QtxWorkspaceAction::tileHorizontal()
-{
- QWorkspace* wrkSpace = workspace();
- if ( !wrkSpace )
- return;
-
- QWidgetList winList = wrkSpace->windowList();
- if ( winList.isEmpty() )
- return;
-
- int count = 0;
- for ( QWidgetListIt itr( winList ); itr.current(); ++itr )
- if ( !itr.current()->testWState( WState_Minimized ) )
- count++;
-
- if ( !count )
- return;
-
- int x = 0;
- int widthForEach = wrkSpace->width() / count;
- for ( QWidgetListIt it( winList ); it.current(); ++it )
- {
- QWidget* win = it.current();
- if ( win->testWState( WState_Minimized ) )
- continue;
-
- if ( win->testWState( WState_Maximized ) )
- {
- win->hide();
- win->showNormal();
- }
- int prefW = win->minimumWidth();
- int actualW = QMAX( widthForEach, prefW );
-
- win->parentWidget()->setGeometry( x, 0, actualW, wrkSpace->height() );
- x += actualW;
- }
-}
-
-/*!
- SLOT: called just before the popup menu is displayed, updates popup
-*/
-void QtxWorkspaceAction::onAboutToShow()
-{
- const QObject* obj = sender();
- if ( !obj || !obj->inherits( "QPopupMenu" ) )
- return;
-
- updatePopup( (QPopupMenu*)obj );
-}
-
-/*!
- SLOT: called when popup menu is destroyed, removes it from menu
-*/
-void QtxWorkspaceAction::onPopupDestroyed( QObject* obj )
-{
- myMenu.remove( (QPopupMenu*)obj );
-}
-
-/*!
- Updates popup
- \param pm - popup menu
-*/
-void QtxWorkspaceAction::checkPopup( QPopupMenu* pm )
-{
- if ( !myMenu.contains( pm ) )
- return;
-
- QIntList updList;
- for ( QIntList::const_iterator it = myMenu[pm].begin(); it != myMenu[pm].end(); ++it )
- {
- if ( pm->indexOf( *it ) != -1 )
- updList.append( *it );
- }
-
- myMenu.remove( pm );
-
- if ( !updList.isEmpty() )
- myMenu.insert( pm, updList );
- else
- {
- disconnect( pm, SIGNAL( aboutToShow() ), this, SLOT( onAboutToShow() ) );
- disconnect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onPopupDestroyed( QObject* ) ) );
- }
-}
-
-/*!
- Clears and refills popup and updates state of actions
- \param pm - popup menu
-*/
-void QtxWorkspaceAction::updatePopup( QPopupMenu* pm )
-{
- if ( !myMenu.contains( pm ) )
- return;
-
- fillPopup( pm, clearPopup( pm ) );
-
- bool count = workspace() ? workspace()->windowList().count() : 0;
- myItem[Cascade]->setEnabled( count );
- myItem[Tile]->setEnabled( count );
- myItem[HTile]->setEnabled( count );
- myItem[VTile]->setEnabled( count );
-}
-
-/*!
- Clears popup
- \param pm - popup menu
-*/
-int QtxWorkspaceAction::clearPopup( QPopupMenu* pm )
-{
- if ( !myMenu.contains( pm ) )
- return -1;
-
- int idx = -1;
- const QIntList& lst = myMenu[pm];
- for ( QIntList::const_iterator it = lst.begin(); it != lst.end() && idx == -1; ++it )
- idx = pm->indexOf( *it );
-
- for ( ItemMap::ConstIterator mit = myItem.begin(); mit != myItem.end(); ++mit )
- mit.data()->removeFrom( pm );
-
- for ( QIntList::const_iterator itr = lst.begin(); itr != lst.end(); ++itr )
- pm->removeItem( *itr );
-
- return idx;
-}
-
-/*!
- Fills popup with items
- \param pm - popup menu
- \param idx - position
-*/
-void QtxWorkspaceAction::fillPopup( QPopupMenu* pm, const int idx )
-{
- if ( !pm )
- return;
-
- int index = idx < 0 ? pm->count() : QMIN( (int)pm->count(), idx );
-
- myMenu.insert( pm, QIntList() );
- QIntList& lst = myMenu[pm];
-
- for ( ItemMap::ConstIterator mit = myItem.begin(); mit != myItem.end(); ++mit )
- {
- if ( !hasItems( mit.key() ) )
- continue;
-
- mit.data()->addTo( pm, index );
- lst.append( pm->idAt( index++ ) );
- }
-
- QWorkspace* ws = workspace();
- if ( !ws || !hasItems( Windows ) )
- return;
-
- QWidgetList wList = ws->windowList();
- if ( wList.isEmpty() )
- return;
-
- lst.append( pm->insertSeparator( index++ ) );
-
- int param = 0;
- pm->setCheckable( true );
- for ( QWidgetListIt it( wList ); it.current(); ++it )
- {
- int id = pm->insertItem( it.current()->caption(), this, SLOT( onItemActivated( int ) ), 0, -1, index++ );
- pm->setItemParameter( id, param++ );
- pm->setItemChecked( id, it.current() == ws->activeWindow() );
- lst.append( id );
- }
-}
-
-/*!
- SLOT: called when popup item corresponding to window is activated, activates window
-*/
-void QtxWorkspaceAction::onItemActivated( int idx )
-{
- QWorkspace* ws = workspace();
- if ( !ws )
- return;
-
- QWidgetList wList = ws->windowList();
- if ( idx < 0 || idx >= (int)wList.count() )
- return;
-
- wList.at( idx )->setFocus();
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxWorkspaceAction.h
-// Author: Sergey TELKOV
-
-#ifndef QTXWORKSPACEACTION_H
-#define QTXWORKSPACEACTION_H
-
-#include "QtxAction.h"
-
-class QWorkspace;
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-class QTX_EXPORT QtxWorkspaceAction : public QtxAction
-{
- Q_OBJECT
-
-public:
- enum { Cascade = 0x0001,
- Tile = 0x0002,
- VTile = 0x0004,
- HTile = 0x0008,
- Windows = 0x0010,
- Standard = Cascade | Tile | Windows,
- Operations = Cascade | Tile | VTile | HTile,
- All = Standard | HTile | VTile };
-
-public:
- QtxWorkspaceAction( QWorkspace*, QObject* = 0, const char* = 0 );
- virtual ~QtxWorkspaceAction();
-
- QWorkspace* workspace() const;
-
- int items() const;
- void setItems( const int );
- bool hasItems( const int ) const;
-
- int accel( const int ) const;
- QIconSet iconSet( const int ) const;
- QString menuText( const int ) const;
- QString statusTip( const int ) const;
-
- void setAccel( const int, const int );
- void setIconSet( const int, const QIconSet& );
- void setMenuText( const int, const QString& );
- void setStatusTip( const int, const QString& );
-
- virtual bool addTo( QWidget* );
- virtual bool addTo( QWidget*, const int );
- virtual bool removeFrom( QWidget* );
-
- void perform( const int );
-
-public slots:
- void tile();
- void cascade();
- void tileVertical();
- void tileHorizontal();
-
-private slots:
- void onAboutToShow();
- void onItemActivated( int );
- void onPopupDestroyed( QObject* );
-
-private:
- void checkPopup( QPopupMenu* );
- void updatePopup( QPopupMenu* );
-
- int clearPopup( QPopupMenu* );
- void fillPopup( QPopupMenu*, const int );
-
-private:
- typedef QMap<QPopupMenu*, QIntList> MenuMap;
- typedef QMap<int, QtxAction*> ItemMap;
-
-private:
- MenuMap myMenu;
- ItemMap myItem;
- int myFlags;
- QWorkspace* myWorkspace;
-};
-
-#ifdef WIN32
-#pragma warning( default:4251 )
-#endif
-
-#endif
#include "QtxWorkstack.h"
-#include <qstyle.h>
-#include <qimage.h>
-#include <qaction.h>
-#include <qlayout.h>
-#include <qpixmap.h>
-#include <qiconset.h>
-#include <qpainter.h>
-#include <qsplitter.h>
-#include <qpopupmenu.h>
-#include <qobjectlist.h>
-#include <qpushbutton.h>
-#include <qwidgetstack.h>
-#include <qapplication.h>
-#include <qinputdialog.h>
-#include <qevent.h>
-#include <qregexp.h>
-
-#define DARK_COLOR_LIGHT 250
+#include "QtxAction.h"
+
+#include <QtCore/qregexp.h>
+
+#include <QtGui/qmenu.h>
+#include <QtGui/qicon.h>
+#include <QtGui/qevent.h>
+#include <QtGui/qstyle.h>
+#include <QtGui/qimage.h>
+#include <QtGui/qlayout.h>
+#include <QtGui/qpixmap.h>
+#include <QtGui/qpainter.h>
+#include <QtGui/qsplitter.h>
+#include <QtGui/qrubberband.h>
+#include <QtGui/qpushbutton.h>
+#include <QtGui/qapplication.h>
+#include <QtGui/qinputdialog.h>
+#include <QtGui/qstackedwidget.h>
+
+#define DARK_COLOR_LIGHT 250
/*!
Constructor
myWorkWin( 0 ),
myWorkArea( 0 )
{
- myActionsMap.insert( SplitVertical, new QAction( tr( "Split vertically" ), 0, this ) );
- myActionsMap.insert( SplitHorizontal, new QAction( tr( "Split horizontally" ), 0, this ) );
- myActionsMap.insert( Close, new QAction( tr( "Close" ), 0, this ) );
- myActionsMap.insert( Rename, new QAction( tr( "Rename" ), 0, this ) );
+ myActionsMap.insert( SplitVertical, new QtxAction( QString(), tr( "Split vertically" ), 0, this ) );
+ myActionsMap.insert( SplitHorizontal, new QtxAction( QString(), tr( "Split horizontally" ), 0, this ) );
+ myActionsMap.insert( Close, new QtxAction( QString(), tr( "Close" ), 0, this ) );
+ myActionsMap.insert( Rename, new QtxAction( QString(), tr( "Rename" ), 0, this ) );
- connect( myActionsMap[SplitVertical], SIGNAL( activated() ), this, SLOT( splitVertical() ) );
- connect( myActionsMap[SplitHorizontal], SIGNAL( activated() ), this, SLOT( splitHorizontal() ) );
- connect( myActionsMap[Close], SIGNAL( activated() ), this, SLOT( onCloseWindow() ) );
- connect( myActionsMap[Rename], SIGNAL( activated() ), this, SLOT( onRename() ) );
+ connect( myActionsMap[SplitVertical], SIGNAL( triggered( bool ) ), this, SLOT( splitVertical() ) );
+ connect( myActionsMap[SplitHorizontal], SIGNAL( triggered( bool ) ), this, SLOT( splitHorizontal() ) );
+ connect( myActionsMap[Close], SIGNAL( triggered( bool ) ), this, SLOT( onCloseWindow() ) );
+ connect( myActionsMap[Rename], SIGNAL( triggered( bool ) ), this, SLOT( onRename() ) );
QVBoxLayout* base = new QVBoxLayout( this );
+ base->setMargin( 0 );
+
mySplit = new QSplitter( this );
mySplit->setChildrenCollapsible( false );
base->addWidget( mySplit );
*/
QWidgetList QtxWorkstack::windowList() const
{
- QPtrList<QtxWorkstackArea> lst;
+ QList<QtxWorkstackArea*> lst;
areas( mySplit, lst, true );
QWidgetList widList;
- for ( QPtrListIterator<QtxWorkstackArea> it( lst ); it.current(); ++it )
+ for ( QList<QtxWorkstackArea*>::iterator it = lst.begin(); it != lst.end(); ++it )
{
- QWidgetList wids = it.current()->widgetList();
- for ( QWidgetListIt itr( wids ); itr.current(); ++itr )
- widList.append( itr.current() );
+ QWidgetList wids = (*it)->widgetList();
+ for ( QWidgetList::iterator itr = wids.begin(); itr != wids.end(); ++itr )
+ widList.append( *itr );
}
return widList;
return;
QSplitter* s = splitter( area );
- QPtrList<QtxWorkstackArea> areaList;
+ QList<QtxWorkstackArea*> areaList;
areas( s, areaList );
- QPtrList<QSplitter> splitList;
+ QList<QSplitter*> splitList;
splitters( s, splitList );
QSplitter* trg = 0;
if ( !trg )
return;
- trg->setOrientation( (Orientation)o );
+ trg->setOrientation( (Qt::Orientation)o );
QtxWorkstackArea* newArea = createArea( 0 );
- insertWidget( newArea, trg, area );
+ trg->insertWidget( trg->indexOf( area ) + 1, newArea );
area->removeWidget( curWid );
newArea->insertWidget( curWid );
\param o - orientation of splitting (Qt::Horizontal or Qt::Vertical)
\param type - type of splitting, see <VAR>SplitType</VAR> enumeration
*/
-void QtxWorkstack::Split (QWidget* wid, const Qt::Orientation o, const SplitType type)
+void QtxWorkstack::Split( QWidget* wid, const Qt::Orientation o, const SplitType type )
{
if (!wid) return;
// find area of the given widget
QtxWorkstackArea* area = NULL;
- QPtrList<QtxWorkstackArea> allAreas;
+ QList<QtxWorkstackArea*> allAreas;
areas(mySplit, allAreas, true);
- QPtrListIterator<QtxWorkstackArea> it (allAreas);
- for (; it.current() && !area; ++it) {
- if (it.current()->contains(wid))
- area = it.current();
+
+ for ( QList<QtxWorkstackArea*>::iterator it = allAreas.begin(); it != allAreas.end() && !area; ++it )
+ {
+ if ( (*it)->contains( wid ) )
+ area = *it;
}
- if (!area) return;
+
+ if ( !area )
+ return;
QWidgetList wids = area->widgetList();
- if (wids.count() < 2)
+ if ( wids.count() < 2 )
return;
- QSplitter* s = splitter(area);
- QPtrList<QtxWorkstackArea> areaList;
- areas(s, areaList);
+ QSplitter* s = splitter( area );
+ QList<QtxWorkstackArea*> areaList;
+ areas( s, areaList );
- QPtrList<QSplitter> splitList;
+ QList<QSplitter*> splitList;
splitters(s, splitList);
QSplitter* trg = 0;
QtxWorkstackArea* newArea = createArea(0);
insertWidget(newArea, trg, area);
- switch (type) {
+ switch ( type )
+ {
case SPLIT_STAY:
+ for ( QWidgetList::iterator itr = wids.begin(); itr != wids.end(); ++itr )
{
- QWidgetListIt itr (wids);
- for (; itr.current(); ++itr)
+ QWidget* wid_i = *itr;
+ if ( wid_i != wid )
{
- QWidget* wid_i = itr.current();
- if (wid_i != wid) {
- area->removeWidget(wid_i);
- newArea->insertWidget(wid_i);
- }
+ area->removeWidget( wid_i );
+ newArea->insertWidget( wid_i );
}
}
break;
case SPLIT_AT:
{
- QWidgetListIt itr (wids);
- for (; itr.current() && itr.current() != wid; ++itr) {
+ QWidgetList::iterator itr = wids.begin();
+ for ( ; itr != wids.end() && *itr != wid; ++itr )
+ {
}
- for (; itr.current(); ++itr) {
- area->removeWidget(itr.current());
- newArea->insertWidget(itr.current());
+ for ( ; itr != wids.end(); ++itr )
+ {
+ area->removeWidget( *itr );
+ newArea->insertWidget( *itr );
}
}
break;
case SPLIT_MOVE:
- area->removeWidget(wid);
- newArea->insertWidget(wid);
+ area->removeWidget( wid );
+ newArea->insertWidget( wid );
break;
}
- distributeSpace(trg);
-}
-
-/*!
- \brief Put given widget on top of its workarea
- \param wid - widget, belonging to this workstack
-*/
-/*
-void QtxWorkstack::OnTop (QWidget* wid)
-{
- if ( !wid )
- return;
-
- // find area of the given widget
- QtxWorkstackArea* area = 0;
- QPtrList<QtxWorkstackArea> allAreas;
- areas( mySplit, allAreas, true );
- for ( QPtrListIterator<QtxWorkstackArea> it( allAreas ); it.current() && !area; ++it )
- {
- if ( it.current()->contains( wid ) )
- area = it.current();
- }
-
- if ( area )
- area->setActiveWidget( wid );
+ distributeSpace( trg );
}
-*/
/*!
\brief Move widget(s) from source workarea into target workarea
will be moved together with \a wid2, source workarea will be deleted.
If \a wid1 and \a wid2 belongs to one workarea, simple reordering will take place.
*/
-void QtxWorkstack::Attract ( QWidget* wid1, QWidget* wid2, const bool all )
+void QtxWorkstack::Attract( QWidget* wid1, QWidget* wid2, const bool all )
{
if ( !wid1 || !wid2 )
return;
// find area of the widgets
- QtxWorkstackArea *area1 = NULL, *area2 = NULL;
- QPtrList<QtxWorkstackArea> allAreas;
- areas(mySplit, allAreas, true);
- QPtrListIterator<QtxWorkstackArea> it (allAreas);
- for (; it.current() && !(area1 && area2); ++it) {
- if (it.current()->contains(wid1))
- area1 = it.current();
- if (it.current()->contains(wid2))
- area2 = it.current();
+ QtxWorkstackArea *area1 = 0, *area2 = 0;
+ QList<QtxWorkstackArea*> allAreas;
+ areas( mySplit, allAreas, true );
+ for ( QList<QtxWorkstackArea*>::iterator it = allAreas.begin(); it != allAreas.end() && !( area1 && area2 ); ++it )
+ {
+ if ( (*it)->contains( wid1 ) )
+ area1 = *it;
+
+ if ( (*it)->contains( wid2 ) )
+ area2 = *it;
}
- if (!area1 || !area2) return;
+
+ if ( !area1 || !area2 )
+ return;
QWidget* curWid = area1->activeWidget();
- if (!curWid) return;
+ if ( !curWid )
+ return;
- if (area1 == area2) {
- if (all) {
+ if ( area1 == area2 )
+ {
+ if ( all )
+ {
// Set wid1 at first position, wid2 at second
- area1->insertWidget(wid1);
- area1->insertWidget(wid2, 1);
- } else {
+ area1->insertWidget( wid1 );
+ area1->insertWidget( wid2, 1 );
+ }
+ else
+ {
// Set wid2 right after wid1
- area1->removeWidget(wid2);
+ area1->removeWidget( wid2 );
int wid1_ind = 0;
QWidgetList wids1 = area1->widgetList();
- QWidgetListIt itr1 (wids1);
- for (; itr1.current() && itr1.current() != wid1; ++itr1, ++wid1_ind);
- area1->insertWidget(wid2, wid1_ind + 1);
+ for ( QWidgetList::iterator itr1 = wids1.begin(); itr1 != wids1.end() && *itr1 != wid1; ++itr1, ++wid1_ind );
+ area1->insertWidget( wid2, wid1_ind + 1 );
}
- } else {
+ }
+ else
+ {
int wid1_ind = 0;
QWidgetList wids1 = area1->widgetList();
- QWidgetListIt itr1 (wids1);
- for (; itr1.current() && itr1.current() != wid1; ++itr1, ++wid1_ind);
-
- if (all) {
+ for ( QWidgetList::iterator itr1 = wids1.begin(); itr1 != wids1.end() && *itr1 != wid1; ++itr1, ++wid1_ind );
+ if ( all )
+ {
// Set wid2 right after wid1, other widgets from area2 right after wid2
QWidgetList wids2 = area2->widgetList();
- QWidgetListIt itr2 (wids2);
- for (int ind = wid1_ind + 1; itr2.current(); ++itr2, ++ind)
+ QWidgetList::iterator itr2 = wids2.begin();
+ for ( int ind = wid1_ind + 1; itr2 != wids2.end(); ++itr2, ++ind )
{
- area2->removeWidget(itr2.current());
- if (itr2.current() == wid2) {
- area1->insertWidget(itr2.current(), wid1_ind + 1);
- } else {
- area1->insertWidget(itr2.current(), ind);
- }
+ area2->removeWidget( *itr2 );
+ if ( *itr2 == wid2 )
+ area1->insertWidget( *itr2, wid1_ind + 1 );
+ else
+ area1->insertWidget( *itr2, ind );
}
- } else {
+ }
+ else
+ {
// Set wid2 right after wid1
- area2->removeWidget(wid2);
- area1->insertWidget(wid2, wid1_ind + 1);
+ area2->removeWidget( wid2 );
+ area1->insertWidget( wid2, wid1_ind + 1 );
}
}
// find area of the given widget
QtxWorkstackArea* area = NULL;
- QPtrList<QtxWorkstackArea> allAreas;
- areas(mySplit, allAreas, true);
- for ( QPtrListIterator<QtxWorkstackArea> it( allAreas );
- it.current() && !area;
- ++it )
+ QList<QtxWorkstackArea*> allAreas;
+ areas( mySplit, allAreas, true );
+ for ( QList<QtxWorkstackArea*>::iterator it = allAreas.begin(); it != allAreas.end() && !area; ++it )
{
- if (it.current()->contains(wid))
- area = it.current();
+ if ( (*it)->contains( wid ) )
+ area = *it;
}
if ( !area )
// find index of the area in its splitter
int item_ind = -1;
bool isFound = false;
- const QObjectList* was = split->children();
- for (QObjectListIt ito (*was); ito.current() && !isFound; ++ito, ++item_ind)
+ const QObjectList& was = split->children();
+ for ( QObjectList::const_iterator ito = was.begin(); ito != was.end() && !isFound; ++ito, ++item_ind )
{
- if (ito.current() == area)
+ if ( *ito == area )
isFound = true;
}
- if (!isFound || item_ind == 0)
+
+ if ( !isFound || item_ind == 0 )
return;
QIntList szList = split->sizes();
- int splitter_size = (split->orientation() == Horizontal ?
- split->width() : split->height());
+ int splitter_size = ( split->orientation() == Qt::Horizontal ? split->width() : split->height());
int nb = szList.count();
- int new_prev = int(splitter_size * position / item_ind);
- int new_next = int(splitter_size * (1.0 - position) / (nb - item_ind));
- setSizes (szList, item_ind, new_prev, new_next, new_next);
- split->setSizes(szList);
+ int new_prev = int( splitter_size * position / item_ind );
+ int new_next = int( splitter_size * ( 1.0 - position ) / ( nb - item_ind ) );
+ setSizes( szList, item_ind, new_prev, new_next, new_next );
+ split->setSizes( szList );
}
/*!
if ( !wid )
return;
- int splitter_size = o == Horizontal ? mySplit->width() : mySplit->height();
+ int splitter_size = o == Qt::Horizontal ? mySplit->width() : mySplit->height();
int need_pos = int( position * splitter_size );
int splitter_pos = 0;
if ( !myActionsMap.contains( id ) )
return;
- myActionsMap[id]->setAccel( accel );
+ myActionsMap[id]->setShortcut( accel );
}
/*!
{
int res = 0;
if ( myActionsMap.contains( id ) )
- res = myActionsMap[id]->accel();
+ res = myActionsMap[id]->shortcut();
return res;
}
int cur_ind = 0, item_ind = 0;
bool isBottom = false, isFound = false;
QSplitter* sub_split = NULL;
- const QObjectList* objs = split->children();
- if ( objs )
+ const QObjectList& objs = split->children();
+ for ( QObjectList::const_iterator it = objs.begin(); it != objs.end() && !isFound; ++it )
{
- for (QObjectListIt it (*objs); it.current() && !isFound; ++it)
+ QtxWorkstackArea* area = ::qobject_cast<QtxWorkstackArea*>( *it );
+ if ( area )
+ {
+ if ( area->contains( wid ) )
+ {
+ item_ind = cur_ind;
+ isBottom = true;
+ isFound = true;
+ }
+ cur_ind++;
+ }
+ else if ( (*it)->inherits( "QSplitter" ) )
{
- if (it.current()->inherits( "QtxWorkstackArea")) {
- if (((QtxWorkstackArea*)it.current())->contains(wid)) {
+ QList<QtxWorkstackArea*> areaList;
+ areas( (QSplitter*)(*it), areaList, true );
+ for ( QList<QtxWorkstackArea*>::iterator ita = areaList.begin(); ita != areaList.end() && !isFound; ++ita )
+ {
+ if ( (*ita)->contains( wid ) )
+ {
item_ind = cur_ind;
- isBottom = true;
isFound = true;
+ sub_split = (QSplitter*)*it;
}
- cur_ind++;
- } else if (it.current()->inherits("QSplitter")) {
- QPtrList<QtxWorkstackArea> areaList;
- areas((QSplitter*)it.current(), areaList, true);
- for (QPtrListIterator<QtxWorkstackArea> ita (areaList);
- ita.current() && !isFound;
- ++ita)
- {
- if (ita.current()->contains(wid)) {
- item_ind = cur_ind;
- isFound = true;
- sub_split = (QSplitter*)it.current();
- }
- }
- cur_ind++;
}
+ cur_ind++;
}
}
- if (!isFound)
- return (need_pos - splitter_pos);
- if (split->orientation() == o) {
+ if ( !isFound )
+ return ( need_pos - splitter_pos );
+
+ if ( split->orientation() == o )
+ {
// Find coordinates of near and far sides of the appropriate item relatively current splitter
- int splitter_size = (o == Horizontal ? split->width() : split->height());
+ int splitter_size = ( o == Qt::Horizontal ? split->width() : split->height() );
QIntList szList = split->sizes();
int nb = szList.count();
int item_rel_pos = 0; // position of near side of item relatively this splitter
return;
QIntList szList = split->sizes();
- int size = ( split->orientation() == Horizontal ?
+ int size = ( split->orientation() == Qt::Horizontal ?
split->width() : split->height() ) / szList.count();
for ( QIntList::iterator it = szList.begin(); it != szList.end(); ++it )
*it = size;
return;
bool ok = false;
- QString newName = QInputDialog::getText( tr( "Rename" ), tr( "Enter new name:" ), QLineEdit::Normal,
- myWorkWin->caption(), &ok, topLevelWidget() );
+ QString newName = QInputDialog::getText( topLevelWidget(), tr( "Rename" ), tr( "Enter new name:" ),
+ QLineEdit::Normal, myWorkWin->windowTitle(), &ok );
if ( ok && !newName.isEmpty() )
- myWorkWin->setCaption( newName );
+ myWorkWin->setWindowTitle( newName );
}
/*!
if ( !pSplit )
return 0;
- bool upd = pSplit->isUpdatesEnabled();
+ bool upd = pSplit->updatesEnabled();
pSplit->setUpdatesEnabled( false );
QIntList szList = pSplit->sizes();
#if defined QT_VERSION && QT_VERSION >= 0x30200
wrap->setChildrenCollapsible( false );
#endif
- insertWidget( wrap, pSplit, area );
- area->reparent( wrap, QPoint( 0, 0 ), true );
+ pSplit->insertWidget( pSplit->indexOf( area ) + 1, wrap );
+ wrap->setVisible( true );
+ wrap->addWidget( area );
pSplit->setSizes( szList );
return;
QWidgetList moveList;
- const QObjectList* lst = pWid->children();
- if ( lst )
+ const QObjectList& lst = pWid->children();
+ bool found = false;
+ for ( QObjectList::const_iterator it = lst.begin(); it != lst.end(); ++it )
{
- bool found = false;
- for ( QObjectListIt it( *lst ); it.current(); ++it )
- {
- if ( found && ( it.current()->inherits( "QSplitter" ) ||
- it.current()->inherits( "QtxWorkstackArea" ) ) )
- moveList.append( (QWidget*)it.current() );
- if ( it.current() == after )
- found = true;
- }
+ if ( found && ( (*it)->inherits( "QSplitter" ) ||
+ (*it)->inherits( "QtxWorkstackArea" ) ) )
+ moveList.append( (QWidget*)(*it) );
+ if ( *it == after )
+ found = true;
}
QMap<QWidget*, bool> map;
- for ( QWidgetListIt it( moveList ); it.current(); ++it )
+ for ( QWidgetList::iterator it = moveList.begin(); it != moveList.end(); ++it )
{
- map.insert( it.current(), it.current()->isVisibleTo( it.current()->parentWidget() ) );
- it.current()->reparent( 0, QPoint( 0, 0 ), false );
+ map.insert( *it, (*it)->isVisibleTo( (*it)->parentWidget() ) );
+ (*it)->setParent( 0 );
+ (*it)->hide();
}
- wid->reparent( pWid, QPoint( 0, 0 ), true );
+ wid->setParent( pWid );
- for ( QWidgetListIt itr( moveList ); itr.current(); ++itr )
- itr.current()->reparent( pWid, QPoint( 0, 0 ), map.contains( itr.current() ) ? map[itr.current()] : false );
+ for ( QWidgetList::iterator itr = moveList.begin(); itr != moveList.end(); ++itr )
+ {
+ (*itr)->setParent( pWid );
+ (*itr)->setShown( map.contains( *itr ) ? map[*itr] : false );
+ }
}
/*!
cur->setFocus();
}
- QApplication::postEvent( this, new QCustomEvent( QEvent::User ) );
+ QApplication::postEvent( this, new QEvent( QEvent::User ) );
}
/*!
if ( myArea != area )
return;
- QPtrList<QtxWorkstackArea> lst;
+ QList<QtxWorkstackArea*> lst;
areas( mySplit, lst, true );
- int idx = lst.find( area );
+ int idx = lst.indexOf( area );
if ( idx == -1 )
return;
if ( newArea && newArea->activeWidget() )
newArea->activeWidget()->setFocus();
- QApplication::postEvent( this, new QCustomEvent( QEvent::User ) );
+ QApplication::postEvent( this, new QEvent( QEvent::User ) );
}
/*!
*/
void QtxWorkstack::onContextMenuRequested( QWidget* w, QPoint p )
{
- QtxWorkstackArea* anArea = ::qt_cast<QtxWorkstackArea*>( (QObject*)sender() );
+ QtxWorkstackArea* anArea = ::qobject_cast<QtxWorkstackArea*>( (QObject*)sender() );
if ( !anArea )
anArea = activeArea();
myWorkWin = w;
myWorkArea = anArea;
- QPopupMenu* pm = new QPopupMenu();
+ QMenu* pm = new QMenu();
if ( lst.count() > 1 )
{
- myActionsMap[SplitVertical]->addTo( pm );
- myActionsMap[SplitHorizontal]->addTo( pm );
- pm->insertSeparator();
+ pm->addAction( myActionsMap[SplitVertical] );
+ pm->addAction( myActionsMap[SplitHorizontal] );
+ pm->addSeparator();
}
if ( w )
{
- myActionsMap[Close]->addTo( pm );
- myActionsMap[Rename]->addTo( pm );
+ pm->addAction( myActionsMap[Close] );
+ pm->addAction( myActionsMap[Rename] );
}
Qtx::simplifySeparators( pm );
- if ( pm->count() )
+ if ( !pm->actions().isEmpty() )
pm->exec( p );
delete pm;
myWorkArea = 0;
}
-/*!
- Custom child event handler, inserts widget to active or current area
-*/
-void QtxWorkstack::childEvent( QChildEvent* e )
+QWidget* QtxWorkstack::addWindow( QWidget* w, Qt::WindowFlags f )
{
- if ( e->inserted() && e->child()->isWidgetType() )
- {
- QWidget* w = (QWidget*)e->child();
- if ( w && w != mySplit )
- {
- targetArea()->insertWidget( w );
- return;
- }
- }
- QWidget::childEvent( e );
+ if ( !w )
+ return 0;
+
+ return targetArea()->insertWidget( w, -1, f );
}
/*!
Handler of custom events
*/
-void QtxWorkstack::customEvent( QCustomEvent* e )
+void QtxWorkstack::customEvent( QEvent* e )
{
updateState();
}
\param splitList - list to be filled with
\param rec - recursive search of children
*/
-void QtxWorkstack::splitters( QSplitter* split, QPtrList<QSplitter>& splitList, const bool rec ) const
+void QtxWorkstack::splitters( QSplitter* split, QList<QSplitter*>& splitList, const bool rec ) const
{
if ( !split )
return;
- const QObjectList* objs = split->children();
- if ( objs )
+ const QObjectList& objs = split->children();
+ for ( QObjectList::const_iterator it = objs.begin(); it != objs.end(); ++it )
{
- for ( QObjectListIt it( *objs ); it.current(); ++it )
- {
- if ( rec )
- splitters( (QSplitter*)it.current(), splitList, rec );
- if ( it.current()->inherits( "QSplitter" ) )
- splitList.append( (QSplitter*)it.current() );
- }
+ if ( rec )
+ splitters( (QSplitter*)*it, splitList, rec );
+ if ( (*it)->inherits( "QSplitter" ) )
+ splitList.append( (QSplitter*)*it );
}
}
\param areaList - list to be filled with
\param rec - recursive search of children
*/
-void QtxWorkstack::areas( QSplitter* split, QPtrList<QtxWorkstackArea>& areaList, const bool rec ) const
+void QtxWorkstack::areas( QSplitter* split, QList<QtxWorkstackArea*>& areaList, const bool rec ) const
{
if ( !split )
return;
- const QObjectList* objs = split->children();
- if ( objs )
+ const QObjectList& objs = split->children();
+ for ( QObjectList::const_iterator it = objs.begin(); it != objs.end(); ++it )
{
- for ( QObjectListIt it( *objs ); it.current(); ++it )
- {
- if ( it.current()->inherits( "QtxWorkstackArea" ) )
- areaList.append( (QtxWorkstackArea*)it.current() );
- else if ( rec && it.current()->inherits( "QSplitter" ) )
- areas( (QSplitter*)it.current(), areaList, rec );
- }
+ if ( (*it)->inherits( "QtxWorkstackArea" ) )
+ areaList.append( (QtxWorkstackArea*)*it );
+ else if ( rec && (*it)->inherits( "QSplitter" ) )
+ areas( (QSplitter*)*it, areaList, rec );
}
}
area = currentArea();
if ( !area )
{
- QPtrList<QtxWorkstackArea> lst;
+ QList<QtxWorkstackArea*> lst;
areas( mySplit, lst );
if ( !lst.isEmpty() )
area = lst.first();
*/
QtxWorkstackArea* QtxWorkstack::neighbourArea( QtxWorkstackArea* area ) const
{
- QPtrList<QtxWorkstackArea> lst;
+ QList<QtxWorkstackArea*> lst;
areas( mySplit, lst, true );
- int pos = lst.find( area );
+ int pos = lst.indexOf( area );
if ( pos < 0 )
return 0;
QtxWorkstackArea* QtxWorkstack::areaAt( const QPoint& p ) const
{
QtxWorkstackArea* area = 0;
- QPtrList<QtxWorkstackArea> lst;
+ QList<QtxWorkstackArea*> lst;
areas( mySplit, lst, true );
- for ( QPtrListIterator<QtxWorkstackArea> it( lst ); it.current() && !area; ++it )
+ for ( QList<QtxWorkstackArea*>::iterator it = lst.begin(); it != lst.end() && !area; ++it )
{
- QtxWorkstackArea* cur = it.current();
+ QtxWorkstackArea* cur = *it;
QRect r = cur->geometry();
if ( cur->parentWidget() )
r = QRect( cur->parentWidget()->mapToGlobal( r.topLeft() ), r.size() );
*/
void QtxWorkstack::updateState( QSplitter* split )
{
- QPtrList<QSplitter> recList;
+ QList<QSplitter*> recList;
splitters( split, recList, false );
- for ( QPtrListIterator<QSplitter> itr( recList ); itr.current(); ++itr )
- updateState( itr.current() );
+ for ( QList<QSplitter*>::iterator itr = recList.begin(); itr != recList.end(); ++itr )
+ updateState( *itr );
- QPtrList<QSplitter> splitList;
+ QList<QSplitter*> splitList;
splitters( split, splitList, false );
- QPtrList<QtxWorkstackArea> areaList;
+ QList<QtxWorkstackArea*> areaList;
areas( split, areaList, false );
bool vis = false;
- for ( QPtrListIterator<QtxWorkstackArea> it( areaList ); it.current(); ++it )
+ for ( QList<QtxWorkstackArea*>::iterator it = areaList.begin(); it != areaList.end(); ++it )
{
- if ( it.current()->isEmpty() )
- it.current()->hide();
+ if ( (*it)->isEmpty() )
+ (*it)->hide();
else
{
- it.current()->show();
+ (*it)->show();
vis = true;
}
}
if ( split == mySplit )
return;
- for ( QPtrListIterator<QSplitter> iter( splitList ); iter.current() && !vis; ++iter )
- vis = iter.current()->isVisibleTo( iter.current()->parentWidget() );
+ for ( QList<QSplitter*>::iterator iter = splitList.begin(); iter != splitList.end() && !vis; ++iter )
+ vis = (*iter)->isVisibleTo( (*iter)->parentWidget() );
if ( areaList.isEmpty() && splitList.isEmpty() )
delete split;
if ( !split )
return;
- const QObjectList* objs = split->children();
- if ( objs )
+ const QObjectList& objs = split->children();
+
+ QString sizesStr;
+ QList<int> sizes = split->sizes();
+ for ( QList<int>::iterator sIt = sizes.begin(); sIt != sizes.end(); ++sIt )
{
- // make up a sizes string: integer values are separated by ':' char
- QValueList<int> sizes = split->sizes();
- QString sizesStr;
- for ( QValueList<int>::Iterator sIt = sizes.begin(); sIt != sizes.end(); ++sIt ) {
- if ( *sIt > 1 ) // size 1 pixel usually means empty Workstack area, which will NOT be re-created,
- sizesStr += QString( ":%1" ).arg( *sIt ); // so we don't need to store its size
- }
- if ( !sizesStr.isEmpty() ) // cut the first ':'
- sizesStr = sizesStr.right( sizesStr.length()-1 );
-
- // count all QSplitter-s and QtxWorkstackArea-s
- // int nChilds( 0 );
- // QObjectListIt it( *objs );
- // for ( ; it.current(); ++it )
- // {
- // if ( it.current()->inherits( "QSplitter" ) ||
- // it.current()->inherits( "QtxWorkstackArea" ) )
- // nChilds++;
- // }
-
- info += QString( "(splitter orientation=%1 sizes=%3 " ).arg( split->orientation() ).arg( sizesStr );
+ if ( *sIt > 1 ) // size 1 pixel usually means empty Workstack area, which will NOT be re-created,
+ sizesStr += QString( ":%1" ).arg( *sIt ); // so we don't need to store its size
+ }
+
+ if ( !sizesStr.isEmpty() ) // cut the first ':'
+ sizesStr = sizesStr.right( sizesStr.length() - 1 );
+
+ info += QString( "(splitter orientation=%1 sizes=%3 " ).arg( split->orientation() ).arg( sizesStr );
- for ( QObjectListIt it( *objs ); it.current(); ++it )
+ for ( QObjectList::const_iterator it = objs.begin(); it != objs.end(); ++it )
+ {
+ if ( (*it)->inherits( "QSplitter" ) )
+ splitterInfo( (QSplitter*)*it, info );
+ else if ( (*it)->inherits( "QtxWorkstackArea" ) )
{
- if ( it.current()->inherits( "QSplitter" ) )
- splitterInfo( (QSplitter*)it.current(), info );
- else if ( it.current()->inherits( "QtxWorkstackArea" ) ) {
- QtxWorkstackArea* area = (QtxWorkstackArea*)it.current();
- if ( area->isEmpty() )
- continue;
- info += QString( "(views active='%1'" ).arg( area->activeWidget()->name() );
- QWidgetList views = area->widgetList();
- for ( QWidgetListIt wIt( views ); wIt.current(); ++wIt )
- info += QString( " '%1'" ).arg( wIt.current()->name() );
- info += ')';
- }
+ QtxWorkstackArea* area = (QtxWorkstackArea*)*it;
+ if ( area->isEmpty() )
+ continue;
+ info += QString( "(views active='%1'" ).arg( area->activeWidget()->objectName() );
+ QWidgetList views = area->widgetList();
+ for ( QWidgetList::iterator wIt = views.begin(); wIt != views.end(); ++wIt )
+ info += QString( " '%1'" ).arg( (*wIt)->objectName() );
+ info += ')';
}
}
+
info += ')';
+ printf( (const char*)QString( info + '\n' ).toLatin1() );
}
*/
QString getValue( const QString& str, const QString& valName )
{
- int i = str.find( valName );
- if ( i != -1 ) {
- int equal_i = str.find( '=', i );
- if ( equal_i != -1 ) {
- int space_i = str.find( ' ', ++equal_i );
+ int i = str.indexOf( valName );
+ if ( i != -1 )
+ {
+ int equal_i = str.indexOf( '=', i );
+ if ( equal_i != -1 )
+ {
+ int space_i = str.indexOf( ' ', ++equal_i );
if ( space_i != -1 )
- return str.mid( equal_i, space_i-equal_i );
+ return str.mid( equal_i, space_i - equal_i );
}
}
- return QString( "" );
+ return QString();
}
/*
ok = ( params.left( 8 ) == "splitter" );
if ( !ok ) return ok;
// 3. has children? = '(' is found
- int i = params.find( '(' );
+ int i = params.indexOf( '(' );
ok = i != -1;
if ( !ok ) return ok;
params = params.left( i ); // cut all children, they will be checked later
{
nOpen++;
if ( nOpen == 1 )
- start = i;
+ start = i;
}
else if ( str[i] == ')' )
{
nOpen--;
if ( nOpen == 0 )
- lst.append( str.mid( start, i-start+1 ) );
+ lst.append( str.mid( start, i-start+1 ) );
}
i++;
}
QRegExp exp( "\\s'\\w+'" );
int start = 0; // start index of view name in the string
int num = 0 ; // index of found match
- while ( ( start = exp.search( str, start ) ) != -1 && num < i ) {
+ while ( ( start = exp.indexIn( str, start ) ) != -1 && num < i )
+ {
start += exp.matchedLength();
num ++;
}
if ( start != -1 ) // +2 and -3 avoid starting space and starting and ending ' symbols
- return str.mid( start+2, exp.matchedLength()-3 );
+ return str.mid( start + 2, exp.matchedLength() - 3 );
- return QString( "" );
+ return QString();
}
// returns widget with given name
QWidget* getView( const QWidget* parent, const QString& aName )
{
QWidget* view = 0;
- QObjectList *l = parent->topLevelWidget()->queryList( "QWidget", aName, false, true );
- if ( !l->isEmpty() )
- view = ::qt_cast<QWidget*>( l->first() );
- delete l;
+ QList<QWidget*> l = qFindChildren<QWidget*>( parent->topLevelWidget(), aName );
+ if ( !l.isEmpty() )
+ view = ::qobject_cast<QWidget*>( l.first() );
return view;
}
/*!
Installs a splitter described by given parameters string
*/
-void QtxWorkstack::setSplitter( QSplitter* splitter, const QString& parameters, QMap< QSplitter*, QValueList<int> >& sMap )
+void QtxWorkstack::setSplitter( QSplitter* splitter, const QString& parameters, QMap<QSplitter*, QList<int> >& sMap )
{
+ printf( QString( parameters + '\n' ).toLatin1() );
if ( !::checkFormat( parameters ) ) {
printf( "\nInvalid format of workstack parameters. Positions of viewers can not be restored.\n" );
return;
::cutBrackets( params );
// get splitter sizes and store it in the map for future setting
- QValueList<int> sizes;
- QStringList sizesLst = QStringList::split( ':', ::getValue( params, "sizes" ) );
+ QList<int> sizes;
+ QStringList sizesLst = ::getValue( params, "sizes" ).split( ':', QString::SkipEmptyParts );
QStringList::Iterator it;
for ( it = sizesLst.begin(); it != sizesLst.end(); ++it )
sizes.append( (*it).toInt() );
splitter->setOrientation( (Qt::Orientation)orient );
// get children
- QString options = params.left( params.find( '(' ) );
+ QString options = params.left( params.indexOf( '(' ) );
QString childrenStr = params.right( params.length()-options.length() );
QStringList children = ::getChildren( childrenStr );
// for ( QStringList::Iterator tit = children.begin(); tit != children.end(); ++tit )
// printf (" |-> child = [%s]\n", (*tit).latin1() );
- for ( QStringList::Iterator it = children.begin(); it != children.end(); ++it ) {
- if ( (*it).startsWith( "(splitter" ) ) {
+ for ( it = children.begin(); it != children.end(); ++it )
+ {
+ if ( (*it).startsWith( "(splitter" ) )
+ {
QSplitter* newSplitter = new QSplitter( splitter );
setSplitter( newSplitter, *it, sMap );
}
- else if ( (*it).startsWith( "(views" ) ) {
+ else if ( (*it).startsWith( "(views" ) )
+ {
QtxWorkstackArea* newArea = createArea( splitter );
QString activeViewName = ::getValue( *it, "active" );
- QWidget* activeView( 0 );
+ QWidget* activeView = 0;
activeViewName = activeViewName.mid( 1, activeViewName.length()-2 ); // chop off ' symbols
int i = 0;
QString viewName = ::getViewName( *it, i );
- while ( !viewName.isEmpty() ) {
- if ( QWidget* view = ::getView( splitter, viewName ) ) {
- newArea->insertWidget( view );
- if ( activeViewName == view->name() )
- activeView = view;
- }
- viewName = ::getViewName( *it, ++i );
+ while ( !viewName.isEmpty() )
+ {
+ if ( QWidget* view = ::getView( splitter, viewName ) )
+ {
+ newArea->insertWidget( view );
+ if ( activeViewName == view->objectName() )
+ activeView = view;
+ }
+ viewName = ::getViewName( *it, ++i );
}
if ( activeView )
newArea->setActiveWidget( activeView );
QtxWorkstack& QtxWorkstack::operator<<( const QString& parameters )
{
// clear the main splitter - remove all child splitters and empty areas from it
- QPtrList<QSplitter> splitList;
- QPtrList<QtxWorkstackArea> areaList;
+ QList<QSplitter*> splitList;
+ QList<QtxWorkstackArea*> areaList;
splitters( mySplit, splitList, false );
areas( mySplit, areaList, false );
- for ( QPtrListIterator<QSplitter> iter( splitList ); iter.current(); ++iter )
- delete iter.current();
- for ( QPtrListIterator<QtxWorkstackArea> it( areaList ); it.current(); ++it )
- if ( it.current()->isEmpty() )
- delete it.current();
+ for ( QList<QSplitter*>::iterator iter = splitList.begin(); iter != splitList.end(); ++iter )
+ delete *iter;
+
+ for ( QList<QtxWorkstackArea*>::iterator it = areaList.begin(); it != areaList.end(); ++it )
+ {
+ if ( (*it)->isEmpty() )
+ delete *it;
+ }
// restore splitter recursively
- QMap< QSplitter*, QValueList<int> > sMap;
+ QMap< QSplitter*, QList<int> > sMap;
setSplitter( mySplit, parameters, sMap );
// now mySplit may contains empty area (where all views were located before restoring)
// in order setSize to work correctly we have to exclude this area
areaList.clear();
areas( mySplit, areaList, false );
- for ( QPtrListIterator<QtxWorkstackArea> delIt( areaList ); delIt.current(); ++delIt )
- if ( delIt.current()->isEmpty() )
- delete delIt.current();
+ for ( QList<QtxWorkstackArea*>::iterator delIt = areaList.begin(); delIt != areaList.end(); ++delIt )
+ {
+ if ( (*delIt)->isEmpty() )
+ delete *delIt;
+ }
- qApp->processEvents();
+ QApplication::instance()->processEvents();
// restore splitters' sizes (map of sizes is filled in setSplitters)
- for ( QMap< QSplitter*, QValueList<int> >::Iterator itm = sMap.begin(); itm != sMap.end(); ++itm )
- itm.key()->setSizes( itm.data() );
+ for ( QMap< QSplitter*, QList<int> >::iterator itm = sMap.begin(); itm != sMap.end(); ++itm )
+ itm.key()->setSizes( itm.value() );
return (*this);
}
}
+class QtxWorkstackArea::WidgetEvent : public QEvent
+{
+public:
+ WidgetEvent( Type t, QWidget* w = 0 ) : QEvent( t ), myWidget( w ) {};
+
+ QWidget* widget() const { return myWidget; }
+
+private:
+ QWidget* myWidget;
+};
+
/*!
Constructor
*/
QtxWorkstackArea::QtxWorkstackArea( QWidget* parent )
-: QWidget( parent )
+: QFrame( parent )
{
+ setFrameStyle( QFrame::Panel | QFrame::Sunken );
+
QVBoxLayout* base = new QVBoxLayout( this );
+ base->setMargin( frameWidth() );
- QHBox* top = new QHBox( this );
+ QWidget* top = new QWidget( this );
base->addWidget( top );
+ QHBoxLayout* tl = new QHBoxLayout( top );
+ tl->setMargin( 0 );
+
myBar = new QtxWorkstackTabBar( top );
+ tl->addWidget( myBar, 1 );
QPushButton* close = new QPushButton( top );
- close->setPixmap( style().stylePixmap( QStyle::SP_TitleBarCloseButton ) );
+ close->setIcon( style()->standardIcon( QStyle::SP_TitleBarCloseButton ) );
close->setAutoDefault( true );
close->setFlat( true );
myClose = close;
+ tl->addWidget( myClose );
- top->setStretchFactor( myBar, 1 );
-
- myStack = new QWidgetStack( this );
+ myStack = new QStackedWidget( this );
base->addWidget( myStack, 1 );
connect( myClose, SIGNAL( clicked() ), this, SLOT( onClose() ) );
- connect( myBar, SIGNAL( selected( int ) ), this, SLOT( onSelected( int ) ) );
+ connect( myBar, SIGNAL( currentChanged( int ) ), this, SLOT( onCurrentChanged( int ) ) );
connect( myBar, SIGNAL( dragActiveTab() ), this, SLOT( onDragActiveTab() ) );
connect( myBar, SIGNAL( contextMenuRequested( QPoint ) ), this, SLOT( onContextMenuRequested( QPoint ) ) );
updateActiveState();
- qApp->installEventFilter( this );
+ QApplication::instance()->installEventFilter( this );
}
/*!
*/
QtxWorkstackArea::~QtxWorkstackArea()
{
- qApp->removeEventFilter( this );
+ QApplication::instance()->removeEventFilter( this );
}
/*!
{
bool res = false;
for ( WidgetInfoMap::ConstIterator it = myInfo.begin(); it != myInfo.end() && !res; ++it )
- res = it.data().vis;
+ res = it.value().vis;
return !res;
}
\param wid - widget
\param idx - index
*/
-void QtxWorkstackArea::insertWidget( QWidget* wid, const int idx )
+QWidget* QtxWorkstackArea::insertWidget( QWidget* wid, const int idx, Qt::WindowFlags f )
{
if ( !wid )
- return;
+ return 0;
- int pos = myList.find( wid );
+ int pos = myList.indexOf( wid );
if ( pos != -1 && ( pos == idx || ( idx < 0 && pos == (int)myList.count() - 1 ) ) )
- return;
+ return 0;
- myList.removeRef( wid );
+ myList.removeAll( wid );
pos = idx < 0 ? myList.count() : idx;
- myList.insert( QMIN( pos, (int)myList.count() ), wid );
+ myList.insert( qMin( pos, (int)myList.count() ), wid );
if ( !myInfo.contains( wid ) )
{
- QtxWorkstackChild* child = new QtxWorkstackChild( wid, myStack );
+ QtxWorkstackChild* child = new QtxWorkstackChild( wid, myStack, f );
myChild.insert( wid, child );
myInfo.insert( wid, WidgetInfo() );
myInfo[wid].id = generateId();
setWidgetActive( wid );
wid->setFocus();
+
+ return myChild[wid];
}
/*!
*/
void QtxWorkstackArea::onContextMenuRequested( QPoint p )
{
- const QtxWorkstackTabBar* bar = ::qt_cast<const QtxWorkstackTabBar*>( sender() );
+ const QtxWorkstackTabBar* bar = ::qobject_cast<const QtxWorkstackTabBar*>( sender() );
if ( !bar )
return;
QWidget* wid = 0;
- QTab* tab = myBar->tabAt( tabAt( p ) );
- if ( tab )
- wid = widget( tab->identifier() );
+ int idx = tabAt( p );
+ if ( idx != -1 )
+ wid = widget( myBar->tabId( idx ) );
emit contextMenuRequested( wid, p );
}
if ( !myList.contains( wid ) )
return;
- if ( myBar->tab( widgetId( wid ) ) )
- myBar->removeTab( myBar->tab( widgetId( wid ) ) );
+ if ( myBar->indexOf( widgetId( wid ) ) != -1 )
+ myBar->removeTab( myBar->indexOf( widgetId( wid ) ) );
+
myStack->removeWidget( child( wid ) );
- myList.remove( wid );
+ myList.removeAll( wid );
myInfo.remove( wid );
myChild.remove( wid );
- if( del )
+ if ( del )
{
delete child( wid );
- if( myList.isEmpty() )
+ if ( myList.isEmpty() )
delete this;
else
updateState();
QWidgetList QtxWorkstackArea::widgetList() const
{
QWidgetList lst;
- for ( QWidgetListIt it( myList ); it.current(); ++it )
+ for ( QWidgetList::const_iterator it = myList.begin(); it != myList.end(); ++it )
{
- if ( widgetVisibility( it.current() ) )
- lst.append( it.current() );
+ if ( widgetVisibility( *it ) )
+ lst.append( *it );
}
return lst;
}
*/
QWidget* QtxWorkstackArea::activeWidget() const
{
- return widget( myBar->currentTab() );
+ return widget( myBar->tabId( myBar->currentIndex() ) );
}
/*!
*/
void QtxWorkstackArea::setActiveWidget( QWidget* wid )
{
- myBar->setCurrentTab( widgetId( wid ) );
+ myBar->setCurrentIndex( myBar->indexOf( widgetId( wid ) ) );
}
/*!
/*!
Shows area
*/
-void QtxWorkstackArea::show()
+void QtxWorkstackArea::setVisible( bool on )
{
QMap<QWidget*, bool> map;
- for ( QWidgetListIt it( myList ); it.current(); ++it )
+ for ( QWidgetList::iterator it = myList.begin(); it != myList.end(); ++it )
{
- map.insert( it.current(), isBlocked( it.current() ) );
- setBlocked( it.current(), true );
+ map.insert( *it, isBlocked( *it ) );
+ setBlocked( *it, true );
}
- QWidget::show();
+ QFrame::setVisible( on );
- for ( QWidgetListIt itr( myList ); itr.current(); ++itr )
- setBlocked( itr.current(), map.contains( itr.current() ) ? map[itr.current()] : false );
-}
-
-/*!
- Hides area
-*/
-void QtxWorkstackArea::hide()
-{
- QMap<QWidget*, bool> map;
- for ( QWidgetListIt it( myList ); it.current(); ++it )
- {
- map.insert( it.current(), isBlocked( it.current() ) );
- setBlocked( it.current(), true );
- }
-
- QWidget::hide();
-
- for ( QWidgetListIt itr( myList ); itr.current(); ++itr )
- setBlocked( itr.current(), map.contains( itr.current() ) ? map[itr.current()] : false );
+ for ( QWidgetList::iterator itr = myList.begin(); itr != myList.end(); ++itr )
+ setBlocked( *itr, map.contains( *itr ) ? map[*itr] : false );
}
/*!
wid = wid->parentWidget();
}
if ( ok )
- QApplication::postEvent( this, new QCustomEvent( (QEvent::Type)( e->type() == QEvent::FocusIn ? ActivateWidget : FocusWidget ) ) );
+ QApplication::postEvent( this, new WidgetEvent( (QEvent::Type)( e->type() == QEvent::FocusIn ? ActivateWidget : FocusWidget ) ) );
}
}
return false;
*/
QRect QtxWorkstackArea::floatTab( const int idx ) const
{
- return myBar->tabRect( idx );
+ QRect r = myBar->tabRect( idx );
+ return QRect( myBar->mapToGlobal( r.topLeft() ), r.size() );
}
/*!
\return tab covering point
\param p - point
*/
-int QtxWorkstackArea::tabAt( const QPoint& p ) const
+int QtxWorkstackArea::tabAt( const QPoint& pnt ) const
{
int idx = -1;
+ QPoint p = myBar->mapFromGlobal( pnt );
for ( int i = 0; i < myBar->count() && idx == -1; i++ )
{
QRect r = myBar->tabRect( i );
/*!
Event handler for custom events
*/
-void QtxWorkstackArea::customEvent( QCustomEvent* e )
+void QtxWorkstackArea::customEvent( QEvent* e )
{
- switch ( e->type() )
+ WidgetEvent* we = (WidgetEvent*)e;
+
+ switch ( we->type() )
{
case ActivateWidget:
emit activated( activeWidget() );
{
if ( !activeWidget()->focusWidget() )
activeWidget()->setFocus();
- else {
- if ( activeWidget()->focusWidget()->hasFocus()) {
- QFocusEvent in(QEvent::FocusIn);
- QApplication::sendEvent(this, &in);
- }
+ else
+ {
+ if ( activeWidget()->focusWidget()->hasFocus() )
+ {
+ QFocusEvent in( QEvent::FocusIn );
+ QApplication::sendEvent( this, &in );
+ }
else
activeWidget()->focusWidget()->setFocus();
}
}
break;
case RemoveWidget:
- removeWidget( (QWidget*)e->data() );
+ removeWidget( we->widget() );
break;
}
}
*/
void QtxWorkstackArea::focusInEvent( QFocusEvent* e )
{
- QWidget::focusInEvent( e );
+ QFrame::focusInEvent( e );
emit activated( activeWidget() );
}
*/
void QtxWorkstackArea::mousePressEvent( QMouseEvent* e )
{
- QWidget::mousePressEvent( e );
+ QFrame::mousePressEvent( e );
emit activated( activeWidget() );
}
/*!
SLOT: called if tab page is selected
*/
-void QtxWorkstackArea::onSelected( int id )
+void QtxWorkstackArea::onCurrentChanged( int )
{
updateCurrent();
QWidget* wid = 0;
for ( ChildMap::ConstIterator it = myChild.begin(); it != myChild.end() && !wid; ++it )
{
- if ( it.data() == child )
+ if ( it.value() == child )
wid = it.key();
}
myChild.remove( wid );
- QApplication::postEvent( this, new QCustomEvent( (QEvent::Type)RemoveWidget, wid ) );
+ QApplication::postEvent( this, new WidgetEvent( (QEvent::Type)RemoveWidget, wid ) );
}
/*!
void QtxWorkstackArea::updateCurrent()
{
QMap<QWidget*, bool> map;
- for ( QWidgetListIt it( myList ); it.current(); ++it )
+ for ( QWidgetList::iterator it = myList.begin(); it != myList.end(); ++it )
{
- map.insert( it.current(), isBlocked( it.current() ) );
- setBlocked( it.current(), true );
+ map.insert( *it, isBlocked( *it ) );
+ setBlocked( *it, true );
}
- myStack->raiseWidget( myBar->currentTab() );
+ myStack->setCurrentWidget( child( widget( myBar->tabId( myBar->currentIndex() ) ) ) );
- for ( QWidgetListIt itr( myList ); itr.current(); ++itr )
- setBlocked( itr.current(), map.contains( itr.current() ) ? map[itr.current()] : false );
+ for ( QWidgetList::iterator itr = myList.begin(); itr != myList.end(); ++itr )
+ setBlocked( *itr, map.contains( *itr ) ? map[*itr] : false );
}
/*!
*/
void QtxWorkstackArea::updateTab( QWidget* wid )
{
- QTab* tab = myBar->tab( widgetId( wid ) );
- if ( !tab )
+ int idx = myBar->indexOf( widgetId( wid ) );
+ if ( idx < 0 )
return;
- QIconSet icoSet;
- if ( wid->icon() )
- {
- QPixmap pix = *wid->icon();
- pix.convertFromImage( pix.convertToImage().smoothScale( pix.width(), 16, QImage::ScaleMin ) );
- icoSet = QIconSet( pix );
- }
-
- tab->setIconSet( icoSet );
- tab->setText( wid->caption() );
+ myBar->setTabIcon( idx, wid->windowIcon() );
+ myBar->setTabText( idx, wid->windowTitle() );
}
/*!
QWidget* wid = 0;
for ( WidgetInfoMap::ConstIterator it = myInfo.begin(); it != myInfo.end() && !wid; ++it )
{
- if ( it.data().id == id )
+ if ( it.value().id == id )
wid = it.key();
}
return wid;
if ( id < 0 )
return;
- myBar->setCurrentTab( id );
+ myBar->setCurrentIndex( myBar->indexOf( id ) );
}
/*!
*/
void QtxWorkstackArea::updateState()
{
- bool updBar = myBar->isUpdatesEnabled();
- bool updStk = myStack->isUpdatesEnabled();
+ bool updBar = myBar->updatesEnabled();
+ bool updStk = myStack->updatesEnabled();
myBar->setUpdatesEnabled( false );
myStack->setUpdatesEnabled( false );
QWidget* prev = activeWidget();
int idx = 0;
- for ( QWidgetListIt it( myList ); it.current(); ++it )
+ for ( QWidgetList::iterator it = myList.begin(); it != myList.end(); ++it )
{
- QWidget* wid = it.current();
+ QWidget* wid = *it;
int id = widgetId( wid );
if ( id < 0 )
bool vis = widgetVisibility( wid );
- if ( myBar->tab( id ) && ( !vis || myBar->indexOf( id ) != idx ) )
- myBar->removeTab( myBar->tab( id ) );
+ int cIdx = myBar->indexOf( id );
+ if ( cIdx != -1 && ( !vis || myBar->indexOf( id ) != idx ) )
+ myBar->removeTab( cIdx );
- if ( !myBar->tab( id ) && vis )
- {
- QTab* tab = new QTab( wid->caption() );
- myBar->insertTab( tab, idx );
- tab->setIdentifier( id );
- }
+ if ( myBar->indexOf( id ) == -1 && vis )
+ myBar->setTabId( myBar->insertTab( idx, wid->windowTitle() ), id );
updateTab( wid );
if ( !vis )
myStack->removeWidget( cont );
- else if ( !myStack->widget( id ) )
- myStack->addWidget( cont, id );
+ else if ( myStack->indexOf( cont ) < 0 )
+ myStack->addWidget( cont );
if ( vis )
idx++;
}
int curId = widgetId( prev );
- if ( !myBar->tab( curId ) )
+ if ( myBar->indexOf( curId ) < 0 )
{
QWidget* wid = 0;
- int pos = myList.find( prev );
+ int pos = myList.indexOf( prev );
for ( int i = pos - 1; i >= 0 && !wid; i-- )
{
if ( widgetVisibility( myList.at( i ) ) )
curId = widgetId( wid );
}
- myBar->setCurrentTab( curId );
+ myBar->setCurrentIndex( myBar->indexOf( curId ) );
myBar->blockSignals( block );
{
QMap<int, int> map;
- for ( WidgetInfoMap::ConstIterator it = myInfo.begin(); it != myInfo.end(); ++it )
- map.insert( it.data().id, 0 );
+ for ( WidgetInfoMap::const_iterator it = myInfo.begin(); it != myInfo.end(); ++it )
+ map.insert( it.value().id, 0 );
int id = 0;
while ( map.contains( id ) )
/*!
Constructor
*/
-QtxWorkstackChild::QtxWorkstackChild( QWidget* wid, QWidget* parent )
-: QHBox( parent ),
+QtxWorkstackChild::QtxWorkstackChild( QWidget* wid, QWidget* parent, Qt::WindowFlags f )
+: QWidget( parent ),
myWidget( wid )
{
- myWidget->reparent( this, QPoint( 0, 0 ), myWidget->isVisibleTo( myWidget->parentWidget() ) );
+ myWidget->setParent( this, f );
myWidget->installEventFilter( this );
+ QVBoxLayout* base = new QVBoxLayout( this );
+ base->addWidget( myWidget );
connect( myWidget, SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
}
*/
QtxWorkstackChild::~QtxWorkstackChild()
{
- qApp->removeEventFilter( this );
+ QApplication::instance()->removeEventFilter( this );
if ( !widget() )
return;
- widget()->removeEventFilter( this );
- widget()->reparent( 0, QPoint( 0, 0 ), false );
disconnect( widget(), SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) );
+
+ widget()->hide();
+ widget()->removeEventFilter( this );
+
+ widget()->setParent( 0 );
}
/*!
{
if ( o->isWidgetType() )
{
- if ( e->type() == QEvent::CaptionChange || e->type() == QEvent::IconChange )
+ if ( e->type() == QEvent::WindowTitleChange || e->type() == QEvent::WindowIconChange )
emit captionChanged( this );
if ( !e->spontaneous() && ( e->type() == QEvent::Show || e->type() == QEvent::ShowToParent ) )
if ( e->type() == QEvent::FocusIn )
emit activated( this );
}
- return QHBox::eventFilter( o, e );
+ return QWidget::eventFilter( o, e );
}
/*!
*/
void QtxWorkstackChild::childEvent( QChildEvent* e )
{
- if ( e->type() == QEvent::ChildRemoved && e->child() == widget() )
+ if ( e->removed() && e->child() == widget() )
{
myWidget = 0;
deleteLater();
}
- QHBox::childEvent( e );
+ QWidget::childEvent( e );
}
/*!
: QTabBar( parent ),
myId( -1 )
{
+ setDrawBase( true );
+ setElideMode( Qt::ElideNone );
}
/*!
{
}
+int QtxWorkstackTabBar::tabId( const int index ) const
+{
+ QVariant v = tabData( index );
+ if ( !v.canConvert( QVariant::Int ) )
+ return -1;
+ return v.toInt();
+}
+
+void QtxWorkstackTabBar::setTabId( const int index, const int id )
+{
+ setTabData( index, id );
+}
+
+int QtxWorkstackTabBar::indexOf( const int id ) const
+{
+ int index = -1;
+ for ( uint i = 0; i < count() && index < 0; i++ )
+ {
+ if ( tabId( i ) == id )
+ index = i;
+ }
+ return index;
+}
+
/*!
Sets tab bar as active or inactive
\param on - new active state
{
QFont aFont = font();
aFont.setUnderline( on );
- QColorGroup aColGrp;
QPalette aPal = palette();
- if ( !on ) {
- aPal.setColor( QColorGroup::HighlightedText, aColGrp.foreground() );
- aPal.setColor( QColorGroup::Highlight, colorGroup().dark().light( DARK_COLOR_LIGHT ) );
+ if ( !on )
+ {
+ aPal.setColor( QPalette::HighlightedText, aPal.color( QPalette::Foreground ) );
+ aPal.setColor( QPalette::Highlight, aPal.color( QPalette::Dark ).light( DARK_COLOR_LIGHT ) );
setPalette( aPal );
}
- else {
- aPal.setColor( QColorGroup::HighlightedText, aColGrp.highlightedText() );
- aPal.setColor( QColorGroup::Highlight, aColGrp.highlight() );
- unsetPalette();
+ else
+ {
+ aPal.setColor( QPalette::HighlightedText, aPal.color( QPalette::HighlightedText ) );
+ aPal.setColor( QPalette::Highlight, aPal.color( QPalette::Highlight ) );
}
setFont( aFont );
update();
}
-/*!
- \return tab rectangle
- \param idx - tab index
-*/
-QRect QtxWorkstackTabBar::tabRect( const int idx ) const
-{
- QRect r;
- QTab* t = tabAt( idx );
- if ( t )
- {
- r = t->rect();
- r.setLeft( QMAX( r.left(), 0 ) );
-
- int x1 = tabAt( 0 )->rect().left();
- int x2 = tabAt( count() - 1 )->rect().right();
-
- int bw = 0;
- if ( QABS( x2 - x1 ) > width() )
-#if defined QT_VERSION && QT_VERSION >= 0x30300
- bw = 2 * style().pixelMetric( QStyle::PM_TabBarScrollButtonWidth, this );
-#else
- bw = 2 * 16;
-#endif
-
- int limit = width() - bw;
- r.setRight( QMIN( r.right(), limit ) );
-
- r = QRect( mapToGlobal( r.topLeft() ), r.size() );
- }
- return r;
-}
-
/*!
Custom mouse move event handler
*/
void QtxWorkstackTabBar::mouseMoveEvent( QMouseEvent* e )
{
- if ( myId != -1 && !tab( myId )->rect().contains( e->pos() ) )
+ if ( myId != -1 && !tabRect( indexOf( myId ) ).contains( e->pos() ) )
{
myId = -1;
emit dragActiveTab();
{
QTabBar::mousePressEvent( e );
- if ( e->button() == LeftButton )
- myId = currentTab();
+ if ( e->button() == Qt::LeftButton )
+ myId = tabId( currentIndex() );
}
/*!
myId = -1;
- if ( e->button() == RightButton )
+ if ( e->button() == Qt::RightButton )
emit contextMenuRequested( e->globalPos() );
}
/*!
Draws label of tab bar
*/
+/*
void QtxWorkstackTabBar::paintLabel( QPainter* p, const QRect& br, QTab* t, bool has_focus ) const
{
if ( currentTab() != t->identifier() )
}
QTabBar::paintLabel( p, br, t, has_focus );
}
+*/
/*!
Constructor
myWS( ws ),
myTab( -1 ),
myArea( 0 ),
-myPainter( 0 ),
-myChild( child )
+myChild( child ),
+myTabRect( 0 ),
+myAreaRect( 0 )
{
- qApp->installEventFilter( this );
+ QApplication::instance()->installEventFilter( this );
}
/*!
*/
QtxWorkstackDrag::~QtxWorkstackDrag()
{
- qApp->removeEventFilter( this );
+ QApplication::instance()->removeEventFilter( this );
endDrawRect();
}
*/
void QtxWorkstackDrag::drawRect()
{
- if ( !myPainter || !myArea )
+ if ( !myArea )
return;
QRect r = myArea->floatRect();
- int m = myPainter->pen().width();
+ int m = 2;
r.setTop( r.top() + m + 2 );
r.setLeft( r.left() + m + 2 );
r.setRight( r.right() - m - 2 );
r.setBottom( r.bottom() - m - 2 );
- myPainter->drawRect( r );
+ if ( myAreaRect )
+ {
+ myAreaRect->setGeometry( r );
+ myAreaRect->setVisible( r.isValid() );
+ }
QRect tr = myArea->floatTab( myTab );
+
tr.setTop( tr.top() + m );
tr.setLeft( tr.left() + m );
tr.setRight( tr.right() - m );
tr.setBottom( tr.bottom() - m );
- myPainter->drawRect( tr );
+ if ( myTabRect )
+ {
+ myTabRect->setGeometry( tr );
+ myTabRect->setVisible( tr.isValid() );
+ }
}
/*!
*/
void QtxWorkstackDrag::endDrawRect()
{
- delete myPainter;
- myPainter = 0;
+ delete myAreaRect;
+ myAreaRect = 0;
+
+ delete myTabRect;
+ myTabRect = 0;
}
/*!
*/
void QtxWorkstackDrag::startDrawRect()
{
- if ( myPainter )
- return;
+ if ( !myTabRect )
+ myTabRect = new QRubberBand( QRubberBand::Rectangle );
+
+ myTabRect->hide();
- int scr = QApplication::desktop()->screenNumber( (QWidget*)this );
- QWidget* paint_on = QApplication::desktop()->screen( scr );
+ if ( !myAreaRect )
+ myAreaRect = new QRubberBand( QRubberBand::Rectangle );
- myPainter = new QPainter( paint_on, true );
- myPainter->setPen( QPen( gray, 3 ) );
- myPainter->setRasterOp( XorROP );
+ myAreaRect->hide();
}
#include "Qtx.h"
-#include <qhbox.h>
-#include <qwidget.h>
-#include <qtabbar.h>
-#include <qwidgetlist.h>
+#include <QtCore/qmap.h>
+#include <QtGui/qevent.h>
+#include <QtGui/qframe.h>
+#include <QtGui/qtabbar.h>
class QAction;
class QTabBar;
class QPainter;
class QSplitter;
class QPushButton;
-class QWidgetStack;
+class QRubberBand;
+class QStackedWidget;
class QtxWorkstackArea;
class QtxWorkstackDrag;
void split( const int );
- // STV: Useless function. wid->setFocus() should be used instead.
- // void OnTop( QWidget* wid);
+ QWidget* addWindow( QWidget*, Qt::WindowFlags = 0 );
void Split( QWidget* wid, const Qt::Orientation o, const SplitType type );
void Attract( QWidget* wid1, QWidget* wid2, const bool all );
QtxWorkstack& operator<<( const QString& );
QtxWorkstack& operator>>( QString& );
-signals:
+Q_SIGNALS:
void windowActivated( QWidget* );
-public slots:
+public Q_SLOTS:
void splitVertical();
void splitHorizontal();
-private slots:
+private Q_SLOTS:
void onRename();
void onCloseWindow();
void onDestroyed( QObject* );
void onDeactivated( QtxWorkstackArea* );
protected:
- virtual void childEvent( QChildEvent* );
- virtual void customEvent( QCustomEvent* );
+ virtual void customEvent( QEvent* );
private:
QSplitter* splitter( QtxWorkstackArea* ) const;
- void splitters( QSplitter*, QPtrList<QSplitter>&, const bool = false ) const;
- void areas( QSplitter*, QPtrList<QtxWorkstackArea>&, const bool = false ) const;
+ void splitters( QSplitter*, QList<QSplitter*>&, const bool = false ) const;
+ void areas( QSplitter*, QList<QtxWorkstackArea*>&, const bool = false ) const;
QSplitter* wrapSplitter( QtxWorkstackArea* );
void insertWidget( QWidget*, QWidget*, QWidget* );
const int need_pos, const int splitter_pos );
void splitterInfo( QSplitter*, QString& ) const;
- void setSplitter( QSplitter*, const QString&, QMap< QSplitter*,QValueList<int> >& );
+ void setSplitter( QSplitter*, const QString&, QMap< QSplitter*, QList<int> >& );
private:
QWidget* myWin;
friend class QtxWorkstackDrag;
};
-class QtxWorkstackArea : public QWidget
+class QtxWorkstackArea : public QFrame
{
Q_OBJECT
+ class WidgetEvent;
+
public:
QtxWorkstackArea( QWidget* );
virtual ~QtxWorkstackArea();
bool isEmpty() const;
- void insertWidget( QWidget*, const int = -1 );
+ QWidget* insertWidget( QWidget*, const int = -1, Qt::WindowFlags = 0 );
void removeWidget( QWidget*, const bool = true );
QWidget* activeWidget() const;
int tabAt( const QPoint& ) const;
-signals:
+Q_SIGNALS:
void activated( QWidget* );
void contextMenuRequested( QWidget*, QPoint );
void deactivated( QtxWorkstackArea* );
-public slots:
- virtual void show();
- virtual void hide();
+public Q_SLOTS:
+ virtual void setVisible( bool );
-private slots:
+private Q_SLOTS:
void onClose();
- void onSelected( int );
+ void onCurrentChanged( int );
void onWidgetDestroyed();
void onContextMenuRequested( QPoint );
protected:
- virtual void customEvent( QCustomEvent* );
+ virtual void customEvent( QEvent* );
virtual void focusInEvent( QFocusEvent* );
virtual void mousePressEvent( QMouseEvent* );
private:
QtxWorkstackTabBar* myBar;
QPushButton* myClose;
- QWidgetStack* myStack;
+ QStackedWidget* myStack;
QWidgetList myList;
WidgetInfoMap myInfo;
BlockMap myBlock;
};
-class QtxWorkstackChild : public QHBox
+class QtxWorkstackChild : public QWidget
{
Q_OBJECT
public:
- QtxWorkstackChild( QWidget*, QWidget* = 0 );
+ QtxWorkstackChild( QWidget*, QWidget* = 0, Qt::WindowFlags = 0 );
virtual ~QtxWorkstackChild();
QWidget* widget() const;
virtual bool eventFilter( QObject*, QEvent* );
-signals:
+Q_SIGNALS:
void shown( QtxWorkstackChild* );
void hided( QtxWorkstackChild* );
void activated( QtxWorkstackChild* );
void captionChanged( QtxWorkstackChild* );
-private slots:
+private Q_SLOTS:
void onDestroyed( QObject* );
protected:
QtxWorkstackTabBar( QWidget* = 0 );
virtual ~QtxWorkstackTabBar();
- QRect tabRect( const int ) const;
-
void setActive( const bool );
-signals:
+ int tabId( const int ) const;
+ int indexOf( const int ) const;
+ void setTabId( const int, const int );
+
+Q_SIGNALS:
void dragActiveTab();
void contextMenuRequested( QPoint );
virtual void mouseReleaseEvent( QMouseEvent* );
virtual void contextMenuEvent( QContextMenuEvent* );
- virtual void paintLabel( QPainter*, const QRect&, QTab*, bool ) const;
+// virtual void paintLabel( QPainter*, const QRect&, QTab*, bool ) const;
private:
int myId;
int myTab;
QtxWorkstackArea* myArea;
- QPainter* myPainter;
-
+ QRubberBand* myTabRect;
+ QRubberBand* myAreaRect;
};
#ifdef WIN32
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxWorkstackAction.cxx
-// Author: Sergey TELKOV
-
-#include "QtxWorkstackAction.h"
-
-#include "QtxWorkstack.h"
-
-#include <qpopupmenu.h>
-#include <qwidgetlist.h>
-
-/*!
- Constructor
-*/
-QtxWorkstackAction::QtxWorkstackAction( QtxWorkstack* ws, QObject* parent, const char* name )
-: QtxAction( tr( "Controls windows into workstack" ), tr( "Workstack management" ), 0, parent, name ),
-myFlags( Standard ),
-myWorkstack( ws )
-{
- myItem.insert( VSplit, new QtxAction( tr( "Split the active window on two vertical parts" ),
- tr( "Split vertically" ), 0, this, 0, false ) );
- myItem.insert( HSplit, new QtxAction( tr( "Split the active window on two horizontal parts" ),
- tr( "Split horizontally" ), 0, this, 0, false ) );
-
- connect( myItem[VSplit], SIGNAL( activated() ), ws, SLOT( splitVertical() ) );
- connect( myItem[HSplit], SIGNAL( activated() ), ws, SLOT( splitHorizontal() ) );
-}
-
-/*!
- Destructor
-*/
-QtxWorkstackAction::~QtxWorkstackAction()
-{
-}
-
-/*!
- \return corresponding workstack
-*/
-QtxWorkstack* QtxWorkstackAction::workstack() const
-{
- return myWorkstack;
-}
-
-/*!
- \return set of action flags
-*/
-int QtxWorkstackAction::items() const
-{
- return myFlags;
-}
-
-/*!
- Sets action flags
- \param flags - new set of flags
-*/
-void QtxWorkstackAction::setItems( const int flags )
-{
- if ( !flags || flags == myFlags || !( flags & Split ) )
- return;
-
- myFlags = flags;
-}
-
-/*!
- \return true if action contains all flags
- \param flags - new set of flags
-*/
-bool QtxWorkstackAction::hasItems( const int flags ) const
-{
- return ( myFlags & flags ) == flags;
-}
-
-/*!
- \return accelerator of item
- \param id - item id
-*/
-int QtxWorkstackAction::accel( const int id ) const
-{
- int a = 0;
- if ( myItem.contains( id ) )
- a = myItem[id]->accel();
- return a;
-}
-
-/*!
- \return icons of item
- \param id - item id
-*/
-QIconSet QtxWorkstackAction::iconSet( const int id ) const
-{
- QIconSet ico;
- if ( myItem.contains( id ) )
- ico = myItem[id]->iconSet();
- return ico;
-}
-
-/*!
- \return menu text of item
- \param id - item id
-*/
-QString QtxWorkstackAction::menuText( const int id ) const
-{
- QString txt;
- if ( myItem.contains( id ) )
- txt = myItem[id]->menuText();
- return txt;
-}
-
-/*!
- \return status tip of item
- \param id - item id
-*/
-QString QtxWorkstackAction::statusTip( const int id ) const
-{
- QString txt;
- if ( myItem.contains( id ) )
- txt = myItem[id]->statusTip();
- return txt;
-}
-
-/*!
- Changes accelerator of item
- \param id - item id
- \param a - new accelerator
-*/
-void QtxWorkstackAction::setAccel( const int id, const int a )
-{
- if ( myItem.contains( id ) )
- myItem[id]->setAccel( a );
-}
-
-/*!
- Changes icons of item
- \param id - item id
- \param ico - new icons
-*/
-void QtxWorkstackAction::setIconSet( const int id, const QIconSet& ico )
-{
- if ( myItem.contains( id ) )
- myItem[id]->setIconSet( ico );
-}
-
-/*!
- Changes menu text of item
- \param id - item id
- \param txt - new menu text
-*/
-void QtxWorkstackAction::setMenuText( const int id, const QString& txt )
-{
- if ( myItem.contains( id ) )
- myItem[id]->setMenuText( txt );
-}
-
-/*!
- Changes status tip of item
- \param id - item id
- \param txt - new status tip
-*/
-void QtxWorkstackAction::setStatusTip( const int id, const QString& txt )
-{
- if ( myItem.contains( id ) )
- myItem[id]->setStatusTip( txt );
-}
-
-/*!
- Adds action to widget
- \param wid - widget
-*/
-bool QtxWorkstackAction::addTo( QWidget* wid )
-{
- return addTo( wid, -1 );
-}
-
-/*!
- Adds action to widget
- \param wid - widget
- \param idx - position
-*/
-bool QtxWorkstackAction::addTo( QWidget* wid, const int idx )
-{
- if ( !wid || !wid->inherits( "QPopupMenu" ) )
- return false;
-
- QPopupMenu* pm = (QPopupMenu*)wid;
- checkPopup( pm );
-
- if ( myMenu.contains( pm ) )
- return false;
-
- myMenu.insert( pm, QIntList() );
- fillPopup( pm, idx );
-
- connect( pm, SIGNAL( aboutToShow() ), this, SLOT( onAboutToShow() ) );
- connect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onPopupDestroyed( QObject* ) ) );
-
- return true;
-}
-
-/*!
- Removes action from widget
- \param wid - widget
-*/
-bool QtxWorkstackAction::removeFrom( QWidget* wid )
-{
- if ( !wid || !wid->inherits( "QPopupMenu" ) )
- return false;
-
- QPopupMenu* pm = (QPopupMenu*)wid;
- if ( !myMenu.contains( pm ) )
- return false;
-
- clearPopup( pm );
-
- disconnect( pm, SIGNAL( aboutToShow() ), this, SLOT( onAboutToShow() ) );
- disconnect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onPopupDestroyed( QObject* ) ) );
-
- myMenu.remove( pm );
-
- return true;
-}
-
-/*!
- Performs action
- \param type - action type
-*/
-void QtxWorkstackAction::perform( const int type )
-{
- switch ( type )
- {
- case VSplit:
- workstack()->splitVertical();
- break;
- case HSplit:
- workstack()->splitHorizontal();
- break;
- }
-}
-
-/*!
- SLOT: called just before the popup menu is displayed, updates popup
-*/
-void QtxWorkstackAction::onAboutToShow()
-{
- const QObject* obj = sender();
- if ( !obj || !obj->inherits( "QPopupMenu" ) )
- return;
-
- QtxWorkstack* ws = workstack();
- if ( ws && myItem.contains( VSplit ) )
- myItem[VSplit]->setAccel( ws->accel( QtxWorkstack::SplitVertical ) );
- if ( ws && myItem.contains( HSplit ) )
- myItem[HSplit]->setAccel( ws->accel( QtxWorkstack::SplitHorizontal ) );
-
- updatePopup( (QPopupMenu*)obj );
-}
-
-/*!
- SLOT: called when popup menu is destroyed, removes it from menu
-*/
-void QtxWorkstackAction::onPopupDestroyed( QObject* obj )
-{
- myMenu.remove( (QPopupMenu*)obj );
-}
-
-/*!
- Updates popup
- \param pm - popup menu
-*/
-void QtxWorkstackAction::checkPopup( QPopupMenu* pm )
-{
- if ( !myMenu.contains( pm ) )
- return;
-
- QIntList updList;
- for ( QIntList::const_iterator it = myMenu[pm].begin(); it != myMenu[pm].end(); ++it )
- {
- if ( pm->indexOf( *it ) != -1 )
- updList.append( *it );
- }
-
- myMenu.remove( pm );
-
- if ( !updList.isEmpty() )
- myMenu.insert( pm, updList );
- else
- {
- disconnect( pm, SIGNAL( aboutToShow() ), this, SLOT( onAboutToShow() ) );
- disconnect( pm, SIGNAL( destroyed( QObject* ) ), this, SLOT( onPopupDestroyed( QObject* ) ) );
- }
-}
-
-/*!
- Clears and refills popup and updates state of actions
- \param pm - popup menu
-*/
-void QtxWorkstackAction::updatePopup( QPopupMenu* pm )
-{
- if ( !myMenu.contains( pm ) )
- return;
-
- fillPopup( pm, clearPopup( pm ) );
-
- int count = workstack() ? workstack()->splitWindowList().count() : 0;
- myItem[VSplit]->setEnabled( count > 1 );
- myItem[HSplit]->setEnabled( count > 1 );
-}
-
-/*!
- Clears popup
- \param pm - popup menu
-*/
-int QtxWorkstackAction::clearPopup( QPopupMenu* pm )
-{
- if ( !myMenu.contains( pm ) )
- return -1;
-
- int idx = -1;
- const QIntList& lst = myMenu[pm];
- for ( QIntList::const_iterator it = lst.begin(); it != lst.end() && idx == -1; ++it )
- idx = pm->indexOf( *it );
-
- for ( ItemMap::ConstIterator mit = myItem.begin(); mit != myItem.end(); ++mit )
- mit.data()->removeFrom( pm );
-
- for ( QIntList::const_iterator itr = lst.begin(); itr != lst.end(); ++itr )
- pm->removeItem( *itr );
-
- return idx;
-}
-
-/*!
- Fills popup with items
- \param pm - popup menu
- \param idx - position
-*/
-void QtxWorkstackAction::fillPopup( QPopupMenu* pm, const int idx )
-{
- if ( !pm )
- return;
-
- int index = idx < 0 ? pm->count() : QMIN( (int)pm->count(), idx );
-
- myMenu.insert( pm, QIntList() );
- QIntList& lst = myMenu[pm];
-
- for ( ItemMap::ConstIterator mit = myItem.begin(); mit != myItem.end(); ++mit )
- {
- if ( !hasItems( mit.key() ) )
- continue;
-
- mit.data()->addTo( pm, index );
- lst.append( pm->idAt( index++ ) );
- }
-
- QtxWorkstack* ws = workstack();
- if ( !ws || !hasItems( Windows ) )
- return;
-
- QWidgetList wList = ws->windowList();
- if ( wList.isEmpty() )
- return;
-
- lst.append( pm->insertSeparator( index++ ) );
-
- int param = 0;
- pm->setCheckable( true );
- for ( QWidgetListIt it( wList ); it.current(); ++it )
- {
- int id = pm->insertItem( it.current()->caption(), this, SLOT( onItemActivated( int ) ), 0, -1, index++ );
- pm->setItemParameter( id, param++ );
- pm->setItemChecked( id, it.current() == ws->activeWindow() );
- lst.append( id );
- }
-}
-
-/*!
- SLOT: called when popup item corresponding to window is activated, activates window
-*/
-void QtxWorkstackAction::onItemActivated( int idx )
-{
- QtxWorkstack* ws = workstack();
- if ( !ws )
- return;
-
- QWidgetList wList = ws->windowList();
- if ( idx < 0 || idx >= (int)wList.count() )
- return;
-
- wList.at( idx )->setFocus();
-}
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File: QtxWorkstackAction.h
-// Author: Sergey TELKOV
-
-#ifndef QTXWORKSTACKACTION_H
-#define QTXWORKSTACKACTION_H
-
-#include "QtxAction.h"
-
-class QtxWorkstack;
-
-#ifdef WIN32
-#pragma warning( disable:4251 )
-#endif
-
-class QTX_EXPORT QtxWorkstackAction : public QtxAction
-{
- Q_OBJECT
-
-public:
- enum { VSplit = 0x0001,
- HSplit = 0x0002,
- Windows = 0x0010,
- Split = VSplit | HSplit,
- Standard = Split | Windows };
-
-public:
- QtxWorkstackAction( QtxWorkstack*, QObject* = 0, const char* = 0 );
- virtual ~QtxWorkstackAction();
-
- QtxWorkstack* workstack() const;
-
- int items() const;
- void setItems( const int );
- bool hasItems( const int ) const;
-
- int accel( const int ) const;
- QIconSet iconSet( const int ) const;
- QString menuText( const int ) const;
- QString statusTip( const int ) const;
-
- void setAccel( const int, const int );
- void setIconSet( const int, const QIconSet& );
- void setMenuText( const int, const QString& );
- void setStatusTip( const int, const QString& );
-
- virtual bool addTo( QWidget* );
- virtual bool addTo( QWidget*, const int );
- virtual bool removeFrom( QWidget* );
-
- void perform( const int );
-
-private slots:
- void onAboutToShow();
- void onItemActivated( int );
- void onPopupDestroyed( QObject* );
-
-private:
- void checkPopup( QPopupMenu* );
- void updatePopup( QPopupMenu* );
-
- int clearPopup( QPopupMenu* );
- void fillPopup( QPopupMenu*, const int );
-
-private:
- typedef QMap<QPopupMenu*, QIntList> MenuMap;
- typedef QMap<int, QtxAction*> ItemMap;
-
-private:
- MenuMap myMenu;
- ItemMap myItem;
- int myFlags;
- QtxWorkstack* myWorkstack;
-};
-
-#ifdef WIN32
-#pragma warning( default:4251 )
-#endif
-
-#endif
+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : Vladimir Klyachin (OCN)
-# Module : suit
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@srcdir@/resources
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= SUIT.h \
- SUIT_ActionOperation.h \
- SUIT_Application.h \
- SUIT_Convertor.h \
- SUIT_DataObject.h \
- SUIT_DataObjectIterator.h \
- SUIT_DataObjectKey.h \
- SUIT_DataOwner.h \
- SUIT_Desktop.h \
- SUIT_ExceptionHandler.h \
- SUIT_FileDlg.h \
- SUIT_FileValidator.h \
- SUIT_MessageBox.h \
- SUIT_Operation.h \
- SUIT_OverrideCursor.h \
- SUIT_ParserSettings.h \
- SUIT_PopupClient.h \
- SUIT_ResourceMgr.h \
- SUIT_SelectionMgr.h \
- SUIT_Selector.h \
- SUIT_Session.h \
- SUIT_SmartPtr.h \
- SUIT_Study.h \
- SUIT_ToolButton.h \
- SUIT_Tools.h \
- SUIT_ViewManager.h \
- SUIT_ViewModel.h \
- SUIT_ViewWindow.h \
- SUIT_SelectionFilter.h \
- SUIT_Accel.h \
- SUIT_TreeSync.h
-
-# .po files to transform in .qm
-PO_FILES = SUIT_images.po \
- SUIT_msg_en.po
-
-# Libraries targets
-LIB = libsuit.la
-
-LIB_SRC= SUIT_ActionOperation.cxx \
- SUIT_Application.cxx \
- SUIT_DataObject.cxx \
- SUIT_DataObjectIterator.cxx \
- SUIT_DataObjectKey.cxx \
- SUIT_DataOwner.cxx \
- SUIT_Desktop.cxx \
- SUIT_ExceptionHandler.cxx \
- SUIT_FileDlg.cxx \
- SUIT_FileValidator.cxx \
- SUIT_MessageBox.cxx \
- SUIT_Operation.cxx \
- SUIT_OverrideCursor.cxx \
- SUIT_ParserSettings.cxx \
- SUIT_PopupClient.cxx \
- SUIT_ResourceMgr.cxx \
- SUIT_SelectionMgr.cxx \
- SUIT_Selector.cxx \
- SUIT_Session.cxx \
- SUIT_Study.cxx \
- SUIT_ToolButton.cxx \
- SUIT_Tools.cxx \
- SUIT_ViewManager.cxx \
- SUIT_ViewModel.cxx \
- SUIT_ViewWindow.cxx \
- SUIT_SelectionFilter.cxx \
- SUIT_Accel.cxx
-
-LIB_MOC = SUIT_ActionOperation.h \
- SUIT_Application.h \
- SUIT_DataObject.h \
- SUIT_Desktop.h \
- SUIT_FileDlg.h \
- SUIT_Operation.h \
- SUIT_PopupClient.h \
- SUIT_Session.h \
- SUIT_Study.h \
- SUIT_ToolButton.h \
- SUIT_ViewModel.h \
- SUIT_ViewWindow.h \
- SUIT_ViewManager.h \
- SUIT_SelectionMgr.h \
- SUIT_Selector.h \
- SUIT_Accel.h
-
-RESOURCES_FILES = \
- cascade.png \
- htile.png \
- vtile.png
-
-CPPFLAGS+=$(QT_INCLUDES)
-
-LDFLAGS+=$(QT_MT_LIBS) -lqtx
-
-@CONCLUDE@
#define SUIT_H
#if defined SUIT_EXPORTS
-#if defined WNT
+#if defined WIN32
#define SUIT_EXPORT __declspec( dllexport )
#else
#define SUIT_EXPORT
#endif
#else
-#if defined WNT
+#if defined WIN32
#define SUIT_EXPORT __declspec( dllimport )
#else
#define SUIT_EXPORT
#define true 1
#endif
-#if defined WNT
+#if defined WIN32
#pragma warning ( disable: 4251 )
#endif
// SUIT_Accel.cxx: implementation of the SUIT_Accel class.
#include "SUIT_Accel.h"
+
+#include "SUIT_ViewModel.h"
#include "SUIT_ViewWindow.h"
#include "SUIT_ViewManager.h"
-#include "SUIT_ViewModel.h"
-
-#include <qobjectlist.h>
-#include <qapplication.h>
-#include <qnamespace.h>
+#include <QtGui/qevent.h>
+#include <QtGui/qapplication.h>
SUIT_Accel* SUIT_Accel::myself = 0;
/*! Constructor [private].*/
SUIT_Accel::SUIT_Accel()
- : QObject( qApp, "SUIT_Accel" )
+: QObject( QCoreApplication::instance() )
{
- qApp->installEventFilter( this );
+ QCoreApplication::instance()->installEventFilter( this );
}
/*! getAccel() : public interface for SUIT_Accel object. Only one instance is created and returned. */
/*! unsetActionKey() : unregister a certain key accelerator */
void SUIT_Accel::unsetActionKey( const int key, const QString& type )
{
- if ( myMap.contains( type ) ) {
+ if ( myMap.contains( type ) )
+ {
IdActionMap idActionMap = myMap[type];
- if ( idActionMap.contains( key ) ) {
- idActionMap.erase( key );
+ if ( idActionMap.contains( key ) )
+ {
+ idActionMap.remove( key );
myMap[type] = idActionMap;
}
}
/*! getParentViewWindow() : returns given object or any of its parents-grandparents-.. if it is a SUIT_ViewWindow */
SUIT_ViewWindow* getParentViewWindow( const QObject* obj )
{
- if ( obj ) {
+ if ( obj )
+ {
if ( obj->inherits( "SUIT_ViewWindow" ) )
return (SUIT_ViewWindow*)obj;
else
}
/*! getKey() : returns integer key code (with modifiers) made of key pressed 'inside' given event */
-int getKey( QKeyEvent *keyEvent )
+int getKey( QKeyEvent* keyEvent )
{
- int key = keyEvent->key(),
- state = keyEvent->state();
- if ( state & Qt::ShiftButton )
+ int key = keyEvent->key(), state = keyEvent->modifiers();
+ if ( state & Qt::ShiftModifier )
key += Qt::SHIFT;
- if ( state & Qt::ControlButton )
+ if ( state & Qt::ControlModifier )
key += Qt::CTRL;
- if ( state & Qt::AltButton )
+ if ( state & Qt::AltModifier )
key += Qt::ALT;
- if ( state & Qt::MetaButton )
+ if ( state & Qt::MetaModifier )
key += Qt::META;
return key;
}
//
// SUIT_Accel.h: interface for the SUIT_Accel class.
-#ifndef SUIT_Accel_h
-#define SUIT_Accel_h
+#ifndef SUIT_ACELL_H
+#define SUIT_ACELL_H
#include "SUIT.h"
-#include <qobject.h>
-#include <qstring.h>
-#include <qmap.h>
+#include <QtCore/qmap.h>
+#include <QtCore/qobject.h>
+#include <QtCore/qstring.h>
/*!
\class SUIT_Accel
/*!Set action.
* Create new instance of QtxAction and set.
*/
-void SUIT_ActionOperation::setAction( const QString& text, const QIconSet& icon,
- const QString& menuText, QKeySequence accel,
- QObject* parent, const char* name, bool toggle )
+void SUIT_ActionOperation::setAction( const QString& text, const QIcon& icon,
+ const QString& menuText, QKeySequence accel,
+ QObject* parent, bool toggle )
{
- setAction( new QtxAction( text, icon, menuText, accel, parent, name, toggle ) );
+ setAction( new QtxAction( text, icon, menuText, accel, parent, 0, toggle ) );
}
/*!Set action.
* Create new instance of QtxAction and set.
*/
void SUIT_ActionOperation::setAction( const QString& text, const QString& menuText,
- QKeySequence accel, QObject* parent, const char* name, bool toggle )
+ QKeySequence accel, QObject* parent, bool toggle )
{
- setAction( new QtxAction(text, menuText, accel, parent, name, toggle ) );
+ setAction( new QtxAction( text, menuText, accel, parent, 0, toggle ) );
}
/*!Set action.
#include "SUIT_Operation.h"
-class QtxAction;
+class QIcon;
class QString;
-class QIconSet;
-class QKeySequence;
class QWidget;
+class QKeySequence;
+
+class QtxAction;
/*!Provide support QtxAction*/
class SUIT_EXPORT SUIT_ActionOperation : public SUIT_Operation
Q_OBJECT
public:
- SUIT_ActionOperation( SUIT_Application* theApp );
+ SUIT_ActionOperation( SUIT_Application* );
virtual ~SUIT_ActionOperation();
QtxAction* action() const;
/** @name GUI management*/
//@{
- virtual void setAction( const QString& text, const QIconSet& icon, const QString& menuText,
- QKeySequence accel, QObject* parent, const char* name = 0, bool toggle = false );
+ virtual void setAction( const QString& text, const QIcon& icon, const QString& menuText,
+ QKeySequence accel, QObject* parent, bool toggle = false );
- virtual void setAction( const QString& text, const QString& menuText, QKeySequence accel,
- QObject* parent, const char* name = 0, bool toggle = false );
+ virtual void setAction( const QString& text, const QString& menuText,
+ QKeySequence accel, QObject* parent, bool toggle = false );
virtual void setAction( QtxAction* theAction );
bool addTo( QWidget* theWidget );
bool addTo( QWidget* theWidget, int thePos );
-
+
void setStatusTip( const QString& theTip );
//@}
-
+
private:
QtxAction* myAction;
#include "SUIT_Desktop.h"
#include "SUIT_ResourceMgr.h"
-#include <qlabel.h>
-#include <qtimer.h>
-#include <qstatusbar.h>
+#include <QtCore/qtimer.h>
+
+#include <QtGui/qlabel.h>
+#include <QtGui/qstatusbar.h>
#include <QtxAction.h>
#include <QtxActionMenuMgr.h>
myStudy( 0 ),
myDesktop( 0 ),
myStatusLabel( 0 )
-{
+{
+ if ( SUIT_Session::session() )
+ SUIT_Session::session()->insertApplication( this );
}
/*!
*/
SUIT_Application* SUIT_Application::startApplication( int argc, char** argv ) const
{
- return startApplication( name(), argc, argv );
+ return startApplication( objectName(), argc, argv );
}
/*!
*/
void SUIT_Application::setMenuShown( QAction* a, const bool on )
{
- setMenuShown( actionId( a ), on );
+ if ( !a || !desktop() )
+ return;
+
+ QtxActionMenuMgr* mMgr = desktop()->menuMgr();
+ if ( mMgr )
+ mMgr->setShown( mMgr->actionId( a ), on );
}
/*!
*/
void SUIT_Application::setMenuShown( const int id, const bool on )
{
- if ( desktop() && desktop()->menuMgr() )
- desktop()->menuMgr()->setShown( id, on );
+ setMenuShown( action( id ), on );
}
/*!
*/
void SUIT_Application::setToolShown( QAction* a, const bool on )
{
- setToolShown( actionId( a ), on );
+ if ( !a || !desktop() )
+ return;
+
+ QtxActionToolMgr* tMgr = desktop()->toolMgr();
+ if ( tMgr )
+ tMgr->setShown( tMgr->actionId( a ), on );
}
/*!
*/
void SUIT_Application::setToolShown( const int id, const bool on )
{
- if ( desktop() && desktop()->toolMgr() )
- desktop()->toolMgr()->setShown( id, on );
+ setToolShown( action( id ), on );
}
/*!
int SUIT_Application::actionId( const QAction* a ) const
{
int id = -1;
- for ( QMap<int, QAction*>::ConstIterator it = myActionMap.begin();
- it != myActionMap.end() && id == -1;
- ++it ) {
- if ( it.data() == a )
+ for ( QMap<int, QAction*>::ConstIterator it = myActionMap.begin(); it != myActionMap.end() && id == -1; ++it )
+ {
+ if ( it.value() == a )
id = it.key();
}
return id;
\param reciever - object that contains slot
\param member - slot to be called when action is activated
*/
-QAction* SUIT_Application::createAction( const int id, const QString& text, const QIconSet& icon,
+QAction* SUIT_Application::createAction( const int id, const QString& text, const QIcon& icon,
const QString& menu, const QString& tip, const int key,
QObject* parent, const bool toggle, QObject* reciever, const char* member )
{
a->setStatusTip( tip );
if ( reciever && member )
- connect( a, SIGNAL( activated() ), reciever, member );
+ connect( a, SIGNAL( triggered( bool ) ), reciever, member );
registerAction( id, a );
#include "SUIT.h"
#include "SUIT_Study.h"
-#include <qobject.h>
-#include <qwidget.h>
+#include <QtCore/qmap.h>
+#include <QtGui/qwidget.h>
+class QIcon;
class QLabel;
class QString;
class QAction;
-class QIconSet;
class SUIT_Desktop;
class SUIT_Convertor;
class SUIT_ViewModel;
QAction* action( const int ) const;
int actionId( const QAction* ) const;
int registerAction( const int, QAction* );
- QAction* createAction( const int, const QString&, const QIconSet&, const QString&,
+ QAction* createAction( const int, const QString&, const QIcon&, const QString&,
const QString&, const int, QObject* = 0,
const bool = false, QObject* = 0, const char* = 0 );
+++ /dev/null
-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// SUIT_Convertor.h: interface for the SUIT_Convertor class.
-//
-
-#if !defined(AFX_SUIT_CONVERTOR_H__4C27F4C7_DC7C_4BEF_9DC1_EFB97B387EBF__INCLUDED_)
-#define AFX_SUIT_CONVERTOR_H__4C27F4C7_DC7C_4BEF_9DC1_EFB97B387EBF__INCLUDED_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#include "SUIT.h"
-#include "SUIT_DataObject.h"
-#include "SUIT_ViewModel.h"
-
-/*! Provides convertation of selected object of specified viewer into SUIT_DataObject.
- * Instance of Convertor class is created by Application according to data type and viewers used.
- */
-class SUIT_Convertor
-{
-public:
- virtual DataObjectList getSelectedObjects(const SUIT_ViewModel* theViewer) = 0;
- virtual void highlight(const SUIT_ViewModel* theViewer, const DataObjectList& theObjList) = 0;
-};
-
-#endif // !defined(AFX_SUIT_CONVERTOR_H__4C27F4C7_DC7C_4BEF_9DC1_EFB97B387EBF__INCLUDED_)
//
#include "SUIT_DataObject.h"
-#include <qobject.h>
-
#include "SUIT_DataObjectKey.h"
/*!
SUIT_DataObject::SUIT_DataObject( SUIT_DataObject* p )
: myParent( 0 ),
- mySignal( 0 ),
- myOpen( false ),
- myCheck( false )
+mySignal( 0 ),
+myOpen( false ),
+myCheck( false ),
+myAutoDel( true )
{
- myChildren.setAutoDelete( true );
-
setParent( p );
}
mySignal->setOwner( 0 );
}
- for ( QPtrListIterator<SUIT_DataObject> it( myChildren ); it.current(); ++it )
- it.current()->myParent = 0;
+ for ( DataObjectList::iterator it = myChildren.begin(); it != myChildren.end(); ++it )
+ (*it)->myParent = 0;
+
+ if ( autoDeleteChildren() )
+ {
+ for ( DataObjectList::iterator itr = myChildren.begin(); itr != myChildren.end(); ++itr )
+ delete *itr;
+ }
delete mySignal;
}
{
SUIT_DataObject* child = 0;
if ( !myChildren.isEmpty() )
- child = myChildren.getFirst();
+ child = myChildren.first();
return child;
}
{
SUIT_DataObject* child = 0;
if ( !myChildren.isEmpty() )
- child = myChildren.getLast();
+ child = myChildren.last();
return child;
}
int res = -1;
int i = 0;
- for ( DataObjectListIterator it( myChildren ); it.current() && res == -1; ++it, i++ )
+ for ( DataObjectList::const_iterator it = myChildren.begin(); it != myChildren.end() && res == -1; ++it, i++ )
{
- if ( it.current() == obj )
+ if ( *it == obj )
res = i;
}
bool SUIT_DataObject::autoDeleteChildren() const
{
- return myChildren.autoDelete();
+ return myAutoDel;
}
/*!
void SUIT_DataObject::setAutoDeleteChildren( const bool on )
{
- myChildren.setAutoDelete( on );
+ myAutoDel = on;
}
/*!
void SUIT_DataObject::children( DataObjectList& lst, const bool rec ) const
{
- for ( DataObjectListIterator it( myChildren ); it.current(); ++it )
+ for ( DataObjectList::const_iterator it = myChildren.begin(); it != myChildren.end(); ++it )
{
- lst.append( it.current() );
+ lst.append( *it );
if ( rec )
- it.current()->children( lst, rec );
+ (*it)->children( lst, rec );
}
}
void SUIT_DataObject::insertChild( SUIT_DataObject* theObj, int thePosition )
{
- if ( !theObj || myChildren.find( theObj ) != -1 )
+ if ( !theObj || myChildren.contains( theObj ) )
return;
int pos = thePosition < 0 ? myChildren.count() : thePosition;
- myChildren.insert( QMIN( pos, (int)myChildren.count() ), theObj );
+ myChildren.insert( qMin( pos, (int)myChildren.count() ), theObj );
theObj->setParent( this );
}
if ( !theObj )
return;
- bool ad = myChildren.autoDelete();
- myChildren.setAutoDelete( false );
-
- if ( myChildren.remove( theObj ) )
+ if ( myChildren.removeAll( theObj ) )
theObj->setParent( 0 );
-
- myChildren.setAutoDelete( ad );
}
/*!
DataObjectList lst;
obj->children( lst );
- for ( DataObjectListIterator it( lst ); it.current(); ++it )
- it.current()->setParent( this );
+ for ( DataObjectList::iterator it = lst.begin(); it != lst.end(); ++it )
+ (*it)->setParent( this );
}
/*!
void SUIT_DataObject::dump( const int indent ) const
{
QString strIndent = QString().fill( ' ', indent ); // indentation string
- printf( "%s%s\n", strIndent.latin1(), name().latin1() );
- for ( DataObjectListIterator it( myChildren ); it.current(); ++it ) // iterate all children
- it.current()->dump( indent + 2 ); // dump every child with indent + 2 spaces
+ printf( "%s%s\n", strIndent.toLatin1(), name().toLatin1() );
+ for ( DataObjectList::const_iterator it = myChildren.begin(); it != myChildren.end(); ++it )
+ (*it)->dump( indent + 2 );
}
/*!
#ifndef SUIT_DATAOBJECT_H
#define SUIT_DATAOBJECT_H
-#include <qobject.h>
-#include <qstring.h>
-#include <qpixmap.h>
-#include <qptrlist.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qobject.h>
+#include <QtCore/qstring.h>
+
+#include <QtGui/qpixmap.h>
#include "SUIT.h"
class SUIT_DataObject;
class SUIT_DataObjectKey;
-typedef QPtrList<SUIT_DataObject> DataObjectList;
-typedef QPtrListIterator<SUIT_DataObject> DataObjectListIterator;
+typedef QList<SUIT_DataObject*> DataObjectList;
#ifdef WIN32
#pragma warning( disable:4251 )
bool myCheck;
Signal* mySignal;
SUIT_DataObject* myParent;
+ bool myAutoDel;
DataObjectList myChildren;
friend class SUIT_DataObject::Signal;
}
else
{
- aParent->myChildren.find( myCurrent );
+ int idx = aParent->myChildren.indexOf( myCurrent );
if ( myDetourType == DepthLeft )
- myCurrent = aParent->myChildren.next();
+ myCurrent = idx < aParent->myChildren.count() - 1 ? aParent->myChildren[idx + 1] : 0;
else
- myCurrent = aParent->myChildren.prev();
+ myCurrent = idx > 0 ? aParent->myChildren[idx - 1] : 0;
if ( !myCurrent )
{
myCurrent = aParent;
if ( obj && ( par = parent( obj ) ) )
{
- par->myChildren.find( obj );
- if ( par->myChildren.next() )
- return par->myChildren.current();
+ int idx = par->myChildren.indexOf( obj );
+ if ( idx < par->myChildren.count() - 1 )
+ return par->myChildren[idx + 1];
else
{
for ( ; par; par = globalSibling( par, next ) )
SUIT_DataObject* SUIT_DataObjectIterator::extreme( DataObjectList& aList, bool FromLeft ) const
{
if ( FromLeft )
- return aList.getFirst();
+ return aList.first();
else
- return aList.getLast();
+ return aList.last();
}
/*!
//
#include "SUIT_DataObjectKey.h"
-#include <qobject.h>
+#include <QtCore/qobject.h>
-#ifndef WNT
+#ifndef WIN32
#include <typeinfo>
#define _typeinfo std::type_info
#else
//
#include "SUIT_DataOwner.h"
-#ifndef WNT
+#ifndef WIN32
#include <typeinfo>
#define _typeinfo std::type_info
#else
Constructor (default)
*/
SUIT_DataOwnerPtrList::SUIT_DataOwnerPtrList()
- : QValueList<SUIT_DataOwnerPtr>(),
- mySkipEqual( true )
+: QList<SUIT_DataOwnerPtr>(),
+mySkipEqual( true )
{
}
Constructor (default)
*/
SUIT_DataOwnerPtrList::SUIT_DataOwnerPtrList( const bool skipAllEqual )
- : QValueList<SUIT_DataOwnerPtr>(),
- mySkipEqual( skipAllEqual )
+: QList<SUIT_DataOwnerPtr>(),
+mySkipEqual( skipAllEqual )
{
}
Constructor (copy)
*/
SUIT_DataOwnerPtrList::SUIT_DataOwnerPtrList( const SUIT_DataOwnerPtrList& l )
- : QValueList<SUIT_DataOwnerPtr>( l ),
- mySkipEqual( true )
+: QList<SUIT_DataOwnerPtr>( l ),
+mySkipEqual( true )
{
}
Constructor (copy)
*/
SUIT_DataOwnerPtrList::SUIT_DataOwnerPtrList( const SUIT_DataOwnerPtrList& l, const bool skipAllEqual )
- : QValueList<SUIT_DataOwnerPtr>(),
- mySkipEqual( skipAllEqual )
+: QList<SUIT_DataOwnerPtr>(),
+mySkipEqual( skipAllEqual )
{
if ( skipAllEqual == l.mySkipEqual )
operator =( l );
{
SUIT_DataOwnerPtrList::const_iterator beginIt = l.begin();
SUIT_DataOwnerPtrList::const_iterator endIt = l.end();
- for( ; beginIt != endIt; ++beginIt )
+ for ( ; beginIt != endIt; ++beginIt )
append( *beginIt );
}
}
-#ifndef QT_NO_STL
-/*!
- Constructor (from stl)
-*/
-SUIT_DataOwnerPtrList::SUIT_DataOwnerPtrList( const std::list<SUIT_DataOwnerPtr>& l )
- : QValueList<SUIT_DataOwnerPtr>( l ),
- mySkipEqual( true )
-{
-}
-#endif
-
-#ifndef QT_NO_STL
-/*!
- Constructor (from stl)
-*/
-SUIT_DataOwnerPtrList::SUIT_DataOwnerPtrList( const std::list<SUIT_DataOwnerPtr>& l, const bool skipAllEqual )
- : QValueList<SUIT_DataOwnerPtr>(),
- mySkipEqual( skipAllEqual )
-{
- std::list<SUIT_DataOwnerPtr>::const_iterator beginIt = l.begin();
- std::list<SUIT_DataOwnerPtr>::const_iterator endIt = l.begin();
- for( ; beginIt != endIt; ++beginIt )
- append( *beginIt );
-}
-#endif
-
/*!
Appends an item to the list
*/
-SUIT_DataOwnerPtrList::iterator SUIT_DataOwnerPtrList::append( const SUIT_DataOwnerPtr& x )
+void SUIT_DataOwnerPtrList::append( const SUIT_DataOwnerPtr& x )
{
if ( mySkipEqual && myMap.contains( x ) ) //contains uses SUIT_DataOwnerPtr::operator==
- return myMap[ x ];
+ return;
- iterator it = QValueList<SUIT_DataOwnerPtr>::append( x );
+ QList<SUIT_DataOwnerPtr>::append( x );
- if ( mySkipEqual )
- myMap.insert( x, it );
-
- return it;
+ if ( mySkipEqual )
+ myMap.insert( x, 0 );
}
/*!
*/
void SUIT_DataOwnerPtrList::clear()
{
- if( mySkipEqual )
+ if ( mySkipEqual )
myMap.clear();
- QValueList<SUIT_DataOwnerPtr>::clear();
+
+ QList<SUIT_DataOwnerPtr>::clear();
}
/*!
*/
uint SUIT_DataOwnerPtrList::remove(const SUIT_DataOwnerPtr& x )
{
- if( mySkipEqual && myMap.contains(x) )
- myMap.remove(x);
- return QValueList<SUIT_DataOwnerPtr>::remove( x );
+ if ( mySkipEqual && myMap.contains(x) )
+ myMap.remove( x );
+
+ return QList<SUIT_DataOwnerPtr>::removeAll( x );
}
#include "SUIT_SmartPtr.h"
-#include <qvaluelist.h>
-#include <qmap.h>
+#include <QtCore/qmap.h>
+#include <QtCore/qlist.h>
#ifdef WIN32
#pragma warning( disable:4251 )
/*! \class SUIT_DataOwnerPtrList
* \brief Manage list of SUIT_DataOwnerPtr.
*/
-class SUIT_EXPORT SUIT_DataOwnerPtrList : public QValueList<SUIT_DataOwnerPtr>
+class SUIT_EXPORT SUIT_DataOwnerPtrList : public QList<SUIT_DataOwnerPtr>
{
public:
SUIT_DataOwnerPtrList(); //!< constructor
SUIT_DataOwnerPtrList( const bool skipAllEqual );//!< constructor
SUIT_DataOwnerPtrList( const SUIT_DataOwnerPtrList& l ); //!< copy constructor
SUIT_DataOwnerPtrList( const SUIT_DataOwnerPtrList& l, const bool skipAllEqual );//!< copy constructor
-#ifndef QT_NO_STL
- SUIT_DataOwnerPtrList( const std::list<SUIT_DataOwnerPtr>& l ); //!< copy constructor for STL list
- SUIT_DataOwnerPtrList( const std::list<SUIT_DataOwnerPtr>& l, const bool skipAllEqual );//!< copy constructor for STL list
-#endif
- iterator append ( const SUIT_DataOwnerPtr& x );//!< append function
+ void append ( const SUIT_DataOwnerPtr& x );//!< append function
void clear ();
- uint remove (const SUIT_DataOwnerPtr& x );
+ uint remove ( const SUIT_DataOwnerPtr& x );
private:
// hide this methods: only append() should be used to add items to the list
void push_back ( const SUIT_DataOwnerPtr& x );//!< hide method
private:
- bool mySkipEqual;
- QMap<SUIT_DataOwnerPtr, iterator> myMap;
+ QMap<SUIT_DataOwnerPtr, int> myMap;
+ bool mySkipEqual;
};
#ifdef WIN32
#include "SUIT_Tools.h"
#include "SUIT_ViewWindow.h"
-#include <QtxLogoMgr.h>
+//#include <QtxLogoMgr.h>
#include <QtxActionMenuMgr.h>
#include <QtxActionToolMgr.h>
+#include <QtGui/qevent.h>
+#include <QtGui/qapplication.h>
+
/*!\class SUIT_Desktop
* Provide desktop management:\n
* \li menu manager
* \li windows
*/
+class SUIT_Desktop::ReparentEvent : public QEvent
+{
+public:
+ ReparentEvent( Type t, QObject* obj ) : QEvent( t ), myObj( obj ) {};
+
+ QObject* object() const { return myObj; }
+
+private:
+ QObject* myObj;
+};
+
/*!
Constructor.
*/
{
myMenuMgr = new QtxActionMenuMgr( this );
myToolMgr = new QtxActionToolMgr( this );
- myLogoMgr = new QtxLogoMgr( menuBar() );
+ myLogoMgr = 0;//new QtxLogoMgr( menuBar() );
}
/*!
*/
void SUIT_Desktop::childEvent( QChildEvent* e )
{
- if ( e->type() == QEvent::ChildInserted && parentArea() &&
- e->child()->isWidgetType() && e->child()->inherits( "SUIT_ViewWindow" ) )
- {
- QWidget* wid = (QWidget*)e->child();
- bool vis = wid->isVisibleTo( wid->parentWidget() );
- wid->reparent( parentArea(), QPoint( 0, 0 ), vis );
- wid->setShown( vis );
- }
+ if ( e->type() == QEvent::ChildAdded && e->child()->isWidgetType() )
+ QApplication::postEvent( this, new QChildEvent( QEvent::Type( Reparent ), e->child() ) );
else
QtxMainWindow::childEvent( e );
}
+void SUIT_Desktop::customEvent( QEvent* e )
+{
+ if ( e->type() != Reparent )
+ return;
+
+ QChildEvent* re = (QChildEvent*)e;
+ if ( re->child()->inherits( "SUIT_ViewWindow" ) )
+ {
+ QWidget* wid = (QWidget*)re->child();
+ bool invis = wid->testAttribute( Qt::WA_WState_ExplicitShowHide ) &&
+ wid->testAttribute( Qt::WA_WState_Hidden );
+
+ addWindow( wid );
+ wid->setShown( !invis );
+ }
+}
+
/*!
Gets menu manager.
*/
*/
int SUIT_Desktop::logoCount() const
{
+ return 0;
+/*
if ( !myLogoMgr )
return 0;
else
return myLogoMgr->count();
-}
-
-/*!
- Adds new logo to the menu bar area.
- Obsolete. Not should be used.
- Use SUIT_Desktop::logoInsert();
*/
-void SUIT_Desktop::addLogo( const QString& id, const QPixmap& pix )
-{
- logoInsert( id, pix );
-}
-
-/*!
- Removes a logo.
- Obsolete. Not should be used.
- Use SUIT_Desktop::logoRemove();
-*/
-void SUIT_Desktop::removeLogo( const QString& id )
-{
- logoRemove( id );
}
/*!
*/
void SUIT_Desktop::logoInsert( const QString& logoID, const QPixmap& logo, const int idx )
{
+/*
if ( myLogoMgr )
myLogoMgr->insert( logoID, logo, idx );
+*/
}
/*!
*/
void SUIT_Desktop::logoRemove( const QString& logoID )
{
+/*
if ( myLogoMgr )
myLogoMgr->remove( logoID );
+*/
}
/*!
*/
void SUIT_Desktop::logoClear()
{
+/*
if ( myLogoMgr )
myLogoMgr->clear();
+*/
}
/*!
#include "SUIT.h"
-#include <qmap.h>
-#include <qpixmap.h>
+#include <QtCore/qmap.h>
+#include <QtCore/qlist.h>
+
+#include <QtGui/qevent.h>
+#include <QtGui/qpixmap.h>
+
#include <QtxMainWindow.h>
class QPopupMenu;
{
Q_OBJECT
+ class ReparentEvent;
+
+ enum { Reparent = QEvent::User };
+
public:
SUIT_Desktop();
virtual ~SUIT_Desktop();
QtxActionToolMgr* toolMgr() const;
virtual SUIT_ViewWindow* activeWindow() const = 0;
- virtual QPtrList<SUIT_ViewWindow> windows() const = 0;
-
- void addLogo( const QString&, const QPixmap& ); // Not should be used. Will be removed.
- void removeLogo( const QString& ); // Not should be used. Will be removed.
+ virtual QList<SUIT_ViewWindow*> windows() const = 0;
int logoCount() const;
void emitActivated();
-signals:
+Q_SIGNALS:
void activated();
void deactivated();
void windowActivated( SUIT_ViewWindow* );
protected:
virtual bool event( QEvent* );
+ virtual void customEvent( QEvent* );
virtual void closeEvent( QCloseEvent* );
virtual void childEvent( QChildEvent* );
- virtual QWidget* parentArea() const = 0;
+ virtual void addWindow( QWidget* ) = 0;
private:
QtxActionMenuMgr* myMenuMgr;
#include "SUIT_MessageBox.h"
-#include <qapplication.h>
+#include <QtGui/qapplication.h>
/*!\class SUIT_ExceptionHandler
* Show exception message on error handler.
while ( QApplication::overrideCursor() )
QApplication::restoreOverrideCursor();
- SUIT_MessageBox::error1( qApp->mainWidget(), title, msg, "OK" );
+ SUIT_MessageBox::error1( 0, title, msg, "OK" );
}
#include "SUIT_ResourceMgr.h"
#include "SUIT_FileValidator.h"
-#include <qdir.h>
-#include <qlabel.h>
-#include <qregexp.h>
-#include <qpalette.h>
-#include <qobjectlist.h>
-#include <qcombobox.h>
-#include <qpushbutton.h>
-#include <qapplication.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qregexp.h>
+
+#include <QtGui/qlabel.h>
+#include <QtGui/qpalette.h>
+#include <QtGui/qcombobox.h>
+#include <QtGui/qpushbutton.h>
+#include <QtGui/qgridlayout.h>
+#include <QtGui/qapplication.h>
#define MIN_COMBO_SIZE 100
QString SUIT_FileDlg::myLastVisitedPath;
/*! Constructor */
-SUIT_FileDlg::SUIT_FileDlg( QWidget* parent, bool open, bool showQuickDir, bool modal ) :
-QFileDialog( parent, 0, modal ),
+SUIT_FileDlg::SUIT_FileDlg( QWidget* parent, bool open, bool showQuickDir, bool modal )
+: QFileDialog( parent ),
myValidator( 0 ),
-myQuickCombo( 0 ), myQuickButton( 0 ), myQuickLab( 0 ),
+myQuickCombo( 0 ),
+myQuickButton( 0 ),
+myQuickLab( 0 ),
myOpen( open )//,
//myAccepted( false )
-{
- const QObjectList* child = children();
- QObjectList::const_iterator anIt = child->begin(), aLast = child->end();
- for( ; anIt!=aLast; anIt++ )
- if( (*anIt)->inherits( "QPushButton" ) )
+{
+ setModal( modal );
+
+ const QObjectList& child = children();
+ for ( QObjectList::const_iterator anIt = child.begin(); anIt != child.end(); ++anIt )
+ {
+ QPushButton* pb = ::qobject_cast<QPushButton*>( *anIt );
+ if ( pb )
{
- QPushButton* bt = ( QPushButton* )( *anIt );
- bt->setDefault( false );
- bt->setAutoDefault( false );
+ pb->setDefault( false );
+ pb->setAutoDefault( false );
}
+ }
- if ( parent->icon() )
- setIcon( *parent->icon() );
+ if ( parent )
+ setWindowIcon( parent->windowIcon() );
setSizeGripEnabled( true );
- if ( showQuickDir ) {
+ QGridLayout* grid = ::qobject_cast<QGridLayout*>( layout() );
+ if ( showQuickDir && grid )
+ {
// inserting quick dir combo box
- myQuickLab = new QLabel(tr("LAB_QUICK_PATH"), this);
- myQuickCombo = new QComboBox(false, this);
- myQuickCombo->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
- myQuickCombo->setMinimumSize(MIN_COMBO_SIZE, 0);
+ myQuickLab = new QLabel( tr( "LAB_QUICK_PATH" ), this );
+ myQuickCombo = new QComboBox( this );
+ myQuickCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+ myQuickCombo->setMinimumSize( MIN_COMBO_SIZE, 0 );
- myQuickButton = new QPushButton(tr("BUT_ADD_PATH"), this);
+ myQuickButton = new QPushButton( tr( "BUT_ADD_PATH" ), this );
- connect(myQuickCombo, SIGNAL(activated(const QString&)), this, SLOT(quickDir(const QString&)));
- connect(myQuickButton, SIGNAL(clicked()), this, SLOT(addQuickDir()));
- addWidgets(myQuickLab, myQuickCombo, myQuickButton);
+ connect( myQuickCombo, SIGNAL( activated( const QString& ) ), this, SLOT( quickDir( const QString& ) ) );
+ connect( myQuickButton, SIGNAL( clicked() ), this, SLOT( addQuickDir() ) );
+
+ int row = grid->rowCount();
+ grid->addWidget( myQuickLab, row, 0 );
+ grid->addWidget( myQuickCombo, row, 1, 1, 3 );
+ grid->addWidget( myQuickButton, row, 5 );
// getting dir list from settings
QString dirs;
if ( resMgr )
dirs = resMgr->stringValue( "FileDlg", QString( "QuickDirList" ) );
- QStringList dirList = QStringList::split(';', dirs, false);
- if (dirList.count() > 0) {
- for (unsigned i = 0; i < dirList.count(); i++)
- myQuickCombo->insertItem(dirList[i]);
- }
- else {
- myQuickCombo->insertItem(QDir::homeDirPath());
+ QStringList dirList = dirs.split( ';' );
+ if ( dirList.count() > 0 )
+ {
+ for ( unsigned i = 0; i < dirList.count(); i++ )
+ myQuickCombo->addItem( dirList[i] );
}
+ else
+ myQuickCombo->addItem( QDir::homePath() );
}
- setMode( myOpen ? ExistingFile : AnyFile );
- setCaption( myOpen ? tr( "INF_DESK_DOC_OPEN" ) : tr( "INF_DESK_DOC_SAVE" ) );
+ setAcceptMode( myOpen ? AcceptOpen: AcceptSave );
+ setWindowTitle( myOpen ? tr( "INF_DESK_DOC_OPEN" ) : tr( "INF_DESK_DOC_SAVE" ) );
// If last visited path doesn't exist -> switch to the first preferred path
- if ( !myLastVisitedPath.isEmpty() ) {
+ if ( !myLastVisitedPath.isEmpty() )
+ {
if ( !processPath( myLastVisitedPath ) && showQuickDir )
- processPath( myQuickCombo->text( 0 ) );
+ processPath( myQuickCombo->itemText( 0 ) );
}
- else {
+ else
+ {
if ( showQuickDir )
- processPath(myQuickCombo->text( 0 ) );
- }
+ processPath( myQuickCombo->itemText( 0 ) );
+ }
// set default file validator
myValidator = new SUIT_FileValidator(this);
setValidator( 0 );
}
+bool SUIT_FileDlg::event( QEvent* e )
+{
+ bool res = QFileDialog::event( e );
+
+ if ( e->type() == QEvent::Polish )
+ polish();
+
+ return res;
+}
+
/*! Redefined from QFileDialog.*/
void SUIT_FileDlg::polish()
{
- QFileDialog::polish();
- if ( myQuickButton && myQuickLab ) {
+/*
+ if ( myQuickButton && myQuickLab )
+ {
// the following is a workaround for proper layouting of custom widgets
QValueList<QPushButton*> buttonList;
QValueList<QLabel*> labelList;
(*lListIt)->setFixedWidth( maxLabWidth );
}
}
+*/
}
/*! Sets validator for file names to open/save
* (e.g. permission denied)
*/
// if ( !myAccepted ) {
- if ( mode() != ExistingFiles ) {
- mySelectedFile = QFileDialog::selectedFile();
+ if ( acceptMode() != AcceptOpen )
+ {
+ QString fn;
+ QStringList lst = QFileDialog::selectedFiles();
+ if ( !lst.isEmpty() )
+ fn = lst.first();
+ mySelectedFile = fn;
addExtension();
}
- if ( acceptData() ) {
- myLastVisitedPath = dirPath();
+ if ( acceptData() )
+ {
+ myLastVisitedPath = directory().path();
QFileDialog::accept();
// myAccepted = true;
}
{
if ( isOpenDlg() )
{
- if ( mode() == ExistingFiles )
+ if ( acceptMode() == AcceptOpen )
{
QStringList fileNames = selectedFiles();
for ( int i = 0; i < (int)fileNames.count(); i++ )
void SUIT_FileDlg::addExtension()
{
// check if file name entered is empty
- if ( mySelectedFile.stripWhiteSpace().isEmpty() )
+ if ( mySelectedFile.trimmed().isEmpty() )
return;
// current file extension
- QString anExt = "." + SUIT_Tools::extension( mySelectedFile.stripWhiteSpace() ).stripWhiteSpace();
+ QString anExt = "." + SUIT_Tools::extension( mySelectedFile.trimmed() ).trimmed();
// If the file already has extension and it does not match the filter there are two choices:
// - to leave it 'as is'
int len, index = r.match( selectedFilter().stripWhiteSpace(), 0, &len );
#else
QRegExp r( QString::fromLatin1("\\(?[a-zA-Z0-9.*? +;#|]*\\)?$") );
- int index = r.search( selectedFilter().stripWhiteSpace() );
+ int index = r.indexIn( selectedFilter().trimmed() );
#endif
if ( index >= 0 ) {
// will have the pattern (\.txt|\..*xx|\.c\+\+|\..*) (as we validate extension only,
// we remove everything except extension mask from the pattern
#if QT_VERSION < 0x030000
- QString wildcard = selectedFilter().mid( index, len ).stripWhiteSpace();
+ QString wildcard = selectedFilter().mid( index, len ).trimmed();
#else
- QString wildcard = selectedFilter().mid( index, r.matchedLength() ).stripWhiteSpace();
+ QString wildcard = selectedFilter().mid( index, r.matchedLength() ).trimmed();
#endif
// replace '|' and ';' separators by space symbol and also brackets if there are some
wildcard.replace( QRegExp( "[\\|;|(|)]" )," " );
- QString aPattern = wildcard.replace( QRegExp( "(^| )(\\s*)[0-9a-zA-Z*_?]*\\."), " \\." ).stripWhiteSpace().
+ QString aPattern = wildcard.replace( QRegExp( "(^| )(\\s*)[0-9a-zA-Z*_?]*\\."), " \\." ).trimmed().
replace( QRegExp( "\\s+" ), "|" ).replace( QRegExp( "[?]" ),".?" ).
replace( QRegExp( "[*]" ),".*" ).replace( QRegExp( "[+]" ),"\\+" );
// now we get the list of all extension masks and remove all which does not contain wildcard symbols
- QStringList extList = QStringList::split( "|",aPattern );
- for( int i = extList.count() - 1; i >= 0; i-- ) {
+ QStringList extList = aPattern.split( "|", QString::SkipEmptyParts );
+ for ( int i = extList.count() - 1; i >= 0; i-- )
+ {
if ( !extList[i].contains( "." ) )
- extList.remove( extList.at( i ) );
+ extList.removeAt( i );
}
aPattern = extList.join( "|" );
QRegExp anExtRExp( "^("+ aPattern + ")$" );
// Check if the current file extension matches the pattern
- if ( anExtRExp.match( anExt ) < 0 )
+ if ( !anExtRExp.exactMatch( anExt ) )
{
// find first appropriate extension in the selected filter
// (it should be without wildcard symbols)
for ( int i = 0; i < (int)extList.count(); i++ )
{
QString newExt = extList[i].replace( QRegExp( "[\\\\][+]" ),"+" );
- int res = newExt.findRev( '.' );
+ int res = newExt.lastIndexOf( '.' );
if ( res >= 0 )
newExt = newExt.mid( res + 1 );
- if ( newExt.find( QRegExp("[*|?]" ) ) < 0 )
+ if ( newExt.indexOf( QRegExp("[*|?]" ) ) < 0 )
{
- mySelectedFile.stripWhiteSpace();
+ mySelectedFile.trimmed();
mySelectedFile += mySelectedFile.endsWith(".") ? newExt : QString(".") + newExt;
break;
}
/*! Processes selection : tries to set given path or filename as selection */
bool SUIT_FileDlg::processPath( const QString& path )
{
- if ( !path.isNull() ) {
+ if ( !path.isNull() )
+ {
QFileInfo fi( path );
- if ( fi.exists() ) {
+ if ( fi.exists() )
+ {
if ( fi.isFile() )
- setSelection( path );
+ selectFile( path );
else if ( fi.isDir() )
- setDir( path );
+ setDirectory( path );
return true;
}
- else {
- if ( QFileInfo( fi.dirPath() ).exists() ) {
- setDir( fi.dirPath() );
- setSelection( path );
- return true;
+ else
+ {
+ if ( QFileInfo( SUIT_Tools::dir( path ) ).exists() )
+ {
+ setDirectory( SUIT_Tools::dir( path ) );
+ selectFile( path );
+ return true;
}
}
}
void SUIT_FileDlg::quickDir(const QString& dirPath)
{
QString aPath = dirPath;
- if ( !QDir(aPath).exists() ) {
- aPath = QDir::homeDirPath();
+ if ( !QDir(aPath).exists() )
+ {
+ aPath = QDir::homePath();
SUIT_MessageBox::error1(this,
tr("ERR_ERROR"),
tr("ERR_DIR_NOT_EXIST").arg(dirPath),
*/
void SUIT_FileDlg::addQuickDir()
{
- QString dp = dirPath();
- if ( !dp.isEmpty() ) {
+ QString dp = directory().path();
+ if ( !dp.isEmpty() )
+ {
QDir dir( dp );
// getting dir list from settings
QString dirs;
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
if ( resMgr )
dirs = resMgr->stringValue( "FileDlg", QString( "QuickDirList" ) );
- QStringList dirList = QStringList::split(';', dirs, false);
+ QStringList dirList = dirs.split( ';', QString::SkipEmptyParts );
bool found = false;
bool emptyAndHome = false;
- if ( dirList.count() > 0 ) {
- for ( unsigned i = 0; i < dirList.count(); i++ ) {
- QDir aDir( dirList[i] );
- if ( aDir.canonicalPath().isNull() && dirList[i] == dir.absPath() ||
- !aDir.canonicalPath().isNull() && aDir.exists() && aDir.canonicalPath() == dir.canonicalPath() ) {
- found = true;
- break;
- }
+ if ( dirList.count() > 0 )
+ {
+ for ( unsigned i = 0; i < dirList.count(); i++ )
+ {
+ QDir aDir( dirList[i] );
+ if ( aDir.canonicalPath().isNull() && dirList[i] == dir.absolutePath() ||
+ !aDir.canonicalPath().isNull() && aDir.exists() && aDir.canonicalPath() == dir.canonicalPath() )
+ {
+ found = true;
+ break;
+ }
}
}
- else {
- emptyAndHome = dir.canonicalPath() == QDir(QDir::homeDirPath()).canonicalPath();
- }
- if ( !found ) {
+ else
+ emptyAndHome = dir.canonicalPath() == QDir( QDir::homePath() ).canonicalPath();
+
+ if ( !found )
+ {
dirList.append( dp );
- resMgr->setValue( "FileDlg", QString( "QuickDirList" ), dirList.join(";") );
+ resMgr->setValue( "FileDlg", QString( "QuickDirList" ), dirList.join( ";" ) );
if ( !emptyAndHome )
- myQuickCombo->insertItem( dp );
+ myQuickCombo->addItem( dp );
}
}
}
/*!
Returns the file name for Open/Save [ static ]
*/
-QString SUIT_FileDlg::getFileName( QWidget* parent,
- const QString& initial,
- const QStringList& filters,
- const QString& caption,
- bool open,
- bool showQuickDir,
- SUIT_FileValidator* validator )
+QString SUIT_FileDlg::getFileName( QWidget* parent, const QString& initial, const QStringList& filters,
+ const QString& caption, bool open, bool showQuickDir,
+ SUIT_FileValidator* validator )
{
SUIT_FileDlg* fd = new SUIT_FileDlg( parent, open, showQuickDir, true );
if ( !caption.isEmpty() )
- fd->setCaption( caption );
- if ( !initial.isEmpty() ) {
+ fd->setWindowTitle( caption );
+ if ( !initial.isEmpty() )
fd->processPath( initial ); // VSR 24/03/03 check for existing of directory has been added to avoid QFileDialog's bug
- }
- fd->setFilters( filters );
+
+ fd->setFilters( filters );
if ( validator )
fd->setValidator( validator );
+
fd->exec();
+
QString filename = fd->selectedFile();
delete fd;
+
qApp->processEvents();
+
return filename;
}
-
/*!
Returns the list of files to be opened [ static ]
*/
-QStringList SUIT_FileDlg::getOpenFileNames( QWidget* parent,
- const QString& initial,
- const QStringList& filters,
- const QString& caption,
- bool showQuickDir,
- SUIT_FileValidator* validator )
+QStringList SUIT_FileDlg::getOpenFileNames( QWidget* parent, const QString& initial, const QStringList& filters,
+ const QString& caption, bool showQuickDir, SUIT_FileValidator* validator )
{
SUIT_FileDlg* fd = new SUIT_FileDlg( parent, true, showQuickDir, true );
- fd->setMode( ExistingFiles );
+ fd->setFileMode( ExistingFiles );
if ( !caption.isEmpty() )
- fd->setCaption( caption );
- if ( !initial.isEmpty() ) {
+ fd->setWindowTitle( caption );
+ if ( !initial.isEmpty() )
fd->processPath( initial ); // VSR 24/03/03 check for existing of directory has been added to avoid QFileDialog's bug
- }
+
fd->setFilters( filters );
if ( validator )
fd->setValidator( validator );
+
fd->exec();
QStringList filenames = fd->selectedFiles();
delete fd;
+
qApp->processEvents();
return filenames;
}
/*!
Existing directory selection dialog [ static ]
*/
-QString SUIT_FileDlg::getExistingDirectory( QWidget* parent,
- const QString& initial,
- const QString& caption,
- bool showQuickDir )
+QString SUIT_FileDlg::getExistingDirectory( QWidget* parent, const QString& initial,
+ const QString& caption, bool showQuickDir )
{
- SUIT_FileDlg* fd = new SUIT_FileDlg( parent, true, showQuickDir, true);
+ SUIT_FileDlg* fd = new SUIT_FileDlg( parent, true, showQuickDir, true );
if ( !caption.isEmpty() )
- fd->setCaption( caption );
- if ( !initial.isEmpty() ) {
+ fd->setWindowTitle( caption );
+ if ( !initial.isEmpty() )
fd->processPath( initial ); // VSR 24/03/03 check for existing of directory has been added to avoid QFileDialog's bug
- }
- fd->setMode( DirectoryOnly );
- fd->setFilters(tr("INF_DIRECTORIES_FILTER"));
+
+ fd->setFileMode( DirectoryOnly );
+ fd->setFilters( QStringList( tr( "INF_DIRECTORIES_FILTER" ) ) );
+
fd->exec();
+
QString dirname = fd->selectedFile();
delete fd;
+
qApp->processEvents();
return dirname;
-
-}
-
-/*!
- QFileDialog::dirPath() has a bug on Linux Debian (1 level up from correct
- directory is returned). This function fixes the bug.
-*/
-QString SUIT_FileDlg::dirPath() const
-{
- if ( !mySelectedFile.isNull() )
- return QFileInfo( mySelectedFile ).dirPath();
-
- const QDir* aDir = dir();
- if ( aDir->exists() )
- return aDir->absPath();
-
- return QFileDialog::dirPath();
}
#include "SUIT.h"
-#include <qfiledialog.h>
+#include <QtGui/qfiledialog.h>
class QLabel;
class QComboBox;
void setValidator( SUIT_FileValidator* );
- QString dirPath() const; // QFileDialog::dirPath() has a bug on Linux Debian (1 level up from correct
- // directory is returned). This redefinition fixes the bug.
-
static QString getFileName( QWidget* parent, const QString& initial, const QStringList& filters,
const QString& caption, const bool open, const bool showQuickDir = true,
SUIT_FileValidator* validator = 0 );
static QString getExistingDirectory( QWidget* parent, const QString& initial,
const QString& caption, const bool showQuickDir = true );
-public slots:
- void polish();
-
private:
+ void polish();
bool acceptData();
void addExtension();
bool processPath( const QString& path );
void quickDir( const QString& );
void addQuickDir();
+protected:
+ virtual bool event( QEvent* );
+
protected:
bool myOpen; //!< open/save selector
QString mySelectedFile; //!< selected filename
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
-// SALOME SALOMEGUI : implementation of desktop and GUI kernel
-//
-// File : SUIT_FileValidator.cxx
-// Module : SALOME
-// $Header$
-
#include "SUIT_FileValidator.h"
#include "SUIT_MessageBox.h"
#include "SUIT_Session.h"
-#include <qfile.h>
-#include <qfileinfo.h>
+#include <QtCore/qfile.h>
+#include <QtCore/qfileinfo.h>
/*! constructor */
SUIT_FileValidator::SUIT_FileValidator(QWidget* parent) :
return false;
}
}
- else {
+ else
+ {
// if file doesn't exist - try to create it
QFile qf( file );
- if ( !qf.open( IO_WriteOnly ) ) {
- SUIT_MessageBox::error1( myParent,
- QObject::tr( "ERR_ERROR" ),
- QObject::tr( "ERR_PERMISSION_DENIED" ).arg( file ),
- QObject::tr( "BUT_OK" ) );
+ if ( !qf.open( QFile::WriteOnly ) )
+ {
+ SUIT_MessageBox::error1( myParent, QObject::tr( "ERR_ERROR" ),
+ QObject::tr( "ERR_PERMISSION_DENIED" ).arg( file ),
+ QObject::tr( "BUT_OK" ) );
return false;
}
- else {
+ else
+ {
// remove just created file
qf.close();
qf.remove();
}
return true;
}
-
//
// SALOME SALOMEGUI : implementation of desktop and GUI kernel
//
-// File : SUIT_FileValidator.h
-// Module : SALOME
-
#ifndef SUIT_FILEVALIDATOR_H
#define SUIT_FILEVALIDATOR_H
-#include <qwidget.h>
#include "SUIT.h"
+#include <QtGui/qwidget.h>
+
/*!
\class SUIT_FileValidator
Provides functionality to check file
#include "SUIT_MessageBox.h"
#include "SUIT_OverrideCursor.h"
-#include <qmessagebox.h>
-#include <qapplication.h>
+#include <QtGui/qmessagebox.h>
+#include <QtGui/qapplication.h>
/*!
Shows info message box with one button [ static ]
*/
-int SUIT_MessageBox::info1( QWidget* parent,
- const QString& caption,
- const QString& text,
- const QString& textButton0 )
+int SUIT_MessageBox::info1( QWidget* parent, const QString& caption,
+ const QString& text, const QString& textButton0 )
{
- SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+ SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
int ret = QMessageBox::information( parent, caption, text, textButton0,
QString::null, QString::null, 0, 0 );
qApp->processEvents();
const QString& text,
const QString& textButton0 )
{
- SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+ SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
int ret = QMessageBox::warning( parent, caption, text, textButton0,
QString::null, QString::null, 0, 0 );
qApp->processEvents();
const QString& text,
const QString& textButton0 )
{
- SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+ SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
int ret = QMessageBox::critical( parent, caption, text, textButton0,
QString::null, QString::null, 0, 0 );
qApp->processEvents();
const QString& text,
const QString& textButton0 )
{
- SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+ SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
int ret = QMessageBox::question( parent, caption, text, textButton0,
QString::null, QString::null, 0, 0 );
qApp->processEvents();
const QString& textButton1,
int idButton0, int idButton1, int idDefault )
{
- SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+ SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
if ( idDefault == idButton0 )
idDefault = 0;
else if ( idDefault == idButton1 )
const QString& textButton1,
int idButton0, int idButton1, int idDefault )
{
- SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+ SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
if ( idDefault == idButton0 )
idDefault = 0;
const QString& textButton1,
int idButton0, int idButton1, int idDefault )
{
- SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+ SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
if ( idDefault == idButton0 )
idDefault = 0;
const QString& textButton1,
int idButton0, int idButton1, int idDefault )
{
- SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+ SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
if ( idDefault == idButton0 )
idDefault = 0;
int idButton0, int idButton1,
int idButton2, int idDefault )
{
- SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+ SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
if ( idDefault == idButton0 )
idDefault = 0;
int idButton0, int idButton1,
int idButton2, int idDefault )
{
- SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+ SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
if ( idDefault == idButton0 )
idDefault = 0;
int idButton0, int idButton1,
int idButton2, int idDefault )
{
- SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+ SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
if ( idDefault == idButton0 )
idDefault = 0;
int idButton0, int idButton1,
int idButton2, int idDefault )
{
- SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+ SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
if ( idDefault == idButton0 )
idDefault = 0;
#include "SUIT.h"
-#include <qstring.h>
-#include <qwidget.h>
+#include <QtCore/qstring.h>
+#include <QtGui/qwidget.h>
#define SUIT_OK 1
#define SUIT_CANCEL 2
#include "SUIT.h"
-#include <qobject.h>
-#include <qguardedptr.h>
+#include <QtCore/qobject.h>
+#include <QtCore/qpointer.h>
class SUIT_Study;
class SUIT_Application;
virtual QString operationName() const;
+ int execStatus() const;
+
signals:
void started( SUIT_Operation* );
void aborted( SUIT_Operation* );
virtual bool hasTransaction() const;
virtual bool commitTransaction( const QString& = QString::null );
- int execStatus() const;
void setExecStatus( const int );
void setState( const OperationState );
void start( SUIT_Operation*, const bool = false );
private:
- typedef QGuardedPtr<SUIT_Study> StudyPtr;
+ typedef QPointer<SUIT_Study> StudyPtr;
private:
SUIT_Application* myApp; //!< application for this operation
if ( isActive() )
return;
- for ( QValueList<QCursor>::const_iterator it = myCursors.begin(); it != myCursors.end(); ++it )
+ for ( QList<QCursor>::const_iterator it = myCursors.begin(); it != myCursors.end(); ++it )
QApplication::setOverrideCursor( *it );
myCursors.clear();
#ifndef SUIT_OVERRIDECURSOR_H
#define SUIT_OVERRIDECURSOR_H
-#include <qapplication.h>
-#include <qcursor.h>
-
#include "SUIT.h"
+#include <QtCore/qlist.h>
+#include <QtGui/qcursor.h>
+#include <QtGui/qapplication.h>
+
/*! \brief Class used for management cursors.*/
class SUIT_EXPORT SUIT_OverrideCursor
{
void resume();
private:
- QValueList<QCursor> myCursors;
+ QList<QCursor> myCursors;
};
#endif
+++ /dev/null
-// SALOME SALOMEGUI : implementation of desktop and GUI kernel
-//
-// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-//
-//
-// File : SUIT_ParserSettings.cxx
-// Author : Nicolas REJNERI
-// Module : SALOME
-// $Header$
-
-#include "SUIT_ParserSettings.h"
-
-#include <stdio.h>
-
-// QT Includes
-#include <qfile.h>
-#include <qfileinfo.h>
-#include <qtextstream.h>
-
-
-/*! Constructor. Do nothing.*/
-SUIT_ParserSettings::SUIT_ParserSettings()
-{
-}
-
-
-/*!
- Destructor. Do nothing.
-*/
-SUIT_ParserSettings::~SUIT_ParserSettings()
-{
-}
-
-
-/*!
- Gets the contents of a file.
-*/
-QString SUIT_ParserSettings::getContents(QString fileName, bool comments,
- bool sections, bool whiteSpace,
- bool htmlComments)
-{
- QFileInfo fi(fileName);
- QFile f(fi.absFilePath());
- QString s=""; // Buffer for the whole file
-
- if(f.open(IO_ReadOnly)) { // file opened successfully
- QTextStream t(&f); // use a text stream
-
- s = t.read(); // The whole file in a string
- f.close();
-
- if(!comments) s = SUIT_ParserSettings::removeComments(s);
- if(!sections) s = SUIT_ParserSettings::removeSections(s);
- if(!whiteSpace) s = s.simplifyWhiteSpace();
- if(!htmlComments) s = SUIT_ParserSettings::removeHtmlComments(s);
- }
- else {
- // Can't open file
- }
-
- return s;
-}
-
-
-/*!
- Gets the body of a section from a string.
-*/
-QString SUIT_ParserSettings::getSection(QString s, QString sectionName)
-{
- QString result="";
-
- QChar ch; // A single byte of the file
- int bracketCounter=1; // Bracket counter (increase on '{' and decrese on '}'.
- int i; // Current index
- int l=0; // Length of current part we must have
-
- if((i=s.find(sectionName, 0, false)) >= 0 && // Jump to section [styles]
- (i=s.find('{', i)) >= 0 ) {
-
- ++i;
-
- while(i+l<(int)s.length()) {
- ch = s.at(i+l); // Single byte
-
- ++l;
-
- if(ch=='{') ++bracketCounter;
- if(ch=='}') --bracketCounter;
-
- if(bracketCounter==0) break;
- }
-
- result = s.mid(i, l-1);
- }
-
- return result;
-}
-
-
-
-/*!
- Gets the HTML comments out of a file.
-*/
-QString SUIT_ParserSettings::getHtmlComment(QString s)
-{
- QString result="";
- int length; // length of the sub string
- int ind=0;
-
- if((ind =s.find("<!--", ind))>=0 &&
- (ind+=4) &&
- (length=s.find("-->", ind)-ind)!=0) {
-
- result=s.mid(ind, length-3);
- }
-
- return result;
-}
-
-
-
-/*!
- Gets the next String between two given characters. The index-parameter gets moved to the character after
- the stopper or to -1 if the starter / stopper were not found.
-*/
-QString SUIT_ParserSettings::getNextStringBetween(QString s, int& startIndex,
- QChar starter, QChar stopper)
-{
- QString result="";
- int length=0; // length of the sub string
-
- if((startIndex =s.find(starter, startIndex))>=0 &&
- (length=s.find(stopper, startIndex+1)-startIndex)!=0) {
-
- result=s.mid(startIndex+1, length-1);
- startIndex+=2;
- }
-
- return result;
-}
-
-
-/*!
- Gets the next String between the given index and a given stopper character. The index-parameter gets moved to
- the character after the stopper or to -1 if the stopper was not found.
-*/
-QString SUIT_ParserSettings::getNextStringUntil(QString s, int& startIndex, QChar stopper)
-{
- QString result="";
- int length; // length of the sub string
-
- if((length=s.find(stopper, startIndex)-startIndex)!=0) {
- result=s.mid(startIndex, length);
- startIndex++;
- }
-
- return result;
-}
-
-
-/*!
- Removes all comments (between '/ *' and '* /').
-*/
-QString SUIT_ParserSettings::removeComments(QString s)
-{
- QString result="";
- int i1=0, i2;
-
- while((i2=s.find("/*", i1))>=0) {
- result += s.mid(i1, i2-i1);
-
- i1+=2;
- i1=s.find("*/", i1);
- i1+=2;
- }
-
- result += s.mid(i1, s.length()-i1);
-
- return result;
-}
-
-
-
-/*!
- Removes all HTML comments (between '<!--' and '-->') \image html html_comments.gif
-*/
-QString SUIT_ParserSettings::removeHtmlComments(QString s)
-{
- QString result="";
- int i1=0, i2;
-
- while((i2=s.find("<!--", i1))>=0) {
- result += s.mid(i1, i2-i1);
-
- i1+=4;
- i1=s.find("-->", i1);
- i1+=3;
- }
-
- result += s.mid(i1, s.length()-i1);
-
- return result;
-}
-
-
-
-/*!
- Removes all sections ('[section] { }').
-*/
-QString SUIT_ParserSettings::removeSections(QString s)
-{
- QString result="";
-
- QChar ch; // A single byte of the file
- int bracketCounter; // Bracket counter (increase on '{' and decrese on '}'.
- int i=0; // Current index
-
- while(i<(int)s.length()) {
- ch = s.at(i); // Single byte
-
- if(ch=='[') {
- bracketCounter=1;
- while(i<(int)s.length() && ch!=']') { ch = s.at(i); ++i; }
- ++i;
- while(i<(int)s.length() && ch!='{') { ch = s.at(i); ++i; }
- ++i;
-
- while(i<(int)s.length() && bracketCounter!=0) {
- ch = s.at(i);
- if(ch=='{') ++bracketCounter;
- if(ch=='}') --bracketCounter;
- ++i;
- }
- ++i;
- }
- else {
- result+=ch;
- }
-
- ++i;
- }
-
- return result;
-}
-
-
-/*!
- Format plain text into HTML-code with a given maximal width.
- Spaces get replaced with non breaking spaces. Tabulators get filled up
- with non breaking spaces.
-*/
-QString SUIT_ParserSettings::plainTextToHtml(QString s, int autoBreak)
-{
- QString result="\n";
-
- if(!s.isEmpty()) {
- int col=1, i;
-
- for(i=0; i<(int)s.length(); ++i) {
- // Line feed:
- //
- if(s[i]=='\n') {
- result+="<BR>\n";
- col=1;
- }
-
- // Auto break:
- //
- else if(col==autoBreak && autoBreak!=0) {
- result+="<BR>\n";
- result+=s[i];
- col=1;
- }
-
- // Tab:
- //
- else if(s[i]=='\t') {
- while(col%8!=0) { result+=" "; ++col; }
- result+=" ";
- ++col;
- }
-
- // Space:
- //
- else if(s[i]==' ') {
- result+=" ";
- ++col;
- }
-
- // Normal char / special code:
- //
- else {
- if(s[i].isLetter() || s[i].isNumber()) {
- result+=s[i];
- }
- else {
- result+=charToHtml(s[i]);
- }
- ++col;
- }
- }
-
- result+="\n";
- }
-
- return result;
-}
-
-
-/*!
- Converts a special character to html code (e.g.: '»' to "»")
-*/
-QString SUIT_ParserSettings::charToHtml(QChar c)
-{
- QString s;
- QString uc;
- uc.setNum(c.unicode());
- s = "&#" + uc + ";";
- return s;
-}
-
-
-// EOF
+++ /dev/null
-// SALOME SALOMEGUI : implementation of desktop and GUI kernel
-//
-// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-//
-//
-// File : SUIT_ParserSettings.h
-// Author : Nicolas REJNERI
-// Module : SALOME
-// $Header$
-
-#ifndef SUIT_PARSERSETTINGS_H
-#define SUIT_PARSERSETTINGS_H
-
-#include <qstring.h>
-#include "SUIT.h"
-/*! \brief Text Parser.*/
-class SUIT_EXPORT SUIT_ParserSettings
-{
-public:
- SUIT_ParserSettings();
- ~SUIT_ParserSettings();
-
- static QString getContents(QString fileName, bool comments=true,
- bool sections=true, bool whitespace=true,
- bool htmlComments=true);
- static QString getSection(QString s, QString sectionName);
- static QString getHtmlComment(QString s);
- static QString getNextStringBetween(QString s, int& startIndex, QChar starter, QChar stopper);
- static QString getNextStringUntil(QString s, int& startIndex, QChar stopper);
- static QString removeComments(QString s);
- static QString removeHtmlComments(QString s);
- static QString removeSections(QString s);
- static QString plainTextToHtml(QString s, int autoBreak);
- static QString charToHtml(QChar c);
-
-};
-
-#endif
//
#include "SUIT_PopupClient.h"
-#include <qevent.h>
+#include <QtGui/qevent.h>
/*! constructor. initialize mySignal.*/
SUIT_PopupClient::SUIT_PopupClient()
#include "SUIT.h"
-#include <qobject.h>
+#include <QtCore/qobject.h>
-class QPopupMenu;
+class QMenu;
class QContextMenuEvent;
/*!\class SUIT_PopupClient
bool disconnectPopupRequest( QObject* reciever, const char* slot );
virtual QString popupClientType() const = 0;
- virtual void contextMenuPopup( QPopupMenu* ) {}
+ virtual void contextMenuPopup( QMenu* ) {}
protected:
void contextMenuRequest( QContextMenuEvent* e );
//
#include "SUIT_ResourceMgr.h"
-#include <qfileinfo.h>
-#include <qdir.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qfileinfo.h>
+
#include <stdlib.h>
/*!
return path( docSection, prefix, id );
}
-#ifndef WIN32
-#include <unistd.h>
-#endif
/*!
Returns the user file name for specified application
*/
*/
QString SUIT_ResourceMgr::findAppropriateUserFile( const QString& fname ) const
{
- QDir d( QFileInfo( fname ).dir( true ) );
+ QDir d( QFileInfo( fname ).dir() );
d.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks );
QStringList l = d.entryList();
QString appr_file;
if( appr < 0 || abs( id-id0 ) < abs( appr-id0 ) )
{
appr = id;
- appr_file = d.absFilePath( *anIt );
+ appr_file = d.absoluteFilePath( *anIt );
}
}
return appr_file;
/*!constructor. initialize myIterations and myIsSelChangeEnabled.*/
SUIT_SelectionMgr::SUIT_SelectionMgr( const bool Feedback, QObject* p )
: QObject( p ),
+myAutoDelFilter( false ),
myIterations( Feedback ? 1 : 0 ),
myIsSelChangeEnabled( true )
{
/*!destructor. mySelectors auto delete.*/
SUIT_SelectionMgr::~SUIT_SelectionMgr()
{
- mySelectors.setAutoDelete( true );
+ for ( SelectorList::iterator it = mySelectors.begin(); it != mySelectors.end(); ++it )
+ delete *it;
}
/*!Add selector \a sel to selectors list,if it's not exists in list.*/
/*!Remove selector \a sel from list.*/
void SUIT_SelectionMgr::removeSelector( SUIT_Selector* sel )
{
- mySelectors.remove( sel );
+ mySelectors.removeAll( sel );
}
/*!Gets selectors list to \a lst.*/
-void SUIT_SelectionMgr::selectors( QPtrList<SUIT_Selector>& lst ) const
+void SUIT_SelectionMgr::selectors( QList<SUIT_Selector*>& lst ) const
{
lst.clear();
- for ( SelectorListIterator it( mySelectors ); it.current(); ++it )
- lst.append( it.current() );
+ for ( SelectorList::const_iterator it = mySelectors.begin(); it != mySelectors.end(); ++it )
+ lst.append( *it );
}
/*!Gets selectors list to \a lst with type \a typ.*/
-void SUIT_SelectionMgr::selectors( const QString& typ, QPtrList<SUIT_Selector>& lst ) const
+void SUIT_SelectionMgr::selectors( const QString& typ, QList<SUIT_Selector*>& lst ) const
{
lst.clear();
- for ( SelectorListIterator it( mySelectors ); it.current(); ++it )
+ for ( SelectorList::const_iterator it = mySelectors.begin(); it != mySelectors.end(); ++it )
{
- if ( it.current()->type() == typ )
- lst.append( it.current() );
+ if ( (*it)->type() == typ )
+ lst.append( *it );
}
}
*/
void SUIT_SelectionMgr::setEnabled( const bool on, const QString& typ )
{
- for ( SelectorListIterator it( mySelectors ); it.current(); ++it )
+ for ( SelectorList::const_iterator it = mySelectors.begin(); it != mySelectors.end(); ++it )
{
- if ( typ.isEmpty() || it.current()->type() == typ )
- it.current()->setEnabled( on );
+ if ( typ.isEmpty() || (*it)->type() == typ )
+ (*it)->setEnabled( on );
}
}
{
lst.clear();
- for ( SelectorListIterator it( mySelectors ); it.current(); ++it )
+ for ( SelectorList::const_iterator it = mySelectors.begin(); it != mySelectors.end(); ++it )
{
- if ( !type.isEmpty() && it.current()->type() != type )
+ if ( !type.isEmpty() && (*it)->type() != type )
continue;
+
SUIT_DataOwnerPtrList curList;
- it.current()->selected( curList );
+ (*it)->selected( curList );
for ( SUIT_DataOwnerPtrList::const_iterator itr = curList.begin(); itr != curList.end(); ++itr )
lst.append( *itr );
}
SUIT_DataOwnerPtrList owners;
filterOwners( lst, owners );
- for ( SelectorListIterator it( mySelectors ); it.current(); ++it )
+ for ( SelectorList::const_iterator it = mySelectors.begin(); it != mySelectors.end(); ++it )
{
if ( append )
{
SUIT_DataOwnerPtrList current;
- it.current()->selected( current );
+ (*it)->selected( current );
for ( SUIT_DataOwnerPtrList::const_iterator it = current.begin(); it != current.end(); ++it )
owners.append( *it );
}
- it.current()->setSelected( owners );
+ (*it)->setSelected( owners );
}
}
for ( int i = 0; i < myIterations; i++ )
{
- for ( SUIT_Selector* aSel = mySelectors.first(); aSel; aSel = mySelectors.next() )
+ for ( SelectorList::iterator it = mySelectors.begin(); it != mySelectors.end(); ++it )
{
- // Temporary action(to avoid selection of the objects which don't pass the filters):
- //if ( aSel != sel )
- aSel->setSelected( newOwners );
+ SUIT_Selector* aSel = *it;
+ if ( *it != sel )
+ (*it)->setSelected( newOwners );
}
}
myIsSelChangeEnabled = true;
/*! Gets selection modes to list \a vals.
*/
-void SUIT_SelectionMgr::selectionModes( QValueList<int>& vals ) const
+void SUIT_SelectionMgr::selectionModes( QList<int>& vals ) const
{
vals = mySelModes;
}
*/
void SUIT_SelectionMgr::setSelectionModes( const int mode )
{
- QValueList<int> lst;
+ QList<int> lst;
lst.append( mode );
setSelectionModes( lst );
}
/*! Sets selection modes list from \a lst.
*/
-void SUIT_SelectionMgr::setSelectionModes( const QValueList<int>& lst )
+void SUIT_SelectionMgr::setSelectionModes( const QList<int>& lst )
{
mySelModes = lst;
}
*/
void SUIT_SelectionMgr::appendSelectionModes( const int mode )
{
- QValueList<int> lst;
+ QList<int> lst;
lst.append( mode );
appendSelectionModes( lst );
}
/*! Append selection modes \a lst list.
*/
-void SUIT_SelectionMgr::appendSelectionModes( const QValueList<int>& lst )
+void SUIT_SelectionMgr::appendSelectionModes( const QList<int>& lst )
{
QMap<int, int> map;
- for ( QValueList<int>::const_iterator it = mySelModes.begin(); it != mySelModes.end(); ++it )
+ for ( QList<int>::const_iterator it = mySelModes.begin(); it != mySelModes.end(); ++it )
map.insert( *it, 0 );
- for ( QValueList<int>::const_iterator itr = lst.begin(); itr != lst.end(); ++itr )
+ for ( QList<int>::const_iterator itr = lst.begin(); itr != lst.end(); ++itr )
{
if ( !map.contains( *itr ) )
mySelModes.append( *itr );
*/
void SUIT_SelectionMgr::removeSelectionModes( const int mode )
{
- QValueList<int> lst;
+ QList<int> lst;
lst.append( mode );
removeSelectionModes( lst );
}
/*! Remove selection modea \a lst from list.
*/
-void SUIT_SelectionMgr::removeSelectionModes( const QValueList<int>& lst )
+void SUIT_SelectionMgr::removeSelectionModes( const QList<int>& lst )
{
QMap<int, int> map;
- for ( QValueList<int>::const_iterator it = mySelModes.begin(); it != mySelModes.end(); ++it )
+ for ( QList<int>::const_iterator it = mySelModes.begin(); it != mySelModes.end(); ++it )
map.insert( *it, 0 );
- for ( QValueList<int>::const_iterator itr = lst.begin(); itr != lst.end(); ++itr )
+ for ( QList<int>::const_iterator itr = lst.begin(); itr != lst.end(); ++itr )
map.remove( *itr );
mySelModes.clear();
return false;
bool ok = true;
- for ( SelFilterListIterator it( myFilters ); it.current() && ok; ++it )
- ok = it.current()->isOk( owner );
+ for ( SelFilterList::const_iterator it = myFilters.begin(); it != myFilters.end() && ok; ++it )
+ ok = (*it)->isOk( owner );
return ok;
}
*/
void SUIT_SelectionMgr::removeFilter( SUIT_SelectionFilter* f )
{
- myFilters.remove( f );
+ if ( !myFilters.contains( f ) )
+ return;
+
+ myFilters.removeAll( f );
+
+ if ( autoDeleteFilter() )
+ delete f;
}
/*! Clear filters list.
*/
void SUIT_SelectionMgr::clearFilters()
{
+ if ( autoDeleteFilter() )
+ {
+ for ( SelFilterList::const_iterator it = myFilters.begin(); it != myFilters.end(); ++it )
+ delete *it;
+ }
+
myFilters.clear();
}
*/
bool SUIT_SelectionMgr::autoDeleteFilter() const
{
- return myFilters.autoDelete();
+ return myAutoDelFilter;
}
/*! Sets auto delete filter to \a on.
*/
void SUIT_SelectionMgr::setAutoDeleteFilter( const bool on )
{
- myFilters.setAutoDelete( on );
+ myAutoDelFilter = on;
}
/*! Gets good data owners list to \a out from \a in.
#include "SUIT_DataOwner.h"
#include "SUIT_SelectionFilter.h"
-#include <qobject.h>
-#include <qptrlist.h>
-#include <qvaluelist.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qobject.h>
#ifdef WIN32
#pragma warning ( disable : 4251 )
virtual void selected( SUIT_DataOwnerPtrList&, const QString& = QString::null ) const;
virtual void setSelected( const SUIT_DataOwnerPtrList&, const bool = false );
- void selectors( QPtrList<SUIT_Selector>& ) const;
- void selectors( const QString&, QPtrList<SUIT_Selector>& ) const;
+ void selectors( QList<SUIT_Selector*>& ) const;
+ void selectors( const QString&, QList<SUIT_Selector*>& ) const;
void setEnabled( const bool, const QString& = QString::null );
bool hasSelectionMode( const int ) const;
- void selectionModes( QValueList<int>& ) const;
+ void selectionModes( QList<int>& ) const;
void setSelectionModes( const int );
- virtual void setSelectionModes( const QValueList<int>& );
+ virtual void setSelectionModes( const QList<int>& );
void appendSelectionModes( const int );
- virtual void appendSelectionModes( const QValueList<int>& );
+ virtual void appendSelectionModes( const QList<int>& );
void removeSelectionModes( const int );
- virtual void removeSelectionModes( const QValueList<int>& );
+ virtual void removeSelectionModes( const QList<int>& );
bool isOk( const SUIT_DataOwner* ) const;
protected:
virtual void selectionChanged( SUIT_Selector* );
- typedef QPtrListIterator<SUIT_Selector> SelectorListIterator;
-
virtual void installSelector( SUIT_Selector* );
virtual void removeSelector( SUIT_Selector* );
private:
void filterOwners( const SUIT_DataOwnerPtrList&, SUIT_DataOwnerPtrList& ) const;
- typedef QPtrList<SUIT_Selector> SelectorList;
- typedef QPtrList<SUIT_SelectionFilter> SelFilterList;
- typedef QPtrListIterator<SUIT_SelectionFilter> SelFilterListIterator;
-
-protected:
- SelectorList mySelectors;
+ typedef QList<SUIT_Selector*> SelectorList;
+ typedef QList<SUIT_SelectionFilter*> SelFilterList;
private:
SelFilterList myFilters;
- QValueList<int> mySelModes;
+ QList<int> mySelModes;
+ SelectorList mySelectors;
int myIterations;
+ bool myAutoDelFilter;
bool myIsSelChangeEnabled;
friend class SUIT_Selector;
/*!
Puts to list \a lst selection modes from selection manager.
*/
-void SUIT_Selector::selectionModes( QValueList<int>& lst ) const
+void SUIT_Selector::selectionModes( QList<int>& lst ) const
{
if ( selectionMgr() )
selectionMgr()->selectionModes( lst );
#include "SUIT.h"
-#include <qvaluelist.h>
-#include <qobject.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qobject.h>
class SUIT_SelectionMgr;
class SUIT_DataOwnerPtrList;
void setSelected( const SUIT_DataOwnerPtrList& );
bool hasSelectionMode( const int ) const;
- void selectionModes( QValueList<int>& ) const;
+ void selectionModes( QList<int>& ) const;
protected:
void selectionChanged();
#include "SUIT_ViewManager.h"
#include "SUIT_ExceptionHandler.h"
-#include <qtextcodec.h>
-#include <qmessagebox.h>
-#include <qapplication.h>
+#include <QtCore/qtextcodec.h>
+#include <QtGui/qmessagebox.h>
+#include <QtGui/qapplication.h>
-#ifdef WIN32
+#ifdef Q_OS_WIN32
#include <windows.h>
#else
#include <dlfcn.h>
#endif
-static bool SUIT_Session_IsPythonExecuted = false;
-static QMutex SUIT_Session_PythonMutex;
-
SUIT_Session* SUIT_Session::mySession = 0;
/*! Constructor.*/
SUIT_ASSERT( !mySession )
mySession = this;
-
- myAppList.setAutoDelete( true );
}
/*!destructor. Clear applications list and set mySession to zero.*/
SUIT_Session::~SUIT_Session()
{
+ for ( AppList::iterator it = myAppList.begin(); it != myAppList.end(); ++it )
+ delete *it;
+
myAppList.clear();
- if (myResMgr) {
+ if ( myResMgr )
+ {
delete myResMgr;
myResMgr = 0;
}
APP_CREATE_FUNC crtInst = 0;
-#ifdef WIN32
- crtInst = (APP_CREATE_FUNC)::GetProcAddress( libHandle, APP_CREATE_NAME );
+#ifdef Q_OS_WIN32
+ crtInst = (APP_CREATE_FUNC)::GetProcAddress( (HINSTANCE)libHandle, APP_CREATE_NAME );
#else
crtInst = (APP_CREATE_FUNC)dlsym( libHandle, APP_CREATE_NAME );
#endif
return 0;
}
- anApp->setName( appName );
-
- connect( anApp, SIGNAL( applicationClosed( SUIT_Application* ) ),
- this, SLOT( onApplicationClosed( SUIT_Application* ) ) );
- connect( anApp, SIGNAL( activated( SUIT_Application* ) ),
- this, SLOT( onApplicationActivated( SUIT_Application* ) ) );
+ anApp->setObjectName( appName );
- myAppList.append( anApp );
+ insertApplication( anApp );
if ( !myHandler )
{
APP_GET_HANDLER_FUNC crtHndlr = 0;
-#ifdef WIN32
- crtHndlr = (APP_GET_HANDLER_FUNC)::GetProcAddress( libHandle, APP_GET_HANDLER_NAME );
+#ifdef Q_OS_WIN32
+ crtHndlr = (APP_GET_HANDLER_FUNC)::GetProcAddress( (HINSTANCE)libHandle, APP_GET_HANDLER_NAME );
#else
crtHndlr = (APP_GET_HANDLER_FUNC)dlsym( libHandle, APP_GET_HANDLER_NAME );
#endif
/*!
Gets the list of all applications
*/
-QPtrList<SUIT_Application> SUIT_Session::applications() const
+QList<SUIT_Application*> SUIT_Session::applications() const
{
- QPtrList<SUIT_Application> apps;
- apps.setAutoDelete( false );
+ return myAppList;
+}
+
+void SUIT_Session::insertApplication( SUIT_Application* app )
+{
+ if ( !app || myAppList.contains( app ) )
+ return;
- for ( AppListIterator it( myAppList ); it.current(); ++it )
- apps.append( it.current() );
+ myAppList.append( app );
- return apps;
+ connect( app, SIGNAL( applicationClosed( SUIT_Application* ) ),
+ this, SLOT( onApplicationClosed( SUIT_Application* ) ) );
+ connect( app, SIGNAL( activated( SUIT_Application* ) ),
+ this, SLOT( onApplicationActivated( SUIT_Application* ) ) );
}
/*!
{
emit applicationClosed( theApp );
- myAppList.remove( theApp );
+ myAppList.removeAll( theApp );
+ delete theApp;
+
if ( theApp == myActiveApp )
myActiveApp = 0;
if ( myAppList.isEmpty() )
{
printf( "Calling QApplication::exit() with exit code = %d\n", myExitStatus );
- qApp->exit( myExitStatus );
+ QApplication::instance()->exit( myExitStatus );
}
}
*/
void SUIT_Session::closeSession( int mode )
{
- while ( !myAppList.isEmpty() )
+ AppList apps = myAppList;
+ for ( AppList::const_iterator it = apps.begin(); it != apps.end(); ++it )
{
- SUIT_Application* app = myAppList.getFirst();
+ SUIT_Application* app = *it;
if ( mode == ASK && !app->isPossibleToClose() )
return;
else if ( mode == SAVE )
{
SUIT_Study* study = app->activeStudy();
if ( study->isModified() && study->isSaved() )
- study->saveDocument();
+ study->saveDocument();
}
else if ( mode == DONT_SAVE )
{
QString SUIT_Session::lastError() const
{
QString str;
-#ifdef WNT
+#ifdef Q_OS_WIN32
LPVOID lpMsgBuf;
::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS, 0, ::GetLastError(), 0, (LPTSTR)&lpMsgBuf, 0, 0 );
- str = QString( (LPTSTR)lpMsgBuf );
+ LPTSTR msg = (LPTSTR)lpMsgBuf;
+ str = QString( SUIT_Tools::toQString( msg ) );
LocalFree( lpMsgBuf );
#else
str = QString( dlerror() );
return 0;
AppLib lib = 0;
-#ifdef WIN32
- lib = ::LoadLibrary( (char*)libFile.latin1() );
+ QByteArray bid = libFile.toLatin1();
+#ifdef Q_OS_WIN32
+#ifdef UNICODE
+ LPTSTR str = (LPTSTR)libFile.utf16();
#else
- lib = dlopen( (char*)libFile.latin1(), RTLD_LAZY | RTLD_GLOBAL );
+ LPTSTR str = (LPTSTR)(const char*)bid;
+#endif
+ lib = ::LoadLibrary( str );
+#else
+ lib = dlopen( (const char*)libFile.toLatin1(), RTLD_LAZY | RTLD_GLOBAL );
#endif
return lib;
}
/*! \retval Return file name by application name.*/
QString SUIT_Session::applicationName( const QString& str ) const
{
-#ifdef WIN32
+#ifdef Q_OS_WIN32
return SUIT_Tools::file( str, false );
#else
QString fileName = SUIT_Tools::file( str, false );
{
myActiveApp = app;
}
-
-/*!
- \retval Return TRUE, if a command is currently executed in Python Console,
- FALSE otherwise.
-*/
-bool SUIT_Session::IsPythonExecuted()
-{
- bool ret;
- SUIT_Session_PythonMutex.lock();
- ret = SUIT_Session_IsPythonExecuted;
- SUIT_Session_PythonMutex.unlock();
- return ret;
-}
-
-/*!
- Set value of boolean flag, being returned by method \a IsPythonExecuted().
- It is supposed to set the flag to TRUE when any python command starts
- and reset it to FALSE when the command finishes.
-*/
-void SUIT_Session::SetPythonExecuted(bool isPythonExecuted)
-{
- SUIT_Session_PythonMutex.lock();
- SUIT_Session_IsPythonExecuted = isPythonExecuted;
- SUIT_Session_PythonMutex.unlock();
-}
#include "SUIT_Application.h"
#include "SUIT_ResourceMgr.h"
-#include <qmutex.h>
-#include <qobject.h>
-#include <qptrlist.h>
-#include <qptrvector.h>
-#include <qstringlist.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qvector.h>
+#include <QtCore/qobject.h>
+#include <QtCore/qstringlist.h>
#ifdef WIN32
#define LIB_HANDLE HINSTANCE
class SUIT_ResourceMgr;
class SUIT_ExceptionHandler;
-#ifdef WNT
+#ifdef WIN32
#pragma warning( disable:4251 )
#endif
/*!
SUIT_Application* startApplication( const QString&, int = 0, char** = 0 );
- QPtrList<SUIT_Application> applications() const;
+ QList<SUIT_Application*> applications() const;
SUIT_Application* activeApplication() const;
SUIT_ResourceMgr* resourceMgr() const;
SUIT_ExceptionHandler* handler() const;
- // To lock GUI user actions during python command execution (PAL12651)
- static bool IsPythonExecuted();
- static void SetPythonExecuted(bool isPythonExecuted);
+ void insertApplication( SUIT_Application* );
signals:
void applicationClosed( SUIT_Application* );
void onApplicationActivated( SUIT_Application* );
private:
- typedef QPtrList<SUIT_Application> AppList;
- typedef QMap<QString, AppLib> AppLibMap;
- typedef QPtrListIterator<SUIT_Application> AppListIterator;
+ typedef QList<SUIT_Application*> AppList;
+ typedef QMap<QString, AppLib> AppLibMap;
private:
QString lastError() const;
#include "SUIT_DataObject.h"
#include "SUIT_MessageBox.h"
#include "SUIT_Application.h"
-#include <qvaluevector.h>
/*!\class SUIT_Study
* Support study management. Object management. Operation management.
myId = ++_id;
myRoot = new SUIT_DataObject();
- myOperations.setAutoDelete( false );
- myOperations.setAutoDelete( false );
}
/*!Destructor.*/
*/
SUIT_Operation* SUIT_Study::activeOperation() const
{
- return myOperations.count() > 0 ? myOperations.getLast() : 0;
+ return myOperations.count() > 0 ? myOperations.last() : 0;
}
/*!
void SUIT_Study::abortAllOperations()
{
myBlockChangeState = true;
- for( SUIT_Operation* op = myOperations.first(); op; op = myOperations.next() )
- op->abort();
+ for ( Operations::iterator it = myOperations.begin(); it != myOperations.end(); ++it )
+ (*it)->abort();
myBlockChangeState = false;
myOperations.clear();
}
return 0;
Operations tmpOps( myOperations );
- SUIT_Operation* anOp = 0;
- for ( anOp = tmpOps.last(); anOp; anOp = tmpOps.prev() )
+ for ( Operations::const_iterator it = tmpOps.end(); it != tmpOps.begin(); --it )
{
+ SUIT_Operation* anOp = *it;
if ( anOp != 0 && anOp!= theOp && !anOp->isValid( theOp ) )
return anOp;
}
*/
bool SUIT_Study::start( SUIT_Operation* theOp, const bool toCheck )
{
- if ( !theOp || myOperations.find( theOp ) >= 0 )
+ if ( !theOp || myOperations.contains( theOp ) )
return false;
theOp->setExecStatus( SUIT_Operation::Rejected );
*/
bool SUIT_Study::abort( SUIT_Operation* theOp )
{
- if ( !theOp || myOperations.find( theOp ) == -1 )
+ if ( !theOp || !myOperations.contains( theOp ) )
return false;
theOp->setExecStatus( SUIT_Operation::Rejected );
*/
bool SUIT_Study::commit( SUIT_Operation* theOp )
{
- if ( !theOp || myOperations.find( theOp ) == -1 )
+ if ( !theOp || !myOperations.contains( theOp ) )
return false;
theOp->setExecStatus( SUIT_Operation::Accepted );
*/
bool SUIT_Study::suspend( SUIT_Operation* theOp )
{
- if ( !theOp || myOperations.find( theOp ) == -1 || theOp->state() == SUIT_Operation::Suspended )
+ if ( !theOp || !myOperations.contains( theOp ) || theOp->state() == SUIT_Operation::Suspended )
return false;
theOp->setState( SUIT_Operation::Suspended );
*/
bool SUIT_Study::resume( SUIT_Operation* theOp )
{
- if ( !theOp || myOperations.find( theOp ) == -1 ||
+ if ( !theOp || !myOperations.contains( theOp ) ||
theOp->state() == SUIT_Operation::Running ||
blockingOperation( theOp ) != 0 )
return false;
// Move operation at the end of list in order to sort it in the order of activation.
// As result active operation is a last operation of list, operation which was active
// before currently active operation is located before it and so on
- myOperations.remove( theOp );
+ myOperations.removeAll( theOp );
myOperations.append( theOp );
emit theOp->resumed( theOp );
void SUIT_Study::stop( SUIT_Operation* theOp )
{
theOp->setState( SUIT_Operation::Waiting );
- myOperations.remove( theOp );
+ myOperations.removeAll( theOp );
// get last operation which can be resumed
- SUIT_Operation* anOp, *aResultOp = 0;
- for ( anOp = myOperations.last(); anOp; anOp = myOperations.prev() )
+ SUIT_Operation* aResultOp = 0;
+ for ( Operations::iterator it = myOperations.end(); it != myOperations.begin(); --it )
{
+ SUIT_Operation* anOp = *it;
if ( anOp && anOp != theOp && blockingOperation( anOp ) == 0 )
{
aResultOp = anOp;
* \brief Get all started operations
* \return List of all started operations
*/
-const QPtrList<SUIT_Operation>& SUIT_Study::operations() const
+const QList<SUIT_Operation*>& SUIT_Study::operations() const
{
return myOperations;
}
#include "SUIT_Operation.h"
-#include <qobject.h>
-#include <qptrlist.h>
+#include <QtCore/qlist.h>
+#include <QtCore/qobject.h>
+class QDialog;
class SUIT_DataObject;
class SUIT_Application;
-class QDialog;
#ifdef WIN32
#pragma warning( disable:4251 )
// Operation management
SUIT_Operation* activeOperation() const;
virtual void abortAllOperations();
- const QPtrList<SUIT_Operation>& operations() const;
+ const QList<SUIT_Operation*>& operations() const;
virtual SUIT_Operation* blockingOperation( SUIT_Operation* ) const;
virtual bool commitTransaction( const QString& = QString::null );
private:
- typedef QPtrList<SUIT_Operation> Operations;
+ typedef QList<SUIT_Operation*> Operations;
void stop( SUIT_Operation* );
private:
#include "SUIT_ToolButton.h"
-#include <qpopupmenu.h>
-#include <qstyle.h>
+#include <QtGui/qmenu.h>
+#include <QtGui/qstyle.h>
/*!Constructor.*/
-SUIT_ToolButton::SUIT_ToolButton( QWidget *parent,
- const char *name,
- bool changeItemAfterClick)
- : QToolButton( parent, name ),
- myChangeItemAfterClick( changeItemAfterClick )
+SUIT_ToolButton::SUIT_ToolButton( QWidget *parent, const char *name,
+ bool changeItemAfterClick )
+: QToolButton( parent ),
+myChangeItemAfterClick( changeItemAfterClick )
{
initialize();
}
-/*!Constructor.*/
-SUIT_ToolButton::SUIT_ToolButton( const QPixmap & pm,
- const QString &textLabel,
- const QString& grouptext,
- QObject * receiver,
- const char* slot,
- QToolBar * parent,
- const char* name,
- bool changeItemAfterClick)
- :QToolButton(pm, textLabel, grouptext, receiver, slot, parent, name),
- myChangeItemAfterClick( changeItemAfterClick )
-{
- initialize();
-}
-
-
/*!Initialize tool buttons.*/
void SUIT_ToolButton::initialize()
{
- mySignal = NULL;
- myPopup = new QPopupMenu( this );
- setPopup(myPopup);
- connect( myPopup, SIGNAL(activated(int)), SLOT(OnSelectAction(int)) );
- setPopupDelay(250);
+// mySignal = NULL;
+ myPopup = new QMenu( this );
+ setMenu( myPopup );
+ connect( myPopup, SIGNAL( activated( int ) ), SLOT( OnSelectAction( int ) ) );
}
/*!drawButton is redefined to draw DownArrow*/
void SUIT_ToolButton::drawButton( QPainter * p )
{
- QToolButton::drawButton(p);
+/*
+ QToolButton::drawButton( p );
//draw DownArrow
int x, y, w, h;
style().drawPrimitive( QStyle::PE_ArrowDown,
p, QRect(x+w/2+3, y+h/2+3, w/2, h/2), //QRect(x+(w-x)/2, y+(h-y)/2, w, h)
colorGroup(), isEnabled() );
+*/
}
-
/*! Add action into popup*/
-void SUIT_ToolButton::AddAction(QAction* theAction)
+void SUIT_ToolButton::AddAction( QAction* theAction )
{
bool aIsFirst = false;
- if ( myPopup->count() == 0 )
+ if ( myPopup->actions().isEmpty() )
{
aIsFirst = true;
- setPixmap(theAction->iconSet().pixmap());
- setTextLabel(theAction->text());
- theAction->addTo( myPopup );
- QMenuItem* aItem = myPopup->findItem(myPopup->idAt(0));
- if (aItem != NULL)
- {
- mySignal = aItem->signal();
- }
+ setIcon( theAction->icon() );
+ setText( theAction->text() );
}
- else
- theAction->addTo( myPopup );
+ myPopup->addAction( theAction );
}
/*! Sets myPopup item with theIndex as current*/
-void SUIT_ToolButton::SetItem(int theIndex)
+void SUIT_ToolButton::SetItem( int theIndex )
{
- int anId = myPopup->idAt(theIndex);
- if (anId != -1)
+ QAction* a = myPopup->actions()[theIndex];
+ if ( a )
{
- // Protection against unexpected null pointers returned
- if ( myPopup->iconSet(anId) )
- setPixmap(myPopup->iconSet(anId)->pixmap());
- setTextLabel(myPopup->text(anId));
- QMenuItem* aItem = myPopup->findItem(anId);
- if (aItem != NULL)
- {
- mySignal = aItem->signal();
- }
+ setIcon( a->icon() );
+ setText( a->text() );
}
}
/*!Public SLOT.
* On select action (icon and text set with id = \a theItemID)
*/
-void SUIT_ToolButton::OnSelectAction(int theItemID)
+void SUIT_ToolButton::OnSelectAction( int theItemID )
{
- if (myChangeItemAfterClick)
+/*
+ if ( myChangeItemAfterClick )
{
// Protection against unexpected null pointers returned
if ( myPopup->iconSet(theItemID) )
mySignal = aItem->signal();
}
}
+*/
}
-
-
/*!On mouse release event.*/
-void SUIT_ToolButton::mouseReleaseEvent ( QMouseEvent * theEvent)
+void SUIT_ToolButton::mouseReleaseEvent( QMouseEvent* theEvent )
{
- QToolButton::mouseReleaseEvent(theEvent);
- if (mySignal != NULL)
- {
+ QToolButton::mouseReleaseEvent( theEvent );
+/*
+ if ( mySignal )
mySignal->activate();
- }
+*/
}
-
-
#ifndef SUIT_TOOLBUTTON_H
#define SUIT_TOOLBUTTON_H
-#include <qtoolbutton.h>
-#include <qaction.h>
-
#include "SUIT.h"
+#include <QtGui/qaction.h>
+#include <QtGui/qtoolbutton.h>
+
+class QPixmap;
+class QToolBar;
+
/*! To draw down arrow on toolbutton.*/
class SUIT_EXPORT SUIT_ToolButton : public QToolButton
{
SUIT_ToolButton( QWidget *parent = 0,
const char *name = 0,
bool changeItemAfterClick = true );
- SUIT_ToolButton( const QPixmap & pm, const QString &textLabel,
- const QString& grouptext,
- QObject * receiver, const char* slot,
- QToolBar * parent, const char* name = 0,
- bool changeItemAfterClick = true );
//@}
void drawButton( QPainter * pQPainter);
private:
void initialize();
- QPopupMenu* myPopup;
- QSignal* mySignal;
- bool myChangeItemAfterClick;
+ QMenu* myPopup;
+// QSignal* mySignal;
+ bool myChangeItemAfterClick;
};
#endif
-
//
#include "SUIT_Tools.h"
-#include <qdir.h>
+#include <QtCore/qdir.h>
#include <stdio.h>
#include <stdarg.h>
tmpPath += QString( "Salome_trace" );
FILE* pStream;
- pStream = fopen( lpszLog ? lpszLog : tmpPath.latin1(), "a" );
+ pStream = fopen( lpszLog ? lpszLog : (const char*)tmpPath.toLatin1(), "a" );
if ( pStream )
{
va_list argptr;
*/
QRect SUIT_Tools::makeRect( const int x1, const int y1, const int x2, const int y2 )
{
- return QRect( QMIN( x1, x2 ), QMIN( y1, y2 ), QABS( x2 - x1 ), QABS( y2 - y1 ) );
+ return QRect( qMin( x1, x2 ), qMin( y1, y2 ), qAbs( x2 - x1 ), qAbs( y2 - y1 ) );
}
/*!
QFont SUIT_Tools::stringToFont( const QString& fontDescription )
{
QFont font;
- if ( fontDescription.stripWhiteSpace().isEmpty() || !font.fromString( fontDescription ) )
+ if ( fontDescription.trimmed().isEmpty() || !font.fromString( fontDescription ) )
font = QFont( "Courier", 11 );
return font;
}
#include <Qtx.h>
-#include <qrect.h>
-#include <qfont.h>
-#include <qstring.h>
+#include <QtCore/qrect.h>
+#include <QtCore/qstring.h>
+
+#include <QtGui/qfont.h>
/*!
\class SUIT_Tools
#include "SUIT_ViewModel.h"
#include "SUIT_Study.h"
-#include <qcursor.h>
-#include <qregexp.h>
-#include <qmessagebox.h>
+#include <QtCore/qregexp.h>
+#include <QtCore/qpointer.h>
-#ifdef WNT
+#include <QtGui/qcursor.h>
+#include <QtGui/qmessagebox.h>
+
+#ifdef WIN32
#include <windows.h>
#endif
/*!Sets view name for view window \a theView.*/
void SUIT_ViewManager::setViewName( SUIT_ViewWindow* theView )
{
- QString title = prepareTitle( getTitle(), myId + 1, myViews.find( theView ) + 1 );
- theView->setCaption( title );
+ QString title = prepareTitle( getTitle(), myId + 1, myViews.indexOf( theView ) + 1 );
+ theView->setWindowTitle( title );
}
QString SUIT_ViewManager::prepareTitle( const QString& title, const int mId, const int vId )
QString res = title;
QRegExp re( "%[%MV]" );
int i = 0;
- while ( ( i = re.search( res, i ) ) != -1 )
+ while ( ( i = re.indexIn( res, i ) ) != -1 )
{
QString rplc;
QString str = res.mid( i, re.matchedLength() );
createViewWindow();
}
+QVector<SUIT_ViewWindow*> SUIT_ViewManager::getViews() const
+{
+ QVector<SUIT_ViewWindow*> res;
+ for ( int i = 0; i < myViews.count(); i++ )
+ {
+ if ( myViews[i] )
+ res.append( myViews[i] );
+ }
+
+ return res;
+}
+
/*!Insert view window to view manager.
*\retval false - if something wrong, else true.
*/
bool SUIT_ViewManager::insertView(SUIT_ViewWindow* theView)
{
unsigned int aSize = myViews.size();
- unsigned int aNbItems = myViews.count()+1;
- if (aNbItems > aSize) {
- if (!myViews.resize(aNbItems)) {
- QMessageBox::critical(myDesktop, tr("Critical error"), tr("There is no memory for the new view!!!"));
- return false;
- }
+ unsigned int aNbItems = myViews.count() + 1;
+ if ( aNbItems > aSize )
+ {
+ myViews.resize( aNbItems );
aSize = myViews.size();
}
if ( !theView )
return;
- QGuardedPtr<SUIT_ViewWindow> view( theView );
+ QPointer<SUIT_ViewWindow> view( theView );
view->hide();
- if ( !view->testWFlags( WDestructiveClose ) )
+ if ( !view->testAttribute( Qt::WA_DeleteOnClose ) )
return;
emit deleteView( view );
/*!Remove view window \a theView from view manager.
*And close the last view, if it has \a theView.
*/
-void SUIT_ViewManager::removeView(SUIT_ViewWindow* theView)
+void SUIT_ViewManager::removeView( SUIT_ViewWindow* theView )
{
- theView->disconnect(this);
- myViews.remove(myViews.find(theView));
- if (myActiveView == theView)
+ theView->disconnect( this );
+ myViews.remove( myViews.indexOf( theView ) );
+ if ( myActiveView == theView )
myActiveView = 0;
- int aNumItems = myViews.count();
- if (aNumItems == 0)
- emit lastViewClosed(this);
+ if ( !myViews.count() )
+ emit lastViewClosed( this );
}
/*!
#include "SUIT_ViewWindow.h"
#include "SUIT_PopupClient.h"
-#include <qobject.h>
-#include <qptrvector.h>
+#include <QtCore/qobject.h>
+#include <QtCore/qvector.h>
+#include <QtCore/qpointer.h>
class SUIT_Study;
class SUIT_Desktop;
SUIT_ViewWindow* getActiveView() { return myActiveView; }
int getViewsCount() { return myViews.count(); }
- QPtrVector<SUIT_ViewWindow> getViews() { return myViews; }
+ QVector<SUIT_ViewWindow*> getViews() const;
QString getTitle() const { return myTitle; }
virtual void setTitle( const QString& );
virtual void closeView(SUIT_ViewWindow* theView);
/*! Used to set unique name for the view.*/
- virtual void setViewName(SUIT_ViewWindow* theView);
+ virtual void setViewName(SUIT_ViewWindow* theView );
QString prepareTitle( const QString&, const int, const int );
static int useNewId( const QString& );
+protected:
+ typedef QPointer<SUIT_ViewWindow> ViewWindow;
+
protected:
SUIT_Desktop* myDesktop;
SUIT_ViewModel* myViewModel;
- QPtrVector<SUIT_ViewWindow> myViews;
+ QVector<ViewWindow> myViews;
SUIT_ViewWindow* myActiveView;
int myId;
/*!Constructor.*/
SUIT_ViewModel::SUIT_ViewModel()
{
- if (!isInitialized) {
+ if ( !isInitialized )
+ {
isInitialized = true;
- SUIT_ViewModel::myStateMap[ZOOM] = Qt::ControlButton;
+ SUIT_ViewModel::myStateMap[ZOOM] = Qt::ControlModifier;
SUIT_ViewModel::myButtonMap[ZOOM] = Qt::LeftButton;
- SUIT_ViewModel::myStateMap[PAN] = Qt::ControlButton;
+ SUIT_ViewModel::myStateMap[PAN] = Qt::ControlModifier;
SUIT_ViewModel::myButtonMap[PAN] = Qt::MidButton;
- SUIT_ViewModel::myStateMap[ROTATE] = Qt::ControlButton;
+ SUIT_ViewModel::myStateMap[ROTATE] = Qt::ControlModifier;
SUIT_ViewModel::myButtonMap[ROTATE] = Qt::RightButton;
- SUIT_ViewModel::myStateMap[FIT_AREA] = Qt::ControlButton;
+ SUIT_ViewModel::myStateMap[FIT_AREA] = Qt::ControlModifier;
SUIT_ViewModel::myButtonMap[FIT_AREA] = Qt::RightButton;
}
myViewManager = 0;
*\param theState - adding state to state map operations.
*\param theButton - adding state to button map operations.
*/
-void SUIT_ViewModel::setHotButton(HotOperation theOper, Qt::ButtonState theState,
- Qt::ButtonState theButton)
+void SUIT_ViewModel::setHotButton( HotOperation theOper, Qt::KeyboardModifier theState, Qt::MouseButton theButton )
{
myStateMap[theOper] = theState;
myButtonMap[theOper] = theButton;
*\param theState - output state from state map operations.
*\param theButton - output state from button map operations.
*/
-void SUIT_ViewModel::getHotButton(HotOperation theOper, Qt::ButtonState& theState,
- Qt::ButtonState& theButton)
+void SUIT_ViewModel::getHotButton( HotOperation theOper, Qt::KeyboardModifier& theState, Qt::MouseButton& theButton )
{
theState = myStateMap[theOper];
theButton = myButtonMap[theOper];
#include "SUIT_ViewWindow.h"
#include "SUIT_ViewManager.h"
-#include <qobject.h>
-#include <qcursor.h>
+#include <QtCore/qobject.h>
+
+#include <QtGui/qcursor.h>
#ifdef WIN32
#pragma warning( disable:4251 )
public:
enum HotOperation { PAN, ZOOM, ROTATE, FIT_AREA };
- typedef QMap<HotOperation, Qt::ButtonState> StatesMap;
- typedef QMap<HotOperation, Qt::ButtonState> ButtonsMap;
+ typedef QMap<HotOperation, Qt::KeyboardModifier> StatesMap;
+ typedef QMap<HotOperation, Qt::MouseButton> ButtonsMap;
SUIT_ViewModel();
virtual ~SUIT_ViewModel();
virtual void contextMenuPopup(QPopupMenu*) {}
- static void setHotButton(HotOperation theOper, Qt::ButtonState theState,
- Qt::ButtonState theButton);
- static void getHotButton(HotOperation theOper, Qt::ButtonState& theState,
- Qt::ButtonState& theButton);
+ static void setHotButton( HotOperation theOper, Qt::KeyboardModifier theState,
+ Qt::MouseButton theButton );
+ static void getHotButton( HotOperation theOper, Qt::KeyboardModifier& theState,
+ Qt::MouseButton& theButton );
protected:
SUIT_ViewManager* myViewManager;
//
#include "SUIT_ViewWindow.h"
+
+#include "SUIT_Tools.h"
+#include "SUIT_Study.h"
#include "SUIT_Desktop.h"
+#include "SUIT_MessageBox.h"
#include "SUIT_Application.h"
-#include "SUIT_Study.h"
#include "SUIT_ViewManager.h"
-#include "SUIT_Tools.h"
-#include "SUIT_MessageBox.h"
-#include <qhbox.h>
-#include <qpopupmenu.h>
-#include <qapplication.h>
-#include <qimage.h>
+
+#include <QtGui/qmenu.h>
+#include <QtGui/qevent.h>
+#include <QtGui/qimage.h>
+#include <QtGui/qapplication.h>
/*!\class SUIT_ViewWindow
* Class provide view window.
const int DUMP_EVENT = QEvent::User + 123;
/*! Constructor.*/
-SUIT_ViewWindow::SUIT_ViewWindow(SUIT_Desktop* theDesktop)
-: QMainWindow( theDesktop, "SUIT_ViewWindow", Qt::WDestructiveClose )
+SUIT_ViewWindow::SUIT_ViewWindow( SUIT_Desktop* theDesktop )
+: QMainWindow( theDesktop )
{
myDesktop = theDesktop;
- if ( myDesktop->icon() )
- setIcon( *myDesktop->icon() );
+ setWindowIcon( myDesktop->windowIcon() );
+
+ setAttribute( Qt::WA_DeleteOnClose );
}
/*! Destructor.*/
else if( fmt == "JPG" )
fmt = "JPEG";
- QApplication::setOverrideCursor( Qt::waitCursor );
- bool res = img.save( fileName, fmt.latin1() );
+ QApplication::setOverrideCursor( Qt::WaitCursor );
+ bool res = img.save( fileName, fmt.toLatin1() );
QApplication::restoreOverrideCursor();
return res;
}
*/
void SUIT_ViewWindow::setDestructiveClose( const bool on )
{
- if ( on )
- setWFlags( WDestructiveClose );
- else
- clearWFlags( WDestructiveClose );
+ setAttribute( Qt::WA_DeleteOnClose, on );
}
/*! Close event \a theEvent.
*/
void SUIT_ViewWindow::onDumpView()
{
- qApp->postEvent( this, new QPaintEvent( QRect( 0, 0, width(), height() ), TRUE ) );
- qApp->postEvent( this, new QCustomEvent( DUMP_EVENT ) );
+ QApplication::postEvent( this, new QPaintEvent( QRect( 0, 0, width(), height() ) ) );
+ QApplication::postEvent( this, new QEvent( (QEvent::Type)DUMP_EVENT ) );
}
/*!
// get file name
SUIT_Application* app = myManager->study()->application();
QString fileName = app->getFileName( false, QString::null, filter(), tr( "TLT_DUMP_VIEW" ), 0 );
- if( !fileName.isEmpty() )
+ if ( !fileName.isEmpty() )
{
- QString fmt = SUIT_Tools::extension( fileName ).upper();
- bOk = dumpViewToFormat( im, fileName, fmt );
+ QString fmt = SUIT_Tools::extension( fileName ).toUpper();
+ bOk = dumpViewToFormat( im, fileName, fmt );
}
else
- {
- bOk = true; // cancelled
- }
+ bOk = true; // cancelled
}
- if ( !bOk ) {
+ if ( !bOk )
SUIT_MessageBox::error1( this, tr( "ERROR" ), tr( "ERR_CANT_DUMP_VIEW" ), tr( "BUT_OK" ) );
- }
- return TRUE;
+
+ return true;
}
return QMainWindow::event( e );
}
// SUIT_ViewWindow.h: interface for the SUIT_ViewWindow class.
//
-#if !defined(AFX_SUIT_VIEWWINDOW_H__82C3D51A_6F10_45B0_BCFE_3CB3EF596A4D__INCLUDED_)
-#define AFX_SUIT_VIEWWINDOW_H__82C3D51A_6F10_45B0_BCFE_3CB3EF596A4D__INCLUDED_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
+#ifndef SUIT_VIEWWINDOW_H
+#define SUIT_VIEWWINDOW_H
#include "SUIT.h"
-#include <qmainwindow.h>
+#include <QtGui/qmainwindow.h>
+class QImage;
class SUIT_Desktop;
class SUIT_ViewManager;
-class QImage;
class SUIT_EXPORT SUIT_ViewWindow: public QMainWindow
{
+++ /dev/null
-// SALOME Utils : general SALOME's definitions and tools
-//
-// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-//
-//
-// File : utilities.h
-// Author : Antoine YESSAYAN, Paul RASCLE, EDF
-// Module : SALOME
-// $Header$
-
-/*! --- Definition macros file to print informations if _DEBUG_ is defined --- */
-
-#ifndef UTILITIES_H
-#define UTILITIES_H
-
-#include <iostream>
-#include <sstream>
-#include <cstdlib>
-
-
-#include "LocalTraceBufferPool.hxx"
-
-/*! \file utilities.h
- * For each message to put in the trace, a specific ostingstream object is \n
- * created and destroyed automatically at the end of the message macro. \n
- * The insert function of LocalTraceBufferPool class gets a buffer in a \n
- * buffer pool (unique with the help of mutexes and semaphores) and copy the \n
- * message in the buffer.\n
- * This buffer is read later by a specific thread in charge of trace print.\n
- * Order of trace entries is globally respected. Nevertheless, if there are \n
- * several threads waiting for a free buffer to trace, the order of \n
- * thread waken up is not garanteed (no fifo or priority rules in Linux Kernel)
- */
-
-#define MESS_INIT(deb) std::ostringstream os; os<<deb
-#define MESS_BEGIN(deb) MESS_INIT(deb)<<__FILE__ <<" ["<<__LINE__<<"] : "
-#define MESS_END std::endl; LocalTraceBufferPool::instance()->insert(NORMAL_MESS, os.str().c_str());
-#define MESS_ABORT std::endl; LocalTraceBufferPool::instance()->insert(ABORT_MESS, os.str().c_str());
-
-// --- Some macros are always defined (without _DEBUG_): for use with release version
-
-#define INFOS(msg) {MESS_BEGIN("- Trace ") << msg << MESS_END}
-#define PYSCRIPT(msg) {MESS_INIT("---PYSCRIPT--- ") << msg << MESS_END}
-#define INTERRUPTION(msg) {MESS_BEGIN("- INTERRUPTION: ")<< msg << MESS_ABORT}
-#define IMMEDIATE_ABORT(code) {std::cout <<std::flush; \
- std::cerr << "- ABORT " << __FILE__ << " [" <<__LINE__<< "] : " << flush; \
- std::cerr << "ABORT return code= "<< code << std::endl; \
- std::exit(code);}
-
-/*! --- To print date and time of compilation of current source --- */
-
-#if defined ( __GNUC__ )
-#define COMPILER "g++"
-#elif defined ( __sun )
-#define COMPILER "CC"
-#elif defined ( __KCC )
-#define COMPILER "KCC"
-#elif defined ( __PGI )
-#define COMPILER "pgCC"
-#elif defined ( __alpha )
-#define COMPILER "cxx"
-#else
-#define COMPILER "undefined"
-#endif
-
-#ifdef INFOS_COMPILATION
-#error INFOS_COMPILATION already defined
-#endif
-
-#define INFOS_COMPILATION { MESS_BEGIN("COMPILED with ") << COMPILER \
- << ", " << __DATE__ \
- << " at " << __TIME__ << MESS_END }
-#ifdef _DEBUG_
-
-/*! @name the following MACROS are useful at debug time*/
-//@{
-#define MESSAGE(msg) {MESS_BEGIN("- Trace ") << msg << MESS_END}
-#define SCRUTE(var) {MESS_BEGIN("- Trace ") << #var << "=" << var <<MESS_END}
-
-#define REPERE ("------- ")
-#define BEGIN_OF(msg) {MESS_BEGIN(REPERE) << "Begin of: " << msg << MESS_END}
-#define END_OF(msg) {MESS_BEGIN(REPERE) << "Normal end of: " << msg << MESS_END}
-
-#ifndef ASSERT
-#define ASSERT(condition) \
- if (!(condition)){INTERRUPTION("CONDITION "<<#condition<<" NOT VERIFIED")}
-#endif /* ASSERT */
-//@}
-
-#else /* ifdef _DEBUG_*/
-
-#define MESSAGE(msg) {}
-#define SCRUTE(var) {}
-#define REPERE
-#define BEGIN_OF(msg) {}
-#define END_OF(msg) {}
-
-#ifndef ASSERT
-#define ASSERT(condition) {}
-#endif /* ASSERT */
-
-#endif /* ifdef _DEBUG_*/
-
-#endif /* ifndef UTILITIES_H */