Subversion Repositories Scribus

Rev

Rev 10648 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4430 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
9626 subik 7
 
9627 subik 8
#include <QFileDialog>
9
#include <QMessageBox>
1202 fschmid 10
 
3698 cbradney 11
#include "scribusdoc.h"
12
#include "scribusview.h"
1202 fschmid 13
#include "fontcombo.h"
3543 avox 14
#include "sccombobox.h"
6811 subik 15
#include "unicodesearch.h"
7172 subik 16
#include "commonstrings.h"
5986 avox 17
#include "fonts/scfontmetrics.h"
2529 craig 18
#include "util.h"
10200 cbradney 19
#include "util_icon.h"
7353 subik 20
#include "scpaths.h"
10113 subik 21
#include "chartableview.h"
10601 mrdocs 22
#include "pageitem_textframe.h"
1202 fschmid 23
 
7172 subik 24
#include "charselect.h"
1202 fschmid 25
 
3207 craig 26
 
7087 subik 27
CharSelect::CharSelect(QWidget* parent)
28
        : ScrPaletteBase(parent, "CharSelect"),
29
        m_doc(0),
10817 subik 30
        m_characterClass(0),
7087 subik 31
        m_Item(0)
3207 craig 32
{
10817 subik 33
        setupUi(this);
34
//      layout()->setSizeConstraint(QLayout::SetFixedSize |QLayout::SetDefaultConstraint);
35
 
7172 subik 36
        paletteFileMask = tr("Scribus Char Palette (*.ucp);;All Files (*)");
37
 
9626 subik 38
        m_charTableModel = new CharTableModel(m_bigPalette, 16, m_doc, m_fontInUse);
39
        m_charTable->setModel(m_charTableModel);
40
        m_charTable->resizeColumnsToContents();
41
        m_charTable->resizeRowsToContents();
9654 fschmid 42
        m_charTable->setDragEnabled(true);
6811 subik 43
 
10493 fschmid 44
        uniLoadButton->setIcon(loadIcon("22/document-open.png"));
45
        uniSaveButton->setIcon(loadIcon("22/document-save.png"));
46
        uniClearButton->setIcon(loadIcon("22/document-new.png"));
9627 subik 47
 
9626 subik 48
        m_userTableModel = new CharTableModel(m_quickPalette, 4, m_doc, m_fontInUse);
49
        m_userTable->setModel(m_userTableModel);
9627 subik 50
        m_userTable->setAcceptDrops(true);
10817 subik 51
//      m_userTable->setDragEnabled(true);
9626 subik 52
        m_userTable->resizeColumnsToContents();
53
        m_userTable->resizeRowsToContents();
7050 subik 54
 
1202 fschmid 55
        // signals and slots connections
56
        connect(deleteButton, SIGNAL(clicked()), this, SLOT(delEdit()));
57
        connect(insertButton, SIGNAL(clicked()), this, SLOT(insChar()));
8185 subik 58
        connect(m_charTable, SIGNAL(selectChar(uint)), this, SLOT(newChar(uint)));
59
        connect(m_charTable, SIGNAL(delChar()), this, SLOT(delChar()));
60
        connect(m_userTable, SIGNAL(selectChar(uint)), this, SLOT(userNewChar(uint)));
61
        connect(m_userTable, SIGNAL(delChar()), this, SLOT(delChar()));
9627 subik 62
        connect(unicodeButton, SIGNAL(chosenUnicode(QString)), m_userTableModel, SLOT(appendUnicode(QString)));
1202 fschmid 63
        connect(fontSelector, SIGNAL(activated(int)), this, SLOT(newFont(int)));
64
        connect(rangeSelector, SIGNAL(activated(int)), this, SLOT(newCharClass(int)));
7050 subik 65
        connect(hideCheck, SIGNAL(clicked()), this, SLOT(hideCheck_clicked()));
7087 subik 66
        connect(this, SIGNAL(insertSpecialChar()), this, SLOT(slot_insertSpecialChar()));
7534 subik 67
        connect(this, SIGNAL(insertUserSpecialChar(QChar)), this, SLOT(slot_insertUserSpecialChar(QChar)));
7166 subik 68
        connect(uniLoadButton, SIGNAL(clicked()), this, SLOT(uniLoadButton_clicked()));
69
        connect(uniSaveButton, SIGNAL(clicked()), this, SLOT(uniSaveButton_clicked()));
70
        connect(uniClearButton, SIGNAL(clicked()), this, SLOT(uniClearButton_clicked()));
10817 subik 71
 
7353 subik 72
        loadUserContent(ScPaths::getApplicationDataDir() + "charpalette.ucp");
7087 subik 73
}
74
 
