UT_sint32 XAP_App::findFrame(const char * szFilename) { if (!szFilename || !*szFilename) return -1; for (UT_sint32 i=0; i<getFrameCount(); i++) { XAP_Frame * f = getFrame(i); UT_continue_if_fail(f); const char * s = f->getFilename(); if (s && *s && (0 == g_ascii_strcasecmp(szFilename, s))) { return i; } } return -1; }
bool XAP_App::retrieveState() { XAP_StateData sd; bool bRet = true; if(!_retrieveState(sd)) return false; UT_return_val_if_fail(sd.iFileCount <= XAP_SD_MAX_FILES, false); // now do our thing with it: // * open the files stored in the data // * move carets and scrollbars to the saved positions // * make the first saved frame to be the current frame // we should only be restoring state with no docs already // opened UT_return_val_if_fail(m_vecFrames.getItemCount() <= 1, false); XAP_Frame * pFrame = NULL; if(m_vecFrames.getItemCount()) pFrame = m_vecFrames.getNthItem(0); // if there is a frame, it should be one with unmodified untitled document UT_return_val_if_fail( !pFrame || (!pFrame->getFilename() && !pFrame->isDirty()), false ); UT_Error errorCode = UT_IE_IMPORTERROR; for(UT_uint32 i = 0; i < sd.iFileCount; ++i) { if(!pFrame) pFrame = newFrame(); if (!pFrame) return false; // Open a complete but blank frame, then load the document into it errorCode = pFrame->loadDocument((const char *)NULL, 0 /*IEFT_Unknown*/); bRet &= (errorCode == UT_OK); if (errorCode == UT_OK) pFrame->show(); else continue; errorCode = pFrame->loadDocument(sd.filenames[i], 0 /*IEFT_Unknown*/); bRet &= (errorCode == UT_OK); if (errorCode != UT_OK) continue; pFrame->show(); AV_View* pView = pFrame->getCurrentView(); if(!pView) { UT_ASSERT_HARMLESS( UT_SHOULD_NOT_HAPPEN ); bRet = false; continue; } pView->setPoint(sd.iDocPos[i]); pView->setXScrollOffset(sd.iXScroll[i]); pView->setYScrollOffset(sd.iYScroll[i]); // now we check if this doc was autosaved Untitled* doc at hibernation char * p = strstr(sd.filenames[i], HIBERNATED_EXT); if(p) { // remove extension p = 0; AD_Document * pDoc = pFrame->getCurrentDoc(); if(pDoc) { pDoc->clearFilename(); pDoc->forceDirty(); pFrame->updateTitle(); } } // frame used -- next doc needs a new one pFrame = NULL; } // set focus to the first frame pFrame = m_vecFrames.getNthItem(0); UT_return_val_if_fail( pFrame, false ); AV_View* pView = pFrame->getCurrentView(); UT_return_val_if_fail( pView, false ); pView->focusChange(AV_FOCUS_HERE); return bRet; }
// // AbiPaint saveAsBmp // ------------------ // This is the function exports selected image as a Windows BMP file. // // parameters are: // AV_View* v // EV_EditMethodCallData *d) // static DECLARE_ABI_PLUGIN_METHOD(saveAsBmp) { // Get a frame (for error messages) and (to) get the current view that the user is in. XAP_Frame *pFrame = XAP_App::getApp()->getLastFocussedFrame(); FV_View* pView = static_cast<FV_View*>(pFrame->getCurrentView()); char *szTempFileName = NULL; GError *err = NULL; gint fp = g_file_open_tmp ("XXXXXX", &szTempFileName, &err); if (err) { g_warning (err->message); g_error_free (err); err = NULL; return FALSE; } close(fp); UT_String szTmpPng = szTempFileName; szTmpPng += ".png"; remove(szTempFileName); g_free (szTempFileName); szTempFileName = NULL; PT_DocPosition pos = pView->saveSelectedImage((const char *)szTmpPng.c_str()); if(pos == 0) { pFrame->showMessageBox("You must select an Image before trying to save it as a BMP file!", XAP_Dialog_MessageBox::b_O,XAP_Dialog_MessageBox::a_OK); return false; } // // Convert png into bmp // NOTE: probably looses detail/information though!!! // UT_String szBMPFile = pFrame->getFilename(); // perhaps a different default directory should be used??? { const char * szDescList[2]; const char * szSuffixList[2]; IEGraphicFileType ft[2]; { // IE_ImpGraphicBMP_Sniffer tmp; // tmp.getDlgLabels(szDescList, szSuffixList, ft); szDescList[0] = "Windows Bitmap (*.bmp)"; szSuffixList[0] = "*.bmp"; ft[0] = IEGFT_BMP; } szDescList[1] = szSuffixList[1] = NULL; ft[1] = IEGFT_Unknown; if (getFileName(szBMPFile, pFrame, XAP_DIALOG_ID_FILE_SAVEAS, szDescList, szSuffixList, ft)) { // user canceled remove(szTmpPng.c_str()); return true; } } if (convertPNG2BMP(szTmpPng.c_str(), szBMPFile.c_str())) { pFrame->showMessageBox("Unable to convert PNG image data to BMP.", XAP_Dialog_MessageBox::b_O,XAP_Dialog_MessageBox::a_OK); UT_ASSERT(UT_SHOULD_NOT_HAPPEN); remove(szTmpPng.c_str()); return false; } remove(szTmpPng.c_str()); return true; }