Subversion Repositories Scribus

Rev

Rev 10123 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4430 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
564 cbradney 7
/***************************************************************************
8
*   Copyright (C) 2004 by Craig Bradney                                   *
9
*   cbradney@zip.com.au                                                   *
2052 subik 10
*   Copyright (C) 2005 by Petr Vanek                                      *
11
*   petr@yarpen.cz                                                        *
564 cbradney 12
*                                                                         *
13
*   This program is free software; you can redistribute it and/or modify  *
14
*   it under the terms of the GNU General Public License as published by  *
15
*   the Free Software Foundation; either version 2 of the License, or     *
16
*   (at your option) any later version.                                   *
17
*                                                                         *
18
*   This program is distributed in the hope that it will be useful,       *
19
*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
20
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
21
*   GNU General Public License for more details.                          *
22
*                                                                         *
23
*   You should have received a copy of the GNU General Public License     *
24
*   along with this program; if not, write to the                         *
25
*   Free Software Foundation, Inc.,                                       *
26
*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
27
***************************************************************************/
560 cbradney 28
 
3 paul 29
#include "helpbrowser.h"
560 cbradney 30
 
10108 cbradney 31
#include <QAction>
32
#include <QDir>
33
#include <QDomDocument>
10006 cbradney 34
#include <QFileDialog>
10108 cbradney 35
#include <QFileInfo>
36
#include <QHeaderView>
37
#include <QInputDialog>
38
#include <QItemSelectionModel>
39
#include <QList>
40
#include <QMessageBox>
41
#include <QModelIndex>
42
#include <QModelIndexList>
43
#include <QPainter>
44
#include <QPrinter>
10006 cbradney 45
#include <QProcess>
10108 cbradney 46
#include <QPushButton>
47
#include <QString>
48
#include <QStandardItem>
49
#include <QTextEdit>
50
#include <QTreeView>
51
#include <QXmlDefaultHandler>
52
 
53
#include <Q3PaintDeviceMetrics>
54
#include <Q3SimpleRichText>
55
 
56
#include "prefsmanager.h"
3240 fschmid 57
#include "util.h"
128 Franz 58
 
4676 cbradney 59
#if defined(_WIN32)
60
#include <windows.h>
61
#include <shellapi.h>
62
#endif
63
 
10108 cbradney 64
/*! \brief XML parsef for documantation history.
2048 subik 65
This is small helper class which reads saved bookmarks configuration
10108 cbradney 66
from ~/.scribus/doc/history.xml file.
67
The reference to historyBrowser is a reference to the dialog.
2048 subik 68
\author Petr Vanek <petr@yarpen.cz>
69
*/
10108 cbradney 70
class HistoryParser2 : public QXmlDefaultHandler
2048 subik 71
{
72
        public:
10108 cbradney 73
                HelpBrowser *helpBrowser;
2048 subik 74
 
75
                bool startDocument()
76
                {
77
                        return true;
78
                }
79
 
80
                bool startElement(const QString&, const QString&, const QString& qName, const QXmlAttributes& attrs)
81
                {
82
                        if (qName == "item")
83
                        {
10108 cbradney 84
                                struct histd2 his;
85
                                his.title = attrs.value(0);
86
                                his.url = attrs.value(1);
87
                                helpBrowser->mHistory[helpBrowser->histMenu->addAction(his.title)] = his;
2048 subik 88
                        }
89
                        return true;
90
                }
91
 
92
                bool endElement(const QString&, const QString&, const QString&)
93
                {
94
                        return true;
95
                }
96
};
97
 
