Salome HOME
NRI : Update in order to search MODULES documentation and open active MODULE document...
[modules/kernel.git] / src / SALOMEGUI / QAD_HelpWindow.cxx
1 using namespace std;
2 //  File      : QAD_HelpWindow.cxx
3 //  Created   : Thu Jun 14 16:12:49 2001
4 //  Author    : Nicolas REJNERI
5 //  Project   : SALOME
6 //  Module    : SALOMEGUI
7 //  Copyright : Open CASCADE
8 //  $Header$
9
10 /*!
11   \class QAD_HelpWindow QAD_HelpWindow.h
12   \brief Html browser for help.
13 */
14
15 #include "QAD_HelpWindow.h"
16 #include "QAD_ResourceMgr.h"
17 #include "QAD_Desktop.h"
18 #include "QAD_Application.h"
19 #include "QAD_Tools.h"
20
21 // QT Includes
22 #include <qapplication.h>
23 #include <qtoolbar.h>
24 #include <qmenubar.h>
25 #include <qiconset.h>
26 #include <qtoolbutton.h>
27 #include <qcombobox.h>
28 #include <qfileinfo.h>
29
30 /*!
31   Constructor
32 */
33 QAD_HelpWindow::QAD_HelpWindow()
34   : QMainWindow( 0, "SALOME Professional Help", WStyle_Customize | WType_TopLevel | WDestructiveClose ),
35     pathCombo( 0 ), selectedURL()
36 {
37   QAD_ResourceMgr* rmgr = QAD_Desktop::getResourceManager();
38
39   // alternative palette
40   setPalette( QAD_Application::getPalette(true) );
41   // caption
42   setCaption( tr("SALOMEGUI_HELP_TITLE") );
43   // icon
44   QPixmap icon ( rmgr->loadPixmap( "CLIENT", tr("ICON_DESK_DEFAULTICON") ) );
45   if ( !icon.isNull() ) setIcon( icon );
46
47   // create browser
48   browser = new QTextBrowser( this );
49   browser->setFrameStyle( QFrame::Panel | QFrame::Sunken );
50   connect( browser, SIGNAL( textChanged() ), this, SLOT( textChanged() ) );
51   setCentralWidget( browser );
52
53   // menu/toolbar actions
54   menuBar()->setItemEnabled( forwardId, FALSE);
55   menuBar()->setItemEnabled( backwardId, FALSE);
56   connect( browser, SIGNAL( backwardAvailable( bool ) ),
57            this, SLOT( setBackwardAvailable( bool ) ) );
58   connect( browser, SIGNAL( forwardAvailable( bool ) ),
59            this, SLOT( setForwardAvailable( bool ) ) );
60   
61   QIconSet icon_back( QPixmap(rmgr->loadPixmap("QAD", tr("ICON_APP_HELP_BACK")) ));
62   QIconSet icon_forward( QPixmap(rmgr->loadPixmap("QAD", tr("ICON_APP_HELP_FORWARD")) ));
63   QIconSet icon_home( QPixmap(rmgr->loadPixmap("QAD", tr("ICON_APP_HELP_HOME")) ));
64   
65   QToolBar* toolbar = new QToolBar( this );
66   addToolBar( toolbar, "Toolbar");
67   QToolButton* button;
68   
69   button = new QToolButton( icon_back, tr("TOT_HELPWINDOW_BACKWARD"), "", browser, SLOT(backward()), toolbar );
70   connect( browser, SIGNAL( backwardAvailable(bool) ), button, SLOT( setEnabled(bool) ) );
71   button->setEnabled( FALSE );
72   button = new QToolButton( icon_forward, tr("TOT_HELPWINDOW_FORWARD"), "", browser, SLOT(forward()), toolbar );
73   connect( browser, SIGNAL( forwardAvailable(bool) ), button, SLOT( setEnabled(bool) ) );
74   button->setEnabled( FALSE );
75   button = new QToolButton( icon_home, tr("TOT_HELPWINDOW_HOME"), "", browser, SLOT(home()), toolbar );
76   
77   toolbar->addSeparator();
78   
79   pathCombo = new QComboBox( TRUE, toolbar );
80   pathCombo->setInsertionPolicy(QComboBox::NoInsertion);
81   pathCombo->setDuplicatesEnabled(false);
82   connect( pathCombo, SIGNAL( activated( const QString & ) ),
83            this, SLOT( pathSelected( const QString & ) ) );
84   toolbar->setStretchableWidget( pathCombo );
85   setRightJustification( TRUE );
86   setDockEnabled( Left, FALSE );
87   setDockEnabled( Right, FALSE );
88   setDockEnabled( Bottom, FALSE );
89   setDockEnabled( TornOff, FALSE );
90   setDockMenuEnabled( false );
91
92   /*
93   // look for index.html and set homeDir
94   // 1. $(SALOME_ROOT_DIR)/doc/index.html
95   // 2. $(SALOME_ROOT_DIR)/doc/html/index.html
96   // 3. $(SALOME_ROOT_DIR)/doc/html/html/index.html
97   // 4. /usr/local/doc/html/index.html
98
99   QCString dir;
100   QString root;
101   if ( (dir = getenv("KERNEL_ROOT_DIR")) ) {
102   root = QAD_Tools::addSlash( QAD_Tools::addSlash(dir) + QAD_Tools::addSlash("share")  + QAD_Tools::addSlash("salome")  + "doc" );
103   if ( QFileInfo( root + "index.html" ).exists() ) {
104   homeDir = root;
105   }
106   else {
107   root = QAD_Tools::addSlash( root + "html" );
108   if ( QFileInfo( root + "index.html" ).exists() ) {
109   homeDir = root;
110   }
111   else {
112   root = QAD_Tools::addSlash( root + "html" );
113   if ( QFileInfo( root + "index.html" ).exists() ) {
114   homeDir = root;
115   }
116   }
117   }
118   }
119   if ( root.isEmpty() ) {
120   if ( QFileInfo( "/usr/local/doc/html/index.html" ).exists() ) {
121   homeDir = "/usr/local/doc/html/";
122   }
123   }
124   if ( root.isEmpty() ) 
125   root = "./doc/";
126   
127   browser->setSource( QFileInfo( homeDir + "index.html" ).absFilePath() );
128   */
129   browser->setFocus();
130
131   QSize dSize = QApplication::desktop()->size();
132   int x = ( dSize.width()  - 750 ) / 2;
133   int y = ( dSize.height() - 680 ) / 2;
134   setGeometry( x, y, 750, 680 );
135 }
136
137 /*!
138   Destructor
139 */
140 QAD_HelpWindow::~QAD_HelpWindow()
141 {
142   emit(helpWindowClosed());
143 }
144
145 /*!
146   enables/disables <Backward> button
147 */
148 void QAD_HelpWindow::setBackwardAvailable( bool b)
149 {
150   menuBar()->setItemEnabled( backwardId, b);
151 }
152
153 /*!
154   enables/disables <Forward> button
155   */
156 void QAD_HelpWindow::setForwardAvailable( bool b)
157 {
158   menuBar()->setItemEnabled( forwardId, b);
159 }
160
161 /*!
162   called when new document is loaded into browser
163 */
164 void QAD_HelpWindow::textChanged()
165 {
166   if ( browser->documentTitle().isNull() && browser->context().isNull() && browser->source().isNull() )
167     browser->clear();
168   selectedURL = browser->source(); //caption();
169   if ( !selectedURL.isEmpty() && pathCombo ) {
170     bool exists = FALSE;
171     int i;
172     for ( i = 0; i < pathCombo->count(); ++i ) {
173       if ( pathCombo->text( i ) == selectedURL ) {
174         exists = TRUE;
175         break;
176       }
177     }
178     if ( !exists ) {
179       pathCombo->insertItem( selectedURL, 0 );
180       pathCombo->setCurrentItem( 0 );
181     } else {
182       pathCombo->setCurrentItem( i );
183     }
184     selectedURL = QString::null;
185   }
186 }
187
188 /*!
189   called when users selectes dosument from the combo box
190 */
191 void QAD_HelpWindow::pathSelected( const QString& _path )
192 {
193   browser->setSource( _path );
194 }
195
196 /*!
197   goes back to the contents
198 */
199 void QAD_HelpWindow::contents()
200 {
201   browser->home();
202 }
203
204 /*!
205   opens new document in browser window and makes context search
206   <_source>  is a filename, can be relative, if empty, index.html name is used
207   <_context> is a context, e.g. link in the file
208 */
209 void QAD_HelpWindow::context( const QString& _source, const QString& _context)
210 {
211   QString src;
212   if ( _source.isEmpty() ) {
213     src = homeDir + "index.html";
214   }
215   else {
216     QFileInfo fi( _source );
217     if ( fi.isRelative() )
218       src = homeDir + _source;
219     else
220       src = _source;
221   }
222   if ( !_context.isEmpty() )
223     src += "#" + _context;
224   browser->setSource( src );
225 }