diff options
author | Robert Bieber <robby@bieberphoto.com> | 2010-08-05 07:38:02 +0000 |
---|---|---|
committer | Robert Bieber <robby@bieberphoto.com> | 2010-08-05 07:38:02 +0000 |
commit | 2ea1a34f981fec971057c4df23791e3cf70a1b0c (patch) | |
tree | ef3ea79551dfe23ed96d8cb7ed87557fd393afed /utils | |
parent | bfc20975b068d707ad46a5f02d8561852e41f311 (diff) | |
download | rockbox-2ea1a34f981fec971057c4df23791e3cf70a1b0c.tar.gz rockbox-2ea1a34f981fec971057c4df23791e3cf70a1b0c.zip |
Theme Editor: Stopped bug that caused segfault if SBS element was moved from within a WPS preview
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27712 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils')
-rw-r--r-- | utils/themeeditor/models/parsetreemodel.cpp | 17 | ||||
-rw-r--r-- | utils/themeeditor/models/parsetreemodel.h | 1 |
2 files changed, 12 insertions, 6 deletions
diff --git a/utils/themeeditor/models/parsetreemodel.cpp b/utils/themeeditor/models/parsetreemodel.cpp index f83443a5e4..e30d0be09d 100644 --- a/utils/themeeditor/models/parsetreemodel.cpp +++ b/utils/themeeditor/models/parsetreemodel.cpp | |||
@@ -35,7 +35,7 @@ | |||
35 | #include <iostream> | 35 | #include <iostream> |
36 | 36 | ||
37 | ParseTreeModel::ParseTreeModel(const char* document, QObject* parent): | 37 | ParseTreeModel::ParseTreeModel(const char* document, QObject* parent): |
38 | QAbstractItemModel(parent) | 38 | QAbstractItemModel(parent), sbsModel(0) |
39 | { | 39 | { |
40 | this->tree = skin_parse(document); | 40 | this->tree = skin_parse(document); |
41 | 41 | ||
@@ -54,6 +54,8 @@ ParseTreeModel::~ParseTreeModel() | |||
54 | delete root; | 54 | delete root; |
55 | if(tree) | 55 | if(tree) |
56 | skin_free_tree(tree); | 56 | skin_free_tree(tree); |
57 | if(sbsModel) | ||
58 | sbsModel->deleteLater(); | ||
57 | } | 59 | } |
58 | 60 | ||
59 | QString ParseTreeModel::genCode() | 61 | QString ParseTreeModel::genCode() |
@@ -324,19 +326,22 @@ QGraphicsScene* ParseTreeModel::render(ProjectModel* project, | |||
324 | { | 326 | { |
325 | QFile sbs(sbsFile); | 327 | QFile sbs(sbsFile); |
326 | sbs.open(QFile::ReadOnly | QFile::Text); | 328 | sbs.open(QFile::ReadOnly | QFile::Text); |
327 | ParseTreeModel sbsModel(QString(sbs.readAll()).toAscii()); | ||
328 | 329 | ||
329 | if(sbsModel.root != 0) | 330 | if(sbsModel) |
331 | sbsModel->deleteLater(); | ||
332 | sbsModel = new ParseTreeModel(QString(sbs.readAll()).toAscii()); | ||
333 | |||
334 | if(sbsModel->root != 0) | ||
330 | { | 335 | { |
331 | RBRenderInfo sbsInfo(&sbsModel, project, doc, &settings, device, | 336 | RBRenderInfo sbsInfo(sbsModel, project, doc, &settings, device, |
332 | sbsScreen); | 337 | sbsScreen); |
333 | 338 | ||
334 | sbsScreen = new RBScreen(sbsInfo, remote); | 339 | sbsScreen = new RBScreen(sbsInfo, remote); |
335 | scene->addItem(sbsScreen); | 340 | scene->addItem(sbsScreen); |
336 | 341 | ||
337 | sbsInfo = RBRenderInfo(&sbsModel, project, doc, &settings, | 342 | sbsInfo = RBRenderInfo(sbsModel, project, doc, &settings, |
338 | device, sbsScreen); | 343 | device, sbsScreen); |
339 | sbsModel.root->render(sbsInfo); | 344 | sbsModel->root->render(sbsInfo); |
340 | } | 345 | } |
341 | 346 | ||
342 | } | 347 | } |
diff --git a/utils/themeeditor/models/parsetreemodel.h b/utils/themeeditor/models/parsetreemodel.h index 3c20a8ed3a..2c762f3645 100644 --- a/utils/themeeditor/models/parsetreemodel.h +++ b/utils/themeeditor/models/parsetreemodel.h | |||
@@ -81,6 +81,7 @@ public: | |||
81 | 81 | ||
82 | private: | 82 | private: |
83 | ParseTreeNode* root; | 83 | ParseTreeNode* root; |
84 | ParseTreeModel* sbsModel; | ||
84 | struct skin_element* tree; | 85 | struct skin_element* tree; |
85 | QGraphicsScene* scene; | 86 | QGraphicsScene* scene; |
86 | }; | 87 | }; |