Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
2bea1c67
Commit
2bea1c67
authored
Jan 24, 2013
by
acobo Aragunde Perez
Committed by
jean-pierre charras
Jan 24, 2013
Browse files
Options
Browse Files
Download
Plain Diff
Eeschema: Add "append schematic" feature. Fix bug 1101718 <Empty plot filename>
parents
72690e76
a641ebb3
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
188 additions
and
67 deletions
+188
-67
CMakeLists.txt
CMakeLists.txt
+2
-1
class_library.cpp
eeschema/class_library.cpp
+4
-4
files-io.cpp
eeschema/files-io.cpp
+154
-58
load_one_schematic_file.cpp
eeschema/load_one_schematic_file.cpp
+3
-2
menubar.cpp
eeschema/menubar.cpp
+6
-0
schframe.cpp
eeschema/schframe.cpp
+4
-1
id.h
include/id.h
+1
-0
wxEeschemaStruct.h
include/wxEeschemaStruct.h
+14
-1
No files found.
CMakeLists.txt
View file @
2bea1c67
...
...
@@ -128,11 +128,12 @@ if(CMAKE_COMPILER_IS_GNUCXX)
# Set default flags for Release build.
set
(
CMAKE_C_FLAGS_RELEASE
"-Wall
${
KICAD_GCC_RELEASE_BUILD_FLAGS
}
-DNDEBUG"
)
set
(
CMAKE_CXX_FLAGS_RELEASE
"-Wall
${
KICAD_GCC_RELEASE_BUILD_FLAGS
}
-DNDEBUG"
)
set
(
CMAKE_EXE_LINKER_FLAGS_RELEASE
"-s"
)
set
(
CMAKE_EXE_LINKER_FLAGS_RELEASE
"-s
-static-libgcc -static-libstdc++
"
)
# Set default flags for Debug build.
set
(
CMAKE_C_FLAGS_DEBUG
"-Wall
${
KICAD_GCC_DEBUG_BUILD_FLAGS
}
-g3 -ggdb3 -DDEBUG"
)
set
(
CMAKE_CXX_FLAGS_DEBUG
"-Wall
${
KICAD_GCC_DEBUG_BUILD_FLAGS
}
-g3 -ggdb3 -DDEBUG"
)
set
(
CMAKE_MODULE_LINKER_FLAGS
"-static-libgcc -static-libstdc++"
)
# SWIG macros on Windows
else
(
WIN32
)
# Thou shalt not link vaporware and tell us it's a valid DSO:
...
...
eeschema/class_library.cpp
View file @
2bea1c67
...
...
@@ -860,13 +860,13 @@ CMP_LIBRARY* CMP_LIBRARY::FindLibrary( const wxString& aName )
wxArrayString
CMP_LIBRARY
::
GetLibraryNames
(
bool
aSorted
)
{
wx
String
cacheName
;
wx
ArrayString
cacheNames
;
wxArrayString
names
;
BOOST_FOREACH
(
CMP_LIBRARY
&
lib
,
CMP_LIBRARY
::
libraryList
)
{
if
(
lib
.
isCache
&&
aSorted
)
cacheName
=
lib
.
GetName
(
);
cacheName
s
.
Add
(
lib
.
GetName
()
);
else
names
.
Add
(
lib
.
GetName
()
);
}
...
...
@@ -875,8 +875,8 @@ wxArrayString CMP_LIBRARY::GetLibraryNames( bool aSorted )
if
(
aSorted
)
names
.
Sort
();
if
(
!
cacheName
.
IsEmpty
()
)
names
.
Add
(
cacheName
);
for
(
unsigned
int
i
=
0
;
i
<
cacheNames
.
Count
();
i
++
)
names
.
Add
(
cacheName
s
.
Item
(
i
)
);
return
names
;
}
...
...
eeschema/files-io.cpp
View file @
2bea1c67
...
...
@@ -3,6 +3,7 @@
*
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 2013 CERN (www.cern.ch)
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
...
...
@@ -40,6 +41,7 @@
#include <class_library.h>
#include <libeditframe.h>
#include <sch_sheet.h>
#include <sch_component.h>
#include <wildcards_and_files_ext.h>
...
...
@@ -175,6 +177,73 @@ void SCH_EDIT_FRAME::Save_File( wxCommandEvent& event )
}
bool
SCH_EDIT_FRAME
::
LoadCacheLibrary
(
const
wxString
&
aFilename
)
{
wxString
msg
;
bool
LibCacheExist
=
false
;
wxFileName
fn
=
aFilename
;
/* Loading the project library cache
* until apr 2009 the lib is named <root_name>.cache.lib
* and after (due to code change): <root_name>-cache.lib
* so if the <name>-cache.lib is not found, the old way will be tried
*/
bool
use_oldcachename
=
false
;
wxString
cachename
=
fn
.
GetName
()
+
wxT
(
"-cache"
);
fn
.
SetName
(
cachename
);
fn
.
SetExt
(
SchematicLibraryFileExtension
);
if
(
!
fn
.
FileExists
()
)
{
fn
=
aFilename
;
fn
.
SetExt
(
wxT
(
"cache.lib"
)
);
use_oldcachename
=
true
;
}
if
(
fn
.
FileExists
()
)
{
wxString
errMsg
;
wxLogDebug
(
wxT
(
"Load schematic cache library file <%s>"
),
GetChars
(
fn
.
GetFullPath
()
)
);
msg
=
wxT
(
"Load "
)
+
fn
.
GetFullPath
();
CMP_LIBRARY
*
LibCache
=
CMP_LIBRARY
::
LoadLibrary
(
fn
,
errMsg
);
if
(
LibCache
)
{
LibCache
->
SetCache
();
msg
+=
wxT
(
" OK"
);
if
(
use_oldcachename
)
// set the new name
{
fn
.
SetName
(
cachename
);
fn
.
SetExt
(
SchematicLibraryFileExtension
);
LibCache
->
SetFileName
(
fn
);
}
LibCacheExist
=
true
;
CMP_LIBRARY
::
GetLibraryList
().
push_back
(
LibCache
);
}
else
{
wxString
prompt
;
prompt
.
Printf
(
_
(
"Component library <%s> failed to load.
\n
Error: %s"
),
GetChars
(
fn
.
GetFullPath
()
),
GetChars
(
errMsg
)
);
DisplayError
(
this
,
prompt
);
msg
+=
_
(
" ->Error"
);
}
PrintMsg
(
msg
);
}
return
LibCacheExist
;
}
bool
SCH_EDIT_FRAME
::
LoadOneEEProject
(
const
wxString
&
aFileName
,
bool
aIsNew
)
{
SCH_SCREEN
*
screen
;
...
...
@@ -280,87 +349,114 @@ bool SCH_EDIT_FRAME::LoadOneEEProject( const wxString& aFileName, bool aIsNew )
// Delete old caches.
CMP_LIBRARY
::
RemoveCacheLibrary
();
/* Loading the project library cache
* until apr 2009 the lib is named <root_name>.cache.lib
* and after (due to code change): <root_name>-cache.lib
* so if the <name>-cache.lib is not found, the old way will be tried
*/
fn
=
g_RootSheet
->
GetScreen
()
->
GetFileName
();
LibCacheExist
=
LoadCacheLibrary
(
g_RootSheet
->
GetScreen
()
->
GetFileName
()
);
bool
use_oldcachename
=
false
;
wxString
cachename
=
fn
.
GetName
()
+
wxT
(
"-cache"
);
if
(
!
wxFileExists
(
g_RootSheet
->
GetScreen
()
->
GetFileName
()
)
&&
!
LibCacheExist
)
{
Zoom_Automatique
(
false
);
msg
.
Printf
(
_
(
"File <%s> not found."
),
GetChars
(
g_RootSheet
->
GetScreen
()
->
GetFileName
()
)
);
DisplayInfoMessage
(
this
,
msg
);
return
false
;
}
fn
.
SetName
(
cachename
);
fn
.
SetExt
(
SchematicLibraryFileExtension
);
// load the project.
g_RootSheet
->
SetScreen
(
NULL
);
bool
diag
=
g_RootSheet
->
Load
(
this
);
SetScreen
(
m_CurrentSheet
->
LastScreen
()
);
if
(
!
fn
.
FileExists
()
)
UpdateFileHistory
(
g_RootSheet
->
GetScreen
()
->
GetFileName
()
);
/* Redraw base screen (ROOT) if necessary. */
GetScreen
()
->
SetGrid
(
ID_POPUP_GRID_LEVEL_1000
+
m_LastGridSizeId
);
Zoom_Automatique
(
false
);
SetSheetNumberAndCount
();
m_canvas
->
Refresh
(
true
);
return
diag
;
}
bool
SCH_EDIT_FRAME
::
AppendOneEEProject
()
{
SCH_SCREEN
*
screen
;
wxString
FullFileName
;
wxString
msg
;
screen
=
GetScreen
();
if
(
!
screen
)
{
fn
=
g_RootSheet
->
GetScreen
()
->
GetFileName
();
fn
.
SetExt
(
wxT
(
"cache.lib"
)
);
use_oldcachename
=
true
;
wxLogError
(
wxT
(
"Document not ready, cannot import"
)
);
return
false
;
}
if
(
fn
.
FileExists
()
)
{
wxString
errMsg
;
// open file chooser dialog
wxFileDialog
dlg
(
this
,
_
(
"Import Schematic"
),
wxGetCwd
(),
wxEmptyString
,
SchematicFileWildcard
,
wxFD_OPEN
|
wxFD_FILE_MUST_EXIST
);
wxLogDebug
(
wxT
(
"LoadOneEEProject() load schematic cache library file <%s>"
),
GetChars
(
fn
.
GetFullPath
()
)
);
msg
=
wxT
(
"Load "
)
+
fn
.
GetFullPath
();
if
(
dlg
.
ShowModal
()
==
wxID_CANCEL
)
return
false
;
CMP_LIBRARY
*
LibCache
=
CMP_LIBRARY
::
LoadLibrary
(
fn
,
errMsg
);
FullFileName
=
dlg
.
GetPath
(
);
if
(
LibCache
)
{
LibCache
->
SetCache
();
msg
+=
wxT
(
" OK"
);
wxFileName
fn
=
FullFileName
;
if
(
use_oldcachename
)
// set the new name
if
(
fn
.
IsRelative
()
)
{
fn
.
SetName
(
cachename
);
fn
.
SetExt
(
SchematicLibraryFileExtension
);
LibCache
->
SetFileName
(
fn
);
fn
.
MakeAbsolute
();
FullFileName
=
fn
.
GetFullPath
();
}
LibCacheExist
=
true
;
CMP_LIBRARY
::
GetLibraryList
().
push_back
(
LibCache
);
}
else
{
wxString
prompt
;
LoadCacheLibrary
(
FullFileName
);
prompt
.
Printf
(
_
(
"Component library <%s> failed to load.
\n
Error: %s"
),
GetChars
(
fn
.
GetFullPath
()
),
GetChars
(
errMsg
)
);
DisplayError
(
this
,
prompt
);
msg
+=
_
(
" ->Error"
);
}
wxLogDebug
(
wxT
(
"Importing schematic "
)
+
FullFileName
);
PrintMsg
(
msg
);
// load the project
bool
success
=
LoadOneEEFile
(
screen
,
FullFileName
,
true
);
if
(
success
)
{
// load sub-sheets
EDA_ITEM
*
bs
=
screen
->
GetDrawItems
();
while
(
bs
)
{
// do not append hierarchical sheets
if
(
bs
->
Type
()
==
SCH_SHEET_T
)
{
screen
->
Remove
(
(
SCH_SHEET
*
)
bs
);
}
if
(
!
wxFileExists
(
g_RootSheet
->
GetScreen
()
->
GetFileName
()
)
&&
!
LibCacheExist
)
// clear annotation and init new time stamp for the new components
else
if
(
bs
->
Type
()
==
SCH_COMPONENT_T
)
{
Zoom_Automatique
(
false
);
msg
.
Printf
(
_
(
"File <%s> not found."
),
GetChars
(
g_RootSheet
->
GetScreen
()
->
GetFileName
()
)
);
DisplayInfoMessage
(
this
,
msg
);
return
false
;
(
(
SCH_COMPONENT
*
)
bs
)
->
SetTimeStamp
(
GetNewTimeStamp
()
);
(
(
SCH_COMPONENT
*
)
bs
)
->
ClearAnnotation
(
NULL
);
// Clear flags, which are set by these previous modifications:
bs
->
ClearFlags
();
}
// load the project.
g_RootSheet
->
SetScreen
(
NULL
);
bool
diag
=
g_RootSheet
->
Load
(
this
);
SetScreen
(
m_CurrentSheet
->
LastScreen
()
);
UpdateFileHistory
(
g_RootSheet
->
GetScreen
()
->
GetFileName
()
);
bs
=
bs
->
Next
();
}
}
/
* Redraw base screen (ROOT) if necessary. */
/
/ redraw base screen (ROOT) if necessary
GetScreen
()
->
SetGrid
(
ID_POPUP_GRID_LEVEL_1000
+
m_LastGridSizeId
);
Zoom_Automatique
(
false
);
SetSheetNumberAndCount
();
m_canvas
->
Refresh
(
true
);
return
diag
;
return
success
;
}
void
SCH_EDIT_FRAME
::
OnAppendProject
(
wxCommandEvent
&
event
)
{
wxString
msg
=
_
(
"This operation cannot be undone. "
"Besides, take into account that hierarchical sheets will not be appended.
\n\n
"
"Do you want to save the current document before proceeding?"
);
if
(
IsOK
(
this
,
msg
)
)
OnSaveProject
(
event
);
AppendOneEEProject
();
}
...
...
eeschema/load_one_schematic_file.cpp
View file @
2bea1c67
...
...
@@ -53,7 +53,7 @@ bool ReadSchemaDescr( LINE_READER* aLine, wxString& aMsgDiag, SCH_SCREEN* Window
static
void
LoadLayers
(
LINE_READER
*
aLine
);
bool
SCH_EDIT_FRAME
::
LoadOneEEFile
(
SCH_SCREEN
*
aScreen
,
const
wxString
&
aFullFileName
)
bool
SCH_EDIT_FRAME
::
LoadOneEEFile
(
SCH_SCREEN
*
aScreen
,
const
wxString
&
aFullFileName
,
bool
append
)
{
char
name1
[
256
];
bool
itemLoaded
=
false
;
...
...
@@ -74,6 +74,7 @@ bool SCH_EDIT_FRAME::LoadOneEEFile( SCH_SCREEN* aScreen, const wxString& aFullFi
wxLogTrace
(
traceAutoSave
,
wxT
(
"Loading schematic file "
)
+
aFullFileName
);
aScreen
->
SetCurItem
(
NULL
);
if
(
!
append
)
aScreen
->
SetFileName
(
aFullFileName
);
FILE
*
f
;
...
...
eeschema/menubar.cpp
View file @
2bea1c67
...
...
@@ -97,6 +97,12 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
_
(
"Open a recent opened schematic project"
),
KiBitmap
(
open_project_xpm
)
);
// Import
AddMenuItem
(
fileMenu
,
ID_APPEND_PROJECT
,
_
(
"&Append Schematic"
),
_
(
"Append another schematic project to the current loaded schematic"
),
KiBitmap
(
open_document_xpm
)
);
// Separator
fileMenu
->
AppendSeparator
();
...
...
eeschema/schframe.cpp
View file @
2bea1c67
...
...
@@ -75,6 +75,8 @@ BEGIN_EVENT_TABLE( SCH_EDIT_FRAME, EDA_DRAW_FRAME )
EVT_MENU_RANGE
(
wxID_FILE1
,
wxID_FILE9
,
SCH_EDIT_FRAME
::
OnLoadFile
)
EVT_MENU
(
ID_APPEND_PROJECT
,
SCH_EDIT_FRAME
::
OnAppendProject
)
EVT_TOOL
(
ID_NEW_PROJECT
,
SCH_EDIT_FRAME
::
OnNewProject
)
EVT_TOOL
(
ID_LOAD_PROJECT
,
SCH_EDIT_FRAME
::
OnLoadProject
)
...
...
@@ -512,7 +514,8 @@ double SCH_EDIT_FRAME::BestZoom()
wxString
SCH_EDIT_FRAME
::
GetUniqueFilenameForCurrentSheet
()
{
wxFileName
fn
=
g_RootSheet
->
GetFileName
();
SCH_SCREENS
ScreenList
;
wxFileName
fn
=
ScreenList
.
GetFirst
()
->
GetFileName
();
#ifndef KICAD_GOST
wxString
filename
=
fn
.
GetName
();
...
...
include/id.h
View file @
2bea1c67
...
...
@@ -47,6 +47,7 @@ enum main_id
ID_TO_PCB
=
wxID_HIGHEST
,
ID_TO_CVPCB
,
ID_LOAD_PROJECT
,
ID_APPEND_PROJECT
,
ID_NEW_PROJECT
,
ID_NEW_PROJECT_FROM_TEMPLATE
,
ID_SAVE_PROJECT
,
...
...
include/wxEeschemaStruct.h
View file @
2bea1c67
...
...
@@ -630,6 +630,14 @@ public:
*/
bool
LoadOneEEProject
(
const
wxString
&
aFileName
,
bool
aIsNew
);
/**
* Function AppendOneEEProject
* read an entire project and loads it into the schematic editor *whitout* replacing the
* existing contents.
* @return True if the project was imported properly.
*/
bool
AppendOneEEProject
();
/**
* Function LoadOneEEFile
* loads the schematic (.sch) file \a aFullFileName into \a aScreen.
...
...
@@ -638,9 +646,11 @@ public:
* \a aFullFileName.
* @param aFullFileName A reference to a wxString object containing the absolute path
* and file name to load.
* @param append True if loaded file is being appended to the currently open file instead
* of replacing it.
* @return True if \a aFullFileName has been loaded (at least partially.)
*/
bool
LoadOneEEFile
(
SCH_SCREEN
*
aScreen
,
const
wxString
&
aFullFileName
);
bool
LoadOneEEFile
(
SCH_SCREEN
*
aScreen
,
const
wxString
&
aFullFileName
,
bool
append
=
false
);
bool
ReadInputStuffFile
();
...
...
@@ -746,6 +756,7 @@ private:
void
OnLoadStuffFile
(
wxCommandEvent
&
event
);
void
OnNewProject
(
wxCommandEvent
&
event
);
void
OnLoadProject
(
wxCommandEvent
&
event
);
void
OnAppendProject
(
wxCommandEvent
&
event
);
void
OnOpenPcbnew
(
wxCommandEvent
&
event
);
void
OnOpenCvpcb
(
wxCommandEvent
&
event
);
void
OnOpenLibraryEditor
(
wxCommandEvent
&
event
);
...
...
@@ -874,6 +885,8 @@ private:
void
InstallHierarchyFrame
(
wxDC
*
DC
,
wxPoint
&
pos
);
SCH_SHEET
*
CreateSheet
(
wxDC
*
DC
);
void
ReSizeSheet
(
SCH_SHEET
*
Sheet
,
wxDC
*
DC
);
// Loads the cache library associated to the aFileName
bool
LoadCacheLibrary
(
const
wxString
&
aFileName
);
public
:
/**
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment