summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleks Kissinger <aleks0@gmail.com>2018-10-06 19:55:55 +0200
committerAleks Kissinger <aleks0@gmail.com>2018-10-06 19:55:55 +0200
commit263678a6d295d492351698db50a57c9db3bfe8ae (patch)
treef28e3e9eb9896a99a9587f265db3350fb6b5cfe6
parentc0b8dea3d3b93fd4b87e5311b6c6422a7ccdb723 (diff)
switched to custom style model
-rw-r--r--src/data/stylelist.cpp (renamed from src/data/nodestylelist.cpp)51
-rw-r--r--src/data/stylelist.h (renamed from src/data/nodestylelist.h)5
-rw-r--r--src/data/tikzstyles.cpp55
-rw-r--r--src/data/tikzstyles.h9
-rw-r--r--src/gui/stylepalette.cpp21
-rw-r--r--src/gui/stylepalette.h2
-rw-r--r--tikzit.pro4
7 files changed, 85 insertions, 62 deletions
diff --git a/src/data/nodestylelist.cpp b/src/data/stylelist.cpp
index 7f17ff0..2c79d10 100644
--- a/src/data/nodestylelist.cpp
+++ b/src/data/stylelist.cpp
@@ -1,29 +1,34 @@
-#include "nodestylelist.h"
+#include "stylelist.h"
#include <QTextStream>
-NodeStyleList::NodeStyleList(QObject *parent) : QAbstractListModel(parent)
+StyleList::StyleList(bool edgeStyles, QObject *parent) : QAbstractListModel(parent), _edgeStyles(edgeStyles)
{
+ if (edgeStyles) {
+ _styles << noneEdgeStyle;
+ } else {
+ _styles << noneStyle;
+ }
}
-Style *NodeStyleList::style(QString name)
+Style *StyleList::style(QString name)
{
foreach (Style *s, _styles)
if (s->name() == name) return s;
return nullptr;
}
-Style *NodeStyleList::style(int i)
+Style *StyleList::style(int i)
{
return _styles[i];
}
-int NodeStyleList::length() const
+int StyleList::length() const
{
return _styles.length();
}
-void NodeStyleList::addStyle(Style *s)
+void StyleList::addStyle(Style *s)
{
s->setParent(this);
if (s->category() == _category) {
@@ -36,21 +41,25 @@ void NodeStyleList::addStyle(Style *s)
}
}
-void NodeStyleList::clear()
+void StyleList::clear()
{
int n = numInCategory();
if (n > 0) {
- beginRemoveRows(QModelIndex(), 0, n - 1);
+ beginRemoveRows(QModelIndex(), 1, n - 1);
_styles.clear();
+ if (_edgeStyles) _styles << noneEdgeStyle;
+ else _styles << noneStyle;
endRemoveRows();
} else {
_styles.clear();
+ if (_edgeStyles) _styles << noneEdgeStyle;
+ else _styles << noneStyle;
}
_category = "";
}
-QString NodeStyleList::tikz()
+QString StyleList::tikz()
{
QString str;
QTextStream code(&str);
@@ -59,22 +68,22 @@ QString NodeStyleList::tikz()
return str;
}
-int NodeStyleList::numInCategory() const
+int StyleList::numInCategory() const
{
int c = 0;
foreach (Style *s, _styles) {
- if (_category == "" || s->category() == _category) {
+ if (_category == "" || s->isNone() || s->category() == _category) {
++c;
}
}
return c;
}
-int NodeStyleList::nthInCategory(int n) const
+int StyleList::nthInCategory(int n) const
{
int c = 0;
for (int j = 0; j < _styles.length(); ++j) {
- if (_category == "" || _styles[j]->category() == _category) {
+ if (_category == "" || _styles[j]->isNone() || _styles[j]->category() == _category) {
if (c == n) return j;
else ++c;
}
@@ -82,12 +91,12 @@ int NodeStyleList::nthInCategory(int n) const
return -1;
}
-Style *NodeStyleList::styleInCategory(int n) const
+Style *StyleList::styleInCategory(int n) const
{
return _styles[nthInCategory(n)];
}
-QVariant NodeStyleList::data(const QModelIndex &index, int role) const
+QVariant StyleList::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole) {
return QVariant(styleInCategory(index.row())->name());
@@ -98,17 +107,21 @@ QVariant NodeStyleList::data(const QModelIndex &index, int role) const
}
}
-int NodeStyleList::rowCount(const QModelIndex &/*parent*/) const
+int StyleList::rowCount(const QModelIndex &/*parent*/) const
{
return numInCategory();
}
-QString NodeStyleList::category() const
+QString StyleList::category() const
{
return _category;
}
-void NodeStyleList::setCategory(const QString &category)
+void StyleList::setCategory(const QString &category)
{
- _category = category;
+ if (category != _category) {
+ beginResetModel();
+ _category = category;
+ endResetModel();
+ }
}
diff --git a/src/data/nodestylelist.h b/src/data/stylelist.h
index 5a53721..f698761 100644
--- a/src/data/nodestylelist.h
+++ b/src/data/stylelist.h
@@ -5,11 +5,11 @@
#include <QAbstractListModel>
-class NodeStyleList : public QAbstractListModel
+class StyleList : public QAbstractListModel
{
Q_OBJECT
public:
- explicit NodeStyleList(QObject *parent = nullptr);
+ explicit StyleList(bool edgeStyles = false, QObject *parent = nullptr);
Style *style(QString name);
Style *style(int i);
int length() const;
@@ -35,6 +35,7 @@ public slots:
private:
QVector<Style*> _styles;
QString _category;
+ bool _edgeStyles;
};
#endif // NODESTYLELIST_H
diff --git a/src/data/tikzstyles.cpp b/src/data/tikzstyles.cpp
index 0645a72..522b3f5 100644
--- a/src/data/tikzstyles.cpp
+++ b/src/data/tikzstyles.cpp
@@ -26,7 +26,8 @@
TikzStyles::TikzStyles(QObject *parent) : QObject(parent)
{
- _nodeStyles = new NodeStyleList(this);
+ _nodeStyles = new StyleList(false, this);
+ _edgeStyles = new StyleList(true, this);
}
Style *TikzStyles::nodeStyle(QString name) const
@@ -38,16 +39,15 @@ Style *TikzStyles::nodeStyle(QString name) const
Style *TikzStyles::edgeStyle(QString name) const
{
- foreach (Style *s , _edgeStyles)
- if (s->name() == name) return s;
- return noneEdgeStyle;
+ Style *s = _edgeStyles->style(name);
+ return (s == nullptr) ? noneEdgeStyle : s;
}
void TikzStyles::clear()
{
_nodeStyles->clear();
- _edgeStyles.clear();
+ _edgeStyles->clear();
}
bool TikzStyles::loadStyles(QString fileName)
@@ -98,14 +98,14 @@ void TikzStyles::refreshModels(QStandardItemModel *nodeModel, QStandardItemModel
it->setSizeHint(QSize(48,48));
}
- Style *ns;
+ Style *s;
for (int i = 0; i < _nodeStyles->length(); ++i) {
- ns = _nodeStyles->style(i);
- if (category == "" || category == ns->propertyWithDefault("tikzit category", "", false))
+ s = _nodeStyles->style(i);
+ if (category == "" || category == s->propertyWithDefault("tikzit category", "", false))
{
- it = new QStandardItem(ns->icon(), ns->name());
+ it = new QStandardItem(s->icon(), s->name());
it->setEditable(false);
- it->setData(ns->name());
+ it->setData(s->name());
it->setSizeHint(QSize(48,48));
nodeModel->appendRow(it);
}
@@ -118,17 +118,26 @@ void TikzStyles::refreshModels(QStandardItemModel *nodeModel, QStandardItemModel
edgeModel->appendRow(it);
}
- foreach(Style *es, _edgeStyles) {
- //if (category == "" || category == es->propertyWithDefault("tikzit category", "", false))
- //{
- it = new QStandardItem(es->icon(), es->name());
- it->setEditable(false);
- it->setData(es->name());
- edgeModel->appendRow(it);
- //}
+ for (int i = 0; i < _edgeStyles->length(); ++i) {
+ s = _edgeStyles->style(i);
+ it = new QStandardItem(s->icon(), s->name());
+ it->setEditable(false);
+ it->setData(s->name());
+ it->setSizeHint(QSize(48,48));
+ edgeModel->appendRow(it);
}
}
+StyleList *TikzStyles::nodeStyles() const
+{
+ return _nodeStyles;
+}
+
+StyleList *TikzStyles::edgeStyles() const
+{
+ return _edgeStyles;
+}
+
QStringList TikzStyles::categories() const
{
QMap<QString,bool> cats; // use a QMap to keep keys sorted
@@ -156,7 +165,7 @@ QString TikzStyles::tikz() const
code << _nodeStyles->tikz();
code << "\n% Edge styles\n";
- foreach (Style *s, _edgeStyles) code << s->tikz() << "\n";
+ code << _edgeStyles->tikz();
code.flush();
return str;
@@ -165,12 +174,8 @@ QString TikzStyles::tikz() const
void TikzStyles::addStyle(QString name, GraphElementData *data)
{
Style *s = new Style(name, data);
- if (s->isEdgeStyle())
- { // edge style
- _edgeStyles << s;
- } else { // node style
- _nodeStyles->addStyle(new Style(name, data));
- }
+ if (s->isEdgeStyle()) _edgeStyles->addStyle(s);
+ else _nodeStyles->addStyle(s);
}
diff --git a/src/data/tikzstyles.h b/src/data/tikzstyles.h
index fbb12ff..5f372ab 100644
--- a/src/data/tikzstyles.h
+++ b/src/data/tikzstyles.h
@@ -20,7 +20,7 @@
#define PROJECT_H
#include "graphelementdata.h"
-#include "nodestylelist.h"
+#include "stylelist.h"
#include "style.h"
#include <QObject>
@@ -48,13 +48,16 @@ public:
QString category="",
bool includeNone=true);
+ StyleList *nodeStyles() const;
+ StyleList *edgeStyles() const;
+
signals:
public slots:
private:
- NodeStyleList *_nodeStyles;
- QVector<Style*> _edgeStyles;
+ StyleList *_nodeStyles;
+ StyleList* _edgeStyles;
QStringList _colNames;
QVector<QColor> _cols;
};
diff --git a/src/gui/stylepalette.cpp b/src/gui/stylepalette.cpp
index 7423f29..953d9d5 100644
--- a/src/gui/stylepalette.cpp
+++ b/src/gui/stylepalette.cpp
@@ -40,16 +40,16 @@ StylePalette::StylePalette(QWidget *parent) :
// restoreGeometry(geom.toByteArray());
// }
- _nodeModel = new QStandardItemModel(this);
- _edgeModel = new QStandardItemModel(this);
+// _nodeModel = new QStandardItemModel(this);
+// _edgeModel = new QStandardItemModel(this);
- ui->styleListView->setModel(_nodeModel);
+ ui->styleListView->setModel(tikzit->styles()->nodeStyles());
ui->styleListView->setViewMode(QListView::IconMode);
ui->styleListView->setMovement(QListView::Static);
ui->styleListView->setGridSize(QSize(48,48));
- ui->edgeStyleListView->setModel(_edgeModel);
+ ui->edgeStyleListView->setModel(tikzit->styles()->edgeStyles());
ui->edgeStyleListView->setViewMode(QListView::IconMode);
ui->edgeStyleListView->setMovement(QListView::Static);
ui->edgeStyleListView->setGridSize(QSize(48,48));
@@ -70,6 +70,9 @@ void StylePalette::reloadStyles()
QString f = tikzit->styleFile();
ui->styleFile->setText(f);
+ ui->styleListView->setModel(tikzit->styles()->nodeStyles());
+ ui->edgeStyleListView->setModel(tikzit->styles()->edgeStyles());
+
QString cat = ui->currentCategory->currentText();
ui->currentCategory->clear();
@@ -85,12 +88,12 @@ void StylePalette::changeNodeStyle(int increment)
QModelIndexList i = ui->styleListView->selectionModel()->selectedIndexes();
int row = 0;
if (!i.isEmpty()) {
- int row = (i[0].row()+increment)%_nodeModel->rowCount();
- if (row < 0) row += _nodeModel->rowCount();
+ int row = (i[0].row()+increment)% tikzit->styles()->nodeStyles()->numInCategory();
+ if (row < 0) row += tikzit->styles()->nodeStyles()->numInCategory();
}
//QModelIndex i1 = ui->styleListView->rootIndex().child(row, 0);
- QModelIndex i1 = _nodeModel->index(row,0);
+ QModelIndex i1 =tikzit->styles()->nodeStyles()->index(row,0);
ui->styleListView->selectionModel()->select(i1, QItemSelectionModel::ClearAndSelect);
ui->styleListView->scrollTo(i1);
}
@@ -134,7 +137,6 @@ void StylePalette::nodeStyleDoubleClicked(const QModelIndex &)
void StylePalette::edgeStyleDoubleClicked(const QModelIndex &)
{
- qDebug() << "got double click";
tikzit->activeWindow()->tikzScene()->applyActiveStyleToEdges();
}
@@ -157,7 +159,8 @@ void StylePalette::on_buttonRefreshTikzstyles_clicked()
void StylePalette::on_currentCategory_currentTextChanged(const QString &cat)
{
- tikzit->styles()->refreshModels(_nodeModel, _edgeModel, cat);
+ //tikzit->styles()->refreshModels(_nodeModel, _edgeModel, cat);
+ tikzit->styles()->nodeStyles()->setCategory(cat);
}
//void StylePalette::on_buttonApplyNodeStyle_clicked()
diff --git a/src/gui/stylepalette.h b/src/gui/stylepalette.h
index fc4e253..7cdef0c 100644
--- a/src/gui/stylepalette.h
+++ b/src/gui/stylepalette.h
@@ -53,8 +53,6 @@ private:
void changeNodeStyle(int increment);
Ui::StylePalette *ui;
- QStandardItemModel *_nodeModel;
- QStandardItemModel *_edgeModel;
protected:
void closeEvent(QCloseEvent *event) override;
diff --git a/tikzit.pro b/tikzit.pro
index bd25e7d..5ff61fa 100644
--- a/tikzit.pro
+++ b/tikzit.pro
@@ -53,7 +53,7 @@ SOURCES += src/gui/mainwindow.cpp \
src/data/tikzstyles.cpp \
src/data/style.cpp \
src/gui/styleeditor.cpp \
- src/data/nodestylelist.cpp
+ src/data/stylelist.cpp
HEADERS += src/gui/mainwindow.h \
src/gui/toolpalette.h \
@@ -79,7 +79,7 @@ HEADERS += src/gui/mainwindow.h \
src/data/tikzstyles.h \
src/data/style.h \
src/gui/styleeditor.h \
- src/data/nodestylelist.h
+ src/data/stylelist.h
FORMS += src/gui/mainwindow.ui \
src/gui/propertypalette.ui \