diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 3b0a143740..1f6705c677 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -4,6 +4,24 @@ KiCad ChangeLog 2010 Please add newer entries at the top, list the date and your name with email address. +2010-Jan-23 UPDATE Jean-Pierre Charras +================================================================================ +++ Pcbnew: + Update Layer manager display when changing active layer (from hotkey or menus) + fixed minor problems and fixed Layer Alignment Target bug. + +2010-Jan-22 UPDATE Wayne Stambaugh +================================================================================ +Minor fixes and code cleaning. + +* Remove redundant background redrawing RedrawActiveWindow. +* Remove redundant managed cursor callback in RedrawActiveWindow. +* Use refresh to redraw instead of directly calling RedrawActiveWindow. +* Remove unused SetDrawBgColor for drawframe.cpp. +* Fix compiler warning in cvpcb/cvframe.cpp. +* Fix menu spelling and syntax errors in pcbnew. +* Rename Trace_Curseur to DrawCursor in common/drawpanel.cpp. + 2010-Jan-21 UPDATE Dick Hollenbeck ================================================================================ ++pcbnew diff --git a/CMakeLists.txt b/CMakeLists.txt index 0a6b61f7c1..2cfcbd8b70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,13 +20,8 @@ option(wxUSE_UNICODE "enable/disable building unicode (default OFF)") option(KICAD_GOST "enable/disable building using GOST notation for multiple gates per package (default OFF)") -if(APPLE) - option(KICAD_AUIMANAGER "Enable use of wxAuiManager (default ON)" ON) - option(KICAD_AUITOOLBAR "Enable use of wxAuiToolBar (default ON)" ON) -else(APPLE) - option(KICAD_AUIMANAGER "Enable use of wxAuiManager (default OFF)" OFF) - option(KICAD_AUITOOLBAR "Enable use of wxAuiToolBar (default OFF)" OFF) -endif(APPLE) +option(KICAD_AUIMANAGER "Enable use of wxAuiManager (default ON)" ON) +option(KICAD_AUITOOLBAR "Enable use of wxAuiToolBar (default ON)" ON) # Comment this out if you don't want to build with Python support. diff --git a/TODO.txt b/TODO.txt index b353f71a64..de6b6d0b70 100644 --- a/TODO.txt +++ b/TODO.txt @@ -22,17 +22,9 @@ Common Need to do this using DialogBlocks. * Component and module search displays in which library the module or component lives. -* Create a better and cleaner add component and footprint dialog. * List auto up and down scrolling. -* Toolbars and menus should be equal. -* (Main) dialog(s) title(s) should always be the same and not change over time - when not needed. For example KiCad - or PCBNew - . - We dont have to see which build in the titlebar. This makes documentation - screenshots also easier. We already have the build information in the about - dialog. * Integer/long/double input boxes should handle comma and dot separated values, not only comma. -* Undo/Redo should have more steps (or could be setable). CvPCB ----- @@ -41,9 +33,6 @@ CvPCB EESchema -------- - -*Improvements* -* Component add list browser with optional component preview. * Use collector classes. * Drag and drop between two EESchema windows. @@ -70,37 +59,24 @@ from folks with less than that minimum. PCBNew ------ -*BUGS* -* Backspace hotkey for deleting track segment doesn't work. -* Delete hotkey for deleting a track doesn't work. * Fix block copy/move preview to not view only a border, we should see the moved/copied parts. * Fix DIALOG_PAD_PROPERTIES_BASE class to use actual layer names in the BOARD. * Use BOARD_ITEM::MenuIcon() in the onrightclick.cpp -* Add unroute option in rightclick menu for components * Document specctra round tripper, and fix the english translation of help. * Expose layer name editing. Should dove tail with net class editor from a UI perspective. * Add ARC support to gerber polygons. * Need to add polygon aperture type. Then example 2 in RS274xrevd_e.pdf will draw properly. -* Look at mouse auto-scroll modes (bug?) -* Add the footprint name in the automatic placement file -* Footprint list should also have a footprint preview. LAYER_WIDGET for PCBNEW ----------------------- -L1) Keyboard focus is getting stuck in layer widget and then hotkeys do not work. - There is probably a solution to be found and it may involve asking on the - wxWidgets mailing list. - L2) Hook in bool WinEDA_PcbFrame::LYRS::OnLayerSelect( int aLayer ) -L3) When a layer changes via a hotkey, then call WinEDA_PcbFrame->m_Layers->SelectLayer() - L4) Move popup menu code from class LAYER_WIDGET into WinEDA_PcbFrame::LYRS so as to keep LAYER_WIDGET fully usage agnostic. Remove #include "pcbstruct.h" // IsValidCopperLayerIndex() from layer_widget.cpp. diff --git a/common/selcolor.cpp b/common/selcolor.cpp index f2e7ae26c6..bf31eaee7a 100644 --- a/common/selcolor.cpp +++ b/common/selcolor.cpp @@ -29,6 +29,7 @@ public: ~WinEDA_SelColorFrame() {}; private: + void Init_Dialog( int aOldColor ); void OnCancel( wxCommandEvent& event ); void SelColor( wxCommandEvent& event ); @@ -66,6 +67,42 @@ WinEDA_SelColorFrame::WinEDA_SelColorFrame( wxWindow* parent, int OldColor ) : wxDialog( parent, -1, _( "Colors" ), framepos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | MAYBE_RESIZE_BORDER ) +{ + + Init_Dialog( OldColor ); + // Resize the dialog + GetSizer()->SetSizeHints( this ); + + // Ensure the whole frame is visible, whenever the asked position. + // Give also a small margin. + wxPoint endCornerPosition = GetPosition(); + int margin = 10; + endCornerPosition.x += GetSize().x + margin; + endCornerPosition.y += GetSize().y + margin; + + wxPoint windowPosition = GetPosition(); + wxRect freeScreenArea( wxGetClientDisplayRect( ) ); + if( freeScreenArea.GetRight() < endCornerPosition.x ) + { + windowPosition.x += freeScreenArea.GetRight() - endCornerPosition.x; + if( windowPosition.x < freeScreenArea.x ) + windowPosition.x = freeScreenArea.x; + // Sligly modify the vertical position to avoid the mouse to be + // exactly on the upper side of the window + windowPosition.y +=5; + endCornerPosition.y += 5; + } + if( freeScreenArea.GetBottom() < endCornerPosition.y ) + { + windowPosition.y += freeScreenArea.GetBottom() - endCornerPosition.y; + if( windowPosition.y < freeScreenArea.y ) + windowPosition.y = freeScreenArea.y; + } + + SetPosition(windowPosition); +} + +void WinEDA_SelColorFrame::Init_Dialog( int aOldColor ) { wxBoxSizer* OuterBoxSizer = NULL; wxBoxSizer* MainBoxSizer = NULL; @@ -135,7 +172,7 @@ WinEDA_SelColorFrame::WinEDA_SelColorFrame( wxWindow* parent, // Set focus to this button if its color matches the // color which had been selected previously (for // whichever layer's color is currently being edited). - if( OldColor == buttcolor ) + if( aOldColor == buttcolor ) { ColorFound = true; BitmapButton->SetFocus(); @@ -171,15 +208,8 @@ WinEDA_SelColorFrame::WinEDA_SelColorFrame( wxWindow* parent, // (That shouldn't ever happen in practice though.) if( !ColorFound ) Button->SetFocus(); - - // Resize the dialog - if( GetSizer() ) - { - GetSizer()->SetSizeHints( this ); - } } - void WinEDA_SelColorFrame::OnCancel( wxCommandEvent& WXUNUSED( event ) ) { // Setting the return value to -1 indicates that the diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h index cbeb9ca890..d333ecd816 100644 --- a/include/wxPcbStruct.h +++ b/include/wxPcbStruct.h @@ -206,6 +206,14 @@ public: */ void AuxiliaryToolBar_DesignRules_Update_UI(); + /** Function SynchronizeLayersManager( ) + * Must be called when info displayed in the layer manager Toolbar + * as been changed in the main window ( by hotkey or a tool option. + * Mainly when the active layer as changed. + * @param aFlag = flag giving the type of data (layers, checkboxes...) + */ + void SynchronizeLayersManager( int aFlag ); + /* mouse functions events: */ void OnLeftClick( wxDC* DC, const wxPoint& MousePos ); void OnLeftDClick( wxDC* DC, const wxPoint& MousePos ); diff --git a/internat/fr/kicad.mo b/internat/fr/kicad.mo index 5aee1b191a..c8f5ba99e7 100644 Binary files a/internat/fr/kicad.mo and b/internat/fr/kicad.mo differ diff --git a/internat/fr/kicad.po b/internat/fr/kicad.po index 8e6085a701..953b0fb439 100644 --- a/internat/fr/kicad.po +++ b/internat/fr/kicad.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: kicad\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-01-22 11:29+0100\n" -"PO-Revision-Date: 2010-01-22 11:34+0100\n" +"POT-Creation-Date: 2010-01-22 14:07+0100\n" +"PO-Revision-Date: 2010-01-22 14:08+0100\n" "Last-Translator: \n" "Language-Team: kicad team \n" "MIME-Version: 1.0\n" @@ -747,12 +747,12 @@ msgstr "X Pos" msgid "Y pos" msgstr "Y pos" -#: pcbnew/hotkeys.cpp:595 +#: pcbnew/hotkeys.cpp:608 #, c-format msgid "Footprint %s found, but locked" msgstr "Module %s trouvé, mais verrouillé" -#: pcbnew/hotkeys.cpp:789 +#: pcbnew/hotkeys.cpp:802 msgid "Delete module?" msgstr "Effacer Module?" @@ -925,12 +925,11 @@ msgid "Show/hide the layers manager toolbar" msgstr "Afficher/cacher le gestionnaire de couches" #: pcbnew/tool_pcb.cpp:398 -#, fuzzy msgid "" "Show/hide the toolbar for microwaves tools\n" " This is a experimental feature (under development)" msgstr "" -"Affiche/supprime le toolbar vertical auxiliaire (outils pour applications micro-ondes)\n" +"Affiche/cache le toolbar vertical auxiliaire pour applications micro-ondes)\n" "C'est un outil expérimental (en cours de développement)" #: pcbnew/tool_pcb.cpp:423 diff --git a/pcbnew/edit.cpp b/pcbnew/edit.cpp index aa94c277d8..edb2b3b76c 100644 --- a/pcbnew/edit.cpp +++ b/pcbnew/edit.cpp @@ -743,6 +743,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) if( itmp >= 0 ) ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = itmp; DrawPanel->MouseToCursorSchema(); + SynchronizeLayersManager( 1 ); break; case ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR: @@ -757,7 +758,8 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) if( itmp >= 0 ) ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = itmp; DrawPanel->MouseToCursorSchema(); - break; + SynchronizeLayersManager( 1 ); + break; case ID_POPUP_PCB_SELECT_CU_LAYER: itmp = SelectLayer( @@ -765,7 +767,8 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) LAST_COPPER_LAYER ); if( itmp >= 0 ) ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = itmp; - break; + SynchronizeLayersManager( 1 ); + break; case ID_POPUP_PCB_SELECT_LAYER_PAIR: SelectLayerPair(); @@ -776,6 +779,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) itmp = m_SelLayerBox->GetChoice(); ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = (int) ( (size_t) m_SelLayerBox->GetClientData( itmp ) ); + SynchronizeLayersManager( 1 ); // Ensure Layer manager synchronization if( DisplayOpt.ContrastModeDisplay ) DrawPanel->Refresh( true ); break; @@ -1134,7 +1138,6 @@ void WinEDA_PcbFrame::SwitchLayer( wxDC* DC, int layer ) if( DisplayOpt.ContrastModeDisplay ) GetScreen()->SetRefreshReq(); } - // if the via was allowed by DRC, then the layer swap has already // been done by Other_Layer_Route(). if via not allowed, then // return now so assignment to m_Active_Layer below doesn't happen. @@ -1149,6 +1152,7 @@ void WinEDA_PcbFrame::SwitchLayer( wxDC* DC, int layer ) // ... GetScreen()->m_Active_Layer = layer; + SynchronizeLayersManager( 1 ); // Ensure Layer manager synchronization if( DisplayOpt.ContrastModeDisplay ) GetScreen()->SetRefreshReq(); diff --git a/pcbnew/editrack-part2.cpp b/pcbnew/editrack-part2.cpp index 4f3b0f2957..4e3e11d7f1 100644 --- a/pcbnew/editrack-part2.cpp +++ b/pcbnew/editrack-part2.cpp @@ -138,6 +138,7 @@ bool WinEDA_PcbFrame::Other_Layer_Route( TRACK* aTrack, wxDC* DC ) UpdateStatusBar(); SetToolbars(); + SynchronizeLayersManager( 1 ); return true; } @@ -292,8 +293,8 @@ bool WinEDA_PcbFrame::Other_Layer_Route( TRACK* aTrack, wxDC* DC ) via->DisplayInfo( this ); UpdateStatusBar(); - SetToolbars(); + SynchronizeLayersManager( 1 ); return true; } diff --git a/pcbnew/hotkeys.cpp b/pcbnew/hotkeys.cpp index 183c8af368..a30fb32c2d 100644 --- a/pcbnew/hotkeys.cpp +++ b/pcbnew/hotkeys.cpp @@ -254,7 +254,6 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct else ll--; SwitchLayer( DC, ll ); -// m_Layers->SelectLayer(GetScreen()->m_Active_Layer); // Ensure Layer manager synchronization break; case HK_SWITCH_LAYER_TO_NEXT: @@ -268,50 +267,38 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct else ll++; SwitchLayer( DC, ll ); -// m_Layers->SelectLayer() must be called, but due to a problem in SetFocus() function -// that creates a lost of focus in main window (hotkeys not working after the first hotkey use) -// this call is commented until this issue is fixed. -// m_Layers->SelectLayer(GetScreen()->m_Active_Layer); // Ensure Layer manager synchronization break; case HK_SWITCH_LAYER_TO_COMPONENT: SwitchLayer( DC, LAYER_N_FRONT ); -// m_Layers->SelectLayer(GetScreen()->m_Active_Layer); // Ensure Layer manager synchronization break; case HK_SWITCH_LAYER_TO_COPPER: SwitchLayer( DC, LAYER_N_BACK ); -// m_Layers->SelectLayer(GetScreen()->m_Active_Layer); // Ensure Layer manager synchronization break; case HK_SWITCH_LAYER_TO_INNER1: SwitchLayer( DC, LAYER_N_2 ); -// m_Layers->SelectLayer(GetScreen()->m_Active_Layer); // Ensure Layer manager synchronization break; case HK_SWITCH_LAYER_TO_INNER2: SwitchLayer( DC, LAYER_N_3 ); -// m_Layers->SelectLayer(GetScreen()->m_Active_Layer); // Ensure Layer manager synchronization break; case HK_SWITCH_LAYER_TO_INNER3: SwitchLayer( DC, LAYER_N_4 ); -// m_Layers->SelectLayer(GetScreen()->m_Active_Layer); // Ensure Layer manager synchronization break; case HK_SWITCH_LAYER_TO_INNER4: SwitchLayer( DC, LAYER_N_5 ); -// m_Layers->SelectLayer(GetScreen()->m_Active_Layer); // Ensure Layer manager synchronization - break; + break; case HK_SWITCH_LAYER_TO_INNER5: SwitchLayer( DC, LAYER_N_6 ); - // m_Layers->SelectLayer(GetScreen()->m_Active_Layer); // Ensure Layer manager synchronization break; case HK_SWITCH_LAYER_TO_INNER6: SwitchLayer( DC, LAYER_N_7 ); -// m_Layers->SelectLayer(GetScreen()->m_Active_Layer); // Ensure Layer manager synchronization break; case HK_HELP: // Display Current hotkey list diff --git a/pcbnew/mirepcb.cpp b/pcbnew/mirepcb.cpp index 58dbea9c24..41e4eb36a0 100644 --- a/pcbnew/mirepcb.cpp +++ b/pcbnew/mirepcb.cpp @@ -222,6 +222,7 @@ MIREPCB* WinEDA_PcbFrame::Create_Mire( wxDC* DC ) MirePcb->SetLayer( EDGE_N ); MirePcb->m_Width = g_DesignSettings.m_EdgeSegmentWidth; MirePcb->m_Size = MireDefaultSize; + MirePcb->m_Pos = DrawPanel->GetScreen()->m_Curseur; Place_Mire( MirePcb, DC ); diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index e4b3fb4b06..03e5904960 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -522,6 +522,14 @@ void WinEDA_PcbFrame::ReFillLayerWidget() } techLayerSeq[] = { /* some layers are not visible nor editable, don't show them for now: + * >> In fact they are useful here because we must be able to change + * the color and visibility because they can be visible. + * slikscreen and adhesive layers are visible (adhesive layer is rarely used) + * Solder mask and solder paste (used for pads) are visible in *Hight Color* + * mode when they are selected + * they are now editable because Pcbnew handle parameters (global and local) + * to calculate pads shapes on these layers + */ { ADHESIVE_N_FRONT, _("Adhesive on board's front") }, { ADHESIVE_N_BACK, _("Adhesive on board's back") }, { SOLDERPASTE_N_FRONT, _("Solder paste on board's front") }, @@ -530,7 +538,6 @@ void WinEDA_PcbFrame::ReFillLayerWidget() { SILKSCREEN_N_BACK, _("Silkscreen on board's back") }, { SOLDERMASK_N_FRONT, _("Solder mask on board's front") }, { SOLDERMASK_N_BACK, _("Solder mask on board's back") }, - */ { DRAW_N, _( "Explanatory drawings" ) }, { COMMENT_N, _( "Explanatory comments" ) }, { ECO1_N, _( "TDB" ) }, @@ -679,3 +686,17 @@ void WinEDA_PcbFrame::SaveSettings() config->Write( SHOW_LAYER_MANAGER_TOOLS, (long)m_show_layer_manager_tools ); } + + +/** Function SynchronizeLayersManager( ) + * Must be called when info displayed in the layer manager Toolbar + * as been changed in the main window ( by hotkey or a tool option. + * Mainly when the active layer as changed. + * @param aFlag = flag giving the type of data (layers, checkboxes...) + */ +void WinEDA_PcbFrame::SynchronizeLayersManager( int aFlag ) +{ + // Ensure Layer manager synchronization for the active layer + if( (aFlag & 1) ) + m_Layers->SelectLayer(GetScreen()->m_Active_Layer); +}