10108 cbradney 98
/*! \brief XML parsef for documantation bookmarks.
2052 subik 99
This is small helper class which reads saved bookmarks configuration
10108 cbradney 100
from ~/.scribus/doc/bookmarks.xml file.
101
The reference to QListView *view is a reference to the list view with bookmarks
2052 subik 102
\author Petr Vanek <petr@yarpen.cz>
103
*/
10108 cbradney 104
class BookmarkParser2 : public QXmlDefaultHandler
2052 subik 105
{
106
        public:
10108 cbradney 107
                QTreeWidget* view;
108
                QMap<QString, QString>* quickHelpIndex;
109
                QMap<QString, QPair<QString, QString> >* bookmarkIndex;
2048 subik 110
 
2052 subik 111
                bool startDocument()
112
                {
113
                        return true;
114
                }
115
 
116
                bool startElement(const QString&, const QString&, const QString& qName, const QXmlAttributes& attrs)
117
                {
118
                        if (qName == "item")
119
                        {
10108 cbradney 120
                                if (quickHelpIndex->contains(attrs.value(1)))
121
                                {
122
                                        bookmarkIndex->insert(attrs.value(0), qMakePair(attrs.value(1), attrs.value(2)));
123
                                        view->addTopLevelItem(new QTreeWidgetItem(view, QStringList() << attrs.value(0)));
124
                                }
2052 subik 125
                        }
126
                        return true;
127
                }
128
 
129
                bool endElement(const QString&, const QString&, const QString&)
130
                {
131
                        return true;
132
                }
133
};
134
 
10108 cbradney 135
HelpBrowser::HelpBrowser(QWidget* parent)
136
        : QMainWindow( parent )
4519 subik 137
{
10108 cbradney 138
        setupUi(this);
139
}
140
 
141
HelpBrowser::HelpBrowser( QWidget* parent, const QString& /*caption*/, const QString& guiLanguage, const QString& jumpToSection, const QString& jumpToFile)
142
        : QMainWindow( parent )
143
{
144
        setupUi(this);
145
        setupLocalUI();
146
        language = guiLanguage.isEmpty() ? QString("en") : guiLanguage.left(2);
147
        languageChange();
148
        menuModel=NULL;
149
        loadMenu();
150
        readBookmarks();
151
        readHistory();
152
        jumpToHelpSection(jumpToSection, jumpToFile );
153
}
154
 
155
HelpBrowser::~HelpBrowser()
156
{
157
 
158
}
159
 
160
void HelpBrowser::closeEvent(QCloseEvent * event)
161
{
162
        delete menuModel;
163
 
164
        // no need to delete child widgets, Qt does it all for us
165
        // bookmarks
166
        QFile bookFile(bookmarkFile());
167
        if (bookFile.open(QIODevice::WriteOnly))
4519 subik 168
        {
10108 cbradney 169
                QTextStream stream(&bookFile);
170
                stream.setCodec("UTF-8");
171
                stream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
172
                stream << "<bookmarks>\n";
173
                QTreeWidgetItemIterator it(bookmarksView);
174
                while (*it)
175
                {
176
                        if (bookmarkIndex.contains((*it)->text(0)))
177
                        {
178
                                QString pagetitle(bookmarkIndex.value((*it)->text(0)).first);
179
                                QString filename(bookmarkIndex.value((*it)->text(0)).second);
180
                                stream << "\t<item title=\"" << (*it)->text(0) << "\" pagetitle=\"" << pagetitle << "\" url=\"" << filename << "\" />\n";
181
                        }
182
                        ++it;
183
                }
184
                stream << "</bookmarks>\n";
185
                bookFile.close();
4519 subik 186
        }
10108 cbradney 187
        // history
188
        QFile histFile(historyFile());
189
        if (histFile.open(QIODevice::WriteOnly))
190
        {
191
                QTextStream stream(&histFile);
192
                stream.setCodec("UTF-8");
193
                stream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
194
                stream << "<history>\n";
195
                for (QMap<QAction*,histd2>::Iterator it = mHistory.begin() ; it != mHistory.end(); ++it)
196
                        stream << "\t<item title=\"" << it.data().title << "\" url=\"" << it.data().url << "\" />\n";
197
                stream << "</history>\n";
198
                histFile.close();
199
        }
200
        // size
201
        prefs->set("xsize", width());
202
        prefs->set("ysize", height());
203
 
204
        emit closed();
4519 subik 205
}
2052 subik 206
 
