mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-16 11:37:38 -04:00
Theme Editor: Changed anged error reporting method in parser, added error messages to status bar in editor
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26672 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
bd2ba8068c
commit
0e44ce9bed
8 changed files with 65 additions and 27 deletions
|
@ -94,6 +94,10 @@ void EditorWindow::setupUI()
|
||||||
QObject::connect(ui->actionPreferences, SIGNAL(triggered()),
|
QObject::connect(ui->actionPreferences, SIGNAL(triggered()),
|
||||||
prefs, SLOT(exec()));
|
prefs, SLOT(exec()));
|
||||||
|
|
||||||
|
/* Setting up the parse status label */
|
||||||
|
parseStatus = new QLabel(this);
|
||||||
|
ui->statusbar->addWidget(parseStatus);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorWindow::setupMenus()
|
void EditorWindow::setupMenus()
|
||||||
|
@ -144,7 +148,7 @@ void EditorWindow::addTab(SkinDocument *doc)
|
||||||
|
|
||||||
void EditorWindow::newTab()
|
void EditorWindow::newTab()
|
||||||
{
|
{
|
||||||
SkinDocument* doc = new SkinDocument;
|
SkinDocument* doc = new SkinDocument(parseStatus);
|
||||||
addTab(doc);
|
addTab(doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,8 +165,12 @@ void EditorWindow::shiftTab(int index)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/* Syncing the tree view and the status bar */
|
||||||
ui->parseTree->setModel(dynamic_cast<SkinDocument*>
|
ui->parseTree->setModel(dynamic_cast<SkinDocument*>
|
||||||
(ui->editorTabs->currentWidget())->getModel());
|
(ui->editorTabs->currentWidget())->getModel());
|
||||||
|
parseStatus->setText(dynamic_cast<SkinDocument*>
|
||||||
|
(ui->editorTabs->currentWidget())->getStatus());
|
||||||
|
|
||||||
ui->actionSave_Document->setEnabled(true);
|
ui->actionSave_Document->setEnabled(true);
|
||||||
ui->actionSave_Document_As->setEnabled(true);
|
ui->actionSave_Document_As->setEnabled(true);
|
||||||
ui->actionClose_Document->setEnabled(true);
|
ui->actionClose_Document->setEnabled(true);
|
||||||
|
@ -220,7 +228,7 @@ void EditorWindow::openFile()
|
||||||
QString current = fileNames[i];
|
QString current = fileNames[i];
|
||||||
|
|
||||||
/* Adding a new document for each file name */
|
/* Adding a new document for each file name */
|
||||||
SkinDocument* doc = new SkinDocument(current);
|
SkinDocument* doc = new SkinDocument(parseStatus, current);
|
||||||
addTab(doc);
|
addTab(doc);
|
||||||
|
|
||||||
/* And setting the new default directory */
|
/* And setting the new default directory */
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#define EDITORWINDOW_H
|
#define EDITORWINDOW_H
|
||||||
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
#include <QLabel>
|
||||||
|
|
||||||
#include "parsetreemodel.h"
|
#include "parsetreemodel.h"
|
||||||
#include "skinhighlighter.h"
|
#include "skinhighlighter.h"
|
||||||
|
@ -64,6 +65,7 @@ private:
|
||||||
|
|
||||||
Ui::EditorWindow *ui;
|
Ui::EditorWindow *ui;
|
||||||
PreferencesDialog* prefs;
|
PreferencesDialog* prefs;
|
||||||
|
QLabel* parseStatus;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // EDITORWINDOW_H
|
#endif // EDITORWINDOW_H
|
||||||
|
|
|
@ -55,18 +55,23 @@ QString ParseTreeModel::genCode()
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ParseTreeModel::changeTree(const char *document)
|
QString ParseTreeModel::changeTree(const char *document)
|
||||||
{
|
{
|
||||||
struct skin_element* test = skin_parse(document);
|
struct skin_element* test = skin_parse(document);
|
||||||
|
|
||||||
if(!test)
|
if(!test)
|
||||||
return false;
|
{
|
||||||
|
QString error = tr("Error on line ") +
|
||||||
|
QString::number(skin_error_line())
|
||||||
|
+ tr(": ") + QString(skin_error_message());
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
ParseTreeNode* temp = new ParseTreeNode(test);
|
ParseTreeNode* temp = new ParseTreeNode(test);
|
||||||
if(root && temp->genHash() == root->genHash())
|
if(root && temp->genHash() == root->genHash())
|
||||||
{
|
{
|
||||||
delete temp;
|
delete temp;
|
||||||
return true;
|
return tr("Document Parses Successfully");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(root)
|
if(root)
|
||||||
|
@ -81,7 +86,7 @@ bool ParseTreeModel::changeTree(const char *document)
|
||||||
emit beginInsertRows(QModelIndex(), 0, temp->numChildren() - 1);
|
emit beginInsertRows(QModelIndex(), 0, temp->numChildren() - 1);
|
||||||
emit endInsertRows();
|
emit endInsertRows();
|
||||||
|
|
||||||
return true;
|
return tr("Document Parses Successfully");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,8 +48,7 @@ public:
|
||||||
|
|
||||||
QString genCode();
|
QString genCode();
|
||||||
/* Changes the parse tree to a new document */
|
/* Changes the parse tree to a new document */
|
||||||
bool changeTree(const char* document);
|
QString changeTree(const char* document);
|
||||||
|
|
||||||
QModelIndex index(int row, int column, const QModelIndex& parent) const;
|
QModelIndex index(int row, int column, const QModelIndex& parent) const;
|
||||||
QModelIndex parent(const QModelIndex &child) const;
|
QModelIndex parent(const QModelIndex &child) const;
|
||||||
int rowCount(const QModelIndex &parent) const;
|
int rowCount(const QModelIndex &parent) const;
|
||||||
|
|
|
@ -31,54 +31,68 @@
|
||||||
int debug_indent_level = 0;
|
int debug_indent_level = 0;
|
||||||
extern int skin_line;
|
extern int skin_line;
|
||||||
|
|
||||||
|
/* Global error variables */
|
||||||
|
int error_line;
|
||||||
|
char* error_message;
|
||||||
|
|
||||||
/* Debugging functions */
|
/* Debugging functions */
|
||||||
void skin_error(enum skin_errorcode error)
|
void skin_error(enum skin_errorcode error)
|
||||||
{
|
{
|
||||||
|
|
||||||
fprintf(stderr, "Error on line %d: ", skin_line);
|
error_line = skin_line;
|
||||||
|
|
||||||
switch(error)
|
switch(error)
|
||||||
{
|
{
|
||||||
case MEMORY_LIMIT_EXCEEDED:
|
case MEMORY_LIMIT_EXCEEDED:
|
||||||
fprintf(stderr, "Memory limit exceeded\n");
|
error_message = "Memory limit exceeded";
|
||||||
break;
|
break;
|
||||||
case NEWLINE_EXPECTED:
|
case NEWLINE_EXPECTED:
|
||||||
fprintf(stderr, "Newline expected\n");
|
error_message = "Newline expected";
|
||||||
break;
|
break;
|
||||||
case ILLEGAL_TAG:
|
case ILLEGAL_TAG:
|
||||||
fprintf(stderr, "Illegal tag\n");
|
error_message = "Illegal tag";
|
||||||
break;
|
break;
|
||||||
case ARGLIST_EXPECTED:
|
case ARGLIST_EXPECTED:
|
||||||
fprintf(stderr, "Argument list expected\n");
|
error_message = "Argument list expected";
|
||||||
break;
|
break;
|
||||||
case TOO_MANY_ARGS:
|
case TOO_MANY_ARGS:
|
||||||
fprintf(stderr, "Too many arguments given\n");
|
error_message = "Too many arguments given";
|
||||||
break;
|
break;
|
||||||
case DEFAULT_NOT_ALLOWED:
|
case DEFAULT_NOT_ALLOWED:
|
||||||
fprintf(stderr, "Argument can not be set to default\n");
|
error_message = "Argument can not be set to default";
|
||||||
break;
|
break;
|
||||||
case UNEXPECTED_NEWLINE:
|
case UNEXPECTED_NEWLINE:
|
||||||
fprintf(stderr, "Unexpected newline\n");
|
error_message = "Unexpected newline";
|
||||||
break;
|
break;
|
||||||
case INSUFFICIENT_ARGS:
|
case INSUFFICIENT_ARGS:
|
||||||
fprintf(stderr, "Not enough arguments\n");
|
error_message = "Not enough arguments";
|
||||||
break;
|
break;
|
||||||
case INT_EXPECTED:
|
case INT_EXPECTED:
|
||||||
fprintf(stderr, "Expected integer\n");
|
error_message = "Expected integer";
|
||||||
break;
|
break;
|
||||||
case SEPERATOR_EXPECTED:
|
case SEPERATOR_EXPECTED:
|
||||||
fprintf(stderr, "Expected argument seperator\n");
|
error_message = "Expected argument seperator";
|
||||||
break;
|
break;
|
||||||
case CLOSE_EXPECTED:
|
case CLOSE_EXPECTED:
|
||||||
fprintf(stderr, "Expected list close\n");
|
error_message = "Expected list close";
|
||||||
break;
|
break;
|
||||||
case MULTILINE_EXPECTED:
|
case MULTILINE_EXPECTED:
|
||||||
fprintf(stderr, "Expected subline seperator\n");
|
error_message = "Expected subline seperator";
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int skin_error_line()
|
||||||
|
{
|
||||||
|
return error_line;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* skin_error_message()
|
||||||
|
{
|
||||||
|
return error_message;
|
||||||
|
}
|
||||||
|
|
||||||
void skin_debug_tree(struct skin_element* root)
|
void skin_debug_tree(struct skin_element* root)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -32,6 +32,8 @@ extern "C"
|
||||||
|
|
||||||
/* Debugging functions */
|
/* Debugging functions */
|
||||||
void skin_error(enum skin_errorcode error);
|
void skin_error(enum skin_errorcode error);
|
||||||
|
int skin_error_line();
|
||||||
|
char* skin_error_message();
|
||||||
void skin_debug_tree(struct skin_element* root);
|
void skin_debug_tree(struct skin_element* root);
|
||||||
|
|
||||||
/* Auxiliary debug functions */
|
/* Auxiliary debug functions */
|
||||||
|
|
|
@ -27,7 +27,8 @@
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
|
||||||
SkinDocument::SkinDocument(QWidget *parent) : QWidget(parent)
|
SkinDocument::SkinDocument(QLabel* statusLabel, QWidget *parent) :
|
||||||
|
QWidget(parent), statusLabel(statusLabel)
|
||||||
{
|
{
|
||||||
setupUI();
|
setupUI();
|
||||||
|
|
||||||
|
@ -36,8 +37,8 @@ SkinDocument::SkinDocument(QWidget *parent) : QWidget(parent)
|
||||||
saved = "";
|
saved = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
SkinDocument::SkinDocument(QString file, QWidget *parent):
|
SkinDocument::SkinDocument(QLabel* statusLabel, QString file, QWidget *parent):
|
||||||
QWidget(parent), fileName(file)
|
QWidget(parent), fileName(file), statusLabel(statusLabel)
|
||||||
{
|
{
|
||||||
setupUI();
|
setupUI();
|
||||||
|
|
||||||
|
@ -155,7 +156,9 @@ void SkinDocument::settingsChanged()
|
||||||
|
|
||||||
void SkinDocument::codeChanged()
|
void SkinDocument::codeChanged()
|
||||||
{
|
{
|
||||||
model->changeTree(editor->document()->toPlainText().toAscii());
|
parseStatus = model->changeTree(editor->document()->
|
||||||
|
toPlainText().toAscii());
|
||||||
|
statusLabel->setText(parseStatus);
|
||||||
|
|
||||||
if(editor->document()->toPlainText() != saved)
|
if(editor->document()->toPlainText() != saved)
|
||||||
emit titleChanged(title + QChar('*'));
|
emit titleChanged(title + QChar('*'));
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#define SKINDOCUMENT_H
|
#define SKINDOCUMENT_H
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <QLabel>
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QPlainTextEdit>
|
#include <QPlainTextEdit>
|
||||||
|
|
||||||
|
@ -44,14 +45,15 @@ public:
|
||||||
"All Files (*.*)");
|
"All Files (*.*)");
|
||||||
}
|
}
|
||||||
|
|
||||||
SkinDocument(QWidget *parent = 0);
|
SkinDocument(QLabel* statusLabel, QWidget *parent = 0);
|
||||||
SkinDocument(QString file, QWidget* parent = 0);
|
SkinDocument(QLabel* statusLabel, QString file, QWidget* parent = 0);
|
||||||
virtual ~SkinDocument();
|
virtual ~SkinDocument();
|
||||||
|
|
||||||
void connectPrefs(PreferencesDialog* prefs);
|
void connectPrefs(PreferencesDialog* prefs);
|
||||||
|
|
||||||
ParseTreeModel* getModel(){ return model; }
|
ParseTreeModel* getModel(){ return model; }
|
||||||
QString getTitle(){ return title; }
|
QString getTitle(){ return title; }
|
||||||
|
QString getStatus(){ return parseStatus; }
|
||||||
void genCode(){ editor->document()->setPlainText(model->genCode()); }
|
void genCode(){ editor->document()->setPlainText(model->genCode()); }
|
||||||
|
|
||||||
void save();
|
void save();
|
||||||
|
@ -74,12 +76,15 @@ private:
|
||||||
QString title;
|
QString title;
|
||||||
QString fileName;
|
QString fileName;
|
||||||
QString saved;
|
QString saved;
|
||||||
|
QString parseStatus;
|
||||||
|
|
||||||
QLayout* layout;
|
QLayout* layout;
|
||||||
QPlainTextEdit* editor;
|
QPlainTextEdit* editor;
|
||||||
|
|
||||||
SkinHighlighter* highlighter;
|
SkinHighlighter* highlighter;
|
||||||
ParseTreeModel* model;
|
ParseTreeModel* model;
|
||||||
|
|
||||||
|
QLabel* statusLabel;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SKINDOCUMENT_H
|
#endif // SKINDOCUMENT_H
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue