1
git-svn-id: svn://db.shs.com.ru/libs@1 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
151
qad_widgets/chardialog.cpp
Normal file
151
qad_widgets/chardialog.cpp
Normal file
@@ -0,0 +1,151 @@
|
||||
#include "chardialog.h"
|
||||
#include "ui_chardialog.h"
|
||||
|
||||
|
||||
CharDialog::CharDialog(QWidget * parent): QDialog(parent) {
|
||||
ui = new Ui::CharDialog();
|
||||
ui->setupUi(this);
|
||||
QChar c;
|
||||
int k;
|
||||
for (int i = 0; i < 256; ++i) {
|
||||
for (int j = 0; j < 256; ++j) {
|
||||
c = QChar(j, i);
|
||||
k = c.category();
|
||||
if (chars.size() <= k)
|
||||
chars.resize(k + 1);
|
||||
if (!c.isPrint()) continue;
|
||||
|
||||
chars[k].push_back(c);
|
||||
}
|
||||
}
|
||||
size = 30;
|
||||
QStringList cat;
|
||||
cat << tr("No Category") << tr("Mark NonSpacing") << tr("Mark SpacingCombining") << tr("Mark Enclosing")
|
||||
<< tr("Number DecimalDigit") << tr("Number Letter") << tr("Number Other") << tr("Separator Space")
|
||||
<< tr("Separator Line") << tr("Separator Paragraph") << tr("Other Control") << tr("Other Format")
|
||||
<< tr("Other Surrogate") << tr("Other PrivateUse") << tr("Other NotAssigned") << tr("Letter Uppercase")
|
||||
<< tr("Letter Lowercase") << tr("Letter Titlecase") << tr("Letter Modifier") << tr("Letter Other")
|
||||
<< tr("Punctuation Connector") << tr("Punctuation Dash") << tr("Punctuation Open") << tr("Punctuation Close")
|
||||
<< tr("Punctuation InitialQuote") << tr("Punctuation FinalQuote") << tr("Punctuation Other") << tr("Symbol Math")
|
||||
<< tr("Symbol Currency") << tr("Symbol Modifier") << tr("Symbol Other");
|
||||
ui->comboCategory->addItems(cat);
|
||||
ui->spinSize->setValue(size);
|
||||
ui->comboCategory->setCurrentIndex(27);
|
||||
ui->tableChars->viewport()->installEventFilter(this);
|
||||
}
|
||||
|
||||
|
||||
CharDialog::~CharDialog() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
void CharDialog::setCharFont(const QFont & f) {
|
||||
QFont fnt = ui->tableChars->font();
|
||||
fnt.setFamily(f.family());
|
||||
ui->tableChars->setFont(fnt);
|
||||
}
|
||||
|
||||
|
||||
void CharDialog::changeEvent(QEvent * e) {
|
||||
if (e->type() == QEvent::LanguageChange) {
|
||||
ui->retranslateUi(this);
|
||||
QStringList cat;
|
||||
cat << tr("No Category") << tr("Mark NonSpacing") << tr("Mark SpacingCombining") << tr("Mark Enclosing")
|
||||
<< tr("Number DecimalDigit") << tr("Number Letter") << tr("Number Other") << tr("Separator Space")
|
||||
<< tr("Separator Line") << tr("Separator Paragraph") << tr("Other Control") << tr("Other Format")
|
||||
<< tr("Other Surrogate") << tr("Other PrivateUse") << tr("Other NotAssigned") << tr("Letter Uppercase")
|
||||
<< tr("Letter Lowercase") << tr("Letter Titlecase") << tr("Letter Modifier") << tr("Letter Other")
|
||||
<< tr("Punctuation Connector") << tr("Punctuation Dash") << tr("Punctuation Open") << tr("Punctuation Close")
|
||||
<< tr("Punctuation InitialQuote") << tr("Punctuation FinalQuote") << tr("Punctuation Other") << tr("Symbol Math")
|
||||
<< tr("Symbol Currency") << tr("Symbol Modifier") << tr("Symbol Other");
|
||||
int pi = ui->comboCategory->currentIndex();
|
||||
ui->comboCategory->clear();
|
||||
ui->comboCategory->addItems(cat);
|
||||
ui->comboCategory->setCurrentIndex(pi);
|
||||
return;
|
||||
}
|
||||
QDialog::changeEvent(e);
|
||||
}
|
||||
|
||||
|
||||
bool CharDialog::eventFilter(QObject * o, QEvent * e) {
|
||||
if (o == ui->tableChars->viewport()) {
|
||||
if (e->type() != QEvent::Wheel)
|
||||
return QDialog::eventFilter(o, e);
|
||||
qApp->sendEvent(ui->verticalScroll, e);
|
||||
}
|
||||
return QDialog::eventFilter(o, e);
|
||||
}
|
||||
|
||||
|
||||
void CharDialog::resizeEvent(QResizeEvent * ) {
|
||||
int r = ui->tableChars->contentsRect().height() / csize, c = ui->tableChars->contentsRect().width() / csize;
|
||||
ui->tableChars->setRowCount(r);
|
||||
ui->tableChars->setColumnCount(c);
|
||||
for (int i = 0; i < r; ++i) {
|
||||
for (int j = 0; j < c; ++j) {
|
||||
if (ui->tableChars->item(i, j) == 0) {
|
||||
ui->tableChars->setItem(i, j, new QTableWidgetItem());
|
||||
ui->tableChars->item(i, j)->setTextAlignment(Qt::AlignCenter);
|
||||
}
|
||||
}
|
||||
}
|
||||
on_comboCategory_currentIndexChanged(ui->comboCategory->currentIndex());
|
||||
}
|
||||
|
||||
|
||||
void CharDialog::clear() {
|
||||
for (int i = 0; i < ui->tableChars->rowCount(); ++i)
|
||||
for (int j = 0; j < ui->tableChars->columnCount(); ++j)
|
||||
ui->tableChars->item(i, j)->setText(QString());
|
||||
}
|
||||
|
||||
|
||||
void CharDialog::on_comboCategory_currentIndexChanged(int index) {
|
||||
if (index < 0) return;
|
||||
int r = ui->tableChars->rowCount(), c = ui->tableChars->columnCount(), m;
|
||||
cur = &chars[index];
|
||||
if (r == 0) return;
|
||||
m = (cur->size() - 2) / c - r + 1;
|
||||
if (m < 0) m = 0;
|
||||
ui->verticalScroll->setMinimum(0);
|
||||
ui->verticalScroll->setMaximum(m);
|
||||
on_verticalScroll_valueChanged(ui->verticalScroll->value());
|
||||
}
|
||||
|
||||
|
||||
void CharDialog::on_verticalScroll_valueChanged(int index) {
|
||||
int ci = ui->tableChars->columnCount() * index;
|
||||
for (int i = 0; i < ui->tableChars->rowCount(); ++i) {
|
||||
for (int j = 0; j < ui->tableChars->columnCount(); ++j) {
|
||||
++ci;
|
||||
if (cur->size() > ci) ui->tableChars->item(i, j)->setText(cur->at(ci));
|
||||
else ui->tableChars->item(i, j)->setText(QString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CharDialog::on_spinSize_valueChanged(int index) {
|
||||
size = index;
|
||||
csize = size * 2;
|
||||
ui->tableChars->horizontalHeader()->setDefaultSectionSize(csize);
|
||||
ui->tableChars->verticalHeader()->setDefaultSectionSize(csize);
|
||||
on_comboCategory_currentIndexChanged(ui->comboCategory->currentIndex());
|
||||
QFont font = ui->tableChars->font();
|
||||
font.setPointSize(size);
|
||||
ui->tableChars->setFont(font);
|
||||
resizeEvent(0);
|
||||
}
|
||||
|
||||
|
||||
void CharDialog::on_tableChars_cellPressed(int row, int column) {
|
||||
sel_char = ui->tableChars->item(row, column)->text()[0];
|
||||
}
|
||||
|
||||
|
||||
void CharDialog::on_buttonBox_accepted() {
|
||||
emit charSelected(sel_char);
|
||||
accept();
|
||||
}
|
||||
Reference in New Issue
Block a user