helpWidget.cc 9.52 KB
Newer Older
1
/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
2
3
*                                                                            *
*                              OpenFlipper                                   *
Jan Möbius's avatar
Jan Möbius committed
4
*      Copyright (C) 2001-2011 by Computer Graphics Group, RWTH Aachen       *
Jan Möbius's avatar
Jan Möbius committed
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
*                           www.openflipper.org                              *
*                                                                            *
*--------------------------------------------------------------------------- *
*  This file is part of OpenFlipper.                                         *
*                                                                            *
*  OpenFlipper 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 3 of            *
*  the License, or (at your option) any later version with the               *
*  following exceptions:                                                     *
*                                                                            *
*  If other files instantiate templates or use macros                        *
*  or inline functions from this file, or you compile this file and          *
*  link it with other files to produce an executable, this file does         *
*  not by itself cause the resulting executable to be covered by the         *
*  GNU Lesser General Public License. This exception does not however        *
*  invalidate any other reasons why the executable file might be             *
*  covered by the GNU Lesser General Public License.                         *
*                                                                            *
*  OpenFlipper 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 LesserGeneral Public           *
*  License along with OpenFlipper. If not,                                   *
*  see <http://www.gnu.org/licenses/>.                                       *
*                                                                            *
33
34
35
\*===========================================================================*/

/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
36
37
38
39
40
*                                                                            *
*   $Revision$                                                       *
*   $LastChangedBy$                                                *
*   $Date$                     *
*                                                                            *
41
42
43
\*===========================================================================*/


44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*
 * helpWidget.cc
 *
 *  Created on: Apr 7, 2009
 *      Author: kremer
 */

#include "helpWidget.hh"

#include <OpenFlipper/common/GlobalOptions.hh>

#include <iostream>

#include <QTextStream>
58
#include <QDir>
59

60
HelpWidget::HelpWidget(QWidget* parent, const QString& _homeSite)
61
62
63
64
65
66
  : QMainWindow(parent),
  searchWidget_(0),
  tabWidget_(0),
  textWindow_(0),
  helpEngine_(0),
  searchEngine_(0) {
67

68
  setupUi(this);
69

70
  homeSite_ = _homeSite;
71

72
73
74
75
76
77
  QString filename = QString( OpenFlipper::Options::configDirStr() );
  filename += OpenFlipper::Options::dirSeparator();
  filename += "Help.qhc";
    
  QDir helpDir = QDir(OpenFlipper::Options::helpDirStr());
  QStringList helpFiles = helpDir.entryList(QStringList("*.qch"),QDir::Files);
78

79
  QString iconPath = QString(OpenFlipper::Options::iconDirStr());
80
#ifdef WIN32
81
  iconPath += "\\";
82
#else
83
  iconPath += "/";
84
85
#endif

86
87
88
89
90
  // Set Buttons
  backButton_->setIcon(QIcon(iconPath+"arrow-left.png"));
  forwardButton_->setIcon(QIcon(iconPath+"arrow-right.png"));
  homeButton_->setIcon(QIcon(iconPath+"go-home.png"));
  searchButton_->setIcon(QIcon(iconPath+"edit-find.png"));
91

92
  tabWidget_ = new QTabWidget(this);
93

94
95
  // Generate the help engine. The filename is in the users home directory and
  // contains all registered help resources.
96
97
98
99
100
101
  helpEngine_ = new QHelpEngine(filename, this);
  
  helpEngine_->setupData();
  
  for ( int i = 0 ; i < helpFiles.size() ; ++i ) 
    if ( !helpEngine_->registerDocumentation( helpDir.path()+ QDir::separator() + helpFiles[i]) ) 
102
103
104
      std::cerr << helpFiles[i].toStdString() << " :" << helpEngine_->error().toStdString() << std::endl;
    else 
      std::cerr << "Loaded Help file : " << helpFiles[i].toStdString() << std::endl;
105

106
  searchEngine_ = new QHelpSearchEngine(helpEngine_, this);
107

108
  textWindow_ = new HelpBrowser(helpEngine_, this);
109

110
  homeIndex_ = tabWidget_->addTab(textWindow_, tr("Home"));
111

112
113
  gridLayout_->addWidget(helpEngine_->contentWidget(), 1, 0);
  gridLayout_->addWidget(tabWidget_, 1, 1);
114

115
116
  gridLayout_->setColumnStretch(0, 1);
  gridLayout_->setColumnStretch(1, 3);
117

118
119
120
  // Search popup at bottom of window
  searchWidget_ = new QDockWidget(tr("Search results"), this);
  searchWidget_->setFeatures( QDockWidget::DockWidgetClosable );
121

122
  searchWidget_->resize(this->size().width(), floor( double(this->size().height() / 3)) );
123

124
125
  searchWidget_->setWidget(searchEngine_->queryWidget());
  //searchWidget_->setWidget(results_);
126

127
128
  searchWidget_->hide();
  addDockWidget(Qt::BottomDockWidgetArea, searchWidget_);
129
130


131
132
133
  // Entry in tree view has been clicked
  connect(helpEngine_->contentWidget(), SIGNAL(linkActivated(const QUrl&)),
          this, SLOT(linkActivated(const QUrl&)));
134

135

136
137
  // Search button
  connect(searchButton_, SIGNAL(clicked()), this, SLOT(showSearchWidget()));
138

139
140
  // Search button
  connect(searchEngine_->queryWidget(), SIGNAL(search()), this, SLOT(startSearch()));
141

142
143
  // Show results if search is finished
  connect(searchEngine_, SIGNAL(searchingFinished(int)), this, SLOT(showResults(int)));
144

145
146
147
  // Show results if search is finished
  connect(searchEngine_->resultWidget(), SIGNAL(requestShowLink(const QUrl&)),
              this, SLOT(showFoundSite(const QUrl&)));
148

149
150
  // Back button
  connect(backButton_, SIGNAL(clicked()), this, SLOT(goBack()));
151

152
153
  // Forward button
  connect(forwardButton_, SIGNAL(clicked()), this, SLOT(goForward()));
154

155
156
  // Forward button
  connect(homeButton_, SIGNAL(clicked()), this, SLOT(goHome()));
157

158
159
  // Source has been reloaded
  connect(textWindow_, SIGNAL(urlChanged(const QUrl&)), this, SLOT(update(const QUrl&)));
160

161
  // Register documentation
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
  // Seems to be an unneeded call!
  //helpEngine_->registerDocumentation(filename);

  QStringList tmp = helpEngine_->registeredDocumentations ();

//#ifdef DEBUG
  for ( int i = 0 ; i < tmp.size(); ++i) {
    std::cerr << "=========================================================================================" << std::endl;
    std::cerr << "Registered namespace: " << tmp[i].toStdString() << std::endl;
    std::cerr << "From file : " << helpEngine_->documentationFileName(tmp[i]).toStdString() << std::endl;


    QList<QStringList> filterAttribs = helpEngine_->filterAttributeSets (tmp[i]);
//    std::cerr << "Filter attributes:" << std::endl;
//    for ( int j = 0 ; j < filterAttribs.size(); ++j) {
//      for ( int k = 0 ; k < filterAttribs[j].size(); ++k) {
//        std::cerr <<  filterAttribs[j][k].toStdString() << std::endl;
//      }
//    }

    // Print a list of all files included in this help file
    if ( !filterAttribs.empty() ) {
      QList<QUrl> list = helpEngine_->files ( tmp[i], filterAttribs[0]);
      for ( int j = 0 ; j < list.size(); ++j) {
        std::cerr << list[j].toString().toStdString() << std::endl;
      }
    } else {
      std::cerr << "Error, empty filter! Unable to get list of included files." << std::endl;
    }


  }
//#endif
195

196
197
  // Load main page
  textWindow_->open(QUrl(homeSite_));
198
199
}