10108 cbradney 207
void HelpBrowser::setupLocalUI()
4676 cbradney 208
{
10108 cbradney 209
        setIcon(loadIcon("AppIcon.png"));
210
        //Add Menus
211
        fileMenu=menuBar()->addMenu(tr("&File"));
212
        editMenu=menuBar()->addMenu(tr("&Edit"));
213
        bookMenu=menuBar()->addMenu(tr("&Bookmarks"));
214
        histMenu=new QMenu(this);
215
 
216
        //Add Menu items
217
        filePrint=fileMenu->addAction(loadIcon("16/document-print.png"), tr("&Print..."), this, SLOT(print()), Qt::CTRL+Qt::Key_P);
218
        fileMenu->insertSeparator();
219
        fileExit=fileMenu->addAction(loadIcon("exit.png"), tr("E&xit"), this, SLOT(close()));
220
        editFind=editMenu->addAction(loadIcon("find.png"), tr("&Find..."), this, SLOT(find()), Qt::CTRL+Qt::Key_F);
221
        editFindNext=editMenu->addAction( tr("Find &Next"), this, SLOT(findNext()), Qt::Key_F3);
222
        editFindPrev=editMenu->addAction( tr("Find &Previous"), this, SLOT(findPrevious()), Qt::SHIFT+Qt::Key_F3);
223
        bookAdd=bookMenu->addAction( tr("&Add Bookmark"), this, SLOT(bookmarkButton_clicked()), Qt::CTRL+Qt::Key_D);
224
        bookDel=bookMenu->addAction( tr("&Delete"), this, SLOT(deleteBookmarkButton_clicked()));
225
        bookDelAll=bookMenu->addAction( tr("D&elete All"), this, SLOT(deleteAllBookmarkButton_clicked()));
226
 
227
        //Add Toolbar items
228
        goHome=toolBar->addAction(loadIcon("16/go-home.png"), "", textBrowser, SLOT(home()));
229
        goBack=toolBar->addAction(loadIcon("16/go-previous.png"), "", textBrowser, SLOT(backward()));
230
        goFwd=toolBar->addAction(loadIcon("16/go-next.png"), "", textBrowser, SLOT(forward()));
231
        goBack->setMenu(histMenu);
232
 
233
        listView->header()->hide();
234
        searchingView->header()->hide();
235
        bookmarksView->header()->hide();
236
 
237
        splitter->setResizeMode( tabWidget, QSplitter::KeepSize );
238
        splitter->setResizeMode( textBrowser, QSplitter::Stretch );
239
        // reset previous size
240
        prefs = PrefsManager::instance()->prefsFile->getPluginContext("helpbrowser");
241
        int xsize = prefs->getUInt("xsize", 640);
242
        int ysize = prefs->getUInt("ysize", 480);
243
        resize(QSize(xsize, ysize).expandedTo(minimumSizeHint()) );
244
 
245
        //basic ui
246
        connect(histMenu, SIGNAL(triggered(QAction*)), this, SLOT(histChosen(QAction*)));
247
        // searching
248
        connect(searchingEdit, SIGNAL(returnPressed()), this, SLOT(searchingButton_clicked()));
249
        connect(searchingButton, SIGNAL(clicked()), this, SLOT(searchingButton_clicked()));
250
        connect(searchingView, SIGNAL(itemClicked( QTreeWidgetItem *, int)), this, SLOT(itemSearchSelected(QTreeWidgetItem *, int)));
251
        // bookmarks
252
        connect(bookmarkButton, SIGNAL(clicked()), this, SLOT(bookmarkButton_clicked()));
253
        connect(deleteBookmarkButton, SIGNAL(clicked()), this, SLOT(deleteBookmarkButton_clicked()));
254
        connect(deleteAllBookmarkButton, SIGNAL(clicked()), this, SLOT(deleteAllBookmarkButton_clicked()));
255
        connect(bookmarksView, SIGNAL(itemClicked( QTreeWidgetItem *, int)), this, SLOT(itemBookmarkSelected(QTreeWidgetItem *, int)));
10120 fschmid 256
        // links hoover
257
        connect(textBrowser, SIGNAL(overLink(const QString &)), this, SLOT(showLinkContents(const QString &)));
4676 cbradney 258
}
259
 
