#include "LightApp_OBSelector.h"
#include "LightApp_SelectionMgr.h"
#include "LightApp_DataObject.h"
+#include "LightApp_WgViewModel.h"
#include <SALOME_Event.h>
return viewMgr;
}
+SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType, QWidget* w )
+{
+ SUIT_ViewManager* vm = new SUIT_ViewManager( activeStudy(),
+ desktop(),
+ new LightApp_WgViewModel( vmType, w ) );
+ vm->setTitle( QString( "%1: %M - viewer %V" ).arg( vmType ) );
+
+ addViewManager( vm );
+ SUIT_ViewWindow* vw = vm->createViewWindow();
+ if ( vw && desktop() )
+ vw->resize( (int)( desktop()->width() * 0.6 ), (int)( desktop()->height() * 0.6 ) );
+
+ if ( !vmType.isEmpty() && !myUserWmTypes.contains( vmType ) )
+ myUserWmTypes << vmType;
+
+ return vm;
+}
+
/*!
SLOT: Removes view manager from application
*/
QStringList LightApp_Application::viewManagersTypes() const
{
QStringList aTypesList;
+ aTypesList += myUserWmTypes;
#ifndef DISABLE_GLVIEWER
aTypesList<<GLViewer_Viewer::Type();
#endif
#include <CAM_Application.h>
#include <QPointer>
+#include <QStringList>
class LogWindow;
#ifndef DISABLE_PYCONSOLE
virtual void addViewManager( SUIT_ViewManager* );
virtual void removeViewManager( SUIT_ViewManager* );
virtual SUIT_ViewManager* createViewManager( const QString& vmType );
+ virtual SUIT_ViewManager* createViewManager( const QString& vmType, QWidget* w );
QWidget* getWindow( const int, const int = -1 );
QWidget* dockWindow( const int ) const;
static LightApp_Preferences* _prefs_;
static int lastStudyId;
+ QStringList myUserWmTypes;
};
#ifdef WIN32
--- /dev/null
+// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007 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 : LightApp_LightApp_WgViewModel.cxx
+// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
+
+#include "LightApp_WgViewModel.h"
+#include "SUIT_ViewWindow.h"
+
+LightApp_WgViewModel::LightApp_WgViewModel( const QString& type, QWidget* w )
+ : SUIT_ViewModel(),
+ myType( type ),
+ myWidget( w ),
+ myCreated( false )
+{
+}
+
+LightApp_WgViewModel::~LightApp_WgViewModel()
+{
+}
+
+SUIT_ViewWindow* LightApp_WgViewModel::createView( SUIT_Desktop* d )
+{
+ SUIT_ViewWindow* vw = 0;
+ if ( !myCreated ) {
+ vw = new SUIT_ViewWindow( d );
+ vw->setCentralWidget( myWidget );
+ myCreated = true;
+ vw->setClosable( false );///////////////////
+ }
+ return vw;
+}
+
+QString LightApp_WgViewModel::getType() const
+{
+ return myType;
+}
--- /dev/null
+// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007 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 : LightApp_LightApp_WgViewModel.h
+// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
+
+#ifndef LIGHTAPP_WGVIEWMODEL_H
+#define LIGHTAPP_WGVIEWMODEL_H
+
+#include "SUIT_ViewModel.h"
+#include "SUIT_ViewManager.h"
+
+class LightApp_WgViewModel : public SUIT_ViewModel
+{
+ Q_OBJECT
+
+public:
+ LightApp_WgViewModel( const QString& type, QWidget* w );
+ virtual ~LightApp_WgViewModel();
+
+ virtual SUIT_ViewWindow* createView( SUIT_Desktop* d );
+ virtual QString getType() const;
+
+private:
+ QString myType;
+ QWidget* myWidget;
+ bool myCreated;
+};
+#endif // LIGHTAPP_WGVIEWMODEL_H
LightApp_SwitchOp.h \
LightApp_Preferences.h \
LightApp_PreferencesDlg.h \
- LightApp_UpdateFlags.h
+ LightApp_UpdateFlags.h \
+ LightApp_WgViewModel.h
if ENABLE_PYCONSOLE
salomeinclude_HEADERS += LightApp_PyInterp.h
LightApp_Study.cxx \
LightApp_SwitchOp.cxx \
LightApp_Preferences.cxx \
- LightApp_PreferencesDlg.cxx
+ LightApp_PreferencesDlg.cxx \
+ LightApp_WgViewModel.cxx
if ENABLE_PYCONSOLE
dist_libLightApp_la_SOURCES += LightApp_PyInterp.cxx
LightApp_Study_moc.cxx \
LightApp_SwitchOp_moc.cxx \
LightApp_Preferences_moc.cxx \
- LightApp_PreferencesDlg_moc.cxx
+ LightApp_PreferencesDlg_moc.cxx \
+ LightApp_WgViewModel_moc.cxx
if ENABLE_VTKVIEWER
if ENABLE_SALOMEOBJECT
SALOME_PYQT_ModuleLight::onViewClosed( pview );
}
+/*!
+ \brief Signal handler tryClose(SUIT_ViewWindow*) of a view
+ \param pview view user tries to close
+*/
+void SALOME_PYQT_Module::onViewTryClose( SUIT_ViewWindow* pview )
+{
+ SALOME_PYQT_ModuleLight::onViewTryClose( pview );
+}
+
/*!
\breif Process application preferences changing.
void onGUIEvent();
void onActiveViewChanged( SUIT_ViewWindow* );
void onViewClosed( SUIT_ViewWindow* );
+ void onViewTryClose( SUIT_ViewWindow* );
void onViewCloned( SUIT_ViewWindow* );
protected:
PyLockWrapper aLock = myInterp->GetLockWrapper();
// ... (the Python module is already imported)
// ... finally call Python module's initialize() method
- if ( PyObject_HasAttrString( myModule, "initialize" ) ) {
+ if ( PyObject_HasAttrString( myModule, (char*)"initialize" ) ) {
PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"initialize", (char*)"" ) );
if ( !res ) {
PyErr_Print();
myWindowsMap.insert( LightApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
myWindowsMap.insert( LightApp_Application::WT_LogWindow, Qt::BottomDockWidgetArea );
- if ( PyObject_HasAttrString( myModule , "windows" ) ) {
+ if ( PyObject_HasAttrString( myModule , (char*)"windows" ) ) {
PyObjWrapper res1( PyObject_CallMethod( myModule, (char*)"windows", (char*)"" ) );
if ( !res1 ) {
PyErr_Print();
// get compatible view windows types from the Python module
// by calling views() method
- if ( PyObject_HasAttrString( myModule , "views" ) ) {
+ if ( PyObject_HasAttrString( myModule , (char*)"views" ) ) {
PyObjWrapper res2( PyObject_CallMethod( myModule, (char*)"views", (char*)"" ) );
if ( !res2 ) {
PyErr_Print();
PyLockWrapper aLock = myInterp->GetLockWrapper();
// call Python module's activate() method (for the new modules)
- if ( PyObject_HasAttrString( myModule , "activate" ) ) {
+ if ( PyObject_HasAttrString( myModule , (char*)"activate" ) ) {
PyObject* res1 = PyObject_CallMethod( myModule, (char*)"activate", (char*)"" );
if ( !res1 || !PyBool_Check( res1 ) ) {
PyErr_Print();
if ( IsCallOldMethods ) {
// call Python module's setSettings() method (obsolete)
- if ( PyObject_HasAttrString( myModule , "setSettings" ) ) {
+ if ( PyObject_HasAttrString( myModule , (char*)"setSettings" ) ) {
PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"setSettings", (char*)"" ) );
if( !res ) {
PyErr_Print();
return;
}
// then call Python module's deactivate() method
- if ( PyObject_HasAttrString( myModule , "deactivate" ) ) {
+ if ( PyObject_HasAttrString( myModule , (char*)"deactivate" ) ) {
PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"deactivate", (char*)"" ) );
if( !res ) {
PyErr_Print();
PyLockWrapper aLock = myInterp->GetLockWrapper();
// call Python module's activeStudyChanged() method
- if ( PyObject_HasAttrString( myModule, "activeStudyChanged" ) ) {
+ if ( PyObject_HasAttrString( myModule, (char*)"activeStudyChanged" ) ) {
PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"activeStudyChanged", (char*)"i", aStudyId ) );
if( !res ) {
PyErr_Print();
QString aContext( "" ), aObject( "" ), aParent( theContext );
- if ( IsCallOldMethods && PyObject_HasAttrString( myModule, "definePopup" ) ) {
+ if ( IsCallOldMethods && PyObject_HasAttrString( myModule, (char*)"definePopup" ) ) {
// call definePopup() Python module's function
// this is obsolete function, used only for compatibility reasons
PyObjWrapper res( PyObject_CallMethod( myModule,
#endif
// then call Python module's createPopupMenu() method (for new modules)
- if ( PyObject_HasAttrString( myModule, "createPopupMenu" ) ) {
+ if ( PyObject_HasAttrString( myModule, (char*)"createPopupMenu" ) ) {
PyObjWrapper res1( PyObject_CallMethod( myModule,
(char*)"createPopupMenu",
(char*)"Os",
}
}
- if ( IsCallOldMethods && PyObject_HasAttrString( myModule, "customPopup" ) ) {
+ if ( IsCallOldMethods && PyObject_HasAttrString( myModule, (char*)"customPopup" ) ) {
// call customPopup() Python module's function
// this is obsolete function, used only for compatibility reasons
PyObjWrapper res2( PyObject_CallMethod( myModule,
if ( !myInterp || !myModule )
return;
- if ( PyObject_HasAttrString( myModule, "OnGUIEvent" ) ) {
+ if ( PyObject_HasAttrString( myModule, (char*)"OnGUIEvent" ) ) {
PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"OnGUIEvent", (char*)"i", theId ) );
if( !res ) {
PyErr_Print();
// might be called during the module intialization process
myInitModule = this;
- if ( PyObject_HasAttrString( myModule, "createPreferences" ) ) {
+ if ( PyObject_HasAttrString( myModule, (char*)"createPreferences" ) ) {
PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"createPreferences", (char*)"" ) );
if( !res ) {
PyErr_Print();
PyObjWrapper pyws( sipBuildResult( 0, "D", aWorkspace, sipType_QWidget , NULL) );
#endif
// ... and finally call Python module's setWorkspace() method (obsolete)
- if ( PyObject_HasAttrString( myModule, "setWorkSpace" ) ) {
+ if ( PyObject_HasAttrString( myModule, (char*)"setWorkSpace" ) ) {
PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"setWorkSpace", (char*)"O", pyws.get() ) );
if( !res ) {
PyErr_Print();
if ( !myInterp || !myModule )
return;
- if ( PyObject_HasAttrString( myModule, "preferenceChanged" ) ) {
+ if ( PyObject_HasAttrString( myModule, (char*)"preferenceChanged" ) ) {
PyObjWrapper res( PyObject_CallMethod( myModule,
(char*)"preferenceChanged",
(char*)"ss",
connectView( pview );
- if ( PyObject_HasAttrString( myModule, "activeViewChanged" ) )
+ if ( PyObject_HasAttrString( myModule, (char*)"activeViewChanged" ) )
{
if ( !pview )
return;
if ( !myInterp || !myModule || !pview )
return;
- if ( PyObject_HasAttrString( myModule, "viewCloned" ) )
+ if ( PyObject_HasAttrString( myModule, (char*)"viewCloned" ) )
{
PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"viewCloned", (char*)"i", pview->getId() ) );
if( !res )
}
}
+/*!
+ \brief Signal handler tryClose(SUIT_ViewWindow*) of a view
+ \param pview view being closed
+*/
+void SALOME_PYQT_ModuleLight::onViewTryClose( SUIT_ViewWindow* pview )
+{
+ class ViewTryClose : public PyInterp_LockRequest
+ {
+ public:
+ ViewTryClose( PyInterp_Interp* _py_interp, SALOME_PYQT_ModuleLight* _obj, const SUIT_ViewWindow* _pview )
+ : PyInterp_LockRequest( _py_interp, 0, true ),
+ myObj(_obj),myView(_pview) {}
+
+ protected:
+ virtual void execute()
+ {
+ myObj->viewTryClose( myView );
+ }
+
+ private:
+ SALOME_PYQT_ModuleLight* myObj;
+ const SUIT_ViewWindow * myView;
+ };
+
+ PyInterp_Dispatcher::Get()->Exec( new ViewTryClose( myInterp, this, pview ) );
+}
+
+/*!
+ \brief Processes the view closing attempt, calls Python module's viewTryClose() method
+ \param pview view user tries to close
+*/
+void SALOME_PYQT_ModuleLight::viewTryClose( const SUIT_ViewWindow* pview )
+{
+ if ( !myInterp || !myModule )
+ return;
+
+ if ( PyObject_HasAttrString( myModule, (char*)"viewTryClose" ) )
+ {
+ PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"viewTryClose", (char*)"i", pview->getId() ) );
+ if ( !res )
+ {
+ PyErr_Print();
+ }
+ }
+}
+
/*!
\brief Signal handler closing(SUIT_ViewWindow*) of a view
\param pview view being closed
if ( !myInterp || !myModule )
return;
- if ( PyObject_HasAttrString( myModule, "viewClosed" ) )
+ if ( PyObject_HasAttrString( myModule, (char*)"viewClosed" ) )
{
PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"viewClosed", (char*)"i", pview->getId() ) );
if ( !res )
if ( viewMgr )
{
+ disconnect( viewMgr, SIGNAL( tryCloseView( SUIT_ViewWindow* ) ),
+ this, SLOT( onViewTryClose( SUIT_ViewWindow* ) ) );
disconnect( viewMgr, SIGNAL( deleteView( SUIT_ViewWindow* ) ),
- this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) );
+ this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) );
+ connect( viewMgr, SIGNAL( tryCloseView( SUIT_ViewWindow* ) ),
+ this, SLOT( onViewTryClose( SUIT_ViewWindow* ) ) );
connect( viewMgr, SIGNAL( deleteView( SUIT_ViewWindow* ) ),
this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) );
}
if ( !myInterp || !myModule || (it == theListOfFiles.end()))
return;
- if ( PyObject_HasAttrString(myModule, "saveFiles") ) {
+ if ( PyObject_HasAttrString(myModule, (char*)"saveFiles") ) {
PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"saveFiles",
(char*)"s", (*it).toLatin1().constData()));
if( !res ) {
#else
PyObjWrapper sipList( sipBuildResult( 0, "D", theList, sipType_QStringList , NULL) );
#endif
- if ( PyObject_HasAttrString(myModule , "openFiles") ) {
+ if ( PyObject_HasAttrString(myModule , (char*)"openFiles") ) {
PyObjWrapper res( PyObject_CallMethod( myModule, (char*)"openFiles",
(char*)"O", sipList.get()));
if( !res || !PyBool_Check( res )) {
void onGUIEvent();
void onActiveViewChanged( SUIT_ViewWindow* );
+ void onViewTryClose( SUIT_ViewWindow* );
void onViewClosed( SUIT_ViewWindow* );
void onViewCloned( SUIT_ViewWindow* );
protected:
/* create data model */
- virtual CAM_DataModel* createDataModel();
+ virtual CAM_DataModel* createDataModel();
private:
void init( CAM_Application* );
void setWorkSpace();
void activeViewChanged( const SUIT_ViewWindow* );
+ void viewTryClose( const SUIT_ViewWindow* );
void viewClosed( const SUIT_ViewWindow* );
void viewCloned( const SUIT_ViewWindow* );
void connectView( const SUIT_ViewWindow* );
return ProcessEvent( new TCreateView( type ) );
}
+/*!
+ \fn int SalomePyQt::createView( const QString& type, QWidget* w )
+ \brief Create new view with custom widget embedded and activate it
+ \param type viewer type
+ \param w custom widget
+ \return integer identifier of created view (or -1 if view could not be created)
+*/
+
+class TCreateViewWg: public SALOME_Event
+{
+public:
+ typedef int TResult;
+ TResult myResult;
+ QString myType;
+ QWidget* myWidget;
+ TCreateViewWg( const QString& theType, QWidget* w )
+ : myResult( -1 ),
+ myType( theType ),
+ myWidget( w ) {}
+ virtual void Execute()
+ {
+ LightApp_Application* app = getApplication();
+ if ( app )
+ {
+ SUIT_ViewManager* viewMgr = app->createViewManager( myType, myWidget );
+ if ( viewMgr )
+ {
+ SUIT_ViewWindow* wnd = viewMgr->getActiveView();
+ if ( wnd )
+ myResult = wnd->getId();
+ }
+ }
+ }
+};
+int SalomePyQt::createView( const QString& type, QWidget* w )
+{
+ return ProcessEvent( new TCreateViewWg( type, w ) );
+}
+
/*!
\fn bool SalomePyQt::closeView( const int id )
\brief Close view
return ProcessEvent( new TIsViewVisible( id ) );
}
+/*!
+ \fn bool SalomePyQt::setViewClosable( const int id, const bool on )
+ \brief Set / clear view's "closable" option. By default any view is closable
+ (i.e. can be closed by the user).
+ \param id window identifier
+ \param on new "closable" option's value
+*/
+
+void SalomePyQt::setViewClosable( const int id, const bool on )
+{
+ class TEvent: public SALOME_Event
+ {
+ int myWndId;
+ bool myOn;
+ public:
+ TEvent( const int id, const bool on )
+ : myWndId( id ), myOn( on ) {}
+ virtual void Execute()
+ {
+ SUIT_ViewWindow* wnd = getWnd( myWndId );
+ if ( wnd ) wnd->setClosable( myOn );
+ }
+ };
+ ProcessVoidEvent( new TEvent( id, on ) );
+}
+
+/*!
+ \fn bool SalomePyQt::isViewClosable( const int id )
+ \brief Check whether view is closable (i.e. can be closed by the user)
+ \param id window identifier
+ \return \c true if view is closable or \c false otherwise
+*/
+
+class TIsViewClosable: public SALOME_Event
+{
+public:
+ typedef bool TResult;
+ TResult myResult;
+ int myWndId;
+ TIsViewClosable( const int id )
+ : myResult( true ),
+ myWndId( id ) {}
+ virtual void Execute()
+ {
+ SUIT_ViewWindow* wnd = getWnd( myWndId );
+ if ( wnd )
+ myResult = wnd->closable();
+ }
+};
+
+bool SalomePyQt::isViewClosable( const int id )
+{
+ return ProcessEvent( new TIsViewClosable( id ) );
+}
+
/*!
\fn bool SalomePyQt::groupAllViews()
\brief Group all views to the single tab area
static QList<int> findViews( const QString& );
static bool activateView( const int );
static int createView( const QString& );
+ static int createView( const QString&, QWidget* );
static bool closeView( const int );
static int cloneView( const int );
- static bool isViewVisible( const int id );
-
+ static bool isViewVisible( const int );
+ static void setViewClosable( const int, const bool );
+ static bool isViewClosable( const int );
+
static bool groupAllViews();
static bool splitView( const int, const Orientation, const Action );
static bool moveView( const int, const int, const bool );
static QList<int> findViews( const QString& ) /ReleaseGIL/ ;
static bool activateView( const int ) /ReleaseGIL/ ;
static int createView( const QString& ) /ReleaseGIL/ ;
+ static int createView( const QString&, QWidget* ) /ReleaseGIL/ ;
static bool closeView( const int ) /ReleaseGIL/ ;
static int cloneView( const int ) /ReleaseGIL/ ;
static bool isViewVisible( const int id ) /ReleaseGIL/ ;
+ static void setViewClosable( const int id, const bool ) /ReleaseGIL/ ;
+ static bool isViewClosable( const int id ) /ReleaseGIL/ ;
static bool groupAllViews() /ReleaseGIL/ ;
static bool splitView( const int, Orientation, Action ) /ReleaseGIL/ ;
SUIT_Desktop* theDesktop,
SUIT_ViewModel* theViewModel )
: QObject( 0 ),
-myDesktop( theDesktop ),
-myTitle( "Default: %M - viewer %V" ),
-myStudy( NULL )
+ myDesktop( theDesktop ),
+ myTitle( "Default: %M - viewer %V" ),
+ myStudy( NULL )
{
myViewModel = 0;
myActiveView = 0;
connect(theView, SIGNAL(closing(SUIT_ViewWindow*)),
this, SLOT(onClosingView(SUIT_ViewWindow*)));
+ connect(theView, SIGNAL(tryClosing(SUIT_ViewWindow*)),
+ this, SIGNAL(tryCloseView(SUIT_ViewWindow*)));
+
connect(theView, SIGNAL(mousePressed(SUIT_ViewWindow*, QMouseEvent*)),
this, SLOT(onMousePressed(SUIT_ViewWindow*, QMouseEvent*)));
QPointer<SUIT_ViewWindow> view( theView );
+ view->setClosable( false );
view->hide();
if ( !view->testAttribute( Qt::WA_DeleteOnClose ) )
signals:
void lastViewClosed(SUIT_ViewManager*);
+ void tryCloseView(SUIT_ViewWindow*);
void deleteView(SUIT_ViewWindow*);
void viewCreated(SUIT_ViewWindow*);
void mousePress(SUIT_ViewWindow*, QMouseEvent*);
void SUIT_ViewWindow::closeEvent( QCloseEvent* e )
{
e->ignore();
- emit closing( this );
+ emit tryClosing( this );
+ if ( closable() ) emit closing( this );
}
/*! Context menu requested for event \a e.
return true;
}
+/*! Returns \c true if view window can be closed by the user
+*/
+bool SUIT_ViewWindow::closable() const
+{
+ QVariant val = property( "closable" );
+ return !val.isValid() || val.toBool();
+}
+
+/*! Set / reset "closable" option of the view window
+*/
+bool SUIT_ViewWindow::setClosable( const bool on )
+{
+ setProperty( "closable", on );
+}
+
/*!
\return string containing visual parameters of window
*/
-QString SUIT_ViewWindow::getVisualParameters()
+QString SUIT_ViewWindow::getVisualParameters()
{
return "empty";
}
bool onAccelAction( int );
+ bool closable() const;
+ bool setClosable( const bool );
+
virtual QString getVisualParameters();
virtual void setVisualParameters( const QString& parameters );
virtual void onDumpView();
signals:
+ void tryClosing( SUIT_ViewWindow* );
void closing( SUIT_ViewWindow* );
void mousePressed( SUIT_ViewWindow*, QMouseEvent* );
void mouseReleased( SUIT_ViewWindow*, QMouseEvent* );
QMap<QString, QVariant> myCustomData;
};
-#endif // !defined(AFX_SUIT_VIEWWINDOW_H__82C3D51A_6F10_45B0_BCFE_3CB3EF596A4D__INCLUDED_)
+#endif // SUIT_VIEWWINDOW_H