forked from eBookProjects/uChmViewer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtreeitem_toc.cpp
More file actions
129 lines (105 loc) · 3.07 KB
/
Copy pathtreeitem_toc.cpp
File metadata and controls
129 lines (105 loc) · 3.07 KB
1
2
3
4
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*
* Kchmviewer - a CHM and EPUB file viewer with broad language support
* Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <cstdlib>
#include <QPixmap>
#include <QString>
#include <QUrl>
#include <QVariant>
#include <Qt>
#include <ebook.h>
#include "mainwindow.h"
#include "treeitem_toc.h"
TreeItem_TOC::TreeItem_TOC( QTreeWidgetItem* parent, QTreeWidgetItem* after, const QString& name, const QUrl& url, int image )
: QTreeWidgetItem( parent, after )
{
m_name = name;
m_url = url;
m_image = image;
}
TreeItem_TOC::TreeItem_TOC( QTreeWidget* parent, QTreeWidgetItem* after, const QString& name, const QUrl& url, int image )
: QTreeWidgetItem( parent, after )
{
m_name = name;
m_url = url;
m_image = image;
}
QUrl TreeItem_TOC::getUrl() const
{
return m_url;
}
bool TreeItem_TOC::containsUrl( const QUrl& url, bool ignorefragment ) const
{
if ( ignorefragment )
{
// This appears to be a bug in Qt: the url.path() returns a proper path starting with /,
// but m_url.path() returns a relative URL starting with no / - so we make sure both are.
QString urlpath = url.path();
QString ourpath = m_url.path();
// Memory allocation-wise this must really suck :( however this code is rarely used,
// and only for buggy epub/chms.
if ( !urlpath.startsWith( '/' ) )
urlpath.prepend( '/' );
if ( !ourpath.startsWith( '/' ) )
ourpath.prepend( '/' );
return urlpath == ourpath;
}
else
{
return url == m_url;
}
}
int TreeItem_TOC::columnCount() const
{
return 1;
}
QVariant TreeItem_TOC::data( int column, int role ) const
{
int imagenum;
if ( column != 0 )
return QVariant();
switch ( role )
{
// Item name
case Qt::DisplayRole:
return m_name;
// Item image
case Qt::DecorationRole:
if ( m_image != EBookTocEntry::IMAGE_NONE )
{
// If the item has children, we change the book image to "open book", or next image automatically
if ( childCount() )
{
if ( isExpanded() )
imagenum = ( m_image == EBookTocEntry::IMAGE_AUTO ) ? 1 : m_image;
else
imagenum = ( m_image == EBookTocEntry::IMAGE_AUTO ) ? 0 : m_image + 1;
}
else
imagenum = ( m_image == EBookTocEntry::IMAGE_AUTO ) ? 10 : m_image;
const QPixmap* pix = ::mainWindow->getEBookIconPixmap( ( EBookTocEntry::Icon ) imagenum );
if ( !pix || pix->isNull() )
abort();
return *pix;
}
break;
case Qt::ToolTipRole:
case Qt::WhatsThisRole:
return m_name;
}
return QVariant();
}