]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
ToolsGUI library implements now 2 functionalities: CatalogGenerator (as before) and...
authorasv <asv@opencascade.com>
Thu, 4 Aug 2005 07:11:52 +0000 (07:11 +0000)
committerasv <asv@opencascade.com>
Thu, 4 Aug 2005 07:11:52 +0000 (07:11 +0000)
src/TOOLSGUI/Makefile.in
src/TOOLSGUI/ToolsGUI.cxx [deleted file]
src/TOOLSGUI/ToolsGUI.h [deleted file]
src/TOOLSGUI/ToolsGUI_HelpWindow.cxx [new file with mode: 0755]
src/TOOLSGUI/ToolsGUI_HelpWindow.h [new file with mode: 0755]
src/TOOLSGUI/ToolsGUI_IntervalWindow.cxx [new file with mode: 0755]
src/TOOLSGUI/ToolsGUI_IntervalWindow.h [new file with mode: 0755]
src/TOOLSGUI/ToolsGUI_RegWidget.cxx [new file with mode: 0755]
src/TOOLSGUI/ToolsGUI_RegWidget.h [new file with mode: 0755]

index 707493ac749ddc438e072d5873e54f75b6c65220..eb2d6e7bf42e75ab65e374f231df3b91e13fc07f 100755 (executable)
@@ -35,7 +35,8 @@ VPATH=.:@srcdir@:@top_srcdir@/idl:@srcdir@/resources
 @COMMENCE@
 
 # header files 
-EXPORT_HEADERS = ToolsGUI.h
+EXPORT_HEADERS = ToolsGUI_RegWidget.h \
+                ToolsGUI_CatalogGeneratorDlg.h
 
 # .po files to transform in .qm
 PO_FILES = ToolsGUI_icons.po \
@@ -44,17 +45,20 @@ PO_FILES = ToolsGUI_icons.po \
 # Libraries targets
 LIB = libToolsGUI.la
 
-LIB_SRC = ToolsGUI.cxx \
-         ToolsGUI_CatalogGeneratorDlg.cxx
+LIB_SRC = ToolsGUI_CatalogGeneratorDlg.cxx \
+         ToolsGUI_HelpWindow.cxx \
+         ToolsGUI_RegWidget.cxx \
+         ToolsGUI_IntervalWindow.cxx
 
-LIB_MOC = ToolsGUI_CatalogGeneratorDlg.h
+LIB_MOC = ToolsGUI_CatalogGeneratorDlg.h \
+          ToolsGUI_RegWidget.h
 
-# additionnal information to compil and link file
+LIB_CLIENT_IDL = SALOME_Registry.idl
 
 CPPFLAGS += $(QT_INCLUDES) $(OCC_INCLUDES) $(BOOST_CPPFLAGS) -I${KERNEL_ROOT_DIR}/include/salome
 CXXFLAGS += $(OCC_CXXFLAGS) $(BOOST_CPPFLAGS) -I${KERNEL_ROOT_DIR}/include/salome
 
-LDFLAGS += -lsuit $(CAS_LDPATH) -lTKernel
+LDFLAGS += $(QT_MT_LIBS) -lsuit $(CAS_LDPATH) -lTKernel -L$(KERNEL_ROOT_DIR)/lib/salome -lSalomeNS -lOpUtil
 
 @CONCLUDE@
 