10120 fschmid 260
void HelpBrowser::showLinkContents(const QString &link)
261
{
262
        statusBar()->showMessage(link);
263
}
264
 
10108 cbradney 265
void HelpBrowser::languageChange()
4676 cbradney 266
{
10108 cbradney 267
        setCaption( tr( "Scribus Online Help" ) );
268
        noHelpMsg=tr("Sorry, no manual available! Please see: http://docs.scribus.net for updated docs\nand www.scribus.net for downloads.");
269
//      listView->clear();
270
}
271
 
272
void HelpBrowser::print()
6584 fschmid 273
{
10108 cbradney 274
        QPrinter printer;
275
        printer.setFullPage(true);
276
        if (!printer.setup(this))
277
                return;
278
        textBrowser->print(&printer);
6584 fschmid 279
}
280
 
10108 cbradney 281
void HelpBrowser::searchingButton_clicked()
3 paul 282
{
10108 cbradney 283
//      searchingView->clear();
284
        // root files
285
        QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
286
        searchingInDirectory(QDir::convertSeparators(ScPaths::instance().docDir() + language + "/"));
287
        QApplication::restoreOverrideCursor();
288
}
3 paul 289
 
10108 cbradney 290
void HelpBrowser::searchingInDirectory(const QString& aDir)
291
{
292
        QDir dir(QDir::convertSeparators(aDir + "/"));
293
        QStringList lst = dir.entryList("*.html");
294
        for (QStringList::Iterator it = lst.begin(); it != lst.end(); ++it)
295
        {
296
                QString fname(aDir + (*it));
297
                QFile f(fname);
298
                if (f.open(QIODevice::ReadOnly))
299
                {
300
                        QTextStream stream(&f);
301
                        QString str = stream.readAll();
302
                        int cnt = str.count(searchingEdit->text(), Qt::CaseInsensitive);
303
                        if (cnt > 0)
304
                        {
305
                                QString fullname = fname;
306
                                QString toFind(fname.remove(QDir::convertSeparators(ScPaths::instance().docDir()+language + "/")));
307
                                QMapIterator<QString, QString> i(quickHelpIndex);
308
                                while (i.hasNext())
309
                                {
310
                                        i.next();
311
                                        if (i.value()==toFind)
312
                                                searchingView->addTopLevelItem(new QTreeWidgetItem(searchingView, QStringList() << i.key()));
313
                                }
314
                        }
315
                        f.close();
316
                }
317
        }
318
        // get dirs - ugly recursion
319
        QStringList dst = dir.entryList("*", QDir::Dirs);
320
        for (QStringList::Iterator it = dst.begin(); it != dst.end(); ++it)
321
                if ((*it)!="." && (*it)!="..")
322
                        searchingInDirectory(QDir::convertSeparators(aDir + QString((*it)) + "/"));
323
}
3 paul 324
 
10108 cbradney 325
void HelpBrowser::find()
326
{
327
        findText = QInputDialog::getText( tr("Find"), tr("Search Term:"), QLineEdit::Normal, findText, 0, this);
328
        if (findText.isNull())
329
                return;
330
        findNext();
331
}
3 paul 332
 
10108 cbradney 333
void HelpBrowser::findNext()
334
{
335
        if (findText.isNull())
336
        {
337
                find();
338
                return;
339
        }
340
        // find it. finally
341
        textBrowser->find(findText, 0);
560 cbradney 342
}
343
 
10108 cbradney 344
void HelpBrowser::findPrevious()
560 cbradney 345
{
10108 cbradney 346
        if (findText.isNull())
2048 subik 347
        {
10108 cbradney 348
                find();
349
                return;
2048 subik 350
        }
10108 cbradney 351
        // find it. finally
352
        textBrowser->find(findText);
353
}
354
 
