← Back to team overview

kicad-developers team mailing list archive

[patch 1/1] kicad-kicad-project-multiple-files-support.patch

 

3rd python support patch

This patch adds the multiple file handling ability to Kicad, from now on
all files included in the project directory are shown in the project tree,

default action is triggered upon double click on those files:
*.sch: open with eeshema
*.brd: open with pcbnew
*.net: open with cvpcb
*.txt: open with text editor
*.pdf: open with pdf viewer
*.pho: open with gerber viewer
*.py: run the python script

*.py files have a special right click context menu allowing to:
1. Run the script
2. Edit the script in a text editor

A refresh button had also been added to the interface to refresh the 
project tree,

*.pdf, *.txt, *.py are zipped in the project as well upon archival

(file uploaded to yahoo groups files, screenshot added in the same 
directory as well)
(next step: add some bindings in python to add python callback on 
defined events)
---
bitmaps/icon_cvpcb_small.xpm | 151 +++++++++++++++++++++++++++
bitmaps/icon_gerbview_small.xpm | 185 +++++++++++++++++++++++++++++++++
bitmaps/icon_python_small.xpm | 117 +++++++++++++++++++++
bitmaps/icon_txt.xpm | 119 +++++++++++++++++++++
bitmaps/reload.xpm | 171 +++++++++++++++++++++++++++++++
bitmaps/unknown.xpm | 68 ++++++++++++
common/gestfich.cpp | 69 ++++++++++++
include/bitmaps.h | 1
include/common.h | 50 ++++-----
include/id.h | 9 +
kicad/buildmnu.cpp | 9 +
kicad/files-io.cpp | 3
kicad/kicad.h | 16 ++
kicad/treeprj.cpp | 220 ++++++++++++++++++++++++++++++++++++----
14 files changed, 1136 insertions(+), 52 deletions(-)

 --------------010300070302050109000503 Content-Type: text/x-patch;
name="kicad-kicad-project-multiple-files-support.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: inline;
filename="kicad-kicad-project-multiple-files-support.patch"

3rd python support patch

This patch adds the multiple file handling ability to Kicad, from now on
all files included in the project directory are shown in the project tree,

default action is triggered upon double click on those files:
*.sch: open with eeshema
*.brd: open with pcbnew
*.net: open with cvpcb
*.txt: open with text editor
*.pdf: open with pdf viewer
*.pho: open with gerber viewer
*.py: run the python script

*.py files have a special right click context menu allowing to:
1. Run the script
2. Edit the script in a text editor

A refresh button had also been added to the interface to refresh the project tree,

*.pdf, *.txt, *.py are zipped in the project as well upon archival

---
bitmaps/icon_cvpcb_small.xpm | 151 +++++++++++++++++++++++++++
bitmaps/icon_gerbview_small.xpm | 185 +++++++++++++++++++++++++++++++++
bitmaps/icon_python_small.xpm | 117 +++++++++++++++++++++
bitmaps/icon_txt.xpm | 119 +++++++++++++++++++++
bitmaps/reload.xpm | 171 +++++++++++++++++++++++++++++++
bitmaps/unknown.xpm | 68 ++++++++++++
common/gestfich.cpp | 69 ++++++++++++
include/bitmaps.h | 1 
include/common.h | 50 ++++-----
include/id.h | 9 +
kicad/buildmnu.cpp | 9 +
kicad/files-io.cpp | 3 
kicad/kicad.h | 16 ++
kicad/treeprj.cpp | 220 ++++++++++++++++++++++++++++++++++++----
14 files changed, 1136 insertions(+), 52 deletions(-)

Index: kicad-dev/kicad/kicad.h
===================================================================
--- kicad-dev.orig/kicad/kicad.h	2006-06-02 13:45:52.000000000 +0200
+++ kicad-dev/kicad/kicad.h	2007-04-22 02:18:30.000000000 +0200
@@ -63,6 +63,7 @@
void CreateCommandToolbar(void);
void PrintMsg(const wxString & text);
void SetLanguage(wxCommandEvent& event);
+	void OnRefresh(wxCommandEvent& event);

void CreateZipArchive(const wxString FullFileName);
void UnZipArchive(const wxString FullFileName);
@@ -77,12 +78,25 @@
WinEDA_MainFrame * m_Parent;
WinEDA_TreePrj * m_TreeProject;

+	wxTreeItemId m_root;
+
+	wxMenu m_PyPopupMenu;
+
public:
WinEDA_PrjFrame(WinEDA_MainFrame * parent,
const wxPoint & pos, const wxSize & size );
~WinEDA_PrjFrame(void) {}
void OnSelect(wxTreeEvent & Event);
+	void OnRight(wxTreeEvent & Event);
void ReCreateTreePrj(void);
+
+	void OnTxtEdit(wxCommandEvent & event);
+
+#ifdef KICAD_PYTHON
+	void OnRunPy(wxCommandEvent & event);
+#endif
+
+	void AddFile( const wxString & name, int id );
DECLARE_EVENT_TABLE()
};

@@ -111,7 +125,7 @@
eda_global wxString g_SchExtBuffer;
eda_global wxString g_BoardExtBuffer;
eda_global wxString g_NetlistExtBuffer;
-eda_global wxString g_GerberExtBuffer;
+eda_global wxString g_GerberExtBuffer;
#endif

#endif
Index: kicad-dev/kicad/treeprj.cpp
===================================================================
--- kicad-dev.orig/kicad/treeprj.cpp	2006-01-11 07:57:36.000000000 +0100
+++ kicad-dev/kicad/treeprj.cpp	2007-04-22 02:19:52.000000000 +0200
@@ -2,6 +2,10 @@
/* treeprj.cpp */
/***************/

+#ifdef KICAD_PYTHON
+#include <pyhandler.h>
+#endif
+
#include "fctsys.h"
#include "gr_basic.h"
#include "common.h"
@@ -12,15 +16,32 @@
#include "wx/image.h"
#include "wx/imaglist.h"
#include "wx/treectrl.h"
+#include "wx/regex.h"
+#include "wx/dir.h"

#include "bitmaps.h"
+#include "../bitmaps/icon_python_small.xpm"
+#include "../bitmaps/icon_gerbview_small.xpm"
+#include "../bitmaps/icon_txt.xpm"
+#include "../bitmaps/icon_cvpcb_small.xpm"
+#include "../bitmaps/unknown.xpm"

#include "id.h"

+
+// Order of this enum changes AddFile() internal working
+// please update both
enum {
TREE_PROJECT = 1,
TREE_SCHEMA,
-	TREE_PCB
+	TREE_PCB,
+	TREE_PY,
+	TREE_GERBER,
+	TREE_PDF,
+	TREE_TXT,
+	TREE_NET,
+	TREE_UNKNOWN,
+	TREE_MAX,
};

/***********************************************************/
@@ -50,18 +71,80 @@
const wxPoint & pos,
const wxSize & size ) :
wxSashLayoutWindow(parent, ID_LEFT_FRAME, pos, size,
-	wxNO_BORDER|wxSW_3D)
+	wxNO_BORDER|wxSW_3D),
+	m_PyPopupMenu( _( "Python Script" ) )
+
{
m_Parent = parent;
m_TreeProject = NULL;
+	wxMenuItem *item;
+
+#ifdef KICAD_PYTHON
+	item = new wxMenuItem(&m_PyPopupMenu, ID_PROJECT_RUNPY,
+	_("&Run"),
+	_("Run the Python Script") );
+	item->SetBitmap( icon_python_small_xpm );
+	m_PyPopupMenu.Append( item );
+#endif
+
+	item = new wxMenuItem(&m_PyPopupMenu, ID_PROJECT_TXTEDIT,
+	_("&Edit in a text editor"),
+	_("Edit the Python Script in a Text Editor") );
+	item->SetBitmap( icon_txt_xpm );
+	m_PyPopupMenu.Append( item );
ReCreateTreePrj();
}

