← Back to team overview

kicad-developers team mailing list archive

[patch 1/1] kicad-tree-newfile.patch

 

(resend, again due to dos2unix problems)

This patch adds the ability to create, rename, delete files from the 
project editor
new events are also bound to Python:

kicad::RenameFile => the callback is invoked with a tuple as parameter 
containing
the old file name and the new one

kicad::NewFile => callback is invoked with the new file name as parameter

kicad::DeleteFile => callback is invoked with the file name as parameter

---
bitmaps/new_cvpcb.xpm | 106 +++++++++++++++++++++
bitmaps/new_gerb.xpm | 97 +++++++++++++++++++
bitmaps/new_pcb.xpm | 54 ++++++++++
bitmaps/new_python.xpm | 131 ++++++++++++++++++++++++++
bitmaps/new_sch.xpm | 85 +++++++++++++++++
bitmaps/new_txt.xpm | 97 +++++++++++++++++++
include/id.h | 9 +
kicad/kicad.h | 39 +++++++
kicad/treeprj.cpp | 244 +++++++++++++++++++++++++++++++++++++++----------
9 files changed, 814 insertions(+), 48 deletions(-)


 --------------060203020608010303070001 Content-Type: text/x-patch;
name="kicad-tree-newfile.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="kicad-tree-newfile.patch"

Subject: [patch @num@/@total@] @name@

This patch adds the ability to create, rename, delete files from the project editor
new events are also bound to Python:

kicad::RenameFile => the callback is invoked with a tuple as parameter containing
the old file name and the new one

kicad::NewFile => callback is invoked with the new file name as parameter

kicad::DeleteFile => callback is invoked with the file name as parameter

---
bitmaps/new_cvpcb.xpm | 106 +++++++++++++++++++++
bitmaps/new_gerb.xpm | 97 +++++++++++++++++++
bitmaps/new_pcb.xpm | 54 ++++++++++
bitmaps/new_python.xpm | 131 ++++++++++++++++++++++++++
bitmaps/new_sch.xpm | 85 +++++++++++++++++
bitmaps/new_txt.xpm | 97 +++++++++++++++++++
include/id.h | 9 +
kicad/kicad.h | 39 +++++++
kicad/treeprj.cpp | 244 +++++++++++++++++++++++++++++++++++++++----------
9 files changed, 814 insertions(+), 48 deletions(-)


Index: kicad-dev/include/id.h
===================================================================
--- kicad-dev.orig/include/id.h	2007-04-24 22:41:01.000000000 +0200
+++ kicad-dev/include/id.h	2007-04-24 22:41:14.000000000 +0200
@@ -11,6 +11,15 @@
ID_PROJECT_TXTEDIT,
ID_PROJECT_TREE_REFRESH,
ID_PROJECT_RUNPY,
+	ID_PROJECT_NEWFILE,
+	ID_PROJECT_NEWSCH,
+	ID_PROJECT_NEWBRD,
+	ID_PROJECT_NEWPY,
+	ID_PROJECT_NEWGERBER,
+	ID_PROJECT_NEWTXT,
+	ID_PROJECT_NEWNET,
+	ID_PROJECT_DELETE,
+
ID_MAIN_COMMAND,
ID_TO_EDITOR,
ID_TO_EESCHEMA,
Index: kicad-dev/kicad/kicad.h
===================================================================
--- kicad-dev.orig/kicad/kicad.h	2007-04-24 22:41:01.000000000 +0200
+++ kicad-dev/kicad/kicad.h	2007-04-24 22:41:14.000000000 +0200
@@ -6,6 +6,7 @@
#define KICAD_H

#include <wx/treectrl.h>
+#include <vector>

/* Message de presentation */
eda_global wxString g_Main_Title
@@ -71,27 +72,63 @@
DECLARE_EVENT_TABLE()
};

+// Order of this enum changes AddFile() internal working
+// please update both
+enum TreeFileType {
+	TREE_PROJECT = 1,
+	TREE_SCHEMA,
+	TREE_PCB,
+	TREE_PY,
+	TREE_GERBER,
+	TREE_PDF,
+	TREE_TXT,
+	TREE_NET,
+	TREE_UNKNOWN,
+	TREE_MAX,
+};
+
/* Fenetre d'affichage des fichiers du projet */
class WinEDA_PrjFrame : public wxSashLayoutWindow
{
+private:
+
+	std::vector< wxMenu* > m_ContextMenus;
+
+protected:
+	wxMenu * GetContextMenu( int type );
+	void NewFile( wxCommandEvent & event, enum TreeFileType type );
+
+	wxString GetFileExt( enum TreeFileType type ) const;
+
public:
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 OnRenameAsk(wxTreeEvent & Event);
+	void OnRename(wxTreeEvent & Event);
void OnRight(wxTreeEvent & Event);
void ReCreateTreePrj(void);

void OnTxtEdit(wxCommandEvent & event);

+	void OnDeleteFile(wxCommandEvent &event );
+
+	void OnNewFile(wxCommandEvent & event);
+	void OnNewSchFile(wxCommandEvent & event);
+	void OnNewBrdFile(wxCommandEvent & event);
+	void OnNewPyFile(wxCommandEvent & event);
+	void OnNewGerberFile(wxCommandEvent & event);
+	void OnNewTxtFile(wxCommandEvent & event);
+	void OnNewNetFile(wxCommandEvent & event);
+
#ifdef KICAD_PYTHON
void OnRunPy(wxCommandEvent & event);
#endif
Index: kicad-dev/kicad/treeprj.cpp
===================================================================
--- kicad-dev.orig/kicad/treeprj.cpp	2007-04-24 22:41:01.000000000 +0200
+++ kicad-dev/kicad/treeprj.cpp	2007-04-24 22:48:11.000000000 +0200
@@ -25,25 +25,16 @@
#include "../bitmaps/icon_txt.xpm"
#include "../bitmaps/icon_cvpcb_small.xpm"
#include "../bitmaps/unknown.xpm"
+#include "../bitmaps/new_python.xpm"
+#include "../bitmaps/new_txt.xpm"
+#include "../bitmaps/new_gerb.xpm"
+#include "../bitmaps/new_pcb.xpm"
+#include "../bitmaps/new_sch.xpm"
+#include "../bitmaps/new_cvpcb.xpm"

#include "id.h"


-// Order of this enum changes AddFile() internal working
-// please update both
-enum {
-	TREE_PROJECT = 1,
-	TREE_SCHEMA,
-	TREE_PCB,
-	TREE_PY,
-	TREE_GERBER,
-	TREE_PDF,
-	TREE_TXT,
-	TREE_NET,
-	TREE_UNKNOWN,
-	TREE_MAX,
-};
-
/***********************************************************/
/* Classes pour l'arbre de hierarchie de gestion du projet */
/***********************************************************/
@@ -71,8 +62,7 @@
const wxPoint & pos,
const wxSize & size ) :
wxSashLayoutWindow(parent, ID_LEFT_FRAME, pos, size,
-	wxNO_BORDER|wxSW_3D),
-	m_PyPopupMenu( _( "Python Script" ) )
+	wxNO_BORDER|wxSW_3D)

