3 // Part of the Architektonas Project
4 // Originally part of QCad Community Edition by Andrew Mustun
5 // Extensively rewritten and refactored by James L. Hammons
6 // (C) 2010 Underground Software
8 // JLH = James L. Hammons <jlhamm@acm.org>
11 // --- ---------- -----------------------------------------------------------
12 // JLH 05/28/2010 Created this file. :-)
17 #include "rs_filterdxf.h"
19 #include "rs_system.h"
23 DlgText::DlgText(QWidget * parent/*= 0*/, Qt::WindowFlags flags/*= 0*/):
24 QDialog(parent, flags)
32 updateUniCharComboBox(0);
33 updateUniCharButton(0);
40 settings.beginGroup("Draw");
41 settings.setValue("TextHeight", ui.leHeight->text());
42 settings.setValue("TextFont", ui.cbFont->currentText());
43 settings.setValue("TextDefault", ui.cbDefault->isChecked());
44 settings.setValue("TextAlignment", getAlignment());
45 //settings.setValue("/TextLetterSpacing", leLetterSpacing->text());
46 //settings.setValue("/TextWordSpacing", leWordSpacing->text());
47 settings.setValue("TextLineSpacingFactor", ui.leLineSpacingFactor->text());
48 // settings.setValue("TextString", ui.teText->text());
49 settings.setValue("TextString", ui.teText->toPlainText());
50 //settings.setValue("/TextShape", getShape());
51 settings.setValue("TextAngle", ui.leAngle->text());
52 //settings.setValue("/TextRadius", leRadius->text());
57 void DlgText::updateUniCharComboBox(int)
59 QString t = ui.cbUniPage->currentText();
60 // int i1 = t.find('-');
61 int i1 = t.indexOf('-');
62 // int i2 = t.find(']');
63 int i2 = t.indexOf(']');
64 int min = t.mid(1, i1 - 1).toInt(NULL, 16);
65 int max = t.mid(i1 + 1, i2 - i1 - 1).toInt(NULL, 16);
66 ui.cbUniChar->clear();
68 for(int c=min; c<=max; c++)
71 sprintf(buf, "%04X", c);
72 // ui.cbUniChar->insertItem(QString("[%1] %2").arg(buf).arg(QChar(c)));
73 ui.cbUniChar->addItem(QString("[%1] %2").arg(buf).arg(QChar(c)));
78 * Sets the text entity represented by this dialog.
80 void DlgText::setText(RS_Text & t, bool isNew)
89 //QString letterSpacing;
90 //QString wordSpacing;
91 QString lineSpacingFactor;
98 settings.beginGroup("Draw");
99 //default font depending on locale
100 // Q3CString iso = RS_System::localeToISO( QTextCodec::locale() );
101 // QString iso = RS_System::localeToISO(QTextCodec::locale());
102 QString iso = RS_System::localeToISO(QLocale::system().name());
104 if (iso == "ISO8859-1")
105 fon = settings.value("TextFont", "normallatin1").toString();
106 else if (iso == "ISO8859-2")
107 fon = settings.value("TextFont", "normallatin2").toString();
108 else if (iso == "ISO8859-7")
109 fon = settings.value("TextFont", "greekc").toString();
110 else if (iso == "KOI8-U" || iso == "KOI8-R")
111 fon = settings.value("TextFont", "cyrillic_ii").toString();
113 fon = settings.value("TextFont", "standard").toString();
115 height = settings.value("TextHeight", "1.0").toString();
116 def = settings.value("TextDefault", true).toBool();
117 alignment = settings.value("TextAlignment", 1).toInt();
118 //letterSpacing = settings.value("/TextLetterSpacing", "0");
119 //wordSpacing = settings.value("/TextWordSpacing", "0");
120 lineSpacingFactor = settings.value("TextLineSpacingFactor", "1").toString();
121 str = settings.value("TextString", "").toString();
122 //shape = settings.value("/TextShape", "0");
123 angle = settings.value("TextAngle", "0").toString();
124 //radius = settings.value("/TextRadius", "10");
129 fon = text->getStyle();
131 height = QString("%1").arg(text->getHeight());
135 if (font->getLineSpacingFactor() == text->getLineSpacingFactor())
141 alignment = QString("%1").arg(text->getAlignment());
142 //QString letterSpacing = settings.value("/TextLetterSpacing", "0");
143 //QString wordSpacing = settings.value("/TextWordSpacing", "0");
144 lineSpacingFactor = QString("%1").arg(text->getLineSpacingFactor());
146 str = text->getText();
147 //QString shape = settings.value("/TextShape", "0");
148 angle = QString("%1").arg(RS_Math::rad2deg(text->getAngle()));
151 ui.cbDefault->setChecked(def == "1");
153 ui.leHeight->setText(height);
154 setAlignment(alignment.toInt());
156 if (def != "1" || font == NULL)
158 //leLetterSpacing->setText(letterSpacing);
159 //leWordSpacing->setText(wordSpacing);
160 ui.leLineSpacingFactor->setText(lineSpacingFactor);
164 //leLetterSpacing->setText(font->getLetterSpacing());
165 //leWordSpacing->setText(font->getWordSpacing());
166 ui.leLineSpacingFactor->setText(QString("%1").arg(font->getLineSpacingFactor()));
169 // ui.teText->setText(str);
170 ui.teText->setPlainText(str);
171 //setShape(shape.toInt());
172 ui.leAngle->setText(angle);
173 //leRadius->setText(radius);
174 ui.teText->setFocus();
175 ui.teText->selectAll();
179 * Updates the text entity represented by the dialog to fit the choices of the user.
181 void DlgText::updateText()
185 text->setStyle(ui.cbFont->currentText());
186 text->setHeight(ui.leHeight->text().toDouble());
187 // text->setText(RS_FilterDXF::toNativeString(ui.teText->text()));
188 text->setText(RS_FilterDXF::toNativeString(ui.teText->toPlainText()));
189 //text->setLetterSpacing(leLetterSpacing.toDouble());
190 text->setLineSpacingFactor(ui.leLineSpacingFactor->text().toDouble());
191 text->setAlignment(getAlignment());
192 text->setAngle(RS_Math::deg2rad(ui.leAngle->text().toDouble()));
196 void DlgText::setAlignmentTL()
201 void DlgText::setAlignmentTC()
206 void DlgText::setAlignmentTR()
211 void DlgText::setAlignmentML()
216 void DlgText::setAlignmentMC()
221 void DlgText::setAlignmentMR()
226 void DlgText::setAlignmentBL()
231 void DlgText::setAlignmentBC()
236 void DlgText::setAlignmentBR()
241 void DlgText::setAlignment(int a)
243 ui.bTL->setChecked(false);
244 ui.bTC->setChecked(false);
245 ui.bTR->setChecked(false);
246 ui.bML->setChecked(false);
247 ui.bMC->setChecked(false);
248 ui.bMR->setChecked(false);
249 ui.bBL->setChecked(false);
250 ui.bBC->setChecked(false);
251 ui.bBR->setChecked(false);
256 ui.bTL->setChecked(true);
259 ui.bTC->setChecked(true);
262 ui.bTR->setChecked(true);
265 ui.bML->setChecked(true);
268 ui.bMC->setChecked(true);
271 ui.bMR->setChecked(true);
274 ui.bBL->setChecked(true);
277 ui.bBC->setChecked(true);
280 ui.bBR->setChecked(true);
287 int DlgText::getAlignment()
289 if (ui.bTL->isChecked())
291 else if (ui.bTC->isChecked())
293 else if (ui.bTR->isChecked())
295 else if (ui.bML->isChecked())
297 else if (ui.bMC->isChecked())
299 else if (ui.bMR->isChecked())
301 else if (ui.bBL->isChecked())
303 else if (ui.bBC->isChecked())
305 else if (ui.bBR->isChecked())
311 void DlgText::setFont(const QString & f)
313 // ui.cbFont->setCurrentText(f);
314 ui.cbFont->setItemText(ui.cbFont->currentIndex(), f);
315 font = ui.cbFont->getFont();
316 defaultChanged(false);
320 void DlgText::setShape(int s) {
323 rbStraight->setChecked(true);
326 rbRound1->setChecked(true);
329 rbRound2->setChecked(true);
336 int DlgText::getShape() {
337 if (rbStraight->isOn()) {
339 } else if (rbRound1->isOn()) {
341 } else if (rbRound2->isOn()) {
348 void DlgText::defaultChanged(bool)
350 if (ui.cbDefault->isChecked() && font != NULL)
351 ui.leLineSpacingFactor->setText(QString("%1").arg(font->getLineSpacingFactor()));
354 void DlgText::loadText()
356 // QString fn = Q3FileDialog::getOpenFileName(QString::null, QString::null, this);
357 QString fn = QFileDialog::getOpenFileName(this);
363 void DlgText::load(const QString & fn)
367 if (!f.open(QIODevice::ReadOnly))
370 // Q3TextStream ts(&f);
372 // ui.teText->setText(ts.readAll());
373 ui.teText->setPlainText(ts.readAll());
376 void DlgText::saveText()
378 // QString fn = Q3FileDialog::getSaveFileName(QString::null, QString::null, this);
379 QString fn = QFileDialog::getSaveFileName(this);
385 void DlgText::save(const QString & fn)
387 // QString text = ui.teText->text();
388 QString text = ui.teText->toPlainText();
391 if (f.open(QIODevice::WriteOnly))
393 // Q3TextStream t(&f);
400 void DlgText::insertSymbol(int)
402 QString str = ui.cbSymbol->currentText();
403 // int i = str.find('(');
404 int i = str.indexOf('(');
407 // ui.teText->insert(QString("%1").arg(str.at(i + 1)));
408 ui.teText->insertPlainText(QString("%1").arg(str.at(i + 1)));
411 void DlgText::updateUniCharButton(int)
413 QString t = ui.cbUniChar->currentText();
414 // int i1 = t.find(']');
415 int i1 = t.indexOf(']');
416 int c = t.mid(1, i1 - 1).toInt(NULL, 16);
417 ui.bUnicode->setText(QString("%1").arg(QChar(c)));
420 void DlgText::insertChar()
422 QString t = ui.cbUniChar->currentText();
423 // int i1 = t.find(']');
424 int i1 = t.indexOf(']');
425 int c = t.mid(1, i1 - 1).toInt(NULL, 16);
426 // ui.teText->insert(QString("%1").arg(QChar(c)));
427 ui.teText->insertPlainText(QString("%1").arg(QChar(c)));