mirror of
https://github.com/epasveer/seer.git
synced 2026-08-31 01:20:45 +08:00
264 lines
9.1 KiB
C++
264 lines
9.1 KiB
C++
#include "SeerEditorConfigPage.h"
|
|
#include "QColorButton.h"
|
|
#include <QtGui/QFontDatabase>
|
|
#include <QtWidgets/QWidget>
|
|
#include <QtWidgets/QSpinBox>
|
|
#include <QtWidgets/QFontDialog>
|
|
#include <QtWidgets/QComboBox>
|
|
#include <QtCore/QDebug>
|
|
|
|
SeerEditorConfigPage::SeerEditorConfigPage(QWidget* parent) : QWidget(parent) {
|
|
|
|
// Set up the UI.
|
|
setupUi(this);
|
|
|
|
//
|
|
// Setup the widgets
|
|
//
|
|
|
|
// Set example text.
|
|
editorWidget->sourceArea()->openText("/*\n"
|
|
" * Seer, Copyright 2021 (c)\n"
|
|
" * Ernie Pasveer (epasveer@att.net)\n"
|
|
" */\n"
|
|
"int main(int argc, char* argv[]) {\n"
|
|
"\n"
|
|
" std::cout << \"Hello, Seer!\"; // Greetings\n"
|
|
"\n"
|
|
" return 0;\n"
|
|
"}",
|
|
"sample.cpp");
|
|
|
|
// Connect things.
|
|
QObject::connect(fontSizeComboBox, &QComboBox::currentTextChanged, this, &SeerEditorConfigPage::handleFontSizeChanged);
|
|
QObject::connect(fontNameComboBox, &QFontComboBox::currentFontChanged, this, &SeerEditorConfigPage::handleFontChanged);
|
|
QObject::connect(fontDialogButton, &QToolButton::clicked, this, &SeerEditorConfigPage::handleFontDialog);
|
|
QObject::connect(highlighterEnabledCheckBox, &QToolButton::clicked, this, &SeerEditorConfigPage::handleEnabledChanged);
|
|
|
|
// Set the default font and highlighter.
|
|
handleFontChanged(QFont("Source Code Pro", 10));
|
|
setHighlighterSettings(SeerHighlighterSettings::populateForCPP());
|
|
setHighlighterEnabled(true);
|
|
}
|
|
|
|
SeerEditorConfigPage::~SeerEditorConfigPage() {
|
|
}
|
|
|
|
void SeerEditorConfigPage::setEditorFont (const QFont& font) {
|
|
|
|
handleFontChanged(font);
|
|
}
|
|
|
|
const QFont& SeerEditorConfigPage::editorFont () const {
|
|
|
|
return _font;
|
|
}
|
|
|
|
void SeerEditorConfigPage::setHighlighterSettings (const SeerHighlighterSettings& settings) {
|
|
|
|
_highlighterSettings = settings;
|
|
|
|
// Clear the table contents.
|
|
highlighterTableWidget->setRowCount(0);
|
|
|
|
// Get a list of keys from the highlighter.
|
|
QStringList keys = _highlighterSettings.keys();
|
|
|
|
// Loop through each key and get its info.
|
|
// Construct a table entry.
|
|
for (int r=0; r<keys.size(); r++) {
|
|
|
|
QString key = keys[r];
|
|
|
|
QTextCharFormat format = _highlighterSettings.get(key);
|
|
|
|
highlighterTableWidget->insertRow(r);
|
|
|
|
// Insert the font weight.
|
|
QComboBox* fontWeightBox = new QComboBox;
|
|
fontWeightBox->addItem("Normal");
|
|
fontWeightBox->addItem("Bold");
|
|
|
|
if (format.fontWeight() == QFont::Normal) {
|
|
fontWeightBox->setCurrentText("Normal");
|
|
}else if (format.fontWeight() == QFont::Bold) {
|
|
fontWeightBox->setCurrentText("Bold");
|
|
}else{
|
|
fontWeightBox->setCurrentText("Normal");
|
|
}
|
|
|
|
highlighterTableWidget->setCellWidget(r, 0, fontWeightBox);
|
|
|
|
// Insert the font italic.
|
|
QComboBox* fontItalicBox = new QComboBox;
|
|
fontItalicBox->addItem("Normal");
|
|
fontItalicBox->addItem("Italic");
|
|
|
|
if (format.fontItalic() == false) {
|
|
fontItalicBox->setCurrentText("Normal");
|
|
}else if (format.fontItalic() == true) {
|
|
fontItalicBox->setCurrentText("Italic");
|
|
}else{
|
|
fontItalicBox->setCurrentText("Normal");
|
|
}
|
|
|
|
highlighterTableWidget->setCellWidget(r, 1, fontItalicBox);
|
|
|
|
// Insert the font color.
|
|
QColorButton* foregroundColorButton = new QColorButton;
|
|
foregroundColorButton->setColor(format.foreground().color());
|
|
//foregroundColorButton->setFixedWidth(50);
|
|
|
|
QColorButton* backgroundColorButton = new QColorButton;
|
|
backgroundColorButton->setColor(format.background().color());
|
|
//backgroundColorButton->setFixedWidth(50);
|
|
|
|
highlighterTableWidget->setCellWidget(r, 2, foregroundColorButton);
|
|
highlighterTableWidget->setCellWidget(r, 3, backgroundColorButton);
|
|
|
|
// Connect things to watch for changes.
|
|
QObject::connect(fontWeightBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &SeerEditorConfigPage::handleHighlighterChanged);
|
|
QObject::connect(fontItalicBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &SeerEditorConfigPage::handleHighlighterChanged);
|
|
QObject::connect(foregroundColorButton, &QColorButton::colorChanged, this, &SeerEditorConfigPage::handleHighlighterChanged);
|
|
QObject::connect(backgroundColorButton, &QColorButton::colorChanged, this, &SeerEditorConfigPage::handleHighlighterChanged);
|
|
}
|
|
|
|
highlighterTableWidget->setVerticalHeaderLabels(keys);
|
|
|
|
highlighterTableWidget->resizeColumnToContents(0); // Weight
|
|
highlighterTableWidget->resizeColumnToContents(1); // Italic
|
|
highlighterTableWidget->resizeColumnToContents(2); // Foreground color
|
|
highlighterTableWidget->resizeColumnToContents(3); // Background color
|
|
|
|
// Update our sample editor.
|
|
editorWidget->sourceArea()->setHighlighterSettings(highlighterSettings());
|
|
}
|
|
|
|
const SeerHighlighterSettings& SeerEditorConfigPage::highlighterSettings() const {
|
|
|
|
return _highlighterSettings;
|
|
}
|
|
|
|
void SeerEditorConfigPage::setHighlighterEnabled (bool flag) {
|
|
|
|
highlighterEnabledCheckBox->setChecked(flag);
|
|
|
|
editorWidget->sourceArea()->setHighlighterEnabled(flag);
|
|
}
|
|
|
|
bool SeerEditorConfigPage::highlighterEnabled () const {
|
|
|
|
return editorWidget->sourceArea()->highlighterEnabled();
|
|
}
|
|
|
|
void SeerEditorConfigPage::handleFontSizeChanged (const QString& text) {
|
|
|
|
// Convert the text size to a number.
|
|
int size = text.toInt();
|
|
|
|
// Guard against a bad size.
|
|
if (size <= 0) {
|
|
return;
|
|
}
|
|
|
|
// Set its size.
|
|
_font.setPointSize(size);
|
|
|
|
// Display our example text with the new font.
|
|
editorWidget->sourceArea()->setFont(_font);
|
|
}
|
|
|
|
void SeerEditorConfigPage::handleFontChanged (const QFont& font) {
|
|
|
|
// Create a font database.
|
|
QFontDatabase fontDatabase;
|
|
|
|
// Clear the font size list.
|
|
QStringList sizes;
|
|
fontSizeComboBox->clear();
|
|
|
|
// Populate the font size list from the given font.
|
|
foreach (int points, fontDatabase.smoothSizes(font.family(), font.styleName())) {
|
|
sizes.append(QString::number(points));
|
|
}
|
|
|
|
fontSizeComboBox->addItems(sizes);
|
|
|
|
// Set the current font size in the list.
|
|
fontSizeComboBox->setCurrentText(QString::number(font.pointSize()));
|
|
|
|
// Set the current font family in the list.
|
|
fontNameComboBox->setCurrentFont(font);
|
|
|
|
// Display our example text with the new font.
|
|
editorWidget->sourceArea()->setFont(font);
|
|
|
|
// Save the new font.
|
|
_font = font;
|
|
}
|
|
|
|
void SeerEditorConfigPage::handleFontDialog () {
|
|
|
|
bool ok;
|
|
|
|
QFont font = QFontDialog::getFont(&ok, _font, this, "Select a font for the editors", QFontDialog::MonospacedFonts);
|
|
|
|
if (ok) {
|
|
handleFontChanged(font);
|
|
}
|
|
}
|
|
|
|
void SeerEditorConfigPage::handleHighlighterChanged () {
|
|
|
|
SeerHighlighterSettings cppSettings;
|
|
|
|
for (int r=0; r<highlighterTableWidget->rowCount(); r++) {
|
|
|
|
// Get the key (label) for this row.
|
|
QString key = highlighterTableWidget->verticalHeaderItem(r)->text();
|
|
|
|
// Get widgets for this row.
|
|
QComboBox* fontWeightBox = dynamic_cast<QComboBox*>(highlighterTableWidget->cellWidget(r,0));
|
|
QComboBox* fontItalicBox = dynamic_cast<QComboBox*>(highlighterTableWidget->cellWidget(r,1));
|
|
QColorButton* foregroundColorButton = dynamic_cast<QColorButton*>(highlighterTableWidget->cellWidget(r,2));
|
|
QColorButton* backgroundColorButton = dynamic_cast<QColorButton*>(highlighterTableWidget->cellWidget(r,3));
|
|
|
|
// Create an empty format.
|
|
QTextCharFormat format;
|
|
|
|
// Set the font weight.
|
|
if (fontWeightBox->currentText() == "Normal") {
|
|
format.setFontWeight(QFont::Normal);
|
|
}else if (fontWeightBox->currentText() == "Bold") {
|
|
format.setFontWeight(QFont::Bold);
|
|
}else{
|
|
format.setFontWeight(QFont::Normal);
|
|
}
|
|
|
|
// Set the font italic.
|
|
if (fontItalicBox->currentText() == "Normal") {
|
|
format.setFontItalic(false);
|
|
}else if (fontItalicBox->currentText() == "Italic") {
|
|
format.setFontItalic(true);
|
|
}else{
|
|
format.setFontItalic(false);
|
|
}
|
|
|
|
// Set the font color.
|
|
format.setForeground(foregroundColorButton->color());
|
|
format.setBackground(backgroundColorButton->color());
|
|
|
|
// Add the format to our settings.
|
|
cppSettings.add(key, format);
|
|
}
|
|
|
|
// Update our view.
|
|
setHighlighterSettings(cppSettings);
|
|
}
|
|
|
|
void SeerEditorConfigPage::handleEnabledChanged () {
|
|
|
|
setHighlighterEnabled(highlighterEnabledCheckBox->isChecked());
|
|
}
|
|
|