355
void HelpBrowser::bookmarkButton_clicked()
356
{
357
        QString title = textBrowser->documentTitle();
358
        QString fname(QDir::cleanDirPath(textBrowser->source()));
359
        title = QInputDialog::getText( tr("New Bookmark"), tr("New Bookmark's Title:"), QLineEdit::Normal, title, 0, this);
360
        // user cancel
361
        if (title.isNull())
362
                return;
363
        QString toFind(fname.remove(QDir::convertSeparators(ScPaths::instance().docDir()+language + "/")));
364
        QMapIterator<QString, QString> i(quickHelpIndex);
365
        while (i.hasNext())
2052 subik 366
        {
10108 cbradney 367
                i.next();
368
                if (i.value()==toFind)
369
                {
370
                        bookmarkIndex.insert(title, qMakePair(i.key(), i.value()));
371
                        bookmarksView->addTopLevelItem(new QTreeWidgetItem(bookmarksView, QStringList() << title));
372
                }
2052 subik 373
        }
560 cbradney 374
}
375
 
10108 cbradney 376
void HelpBrowser::deleteBookmarkButton_clicked()
560 cbradney 377
{
10108 cbradney 378
        QTreeWidgetItem *twi=bookmarksView->currentItem();
379
        if (bookmarkIndex.contains(twi->text(0)))
380
                bookmarkIndex.remove(twi->text(0));
381
        delete twi;
382
}
560 cbradney 383
 
10108 cbradney 384
void HelpBrowser::deleteAllBookmarkButton_clicked()
385
{
386
        bookmarkIndex.clear();
387
        bookmarksView->clear();
560 cbradney 388
}
389
 
10108 cbradney 390
void HelpBrowser::histChosen(QAction* i)
560 cbradney 391
{
564 cbradney 392
        if (mHistory.contains(i))
10123 jghali 393
                textBrowser->setSource( QUrl::fromLocalFile(mHistory[i].url) );
560 cbradney 394
}
395
 
10108 cbradney 396
void HelpBrowser::jumpToHelpSection(const QString& jumpToSection, const QString& jumpToFile)
560 cbradney 397
{
398
        QString toLoad;
1141 cbradney 399
        bool noDocs=false;
560 cbradney 400
 
2877 cbradney 401
        if (jumpToFile.isEmpty())
564 cbradney 402
        {
2008 cbradney 403
                toLoad = ScPaths::instance().docDir() + language + "/"; //clean this later to handle 5 char locales
2877 cbradney 404
                if (jumpToSection.isEmpty())
564 cbradney 405
                {
10135 cbradney 406
                        QModelIndex index=menuModel->index(0,1);
10108 cbradney 407
                        if (index.isValid())
1141 cbradney 408
                        {
10108 cbradney 409
                                listView->selectionModel()->select(index, QItemSelectionModel::ClearAndSelect);
10135 cbradney 410
                                toLoad += menuModel->data(index, Qt::DisplayRole).toString();
1141 cbradney 411
                        }
412
                        else
413
                                noDocs=true;
205 Franz 414
                }
2006 subik 415
                else if (jumpToSection=="scripter")
564 cbradney 416
                {
10108 cbradney 417
//                      toLoad+="scripter1.html";
418
//                      Q3ListViewItemIterator it(listView);
419
//                      while (it.current())
420
//                      {
421
//                              if (it.current()->text(1)=="scripter1.html")
422
//                                      listView->setSelected( it.current(), true );
423
//                              if (it.current()->text(1)=="developers.html")
424
//                                      it.current()->setOpen( true );
425
//                              ++it;
426
//                      }
560 cbradney 427
                }
205 Franz 428
        }
560 cbradney 429
        else
564 cbradney 430
                toLoad=jumpToFile;
3 paul 431
 
1141 cbradney 432
        if (!noDocs)
433
                loadHelp(toLoad);
434
        else
10108 cbradney 435
                textBrowser->setText("<h2>"+ noHelpMsg +"</h2>");
3 paul 436
}
437
 
