Tracking: Give more reasonable error message directly in the interface
[blender.git] / source / blender / collada / ExtraHandler.cpp
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16
17 /** \file
18  * \ingroup collada
19  */
20
21 #include <stddef.h>
22 #include "BLI_string.h"
23
24 #include "ExtraHandler.h"
25
26 ExtraHandler::ExtraHandler(DocumentImporter *dimp, AnimationImporter *aimp) : currentExtraTags(0)
27 {
28   this->dimp = dimp;
29   this->aimp = aimp;
30 }
31
32 ExtraHandler::~ExtraHandler()
33 {
34 }
35
36 bool ExtraHandler::elementBegin(const char *elementName, const char **attributes)
37 {
38   /* \todo attribute handling for profile tags */
39   currentElement = std::string(elementName);
40   // addToSidTree(attributes[0], attributes[1]);
41   return true;
42 }
43
44 bool ExtraHandler::elementEnd(const char *elementName)
45 {
46   return true;
47 }
48
49 bool ExtraHandler::textData(const char *text, size_t textLength)
50 {
51   char buf[1024];
52
53   if (currentElement.length() == 0 || currentExtraTags == 0) {
54     return false;
55   }
56
57   BLI_strncpy(buf, text, textLength + 1);
58   currentExtraTags->addTag(currentElement, std::string(buf));
59   return true;
60 }
61
62 bool ExtraHandler::parseElement(const char *profileName,
63                                 const unsigned long &elementHash,
64                                 const COLLADAFW::UniqueId &uniqueId)
65 {
66   /* implement for backwards compatibility, new version added object parameter */
67   return parseElement(profileName, elementHash, uniqueId, NULL);
68 }
69
70 bool ExtraHandler::parseElement(const char *profileName,
71                                 const unsigned long &elementHash,
72                                 const COLLADAFW::UniqueId &uniqueId,
73                                 COLLADAFW::Object *object)
74 {
75   if (BLI_strcaseeq(profileName, "blender")) {
76 #if 0
77     printf("In parseElement for supported profile %s for id %s\n",
78            profileName,
79            uniqueId.toAscii().c_str());
80 #endif
81     currentUid = uniqueId;
82     ExtraTags *et = dimp->getExtraTags(uniqueId);
83     if (!et) {
84       et = new ExtraTags(std::string(profileName));
85       dimp->addExtraTags(uniqueId, et);
86     }
87     currentExtraTags = et;
88     return true;
89   }
90   // printf("In parseElement for unsupported profile %s for id %s\n", profileName,
91   // uniqueId.toAscii().c_str());
92   return false;
93 }