7353 subik 75
CharSelect::~CharSelect()
76
{
77
}
78
 
7087 subik 79
void CharSelect::setDoc(ScribusDoc* doc)
80
{
7101 subik 81
        if (m_doc != doc)
82
        {
83
                m_doc = doc;
9626 subik 84
                m_charTableModel->setDoc(m_doc);
85
                m_userTableModel->setDoc(m_doc);
7101 subik 86
                delEdit();
87
                setupRangeCombo();
88
                newCharClass(0);
89
        }
90
 
7087 subik 91
        if (!m_doc)
7353 subik 92
        {
93
                saveUserContent(ScPaths::getApplicationDataDir() + "charpalette.ucp");
7087 subik 94
                return;
7353 subik 95
        }
7087 subik 96
 
7101 subik 97
        QString oldFont(m_fontInUse);
7087 subik 98
        m_fontInUse = m_doc->currentStyle.charStyle().font().scName();
7662 jghali 99
        if (oldFont != m_fontInUse && !m_fontInUse.isEmpty())
7101 subik 100
        {
10648 fschmid 101
                setCurrentComboItem(fontSelector, m_fontInUse);
10493 fschmid 102
                newFont(fontSelector->currentIndex());
7101 subik 103
                unicodeButton->setFont((*m_doc->AllFonts)[m_fontInUse]);
104
        }
1202 fschmid 105
}
106
 
7087 subik 107
const QString & CharSelect::getCharacters()
108
{
7340 subik 109
        return chToIns;
7087 subik 110
}
111
 
