// Get a temporary filename, opening and closing the file. wxChar *wxGetTempFileName(const wxString& prefix, wxChar *buf) { wxString filename; if ( !wxGetTempFileName(prefix, filename) ) return NULL; if ( buf ) wxStrcpy(buf, filename); else buf = MYcopystring(filename); return buf; }
wxInputStream& DiagramDocument::LoadObject(wxInputStream& stream) { #if wxUSE_PROLOGIO wxDocument::LoadObject(stream); wxChar buf[400]; (void) wxGetTempFileName(_T("diag"), buf); wxTransferStreamToFile(stream, buf); diagram.DeleteAllShapes(); diagram.LoadFile(buf); wxRemoveFile(buf); #endif return stream; }
wxOutputStream& DiagramDocument::SaveObject(wxOutputStream& stream) { #if wxUSE_PROLOGIO wxDocument::SaveObject(stream); wxChar buf[400]; (void) wxGetTempFileName(_T("diag"), buf); diagram.SaveFile(buf); wxTransferFileToStream(buf, stream); wxRemoveFile(buf); #endif return stream; }
wxVideoXANIM::wxVideoXANIM(wxInputStream& str) : wxVideoBaseDriver(str) { m_internal = new wxXANIMinternal; m_xanim_detector = new wxVideoXANIMProcess(this); m_xanim_started = false; m_paused = false; m_size[0] = 0; m_size[1] = 0; m_filename = wxGetTempFileName(_T("vidxa")); m_remove_file = true; wxFileOutputStream fout(m_filename); fout << str; CollectInfo(); }
bool wxMakeMetafilePlaceable(const wxString& filename, int x1, int y1, int x2, int y2, float scale, bool useOriginAndExtent) { // I'm not sure if this is the correct way of suggesting a scale // to the client application, but it's the only way I can find. int unitsPerInch = (int)(576/scale); mfPLACEABLEHEADER header; header.key = 0x9AC6CDD7L; header.hmf = 0; header.bbox.left = (int)(x1); header.bbox.top = (int)(y1); header.bbox.right = (int)(x2); header.bbox.bottom = (int)(y2); header.inch = unitsPerInch; header.reserved = 0; // Calculate checksum WORD *p; mfPLACEABLEHEADER *pMFHead = &header; for (p =(WORD *)pMFHead,pMFHead -> checksum = 0; p < (WORD *)&pMFHead ->checksum; ++p) pMFHead ->checksum ^= *p; FILE *fd = wxFopen(filename.fn_str(), _T("rb")); if (!fd) return false; wxChar tempFileBuf[256]; wxGetTempFileName(wxT("mf"), tempFileBuf); FILE *fHandle = wxFopen(wxFNCONV(tempFileBuf), _T("wb")); if (!fHandle) return false; fwrite((void *)&header, sizeof(unsigned char), sizeof(mfPLACEABLEHEADER), fHandle); // Calculate origin and extent int originX = x1; int originY = y1; int extentX = x2 - x1; int extentY = (y2 - y1); // Read metafile header and write METAHEADER metaHeader; fread((void *)&metaHeader, sizeof(unsigned char), sizeof(metaHeader), fd); if (useOriginAndExtent) metaHeader.mtSize += 15; else metaHeader.mtSize += 5; fwrite((void *)&metaHeader, sizeof(unsigned char), sizeof(metaHeader), fHandle); // Write SetMapMode, SetWindowOrigin and SetWindowExt records char modeBuffer[8]; char originBuffer[10]; char extentBuffer[10]; METARECORD *modeRecord = (METARECORD *)&modeBuffer; METARECORD *originRecord = (METARECORD *)&originBuffer; METARECORD *extentRecord = (METARECORD *)&extentBuffer; modeRecord->rdSize = 4; modeRecord->rdFunction = META_SETMAPMODE; modeRecord->rdParm[0] = MM_ANISOTROPIC; originRecord->rdSize = 5; originRecord->rdFunction = META_SETWINDOWORG; originRecord->rdParm[0] = originY; originRecord->rdParm[1] = originX; extentRecord->rdSize = 5; extentRecord->rdFunction = META_SETWINDOWEXT; extentRecord->rdParm[0] = extentY; extentRecord->rdParm[1] = extentX; fwrite((void *)modeBuffer, sizeof(char), 8, fHandle); if (useOriginAndExtent) { fwrite((void *)originBuffer, sizeof(char), 10, fHandle); fwrite((void *)extentBuffer, sizeof(char), 10, fHandle); } int ch = -2; while (ch != EOF) { ch = getc(fd); if (ch != EOF) { putc(ch, fHandle); } } fclose(fHandle); fclose(fd); wxRemoveFile(filename); wxCopyFile(tempFileBuf, filename); wxRemoveFile(tempFileBuf); return true; }
bool wxDiagram::SaveFile(const wxString& filename) { wxBeginBusyCursor(); wxExprDatabase *database = new wxExprDatabase; // First write the diagram type wxExpr *header = new wxExpr(_T("diagram")); OnHeaderSave(*database, *header); database->Append(header); wxNode *node = m_shapeList->GetFirst(); while (node) { wxShape *shape = (wxShape *)node->GetData(); if (!shape->IsKindOf(CLASSINFO(wxControlPoint))) { wxExpr *expr; if (shape->IsKindOf(CLASSINFO(wxLineShape))) expr = new wxExpr(_T("line")); else expr = new wxExpr(_T("shape")); OnShapeSave(*database, *shape, *expr); } node = node->GetNext(); } OnDatabaseSave(*database); wxString tempFile; wxGetTempFileName(wxT("diag"), tempFile); FILE* file = fopen(tempFile.mb_str(wxConvFile), "w"); if (! file) { wxEndBusyCursor(); delete database; return false; } database->Write(file); fclose(file); delete database; /* // Save backup if (FileExists(filename)) { char buf[400]; #ifdef __X__ sprintf(buf, "%s.bak", filename); #endif #ifdef __WXMSW__ sprintf(buf, "_diagram.bak"); #endif if (FileExists(buf)) wxRemoveFile(buf); if (!wxRenameFile(filename, buf)) { wxCopyFile(filename, buf); wxRemoveFile(filename); } } */ // Copy the temporary file to the correct filename if (!wxRenameFile(tempFile, filename)) { wxCopyFile(tempFile, filename); wxRemoveFile(tempFile); } wxEndBusyCursor(); return true; }