#include "stylemodel.h" #include #include #include #include StyleItem::StyleItem(QString name, QString font, QString size) { styleName = name; styleFont = font; styleSize = size; styleColor = QColor(Qt::black); styleBold = false; styleItalic = false; styleUnderline = false; styleAlignment = 0; } StyleItem::StyleItem(QString name, QString font, QString size, int red, int green, int blue, bool bold, bool italic, bool underline, int alignment) { styleName = name; styleFont = font; styleSize = size; styleColor = QColor(red, green, blue); styleBold = bold; styleItalic = italic; styleUnderline = underline; styleAlignment = alignment; } StyleManager::StyleManager() { styleList = new QList(); readStyles(); } StyleManager::~StyleManager() { saveStyles(); StyleItem *item; foreach (item, *styleList) delete item; delete styleList; } QString StyleManager::getStyleName(int index) { StyleItem *item = styleList->at(index); return item->styleName; } QString StyleManager::getStyleFont(int index) { StyleItem *item = styleList->at(index); return item->styleFont; } QString StyleManager::getStyleSize(int index) { StyleItem *item = styleList->at(index); return item->styleSize; } QColor StyleManager::getStyleColor(int index) { StyleItem *item = styleList->at(index); return item->styleColor; } bool StyleManager::getStyleBold(int index) { StyleItem *item = styleList->at(index); return item->styleBold; } bool StyleManager::getStyleItalic(int index) { StyleItem *item = styleList->at(index); return item->styleItalic; } bool StyleManager::getStyleUnderline(int index) { StyleItem *item = styleList->at(index); return item->styleUnderline; } int StyleManager::getStyleAlignment(int index) { StyleItem *item = styleList->at(index); return item->styleAlignment; } int StyleManager::getStyleCount() { return styleList->count(); } void StyleManager::setStyleFont(int index, QString font) { StyleItem *item = styleList->at(index); item->styleFont = font; } void StyleManager::setStyleSize(int index, QString size) { StyleItem *item = styleList->at(index); item->styleSize = size; } void StyleManager::setStyleColor(int index, QColor color) { StyleItem *item = styleList->at(index); item->styleColor = color; } void StyleManager::setStyleBold(int index, bool bold) { StyleItem *item = styleList->at(index); item->styleBold = bold; } void StyleManager::setStyleItalic(int index, bool italic) { StyleItem *item = styleList->at(index); item->styleItalic = italic; } void StyleManager::setStyleUnderline(int index, bool underline) { StyleItem *item = styleList->at(index); item->styleUnderline = underline; } void StyleManager::setStyleAlignment(int index, int alignment) { StyleItem *item = styleList->at(index); item->styleAlignment = alignment; } int StyleManager::addStyle(QString name, QString font, QString size) { int index = styleList->size(); StyleItem *styleItem = new StyleItem(name, font, size); styleList->insert(index, styleItem); return index; } void StyleManager::updateModelWithCurrentList(QListWidget *list) { int styleIndex; StyleItem *styleItem; QList *newList = new QList(); QListWidgetItem *item; for (int i = 0; i < list->count(); i++) { item = list->item(i); styleIndex = item->data(Qt::UserRole).toUInt(); styleItem = styleList->at(styleIndex); newList->append(styleItem); } delete styleList; styleList = newList; } void StyleManager::readStyles() { #ifdef Q_WS_WIN QString filename = "styles.xml"; #else QString filename = QDir::toNativeSeparators(QDir::homePath() + "/.config/nagaina/") + "styles.xml"; #endif QDomDocument doc; QFile file(filename); if (!file.open(QIODevice::ReadOnly)) return; if (!doc.setContent(&file)) { file.close(); return; } file.close(); QDomElement root = doc.documentElement(); QDomElement node = root.toElement(); QString tagName; QString styleName; QString styleFont; QString styleSize; int styleRed; int styleGreen; int styleBlue; bool styleBold; bool styleItalic; bool styleUnderline; int styleAlignment; StyleItem *styleItem; // Loop on the nodes. while (!node.isNull()) { QDomElement child = node.firstChildElement(); while (!child.isNull()) { tagName = child.tagName(); if (tagName == "style") { styleName = child.attribute("name"); styleFont = child.attribute("font"); styleSize = child.attribute("size"); styleRed = child.attribute("red").toUInt(); styleGreen = child.attribute("green").toUInt(); styleBlue = child.attribute("blue").toUInt(); styleBold = (child.attribute("bold") == "true") ? true : false; styleItalic = (child.attribute("italic") == "true") ? true : false; styleUnderline = (child.attribute("underline") == "true") ? true : false; styleAlignment = child.attribute("alignment").toUInt(); styleItem = new StyleItem(styleName, styleFont, styleSize, styleRed, styleGreen, styleBlue, styleBold, styleItalic, styleUnderline, styleAlignment); styleList->append(styleItem); } child = child.nextSiblingElement(); } node = node.nextSiblingElement(); } } void StyleManager::saveStyles() { #ifdef Q_WS_WIN QString filename = "styles.xml"; #else QString filename = QDir::toNativeSeparators(QDir::homePath() + "/.config/nagaina/") + "styles.xml"; #endif QDomDocument doc; QDomElement element; QTextStream out; QFile file; StyleItem *styleItem; // Create the base element "document". QDomElement root = doc.createElement("styles"); doc.appendChild(root); // Setup the file file.setFileName(filename); if (!file.open(QIODevice::WriteOnly)) return; out.setDevice(&file); for (int i = 0; i < styleList->count(); i++) { styleItem = styleList->at(i); element = doc.createElement("style"); root.appendChild(element); element.setAttribute("name", styleItem->styleName); element.setAttribute("font", styleItem->styleFont); element.setAttribute("size", styleItem->styleSize); element.setAttribute("red", styleItem->styleColor.red()); element.setAttribute("green", styleItem->styleColor.green()); element.setAttribute("blue", styleItem->styleColor.blue()); element.setAttribute("bold", styleItem->styleBold ? "true" : "false"); element.setAttribute("italic", styleItem->styleItalic ? "true" : "false"); element.setAttribute("underline", styleItem->styleUnderline ? "true" : "false"); element.setAttribute("alignment", styleItem->styleAlignment); } // Insert at the begining of the document. QDomNode node = doc.createProcessingInstruction("xml","version=\"1.0\""); doc.insertBefore(node, doc.firstChild()); // write the file. doc.save(out, 2); file.close(); } void StyleManager::updateComboStyle(QComboBox *comboStyle) { StyleItem *styleItem; QString currentText; if (comboStyle->count() > 0) currentText = comboStyle->currentText(); else currentText = ""; comboStyle->clear(); for (int i = 0; i < styleList->count(); i++) { styleItem = styleList->at(i); comboStyle->addItem(styleItem->styleName, i); } if (currentText != "") { int index = comboStyle->findText(currentText); if (index != -1) comboStyle->setCurrentIndex(index); else comboStyle->setCurrentIndex(0); } else comboStyle->setCurrentIndex(0); }