1202 fschmid 112
void CharSelect::scanFont()
113
{
5986 avox 114
        uint  charcode;
115
        uint   gindex;
5980 avox 116
        QString   gname;
1202 fschmid 117
        allClasses.clear();
118
        charactersFull.clear();
119
        charactersLatin1.clear();
120
        charactersLatin1Supplement.clear();
121
        charactersLatinExtendedA.clear();
122
        charactersLatinExtendedB.clear();
123
        charactersGeneralPunctuation.clear();
124
        charactersSuperSubscripts.clear();
125
        charactersCurrencySymbols.clear();
126
        charactersLetterlikeSymbols.clear();
127
        charactersNumberForms.clear();
128
        charactersArrows.clear();
129
        charactersMathematicalOperators.clear();
130
        charactersBoxDrawing.clear();
131
        charactersBlockElements.clear();
132
        charactersGeometricShapes.clear();
133
        charactersMiscellaneousSymbols.clear();
134
        charactersDingbats.clear();
135
        charactersSmallFormVariants.clear();
136
        charactersAlphabeticPresentationForms.clear();
137
        charactersSpecial.clear();
138
        charactersGreek.clear();
139
        charactersGreekExtended.clear();
140
        charactersCyrillic.clear();
141
        charactersCyrillicSupplement.clear();
142
        charactersArabic.clear();
143
        charactersArabicPresentationFormsA.clear();
144
        charactersArabicPresentationFormsB.clear();
145
        charactersHebrew.clear();
6163 avox 146
        QMap<uint, std::pair<QChar, QString> > glyphs;
7087 subik 147
        (*m_doc->AllFonts)[m_fontInUse].glyphNames(glyphs);
6163 avox 148
        for (QMap<uint, std::pair<QChar, QString> >::iterator it=glyphs.begin();
5980 avox 149
                 it != glyphs.end(); ++it)
1202 fschmid 150
        {
10493 fschmid 151
                charcode = it.value().first.unicode();
6163 avox 152
                gindex = it.key();
10493 fschmid 153
                gname = it.value().second;
1202 fschmid 154
                charactersFull.append(charcode);
7101 subik 155
                if ((charcode >= 0x0020) && (charcode <= 0x007F))
1202 fschmid 156
                        charactersLatin1.append(charcode);
7101 subik 157
                else if ((charcode >= 0x0080) && (charcode <= 0x00FF))
1202 fschmid 158
                        charactersLatin1Supplement.append(charcode);
7101 subik 159
                else if ((charcode >= 0x0100) && (charcode <= 0x017F))
1202 fschmid 160
                        charactersLatinExtendedA.append(charcode);
7101 subik 161
                else if ((charcode >= 0x0180) && (charcode <= 0x024F))
1202 fschmid 162
                        charactersLatinExtendedB.append(charcode);
7101 subik 163
                else if ((charcode >= 0x0370) && (charcode <= 0x03FF))
1202 fschmid 164
                        charactersGreek.append(charcode);
7101 subik 165
                else if ((charcode >= 0x0400) && (charcode <= 0x04FF))
1202 fschmid 166
                        charactersCyrillic.append(charcode);
7101 subik 167
                else if ((charcode >= 0x0500) && (charcode <= 0x052F))
1202 fschmid 168
                        charactersCyrillicSupplement.append(charcode);
7101 subik 169
                else if ((charcode >= 0x0590) && (charcode <= 0x05FF))
1202 fschmid 170
                        charactersHebrew.append(charcode);
7101 subik 171
                else if ((charcode >= 0x0600) && (charcode <= 0x06FF))
1202 fschmid 172
                        charactersArabic.append(charcode);
7101 subik 173
                else if ((charcode >= 0x1F00) && (charcode <= 0x1FFF))
1202 fschmid 174
                        charactersGreekExtended.append(charcode);
7101 subik 175
                else if ((charcode >= 0x2000) && (charcode <= 0x206F))
1202 fschmid 176
                        charactersGeneralPunctuation.append(charcode);
7101 subik 177
                else if ((charcode >= 0x2070) && (charcode <= 0x209F))
1202 fschmid 178
                        charactersSuperSubscripts.append(charcode);
7101 subik 179
                else if ((charcode >= 0x20A0) && (charcode <= 0x20CF))
1202 fschmid 180
                        charactersCurrencySymbols.append(charcode);
7101 subik 181
                else if ((charcode >= 0x2100) && (charcode <= 0x214F))
1202 fschmid 182
                        charactersLetterlikeSymbols.append(charcode);
7101 subik 183
                else if ((charcode >= 0x2150) && (charcode <= 0x218F))
1202 fschmid 184
                        charactersNumberForms.append(charcode);
7101 subik 185
                else if ((charcode >= 0x2190) && (charcode <= 0x2190))
1202 fschmid 186
                        charactersArrows.append(charcode);
7101 subik 187
                else if ((charcode >= 0x2200) && (charcode <= 0x22FF))
1202 fschmid 188
                        charactersMathematicalOperators.append(charcode);
7101 subik 189
                else if ((charcode >= 0x2500) && (charcode <= 0x257F))
1202 fschmid 190
                        charactersBoxDrawing.append(charcode);
7101 subik 191
                else if ((charcode >= 0x2580) && (charcode <= 0x259F))
1202 fschmid 192
                        charactersBlockElements.append(charcode);
7101 subik 193
                else if ((charcode >= 0x25A0) && (charcode <= 0x25FF))
1202 fschmid 194
                        charactersGeometricShapes.append(charcode);
7101 subik 195
                else if ((charcode >= 0x2600) && (charcode <= 0x26FF))
1202 fschmid 196
                        charactersMiscellaneousSymbols.append(charcode);
7101 subik 197
                else if ((charcode >= 0x2700) && (charcode <= 0x27BF))
1202 fschmid 198
                        charactersDingbats.append(charcode);
7101 subik 199
                else if ((charcode >= 0xFE50) && (charcode <= 0xFE6F))
1202 fschmid 200
                        charactersSmallFormVariants.append(charcode);
7101 subik 201
                else if ((charcode >= 0xFB00) && (charcode <= 0xFB4F))
1202 fschmid 202
                        charactersAlphabeticPresentationForms.append(charcode);
7101 subik 203
                else if ((charcode >= 0xFB50) && (charcode <= 0xFDFF))
1202 fschmid 204
                        charactersArabicPresentationFormsA.append(charcode);
7101 subik 205
                else if ((charcode >= 0xFE70) && (charcode <= 0xFEFF))
1202 fschmid 206
                        charactersArabicPresentationFormsB.append(charcode);
7101 subik 207
                else if ((charcode >= 0xFFF0) && (charcode <= 0xFFFF))
1202 fschmid 208
                        charactersSpecial.append(charcode);
209
        }
210
        allClasses.append(charactersFull);
211
        allClasses.append(charactersLatin1);
212
        allClasses.append(charactersLatin1Supplement);
213
        allClasses.append(charactersLatinExtendedA);
214
        allClasses.append(charactersLatinExtendedB);
215
        allClasses.append(charactersGeneralPunctuation);
216
        allClasses.append(charactersSuperSubscripts);
217
        allClasses.append(charactersCurrencySymbols);
218
        allClasses.append(charactersLetterlikeSymbols);
219
        allClasses.append(charactersNumberForms);
220
        allClasses.append(charactersArrows);
221
        allClasses.append(charactersMathematicalOperators);
222
        allClasses.append(charactersBoxDrawing);
223
        allClasses.append(charactersBlockElements);
224
        allClasses.append(charactersGeometricShapes);
225
        allClasses.append(charactersMiscellaneousSymbols);
226
        allClasses.append(charactersDingbats);
227
        allClasses.append(charactersSmallFormVariants);
228
        allClasses.append(charactersAlphabeticPresentationForms);
229
        allClasses.append(charactersSpecial);
230
        allClasses.append(charactersGreek);
231
        allClasses.append(charactersGreekExtended);
232
        allClasses.append(charactersCyrillic);
233
        allClasses.append(charactersCyrillicSupplement);
234
        allClasses.append(charactersArabic);
235
        allClasses.append(charactersArabicPresentationFormsA);
236
        allClasses.append(charactersArabicPresentationFormsB);
237
        allClasses.append(charactersHebrew);
238
}
239
 
