1/*
2 * This file is part of the KDE Help Center
3 *
4 * Copyright (C) 1999 Matthias Elter (me@kde.org)
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 */
20#include "plugintraverser.h"
21#include "docmetainfo.h"
22#include "navigator.h"
23#include "navigatorappitem.h"
24#include "navigatoritem.h"
25
26#include <KApplication>
27#include <KConfig>
28#include <KConfigGroup>
29#include <KDebug>
30#include <KIconLoader>
31#include <KGlobal>
32
33using namespace KHC;
34
35PluginTraverser::PluginTraverser( Navigator *navigator, QTreeWidget *parent )
36 : DocEntryTraverser(),
37 mListView( parent ),
38 mParentItem( 0 ),
39 mCurrentItem( 0 ),
40 mNavigator( navigator )
41{
42}
43
44PluginTraverser::PluginTraverser( Navigator *navigator, NavigatorItem *parent )
45 : DocEntryTraverser(),
46 mListView( 0 ),
47 mParentItem( parent ),
48 mCurrentItem( 0 ),
49 mNavigator( navigator )
50{
51}
52
53void PluginTraverser::process( DocEntry *entry )
54{
55 if ( !mListView && !mParentItem ) {
56 kDebug( 1400 ) << "ERROR! Neither mListView nor mParentItem is set.";
57 return;
58 }
59
60 if ( !entry->docExists() && !mNavigator->showMissingDocs() )
61 return;
62
63 if ( entry->khelpcenterSpecial() == QLatin1String("apps") ) {
64 NavigatorAppItem *appItem;
65 entry->setIcon( "kde" );
66 if ( mListView )
67 appItem = new NavigatorAppItem( entry, mListView, mCurrentItem );
68 else
69 appItem = new NavigatorAppItem( entry, mParentItem, mCurrentItem );
70 KConfigGroup cfg(KGlobal::config(), "General");
71 appItem->setRelpath( cfg.readPathEntry( "AppsRoot", QString() ) );
72 mCurrentItem = appItem;
73 } else if ( entry->khelpcenterSpecial() == QLatin1String("scrollkeeper" )) {
74 if ( mParentItem ) {
75 mCurrentItem = mNavigator->insertScrollKeeperDocs( mParentItem, mCurrentItem );
76 }
77 return;
78 } else {
79 if ( mListView )
80 mCurrentItem = new NavigatorItem( entry, mListView, mCurrentItem );
81 else
82 mCurrentItem = new NavigatorItem( entry, mParentItem, mCurrentItem );
83
84 if ( entry->khelpcenterSpecial() == QLatin1String("konqueror") ) {
85 mNavigator->insertParentAppDocs( entry->khelpcenterSpecial(), mCurrentItem );
86 } else if ( entry->khelpcenterSpecial() == QLatin1String("kcontrol") ) {
87 mNavigator->insertKCMDocs( entry->khelpcenterSpecial(), mCurrentItem, QString("kcontrol") );
88 } else if ( entry->khelpcenterSpecial() == QLatin1String("konquerorcontrol") ) {
89 mNavigator->insertKCMDocs( entry->khelpcenterSpecial(), mCurrentItem, QString("konquerorcontrol") );
90 } else if ( entry->khelpcenterSpecial() == QLatin1String("filemanagercontrol") ) {
91 mNavigator->insertKCMDocs( entry->khelpcenterSpecial(), mCurrentItem, QString("filemanagercontrol") );
92 } else if ( entry->khelpcenterSpecial() == QLatin1String("browsercontrol") ) {
93 mNavigator->insertKCMDocs( entry->khelpcenterSpecial(), mCurrentItem, QString("browsercontrol") );
94 } else if ( entry->khelpcenterSpecial() == QLatin1String("othercontrol") ) {
95 mNavigator->insertKCMDocs( entry->khelpcenterSpecial(), mCurrentItem, QString("othercontrol") );
96 } else if ( entry->khelpcenterSpecial() == QLatin1String("kinfocenter") ) {
97 mNavigator->insertKCMDocs( entry->khelpcenterSpecial(), mCurrentItem, QString("kinfocenter") );
98 } else if ( entry->khelpcenterSpecial() == QLatin1String("kioslave") ) {
99 mNavigator->insertIOSlaveDocs( entry->khelpcenterSpecial(), mCurrentItem );
100 } else if ( entry->khelpcenterSpecial() == QLatin1String("info") ) {
101 mNavigator->insertInfoDocs( mCurrentItem );
102 } else {
103 return;
104 }
105// TODO: was contents2 -> needs to be changed to help-contents-alternate or similar
106 mCurrentItem->setIcon( 0, SmallIcon( QLatin1String("help-contents") ) );
107 }
108}
109
110DocEntryTraverser *PluginTraverser::createChild( DocEntry * /*entry*/ )
111{
112 if ( mCurrentItem ) {
113 return new PluginTraverser( mNavigator, mCurrentItem );
114 }
115 kDebug( 1400 ) << "ERROR! mCurrentItem is not set.";
116 return 0;
117}
118
119// vim:ts=2:sw=2:et
120