Commit f64b2827 authored by charras's avatar charras
Browse files

BUGFIX: .mdc is incomplete after 'archive footprint'

parent 94cf5b0d
Loading
Loading
Loading
Loading
+437 −423
Original line number Original line Diff line number Diff line
@@ -90,6 +90,7 @@ public:
        return m_Pcb;
        return m_Pcb;
    }
    }



    // General
    // General
    virtual void OnCloseWindow( wxCloseEvent& Event ) = 0;
    virtual void OnCloseWindow( wxCloseEvent& Event ) = 0;
    virtual void Process_Special_Functions( wxCommandEvent& event ) = 0;
    virtual void Process_Special_Functions( wxCommandEvent& event ) = 0;
@@ -199,8 +200,20 @@ public:
    MODULE*                  Exchange_Module( wxWindow* winaff,
    MODULE*                  Exchange_Module( wxWindow* winaff,
                                              MODULE*   old_module,
                                              MODULE*   old_module,
                                              MODULE*   new_module );
                                              MODULE*   new_module );
    int                         Save_1_Module( const wxString& LibName, MODULE* Module,

                                               bool Overwrite, bool DisplayDialog );
    /** Function Save_Module_In_Library
     *  Save in an existing library a given footprint
     * @param aLibName = name of the library to use
     * @param aModule = the given footprint
     * @param aOverwrite = true to overwrite an existing footprint, false to abort an existing footprint is found
     * @param aDisplayDialog = true to display a dialog to enter or confirm the footprint name
     * @param aCreateDocFile = true to creates the associated doc file
     * @return : 1 if OK,0 if abort
     */
    int                      Save_Module_In_Library( const wxString& aLibName,
                                                     MODULE* aModule, bool aOverwrite,
                                                     bool aDisplayDialog, bool aCreateDocFile );

    void                     Archive_Modules( const wxString& LibName, bool NewModulesOnly );
    void                     Archive_Modules( const wxString& LibName, bool NewModulesOnly );
    MODULE*                  Select_1_Module_From_BOARD( BOARD* Pcb );
    MODULE*                  Select_1_Module_From_BOARD( BOARD* Pcb );
    MODULE*                  GetModuleByName();
    MODULE*                  GetModuleByName();
@@ -215,6 +228,7 @@ public:
    void                     Place_Module( MODULE* module, wxDC* DC );
    void                     Place_Module( MODULE* module, wxDC* DC );
    void                     InstallExchangeModuleFrame( MODULE* ExchangeModuleModule,
    void                     InstallExchangeModuleFrame( MODULE* ExchangeModuleModule,
                                                         wxDC* DC, const wxPoint& pos );
                                                         wxDC* DC, const wxPoint& pos );

    // Graphic items edition:
    // Graphic items edition:
    void                     InstallGraphicItemPropertiesDialog( DRAWSEGMENT* aItem, wxDC* aDC );
    void                     InstallGraphicItemPropertiesDialog( DRAWSEGMENT* aItem, wxDC* aDC );