240
void CharSelect::setupRangeCombo()
241
{
242
        disconnect(rangeSelector, SIGNAL(activated(int)), this, SLOT(newCharClass(int)));
243
        int counter = 0;
244
        rangeSelector->clear();
10493 fschmid 245
        rangeSelector->addItem( tr("Full Character Set"));
1202 fschmid 246
        usedCharClasses.insert(counter, 0);
247
        counter++;
248
        if (charactersLatin1.count() != 0)
249
        {
10493 fschmid 250
                rangeSelector->addItem( tr("Basic Latin"));
1202 fschmid 251
                usedCharClasses.insert(counter, 1);
252
                counter++;
253
        }
254
        if (charactersLatin1Supplement.count() != 0)
255
        {
10493 fschmid 256
                rangeSelector->addItem( tr("Latin-1 Supplement"));
1202 fschmid 257
                usedCharClasses.insert(counter, 2);
258
                counter++;
259
        }
260
        if (charactersLatinExtendedA.count() != 0)
261
        {
10493 fschmid 262
                rangeSelector->addItem( tr("Latin Extended-A"));
1202 fschmid 263
                usedCharClasses.insert(counter, 3);
264
                counter++;
265
        }
266
        if (charactersLatinExtendedB.count() != 0)
267
        {
10493 fschmid 268
                rangeSelector->addItem( tr("Latin Extended-B"));
1202 fschmid 269
                usedCharClasses.insert(counter, 4);
270
                counter++;
271
        }
272
        if (charactersGeneralPunctuation.count() != 0)
273
        {
10493 fschmid 274
                rangeSelector->addItem( tr("General Punctuation"));
1202 fschmid 275
                usedCharClasses.insert(counter, 5);
276
                counter++;
277
        }
278
        if (charactersSuperSubscripts.count() != 0)
279
        {
10493 fschmid 280
                rangeSelector->addItem( tr("Super- and Subscripts"));
1202 fschmid 281
                usedCharClasses.insert(counter, 6);
282
                counter++;
283
        }
284
        if (charactersCurrencySymbols.count() != 0)
285
        {
10493 fschmid 286
                rangeSelector->addItem( tr("Currency Symbols"));
1202 fschmid 287
                usedCharClasses.insert(counter, 7);
288
                counter++;
289
        }
290
        if (charactersLetterlikeSymbols.count() != 0)
291
        {
10493 fschmid 292
                rangeSelector->addItem( tr("Letterlike Symbols"));
1202 fschmid 293
                usedCharClasses.insert(counter, 8);
294
                counter++;
295
        }
296
        if (charactersNumberForms.count() != 0)
297
        {
10493 fschmid 298
                rangeSelector->addItem( tr("Number Forms"));
1202 fschmid 299
                usedCharClasses.insert(counter, 9);
300
                counter++;
301
        }
302
        if (charactersArrows.count() != 0)
303
        {
10493 fschmid 304
                rangeSelector->addItem( tr("Arrows"));
1202 fschmid 305
                usedCharClasses.insert(counter, 10);
306
                counter++;
307
        }
308
        if (charactersMathematicalOperators.count() != 0)
309
        {
10493 fschmid 310
                rangeSelector->addItem( tr("Mathematical Operators"));
1202 fschmid 311
                usedCharClasses.insert(counter, 11);
312
                counter++;
313
        }
314
        if (charactersBoxDrawing.count() != 0)
315
        {
10493 fschmid 316
                rangeSelector->addItem( tr("Box Drawing"));
1202 fschmid 317
                usedCharClasses.insert(counter, 12);
318
                counter++;
319
        }
320
        if (charactersBlockElements.count() != 0)
321
        {
10493 fschmid 322
                rangeSelector->addItem( tr("Block Elements"));
1202 fschmid 323
                usedCharClasses.insert(counter, 13);
324
                counter++;
325
        }
326
        if (charactersGeometricShapes.count() != 0)
327
        {
10493 fschmid 328
                rangeSelector->addItem( tr("Geometric Shapes"));
1202 fschmid 329
                usedCharClasses.insert(counter, 14);
330
                counter++;
331
        }
332
        if (charactersMiscellaneousSymbols.count() != 0)
333
        {
10493 fschmid 334
                rangeSelector->addItem( tr("Miscellaneous Symbols"));
1202 fschmid 335
                usedCharClasses.insert(counter, 15);
336
                counter++;
337
        }
338
        if (charactersDingbats.count() != 0)
339
        {
10493 fschmid 340
                rangeSelector->addItem( tr("Dingbats"));
1202 fschmid 341
                usedCharClasses.insert(counter, 16);
342
                counter++;
343
        }
344
        if (charactersSmallFormVariants.count() != 0)
345
        {
10493 fschmid 346
                rangeSelector->addItem( tr("Small Form Variants"));
1202 fschmid 347
                usedCharClasses.insert(counter, 17);
348
                counter++;
349
        }
350
        if (charactersAlphabeticPresentationForms.count() != 0)
351
        {
10493 fschmid 352
                rangeSelector->addItem( tr("Ligatures"));
1202 fschmid 353
                usedCharClasses.insert(counter, 18);
354
                counter++;
355
        }
356
        if (charactersSpecial.count() != 0)
357
        {
10493 fschmid 358
                rangeSelector->addItem( tr("Specials"));
1202 fschmid 359
                usedCharClasses.insert(counter, 19);
360
                counter++;
361
        }
362
        if (charactersGreek.count() != 0)
363
        {
10493 fschmid 364
                rangeSelector->addItem( tr("Greek"));
1202 fschmid 365
                usedCharClasses.insert(counter, 20);
366
                counter++;
367
        }
368
        if (charactersGreekExtended.count() != 0)
369
        {
10493 fschmid 370
                rangeSelector->addItem( tr("Greek Extended"));
1202 fschmid 371
                usedCharClasses.insert(counter, 21);
372
                counter++;
373
        }
374
        if (charactersCyrillic.count() != 0)
375
        {
10493 fschmid 376
                rangeSelector->addItem( tr("Cyrillic"));
1202 fschmid 377
                usedCharClasses.insert(counter, 22);
378
                counter++;
379
        }
380
        if (charactersCyrillicSupplement.count() != 0)
381
        {
10493 fschmid 382
                rangeSelector->addItem( tr("Cyrillic Supplement"));
1202 fschmid 383
                usedCharClasses.insert(counter, 23);
384
                counter++;
385
        }
386
        if (charactersArabic.count() != 0)
387
        {
10493 fschmid 388
                rangeSelector->addItem( tr("Arabic"));
1202 fschmid 389
                usedCharClasses.insert(counter, 24);
390
                counter++;
391
        }
392
        if (charactersArabicPresentationFormsA.count() != 0)
393
        {
10493 fschmid 394
                rangeSelector->addItem( tr("Arabic Extended A"));
1202 fschmid 395
                usedCharClasses.insert(counter, 25);
396
                counter++;
397
        }
398
        if (charactersArabicPresentationFormsB.count() != 0)
399
        {
10493 fschmid 400
                rangeSelector->addItem( tr("Arabic Extended B"));
1202 fschmid 401
                usedCharClasses.insert(counter, 26);
402
                counter++;
403
        }
404
        if (charactersHebrew.count() != 0)
405
        {
10493 fschmid 406
                rangeSelector->addItem( tr("Hebrew"));
1202 fschmid 407
                usedCharClasses.insert(counter, 27);
408
                counter++;
409
        }
10493 fschmid 410
        rangeSelector->setCurrentIndex(0);
1202 fschmid 411
        connect(rangeSelector, SIGNAL(activated(int)), this, SLOT(newCharClass(int)));
412
}
413
 