10108 cbradney 438
void HelpBrowser::loadHelp(const QString& filename)
68 Franz 439
{
10108 cbradney 440
        struct histd2 his;
564 cbradney 441
        bool Avail = true;
560 cbradney 442
        QString toLoad;
564 cbradney 443
        QFileInfo fi;
444
        fi = QFileInfo(filename);
1100 cbradney 445
        if (fi.fileName().length()>0)
564 cbradney 446
        {
1100 cbradney 447
                if (fi.exists())
448
                        toLoad=filename;
2006 subik 449
                else
564 cbradney 450
                {
2008 cbradney 451
                        toLoad = QDir::convertSeparators(ScPaths::instance().docDir() + "en/index.html");
1100 cbradney 452
                        language="en";
453
                        fi = QFileInfo(toLoad);
454
                        if (!fi.exists())
455
                        {
10108 cbradney 456
                                textBrowser->setText("<h2>"+ noHelpMsg +"</h2>");
1100 cbradney 457
                                Avail = false;
458
                        }
564 cbradney 459
                }
460
        }
2006 subik 461
        else
1100 cbradney 462
                Avail=false;
2006 subik 463
        if (Avail)
564 cbradney 464
        {
10123 jghali 465
                textBrowser->setSource( QUrl::fromLocalFile(toLoad) );
2052 subik 466
                his.title = textBrowser->documentTitle();
2877 cbradney 467
                if (his.title.isEmpty())
2052 subik 468
                        his.title = toLoad;
469
                his.url = toLoad;
10108 cbradney 470
                mHistory[histMenu->addAction(his.title)] = his;
564 cbradney 471
        }
2052 subik 472
        if (mHistory.count() > 15)
473
        {
10108 cbradney 474
                QAction* first=histMenu->actions().first();
475
                mHistory.remove(first);
476
                histMenu->removeAction(first);
2052 subik 477
        }
560 cbradney 478
}
479
 
1092 cbradney 480
void HelpBrowser::loadMenu()
560 cbradney 481
{
1693 craig 482
        QString pfad = ScPaths::instance().docDir();
786 cbradney 483
        QString toLoad;
2008 cbradney 484
        QString pfad2 = QDir::convertSeparators(pfad + language + "/menu.xml");
564 cbradney 485
        QFileInfo fi = QFileInfo(pfad2);
786 cbradney 486
 
793 cbradney 487
        if (fi.exists())
488
                toLoad=pfad2;
489
        else
490
        {
2008 cbradney 491
                toLoad = QDir::convertSeparators(pfad + "en/menu.xml");
1092 cbradney 492
                language="en";
786 cbradney 493
                fi = QFileInfo(toLoad);
3240 fschmid 494
                sDebug("Scribus help in your selected language does not exist, trying English. Otherwise, please visit http://docs.scribus.net.");
786 cbradney 495
        }
496
 
560 cbradney 497
        if (fi.exists())
564 cbradney 498
        {
10108 cbradney 499
                if (menuModel!=NULL)
500
                        delete menuModel;
501
                menuModel=new ScHelpTreeModel(toLoad, "Topic", "Location", &quickHelpIndex);
502
        }
503
        listView->setModel(menuModel);
504
        listView->setSelectionMode(QAbstractItemView::SingleSelection);
505
        QItemSelectionModel *selectionModel = new QItemSelectionModel(menuModel);
506
        listView->setSelectionModel(selectionModel);
507
        connect(listView->selectionModel(), SIGNAL(selectionChanged( const QItemSelection &, const QItemSelection &)), this, SLOT(itemSelected( const QItemSelection &, const QItemSelection &)));
560 cbradney 508
 
10108 cbradney 509
        listView->setColumnHidden(1,true);
560 cbradney 510
 
68 Franz 511
}
512
 
10108 cbradney 513
void HelpBrowser::readBookmarks()
68 Franz 514
{
10108 cbradney 515
        BookmarkParser2 handler;
516
        handler.view = bookmarksView;
517
        handler.quickHelpIndex=&quickHelpIndex;
518
        handler.bookmarkIndex=&bookmarkIndex;
519
        QFile xmlFile(bookmarkFile());
520
        QXmlInputSource source(xmlFile);
521
        QXmlSimpleReader reader;
522
        reader.setContentHandler(&handler);
523
        reader.parse(source);
68 Franz 524
}
2006 subik 525
 