{
m_Parent = parent;
@@ -80,43 +70,140 @@
wxMenuItem *item;

#ifdef KICAD_PYTHON
- PyHandler::GetInstance()->DeclareEvent( wxT( "kicad::RunScript" ) );
- PyHandler::GetInstance()->DeclareEvent( wxT( "kicad::EditScript" ) );
- PyHandler::GetInstance()->DeclareEvent( wxT( "kicad::TreeContextMenu" ) );
- PyHandler::GetInstance()->DeclareEvent( wxT( "kicad::TreeAddFile" ) );
+	PyHandler::GetInstance()->DeclareEvent( wxT( "kicad::RunScript" ) );
+	PyHandler::GetInstance()->DeclareEvent( wxT( "kicad::EditScript" ) );
+	PyHandler::GetInstance()->DeclareEvent( wxT( "kicad::TreeContextMenu" ) );
+	PyHandler::GetInstance()->DeclareEvent( wxT( "kicad::TreeAddFile" ) );
+	PyHandler::GetInstance()->DeclareEvent( wxT( "kicad::NewFile" ) );
+	PyHandler::GetInstance()->DeclareEvent( wxT( "kicad::DeleteFile" ) );
+	PyHandler::GetInstance()->DeclareEvent( wxT( "kicad::RenameFile" ) );
+#endif
+
+	for ( int i = 0; i < TREE_MAX; i++ ) m_ContextMenus.push_back( new wxMenu() );
+
+	// Python script context menu:

-	item = new wxMenuItem(&m_PyPopupMenu, ID_PROJECT_RUNPY,
+	wxMenu * menu = m_ContextMenus[TREE_PY];
+
+#ifdef KICAD_PYTHON
+	item = new wxMenuItem(menu, ID_PROJECT_RUNPY,
_("&Run"),
_("Run the Python Script") );
item->SetBitmap( icon_python_small_xpm );
-	m_PyPopupMenu.Append( item );
+	menu->Append( item );
#endif

-	item = new wxMenuItem(&m_PyPopupMenu, ID_PROJECT_TXTEDIT,
+	item = new wxMenuItem(menu, 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 );
+	menu->Append( item );
+
+	// New files context menu:
+	menu = m_ContextMenus[TREE_PROJECT];
+
+	item = new wxMenuItem(menu, ID_PROJECT_NEWSCH, _("&New Schematic"), _("Create a New Schematic File") );
+	item->SetBitmap( new_sch_xpm );
+	menu->Append( item );
+
+	item = new wxMenuItem(menu, ID_PROJECT_NEWBRD, _("&New PCB"), _("Create a New PCB File") );
+	item->SetBitmap( new_pcb_xpm );
+	menu->Append( item );
+
+	item = new wxMenuItem(menu, ID_PROJECT_NEWGERBER, _("&New File Gerber"), _("Create a New Gerber File") );
+	item->SetBitmap( new_gerb_xpm );
+	menu->Append( item );
+
+	item = new wxMenuItem(menu, ID_PROJECT_NEWNET, _("&New Netlist"), _("Create a New Netlist") );
+	item->SetBitmap( new_cvpcb_xpm );
+	menu->Append( item );
+
+	item = new wxMenuItem(menu, ID_PROJECT_NEWPY, _("&New Python Script"), _("Create a New Python Script") );
+	item->SetBitmap( new_python_xpm );
+	menu->Append( item );
+
+	item = new wxMenuItem(menu, ID_PROJECT_NEWTXT, _("&New Text File"), _("Create a New Txt File") );
+	item->SetBitmap( new_txt_xpm );
+	menu->Append( item );
+
+	item = new wxMenuItem(menu, ID_PROJECT_NEWFILE, _("&New File"), _("Create a New File") );
+	item->SetBitmap( new_xpm );
+	menu->Append( item );
+
+	
+	// Delete file menu command:
+	for ( int i = TREE_PROJECT + 1; i < TREE_MAX ; i++ )
+	{
+	menu = m_ContextMenus[i];
+	item = new wxMenuItem(menu, ID_PROJECT_DELETE, _("&Delete File"), _("Delete the File") );
+	item->SetBitmap( delete_xpm );
+	menu->Append( item );
+	}
+
ReCreateTreePrj();
}

+wxMenu * WinEDA_PrjFrame::GetContextMenu( int type ) { return m_ContextMenus[type]; }
+
BEGIN_EVENT_TABLE(WinEDA_PrjFrame, wxSashLayoutWindow)
+
+	EVT_TREE_BEGIN_LABEL_EDIT(ID_PROJECT_TREE, WinEDA_PrjFrame::OnRenameAsk )
+	EVT_TREE_END_LABEL_EDIT(ID_PROJECT_TREE, WinEDA_PrjFrame::OnRename )
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_NEWFILE, WinEDA_PrjFrame::OnNewFile)
+	EVT_MENU(ID_PROJECT_NEWSCH, WinEDA_PrjFrame::OnNewSchFile)
+	EVT_MENU(ID_PROJECT_NEWBRD, WinEDA_PrjFrame::OnNewBrdFile)
+	EVT_MENU(ID_PROJECT_NEWPY, WinEDA_PrjFrame::OnNewPyFile)
+	EVT_MENU(ID_PROJECT_NEWGERBER, WinEDA_PrjFrame::OnNewGerberFile)
+	EVT_MENU(ID_PROJECT_NEWTXT, WinEDA_PrjFrame::OnNewTxtFile)
+	EVT_MENU(ID_PROJECT_NEWNET, WinEDA_PrjFrame::OnNewNetFile)
+	EVT_MENU(ID_PROJECT_DELETE, WinEDA_PrjFrame::OnDeleteFile)
+
+#ifdef KICAD_PYTHON
EVT_MENU(ID_PROJECT_RUNPY, WinEDA_PrjFrame::OnRunPy)
+#endif
END_EVENT_TABLE()


-void WinEDA_PrjFrame::AddFile( const wxString & name, int id )
+void WinEDA_PrjFrame::OnNewFile(wxCommandEvent & event) { NewFile( event, TREE_UNKNOWN ); }
+void WinEDA_PrjFrame::OnNewSchFile(wxCommandEvent & event) { NewFile( event, TREE_SCHEMA ); }
+void WinEDA_PrjFrame::OnNewBrdFile(wxCommandEvent & event) { NewFile( event, TREE_PCB ); }
+void WinEDA_PrjFrame::OnNewPyFile(wxCommandEvent & event) { NewFile( event, TREE_PY ); }
+void WinEDA_PrjFrame::OnNewGerberFile(wxCommandEvent & event) { NewFile( event, TREE_GERBER ); }
+void WinEDA_PrjFrame::OnNewTxtFile(wxCommandEvent & event) { NewFile( event, TREE_TXT ); }
+void WinEDA_PrjFrame::OnNewNetFile(wxCommandEvent & event) { NewFile( event, TREE_NET ); }
+
+void WinEDA_PrjFrame::NewFile( wxCommandEvent & event, enum TreeFileType type )
+{
+	wxString filename;
+	wxString mask = GetFileExt( type );
+
+	filename = EDA_FileSelector(_("Create New File:"),
+	wxGetCwd(),	/* Chemin par defaut */
+	_("noname") + mask,	/* nom fichier par defaut */
+	mask,	/* extension par defaut */
+	mask,	/* Masque d'affichage */
+	this,
+	wxFD_SAVE,
+	FALSE
+	);
+	if ( filename.IsEmpty() ) return;
+
+	#ifdef KICAD_PYTHON
+	PyHandler::GetInstance()->TriggerEvent( wxT("kicad::NewFile"), PyHandler::Convert(filename) );
+	#endif
+
+	wxFile( filename, wxFile::write );
+	m_Parent->OnRefresh( event );
+}
+
+wxString WinEDA_PrjFrame::GetFileExt( enum TreeFileType type ) const
{
-wxTreeItemId cellule;
-// Check the file type :
-int type = TREE_UNKNOWN;
-wxRegEx reg;
wxString extensions[] =
{
- wxT( "" ), // 0
+	wxT( "" ),	// 0 is not used
wxT( ".pro" ), // TREE_PROJECT
g_SchExtBuffer, // TREE_SCHEMA
g_BoardExtBuffer, // TREE_PCB
@@ -124,16 +211,28 @@
g_GerberExtBuffer, // TREE_GERBER
wxT( ".pdf" ), // TREE_PDF
wxT( ".txt" ), // TREE_TXT
-	wxT( ".net" ),
- wxT( "<END>" ), // Last
+	wxT( ".net" ),	// TREE_NET
+	wxT( "" ),	// TREE_UNKNOWN
};

-	for ( int i = 0;; i++ )
+	if ( type < TREE_MAX ) return extensions[type];
+	return wxEmptyString;
+}
+
+void WinEDA_PrjFrame::AddFile( const wxString & name, int id )
+{
+wxTreeItemId cellule;
+// Check the file type :
+int type = TREE_UNKNOWN;
+wxRegEx reg;
+	
+	for ( int i = TREE_PROJECT; i < TREE_MAX; i++ )
{
-	if ( extensions[i] == wxT( "<END>" ) ) break;
-	if ( extensions[i] == wxT( "" ) ) continue;
+	wxString ext = GetFileExt( (enum TreeFileType) i );
+
+	if ( ext == wxT( "" ) ) continue;

-	reg.Compile( wxString::FromAscii( "^.*\\" ) + extensions[i] + wxString::FromAscii( "$" ), wxRE_ICASE );
+	reg.Compile( wxString::FromAscii( "^.*\\" ) + ext + wxString::FromAscii( "$" ), wxRE_ICASE );
if ( reg.Matches( name ) )
{
type = i;
@@ -220,15 +319,8 @@
PyHandler::GetInstance()->TriggerEvent( wxT("kicad::TreeContextMenu"), PyHandler::Convert( FullFileName ) );
#endif

-	switch ( tree_id )
-	{
- case TREE_PY:
-	PopupMenu( &m_PyPopupMenu );
-	break;
-
-	default:
-	break;
-	}
+	wxMenu * menu = GetContextMenu( tree_id );
+	if ( menu ) PopupMenu( menu );
}

void WinEDA_MainFrame::OnRefresh(wxCommandEvent & event )
@@ -250,6 +342,24 @@
}
}

+void WinEDA_PrjFrame::OnDeleteFile(wxCommandEvent &event )
+{
+	TreePrjItemData * tree_data = (TreePrjItemData*) m_TreeProject->GetItemData(m_TreeProject->GetSelection());
+	wxString filename = tree_data->m_FileName;
+
+	wxMessageDialog dialog( this, _("Do you really want to delete ") + filename, _("Delete File") 
+	, wxYES_NO | wxICON_QUESTION );
+
+	if ( wxID_YES == dialog.ShowModal() )
+	{
+	wxRemoveFile( filename );
+	m_Parent->OnRefresh( event );
+	#ifdef KICAD_PYTHON
+	PyHandler::GetInstance()->TriggerEvent( wxT("kicad::DeleteFile"), PyHandler::Convert( filename) );
+	#endif
+	}
+}
+
#ifdef KICAD_PYTHON
void WinEDA_PrjFrame::OnRunPy(wxCommandEvent & event )
{
@@ -260,6 +370,46 @@
}
#endif

+void WinEDA_PrjFrame::OnRenameAsk(wxTreeEvent & Event)
+{
+	TreePrjItemData * tree_data;
+	tree_data = (TreePrjItemData*)
+	m_TreeProject->GetItemData(m_TreeProject->GetSelection());
+
+	int tree_id = tree_data->m_Id;
+	if ( TREE_PROJECT == tree_id ) Event.Veto();
+}
+void WinEDA_PrjFrame::OnRename(wxTreeEvent & event)
+{
+	TreePrjItemData * tree_data;
+	tree_data = (TreePrjItemData*)
+	m_TreeProject->GetItemData(m_TreeProject->GetSelection());
+	int tree_id = tree_data->m_Id;
+	wxString filename = tree_data->m_FileName;
+	wxString newFile = event.GetLabel();
+	
+	wxRegEx reg( wxString::FromAscii( "^.*\\" ) + GetFileExt( (enum TreeFileType) tree_id ) + wxString::FromAscii( "$" ), wxRE_ICASE );
+	if ( tree_id != TREE_UNKNOWN && !reg.Matches( newFile ) )
+	{
+	wxMessageDialog dialog( this, _("Changing file extension will change file type.\n Do you want to continue ?"), _("Rename File") 
+	, wxYES_NO | wxICON_QUESTION );
+	if ( wxID_YES != dialog.ShowModal() )
+	{
+	event.Veto();
+	return;
+	}
+	}
+
+	wxRenameFile( filename, newFile );
+
+	#ifdef KICAD_PYTHON
+	boost::python::object param = boost::python::make_tuple( PyHandler::Convert( filename )
+	, PyHandler::Convert( newFile ) );
+	PyHandler::GetInstance()->TriggerEvent( wxT("kicad::RenameFile"), param );
+	#endif
+}
+
+
/**************************************************/
void WinEDA_PrjFrame::OnSelect(wxTreeEvent & Event)
/**************************************************/
@@ -333,7 +483,7 @@
WinEDA_TreePrj::WinEDA_TreePrj(WinEDA_PrjFrame * parent) :
wxTreeCtrl(parent, ID_PROJECT_TREE,
wxDefaultPosition, wxDefaultSize,
- wxTR_HAS_BUTTONS, wxDefaultValidator, wxT("EDATreeCtrl"))
+ wxTR_HAS_BUTTONS | wxTR_EDIT_LABELS, wxDefaultValidator, wxT("EDATreeCtrl"))
{
m_Parent = parent;
// Make an image list containing small icons
Index: kicad-dev/bitmaps/new_cvpcb.xpm
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ kicad-dev/bitmaps/new_cvpcb.xpm	2007-04-24 22:41:14.000000000 +0200
@@ -0,0 +1,106 @@
+/* XPM */
+static char * new_cvpcb_xpm[] = {
+"16 16 87 1",
+" c None",
+".	c #000000",
+"+	c #FEFEFE",
+"@	c #090909",
+"#	c #EEEEEE",
+"$	c #F1F1F1",
+"%	c #FBFBFB",
+"&	c #FF7800",
+"*	c #767676",
+"=	c #161616",
+"-	c #EFEFEF",
+";	c #AF5200",
+">	c #6A3200",
+",	c #6B3200",
+"'	c #984700",
+")	c #C4C4C4",
+"!	c #807F7F",
+"~	c #A88363",
+"{	c #D5D4D3",
+"]	c #FFFCFA",
+"^	c #FFDFC2",
+"/	c #FFCFA5",
+"(	c #FFB06A",
+"_	c #FFA04D",
+":	c #FF9130",
+"<	c #803C00",
+"[	c #ECECEC",
+"}	c #232323",
+"|	c #FFA352",
+"1	c #E4B58C",
+"2	c #D2CAC2",
+"3	c #FFDFC3",
+"4	c #FECFA5",
+"5	c #FEB06B",
+"6	c #FFA14E",
+"7	c #FF9230",
+"8	c #EBEBEB",
+"9	c #7D7D7D",
+"0	c #D48845",
+"a	c #A98C73",
+"b	c #817C78",
+"c	c #585451",
+"d	c #987B62",
+"e	c #847364",
+"f	c #C08959",
+"g	c #EC8C39",
+"h	c #100800",
+"i	c #EAEAEA",
+"j	c #B87941",
+"k	c #957D69",
+"l	c #666260",
+"m	c #666666",
+"n	c #282524",
+"o	c #766454",
+"p	c #AD784A",
+"q	c #C2742F",
+"r	c #E8E8E8",
+"s	c #DA8A44",
+"t	c #9E7A5A",
+"u	c #746960",
+"v	c #7B6F66",
+"w	c #B6967C",
+"x	c #92663E",
+"y	c #C98040",
+"z	c #EC8830",
+"A	c #E7E7E7",
+"B	c #E4944E",
+"C	c #B8A595",
+"D	c #E8E7E6",
+"E	c #FFE2C9",
+"F	c #FFD3AC",
+"G	c #FFB471",
+"H	c #FFA454",
+"I	c #FF9436",
+"J	c #803C02",
+"K	c #E5E5E5",
+"L	c #BBB8B6",
+"M	c #FEFDFD",
+"N	c #FFFEFE",
+"O	c #FFE3CA",
+"P	c #FFD3AD",
+"Q	c #FFB472",
+"R	c #FFA555",
+"S	c #FF9537",
+"T	c #803D02",
+"U	c #E4E4E4",
+"V	c #E3E3E3",
+" ............ ",
+".++++++++++@+. ",
+".+###$$$$$$@%+. ",
+".+###$$$&&&&*++.",
+".+###$$$&&&&@@=.",
+".+###$--;>,'.#).",
+".+#!~{]^/(_:<[).",
+"...}|1234567<8).",
+".+#90abcdefghi).",
+".+#!jklmnopqrr).",
+".+#!stuvwxyzhA).",
+"...}BCDEFGHIJK).",
+".+#9LMNOPQRSTU).",
+".+######;>,'.V).",
+".)))))))&&&&))).",
+" .............. "};
Index: kicad-dev/bitmaps/new_gerb.xpm
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ kicad-dev/bitmaps/new_gerb.xpm	2007-04-24 22:41:14.000000000 +0200
@@ -0,0 +1,97 @@
+/* XPM */
+static char * new_gerb_xpm[] = {
+"16 16 78 1",
+" c None",
+".	c #000000",
+"+	c #FEFEFE",
+"@	c #090909",
+"#	c #EEEEEE",
+"$	c #F1F1F1",
+"%	c #FBFBFB",
+"&	c #767676",
+"*	c #424040",
+"=	c #807F7F",
+"-	c #454343",
+";	c #272625",
+">	c #7E7D7D",
+",	c #818080",
+"'	c #212020",
+")	c #161616",
+"!	c #A4A3A3",
+"~	c #C4C4C4",
+"{	c #766453",
+"]	c #D4C9C0",
+"^	c #D9BFA8",
+"/	c #D37017",
+"(	c #D5A07F",
+"_	c #E9B9A3",
+":	c #A4A3A8",
+"<	c #ECECEC",
+"[	c #737372",
+"}	c #E4AB79",
+"|	c #E8A367",
+"1	c #F68724",
+"2	c #A16A41",
+"3	c #E1C3C7",
+"4	c #A3A3A8",
+"5	c #EBEBEB",
+"6	c #6D6C6C",
+"7	c #DBBB9E",
+"8	c #F7841E",
+"9	c #DABEA5",
+"0	c #D6C6B7",
+"a	c #846852",
+"b	c #E6A787",
+"c	c #A0A0A6",
+"d	c #EAEAEA",
+"e	c #B0631E",
+"f	c #E6A66D",
+"g	c #F28F36",
+"h	c #C87226",
+"i	c #A2A1B0",
+"j	c #9B9AA8",
+"k	c #9C9CA0",
+"l	c #E8E8E8",
+"m	c #E8B89F",
+"n	c #957460",
+"o	c #876D5E",
+"p	c #A2898A",
+"q	c #A58078",
+"r	c #ABA5C2",
+"s	c #C2C2D0",
+"t	c #E7E7E7",
+"u	c #E6C3BD",
+"v	c #E2BFBD",
+"w	c #DEBBBD",
+"x	c #DAB8BD",
+"y	c #DEA897",
+"z	c #CD9D95",
+"A	c #505068",
+"B	c #E6E6E6",
+"C	c #E5E5E5",
+"D	c #A3A2A2",
+"E	c #A09FA5",
+"F	c #9F9FA5",
+"G	c #9E9DA4",
+"H	c #9D9DA4",
+"I	c #9D9CA4",
+"J	c #9C9BA3",
+"K	c #C0C0C1",
+"L	c #E4E4E4",
+"M	c #E3E3E3",
+" ............ ",
+".++++++++++@+. ",
+".+###$$$$$$@%+. ",
+".+###$$$$$$@&++.",
+".+#**=-;>,,'@@).",
+".+#**=-;>,,!##~.",
+".+#,,{]^/(_:#<~.",
+".+#[[}}|1234#5~.",
+".+#667890abcdd~.",
+".+#,,efghijkll~.",
+".+#,,mnopqrstt~.",
+".+#,,uvwxyzABC~.",
+".+#DDEFGHIJKLL~.",
+".+########LMMM~.",
+".~~~~~~~~~~~~~~.",
+" .............. "};
Index: kicad-dev/bitmaps/new_pcb.xpm
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ kicad-dev/bitmaps/new_pcb.xpm	2007-04-24 22:41:14.000000000 +0200
@@ -0,0 +1,54 @@
+/* XPM */
+static char * new_pcb_xpm[] = {
+"16 16 35 1",
+" c None",
+".	c #000000",
+"+	c #FEFEFE",
+"@	c #090909",
+"#	c #EEEEEE",
+"$	c #F1F1F1",
+"%	c #FBFBFB",
+"&	c #FEFEFF",
+"*	c #F9AB7F",
+"=	c #9B9B9B",
+"-	c #161616",
+";	c #F55A00",
+">	c #C4C4C4",
+",	c #F4A67F",
+"'	c #FFFFFF",
+")	c #FAFAFF",
+"!	c #F6F6FF",
+"~	c #F2F2FF",
+"{	c #EBEBFF",
+"]	c #E7E7FF",
+"^	c #F9F9FF",
+"/	c #F1F1FF",
+"(	c #EEEEFF",
+"_	c #EAEAFF",
+":	c #E3E3FF",
+"<	c #DFDFFF",
+"[	c #FBFBFF",
+"}	c #F7F7FF",
+"|	c #F0F0FF",
+"1	c #ECECFF",
+"2	c #E5E5FF",
+"3	c #E1E1FF",
+"4	c #DDDDFF",
+"5	c #E3957F",
+"6	c #4D4D4D",
+" ............ ",
+".++++++++++@+. ",
+".+###$$$$$$@%+. ",
+".+...........++.",
+".+.&**&&&&&&.=-.",
+".+.&;;;;;;;;.=>.",
+".+.&&&&&&&;,.=>.",
+".+.&;;;;;;';.=>.",
+".+.&**&)!~{].=>.",
+".+.&;;;;;;;;.=>.",
+".+.&**^/(_:<.=>.",
+".+.&;;;;;;';.=>.",
+".+.[}|1234;5.=>.",
+".+..........6=>.",
+".>>===========>.",
+" .............. "};
Index: kicad-dev/bitmaps/new_python.xpm
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ kicad-dev/bitmaps/new_python.xpm	2007-04-24 22:41:14.000000000 +0200
@@ -0,0 +1,131 @@
+/* XPM */
+static char * new_python_xpm[] = {
+"16 16 112 2",
+" c None",
+". c #000000",
+"+ c #FEFEFE",
+"@ c #090909",
+"# c #EEEEEE",
+"$ c #F1F1F1",
+"% c #FBFBFB",
+"& c #DAE2E8",
+"* c #CDDBE7",
+"= c #528DBD",
+"- c #3C7BB0",
+"; c #5689B2",
+"> c #DAE1E7",
+", c #E9EBED",
+"' c #767676",
+") c #5590C1",
+"! c #79A9D1",
+"~ c #709FC6",
+"{ c #3777AC",
+"] c #3672A4",
+"^ c #3C73A2",
+"/ c #B2C4D4",
+"( c #161616",
+"_ c #C1D2E1",
+": c #C2D3E2",
+"< c #BFD0DE",
+"[ c #BBCCDB",
+"} c #366E9D",
+"| c #467695",
+"1 c #C4C787",
+"2 c #F8E78A",
+"3 c #C4C4C4",
+"4 c #B7CDDF",
+"5 c #3881BD",
+"6 c #387EB7",
+"7 c #3779B0",
+"8 c #3775A9",
+"9 c #366F9F",
+"0 c #366B99",
+"a c #597F89",
+"b c #DACF62",
+"c c #FFDF50",
+"d c #EEEDEC",
+"e c #ECECEC",
+"f c #4287C0",
+"g c #387EB8",
+"h c #377AB1",
+"i c #3776AB",
+"j c #366D9B",
+"k c #386A94",
+"l c #728F8F",
+"m c #E6CF5B",
+"n c #FFD545",
+"o c #F8D774",
+"p c #EBEBEB",
+"q c #3A7FB9",
+"r c #377BB4",
+"s c #4E86B5",
+"t c #A8B890",
+"u c #AEBA7A",
+"v c #AEB674",
+"w c #AFB26D",
+"x c #DCC969",
+"y c #FED348",
+"z c #FFCA38",
+"A c #F8CE5E",
+"B c #EAEAEA",
+"C c #4784B7",
+"D c #3778AD",
+"E c #88A38E",
+"F c #FDEC63",
+"G c #FFE95C",
+"H c #FFE254",
+"I c #FFDA4A",
+"J c #FFD140",
+"K c #FFC836",
+"L c #FFC330",
+"M c #F7CA65",
+"N c #E8E8E8",
+"O c #C1D1DE",
+"P c #457EAE",
+"Q c #95AB84",
+"R c #FFE95B",
+"S c #FBDB5F",
+"T c #FBD55E",
+"U c #FACE56",
+"V c #FAC851",
+"W c #FAC249",
+"X c #E7E7E7",
+"Y c #B9C9D7",
+"Z c #D4CD6F",
+"` c #FFE152",
+" .	c #FFD949",
+"..	c #F4D881",
+"+.	c #F1DA9F",
+"@.	c #F1D494",
+"#.	c #E9DFC6",
+"$.	c #E6E6E6",
+"%.	c #E5E5E5",
+"&.	c #F8DD79",
+"*.	c #FFD646",
+"=.	c #FFCE3D",
+"-.	c #FFC735",
+";.	c #FFE5AA",
+">.	c #FDCC64",
+",.	c #ECD9AF",
+"'.	c #E4E4E4",
+").	c #F0E8D3",
+"!.	c #FBC94A",
+"~.	c #FDBF36",
+"{.	c #F9C150",
+"].	c #E3E3E3",
+" . . . . . . . . . . . . ",
+". + + + + + + + + + + @ + . ",
+". + # # # $ $ $ $ $ $ @ % + . ",
+". + # # & * = - ; > , @ ' + + . ",
+". + # # ) ! ~ { ] ^ / @ @ @ ( . ",
+". + # # _ : < [ } | 1 2 # # 3 . ",
+". + 4 5 6 7 8 9 0 a b c d e 3 . ",
+". + f g h i ] j k l m n o p 3 . ",
+". + q r s t u v w x y z A B 3 . ",
+". + C D E F G H I J K L M N 3 . ",
+". + O P Q R H S T U V W X X 3 . ",
+". + # Y Z ` ...+.@.#.$.$.%.3 . ",
+". + # # &.*.=.-.;.>.,.%.'.'.3 . ",
+". + # # # ).!.~.{.# '.].].].3 . ",
+". 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . ",
+" . . . . . . . . . . . . . . "};
Index: kicad-dev/bitmaps/new_sch.xpm
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ kicad-dev/bitmaps/new_sch.xpm	2007-04-24 22:41:14.000000000 +0200
@@ -0,0 +1,85 @@
+/* XPM */
+static char * new_sch_xpm[] = {
+"16 16 66 1",
+" c None",
+".	c #000000",
+"+	c #FEFEFE",
+"@	c #090909",
+"#	c #EEEEEE",
+"$	c #F1F1F1",
+"%	c #FBFBFB",
+"&	c #FDFDFD",
+"*	c #FCFCFC",
+"=	c #DEDEDE",
+"-	c #BFBFBF",
+";	c #767676",
+">	c #F0F0F0",
+",	c #C1C1C1",
+"'	c #F9F9F9",
+")	c #161616",
+"!	c #E2E2E2",
+"~	c #8F8F8F",
+"{	c #B1B1B1",
+"]	c #6F3400",
+"^	c #FF7800",
+"/	c #848383",
+"(	c #151515",
+"_	c #C4C4C4",
+":	c #823D00",
+"<	c #040404",
+"[	c #BDBDBD",
+"}	c #ECECEC",
+"|	c #E0E0E0",
+"1	c #8E8E8E",
+"2	c #AFAFAF",
+"3	c #753700",
+"4	c #F67400",
+"5	c #BCBCBC",
+"6	c #EBEBEB",
+"7	c #E5E5E5",
+"8	c #1A1A1A",
+"9	c #AEAEAE",
+"0	c #EAEAEA",
+"a	c #ACACAC",
+"b	c #BD5900",
+"c	c #231000",
+"d	c #636363",
+"e	c #E7E7E7",
+"f	c #D9D9D9",
+"g	c #B9B9B9",
+"h	c #E8E8E8",
+"i	c #F4F4F4",
+"j	c #AAAAAA",
+"k	c #8A8A8A",
+"l	c #BEBEBE",
+"m	c #F37200",
+"n	c #A8A8A8",
+"o	c #888888",
+"p	c #D6D6D6",
+"q	c #E6E6E6",
+"r	c #060606",
+"s	c #B05300",
+"t	c #1C0D00",
+"u	c #626262",
+"v	c #E3E3E3",
+"w	c #BABABA",
+"x	c #E4E4E4",
+"y	c #8B8B8B",
+"z	c #BBBBBB",
+"A	c #9F9F9F",
+" ............ ",
+".++++++++++@+. ",
+".+#.......$@%+. ",
+".+.&&&&*=-.@;++.",
+".+.&>>>>,'..@@).",
+".+.&!~{]^/(.##_.",
+".+...:<^^^[.#}_.",
+".+.&|1234^5.#6_.",
+".+.78960a89.00_.",
+".+.(bcdeefg.hh_.",
+".+.i^43jkfl.ee_.",
+".+.i^m]nop5.q7_.",
+".+.rstuv!!w.xx_.",
+".+.w(yzwwwA.vv_.",
+".______________.",
+" .............. "};
Index: kicad-dev/bitmaps/new_txt.xpm
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ kicad-dev/bitmaps/new_txt.xpm	2007-04-24 22:41:14.000000000 +0200
@@ -0,0 +1,97 @@
+/* XPM */
+static char * new_txt_xpm[] = {
+"16 16 78 1",
+" c None",
+".	c #000000",
+"+	c #FEFEFE",
+"@	c #090909",
+"#	c #EEEEEE",
+"$	c #F1F1F1",
+"%	c #FBFBFB",
+"&	c #FBE291",
+"*	c #F2CC84",
+"=	c #E2B497",
+"-	c #F3F3F3",
+";	c #767676",
+">	c #F3F2F1",
+",	c #FCE135",
+"'	c #FFC729",
+")	c #F6AB5E",
+"!	c #F1EBE9",
+"~	c #F0F0F0",
+"{	c #161616",
+"]	c #FCE397",
+"^	c #FFDB35",
+"/	c #FFC340",
+"(	c #EAA871",
+"_	c #EFEFEF",
+":	c #C4C4C4",
+"<	c #F6F6F6",
+"[	c #FDE24E",
+"}	c #FFCC36",
+"|	c #FCAC4C",
+"1	c #EEE2D9",
+"2	c #ECECEC",
+"3	c #FBE8B5",
+"4	c #FFE458",
+"5	c #FFCD55",
+"6	c #EDAA6D",
+"7	c #EBEBEB",
+"8	c #FEE473",
+"9	c #FFD861",
+"0	c #FDC16A",
+"a	c #EADBD1",
+"b	c #EDEDED",
+"c	c #EAEAEA",
+"d	c #F4E9CE",
+"e	c #FEEB80",
+"f	c #FFD871",
+"g	c #EFB579",
+"h	c #E9E9E9",
+"i	c #E8E8E8",
+"j	c #E3E3E6",
+"k	c #DDDDE1",
+"l	c #FDFDFD",
+"m	c #FBDF8D",
+"n	c #FFE389",
+"o	c #FED58A",
+"p	c #E7C8B2",
+"q	c #E2E2E5",
+"r	c #DEDEE2",
+"s	c #DFDFE2",
+"t	c #E7E7E7",
+"u	c #FCFCFC",
+"v	c #F7D090",
+"w	c #FFEAB7",
+"x	c #ECB989",
+"y	c #E0E0E4",
+"z	c #DCDCE1",
+"A	c #E6E6E6",
+"B	c #E5E5E5",
+"C	c #E0B98F",
+"D	c #E2AD8A",
+"E	c #DBD1D1",
+"F	c #DDDDE2",
+"G	c #E0E0E3",
+"H	c #E4E4E4",
+"I	c #DBBDA9",
+"J	c #E0DBDC",
+"K	c #E1E1E6",
+"L	c #E5E5E8",
+"M	c #E3E3E3",
+" ............ ",
+".++++++++++@+. ",
+".+###$$$$$$@%+. ",
+".+###&*=-$$@;++.",
+".+##>,')!$~@@@{.",
+".+#~]^/(-___##:.",
+".+#<[}|1_####2:.",
+".+#3456~#####7:.",
+".+-890a222bccc:.",
+".+defghihjkhii:.",
+".lmnop7qkrsttt:.",
+".uvwxyzzAAAAAB:.",
+".uCDEFFGAABBHH:.",
+".lIJKL####HMMM:.",
+".::::::::::::::.",
+" .............. "};
 --------------060203020608010303070001--