@@ -85,6 +85,38 @@ bool mbCoreBuilder::saveCore(mbCoreProject *project)
8585 return saveXml (project);
8686}
8787
88+ bool mbCoreBuilder::importProject (const QString &file)
89+ {
90+ mbCoreProject *project = m_project;
91+ if (!project)
92+ return false ;
93+
94+ QScopedPointer<mbCoreDomProject> dom (newDomProject ());
95+ if (loadXml (file, dom.data ()))
96+ {
97+ Q_FOREACH (mbCoreDomDevice *d, dom->devices ())
98+ {
99+ mbCoreDevice *v = toDevice (d);
100+ project->deviceAdd (v);
101+ }
102+
103+ Q_FOREACH (mbCoreDomPort *d, dom->ports ())
104+ {
105+ mbCorePort *v = toPort (d);
106+ project->portAdd (v);
107+ }
108+
109+ Q_FOREACH (mbCoreDomDataView *d, dom->dataViews ())
110+ {
111+ mbCoreDataView *v = toDataView (d);
112+ project->dataViewAdd (v);
113+ }
114+ importDomProject (dom.data ());
115+ return true ;
116+ }
117+ return false ;
118+ }
119+
88120mbCoreProject *mbCoreBuilder::loadXml (const QString &file)
89121{
90122 QScopedPointer<mbCoreDomProject> dom (newDomProject ());
@@ -132,6 +164,81 @@ void mbCoreBuilder::refreshProjectFileInfo(mbCoreProject *project)
132164 project->setFileModified (fi.lastModified ());
133165}
134166
167+ bool mbCoreBuilder::loadXml (const QString &file, mbCoreDom *dom)
168+ {
169+ QFile qf (file);
170+ if (!qf.open (QIODevice::ReadOnly))
171+ {
172+ setError (qf.errorString ());
173+ return false ;
174+ }
175+ bool r = loadXml (&qf, dom);
176+ qf.close ();
177+ return r;
178+ }
179+
180+ bool mbCoreBuilder::loadXml (QIODevice *io, mbCoreDom *dom)
181+ {
182+ mbCoreXmlStreamReader reader (io);
183+ for (bool finished = false ; !finished && !reader.hasError ();)
184+ {
185+ switch (reader.readNext ())
186+ {
187+ case mbCoreXmlStreamReader::StartElement:
188+ {
189+ const QString tag = reader.name ().toString ().toLower ();
190+ if (tag == dom->tagName ())
191+ dom->read (reader);
192+ else
193+ reader.raiseError (QString (" <%1>-tag not found" ).arg (dom->tagName ()));
194+ finished = true ;
195+ }
196+ break ;
197+ case mbCoreXmlStreamReader::EndDocument:
198+ reader.raiseError (QString (" <%1>-tag not found" ).arg (dom->tagName ()));
199+ finished = true ;
200+ break ;
201+ default :
202+ break ;
203+ }
204+ }
205+ if (reader.hasError ())
206+ {
207+ setError (reader.errorString ());
208+ return false ;
209+ }
210+ if (reader.hasWarning ())
211+ {
212+ Q_FOREACH (const QString text, reader.warnings ())
213+ mbCore::LogWarning (QStringLiteral (" Builder" ), text);
214+ }
215+ return true ;
216+ }
217+
218+ bool mbCoreBuilder::saveXml (const QString &file, const mbCoreDom *dom)
219+ {
220+ QFile qf (file);
221+ if (!qf.open (QIODevice::WriteOnly))
222+ {
223+ setError (qf.errorString ());
224+ return false ;
225+ }
226+ bool r = saveXml (&qf, dom);
227+ qf.close ();
228+ return r;
229+
230+ }
231+
232+ bool mbCoreBuilder::saveXml (QIODevice *io, const mbCoreDom *dom)
233+ {
234+ mbCoreXmlStreamWriter writer (io);
235+ writer.setAutoFormatting (true );
236+ writer.writeStartDocument ();
237+ dom->write (writer);
238+ writer.writeEndDocument ();
239+ return true ;
240+ }
241+
135242QStringList mbCoreBuilder::csvDataViewItemAttributes () const
136243{
137244 const mbCoreDataViewItem::Strings &s = mbCoreDataViewItem::Strings::instance ();
@@ -668,79 +775,9 @@ DomDataViewItems *mbCoreBuilder::toDomDataViewItems(const QList<mbCoreDataViewIt
668775 return dom;
669776}
670777
671- bool mbCoreBuilder::loadXml (const QString &file, mbCoreDom *dom)
672- {
673- QFile qf (file);
674- if (!qf.open (QIODevice::ReadOnly))
675- {
676- setError (qf.errorString ());
677- return false ;
678- }
679- bool r = loadXml (&qf, dom);
680- qf.close ();
681- return r;
682- }
683-
684- bool mbCoreBuilder::loadXml (QIODevice *io, mbCoreDom *dom)
685- {
686- mbCoreXmlStreamReader reader (io);
687- for (bool finished = false ; !finished && !reader.hasError ();)
688- {
689- switch (reader.readNext ())
690- {
691- case mbCoreXmlStreamReader::StartElement:
692- {
693- const QString tag = reader.name ().toString ().toLower ();
694- if (tag == dom->tagName ())
695- dom->read (reader);
696- else
697- reader.raiseError (QString (" <%1>-tag not found" ).arg (dom->tagName ()));
698- finished = true ;
699- }
700- break ;
701- case mbCoreXmlStreamReader::EndDocument:
702- reader.raiseError (QString (" <%1>-tag not found" ).arg (dom->tagName ()));
703- finished = true ;
704- break ;
705- default :
706- break ;
707- }
708- }
709- if (reader.hasError ())
710- {
711- setError (reader.errorString ());
712- return false ;
713- }
714- if (reader.hasWarning ())
715- {
716- Q_FOREACH (const QString text, reader.warnings ())
717- mbCore::LogWarning (QStringLiteral (" Builder" ), text);
718- }
719- return true ;
720- }
721-
722- bool mbCoreBuilder::saveXml (const QString &file, const mbCoreDom *dom)
778+ void mbCoreBuilder::importDomProject (mbCoreDomProject * /* dom*/ )
723779{
724- QFile qf (file);
725- if (!qf.open (QIODevice::WriteOnly))
726- {
727- setError (qf.errorString ());
728- return false ;
729- }
730- bool r = saveXml (&qf, dom);
731- qf.close ();
732- return r;
733-
734- }
735-
736- bool mbCoreBuilder::saveXml (QIODevice *io, const mbCoreDom *dom)
737- {
738- mbCoreXmlStreamWriter writer (io);
739- writer.setAutoFormatting (true );
740- writer.writeStartDocument ();
741- dom->write (writer);
742- writer.writeEndDocument ();
743- return true ;
780+ // Note: Base implementation does nothing
744781}
745782
746783void mbCoreBuilder::setProject (mbCoreProject *project)
0 commit comments