diff --git a/src/TOOLSGUI/ToolsGUI.cxx b/src/TOOLSGUI/ToolsGUI.cxx
deleted file mode 100755 (executable)
index f40970d..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-//  SALOME TOOLSGUI : implementation of desktop "Tools" optioins
-//
-//  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-//
-//
-//
-//  File   : ToolsGUI.cxx
-//  Author : Nicolas REJNERI
-//  Module : SALOME
-//  $Header$
-
-#include "ToolsGUI.h"
-#include "ToolsGUI_CatalogGeneratorDlg.h"
-
-#include "utilities.h"
-
-#include <stdlib.h>
-
-using namespace std;
-
-//============================================================================
-// function : runCommand
-// purpose  : Run command
-//============================================================================
-int ToolsGUI::runCommand(string & arg)
-{ 
-  int res;
-  res = system( arg.c_str() );
-  if ( res == -1 )
-    MESSAGE( "fork failed (system command result = 0x" << hex << res << ")" << dec ) 
-  else
-    if ( res == 217 )
-      MESSAGE( "shell exec failed (system command result = 0x" << hex << res << ")" << dec )
-  return res;
-}
-
-/*
-
-//============================================================================
-// function : OnGUIEvent
-// purpose  : Process events
-//============================================================================
-bool ToolsGUI::OnGUIEvent( int theCommandID,  QAD_Desktop* parent )
-{
-  switch ( theCommandID )
-  {
-  case 5102 :
-    {
-      ToolsGUI_CatalogGeneratorDlg* aDlg = new ToolsGUI_CatalogGeneratorDlg( parent );
-      aDlg->exec();
-      delete aDlg;
-      break;
-    }
-
-  default:
-    MESSAGE ( " No command associated with this id = " << theCommandID )
-    break;
-  }
-  return true;
-}
-
-extern "C"
-{
-  bool OnGUIEvent( int theCommandID, QAD_Desktop* parent )
-  {
-    return ToolsGUI::OnGUIEvent(theCommandID, parent);
-  }
-}
-
-*/
-
-//=======================================================================
-// name    : GetVisibility
-// Purpose : Verify whether object is visible or not
-//=======================================================================
-bool ToolsGUI::GetVisibility( _PTR(Study)   theStudy,
-                              _PTR(SObject) theObj,
-                              void*         theId )
-{
-  _PTR(GenericAttribute) anAttr;
-  if ( theObj && theObj->FindAttribute( anAttr, "AttributeGraphic" ) )
-  {
-    _PTR(AttributeGraphic) aGraphic (anAttr);
-    return aGraphic->GetVisibility( (unsigned long)theId );
-  }
-
-  return false;
-}
-
-//=======================================================================
-// name    : SetVisibility
-// Purpose : Set flag visibility of object
-//=======================================================================
-bool ToolsGUI::SetVisibility( _PTR(Study) theStudy,
-                              const char* theEntry,
-                              const bool  theValue,
-                              void*       theId )
-{
-  _PTR(SObject) anObj ( theStudy->FindObjectID( theEntry ) );
-
-  if ( anObj )
-  {
-    _PTR(GenericAttribute) aGAttr;
-    if ( anObj->FindAttribute( aGAttr, "AttributeGraphic" ) )
-    {
-      _PTR(AttributeGraphic) anAttr ( aGAttr );
-      anAttr->SetVisibility( (unsigned long)theId, theValue );
-    }
-    else if ( theValue )
-    {
-      _PTR(StudyBuilder) aBuilder (theStudy->NewBuilder());
-      _PTR(AttributeGraphic) anAttr (aBuilder->FindOrCreateAttribute(anObj, "AttributeGraphic"));
-      anAttr->SetVisibility( (unsigned long)theId, theValue );
-    }
-    return true;
-  }
-
-  return false;
-}
-
-
-
-
-
-
diff --git a/src/TOOLSGUI/ToolsGUI.h b/src/TOOLSGUI/ToolsGUI.h
deleted file mode 100755 (executable)
index 08cf540..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-//  SALOME TOOLSGUI : implementation of desktop "Tools" optioins
-//
-//  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-//
-//
-//
-//  File   : ToolsGUI.h
-//  Author : Nicolas REJNERI
-//  Module : SALOME
-//  $Header$
-
-#ifndef ToolsGUI_HeaderFile
-#define ToolsGUI_HeaderFile
-
-#include "utilities.h"
-
-#ifndef _Standard_HeaderFile
-#include <Standard.hxx>
-#endif
-
-#include "SALOMEDSClient.hxx"
-
-class Standard_EXPORT ToolsGUI  
-{
-
-public :
-
-  static int                runCommand( string&  );
-//  static bool               OnGUIEvent( int theCommandID, QAD_Desktop* parent );
-
-  static bool               GetVisibility( _PTR(Study)   theStudy,
-                                           _PTR(SObject) theObj,
-                                           void*         theId );
-
-  static bool               SetVisibility( _PTR(Study) theStudy,
-                                           const char* theEntry,
-                                           const bool  theValue,
-                                           void*       theId );
-};
-
-#endif
diff --git a/src/TOOLSGUI/ToolsGUI_HelpWindow.cxx b/src/TOOLSGUI/ToolsGUI_HelpWindow.cxx
new file mode 100755 (executable)
index 0000000..e45d7fc
--- /dev/null
@@ -0,0 +1,101 @@
+//  SALOME RegistryDisplay : GUI for Registry server implementation
+//
+//  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : ToolsGUI_HelpWindow.cxx
+//  Author : Pascale NOYRET, EDF
+//  Module : SALOME
+//  $Header$
+
+using namespace std;
+# include "ToolsGUI_HelpWindow.h"
+# include "utilities.h"
+
+# include <qtextview.h>
+# include <qpushbutton.h>
+# include <qtextstream.h> 
+# include <qfile.h> 
+
+ToolsGUI_HelpWindow::ToolsGUI_HelpWindow(QWidget* parent, const char* name ) 
+     : QMainWindow( parent, name, WType_TopLevel | WDestructiveClose )
+{
+  BEGIN_OF("Constructeur ToolsGUI_HelpWindow");
+  
+  setCaption( tr( "Help" ) );
+
+  myTextView = new QTextView( this, "myTextView" );
+  QPalette pal = myTextView->palette();
+  QColorGroup cg = pal.active();
+  cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) );
+  cg.setColor( QColorGroup::HighlightedText, Qt::white );
+  cg.setColor( QColorGroup::Base, QColor( 255,255,220 )  ); 
+  cg.setColor( QColorGroup::Text, Qt::black );
+  pal.setActive  ( cg );
+  cg = pal.inactive();
+  cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) );
+  cg.setColor( QColorGroup::HighlightedText, Qt::white );
+  cg.setColor( QColorGroup::Base, QColor( 255,255,220 )  ); 
+  cg.setColor( QColorGroup::Text, Qt::black );
+  pal.setInactive( cg );
+  cg = pal.disabled();
+  cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) );
+  cg.setColor( QColorGroup::HighlightedText, Qt::white );
+  cg.setColor( QColorGroup::Base, QColor( 255,255,220 )  ); 
+  cg.setColor( QColorGroup::Text, Qt::black );
+  pal.setDisabled( cg );
+  myTextView->setPalette( pal );
+  
+  setCentralWidget( myTextView );
+  setMinimumSize( 450, 250 );
+
+  QFile f ( "tmp.txt" );
+  if ( f.open( IO_ReadOnly ) )   
+    {
+      QTextStream t( &f ); 
+      while ( !t.eof() ) 
+       {
+         myTextView->append(t.readLine());
+       }
+    }
+  f.close();
+
+  END_OF("Constructeur ToolsGUI_HelpWindow");
+}
+
+/*!
+  Destructor
+*/
+ToolsGUI_HelpWindow::~ToolsGUI_HelpWindow()
+{
+  BEGIN_OF("Destructeur ToolsGUI_HelpWindow");
+  END_OF("Destructeur ToolsGUI_HelpWindow");
+};
+
+/*!
+  Sets text
+*/
+void ToolsGUI_HelpWindow::setText( const QString& text )
+{
+  myTextView->setText( text );
+}
+
+
diff --git a/src/TOOLSGUI/ToolsGUI_HelpWindow.h b/src/TOOLSGUI/ToolsGUI_HelpWindow.h
new file mode 100755 (executable)
index 0000000..22c06ca
--- /dev/null
@@ -0,0 +1,51 @@
+//  SALOME RegistryDisplay : GUI for Registry server implementation
+//
+//  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : HelpWindow.hxx
+//  Author : Pascale NOYRET, EDF
+//  Module : SALOME
+//  $Header$
+
+# ifndef __HELPWINDOW_H__
+# define __HELPWINDOW_H__
+
+# include <qapplication.h>
+# include <qmainwindow.h>
+
+class QTextView;
+
+class ToolsGUI_HelpWindow : public QMainWindow
+{
+public:
+  ToolsGUI_HelpWindow( QWidget* parent = 0, const char* name = 0);
+  ~ToolsGUI_HelpWindow();
+
+  void setText( const QString& text );
+  QTextView* textView() const { return myTextView; }
+
+private:
+  QTextView* myTextView;
+};
+# endif         /* __HELPWINDOW_H__ */
+
+
diff --git a/src/TOOLSGUI/ToolsGUI_IntervalWindow.cxx b/src/TOOLSGUI/ToolsGUI_IntervalWindow.cxx
new file mode 100755 (executable)
index 0000000..04d96c0
--- /dev/null
@@ -0,0 +1,107 @@
+//  SALOME RegistryDisplay : GUI for Registry server implementation
+//
+//  Copyright (C) 2003  CEA/DEN, EDF R&D
+//
+//
+//
+//  File   : ToolsGUI_IntervalWindow.cxx
+//  Author : Oksana TCHEBANOVA
+//  Module : SALOME
+
+#include "ToolsGUI_IntervalWindow.h"
+
+#include <qbuttongroup.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qlayout.h>
+# include "utilities.h"
+
+#define MARGIN_SIZE      11
+#define SPACING_SIZE      6
+#define MIN_SPIN_WIDTH  100 
+
+ToolsGUI_IntervalWindow::ToolsGUI_IntervalWindow ( QWidget* parent )
+     : QDialog( parent, "ToolsGUI_IntervalWindow" , true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose )
+{
+  BEGIN_OF("ToolsGUI_IntervalWindow constructor")
+  setCaption( tr( "Refresh Interval"  ) );
+  setSizeGripEnabled( true );
+
+  QGridLayout* topLayout = new QGridLayout( this );
+  topLayout->setSpacing( SPACING_SIZE );
+  topLayout->setMargin( MARGIN_SIZE );
+
+  QGroupBox* intervalGrp = new QGroupBox( this, "intervalGrp" );
+  intervalGrp->setColumnLayout( 0, Qt::Horizontal );//Vertical
+  intervalGrp->layout()->setSpacing( 0 );
+  intervalGrp->layout()->setMargin( 0 );
+  QGridLayout* intervalGrpLayout = new QGridLayout( intervalGrp->layout() );
+  intervalGrpLayout->setAlignment( Qt::AlignTop );
+  intervalGrpLayout->setSpacing( SPACING_SIZE );
+  intervalGrpLayout->setMargin( MARGIN_SIZE  );  
+
+  QHBoxLayout* aBtnLayout = new QHBoxLayout;
+  aBtnLayout->setSpacing( SPACING_SIZE );
+  aBtnLayout->setMargin( 0 );
+
+  myButtonOk = new QPushButton( this, "buttonOk" );
+  myButtonOk->setText( tr( "BUT_OK"  ) );
+  myButtonOk->setAutoDefault( TRUE );
+  myButtonOk->setDefault( TRUE );
+  
+  myButtonCancel = new QPushButton( this, "buttonCancel" );
+  myButtonCancel->setText( tr( "BUT_CANCEL"  ) );
+  myButtonCancel->setAutoDefault( TRUE );
+
+  QLabel* TextLabel = new QLabel( intervalGrp, "TextLabel" );
+  TextLabel->setText( tr( "Please, enter a number of seconds:"  ) );
+
+  mySpinBox = new QSpinBox( 1, 999999999, 1, intervalGrp, "SpinBox" );
+  mySpinBox->setValue( 100 );
+  mySpinBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
+  mySpinBox->setMinimumWidth(MIN_SPIN_WIDTH);
+
+  intervalGrpLayout->addWidget(TextLabel, 0, 0);
+  intervalGrpLayout->addWidget(mySpinBox, 0, 1);
+
+  aBtnLayout->addWidget( myButtonOk );
+  aBtnLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ) );
+  aBtnLayout->addWidget( myButtonCancel );
+
+  topLayout->addWidget( intervalGrp, 0, 0 );
+  topLayout->addLayout( aBtnLayout, 1, 0 ); 
+
+  END_OF("ToolsGUI_IntervalWindow constructor")
+}
+ToolsGUI_IntervalWindow::~ToolsGUI_IntervalWindow() {}
+/* 
+   Sets start interval size
+*/
+void ToolsGUI_IntervalWindow::setValue(const int size)
+{
+  mySpinBox->setValue(size);
+}
+
+/*
+   Gets interval size
+*/
+int ToolsGUI_IntervalWindow::getValue()
+{
+  return mySpinBox->value();
+}
+
+/*
+   gets a pointer to myButtonOk
+*/
+QPushButton* ToolsGUI_IntervalWindow::Ok()
+{
+  return myButtonOk;
+}
+
+/*
+   gets a pointer to myButtonCancel
+*/
+QPushButton* ToolsGUI_IntervalWindow::Cancel()
+{
+  return myButtonCancel;
+}
diff --git a/src/TOOLSGUI/ToolsGUI_IntervalWindow.h b/src/TOOLSGUI/ToolsGUI_IntervalWindow.h
new file mode 100755 (executable)
index 0000000..876c084
--- /dev/null
@@ -0,0 +1,39 @@
+//  SALOME RegistryDisplay : GUI for Registry server implementation
+//
+//  Copyright (C) 2003  CEA/DEN, EDF R&D
+//
+//
+//
+//  File   : IntervalWindow.hxx
+//  Author : Oksana TCHEBANOVA
+//  Module : SALOME
+
+#ifndef IntervalWindow_HeaderFile
+#define IntervalWindow_HeaderFile
+
+# include <qwidget.h>
+# include <qdialog.h>
+# include <qpushbutton.h>
+# include <qspinbox.h>
+
+using namespace std;
+
+class ToolsGUI_IntervalWindow : public QDialog
+{
+public:
+  ToolsGUI_IntervalWindow( QWidget* parent = 0 );
+  ~ToolsGUI_IntervalWindow();
+  
+  QPushButton* Ok();
+  QPushButton* Cancel();
+
+  int getValue();
+  void setValue( int );
+
+private:
+  QSpinBox* mySpinBox;
+  QPushButton* myButtonOk;
+  QPushButton* myButtonCancel;
+};
+
+#endif
diff --git a/src/TOOLSGUI/ToolsGUI_RegWidget.cxx b/src/TOOLSGUI/ToolsGUI_RegWidget.cxx
new file mode 100755 (executable)
index 0000000..b36f8fd
--- /dev/null
@@ -0,0 +1,810 @@
+//  SALOME RegistryDisplay : GUI for Registry server implementation
+//
+//  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : ToolsGUI_RegWidget.cxx
+//  Author : Pascale NOYRET, EDF
+//  Module : SALOME
+//  $Header$
+
+# include <qpushbutton.h>
+# include <qlistview.h>
+# include <qtabwidget.h> 
+# include <qstatusbar.h>
+# include <qtextview.h>
+# include <qtimer.h>
+# include <qinputdialog.h>
+# include <qtoolbar.h>
+# include <qdir.h>
+# include <qtooltip.h>
+
+# include "SALOME_NamingService.hxx"
+# include "ServiceUnreachable.hxx"
+# include "Utils_SINGLETON.hxx"
+# include "Utils_CommException.hxx"
+
+# include "utilities.h"
+# include "OpUtil.hxx"
+
+# include "ToolsGUI_RegWidget.h"
+# include "ToolsGUI_HelpWindow.h"
+# include "ToolsGUI_IntervalWindow.h"
+
+# include "Qtx.h"
+
+using namespace std;
+
+typedef int PIXELS;
+ToolsGUI_RegWidget* ToolsGUI_RegWidget::myRegWidgetPtr = 0;
+
+QString addSlash( const QString& );
+QString findFile( QString filename );
+
+#define BOLD( text ) ( QString( "<b>" ) + QString( text ) + QString( "</b>" ) )
+
+static const char* const time_data[] = { 
+"16 16 6 1",
+". c None",
+"b c None",
+"# c #000000",
+"a c #4c4c4c",
+"d c #878787",
+"c c #ffffff",
+".....#####ab....",
+"...##cc#dc##ab..",
+"..#ccc###dcc#ab.",
+".#ccccc#dcccc#a.",
+".#ccccc#dcccc#ab",
+"#cccccc#dccccc#a",
+"#cccccc#dccc#c#a",
+"#c##ccc########a",
+"#ccddcccdddd#d#a",
+"#cccccccccccdc#a",
+".#ccccccccccc#aa",
+".#ccccc#ccccc#a.",
+"..#cccc#dccc#aa.",
+"...##cccdc##aa..",
+".....#####aaa...",
+"......aaaaa....."};
+
+static const char* const close_data[] = { 
+"16 16 6 1",
+"d c None",
+". c None",
+"# c #000000",
+"a c #4c4c4c",
+"c c #5b5b5b",
+"b c #ffffff",
+".....#####a.....",
+"...##bbbbb##a...",
+"..#bbbbbbbbb#a..",
+".#b#cbbbbbb#d#a.",
+".#bc#cbbbb#cb#a.",
+"#bbbc#cbb#cbbb#a",
+"#bbbbc#c#cbbbb#a",
+"#bbbbbc#cbbbbb#a",
+"#bbbbc#c#cbbbb#a",
+"#bbb#ccbb##bbb#a",
+".#b#c#bbbbc#b#aa",
+".#bc#bbbbbb#c#a.",
+"..#bbbbbbbbb#aa.",
+"...##bbbbb##aa..",
+".....#####aaa...",
+"......aaaaa....."};
+
+static const char* const refresh_data[] = { 
+"16 16 5 1",
+". c None",
+"# c #000000",
+"a c #4c4c4c",
+"c c #878787",
+"b c #ffffff",
+".....#####a.....",
+"...##bb#bb##a...",
+"..#bbbbc#bbb#a..",
+".#bbbb####cbb#a.",
+".#bbb#cc#cbbb#a.",
+"#bbb#cb#cbbbbb#a",
+"#bb#cbbbbbb#bb#a",
+"#bb#cbbbbbb#cb#a",
+"#bb#cbbbbbb#cb#a",
+"#bbbbbb#bb#cbb#a",
+".#bbbb#cb#cbb#aa",
+".#bbb####cbbb#a.",
+"..#bbb#cbbbb#aa.",
+"...##bb#cb##aa..",
+".....#####aaa...",
+"......aaaaa....."};
+
+/*!
+  Creates components list
+*/
+
+Registry::Components_var MakeRegistry( CORBA::ORB_var &orb )
+{
+
+  const char *registryName="Registry" ;
+  
+  SALOME_NamingService &naming = *SINGLETON_<SALOME_NamingService>::Instance() ;
+  naming.init_orb( orb ) ;
+  
+  // Recuperation de la reference de l'objet
+  CORBA::Object_var object = 0 ;
+  try
+    {
+      SCRUTE(registryName) ;
+      object = naming.Resolve( registryName ) ;
+      if(CORBA::is_nil(object)) throw CommException( "unable to find the RegistryService" ) ;
+    }
+  catch( const ServiceUnreachable &ex )
+    {
+      MESSAGE( ex.what() )
+      exit( EXIT_FAILURE ) ;
+    }
+  catch( const CORBA::Exception &exx )
+    {
+      exit( EXIT_FAILURE ) ;
+    }
+  
+  // Specialisation de l'objet generique
+  
+  return Registry::Components::_narrow( object ) ;
+}
+
+/*!
+  Only one global registry window should exist at the moment
+  This method creates registry window if necessary and returns it
+  [ static ] 
+*/
+ToolsGUI_RegWidget* ToolsGUI_RegWidget::GetRegWidget( CORBA::ORB_var &orb , QWidget *parent, const char *name )
+{
+  if ( !myRegWidgetPtr ) 
+    myRegWidgetPtr = new ToolsGUI_RegWidget( orb, parent, name );
+  return myRegWidgetPtr;
+}
+
+/*!
+  Constructor  
+*/
+ToolsGUI_RegWidget::ToolsGUI_RegWidget(CORBA::ORB_var &orb, QWidget *parent, const char *name ) 
+     : QMainWindow( parent, name, WType_TopLevel | WDestructiveClose ),
+       _VarComponents( MakeRegistry(orb) ),
+       _clients(0), _history(0), _parent( parent ),
+       _tabWidget(0), _refresh(0), _interval(0),
+       myInfoWindow(0), myHelpWindow(0), myIntervalWindow(0)
+{
+   QString aFile = findFile("default.png");
+ /* char* dir = getenv( "CSF_ResourcesDefaults" );
+  QString path( "" );
+  if ( dir ) {
+    QDir qDir( dir );
+    path = qDir.filePath( "default.png" );
+  }*/
+  QPixmap pm ( aFile );
+  if ( !pm.isNull() )
+    setIcon( pm );
+
+  // pixmap for buttons
+  QPixmap image_refresh ( ( const char** ) refresh_data );
+  QPixmap image_interval( ( const char** ) time_data );
+  QPixmap image_close   ( ( const char** ) close_data );
+
+  // Buttons definition
+  QToolBar* topbar = new QToolBar( tr("Toolbar"), this );
+  setDockEnabled( topbar, DockTornOff, false );
+  setDockMenuEnabled( false );
+
+  _refresh = new QPushButton( tr( "Refresh" ), topbar );
+  _refresh->setIconSet( image_refresh );
+  _refresh->setFocusPolicy( NoFocus );
+  connect( _refresh, SIGNAL( clicked() ), this, SLOT( slotListeSelect() ) );
+  QToolTip::add( _refresh, "", toolTipGroup(), tr("Immediately updates list of components") );
+  
+  /* PAL5540 - this button is needless
+  QPushButton* help = new QPushButton( tr( "Help" ), topbar );
+  connect( help, SIGNAL( clicked() ), this, SLOT( slotHelp() ) );
+  QToolTip::add( help, "", toolTipGroup(), tr("Opens Help window") );
+  */
+  
+  _interval = new QPushButton( tr( "Interval" ), topbar );
+  _interval->setIconSet( image_interval );
+  _interval->setFocusPolicy( NoFocus );
+  connect( _interval, SIGNAL( clicked() ), this, SLOT( slotSelectRefresh() ) );
+  QToolTip::add( _interval, "", toolTipGroup(), tr("Changes refresh interval") );
+  
+  topbar->addSeparator();
+  _close = new QPushButton( tr("Close"), topbar );
+  _close->setIconSet( image_close );
+  _close->setFocusPolicy( NoFocus );
+  connect( _close, SIGNAL( clicked() ), this, SLOT( close() ) );
+  QToolTip::add( _close, "", toolTipGroup(), tr("Closes Registry window") );
+  
+  // Display area and associated slots definition
+  _tabWidget = new QTabWidget( this );
+  _clients   = new QListView( _tabWidget );
+  SetListe();
+  _history   = new QListView( _tabWidget );
+  SetListeHistory();
+  
+  _tabWidget->addTab( _clients, tr( "Running" ) );
+  _tabWidget->addTab( _history, tr( "History" ) );
+  connect( _tabWidget, SIGNAL( currentChanged( QWidget* )), this, SLOT( slotListeSelect() ) );
+  connect( _clients,   SIGNAL( clicked( QListViewItem* ) ),        this, SLOT( slotClientChanged( QListViewItem* ) ) );
+  connect( _history,   SIGNAL( clicked( QListViewItem* ) ),        this, SLOT( slotHistoryChanged( QListViewItem* ) ) );
+  setCentralWidget( _tabWidget );
+  
+  // Timer definition (used to automaticaly refresh the display area)
+  _counter = new QTimer( this );
+  connect( _counter, SIGNAL( timeout() ), this, SLOT( slotListeSelect() ) );
+  myRefreshInterval = 10;
+  _counter->start( myRefreshInterval * 1000 );
+  
+  PIXELS xpos    = 160 ;
+  PIXELS ypos    = 100 ;
+  PIXELS largeur = 800 ;
+  PIXELS hauteur = 350 ;
+  setGeometry( xpos, ypos, largeur, hauteur ) ;
+  setCaption( name ) ;
+  statusBar()->message("    ");
+}
+
+/*!
+  Destructor
+*/
+ToolsGUI_RegWidget::~ToolsGUI_RegWidget()
+{
+  MESSAGE("Debut du Destructeur");
+  _counter->stop();
+  myRegWidgetPtr = 0;
+};
+
+/*!
+  Event filter
+*/
+bool ToolsGUI_RegWidget::eventFilter( QObject* object, QEvent* event )
+{
+  if ( object ) {
+    if ( object == myHelpWindow && event->type() == QEvent::Close ) {
+      myHelpWindow = 0;
+    }
+    else if ( object == myInfoWindow && event->type() == QEvent::Close ) {
+      myInfoWindow = 0;
+    }
+    else if ( object == myIntervalWindow && event->type() == QEvent::Close ) {
+      myIntervalWindow = 0;
+    }
+    else if ( object == _clients && event->type() == QEvent::KeyPress ) {
+      QKeyEvent* ke = (QKeyEvent*)event;
+      if ( ke->key() == Key_Enter || ke->key() == Key_Return ) {
+       slotClientChanged( _clients->currentItem() );
+      }
+    }
+    else if ( object == _history && event->type() == QEvent::KeyPress ) {
+      QKeyEvent* ke = (QKeyEvent*)event;
+      if ( ke->key() == Key_Enter || ke->key() == Key_Return ) {
+       slotHistoryChanged( _history->currentItem() );
+      }
+    }
+  }
+  return QMainWindow::eventFilter( object, event );
+}
+
+/*!
+  Searches item in the list and returns it's index or -1 if not found
+*/
+int ToolsGUI_RegWidget::numitem(const QString &name, const QString &pid, const QString &machine,const Registry::AllInfos *listclient)
+{
+  BEGIN_OF("numitem");
+  for (CORBA::ULong i=0; i<listclient->length(); i++)
+    {       
+      const Registry::Infos & c_info=(*listclient)[i];
+      ASSERT( c_info.name!=NULL);
+      QString b;
+      b.setNum(int(c_info.pid));
+      if ( (name.compare(QString(c_info.name)) == 0) && 
+         (machine.compare(QString(c_info.machine)) == 0) && 
+         (pid.compare(b) == 0) )
+       {
+         END_OF("numitem");
+         return i;
+       }
+    }
+  END_OF("numitem");
+  return -1;
+}
+
+/*!
+  Returns text, containing information about client [ static ]
+*/
+QString ToolsGUI_RegWidget::setlongText( const Registry::Infos &c_info)
+{
+  BEGIN_OF("setlongText");
+  ASSERT( c_info.name != NULL );
+  QString a = QString( "<hr><h2>" ) + tr( "Code" ) + QString( " : " );
+  a.append( QString( c_info.name ) );
+  a.append( "</h1><hr><br>" );
+  a.append( tr( "Process Id" ) + QString( " : " ) );
+  a.append( BOLD( QString::number( int( c_info.pid ) ) ) );
+  a.append( QString( " " ) + tr( "on machine" ) + QString( " " ) );
+  a.append( BOLD( c_info.machine ) ); 
+  a.append( QString( " " ) + tr( "ip address" ) + QString( " : " ) );
+  a.append( BOLD( c_info.adip ) );
+  a.append( "<br>" );
+  
+  a.append( tr( "launched by user" ) + QString( " " ) );
+  a.append( BOLD( c_info.pwname ) );
+  a.append( QString( " ( " ) + tr( "pid" ) + QString( " : " ) );
+  a.append( BOLD( QString::number( int( c_info.uid ) ) ) );
+  a.append( QString( " )<br> " ) + tr( "in directory" ) + QString( " " ));
+  a.append( BOLD( c_info.cdir ) );
+  
+  a.append( QString( "<br>" ) + tr( "begins" ) + QString( " " ) );
+  char * t1 = (char * )duplicate(ctime(&c_info.tc_start));
+  t1 [strlen(t1) -1 ] = ' ';
+  a.append( BOLD( t1 ) ); 
+  delete [] t1;
+  a.append( "<br>" );
+  
+  if (c_info.tc_hello != 0 )
+    {
+      char * t2 = (char * )duplicate(ctime(&c_info.tc_hello));
+      t2 [strlen(t2) -1 ] = ' ';
+      a.append( tr( "last signal" ) + QString(" : ") ); 
+      a.append( BOLD( t2 ) ); 
+      a.append( "<br>" );
+      delete [] t2;
+    }
+  if ((c_info.tc_end - c_info.difftime) != 0)
+    {
+      char * t3 = (char * )duplicate(ctime(&c_info.tc_end));
+      t3 [strlen(t3) -1 ] = ' ';
+      a.append( tr( "ends" ) + QString( " " ) ); 
+      a.append( BOLD( t3 ) ); 
+      a.append( "<br>" );
+      delete [] t3;
+    }
+  else
+    {
+      a.append( tr( "still running" ) + QString( "<br>" ) );
+    }
+  
+  SCRUTE(c_info.difftime);
+  if (c_info.difftime!= 0)
+    {
+      a.append( QString( "(" ) + tr( "Time on" ) + QString( " " ) ); 
+      a.append( BOLD( c_info.machine ) ); 
+      a.append( QString( " " ) + tr( "differs from server's time. The difference is" ) + QString( " " )); 
+      a.append( BOLD( QString::number( int( c_info.difftime ) ) ) );
+      a.append( QString( " " ) + tr( "seconds" ) + QString( ")<br>" ) );
+    }
+  END_OF("setlongText");  
+  return a;
+  
+}
+
+/*!
+  Close event
+*/
+void ToolsGUI_RegWidget::closeEvent( QCloseEvent *e)
+{
+  BEGIN_OF("closeEvent");
+  if ( myInfoWindow )
+    myInfoWindow->close();
+  if ( myHelpWindow )
+    myHelpWindow->close();
+  if (myIntervalWindow)
+    myIntervalWindow->close();
+  e->accept();
+  END_OF("closeEvent");
+};
+
+/*!
+  Setups Clients list
+*/
+void ToolsGUI_RegWidget::SetListe()
+{
+  BEGIN_OF("SetListe");
+  _clients->installEventFilter( this );
+  _clients->setAllColumnsShowFocus( true );
+  _clients->addColumn( tr( "Component" ), -1);
+  _clients->addColumn( tr( "PID" ), -1 );
+  _clients->addColumn( tr( "User Name" ), -1 );
+  _clients->addColumn( tr( "Machine" ), -1 );
+  _clients->addColumn( tr( "begins" ), -1 );
+  _clients->addColumn( tr( "hello" ) , -1 );
+  _clients->setColumnAlignment( 1, Qt::AlignRight );
+  END_OF("SetListe");
+}
+
+/*!
+  Setups History list
+*/
+void ToolsGUI_RegWidget::SetListeHistory()
+{
+   BEGIN_OF("SetListeHistory")
+  _history->installEventFilter( this );
+  _history->setAllColumnsShowFocus( true );
+  _history->addColumn( tr( "Component" ), -1);
+  _history->addColumn( tr( "PID" ), -1 );
+  _history->addColumn( tr( "User Name" ), -1 );
+  _history->addColumn( tr( "Machine" ), -1 );
+  _history->addColumn( tr( "begins" ), -1 );
+  _history->addColumn( tr( "ends" ), -1 );
+  _history->setColumnAlignment( 1, Qt::AlignRight );
+   END_OF("SetListeHistory")
+}
+
+/*!
+  Updates History list
+*/
+void ToolsGUI_RegWidget::InfoHistory()
+{
+
+  BEGIN_OF("InfoHistory")
+    _history->clear();
+  try
+    {
+      _serverhistory = _VarComponents->history();
+      for (CORBA::ULong i=0; i<_serverhistory->length(); i++)
+       {       
+         const Registry::Infos & c_info=(*_serverhistory)[i];
+         ASSERT( c_info.name!=NULL);
+         QString a;
+         a.setNum(int(c_info.pid));
+         char * t1 = (char * )duplicate(ctime(&c_info.tc_start));
+         t1 [strlen(t1) -1 ] = ' ';
+         char * t2 = (char * )duplicate(ctime(&c_info.tc_end));
+         t2 [strlen(t2) -1 ] = ' ';
+         QListViewItem * item = new QListViewItem(_history, QString(c_info.name),\
+                                                  a, QString(c_info.pwname), QString(c_info.machine), \
+                                                  QString(t1), QString(t2));
+         item=0 ;
+         delete [] t1;
+         delete [] t2;
+         
+       }
+    }
+  catch( ... )
+    {
+      _interval->setDisabled( TRUE ) ;
+      _refresh->setDisabled( TRUE ) ;
+      _counter->stop();
+      MESSAGE("Sorry, No more Registry Server") ;
+      statusBar()->message( tr( "Sorry, No more Registry Server" ) ) ;
+    }
+  END_OF("InfoHistory")
+}
+
+/*!
+  Updates clients list
+*/
+void ToolsGUI_RegWidget::InfoReg()
+{
+  BEGIN_OF("InfoReg")
+  _clients->clear();
+  try
+    {
+      _serverclients = _VarComponents->getall();
+      for (CORBA::ULong i=0; i<_serverclients->length(); i++)
+       {       
+         const Registry::Infos & c_info=(*_serverclients)[i];
+         ASSERT( c_info.name!=NULL);
+         QString a;
+         a.setNum(int(c_info.pid));
+         char * t1 = (char * )duplicate(ctime(&c_info.tc_start));
+         t1 [strlen(t1) -1 ] = ' ';
+         char * t2 = (char * )duplicate(ctime(&c_info.tc_hello));
+         t2 [strlen(t2) -1 ] = ' ';
+         QListViewItem * item = new QListViewItem(_clients, QString(c_info.name),\
+                                                  a, QString(c_info.pwname), QString(c_info.machine), \
+                                                  QString(t1), QString(t2));
+         item=0 ;
+         delete [] t1;
+         delete [] t2;
+         
+       }
+    }
+  catch( ... )
+    {
+      _interval->setDisabled( TRUE ) ;
+      _refresh->setDisabled( TRUE ) ;
+      _counter->stop();
+      MESSAGE("Sorry, No more Registry Server") ;
+      statusBar()->message( tr( "Sorry, No more Registry Server" ) ) ;
+    }
+  END_OF("InfoReg")
+}
+
+/*!
+  Called when <Refresh> button is clicked
+*/
+void ToolsGUI_RegWidget::slotListeSelect()
+{
+  try
+    {
+      ASSERT(_tabWidget->currentPage() != NULL);
+      if (_tabWidget->currentPage () == _clients) InfoReg();
+      else if (_tabWidget->currentPage () == _history) InfoHistory();
+    }
+  catch( ... )
+    {
+      MESSAGE("Sorry, No more Registry Server") ;
+      statusBar()->message( tr( "Sorry, No more Registry Server" ) ) ;
+    }
+}
+
+/*!
+  Called when <Interval> button is clicked (changing refresh interval)
+*/
+void ToolsGUI_RegWidget::slotSelectRefresh()
+{
+  BEGIN_OF("slotSelectRefresh");
+  myIntervalWindow = new ToolsGUI_IntervalWindow(this);
+  myIntervalWindow->installEventFilter( this );
+  myIntervalWindow->setValue(myRefreshInterval);
+  myIntervalWindow->show();
+  connect( myIntervalWindow->Cancel(), SIGNAL( clicked() ), myIntervalWindow, SLOT( close() ) );
+  connect( myIntervalWindow->Ok(), SIGNAL( clicked() ), this, SLOT( slotIntervalOk() ) );
+  END_OF("slotSelectRefresh");
+}
+
+void ToolsGUI_RegWidget::slotIntervalOk()
+{
+  BEGIN_OF("slotIntervalOk");
+  myRefreshInterval = myIntervalWindow->getValue();
+  _counter->changeInterval( myRefreshInterval * 1000 );
+  SCRUTE(myRefreshInterval);
+  myIntervalWindow->close();
+  END_OF("slotIntervalOk");
+}
+/*!
+  Called when <Help> button is clicked
+*/
+void ToolsGUI_RegWidget::slotHelp()
+{
+  BEGIN_OF("slotHelp()");
+
+  if ( !myHelpWindow ) {
+    myHelpWindow  = new ToolsGUI_HelpWindow( this );
+    myHelpWindow->installEventFilter( this );
+  }
+  myHelpWindow->show();
+  myHelpWindow->raise();
+  myHelpWindow->setActiveWindow();
+  
+  END_OF("slotHelp()") ;
+}
+
+/*!
+  Called when user clicks on item in <Running> list
+*/
+void ToolsGUI_RegWidget::slotClientChanged( QListViewItem* item )
+{
+  BEGIN_OF("slotClientChanged()") ;
+
+  if ( item <= 0)
+    return;
+
+  blockSignals( true ); // for sure that item will not be deleted when refreshing
+
+  int numeroItem = numitem(item->text(0), item->text(1), item->text(3), _serverclients);
+  SCRUTE(numeroItem) ;
+  SCRUTE(item->text(1)) ;
+  
+  ASSERT(numeroItem>=0) ;
+  ASSERT((size_t)numeroItem<_serverclients->length()) ;
+  const Registry::Infos & c_info=(*_serverclients)[numeroItem];
+  ASSERT( c_info.name!=NULL);
+  
+  if ( !myInfoWindow ) {
+    myInfoWindow  = new ToolsGUI_InfoWindow( this );
+    myInfoWindow->installEventFilter( this );
+  }
+  QString a = tr( "More about" ) + QString( " " ) + QString( c_info.name );
+  myInfoWindow->setCaption(a);
+  myInfoWindow->setText( ToolsGUI_RegWidget::setlongText( c_info) );
+  myInfoWindow->show();
+  myInfoWindow->raise();
+  myInfoWindow->setActiveWindow();
+
+  blockSignals( false ); // enabling signals again
+
+  END_OF("slotClientChanged()") ;
+  return ;
+}
+
+/*!
+  Called when user clicks on item in <History> list
+*/
+void ToolsGUI_RegWidget::slotHistoryChanged( QListViewItem* item )
+{
+
+  BEGIN_OF("slotHistoryChanged()") ;
+  
+  if ( item <= 0)
+    return;
+
+  blockSignals( true ); // for sure that item will not be deleted when refreshing
+
+  int numeroItem = numitem(item->text(0), item->text(1), item->text(3), _serverhistory);
+  
+  SCRUTE(numeroItem) ;
+  SCRUTE(item->text(1)) ;
+  ASSERT(numeroItem>=0) ;
+  ASSERT((size_t)numeroItem<_serverhistory->length()) ;
+  const Registry::Infos & c_info=(*_serverhistory)[numeroItem];
+  ASSERT( c_info.name!=NULL);
+  
+  if ( !myInfoWindow ) {
+    myInfoWindow  = new ToolsGUI_InfoWindow( this );
+    myInfoWindow->installEventFilter( this );
+  }
+  QString a = tr( "More about" ) + QString( " " ) + QString( c_info.name );
+  myInfoWindow->setCaption(a);
+  myInfoWindow->setText( ToolsGUI_RegWidget::setlongText( c_info ) );
+  myInfoWindow->show();
+  myInfoWindow->raise();
+  myInfoWindow->setActiveWindow();
+
+  blockSignals( false ); // enabling signals again
+
+  END_OF("slotHistoryChanged()") ;
+  return ;
+}
+
+/*!
+  Constructor
+*/
+ToolsGUI_InfoWindow::ToolsGUI_InfoWindow( QWidget* parent, const char* name )
+     : QMainWindow( parent, name, WType_TopLevel | WDestructiveClose )
+{
+  BEGIN_OF("InfoWindow");
+  myTextView = new QTextView( this, "myTextView" );
+  setCentralWidget( myTextView );
+  setMinimumSize( 450, 250 );
+  END_OF("InfoWindow");
+}
+
+/*!
+  Sets text
+*/
+void ToolsGUI_InfoWindow::setText( const QString& text )
+{
+  myTextView->setText( text );
+}
+
+/*!
+  Key press event
+*/
+void ToolsGUI_InfoWindow::keyPressEvent( QKeyEvent * e )
+{
+  QMainWindow::keyPressEvent( e );
+  if ( e->key() == Key_Escape )
+    close();
+}
+
+static const char* SEPARATOR    = ":";
+
+QString findFile( QString filename )
+{
+  QString dir;
+  char* cenv;
+  
+  // Try ${HOME}/.salome/resources directory
+  cenv = getenv( "HOME" );
+  if ( cenv ) {
+    dir.sprintf( "%s", cenv );
+    if ( !dir.isEmpty() ) {
+      dir = addSlash(dir) ;
+      dir = dir + ".salome" ;
+      dir = addSlash(dir) ;
+      dir = dir + "resources" ;
+      dir = addSlash(dir) ;
+      QFileInfo fileInfo( dir + filename );
+      if ( fileInfo.isFile() && fileInfo.exists() )
+       return fileInfo.filePath();
+    }
+  }
+  // Try ${SALOME_SITE_DIR}/share/salome/resources directory
+  cenv = getenv( "SALOME_SITE_DIR" );
+  if ( cenv ) {
+    dir.sprintf( "%s", cenv );
+    if ( !dir.isEmpty() ) {
+      dir = addSlash(dir) ;
+      dir = dir + "share" ;
+      dir = addSlash(dir) ;
+      cenv = getenv("SALOME_SITE_NAME");
+      if (cenv)  dir = dir + cenv;
+      else       dir = dir + "salome" ;
+      dir = addSlash(dir) ;
+      dir = dir + "resources" ;
+      dir = addSlash(dir) ;
+      QFileInfo fileInfo( dir + filename );
+      if ( fileInfo.isFile() && fileInfo.exists() )
+       return fileInfo.filePath();
+    }
+  }
+  // Try ${KERNEL_ROOT_DIR}/share/salome/resources directory
+  cenv = getenv( "KERNEL_ROOT_DIR" );
+  if ( cenv ) {
+    dir.sprintf( "%s", cenv );
+    if ( !dir.isEmpty() ) {
+      dir = addSlash(dir) ;
+      dir = dir + "share" ;
+      dir = addSlash(dir) ;
+      dir = dir + "salome" ;
+      dir = addSlash(dir) ;
+      dir = dir + "resources" ;
+      dir = addSlash(dir) ;
+      QFileInfo fileInfo( dir + filename );
+      if ( fileInfo.isFile() && fileInfo.exists() )
+       return fileInfo.filePath();
+    }
+  }
+
+  //SRN Added support for SALOMEGUI
+  cenv = getenv( "SALOMEGUI_ROOT_DIR" );
+  if ( cenv ) {
+    dir.sprintf( "%s", cenv );
+    if ( !dir.isEmpty() ) {
+      dir = addSlash(dir) ;
+      dir = dir + "share" ;
+      dir = addSlash(dir) ;
+      dir = dir + "salome" ;
+      dir = addSlash(dir) ;
+      dir = dir + "resources" ;
+      dir = addSlash(dir) ;
+      QFileInfo fileInfo( dir + filename );
+      if ( fileInfo.isFile() && fileInfo.exists() )
+       return fileInfo.filePath();
+    }
+  }
+
+  // Try CSF_SaloameResources env.var directory ( or directory list )
+  cenv = getenv( "CSF_SalomeResources" );
+  if ( cenv ) {
+    dir.sprintf( "%s", cenv );
+    if ( !dir.isEmpty() ) {
+      QStringList dirList = QStringList::split( SEPARATOR, dir, false ); // skip empty entries
+      for ( int i = 0; i < dirList.count(); i++ ) {
+       QFileInfo fileInfo( addSlash( dirList[ i ] ) + filename );
+       if ( fileInfo.isFile() && fileInfo.exists() )
+         return fileInfo.filePath();
+      }
+    }
+  }
+  return filename;
+}
+QString addSlash( const QString& path )
+{
+  return Qtx::addSlash( path );
+//  if (!path.isNull()) {
+//#ifdef WNT
+//    QChar slash ('\\');
+//#else
+//    QChar slash ('/');
+//#endif
+//    if ( path.at(path.length()-1) != slash )
+//      return path + slash;
+//  }
+//  return path;
+}
diff --git a/src/TOOLSGUI/ToolsGUI_RegWidget.h b/src/TOOLSGUI/ToolsGUI_RegWidget.h
new file mode 100755 (executable)
index 0000000..2fa72b7
--- /dev/null
@@ -0,0 +1,124 @@
+//  SALOME RegistryDisplay : GUI for Registry server implementation
+//
+//  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : RegWidget.h
+//  Author : Pascale NOYRET, EDF
+//  Module : SALOME
+//  $Header$
+
+# ifndef __REGWIDGET_H__
+# define __REGWIDGET_H__
+# include <qapplication.h>
+# include <qmainwindow.h>
+
+#include <SALOMEconfig.h>
+#include CORBA_CLIENT_HEADER(SALOME_Registry)
+
+class QTabWidget;
+class QListView;
+class QListViewItem;
+class QWidget;
+class QTimer;
+class QCloseEvent;
+class QTextView;
+#if QT_VERSION > 300
+class QPushButton;
+#endif
+
+class ToolsGUI_HelpWindow;
+class ToolsGUI_IntervalWindow;
+
+class ToolsGUI_InfoWindow : public QMainWindow {
+public:
+  ToolsGUI_InfoWindow( QWidget* parent = 0, const char* name = 0);
+
+  void setText( const QString& text );
+  QTextView* textView() const { return myTextView; }
+
+protected:
+  void keyPressEvent( QKeyEvent * e );
+
+private:
+  QTextView* myTextView;
+};
+
+class ToolsGUI_RegWidget : public QMainWindow
+{
+  
+  Q_OBJECT
+
+public:
+  ToolsGUI_RegWidget( CORBA::ORB_var &orb , QWidget *parent = 0, const char *name = 0 );
+  ~ToolsGUI_RegWidget();
+  void       SetListe();
+  void       SetListeHistory();
+  void       InfoReg();
+  void       InfoHistory();
+
+  bool       eventFilter( QObject* object, QEvent* event );
+
+  static ToolsGUI_RegWidget* GetRegWidget( CORBA::ORB_var &orb , QWidget *parent = 0, const char *name = 0 );
+
+public slots:
+  void       slotHelp();
+  void       slotListeSelect();
+  void       slotClientChanged( QListViewItem* );
+  void       slotHistoryChanged( QListViewItem* );
+  void       slotSelectRefresh();
+  void       slotIntervalOk();
+protected:  
+  static QString setlongText( const Registry::Infos &c_info );
+  int            numitem( const QString& name, const QString& pid, const QString& machine, const Registry::AllInfos* c_info );
+  void           closeEvent( QCloseEvent *e);
+   
+protected :
+  QListView*               _clients;
+  QListView*               _history;
+  QWidget*                 _parent;
+  QTabWidget*              _tabWidget;
+  QPushButton*             _refresh;
+  QPushButton*             _interval;
+  QPushButton*             _close;
+  QTimer*                  _counter;
+  Registry::AllInfos*      _serverhistory;
+  Registry::AllInfos*      _serverclients;
+  ToolsGUI_InfoWindow*     myInfoWindow;
+  ToolsGUI_HelpWindow*     myHelpWindow;
+  ToolsGUI_IntervalWindow* myIntervalWindow;
+  int                      myRefreshInterval;
+
+private:
+  const      Registry::Components_var _VarComponents;
+  static     ToolsGUI_RegWidget* myRegWidgetPtr;
+};
+
+# endif         /* # ifndef __REGWIDGET_H__ */
+
+
+
+
+
+
+
+
+