Salome HOME
Initialisation de la base KERNEL avec la version operationnelle de KERNEL_SRC issue...
[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   // look for index.html and set homeDir
93   // 1. $(SALOME_ROOT_DIR)/doc/index.html
94   // 2. $(SALOME_ROOT_DIR)/doc/html/index.html
95   // 3. $(SALOME_ROOT_DIR)/doc/html/html/index.html
96   // 4. /usr/local/doc/html/index.html
97
98   QCString dir;
99   QString root;
100   if ( (dir = getenv("SALOME_ROOT_DIR")) ) {
101     root = QAD_Tools::addSlash( QAD_Tools::addSlash(dir) + "doc" );
102     if ( QFileInfo( root + "index.html" ).exists() ) {
103       homeDir = root;
104     }
105     else {
106       root = QAD_Tools::addSlash( root + "html" );
107       if ( QFileInfo( root + "index.html" ).exists() ) {
108         homeDir = root;
109       }
110       else {
111         root = QAD_Tools::addSlash( root + "html" );
112         if ( QFileInfo( root + "index.html" ).exists() ) {
113           homeDir = root;
114         }
115       }
116     }
117   }
118   if ( root.isEmpty() ) {
119     if ( QFileInfo( "/usr/local/doc/html/index.html" ).exists() ) {
120       homeDir = "/usr/local/doc/html/";
121     }
122   }
123   if ( root.isEmpty() ) 
124     root = "./doc/";
125
126   browser->setSource( QFileInfo( homeDir + "index.html" ).absFilePath() );
127   browser->setFocus();
128
129   QSize dSize = QApplication::desktop()->size();
130   int x = ( dSize.width()  - 750 ) / 2;
131   int y = ( dSize.height() - 680 ) / 2;
132   setGeometry( x, y, 750, 680 );
133 }
134
135 /*!
136   Destructor
137 */
138 QAD_HelpWindow::~QAD_HelpWindow()
139 {
140   emit(helpWindowClosed());
141 }
142
143 /*!
144   enables/disables <Backward> button
145 */
146 void QAD_HelpWindow::setBackwardAvailable( bool b)
147 {
148   menuBar()->setItemEnabled( backwardId, b);
149 }
150
151 /*!
152   enables/disables <Forward> button
153   */
154 void QAD_HelpWindow::setForwardAvailable( bool b)
155 {
156   menuBar()->setItemEnabled( forwardId, b);
157 }
158
159 /*!
160   called when new document is loaded into browser
161 */
162 void QAD_HelpWindow::textChanged()
163 {
164   if ( browser->documentTitle().isNull() && browser->context().isNull() && browser->source().isNull() )
165     browser->clear();
166   selectedURL = browser->source(); //caption();
167   if ( !selectedURL.isEmpty() && pathCombo ) {
168     bool exists = FALSE;
169     int i;
170     for ( i = 0; i < pathCombo->count(); ++i ) {
171       if ( pathCombo->text( i ) == selectedURL ) {
172         exists = TRUE;
173         break;
174       }
175     }
176     if ( !exists ) {
177       pathCombo->insertItem( selectedURL, 0 );
178       pathCombo->setCurrentItem( 0 );
179     } else {
180       pathCombo->setCurrentItem( i );
181     }
182     selectedURL = QString::null;
183   }
184 }
185
186 /*!
187   called when users selectes dosument from the combo box
188 */
189 void QAD_HelpWindow::pathSelected( const QString& _path )
190 {
191   browser->setSource( _path );
192 }
193
194 /*!
195   goes back to the contents
196 */
197 void QAD_HelpWindow::contents()
198 {
199   browser->home();
200 }
201
202 /*!
203   opens new document in browser window and makes context search
204   <_source>  is a filename, can be relative, if empty, index.html name is used
205   <_context> is a context, e.g. link in the file
206 */
207 void QAD_HelpWindow::context( const QString& _source, const QString& _context)
208 {
209   QString src;
210   if ( _source.isEmpty() ) {
211     src = homeDir + "index.html";
212   }
213   else {
214     QFileInfo fi( _source );
215     if ( fi.isRelative() )
216       src = homeDir + _source;
217     else
218       src = _source;
219   }
220   if ( !_context.isEmpty() )
221     src += "#" + _context;
222   browser->setSource( src );
223 }