-
-
Notifications
You must be signed in to change notification settings - Fork 491
/
bom_plugins.h
173 lines (147 loc) · 4.66 KB
/
bom_plugins.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2018 CERN
* Copyright The KiCad Developers, see AUTHORS.txt for contributors.
*
* @author Maciej Suminski <[email protected]>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* https://www.gnu.org/licenses/gpl-3.0.html
* or you may search the http://www.gnu.org website for the version 3 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef BOM_GENERATOR_HANDLERS_H
#define BOM_GENERATOR_HANDLERS_H
#include <wx/arrstr.h>
#include <wx/file.h>
#include <wx/filename.h>
#include <memory>
extern const wxChar BOM_TRACE[];
/**
* Bill of material output generator.
*
* A Material output generator is an external application called by Eeschema to create
* a BOM from our intermediate XML netlist. A generator can be a script or an executable
* that can read the intermediate XML netlist file and generates a output (the BOM file)
*/
class BOM_GENERATOR_HANDLER
{
public:
/**
* @param aFile is path to the plugin file.
*/
BOM_GENERATOR_HANDLER( const wxString& aFile );
/**
* Return true if the plugin is ready to work, i.e. if the plugin file is found and readable.
*/
bool IsOk() { return m_isOk; }
/**
* Return true if a file name matches a recognized plugin format.
*
* @param aFile is path to the plugin file.
*/
static bool IsValidGenerator( const wxString& aFile );
/**
* Return plugin description stored in the plugin header file (if available).
*/
const wxString& GetInfo() const
{
return m_info;
}
/**
* Return the file name of the plugin.
*/
const wxFileName& GetFile() const
{
return m_file;
}
wxString GetStoredPath() const { return m_storedPath; }
/**
* Returns the calculated path to the plugin: if the path is already absolute and exists,
* just return it. Otherwise if the path is just a filename, look for that file in the user
* and system plugin directories and return the first one found. If neither is found, just
* return m_file.
*
* @return the full path to the plugin
*/
wxFileName FindFilePath() const;
/**
* Return the customisable plugin name.
*/
const wxString& GetName() const
{
return m_name;
}
/**
* Set the customisable plugin name.
*
* @param aName is the new name.
*/
void SetName( const wxString& aName )
{
m_name = aName;
}
/**
* Return the command to execute the plugin.
*/
const wxString& GetCommand() const
{
return m_cmd;
}
/**
* Set the command to execute the plugin.
*/
void SetCommand( const wxString& aCommand )
{
m_cmd = aCommand;
}
/**
* Accessor to array of options.
*/
wxArrayString& Options()
{
return m_options;
}
protected:
/**
* Read the plugin file header.
*
* @param aEndSection is a string marking end of the header.
*/
wxString readHeader( const wxString& aEndSection );
/**
* Extracts the output BOM file's extension, including the '.', from the
* plugin file header. If the output extension cannot be determined from
* the plugin header, returns wxEmptyString.
* @param aHeader is the plugin file's header, as returned by readHeader()
**/
static wxString getOutputExtension( const wxString& aHeader );
///< true if the plugin is working (i.e. if the plugin file exists and was read
bool m_isOk;
///< Path to the plugin
wxFileName m_file;
///< Path to the plugin stored in config (can be absolute or just a filename)
const wxString m_storedPath;
///< User customisable name
wxString m_name;
///< Command to execute the plugin
wxString m_cmd;
///< Description of the plugin (normally from the plugin header)
wxString m_info;
///< Plugin specific options
wxArrayString m_options;
};
#endif /* BOM_GENERATOR_HANDLERS_H */