200
201
void HelpWidget::linkActivated(const QUrl& _url) {

202
203
  textWindow_->open(_url);
  tabWidget_->setCurrentIndex(homeIndex_);
Matthias Möller's avatar
- doc    
Matthias Möller committed
204
  //helpEngine_->contentWidget() shows the tree
205
206
}

207
208
void HelpWidget::startSearch() {

209
  searchEngine_->search(searchEngine_->queryWidget()->query());
210
211
212
213
}

void HelpWidget::setHomeSite(const QString& _homeSite) {

214
  homeSite_ = _homeSite;
215
216
}

217
218
void HelpWidget::showFoundSite(const QUrl& _url) {

219
220
  textWindow_->open(_url);
  tabWidget_->setCurrentIndex(homeIndex_);
221
222
}

223
void HelpWidget::update(const QUrl& /* url */) {
224

225
  updateButtons();
226
227
228
229
}

void HelpWidget::goForward() {

230
  textWindow_->forward();
231

232
  tabWidget_->setCurrentIndex(homeIndex_);
233

234
  updateButtons();
235
236
237
238
}

void HelpWidget::goBack() {

239
  textWindow_->backward();
240

241
  tabWidget_->setCurrentIndex(homeIndex_);
242

243
  updateButtons();
244
245
}

246
247
void HelpWidget::goHome() {

248
  textWindow_->open(homeSite_);
249

250
  tabWidget_->setCurrentIndex(homeIndex_);
251

252
  updateButtons();
253
254
}

255
256
void HelpWidget::updateButtons() {

257
258
259
260
261
262
263
264
265
266
267
  if(!textWindow_->isBackwardAvailable()) {
          backButton_->setEnabled(false);
  } else {
          backButton_->setEnabled(true);
  }

  if(!textWindow_->isForwardAvailable()) {
          forwardButton_->setEnabled(false);
  } else {
          forwardButton_->setEnabled(true);
  }
268
269
}

270
void HelpWidget::showSearchWidget() {
271

272
  searchWidget_->show();
273
}
274

275
void HelpWidget::showResults(int /*_hits*/) {
276

277
  searchWidget_->hide();
278

279
280
  int resultsTabIndex_ = tabWidget_->addTab(searchEngine_->resultWidget(), tr("Results") );
  tabWidget_->setCurrentIndex(resultsTabIndex_);
281
282
}

Jan Möbius's avatar
Jan Möbius committed
283
void HelpWidget::openFoundSite(QListWidgetItem* /*_item*/) {
284
285

}
Mike Kremer's avatar
Mike Kremer committed
286
287
288

HelpWidget::~HelpWidget() {

289
290
  delete searchWidget_;
  delete textWindow_;
Mike Kremer's avatar
Mike Kremer committed
291
}