43feab8 Test to change the static const array and load wanted data in QSettings but do not work.

* xml.cpp: Create the function "fillSettings" that store wanted data from the array in settings with group string for hierarchy. * regionwidget.cpp: Try to implement the function "createItem" which take a GraphicsRegion and load data from QSettings with it. Do not wok because can t get the string from the enum and casting the enum in int and string do not work in that case. * configs.h: Implement functions to get/ set data from groups of settings created in xml.cpp. --- GScribo/GScribo.pro | 4 +- GScribo/GScribo.pro.user | 26 +++++---- GScribo/Preferences/generaloptions.cpp | 4 +- GScribo/Preferences/ocroptions.cpp | 6 +-- GScribo/Preferences/preprocessingoptions.cpp | 6 +- GScribo/Preferences/segmentationoptions.cpp | 2 - GScribo/configs.h | 32 +++++++++++- GScribo/mainwindow.cpp | 7 ++- GScribo/mainwindow.h | 6 +- GScribo/region.h | 19 ++++--- GScribo/regionwidget.cpp | 56 +++++++++++++-------- GScribo/regionwidget.h | 7 +-- GScribo/xml.cpp | 70 ++++++++++++++++++++++++-- GScribo/xml.h | 24 +-------- 14 files changed, 174 insertions(+), 95 deletions(-) diff --git a/GScribo/GScribo.pro b/GScribo/GScribo.pro index 9a7f566..d845d32 100644 --- a/GScribo/GScribo.pro +++ b/GScribo/GScribo.pro @@ -19,17 +19,18 @@ SOURCES += main.cpp \ Rendering/regionitem.cpp \ PagesWidget/pageswidget.cpp \ PagesWidget/pagesmodel.cpp \ + PagesWidget/pagesdelegate.cpp \ Preferences/segmentationoptions.cpp \ Preferences/preprocessingoptions.cpp \ Preferences/ocroptions.cpp \ Preferences/generaloptions.cpp \ Preferences/preferencesdialog.cpp \ + Processing/progressdialog.cpp \ XmlWidget/xmlwidget.cpp \ XmlWidget/xmlmodel.cpp \ XmlWidget/xmlitem.cpp \ XmlWidget/xmlattributes.cpp \ XmlWidget/attributesmodel.cpp \ - PagesWidget/pagesdelegate.cpp \ XmlWidget/xmlview.cpp \ regionwidget.cpp HEADERS += mainwindow.h \ @@ -49,6 +50,7 @@ HEADERS += mainwindow.h \ Preferences/generaloptions.h \ Preferences/optionwidget.h \ Preferences/preferencesdialog.h \ + Processing/progressdialog.h \ XmlWidget/xmlwidget.h \ XmlWidget/xmlmodel.h \ XmlWidget/xmlitem.h \ diff --git a/GScribo/GScribo.pro.user b/GScribo/GScribo.pro.user index c09700a..f152178 100644 --- a/GScribo/GScribo.pro.user +++ b/GScribo/GScribo.pro.user @@ -76,7 +76,7 @@ <valuemap type="QVariantMap"> <value key="ProjectExplorer.BuildConfiguration.DisplayName" type="QString">Debug</value> <valuelist key="abstractProcess.Environment" type="QVariantList"> - <value type="QString">DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-03fTGGiTWR,guid=f9287e073281b805202d469e0005349f</value> + <value type="QString">DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-bUeJ6Q6yr3,guid=f61c0677e7161026c52fc89400064242</value> <value type="QString">DESKTOP_SESSION=fluxbox</value> <value type="QString">DISPLAY=:0.0</value> <value type="QString">GDMSESSION=fluxbox</value> @@ -85,6 +85,7 @@ <value type="QString">GTK_MODULES=canberra-gtk-module</value> <value type="QString">HOME=/lrde/home/stage/froger_a</value> <value type="QString">LANG=fr_FR.UTF-8</value> + <value type="QString">LANGUAGE=</value> <value type="QString">LD_LIBRARY_PATH=/usr/lib/qtcreator</value> <value type="QString">LOGNAME=froger_a</value> <value type="QString">OLDPWD=/lrde/home/stage/froger_a/qt</value> @@ -93,16 +94,16 @@ <value type="QString">QTDIR=/usr/share/qt4</value> <value type="QString">SHELL=/bin/bash</value> <value type="QString">SHLVL=2</value> - <value type="QString">SSH_AGENT_PID=25183</value> - <value type="QString">SSH_AUTH_SOCK=/tmp/ssh-WbmKk25130/agent.25130</value> + <value type="QString">SSH_AGENT_PID=29535</value> + <value type="QString">SSH_AUTH_SOCK=/tmp/ssh-PCwYf29482/agent.29482</value> <value type="QString">TERM=xterm</value> <value type="QString">USER=froger_a</value> <value type="QString">USERNAME=froger_a</value> <value type="QString">WINDOWID=10485796</value> - <value type="QString">WINDOWPATH=7:8:8:8:8</value> - <value type="QString">XAUTHORITY=/tmp/.gdmYZ8GSW</value> + <value type="QString">WINDOWPATH=7:8:8:8:8:8</value> + <value type="QString">XAUTHORITY=/tmp/.gdmQ6NBSW</value> <value type="QString">XDG_DATA_DIRS=/usr/local/share/:/usr/share/:/usr/share/gdm/</value> - <value type="QString">XDG_SESSION_COOKIE=9a5c41ad78622411b8e25b00459a554f-1360586360.314321-1166498812</value> + <value type="QString">XDG_SESSION_COOKIE=9a5c41ad78622411b8e25b00459a554f-1360655387.142140-2081338543</value> <value type="QString">XTERM_LOCALE=fr_FR.UTF-8</value> <value type="QString">XTERM_SHELL=/bin/bash</value> <value type="QString">XTERM_VERSION=XTerm(261)</value> @@ -125,7 +126,7 @@ <valuemap type="QVariantMap"> <value key="ProjectExplorer.BuildConfiguration.DisplayName" type="QString">Debug</value> <valuelist key="abstractProcess.Environment" type="QVariantList"> - <value type="QString">DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-03fTGGiTWR,guid=f9287e073281b805202d469e0005349f</value> + <value type="QString">DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-bUeJ6Q6yr3,guid=f61c0677e7161026c52fc89400064242</value> <value type="QString">DESKTOP_SESSION=fluxbox</value> <value type="QString">DISPLAY=:0.0</value> <value type="QString">GDMSESSION=fluxbox</value> @@ -134,6 +135,7 @@ <value type="QString">GTK_MODULES=canberra-gtk-module</value> <value type="QString">HOME=/lrde/home/stage/froger_a</value> <value type="QString">LANG=fr_FR.UTF-8</value> + <value type="QString">LANGUAGE=</value> <value type="QString">LD_LIBRARY_PATH=/usr/lib/qtcreator</value> <value type="QString">LOGNAME=froger_a</value> <value type="QString">OLDPWD=/lrde/home/stage/froger_a/qt</value> @@ -142,16 +144,16 @@ <value type="QString">QTDIR=/usr/share/qt4</value> <value type="QString">SHELL=/bin/bash</value> <value type="QString">SHLVL=2</value> - <value type="QString">SSH_AGENT_PID=25183</value> - <value type="QString">SSH_AUTH_SOCK=/tmp/ssh-WbmKk25130/agent.25130</value> + <value type="QString">SSH_AGENT_PID=29535</value> + <value type="QString">SSH_AUTH_SOCK=/tmp/ssh-PCwYf29482/agent.29482</value> <value type="QString">TERM=xterm</value> <value type="QString">USER=froger_a</value> <value type="QString">USERNAME=froger_a</value> <value type="QString">WINDOWID=10485796</value> - <value type="QString">WINDOWPATH=7:8:8:8:8</value> - <value type="QString">XAUTHORITY=/tmp/.gdmYZ8GSW</value> + <value type="QString">WINDOWPATH=7:8:8:8:8:8</value> + <value type="QString">XAUTHORITY=/tmp/.gdmQ6NBSW</value> <value type="QString">XDG_DATA_DIRS=/usr/local/share/:/usr/share/:/usr/share/gdm/</value> - <value type="QString">XDG_SESSION_COOKIE=9a5c41ad78622411b8e25b00459a554f-1360586360.314321-1166498812</value> + <value type="QString">XDG_SESSION_COOKIE=9a5c41ad78622411b8e25b00459a554f-1360655387.142140-2081338543</value> <value type="QString">XTERM_LOCALE=fr_FR.UTF-8</value> <value type="QString">XTERM_SHELL=/bin/bash</value> <value type="QString">XTERM_VERSION=XTerm(261)</value> diff --git a/GScribo/Preferences/generaloptions.cpp b/GScribo/Preferences/generaloptions.cpp index 39a0160..620a8fd 100644 --- a/GScribo/Preferences/generaloptions.cpp +++ b/GScribo/Preferences/generaloptions.cpp @@ -16,7 +16,7 @@ GeneralOptions::~GeneralOptions() void GeneralOptions::loadConfig() { - Configs * const conf = Configs::getInstance(); + Configs *const conf = Configs::getInstance(); ui->saveXml->setChecked(conf->generalSaveXmlEnabled()); ui->sameDir->setChecked(conf->generalSaveXmlSameDir()); @@ -27,7 +27,7 @@ void GeneralOptions::loadConfig() void GeneralOptions::saveConfig() { - Configs * const conf = Configs::getInstance(); + Configs *const conf = Configs::getInstance(); conf->setGeneralSaveXmlEnabled(ui->saveXml->isChecked()); conf->setGeneralSaveXmlSameDir(ui->sameDir->isChecked()); diff --git a/GScribo/Preferences/ocroptions.cpp b/GScribo/Preferences/ocroptions.cpp index ac337ed..fff05b2 100644 --- a/GScribo/Preferences/ocroptions.cpp +++ b/GScribo/Preferences/ocroptions.cpp @@ -1,8 +1,6 @@ #include "ocroptions.h" #include "ui_ocroptions.h" -//using namespace scribo::toolchain::internal; - static const char *language[][2] = { { "English", "eng" }, @@ -39,7 +37,7 @@ int OcrOptions::findIndex(const QString& lang) void OcrOptions::loadConfig() { - Configs * const conf = Configs::getInstance(); + Configs *const conf = Configs::getInstance(); ui->enable_ocr->setChecked(conf->ocrEnabled()); ui->ocr_language->setCurrentIndex(findIndex(conf->ocrLanguage())); @@ -48,7 +46,7 @@ void OcrOptions::loadConfig() void OcrOptions::saveConfig() { - Configs * const conf = Configs::getInstance(); + Configs *const conf = Configs::getInstance(); conf->setOcrEnabled(ui->enable_ocr->isChecked()); conf->setOcrLanguage(language[ui->ocr_language->currentIndex()][1]); diff --git a/GScribo/Preferences/preprocessingoptions.cpp b/GScribo/Preferences/preprocessingoptions.cpp index f7a6647..640ad32 100644 --- a/GScribo/Preferences/preprocessingoptions.cpp +++ b/GScribo/Preferences/preprocessingoptions.cpp @@ -23,7 +23,7 @@ PreprocessingOptions::~PreprocessingOptions() void PreprocessingOptions::loadConfig() { - Configs * const conf = Configs::getInstance(); + Configs *const conf = Configs::getInstance(); ui->subsampleCb->setChecked(conf->preprocessingSubsample()); ui->remove_bgCb->setChecked(conf->preprocessingRemoveBg()); @@ -35,11 +35,11 @@ void PreprocessingOptions::loadConfig() void PreprocessingOptions::saveConfig() { - Configs * const conf = Configs::getInstance(); + Configs *const conf = Configs::getInstance(); conf->setPreprocessingSubsample(ui->subsampleCb->isChecked()); conf->setPreprocessingRemoveBg(ui->remove_bgCb->isChecked()); conf->setPreprocessingDeskew(ui->deskewCb->isChecked()); conf->setPreprocessingRemoveNoise(ui->remove_noiseCb->isChecked()); - conf->setPreprocessingBinAlgo(ui->bin_algoCbox->currentIndex()); + //conf->setPreprocessingBinAlgo(ui->bin_algoCbox->currentIndex()); } diff --git a/GScribo/Preferences/segmentationoptions.cpp b/GScribo/Preferences/segmentationoptions.cpp index ef47f66..d35209f 100644 --- a/GScribo/Preferences/segmentationoptions.cpp +++ b/GScribo/Preferences/segmentationoptions.cpp @@ -1,8 +1,6 @@ #include "segmentationoptions.h" #include "ui_segmentationoptions.h" -//using namespace scribo::toolchain::internal; - SegmentationOptions::SegmentationOptions(QWidget *parent) : OptionWidget(parent), ui(new Ui::SegmentationOptions) diff --git a/GScribo/configs.h b/GScribo/configs.h index 97e5528..d4023b9 100644 --- a/GScribo/configs.h +++ b/GScribo/configs.h @@ -4,6 +4,7 @@ //#include <scribo/toolchain/internal/text_in_doc_preprocess_functor.hh> #include <QSettings> #include <QDir> +#include <QDebug> #include "region.h" @@ -11,10 +12,14 @@ class Configs : public QSettings { public: - Configs() : QSettings("olena-scribo", "gui") { } + inline static Configs *getInstance(); - static Configs * getInstance() - { static Configs *conf = new Configs(); return conf; } + inline bool isRegionInit(); + inline QColor regionColor(const GraphicsRegion::Id& region); + inline QString regionName(const GraphicsRegion::Id& region); + + inline bool isRegionChecked(const GraphicsRegion::Id& region); + inline void setRegionChecked(const GraphicsRegion::Id& region, bool checked); inline bool preprocessingSubsample(); inline void setPreprocessingSubsample(bool b); @@ -51,8 +56,29 @@ class Configs : inline QString generalSaveXmlCustomDirPath(); inline void setGeneralSaveXmlCustomDirPath(const QString& path); + + private: + explicit Configs() : QSettings("olena-scribo", "gui") { } }; +inline Configs *Configs::getInstance() +{ static Configs *conf = new Configs(); return conf; } + +inline bool Configs::isRegionInit() +{ return value("region/init", false).toBool(); } + +inline bool Configs::isRegionChecked(const GraphicsRegion::Id ®ion) +{ return value("region/" + QString::number(region) + "/checked", true).toBool(); } + +inline void Configs::setRegionChecked(const GraphicsRegion::Id ®ion, bool checked) +{ setValue("region/" + QString::number(region) + "/checked", checked); } + +inline QColor Configs::regionColor(const GraphicsRegion::Id& region) +{ return value("region/" + QString::number(region) + "color").value<QColor>(); } + +inline QString Configs::regionName(const GraphicsRegion::Id ®ion) +{ beginGroup("region"); beginGroup(QString::number(region)); QString l = value("name").toString(); endGroup(); endGroup(); qDebug() << l; return l; } + inline bool Configs::preprocessingSubsample() { return value("preprocessing/subsample", false).toBool(); } diff --git a/GScribo/mainwindow.cpp b/GScribo/mainwindow.cpp index 44c4583..e939694 100644 --- a/GScribo/mainwindow.cpp +++ b/GScribo/mainwindow.cpp @@ -9,11 +9,12 @@ MainWindow::MainWindow(QWidget *parent) : setWindowTitle(tr("GScribo")); + xml_.fillSettings(); initGraphicsRegion(); initTextRegion(); initXmlWidget(); - initPageWidget(); initRegionWidget(); + initPageWidget(); initToolBar(); initMenuBar(); @@ -190,8 +191,8 @@ void MainWindow::onSegment() void MainWindow::onPreferences() { - //PreferencesDialog *preferenceDialog = new PreferencesDialog(this); - //preferenceDialog->show(); + PreferencesDialog *preferenceDialog = new PreferencesDialog(this); + preferenceDialog->show(); } void MainWindow::onXmlSaved(const QString& filename) diff --git a/GScribo/mainwindow.h b/GScribo/mainwindow.h index 7e84fc3..efe6b81 100644 --- a/GScribo/mainwindow.h +++ b/GScribo/mainwindow.h @@ -9,8 +9,8 @@ #include <QFileDialog> #include <QGroupBox> -//#include "Preferences/preferencesdialog.h" -//#include "Processing/progressdialog.h" +#include "Preferences/preferencesdialog.h" +#include "Processing/progressdialog.h" #include "PagesWidget/pageswidget.h" #include "XmlWidget/xmlwidget.h" //#include "Processing/runner.h" @@ -64,7 +64,7 @@ class MainWindow: QPlainTextEdit textEdit_; - //ProgressDialog progressDialog_; + ProgressDialog progressDialog_; //Runner runner_; XmlWidget xmlWidget_; diff --git a/GScribo/region.h b/GScribo/region.h index b3d7d2a..d1fcee7 100644 --- a/GScribo/region.h +++ b/GScribo/region.h @@ -5,15 +5,21 @@ namespace GraphicsRegion { + // WARNING : The order is important. enum Id { - Text = 0, + None, + + Text, + TextRegion, Line, + Separators, VerticalSeparator, HorizontalSeparator, WhiteSpaceSeparator, + Miscellaneous, Image, Noise, Table, @@ -21,15 +27,9 @@ namespace GraphicsRegion Graphic, Chart, + Typology, Baseline, - Meanline, - - TextRegion, - SeparatorRegion, - MiscRegion, - TypoRegion, - - None + Meanline }; struct Data @@ -37,6 +37,7 @@ namespace GraphicsRegion QColor color; QString name; GraphicsRegion::Id region; + GraphicsRegion::Id parent; int zValue; }; } diff --git a/GScribo/regionwidget.cpp b/GScribo/regionwidget.cpp index 219a9ba..b343b3f 100644 --- a/GScribo/regionwidget.cpp +++ b/GScribo/regionwidget.cpp @@ -1,4 +1,5 @@ #include "regionwidget.h" +#include <QDebug> RegionWidget::RegionWidget(QWidget *parent) : QTreeWidget(parent) @@ -6,34 +7,39 @@ RegionWidget::RegionWidget(QWidget *parent) : setHeaderHidden(true); setSelectionMode(QAbstractItemView::NoSelection); - addTopLevelItem(createRoot("Text", GraphicsRegion::TextRegion, GraphicsRegion::Text, GraphicsRegion::Line)); - addTopLevelItem(createRoot("Typological Lines", GraphicsRegion::TypoRegion, GraphicsRegion::Baseline, GraphicsRegion::Meanline)); - addTopLevelItem(createRoot("Separators", GraphicsRegion::SeparatorRegion, GraphicsRegion::VerticalSeparator, GraphicsRegion::WhiteSpaceSeparator)); - addTopLevelItem(createRoot("Miscellaneous", GraphicsRegion::MiscRegion, GraphicsRegion::Image, GraphicsRegion::Chart)); + Configs *const configs = Configs::getInstance(); - expandAll(); + configs->beginGroup("region"); - connect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(checkStateChanged(QTreeWidgetItem*))); -} + foreach(QString group, configs->childGroups()) + { + configs->beginGroup(group); + GraphicsRegion::Id region = static_cast<GraphicsRegion::Id>(group.toInt()); + QTreeWidgetItem *rootItem = createItem(static_cast<GraphicsRegion::Id>(group.toInt())); -QTreeWidgetItem *RegionWidget::createRoot(const QString& text, const GraphicsRegion::Id& region, const GraphicsRegion::Id& begin, const GraphicsRegion::Id& end) -{ - // Create root. - QTreeWidgetItem *rootItem = createItem(text, region); + foreach(QString subgroup, configs->childGroups()) + rootItem->addChild(createItem(static_cast<GraphicsRegion::Id>(subgroup.toInt()))); + + addTopLevelItem(rootItem); + configs->endGroup(); + } - // Fill root with corresponding childs. - for(int region_ = begin; region_ <= end; region_++) - fillRoot(rootItem, static_cast<GraphicsRegion::Id>(region_)); + configs->endGroup(); - return rootItem; + expandAll(); + + connect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(checkStateChanged(QTreeWidgetItem*))); } -QTreeWidgetItem *RegionWidget::createItem(const QString& text, const GraphicsRegion::Id& region, const QColor& color) +QTreeWidgetItem *RegionWidget::createItem(const GraphicsRegion::Id& region) { + Configs *const configs = Configs::getInstance(); + QTreeWidgetItem *item = new QTreeWidgetItem; - item->setText(0, text); - item->setCheckState(0, Qt::Checked); - item->setBackgroundColor(0, color); + + item->setText(0, configs->regionName(region)); + item->setCheckState(0, configs->isRegionChecked(region) ? Qt::Checked : Qt::Unchecked); + item->setBackgroundColor(0, configs->regionColor(region)); // Store graphical id in the object to recognize it afterward. item->setData(0, Qt::UserRole, static_cast<int>(region)); @@ -42,9 +48,14 @@ QTreeWidgetItem *RegionWidget::createItem(const QString& text, const GraphicsReg void RegionWidget::checkStateChanged(QTreeWidgetItem *item) { + GraphicsRegion::Id region = static_cast<GraphicsRegion::Id>(item->data(0, Qt::UserRole).toInt()); + bool isChecked; + // If it's a root item, go to childs. if(item->childCount() != 0) { + isChecked = item->checkState(0) == Qt::Checked ? true : false; + QTreeWidgetItem *child; for(int i = 0; i < item->childCount(); i++) { @@ -57,14 +68,17 @@ void RegionWidget::checkStateChanged(QTreeWidgetItem *item) if(item->checkState(0) == Qt::Checked) { filterString_.append('|' + item->text(0)); - emit checkStateChanged(static_cast<GraphicsRegion::Id>(item->data(0, Qt::UserRole).toInt()), true); + isChecked = true; } else { filterString_.remove('|' + item->text(0), Qt::CaseSensitive); - emit checkStateChanged(static_cast<GraphicsRegion::Id>(item->data(0, Qt::UserRole).toInt()), false); + isChecked = false; } + emit checkStateChanged(region, isChecked); emit checkStateChanged(filterString()); } + + Configs::getInstance()->setRegionChecked(region, isChecked); } diff --git a/GScribo/regionwidget.h b/GScribo/regionwidget.h index aaa6eda..5ab955d 100644 --- a/GScribo/regionwidget.h +++ b/GScribo/regionwidget.h @@ -17,9 +17,7 @@ class RegionWidget : inline QString filterString() const; private: - QTreeWidgetItem *createRoot(const QString& text, const GraphicsRegion::Id& region, const GraphicsRegion::Id& begin, const GraphicsRegion::Id& end); - QTreeWidgetItem *createItem(const QString& text, const GraphicsRegion::Id& region, const QColor& color = QColor::fromRgb(255, 255, 255)); - inline void fillRoot(QTreeWidgetItem *rootItem, const GraphicsRegion::Id& region); + QTreeWidgetItem *createItem(const GraphicsRegion::Id& region); QString filterString_; @@ -31,9 +29,6 @@ class RegionWidget : void checkStateChanged(const QString& filterString); }; -inline void RegionWidget::fillRoot(QTreeWidgetItem *rootItem, const GraphicsRegion::Id& region) -{ GraphicsRegion::Data data = Xml::dataFromRegion(region); filterString_.append('|' + data.name); rootItem->addChild(createItem(data.name, region, data.color)); } - inline QString RegionWidget::filterString() const { return filterString_.right(filterString_.count()-1); } diff --git a/GScribo/xml.cpp b/GScribo/xml.cpp index 74e62b7..932fdad 100644 --- a/GScribo/xml.cpp +++ b/GScribo/xml.cpp @@ -1,15 +1,38 @@ #include "xml.h" +// WARNING : The order is VERY IMPORTANT (depending on the enum). +static const GraphicsRegion::Data datas_[] = +{ + /* COLOR | NAME | REGION | PARENT | Z */ + { QColor::fromRgb(255, 255, 255), "Text", GraphicsRegion::Text, GraphicsRegion::None, 0 }, + { QColor::fromRgb(0, 100, 0, 90), "TextRegion", GraphicsRegion::TextRegion, GraphicsRegion::Text, 1 }, + { QColor::fromRgb(255, 0, 0, 90), "Line", GraphicsRegion::Line, GraphicsRegion::Text, 2 }, + { QColor::fromRgb(255, 255, 255), "Separators", GraphicsRegion::Separators, GraphicsRegion::None, 0 }, + { QColor::fromRgb(0, 0, 255, 90), "VerticalSeparatorRegion", GraphicsRegion::VerticalSeparator, GraphicsRegion::Separators, 2 }, + { QColor::fromRgb(0, 0, 255, 90), "HorizontalSeparatorRegion", GraphicsRegion::HorizontalSeparator, GraphicsRegion::Separators, 2 }, + { QColor::fromRgb(0, 0, 128, 90), "WhitespaceSeparatorRegion", GraphicsRegion::WhiteSpaceSeparator, GraphicsRegion::Separators, 2 }, + { QColor::fromRgb(255, 255, 255), "Miscellaneous", GraphicsRegion::Miscellaneous, GraphicsRegion::None, 0 }, + { QColor::fromRgb(255, 120, 0, 90), "ImageRegion", GraphicsRegion::Image, GraphicsRegion::Miscellaneous, 1 }, + { QColor::fromRgb(43, 39, 128, 90), "NoiseRegion", GraphicsRegion::Noise, GraphicsRegion::Miscellaneous, 2 }, + { QColor::fromRgb(220, 246, 0, 90), "TableRegion", GraphicsRegion::Table, GraphicsRegion::Miscellaneous, 2 }, + { QColor::fromRgb(170, 0, 255, 90), "MathsRegion", GraphicsRegion::Maths, GraphicsRegion::Miscellaneous, 2 }, + { QColor::fromRgb(255, 0, 144, 90), "GraphicsRegion", GraphicsRegion::Graphic, GraphicsRegion::Miscellaneous, 2 }, + { QColor::fromRgb(0, 204, 255, 90), "ChartRegion", GraphicsRegion::Chart, GraphicsRegion::Miscellaneous, 2 }, + { QColor::fromRgb(255, 255, 255), "Typological Lines", GraphicsRegion::Typology, GraphicsRegion::None, 0 }, + { QColor::fromRgb(128, 0, 255), "Baseline", GraphicsRegion::Baseline, GraphicsRegion::Typology, 3 }, + { QColor::fromRgb(128, 0, 255), "Meanline", GraphicsRegion::Meanline, GraphicsRegion::Typology, 3 } +}; + Xml::Xml(const QString& filename) { filename_ = filename; + load(filename); } QString Xml::getPath(const QString& filename) { - // Get instance of the configuration settings. - Configs *const conf = Configs::getInstance(); + Configs *const configs = Configs::getInstance(); QString xmlPath = filename; @@ -19,7 +42,46 @@ QString Xml::getPath(const QString& filename) xmlPath.remove(pos, xmlPath.length()-pos); xmlPath += "_gui.xml"; - return conf->generalSaveXmlCustomDirPath() + "/" + xmlPath; + return configs->generalSaveXmlCustomDirPath() + "/" + xmlPath; +} + +void Xml::fillSettings() +{ + Configs *const configs = Configs::getInstance(); + + // Check if the configuration file has already been created. + if(!configs->isRegionInit()) + { + configs->beginGroup("region"); + configs->setValue("init", true); + + for(int i = 0; i < 17; i++) + { + // Create group : region\father\current\... + if(datas_[i].parent != GraphicsRegion::None) + { + configs->beginGroup(QString::number(datas_[datas_[i].parent].region)); + configs->beginGroup(QString::number(datas_[i].region)); + + configs->setValue("color", datas_[i].color); + configs->setValue("name", datas_[i].name); + + configs->endGroup(); + configs->endGroup(); + } + else + { + configs->beginGroup(QString::number(datas_[i].region)); + + configs->setValue("color", datas_[i].color); + configs->setValue("name", datas_[i].name); + + configs->endGroup(); + } + } + + configs->endGroup(); + } } void Xml::load(const QString& filename) @@ -115,7 +177,7 @@ void Xml::processNode(const QDomElement& root, const GraphicsRegion::Data& data, regionItem->setRegionItem(graphicsItem); graphicsItem->setXmlItem(regionItem); - if(data.region == GraphicsRegion::Text) + if(data.region == GraphicsRegion::TextRegion) processLineNode(root.firstChild().nextSiblingElement("Line"), coordsItem); // Run through all nodes from the same data structure recursively. diff --git a/GScribo/xml.h b/GScribo/xml.h index 3975f82..844d043 100644 --- a/GScribo/xml.h +++ b/GScribo/xml.h @@ -15,24 +15,6 @@ #include "configs.h" #include "region.h" -static const GraphicsRegion::Data datas_[] = -{ - /* COLOR | NAME | REGION | ZVALUE */ - { QColor::fromRgb(0, 100, 0, 90), "TextRegion", GraphicsRegion::Text, 1 }, - { QColor::fromRgb(255, 0, 0, 90), "Line", GraphicsRegion::Line, 2 }, - { QColor::fromRgb(0, 0, 255, 90), "VerticalSeparatorRegion", GraphicsRegion::VerticalSeparator, 2 }, - { QColor::fromRgb(0, 0, 255, 90), "HorizontalSeparatorRegion", GraphicsRegion::HorizontalSeparator, 2 }, - { QColor::fromRgb(0, 0, 128, 90), "WhitespaceSeparatorRegion", GraphicsRegion::WhiteSpaceSeparator, 2 }, - { QColor::fromRgb(255, 120, 0, 90), "ImageRegion", GraphicsRegion::Image, 1 }, - { QColor::fromRgb(43, 39, 128, 90), "NoiseRegion", GraphicsRegion::Noise, 2 }, - { QColor::fromRgb(220, 246, 0, 90), "TableRegion", GraphicsRegion::Table, 2 }, - { QColor::fromRgb(170, 0, 255, 90), "MathsRegion", GraphicsRegion::Maths, 2 }, - { QColor::fromRgb(255, 0, 144, 90), "GraphicsRegion", GraphicsRegion::Graphic, 2 }, - { QColor::fromRgb(0, 204, 255, 90), "ChartRegion", GraphicsRegion::Chart, 2 }, - { QColor::fromRgb(128, 0, 255), "Baseline", GraphicsRegion::Baseline, 3 }, - { QColor::fromRgb(128, 0, 255), "Meanline", GraphicsRegion::Meanline, 3 } -}; - class Xml { public: @@ -45,12 +27,13 @@ class Xml inline QString filename() const; static QString getPath(const QString& filename); - inline static GraphicsRegion::Data dataFromRegion(GraphicsRegion::Id region); void load(const QString& filename); + void fillSettings(); private: XmlItem *init(const QDomElement& root, XmlItem *rootTreeItem); + void processNode(const QDomElement& root, const GraphicsRegion::Data& data, XmlItem *rootTreeItem); void processLineNode(const QDomElement& root, XmlItem *rootTreeItem); void processTypoNode(const QDomElement& root, const QPoint& xPoint); @@ -74,7 +57,4 @@ inline QDomDocument Xml::document() const inline QString Xml::filename() const { return filename_; } -inline GraphicsRegion::Data Xml::dataFromRegion(GraphicsRegion::Id region) -{ return datas_[region]; } - #endif // XML_H -- 1.7.2.5
participants (1)
-
Antoine Froger