@@ -302,7 +302,8 @@ bool ProjectPanel::saveWorkSpace()
302302bool ProjectPanel::writeWorkSpace (TCHAR *projectFileName)
303303{
304304 // write <NotepadPlus>: use the default file name if new file name is not given
305- TiXmlDocument projDoc (projectFileName?projectFileName:_workSpaceFilePath.c_str ());
305+ const TCHAR * fn2write = projectFileName?projectFileName:_workSpaceFilePath.c_str ();
306+ TiXmlDocument projDoc (fn2write);
306307 TiXmlNode *root = projDoc.InsertEndChild (TiXmlElement (TEXT (" NotepadPlus" )));
307308
308309 TCHAR textBuffer[MAX_PATH];
@@ -326,13 +327,13 @@ bool ProjectPanel::writeWorkSpace(TCHAR *projectFileName)
326327
327328 TiXmlNode *projRoot = root->InsertEndChild (TiXmlElement (TEXT (" Project" )));
328329 projRoot->ToElement ()->SetAttribute (TEXT (" name" ), tvItem.pszText );
329- buildProjectXml (projRoot, tvProj);
330+ buildProjectXml (projRoot, tvProj, fn2write );
330331 }
331332 projDoc.SaveFile ();
332333 return true ;
333334}
334335
335- void ProjectPanel::buildProjectXml (TiXmlNode *node, HTREEITEM hItem)
336+ void ProjectPanel::buildProjectXml (TiXmlNode *node, HTREEITEM hItem, const TCHAR* fn2write )
336337{
337338 TCHAR textBuffer[MAX_PATH];
338339 TVITEM tvItem;
@@ -349,18 +350,34 @@ void ProjectPanel::buildProjectXml(TiXmlNode *node, HTREEITEM hItem)
349350 if (tvItem.lParam != NULL )
350351 {
351352 generic_string *fn = (generic_string *)tvItem.lParam ;
353+ generic_string newFn = getRelativePath (*fn, fn2write);
352354 TiXmlNode *fileLeaf = node->InsertEndChild (TiXmlElement (TEXT (" File" )));
353- fileLeaf->ToElement ()->SetAttribute (TEXT (" name" ), fn-> c_str ());
355+ fileLeaf->ToElement ()->SetAttribute (TEXT (" name" ), newFn. c_str ());
354356 }
355357 else
356358 {
357359 TiXmlNode *folderNode = node->InsertEndChild (TiXmlElement (TEXT (" Folder" )));
358360 folderNode->ToElement ()->SetAttribute (TEXT (" name" ), tvItem.pszText );
359- buildProjectXml (folderNode, hItemNode);
361+ buildProjectXml (folderNode, hItemNode, fn2write );
360362 }
361363 }
362364}
363365
366+ generic_string ProjectPanel::getRelativePath (const generic_string & filePath, const TCHAR *workSpaceFileName)
367+ {
368+ TCHAR wsfn[MAX_PATH];
369+ lstrcpy (wsfn, workSpaceFileName);
370+ ::PathRemoveFileSpec (wsfn);
371+
372+ size_t pos_found = filePath.find (wsfn);
373+ if (pos_found == generic_string::npos)
374+ return filePath;
375+ const TCHAR *relativeFile = filePath.c_str () + lstrlen (wsfn) + 1 ;
376+
377+ // printStr(relativeFile);
378+ return relativeFile;
379+ }
380+
364381bool ProjectPanel::buildTreeFrom (TiXmlNode *projectRoot, HTREEITEM hParentItem)
365382{
366383 for (TiXmlNode *childNode = projectRoot->FirstChildElement ();
0 commit comments