BEGIN_EVENT_TABLE(WinEDA_PrjFrame, wxSashLayoutWindow)
EVT_TREE_ITEM_ACTIVATED(ID_PROJECT_TREE, WinEDA_PrjFrame::OnSelect)
+	EVT_TREE_ITEM_RIGHT_CLICK(ID_PROJECT_TREE, WinEDA_PrjFrame::OnRight)
+	EVT_MENU(ID_PROJECT_TXTEDIT, WinEDA_PrjFrame::OnTxtEdit)
+	EVT_MENU(ID_PROJECT_RUNPY, WinEDA_PrjFrame::OnRunPy)
END_EVENT_TABLE()


+void WinEDA_PrjFrame::AddFile( const wxString & name, int id )
+{
+wxTreeItemId cellule;
+// Check the file type :
+int type = TREE_UNKNOWN;
+wxRegEx reg;
+wxString extensions[] =
+{
+ wxT( "" ), // 0
+ wxT( ".pro" ), // TREE_PROJECT
+ g_SchExtBuffer, // TREE_SCHEMA
+ g_BoardExtBuffer, // TREE_PCB
+ wxT( ".py" ), // TREE_PY
+ g_GerberExtBuffer, // TREE_GERBER
+ wxT( ".pdf" ), // TREE_PDF
+ wxT( ".txt" ), // TREE_TXT
+	wxT( ".net" ),
+ wxT( "<END>" ), // Last
+};
+
+	for ( int i = 0;; i++ )
+	{
+	if ( extensions[i] == wxT( "<END>" ) ) break;
+	if ( extensions[i] == wxT( "" ) ) continue;
+
+	reg.Compile( wxString::FromAscii( "^.*\\" ) + extensions[i] + wxString::FromAscii( "$" ), wxRE_ICASE );
+	if ( reg.Matches( name ) )
+	{
+	type = i;
+	break;
+	}
+	}
+
+ // Append the item :
+
+	cellule = m_TreeProject->AppendItem( m_root, name, id, id);
+	m_TreeProject->SetItemData( cellule, new TreePrjItemData(type, name) );
+	m_TreeProject->SetItemFont(cellule, *g_StdFont);
+	m_TreeProject->SetItemImage( cellule, type - 1 );
+	m_TreeProject->SetItemImage( cellule, type - 1, wxTreeItemIcon_Selected );
+}
+
/******************************************/
void WinEDA_PrjFrame::ReCreateTreePrj(void)
/******************************************/
@@ -69,40 +152,96 @@
*/
{
wxTreeItemId rootcellule;
-wxTreeItemId cellule;
wxString Text;
int id;
+bool prjOpened = false;

if ( ! m_TreeProject ) m_TreeProject = new WinEDA_TreePrj(this);
else m_TreeProject->DeleteAllItems();

-	m_TreeProject->SetFont(* g_StdFont);
+	m_TreeProject->SetFont(* g_StdFont);
if (m_Parent->m_PrjFileName.IsEmpty() ) Text = wxT("noname");
else Text = wxFileNameFromPath(m_Parent->m_PrjFileName);

+ prjOpened = wxFileExists( Text );
+
+	// root tree:
id = 0;
-	rootcellule = m_TreeProject->AddRoot(Text, id, id);
+	m_root = rootcellule = m_TreeProject->AddRoot(Text, id, id);
m_TreeProject->SetItemBold(rootcellule, TRUE);
m_TreeProject->SetItemData( rootcellule, new TreePrjItemData(TREE_PROJECT, wxEmptyString) );
m_TreeProject->SetItemFont(rootcellule, *g_StdFont);

ChangeFileNameExt(Text, wxEmptyString);

-	id++;
-	cellule = m_TreeProject->AppendItem(rootcellule,Text + g_SchExtBuffer, id, id);
-	m_TreeProject->SetItemData( cellule, new TreePrjItemData(TREE_SCHEMA, wxEmptyString) );
-	m_TreeProject->SetItemFont(cellule, *g_StdFont);
-	g_SchematicRootFileName = m_TreeProject->GetItemText(cellule);
+	// Add at least a .scn / .brd if not existing:
+	if ( !wxFileExists(Text+g_SchExtBuffer) ) AddFile( Text + g_SchExtBuffer, id++ );
+	if ( !wxFileExists(Text+g_BoardExtBuffer) ) AddFile( Text + g_BoardExtBuffer, id++ );

-	id++;
-	cellule = m_TreeProject->AppendItem(rootcellule,Text + g_BoardExtBuffer, id, id);
-	m_TreeProject->SetItemData( cellule, new TreePrjItemData(TREE_PCB, wxEmptyString) );
-	m_TreeProject->SetItemFont(cellule, *g_StdFont);
-	g_BoardFileName = m_TreeProject->GetItemText(cellule);
+	// Now adding all current files if available
+	if ( prjOpened )
+	{
+	wxArrayString fileList;
+	wxDir::GetAllFiles( wxGetCwd(), &fileList, wxEmptyString, wxDIR_FILES );
+	for ( unsigned int i = 0; i < fileList.Count() ; ++i )
+	{
+	if (wxDirExists(fileList[i])) continue;
+	wxString file = wxFileNameFromPath( fileList[i] );
+	if ( file == Text + wxT( ".pro" ) ) continue;
+	AddFile( file, id++ );
+	}
+	}

m_TreeProject->Expand(rootcellule);
}

+void WinEDA_PrjFrame::OnRight(wxTreeEvent & Event)
+{
+int tree_id;
+TreePrjItemData * tree_data;
+wxString FullFileName;
+
+	tree_data = (TreePrjItemData*)
+	m_TreeProject->GetItemData(m_TreeProject->GetSelection());
+
+	tree_id = tree_data->m_Id;
+	FullFileName = tree_data->m_FileName;
+
+	switch ( tree_id )
+	{
+ case TREE_PY:
+	PopupMenu( &m_PyPopupMenu );
+	break;
+
+	default:
+	break;
+	}
+}
+
+void WinEDA_MainFrame::OnRefresh(wxCommandEvent & event )
+{
+	m_LeftWin->ReCreateTreePrj();
+}
+
+void WinEDA_PrjFrame::OnTxtEdit(wxCommandEvent & event )
+{
+	TreePrjItemData * tree_data = (TreePrjItemData*) m_TreeProject->GetItemData(m_TreeProject->GetSelection());
+
+	wxString FullFileName = tree_data->m_FileName;
+	AddDelimiterString( FullFileName );
+	wxString editorname = GetEditorName();
+	if ( !editorname.IsEmpty() ) ExecuteFile(this, editorname, FullFileName);
+}
+
+#ifdef KICAD_PYTHON
+void WinEDA_PrjFrame::OnRunPy(wxCommandEvent & event )
+{
+	TreePrjItemData * tree_data = (TreePrjItemData*) m_TreeProject->GetItemData(m_TreeProject->GetSelection());
+	wxString FullFileName = tree_data->m_FileName;
+	PyHandler::GetInstance()->RunScript( FullFileName );
+}
+#endif
+
/**************************************************/
void WinEDA_PrjFrame::OnSelect(wxTreeEvent & Event)
/**************************************************/
@@ -115,7 +254,7 @@
m_TreeProject->GetItemData(m_TreeProject->GetSelection());

