// Restore image from off-screen pixmap long ShutterBug::onCmdSnap(FXObject*,FXSelector,void*){ FXColor *pixels=NULL; // Try grab pixels if(snapRectangle(pixels,rectangle)){ // Construct file dialog FXFileDialog savedialog(this,tr("Save Image")); savedialog.setSelectMode(SELECTFILE_ANY); savedialog.setPatternList(patterns); savedialog.setCurrentPattern(fileformat); savedialog.setFilename(FXPath::absolute(filename)); // Run file dialog if(savedialog.execute()){ filename=savedialog.getFilename(); fileformat=savedialog.getCurrentPattern(); if(FXStat::exists(filename) && FXMessageBox::question(this,MBOX_YES_NO,tr("Overwrite File"),tr("Overwrite existing image file: %s?"),filename.text())!=MBOX_CLICKED_YES) goto x; if(!saveImage(filename,pixels,rectangle.w,rectangle.h)){ FXMessageBox::error(this,MBOX_OK,tr("Error Saving Image"),tr("Unable to save image to file: %s."),filename.text()); } } // Free pixels x: freeElms(pixels); } return 1; }
// Save to filename FXString FileDialog::getSaveFilename(FXWindow* owner,const FXString& caption,const FXString& path,const FXString& patterns,FXint initial) { FileDialog savedialog(owner,caption); savedialog.setSelectMode(SELECT_FILE_ANY); savedialog.setPatternList(patterns); savedialog.setCurrentPattern(initial); savedialog.setFilename(path); if(savedialog.execute()) return savedialog.getFilename(); return FXString::null; }
// Start recording a movie long ShutterBug::onCmdRecordMovie(FXObject*,FXSelector,void*){ FXFileDialog savedialog(this,tr("Save Image")); savedialog.setPatternList(patterns); savedialog.setCurrentPattern(fileformat); savedialog.setFilename(FXPath::absolute(filenameFromFrame(filename,filecount))); if(savedialog.execute()){ filename=savedialog.getFilename(); fileformat=savedialog.getCurrentPattern(); filecount=frameFromFilename(filename); FXTRACE((1,"Frame: %s %d\n",filename.text(),filecount)); hideSnapRectangle(); hide(); getApp()->addTimeout(this,ID_RECORD_FRAME,rate); } return 1; }