diff --git a/common/fp_lib_table.cpp b/common/fp_lib_table.cpp index fb7a8f6d67..b5e074966b 100644 --- a/common/fp_lib_table.cpp +++ b/common/fp_lib_table.cpp @@ -391,7 +391,7 @@ void FP_LIB_TABLE::Format( OUTPUTFORMATTER* out, int nestLevel ) const void FP_LIB_TABLE::ROW::Format( OUTPUTFORMATTER* out, int nestLevel ) const - throw( IO_ERROR ) + throw( IO_ERROR, boost::interprocess::lock_exception ) { out->Print( nestLevel, "(lib (name %s)(type %s)(uri %s)(options %s)(descr %s))\n", out->Quotew( GetNickName() ).c_str(), @@ -665,7 +665,7 @@ bool FP_LIB_TABLE::IsEmpty( bool aIncludeFallback ) MODULE* FP_LIB_TABLE::FootprintLoadWithOptionalNickname( const FPID& aFootprintId ) - throw( IO_ERROR, PARSE_ERROR ) + throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception ) { wxString nickname = aFootprintId.GetLibNickname(); wxString fpname = aFootprintId.GetFootprintName(); diff --git a/cvpcb/cvstruct.h b/cvpcb/cvstruct.h index 7623658ac8..d262d0ba19 100644 --- a/cvpcb/cvstruct.h +++ b/cvpcb/cvstruct.h @@ -179,7 +179,6 @@ class COMPONENTS_LISTBOX : public ITEMS_LISTBOX_BASE { public: wxArrayString m_ComponentList; - CVPCB_MAINFRAME* m_Parent; public: diff --git a/eeschema/class_library.cpp b/eeschema/class_library.cpp index 93f9a91ce0..afade362fa 100644 --- a/eeschema/class_library.cpp +++ b/eeschema/class_library.cpp @@ -756,7 +756,7 @@ bool PART_LIB::SaveHeader( OUTPUTFORMATTER& aFormatter ) } -PART_LIB* PART_LIB::LoadLibrary( const wxString& aFileName ) throw( IO_ERROR ) +PART_LIB* PART_LIB::LoadLibrary( const wxString& aFileName ) throw( IO_ERROR, boost::bad_pointer ) { std::auto_ptr lib( new PART_LIB( LIBRARY_TYPE_EESCHEMA, aFileName ) ); @@ -784,7 +784,7 @@ PART_LIB* PART_LIB::LoadLibrary( const wxString& aFileName ) throw( IO_ERROR ) } -PART_LIB* PART_LIBS::AddLibrary( const wxString& aFileName ) throw( IO_ERROR ) +PART_LIB* PART_LIBS::AddLibrary( const wxString& aFileName ) throw( IO_ERROR, boost::bad_pointer ) { PART_LIB* lib; @@ -979,7 +979,8 @@ void PART_LIBS::RemoveCacheLibrary() void PART_LIBS::LibNamesAndPaths( PROJECT* aProject, bool doSave, - wxString* aPaths, wxArrayString* aNames ) throw( IO_ERROR ) + wxString* aPaths, wxArrayString* aNames ) + throw( IO_ERROR, boost::bad_pointer ) { wxString pro = aProject->GetProjectFullName(); diff --git a/eeschema/class_library.h b/eeschema/class_library.h index 136e3670b7..146ef62629 100644 --- a/eeschema/class_library.h +++ b/eeschema/class_library.h @@ -123,7 +123,7 @@ public: * @param aFileName - File name object of part library. * @throw IO_ERROR if there's any problem loading. */ - PART_LIB* AddLibrary( const wxString& aFileName ) throw( IO_ERROR ); + PART_LIB* AddLibrary( const wxString& aFileName ) throw( IO_ERROR, boost::bad_pointer ); /** * Function AddLibrary @@ -160,7 +160,8 @@ public: * (without paths). */ static void LibNamesAndPaths( PROJECT* aProject, bool doSave, - wxString* aPaths, wxArrayString* aNames=NULL ) throw( IO_ERROR ); + wxString* aPaths, wxArrayString* aNames=NULL ) + throw( IO_ERROR, boost::bad_pointer ); /** * Function cacheName @@ -545,7 +546,7 @@ public: * the caller. * @throw IO_ERROR if there's any problem loading the library. */ - static PART_LIB* LoadLibrary( const wxString& aFileName ) throw( IO_ERROR ); + static PART_LIB* LoadLibrary( const wxString& aFileName ) throw( IO_ERROR, boost::bad_pointer ); }; diff --git a/eeschema/dialogs/dialog_edit_component_in_schematic.cpp b/eeschema/dialogs/dialog_edit_component_in_schematic.cpp index a17e711edf..e3dcbf2282 100644 --- a/eeschema/dialogs/dialog_edit_component_in_schematic.cpp +++ b/eeschema/dialogs/dialog_edit_component_in_schematic.cpp @@ -70,7 +70,7 @@ private: friend class SCH_EDIT_FRAME; SCH_EDIT_FRAME* m_Parent; - SCH_COMPONENT* m_Cmp; + SCH_COMPONENT* m_cmp; LIB_PART* m_part; bool m_skipCopyFromPanel; @@ -141,7 +141,7 @@ int DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::s_SelectedRow; void SCH_EDIT_FRAME::EditComponent( SCH_COMPONENT* aComponent ) { wxCHECK_RET( aComponent != NULL && aComponent->Type() == SCH_COMPONENT_T, - wxT( "Invalid component object pointer. Bad Programmer!" ) ); + wxT( "Invalid component object pointer. Bad Programmer!" ) ); m_canvas->SetIgnoreMouseEvents( true ); @@ -169,6 +169,7 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC( wxWindow { m_Parent = (SCH_EDIT_FRAME*) parent; + m_cmp = NULL; m_part = NULL; m_skipCopyFromPanel = false; @@ -301,7 +302,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyPanelToOptions() wxString newname = chipnameTextCtrl->GetValue(); // Save current flags which could be modified by next change settings - STATUS_FLAGS flags = m_Cmp->GetFlags(); + STATUS_FLAGS flags = m_cmp->GetFlags(); newname.Replace( wxT( " " ), wxT( "_" ) ); @@ -309,7 +310,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyPanelToOptions() { DisplayError( NULL, _( "No Component Name!" ) ); } - else if( Cmp_KEEPCASE( newname, m_Cmp->m_part_name ) ) + else if( Cmp_KEEPCASE( newname, m_cmp->m_part_name ) ) { PART_LIBS* libs = Prj().SchLibs(); @@ -321,41 +322,41 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyPanelToOptions() } else // Change component from lib! { - m_Cmp->SetPartName( newname, libs ); + m_cmp->SetPartName( newname, libs ); } } // For components with multiple shapes (De Morgan representation) Set the selected shape: if( convertCheckBox->IsEnabled() ) { - m_Cmp->SetConvert( convertCheckBox->GetValue() ? 2 : 1 ); + m_cmp->SetConvert( convertCheckBox->GetValue() ? 2 : 1 ); } //Set the part selection in multiple part per package - if( m_Cmp->GetUnit() ) + if( m_cmp->GetUnit() ) { int unit_selection = unitChoice->GetCurrentSelection() + 1; - m_Cmp->SetUnitSelection( &m_Parent->GetCurrentSheet(), unit_selection ); - m_Cmp->SetUnit( unit_selection ); + m_cmp->SetUnitSelection( &m_Parent->GetCurrentSheet(), unit_selection ); + m_cmp->SetUnit( unit_selection ); } switch( orientationRadioBox->GetSelection() ) { case 0: - m_Cmp->SetOrientation( CMP_ORIENT_0 ); + m_cmp->SetOrientation( CMP_ORIENT_0 ); break; case 1: - m_Cmp->SetOrientation( CMP_ORIENT_90 ); + m_cmp->SetOrientation( CMP_ORIENT_90 ); break; case 2: - m_Cmp->SetOrientation( CMP_ORIENT_180 ); + m_cmp->SetOrientation( CMP_ORIENT_180 ); break; case 3: - m_Cmp->SetOrientation( CMP_ORIENT_270 ); + m_cmp->SetOrientation( CMP_ORIENT_270 ); break; } @@ -367,17 +368,17 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyPanelToOptions() break; case 1: - m_Cmp->SetOrientation( CMP_MIRROR_X ); + m_cmp->SetOrientation( CMP_MIRROR_X ); break; case 2: - m_Cmp->SetOrientation( CMP_MIRROR_Y ); + m_cmp->SetOrientation( CMP_MIRROR_Y ); break; } // Restore m_Flag modified by SetUnit() and other change settings - m_Cmp->ClearFlags(); - m_Cmp->SetFlags( flags ); + m_cmp->ClearFlags(); + m_cmp->SetFlags( flags ); } @@ -396,9 +397,9 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnOKButtonClick( wxCommandEvent& event // save old cmp in undo list if not already in edit, or moving ... // or the component to be edited is part of a block - if( m_Cmp->m_Flags == 0 || - m_Parent->GetScreen()->m_BlockLocate.GetState() != STATE_NO_BLOCK ) - m_Parent->SaveCopyInUndoList( m_Cmp, UR_CHANGED ); + if( m_cmp->m_Flags == 0 + || m_Parent->GetScreen()->m_BlockLocate.GetState() != STATE_NO_BLOCK ) + m_Parent->SaveCopyInUndoList( m_cmp, UR_CHANGED ); copyPanelToOptions(); @@ -441,21 +442,21 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnOKButtonClick( wxCommandEvent& event // change all field positions from relative to absolute for( unsigned i = 0; im_Pos ); + m_FieldsBuf[i].SetTextPosition( m_FieldsBuf[i].GetTextPosition() + m_cmp->m_Pos ); } - LIB_PART* entry = Prj().SchLibs()->FindLibPart( m_Cmp->m_part_name ); + LIB_PART* entry = Prj().SchLibs()->FindLibPart( m_cmp->m_part_name ); if( entry && entry->IsPower() ) - m_FieldsBuf[VALUE].SetText( m_Cmp->m_part_name ); + m_FieldsBuf[VALUE].SetText( m_cmp->m_part_name ); // copy all the fields back, and change the length of m_Fields. - m_Cmp->SetFields( m_FieldsBuf ); + m_cmp->SetFields( m_FieldsBuf ); // Reference has a specific initialization, depending on the current active sheet // because for a given component, in a complex hierarchy, there are more than one // reference. - m_Cmp->SetRef( &m_Parent->GetCurrentSheet(), m_FieldsBuf[REFERENCE].GetText() ); + m_cmp->SetRef( &m_Parent->GetCurrentSheet(), m_FieldsBuf[REFERENCE].GetText() ); m_Parent->OnModify(); m_Parent->GetScreen()->TestDanglingEnds(); @@ -474,7 +475,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::addFieldButtonHandler( wxCommandEvent& unsigned fieldNdx = m_FieldsBuf.size(); - SCH_FIELD blank( wxPoint(), fieldNdx, m_Cmp ); + SCH_FIELD blank( wxPoint(), fieldNdx, m_cmp ); blank.SetOrientation( m_FieldsBuf[REFERENCE].GetOrientation() ); @@ -564,7 +565,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::moveUpButtonHandler( wxCommandEvent& ev SCH_FIELD tmp = m_FieldsBuf[fieldNdx - 1]; DBG( printf( "tmp.m_Text=\"%s\" tmp.m_Name=\"%s\"\n", - TO_UTF8( tmp.GetText() ), TO_UTF8( tmp.GetName( false ) ) ); ) + TO_UTF8( tmp.GetText() ), TO_UTF8( tmp.GetName( false ) ) ); ) m_FieldsBuf[fieldNdx - 1] = m_FieldsBuf[fieldNdx]; setRowItem( fieldNdx - 1, m_FieldsBuf[fieldNdx] ); @@ -621,7 +622,7 @@ SCH_FIELD* DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::findField( const wxString& aField void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent ) { - m_Cmp = aComponent; + m_cmp = aComponent; /* We have 3 component related field lists to be aware of: 1) UI presentation, 2) fields in component ram copy, and 3) fields recorded @@ -635,7 +636,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent which came from the component. */ - m_part = Prj().SchLibs()->FindLibPart( m_Cmp->m_part_name ); + m_part = Prj().SchLibs()->FindLibPart( m_cmp->m_part_name ); #if 0 && defined(DEBUG) for( int i = 0; iGetFieldCount(); ++i ) @@ -658,7 +659,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent m_FieldsBuf.push_back( aComponent->m_Fields[i] ); // make the editable field position relative to the component - m_FieldsBuf[i].SetTextPosition( m_FieldsBuf[i].GetTextPosition() - m_Cmp->m_Pos ); + m_FieldsBuf[i].SetTextPosition( m_FieldsBuf[i].GetTextPosition() - m_cmp->m_Pos ); } // Add template fieldnames: @@ -669,7 +670,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent for( TEMPLATE_FIELDNAMES::const_iterator it = tfnames.begin(); it!=tfnames.end(); ++it ) { // add a new field unconditionally to the UI only - SCH_FIELD fld( wxPoint(0,0), -1 /* id is a relic */, m_Cmp, it->m_Name ); + SCH_FIELD fld( wxPoint(0,0), -1 /* id is a relic */, m_cmp, it->m_Name ); // See if field by same name already exists in component. SCH_FIELD* schField = aComponent->FindField( it->m_Name ); @@ -691,7 +692,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent fld = *schField; // make the editable field position relative to the component - fld.SetTextPosition( fld.GetTextPosition() - m_Cmp->m_Pos ); + fld.SetTextPosition( fld.GetTextPosition() - m_cmp->m_Pos ); } m_FieldsBuf.push_back( fld ); @@ -711,7 +712,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent // make the editable field position relative to the component m_FieldsBuf[newNdx].SetTextPosition( m_FieldsBuf[newNdx].GetTextPosition() - - m_Cmp->m_Pos ); + m_cmp->m_Pos ); } } @@ -724,7 +725,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent } #endif - m_FieldsBuf[REFERENCE].SetText( m_Cmp->GetRef( &m_Parent->GetCurrentSheet() ) ); + m_FieldsBuf[REFERENCE].SetText( m_cmp->GetRef( &m_Parent->GetCurrentSheet() ) ); for( unsigned i = 0; iIsDragging() ) + if( m_cmp->IsDragging() ) { orientationRadioBox->Disable(); mirrorRadioBox->Disable(); @@ -855,7 +856,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copySelectedFieldToPanel() textSizeTextCtrl->SetValue( EDA_GRAPHIC_TEXT_CTRL::FormatSize( g_UserUnit, field.GetSize().x ) ); wxPoint coord = field.GetTextPosition(); - wxPoint zero = -m_Cmp->m_Pos; // relative zero + wxPoint zero = -m_cmp->m_Pos; // relative zero // If the field value is empty and the position is at relative zero, we // set the initial position as a small offset from the ref field, and @@ -965,11 +966,11 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyOptionsToPanel() } // For components with multiple parts per package, set the unit selection - if( m_Cmp->GetUnit() <= (int)unitChoice->GetCount() ) - unitChoice->SetSelection( m_Cmp->GetUnit() - 1 ); + if( m_cmp->GetUnit() <= (int)unitChoice->GetCount() ) + unitChoice->SetSelection( m_cmp->GetUnit() - 1 ); // Disable unit selection if only one unit exists: - if( m_Cmp->GetUnit() <= 1 ) + if( m_cmp->GetUnit() <= 1 ) { unitChoice->Enable( false ); unitsInterchageableLabel->Show( false ); @@ -984,7 +985,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyOptionsToPanel() unitsInterchageableLabel->SetLabel( _( "No" ) ); } - int orientation = m_Cmp->GetOrientation() & ~( CMP_MIRROR_X | CMP_MIRROR_Y ); + int orientation = m_cmp->GetOrientation() & ~( CMP_MIRROR_X | CMP_MIRROR_Y ); if( orientation == CMP_ORIENT_90 ) orientationRadioBox->SetSelection( 1 ); @@ -995,7 +996,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyOptionsToPanel() else orientationRadioBox->SetSelection( 0 ); - int mirror = m_Cmp->GetOrientation() & ( CMP_MIRROR_X | CMP_MIRROR_Y ); + int mirror = m_cmp->GetOrientation() & ( CMP_MIRROR_X | CMP_MIRROR_Y ); if( mirror == CMP_MIRROR_X ) { @@ -1012,38 +1013,37 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyOptionsToPanel() // Activate/Desactivate the normal/convert option ? (activated only if // the component has more than one shape) - if( m_Cmp->GetConvert() > 1 ) + if( m_cmp->GetConvert() > 1 ) convertCheckBox->SetValue( true ); if( m_part == NULL || !m_part->HasConversion() ) convertCheckBox->Enable( false ); // Set the component's library name. - chipnameTextCtrl->SetValue( m_Cmp->m_part_name ); + chipnameTextCtrl->SetValue( m_cmp->m_part_name ); // Set the component's unique ID time stamp. m_textCtrlTimeStamp->SetValue( wxString::Format( wxT( "%8.8lX" ), - (unsigned long) m_Cmp->GetTimeStamp() ) ); + (unsigned long) m_cmp->GetTimeStamp() ) ); } #include -/* reinitialize components parameters to default values found in lib - */ + void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::SetInitCmp( wxCommandEvent& event ) { - if( !m_Cmp ) + if( !m_cmp ) return; - if( LIB_PART* part = Prj().SchLibs()->FindLibPart( m_Cmp->m_part_name ) ) + if( LIB_PART* part = Prj().SchLibs()->FindLibPart( m_cmp->m_part_name ) ) { // save old cmp in undo list if not already in edit, or moving ... - if( m_Cmp->m_Flags == 0 ) - m_Parent->SaveCopyInUndoList( m_Cmp, UR_CHANGED ); + if( m_cmp->m_Flags == 0 ) + m_Parent->SaveCopyInUndoList( m_cmp, UR_CHANGED ); INSTALL_UNBUFFERED_DC( dc, m_Parent->GetCanvas() ); - m_Cmp->Draw( m_Parent->GetCanvas(), &dc, wxPoint( 0, 0 ), g_XorMode ); + m_cmp->Draw( m_Parent->GetCanvas(), &dc, wxPoint( 0, 0 ), g_XorMode ); // Initialize fixed field values to default values found in library // Note: the field texts are not modified because they are set in schematic, @@ -1051,35 +1051,35 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::SetInitCmp( wxCommandEvent& event ) // Only VALUE, REFERENCE , FOOTPRINT and DATASHEET are re-initialized LIB_FIELD& refField = part->GetReferenceField(); - m_Cmp->GetField( REFERENCE )->SetTextPosition( refField.GetTextPosition() + m_Cmp->m_Pos ); - m_Cmp->GetField( REFERENCE )->ImportValues( refField ); + m_cmp->GetField( REFERENCE )->SetTextPosition( refField.GetTextPosition() + m_cmp->m_Pos ); + m_cmp->GetField( REFERENCE )->ImportValues( refField ); LIB_FIELD& valField = part->GetValueField(); - m_Cmp->GetField( VALUE )->SetTextPosition( valField.GetTextPosition() + m_Cmp->m_Pos ); - m_Cmp->GetField( VALUE )->ImportValues( valField ); + m_cmp->GetField( VALUE )->SetTextPosition( valField.GetTextPosition() + m_cmp->m_Pos ); + m_cmp->GetField( VALUE )->ImportValues( valField ); LIB_FIELD* field = part->GetField(FOOTPRINT); - if( field && m_Cmp->GetField( FOOTPRINT ) ) + if( field && m_cmp->GetField( FOOTPRINT ) ) { - m_Cmp->GetField( FOOTPRINT )->SetTextPosition( field->GetTextPosition() + m_Cmp->m_Pos ); - m_Cmp->GetField( FOOTPRINT )->ImportValues( *field ); + m_cmp->GetField( FOOTPRINT )->SetTextPosition( field->GetTextPosition() + m_cmp->m_Pos ); + m_cmp->GetField( FOOTPRINT )->ImportValues( *field ); } field = part->GetField(DATASHEET); - if( field && m_Cmp->GetField( DATASHEET ) ) + if( field && m_cmp->GetField( DATASHEET ) ) { - m_Cmp->GetField( DATASHEET )->SetTextPosition( field->GetTextPosition() + m_Cmp->m_Pos ); - m_Cmp->GetField( DATASHEET )->ImportValues( *field ); + m_cmp->GetField( DATASHEET )->SetTextPosition( field->GetTextPosition() + m_cmp->m_Pos ); + m_cmp->GetField( DATASHEET )->ImportValues( *field ); } - m_Cmp->SetOrientation( CMP_NORMAL ); + m_cmp->SetOrientation( CMP_NORMAL ); m_Parent->OnModify(); - m_Cmp->Draw( m_Parent->GetCanvas(), &dc, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); + m_cmp->Draw( m_Parent->GetCanvas(), &dc, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); EndQuasiModal( wxID_OK ); } diff --git a/include/fp_lib_table.h b/include/fp_lib_table.h index 90ff3a9106..ac5102346d 100644 --- a/include/fp_lib_table.h +++ b/include/fp_lib_table.h @@ -31,6 +31,7 @@ #include #include #include +#include #define FP_LATE_ENVVAR 1 ///< late=1/early=0 environment variable expansion @@ -221,7 +222,7 @@ public: * Actual indentation will be 2 spaces for each nestLevel. */ void Format( OUTPUTFORMATTER* out, int nestLevel ) const - throw( IO_ERROR ); + throw( IO_ERROR, boost::interprocess::lock_exception ); private: @@ -468,7 +469,7 @@ public: * @throw PARSE_ERROR if @a aFootprintId is not parsed OK. */ MODULE* FootprintLoadWithOptionalNickname( const FPID& aFootprintId ) - throw( IO_ERROR, PARSE_ERROR ); + throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception ); /** * Function GetDescription diff --git a/pagelayout_editor/events_functions.cpp b/pagelayout_editor/events_functions.cpp index 0bec641c0e..598a141df2 100644 --- a/pagelayout_editor/events_functions.cpp +++ b/pagelayout_editor/events_functions.cpp @@ -170,6 +170,7 @@ void PL_EDITOR_FRAME::Process_Special_Functions( wxCommandEvent& event ) SaveCopyInUndoList(); idx = m_treePagelayout->GetSelectedItemIndex(); item = AddPageLayoutItem( WORKSHEET_DATAITEM::WS_SEGMENT, idx ); + if( InvokeDialogNewItem( this, item ) == wxID_CANCEL ) { RemoveLastCommandInUndoList(); @@ -199,6 +200,7 @@ void PL_EDITOR_FRAME::Process_Special_Functions( wxCommandEvent& event ) SaveCopyInUndoList(); idx = m_treePagelayout->GetSelectedItemIndex(); item = AddPageLayoutItem( WORKSHEET_DATAITEM::WS_RECT, idx ); + if( InvokeDialogNewItem( this, item ) == wxID_CANCEL ) { RemoveLastCommandInUndoList(); @@ -353,10 +355,11 @@ static void moveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPositio // (does not happen each time the mouse is moved, because the // item is placed on grid) // to avoid useless computation time. - if( aPanel && ( previous_position != position ) ) + if( previous_position != position ) aPanel->Refresh(); } + /* * Function abortMoveItem: called when an item is currently moving, * and when the user aborts the move command. @@ -367,7 +370,7 @@ static void abortMoveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC ) PL_EDITOR_SCREEN* screen = (PL_EDITOR_SCREEN*) aPanel->GetScreen(); WORKSHEET_DATAITEM *item = screen->GetCurItem(); - if( (item->GetFlags() & NEW_ITEM ) ) + if( item->GetFlags() & NEW_ITEM ) { PL_EDITOR_FRAME* plframe = (PL_EDITOR_FRAME*) aPanel->GetParent(); plframe->RemoveLastCommandInUndoList(); @@ -394,6 +397,7 @@ static void abortMoveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC ) aPanel->Refresh(); } + void PL_EDITOR_FRAME::MoveItem( WORKSHEET_DATAITEM* aItem ) { wxCHECK_RET( aItem != NULL, wxT( "Cannot move NULL item" ) ); @@ -411,6 +415,7 @@ void PL_EDITOR_FRAME::MoveItem( WORKSHEET_DATAITEM* aItem ) { SetCrossHairPosition( initialPositionUi, false ); initialCursorPosition = GetCrossHairPosition(); + if( m_canvas->IsPointOnDisplay( initialCursorPosition ) ) { m_canvas->MoveCursorToCrossHair(); @@ -443,7 +448,7 @@ void PL_EDITOR_FRAME::PlaceItem( WORKSHEET_DATAITEM* aItem ) { aItem->MoveStartPointTo( initialPosition ); } - else if( (aItem->GetFlags() & LOCATE_ENDPOINT) ) + else if( aItem->GetFlags() & LOCATE_ENDPOINT ) { aItem->MoveEndPointTo( initialPosition ); } @@ -471,12 +476,14 @@ void PL_EDITOR_FRAME::OnSelectCoordOriginCorner( wxCommandEvent& event ) m_canvas->Refresh(); } + void PL_EDITOR_FRAME::OnSelectTitleBlockDisplayMode( wxCommandEvent& event ) { WORKSHEET_DATAITEM::m_SpecialMode = (event.GetId() == ID_SHOW_PL_EDITOR_MODE); m_canvas->Refresh(); } + void PL_EDITOR_FRAME::OnQuit( wxCommandEvent& event ) { Close( true ); @@ -485,7 +492,7 @@ void PL_EDITOR_FRAME::OnQuit( wxCommandEvent& event ) void PL_EDITOR_FRAME::ToPlotter(wxCommandEvent& event) { - wxMessageBox( wxT("Not yet available")); + wxMessageBox( wxT( "Not yet available" ) ); } @@ -533,6 +540,7 @@ void PL_EDITOR_FRAME::ToPrinter(wxCommandEvent& event) InvokeDialogPrint( this, s_PrintData, s_pageSetupData ); } + void PL_EDITOR_FRAME::OnTreeSelection( wxTreeEvent& event ) { WORKSHEET_DATAITEM* item = GetSelectedItem(); @@ -543,11 +551,15 @@ void PL_EDITOR_FRAME::OnTreeSelection( wxTreeEvent& event ) m_canvas->Refresh(); } + void PL_EDITOR_FRAME::OnTreeMiddleClick( wxTreeEvent& event ) { } + extern void AddNewItemsCommand( wxMenu* aMainMenu ); + + void PL_EDITOR_FRAME::OnTreeRightClick( wxTreeEvent& event ) { m_treePagelayout->SelectCell( event.GetItem() ); @@ -568,6 +580,7 @@ void PL_EDITOR_FRAME::OnUpdateTitleBlockDisplayNormalMode( wxUpdateUIEvent& even event.Check( WORKSHEET_DATAITEM::m_SpecialMode == false ); } + void PL_EDITOR_FRAME::OnUpdateTitleBlockDisplaySpecialMode( wxUpdateUIEvent& event ) { event.Check( WORKSHEET_DATAITEM::m_SpecialMode == true ); diff --git a/pcbnew/kicad_plugin.cpp b/pcbnew/kicad_plugin.cpp index 939a0d034f..e2991aaac0 100644 --- a/pcbnew/kicad_plugin.cpp +++ b/pcbnew/kicad_plugin.cpp @@ -88,7 +88,6 @@ void filterNetClass( const BOARD& aBoard, NETCLASS& aNetClass ) class FP_CACHE_ITEM { wxFileName m_file_name; ///< The the full file name and path of the footprint to cache. - bool m_writable; ///< Writability status of the footprint file. wxDateTime m_mod_time; ///< The last file modified time stamp. std::auto_ptr m_module; diff --git a/pcbnew/legacy_netlist_reader.cpp b/pcbnew/legacy_netlist_reader.cpp index cefe733a3d..ea8ebc0370 100644 --- a/pcbnew/legacy_netlist_reader.cpp +++ b/pcbnew/legacy_netlist_reader.cpp @@ -98,7 +98,8 @@ void LEGACY_NETLIST_READER::LoadNetlist() throw ( IO_ERROR, PARSE_ERROR ) } -COMPONENT* LEGACY_NETLIST_READER::loadComponent( char* aText ) throw( PARSE_ERROR ) +COMPONENT* LEGACY_NETLIST_READER::loadComponent( char* aText ) + throw( PARSE_ERROR, boost::bad_pointer ) { char* text; wxString msg; diff --git a/pcbnew/netlist_reader.h b/pcbnew/netlist_reader.h index 4d6994142b..ba701a7c6d 100644 --- a/pcbnew/netlist_reader.h +++ b/pcbnew/netlist_reader.h @@ -214,7 +214,7 @@ class LEGACY_NETLIST_READER : public NETLIST_READER * @return the new component created by parsing \a aLine * @throw PARSE_ERROR when \a aLine is not a valid component description. */ - COMPONENT* loadComponent( char* aText ) throw( PARSE_ERROR ); + COMPONENT* loadComponent( char* aText ) throw( PARSE_ERROR, boost::bad_pointer ); /** * Function loadFootprintFilters diff --git a/pcbnew/pcb_parser.cpp b/pcbnew/pcb_parser.cpp index b08e4527f6..6dd8a2b8ee 100644 --- a/pcbnew/pcb_parser.cpp +++ b/pcbnew/pcb_parser.cpp @@ -300,7 +300,7 @@ void PCB_PARSER::parseEDA_TEXT( EDA_TEXT* aText ) throw( PARSE_ERROR ) } -S3D_MASTER* PCB_PARSER::parse3DModel() throw( PARSE_ERROR ) +S3D_MASTER* PCB_PARSER::parse3DModel() throw( PARSE_ERROR, IO_ERROR ) { wxCHECK_MSG( CurTok() == T_model, NULL, wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as S3D_MASTER." ) ); diff --git a/pcbnew/pcb_parser.h b/pcbnew/pcb_parser.h index d42081e409..95d9e9e4e4 100644 --- a/pcbnew/pcb_parser.h +++ b/pcbnew/pcb_parser.h @@ -185,7 +185,7 @@ class PCB_PARSER : public PCB_LEXER */ void parseEDA_TEXT( EDA_TEXT* aText ) throw( PARSE_ERROR ); - S3D_MASTER* parse3DModel() throw( PARSE_ERROR ); + S3D_MASTER* parse3DModel() throw( PARSE_ERROR, IO_ERROR ); /** * Function parseDouble @@ -219,7 +219,7 @@ class PCB_PARSER : public PCB_LEXER return KiROUND( parseDouble() * IU_PER_MM ); } - inline int parseBoardUnits( const char* aExpected ) throw( PARSE_ERROR ) + inline int parseBoardUnits( const char* aExpected ) throw( PARSE_ERROR, IO_ERROR ) { // Use here KiROUND, not KIROUND (see comments about them) // when having a function as argument, because it will be called twice diff --git a/pcbnew/specctra.cpp b/pcbnew/specctra.cpp index 91b13ccc82..da2332b07b 100644 --- a/pcbnew/specctra.cpp +++ b/pcbnew/specctra.cpp @@ -294,7 +294,7 @@ void SPECCTRA_DB::LoadSESSION( const wxString& filename ) throw( IO_ERROR ) } -void SPECCTRA_DB::doPCB( PCB* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doPCB( PCB* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok; @@ -799,7 +799,7 @@ void SPECCTRA_DB::doSTRUCTURE_OUT( STRUCTURE_OUT* growth ) throw( IO_ERROR, boos } -void SPECCTRA_DB::doKEEPOUT( KEEPOUT* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doKEEPOUT( KEEPOUT* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok = NextTok(); @@ -975,7 +975,7 @@ void SPECCTRA_DB::doWINDOW( WINDOW* growth ) throw( IO_ERROR ) } -void SPECCTRA_DB::doBOUNDARY( BOUNDARY* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doBOUNDARY( BOUNDARY* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok = NextTok(); @@ -1197,7 +1197,7 @@ void SPECCTRA_DB::doVIA( VIA* growth ) throw( IO_ERROR ) } -void SPECCTRA_DB::doCONTROL( CONTROL* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doCONTROL( CONTROL* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok; @@ -1521,7 +1521,7 @@ void SPECCTRA_DB::doPLACE_RULE( PLACE_RULE* growth, bool expect_object_type ) th #endif -void SPECCTRA_DB::doREGION( REGION* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doREGION( REGION* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok = NextTok(); @@ -1590,7 +1590,7 @@ void SPECCTRA_DB::doREGION( REGION* growth ) throw( IO_ERROR ) } -void SPECCTRA_DB::doCLASS_CLASS( CLASS_CLASS* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doCLASS_CLASS( CLASS_CLASS* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok = NextTok(); @@ -1893,7 +1893,7 @@ void SPECCTRA_DB::doCOMPONENT( COMPONENT* growth ) throw( IO_ERROR, boost::bad_p } -void SPECCTRA_DB::doPLACEMENT( PLACEMENT* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doPLACEMENT( PLACEMENT* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok; @@ -1948,7 +1948,7 @@ void SPECCTRA_DB::doPLACEMENT( PLACEMENT* growth ) throw( IO_ERROR ) } -void SPECCTRA_DB::doPADSTACK( PADSTACK* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doPADSTACK( PADSTACK* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok = NextTok(); @@ -2048,7 +2048,7 @@ void SPECCTRA_DB::doPADSTACK( PADSTACK* growth ) throw( IO_ERROR ) } -void SPECCTRA_DB::doSHAPE( SHAPE* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doSHAPE( SHAPE* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok; @@ -2274,7 +2274,7 @@ void SPECCTRA_DB::doPIN( PIN* growth ) throw( IO_ERROR ) } -void SPECCTRA_DB::doLIBRARY( LIBRARY* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doLIBRARY( LIBRARY* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok; @@ -2468,7 +2468,7 @@ L_pins: } -void SPECCTRA_DB::doTOPOLOGY( TOPOLOGY* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doTOPOLOGY( TOPOLOGY* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok; @@ -2506,7 +2506,7 @@ void SPECCTRA_DB::doTOPOLOGY( TOPOLOGY* growth ) throw( IO_ERROR ) } -void SPECCTRA_DB::doCLASS( CLASS* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doCLASS( CLASS* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok; @@ -2679,7 +2679,7 @@ void SPECCTRA_DB::doCOMP_ORDER( COMP_ORDER* growth ) throw( IO_ERROR ) } -void SPECCTRA_DB::doFROMTO( FROMTO* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doFROMTO( FROMTO* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok; @@ -2990,7 +2990,7 @@ void SPECCTRA_DB::doWIRE_VIA( WIRE_VIA* growth ) throw( IO_ERROR ) } -void SPECCTRA_DB::doWIRING( WIRING* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doWIRING( WIRING* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok; @@ -3140,7 +3140,7 @@ void SPECCTRA_DB::doHISTORY( HISTORY* growth ) throw( IO_ERROR, boost::bad_point } -void SPECCTRA_DB::doSESSION( SESSION* growth ) throw( IO_ERROR ) +void SPECCTRA_DB::doSESSION( SESSION* growth ) throw( IO_ERROR, boost::bad_pointer ) { T tok; diff --git a/pcbnew/specctra.h b/pcbnew/specctra.h index b56c483333..4f95580c95 100644 --- a/pcbnew/specctra.h +++ b/pcbnew/specctra.h @@ -3690,7 +3690,7 @@ class SPECCTRA_DB : public SPECCTRA_LEXER */ void readTIME( time_t* time_stamp ) throw( IO_ERROR ); - void doPCB( PCB* growth ) throw( IO_ERROR ); + void doPCB( PCB* growth ) throw( IO_ERROR, boost::bad_pointer ); void doPARSER( PARSER* growth ) throw( IO_ERROR ); void doRESOLUTION( UNIT_RES* growth ) throw( IO_ERROR ); void doUNIT( UNIT_RES* growth ) throw( IO_ERROR ); @@ -3698,44 +3698,44 @@ class SPECCTRA_DB : public SPECCTRA_LEXER void doSTRUCTURE_OUT( STRUCTURE_OUT* growth ) throw( IO_ERROR, boost::bad_pointer ); void doLAYER_NOISE_WEIGHT( LAYER_NOISE_WEIGHT* growth ) throw( IO_ERROR, boost::bad_pointer ); void doLAYER_PAIR( LAYER_PAIR* growth ) throw( IO_ERROR ); - void doBOUNDARY( BOUNDARY* growth ) throw( IO_ERROR ); + void doBOUNDARY( BOUNDARY* growth ) throw( IO_ERROR, boost::bad_pointer ); void doRECTANGLE( RECTANGLE* growth ) throw( IO_ERROR ); void doPATH( PATH* growth ) throw( IO_ERROR ); void doSTRINGPROP( STRINGPROP* growth ) throw( IO_ERROR ); void doTOKPROP( TOKPROP* growth ) throw( IO_ERROR ); void doVIA( VIA* growth ) throw( IO_ERROR ); - void doCONTROL( CONTROL* growth ) throw( IO_ERROR ); + void doCONTROL( CONTROL* growth ) throw( IO_ERROR, boost::bad_pointer ); void doLAYER( LAYER* growth ) throw( IO_ERROR ); void doRULE( RULE* growth ) throw( IO_ERROR ); - void doKEEPOUT( KEEPOUT* growth ) throw( IO_ERROR ); + void doKEEPOUT( KEEPOUT* growth ) throw( IO_ERROR, boost::bad_pointer ); void doCIRCLE( CIRCLE* growth ) throw( IO_ERROR ); void doQARC( QARC* growth ) throw( IO_ERROR ); void doWINDOW( WINDOW* growth ) throw( IO_ERROR ); void doCONNECT( CONNECT* growth ) throw( IO_ERROR ); - void doREGION( REGION* growth ) throw( IO_ERROR ); - void doCLASS_CLASS( CLASS_CLASS* growth ) throw( IO_ERROR ); + void doREGION( REGION* growth ) throw( IO_ERROR, boost::bad_pointer ); + void doCLASS_CLASS( CLASS_CLASS* growth ) throw( IO_ERROR, boost::bad_pointer ); void doLAYER_RULE( LAYER_RULE* growth ) throw( IO_ERROR ); void doCLASSES( CLASSES* growth ) throw( IO_ERROR ); void doGRID( GRID* growth ) throw( IO_ERROR ); void doPLACE( PLACE* growth ) throw( IO_ERROR ); void doCOMPONENT( COMPONENT* growth ) throw( IO_ERROR, boost::bad_pointer ); - void doPLACEMENT( PLACEMENT* growth ) throw( IO_ERROR ); + void doPLACEMENT( PLACEMENT* growth ) throw( IO_ERROR, boost::bad_pointer ); void doPROPERTIES( PROPERTIES* growth ) throw( IO_ERROR ); - void doPADSTACK( PADSTACK* growth ) throw( IO_ERROR ); - void doSHAPE( SHAPE* growth ) throw( IO_ERROR ); + void doPADSTACK( PADSTACK* growth ) throw( IO_ERROR, boost::bad_pointer ); + void doSHAPE( SHAPE* growth ) throw( IO_ERROR, boost::bad_pointer ); void doIMAGE( IMAGE* growth ) throw( IO_ERROR, boost::bad_pointer ); - void doLIBRARY( LIBRARY* growth ) throw( IO_ERROR ); + void doLIBRARY( LIBRARY* growth ) throw( IO_ERROR, boost::bad_pointer ); void doPIN( PIN* growth ) throw( IO_ERROR ); void doNET( NET* growth ) throw( IO_ERROR, boost::bad_pointer ); void doNETWORK( NETWORK* growth ) throw( IO_ERROR, boost::bad_pointer ); - void doCLASS( CLASS* growth ) throw( IO_ERROR ); - void doTOPOLOGY( TOPOLOGY* growth ) throw( IO_ERROR ); - void doFROMTO( FROMTO* growth ) throw( IO_ERROR ); + void doCLASS( CLASS* growth ) throw( IO_ERROR, boost::bad_pointer ); + void doTOPOLOGY( TOPOLOGY* growth ) throw( IO_ERROR, boost::bad_pointer ); + void doFROMTO( FROMTO* growth ) throw( IO_ERROR, boost::bad_pointer ); void doCOMP_ORDER( COMP_ORDER* growth ) throw( IO_ERROR ); void doWIRE( WIRE* growth ) throw( IO_ERROR, boost::bad_pointer ); void doWIRE_VIA( WIRE_VIA* growth ) throw( IO_ERROR ); - void doWIRING( WIRING* growth ) throw( IO_ERROR ); - void doSESSION( SESSION* growth ) throw( IO_ERROR ); + void doWIRING( WIRING* growth ) throw( IO_ERROR, boost::bad_pointer ); + void doSESSION( SESSION* growth ) throw( IO_ERROR, boost::bad_pointer ); void doANCESTOR( ANCESTOR* growth ) throw( IO_ERROR ); void doHISTORY( HISTORY* growth ) throw( IO_ERROR, boost::bad_pointer ); void doROUTE( ROUTE* growth ) throw( IO_ERROR, boost::bad_pointer ); @@ -3752,7 +3752,7 @@ class SPECCTRA_DB : public SPECCTRA_LEXER * @param aBoard The BOARD to get information from in order to make the BOUNDARY. * @param aBoundary The empty BOUNDARY to fill in. */ - void fillBOUNDARY( BOARD* aBoard, BOUNDARY* aBoundary ) throw( IO_ERROR ); + void fillBOUNDARY( BOARD* aBoard, BOUNDARY* aBoundary ) throw( IO_ERROR, boost::bad_pointer ); /** * Function makeIMAGE @@ -3933,7 +3933,7 @@ public: * * @param aBoard The BOARD to convert to a PCB. */ - void FromBOARD( BOARD* aBoard ) throw( IO_ERROR ); + void FromBOARD( BOARD* aBoard ) throw( IO_ERROR, boost::bad_ptr_container_operation ); /** * Function FromSESSION diff --git a/pcbnew/specctra_export.cpp b/pcbnew/specctra_export.cpp index ba47d5710c..1c6a548095 100644 --- a/pcbnew/specctra_export.cpp +++ b/pcbnew/specctra_export.cpp @@ -889,7 +889,8 @@ static void makeCircle( PATH* aPath, DRAWSEGMENT* aGraphic ) } -void SPECCTRA_DB::fillBOUNDARY( BOARD* aBoard, BOUNDARY* boundary ) throw( IO_ERROR ) +void SPECCTRA_DB::fillBOUNDARY( BOARD* aBoard, BOUNDARY* boundary ) + throw( IO_ERROR, boost::bad_pointer ) { PCB_TYPE_COLLECTOR items; @@ -1369,7 +1370,8 @@ typedef std::set STRINGSET; typedef std::pair STRINGSET_PAIR; -void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IO_ERROR ) +void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) + throw( IO_ERROR, boost::bad_ptr_container_operation ) { PCB_TYPE_COLLECTOR items;