summaryrefslogtreecommitdiff
path: root/src/gui/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/mainwindow.cpp')
-rw-r--r--src/gui/mainwindow.cpp217
1 files changed, 217 insertions, 0 deletions
diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp
new file mode 100644
index 0000000..c450b5b
--- /dev/null
+++ b/src/gui/mainwindow.cpp
@@ -0,0 +1,217 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+#include "mainmenu.h"
+#include "tikzassembler.h"
+#include "toolpalette.h"
+#include "tikzit.h"
+
+#include <QDebug>
+#include <QFile>
+#include <QList>
+#include <QSettings>
+#include <QMessageBox>
+#include <QFileDialog>
+#include <QTextEdit>
+#include <QTextBlock>
+#include <QIcon>
+#include <QPushButton>
+
+int MainWindow::_numWindows = 0;
+
+MainWindow::MainWindow(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::MainWindow)
+{
+ QSettings settings("tikzit", "tikzit");
+ _windowId = _numWindows;
+ _numWindows++;
+ ui->setupUi(this);
+
+ setWindowIcon(QIcon(":/images/tikzit.png"));
+
+ setAttribute(Qt::WA_DeleteOnClose, true);
+ _tikzDocument = new TikzDocument(this);
+
+ _toolPalette = new ToolPalette(this);
+ addToolBar(_toolPalette);
+
+ _stylePalette = new StylePalette(this);
+
+ _tikzScene = new TikzScene(_tikzDocument, _toolPalette, _stylePalette, this);
+ ui->tikzView->setScene(_tikzScene);
+
+ // TODO: check if each window should have a menu
+ _menu = new MainMenu();
+ _menu->setParent(this);
+ setMenuBar(_menu);
+
+ QVariant geom = settings.value("geometry-main");
+ QVariant state = settings.value("windowState-main");
+
+ if (geom.isValid()) {
+ restoreGeometry(geom.toByteArray());
+ }
+
+ if (state.isValid()) {
+ restoreState(state.toByteArray(), 2);
+ } else {
+ addDockWidget(Qt::RightDockWidgetArea, _stylePalette);
+ resizeDocks({_stylePalette}, {130}, Qt::Horizontal);
+ }
+
+ // initially, the source view should be collapsed
+ QList<int> sz = ui->splitter->sizes();
+ sz[0] = sz[0] + sz[1];
+ sz[1] = 0;
+ ui->splitter->setSizes(sz);
+
+ _tikzDocument->refreshTikz();
+
+ connect(_tikzDocument->undoStack(), SIGNAL(cleanChanged(bool)), this, SLOT(updateFileName()));
+ _menu->addDocks(createPopupMenu());
+
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
+ ui->tikzSource->setTabStopDistance(20.0);
+#else
+ ui->tikzSource->setTabStopWidth(20);
+#endif
+}
+
+MainWindow::~MainWindow()
+{
+ tikzit->removeWindow(this);
+ delete ui;
+}
+
+void MainWindow::open(QString fileName)
+{
+ _tikzDocument->open(fileName);
+
+ //ui->tikzSource->setText(_tikzDocument->tikz());
+
+
+ if (_tikzDocument->parseSuccess()) {
+ statusBar()->showMessage("TiKZ parsed successfully", 2000);
+ //setWindowTitle("TiKZiT - " + _tikzDocument->shortName());
+ _tikzScene->setTikzDocument(_tikzDocument);
+ updateFileName();
+ } else {
+ statusBar()->showMessage("Cannot read TiKZ source");
+ }
+
+}
+
+QSplitter *MainWindow::splitter() const {
+ return ui->splitter;
+}
+
+void MainWindow::closeEvent(QCloseEvent *event)
+{
+ //qDebug() << "got close event";
+
+ QSettings settings("tikzit", "tikzit");
+ settings.setValue("geometry-main", saveGeometry());
+ settings.setValue("windowState-main", saveState(2));
+
+ if (!_tikzDocument->isClean()) {
+ QString nm = _tikzDocument->shortName();
+ if (nm.isEmpty()) nm = "untitled";
+ QMessageBox::StandardButton resBtn = QMessageBox::question(
+ this, "Save Changes",
+ "Do you wish to save changes to " + nm + "?",
+ QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes,
+ QMessageBox::Yes);
+
+ if (resBtn == QMessageBox::Yes && _tikzDocument->save()) {
+ event->accept();
+ } else if (resBtn == QMessageBox::No) {
+ event->accept();
+ } else {
+ event->ignore();
+ }
+ } else {
+ event->accept();
+ }
+}
+
+void MainWindow::changeEvent(QEvent *event)
+{
+ if (event->type() == QEvent::ActivationChange && isActiveWindow()) {
+ tikzit->setActiveWindow(this);
+ //tikzit->stylePalette()->raise();
+ }
+ QMainWindow::changeEvent(event);
+}
+
+MainMenu *MainWindow::menu() const
+{
+ return _menu;
+}
+
+StylePalette *MainWindow::stylePalette() const
+{
+ return _stylePalette;
+}
+
+QString MainWindow::tikzSource()
+{
+ return ui->tikzSource->toPlainText();
+}
+
+void MainWindow::setSourceLine(int line)
+{
+ QTextCursor cursor(ui->tikzSource->document()->findBlockByLineNumber(line));
+ cursor.movePosition(QTextCursor::EndOfLine);
+ //ui->tikzSource->moveCursor(QTextCursor::End);
+ ui->tikzSource->setTextCursor(cursor);
+ ui->tikzSource->setFocus();
+}
+
+void MainWindow::updateFileName()
+{
+ QString nm = _tikzDocument->shortName();
+ if (nm.isEmpty()) nm = "untitled";
+ if (!_tikzDocument->isClean()) nm += "*";
+ setWindowTitle(nm + " - TikZiT");
+}
+
+void MainWindow::refreshTikz()
+{
+ // don't emit textChanged() when we update the tikz
+ ui->tikzSource->blockSignals(true);
+ ui->tikzSource->setText(_tikzDocument->tikz());
+ ui->tikzSource->blockSignals(false);
+}
+
+ToolPalette *MainWindow::toolPalette() const
+{
+ return _toolPalette;
+}
+
+TikzDocument *MainWindow::tikzDocument() const
+{
+ return _tikzDocument;
+}
+
+TikzScene *MainWindow::tikzScene() const
+{
+ return _tikzScene;
+}
+
+int MainWindow::windowId() const
+{
+ return _windowId;
+}
+
+TikzView *MainWindow::tikzView() const
+{
+ return ui->tikzView;
+}
+
+void MainWindow::on_tikzSource_textChanged()
+{
+ if (_tikzScene->enabled()) _tikzScene->setEnabled(false);
+}
+
+