summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleks Kissinger <aleks0@gmail.com>2018-10-07 16:51:00 +0200
committerAleks Kissinger <aleks0@gmail.com>2018-10-07 16:51:00 +0200
commit07c9d67859248840bba0a178aab0dff4306c01c4 (patch)
treea47bd486822b3573a6b609a895472cc36f308566
parent263678a6d295d492351698db50a57c9db3bfe8ae (diff)
style editor uses custom models
-rw-r--r--src/gui/styleeditor.cpp331
-rw-r--r--src/gui/styleeditor.h9
2 files changed, 138 insertions, 202 deletions
diff --git a/src/gui/styleeditor.cpp b/src/gui/styleeditor.cpp
index 46df095..e3f8ace 100644
--- a/src/gui/styleeditor.cpp
+++ b/src/gui/styleeditor.cpp
@@ -18,27 +18,16 @@ StyleEditor::StyleEditor(QWidget *parent) :
ui->leftArrow << ui->rightArrow <<
ui->properties;
- _styles = 0;
+ _styles = nullptr;
- _nodeModel = new QStandardItemModel(this);
- _edgeModel = new QStandardItemModel(this);
-
- ui->styleListView->setModel(_nodeModel);
ui->styleListView->setViewMode(QListView::IconMode);
ui->styleListView->setMovement(QListView::Static);
ui->styleListView->setGridSize(QSize(48,48));
- ui->edgeStyleListView->setModel(_edgeModel);
ui->edgeStyleListView->setViewMode(QListView::IconMode);
ui->edgeStyleListView->setMovement(QListView::Static);
ui->edgeStyleListView->setGridSize(QSize(48,48));
- connect(ui->styleListView->selectionModel(),
- SIGNAL(currentChanged(QModelIndex,QModelIndex)),
- this, SLOT(nodeItemChanged(QModelIndex)));
- connect(ui->edgeStyleListView->selectionModel(),
- SIGNAL(currentChanged(QModelIndex,QModelIndex)),
- this, SLOT(edgeItemChanged(QModelIndex)));
connect(ui->category->lineEdit(),
SIGNAL(editingFinished()),
this, SLOT(categoryChanged()));
@@ -80,9 +69,6 @@ StyleEditor::StyleEditor(QWidget *parent) :
pos += 1;
}
- _activeNodeStyle = 0;
- _activeEdgeStyle = 0;
- _activeItem = 0;
refreshDisplay();
}
@@ -92,16 +78,19 @@ StyleEditor::~StyleEditor()
}
void StyleEditor::open() {
- if (_styles != 0) delete _styles;
+ if (_styles != nullptr) delete _styles;
_styles = new TikzStyles;
- _activeNodeStyle = 0;
- _activeEdgeStyle = 0;
- _activeItem = 0;
- ui->styleListView->selectionModel()->clear();
- ui->edgeStyleListView->selectionModel()->clear();
+ ui->styleListView->setModel(_styles->nodeStyles());
+ ui->edgeStyleListView->setModel(_styles->edgeStyles());
+ connect(ui->styleListView->selectionModel(),
+ SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+ this, SLOT(nodeItemChanged(QModelIndex)));
+ connect(ui->edgeStyleListView->selectionModel(),
+ SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+ this, SLOT(edgeItemChanged(QModelIndex)));
+
if (_styles->loadStyles(tikzit->styleFilePath())) {
_dirty = false;
- _styles->refreshModels(_nodeModel, _edgeModel, "", false);
refreshCategories();
refreshDisplay();
show();
@@ -136,42 +125,22 @@ void StyleEditor::closeEvent(QCloseEvent *event)
void StyleEditor::nodeItemChanged(QModelIndex sel)
{
- //ui->edgeStyleListView->blockSignals(true);
- ui->edgeStyleListView->selectionModel()->clear();
- //ui->edgeStyleListView->blockSignals(false);
- //qDebug() << "got node item change";
-
- _activeNodeStyle = 0;
- _activeEdgeStyle = 0;
- _activeItem = 0;
- QString sty;
if (sel.isValid()) {
- _activeItem = _nodeModel->itemFromIndex(sel);
- sty = _activeItem->text();
- if (sty != "none")
- _activeNodeStyle = _styles->nodeStyle(sty);
+ ui->edgeStyleListView->selectionModel()->clear();
+ qDebug() << "active style:" << ((activeStyle() == nullptr) ? "null" : activeStyle()->tikz());
+ qDebug() << "style from index:" << _styles->nodeStyles()->styleInCategory(sel.row())->tikz();
}
+ _nodeStyleIndex = sel;
refreshDisplay();
}
void StyleEditor::edgeItemChanged(QModelIndex sel)
{
- //ui->styleListView->blockSignals(true);
- ui->styleListView->selectionModel()->clear();
- //ui->styleListView->blockSignals(false);
- //qDebug() << "got edge item change";
-
- _activeNodeStyle = 0;
- _activeEdgeStyle = 0;
- _activeItem = 0;
-
- QString sty;
if (sel.isValid()) {
- _activeItem = _edgeModel->itemFromIndex(sel);
- sty = _activeItem->text();
- if (sty != "none")
- _activeEdgeStyle = _styles->edgeStyle(sty);
+ ui->styleListView->selectionModel()->clear();
+ //_nodeStyleIndex = QModelIndex();
}
+ _edgeStyleIndex = sel;
refreshDisplay();
}
@@ -192,37 +161,6 @@ void StyleEditor::categoryChanged()
void StyleEditor::currentCategoryChanged()
{
- qDebug() << "refreshing models on category change";
- _styles->refreshModels(_nodeModel, _edgeModel, ui->currentCategory->currentText(), false);
- _activeItem = 0;
-
- // try to keep the selection as is, or clear the current style
- if (_activeNodeStyle != 0) {
- ui->styleListView->selectionModel()->clear();
- for (int i = 0; i < _nodeModel->rowCount(); ++i) {
- if (_activeNodeStyle->name() == _nodeModel->item(i)->data()) {
- _activeItem = _nodeModel->item(i);
- ui->styleListView->selectionModel()->select(
- _nodeModel->index(i,0),
- QItemSelectionModel::SelectCurrent);
- }
- }
- } else if (_activeEdgeStyle != 0) {
- ui->edgeStyleListView->selectionModel()->clear();
- for (int i = 0; i < _edgeModel->rowCount(); ++i) {
- if (_activeEdgeStyle->name() == _edgeModel->item(i)->data()) {
- _activeItem = _edgeModel->item(i);
- ui->edgeStyleListView->selectionModel()->select(
- _edgeModel->index(i,0),
- QItemSelectionModel::SelectCurrent);
- }
- }
- }
-
- if (_activeItem == 0) {
- _activeNodeStyle = 0;
- _activeEdgeStyle = 0;
- }
}
void StyleEditor::refreshCategories()
@@ -234,7 +172,7 @@ void StyleEditor::refreshCategories()
ui->currentCategory->clear();
ui->category->clear();
- if (_styles != 0) {
+ if (_styles != nullptr) {
foreach(QString c, _styles->categories()) {
ui->category->addItem(c);
ui->currentCategory->addItem(c);
@@ -249,11 +187,13 @@ void StyleEditor::refreshCategories()
void StyleEditor::propertyChanged()
{
- if (_activeNodeStyle != 0) {
- _activeItem->setIcon(_activeNodeStyle->icon());
+ QModelIndexList nSel = ui->styleListView->selectionModel()->selectedRows();
+ QModelIndexList eSel = ui->edgeStyleListView->selectionModel()->selectedRows();
+ if (!nSel.isEmpty()) {
+ emit _styles->nodeStyles()->dataChanged(nSel[0], nSel[0]);
refreshCategories();
- } else if (_activeEdgeStyle != 0) {
- _activeItem->setIcon(_activeEdgeStyle->icon());
+ } else if (!eSel.isEmpty()) {
+ emit _styles->edgeStyles()->dataChanged(eSel[0], eSel[0]);
}
_dirty = true;
refreshDisplay();
@@ -285,115 +225,98 @@ void StyleEditor::refreshDisplay()
ui->rightArrow->setCurrentText("");
ui->properties->setModel(0);
- if (_activeNodeStyle != 0) {
- //_activeItem->setText(_activeNodeStyle->name());
- //_activeItem->setIcon(_activeNodeStyle->icon());
+ Style *s = activeStyle();
+ if (s != nullptr && !s->isNone()) {
+ // name
ui->name->setEnabled(true);
- ui->name->setText(_activeNodeStyle->name());
-
- ui->category->setEnabled(true);
- ui->category->setCurrentText(
- _activeNodeStyle->propertyWithDefault("tikzit category", "", false));
-
- // passing 'false' to these methods prevents 'tikzit foo' from overriding property 'foo'
- QColor realFill = _activeNodeStyle->fillColor(false);
- QColor fill = _activeNodeStyle->fillColor();
- bool fillOverride = realFill != fill;
- QColor realDraw = _activeNodeStyle->strokeColor(false);
- QColor draw = _activeNodeStyle->strokeColor();
- bool drawOverride = realDraw != draw;
+ ui->name->setText(s->name());
- ui->fillColor->setEnabled(true);
- setColor(ui->fillColor, realFill);
+ // property list
+ ui->properties->setEnabled(true);
+ setPropertyModel(s->data());
+ // draw
+ QColor realDraw = s->strokeColor(false);
+ QColor draw = s->strokeColor();
ui->drawColor->setEnabled(true);
setColor(ui->drawColor, realDraw);
-
- ui->hasTikzitFillColor->setEnabled(true);
- ui->hasTikzitFillColor->setChecked(fillOverride);
-
- ui->tikzitFillColor->setEnabled(fillOverride);
- if (fillOverride) setColor(ui->tikzitFillColor, fill);
-
+ // tikzit draw
+ bool drawOverride = realDraw != draw;
ui->hasTikzitDrawColor->setEnabled(true);
ui->hasTikzitDrawColor->setChecked(drawOverride);
ui->tikzitDrawColor->setEnabled(drawOverride);
if (drawOverride) setColor(ui->tikzitDrawColor, draw);
- QString realShape = _activeNodeStyle->propertyWithDefault("shape", "", false);
- QString shape = _activeNodeStyle->propertyWithDefault("tikzit shape", "", false);
- bool shapeOverride = shape != realShape;
- ui->shape->setEnabled(true);
- ui->shape->setCurrentText(realShape);
-
- ui->hasTikzitShape->setEnabled(true);
- ui->tikzitShape->setEnabled(shapeOverride);
- if (shapeOverride) ui->tikzitShape->setCurrentText(shape);
-
- ui->properties->setEnabled(true);
- setPropertyModel(_activeNodeStyle->data());
- qDebug() << _activeNodeStyle->data()->tikz();
- } else if (_activeEdgeStyle != 0) {
- //_activeItem->setText(_activeEdgeStyle->name());
- //_activeItem->setIcon(_activeEdgeStyle->icon());
- ui->name->setEnabled(true);
- ui->name->setText(_activeEdgeStyle->name());
-
- //ui->category->setEnabled(true);
- //ui->category->setCurrentText(
- // _activeEdgeStyle->propertyWithDefault("tikzit category", "", false));
-
- setColor(ui->fillColor, QColor(Qt::gray));
- setColor(ui->tikzitFillColor, QColor(Qt::gray));
- ui->hasTikzitFillColor->setChecked(false);
-
-
- // passing 'false' to these methods prevents 'tikzit foo' from overriding property 'foo'
- QColor realDraw = _activeEdgeStyle->strokeColor(false);
- QColor draw = _activeEdgeStyle->strokeColor();
- bool drawOverride = realDraw != draw;
-
- ui->drawColor->setEnabled(true);
- setColor(ui->drawColor, realDraw);
-
- ui->hasTikzitDrawColor->setEnabled(true);
- ui->hasTikzitDrawColor->setChecked(drawOverride);
-
- ui->tikzitDrawColor->setEnabled(drawOverride);
- setColor(ui->tikzitDrawColor, draw);
-
- ui->leftArrow->setEnabled(true);
-
- switch (_activeEdgeStyle->arrowTail()) {
- case Style::NoTip:
- ui->leftArrow->setCurrentText("");
- break;
- case Style::Pointer:
- ui->leftArrow->setCurrentText("<");
- break;
- case Style::Flat:
- ui->leftArrow->setCurrentText("|");
- break;
- }
+ if (!s->isEdgeStyle()) {
+ // category
+ ui->category->setEnabled(true);
+ ui->category->setCurrentText(
+ s->propertyWithDefault("tikzit category", "", false));
+
+ // fill
+ QColor realFill = s->fillColor(false);
+ QColor fill = s->fillColor();
+ ui->fillColor->setEnabled(true);
+ setColor(ui->fillColor, realFill);
+
+ // tikzit fill
+ bool fillOverride = realFill != fill;
+ ui->hasTikzitFillColor->setEnabled(true);
+ ui->hasTikzitFillColor->setChecked(fillOverride);
+ ui->tikzitFillColor->setEnabled(fillOverride);
+ if (fillOverride) setColor(ui->tikzitFillColor, fill);
+
+ // shape
+ QString realShape = s->propertyWithDefault("shape", "", false);
+ QString shape = s->propertyWithDefault("tikzit shape", "", false);
+ ui->shape->setEnabled(true);
+ ui->shape->setCurrentText(realShape);
+
+ // tikzit shape
+ bool shapeOverride = shape != realShape;
+ ui->hasTikzitShape->setEnabled(true);
+ ui->tikzitShape->setEnabled(shapeOverride);
+ if (shapeOverride) ui->tikzitShape->setCurrentText(shape);
+ } else {
+ // set fill to gray (disabled)
+ setColor(ui->fillColor, QColor(Qt::gray));
+ setColor(ui->tikzitFillColor, QColor(Qt::gray));
+ ui->hasTikzitFillColor->setChecked(false);
+
+
+ // arrow tail
+ ui->leftArrow->setEnabled(true);
+
+ switch (s->arrowTail()) {
+ case Style::NoTip:
+ ui->leftArrow->setCurrentText("");
+ break;
+ case Style::Pointer:
+ ui->leftArrow->setCurrentText("<");
+ break;
+ case Style::Flat:
+ ui->leftArrow->setCurrentText("|");
+ break;
+ }
- ui->rightArrow->setEnabled(true);
- switch (_activeEdgeStyle->arrowHead()) {
- case Style::NoTip:
- ui->rightArrow->setCurrentText("");
- break;
- case Style::Pointer:
- ui->rightArrow->setCurrentText(">");
- break;
- case Style::Flat:
- ui->rightArrow->setCurrentText("|");
- break;
+ // arrow head
+ ui->rightArrow->setEnabled(true);
+ switch (s->arrowHead()) {
+ case Style::NoTip:
+ ui->rightArrow->setCurrentText("");
+ break;
+ case Style::Pointer:
+ ui->rightArrow->setCurrentText(">");
+ break;
+ case Style::Flat:
+ ui->rightArrow->setCurrentText("|");
+ break;
+ }
}
- ui->properties->setEnabled(true);
- setPropertyModel(_activeEdgeStyle->data());
} else {
setColor(ui->fillColor, QColor(Qt::gray));
setColor(ui->drawColor, QColor(Qt::gray));
@@ -529,18 +452,19 @@ void StyleEditor::on_name_editingFinished()
if (s != 0) {
s->setName(ui->name->text());
- _activeItem->setText(ui->name->text());
- refreshDisplay();
+ refreshActiveStyle();
+// refreshDisplay();
_dirty = true;
}
}
void StyleEditor::on_shape_currentTextChanged()
{
- if (_activeNodeStyle != 0) {
- _activeNodeStyle->data()->setProperty("shape", ui->shape->currentText());
- _activeItem->setIcon(_activeNodeStyle->icon());
- refreshDisplay();
+ Style *s = activeStyle();
+ if (s != 0) {
+ s->data()->setProperty("shape", ui->shape->currentText());
+ refreshActiveStyle();
+// refreshDisplay();
_dirty = true;
}
}
@@ -572,8 +496,26 @@ QColor StyleEditor::color(QPushButton *btn)
Style *StyleEditor::activeStyle()
{
- if (_activeNodeStyle != 0) return _activeNodeStyle;
- else return _activeEdgeStyle;
+ if (_styles != nullptr) {
+ if (_nodeStyleIndex.isValid())
+ return _styles->nodeStyles()->styleInCategory(_nodeStyleIndex.row());
+
+ if (_edgeStyleIndex.isValid())
+ return _styles->edgeStyles()->styleInCategory(_edgeStyleIndex.row());
+ }
+
+ return nullptr;
+}
+
+void StyleEditor::refreshActiveStyle()
+{
+ if (_styles != nullptr) {
+ if (_nodeStyleIndex.isValid())
+ emit _styles->nodeStyles()->dataChanged(_nodeStyleIndex, _nodeStyleIndex);
+
+ if (_edgeStyleIndex.isValid())
+ emit _styles->edgeStyles()->dataChanged(_edgeStyleIndex, _edgeStyleIndex);
+ }
}
void StyleEditor::updateColor(QPushButton *btn, QString name, QString propName)
@@ -583,17 +525,12 @@ void StyleEditor::updateColor(QPushButton *btn, QString name, QString propName)
this,
name,
QColorDialog::DontUseNativeDialog);
- if (col.isValid()) {
- setColor(btn, col);
- if (_activeNodeStyle != 0) {
- _activeNodeStyle->data()->setProperty(propName, tikzit->nameForColor(col));
- _activeItem->setIcon(_activeNodeStyle->icon());
- } else if (_activeEdgeStyle != 0) {
- _activeEdgeStyle->data()->setProperty(propName, tikzit->nameForColor(col));
- _activeItem->setIcon(_activeEdgeStyle->icon());
- }
-
- refreshDisplay();
+ setColor(btn, col);
+ Style *s = activeStyle();
+ if (s != nullptr) {
+ s->data()->setProperty(propName, tikzit->nameForColor(col));
+ refreshActiveStyle();
+// refreshDisplay();
_dirty = true;
}
}
diff --git a/src/gui/styleeditor.h b/src/gui/styleeditor.h
index e40facd..fed2908 100644
--- a/src/gui/styleeditor.h
+++ b/src/gui/styleeditor.h
@@ -58,17 +58,16 @@ private:
void setColor(QPushButton *btn, QColor col);
void setPropertyModel(GraphElementData *d);
QColor color(QPushButton *btn);
- QStandardItemModel *_nodeModel;
- QStandardItemModel *_edgeModel;
- QStandardItem *_activeItem;
- Style *_activeNodeStyle;
- Style *_activeEdgeStyle;
//QString _activeCategory;
Style *activeStyle();
+ void refreshActiveStyle();
TikzStyles *_styles;
void updateColor(QPushButton *btn, QString name, QString propName);
QVector<QWidget*> _formWidgets;
bool _dirty;
+
+ QModelIndex _nodeStyleIndex;
+ QModelIndex _edgeStyleIndex;
};
#endif // STYLEEDITOR_H