void DIALOG_EDIT_COMPONENT_IN_LIBRARY::BrowseAndSelectDocFile( wxCommandEvent& event ) { PROJECT& prj = Prj(); SEARCH_STACK* search = prj.SchSearchS(); wxString mask = wxT( "*" ); wxString docpath = prj.GetRString( PROJECT::DOC_PATH ); if( !docpath ) docpath = search->LastVisitedPath( wxT( "doc" ) ); wxString fullFileName = EDA_FILE_SELECTOR( _( "Doc Files" ), docpath, wxEmptyString, wxEmptyString, mask, this, wxFD_OPEN, true ); if( fullFileName.IsEmpty() ) return; /* If the path is already in the library search paths * list, just add the library name to the list. Otherwise, add * the library name with the full or relative path. * the relative path, when possible is preferable, * because it preserve use of default libraries paths, when the path is a sub path of * these default paths */ wxFileName fn = fullFileName; prj.SetRString( PROJECT::DOC_PATH, fn.GetPath() ); wxString filename = search->FilenameWithRelativePathInSearchList( fullFileName, wxPathOnly( Prj().GetProjectFullName() ) ); // Filenames are always stored in unix like mode, ie separator "\" is stored as "/" // to ensure files are identical under unices and windows #ifdef __WINDOWS__ filename.Replace( wxT( "\\" ), wxT( "/" ) ); #endif m_DocfileCtrl->SetValue( filename ); }
const wxString DIALOG_FREEROUTE::createDSN_File() { wxFileName fn( m_Parent->GetBoard()->GetFileName() ); wxString dsn_ext = wxT( "dsn" ); fn.SetExt( dsn_ext ); wxString mask = wxT( "*." ) + dsn_ext; wxString fullFileName = EDA_FILE_SELECTOR( _( "Specctra DSN file:" ), fn.GetPath(), fn.GetFullName(), dsn_ext, mask, this, wxFD_SAVE, false ); if( !fullFileName.IsEmpty() ) { if( ! m_Parent->ExportSpecctraFile( fullFileName ) ) // the file was not created return wxEmptyString; } return fullFileName; }
const wxString& PGM_BASE::GetEditorName() { wxString editorname = m_editor_name; if( !editorname ) { // Get the preferred editor name from environment variable first. if(!wxGetEnv( wxT( "EDITOR" ), &editorname )) { // If there is no EDITOR variable set, try the desktop default #ifdef __WXMAC__ editorname = "/usr/bin/open"; #elif __WXX11__ editorname = "/usr/bin/xdg-open"; #endif } } if( !editorname ) // We must get a preferred editor name { DisplayInfoMessage( NULL, _( "No default editor found, you must choose it" ) ); wxString mask( wxT( "*" ) ); #ifdef __WINDOWS__ mask += wxT( ".exe" ); #endif editorname = EDA_FILE_SELECTOR( _( "Preferred Editor:" ), wxEmptyString, wxEmptyString, wxEmptyString, mask, NULL, wxFD_OPEN, true ); } if( !editorname.IsEmpty() ) { m_editor_name = editorname; m_common_settings->Write( wxT( "Editor" ), m_editor_name ); } return m_editor_name; }
const wxString PGM_BASE::AskUserForPreferredEditor( const wxString& aDefaultEditor ) { // Create a mask representing the executable files in the current platform #ifdef __WINDOWS__ wxString mask( _( "Executable file (*.exe)|*.exe" ) ); #else wxString mask( _( "Executable file (*)|*" ) ); #endif // Extract the path, name and extension from the default editor (even if the editor's // name was empty, this method will succeed and return empty strings). wxString path, name, ext; wxFileName::SplitPath( aDefaultEditor, &path, &name, &ext ); // Show the modal editor and return the file chosen (may be empty if the user cancels // the dialog). return EDA_FILE_SELECTOR( _( "Select Preferred Editor" ), path, name, ext, mask, NULL, wxFD_OPEN | wxFD_FILE_MUST_EXIST, true ); }
bool GetAssociatedDocument( wxWindow* aParent, const wxString& aDocName, const wxPathList* aPaths) { wxString docname, fullfilename; wxString msg; wxString command; bool success = false; // Is an internet url static const wxChar* url_header[3] = { wxT( "http:" ), wxT( "ftp:" ), wxT( "www." ) }; for( unsigned ii = 0; ii < DIM(url_header); ii++ ) { if( aDocName.First( url_header[ii] ) == 0 ) //. seems an internet url { wxLaunchDefaultBrowser( aDocName ); return true; } } docname = aDocName; #ifdef __WINDOWS__ docname.Replace( UNIX_STRING_DIR_SEP, WIN_STRING_DIR_SEP ); #else docname.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP ); #endif /* Compute the full file name */ if( wxIsAbsolutePath( aDocName ) || aPaths == NULL) fullfilename = aDocName; /* If the file exists, this is a trivial case: return the filename * "as this". the name can be an absolute path, or a relative path * like ./filename or ../<filename> */ else if( wxFileName::FileExists( aDocName ) ) fullfilename = aDocName; else { fullfilename = aPaths->FindValidPath( aDocName ); } wxString mask( wxT( "*" ) ), extension; #ifdef __WINDOWS__ mask += wxT( ".*" ); extension = wxT( ".*" ); #endif if( wxIsWild( fullfilename ) ) { fullfilename = EDA_FILE_SELECTOR( _( "Doc Files" ), wxPathOnly( fullfilename ), fullfilename, extension, mask, aParent, wxFD_OPEN, true, wxPoint( -1, -1 ) ); if( fullfilename.IsEmpty() ) return false; } if( !wxFileExists( fullfilename ) ) { msg.Printf( _( "Doc File '%s' not found" ), GetChars( aDocName ) ); DisplayError( aParent, msg ); return false; } wxFileName currentFileName( fullfilename ); wxString file_ext = currentFileName.GetExt(); if( file_ext == wxT( "pdf" ) ) { success = OpenPDF( fullfilename ); return success; } /* Try to launch some browser (useful under linux) */ wxFileType* filetype; wxString type; filetype = wxTheMimeTypesManager->GetFileTypeFromExtension( file_ext ); if( !filetype ) // 2nd attempt. { mimeDatabase = new wxMimeTypesManager; mimeDatabase->AddFallbacks( EDAfallbacks ); filetype = mimeDatabase->GetFileTypeFromExtension( file_ext ); delete mimeDatabase; mimeDatabase = NULL; } if( filetype ) { wxFileType::MessageParameters params( fullfilename, type ); success = filetype->GetOpenCommand( &command, params ); delete filetype; if( success ) success = ProcessExecute( command ); } if( !success ) { msg.Printf( _( "Unknown MIME type for doc file <%s>" ), GetChars( fullfilename ) ); DisplayError( aParent, msg ); } return success; }
void LIB_EDIT_FRAME::OnPlotCurrentComponent( wxCommandEvent& event ) { wxString fullFileName; wxString file_ext; wxString mask; LIB_PART* part = GetCurPart(); if( !part ) { wxMessageBox( _( "No component" ) ); return; } switch( event.GetId() ) { case ID_LIBEDIT_GEN_PNG_FILE: { bool fmt_is_jpeg = false; // could be selectable later. so keep this option. file_ext = fmt_is_jpeg ? wxT( "jpg" ) : wxT( "png" ); mask = wxT( "*." ) + file_ext; wxFileName fn( part->GetName() ); fn.SetExt( file_ext ); wxString pro_dir = wxPathOnly( Prj().GetProjectFullName() ); fullFileName = EDA_FILE_SELECTOR( _( "Filename:" ), pro_dir, fn.GetFullName(), file_ext, mask, this, wxFD_SAVE, true ); if( fullFileName.IsEmpty() ) return; // calling wxYield is mandatory under Linux, after closing the file selector dialog // to refresh the screen before creating the PNG or JPEG image from screen wxYield(); CreatePNGorJPEGFile( fullFileName, fmt_is_jpeg ); } break; case ID_LIBEDIT_GEN_SVG_FILE: { file_ext = wxT( "svg" ); mask = wxT( "*." ) + file_ext; wxFileName fn( part->GetName() ); fn.SetExt( file_ext ); wxString pro_dir = wxPathOnly( Prj().GetProjectFullName() ); fullFileName = EDA_FILE_SELECTOR( _( "Filename:" ), pro_dir, fn.GetFullName(), file_ext, mask, this, wxFD_SAVE, true ); if( fullFileName.IsEmpty() ) return; PAGE_INFO pageSave = GetScreen()->GetPageSettings(); PAGE_INFO pageTemp = pageSave; wxSize componentSize = part->GetUnitBoundingBox( m_unit, m_convert ).GetSize(); // Add a small margin to the plot bounding box pageTemp.SetWidthMils( int( componentSize.x * 1.2 ) ); pageTemp.SetHeightMils( int( componentSize.y * 1.2 ) ); GetScreen()->SetPageSettings( pageTemp ); SVG_PlotComponent( fullFileName ); GetScreen()->SetPageSettings( pageSave ); } break; } }
void EDA_3D_VIEWER::takeScreenshot( wxCommandEvent& event ) { wxString fullFileName; bool fmt_is_jpeg = false; if( event.GetId() == ID_MENU_SCREENCOPY_JPEG ) fmt_is_jpeg = true; if( event.GetId() != ID_TOOL_SCREENCOPY_TOCLIBBOARD ) { // Remember path between saves during this session only. static wxFileName fn; const wxString file_ext = fmt_is_jpeg ? wxT( "jpg" ) : wxT( "png" ); const wxString mask = wxT( "*." ) + file_ext; // First time path is set to the project path. if( !fn.IsOk() ) fn = Parent()->Prj().GetProjectFullName(); fn.SetExt( file_ext ); fullFileName = EDA_FILE_SELECTOR( _( "3D Image File Name:" ), fn.GetPath(), m_defaultFileName, file_ext, mask, this, wxFD_SAVE | wxFD_OVERWRITE_PROMPT, true ); if( fullFileName.IsEmpty() ) return; fn = fullFileName; // Be sure the screen area destroyed by the file dialog is redrawn // before making a screen copy. // Without this call, under Linux the screen refresh is made to late. wxYield(); } // Be sure we have the latest 3D view (remember 3D view is buffered) Refresh(); wxYield(); // Build image from the 3D buffer wxWindowUpdateLocker noUpdates( this ); wxImage screenshotImage; if( m_canvas ) m_canvas->GetScreenshot( screenshotImage ); if( event.GetId() == ID_TOOL_SCREENCOPY_TOCLIBBOARD ) { wxBitmap bitmap( screenshotImage ); if( wxTheClipboard->Open() ) { wxBitmapDataObject* dobjBmp = new wxBitmapDataObject( bitmap ); if( !wxTheClipboard->SetData( dobjBmp ) ) wxMessageBox( _( "Failed to copy image to clipboard" ) ); wxTheClipboard->Flush(); /* the data in clipboard will stay * available after the application exits */ wxTheClipboard->Close(); } } else { if( !screenshotImage.SaveFile( fullFileName, fmt_is_jpeg ? wxBITMAP_TYPE_JPEG : wxBITMAP_TYPE_PNG ) ) wxMessageBox( _( "Can't save file" ) ); screenshotImage.Destroy(); } }
void EDA_3D_CANVAS::TakeScreenshot( wxCommandEvent& event ) { static wxFileName fn; // Remember path between saves during this session only. wxString FullFileName; wxString file_ext, mask; bool fmt_is_jpeg = false; // First time path is set to the project path. if( !fn.IsOk() ) fn = Parent()->Prj().GetProjectFullName(); if( event.GetId() == ID_MENU_SCREENCOPY_JPEG ) fmt_is_jpeg = true; if( event.GetId() != ID_TOOL_SCREENCOPY_TOCLIBBOARD ) { file_ext = fmt_is_jpeg ? wxT( "jpg" ) : wxT( "png" ); mask = wxT( "*." ) + file_ext; fn.SetExt( file_ext ); FullFileName = EDA_FILE_SELECTOR( _( "3D Image File Name:" ), fn.GetPath(), fn.GetFullName(), file_ext, mask, this, wxFD_SAVE | wxFD_OVERWRITE_PROMPT, true ); if( FullFileName.IsEmpty() ) return; fn = FullFileName; // Be sure the screen area destroyed by the file dialog is redrawn before making // a screen copy. // Without this call, under Linux the screen refresh is made to late. wxYield(); } struct viewport_params { GLint originx; GLint originy; GLint x; GLint y; } viewport; // Be sure we have the latest 3D view (remember 3D view is buffered) Refresh(); wxYield(); // Build image from the 3D buffer wxWindowUpdateLocker noUpdates( this ); glGetIntegerv( GL_VIEWPORT, (GLint*) &viewport ); unsigned char* pixelbuffer = (unsigned char*) malloc( viewport.x * viewport.y * 3 ); unsigned char* alphabuffer = (unsigned char*) malloc( viewport.x * viewport.y ); wxImage image( viewport.x, viewport.y ); glPixelStorei( GL_PACK_ALIGNMENT, 1 ); glReadBuffer( GL_BACK_LEFT ); glReadPixels( viewport.originx, viewport.originy, viewport.x, viewport.y, GL_RGB, GL_UNSIGNED_BYTE, pixelbuffer ); glReadPixels( viewport.originx, viewport.originy, viewport.x, viewport.y, GL_ALPHA, GL_UNSIGNED_BYTE, alphabuffer ); image.SetData( pixelbuffer ); image.SetAlpha( alphabuffer ); image = image.Mirror( false ); wxBitmap bitmap( image ); if( event.GetId() == ID_TOOL_SCREENCOPY_TOCLIBBOARD ) { if( wxTheClipboard->Open() ) { wxBitmapDataObject* dobjBmp = new wxBitmapDataObject( bitmap ); if( !wxTheClipboard->SetData( dobjBmp ) ) wxMessageBox( _( "Failed to copy image to clipboard" ) ); wxTheClipboard->Flush(); /* the data in clipboard will stay * available after the application exits */ wxTheClipboard->Close(); } } else { wxImage image = bitmap.ConvertToImage(); if( !image.SaveFile( FullFileName, fmt_is_jpeg ? wxBITMAP_TYPE_JPEG : wxBITMAP_TYPE_PNG ) ) wxMessageBox( _( "Can't save file" ) ); image.Destroy(); } }