Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
2707 subik 1
/***************************************************************************
2
 *                                                                         *
3
 *   This program is free software; you can redistribute it and/or modify  *
4
 *   it under the terms of the GNU General Public License as published by  *
5
 *   the Free Software Foundation; either version 2 of the License, or     *
6
 *   (at your option) any later version.                                   *
7
 *                                                                         *
8
 ***************************************************************************/
9
 
10
#include <qstring.h>
11
#include <qstringlist.h>
12
#include <qdom.h>
13
#include <qdir.h>
14
#include <qfile.h>
15
#include <qvariant.h>
16
#include <qpushbutton.h>
17
#include <qheader.h>
18
#include <qlistview.h>
19
#include <qlabel.h>
20
#include <qspinbox.h>
21
#include <qcheckbox.h>
22
#include <qlayout.h>
23
#include <qtooltip.h>
24
#include <qwhatsthis.h>
25
 
26
#include "loremipsum.h"
27
#include "loremipsum.moc"
28
#include "scribus.h"
3698 cbradney 29
#include "scribusdoc.h"
30
#include "scribusview.h"
2707 subik 31
#include "scpaths.h"
3934 cbradney 32
#include "selection.h"
2707 subik 33
#include "serializer.h"
2834 cbradney 34
#include "prefsmanager.h"
2952 cbradney 35
#include "commonstrings.h"
3252 craig 36
#include "hyphenator.h"
2707 subik 37
 
38
 
3205 craig 39
 
2707 subik 40
QString getLoremLocation(QString fname)
41
{
42
        return QDir::convertSeparators(ScPaths::instance().shareDir() + "/loremipsum/" + fname);
43
}
44
 
45
LoremParser::LoremParser(QString fname)
46
{
47
        name = author = url = "n/a";
2716 subik 48
        correct = false;
2707 subik 49
        QDomDocument doc("loremdoc");
50
        QFile file(getLoremLocation(fname));
51
        if (!file.open(IO_ReadOnly))
52
                return;
53
        if (!doc.setContent(&file))
54
        {
55
                file.close();
56
                return;
57
        }
58
        file.close();
59
 
60
        QDomElement docElement = doc.documentElement();
61
 
62
        QDomNode node = docElement.firstChild();
63
        while(!node.isNull())
64
        {
65
                QDomElement element = node.toElement();
66
                if(!element.isNull())
67
                {
68
                        if (element.tagName() == "name")
69
                                name = element.text();
70
                        if (element.tagName() == "author")
71
                                author = element.text();
72
                        if (element.tagName() == "url")
73
                                url = element.text();
74
                        if (element.tagName() == "p")
2784 subik 75
                                loremIpsum.append(element.text().simplifyWhiteSpace());
2707 subik 76
                }
77
                node = node.nextSibling();
78
        }
2716 subik 79
        if (name != "n/a")
80
                correct = true;
2707 subik 81
}
82
 
83
QString LoremParser::createLorem(uint parCount)
84
{
85
        if (parCount < 1)
86
                return QString::null;
87
        // first paragraph is always the same
88
        QString lorem(loremIpsum[0]);
89
        for (uint i = 1; i < parCount + 1; ++i)
90
                lorem += loremIpsum[rand()%loremIpsum.count()] + '\n';
91
        return lorem.stripWhiteSpace();
92
}
93
 
94
 
95
LoremManager::LoremManager(QWidget* parent, const char* name, bool modal, WFlags fl)
96
        : QDialog( parent, name, modal, fl )
97
{
98
        if ( !name )
99
                setName( "LoremManager" );
100
        LoremManagerLayout = new QGridLayout( this, 1, 1, 11, 6, "LoremManagerLayout");
101
 
102
        layout3 = new QVBoxLayout( 0, 0, 6, "layout3");
103
 
104
        loremList = new QListView( this, "loremList" );
105
        loremList->addColumn( tr( "Select Lorem Ipsum" ) );
106
        loremList->setRootIsDecorated(true);
107
        layout3->addWidget( loremList );
108
 
109
        layout2 = new QHBoxLayout( 0, 0, 6, "layout2");
110
 
111
        paraLabel = new QLabel( this, "paraLabel" );
112
        layout2->addWidget( paraLabel );
113
 
114
        paraBox = new QSpinBox( this, "paraBox" );
115
        paraBox->setMinValue( 1 );
2834 cbradney 116
        paraBox->setValue(PrefsManager::instance()->appPrefs.paragraphsLI);
2707 subik 117
        layout2->addWidget( paraBox );
118
        paraSpacer = new QSpacerItem( 40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
119
        layout2->addItem( paraSpacer );
120
        layout3->addLayout( layout2 );
121
 
122
        layout1 = new QHBoxLayout( 0, 0, 6, "layout1");
123
        buttonSpacer = new QSpacerItem( 40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
124
        layout1->addItem( buttonSpacer );
125
 
126
        okButton = new QPushButton( this, "okButton" );
127
        layout1->addWidget( okButton );
128
 
129
        cancelButton = new QPushButton( this, "cancelButton" );
130
        layout1->addWidget( cancelButton );
131
        layout3->addLayout( layout1 );
132
 
133
        LoremManagerLayout->addLayout( layout3, 0, 0 );
134
        languageChange();
135
        resize( QSize(439, 364).expandedTo(minimumSizeHint()) );
136
        clearWState( WState_Polished );
137
 
138
        // reading lorems
139
        QDir d(getLoremLocation(QString::null), "*.xml");
140
 
141
        const QFileInfoList *list = d.entryInfoList();
142
        QFileInfoListIterator it(*list);
143
        QFileInfo *fi;
144
 
145
        while ( (fi = it.current()) != 0 )
146
        {
147
                LoremParser *parser = new LoremParser(fi->fileName());
2716 subik 148
                if (!parser->correct)
149
                {
150
                        delete parser;
151
                        ++it;
152
                        continue;
153
                }
2707 subik 154
                availableLorems[parser->name] = fi->fileName();
155
                QListViewItem *item = new QListViewItem(loremList);
156
                item->setText(0, parser->name);
157
                new QListViewItem(item, tr("Author:") + " " + parser->author);
158
                new QListViewItem(item, tr("Get More:") + " " + parser->url);
159
                new QListViewItem(item, tr("XML File:") + " " + fi->fileName());
160
                loremList->insertItem(item);
161
                ++it;
2716 subik 162
                delete parser;
2707 subik 163
        }
164
 
165
        // signals and slots connections
166
        connect( okButton, SIGNAL( clicked() ), this, SLOT( okButton_clicked() ) );
167
        connect( cancelButton, SIGNAL( clicked() ), this, SLOT( cancelButton_clicked() ) );
168
}
169
 
170
void LoremManager::languageChange()
171
{
172
        setCaption( tr( "Lorem Ipsum" ) );
173
        paraLabel->setText( tr( "Paragraphs:" ) );
2952 cbradney 174
        okButton->setText( CommonStrings::tr_OK );
2707 subik 175
        okButton->setAccel( QKeySequence( tr( "Alt+O" ) ) );
2952 cbradney 176
        cancelButton->setText( CommonStrings::tr_Cancel );
2707 subik 177
        cancelButton->setAccel( QKeySequence( tr( "Alt+C" ) ) );
178
}
179
 
180
void LoremManager::okButton_clicked()
181
{
2716 subik 182
        // only top level items are taken
183
        QListViewItem *li;
184
        if (loremList->currentItem()->parent() == 0)
185
                li = loremList->currentItem();
186
        else
187
                li = loremList->currentItem()->parent();
188
 
2784 subik 189
        insertLoremIpsum(availableLorems[li->text(0)], paraBox->value());
190
        accept();
191
}
2707 subik 192
 
2784 subik 193
void LoremManager::cancelButton_clicked()
194
{
195
        reject();
196
}
197
 
198
void LoremManager::insertLoremIpsum(QString name, int paraCount)
199
{
200
        // is it really applied?
201
        bool done = false;
202
 
3934 cbradney 203
        //for (uint i = 0; i < ScApp->view->SelItem.count(); ++i)
204
        for (uint i = 0; i < ScApp->doc->selection->count(); ++i)
2707 subik 205
        {
3934 cbradney 206
                //if (ScApp->view->SelItem.at(i) == NULL)
207
                PageItem* currItem=ScApp->doc->selection->itemAt(i);
208
                if (currItem == NULL)
2707 subik 209
                        continue;
3934 cbradney 210
                //if (! ScApp->view->SelItem.at(i)->asTextFrame())
211
                if (!currItem->asTextFrame())
2707 subik 212
                        continue;
3934 cbradney 213
                //if (ScApp->view->SelItem.at(i)->itemText.count() != 0)
214
                if (currItem->itemText.count() != 0)
2707 subik 215
                {
2793 subik 216
                        ScApp->view->ClearItem();
217
                        /* ClearItem() doesn't return true or false so
218
                        the following test has to be done */
3934 cbradney 219
                        //if (ScApp->view->SelItem.at(i)->itemText.count() != 0)
220
                        if (currItem->itemText.count() != 0)
2707 subik 221
                                continue;
222
                }
2784 subik 223
 
224
                LoremParser *lp = new LoremParser(name);
225
                if (lp == NULL)
226
                {
227
                        qDebug("LoremManager::okButton_clicked() *lp == NULL");
228
                        return;
229
                }
2707 subik 230
                Serializer *ss = new Serializer("");
231
                if (ss != NULL)
232
                {
2784 subik 233
                        done = true;
234
                        ss->Objekt = lp->createLorem(paraCount);
3934 cbradney 235
                        //int st = ScApp->view->SelItem.at(i)->Doc->currentParaStyle;
236
                        int st = currItem->Doc->currentParaStyle;
2707 subik 237
                        if (st > 5)
3934 cbradney 238
                                //ss->GetText(ScApp->view->SelItem.at(i), st, ScApp->view->SelItem.at(i)->Doc->docParagraphStyles[st].Font, ScApp->view->SelItem.at(i)->Doc->docParagraphStyles[st].FontSize, true);
239
                                ss->GetText(currItem, st, currItem->Doc->docParagraphStyles[st].Font, currItem->Doc->docParagraphStyles[st].FontSize, true);
2707 subik 240
                        else
3934 cbradney 241
                                //ss->GetText(ScApp->view->SelItem.at(i), st, ScApp->view->SelItem.at(i)->IFont, ScApp->view->SelItem.at(i)->ISize, true);
242
                                ss->GetText(currItem, st, currItem->IFont, currItem->ISize, true);
2707 subik 243
                        delete ss;
244
                }
3934 cbradney 245
                //if (ScApp->view->SelItem.at(i)->Doc->docHyphenator->AutoCheck)
246
                //      ScApp->view->SelItem.at(i)->Doc->docHyphenator->slotHyphenate(ScApp->view->SelItem.at(i));
247
                if (currItem->Doc->docHyphenator->AutoCheck)
248
                        currItem->Doc->docHyphenator->slotHyphenate(currItem);
2707 subik 249
        }
2784 subik 250
        if (done)
251
        {
252
                ScApp->view->updateContents();
253
                ScApp->slotDocCh();
254
        }
2707 subik 255
}