r5011 - trunk/gta02-core/kicad-patches
werner at docs.openmoko.org
werner at docs.openmoko.org
Thu May 21 04:16:20 CEST 2009
Author: werner
Date: 2009-05-21 04:16:19 +0200 (Thu, 21 May 2009)
New Revision: 5011
Added:
trunk/gta02-core/kicad-patches/auto-overline-config.patch
trunk/gta02-core/kicad-patches/auto-overline-screen.patch
trunk/gta02-core/kicad-patches/drag-override.patch
trunk/gta02-core/kicad-patches/fix-pinbypin-button-type.patch
trunk/gta02-core/kicad-patches/gerbview-export-arcs.patch
trunk/gta02-core/kicad-patches/old-boost-build-fix.patch
trunk/gta02-core/kicad-patches/series
Modified:
trunk/gta02-core/kicad-patches/eeschema-plot-only-mode.patch
trunk/gta02-core/kicad-patches/fix-pinedit-collision.patch
Log:
The current quilt patch set for KiCad. Not that most of the patches are
work in progress and are commented out in "series".
Added: trunk/gta02-core/kicad-patches/auto-overline-config.patch
===================================================================
--- trunk/gta02-core/kicad-patches/auto-overline-config.patch (rev 0)
+++ trunk/gta02-core/kicad-patches/auto-overline-config.patch 2009-05-21 02:16:19 UTC (rev 5011)
@@ -0,0 +1,194 @@
+Work in progress.
+
+Add auto-overline configuration options.
+
+Index: kicad/eeschema/dialog_options.cpp
+===================================================================
+--- kicad.orig/eeschema/dialog_options.cpp 2009-05-16 19:19:14.000000000 -0300
++++ kicad/eeschema/dialog_options.cpp 2009-05-19 17:52:42.000000000 -0300
+@@ -146,6 +146,13 @@
+ m_DeltaStepYTitle->SetLabel( title );
+
+ m_DeltaLabelCtrl->SetValue( g_RepeatDeltaLabel );
++
++ m_AutoOverlinePins->SetValue(g_AutoOverlinePins);
++ m_AutoOverlineNetsLabels->SetValue(g_AutoOverlineNetsLabels);
++ m_AutoOverlineText->SetValue(g_AutoOverlineText);
++ m_AutoOverlinePrefixes->SetValue(g_AutoOverlinePrefixes);
++ m_AutoOverlineSeparators->SetValue(g_AutoOverlineSeparators);
++ m_AutoOverlineKeepPrefix->SetValue(g_AutoOverlineKeepPrefix);
+ }
+
+
+@@ -177,6 +184,12 @@
+ m_DeltaStepCtrl_Y = NULL;
+ m_DeltaIncTitle = NULL;
+ m_DeltaLabelCtrl = NULL;
++ m_AutoOverlinePins = NULL;
++ m_AutoOverlineNetsLabels = NULL;
++ m_AutoOverlineText = NULL;
++ m_AutoOverlinePrefixes = NULL;
++ m_AutoOverlineSeparators = NULL;
++ m_AutoOverlineKeepPrefix = NULL;
+ ////@end WinEDA_SetOptionsFrame member initialisation
+
+ ////@begin WinEDA_SetOptionsFrame creation
+@@ -268,6 +281,58 @@
+ m_Show_Page_Limits->SetSelection(0);
+ itemBoxSizer8->Add(m_Show_Page_Limits, 0, wxGROW|wxALL, 5);
+
++
++ wxBoxSizer* itemBoxSizer19 = new wxBoxSizer(wxVERTICAL);
++ itemBoxSizer2->Add(itemBoxSizer19, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
++
++ wxStaticBox* itemStaticBoxSizer20Static = new wxStaticBox(itemDialog1,
++ wxID_ANY, _("Auto-overline"));
++ wxStaticBoxSizer* itemStaticBoxSizer20 = new
++ wxStaticBoxSizer(itemStaticBoxSizer20Static, wxVERTICAL);
++ itemBoxSizer19->Add(itemStaticBoxSizer20, 0,
++ wxALIGN_CENTER_HORIZONTAL | wxALL, 5);
++
++ m_AutoOverlinePins = new wxCheckBox( itemDialog1, ID_CHECKBOX1,
++ _("Pins"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
++ m_AutoOverlinePins->SetValue(FALSE);
++ itemStaticBoxSizer20->Add(m_AutoOverlinePins, 0,
++ wxALIGN_LEFT | wxALL, 5);
++
++ m_AutoOverlineNetsLabels = new wxCheckBox( itemDialog1, ID_CHECKBOX1,
++ _("Nets and labels"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
++ m_AutoOverlineNetsLabels->SetValue(FALSE);
++ itemStaticBoxSizer20->Add(m_AutoOverlineNetsLabels, 0,
++ wxALIGN_LEFT | wxALL, 5);
++
++ m_AutoOverlineText = new wxCheckBox( itemDialog1, ID_CHECKBOX1,
++ _("Text"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
++ m_AutoOverlineText->SetValue(FALSE);
++ itemStaticBoxSizer20->Add(m_AutoOverlineText, 0,
++ wxALIGN_LEFT | wxALL, 5);
++
++ itemStaticBoxSizer20->Add(new wxStaticText( itemDialog1, wxID_STATIC,
++ _("Prefixes"), wxDefaultPosition, wxDefaultSize, 0 ),
++ 0, wxALIGN_LEFT | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE, 5);
++
++ m_AutoOverlinePrefixes = new wxTextCtrl( itemDialog1, ID_TEXTCTRL,
++ _T("n#"), wxDefaultPosition, wxDefaultSize, 0 );
++ itemStaticBoxSizer20->Add(m_AutoOverlinePrefixes, 0, wxGROW | wxALL, 5);
++
++ itemStaticBoxSizer20->Add(new wxStaticText( itemDialog1, wxID_STATIC,
++ _("Separators"), wxDefaultPosition, wxDefaultSize, 0 ),
++ 0, wxALIGN_LEFT | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE, 5);
++
++ m_AutoOverlineSeparators = new wxTextCtrl( itemDialog1, ID_TEXTCTRL,
++ _T("/,"), wxDefaultPosition, wxDefaultSize, 0 );
++ itemStaticBoxSizer20->Add(m_AutoOverlineSeparators, 0, wxGROW | wxALL, 5);
++
++ m_AutoOverlineKeepPrefix = new wxCheckBox( itemDialog1, ID_CHECKBOX1,
++ _("Keep prefix"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
++ m_AutoOverlineKeepPrefix->SetValue(TRUE);
++ itemStaticBoxSizer20->Add(m_AutoOverlineKeepPrefix, 0,
++ wxALIGN_LEFT | wxALL, 5);
++
++
+ wxBoxSizer* itemBoxSizer14 = new wxBoxSizer(wxVERTICAL);
+ itemBoxSizer2->Add(itemBoxSizer14, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+@@ -302,6 +367,11 @@
+ m_DeltaLabelCtrl = new wxSpinCtrl( itemDialog1, ID_SPINCTRL, _T("0"), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -16, 16, 0 );
+ itemStaticBoxSizer18->Add(m_DeltaLabelCtrl, 0, wxGROW|wxALL, 5);
+
++
++ m_DeltaStepXTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Delta Step X"), wxDefaultPosition, wxDefaultSize, 0 );
++ itemStaticBoxSizer18->Add(m_DeltaStepXTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
++
++
+ ////@end WinEDA_SetOptionsFrame content construction
+
+ m_btClose->SetFocus();
+@@ -474,4 +544,11 @@
+ m_Parent->GetBaseScreen()->SetGrid( grid );
+ m_Parent->GetBaseScreen()->SetRefreshReq();
+ }
++
++ g_AutoOverlinePins = m_AutoOverlinePins->GetValue();
++ g_AutoOverlineNetsLabels = m_AutoOverlineNetsLabels->GetValue();
++ g_AutoOverlineText = m_AutoOverlineText->GetValue();
++ g_AutoOverlinePrefixes = m_AutoOverlinePrefixes->GetValue();
++ g_AutoOverlineSeparators = m_AutoOverlineSeparators->GetValue();
++ g_AutoOverlineKeepPrefix= m_AutoOverlineKeepPrefix->GetValue();
+ }
+Index: kicad/eeschema/dialog_options.h
+===================================================================
+--- kicad.orig/eeschema/dialog_options.h 2009-05-16 19:19:14.000000000 -0300
++++ kicad/eeschema/dialog_options.h 2009-05-19 17:52:42.000000000 -0300
+@@ -129,6 +129,12 @@
+ wxTextCtrl* m_DeltaStepCtrl_Y;
+ wxStaticText* m_DeltaIncTitle;
+ wxSpinCtrl* m_DeltaLabelCtrl;
++ wxCheckBox* m_AutoOverlinePins;
++ wxCheckBox* m_AutoOverlineNetsLabels;
++ wxCheckBox* m_AutoOverlineText;
++ wxTextCtrl* m_AutoOverlinePrefixes;
++ wxTextCtrl* m_AutoOverlineSeparators;
++ wxCheckBox* m_AutoOverlineKeepPrefix;
+ ////@end WinEDA_SetOptionsFrame member variables
+
+ WinEDA_ValueCtrl * m_DefaultDrawLineWidthCtrl;
+Index: kicad/eeschema/eeconfig.cpp
+===================================================================
+--- kicad.orig/eeschema/eeconfig.cpp 2009-05-16 19:19:14.000000000 -0300
++++ kicad/eeschema/eeconfig.cpp 2009-05-19 17:52:42.000000000 -0300
+@@ -20,6 +20,14 @@
+ #include "hotkeys.h"
+
+
++bool g_AutoOverlinePins;
++bool g_AutoOverlineNetsLabels;
++bool g_AutoOverlineText;
++wxString g_AutoOverlinePrefixes;
++wxString g_AutoOverlineSeparators;
++bool g_AutoOverlineKeepPrefix;
++
++
+ /* Variables locales */
+
+
+@@ -219,6 +227,19 @@
+ &g_DefaultTextLabelSize,
+ DEFAULT_SIZE_TEXT, 0, 1000 ) );
+
++ m_projectFileParams.Add( new PARAM_CFG_BOOL(
++ wxT( "AutoOverlinePins" ), &g_AutoOverlinePins ) );
++ m_projectFileParams.Add( new PARAM_CFG_BOOL(
++ wxT( "AutoOverlineNetsLabels" ), &g_AutoOverlineNetsLabels ) );
++ m_projectFileParams.Add( new PARAM_CFG_BOOL(
++ wxT( "AutoOverlineText" ), &g_AutoOverlineText ) );
++ m_projectFileParams.Add( new PARAM_CFG_WXSTRING(
++ wxT( "AutoOverlinePrefixes" ), &g_AutoOverlinePrefixes ) );
++ m_projectFileParams.Add( new PARAM_CFG_WXSTRING(
++ wxT( "AutoOverlineSeparators" ), &g_AutoOverlineSeparators) );
++ m_projectFileParams.Add( new PARAM_CFG_BOOL(
++ wxT( "AutoOverlineKeepPrefix" ), &g_AutoOverlineKeepPrefix ) );
++
+ return m_projectFileParams;
+ }
+
+Index: kicad/eeschema/general.h
+===================================================================
+--- kicad.orig/eeschema/general.h 2009-05-16 19:19:14.000000000 -0300
++++ kicad/eeschema/general.h 2009-05-19 17:52:42.000000000 -0300
+@@ -120,6 +120,15 @@
+ extern int g_PlotPSColorOpt; // True = plot postcript color (see plotps.cpp)
+
+
++// Auto-overline
++
++extern bool g_AutoOverlinePins;
++extern bool g_AutoOverlineNetsLabels;
++extern bool g_AutoOverlineText;
++extern wxString g_AutoOverlinePrefixes;
++extern wxString g_AutoOverlineSeparators;
++extern bool g_AutoOverlineKeepPrefix;
++
+ // Gestion de diverses variables, options... devant etre memorisees mais
+ // Remises a 0 lors d'un rechargement de projetc
+ struct EESchemaVariables
Added: trunk/gta02-core/kicad-patches/auto-overline-screen.patch
===================================================================
--- trunk/gta02-core/kicad-patches/auto-overline-screen.patch (rev 0)
+++ trunk/gta02-core/kicad-patches/auto-overline-screen.patch 2009-05-21 02:16:19 UTC (rev 5011)
@@ -0,0 +1,130 @@
+Work in progress.
+
+Auto-overline string processing for pins. Note the the logic only works
+if the pin is not multi-purpose. Doesn't draw the overline.
+
+Index: kicad/eeschema/class_pin.cpp
+===================================================================
+--- kicad.orig/eeschema/class_pin.cpp 2009-05-16 19:19:14.000000000 -0300
++++ kicad/eeschema/class_pin.cpp 2009-05-19 17:52:42.000000000 -0300
+@@ -435,6 +435,39 @@
+ }
+
+
++static bool do_overline(const wchar_t **res, const wchar_t *s)
++{
++ const wchar_t *sep, *next;
++
++ *res = s;
++ if (!g_AutoOverlinePins || !g_AutoOverlinePrefixes)
++ return FALSE;
++
++ while (1) {
++ /* see if we have a prefix match */
++ if (wcsrchr(g_AutoOverlinePrefixes, *s))
++ break;
++
++ /* skip to the next separator */
++ for (sep = g_AutoOverlineSeparators; sep && *sep; sep++) {
++ next = wcsrchr(s, *sep);
++ if (next)
++ break;
++ }
++ if (!next)
++ return FALSE;
++ s = next+1;
++ if (!*s)
++ return FALSE; /* name ends with a separator */
++ }
++
++ /* we have a prefix match */
++ if (!g_AutoOverlineKeepPrefix)
++ *res = s[1] ? s+1 : L"?";
++ return TRUE;
++}
++
++
+ /*****************************************************************************
+ * Put out pin number and pin text info, given the pin line coordinates.
+ * The line must be vertical or horizontal.
+@@ -500,6 +533,10 @@
+ DrawPinName = FALSE;
+ PinTxtLen = (int) ( fPinTextPitch * PinTxtLen );
+
++ const wchar_t *name;
++
++ do_overline(&name, m_PinName);
++
+ if( TextInside ) /* Draw the text inside, but the pin numbers outside. */
+ {
+ if( (orient == PIN_LEFT) || (orient == PIN_RIGHT) )
+@@ -511,7 +548,7 @@
+ {
+ x = x1 + TextInside;
+ DrawGraphicText( panel, DC, wxPoint( x, y1 ), NameColor,
+- m_PinName,
++ name,
+ TEXT_ORIENT_HORIZ,
+ PinNameSize,
+ GR_TEXT_HJUSTIFY_LEFT,
+@@ -522,7 +559,7 @@
+ {
+ x = x1 - TextInside;
+ DrawGraphicText( panel, DC, wxPoint( x, y1 ), NameColor,
+- m_PinName,
++ name,
+ TEXT_ORIENT_HORIZ,
+ PinNameSize,
+ GR_TEXT_HJUSTIFY_RIGHT,
+@@ -551,7 +588,7 @@
+
+ if( DrawPinName )
+ DrawGraphicText( panel, DC, wxPoint( x1, y ), NameColor,
+- m_PinName,
++ name,
+ TEXT_ORIENT_VERT, PinNameSize,
+ GR_TEXT_HJUSTIFY_RIGHT,
+ GR_TEXT_VJUSTIFY_CENTER, LineWidth,
+@@ -571,7 +608,7 @@
+
+ if( DrawPinName )
+ DrawGraphicText( panel, DC, wxPoint( x1, y ), NameColor,
+- m_PinName,
++ name,
+ TEXT_ORIENT_VERT, PinNameSize,
+ GR_TEXT_HJUSTIFY_LEFT,
+ GR_TEXT_VJUSTIFY_CENTER, LineWidth,
+@@ -597,7 +634,7 @@
+ x = (x1 + pin_pos.x) / 2;
+ DrawGraphicText( panel, DC, wxPoint( x,
+ y1 - TXTMARGE ),
+- NameColor, m_PinName,
++ NameColor, name,
+ TEXT_ORIENT_HORIZ, PinNameSize,
+ GR_TEXT_HJUSTIFY_CENTER,
+ GR_TEXT_VJUSTIFY_BOTTOM, LineWidth,
+@@ -622,7 +659,7 @@
+ y = (y1 + pin_pos.y) / 2;
+ DrawGraphicText( panel, DC, wxPoint( x1 - TXTMARGE,
+ y ),
+- NameColor, m_PinName,
++ NameColor, name,
+ TEXT_ORIENT_VERT, PinNameSize,
+ GR_TEXT_HJUSTIFY_CENTER,
+ GR_TEXT_VJUSTIFY_BOTTOM, LineWidth, false, true );
+Index: kicad/eeschema/classes_body_items.cpp
+===================================================================
+--- kicad.orig/eeschema/classes_body_items.cpp 2009-05-16 19:19:14.000000000 -0300
++++ kicad/eeschema/classes_body_items.cpp 2009-05-19 17:52:42.000000000 -0300
+@@ -562,7 +562,10 @@
+ * transformation matrix causes xy axes to be flipped. */
+ int t1 = ( aTransformMatrix[0][0] != 0 ) ^ ( m_Orient != 0 );
+
+- DrawGraphicText( aPanel, aDC, pos1, (EDA_Colors) color, m_Text,
++// wxString foo = mText;
++ wxString foo = wxT( "BAEH" );
++
++ DrawGraphicText( aPanel, aDC, pos1, (EDA_Colors) color, foo,
+ t1 ? TEXT_ORIENT_HORIZ : TEXT_ORIENT_VERT,
+ m_Size, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER,
+ linewidth, m_Italic );
Added: trunk/gta02-core/kicad-patches/drag-override.patch
===================================================================
--- trunk/gta02-core/kicad-patches/drag-override.patch (rev 0)
+++ trunk/gta02-core/kicad-patches/drag-override.patch 2009-05-21 02:16:19 UTC (rev 5011)
@@ -0,0 +1,136 @@
+Work in progress.
+
+Try to use dragging of tracks and joints ("nodes") to directly drag
+them, without involving intermediate menus.
+
+Index: kicad/common/drawpanel.cpp
+===================================================================
+--- kicad.orig/common/drawpanel.cpp 2009-04-28 17:43:26.000000000 -0300
++++ kicad/common/drawpanel.cpp 2009-04-29 13:37:21.000000000 -0300
+@@ -1151,17 +1151,21 @@
+ MinDragEventCount++;
+ else
+ {
+- if( !m_Parent->HandleBlockBegin( &DC, cmd_type, m_CursorStartPos ) )
+- {
+- // should not occurs: error
+- m_Parent->DisplayToolMsg(
+- wxT( "WinEDA_DrawPanel::OnMouseEvent() Block Error" ) );
+- }
+- else
+- {
+- m_AutoPAN_Request = TRUE;
+- SetCursor( m_PanelCursor = wxCURSOR_SIZING );
+- }
++fprintf(stderr, "HBB %p\n", m_Parent);
++ if( !m_Parent->DragOverride( &DC, m_CursorStartPos)) {
++ if( !m_Parent->HandleBlockBegin( &DC, cmd_type,
++ m_CursorStartPos ) )
++ {
++ // should not occurs: error
++ m_Parent->DisplayToolMsg(
++ wxT( "WinEDA_DrawPanel::OnMouseEvent() Block Error" ) );
++ }
++ else
++ {
++ m_AutoPAN_Request = TRUE;
++ SetCursor( m_PanelCursor = wxCURSOR_SIZING );
++ }
++ }
+ }
+ }
+ }
+@@ -1191,6 +1195,7 @@
+ else if( screen->BlockLocate.m_State == STATE_BLOCK_END )
+ {
+ m_AutoPAN_Request = FALSE;
++fprintf(stderr, "END %p\n", m_Parent);
+ m_Parent->HandleBlockEnd( &DC );
+ SetCursor( m_PanelCursor = m_PanelDefaultCursor );
+ if( screen->BlockLocate.m_State == STATE_BLOCK_MOVE )
+Index: kicad/include/wxPcbStruct.h
+===================================================================
+--- kicad.orig/include/wxPcbStruct.h 2009-04-28 17:35:37.000000000 -0300
++++ kicad/include/wxPcbStruct.h 2009-04-28 18:27:46.000000000 -0300
+@@ -429,6 +429,8 @@
+ void HandleBlockPlace( wxDC* DC );
+ int HandleBlockEnd( wxDC* DC );
+
++ bool DragOverride( wxDC* DC, const wxPoint& MousePos );
++
+ void SetToolbars();
+ void Process_Settings( wxCommandEvent& event );
+ void InstallPcbOptionsFrame( const wxPoint& pos, wxDC* DC, int id );
+Index: kicad/include/wxstruct.h
+===================================================================
+--- kicad.orig/include/wxstruct.h 2009-04-28 17:35:37.000000000 -0300
++++ kicad/include/wxstruct.h 2009-04-29 14:16:05.000000000 -0300
+@@ -293,6 +293,8 @@
+ virtual void HandleBlockPlace( wxDC* DC );
+ virtual int HandleBlockEnd( wxDC* DC );
+
++ virtual bool DragOverride( wxDC* DC, const wxPoint& MousePos );
++
+ void CopyToClipboard( wxCommandEvent& event );
+
+ /* interprocess communication */
+@@ -398,7 +400,7 @@
+ // Constructor and destructor
+ WinEDA_EnterText( wxWindow* parent, const wxString& Title,
+ const wxString& TextToEdit, wxBoxSizer* BoxSizer,
+- const wxSize& Size );
++ const wxSize& Size, bool Multiline = false );
+
+ ~WinEDA_EnterText()
+ {
+Index: kicad/pcbnew/block.cpp
+===================================================================
+--- kicad.orig/pcbnew/block.cpp 2009-04-28 17:35:37.000000000 -0300
++++ kicad/pcbnew/block.cpp 2009-04-29 14:25:14.000000000 -0300
+@@ -396,6 +396,29 @@
+ }
+
+
++/*********************************************************************/
++bool WinEDA_PcbFrame::DragOverride( wxDC* DC, const wxPoint& MousePos )
++/*********************************************************************/
++{
++ wxPoint cursorPosition = GetScreen()->m_Curseur;
++ BOARD_ITEM* item = GetCurItem();
++
++fprintf(stderr, "DragOverride %p\n", item);
++ if (!item)
++ return FALSE;
++fprintf(stderr, "%u\n", item->Type());
++ if (item->Type() != TYPE_TRACK)
++ return FALSE;
++
++ TRACK* Track = (TRACK*) item;
++
++ if (!Track->IsPointOnEnds( cursorPosition, -1 ))
++ return FALSE;
++ fprintf(stderr, "TOUCHE!\n");
++ return TRUE;
++}
++
++
+ /**************************************************************************/
+ static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase )
+ /**************************************************************************/
+Index: kicad/common/drawframe.cpp
+===================================================================
+--- kicad.orig/common/drawframe.cpp 2009-04-28 18:30:44.000000000 -0300
++++ kicad/common/drawframe.cpp 2009-04-29 14:24:49.000000000 -0300
+@@ -546,6 +546,12 @@
+ }
+
+
++bool WinEDA_DrawFrame::DragOverride( wxDC* DC, const wxPoint& MousePos )
++{
++ return FALSE;
++}
++
++
+ /*********************************************/
+ void WinEDA_DrawFrame::AdjustScrollBars()
+ /*********************************************/
Modified: trunk/gta02-core/kicad-patches/eeschema-plot-only-mode.patch
===================================================================
--- trunk/gta02-core/kicad-patches/eeschema-plot-only-mode.patch 2009-05-20 10:07:01 UTC (rev 5010)
+++ trunk/gta02-core/kicad-patches/eeschema-plot-only-mode.patch 2009-05-21 02:16:19 UTC (rev 5011)
@@ -6,20 +6,19 @@
This lets shell scripts generate plots, i.e., of schematics that have
been processed by these scripts.
-Known issue: if there is an error that causes a dialog to be brought
-up, eeschema will just hang, waiting for the user to click the dialog
-away on the invisible window.
+Known issue: if there is an error or a warning, eeschema will bring up
+a dialog instead of just exiting.
-This patch is for KiCad SVN revision 1768.
+This patch is for KiCad SVN revision 1771.
-Signed-off-by: Werner Almesberger <werner at openmoko.org>
+- Werner
---
Index: kicad/eeschema/eeschema.cpp
===================================================================
---- kicad.orig/eeschema/eeschema.cpp 2009-05-15 15:53:27.000000000 -0300
-+++ kicad/eeschema/eeschema.cpp 2009-05-15 16:08:53.000000000 -0300
+--- kicad.orig/eeschema/eeschema.cpp 2009-05-19 17:52:29.000000000 -0300
++++ kicad/eeschema/eeschema.cpp 2009-05-19 17:52:41.000000000 -0300
@@ -12,6 +12,7 @@
#include "general.h"
#include "bitmaps.h"
@@ -28,65 +27,83 @@
#include "libcmp.h"
#include "protos.h"
-@@ -137,12 +138,23 @@
- {
- wxFileName fn;
- WinEDA_SchematicFrame* frame = NULL;
-+ bool plot_only = FALSE;
+@@ -122,6 +123,69 @@
+ int DefaultTransformMatrix[2][2] = { { 1, 0 }, { 0, -1 } };
- g_DebugLevel = 0; // Debug level */
- InitEDA_Appl( wxT( "EESchema" ), APP_TYPE_EESCHEMA );
-
-- if( m_Checker && m_Checker->IsAnotherRunning() )
-+ if (argc > 1 && !wxStrcmp(argv[1], wxT("--plot"))) {
-+ if (argc < 3) {
-+ fprintf(stderr, "usage: %ls [[--plot] filename]\n", *argv);
-+ exit(1);
-+ }
-+ plot_only = TRUE;
-+ argc--;
-+ argv++;
++/*
++ * "PlotOnly" is a quick and dirty implementation of a non-interactive plot
++ * mode.
++ *
++ * This is neither a nice nor a complete implementation of this concept. E.g.,
++ * if there are any errors, KiCad may bring up a dialog instead of just
++ * exiting.
++ *
++ * However, this is the best we can do without making considerably intrusive
++ * changes to the internals of KiCad.
++ */
++
++
++static void PlotOnly( WinEDA_App* app )
++{
++ WinEDA_SchematicFrame* frame;
++ wxFileName fn;
++
++ if( app->argc < 3 )
++ {
++ fprintf( stderr, "usage: %ls [[--plot] filename]\n", *app->argv );
++ exit( 1 );
+ }
+
-+ if( !plot_only && m_Checker && m_Checker->IsAnotherRunning() )
- {
- if( !IsOK( NULL, _( "Eeschema is already running, Continue?" ) ) )
- return false;
-@@ -164,9 +176,9 @@
- wxPoint( 0, 0 ), wxSize( 600, 400 ) );
++ fn = app->argv[2];
++ if( !fn.IsOk() )
++ {
++ fprintf( stderr, "%ls: bad name\n", app->argv[2] );
++ exit(1);
++ }
++
++ /* init EESCHEMA */
++ SeedLayers();
++ app->GetSettings();
++
++ // Create main frame (schematic frame) :
++ frame = new WinEDA_SchematicFrame( NULL, wxT( "EESchema" ),
++ wxPoint( 0, 0 ), wxSize( 600, 400 ) );
++
++ app->SetTopWindow( frame );
++ frame->Show( FALSE );
++
++ ActiveScreen = frame->GetScreen();
++
++ /* Load file specified in the command line. */
++ if( fn.GetExt() != SchematicFileExtension )
++ fn.SetExt( SchematicFileExtension );
++ wxSetWorkingDirectory( fn.GetPath() );
++ if( !frame->LoadOneEEProject( fn.GetFullPath(), false ) )
++ {
++ fprintf( stderr, "%ls: can't load\n", app->argv[2] );
++ exit( 1 );
++ }
++
++ WinEDA_PlotPSFrame* Ps_frame = new WinEDA_PlotPSFrame( frame );
++ wxCommandEvent dummy;
++
++ Ps_frame->OnPlotPsAllExecuteClick( dummy );
++
++ exit( 0 );
++}
++
++
+ /************************************/
+ /* Called to initialize the program */
+ /************************************/
+@@ -142,6 +206,9 @@
- SetTopWindow( frame );
-- frame->Show( TRUE );
-+ frame->Show( !plot_only );
+ InitEDA_Appl( wxT( "EESchema" ), APP_TYPE_EESCHEMA );
-- if( CreateServer( frame, KICAD_SCH_PORT_SERVICE_NUMBER ) )
-+ if( !plot_only && CreateServer( frame, KICAD_SCH_PORT_SERVICE_NUMBER ) )
- {
- // RemoteCommand is in controle.cpp and is called when PCBNEW
- // sends EESCHEMA a command
-@@ -185,6 +197,15 @@
- if( frame->DrawPanel
- && frame->LoadOneEEProject( fn.GetFullPath(), false ) <= 0 )
- frame->DrawPanel->Refresh( true );
-+ else {
-+ if (plot_only) {
-+ WinEDA_PlotPSFrame* Ps_frame = new WinEDA_PlotPSFrame( frame );
-+ wxCommandEvent dummy;
++ if( argc > 1 && !wxStrcmp( argv[1], wxT( "--plot" ) ) )
++ PlotOnly( this );
+
-+ Ps_frame->OnPlotPsAllExecuteClick(dummy);
-+ exit(0);
-+ }
-+ }
- }
- else
+ if( m_Checker && m_Checker->IsAnotherRunning() )
{
-@@ -194,5 +215,8 @@
- frame->DrawPanel->Refresh( TRUE );
- }
-
-+ if (plot_only)
-+ exit(1);
-+
- return TRUE;
- }
+ if( !IsOK( NULL, _( "Eeschema is already running, Continue?" ) ) )
Added: trunk/gta02-core/kicad-patches/fix-pinbypin-button-type.patch
===================================================================
--- trunk/gta02-core/kicad-patches/fix-pinbypin-button-type.patch (rev 0)
+++ trunk/gta02-core/kicad-patches/fix-pinbypin-button-type.patch 2009-05-21 02:16:19 UTC (rev 5011)
@@ -0,0 +1,22 @@
+The pin-by-pin button in the component editor was a push button, not
+a check button. It therefore worked as a toggle, as intended, but
+lacked visual feedback.
+
+- Werner
+
+---
+
+Index: kicad/eeschema/tool_lib.cpp
+===================================================================
+--- kicad.orig/eeschema/tool_lib.cpp 2009-05-20 22:40:19.000000000 -0300
++++ kicad/eeschema/tool_lib.cpp 2009-05-20 22:40:42.000000000 -0300
+@@ -214,7 +214,8 @@
+ m_HToolBar->AddSeparator();
+ m_HToolBar->AddTool( ID_LIBEDIT_EDIT_PIN_BY_PIN, wxEmptyString,
+ wxBitmap( pin2pin_xpm ),
+- _( "Edit pins part per part (Carefully use!)" ) );
++ _( "Edit pins part per part (Carefully use!)" ),
++ wxITEM_CHECK );
+ m_HToolBar->ToggleTool( ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn );
+
+ // after adding the buttons to the toolbar, must call Realize() to reflect the changes
Modified: trunk/gta02-core/kicad-patches/fix-pinedit-collision.patch
===================================================================
--- trunk/gta02-core/kicad-patches/fix-pinedit-collision.patch 2009-05-20 10:07:01 UTC (rev 5010)
+++ trunk/gta02-core/kicad-patches/fix-pinedit-collision.patch 2009-05-21 02:16:19 UTC (rev 5011)
@@ -2,20 +2,24 @@
KiCad warns about pin locations being occupied even if the conflicting
pin is in a different unit.
-This may to be unnecessary. This patch suppresses the warning if the
-pins are in different units.
+I've attached a patch that suppresses the warning if the pins are in
+different units and if we're in pin-by-pin mode, and thus conflicts
+can neither occur at the GUI nor in the underlying model.
- Werner
+---
+
Index: kicad/eeschema/pinedit.cpp
===================================================================
---- kicad.orig/eeschema/pinedit.cpp 2009-05-20 05:21:13.000000000 -0300
-+++ kicad/eeschema/pinedit.cpp 2009-05-20 05:35:53.000000000 -0300
-@@ -193,6 +193,9 @@
+--- kicad.orig/eeschema/pinedit.cpp 2009-05-20 22:30:20.000000000 -0300
++++ kicad/eeschema/pinedit.cpp 2009-05-20 22:30:58.000000000 -0300
+@@ -193,6 +193,10 @@
continue;
if( newpos != Pin->m_Pos )
continue;
-+ if( Pin->m_Unit != CurrentPin->m_Unit &&
++ if( g_EditPinByPinIsOn &&
++ Pin->m_Unit != CurrentPin->m_Unit &&
+ Pin->m_Unit && CurrentPin->m_Unit )
+ continue;
if( Pin->m_Flags )
Added: trunk/gta02-core/kicad-patches/gerbview-export-arcs.patch
===================================================================
--- trunk/gta02-core/kicad-patches/gerbview-export-arcs.patch (rev 0)
+++ trunk/gta02-core/kicad-patches/gerbview-export-arcs.patch 2009-05-21 02:16:19 UTC (rev 5011)
@@ -0,0 +1,102 @@
+Work in progress.
+
+Add support for exporting arcs to gerbview.
+
+Index: kicad/gerbview/export_to_pcbnew.cpp
+===================================================================
+--- kicad.orig/gerbview/export_to_pcbnew.cpp 2009-05-19 18:57:52.000000000 -0300
++++ kicad/gerbview/export_to_pcbnew.cpp 2009-05-19 20:49:23.000000000 -0300
+@@ -94,7 +94,7 @@
+
+ fprintf( File, "$SETUP\n" );
+ sprintf( text, "InternalUnit %f INCH\n", 1.0 / PCB_INTERNAL_UNIT );
+- fprintf( File, text );
++ fprintf( File, "%s", text );
+
+ Pcb->m_BoardSettings->m_CopperLayerCount = g_DesignSettings.m_CopperLayerCount;
+ fprintf( File, "Layers %d\n", g_DesignSettings.m_CopperLayerCount );
+@@ -165,6 +165,20 @@
+ drawitem->m_End = track->m_End;
+ drawitem->m_Width = track->m_Width;
+
++ if( track->m_Shape == S_ARC )
++ {
++ double cx = -track->m_Param;
++ double cy = track->GetSubNet();
++ double a = atan2( track->m_Start.y-cy, track->m_Start.x-cx );
++ double b = atan2( track->m_End.y-cy, track->m_End.x-cx );
++
++ drawitem->m_Shape = S_ARC;
++ drawitem->m_Angle = (b-a)/M_PI*1800.0;
++ drawitem->m_End = drawitem->m_Start;
++ drawitem->m_Start.x = cx;
++ drawitem->m_Start.y = cy;
++ }
++
+ pcb->Add( drawitem );
+ }
+ else
+@@ -198,6 +212,9 @@
+ newtrack->SetLayer( pcb_layer_number );
+ }
+
++fprintf(stderr, "%d %d\n", track->m_Shape, newtrack->m_Shape);
++//if (newtrack->m_Shape == S_ARC_RECT)
++// newtrack->m_Shape = S_ARC;
+ pcb->Add( newtrack );
+ }
+ }
+Index: kicad/gerbview/rs274d.cpp
+===================================================================
+--- kicad.orig/gerbview/rs274d.cpp 2009-05-19 19:38:42.000000000 -0300
++++ kicad/gerbview/rs274d.cpp 2009-05-19 19:39:24.000000000 -0300
+@@ -11,6 +11,9 @@
+ #include "pcbplot.h"
+ #include "protos.h"
+
++#undef D
++#define D(x)
++
+ #define IsNumber( x ) ( ( ( (x) >= '0' ) && ( (x) <='9' ) ) \
+ || ( (x) == '-' ) || ( (x) == '+' ) || ( (x) == '.' ) )
+
+Index: kicad/gerbview/rs274x.cpp
+===================================================================
+--- kicad.orig/gerbview/rs274x.cpp 2009-05-19 19:40:34.000000000 -0300
++++ kicad/gerbview/rs274x.cpp 2009-05-19 19:40:41.000000000 -0300
+@@ -10,6 +10,9 @@
+ #include "pcbplot.h"
+ #include "protos.h"
+
++#undef D
++#define D(x)
++
+ #define CODE( x, y ) ( ( (x) << 8 ) + (y) )
+
+ enum RS274X_PARAMETERS {
+Index: kicad/gerbview/tracepcb.cpp
+===================================================================
+--- kicad.orig/gerbview/tracepcb.cpp 2009-05-19 19:36:58.000000000 -0300
++++ kicad/gerbview/tracepcb.cpp 2009-05-19 19:37:04.000000000 -0300
+@@ -129,7 +129,7 @@
+ if( !(track->ReturnMaskLayer() & printmasklayer) )
+ continue;
+
+- D(printf("D:%p\n", track );)
++ //D(printf("D:%p\n", track );)
+
+ if( track->GetNet() == 0 ) // StartPoint
+ {
+Index: kicad/gerbview/trpiste.cpp
+===================================================================
+--- kicad.orig/gerbview/trpiste.cpp 2009-05-19 19:36:58.000000000 -0300
++++ kicad/gerbview/trpiste.cpp 2009-05-19 19:37:15.000000000 -0300
+@@ -43,7 +43,7 @@
+ if( !(track->ReturnMaskLayer() & printmasklayer) )
+ continue;
+
+- D(printf("D:%p\n", track );)
++ //D(printf("D:%p\n", track );)
+
+ if( dcode_hightlight == track->GetNet() && track->GetLayer()==layer )
+ Trace_Segment( panel, DC, track, draw_mode | GR_SURBRILL );
Added: trunk/gta02-core/kicad-patches/old-boost-build-fix.patch
===================================================================
--- trunk/gta02-core/kicad-patches/old-boost-build-fix.patch (rev 0)
+++ trunk/gta02-core/kicad-patches/old-boost-build-fix.patch 2009-05-21 02:16:19 UTC (rev 5011)
@@ -0,0 +1,30 @@
+If an old version of Boost is installed, KiCad will fail to compile
+because BOOST_REVERSE_FOREACH is not defined. This quick and dirty
+patch avoids the build error but may cause other problems.
+
+http://tech.groups.yahoo.com/group/kicad-devel/message/2574
+
+- Werner
+
+---
+
+Index: kicad/cvpcb/cvframe.cpp
+===================================================================
+--- kicad.orig/cvpcb/cvframe.cpp 2009-05-15 15:53:38.000000000 -0300
++++ kicad/cvpcb/cvframe.cpp 2009-05-15 15:57:30.000000000 -0300
+@@ -369,6 +369,7 @@
+ if( selection < 0 )
+ selection = m_ListCmp->GetCount() - 1;
+
++#if 0
+ BOOST_REVERSE_FOREACH( COMPONENT& component, m_components )
+ {
+ if( component.m_Module.IsEmpty() && ii < selection )
+@@ -378,6 +379,7 @@
+ }
+ ii--;
+ }
++#endif
+
+ wxBell();
+ m_ListCmp->SetSelection( selection );
Added: trunk/gta02-core/kicad-patches/series
===================================================================
--- trunk/gta02-core/kicad-patches/series (rev 0)
+++ trunk/gta02-core/kicad-patches/series 2009-05-21 02:16:19 UTC (rev 5011)
@@ -0,0 +1,19 @@
+# DON'T USE THE FOLLOWING PATCH UNLESS DESPERATE
+old-boost-build-fix.patch
+
+# eeschema --plot extension, pending
+eeschema-plot-only-mode.patch
+
+# pending work, will perhaps be implemented in an entirely different fashion
+##auto-overline-config.patch
+##auto-overline-screen.patch
+
+# pending
+fix-pinbypin-button-type.patch
+
+# under discussion
+fix-pinedit-collision.patch
+
+# Work in progress
+#drag-override.patch
+#gerbview-export-arcs.patch
More information about the commitlog
mailing list