Subversion Repositories Scribus

Rev

Rev 19267 | Rev 19472 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
17827 craig 1
#include "marksmanager.h"
2
#include "notesstyles.h"
3
#include "prefsmanager.h"
4
#include "prefsfile.h"
5
#include "scribus.h"
6
#include "scribusdoc.h"
7
#include "undomanager.h"
19267 craig 8
#include "util.h"
17827 craig 9
#include <QStandardItemModel>
10
 
11
MarksManager::MarksManager(QWidget *parent, const char *name)
12
        : ScrPaletteBase(parent, name), m_Doc(NULL)
13
{
14
        setupUi(this);
15
        listView->setSelectionMode(QAbstractItemView::SingleSelection);
16
        listView->setSortingEnabled(true);
17
        listView->setHeaderHidden(true);
18
        listView->setColumnCount(1);
19
        QString pname(name);
20
        if (pname.isEmpty())
21
                pname = "marksManager";
22
        m_prefs = PrefsManager::instance()->prefsFile->getContext(pname);
23
        setDoc(0);
24
        languageChange();
25
        EditButton->setEnabled(false);
26
        DeleteButton->setEnabled(false);
27
        UpdateButton->setEnabled(false);
28
}
29
 
30
MarksManager::~MarksManager()
31
{
32
        storeVisibility(this->isVisible());
33
        storePosition();
34
        storeSize();
35
}
36
 
37
void MarksManager::addListItem(MarkType typeMrk, QString typeStr, const QList<Mark*> &marks, int &index)
38
{
39
        bool noSuchMarks = true;
40
        QTreeWidgetItem *listItem = new QTreeWidgetItem(listView);
41
        listItem->setText(0,typeStr);
42
        listItem->setFlags(listItem->flags() & (~Qt::ItemIsSelectable));
43
        listItem->setBackground(0,QColor("lightGray"));
44
        for (int i = 0; i < marks.size(); ++i)
45
        {
46
                if (marks[i]->isType(typeMrk))
47
                {
48
                        QTreeWidgetItem *listItem2 = new QTreeWidgetItem(listItem);
49
                        listItem2->setText(0, marks[i]->label);
50
                        listItem2->setData(1, Qt::UserRole,QVariant::fromValue<void*>(marks[i]));
51
                        index++;
52
                        noSuchMarks = false;
53
                }
54
        }
55
        if (noSuchMarks)
56
        {
57
                listView->removeItemWidget(listItem,0);
58
                delete listItem;
59
        }
60
        else
61
                listItem->sortChildren(0, Qt::AscendingOrder);
62
}
63
 
64
void MarksManager::storeColaption()
65
{
66
        expandedItems.clear();
67
        for (int i=0; i < listView->topLevelItemCount(); ++i)
68
        {
69
                QTreeWidgetItem *item = listView->topLevelItem(i);
70
                if (item->isExpanded())
71
                        expandedItems.append(item->text(0));
72
        }
73
}
74
 
75
void MarksManager::restoreColaption()
76
{
77
        listView->collapseAll();
78
        if (!expandedItems.isEmpty())
79
        {
80
                for (int i=0; i < listView->topLevelItemCount(); ++i)
81
                {
82
                        QTreeWidgetItem *item = listView->topLevelItem(i);
83
                        if (expandedItems.contains(item->text(0)))
84
                                listView->topLevelItem(i)->setExpanded(true);
85
                }
86
        }
87
}
88
 
89
void MarksManager::updateListView()
90
{
91
        storeColaption();
92
        listView->clear();
93
        if (m_Doc == NULL)
94
                return;
95
        if (m_Doc->marksList().isEmpty())
96
                UpdateButton->setEnabled(false);
97
        else
98
        {
99
                UpdateButton->setEnabled(true);
100
                int index = 0;
101
                addListItem(MARKAnchorType, tr("Anchors"), m_Doc->marksList(), index);
102
                addListItem(MARKVariableTextType, tr("Variable Text"), m_Doc->marksList(), index);
103
                addListItem(MARK2ItemType, tr("Marks to Items"), m_Doc->marksList(), index);
104
                addListItem(MARK2MarkType, tr("Marks to Anchors"), m_Doc->marksList(), index);
105
                addListItem(MARKNoteMasterType, tr("Notes marks"), m_Doc->marksList(), index);
106
        //      addListItem(MARKIndexType, tr("Index entries");, marks, index);
107
                listView->sortByColumn(0);
108
        }
109
        restoreColaption();
110
        m_Doc->flag_updateMarksLabels = false;
111
        m_Doc->flag_updateEndNotes = false;
112
}
113
 
114
void MarksManager::setDoc(ScribusDoc *doc)
115
{
116
        if (m_Doc != NULL)
117
                disconnect(m_Doc->scMW(), SIGNAL(UpdateRequest(int)), this , SLOT(handleUpdateRequest(int)));
19366 jghali 118
 
17827 craig 119
        m_Doc = doc;
19366 jghali 120
        if (!m_Doc)
17827 craig 121
        {
19366 jghali 122
                listView->clear();
123
                return;
17827 craig 124
        }
19366 jghali 125
 
126
        UpdateButton->setEnabled(true);
127
        listView->setEnabled(true);
128
        updateListView();
129
        connect(m_Doc->scMW(), SIGNAL(UpdateRequest(int)), this , SLOT(handleUpdateRequest(int)));
17827 craig 130
}
131
 
132
void MarksManager::languageChange()
133
{
134
        setWindowTitle(tr("Marks Manager"));
135
        listView->setToolTip(tr("Double click to find mark in text"));
136
        UpdateButton->setText(tr("Update All Marks"));
18489 jghali 137
        UpdateButton->setToolTip(tr("Update all reference texts for all marks"));
17827 craig 138
        EditButton->setText(tr("Edit"));
139
        EditButton->setToolTip(tr("Edit selected mark"));
140
        if (m_Doc != NULL)
141
                updateListView();
142
}
143
 
144
void MarksManager::handleUpdateRequest(int updateFlags)
145
{
146
        if (updateFlags & reqMarksUpdate) {
147
                updateListView();
148
        }
149
        m_Doc->flag_updateMarksLabels = false;
150
}
151
 
152
Mark* MarksManager::getMarkFromListView()
153
{
154
        QTreeWidgetItem* selectedItem = listView->currentItem();
155
        if (selectedItem == NULL)
156
                return NULL;
157
        Mark* mrk = reinterpret_cast<Mark*>(selectedItem->data(1, Qt::UserRole).value<void*>());
158
        return mrk;
159
}
160
 
161
void MarksManager::on_UpdateButton_clicked()
162
{
163
        m_Doc->flag_updateMarksLabels = true;
164
        m_Doc->flag_updateEndNotes = true;
165
        m_Doc->setNotesChanged(true);
166
        if (m_Doc->updateMarks(true))
167
        {
168
                m_Doc->changed();
169
                m_Doc->regionsChanged()->update(QRectF());
170
                updateListView();
171
        }
172
 
173
        //update lables for "lost" marks (marks not in any text)
174
        QList<Mark*> notUsed;
175
        for (int a=0; a < m_Doc->marksList().count(); ++a)
176
        {
177
                Mark* mrk = m_Doc->marksList().at(a);
178
                if (mrk->isUnique() && !mrk->label.startsWith("UNVISIBLE*") && !m_Doc->isMarkUsed(mrk, true))
179
                        notUsed.append(mrk);
180
        }
19366 jghali 181
 
182
        if (notUsed.isEmpty())
183
                return;
184
 
185
        for (int a=0; a < notUsed.count(); ++a)
17827 craig 186
        {
19366 jghali 187
                Mark* mrk = notUsed.at(a);
188
                QString l = "UNVISIBLE*" + mrk->label;
189
                getUniqueName(l, m_Doc->marksLabelsList(mrk->getType()), "_");
190
                mrk->label = l;
17827 craig 191
        }
19366 jghali 192
        updateListView();
17827 craig 193
}
194
 
195
void MarksManager::on_EditButton_clicked()
196
{
197
        Mark* mrk = getMarkFromListView();
19366 jghali 198
        if (mrk == NULL)
199
                return;
200
 
201
        if (m_Doc->scMW()->editMarkDlg(mrk))
17827 craig 202
        {
19366 jghali 203
                if (mrk->isType(MARKVariableTextType))
204
                        m_Doc->flag_updateMarksLabels = true;
205
//              else
206
//                      currItem->invalid = true;
207
                m_Doc->changed();
208
                m_Doc->regionsChanged()->update(QRectF());
209
                updateListView();
17827 craig 210
        }
211
}
212
 
213
void MarksManager::on_DeleteButton_clicked()
214
{
215
        Mark* mrk = getMarkFromListView();
19366 jghali 216
        if (mrk == NULL)
217
                return;
218
 
219
        if (mrk->isType(MARKNoteMasterType))
220
                m_Doc->setUndoDelNote(mrk->getNotePtr());
221
        else
222
                m_Doc->setUndoDelMark(mrk);
223
        m_Doc->eraseMark(mrk, true, NULL, true);
224
        m_Doc->changed();
225
        m_Doc->regionsChanged()->update(QRectF());
226
        updateListView();
17827 craig 227
}
228
 
229
void MarksManager::on_listView_doubleClicked(const QModelIndex &index)
230
{
231
        Mark* mrk = getMarkFromListView();
232
        if (mrk != NULL)
233
                m_Doc->setCursor2MarkPos(mrk);
234
}
235
 
236
void MarksManager::on_listView_itemSelectionChanged()
237
{
238
        bool isMark = (getMarkFromListView() != NULL);
239
        EditButton->setEnabled(isMark);
240
        DeleteButton->setEnabled(isMark);
241
}