[Igarden-commit] Garden/source/Document ClientDocument.cp, 1.37.2.2, 1.37.2.3
Status: Beta
Brought to you by:
jlbedell
|
From: Jeffrey B. <jlb...@us...> - 2006-12-07 01:22:48
|
Update of /cvsroot/igarden/Garden/source/Document In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv25803 Modified Files: Tag: Release_branch_v1 ClientDocument.cp Log Message: Save and restore aerial view pictures (with preference) Index: ClientDocument.cp =================================================================== RCS file: /cvsroot/igarden/Garden/source/Document/ClientDocument.cp,v retrieving revision 1.37.2.2 retrieving revision 1.37.2.3 diff -C2 -d -r1.37.2.2 -r1.37.2.3 *** ClientDocument.cp 3 Dec 2006 02:09:55 -0000 1.37.2.2 --- ClientDocument.cp 7 Dec 2006 01:22:46 -0000 1.37.2.3 *************** *** 57,60 **** --- 57,61 ---- using namespace yaaf; + const char *aerialPhotoTag = "AerialPhotos"; XGSDynArray<docList_t> ClientDocument::_documents; XGTimer _timer; *************** *** 160,163 **** --- 161,165 ---- bool valid = true; bool useCompound = GetActivePreferences(this)->GetBoolPref(kUseCompoundFileFormat); + bool saveAerial = GetActivePreferences(this)->GetBoolPref(kIncludeAerialInFile); _spec = spec; *************** *** 175,178 **** --- 177,221 ---- WriteXML(file); file.CloseSubFile(); + if(saveAerial) + { + stringSet_t strings; + String dir(aerialPhotoTag); + String subPath; + XGFile srcFile; + long i, j, count, len, left, xfer; + + _layout->UniqueAerialPictures(strings); + + count = strings.Length(); + for(j = 0; j < count; j++) + { + char buf[4096]; + String str; + XGFileSpecifier spec; + + subPath = dir; + subPath += L"/"; + subPath += strings[j]; + file.CreateSubFile(subPath.c_str(), kNoCompression); + + CalcPictureSpec(spec, strings[j].c_str()); + if(srcFile.Open(&spec, true) == 0) + { + len = srcFile.GetEOF(); + for(i = 0; i < len; i += sizeof(buf)) + { + left = len - srcFile.GetFilePos(); + if(left < (long)sizeof(buf)) + xfer = left; + else + xfer = sizeof(buf); + srcFile.Read(xfer, buf); + file.Write(xfer, buf); + } + srcFile.Close(); + } + file.CloseSubFile(); + } + } file.Close(); } *************** *** 333,341 **** ErrorCode ClientDocument::Open( XGFileSpecifier& filename, OSType creator, long &errLine ) { ! RGZipFile inZipFile; ! XGFile inFile; ! ErrorCode ec; ! long bytesRead; ! char buf[128]; errLine = 0; --- 376,388 ---- ErrorCode ClientDocument::Open( XGFileSpecifier& filename, OSType creator, long &errLine ) { ! RGZipFile inZipFile; ! String subFile; ! XGFile inFile, outFile; ! ErrorCode ec; ! XGFileSpecifier subSpec; ! long bytesRead, len, xfer, left, i; ! char buf[128]; ! const char * subFilePtr; ! bool more; errLine = 0; *************** *** 344,350 **** --- 391,434 ---- if(ec == KYAAFNoError) { + more = inZipFile.FirstSubFileMatching(aerialPhotoTag); + while(more) + { + inZipFile.CurrentSubFileName(subFile); + subFilePtr = subFile.c_str(); + if(subFilePtr != NULL) + { + subFilePtr = strchr(subFilePtr, '/'); + if(subFilePtr != NULL) + { + subFilePtr++; // Skip over the '/' + CalcPictureSpec(subSpec, subFilePtr); + if(subSpec.Exists() == XGFileSpecifier::kTypeNoFile) + { + if(outFile.Create(&subSpec, 'PICT', RSGrdenCreator) == 0) + { + len = inZipFile.CurrentSubFileLen(); + left = len; + for(i = 0; i < len; i += sizeof(buf)) + { + if(left < (long)sizeof(buf)) + xfer = left; + else + xfer = sizeof(buf); + inZipFile.Read(xfer, buf); + outFile.Write(xfer, buf); + left -= xfer; + } + outFile.Close(); + } + } + } + } + + more = inZipFile.NextSubFileMatching(aerialPhotoTag); + } inZipFile.LocateSubFile("content.xml"); ec = XMLDocumentOpen(&inZipFile, errLine); inZipFile.CloseSubFile(); + } else |