diff --git a/GUI_Translation_HOWTO.odt b/GUI_Translation_HOWTO.odt new file mode 100644 index 0000000000..cd2b732114 Binary files /dev/null and b/GUI_Translation_HOWTO.odt differ diff --git a/GUI_Translation_HOWTO.pdf b/GUI_Translation_HOWTO.pdf new file mode 100644 index 0000000000..0c57e4e02d Binary files /dev/null and b/GUI_Translation_HOWTO.pdf differ diff --git a/common/edaappl.cpp b/common/edaappl.cpp index a69e972619..5d40d309c0 100644 --- a/common/edaappl.cpp +++ b/common/edaappl.cpp @@ -54,6 +54,112 @@ #define FONT_DEFAULT_SIZE 10 /* Default font size. * The real font size will be computed at run time */ +/* A small class to handle the list od existing translations. + * the locale translation is automatic. + * the selection of languages is mainly for mainteners's convenience (tests...) + * To add a support to a new tranlation: + * create a new icon (flag of the country) (see Lang_Fr.xpm as an exemple) + * add a new item to s_Language_List[LANGUAGE_DESCR_COUNT] + * and set LANGUAGE_DESCR_COUNT to the new value + */ +struct LANGUAGE_DESCR +{ + int m_WX_Lang_Identifier; // wxWidget locale identifier (see wxWidget doc) + int m_KI_Lang_Identifier; // kicad identifier used in menu selection (see id.h) + const char** m_Lang_Icon; // the icon used in menus + const wxChar* m_Lang_Label; // Label used in menus + bool m_DoNotTranslate; // set to true if the m_Lang_Label must not be translated +}; + +#define LANGUAGE_DESCR_COUNT 14 +static struct LANGUAGE_DESCR s_Language_List[LANGUAGE_DESCR_COUNT] = +{ + { + wxLANGUAGE_DEFAULT, + ID_LANGUAGE_DEFAULT, + lang_def_xpm, + _( "Default" ) + }, + { + wxLANGUAGE_ENGLISH, + ID_LANGUAGE_ENGLISH, + lang_en_xpm, + wxT( "English" ), + true + }, + { + wxLANGUAGE_FRENCH, + ID_LANGUAGE_FRENCH, + lang_fr_xpm, + _( "French" ) + }, + { + wxLANGUAGE_SPANISH, + ID_LANGUAGE_SPANISH, + lang_es_xpm, + _( "Spanish" ) + }, + { + wxLANGUAGE_PORTUGUESE, + ID_LANGUAGE_PORTUGUESE, + lang_pt_xpm, + _( "Portuguese" ) + }, + { + wxLANGUAGE_ITALIAN, + ID_LANGUAGE_ITALIAN, + lang_it_xpm, + _( "Italian" ) + }, + { + wxLANGUAGE_GERMAN, + ID_LANGUAGE_GERMAN, + lang_de_xpm, + _( "German" ) + }, + { + wxLANGUAGE_SLOVENIAN, + ID_LANGUAGE_SLOVENIAN, + lang_sl_xpm, + _( "Slovenian" ) + }, + { + wxLANGUAGE_HUNGARIAN, + ID_LANGUAGE_HUNGARIAN, + lang_hu_xpm, + _( "Hungarian" ) + }, + { + wxLANGUAGE_POLISH, + ID_LANGUAGE_POLISH, + lang_po_xpm, + _( "Polish" ) + }, + { + wxLANGUAGE_RUSSIAN, + ID_LANGUAGE_RUSSIAN, + lang_ru_xpm, + _( "Russian" ) + }, + { + wxLANGUAGE_KOREAN, + ID_LANGUAGE_KOREAN, + lang_ko_xpm, + _( "Korean" ) + }, + { + wxLANGUAGE_CHINESE_SIMPLIFIED, + ID_LANGUAGE_CHINESE_SIMPLIFIED, + lang_chinese_xpm, + _( "Chinese simplified" ) + }, + { + wxLANGUAGE_CATALAN, + ID_LANGUAGE_CATALAN, + lang_catalan_xpm, + _( "Catalan" ) + } +}; /**************************/ /* WinEDA_App Constructor */ @@ -120,7 +226,7 @@ void WinEDA_App::InitEDA_Appl( const wxString& name ) /* Init kicad environment * the environment variable KICAD (if exists) gives the kicad path: * something like set KICAD=d:\kicad - */ + */ m_Env_Defined = wxGetEnv( wxT( "KICAD" ), &m_KicadEnv ); if( m_Env_Defined ) // ensure m_KicadEnv ends by "/" { @@ -147,10 +253,10 @@ void WinEDA_App::InitEDA_Appl( const wxString& name ) g_MsgFont = new wxFont( g_StdFontPointSize, wxFONTFAMILY_ROMAN, wxNORMAL, wxNORMAL ); g_DialogFont = new wxFont( g_DialogFontPointSize, wxFONTFAMILY_ROMAN, wxNORMAL, wxNORMAL ); g_ItalicFont = new wxFont( g_DialogFontPointSize, - wxFONTFAMILY_ROMAN, - wxFONTSTYLE_ITALIC, - wxNORMAL ); - g_FixedFont = new wxFont( g_FixedFontPointSize, wxFONTFAMILY_MODERN, wxNORMAL, wxNORMAL ); + wxFONTFAMILY_ROMAN, + wxFONTSTYLE_ITALIC, + wxNORMAL ); + g_FixedFont = new wxFont( g_FixedFontPointSize, wxFONTFAMILY_MODERN, wxNORMAL, wxNORMAL ); /* installation des gestionnaires de visu d'images (pour help) */ wxImage::AddHandler( new wxPNGHandler ); @@ -190,8 +296,8 @@ void WinEDA_App::InitOnLineHelp() if( wxFileExists( fullfilename ) ) { m_HtmlCtrl = new wxHtmlHelpController( wxHF_TOOLBAR | - wxHF_CONTENTS | wxHF_PRINT | wxHF_OPEN_FILES - /*| wxHF_SEARCH */ ); + wxHF_CONTENTS | wxHF_PRINT | wxHF_OPEN_FILES + /*| wxHF_SEARCH */ ); m_HtmlCtrl->UseConfig( m_EDA_CommonConfig ); m_HtmlCtrl->SetTitleFormat( wxT( "Kicad Help" ) ); m_HtmlCtrl->AddBook( fullfilename ); @@ -202,30 +308,34 @@ void WinEDA_App::InitOnLineHelp() /*******************************/ bool WinEDA_App::SetBinDir() /*******************************/ + // Find the path to the executable and store it in WinEDA_App::m_BinDir { - #ifdef __APPLE__ - // Derive path from location of the app bundle - CFBundleRef mainBundle = CFBundleGetMainBundle(); - if (mainBundle == NULL) return false; - CFURLRef urlref = CFBundleCopyBundleURL(mainBundle); - if (urlref == NULL) return false; - CFStringRef str = CFURLCopyFileSystemPath(urlref, kCFURLPOSIXPathStyle); - if (str == NULL) return false; - char *native_str = NULL; - int len = CFStringGetMaximumSizeForEncoding(CFStringGetLength(str), - kCFStringEncodingUTF8) + 1; - native_str = new char[len]; - CFStringGetCString(str, native_str, len, kCFStringEncodingUTF8); - m_BinDir = CONV_FROM_UTF8(native_str); - delete[] native_str; -#elif defined(__UNIX__) + // Derive path from location of the app bundle + CFBundleRef mainBundle = CFBundleGetMainBundle(); + if( mainBundle == NULL ) + return false; + CFURLRef urlref = CFBundleCopyBundleURL( mainBundle ); + if( urlref == NULL ) + return false; + CFStringRef str = CFURLCopyFileSystemPath( urlref, kCFURLPOSIXPathStyle ); + if( str == NULL ) + return false; + char* native_str = NULL; + int len = CFStringGetMaximumSizeForEncoding( CFStringGetLength( str ), + kCFStringEncodingUTF8 ) + 1; + native_str = new char[len]; + CFStringGetCString( str, native_str, len, kCFStringEncodingUTF8 ); + m_BinDir = CONV_FROM_UTF8( native_str ); + delete[] native_str; - // Under Linux, if argv[0] doesn't the complete path to the executable, - // it's necessary to obtain it using "which ". - FILE* ftmp; +#elif defined (__UNIX__) + + // Under Linux, if argv[0] doesn't the complete path to the executable, + // it's necessary to obtain it using "which ". + FILE* ftmp; #define TMP_FILE "/tmp/kicad.tmp" char Line[1024]; @@ -428,67 +538,19 @@ bool WinEDA_App::SetLanguage( bool first_time ) void WinEDA_App::SetLanguageIdentifier( int menu_id ) /**************************************************/ -/* return in m_LanguageId the language id (wxWidgets language identifier) - * from menu id (internal menu identifier) +/* return in m_LanguageId the wxWidgets language identifier Id + * from the kicad menu id (internal menu identifier) */ { - switch( menu_id ) + unsigned int ii; + + for( ii = 0; ii < LANGUAGE_DESCR_COUNT; ii++ ) { - case ID_LANGUAGE_ITALIAN: - m_LanguageId = wxLANGUAGE_ITALIAN; - break; - - case ID_LANGUAGE_PORTUGUESE: - m_LanguageId = wxLANGUAGE_PORTUGUESE; - break; - - case ID_LANGUAGE_RUSSIAN: - m_LanguageId = wxLANGUAGE_RUSSIAN; - break; - - case ID_LANGUAGE_GERMAN: - m_LanguageId = wxLANGUAGE_GERMAN; - break; - - case ID_LANGUAGE_SPANISH: - m_LanguageId = wxLANGUAGE_SPANISH; - break; - - case ID_LANGUAGE_ENGLISH: - m_LanguageId = wxLANGUAGE_ENGLISH; - break; - - case ID_LANGUAGE_FRENCH: - m_LanguageId = wxLANGUAGE_FRENCH; - break; - - case ID_LANGUAGE_SLOVENIAN: - m_LanguageId = wxLANGUAGE_SLOVENIAN; - break; - - case ID_LANGUAGE_HUNGARIAN: - m_LanguageId = wxLANGUAGE_HUNGARIAN; - break; - - case ID_LANGUAGE_POLISH: - m_LanguageId = wxLANGUAGE_POLISH; - break; - - case ID_LANGUAGE_KOREAN: - m_LanguageId = wxLANGUAGE_KOREAN; - break; - - case ID_LANGUAGE_CATALAN: - m_LanguageId = wxLANGUAGE_CATALAN; - break; - - case ID_LANGUAGE_CHINESE_SIMPLIFIED: - m_LanguageId = wxLANGUAGE_CHINESE_SIMPLIFIED; - break; - - default: - m_LanguageId = wxLANGUAGE_DEFAULT; - break; + if( menu_id == s_Language_List[ii].m_KI_Lang_Identifier ) + { + m_LanguageId = s_Language_List[ii].m_WX_Lang_Identifier; + break; + } } } @@ -500,163 +562,38 @@ wxMenu* WinEDA_App::SetLanguageList( wxMenu* MasterMenu ) /* Create menu list for language choice. */ { - wxMenuItem* item; + wxMenuItem* item; + unsigned int ii; if( m_Language_Menu == NULL ) { m_Language_Menu = new wxMenu; - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_DEFAULT, - _( "Default" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_def_xpm ); - m_Language_Menu->Append( item ); - - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_ENGLISH, - wxT( "English" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_en_xpm ); - m_Language_Menu->Append( item ); - - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_FRENCH, - _( "French" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_fr_xpm ); - m_Language_Menu->Append( item ); - - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_SPANISH, - _( "Spanish" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_es_xpm ); - m_Language_Menu->Append( item ); - - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_PORTUGUESE, - _( "Portuguese" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_pt_xpm ); - m_Language_Menu->Append( item ); - - - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_ITALIAN, - _( "Italian" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_it_xpm ); - m_Language_Menu->Append( item ); - - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_GERMAN, - _( "German" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_de_xpm ); - m_Language_Menu->Append( item ); - - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_SLOVENIAN, - _( "Slovenian" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_sl_xpm ); - m_Language_Menu->Append( item ); - - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_HUNGARIAN, - _( "Hungarian" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_hu_xpm ); - m_Language_Menu->Append( item ); - - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_POLISH, - _( "Polish" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_po_xpm ); - m_Language_Menu->Append( item ); - - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_RUSSIAN, - _( "Russian" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_ru_xpm ); - m_Language_Menu->Append( item ); - - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_KOREAN, - _( "Korean" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_ko_xpm ); - m_Language_Menu->Append( item ); - - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_CATALAN, - _( "Catalan" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_catalan_xpm ); - m_Language_Menu->Append( item ); - - item = new wxMenuItem( m_Language_Menu, ID_LANGUAGE_CHINESE_SIMPLIFIED, - _( "Chinese simplified" ), wxEmptyString, wxITEM_CHECK ); - SETBITMAPS( lang_chinese_xpm ); - m_Language_Menu->Append( item ); + for( ii = 0; ii < LANGUAGE_DESCR_COUNT; ii++ ) + { + wxString MenuLabel = s_Language_List[ii].m_DoNotTranslate ? + s_Language_List[ii].m_Lang_Label : + wxGetTranslation( s_Language_List[ii].m_Lang_Label ); + item = new wxMenuItem( m_Language_Menu, s_Language_List[ii].m_KI_Lang_Identifier, + MenuLabel, wxEmptyString, wxITEM_CHECK ); + SETBITMAPS( s_Language_List[ii].m_Lang_Icon ); + m_Language_Menu->Append( item ); + } } - m_Language_Menu->Check( ID_LANGUAGE_CATALAN, FALSE ); - m_Language_Menu->Check( ID_LANGUAGE_CHINESE_SIMPLIFIED, FALSE ); - m_Language_Menu->Check( ID_LANGUAGE_KOREAN, FALSE ); - m_Language_Menu->Check( ID_LANGUAGE_RUSSIAN, FALSE ); - m_Language_Menu->Check( ID_LANGUAGE_POLISH, FALSE ); - m_Language_Menu->Check( ID_LANGUAGE_HUNGARIAN, FALSE ); - m_Language_Menu->Check( ID_LANGUAGE_SLOVENIAN, FALSE ); - m_Language_Menu->Check( ID_LANGUAGE_ITALIAN, FALSE ); - m_Language_Menu->Check( ID_LANGUAGE_PORTUGUESE, FALSE ); - m_Language_Menu->Check( ID_LANGUAGE_GERMAN, FALSE ); - m_Language_Menu->Check( ID_LANGUAGE_SPANISH, FALSE ); - m_Language_Menu->Check( ID_LANGUAGE_FRENCH, FALSE ); - m_Language_Menu->Check( ID_LANGUAGE_ENGLISH, FALSE ); - m_Language_Menu->Check( ID_LANGUAGE_DEFAULT, FALSE ); - - switch( m_LanguageId ) + for( ii = 0; ii < LANGUAGE_DESCR_COUNT; ii++ ) { - case wxLANGUAGE_CATALAN: - m_Language_Menu->Check( ID_LANGUAGE_CATALAN, TRUE ); - break; - - case wxLANGUAGE_CHINESE_SIMPLIFIED: - m_Language_Menu->Check( ID_LANGUAGE_CHINESE_SIMPLIFIED, TRUE ); - break; - - case wxLANGUAGE_KOREAN: - m_Language_Menu->Check( ID_LANGUAGE_KOREAN, TRUE ); - break; - - case wxLANGUAGE_RUSSIAN: - m_Language_Menu->Check( ID_LANGUAGE_RUSSIAN, TRUE ); - break; - - case wxLANGUAGE_GERMAN: - m_Language_Menu->Check( ID_LANGUAGE_GERMAN, TRUE ); - break; - - case wxLANGUAGE_FRENCH: - m_Language_Menu->Check( ID_LANGUAGE_FRENCH, TRUE ); - break; - - case wxLANGUAGE_ENGLISH: - m_Language_Menu->Check( ID_LANGUAGE_ENGLISH, TRUE ); - break; - - case wxLANGUAGE_SPANISH: - m_Language_Menu->Check( ID_LANGUAGE_SPANISH, TRUE ); - break; - - case wxLANGUAGE_PORTUGUESE: - m_Language_Menu->Check( ID_LANGUAGE_PORTUGUESE, TRUE ); - break; - - case wxLANGUAGE_ITALIAN: - m_Language_Menu->Check( ID_LANGUAGE_ITALIAN, TRUE ); - break; - - case wxLANGUAGE_SLOVENIAN: - m_Language_Menu->Check( ID_LANGUAGE_SLOVENIAN, TRUE ); - break; - - case wxLANGUAGE_HUNGARIAN: - m_Language_Menu->Check( ID_LANGUAGE_HUNGARIAN, TRUE ); - break; - - case wxLANGUAGE_POLISH: - m_Language_Menu->Check( ID_LANGUAGE_POLISH, TRUE ); - break; - - default: - m_Language_Menu->Check( ID_LANGUAGE_DEFAULT, TRUE ); - break; + if( m_LanguageId == s_Language_List[ii].m_WX_Lang_Identifier ) + m_Language_Menu->Check( s_Language_List[ii].m_KI_Lang_Identifier, true ); + else + m_Language_Menu->Check( s_Language_List[ii].m_KI_Lang_Identifier, false ); } if( MasterMenu ) { ADD_MENUITEM_WITH_HELP_AND_SUBMENU( MasterMenu, m_Language_Menu, - ID_LANGUAGE_CHOICE, _( "Language" ), - wxT( "For test only, use Default setup for normal use" ), - language_xpm ); + ID_LANGUAGE_CHOICE, _( "Language" ), + wxT( "For test only, use Default setup for normal use" ), + language_xpm ); } return m_Language_Menu; } @@ -665,8 +602,9 @@ wxMenu* WinEDA_App::SetLanguageList( wxMenu* MasterMenu ) /**********************/ int WinEDA_App::OnRun() /**********************/ + /* Run init scripts -*/ + */ { #ifdef KICAD_PYTHON PyHandler::GetInstance()->RunScripts(); diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h index 74875166d4..6862450eaa 100644 --- a/include/wxPcbStruct.h +++ b/include/wxPcbStruct.h @@ -214,14 +214,14 @@ public: wxDC* DC, const wxPoint& pos ); // Pads sur modules - void AddPad( MODULE* Module, wxDC* DC ); + void AddPad( MODULE* Module, bool draw ); void DeletePad( D_PAD* Pad, wxDC* DC ); void StartMovePad( D_PAD* Pad, wxDC* DC ); void RotatePad( D_PAD* Pad, wxDC* DC ); void PlacePad( D_PAD* Pad, wxDC* DC ); - void Export_Pad_Settings( D_PAD* pt_pad ); - void Import_Pad_Settings( D_PAD* pt_pad, wxDC* DC ); - void Global_Import_Pad_Settings( D_PAD* Pad, wxDC* DC ); + void Export_Pad_Settings( D_PAD* aPad ); + void Import_Pad_Settings( D_PAD* aPad, bool aDraw ); + void Global_Import_Pad_Settings( D_PAD* aPad, bool aDraw ); // loading footprints diff --git a/pcbnew/class_pad.cpp b/pcbnew/class_pad.cpp index 5760b22dc1..15c6e646bf 100644 --- a/pcbnew/class_pad.cpp +++ b/pcbnew/class_pad.cpp @@ -82,6 +82,23 @@ void D_PAD::ComputeRayon() } +/** + * Function GetBoundingBox + * returns the bounding box of this pad + * Mainly used to redraw the screen area occuped by the pad + */ +EDA_Rect D_PAD::GetBoundingBox() +{ + // Calculate area: + ComputeRayon(); // calculate the radius of the area, considered as a circle + EDA_Rect area; + area.SetOrigin(m_Pos); + area.Inflate(m_Rayon, m_Rayon); + + return area; +} + + /*********************************************/ const wxPoint D_PAD::ReturnShapePos() /*********************************************/ @@ -239,6 +256,9 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoin int zoom; int fillpad = 0; wxPoint shape_pos; + + if ( m_Flags & DO_NOT_DRAW ) + return; wxASSERT( panel ); diff --git a/pcbnew/class_pad.h b/pcbnew/class_pad.h index 25c5c81994..ff4f10dcc4 100644 --- a/pcbnew/class_pad.h +++ b/pcbnew/class_pad.h @@ -172,6 +172,13 @@ public: } + /** + * Function GetBoundingBox + * returns the bounding box of this Footprint + * Mainly used to redraw the screen area occuped by the footprint + */ + EDA_Rect GetBoundingBox(); + /** * Function Compare * compares two pads and return 0 if they are equal. diff --git a/pcbnew/classpcb.cpp b/pcbnew/classpcb.cpp index b3d78af39e..7e40f15835 100644 --- a/pcbnew/classpcb.cpp +++ b/pcbnew/classpcb.cpp @@ -30,6 +30,7 @@ PCB_SCREEN::PCB_SCREEN( int idscreen ) : BASE_SCREEN( TYPESCREEN ) m_Type = idscreen; SetGridList( g_GridList ); SetZoomList( zoom_list ); + m_Grid = wxSize( 500, 500 ); /* pas de la grille en 1/10000 "*/ Init(); } @@ -50,7 +51,6 @@ void PCB_SCREEN::Init() m_Route_Layer_TOP = CMP_N; /* ref couches par defaut pour vias (Cu.. Cmp) */ m_Route_Layer_BOTTOM = COPPER_LAYER_N; m_Zoom = 128; /* valeur */ - m_Grid = wxSize( 500, 500 ); /* pas de la grille en 1/10000 "*/ } diff --git a/pcbnew/edit.cpp b/pcbnew/edit.cpp index f937af1639..571e003da9 100644 --- a/pcbnew/edit.cpp +++ b/pcbnew/edit.cpp @@ -663,12 +663,12 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_PCB_IMPORT_PAD_SETTINGS: DrawPanel->MouseToCursorSchema(); - Import_Pad_Settings( (D_PAD*) GetCurItem(), &dc ); + Import_Pad_Settings( (D_PAD*) GetCurItem(), true ); break; case ID_POPUP_PCB_GLOBAL_IMPORT_PAD_SETTINGS: DrawPanel->MouseToCursorSchema(); - Global_Import_Pad_Settings( (D_PAD*) GetCurItem(), &dc ); + Global_Import_Pad_Settings( (D_PAD*) GetCurItem(), true ); break; case ID_POPUP_PCB_EXPORT_PAD_SETTINGS: diff --git a/pcbnew/editpads.cpp b/pcbnew/editpads.cpp index 3d9bcbdc24..226eb8c723 100644 --- a/pcbnew/editpads.cpp +++ b/pcbnew/editpads.cpp @@ -442,8 +442,12 @@ void WinEDA_PadPropertiesFrame::PadPropertiesAccept( wxCommandEvent& event ) Module = (MODULE*) CurrentPad->m_Parent; Module->m_LastEdit_Time = time( NULL ); - if( m_DC ) - CurrentPad->Draw( m_Parent->DrawPanel, m_DC, GR_XOR ); + if( m_DC )// redraw the area where the pas was, without pad + { + CurrentPad->m_Flags |= DO_NOT_DRAW; + m_Parent->DrawPanel->PostDirtyRect( CurrentPad->GetBoundingBox() ); + CurrentPad->m_Flags &= ~DO_NOT_DRAW; + } CurrentPad->m_PadShape = g_Pad_Master.m_PadShape; CurrentPad->m_Attribut = g_Pad_Master.m_Attribut; if (CurrentPad->m_Pos != g_Pad_Master.m_Pos ) @@ -529,8 +533,8 @@ void WinEDA_PadPropertiesFrame::PadPropertiesAccept( wxCommandEvent& event ) Module->Set_Rectangle_Encadrement(); CurrentPad->Display_Infos( m_Parent ); - if( m_DC ) - CurrentPad->Draw( m_Parent->DrawPanel, m_DC, GR_OR ); + if( m_DC )// redraw the area where the pas was + m_Parent->DrawPanel->PostDirtyRect( CurrentPad->GetBoundingBox() ); m_Parent->GetScreen()->SetModify(); } diff --git a/pcbnew/files.cpp b/pcbnew/files.cpp index 59800120a8..70be86ecbe 100644 --- a/pcbnew/files.cpp +++ b/pcbnew/files.cpp @@ -98,7 +98,7 @@ void WinEDA_PcbFrame::Files_io( wxCommandEvent& event ) Clear_Pcb(TRUE ); wxSetWorkingDirectory( wxPathOnly( GetLastProject( id - ID_LOAD_FILE_1 ) ) ); LoadOnePcbFile( GetLastProject( id - ID_LOAD_FILE_1 ).GetData(), - FALSE ); + false ); ReCreateAuxiliaryToolbar(); break; @@ -211,7 +211,7 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, bool Append ) // Reload the corresponding configuration file: wxSetWorkingDirectory( wxPathOnly( GetScreen()->m_FileName ) ); if( Append ) - ReadPcbFile( source, TRUE ); + ReadPcbFile( source, true ); else { Read_Config( GetScreen()->m_FileName ); @@ -222,7 +222,7 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, bool Append ) m_DisplayModEdge = DisplayOpt.DisplayModEdge; m_DisplayPadFill = DisplayOpt.DisplayPadFill; - ReadPcbFile( source, FALSE ); + ReadPcbFile( source, false ); } fclose( source ); @@ -245,18 +245,18 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, bool Append ) /* reset the auto save timer */ g_SaveTime = time( NULL ); - -#if 0 && defined(DEBUG) - // note this freezes up pcbnew when run under the kicad project + +#if 0 && defined(DEBUG) + // note this freezes up pcbnew when run under the kicad project // manager. runs fine from command prompt. This is because the kicad // project manager redirects stdout of the child pcbnew process to itself, - // but never reads from that pipe, and that in turn eventually blocks + // but never reads from that pipe, and that in turn eventually blocks // the pcbnew program when the pipe it is writing to gets full. - + // Output the board object tree to stdout, but please run from command prompt: m_Pcb->Show( 0, std::cout ); #endif - + return 1; } @@ -273,14 +273,14 @@ bool WinEDA_PcbFrame::SavePcbFile( const wxString& FileName ) wxString upperTxt; wxString lowerTxt; wxString msg; - + bool saveok = TRUE; FILE* dest; if( FileName == wxEmptyString ) { msg = wxT( "*" ) + PcbExtBuffer; - + FullFileName = EDA_FileSelector( _( "Save board files:" ), wxEmptyString, /* Chemin par defaut */ GetScreen()->m_FileName, /* nom fichier par defaut */ @@ -292,7 +292,7 @@ bool WinEDA_PcbFrame::SavePcbFile( const wxString& FileName ) ); if( FullFileName == wxEmptyString ) return FALSE; - + GetScreen()->m_FileName = FullFileName; } else @@ -327,7 +327,7 @@ bool WinEDA_PcbFrame::SavePcbFile( const wxString& FileName ) } else { - BackupFileName = wxEmptyString; + BackupFileName = wxEmptyString; saveok = FALSE; } @@ -344,7 +344,7 @@ bool WinEDA_PcbFrame::SavePcbFile( const wxString& FileName ) { GetScreen()->m_FileName = FullFileName; SetTitle( GetScreen()->m_FileName ); - + SavePcbFormatAscii( dest ); fclose( dest ); } @@ -364,9 +364,9 @@ bool WinEDA_PcbFrame::SavePcbFile( const wxString& FileName ) lowerTxt += FullFileName; Affiche_1_Parametre( this, 1, upperTxt, lowerTxt, CYAN ); - + g_SaveTime = time( NULL ); /* Reset timer for the automatic saving */ - + GetScreen()->ClrModify(); return TRUE; } diff --git a/pcbnew/globaleditpad.cpp b/pcbnew/globaleditpad.cpp index a365af0d66..74eba62908 100644 --- a/pcbnew/globaleditpad.cpp +++ b/pcbnew/globaleditpad.cpp @@ -38,7 +38,6 @@ class WinEDA_PadGlobalEditFrame : public wxDialog private: WinEDA_BasePcbFrame* m_Parent; - wxDC* m_DC; D_PAD* CurrentPad; wxCheckBox* m_Pad_Shape_Filter; wxCheckBox* m_Pad_Layer_Filter; @@ -51,8 +50,7 @@ private: public: // Constructor and destructor - WinEDA_PadGlobalEditFrame( WinEDA_BasePcbFrame * parent, - D_PAD * Pad, wxDC * DC, const wxPoint &pos ); + WinEDA_PadGlobalEditFrame( WinEDA_BasePcbFrame * parent, D_PAD * Pad ); ~WinEDA_PadGlobalEditFrame() { } private: @@ -72,10 +70,8 @@ END_EVENT_TABLE() /********************************************************************************/ WinEDA_PadGlobalEditFrame::WinEDA_PadGlobalEditFrame( WinEDA_BasePcbFrame* parent, - D_PAD* Pad, - wxDC* DC, - const wxPoint& framepos ) : - wxDialog( parent, -1, _( "Pads Global Edit" ), framepos, wxSize( 310, 235 ), + D_PAD* Pad ) : + wxDialog( parent, -1, _( "Pads Global Edit" ), wxDefaultPosition, wxSize( 310, 235 ), DIALOG_STYLE ) /********************************************************************************/ { @@ -84,7 +80,6 @@ WinEDA_PadGlobalEditFrame::WinEDA_PadGlobalEditFrame( WinEDA_BasePcbFrame* paren m_Parent = parent; SetFont( *g_DialogFont ); - m_DC = DC; Centre(); CurrentPad = Pad; @@ -206,26 +201,24 @@ void WinEDA_PadGlobalEditFrame::PadPropertiesAccept( wxCommandEvent& event ) /***************************************************************************/ -void WinEDA_BasePcbFrame::Global_Import_Pad_Settings( D_PAD* Pad, wxDC* DC ) +void WinEDA_BasePcbFrame::Global_Import_Pad_Settings( D_PAD* aPad, bool aDraw ) /***************************************************************************/ -/* - * Routine de selection et de correction des dimensions des pastilles - * de tous les modules - * - semblables a l'module de reference selectionnee, - * c.a.d de meme nom de librairie - * - ou sur l'module localisee, selon le menu d'appel +/** Function Global_Import_Pad_Settings + * Function to change pad caracteristics for the given footprint + * or alls footprints which look like the given footprint + * @param aPad pad to use as pattern. The given footprint is the parent of this pad + * @param aDraw: if true: redraws the footprint */ { - D_PAD* pt_pad; MODULE* Module_Ref, * Module; int diag; bool Edit_Same_Modules = FALSE; - if( Pad == NULL ) + if( aPad == NULL ) return; - Module = (MODULE*) Pad->m_Parent; + Module = (MODULE*) aPad->m_Parent; if( Module == NULL ) { @@ -237,8 +230,7 @@ void WinEDA_BasePcbFrame::Global_Import_Pad_Settings( D_PAD* Pad, wxDC* DC ) Module->Display_Infos( this ); - WinEDA_PadGlobalEditFrame* frame = new WinEDA_PadGlobalEditFrame( this, Pad, DC, - wxPoint( -1, -1 ) ); + WinEDA_PadGlobalEditFrame* frame = new WinEDA_PadGlobalEditFrame( this, aPad ); diag = frame->ShowModal(); frame->Destroy(); @@ -266,9 +258,14 @@ void WinEDA_BasePcbFrame::Global_Import_Pad_Settings( D_PAD* Pad, wxDC* DC ) Module->Display_Infos( this ); /* Effacement du module */ - Module->Draw( DrawPanel, DC, GR_XOR ); + if ( aDraw ) + { + Module->m_Flags |= DO_NOT_DRAW; + DrawPanel->PostDirtyRect( Module->GetBoundingBox() ); + Module->m_Flags &= ~DO_NOT_DRAW; + } - pt_pad = (D_PAD*) Module->m_Pads; + D_PAD* pt_pad = (D_PAD*) Module->m_Pads; for( ; pt_pad != NULL; pt_pad = (D_PAD*) pt_pad->Pnext ) { /* Filtrage des modifications interdites */ @@ -345,7 +342,8 @@ void WinEDA_BasePcbFrame::Global_Import_Pad_Settings( D_PAD* Pad, wxDC* DC ) } Module->Set_Rectangle_Encadrement(); - Module->Draw( DrawPanel, DC, GR_OR ); + if ( aDraw ) + DrawPanel->PostDirtyRect( Module->GetBoundingBox() ); } GetScreen()->SetModify(); diff --git a/pcbnew/initpcb.cpp b/pcbnew/initpcb.cpp index ad3d47aa7f..3857c3da0b 100644 --- a/pcbnew/initpcb.cpp +++ b/pcbnew/initpcb.cpp @@ -145,7 +145,9 @@ bool WinEDA_BasePcbFrame::Clear_Pcb( bool query ) SetCurItem( NULL ); /* Init parametres de gestion */ + wxSize gridsize = GetScreen()->GetGrid(); ((PCB_SCREEN*)GetScreen())->Init(); + GetScreen()->SetGrid( gridsize ); g_HightLigt_Status = 0; diff --git a/pcbnew/ioascii.cpp b/pcbnew/ioascii.cpp index c4a1c5c46d..e4800721ea 100644 --- a/pcbnew/ioascii.cpp +++ b/pcbnew/ioascii.cpp @@ -355,19 +355,6 @@ int WinEDA_BasePcbFrame::ReadSetup( FILE* File, int* LineNum ) continue; } - if( stricmp( Line, "GridSize" ) == 0 ) - { - wxSize Grid; - Grid.x = atoi( data ); - data = strtok( NULL, " =\n\r" ); - if( data ) - Grid.y = atoi( data ); - else - Grid.y = Grid.x; - GetScreen()->SetGrid( Grid ); - continue; - } - if( stricmp( Line, "ZoneGridSize" ) == 0 ) { g_GridRoutingSize = atoi( data ); @@ -518,23 +505,12 @@ static int WriteSetup( FILE* aFile, WinEDA_BasePcbFrame* aFrame, BOARD* aBoard ) /******************************************************************************/ { char text[1024]; - int ii, jj; + int ii; fprintf( aFile, "$SETUP\n" ); sprintf( text, "InternalUnit %f INCH\n", 1.0 / PCB_INTERNAL_UNIT ); fprintf( aFile, text ); - if( aFrame->GetScreen()->m_UserGridIsON ) - ii = jj = -1; - else - { - ii = aFrame->GetScreen()->GetGrid().x; - jj = aFrame->GetScreen()->GetGrid().y; - } - - sprintf( text, "GridSize %d %d\n", ii, jj ); - fprintf( aFile, text ); - sprintf( text, "UserGridSize %lf %lf %s\n", aFrame->GetScreen()->m_UserGrid.x, aFrame->GetScreen()->m_UserGrid.y, ( g_UserGrid_Unit == 0 ) ? "INCH" : "mm" ); @@ -551,7 +527,7 @@ static int WriteSetup( FILE* aFile, WinEDA_BasePcbFrame* aFrame, BOARD* aBoard ) } fprintf( aFile, "TrackWidth %d\n", g_DesignSettings.m_CurrentTrackWidth ); - for( ii = 0; ii < HISTORY_NUMBER; ii++ ) + for( int ii = 0; ii < HISTORY_NUMBER; ii++ ) { if( g_DesignSettings.m_TrackWidthHistory[ii] == 0 ) break; diff --git a/pcbnew/modedit.cpp b/pcbnew/modedit.cpp index b750dc37a4..c638825768 100644 --- a/pcbnew/modedit.cpp +++ b/pcbnew/modedit.cpp @@ -462,12 +462,12 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_PCB_IMPORT_PAD_SETTINGS: SaveCopyInUndoList( m_Pcb->m_Modules ); DrawPanel->MouseToCursorSchema(); - Import_Pad_Settings( (D_PAD*) GetScreen()->GetCurItem(), &dc ); + Import_Pad_Settings( (D_PAD*) GetScreen()->GetCurItem(), true ); break; case ID_POPUP_PCB_GLOBAL_IMPORT_PAD_SETTINGS: SaveCopyInUndoList( m_Pcb->m_Modules ); - Global_Import_Pad_Settings( (D_PAD*) GetScreen()->GetCurItem(), &dc ); + Global_Import_Pad_Settings( (D_PAD*) GetScreen()->GetCurItem(), true ); DrawPanel->MouseToCursorSchema(); break; diff --git a/pcbnew/modedit_onclick.cpp b/pcbnew/modedit_onclick.cpp index 4528d67daa..8dfc33c618 100644 --- a/pcbnew/modedit_onclick.cpp +++ b/pcbnew/modedit_onclick.cpp @@ -157,7 +157,7 @@ void WinEDA_ModuleEditFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) if( m_Pcb->m_Modules ) { SaveCopyInUndoList( m_Pcb->m_Modules ); - AddPad( m_Pcb->m_Modules, DC ); + AddPad( m_Pcb->m_Modules, true ); } break; diff --git a/pcbnew/move-drag_pads.cpp b/pcbnew/move-drag_pads.cpp index b9cd2fa0c2..668a27ea78 100644 --- a/pcbnew/move-drag_pads.cpp +++ b/pcbnew/move-drag_pads.cpp @@ -132,7 +132,7 @@ void WinEDA_BasePcbFrame::Export_Pad_Settings( D_PAD* pt_pad ) /***********************************************************************/ -void WinEDA_BasePcbFrame::Import_Pad_Settings( D_PAD* pt_pad, wxDC* DC ) +void WinEDA_BasePcbFrame::Import_Pad_Settings( D_PAD* aPad, bool aDraw ) /***********************************************************************/ /* Met a jour les nouvelles valeurs de dimensions du pad pointe par pt_pad @@ -141,29 +141,33 @@ void WinEDA_BasePcbFrame::Import_Pad_Settings( D_PAD* pt_pad, wxDC* DC ) * - la position et les noms ne sont pas touches */ { - if( DC ) - pt_pad->Draw( DrawPanel, DC, GR_XOR ); + if( aDraw ) + { + aPad->m_Flags |= DO_NOT_DRAW; + DrawPanel->PostDirtyRect( aPad->GetBoundingBox() ); + aPad->m_Flags &= ~DO_NOT_DRAW; + } - pt_pad->m_PadShape = g_Pad_Master.m_PadShape; - pt_pad->m_Masque_Layer = g_Pad_Master.m_Masque_Layer; - pt_pad->m_Attribut = g_Pad_Master.m_Attribut; - pt_pad->m_Orient = g_Pad_Master.m_Orient + - ( (MODULE*) pt_pad->m_Parent )->m_Orient; - pt_pad->m_Size = g_Pad_Master.m_Size; - pt_pad->m_DeltaSize = wxSize( 0, 0 ); - pt_pad->m_Offset = g_Pad_Master.m_Offset; - pt_pad->m_Drill = g_Pad_Master.m_Drill; - pt_pad->m_DrillShape = g_Pad_Master.m_DrillShape; + aPad->m_PadShape = g_Pad_Master.m_PadShape; + aPad->m_Masque_Layer = g_Pad_Master.m_Masque_Layer; + aPad->m_Attribut = g_Pad_Master.m_Attribut; + aPad->m_Orient = g_Pad_Master.m_Orient + + ( (MODULE*) aPad->m_Parent )->m_Orient; + aPad->m_Size = g_Pad_Master.m_Size; + aPad->m_DeltaSize = wxSize( 0, 0 ); + aPad->m_Offset = g_Pad_Master.m_Offset; + aPad->m_Drill = g_Pad_Master.m_Drill; + aPad->m_DrillShape = g_Pad_Master.m_DrillShape; /* Traitement des cas particuliers : */ switch( g_Pad_Master.m_PadShape ) { case PAD_TRAPEZOID: - pt_pad->m_DeltaSize = g_Pad_Master.m_DeltaSize; + aPad->m_DeltaSize = g_Pad_Master.m_DeltaSize; break; case PAD_CIRCLE: - pt_pad->m_Size.y = pt_pad->m_Size.x; + aPad->m_Size.y = aPad->m_Size.x; break; } @@ -171,21 +175,21 @@ void WinEDA_BasePcbFrame::Import_Pad_Settings( D_PAD* pt_pad, wxDC* DC ) { case PAD_SMD: case PAD_CONN: - pt_pad->m_Drill = wxSize( 0, 0 ); - pt_pad->m_Offset.x = 0; - pt_pad->m_Offset.y = 0; + aPad->m_Drill = wxSize( 0, 0 ); + aPad->m_Offset.x = 0; + aPad->m_Offset.y = 0; } - pt_pad->ComputeRayon(); + aPad->ComputeRayon(); - if( DC ) - pt_pad->Draw( DrawPanel, DC, GR_XOR ); - ( (MODULE*) pt_pad->m_Parent )->m_LastEdit_Time = time( NULL ); + if( aDraw ) + DrawPanel->PostDirtyRect( aPad->GetBoundingBox() ); + ( (MODULE*) aPad->m_Parent )->m_LastEdit_Time = time( NULL ); } /***********************************************************/ -void WinEDA_BasePcbFrame::AddPad( MODULE* Module, wxDC* DC ) +void WinEDA_BasePcbFrame::AddPad( MODULE* Module, bool draw ) /***********************************************************/ /* Routine d'ajout d'un pad sur l'module selectionnee */ { @@ -218,7 +222,7 @@ void WinEDA_BasePcbFrame::AddPad( MODULE* Module, wxDC* DC ) } /* Mise a jour des caract de la pastille : */ - Import_Pad_Settings( Pad, NULL ); + Import_Pad_Settings( Pad, false ); Pad->m_Netname.Empty(); Pad->m_Pos = GetScreen()->m_Curseur; @@ -248,7 +252,8 @@ void WinEDA_BasePcbFrame::AddPad( MODULE* Module, wxDC* DC ) /* Redessin du module */ Module->Set_Rectangle_Encadrement(); Pad->Display_Infos( this ); - Module->Draw( DrawPanel, DC, GR_OR ); + if ( draw ) + DrawPanel->PostDirtyRect( Module->GetBoundingBox() ); } diff --git a/pcbnew/onrightclick.cpp b/pcbnew/onrightclick.cpp index b6156365f9..f354b85aac 100644 --- a/pcbnew/onrightclick.cpp +++ b/pcbnew/onrightclick.cpp @@ -1,6 +1,6 @@ -/********************************************************************************/ -/* onrightclick.cpp: fonctions de l'edition du PCB appel�es par le bouton droit */ -/********************************************************************************/ +/**************************************************/ +/* onrightclick.cpp: Right mouse button functions */ +/**************************************************/ #include "fctsys.h" @@ -86,8 +86,8 @@ static wxMenu* Append_Track_Width_List() if( g_DesignSettings.m_TrackWidthHistory[ii] == 0 ) break; value = To_User_Unit( g_UnitMetric, - g_DesignSettings.m_TrackWidthHistory[ii], - PCB_INTERNAL_UNIT ); + g_DesignSettings.m_TrackWidthHistory[ii], + PCB_INTERNAL_UNIT ); if( g_UnitMetric == INCHES ) // Affichage en mils msg.Printf( _( "Track %.1f" ), value * 1000 ); else @@ -106,8 +106,8 @@ static wxMenu* Append_Track_Width_List() if( g_DesignSettings.m_ViaSizeHistory[ii] == 0 ) break; value = To_User_Unit( g_UnitMetric, - g_DesignSettings.m_ViaSizeHistory[ii], - PCB_INTERNAL_UNIT ); + g_DesignSettings.m_ViaSizeHistory[ii], + PCB_INTERNAL_UNIT ); if( g_UnitMetric == INCHES ) msg.Printf( _( "Via %.1f" ), value * 1000 ); else @@ -154,12 +154,12 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) if( item && item->m_Flags ) { ADD_MENUITEM( aPopMenu, ID_POPUP_CANCEL_CURRENT_COMMAND, - _( "Cancel" ), cancel_xpm ); + _( "Cancel" ), cancel_xpm ); } else { ADD_MENUITEM( aPopMenu, ID_POPUP_CLOSE_CURRENT_TOOL, - _( "End Tool" ), cancel_tool_xpm ); + _( "End Tool" ), cancel_tool_xpm ); } aPopMenu->AppendSeparator(); } @@ -168,7 +168,7 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) if( item && item->m_Flags ) { ADD_MENUITEM( aPopMenu, ID_POPUP_CANCEL_CURRENT_COMMAND, - _( "Cancel" ), cancel_xpm ); + _( "Cancel" ), cancel_xpm ); aPopMenu->AppendSeparator(); } } @@ -227,23 +227,23 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) if( !( (MODULE*) item )->IsLocked() ) { msg = AddHotkeyName( _( - "Lock Module" ), s_Board_Editor_Hokeys_Descr, - HK_LOCK_UNLOCK_FOOTPRINT ); + "Lock Module" ), s_Board_Editor_Hokeys_Descr, + HK_LOCK_UNLOCK_FOOTPRINT ); ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_AUTOPLACE_FIXE_MODULE, msg, - Locked_xpm ); + Locked_xpm ); } else { msg = AddHotkeyName( _( - "Unlock Module" ), s_Board_Editor_Hokeys_Descr, - HK_LOCK_UNLOCK_FOOTPRINT ); + "Unlock Module" ), s_Board_Editor_Hokeys_Descr, + HK_LOCK_UNLOCK_FOOTPRINT ); ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_AUTOPLACE_FREE_MODULE, msg, - Unlocked_xpm ); + Unlocked_xpm ); } if( !flags ) aPopMenu->Append( ID_POPUP_PCB_AUTOPLACE_CURRENT_MODULE, - _( "Auto place Module" ) ); + _( "Auto place Module" ) ); } if( m_HTOOL_current_state == ID_TOOLBARH_PCB_AUTOROUTE ) @@ -265,12 +265,12 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) if( !flags ) { ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_MOVE_DRAWING_REQUEST, - _( "Move Drawing" ), move_xpm ); + _( "Move Drawing" ), move_xpm ); } if( flags & IS_NEW ) { ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_STOP_CURRENT_DRAWING, - _( "End Drawing" ), apply_xpm ); + _( "End Drawing" ), apply_xpm ); } aPopMenu->Append( ID_POPUP_PCB_EDIT_DRAWING, _( "Edit Drawing" ) ); aPopMenu->Append( ID_POPUP_PCB_DELETE_DRAWING, _( "Delete Drawing" ) ); @@ -278,11 +278,11 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) case TYPEZONE: // Item used to fill a zone ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_DELETE_ZONE, - _( "Delete Zone Filling" ), delete_xpm ); + _( "Delete Zone Filling" ), delete_xpm ); break; case TYPEZONE_CONTAINER: // Item used to handle a zone area (outlines, holes ...) - if( flags & IS_NEW ) + if( flags & IS_NEW ) { ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_STOP_CURRENT_EDGE_ZONE, _( "Close Zone Outline" ), apply_xpm ); @@ -305,29 +305,29 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) case TYPEMARKER: ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_DELETE_MARKER, - _( "Delete Marker" ), delete_xpm ); + _( "Delete Marker" ), delete_xpm ); break; case TYPECOTATION: if( !flags ) { ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_EDIT_COTATION, - _( "Edit Dimension" ), edit_xpm ); + _( "Edit Dimension" ), edit_xpm ); } ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_DELETE_COTATION, - _( "Delete Dimension" ), delete_xpm ); + _( "Delete Dimension" ), delete_xpm ); break; case TYPEMIRE: if( !flags ) { ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_MOVE_MIRE_REQUEST, - _( "Move Target" ), move_xpm ); + _( "Move Target" ), move_xpm ); } ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_EDIT_MIRE, - _( "Edit Target" ), edit_xpm ); + _( "Edit Target" ), edit_xpm ); ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_DELETE_MIRE, - _( "Delete Target" ), delete_xpm ); + _( "Delete Target" ), delete_xpm ); break; case TYPEEDGEMODULE: @@ -360,9 +360,9 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) if( !flags ) { msg = AddHotkeyName( _( "Get and Move Footprint" ), - s_Board_Editor_Hokeys_Descr, HK_GET_AND_MOVE_FOOTPRINT ); + s_Board_Editor_Hokeys_Descr, HK_GET_AND_MOVE_FOOTPRINT ); ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_GET_AND_MOVE_MODULE_REQUEST, - msg, Move_Module_xpm ); + msg, Move_Module_xpm ); } /* Traitement des fonctions specifiques */ @@ -373,12 +373,12 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) if( m_Pcb->m_ZoneDescriptorList.size() > 0 ) { ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_FILL_ALL_ZONES, - _( "Fill or Refill All Zones" ), fill_zone_xpm ); + _( "Fill or Refill All Zones" ), fill_zone_xpm ); aPopMenu->AppendSeparator(); } ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_SELECT_LAYER, - _( "Select Working Layer" ), Select_W_Layer_xpm ); + _( "Select Working Layer" ), Select_W_Layer_xpm ); aPopMenu->AppendSeparator(); } break; @@ -386,12 +386,12 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) case ID_TRACK_BUTT: { ADD_MENUITEM_WITH_SUBMENU( aPopMenu, Append_Track_Width_List(), - ID_POPUP_PCB_SELECT_WIDTH, - _( "Select Track Width" ), width_track_xpm ); + ID_POPUP_PCB_SELECT_WIDTH, + _( "Select Track Width" ), width_track_xpm ); ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_SELECT_CU_LAYER, - _( "Select Working Layer" ), Select_W_Layer_xpm ); + _( "Select Working Layer" ), Select_W_Layer_xpm ); ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_SELECT_LAYER_PAIR, - _( "Select layer pair for vias" ), select_layer_pair_xpm ); + _( "Select layer pair for vias" ), select_layer_pair_xpm ); aPopMenu->AppendSeparator(); } break; @@ -402,13 +402,13 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) case ID_LINE_COMMENT_BUTT: case ID_PCB_COTATION_BUTT: ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_SELECT_NO_CU_LAYER, - _( "Select Working Layer" ), Select_W_Layer_xpm ); + _( "Select Working Layer" ), Select_W_Layer_xpm ); aPopMenu->AppendSeparator(); break; case ID_COMPONENT_BUTT: ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_DISPLAY_FOOTPRINT_DOC, - _( "Footprint documentation" ), book_xpm ); + _( "Footprint documentation" ), book_xpm ); aPopMenu->AppendSeparator(); break; @@ -417,15 +417,15 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) { wxMenu* commands = new wxMenu; ADD_MENUITEM_WITH_SUBMENU( aPopMenu, commands, - ID_POPUP_PCB_AUTOPLACE_COMMANDS, _( - "Glob Move and Place" ), move_xpm ); + ID_POPUP_PCB_AUTOPLACE_COMMANDS, _( + "Glob Move and Place" ), move_xpm ); ADD_MENUITEM( commands, ID_POPUP_PCB_AUTOPLACE_FREE_ALL_MODULES, - _( "Unlock All Modules" ), Unlocked_xpm ); + _( "Unlock All Modules" ), Unlocked_xpm ); ADD_MENUITEM( commands, ID_POPUP_PCB_AUTOPLACE_FIXE_ALL_MODULES, - _( "Lock All Modules" ), Locked_xpm ); + _( "Lock All Modules" ), Locked_xpm ); commands->AppendSeparator(); ADD_MENUITEM( commands, ID_POPUP_PCB_AUTOMOVE_ALL_MODULES, - _( "Move All Modules" ), move_xpm ); + _( "Move All Modules" ), move_xpm ); commands->Append( ID_POPUP_PCB_AUTOMOVE_NEW_MODULES, _( "Move New Modules" ) ); commands->AppendSeparator(); commands->Append( ID_POPUP_PCB_AUTOPLACE_ALL_MODULES, _( "Autoplace All Modules" ) ); @@ -433,7 +433,7 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) commands->Append( ID_POPUP_PCB_AUTOPLACE_NEXT_MODULE, _( "Autoplace Next Module" ) ); commands->AppendSeparator(); ADD_MENUITEM( commands, ID_POPUP_PCB_REORIENT_ALL_MODULES, - _( "Orient All Modules" ), rotate_module_pos_xpm ); + _( "Orient All Modules" ), rotate_module_pos_xpm ); aPopMenu->AppendSeparator(); } @@ -442,7 +442,7 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) wxMenu* commands = new wxMenu; aPopMenu->Append( ID_POPUP_PCB_AUTOROUTE_COMMANDS, _( "Global Autoroute" ), commands ); ADD_MENUITEM( commands, ID_POPUP_PCB_SELECT_LAYER_PAIR, - _( "Select layer pair" ), select_layer_pair_xpm ); + _( "Select layer pair" ), select_layer_pair_xpm ); commands->AppendSeparator(); commands->Append( ID_POPUP_PCB_AUTOROUTE_ALL_MODULES, _( "Autoroute All Modules" ) ); commands->AppendSeparator(); @@ -451,19 +451,19 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) { commands->AppendSeparator(); commands->Append( ID_POPUP_PCB_AUTOROUTE_GET_AUTOROUTER, - _( "Global AutoRouter" ) ); + _( "Global AutoRouter" ) ); commands->Append( ID_POPUP_PCB_AUTOROUTE_GET_AUTOROUTER_DATA, - _( "Read Global AutoRouter Data" ) ); + _( "Read Global AutoRouter Data" ) ); } aPopMenu->AppendSeparator(); } if( locate_track ) ADD_MENUITEM_WITH_SUBMENU( aPopMenu, Append_Track_Width_List(), - ID_POPUP_PCB_SELECT_WIDTH, _( "Select Track Width" ), - width_track_xpm ); + ID_POPUP_PCB_SELECT_WIDTH, _( "Select Track Width" ), + width_track_xpm ); ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_SELECT_LAYER, - _( "Select Working Layer" ), Select_W_Layer_xpm ); + _( "Select Working Layer" ), Select_W_Layer_xpm ); aPopMenu->AppendSeparator(); break; } @@ -481,20 +481,20 @@ void WinEDA_PcbFrame::createPopUpBlockMenu( wxMenu* menu ) */ { ADD_MENUITEM( menu, ID_POPUP_CANCEL_CURRENT_COMMAND, - _( "Cancel Block" ), cancel_xpm ); + _( "Cancel Block" ), cancel_xpm ); ADD_MENUITEM( menu, ID_POPUP_ZOOM_BLOCK, - _( "Zoom Block (drag middle mouse)" ), zoom_selected_xpm ); + _( "Zoom Block (drag middle mouse)" ), zoom_selected_xpm ); menu->AppendSeparator(); ADD_MENUITEM( menu, ID_POPUP_PLACE_BLOCK, - _( "Place Block" ), apply_xpm ); + _( "Place Block" ), apply_xpm ); ADD_MENUITEM( menu, ID_POPUP_COPY_BLOCK, - _( "Copy Block (shift + drag mouse)" ), copyblock_xpm ); + _( "Copy Block (shift + drag mouse)" ), copyblock_xpm ); ADD_MENUITEM( menu, ID_POPUP_INVERT_BLOCK, - _( "Flip Block (alt + drag mouse)" ), invert_module_xpm ); + _( "Flip Block (alt + drag mouse)" ), invert_module_xpm ); ADD_MENUITEM( menu, ID_POPUP_ROTATE_BLOCK, - _( "Rotate Block (ctrl + drag mouse)" ), rotate_pos_xpm ); + _( "Rotate Block (ctrl + drag mouse)" ), rotate_pos_xpm ); ADD_MENUITEM( menu, ID_POPUP_DELETE_BLOCK, - _( "Delete Block (shift+ctrl + drag mouse)" ), delete_xpm ); + _( "Delete Block (shift+ctrl + drag mouse)" ), delete_xpm ); } @@ -517,7 +517,7 @@ void WinEDA_PcbFrame::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu ) wxMenu* via_mnu = new wxMenu(); ADD_MENUITEM_WITH_SUBMENU( PopMenu, via_mnu, - ID_POPUP_PCB_VIA_EDITING, _( "Edit Via" ), edit_xpm ); + ID_POPUP_PCB_VIA_EDITING, _( "Edit Via" ), edit_xpm ); ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_TO_DEFAULT, _( "Set via hole to Default" ), apply_xpm ); msg = _( "Set via hole to a specific value. This specfic value is currently" ); @@ -528,13 +528,13 @@ void WinEDA_PcbFrame::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu ) msg = _( "Set alt via hole value. This value is currently" ); msg << wxT(" ") << ReturnStringFromValue( g_UnitMetric, g_DesignSettings.m_ViaDrillCustomValue, m_InternalUnits ); ADD_MENUITEM_WITH_HELP( via_mnu, ID_POPUP_PCB_VIA_HOLE_ENTER_VALUE, - _( "Set the via hole alt value" ), msg, edit_xpm ); + _( "Set the via hole alt value" ), msg, edit_xpm ); ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_EXPORT, _( - "Export Via hole to alt value" ), Export_Options_Pad_xpm ); + "Export Via hole to alt value" ), Export_Options_Pad_xpm ); ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_EXPORT_TO_OTHERS, - _( "Export via hole to others id vias" ), global_options_pad_xpm ); + _( "Export via hole to others id vias" ), global_options_pad_xpm ); ADD_MENUITEM( via_mnu, ID_POPUP_PCB_VIA_HOLE_RESET_TO_DEFAULT, - _( "Set ALL via holes to default" ), apply_xpm ); + _( "Set ALL via holes to default" ), apply_xpm ); if( !Track->IsDrillDefault() ) { via_mnu->Enable( ID_POPUP_PCB_VIA_HOLE_EXPORT, FALSE ); @@ -547,27 +547,27 @@ void WinEDA_PcbFrame::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu ) if( Track->IsPointOnEnds( cursorPosition, -1 ) != 0 ) { ADD_MENUITEM( PopMenu, ID_POPUP_PCB_MOVE_TRACK_NODE, - _( "Move Node" ), move_xpm ); + _( "Move Node" ), move_xpm ); } else { ADD_MENUITEM( PopMenu, ID_POPUP_PCB_DRAG_TRACK_SEGMENT_KEEP_SLOPE, - _( "Drag Segments, keep slope" ), drag_segment_withslope_xpm ); + _( "Drag Segments, keep slope" ), drag_segment_withslope_xpm ); ADD_MENUITEM( PopMenu, ID_POPUP_PCB_DRAG_TRACK_SEGMENT, - _( "Drag Segment" ), drag_track_segment_xpm ); + _( "Drag Segment" ), drag_track_segment_xpm ); #if 0 ADD_MENUITEM( PopMenu, ID_POPUP_PCB_MOVE_TRACK_SEGMENT, - _( "Move Segment" ), move_track_segment_xpm ); + _( "Move Segment" ), move_track_segment_xpm ); #endif ADD_MENUITEM( PopMenu, ID_POPUP_PCB_BREAK_TRACK, - _( "Break Track" ), Break_Line_xpm ); + _( "Break Track" ), Break_Line_xpm ); } } } else if( flags & IS_DRAGGED ) // Drag via or node in progress { ADD_MENUITEM( PopMenu, ID_POPUP_PCB_PLACE_MOVED_TRACK_NODE, - _( "Place Node" ), apply_xpm ); + _( "Place Node" ), apply_xpm ); return; } else // Edition in progress @@ -581,11 +581,11 @@ void WinEDA_PcbFrame::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu ) PopMenu->Append( ID_POPUP_PCB_PLACE_VIA, msg ); // See if we can place a Micro Via (4 or more layers, and start from an external layer): - if( ((PCB_SCREEN*)GetScreen())->IsMicroViaAcceptable() ) + if( ( (PCB_SCREEN*) GetScreen() )->IsMicroViaAcceptable() ) { msg = AddHotkeyName( _( - "Place Micro Via" ), s_Board_Editor_Hokeys_Descr, - HK_ADD_MICROVIA ); + "Place Micro Via" ), s_Board_Editor_Hokeys_Descr, + HK_ADD_MICROVIA ); PopMenu->Append( ID_POPUP_PCB_PLACE_MICROVIA, msg ); } } @@ -601,39 +601,39 @@ void WinEDA_PcbFrame::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu ) Track->Type()==TYPEVIA ? _( "Edit Via" ) : _( "Edit Segment" ), width_segment_xpm ); ADD_MENUITEM( track_mnu, ID_POPUP_PCB_EDIT_TRACK, - _( "Edit Track" ), width_track_xpm ); + _( "Edit Track" ), width_track_xpm ); ADD_MENUITEM( track_mnu, ID_POPUP_PCB_EDIT_NET, - _( "Edit Net" ), width_net_xpm ); + _( "Edit Net" ), width_net_xpm ); ADD_MENUITEM( track_mnu, ID_POPUP_PCB_EDIT_ALL_VIAS_AND_TRACK_SIZE, - _( "Edit ALL Tracks and Vias" ), width_track_via_xpm ); + _( "Edit ALL Tracks and Vias" ), width_track_via_xpm ); ADD_MENUITEM( track_mnu, ID_POPUP_PCB_EDIT_ALL_VIAS_SIZE, - _( "Edit ALL Vias (no track)" ), width_vias_xpm ); + _( "Edit ALL Vias (no track)" ), width_vias_xpm ); ADD_MENUITEM( track_mnu, ID_POPUP_PCB_EDIT_ALL_TRACK_SIZE, - _( "Edit ALL Tracks (no via)" ), width_track_xpm ); + _( "Edit ALL Tracks (no via)" ), width_track_xpm ); } // Delete control: track_mnu = new wxMenu; ADD_MENUITEM_WITH_SUBMENU( PopMenu, track_mnu, - ID_POPUP_PCB_DELETE_TRACK_MNU, _( "Delete" ), delete_xpm ); + ID_POPUP_PCB_DELETE_TRACK_MNU, _( "Delete" ), delete_xpm ); msg = AddHotkeyName( Track->Type()==TYPEVIA ? _( "Delete Via" ) : _( "Delete Segment" ), - s_Board_Editor_Hokeys_Descr, HK_BACK_SPACE ); + s_Board_Editor_Hokeys_Descr, HK_BACK_SPACE ); ADD_MENUITEM( track_mnu, ID_POPUP_PCB_DELETE_TRACKSEG, - msg, Delete_Line_xpm ); + msg, Delete_Line_xpm ); if( !flags ) { msg = AddHotkeyName( _( "Delete Track" ), s_Board_Editor_Hokeys_Descr, HK_DELETE ); ADD_MENUITEM( track_mnu, ID_POPUP_PCB_DELETE_TRACK, - msg, Delete_Track_xpm ); + msg, Delete_Track_xpm ); ADD_MENUITEM( track_mnu, ID_POPUP_PCB_DELETE_TRACKNET, - _( "Delete Net" ), Delete_Net_xpm ); + _( "Delete Net" ), Delete_Net_xpm ); } track_mnu = new wxMenu; ADD_MENUITEM_WITH_SUBMENU( PopMenu, track_mnu, - ID_POPUP_PCB_SETFLAGS_TRACK_MNU, _( "Set Flags" ), Flag_xpm ); + ID_POPUP_PCB_SETFLAGS_TRACK_MNU, _( "Set Flags" ), Flag_xpm ); track_mnu->Append( ID_POPUP_PCB_LOCK_ON_TRACKSEG, _( "Locked: Yes" ), wxEmptyString, TRUE ); track_mnu->Append( ID_POPUP_PCB_LOCK_OFF_TRACKSEG, _( "Locked: No" ), wxEmptyString, TRUE ); @@ -661,66 +661,66 @@ void WinEDA_PcbFrame::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu /* Create the wxMenuitem list for zone outlines editing and zone filling */ { - - if( edge_zone->m_Flags == IS_DRAGGED) + if( edge_zone->m_Flags == IS_DRAGGED ) { ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_PLACE_DRAGGED_ZONE_OUTLINE_SEGMENT, - _( "Place Edge Outline" ), apply_xpm ); + _( "Place Edge Outline" ), apply_xpm ); } else if( edge_zone->m_Flags ) { if( (edge_zone->m_Flags & IN_EDIT ) ) ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_PLACE_ZONE_CORNER, - _( "Place Corner" ), apply_xpm ); + _( "Place Corner" ), apply_xpm ); else ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_PLACE_ZONE_OUTLINES, - _( "Place Zone" ), apply_xpm ); + _( "Place Zone" ), apply_xpm ); } else { wxMenu* zones_menu = new wxMenu(); + ADD_MENUITEM_WITH_SUBMENU( aPopMenu, zones_menu, - -1, _( "Zones" ), add_zone_xpm ); - int index; + -1, _( "Zones" ), add_zone_xpm ); + int index; if( ( index = edge_zone->HitTestForCorner( GetScreen()->RefPos( true ) ) ) >= 0 ) { ADD_MENUITEM( zones_menu, ID_POPUP_PCB_MOVE_ZONE_CORNER, - _( "Move Corner" ), move_xpm ); + _( "Move Corner" ), move_xpm ); ADD_MENUITEM( zones_menu, ID_POPUP_PCB_DELETE_ZONE_CORNER, - _( "Delete Corner" ), delete_xpm ); + _( "Delete Corner" ), delete_xpm ); } else if( ( index = edge_zone->HitTestForEdge( GetScreen()->RefPos( true ) ) ) >= 0 ) { ADD_MENUITEM( zones_menu, ID_POPUP_PCB_ADD_ZONE_CORNER, - _( "Create Corner" ), Add_Corner_xpm ); + _( "Create Corner" ), Add_Corner_xpm ); ADD_MENUITEM( zones_menu, ID_POPUP_PCB_DRAG_ZONE_OUTLINE_SEGMENT, - _( "Drag Outline Segment" ), drag_outline_segment_xpm ); + _( "Drag Outline Segment" ), drag_outline_segment_xpm ); } zones_menu->AppendSeparator(); ADD_MENUITEM( zones_menu, ID_POPUP_PCB_ZONE_ADD_SIMILAR_ZONE, - _( "Add Similar Zone" ), add_zone_xpm ); + _( "Add Similar Zone" ), add_zone_xpm ); ADD_MENUITEM( zones_menu, ID_POPUP_PCB_ZONE_ADD_CUTOUT_ZONE, - _( "Add Cutout Area" ), add_zone_cutout ); + _( "Add Cutout Area" ), add_zone_cutout ); zones_menu->AppendSeparator(); ADD_MENUITEM( zones_menu, ID_POPUP_PCB_FILL_ZONE, - _( "Fill Zone" ), fill_zone_xpm ); + _( "Fill Zone" ), fill_zone_xpm ); ADD_MENUITEM( zones_menu, ID_POPUP_PCB_MOVE_ZONE_OUTLINES, - _( "Move Zone" ), move_xpm ); + _( "Move Zone" ), move_xpm ); ADD_MENUITEM( zones_menu, ID_POPUP_PCB_EDIT_ZONE_PARAMS, - _( "Edit Zone Params" ), edit_xpm ); + _( "Edit Zone Params" ), edit_xpm ); zones_menu->AppendSeparator(); if( index >= 0 && edge_zone->m_Poly->IsCutoutContour( edge_zone->m_CornerSelection ) ) ADD_MENUITEM( zones_menu, ID_POPUP_PCB_DELETE_ZONE_CUTOUT, - _( "Delete Cutout" ), delete_xpm ); + _( "Delete Cutout" ), delete_xpm ); ADD_MENUITEM( zones_menu, ID_POPUP_PCB_DELETE_ZONE_CONTAINER, - _( "Delete Zone Outline" ), delete_xpm ); + _( "Delete Zone Outline" ), delete_xpm ); } } @@ -744,27 +744,27 @@ void WinEDA_PcbFrame::createPopUpMenuForFootprints( MODULE* aModule, wxMenu* men { msg = AddHotkeyName( _( "Move" ), s_Board_Editor_Hokeys_Descr, HK_MOVE_FOOTPRINT ); ADD_MENUITEM( sub_menu_footprint, ID_POPUP_PCB_MOVE_MODULE_REQUEST, - msg, Move_Module_xpm ); + msg, Move_Module_xpm ); msg = AddHotkeyName( _( "Drag" ), s_Board_Editor_Hokeys_Descr, HK_DRAG_FOOTPRINT ); ADD_MENUITEM( sub_menu_footprint, ID_POPUP_PCB_DRAG_MODULE_REQUEST, - msg, Drag_Module_xpm ); + msg, Drag_Module_xpm ); } msg = AddHotkeyName( _( "Rotate +" ), s_Board_Editor_Hokeys_Descr, HK_ROTATE_FOOTPRINT ); ADD_MENUITEM( sub_menu_footprint, ID_POPUP_PCB_ROTATE_MODULE_CLOCKWISE, - msg, rotate_module_pos_xpm ); + msg, rotate_module_pos_xpm ); ADD_MENUITEM( sub_menu_footprint, ID_POPUP_PCB_ROTATE_MODULE_COUNTERCLOCKWISE, - _( "Rotate -" ), rotate_module_neg_xpm ); + _( "Rotate -" ), rotate_module_neg_xpm ); msg = AddHotkeyName( _( "Flip" ), s_Board_Editor_Hokeys_Descr, HK_FLIP_FOOTPRINT ); ADD_MENUITEM( sub_menu_footprint, ID_POPUP_PCB_CHANGE_SIDE_MODULE, - msg, invert_module_xpm ); + msg, invert_module_xpm ); ADD_MENUITEM( sub_menu_footprint, ID_POPUP_PCB_EDIT_MODULE, - _( "Edit" ), Edit_Module_xpm ); + _( "Edit" ), Edit_Module_xpm ); if( !flags ) { sub_menu_footprint->AppendSeparator(); ADD_MENUITEM( sub_menu_footprint, ID_POPUP_PCB_DELETE_MODULE, - _( "Delete Module" ), Delete_Module_xpm ); + _( "Delete Module" ), Delete_Module_xpm ); } } @@ -787,16 +787,16 @@ void WinEDA_PcbFrame::createPopUpMenuForFpTexts( TEXTE_MODULE* FpText, wxMenu* m if( !flags ) ADD_MENUITEM( sub_menu_Fp_text, ID_POPUP_PCB_MOVE_TEXTMODULE_REQUEST, - _( "Move" ), Move_Field_xpm ); + _( "Move" ), Move_Field_xpm ); ADD_MENUITEM( sub_menu_Fp_text, ID_POPUP_PCB_ROTATE_TEXTMODULE, - _( "Rotate" ), Rotate_Field_xpm ); + _( "Rotate" ), Rotate_Field_xpm ); ADD_MENUITEM( sub_menu_Fp_text, ID_POPUP_PCB_EDIT_TEXTMODULE, - _( "Edit" ), edit_text_xpm ); + _( "Edit" ), edit_text_xpm ); if( FpText->m_Type == TEXT_is_DIVERS ) ADD_MENUITEM( sub_menu_Fp_text, ID_POPUP_PCB_DELETE_TEXTMODULE, - _( "Delete" ), delete_xpm ); + _( "Delete" ), delete_xpm ); if( !flags ) { @@ -825,26 +825,33 @@ void WinEDA_PcbFrame::createPopUpMenuForFpPads( D_PAD* Pad, wxMenu* menu ) if( !flags ) { ADD_MENUITEM( sub_menu_Pad, ID_POPUP_PCB_MOVE_PAD_REQUEST, - _( "Move" ), move_pad_xpm ); + _( "Move" ), move_pad_xpm ); ADD_MENUITEM( sub_menu_Pad, ID_POPUP_PCB_DRAG_PAD_REQUEST, - _( "Drag" ), drag_pad_xpm ); + _( "Drag" ), drag_pad_xpm ); } ADD_MENUITEM( sub_menu_Pad, ID_POPUP_PCB_EDIT_PAD, _( "Edit Pad" ), options_pad_xpm ); sub_menu_Pad->AppendSeparator(); - ADD_MENUITEM( sub_menu_Pad, ID_POPUP_PCB_IMPORT_PAD_SETTINGS, - _( "New Pad Settings" ), options_new_pad_xpm ); - ADD_MENUITEM( sub_menu_Pad, ID_POPUP_PCB_EXPORT_PAD_SETTINGS, - _( "Export Pad Settings" ), Export_Options_Pad_xpm ); + ADD_MENUITEM_WITH_HELP( sub_menu_Pad, ID_POPUP_PCB_IMPORT_PAD_SETTINGS, + _( "New Pad Settings" ), + _( "Copy current pad settings to this pad" ), + options_new_pad_xpm ); + ADD_MENUITEM_WITH_HELP( sub_menu_Pad, ID_POPUP_PCB_EXPORT_PAD_SETTINGS, + _( "Export Pad Settings" ), + _( "Copy this pad settings to current pad settings" ), + Export_Options_Pad_xpm ); if( !flags ) { - ADD_MENUITEM( sub_menu_Pad, ID_POPUP_PCB_GLOBAL_IMPORT_PAD_SETTINGS, - _( "Global Pad Settings" ), global_options_pad_xpm ); + ADD_MENUITEM_WITH_HELP( sub_menu_Pad, ID_POPUP_PCB_GLOBAL_IMPORT_PAD_SETTINGS, + _( "Global Pad Settings" ), + _( + "Copy this pad settings to all pads in this footprint (or similar footprints)" ), + global_options_pad_xpm ); sub_menu_Pad->AppendSeparator(); ADD_MENUITEM( sub_menu_Pad, ID_POPUP_PCB_DELETE_PAD, - _( "delete" ), Delete_Pad_xpm ); + _( "delete" ), Delete_Pad_xpm ); } if( m_HTOOL_current_state == ID_TOOLBARH_PCB_AUTOROUTE ) @@ -884,14 +891,14 @@ void WinEDA_PcbFrame::createPopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu ) if( !flags ) { ADD_MENUITEM( sub_menu_Text, ID_POPUP_PCB_MOVE_TEXTEPCB_REQUEST, - _( "Move" ), move_text_xpm ); + _( "Move" ), move_text_xpm ); } ADD_MENUITEM( sub_menu_Text, ID_POPUP_PCB_ROTATE_TEXTEPCB, - _( "Rotate" ), rotate_pos_xpm ); + _( "Rotate" ), rotate_pos_xpm ); ADD_MENUITEM( sub_menu_Text, ID_POPUP_PCB_EDIT_TEXTEPCB, - _( "Edit" ), edit_text_xpm ); + _( "Edit" ), edit_text_xpm ); sub_menu_Text->AppendSeparator(); ADD_MENUITEM( sub_menu_Text, ID_POPUP_PCB_DELETE_TEXTEPCB, - _( "Delete" ), delete_text_xpm ); + _( "Delete" ), delete_text_xpm ); } diff --git a/pcbnew/pcbplot.cpp b/pcbnew/pcbplot.cpp index f2e16019e2..114e3af607 100644 --- a/pcbnew/pcbplot.cpp +++ b/pcbnew/pcbplot.cpp @@ -332,7 +332,7 @@ WinEDA_PlotFrame::WinEDA_PlotFrame( WinEDA_BasePcbFrame* parent ) : _( "Exclude contents of Edges_Pcb layer from all other layers" ) ); LeftBoxSizer->Add( m_Exclude_Edges_Pcb, 0, wxGROW | wxALL, 1 ); - // Option d'impression du cartouche: + // Option to plot page references: if( m_Parent->m_Print_Sheet_Ref ) { m_Plot_Sheet_Ref = new wxCheckBox( this, ID_PRINT_REF, _( "Print sheet ref" ) ); diff --git a/share/wxprint.cpp b/share/wxprint.cpp index 199c58090c..ad8e2f7b5c 100644 --- a/share/wxprint.cpp +++ b/share/wxprint.cpp @@ -39,7 +39,8 @@ #endif #include "fctsys.h" -#include "gr_basic.h" + +//#include "gr_basic.h" #include "common.h" @@ -51,17 +52,17 @@ #ifdef PCBNEW #include "pcbnew.h" -extern float Scale_X, Scale_Y; -static long s_SelectedLayers = CUIVRE_LAYER | CMP_LAYER | - SILKSCREEN_LAYER_CMP | SILKSCREEN_LAYER_CU; -static double s_ScaleList[] = -{ 0, 0.5, 0.7, 0.999, 1.0, 1.4, 2.0, 3.0, 4.0 }; -#endif #include "protos.h" -//#define DEFAULT_ORIENTATION_PAPER wxPORTRAIT -#define DEFAULT_ORIENTATION_PAPER wxLANDSCAPE +// For pcbnew: +#define OPTKEY_LAYERBASE wxT( "PrintLayer_%d" ) +#define OPTKEY_PRINT_X_FINESCALE_ADJ wxT( "PrintXFineScaleAdj" ) +#define OPTKEY_PRINT_Y_FINESCALE_ADJ wxT( "PrintYFineScaleAdj" ) +#define OPTKEY_PRINT_SCALE wxT( "PrintScale" ) +#endif + +#define DEFAULT_ORIENTATION_PAPER wxLANDSCAPE // other option is wxPORTRAIT #ifdef EESCHEMA #define WIDTH_MAX_VALUE 100 #else @@ -69,6 +70,14 @@ static double s_ScaleList[] = #endif #define WIDTH_MIN_VALUE 1 +#ifdef PCBNEW +extern float Scale_X, Scale_Y; +static long s_SelectedLayers; +static double s_ScaleList[] = +{ 0, 0.5, 0.7, 0.999, 1.0, 1.4, 2.0, 3.0, 4.0 }; +#endif + + // static print data and page setup data, to remember settings during the session static wxPrintData* g_PrintData; @@ -82,6 +91,8 @@ static int s_Scale_Select = 3; // default selected scale = ScaleList[3] static bool s_PrintMirror; static bool s_Print_Sheet_Ref = TRUE; + + /****************************************************************/ /* frame de Preparation de l'impression (options, selections... */ /****************************************************************/ @@ -101,17 +112,19 @@ public: WinEDA_DrawFrame* m_Parent; WinEDA_PrintFrame* m_PrintFrame; - EDA_Printout( WinEDA_PrintFrame * print_frame, - WinEDA_DrawFrame * parent, - const wxString &title, - bool print_ref ) : - wxPrintout( title ) { + EDA_Printout( WinEDA_PrintFrame* print_frame, + WinEDA_DrawFrame* parent, + const wxString& title, + bool print_ref ) : + wxPrintout( title ) + { m_PrintFrame = print_frame; m_Parent = parent; s_PrintMaskLayer = 0xFFFFFFFF; m_Print_Sheet_Ref = print_ref; } + bool OnPrintPage( int page ); bool HasPage( int page ); bool OnBeginDocument( int startPage, int endPage ); @@ -125,7 +138,7 @@ void WinEDA_DrawFrame::ToPrinter( wxCommandEvent& event ) /*******************************************************/ /* Prepare les structures de donn�es de gestion de l'impression - * et affiche la fenetre de dialogue de gestion de l'impression des feuilles + * et affiche la fenetre de dialogue de gestion de l'impression des feuilles */ { wxPoint pos = GetPosition(); @@ -173,6 +186,10 @@ void WinEDA_PrintFrame::SetOthersDatas() m_Print_Mirror->Enable( false ); #endif +#if defined (PCBNEW) + wxConfig* config = m_Parent->m_Parent->m_EDA_Config; // Current config used by application +#endif + m_FineAdjustXscaleOpt->SetToolTip( _( "Set X scale adjust for exact scale plotting" ) ); m_FineAdjustYscaleOpt->SetToolTip( _( "Set Y scale adjust for exact scale plotting" ) ); if( s_Print_Black_and_White ) @@ -186,10 +203,10 @@ void WinEDA_PrintFrame::SetOthersDatas() for( ii = 0; ii < NB_LAYERS; ii++, mask <<= 1 ) { m_BoxSelecLayer[ii] = new wxCheckBox( this, -1, -#if defined(PCBNEW) - ((WinEDA_PcbFrame*)m_Parent)->m_Pcb->GetLayerName(ii) ); -#else - ReturnLayerName( ii ) ); +#if defined (PCBNEW) + ( (WinEDA_PcbFrame*) m_Parent )->m_Pcb->GetLayerName( ii ) ); + #else + ReturnLayerName( ii ) ); #endif if( mask & s_SelectedLayers ) @@ -203,11 +220,28 @@ void WinEDA_PrintFrame::SetOthersDatas() } // Read the scale adjust option - if( m_Parent->m_Parent->m_EDA_Config ) + if( config ) { - m_Parent->m_Parent->m_EDA_Config->Read( wxT( "PrintXFineScaleAdj" ), &m_XScaleAdjust ); - m_Parent->m_Parent->m_EDA_Config->Read( wxT( "PrintYFineScaleAdj" ), &m_YScaleAdjust ); - m_Parent->m_Parent->m_EDA_Config->Read( wxT( "PrintScale" ), &s_Scale_Select ); + config->Read( OPTKEY_PRINT_X_FINESCALE_ADJ, &m_XScaleAdjust ); + config->Read( OPTKEY_PRINT_Y_FINESCALE_ADJ, &m_YScaleAdjust ); + config->Read( OPTKEY_PRINT_SCALE, &s_Scale_Select ); + + s_SelectedLayers = 0; + for( int layer = 0; layerRead( layerKey, &option ) ) + { + m_BoxSelecLayer[layer]->SetValue( option ); + if( option ) + s_SelectedLayers |= 1 << layer; + } + } } m_ScaleOption->SetSelection( s_Scale_Select ); @@ -287,9 +321,15 @@ void WinEDA_PrintFrame::OnClosePrintDialog() #ifdef PCBNEW if( Config ) { - Config->Write( wxT( "PrintXFineScaleAdj" ), m_XScaleAdjust ); - Config->Write( wxT( "PrintYFineScaleAdj" ), m_YScaleAdjust ); - Config->Write( wxT( "PrintScale" ), s_Scale_Select ); + Config->Write( OPTKEY_PRINT_X_FINESCALE_ADJ, m_XScaleAdjust ); + Config->Write( OPTKEY_PRINT_Y_FINESCALE_ADJ, m_YScaleAdjust ); + Config->Write( OPTKEY_PRINT_SCALE, s_Scale_Select ); + wxString layerKey; + for( int layer = 0; layerWrite( layerKey, m_BoxSelecLayer[layer]->IsChecked() ); + } } #endif EndModal( 0 ); @@ -334,7 +374,7 @@ void WinEDA_PrintFrame::SetPenWidth() /****************************************/ /* Get the new pen width value, and verify min et max value - * NOTE: s_PrintPenMinWidth is in internal units + * NOTE: s_PrintPenMinWidth is in internal units */ { s_PrintPenMinWidth = m_DialogPenWidth->GetValue(); @@ -357,11 +397,11 @@ void WinEDA_PrintFrame::OnPrintSetup( wxCommandEvent& event ) /* Open a dialog box for printer setup (printer options, page size ...) */ { - wxPrintDialogData printDialogData( * g_PrintData ); + wxPrintDialogData printDialogData( *g_PrintData ); if( printDialogData.Ok() ) { - wxPrintDialog printerDialog( this,& printDialogData ); + wxPrintDialog printerDialog( this, &printDialogData ); printerDialog.ShowModal(); @@ -396,8 +436,8 @@ void WinEDA_PrintFrame::OnPrintPreview( wxCommandEvent& event ) // Pass two printout objects: for preview, and possible printing. wxString title = BuildPrintTitle(); wxPrintPreview* preview = - new wxPrintPreview( new EDA_Printout (this, m_Parent, title, print_ref), - new EDA_Printout (this, m_Parent, title, print_ref), g_PrintData ); + new wxPrintPreview( new EDA_Printout( this, m_Parent, title, print_ref ), + new EDA_Printout( this, m_Parent, title, print_ref ), g_PrintData ); if( preview == NULL ) { @@ -418,7 +458,7 @@ void WinEDA_PrintFrame::OnPrintPreview( wxCommandEvent& event ) WSize.y += 6; wxPreviewFrame* frame = new wxPreviewFrame( preview, this, - title, WPos, WSize ); + title, WPos, WSize ); frame->Initialize(); frame->Show( TRUE ); @@ -450,15 +490,15 @@ void WinEDA_PrintFrame::EDA_PrintPage( wxCommandEvent& event ) SetPenWidth(); - wxPrintDialogData printDialogData( * g_PrintData ); + wxPrintDialogData printDialogData( *g_PrintData ); - wxPrinter printer(& printDialogData ); + wxPrinter printer( &printDialogData ); - wxString title = BuildPrintTitle(); - EDA_Printout printout( this, m_Parent, title, print_ref ); + wxString title = BuildPrintTitle(); + EDA_Printout printout( this, m_Parent, title, print_ref ); #ifndef __WINDOWS__ - wxDC* dc = printout.GetDC(); + wxDC* dc = printout.GetDC(); ( (wxPostScriptDC*) dc )->SetResolution( 600 ); // Postscript DC resolution is 600 ppi #endif @@ -609,7 +649,7 @@ void EDA_Printout::DrawPage() /********************************/ /* - * This is the real print function: print the active screen + * This is the real print function: print the active screen */ { int tmpzoom; @@ -728,7 +768,7 @@ void EDA_Printout::DrawPage() ftmp *= (float) PlotAreaSize.x / PageSize_in_mm.x; /* ftmp is in pixels */ /* because the pen size will be scaled by the dc scale, we modify the size - * in order to keep the requested value */ + * in order to keep the requested value */ dc->GetUserScale( &xdcscale, &ydcscale ); ftmp /= xdcscale; SetPenMinWidth( (int) round( ftmp ) ); @@ -751,15 +791,13 @@ void EDA_Printout::DrawPage() if( m_Print_Sheet_Ref ) m_Parent->TraceWorkSheet( dc, ActiveScreen, 0 ); - if( userscale == 1.0 ) // Draw the Sheet refs at optimum scale, and board at 1.0 scale { - m_Print_Sheet_Ref = FALSE; dc->SetUserScale( accurate_Yscale, accurate_Yscale ); } if( s_PrintMirror ) - { // To plot mirror, we revere the y axis, and modify the plot y origin + { // To plot mirror, we reverse the y axis, and modify the plot y origin double sx, sy; dc->GetUserScale( &sx, &sy ); @@ -768,18 +806,18 @@ void EDA_Printout::DrawPage() sy /= userscale; /* Plot offset y is moved by the y plot area size in order to have - * the old draw area in the new draw area, because the draw origin has not moved - * (this is the upper left corner) but the Y axis is reversed, therefore the plotting area - * is the y coordinate values from - PlotAreaSize.y to 0 */ + * the old draw area in the new draw area, because the draw origin has not moved + * (this is the upper left corner) but the Y axis is reversed, therefore the plotting area + * is the y coordinate values from - PlotAreaSize.y to 0 */ int ysize = (int) ( PlotAreaSize.y / sy ); DrawOffset.y += ysize; /* in order to keep the board position in the sheet - * (when user scale <= 1) the y offset in moved by the distance between - * the middle of the page and the middle of the board - * This is equivalent to put the mirror axis to the board centre - * for scales > 1, the DrawOffset was already computed to have the board centre - * to the middle of the page. + * (when user scale <= 1) the y offset in moved by the distance between + * the middle of the page and the middle of the board + * This is equivalent to put the mirror axis to the board centre + * for scales > 1, the DrawOffset was already computed to have the board centre + * to the middle of the page. */ wxPoint pcb_centre = pcbframe->m_Pcb->m_BoundaryBox.Centre(); if( userscale <= 1.0 )