@@ -294,7 +308,6 @@ public:
    void                     Block_Duplicate( wxDC* DC );
    void                     Block_Duplicate( wxDC* DC );





    // layerhandling:
    // layerhandling:
    // (See pcbnew/sel_layer.cpp for description of why null_layer parameter is provided)
    // (See pcbnew/sel_layer.cpp for description of why null_layer parameter is provided)
    int                      SelectLayer( int default_layer, int min_layer, int max_layer,
    int                      SelectLayer( int default_layer, int min_layer, int max_layer,
@@ -539,7 +552,6 @@ public:
    void             Delete_Zone_Fill( wxDC* DC, SEGZONE* Track, long aTimestamp = 0 );
    void             Delete_Zone_Fill( wxDC* DC, SEGZONE* Track, long aTimestamp = 0 );





    /** Function Delete_LastCreatedCorner
    /** Function Delete_LastCreatedCorner
     * Used only while creating a new zone outline
     * Used only while creating a new zone outline
     * Remove and delete the current outline segment in progress
     * Remove and delete the current outline segment in progress
@@ -683,10 +695,12 @@ public:


    // Autoplacement:
    // Autoplacement:
    void         AutoPlace( wxCommandEvent& event );
    void         AutoPlace( wxCommandEvent& event );

    /** function OnOrientFootprints
    /** function OnOrientFootprints
     * install the dialog box for the comman Orient Footprints
     * install the dialog box for the comman Orient Footprints
     */
     */
    void         OnOrientFootprints( void );
    void         OnOrientFootprints( void );

    /** function ReOrientModules
    /** function ReOrientModules
     * Set the orientation of footprints
     * Set the orientation of footprints
     * @param ModuleMask = mask (wildcard allowed) selection
     * @param ModuleMask = mask (wildcard allowed) selection
+95 −88
Original line number Original line Diff line number Diff line
@@ -50,6 +50,7 @@ MODULE* WinEDA_ModuleEditFrame::Import_Module( wxDC* DC )
    MODULE*   module = NULL;
    MODULE*   module = NULL;
    bool      Footprint_Is_GPCB_Format = false;
    bool      Footprint_Is_GPCB_Format = false;
    wxString  mask = wxT( "*.*;" ); mask += EXT_CMP_MASK;
    wxString  mask = wxT( "*.*;" ); mask += EXT_CMP_MASK;

    wxString  LastOpenedPathForLoading;
    wxString  LastOpenedPathForLoading;
    wxConfig* Config = wxGetApp().m_EDA_Config;
    wxConfig* Config = wxGetApp().m_EDA_Config;


@@ -64,7 +65,7 @@ MODULE* WinEDA_ModuleEditFrame::Import_Module( wxDC* DC )
                                        mask,                       /* Masque d'affichage */
                                        mask,                       /* Masque d'affichage */
                                        this,
                                        this,
                                        wxFD_OPEN,
                                        wxFD_OPEN,
                                        TRUE
                                        true
                                        );
                                        );


    if( CmpFullFileName == wxEmptyString )
    if( CmpFullFileName == wxEmptyString )
@@ -137,6 +138,7 @@ MODULE* WinEDA_ModuleEditFrame::Import_Module( wxDC* DC )
/************************************************************************/
/************************************************************************/
void WinEDA_ModuleEditFrame::Export_Module( MODULE* ptmod, bool createlib )
void WinEDA_ModuleEditFrame::Export_Module( MODULE* ptmod, bool createlib )
/************************************************************************/
/************************************************************************/

/**
/**
 * Function Export_Module
 * Function Export_Module
 * Create a file containing only one footprint.
 * Create a file containing only one footprint.
@@ -176,7 +178,7 @@ void WinEDA_ModuleEditFrame::Export_Module( MODULE* ptmod, bool createlib )
                                     Mask,                                  /* Masque d'affichage */
                                     Mask,                                  /* Masque d'affichage */
                                     this,
                                     this,
                                     wxFD_SAVE,
                                     wxFD_SAVE,
                                     TRUE
                                     true
                                     );
                                     );


    if( FullFileName.IsEmpty() )
    if( FullFileName.IsEmpty() )