414
void CharSelect::generatePreview(int charClass)
415
{
416
        characters.clear();
8670 cbradney 417
        if (charClass>=0 && charClass<allClasses.count())
418
                characters = allClasses[charClass];
9626 subik 419
        m_charTableModel->setCharacters(characters);
9654 fschmid 420
        m_charTable->resizeColumnsToContents();
421
        m_charTable->resizeRowsToContents();
1202 fschmid 422
}
423
 
424
void CharSelect::newCharClass(int c)
425
{
6683 subik 426
        m_characterClass = usedCharClasses[c];
427
        generatePreview(m_characterClass);
1202 fschmid 428
}
429
 
430
void CharSelect::newFont(int font)
431
{
6683 subik 432
        QString oldFont(m_fontInUse);
10493 fschmid 433
        m_fontInUse = fontSelector->itemText(font);
7662 jghali 434
        if (!m_fontInUse.isEmpty())
435
        {
9626 subik 436
                m_charTableModel->setFontInUse(m_fontInUse);
437
                m_userTableModel->setFontInUse(m_fontInUse);
7662 jghali 438
                unicodeButton->setFont((*m_doc->AllFonts)[m_fontInUse]);
439
                (*m_doc->AllFonts)[m_fontInUse].increaseUsage();
440
                if (!oldFont.isEmpty())
441
                        (*m_doc->AllFonts)[oldFont].decreaseUsage();
442
                delEdit();
443
                scanFont();
444
                generatePreview(0);
445
                m_characterClass = 0;
446
                setupRangeCombo();
447
        }
1202 fschmid 448
}
449
 
7534 subik 450
void CharSelect::userNewChar(uint i)
451
{
452
        emit insertUserSpecialChar(QChar(i));
453
}
454
 
6811 subik 455
void CharSelect::newChar(uint i)
1202 fschmid 456
{
6693 subik 457
        chToIns += QChar(i);
10493 fschmid 458
        sample->setPixmap(FontSample((*m_doc->AllFonts)[m_fontInUse], 28, chToIns, palette().color(QPalette::Window), true));
6693 subik 459
        insertButton->setEnabled(true);
460
        QString tmp;
461
        tmp.sprintf("%04X", i);
1202 fschmid 462
}
463
 
464
void CharSelect::delChar()
465
{
466
        if (chToIns.length() == 0)
467
                return;
468
        if (chToIns.length() == 1)
469
        {
470
                delEdit();
471
                return;
472
        }
473
        chToIns.truncate(chToIns.length() - 1);
10493 fschmid 474
        sample->setPixmap(FontSample((*m_doc->AllFonts)[m_fontInUse], 28, chToIns, palette().color(QPalette::Window), true));
1202 fschmid 475
        insertButton->setEnabled(true);
476
}
477
 
478
void CharSelect::delEdit()
479
{
480
        chToIns = "";
481
        QPixmap pm(1,28);
10493 fschmid 482
        pm.fill(palette().color(QPalette::Window));
1202 fschmid 483
        sample->setPixmap(pm);
484
        insertButton->setEnabled(false);
485
}
486
 
