Theme Editor: Basic save-as functionality working, but only invoked when a tab is...
[kugel-rb.git] / utils / themeeditor / skindocument.cpp
blob8617030180e0419621ba7558e1fb1967919c3355
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2010 Robert Bieber
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
22 #include "skindocument.h"
24 #include <QFile>
25 #include <QTimer>
26 #include <QSettings>
27 #include <QMessageBox>
28 #include <QFileDialog>
30 SkinDocument::SkinDocument(QWidget *parent) :
31 QWidget(parent)
33 setupUI();
35 title = "Untitled";
36 fileName = "";
37 saved = true;
40 SkinDocument::~SkinDocument()
42 delete highlighter;
43 delete model;
46 bool SkinDocument::requestClose()
48 saveAs();
49 return true;
52 void SkinDocument::setupUI()
54 /* Setting up the text edit */
55 layout = new QHBoxLayout;
56 editor = new QPlainTextEdit(this);
57 layout->addWidget(editor);
59 setLayout(layout);
61 /* Attaching the syntax highlighter */
62 highlighter = new SkinHighlighter(QColor(0,180,0), QColor(255,0,0),
63 QColor(0,0,255), QColor(120,120,120),
64 editor->document());
66 /* Setting up the model */
67 model = new ParseTreeModel("");
69 /* Connecting the editor's signal */
70 QObject::connect(editor, SIGNAL(textChanged()),
71 this, SLOT(codeChanged()));
74 void SkinDocument::codeChanged()
76 model->changeTree(editor->document()->toPlainText().toAscii());
77 if(saved == true)
79 saved = false;
80 title.append(tr("*"));
81 emit titleChanged(title);
85 void SkinDocument::save()
87 QFile fout(fileName);
89 if(!fout.exists())
91 QTimer::singleShot(0, this, SLOT(saveAs()));
92 return;
95 fout.open(QFile::WriteOnly);
96 fout.write(editor->document()->toPlainText().toAscii());
97 fout.close();
99 saved = true;
102 void SkinDocument::saveAs()
104 /* Determining the directory to open */
105 QSettings settings;
107 settings.beginGroup("SkinDocument");
108 QString openDir = settings.value("defaultDirectory", "").toString();
110 fileName = QFileDialog::getSaveFileName(this, tr("Save File"), openDir,"");
111 QString directory = fileName;
112 directory.chop(fileName.length() - fileName.lastIndexOf('/') - 1);
113 settings.setValue("defaultDirectory", directory);
115 settings.endGroup();
117 QFile fout(fileName);
118 fout.open(QFile::WriteOnly);
119 fout.write(editor->document()->toPlainText().toAscii());
120 fout.close();
122 saved = true;