tree_id = tree_data->m_Id;
-	FullFileName = m_Parent->m_PrjFileName;
+	FullFileName = tree_data->m_FileName;

switch ( tree_id )
{
@@ -124,17 +263,47 @@

case TREE_SCHEMA:
{
-	ChangeFileNameExt(FullFileName, g_SchExtBuffer);
AddDelimiterString( FullFileName );
ExecuteFile(this, EESCHEMA_EXE, FullFileName);
break;
}

case TREE_PCB:
-	ChangeFileNameExt(FullFileName, g_BoardExtBuffer);
AddDelimiterString( FullFileName );
ExecuteFile(this, PCBNEW_EXE, FullFileName);
break;
+
+ #ifdef KICAD_PYTHON
+ case TREE_PY:
+	PyHandler::GetInstance()->RunScript( FullFileName );
+	break;
+	#endif
+
+	case TREE_GERBER:
+	AddDelimiterString(FullFileName);
+	ExecuteFile(this, GERBVIEW_EXE, FullFileName);
+	break;
+
+	case TREE_PDF:
+	OpenPDF( FullFileName );
+	break;
+
+	case TREE_NET:
+	AddDelimiterString(FullFileName);
+	ExecuteFile(this, CVPCB_EXE, FullFileName);
+	break;
+
+	case TREE_TXT:
+	{
+	wxString editorname = GetEditorName();
+	if ( !editorname.IsEmpty() ) ExecuteFile(this, editorname, FullFileName);
+	break;
+	}
+
+	default:
+	OpenFile( FullFileName );
+	break;
+
}
}

@@ -150,14 +319,21 @@
{
m_Parent = parent;
// Make an image list containing small icons
-	m_ImageList = new wxImageList(16, 16, TRUE, 2);
+	m_ImageList = new wxImageList(16, 16, TRUE, TREE_MAX);

-	m_ImageList->Add(wxBitmap(kicad_icon_small_xpm));
-	m_ImageList->Add(wxBitmap(eeschema_xpm));
-	m_ImageList->Add(wxBitmap(pcbnew_xpm));
+	m_ImageList->Add(wxBitmap(kicad_icon_small_xpm)); // TREE_PROJECT
+	m_ImageList->Add(wxBitmap(eeschema_xpm));	// TREE_SCHEMA
+	m_ImageList->Add(wxBitmap(pcbnew_xpm));	// TREE_PCB
+	m_ImageList->Add(wxBitmap(icon_python_small_xpm));	// TREE_PY
+	m_ImageList->Add(wxBitmap(icon_gerbview_small_xpm));	// TREE_GERBER
+	m_ImageList->Add(wxBitmap(datasheet_xpm));	// TREE_PDF
+	m_ImageList->Add(wxBitmap(icon_txt_xpm));	// TREE_TXT
+	m_ImageList->Add(wxBitmap(icon_cvpcb_small_xpm));	// TREE_NET
+	m_ImageList->Add(wxBitmap(unknown_xpm));	// TREE_UNKNOWN

SetImageList(m_ImageList);

+
}