487
void CharSelect::insChar()
488
{
7087 subik 489
        emit insertSpecialChar();
490
}
491
 
492
void CharSelect::slot_insertSpecialChar()
493
{
494
        if (!m_Item)
495
                return;
496
 
5781 cbradney 497
        if (m_Item->HasSel)
498
                m_Item->asTextFrame()->deleteSelectedTextFromFrame();
499
        //CB: Avox please make text->insertchar(char) so none of this happens in gui code, and item can tell doc its changed so the view and mainwindow slotdocch are not necessary
8545 cbradney 500
        for (int a=0; a<chToIns.length(); ++a)
1202 fschmid 501
        {
5184 avox 502
                QChar ch = chToIns.at(a);
503
                if (ch == QChar(10))
504
                        ch = QChar(13);
505
                if (ch == QChar(9))
506
                        ch = QChar(32);
9646 avox 507
                m_Item->itemText.insertChars(m_Item->CPos, ch, true);
5781 cbradney 508
                m_Item->CPos += 1;
1202 fschmid 509
        }
7087 subik 510
        m_doc->view()->DrawNew();
511
        m_doc->changed();
5585 fschmid 512
        delEdit();
1202 fschmid 513
}
3475 cbradney 514
 
7534 subik 515
void CharSelect::slot_insertUserSpecialChar(QChar ch)
516
{
517
        if (!m_Item)
518
                return;
519
        if (m_Item->HasSel)
520
                m_Item->asTextFrame()->deleteSelectedTextFromFrame();
521
        //CB: Avox please make text->insertchar(char) so none of this happens in gui code, and item can tell doc its changed so the view and mainwindow slotdocch are not necessary
522
        if (ch == QChar(10))
523
                ch = QChar(13);
524
        if (ch == QChar(9))
525
                ch = QChar(32);
9646 avox 526
        m_Item->itemText.insertChars(m_Item->CPos, ch, true);
7534 subik 527
        m_Item->CPos += 1;
528
        m_doc->view()->DrawNew();
529
        m_doc->changed();
530
}
531
 
7050 subik 532
void CharSelect::hideCheck_clicked()
533
{
10817 subik 534
        // megahact #1 to keep user palette unchanged after rasizing
535
        QSize sz(m_quickPalette->size());
536
// 
8185 subik 537
        m_bigPalette->setShown(!hideCheck->isChecked());
10817 subik 538
        resize(sz); // megahack #2 to keep palette small
539
        m_quickPalette->resize(sz);
10472 subik 540
        updateGeometry();
7050 subik 541
        adjustSize();
10817 subik 542
 
7050 subik 543
}
7101 subik 544
 
545
void CharSelect::show()
546
{
547
        ScrPaletteBase::show();
9626 subik 548
        if (m_userTableModel->characters().count() > 0)
7101 subik 549
        {
550
                hideCheck->setChecked(true);
551
                hideCheck_clicked();
552
        }
553
}
554
 
555
void CharSelect::setEnabled(bool state, PageItem* item)
556
{
557
        ScrPaletteBase::setEnabled(state);
558
        m_Item = item;
559
        if (state)
560
                setDoc(m_doc);
561
}
7166 subik 562
 
563
void CharSelect::uniLoadButton_clicked()
564
{
10493 fschmid 565
        QString f = QFileDialog::getOpenFileName(this, tr("Choose a filename to open"), QDir::currentPath(), paletteFileMask);
7353 subik 566
        if (!f.isNull())
567
                loadUserContent(f);
568
}
7172 subik 569
 
7353 subik 570
void CharSelect::loadUserContent(QString f)
571
{
7166 subik 572
        CharClassDef newChars;
573
        QFile file(f);
7353 subik 574
        if (!file.exists())
575
                return;
8501 cbradney 576
        if (file.open(QIODevice::ReadOnly))
7166 subik 577
        {
8533 subik 578
                QTextStream stream(&file);
7166 subik 579
                QString line;
580
                while (!stream.atEnd())
581
                {
582
                        bool ok = false;
583
                        line = stream.readLine();
7172 subik 584
                        if (line.left(1) == "#")
585
                                continue; // don't mess with a comment
7166 subik 586
                        int val = line.toInt(&ok, 10);
587
                        if (ok)
588
                                newChars.append(val);
589
                        else
7172 subik 590
                        {
591
                                QMessageBox::warning(this, tr("Error"),
592
                                                                         "<qt>" + tr("Error reading file %1 - file is corrupted propably.").arg(f) + "</qt>",
593
                                                                         QMessageBox::Ok, QMessageBox::NoButton);
594
                                break;
595
                        }
7166 subik 596
                }
597
                file.close();
9626 subik 598
                m_userTableModel->setCharacters(newChars);
7166 subik 599
        }
600
}
601
 
602
void CharSelect::uniSaveButton_clicked()
603
{
9626 subik 604
        if (m_userTableModel->characters().count() == 0)
7172 subik 605
                return;
10493 fschmid 606
        QString f = QFileDialog::getSaveFileName(this, tr("Choose a filename to save under"), QDir::currentPath(), paletteFileMask);
7172 subik 607
        if (f.isNull() || !overwrite(this, f))
7166 subik 608
                return;
7353 subik 609
        saveUserContent(f);
610
}
611
 
612
void CharSelect::saveUserContent(QString f)
613
{
7166 subik 614
        QFile file(f);
8501 cbradney 615
        if (file.open(QIODevice::WriteOnly))
7166 subik 616
        {
8533 subik 617
                QTextStream stream(&file);
9626 subik 618
                CharClassDef chars = m_userTableModel->characters();
7172 subik 619
                stream << "# This is a character palette file for Scribus\n";
7166 subik 620
                for (CharClassDef::Iterator it = chars.begin(); it != chars.end(); ++it)
621
                        stream << (*it) << "\n";
622
                file.close();
623
        }
624
        else
7172 subik 625
                QMessageBox::warning(this, tr("Error"),
626
                                         "<qt>" + tr("Cannot write file %1").arg(f) + "</qt>",
627
                                         QMessageBox::Ok, QMessageBox::NoButton);
7166 subik 628
}
629
 
630
void CharSelect::uniClearButton_clicked()
631
{
9626 subik 632
        if (m_userTableModel->characters().count() > 0
7172 subik 633
                &&
634
                !QMessageBox::question(this, tr("Clean the Palette?"),
635
                                         "<qt>" + tr("You will clean all characters from this palette. Are you sure?") + "</qt>",
636
                                         CommonStrings::trYesKey, CommonStrings::trNoKey,
637
                                         QString::null, 0, 1 )
638
           )
639
        {
9626 subik 640
                m_userTableModel->setCharacters(CharClassDef());
7172 subik 641
        }
7166 subik 642
}