2007-05-28 18:09:49 +00:00
|
|
|
/***************/
|
|
|
|
/* treeprj.cpp */
|
|
|
|
/***************/
|
|
|
|
|
|
|
|
#ifdef KICAD_PYTHON
|
|
|
|
#include <pyhandler.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "fctsys.h"
|
|
|
|
#include "gr_basic.h"
|
|
|
|
#include "common.h"
|
|
|
|
|
|
|
|
#include "kicad.h"
|
|
|
|
#include "protos.h"
|
|
|
|
|
|
|
|
#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_gerbview_small.xpm"
|
|
|
|
#include "bitmaps/icon_cvpcb_small.xpm"
|
|
|
|
#include "bitmaps/unknown.xpm"
|
|
|
|
|
|
|
|
#include "id.h"
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************/
|
|
|
|
/* Methodes pour l'arbre gestion du projet */
|
|
|
|
/********************************************/
|
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
IMPLEMENT_ABSTRACT_CLASS( WinEDA_TreePrj, wxTreeCtrl )
|
|
|
|
|
|
|
|
WinEDA_TreePrj::WinEDA_TreePrj( WinEDA_PrjFrame* parent ) :
|
|
|
|
wxTreeCtrl( parent, ID_PROJECT_TREE,
|
|
|
|
wxDefaultPosition, wxDefaultSize,
|
|
|
|
wxTR_HAS_BUTTONS | wxTR_EDIT_LABELS, wxDefaultValidator, wxT( "EDATreeCtrl" ) )
|
2007-05-28 18:09:49 +00:00
|
|
|
{
|
2007-09-13 11:55:46 +00:00
|
|
|
m_Parent = parent;
|
|
|
|
|
|
|
|
// Make an image list containing small icons
|
|
|
|
m_ImageList = new wxImageList( 16, 16, TRUE, TREE_MAX );
|
|
|
|
|
|
|
|
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
|
|
|
|
m_ImageList->Add( wxBitmap( directory_xpm ) ); // TREE_DIRECTORY
|
|
|
|
|
|
|
|
SetImageList( m_ImageList );
|
2007-05-28 18:09:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***************************************************************************************/
|
2007-09-13 11:55:46 +00:00
|
|
|
int WinEDA_TreePrj::OnCompareItems( const wxTreeItemId& item1, const wxTreeItemId& item2 )
|
2007-05-28 18:09:49 +00:00
|
|
|
/***************************************************************************************/
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2007-05-28 18:09:49 +00:00
|
|
|
/* sort function for tree items.
|
2007-09-13 11:55:46 +00:00
|
|
|
* items are sorted :
|
|
|
|
* directory names first by alphabetic order
|
|
|
|
* root file names after
|
|
|
|
* file names last by alphabetic order
|
|
|
|
*/
|
2007-05-28 18:09:49 +00:00
|
|
|
{
|
2007-09-13 11:55:46 +00:00
|
|
|
TreePrjItemData* myitem1 = (TreePrjItemData*) GetItemData( item1 );
|
|
|
|
TreePrjItemData* myitem2 = (TreePrjItemData*) GetItemData( item2 );
|
|
|
|
|
|
|
|
if( (myitem1->m_Type == TREE_DIRECTORY) && ( myitem2->m_Type != TREE_DIRECTORY ) )
|
|
|
|
return -1;
|
|
|
|
if( (myitem2->m_Type == TREE_DIRECTORY) && ( myitem1->m_Type != TREE_DIRECTORY ) )
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
if( myitem1->m_IsRootFile && !myitem2->m_IsRootFile )
|
|
|
|
return -1;
|
|
|
|
if( myitem2->m_IsRootFile && !myitem1->m_IsRootFile )
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
return myitem1->m_FileName.CmpNoCase( myitem2->m_FileName );
|
2007-05-28 18:09:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************************************************/
|
2007-09-13 11:55:46 +00:00
|
|
|
TreePrjItemData::TreePrjItemData( enum TreeFileType type, const wxString& data,
|
|
|
|
wxTreeCtrl* parent ) :
|
|
|
|
wxTreeItemData()
|
2007-05-28 18:09:49 +00:00
|
|
|
/****************************************************************************************************/
|
|
|
|
{
|
2007-09-13 11:55:46 +00:00
|
|
|
m_Type = type;
|
|
|
|
m_Parent = parent;
|
|
|
|
m_FileName = data;
|
|
|
|
m_IsRootFile = false;
|
2007-05-28 18:09:49 +00:00
|
|
|
}
|
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2007-05-28 18:09:49 +00:00
|
|
|
#ifdef KICAD_PYTHON
|
|
|
|
using namespace boost::python;
|
|
|
|
|
|
|
|
/**************************************/
|
|
|
|
object TreePrjItemData::GetIdPy() const
|
|
|
|
/**************************************/
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2007-05-28 18:09:49 +00:00
|
|
|
// Convert the data to an id
|
|
|
|
{
|
2007-09-13 11:55:46 +00:00
|
|
|
wxTreeItemId* id = new wxTreeItemId();
|
|
|
|
|
|
|
|
*id = GetId();
|
|
|
|
return object( handle<>( borrowed( wxPyConstructObject( id, wxT( "wxTreeItemId" ), true ) ) ) );
|
2007-05-28 18:09:49 +00:00
|
|
|
}
|
2007-09-13 11:55:46 +00:00
|
|
|
|
|
|
|
|
2007-05-28 18:09:49 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/*******************************************/
|
|
|
|
void TreePrjItemData::SetState( int state )
|
|
|
|
/*******************************************/
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2007-05-28 18:09:49 +00:00
|
|
|
// Set the state used in the icon list
|
|
|
|
{
|
2007-09-13 11:55:46 +00:00
|
|
|
wxImageList* imglist = m_Parent->GetImageList();
|
|
|
|
|
|
|
|
if( !imglist || state < 0 || state >= imglist->GetImageCount() / ( TREE_MAX - 2 ) )
|
|
|
|
return;
|
|
|
|
m_State = state;
|
|
|
|
int imgid = m_Type - 1 + state * ( TREE_MAX - 1 );
|
|
|
|
m_Parent->SetItemImage( GetId(), imgid );
|
|
|
|
m_Parent->SetItemImage( GetId(), imgid, wxTreeItemIcon_Selected );
|
2007-05-28 18:09:49 +00:00
|
|
|
}
|
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2007-05-28 18:09:49 +00:00
|
|
|
/*******************************************/
|
|
|
|
wxString TreePrjItemData::GetDir() const
|
|
|
|
/*******************************************/
|
|
|
|
/* Get the directory containing the file */
|
|
|
|
{
|
2007-09-13 11:55:46 +00:00
|
|
|
if( TREE_DIRECTORY == m_Type )
|
|
|
|
return m_FileName;
|
|
|
|
|
|
|
|
wxFileName filename = wxFileName( m_FileName );
|
|
|
|
|
|
|
|
filename.MakeRelativeTo( wxGetCwd() );
|
|
|
|
|
|
|
|
wxArrayString dirs = filename.GetDirs();
|
|
|
|
|
|
|
|
wxString dir;
|
|
|
|
for( unsigned int i = 0; i < dirs.Count(); i++ )
|
|
|
|
{
|
|
|
|
dir += dirs[i] + filename.GetPathSeparator();
|
|
|
|
}
|
|
|
|
|
|
|
|
return dir;
|
2007-05-28 18:09:49 +00:00
|
|
|
}
|
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2007-05-28 18:09:49 +00:00
|
|
|
/****************************************************************/
|
2007-09-13 11:55:46 +00:00
|
|
|
void TreePrjItemData::OnRename( wxTreeEvent& event, bool check )
|
2007-05-28 18:09:49 +00:00
|
|
|
/****************************************************************/
|
|
|
|
/* Called upon tree item rename */
|
|
|
|
{
|
modified the treeprj so that, instead of recursively scanning and adding
*all* the nested files and directories within the current working directory, it scans the first
level of files and directories. When a user double-clicks on a folder, *then*
the childeren of that directory are added to the wxTreeCtrl. This means that the little
triangle does not appear until the user opens a directory .. but, i think this is
a worthwile price to pay given below.
This prevents (or at least mitigates) memory overflow in the case that kicad starts in root, or,
in my case, it starts in my home directory, where thanks to wine & other sw,
there are far too many directories.
also modified the TreePrjItemData so that it stores the full pathnames in m_FileName,
not paths relative to the CWD. I'm not sure if this is the correct thing to do,
especially with the python interface, so change it back if it is more complicated.
the move and rename commands threw a segfault on my system
(Debian etch, wxWidgets 2.8.7),
and since there are better ways to rename and move files, this functionality
was disabled until somebody can fix it (alas, I don't have time for this now)
2007-12-16 18:44:12 +00:00
|
|
|
//this segfaults on linux (in wxEvtHandler::ProcessEvent), wx version 2.8.7
|
|
|
|
//therefore, until it is fixed, we must cancel the rename.
|
|
|
|
event.Veto();
|
|
|
|
return;
|
2007-09-13 11:55:46 +00:00
|
|
|
if( !Rename( event.GetLabel(), check ) )
|
|
|
|
event.Veto();
|
2007-05-28 18:09:49 +00:00
|
|
|
}
|
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2007-05-28 18:09:49 +00:00
|
|
|
/****************************************************/
|
2007-09-13 11:55:46 +00:00
|
|
|
void TreePrjItemData::Move( TreePrjItemData* dest )
|
2007-05-28 18:09:49 +00:00
|
|
|
/****************************************************/
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2007-05-28 18:09:49 +00:00
|
|
|
// Move the object to dest
|
|
|
|
{
|
modified the treeprj so that, instead of recursively scanning and adding
*all* the nested files and directories within the current working directory, it scans the first
level of files and directories. When a user double-clicks on a folder, *then*
the childeren of that directory are added to the wxTreeCtrl. This means that the little
triangle does not appear until the user opens a directory .. but, i think this is
a worthwile price to pay given below.
This prevents (or at least mitigates) memory overflow in the case that kicad starts in root, or,
in my case, it starts in my home directory, where thanks to wine & other sw,
there are far too many directories.
also modified the TreePrjItemData so that it stores the full pathnames in m_FileName,
not paths relative to the CWD. I'm not sure if this is the correct thing to do,
especially with the python interface, so change it back if it is more complicated.
the move and rename commands threw a segfault on my system
(Debian etch, wxWidgets 2.8.7),
and since there are better ways to rename and move files, this functionality
was disabled until somebody can fix it (alas, I don't have time for this now)
2007-12-16 18:44:12 +00:00
|
|
|
//function not safe.
|
|
|
|
return;
|
2007-05-28 18:09:49 +00:00
|
|
|
const wxString sep = wxFileName().GetPathSeparator();
|
modified the treeprj so that, instead of recursively scanning and adding
*all* the nested files and directories within the current working directory, it scans the first
level of files and directories. When a user double-clicks on a folder, *then*
the childeren of that directory are added to the wxTreeCtrl. This means that the little
triangle does not appear until the user opens a directory .. but, i think this is
a worthwile price to pay given below.
This prevents (or at least mitigates) memory overflow in the case that kicad starts in root, or,
in my case, it starts in my home directory, where thanks to wine & other sw,
there are far too many directories.
also modified the TreePrjItemData so that it stores the full pathnames in m_FileName,
not paths relative to the CWD. I'm not sure if this is the correct thing to do,
especially with the python interface, so change it back if it is more complicated.
the move and rename commands threw a segfault on my system
(Debian etch, wxWidgets 2.8.7),
and since there are better ways to rename and move files, this functionality
was disabled until somebody can fix it (alas, I don't have time for this now)
2007-12-16 18:44:12 +00:00
|
|
|
|
|
|
|
if( m_Type == TREE_DIRECTORY )
|
|
|
|
return;
|
2007-09-13 11:55:46 +00:00
|
|
|
if( !dest )
|
|
|
|
return;
|
|
|
|
if( m_Parent != dest->m_Parent )
|
|
|
|
return; // Can not cross move!
|
|
|
|
if( dest == this )
|
|
|
|
return; // Can not move to ourself...
|
|
|
|
|
|
|
|
wxTreeItemId parent = m_Parent->GetItemParent( GetId() );
|
|
|
|
if( dest == dynamic_cast<TreePrjItemData*>( m_Parent->GetItemData( parent ) ) )
|
|
|
|
return; // same parent ?
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
// We need to create a new item from us, and move
|
|
|
|
// data to there ...
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
// First move file on the disk
|
|
|
|
wxFileName fname( m_FileName );
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
wxString destName;
|
|
|
|
if( !dest->GetDir().IsEmpty() )
|
|
|
|
destName = dest->GetDir() + sep;
|
|
|
|
destName += fname.GetFullName();
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
if( destName == GetFileName() )
|
|
|
|
return; // Same place ??
|
|
|
|
|
|
|
|
// Move the file on the disk:
|
|
|
|
#if ( ( wxMAJOR_VERSION < 2) || ( ( wxMAJOR_VERSION == 2)&& (wxMINOR_VERSION < 7 ) ) )
|
|
|
|
if( !wxRenameFile( GetFileName(), destName ) )
|
2007-06-05 17:43:34 +00:00
|
|
|
#else
|
2007-09-13 11:55:46 +00:00
|
|
|
if( !wxRenameFile( GetFileName(), destName, false ) )
|
2007-06-05 17:43:34 +00:00
|
|
|
#endif
|
2007-09-13 11:55:46 +00:00
|
|
|
{
|
|
|
|
wxMessageDialog( m_Parent, _( "Unable to move file ... " ), _(
|
|
|
|
"Permission error ?" ), wxICON_ERROR | wxOK );
|
|
|
|
return;
|
|
|
|
}
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
#ifdef KICAD_PYTHON
|
|
|
|
object param = make_tuple( PyHandler::Convert( m_FileName ),
|
|
|
|
PyHandler::Convert( destName ) );
|
|
|
|
PyHandler::GetInstance()->TriggerEvent( wxT( "kicad::MoveFile" ), param );
|
|
|
|
#endif
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
SetFileName( destName );
|
|
|
|
|
|
|
|
if( TREE_DIRECTORY != GetType() )
|
|
|
|
{
|
|
|
|
// Move the tree item itself now:
|
|
|
|
wxTreeItemId oldId = GetId();
|
|
|
|
int i = m_Parent->GetItemImage( oldId );
|
|
|
|
wxString text = m_Parent->GetItemText( oldId );
|
|
|
|
|
|
|
|
// Bye bye old Id :'(
|
|
|
|
wxTreeItemId newId = m_Parent->AppendItem( dest->GetId(), text, i );
|
|
|
|
m_Parent->SetItemData( newId, this );
|
|
|
|
m_Parent->SetItemData( oldId, NULL );
|
|
|
|
m_Parent->Delete( oldId );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// We should move recursively all files, but that's quite boring
|
|
|
|
// let's just refresh that's all ... TODO (change this to a better code ...)
|
|
|
|
wxCommandEvent dummy;
|
|
|
|
dynamic_cast<WinEDA_TreePrj*>( m_Parent )->GetParent()->m_Parent->OnRefresh( dummy );
|
|
|
|
}
|
2007-05-28 18:09:49 +00:00
|
|
|
}
|
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2007-05-28 18:09:49 +00:00
|
|
|
/****************************************************************/
|
2007-09-13 11:55:46 +00:00
|
|
|
bool TreePrjItemData::Rename( const wxString& name, bool check )
|
2007-05-28 18:09:49 +00:00
|
|
|
/****************************************************************/
|
|
|
|
/* rename the file checking if extension change occurs */
|
|
|
|
{
|
modified the treeprj so that, instead of recursively scanning and adding
*all* the nested files and directories within the current working directory, it scans the first
level of files and directories. When a user double-clicks on a folder, *then*
the childeren of that directory are added to the wxTreeCtrl. This means that the little
triangle does not appear until the user opens a directory .. but, i think this is
a worthwile price to pay given below.
This prevents (or at least mitigates) memory overflow in the case that kicad starts in root, or,
in my case, it starts in my home directory, where thanks to wine & other sw,
there are far too many directories.
also modified the TreePrjItemData so that it stores the full pathnames in m_FileName,
not paths relative to the CWD. I'm not sure if this is the correct thing to do,
especially with the python interface, so change it back if it is more complicated.
the move and rename commands threw a segfault on my system
(Debian etch, wxWidgets 2.8.7),
and since there are better ways to rename and move files, this functionality
was disabled until somebody can fix it (alas, I don't have time for this now)
2007-12-16 18:44:12 +00:00
|
|
|
//this is broken & unsafe to use on linux.
|
|
|
|
if( m_Type == TREE_DIRECTORY )
|
|
|
|
return false;
|
2007-09-13 11:55:46 +00:00
|
|
|
if( name.IsEmpty() )
|
|
|
|
return false;
|
2007-05-28 18:09:49 +00:00
|
|
|
|
|
|
|
const wxString sep = wxFileName().GetPathSeparator();
|
2007-09-13 11:55:46 +00:00
|
|
|
wxString newFile;
|
|
|
|
wxString dirs = GetDir();
|
|
|
|
|
|
|
|
if( !dirs.IsEmpty() && GetType() != TREE_DIRECTORY )
|
|
|
|
newFile = dirs + sep + name;
|
|
|
|
else
|
|
|
|
newFile = name;
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
if( newFile == m_FileName )
|
|
|
|
return false;
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
wxString ext = WinEDA_PrjFrame::GetFileExt( GetType() );
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
wxRegEx reg( wxT ( "^.*\\" ) + ext + wxT( "$" ), wxRE_ICASE );
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
if( check && !ext.IsEmpty() && !reg.Matches( newFile ) )
|
|
|
|
{
|
|
|
|
wxMessageDialog dialog( m_Parent,
|
|
|
|
_(
|
|
|
|
"Changing file extension will change file type.\n Do you want to continue ?" ),
|
|
|
|
_( "Rename File" ),
|
|
|
|
wxYES_NO | wxICON_QUESTION );
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
if( wxID_YES != dialog.ShowModal() )
|
|
|
|
return false;
|
|
|
|
}
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
#if ( (wxMAJOR_VERSION < 2) || ( (wxMAJOR_VERSION == 2) && (wxMINOR_VERSION < 7) ) )
|
|
|
|
if( !wxRenameFile( m_FileName, newFile ) )
|
2007-06-05 17:43:34 +00:00
|
|
|
#else
|
2007-09-13 11:55:46 +00:00
|
|
|
if( !wxRenameFile( m_FileName, newFile, false ) )
|
2007-06-05 17:43:34 +00:00
|
|
|
#endif
|
2007-09-13 11:55:46 +00:00
|
|
|
{
|
|
|
|
wxMessageDialog( m_Parent, _( "Unable to rename file ... " ),
|
|
|
|
_("Permission error ?" ), wxICON_ERROR | wxOK );
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
SetFileName( newFile );
|
|
|
|
|
|
|
|
#ifdef KICAD_PYTHON
|
|
|
|
object param = make_tuple( PyHandler::Convert( m_FileName ),
|
|
|
|
PyHandler::Convert( newFile ) );
|
|
|
|
PyHandler::GetInstance()->TriggerEvent( wxT( "kicad::RenameFile" ), param );
|
|
|
|
#endif
|
|
|
|
return true;
|
2007-05-28 18:09:49 +00:00
|
|
|
}
|
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2007-05-28 18:09:49 +00:00
|
|
|
/*******************************************/
|
|
|
|
bool TreePrjItemData::Delete( bool check )
|
|
|
|
/*******************************************/
|
|
|
|
/* delete a file */
|
|
|
|
{
|
2007-09-13 11:55:46 +00:00
|
|
|
wxMessageDialog dialog( m_Parent, _ ("Do you really want to delete ") + GetFileName(),
|
|
|
|
_("Delete File" ), wxYES_NO | wxICON_QUESTION );
|
|
|
|
|
|
|
|
if( !check || wxID_YES == dialog.ShowModal() )
|
|
|
|
{
|
|
|
|
if( !wxDirExists( m_FileName ) )
|
|
|
|
{
|
|
|
|
wxRemoveFile( m_FileName );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
wxArrayString filelist;
|
|
|
|
|
|
|
|
wxDir::GetAllFiles( m_FileName, &filelist );
|
|
|
|
|
|
|
|
for( unsigned int i = 0; i < filelist.Count(); i++ )
|
|
|
|
wxRemoveFile( filelist[i] );
|
|
|
|
|
|
|
|
wxRmdir( m_FileName );
|
|
|
|
}
|
|
|
|
m_Parent->Delete( GetId() );
|
|
|
|
|
|
|
|
#ifdef KICAD_PYTHON
|
|
|
|
PyHandler::GetInstance()->TriggerEvent( wxT( "kicad::DeleteFile" ),
|
|
|
|
PyHandler::Convert( m_FileName ) );
|
|
|
|
#endif
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
2007-05-28 18:09:49 +00:00
|
|
|
}
|
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2007-05-28 18:09:49 +00:00
|
|
|
/**********************************/
|
modified the treeprj so that, instead of recursively scanning and adding
*all* the nested files and directories within the current working directory, it scans the first
level of files and directories. When a user double-clicks on a folder, *then*
the childeren of that directory are added to the wxTreeCtrl. This means that the little
triangle does not appear until the user opens a directory .. but, i think this is
a worthwile price to pay given below.
This prevents (or at least mitigates) memory overflow in the case that kicad starts in root, or,
in my case, it starts in my home directory, where thanks to wine & other sw,
there are far too many directories.
also modified the TreePrjItemData so that it stores the full pathnames in m_FileName,
not paths relative to the CWD. I'm not sure if this is the correct thing to do,
especially with the python interface, so change it back if it is more complicated.
the move and rename commands threw a segfault on my system
(Debian etch, wxWidgets 2.8.7),
and since there are better ways to rename and move files, this functionality
was disabled until somebody can fix it (alas, I don't have time for this now)
2007-12-16 18:44:12 +00:00
|
|
|
void TreePrjItemData::Activate(WinEDA_PrjFrame* prjframe)
|
2007-05-28 18:09:49 +00:00
|
|
|
/**********************************/
|
|
|
|
/* Called under item activation */
|
|
|
|
{
|
modified the treeprj so that, instead of recursively scanning and adding
*all* the nested files and directories within the current working directory, it scans the first
level of files and directories. When a user double-clicks on a folder, *then*
the childeren of that directory are added to the wxTreeCtrl. This means that the little
triangle does not appear until the user opens a directory .. but, i think this is
a worthwile price to pay given below.
This prevents (or at least mitigates) memory overflow in the case that kicad starts in root, or,
in my case, it starts in my home directory, where thanks to wine & other sw,
there are far too many directories.
also modified the TreePrjItemData so that it stores the full pathnames in m_FileName,
not paths relative to the CWD. I'm not sure if this is the correct thing to do,
especially with the python interface, so change it back if it is more complicated.
the move and rename commands threw a segfault on my system
(Debian etch, wxWidgets 2.8.7),
and since there are better ways to rename and move files, this functionality
was disabled until somebody can fix it (alas, I don't have time for this now)
2007-12-16 18:44:12 +00:00
|
|
|
wxString sep = wxFileName().GetPathSeparator();
|
|
|
|
wxString FullFileName = GetFileName();
|
|
|
|
wxDir *dir;
|
|
|
|
wxString dir_filename;
|
|
|
|
wxTreeItemId id = GetId();
|
|
|
|
int count;
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
switch( GetType() )
|
|
|
|
{
|
|
|
|
case TREE_PROJECT:
|
|
|
|
break;
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
case TREE_DIRECTORY:
|
modified the treeprj so that, instead of recursively scanning and adding
*all* the nested files and directories within the current working directory, it scans the first
level of files and directories. When a user double-clicks on a folder, *then*
the childeren of that directory are added to the wxTreeCtrl. This means that the little
triangle does not appear until the user opens a directory .. but, i think this is
a worthwile price to pay given below.
This prevents (or at least mitigates) memory overflow in the case that kicad starts in root, or,
in my case, it starts in my home directory, where thanks to wine & other sw,
there are far too many directories.
also modified the TreePrjItemData so that it stores the full pathnames in m_FileName,
not paths relative to the CWD. I'm not sure if this is the correct thing to do,
especially with the python interface, so change it back if it is more complicated.
the move and rename commands threw a segfault on my system
(Debian etch, wxWidgets 2.8.7),
and since there are better ways to rename and move files, this functionality
was disabled until somebody can fix it (alas, I don't have time for this now)
2007-12-16 18:44:12 +00:00
|
|
|
if(prjframe){
|
|
|
|
dir = new wxDir(FullFileName);
|
|
|
|
count = 0;
|
|
|
|
if( dir && dir->IsOpened() && dir->GetFirst( &dir_filename ) )
|
|
|
|
{
|
|
|
|
do
|
|
|
|
{
|
|
|
|
wxString fil = FullFileName + sep + dir_filename;
|
|
|
|
|
|
|
|
if( prjframe->AddFile(fil, id) ){
|
|
|
|
count++;
|
|
|
|
}
|
|
|
|
} while( dir->GetNext( &dir_filename ) );
|
|
|
|
}
|
|
|
|
if(count == 0)
|
|
|
|
{
|
2007-12-17 20:18:04 +00:00
|
|
|
prjframe->AddFile(wxString(_("no kicad files found in this directory")), id);
|
modified the treeprj so that, instead of recursively scanning and adding
*all* the nested files and directories within the current working directory, it scans the first
level of files and directories. When a user double-clicks on a folder, *then*
the childeren of that directory are added to the wxTreeCtrl. This means that the little
triangle does not appear until the user opens a directory .. but, i think this is
a worthwile price to pay given below.
This prevents (or at least mitigates) memory overflow in the case that kicad starts in root, or,
in my case, it starts in my home directory, where thanks to wine & other sw,
there are far too many directories.
also modified the TreePrjItemData so that it stores the full pathnames in m_FileName,
not paths relative to the CWD. I'm not sure if this is the correct thing to do,
especially with the python interface, so change it back if it is more complicated.
the move and rename commands threw a segfault on my system
(Debian etch, wxWidgets 2.8.7),
and since there are better ways to rename and move files, this functionality
was disabled until somebody can fix it (alas, I don't have time for this now)
2007-12-16 18:44:12 +00:00
|
|
|
}
|
|
|
|
/* Sort filenames by alphabetic order */
|
|
|
|
m_Parent->SortChildren( id );
|
|
|
|
if(dir) delete dir;
|
|
|
|
}
|
|
|
|
m_Parent->Toggle( id );
|
2007-09-13 11:55:46 +00:00
|
|
|
break;
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
case TREE_SCHEMA:
|
|
|
|
{
|
|
|
|
AddDelimiterString( FullFileName );
|
|
|
|
ExecuteFile( m_Parent, EESCHEMA_EXE, FullFileName );
|
|
|
|
break;
|
|
|
|
}
|
2007-05-28 18:09:49 +00:00
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
case TREE_PCB:
|
|
|
|
AddDelimiterString( FullFileName );
|
|
|
|
ExecuteFile( m_Parent, PCBNEW_EXE, FullFileName );
|
|
|
|
break;
|
2007-05-28 18:09:49 +00:00
|
|
|
|
|
|
|
#ifdef KICAD_PYTHON
|
2007-09-13 11:55:46 +00:00
|
|
|
case TREE_PY:
|
|
|
|
PyHandler::GetInstance()->RunScript( FullFileName );
|
|
|
|
break;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
case TREE_GERBER:
|
|
|
|
AddDelimiterString( FullFileName );
|
|
|
|
ExecuteFile( m_Parent, GERBVIEW_EXE, FullFileName );
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TREE_PDF:
|
|
|
|
OpenPDF( FullFileName );
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TREE_NET:
|
|
|
|
AddDelimiterString( FullFileName );
|
|
|
|
ExecuteFile( m_Parent, CVPCB_EXE, FullFileName );
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TREE_TXT:
|
|
|
|
{
|
|
|
|
wxString editorname = GetEditorName();
|
|
|
|
if( !editorname.IsEmpty() )
|
|
|
|
ExecuteFile( m_Parent, editorname, FullFileName );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
default:
|
|
|
|
OpenFile( FullFileName );
|
|
|
|
break;
|
|
|
|
}
|
2007-05-28 18:09:49 +00:00
|
|
|
}
|
|
|
|
|
2007-09-13 11:55:46 +00:00
|
|
|
|
2007-05-28 18:09:49 +00:00
|
|
|
/***************************************************/
|
2007-09-13 11:55:46 +00:00
|
|
|
TreePrjItemData* WinEDA_PrjFrame::GetSelectedData()
|
2007-05-28 18:09:49 +00:00
|
|
|
/***************************************************/
|
|
|
|
{
|
2007-09-13 11:55:46 +00:00
|
|
|
return dynamic_cast<TreePrjItemData*>( m_TreeProject->GetItemData( m_TreeProject->GetSelection() ) );
|
2007-05-28 18:09:49 +00:00
|
|
|
}
|