/* TikZiT - a GUI diagram editor for TikZ Copyright (C) 2018 Aleks Kissinger This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "stylepalette.h" #include "ui_stylepalette.h" #include "tikzit.h" #include #include #include #include #include #include #include #include StylePalette::StylePalette(QWidget *parent) : QDockWidget(parent), ui(new Ui::StylePalette) { ui->setupUi(this); _lastStyleIndex = 0; _lastEdgeStyleIndex = 0; 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(tikzit->styles()->edgeStyles()); ui->edgeStyleListView->setViewMode(QListView::IconMode); ui->edgeStyleListView->setMovement(QListView::Static); ui->edgeStyleListView->setGridSize(QSize(48,48)); reloadStyles(); connect(ui->styleListView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT( nodeStyleDoubleClicked(const QModelIndex&)) ); connect(ui->edgeStyleListView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(edgeStyleDoubleClicked(const QModelIndex&))); } StylePalette::~StylePalette() { delete ui; } 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(); // TODO: styleFile() should return invalid string if no style file loaded if (f != "[no styles]") { ui->currentCategory->addItems(tikzit->styles()->categories()); ui->currentCategory->setCurrentText(cat); } clearNodeStyle(); clearEdgeStyle(); } int StylePalette::styleIndex() { QModelIndexList i = ui->styleListView->selectionModel()->selectedIndexes(); if (!i.isEmpty()) return i[0].row(); else return 0; } void StylePalette::setStyleIndex(int i) { _lastStyleIndex = styleIndex(); if (i < 0) { i = 0; } else { int max = tikzit->styles()->nodeStyles()->numInCategory(); if (i >= max) i = max - 1; } QModelIndex i1 =tikzit->styles()->nodeStyles()->index(i,0); ui->styleListView->selectionModel()->select(i1, QItemSelectionModel::ClearAndSelect); ui->styleListView->scrollTo(i1); } int StylePalette::edgeStyleIndex() { QModelIndexList i = ui->edgeStyleListView->selectionModel()->selectedIndexes(); if (!i.isEmpty()) return i[0].row(); else return 0; } void StylePalette::setEdgeStyleIndex(int i) { _lastEdgeStyleIndex = edgeStyleIndex(); if (i < 0) { i = 0; } else { int max = tikzit->styles()->edgeStyles()->numInCategory(); if (i >= max) i = max - 1; } QModelIndex i1 =tikzit->styles()->edgeStyles()->index(i,0); ui->edgeStyleListView->selectionModel()->select(i1, QItemSelectionModel::ClearAndSelect); ui->edgeStyleListView->scrollTo(i1); } void StylePalette::nextNodeStyle() { setStyleIndex(styleIndex()+1); } void StylePalette::previousNodeStyle() { setStyleIndex(styleIndex()-1); } void StylePalette::clearNodeStyle() { setStyleIndex(0); } void StylePalette::toggleClearNodeStyle() { if (styleIndex() == 0) setStyleIndex(_lastStyleIndex); else setStyleIndex(0); } void StylePalette::nextEdgeStyle() { setEdgeStyleIndex(edgeStyleIndex()+1); } void StylePalette::previousEdgeStyle() { setEdgeStyleIndex(edgeStyleIndex()-1); } void StylePalette::clearEdgeStyle() { setEdgeStyleIndex(0); } void StylePalette::toggleClearEdgeStyle() { if (edgeStyleIndex() == 0) setEdgeStyleIndex(_lastEdgeStyleIndex); else setEdgeStyleIndex(0); } QString StylePalette::activeNodeStyleName() { const QModelIndexList i = ui->styleListView->selectionModel()->selectedIndexes(); if (i.isEmpty()) { return "none"; } else { return i[0].data().toString(); } } QString StylePalette::activeEdgeStyleName() { const QModelIndexList i = ui->edgeStyleListView->selectionModel()->selectedIndexes(); if (i.isEmpty()) { return "none"; } else { return i[0].data().toString(); } } void StylePalette::nodeStyleDoubleClicked(const QModelIndex &) { tikzit->activeWindow()->tikzScene()->applyActiveStyleToNodes(); } void StylePalette::edgeStyleDoubleClicked(const QModelIndex &) { tikzit->activeWindow()->tikzScene()->applyActiveStyleToEdges(); } void StylePalette::on_buttonNewTikzstyles_clicked() { tikzit->newTikzStyles(); } void StylePalette::on_buttonOpenTikzstyles_clicked() { tikzit->openTikzStyles(); } void StylePalette::on_buttonEditTikzstyles_clicked() { if (tikzit->styleFile() != "[no styles]") { tikzit->showStyleEditor(); } else { QMessageBox::warning(0, "No style file", "You cannot edit styles until a style file is loaded. Either create a new style file or load an existing one."); } } void StylePalette::on_buttonRefreshTikzstyles_clicked() { QSettings settings("tikzit", "tikzit"); QString path = settings.value("previous-tikzstyles-file").toString(); if (!path.isEmpty()) tikzit->loadStyles(path); } void StylePalette::on_currentCategory_currentTextChanged(const QString &cat) { //tikzit->styles()->refreshModels(_nodeModel, _edgeModel, cat); tikzit->styles()->nodeStyles()->setCategory(cat); clearNodeStyle(); } //void StylePalette::on_buttonApplyNodeStyle_clicked() //{ // if (tikzit->activeWindow() != 0) tikzit->activeWindow()->tikzScene()->applyActiveStyleToNodes(); //} void StylePalette::resizeEvent(QResizeEvent *event) { QDockWidget::resizeEvent(event); ui->styleListView->setGridSize(QSize(48,48)); ui->edgeStyleListView->setGridSize(QSize(48,48)); }