/********************************/
Index: kicad-dev/bitmaps/icon_gerbview_small.xpm
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ kicad-dev/bitmaps/icon_gerbview_small.xpm	2007-04-21 16:09:58.000000000 +0200
@@ -0,0 +1,185 @@
+/* XPM */
+static char * icon_gerbview_small_xpm[] = {
+"16 16 166 2",
+" c None",
+". c #424040",
+"+ c #818080",
+"@ c #7E7D7D",
+"# c #4E4C4C",
+"$ c #1B1A19",
+"% c #FDFCFE",
+"& c #D5BDAB",
+"* c #616162",
+"= c #909090",
+"- c #BCBCBC",
+"; c #6A5C52",
+"> c #C3C3D6",
+", c #E7E7FF",
+"' c #E4E4FF",
+") c #E2E2FF",
+"! c #DFDFFF",
+"~ c #44444E",
+"{ c #E2C5AE",
+"] c #625951",
+"^ c #CECECE",
+"/ c #D1D1D1",
+"( c #E8A467",
+"_ c #FD7A05",
+": c #7A4E28",
+"< c #CC9E84",
+"[ c #F0B087",
+"} c #EEAF87",
+"| c #E5C5C3",
+"1 c #44434E",
+"2 c #8D7059",
+"3 c #FF7800",
+"4 c #FE7801",
+"5 c #FE7902",
+"6 c #FE7903",
+"7 c #FE7A04",
+"8 c #FF7801",
+"9 c #EF9646",
+"0 c #D2BEAC",
+"a c #6A411F",
+"b c #ECA87C",
+"c c #EEAA80",
+"d c #E3C2BF",
+"e c #43424E",
+"f c #7A7A79",
+"g c #815F40",
+"h c #E8A468",
+"i c #F9831B",
+"j c #FA8217",
+"k c #8B480E",
+"l c #BF9D92",
+"m c #E5BEB4",
+"n c #D8D7FE",
+"o c #42424E",
+"p c #515050",
+"q c #8F8F8F",
+"r c #DABFA7",
+"s c #F68825",
+"t c #FC7D0C",
+"u c #AE733F",
+"v c #A05C28",
+"w c #F8892E",
+"x c #E2BAB4",
+"y c #42404E",
+"z c #676666",
+"A c #7C7C7C",
+"B c #D4CAC1",
+"C c #F1913C",
+"D c #FC7C0A",
+"E c #A45E26",
+"F c #E0B8B4",
+"G c #41404E",
+"H c #636365",
+"I c #EA9E5A",
+"J c #FE7A05",
+"K c #EC9B53",
+"L c #F28F37",
+"M c #E7A66C",
+"N c #E7A66B",
+"O c #E8A569",
+"P c #6D5744",
+"Q c #6A4C38",
+"R c #D7AFAA",
+"S c #D1D0FE",
+"T c #403F4E",
+"U c #968682",
+"V c #C67226",
+"W c #F9821A",
+"X c #D6C8BC",
+"Y c #FA8013",
+"Z c #DA6C0A",
+"` c #706C70",
+" .	c #E1E1E4",
+"..	c #6E6E74",
+"+.	c #938FAC",
+"@.	c #403E4E",
+"#.	c #F0C8B4",
+"$.	c #764010",
+"%.	c #BA661C",
+"&.	c #FE7A06",
+"*.	c #DDB999",
+"=.	c #2F2C2D",
+"-.	c #8F8FB9",
+";.	c #D8D8FF",
+">.	c #F2F2FF",
+",.	c #B5B5B6",
+"'.	c #2D2D2F",
+").	c #E7E6FE",
+"!.	c #EBC4B4",
+"~.	c #928181",
+"{.	c #5F534F",
+"].	c #705B4A",
+"^.	c #606062",
+"/.	c #4E4E55",
+"(.	c #5E5E71",
+"_.	c #ACACD1",
+":.	c #8584A1",
+"<.	c #656079",
+"[.	c #BEBEF0",
+"}.	c #EFEFF6",
+"|.	c #EBCCC3",
+"1.	c #EFAF87",
+"2.	c #E5A67E",
+"3.	c #D29269",
+"4.	c #C4845A",
+"5.	c #D09069",
+"6.	c #E0A17E",
+"7.	c #E7A787",
+"8.	c #EA9E6F",
+"9.	c #E37E2E",
+"0.	c #6D5045",
+"a.	c #8080A7",
+"b.	c #D0D0FF",
+"c.	c #ECECFF",
+"d.	c #E9C8BF",
+"e.	c #EFAC80",
+"f.	c #EDA980",
+"g.	c #EBA880",
+"h.	c #EAA780",
+"i.	c #E9A580",
+"j.	c #E8A480",
+"k.	c #E6A380",
+"l.	c #E99B6A",
+"m.	c #F5862E",
+"n.	c #A58280",
+"o.	c #46465C",
+"p.	c #A8A8DA",
+"q.	c #E0E0FF",
+"r.	c #DDDDFF",
+"s.	c #DBDBFF",
+"t.	c #D6D6FF",
+"u.	c #D3D3FF",
+"v.	c #D1D1FF",
+"w.	c #CECEFF",
+"x.	c #CCCCFF",
+"y.	c #CAC9FE",
+"z.	c #D7B0B4",
+"A.	c #D6AEB4",
+"B.	c #C2C2FE",
+"C.	c #3C3B4E",
+"D.	c #0E0E10",
+"E.	c #42414E",
+"F.	c #3F3E4E",
+"G.	c #3E3D4E",
+"H.	c #3D3C4E",
+"I.	c #1F1E27",
+". + + @ # $ $ # @ + + + + + . ",
+"+ % & * = - - = ; > , ' ) ! ~ ",
+"+ { ] ^ / / / ( _ : < [ } | 1 ",
+"+ 2 3 4 5 6 7 8 9 0 a b c d e ",
+"f g h h h h h i j 9 k l m n o ",
+"p q / / / / / r s t u v w x y ",
+"z A B C D C B / / / A E w F G ",
+"+ H I J K 7 L M N O P Q R S T ",
+"+ U V W X Y 3 3 3 Z ` ...+.@. ",
+"+ #.$.%.6 &.*./ q =.-.;.>.,.'. ",
+"+ ).!.~.{.].^./.(._.:.<.[.) }.A ",
+"+ |.[ 1.2.3.4.5.6.7.8.9.0.a.b.c.",
+"+ d.e.c f.g.h.i.j.k.l.m.m.n.o.p.",
+"+ q.r.s.;.t.u.v.w.x.y.z.A.B.C.D.",
+". ~ 1 e o E.G T @.F.G.H.C.C.I. ",
+" "};
Index: kicad-dev/bitmaps/icon_python_small.xpm
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ kicad-dev/bitmaps/icon_python_small.xpm	2007-04-21 22:19:10.000000000 +0200
@@ -0,0 +1,117 @@
+/* XPM */
+static char * icon_python_small_xpm[] = {
+"16 16 98 2",
+" c None",
+". c #5490C0",
+"+ c #3E7EB4",
+"@ c #3D7CB0",
+"# c #5488B2",
+"$ c #4686BB",
+"% c #8FB8DA",
+"& c #DCE6F1",
+"* c #377AB0",
+"= c #3778AD",
+"- c #3773A5",
+"; c #5684AA",
+"> c #3880BC",
+", c #4A8AC0",
+"' c #538DBD",
+") c #3779AF",
+"! c #3774A8",
+"~ c #3772A3",
+"{ c #366D9C",
+"] c #366C9A",
+"^ c #799785",
+"/ c #FFEA5C",
+"( c #FCE464",
+"_ c #3883BF",
+": c #387EB7",
+"< c #387AB1",
+"[ c #366E9E",
+"} c #376A94",
+"| c #9BA876",
+"1 c #FFE658",
+"2 c #FFDF50",
+"3 c #4B8EC4",
+"4 c #3882BE",
+"5 c #387AB2",
+"6 c #3778AE",
+"7 c #3775A9",
+"8 c #A1AA77",
+"9 c #FFDE50",
+"0 c #FFD848",
+"a c #FCD55B",
+"b c #3B81BB",
+"c c #3880BB",
+"d c #387BB4",
+"e c #3776AA",
+"f c #376B96",
+"g c #7E9CB2",
+"h c #FADE70",
+"i c #FFD646",
+"j c #FFCF3E",
+"k c #FDC93C",
+"l c #3B80B9",
+"m c #387CB5",
+"n c #6393BB",
+"o c #F3E486",
+"p c #FFED60",
+"q c #FFE85B",
+"r c #FFE253",
+"s c #FFDA4A",
+"t c #FFD545",
+"u c #FFCD3C",
+"v c #FFC734",
+"w c #FEC433",
+"x c #508ABB",
+"y c #3776AB",
+"z c #9AAD84",
+"A c #FFE558",
+"B c #FFE152",
+"C c #FFD342",
+"D c #FFCB3A",
+"E c #FFC532",
+"F c #FFC330",
+"G c #FCC242",
+"H c #9BB082",
+"I c #FFEB5E",
+"J c #FFE659",
+"K c #FFE052",
+"L c #FFD241",
+"M c #FFC02E",
+"N c #FFBA27",
+"O c #4379A7",
+"P c #C0C273",
+"Q c #FFDE4F",
+"R c #FFDB4C",
+"S c #FFD040",
+"T c #FFCC3B",
+"U c #FFCE54",
+"V c #FFC540",
+"W c #FDBE30",
+"X c #F9DA70",
+"Y c #FFD645",
+"Z c #FFC836",
+"` c #FFEEC9",
+" .	c #FFD37B",
+"..	c #F9C95E",
+"+.	c #FCCC4D",
+"@.	c #FEC232",
+"#.	c #FFBC29",
+"$.	c #FCBD3D",
+" ",
+" . + @ # ",
+" $ % & * = - - ; ",
+" > , ' ) ! ~ { { ",
+" { ] ^ / ( ",
+" _ > : < = - [ ] } | 1 2 ",
+" 3 4 : 5 6 7 ~ { } } 8 9 0 a ",
+" b c d ) e - { f } g h i j k ",
+" l m * n o p p q r s t u v w ",
+" x * y z p p A B s C D E F G ",
+" = ! H I J K 0 L D v M N ",
+" O P 1 Q R ",
+" r 9 s S T U V W ",
+" X Y S Z E ` ... ",
+" +.@.#.$. ",
+" "};
Index: kicad-dev/bitmaps/icon_txt.xpm
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ kicad-dev/bitmaps/icon_txt.xpm	2007-04-21 16:14:24.000000000 +0200
@@ -0,0 +1,119 @@
+/* XPM */
+static char * icon_txt_xpm[] = {
+"16 16 100 2",
+" c None",
+". c #AFAFAF",
+"+ c #B8CEF8",
+"@ c #B4CBF6",
+"# c #9EBDF1",
+"$ c #7CA5EA",
+"% c #719EE6",
+"& c #6697E2",
+"* c #5B8FDE",
+"= c #5088DA",
+"- c #4581D6",
+"; c #3A7AD2",
+"> c #3072CE",
+", c #256BCA",
+"' c #F2F6FD",
+") c #F1F5FD",
+"! c #EFF4FC",
+"~ c #EEF3FC",
+"{ c #ECF1FA",
+"] c #E9EFF8",
+"^ c #E6ECF6",
+"/ c #E3EAF5",
+"( c #E0E8F2",
+"_ c #DDE5F0",
+": c #DBE3EF",
+"< c #D8E1EC",
+"[ c #FFFFFF",
+"} c #FDFDFD",
+"| c #FDE080",
+"1 c #F2CC84",
+"2 c #E0AB8A",
+"3 c #F6F6F6",
+"4 c #F5F5F5",
+"5 c #F3F3F3",
+"6 c #F0F0F0",
+"7 c #FEFEFE",
+"8 c #FCFBF8",
+"9 c #FCE135",
+"0 c #FFC729",
+"a c #F6AB5E",
+"b c #F2EBE8",
+"c c #F4F4F4",
+"d c #F2F2F2",
+"e c #EDEDED",
+"f c #FDE394",
+"g c #FFDB35",
+"h c #FFC340",
+"i c #EAA871",
+"j c #EAEAEA",
+"k c #FCFCFC",
+"l c #FDE24E",
+"m c #FFCC36",
+"n c #FCAC4C",
+"o c #EEE1D8",
+"p c #F1F1F1",
+"q c #ECECEC",
+"r c #FCE8B2",
+"s c #FFE458",
+"t c #FFCD55",
+"u c #EDAA6D",
+"v c #EEEEEE",
+"w c #FEE473",
+"x c #FFD861",
+"y c #FDC16A",
+"z c #EAD4C5",
+"A c #F7E8C4",
+"B c #FEEB80",
+"C c #FFD871",
+"D c #EFB579",
+"E c #EEEEEF",
+"F c #E3E3E6",
+"G c #DDDDE1",
+"H c #EDEDEE",
+"I c #FCDF8D",
+"J c #FFE389",
+"K c #FED58A",
+"L c #E7C8B2",
+"M c #ECECED",
+"N c #E1E1E4",
+"O c #DBDBE0",
+"P c #F7D090",
+"Q c #FFEAB7",
+"R c #ECB989",
+"S c #E0E0E4",
+"T c #DCDCE1",
+"U c #E0B98F",
+"V c #E2AD8A",
+"W c #DBD1D1",
+"X c #DDDDE2",
+"Y c #DFDFE3",
+"Z c #FBFBFB",
+"` c #F9F9F9",
+" .	c #F8F8F8",
+"..	c #D3A78A",
+"+.	c #DFD9DA",
+"@.	c #E0E0E5",
+"#.	c #E4E4E8",
+"$.	c #EEEEF0",
+"%.	c #F7F7F7",
+"&.	c #E6E6E6",
+" . . . . . . . . . . . . . . ",
+" . + @ # $ % & * = - ; > , . ",
+" . ' ) ! ~ { ] ^ / ( _ : < . ",
+" . [ [ [ [ } | 1 2 3 4 5 6 . ",
+" . [ [ [ 7 8 9 0 a b c d e . ",
+" . [ [ 7 } f g h i c 5 6 j . ",
+" . [ [ 7 k l m n o c p q q . ",
+" . [ 7 } r s t u c d v v v . ",
+" . } } k w x y z p 6 6 6 6 . ",
+" . d 5 A B C D d d E F G H . ",
+" . 5 5 I J K L M N O O O F . ",
+" . 4 4 P Q R S T T . . . . . ",
+" . 3 3 U V W X X Y . Z k ` . ",
+" . . ...+.@.#.$.%.. d v . ",
+" . ` ` ` ` ` ` ` ` . &.. ",
+" . . . . . . . . . . . "};
Index: kicad-dev/include/bitmaps.h
===================================================================
--- kicad-dev.orig/include/bitmaps.h	2007-04-21 15:32:15.000000000 +0200
+++ kicad-dev/include/bitmaps.h	2007-04-22 00:20:07.000000000 +0200
@@ -143,7 +143,6 @@
#include "../bitmaps/icon_kicad.xpm"
#include "../bitmaps/icon_pcbnew.xpm"
#include "../bitmaps/icon_modedit.xpm"
-	#include "../bitmaps/icon_python.xpm"
#include "../bitmaps/Info.xpm"
#include "../bitmaps/mirepcb.xpm"
#include "../bitmaps/icon_3d.xpm"
Index: kicad-dev/bitmaps/icon_cvpcb_small.xpm
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ kicad-dev/bitmaps/icon_cvpcb_small.xpm	2007-04-21 22:50:29.000000000 +0200
@@ -0,0 +1,151 @@
+/* XPM */
+static char * icon_cvpcb_small_xpm[] = {
+"16 16 132 2",
+" c None",
+". c #FF7800",
+"+ c #AF5200",
+"@ c #A64E00",
+"# c #6A3200",
+"$ c #6B3200",
+"% c #984700",
+"& c #8D4200",
+"* c #000000",
+"= c #929191",
+"- c #A49C96",
+"; c #FBFAFA",
+"> c #FFFEFE",
+", c #FFFCFA",
+"' c #FFEEDF",
+") c #FFDEC2",
+"! c #FFCFA4",
+"~ c #FFBF87",
+"{ c #FFB069",
+"] c #FFA04C",
+"^ c #FF902F",
+"/ c #FF8111",
+"( c #803C00",
+"_ c #807F7F",
+": c #EA7610",
+"< c #A88363",
+"[ c #D5D4D3",
+"} c #FFEEE0",
+"| c #FFDFC2",
+"1 c #FFCFA5",
+"2 c #FFC088",
+"3 c #FFB06A",
+"4 c #FFA04D",
+"5 c #FF9130",
+"6 c #FF8112",
+"7 c #232323",
+"8 c #FF8010",
+"9 c #FFA352",
+"0 c #E4B58C",
+"a c #D2CAC2",
+"b c #F6E6D8",
+"c c #FFDFC3",
+"d c #FECFA5",
+"e c #FEBF88",
+"f c #FEB06B",
+"g c #FFA14E",
+"h c #FF9230",
+"i c #FF8213",
+"j c #7D7D7D",
+"k c #FE8010",
+"l c #D48845",
+"m c #A98C73",
+"n c #817C78",
+"o c #767676",
+"p c #585451",
+"q c #987B62",
+"r c #46403C",
+"s c #847364",
+"t c #C08959",
+"u c #EC8C39",
+"v c #783E0B",
+"w c #100800",
+"x c #F67D12",
+"y c #D4945C",
+"z c #AE947D",
+"A c #332E2C",
+"B c #2F2E2E",
+"C c #919090",
+"D c #686767",
+"E c #ABA9A8",
+"F c #6F5E4E",
+"G c #9A6231",
+"H c #C3722C",
+"I c #F57B0E",
+"J c #B87941",
+"K c #957D69",
+"L c #666260",
+"M c #575656",
+"N c #666666",
+"O c #282524",
+"P c #585656",
+"Q c #766454",
+"R c #AD784A",
+"S c #C2742F",
+"T c #FC7E0F",
+"U c #DA8A44",
+"V c #9E7A5A",
+"W c #746960",
+"X c #5F5E5E",
+"Y c #7B6F66",
+"Z c #B6967C",
+"` c #775A41",
+" .	c #92663E",
+"..	c #C98040",
+"+.	c #EC8830",
+"@.	c #783F0C",
+"#.	c #FCA150",
+"$.	c #F9C190",
+"%.	c #DCCBBC",
+"&.	c #DED3CA",
+"*.	c #F7DAC2",
+"=.	c #F7CBA5",
+"-.	c #F4BA87",
+";.	c #F9AE6D",
+">.	c #FDA252",
+",.	c #FE9435",
+"'.	c #FF8418",
+").	c #803C01",
+"!.	c #E4944E",
+"~.	c #B8A595",
+"{.	c #E8E7E6",
+"].	c #FFF2E6",
+"^.	c #FFE2C9",
+"/.	c #FFD3AC",
+"(.	c #FFC38E",
+"_.	c #FFB471",
+":.	c #FFA454",
+"<.	c #FF9436",
+"[.	c #FF8519",
+"}.	c #803C02",
+"|.	c #965A25",
+"1.	c #BBB8B6",
+"2.	c #FEFDFD",
+"3.	c #FFF2E8",
+"4.	c #FFE3CA",
+"5.	c #FFD3AD",
+"6.	c #FFC490",
+"7.	c #FFB472",
+"8.	c #FFA555",
+"9.	c #FF9537",
+"0.	c #FF861A",
+"a.	c #803D02",
+" . . . . . . ",
+" . . . . . ",
+" + @ # $ % & * ",
+" = - ; > , ' ) ! ~ { ] ^ / ( ",
+" _ : < [ , } | 1 2 3 4 5 6 ( ",
+"* * 7 8 9 0 a b c d e f g h i ( ",
+" j k l m n o p q r s t u v w ",
+" _ x y z A B C D E F G H * ",
+" _ I J K L M N O P Q R S * ",
+" _ T U V W X Y Z ` ...+.@.w ",
+" _ 8 #.$.%.&.*.=.-.;.>.,.'.).",
+"* * 7 8 !.~.{.].^./.(._.:.<.[.}.",
+" j |.1.2.> 3.4.5.6.7.8.9.0.a.",
+" + @ # $ % & * ",
+" . . . . . ",
+" . . . . . . "};
Index: kicad-dev/common/gestfich.cpp
===================================================================
--- kicad-dev.orig/common/gestfich.cpp	2007-04-21 23:26:14.000000000 +0200
+++ kicad-dev/common/gestfich.cpp	2007-04-22 02:16:34.000000000 +0200
@@ -5,6 +5,7 @@

// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
+#include "wx/mimetype.h"

#ifdef __BORLANDC__
#pragma hdrstop
@@ -569,3 +570,71 @@
}
return g_EditorName;
}
+
+void OpenPDF( const wxString & file )
+{
+	wxString command;
+	wxString filename = file;
+	wxString type;
+
+	EDA_Appl->ReadPdfBrowserInfos();
+	if ( !EDA_Appl->m_PdfBrowserIsDefault )
+	{
+	AddDelimiterString(filename);
+	command = EDA_Appl->m_PdfBrowser + filename;
+	}
+	else
+	{
+	bool success = false;
+	wxFileType * filetype = NULL;
+
+	wxFileType::MessageParameters params(filename, type);
+	filetype = wxTheMimeTypesManager->GetFileTypeFromExtension(wxT(".pdf"));
+	if (filetype ) success = filetype->GetOpenCommand( &command, params);
+	delete filetype;
+
+	if (!success)
+	{
+	AddDelimiterString(filename);
+	command.Empty();
+	wxString tries[] =
+	{
+	wxT("/usr/bin/evince"),
+	wxT("/usr/bin/xpdf"),
+	wxT("/usr/bin/konqueror"),
+	wxT("/usr/bin/gpdf"),
+	wxT(""),
+	};
+	for ( int i = 0;; i++ )
+	{
+	if (tries[i].IsEmpty()) break;
+	if (wxFileExists(tries[i]))
+	{
+	command = tries[i] + wxT(" ") + filename;
+	}
+	}
+	}
+	}
+
+	if (!command.IsEmpty()) wxExecute(command);
+}
+
+
+void OpenFile( const wxString & file )
+{
+	wxString command;
+	wxString filename = file;
+
+	wxFileName CurrentFileName(filename);
+	wxString ext, type;
+	ext = CurrentFileName.GetExt();
+	wxFileType * filetype = wxTheMimeTypesManager->GetFileTypeFromExtension(ext);
+
+	bool success = false;
+
+	wxFileType::MessageParameters params(filename, type);
+	if (filetype) success = filetype->GetOpenCommand( &command, params);
+	delete filetype;
+
+	if (success && !command.IsEmpty()) wxExecute(command);
+}
Index: kicad-dev/include/common.h
===================================================================
--- kicad-dev.orig/include/common.h	2007-04-21 23:27:43.000000000 +0200
+++ kicad-dev/include/common.h	2007-04-22 02:17:07.000000000 +0200
@@ -203,7 +203,7 @@
/* Gestion des feuilles de tracé:
*/
class Ki_PageDescr
-{
+{
// All sizes are in 1/1000 inch
public:
wxSize m_Size ;	/* page size in 1/1000 inch */
@@ -264,8 +264,8 @@
// le file de config

/* variables globales generales */
-
-COMMON_GLOBL int g_FloatSeparator;	// = '.' ou = ',' selon locale pour l'ecriture des nombres flotttant
+
+COMMON_GLOBL int g_FloatSeparator;	// = '.' ou = ',' selon locale pour l'ecriture des nombres flotttant
COMMON_GLOBL int g_DebugLevel;	// 0= Pas de debug */
COMMON_GLOBL int g_MouseOldButtons;
COMMON_GLOBL int g_KeyPressed;
@@ -284,7 +284,7 @@
COMMON_GLOBL int g_FontMinPointSize;	/* taille minimum des fontes */

COMMON_GLOBL bool g_IsPrinting;	// TRUE si impression au lieu de trace a l'ecran
-COMMON_GLOBL bool g_ShowPageLimits	// TRUE to display the page limits
+COMMON_GLOBL bool g_ShowPageLimits	// TRUE to display the page limits
#ifdef EDA_BASE
= TRUE
#endif
@@ -312,9 +312,9 @@
extern wxRealPoint g_UserGrid;
extern int g_UserGrid_Unit;
#endif
-
-COMMON_GLOBL int g_UnitMetric;	// display units mm = 1, inches = 0, cm = 2
-
+
+COMMON_GLOBL int g_UnitMetric;	// display units mm = 1, inches = 0, cm = 2
+

// shape selector for cursor screen
COMMON_GLOBL int g_CursorShape;
@@ -389,6 +389,8 @@
/************************/

wxString GetEditorName(void);	// Return the prefered editor name
+void OpenPDF( const wxString & file );
+void OpenFile( const wxString & file );


bool EDA_DirectorySelector(const wxString & Title,	/* Titre de la fenetre */
@@ -531,8 +533,8 @@

/**************/
/* common.cpp */
-/**************/
-wxString GetBuildVersion(void);	/* Return the build date */
+/**************/
+wxString GetBuildVersion(void);	/* Return the build date */

void Affiche_1_Parametre(WinEDA_DrawFrame * frame ,
int pos_X,const wxString& texte_H,const wxString& texte_L,int color);
@@ -563,21 +565,21 @@
entree : valeur en mils , buffer de texte
retourne en buffer : texte : valeur exprimee en pouces ou millimetres
suivie de " ou mm
-*/
-
-wxString ReturnUnitSymbol(int Units = g_UnitMetric);
-int ReturnValueFromString(int Units, const wxString & TextValue, int Internal_Unit);
-wxString ReturnStringFromValue(int Units, int Value, int Internal_Unit);
-void AddUnitSymbol(wxStaticText & Stext, int Units = g_UnitMetric);
-	/* Add string " (mm):" or " ("):" to the static text Stext.
-	Used in dialog boxes for entering values depending on selected units */
-void PutValueInLocalUnits(wxTextCtrl & TextCtr, int Value, int Internal_Unit);
-	/* Convert the number Value in a string according to the internal units
-	and the selected unit (g_UnitMetric) and put it in the wxTextCtrl TextCtrl */
-int ReturnValueFromTextCtrl(const wxTextCtrl & TextCtr, int Internal_Unit);
-	/* Convert the Value in the wxTextCtrl TextCtrl in an integer,
-	according to the internal units and the selected unit (g_UnitMetric) */
-
+*/
+
+wxString ReturnUnitSymbol(int Units = g_UnitMetric);
+int ReturnValueFromString(int Units, const wxString & TextValue, int Internal_Unit);
+wxString ReturnStringFromValue(int Units, int Value, int Internal_Unit);
+void AddUnitSymbol(wxStaticText & Stext, int Units = g_UnitMetric);
+	/* Add string " (mm):" or " ("):" to the static text Stext.
+	Used in dialog boxes for entering values depending on selected units */
+void PutValueInLocalUnits(wxTextCtrl & TextCtr, int Value, int Internal_Unit);
+	/* Convert the number Value in a string according to the internal units
+	and the selected unit (g_UnitMetric) and put it in the wxTextCtrl TextCtrl */
+int ReturnValueFromTextCtrl(const wxTextCtrl & TextCtr, int Internal_Unit);
+	/* Convert the Value in the wxTextCtrl TextCtrl in an integer,
+	according to the internal units and the selected unit (g_UnitMetric) */
+
double To_User_Unit(bool is_metric, int val,int internal_unit_value);
int From_User_Unit(bool is_metric, double val,int internal_unit_value);
wxString GenDate(void);
Index: kicad-dev/include/id.h
===================================================================
--- kicad-dev.orig/include/id.h	2007-04-22 00:13:21.000000000 +0200
+++ kicad-dev/include/id.h	2007-04-22 02:17:48.000000000 +0200
@@ -8,6 +8,9 @@
ID_BOTTOM_FRAME,
ID_MAIN_DIALOG,
ID_PROJECT_TREE,
+	ID_PROJECT_TXTEDIT,
+	ID_PROJECT_TREE_REFRESH,
+	ID_PROJECT_RUNPY,
ID_MAIN_COMMAND,
ID_TO_EDITOR,
ID_TO_EESCHEMA,
@@ -125,11 +128,11 @@
ID_LANGUAGE_CHOICE_END,


-	// ID du Main Toolbar de Schematique
+	// ID du Main Toolbar de Schematique

ID_SCHEMATIC_MAIN_TOOLBAR_START,
ID_SCHEMATIC_UNDO,
-	ID_SCHEMATIC_REDO,
+	ID_SCHEMATIC_REDO,
ID_SCHEMATIC_MAIN_TOOLBAR_END,

// ID du Vertical Toolbar de Schematique
@@ -449,7 +452,7 @@
ID_CVPCB_CREATE_STUFF_FILE,
ID_CVPCB_SHOW3D_FRAME,
ID_CVPCB_FOOTPRINT_DISPLAY_FULL_LIST,
-	ID_CVPCB_FOOTPRINT_DISPLAY_FILTERED_LIST,
+	ID_CVPCB_FOOTPRINT_DISPLAY_FILTERED_LIST,
ID_CVPCB_UNUSED0,
ID_CVPCB_UNUSED1,
ID_CVPCB_UNUSED2,
Index: kicad-dev/bitmaps/reload.xpm
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ kicad-dev/bitmaps/reload.xpm	2007-04-22 00:26:17.000000000 +0200
@@ -0,0 +1,171 @@
+/* XPM */
+static char * reload_xpm[] = {
+"16 16 152 2",
+" c None",
+". c #3ACF73",
+"+ c #35C96E",
+"@ c #64D790",
+"# c #3DC973",
+"$ c #51CE81",
+"% c #56CE84",
+"& c #55CE84",
+"* c #54CE83",
+"= c #53CE82",
+"- c #52CE82",
+"; c #4FCF80",
+"> c #4CD07F",
+", c #97F1B8",
+"' c #29A759",
+") c #70D697",
+"! c #F0FEF5",
+"~ c #D3F8E1",
+"{ c #CEF8DF",
+"] c #C3F7D8",
+"^ c #B4F5CD",
+"/ c #A7F2C2",
+"( c #9CEDBA",
+"_ c #8DE7AF",
+": c #84E4A7",
+"< c #6FDA97",
+"[ c #32B966",
+"} c #23A254",
+"| c #76D79B",
+"1 c #CCFADD",
+"2 c #80EFAA",
+"3 c #7BF0A8",
+"4 c #69ED9C",
+"5 c #56EB8F",
+"6 c #47E382",
+"7 c #3FD778",
+"8 c #39CB6F",
+"9 c #32BF67",
+"0 c #2BB25F",
+"a c #2EAF5F",
+"b c #2CAD5D",
+"c c #107D3C",
+"d c #73D699",
+"e c #C5F9D9",
+"f c #75ECA2",
+"g c #6AE898",
+"h c #5EE992",
+"i c #50E487",
+"j c #47D67C",
+"k c #40CC74",
+"l c #37BE6A",
+"m c #30B160",
+"n c #2DAD5D",
+"o c #2BA85A",
+"p c #158643",
+"q c #01421D",
+"r c #77DF9E",
+"s c #B8F8D1",
+"t c #5FE994",
+"u c #34C169",
+"v c #1E974D",
+"w c #1A8B46",
+"x c #168643",
+"y c #12803E",
+"z c #0F7639",
+"A c #107639",
+"B c #26A155",
+"C c #158442",
+"D c #003717",
+"E c #95F1B8",
+"F c #A8F7C6",
+"G c #3ED878",
+"H c #60C687",
+"I c #388558",
+"J c #000700",
+"K c #001D0A",
+"L c #0A6E34",
+"M c #12793C",
+"N c #076328",
+"O c #1F7A3C",
+"P c #267544",
+"Q c #EEFFF3",
+"R c #85E4A9",
+"S c #51C07B",
+"T c #8BEDB0",
+"U c #13813F",
+"V c #001C09",
+"W c #00260F",
+"X c #015C28",
+"Y c #076026",
+"Z c #1A853C",
+"` c #178042",
+" .	c #186D2F",
+"..	c #C1EED2",
+"+.	c #73C592",
+"@.	c #80E1A4",
+"#.	c #3DD275",
+"$.	c #51B979",
+"%.	c #65D28F",
+"&.	c #56D486",
+"*.	c #47CE7B",
+"=.	c #36BD6A",
+"-.	c #2A9D57",
+";.	c #2EA556",
+">.	c #1C8E49",
+",.	c #126C38",
+"'.	c #084E20",
+").	c #54B77B",
+"!.	c #7FE1A3",
+"~.	c #3ECF74",
+"{.	c #38C66D",
+"].	c #4ED17E",
+"^.	c #52CC7F",
+"/.	c #45C273",
+"(.	c #3BBA6B",
+"_.	c #31B261",
+":.	c #2EAC5E",
+"<.	c #259E55",
+"[.	c #188944",
+"}.	c #106835",
+"|.	c #00421D",
+"1.	c #01471E",
+"2.	c #27A658",
+"3.	c #3BC971",
+"4.	c #36BB68",
+"5.	c #26A555",
+"6.	c #229E52",
+"7.	c #1E954C",
+"8.	c #1C8C48",
+"9.	c #198443",
+"0.	c #167C3E",
+"a.	c #13733B",
+"b.	c #14723A",
+"c.	c #0F5F32",
+"d.	c #01451F",
+"e.	c #02441E",
+"f.	c #209B51",
+"g.	c #198745",
+"h.	c #055F2A",
+"i.	c #05612C",
+"j.	c #035F2B",
+"k.	c #035D2A",
+"l.	c #045A29",
+"m.	c #045828",
+"n.	c #045628",
+"o.	c #045428",
+"p.	c #05592A",
+"q.	c #004820",
+"r.	c #087435",
+"s.	c #00210D",
+"t.	c #00461E",
+"u.	c #00230F",
+" . ",
+" + @ ",
+"# $ % & & * = - ; > , ' ",
+") ! ~ { ] ^ / ( _ : < [ } ",
+"| 1 2 3 4 5 6 7 8 9 0 a b c ",
+"d e f g h i j k l m n o p q ",
+"r s t u v w x y z A B C D ",
+"E F G H I J K L M N O P ",
+"Q R S T U V W X Y Z ` . ",
+"..+.@.#.$.%.&.*.=.-.;.>.,.'. ",
+").!.~.{.].^./.(._.:.<.[.}.|. ",
+"1.2.3.4.5.6.7.8.9.0.a.b.c.d. ",
+" e.f.g.h.i.j.k.l.m.n.o.p.q. ",
+" e.r.s. ",
+" t.u. ",
+" "};
Index: kicad-dev/bitmaps/unknown.xpm
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ kicad-dev/bitmaps/unknown.xpm	2007-04-22 01:24:29.000000000 +0200
@@ -0,0 +1,68 @@
+/* XPM */
+static char * unknown_xpm[] = {
+"16 16 49 1",
+" c None",
+".	c #C6C6D5",
+"+	c #9494AD",
+"@	c #FBFBFC",
+"#	c #F8F8FA",
+"$	c #F4F4F7",
+"%	c #EEEEF2",
+"&	c #EAEAF0",
+"*	c #DEDEE7",
+"=	c #E0E0E9",
+"-	c #F5F5F8",
+";	c #F0F0F4",
+">	c #EDEDF2",
+",	c #E1E1E9",
+"'	c #C9C9D7",
+")	c #E4E4EB",
+"!	c #F7F7F9",
+"~	c #F1F1F5",
+"{	c #E6E6ED",
+"]	c #DBDBE5",
+"^	c #CDCDDA",
+"/	c #BFBFD0",
+"(	c #F2F2F6",
+"_	c #E7E7EE",
+":	c #E3E3EA",
+"<	c #D0D0DC",
+"[	c #C4C4D3",
+"}	c #C2C2D1",
+"|	c #FAFAFB",
+"1	c #F3F3F6",
+"2	c #E8E8EE",
+"3	c #CBCBD9",
+"4	c #C8C8D6",
+"5	c #F9F9FA",
+"6	c #DCDCE5",
+"7	c #D6D6E1",
+"8	c #D2D2DE",
+"9	c #D1D1DD",
+"0	c #CECEDB",
+"a	c #EBEBF1",
+"b	c #DADAE4",
+"c	c #D4D4E0",
+"d	c #E5E5EC",
+"e	c #DFDFE8",
+"f	c #DDDDE6",
+"g	c #D7D7E2",
+"h	c #E9E9EF",
+"i	c #D9D9E3",
+"j	c #EFEFF3",
+" ........+ ",
+" .@#$%&*=.+ ",
+" .@#-;>,=.'+ ",
+" .@#-;%)=++++ ",
+" .@!-~%{=]^/+ ",
+" .@!-(;_:<[}+ ",
+" .|!-1;2=34.+ ",
+" .5$(%&67890+ ",
+" .-(~a:]b7c8+ ",
+" .-$%d:efbg7+ ",
+" .!~h{)=e]i7+ ",
+" .!j2{)=e6bg+ ",
+" .$&2{d:e6bg+ ",
+" .12_d),e]bg+ ",
+" .;22{)=e6bg+ ",
+" ++++++++++++ "};
Index: kicad-dev/kicad/buildmnu.cpp
===================================================================
--- kicad-dev.orig/kicad/buildmnu.cpp	2007-04-22 00:37:03.000000000 +0200
+++ kicad-dev/kicad/buildmnu.cpp	2007-04-22 01:48:35.000000000 +0200
@@ -26,6 +26,8 @@
#include "Editor.xpm"
#include "New_Project.xpm"
#include "Open_Project.xpm"
+#include "../bitmaps/icon_python.xpm"
+#include "../bitmaps/reload.xpm"

#include "id.h"

@@ -60,6 +62,7 @@
EVT_MENU(ID_SELECT_PREFERED_PDF_BROWSER_NAME, WinEDA_MainFrame::Process_Preferences)
EVT_MENU(ID_SAVE_AND_ZIP_FILES, WinEDA_MainFrame::Process_Files)
EVT_MENU(ID_READ_ZIP_ARCHIVE, WinEDA_MainFrame::Process_Files)
+	EVT_MENU(ID_PROJECT_TREE_REFRESH, WinEDA_MainFrame::OnRefresh)

EVT_MENU(ID_PREFERENCES_FONT_INFOSCREEN, WinEDA_MainFrame::Process_Preferences)

@@ -264,6 +267,12 @@
-1, -1, (wxObject *) NULL,
_("Archive all project files"));

+	m_HToolBar->AddSeparator();
+	m_HToolBar->AddTool(ID_PROJECT_TREE_REFRESH, BITMAP(reload_xpm),
+	wxNullBitmap, FALSE,
+	-1, -1, (wxObject *) NULL,
+	_("Refresh project tree"));
+

// after adding the buttons to the toolbar, must call Realize() to reflect
// the changes
Index: kicad-dev/kicad/files-io.cpp
===================================================================
--- kicad-dev.orig/kicad/files-io.cpp	2007-04-22 02:01:46.000000000 +0200
+++ kicad-dev/kicad/files-io.cpp	2007-04-22 02:13:20.000000000 +0200
@@ -242,7 +242,8 @@

wxChar * Ext_to_arch[] = { /* Liste des extensions des fichiers à sauver */
wxT("*.sch"), wxT("*.lib"), wxT("*.cmp"), wxT("*.brd"),
-	wxT("*.net"), wxT("*.pro"), wxT("*.pho"),
+	wxT("*.net"), wxT("*.pro"), wxT("*.pho"), wxT("*.py"),
+	wxT("*.pdf"), wxT("*.txt"),
NULL};
int ii = 0;
wxString zip_cmd = wxT("-O ") + zip_file_fullname;
 --------------010300070302050109000503 Content-Type: image/png;
name="kicad-multifile-project.png"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="kicad-multifile-project.png"

[Attachment content not displayed.] --------------010300070302050109000503--