10108 cbradney 526
void HelpBrowser::readHistory()
2006 subik 527
{
10108 cbradney 528
        HistoryParser2 handler;
529
        handler.helpBrowser = this;
530
        QFile xmlFile(historyFile());
531
        QXmlInputSource source(xmlFile);
532
        QXmlSimpleReader reader;
533
        reader.setContentHandler(&handler);
534
        reader.parse(source);
2006 subik 535
}
536
 
10108 cbradney 537
void HelpBrowser::setText(const QString& str)
4905 subik 538
{
10108 cbradney 539
        textBrowser->setText(str);
4905 subik 540
}
541
 
10108 cbradney 542
void HelpBrowser::itemSelected(const QItemSelection & selected, const QItemSelection & deselected)
543
{
544
        Q_UNUSED(deselected);
4905 subik 545
 
10108 cbradney 546
        QModelIndex index;
547
        QModelIndexList items = selected.indexes();
548
        int i=0;
549
        foreach (index, items)
2006 subik 550
        {
10108 cbradney 551
                if (i==1) // skip 0, as this is always the rootitem, even if we are selecting the rootitem. hmm
2006 subik 552
                {
10108 cbradney 553
                        QString filename(menuModel->data(index, Qt::DisplayRole).toString());
554
                        if (!filename.isEmpty())
2006 subik 555
                        {
10108 cbradney 556
                                loadHelp(QDir::convertSeparators(ScPaths::instance().docDir() + language + "/" + filename));
2006 subik 557
                        }
558
                }
10108 cbradney 559
                ++i;
2006 subik 560
        }
561
}
562
 
10108 cbradney 563
void HelpBrowser::itemSearchSelected(QTreeWidgetItem *twi, int i)
2006 subik 564
{
10108 cbradney 565
        Q_UNUSED(i);
566
        if (!twi)
567
                return;
568
        if (quickHelpIndex.contains(twi->text(0)))
569
        {
570
                QString filename(quickHelpIndex.value(twi->text(0)));
571
                if (!filename.isEmpty())
572
                {
573
                        loadHelp(QDir::convertSeparators(ScPaths::instance().docDir() + language + "/" + filename));
574
                        findText = searchingEdit->text();
575
                        findNext();
576
                }
577
        }
2006 subik 578
}
579
 
10108 cbradney 580
void HelpBrowser::itemBookmarkSelected(QTreeWidgetItem *twi, int i)
2006 subik 581
{
10108 cbradney 582
        Q_UNUSED(i);
583
        if (!twi)
2006 subik 584
                return;
10108 cbradney 585
        if (bookmarkIndex.contains(twi->text(0)))
2006 subik 586
        {
10108 cbradney 587
                QString filename(bookmarkIndex.value(twi->text(0)).second);
588
                if (!filename.isEmpty())
589
                        loadHelp(QDir::convertSeparators(ScPaths::instance().docDir() + language + "/" + filename));
2006 subik 590
        }
591
}
2023 subik 592
 
10108 cbradney 593
/*! \brief Returns the name of the cfg file for bookmarks.
594
A helper function.
595
\author Petr Vanek <petr@yarpen.cz>
596
*/
597
QString HelpBrowser::bookmarkFile()
2023 subik 598
{
10108 cbradney 599
        QString appDataDir(ScPaths::getApplicationDataDir());
600
        QString fname(appDataDir + "doc/bookmarks.xml");
601
        if (!QFile::exists(fname))
2023 subik 602
        {
10108 cbradney 603
                QDir d(QDir::convertSeparators(appDataDir));
604
                d.mkdir("doc");
2023 subik 605
        }
10108 cbradney 606
        return fname;
2023 subik 607
}
608
 
609
 
10108 cbradney 610
/*! \brief Returns the name of the cfg file for persistent history.
611
A helper function.
612
\author Petr Vanek <petr@yarpen.cz>
613
*/
614
QString HelpBrowser::historyFile()
2048 subik 615
{
10108 cbradney 616
        QString appDataDir(ScPaths::getApplicationDataDir());
617
        QString fname(appDataDir + "doc/history.xml");
618
        if (!QFile::exists(fname))
619
        {
620
                QDir d(QDir::convertSeparators(appDataDir));
621
                d.mkdir("doc");
622
        }
623
        return fname;
2048 subik 624
}