source: terepaima/terepaima-0.4.16/sources/bookmarkmodel.cpp

desarrollostretch
Last change on this file was 1f4adec, checked in by aosorio <aosorio@…>, 8 years ago

Agregado proyecto base, esto luego del dh_make -f

  • Property mode set to 100644
File size: 4.0 KB
Line 
1/*
2
3Copyright 2014-2015 Adam Reichold
4
5This file is part of qpdfview.
6
7qpdfview is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation, either version 2 of the License, or
10(at your option) any later version.
11
12qpdfview is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with qpdfview.  If not, see <http://www.gnu.org/licenses/>.
19
20*/
21
22#include "bookmarkmodel.h"
23
24#include <QApplication>
25
26namespace qpdfview
27{
28
29static inline bool operator<(int page, const BookmarkItem& bookmark) { return page < bookmark.page; }
30static inline bool operator<(const BookmarkItem& bookmark, int page) { return bookmark.page < page; }
31
32QHash< QString, BookmarkModel* > BookmarkModel::s_instances;
33
34BookmarkModel* BookmarkModel::fromPath(const QString& path, bool create)
35{
36    BookmarkModel* model = s_instances.value(path, 0);
37
38    if(create && model == 0)
39    {
40        model = new BookmarkModel(qApp);
41
42        s_instances.insert(path, model);
43    }
44
45    return model;
46}
47
48QList< QString > BookmarkModel::knownPaths()
49{
50    return s_instances.keys();
51}
52
53void BookmarkModel::forgetPath(const QString& path)
54{
55    QHash< QString, BookmarkModel* >::iterator at = s_instances.find(path);
56
57    if(at != s_instances.end())
58    {
59        delete at.value();
60
61        s_instances.erase(at);
62    }
63}
64
65void BookmarkModel::forgetAllPaths()
66{
67    qDeleteAll(s_instances);
68    s_instances.clear();
69}
70
71void BookmarkModel::addBookmark(const BookmarkItem& bookmark)
72{
73    QList< BookmarkItem >::iterator at = qBinaryFind(m_bookmarks.begin(), m_bookmarks.end(), bookmark.page);
74    int row = at - m_bookmarks.begin();
75
76    if(at != m_bookmarks.end())
77    {
78        *at = bookmark;
79
80        emit dataChanged(createIndex(row, 0), createIndex(row, 1));
81    }
82    else
83    {
84        at = qUpperBound(m_bookmarks.begin(), m_bookmarks.end(), bookmark.page);
85        row = at - m_bookmarks.begin();
86
87        beginInsertRows(QModelIndex(), row, row);
88
89        m_bookmarks.insert(at, bookmark);
90
91        endInsertRows();
92    }
93}
94
95void BookmarkModel::removeBookmark(const BookmarkItem& bookmark)
96{
97    const QList< BookmarkItem >::iterator at = qBinaryFind(m_bookmarks.begin(), m_bookmarks.end(), bookmark.page);
98    const int row = at - m_bookmarks.begin();
99
100    if(at != m_bookmarks.end())
101    {
102        beginRemoveRows(QModelIndex(), row, row);
103
104        m_bookmarks.erase(at);
105
106        endRemoveRows();
107    }
108}
109
110void BookmarkModel::findBookmark(BookmarkItem& bookmark) const
111{
112    const QList< BookmarkItem >::const_iterator at = qBinaryFind(m_bookmarks.constBegin(), m_bookmarks.constEnd(), bookmark.page);
113
114    if(at != m_bookmarks.constEnd())
115    {
116        bookmark = *at;
117    }
118}
119
120Qt::ItemFlags BookmarkModel::flags(const QModelIndex&) const
121{
122    return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
123}
124
125int BookmarkModel::columnCount(const QModelIndex&) const
126{
127    return 2;
128}
129
130int BookmarkModel::rowCount(const QModelIndex& parent) const
131{
132    return !parent.isValid() ? m_bookmarks.count() : 0;
133}
134
135QVariant BookmarkModel::data(const QModelIndex& index, int role) const
136{
137    if(!index.isValid() || index.row() >= m_bookmarks.count())
138    {
139        return QVariant();
140    }
141
142    const BookmarkItem& bookmark = m_bookmarks.at(index.row());
143
144    switch(role)
145    {
146    default:
147        return QVariant();
148    case PageRole:
149        return bookmark.page;
150    case LabelRole:
151    case Qt::DisplayRole:
152        return index.column() == 0 ? bookmark.label : QString::number(bookmark.page);
153    case CommentRole:
154    case Qt::ToolTipRole:
155        return bookmark.comment;
156    case ModifiedRole:
157        return bookmark.modified;
158    case Qt::TextAlignmentRole:
159        return index.column() == 0 ? Qt::AlignLeft : Qt::AlignRight;
160    }
161}
162
163BookmarkModel::BookmarkModel(QObject* parent) : QAbstractListModel(parent),
164    m_bookmarks()
165{
166}
167
168} // qpdfview
Note: See TracBrowser for help on using the repository browser.