Salome HOME
Update copyright information
[modules/superv.git] / src / SUPERVGUI / SUPERVGUI_Library.h
1 //  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 //  This library is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU Lesser General Public
8 //  License as published by the Free Software Foundation; either
9 //  version 2.1 of the License.
10 //
11 //  This library is distributed in the hope that it will be useful,
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 //  Lesser General Public License for more details.
15 //
16 //  You should have received a copy of the GNU Lesser General Public
17 //  License along with this library; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 //  SUPERV SUPERVGUI : GUI for Supervisor component
23 //  File   : SUPERVGUI_Library.h
24 //  Author : Alexander SLADKOV
25 //  Module : SUPERV
26 //
27 #ifndef SUPERVGUI_Library_H
28 #define SUPERVGUI_Library_H
29
30 #include <qdialog.h>
31 #include <qdom.h>
32
33 #include "utilities.h"
34 #include "SALOME_LifeCycleCORBA.hxx"
35 #include CORBA_CLIENT_HEADER(SUPERV)
36
37 class QListBox;
38
39 /**
40  * SUPERVGUI_Library class is intended for management of InLine nodes library.
41  * InLine nodes library is an XML repository (currently it is a predefined user-dependant XML file)
42  * with InLine nodes stored in it.  InLine node in a library contains its Python code and lists of 
43  * input and output ports.
44  */
45 class SUPERVGUI_Library : QObject { // extending QObject to enable slot/signals
46
47   Q_OBJECT
48
49 protected:
50   SUPERVGUI_Library(); // constructor is protected, use static function getLibrary()
51  
52 public:
53   static SUPERVGUI_Library* getLibrary() { 
54     if ( !myLibrary )
55       myLibrary = new SUPERVGUI_Library();
56     return myLibrary; 
57   }
58
59   // Returns the XML file name used as InLine nodes repository
60   const char* GetLibraryFileName() const;
61
62   // Export an InLine node to Library 
63   bool Export( SUPERV::INode_var theNode ) const;
64
65   // Import an InLine node from Library into the dataflow  
66   bool Import( SUPERV::Graph_var theDataflow, SUPERV::INode_var& theNode, 
67                SUPERV::INode_var& theEndNode, const int theLibIndex ) const; 
68
69   // Remove an InLine node with given index from Library
70   bool Remove( const int i ) const;
71
72   // returns a list of node names currently stored in the library.  Indexes of the nodes in
73   // this list can be used for futher calls to Import(.., index)
74   SUPERV::ListOfStrings GetLibraryNodesNames() const;
75
76   // returns status of library: false indicates that library file does not exist or can not be opened
77   bool CanImport() const;
78
79 private:
80   static SUPERVGUI_Library* myLibrary;
81
82   bool createLibFile() const; // returns false on file creation error (also displays MB)
83
84   // returns list of NODE_ELEMENT-s and error result (false) if failed (also displays MB)
85   bool getNodes( QDomDocument& theDoc, QDomNodeList& theNodes ) const; 
86
87 };
88
89 /**
90  * Dialog box for Add/Remove InLine nodes to Library, Add node to Graph from Library
91  */
92 class SUPERVGUI_LibDlg: public QDialog {
93
94   Q_OBJECT
95
96 public:
97   SUPERVGUI_LibDlg( QWidget* parent, int& theX, int& theY );
98   ~SUPERVGUI_LibDlg();
99
100 private slots:
101   void add(); // add selected node from library to graph
102   void remove(); // remove selected node from library
103
104 private:
105   void initList(); // clear and fill list with nodes from Library
106
107   QListBox* myLB;
108   int& myX; // comes from caller - SUPERVGUI_Service, used for calculating next node_s position
109   int& myY; // comes from caller - SUPERVGUI_Service
110 };
111
112 #endif