@@ -395,7 +397,7 @@ void WinEDA_BasePcbFrame::Archive_Modules( const wxString& LibName,
/*
/*
 *  Sauve en Librairie:
 *  Sauve en Librairie:
 *  tous les nouveaux modules ( c.a.d. les modules
 *  tous les nouveaux modules ( c.a.d. les modules
 *      n'existant pas deja (si NewModulesOnly == TRUE)
 *      n'existant pas deja (si NewModulesOnly == true)
 *  tous les modules (si NewModulesOnly == FALSE)
 *  tous les modules (si NewModulesOnly == FALSE)
 */
 */
{
{
@@ -420,7 +422,7 @@ void WinEDA_BasePcbFrame::Archive_Modules( const wxString& LibName,
                                         Mask,                  /* Masque d'affichage */
                                         Mask,                  /* Masque d'affichage */
                                         this,
                                         this,
                                         wxFD_SAVE,
                                         wxFD_SAVE,
                                         TRUE
                                         true
                                         );
                                         );


        if( FullFileName.IsEmpty() )
        if( FullFileName.IsEmpty() )
@@ -467,8 +469,8 @@ void WinEDA_BasePcbFrame::Archive_Modules( const wxString& LibName,
    Module = (MODULE*) GetBoard()->m_Modules;
    Module = (MODULE*) GetBoard()->m_Modules;
    for( ii = 1; Module != NULL; ii++, Module = (MODULE*) Module->Next() )
    for( ii = 1; Module != NULL; ii++, Module = (MODULE*) Module->Next() )
    {
    {
        if( Save_1_Module( FullFileName, Module,
        if( Save_Module_In_Library( FullFileName, Module,
                           NewModulesOnly ? FALSE : TRUE, FALSE ) == 0 )
                                    NewModulesOnly ? FALSE : true, FALSE, false ) == 0 )
            break;
            break;
        DisplayActivity( (int) ( ii * Pas ), wxEmptyString );
        DisplayActivity( (int) ( ii * Pas ), wxEmptyString );
        /* Tst demande d'arret de sauvegarde ( key ESCAPE actionnee ) */
        /* Tst demande d'arret de sauvegarde ( key ESCAPE actionnee ) */
@@ -476,22 +478,24 @@ void WinEDA_BasePcbFrame::Archive_Modules( const wxString& LibName,
            break;
            break;
    }
    }


    CreateDocLibrary( LibName );
    CreateDocLibrary( FullFileName );
}
}




/*****************************************************************/
/*****************************************************************/
int WinEDA_BasePcbFrame::Save_1_Module( const wxString& LibName,
int WinEDA_BasePcbFrame::Save_Module_In_Library( const wxString& aLibName,
                                        MODULE* Module, bool Overwrite, bool DisplayDialog )
                                                 MODULE* aModule, bool aOverwrite,
                                                 bool aDisplayDialog, bool aCreateDocFile )
/*****************************************************************/
/*****************************************************************/


/*
/** Function Save_Module_In_Library
 *  sauve en Librairie le module Module:
 *  Save in an existing library a given footprint
 *  si no_replace == TRUE, s'il est nouveau.
 * @param aLibName = name of the library to use
 *
 * @param aModule = the given footprint
 *  retourne
 * @param aOverwrite = true to overwrite an existing footprint, false to abort an existing footprint is found
 *      1 si OK
 * @param aDisplayDialog = true to display a dialog to enter or confirm the footprint name
 *      0 si abort ou probleme
 * @param aCreateDocFile = true to creates the associated doc file
 * @return :  1 if OK, 0 if abort
 */
 */
{
{
    int      newmodule, end;
    int      newmodule, end;
@@ -500,49 +504,49 @@ int WinEDA_BasePcbFrame::Save_1_Module( const wxString& LibName,
    wxString Name_Cmp;
    wxString Name_Cmp;
    wxString NewLib, OldLib, msg;
    wxString NewLib, OldLib, msg;
    FILE*    lib_module, * dest;
    FILE*    lib_module, * dest;
    bool     added = TRUE;
    bool     added = true;


    Module->Display_Infos( this );
    aModule->Display_Infos( this );


    if( !wxFileExists( LibName ) )
    if( !wxFileExists( aLibName ) )
    {
    {
        msg.Printf( _( "Library %s not found" ), LibName.GetData() );
        msg.Printf( _( "Library %s not found" ), aLibName.GetData() );
        DisplayError( this, msg );
        DisplayError( this, msg );
        return 0;
        return 0;
    }
    }




    /* Demande du nom du composant en librairie */
    /* Ask for the footprint name in lib */
    Name_Cmp = Module->m_LibRef;
    Name_Cmp = aModule->m_LibRef;


    if( DisplayDialog )
    if( aDisplayDialog )
    {
    {
        Get_Message( _( "Name:" ), _( "Save module" ), Name_Cmp, this );
        Get_Message( _( "Name:" ), _( "Save module" ), Name_Cmp, this );
        if( Name_Cmp.IsEmpty() )
        if( Name_Cmp.IsEmpty() )
            return 0;
            return 0;
        Name_Cmp.Trim( TRUE );
        Name_Cmp.Trim( true );
        Name_Cmp.Trim( FALSE );
        Name_Cmp.Trim( FALSE );
        Module->m_LibRef = Name_Cmp;
        aModule->m_LibRef = Name_Cmp;
    }
    }


    if( ( lib_module = wxFopen( LibName, wxT( "rt" ) ) ) == NULL )
    if( ( lib_module = wxFopen( aLibName, wxT( "rt" ) ) ) == NULL )
    {
    {
        msg.Printf( _( "Unable to open %s" ), LibName.GetData() );
        msg.Printf( _( "Unable to open %s" ), aLibName.GetData() );
        DisplayError( this, msg );
        DisplayError( this, msg );
        return 0;
        return 0;
    }
    }


    /* lecture entete : ENTETE_LIBRAIRIE */
    /* lRead library file : library header */
    GetLine( lib_module, Line, &LineNum );
    GetLine( lib_module, Line, &LineNum );
    if( strnicmp( Line, ENTETE_LIBRAIRIE, L_ENTETE_LIB ) != 0 )
    if( strnicmp( Line, ENTETE_LIBRAIRIE, L_ENTETE_LIB ) != 0 )
    {
    {
        fclose( lib_module );
        fclose( lib_module );
        msg.Printf( _( "File %s is not a eeschema library" ), LibName.GetData() );
        msg.Printf( _( "File %s is not a eeschema library" ), aLibName.GetData() );
        DisplayError( this, msg );
        DisplayError( this, msg );
        return 0;
        return 0;
    }
    }


    /* lecture des noms des composants - verif si le module est deja existant */
    /* Reaf footprints in lib: - search for an existing footprint */
    newmodule = 1; end = 0;
    newmodule = 1; end = 0;
    while( !end && GetLine( lib_module, Line, &LineNum ) )
    while( !end && GetLine( lib_module, Line, &LineNum ) )
    {
    {
@@ -560,17 +564,17 @@ int WinEDA_BasePcbFrame::Save_1_Module( const wxString& LibName,


            StrPurge( Line );
            StrPurge( Line );
            msg = CONV_FROM_UTF8( Line );
            msg = CONV_FROM_UTF8( Line );
            if( Name_Cmp.CmpNoCase( msg ) == 0 ) /* composant trouve */
            if( Name_Cmp.CmpNoCase( msg ) == 0 ) /* an existing footprint is found */
            {
            {
                added     = FALSE;
                added     = FALSE;
                newmodule = 0;
                newmodule = 0;
                if( DisplayDialog )
                if( aDisplayDialog )
                {
                {
                    msg = _( "Module exists\n Line: " );
                    msg = _( "Module exists\n Line: " );
                    msg << LineNum;
                    msg << LineNum;
                    Affiche_Message( msg );
                    Affiche_Message( msg );
                }
                }
                if( !Overwrite )    /* le module n'est pas a sauver car deja existant */
                if( !aOverwrite )    /* lDo not save the given footprint: an old one exists */
                {
                {
                    fclose( lib_module ); return 1;
                    fclose( lib_module ); return 1;
                }
                }
@@ -581,15 +585,15 @@ int WinEDA_BasePcbFrame::Save_1_Module( const wxString& LibName,


    fclose( lib_module );
    fclose( lib_module );


    /* Creation de la nouvelle librairie */
    /* Creates the new library */


    if( ( lib_module = wxFopen( LibName, wxT( "rt" ) ) )  == NULL )
    if( ( lib_module = wxFopen( aLibName, wxT( "rt" ) ) )  == NULL )
    {
    {
        DisplayError( this, wxT( "Librairi.cpp: Error oldlib not found" ) );
        DisplayError( this, wxT( "Librairi.cpp: Error oldlib not found" ) );
        return 0;
        return 0;
    }
    }


    NewLib = LibName;
    NewLib = aLibName;
    ChangeFileNameExt( NewLib, FILETMP_EXT );
    ChangeFileNameExt( NewLib, FILETMP_EXT );
    if( ( dest = wxFopen( NewLib, wxT( "w+t" ) ) )  == NULL )
    if( ( dest = wxFopen( NewLib, wxT( "w+t" ) ) )  == NULL )
    {
    {
@@ -601,7 +605,7 @@ int WinEDA_BasePcbFrame::Save_1_Module( const wxString& LibName,


    wxBeginBusyCursor();
    wxBeginBusyCursor();


    /* Creation de l'entete avec nouvelle date */
    /* Create the library header with a new date */
    fprintf( dest, ENTETE_LIBRAIRIE );
    fprintf( dest, ENTETE_LIBRAIRIE );
    fprintf( dest, "  %s\n$INDEX\n", DateAndTime( Line ) );
    fprintf( dest, "  %s\n$INDEX\n", DateAndTime( Line ) );


@@ -629,7 +633,7 @@ int WinEDA_BasePcbFrame::Save_1_Module( const wxString& LibName,


    fprintf( dest, "$EndINDEX\n" );
    fprintf( dest, "$EndINDEX\n" );


    /* Copie des modules, jusqu'au module a supprimer */
    /* Copy footprints, until the old footprint to delete */
    while( GetLine( lib_module, Line, &LineNum ) )
    while( GetLine( lib_module, Line, &LineNum ) )
    {
    {
        StrPurge( Line );
        StrPurge( Line );
@@ -641,7 +645,7 @@ int WinEDA_BasePcbFrame::Save_1_Module( const wxString& LibName,
            msg = CONV_FROM_UTF8( Name );
            msg = CONV_FROM_UTF8( Name );
            if( msg.CmpNoCase( Name_Cmp ) == 0 )
            if( msg.CmpNoCase( Name_Cmp ) == 0 )
            {
            {
                /* suppression ancien module */
                /* skip old footprint descr (delete from the lib)*/
                while( GetLine( lib_module, Line, &LineNum ) )
                while( GetLine( lib_module, Line, &LineNum ) )
                {
                {
                    if( strnicmp( Line, "$EndMODULE", 9 ) == 0 )
                    if( strnicmp( Line, "$EndMODULE", 9 ) == 0 )
@@ -654,40 +658,42 @@ int WinEDA_BasePcbFrame::Save_1_Module( const wxString& LibName,
        fprintf( dest, "%s\n", Line );
        fprintf( dest, "%s\n", Line );
    }
    }


    /* Ecriture du module ( en fin de librairie ) */
    /* Write the new footprint ( append it to the list of footprint ) */
    tmp = Module->m_TimeStamp; Module->m_TimeStamp = 0;
    tmp = aModule->m_TimeStamp; aModule->m_TimeStamp = 0;
    Module->Save( dest );
    aModule->Save( dest );
    fprintf( dest, "$EndLIBRARY\n" );
    fprintf( dest, "$EndLIBRARY\n" );
    Module->m_TimeStamp = tmp;
    aModule->m_TimeStamp = tmp;


    fclose( dest );  fclose( lib_module );
    fclose( dest );  fclose( lib_module );


    wxEndBusyCursor();
    wxEndBusyCursor();


    /* L'ancien fichier librairie est renomme en .bak */
    /* The old library file is renamed .bak */
    OldLib = LibName;
    OldLib = aLibName;
    ChangeFileNameExt( OldLib, OLD_EXT );
    ChangeFileNameExt( OldLib, OLD_EXT );


    if( wxFileExists( OldLib ) )
    if( wxFileExists( OldLib ) )
        wxRemoveFile( OldLib );
        wxRemoveFile( OldLib );


    if( !wxRenameFile( LibName, OldLib ) )
    if( !wxRenameFile( aLibName, OldLib ) )
        DisplayError( this, wxT( "Librairi.cpp: rename .bak err" ) );
        DisplayError( this, wxT( "Librairi.cpp: rename .bak err" ) );


    /* Le nouveau fichier librairie est renomme */
    /* The new library file is renamed */
    if( !wxRenameFile( NewLib, LibName ) )
    if( !wxRenameFile( NewLib, aLibName ) )
    {
    {
        DisplayError( this, wxT( "Librairi.cpp: rename NewLib err" ) );
        DisplayError( this, wxT( "Librairi.cpp: rename NewLib err" ) );
        return 0;
        return 0;
    }
    }


    CreateDocLibrary( OldLib );
    /* creates the new .dcm doc file corresponding to the new library */
    if ( aCreateDocFile )
        CreateDocLibrary( aLibName );


    if( DisplayDialog )
    if( aDisplayDialog )
    {
    {
        msg  = _( "Component " ); msg += Name_Cmp;
        msg  = _( "Component " ); msg += Name_Cmp;
        msg += added ? _( " added in " ) : _( " replaced in " );
        msg += added ? _( " added in " ) : _( " replaced in " );
        msg += LibName;
        msg += aLibName;
        Affiche_Message( msg );
        Affiche_Message( msg );
    }
    }


@@ -721,7 +727,7 @@ MODULE* WinEDA_BasePcbFrame::Create_1_Module( wxDC* DC, const wxString& module_n
    }
    }
    else
    else
        Line = module_name;
        Line = module_name;
    Line.Trim( TRUE );
    Line.Trim( true );
    Line.Trim( FALSE );
    Line.Trim( FALSE );


    // Creates the new module and add it to the head of the linked list of modules
    // Creates the new module and add it to the head of the linked list of modules
@@ -762,7 +768,8 @@ void WinEDA_ModuleEditFrame::Select_Active_Library()
        return;
        return;


    WinEDAListBox* LibListBox = new WinEDAListBox( this, _( "Active Lib:" ),
    WinEDAListBox* LibListBox = new WinEDAListBox( this, _( "Active Lib:" ),
                   NULL, m_CurrentLib, NULL, wxColour( 200, 200, 255 ) );
                                                  NULL, m_CurrentLib, NULL,
                                                  wxColour( 200, 200, 255 ) );


    LibListBox->InsertItems( g_LibName_List );
    LibListBox->InsertItems( g_LibName_List );


@@ -919,5 +926,5 @@ static bool CreateDocLibrary( const wxString& LibName )
    fclose( LibMod );
    fclose( LibMod );
    fprintf( LibDoc, "#\n$EndLIBDOC\n" );
    fprintf( LibDoc, "#\n$EndLIBDOC\n" );
    fclose( LibDoc );
    fclose( LibDoc );
    return TRUE;
    return true;
}
}
+13 −13
Original line number Original line Diff line number Diff line
@@ -192,7 +192,7 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )
    switch( id )   // Traitement des commandes
    switch( id )   // Traitement des commandes
    {
    {
    case ID_EXIT:
    case ID_EXIT:
        Close( TRUE );
        Close( true );
        break;
        break;


    case ID_LIBEDIT_SELECT_CURRENT_LIB:
    case ID_LIBEDIT_SELECT_CURRENT_LIB:
@@ -209,7 +209,7 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )


    case ID_MODEDIT_NEW_MODULE:
    case ID_MODEDIT_NEW_MODULE:
        {
        {
            Clear_Pcb( TRUE );
            Clear_Pcb( true );
            GetScreen()->ClearUndoRedoList();
            GetScreen()->ClearUndoRedoList();
            SetCurItem( NULL );
            SetCurItem( NULL );
            GetScreen()->m_Curseur = wxPoint( 0, 0 );
            GetScreen()->m_Curseur = wxPoint( 0, 0 );
@@ -220,7 +220,7 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )
                module->SetPosition( wxPoint(0, 0) );
                module->SetPosition( wxPoint(0, 0) );
                if( GetBoard()->m_Modules )
                if( GetBoard()->m_Modules )
                    GetBoard()->m_Modules->m_Flags = 0;
                    GetBoard()->m_Modules->m_Flags = 0;
                Zoom_Automatique( TRUE );
                Zoom_Automatique( true );
            }
            }
        }
        }
        break;
        break;
@@ -229,7 +229,7 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )
        {
        {
            wxString Line;
            wxString Line;
            Line = MakeFileName( g_RealLibDirBuffer, m_CurrentLib.GetData(), LibExtBuffer );
            Line = MakeFileName( g_RealLibDirBuffer, m_CurrentLib.GetData(), LibExtBuffer );
            Save_1_Module( Line, GetBoard()->m_Modules, TRUE, TRUE );
            Save_Module_In_Library( Line, GetBoard()->m_Modules, true, true, true );
            GetScreen()->ClrModify();
            GetScreen()->ClrModify();
        }
        }
        break;
        break;
@@ -315,13 +315,13 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )
    case ID_LIBEDIT_IMPORT_PART:
    case ID_LIBEDIT_IMPORT_PART:
        GetScreen()->ClearUndoRedoList();
        GetScreen()->ClearUndoRedoList();
        SetCurItem( NULL );
        SetCurItem( NULL );
        Clear_Pcb( TRUE );
        Clear_Pcb( true );
        GetScreen()->m_Curseur = wxPoint( 0, 0 );
        GetScreen()->m_Curseur = wxPoint( 0, 0 );
        Import_Module( &dc );
        Import_Module( &dc );
        if( GetBoard()->m_Modules )
        if( GetBoard()->m_Modules )
            GetBoard()->m_Modules->m_Flags = 0;
            GetBoard()->m_Modules->m_Flags = 0;
        GetScreen()->ClrModify();
        GetScreen()->ClrModify();
        Zoom_Automatique( TRUE );
        Zoom_Automatique( true );
        if( m_Draw3DFrame )
        if( m_Draw3DFrame )
            m_Draw3DFrame->NewDisplay();
            m_Draw3DFrame->NewDisplay();
        break;
        break;
@@ -333,7 +333,7 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )


    case ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART:
    case ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART:
        if( GetBoard()->m_Modules )
        if( GetBoard()->m_Modules )
            Export_Module( GetBoard()->m_Modules, TRUE );
            Export_Module( GetBoard()->m_Modules, true );
        break;
        break;


    case ID_MODEDIT_SHEET_SET:
    case ID_MODEDIT_SHEET_SET:
@@ -342,7 +342,7 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )
    case ID_MODEDIT_LOAD_MODULE:
    case ID_MODEDIT_LOAD_MODULE:
        GetScreen()->ClearUndoRedoList();
        GetScreen()->ClearUndoRedoList();
        SetCurItem( NULL );
        SetCurItem( NULL );
        Clear_Pcb( TRUE );
        Clear_Pcb( true );
        GetScreen()->m_Curseur = wxPoint( 0, 0 );
        GetScreen()->m_Curseur = wxPoint( 0, 0 );
        Load_Module_From_Library( m_CurrentLib, &dc );
        Load_Module_From_Library( m_CurrentLib, &dc );
        if( GetBoard()->m_Modules )
        if( GetBoard()->m_Modules )
@@ -365,7 +365,7 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )
            }
            }
        }
        }
        GetScreen()->ClrModify();
        GetScreen()->ClrModify();
        Zoom_Automatique( TRUE );
        Zoom_Automatique( true );
        if( m_Draw3DFrame )
        if( m_Draw3DFrame )
            m_Draw3DFrame->NewDisplay();
            m_Draw3DFrame->NewDisplay();
        break;
        break;
@@ -425,12 +425,12 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )


    case ID_POPUP_PCB_ROTATE_MODULE_COUNTERCLOCKWISE:
    case ID_POPUP_PCB_ROTATE_MODULE_COUNTERCLOCKWISE:
        DrawPanel->MouseToCursorSchema();
        DrawPanel->MouseToCursorSchema();
        Rotate_Module( &dc, (MODULE*) GetScreen()->GetCurItem(), 900, TRUE );
        Rotate_Module( &dc, (MODULE*) GetScreen()->GetCurItem(), 900, true );
        break;
        break;


    case ID_POPUP_PCB_ROTATE_MODULE_CLOCKWISE:
    case ID_POPUP_PCB_ROTATE_MODULE_CLOCKWISE:
        DrawPanel->MouseToCursorSchema();
        DrawPanel->MouseToCursorSchema();
        Rotate_Module( &dc, (MODULE*) GetScreen()->GetCurItem(), -900, TRUE );
        Rotate_Module( &dc, (MODULE*) GetScreen()->GetCurItem(), -900, true );
        break;
        break;


    case ID_POPUP_PCB_EDIT_MODULE:
    case ID_POPUP_PCB_EDIT_MODULE:
@@ -587,12 +587,12 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )


    case ID_MODEDIT_UNDO:
    case ID_MODEDIT_UNDO:
        GetComponentFromUndoList();
        GetComponentFromUndoList();
        DrawPanel->Refresh( TRUE );
        DrawPanel->Refresh( true );
        break;
        break;


    case ID_MODEDIT_REDO:
    case ID_MODEDIT_REDO:
        GetComponentFromRedoList();
        GetComponentFromRedoList();
        DrawPanel->Refresh( TRUE );
        DrawPanel->Refresh( true );
        break;
        break;


    case ID_POPUP_PLACE_BLOCK:
    case ID_POPUP_PLACE_BLOCK: