Header clean up round 4.

This commit is contained in:
Wayne Stambaugh 2020-12-21 10:17:52 -05:00
parent 6e4b1fe8d4
commit 96c935673e
25 changed files with 733 additions and 827 deletions

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2014 CERN
* Copyright (C) 2004-2013 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2004-2020 KiCad Developers, see change_log.txt for contributors.
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
*
* This program is free software; you can redistribute it and/or
@ -31,10 +31,9 @@
#include <type_traits>
/**
* Function IsA()
*
* Checks if the type of aObject is T.
* @param aObject object for type check
*
* @param aObject the object for type check.
* @return true, if aObject type equals T.
*/
template <class T, class I>
@ -50,11 +49,12 @@ bool IsA( const I& aObject )
}
/**
* Function dyn_cast()
* A lightweight dynamic downcast.
*
* A lightweight dynamic downcast. Casts aObject to type Casted*.
* Uses EDA_ITEM::Type() and EDA_ITEM::ClassOf() to check if type matches.
* @param aObject object to be casted
* Cast \a aObject to type Casted*. Uses #EDA_ITEM::Type() and #EDA_ITEM::ClassOf() to
* check if type matches.
*
* @param aObject object to be casted.
* @return down-casted object or NULL if type doesn't match Casted.
*/
template<class Casted, class From>
@ -72,8 +72,7 @@ class EDA_ITEM;
/**
* Enum KICAD_T
* is the set of class identification values, stored in EDA_ITEM::m_structType
* The set of class identification values stored in #EDA_ITEM::m_structType
*/
enum KICAD_T
{
@ -225,10 +224,13 @@ enum KICAD_T
};
/**
* Returns the underlying type of the given type. This is useful for finding the
* element type given one of the "non-type" types such as SCH_LINE_LOCATE_WIRE_T
* @param aType Given type to resolve
* @return Base type
* Returns the underlying type of the given type.
*
* This is useful for finding the element type given one of the "non-type" types such as
* SCH_LINE_LOCATE_WIRE_T.
*
* @param aType Given type to resolve.
* @return Base type.
*/
constexpr KICAD_T BaseType( const KICAD_T aType )
{

View File

@ -147,8 +147,8 @@ public:
*/
/**
* Function OnPgmInit
* this is the first executed function (like main() )
* This is the first executed function (like main() ).
*
* @return true if the application can be started.
*/
virtual bool OnPgmInit() = 0; // call this from wxApp::OnInit()

View File

@ -1,5 +1,6 @@
/*
* Copyright (C) 2018 CERN
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
* Author: Maciej Suminski <maciej.suminski@cern.ch>
*
* This program is free software: you can redistribute it and/or modify it
@ -25,8 +26,7 @@ class APP_SETTINGS_BASE;
class COLOR_SETTINGS;
/**
* PRINT_PARAMETERS
* handles the parameters used to print a board drawing.
* Handle the parameters used to print a board drawing.
*/
struct PRINTOUT_SETTINGS
{
@ -46,8 +46,15 @@ struct PRINTOUT_SETTINGS
}
virtual void Save( APP_SETTINGS_BASE* aConfig );
virtual void Load( APP_SETTINGS_BASE* aConfig );
/**
* Returns true if the drawing border and title block should be printed.
*/
bool PrintBorderAndTitleBlock() const { return m_titleBlock; }
double m_scale; ///< Printing scale
bool m_titleBlock; ///< Print frame and title block
bool m_blackWhite; ///< Print in B&W or Color
@ -57,11 +64,6 @@ struct PRINTOUT_SETTINGS
/// The color settings to be used for printing
COLOR_SETTINGS* m_colorSettings;
/**
* Returns true if the drawing border and title block should be printed.
*/
bool PrintBorderAndTitleBlock() const { return m_titleBlock; }
};
#endif /* PRINTOUT_H */

View File

@ -2,8 +2,8 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2013 CERN
* Copyright (C) 2019-2020 KiCad Developers, see AUTHORS.txt for contributors.
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
* 2019 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -37,7 +37,8 @@
#include <iomanip>
/**
* The class PROF_COUNTER is a small class to help profiling.
* A small class to help profiling.
*
* It allows the calculation of the elapsed time (in milliseconds) between
* its creation (or the last call to Start() ) and the last call to Stop()
*/
@ -45,9 +46,10 @@ class PROF_COUNTER
{
public:
/**
* Creates a PROF_COUNTER for measuring an elapsed time in milliseconds
* @param aName = a string that will be printed in message.
* @param aAutostart = true (default) to immediately start the timer
* Create a PROF_COUNTER for measuring an elapsed time in milliseconds.
*
* @param aName a string that will be printed in message.
* @param aAutostart true (default) to immediately start the timer
*/
PROF_COUNTER( const std::string& aName, bool aAutostart = true ) :
m_name( aName ), m_running( false )
@ -57,7 +59,8 @@ public:
}
/**
* Creates a PROF_COUNTER for measuring an elapsed time in milliseconds
* Create a PROF_COUNTER for measuring an elapsed time in milliseconds
*
* The counter is started and the string to print in message is left empty.
*/
PROF_COUNTER()
@ -66,7 +69,7 @@ public:
}
/**
* Starts or restarts the counter
* Start or restart the counter.
*/
void Start()
{
@ -77,7 +80,7 @@ public:
/**
* save the time when this function was called, and set the counter stane to stop
* Save the time when this function was called, and set the counter stane to stop.
*/
void Stop()
{
@ -121,9 +124,9 @@ public:
}
/**
* @return the time since the timer was started. If the timer is stopped,
* the duration is from the start time to the time it was stopped, else it
* is to the current time.
* @return the time since the timer was started. If the timer is stopped, the duration
* is from the start time to the time it was stopped, else it is to the current
* time.
*/
template <typename DURATION>
DURATION SinceStart( bool aSinceLast = false )
@ -137,7 +140,7 @@ public:
}
/**
* @param aSinceLast: only get the time since the last time the time was read
* @param aSinceLast only get the time since the last time the time was read.
* @return the elapsed time in ms since the timer was started.
*/
double msecs( bool aSinceLast = false )
@ -199,10 +202,10 @@ private:
/**
* Function GetRunningMicroSecs
* An alternate way to calculate an elapset time (in microsecondes) to class PROF_COUNTER
* @return an ever increasing indication of elapsed microseconds.
* Use this by computing differences between two calls.
*
* @return an ever increasing indication of elapsed microseconds. Use this by computing
* differences between two calls.
* @author Dick Hollenbeck
*/
unsigned GetRunningMicroSecs();

View File

@ -5,7 +5,7 @@
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 2016 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2016 Kicad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2016-2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -27,14 +27,11 @@
/**
* PROPERTIES
* is a name/value tuple with unique names and optional values. The names
* A name/value tuple with unique names and optional values. The names
* may be iterated alphabetically.
*/
class PROPERTIES : public std::map< std::string, UTF8 >
{
// alphabetical tuple of name and value hereby defined.
public:
bool Clear( const std::string& aProperty )
{
@ -47,15 +44,17 @@ public:
}
/**
* Function Value
* fetches a property by aName and returns true if that property was found, else false.
* If not found, aFetchedValue is not touched.
* Fetch a property by \a aName and returns true if that property was found, else false.
* If not found, \a aFetchedValue is not touched.
*
* @param aName is the property or option to look for.
* @param aFetchedValue is where to put the value of the property if it
* exists and aFetchedValue is not NULL.
* @return bool - true if property is found, else false.
* @param aFetchedValue is where to put the value of the property if it exists and
* \a aFetchedValue is not NULL.
* @return true if property is found, else false.
*/
bool Value( const char* aName, UTF8* aFetchedValue = NULL ) const;
bool Value( const char* aName, UTF8* aFetchedValue = nullptr ) const;
};
#endif // _PROPERTIES_H_
// LocalWords: aName aFetchedValue

View File

@ -2,6 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2020 CERN
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
* @author Maciej Suminski <maciej.suminski@cern.ch>
*
@ -167,10 +168,6 @@ public:
class PROPERTY_BASE
{
private:
///> Used to generate unique IDs
size_t nextId = 0;
public:
PROPERTY_BASE( const wxString& aName, PROPERTY_DISPLAY aDisplay = DEFAULT ) :
m_id( nextId ),
@ -293,6 +290,9 @@ private:
///> Condition that determines whether the property is available
std::function<bool(INSPECTABLE*)> m_availFunc;
///> Used to generate unique IDs
size_t nextId = 0;
friend class INSPECTABLE;
};
@ -572,45 +572,44 @@ private:
// Helper macros to handle enum types
#define DECLARE_ENUM_TO_WXANY(type)\
template<>\
class wxAnyValueTypeImpl<type> : public wxAnyValueTypeImplBase<type>\
{\
WX_DECLARE_ANY_VALUE_TYPE(wxAnyValueTypeImpl<type>)\
public:\
wxAnyValueTypeImpl() : wxAnyValueTypeImplBase<type>() {}\
virtual ~wxAnyValueTypeImpl() {}\
virtual bool ConvertValue( const wxAnyValueBuffer& src,\
wxAnyValueType* dstType, wxAnyValueBuffer& dst ) const override\
{\
type value = GetValue(src);\
ENUM_MAP<type>& conv = ENUM_MAP<type>::Instance();\
if( dstType->CheckType<wxString>() )\
{\
wxAnyValueTypeImpl<wxString>::SetValue( conv.ToString( value ), dst );\
return true;\
}\
if( dstType->CheckType<int>() )\
{\
wxAnyValueTypeImpl<int>::SetValue( static_cast<int>(value), dst );\
return true;\
}\
else\
{\
return false;\
}\
}\
#define DECLARE_ENUM_TO_WXANY( type ) \
template <> \
class wxAnyValueTypeImpl<type> : public wxAnyValueTypeImplBase<type> \
{ \
WX_DECLARE_ANY_VALUE_TYPE( wxAnyValueTypeImpl<type> ) \
public: \
wxAnyValueTypeImpl() : wxAnyValueTypeImplBase<type>() {} \
virtual ~wxAnyValueTypeImpl() {} \
virtual bool ConvertValue( const wxAnyValueBuffer& src, wxAnyValueType* dstType, \
wxAnyValueBuffer& dst ) const override \
{ \
type value = GetValue( src ); \
ENUM_MAP<type>& conv = ENUM_MAP<type>::Instance(); \
if( dstType->CheckType<wxString>() ) \
{ \
wxAnyValueTypeImpl<wxString>::SetValue( conv.ToString( value ), dst ); \
return true; \
} \
if( dstType->CheckType<int>() ) \
{ \
wxAnyValueTypeImpl<int>::SetValue( static_cast<int>( value ), dst ); \
return true; \
} \
else \
{ \
return false; \
} \
} \
};
#define IMPLEMENT_ENUM_TO_WXANY(type)\
WX_IMPLEMENT_ANY_VALUE_TYPE(wxAnyValueTypeImpl<type>)
#define IMPLEMENT_ENUM_TO_WXANY( type ) WX_IMPLEMENT_ANY_VALUE_TYPE( wxAnyValueTypeImpl<type> )
#define ENUM_TO_WXANY(type)\
DECLARE_ENUM_TO_WXANY(type)\
IMPLEMENT_ENUM_TO_WXANY(type)
#define ENUM_TO_WXANY( type ) \
DECLARE_ENUM_TO_WXANY( type ) \
IMPLEMENT_ENUM_TO_WXANY( type )
///> Macro to define read-only fields (no setter method available)
#define NO_SETTER(owner, type) ((void (owner::*)(type))nullptr)
#define NO_SETTER( owner, type ) ( ( void ( owner::* )( type ) ) nullptr )
/*
#define DECLARE_PROPERTY(owner,type,name,getter,setter) \

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2013 KiCad Developers, see CHANGELOG.TXT for contributors.
* Copyright (C) 2013-2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -26,8 +26,7 @@
#define PTREE_H_
/*
Implement "KiCad s-epression" support for boost::property_tree's ptree, the 8
Implement "KiCad s-expression" support for boost::property_tree's ptree, the 8
bit string version of property_tree. The ram resident structure of the ptree is
mostly compatible with one created using the xml_parser from
boost::property_tree, with slight differences in the way atoms are stored. The
@ -43,7 +42,6 @@ portion of a much larger document. If so, then using the ptree will likely be a
the boost website and there are a number of examples in the
pcbnew/eagle_plugin.cpp file in this project. Powerful path navigation support
makes it easy to extract a subset of a ptree.
*/
@ -56,13 +54,13 @@ typedef const PTREE CPTREE;
typedef boost::property_tree::ptree_error PTREE_ERROR;
/**
* Function Scan
* fills an empty PTREE with information from a KiCad s-expresion stream. Use
* a DSNLEXER with an empty keyword table as @a aLexer. Useful for parsing
* s-expression files or strings of arbitrary grammars, say from a file or clipboard.
* The s-expression must be "KiCad compatible". See Documentation/s-expressions.txt
* for this KiCad compatible definition (it is the non-specctra mode).
* And also see in tools/property_tree.cpp for example usage.
* Fill an empty #PTREE with information from a KiCad s-expression stream.
*
* Use a #DSNLEXER with an empty keyword table as @a aLexer. Useful for parsing s-expression
* files or strings of arbitrary grammars, say from a file or clipboard. The s-expression
* must be "KiCad compatible". See Documentation/s-expressions.txt for this KiCad compatible
* definition (it is the non-specctra mode). And also see in tools/property_tree.cpp for
* example usage.
*
* <code>
*
@ -87,8 +85,7 @@ typedef boost::property_tree::ptree_error PTREE_ERROR;
void Scan( PTREE* aTree, DSNLEXER* aLexer );
/**
* Function Format
* outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
* Output a #PTREE into s-expression format via an #OUTPUTFORMATTER derivative.
*/
void Format( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, const CPTREE& aTree );

View File

@ -74,16 +74,6 @@ class RC_ITEM
public:
typedef std::vector<KIID> KIIDS;
protected:
int m_errorCode; ///< The error code's numeric value
wxString m_errorMessage; ///< A message describing the details of this specific error
wxString m_errorTitle; ///< The string describing the type of error
wxString m_settingsKey; ///< The key used to describe this type of error in settings
MARKER_BASE* m_parent; ///< The marker this item belongs to, if any
KIIDS m_ids;
public:
RC_ITEM() :
m_errorCode( 0 ),
m_parent( nullptr )
@ -181,6 +171,16 @@ public:
* Format a coordinate or position to text.
*/
static wxString ShowCoord( EDA_UNITS aUnits, const wxPoint& aPos );
protected:
int m_errorCode; ///< The error code's numeric value
wxString m_errorMessage; ///< A message describing the details of this specific error
wxString m_errorTitle; ///< The string describing the type of error
wxString m_settingsKey; ///< The key used to describe this type of error in settings
MARKER_BASE* m_parent; ///< The marker this item belongs to, if any
KIIDS m_ids;
};
@ -224,8 +224,6 @@ public:
static KIID ToUUID( wxDataViewItem aItem );
public:
RC_TREE_MODEL( EDA_DRAW_FRAME* aParentFrame, wxDataViewCtrl* aView );
~RC_TREE_MODEL();
@ -292,7 +290,6 @@ private:
void rebuildModel( RC_ITEMS_PROVIDER* aProvider, int aSeverities );
void onSizeView( wxSizeEvent& aEvent );
private:
EDA_DRAW_FRAME* m_editFrame;
wxDataViewCtrl* m_view;
int m_severities;

View File

@ -1,7 +1,7 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2019 KiCad Developers, see CHANGELOG.TXT for contributors.
* Copyright (C) 2019-2020 KiCad Developers, see CHANGELOG.TXT for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -40,13 +40,15 @@ namespace KIGFX
class VIEW_ITEM;
/**
* RENDER_SETTINGS
* Contains all the knowledge about how graphical objects are drawn on any output
* surface/device. This includes:
* - color/transparency settings
* - highlighting and high contrast mode control
* - drawing quality control (sketch/outline mode)
* - text processing flags
* Container for all the knowledge about how graphical objects are drawn on any output
* surface/device.
*
* This includes:
* - color/transparency settings
* - highlighting and high contrast mode control
* - drawing quality control (sketch/outline mode)
* - text processing flags
*
* The class acts as an interface between the PAINTER object and the GUI (i.e. Layers/Items
* widget or display options dialog).
*/
@ -59,8 +61,8 @@ public:
virtual void LoadColors( const COLOR_SETTINGS* aSettings ) { }
/**
* Function SetLayerIsHighContrast
* Sets the specified layer as high-contrast.
* Set the specified layer as high-contrast.
*
* @param aLayerId is a layer number that should be displayed in a specific mode.
* @param aEnabled is the new layer state ( true = active or false = not active).
*/
@ -73,8 +75,8 @@ public:
}
/**
* Function GetLayerIsHighContrast
* Returns information whether the queried layer is marked as high-contrast.
* Return information whether the queried layer is marked as high-contrast.
*
* @return True if the queried layer is marked as active.
*/
inline bool GetLayerIsHighContrast( int aLayerId ) const
@ -83,7 +85,6 @@ public:
}
/**
* Function GetHighContrastLayers()
* Returns the set of currently high-contrast layers.
*/
const std::set<unsigned int> GetHighContrastLayers() const
@ -92,9 +93,10 @@ public:
}
/**
* Returns the board layer which is in high-contrast. There should only be one
* board layer which is high-contrast at any given time, although there might be
* many high-contrast synthetic (GAL) layers.
* Return the board layer which is in high-contrast mode.
*
* There should only be one board layer which is high-contrast at any given time, although
* there might be many high-contrast synthetic (GAL) layers.
*/
PCB_LAYER_ID GetPrimaryHighContrastLayer() const
{
@ -111,8 +113,7 @@ public:
void SetActiveLayer( PCB_LAYER_ID aLayer ) { m_activeLayer = aLayer; }
/**
* Function ClearHighContrastLayers
* Clears the list of active layers.
* Clear the list of active layers.
*/
inline void ClearHighContrastLayers()
{
@ -120,8 +121,8 @@ public:
}
/**
* Function IsHighlightEnabled
* Returns current highlight setting.
* Return current highlight setting.
*
* @return True if highlight is enabled, false otherwise.
*/
inline bool IsHighlightEnabled() const
@ -130,8 +131,8 @@ public:
}
/**
* Function GetHighlightNetCode
* Returns netcode of currently highlighted net.
* Return the netcode of currently highlighted net.
*
* @return Netcode of currently highlighted net.
*/
inline const std::set<int>& GetHighlightNetCodes() const
@ -140,11 +141,13 @@ public:
}
/**
* Function SetHighlight
* Turns on/off highlighting - it may be done for the active layer or the specified net(s).
* Turns on/off highlighting.
*
* It may be done for the active layer or the specified net(s)..
*
* @param aEnabled tells if highlighting should be enabled.
* @param aNetcode is optional and if specified, turns on higlighting only for the net with
* number given as the parameter.
* @param aNetcode is optional and if specified, turns on highlighting only for the net with
* number given as the parameter.
*/
inline void SetHighlight( bool aEnabled, int aNetcode = -1, bool aMulti = false )
{
@ -162,7 +165,6 @@ public:
}
/**
* Function SetHighContrast
* Turns on/off high contrast display mode.
*/
void SetHighContrast( bool aEnabled ) { m_hiContrastEnabled = aEnabled; }
@ -171,6 +173,7 @@ public:
/**
* Returns the color that should be used to draw the specific VIEW_ITEM on the specific layer
* using currently used render settings.
*
* @param aItem is the VIEW_ITEM.
* @param aLayer is the layer.
* @return The color.
@ -189,31 +192,28 @@ public:
void SetShowPageLimits( bool aDraw ) { m_showPageLimits = aDraw; }
/**
* Function GetBackgroundColor
* Returns current background color settings.
* Return current background color settings.
*/
virtual const COLOR4D& GetBackgroundColor() = 0;
/**
* Sets the background color.
* Set the background color.
*/
virtual void SetBackgroundColor( const COLOR4D& aColor ) = 0;
/**
* Function GetGridColor
* Returns current grid color settings.
* Return current grid color settings.
*/
virtual const COLOR4D& GetGridColor() = 0;
/**
* Function GetCursorColor
* Returns current cursor color settings.
* Return current cursor color settings.
*/
virtual const COLOR4D& GetCursorColor() = 0;
/**
* Function GetLayerColor
* Returns the color used to draw a layer.
* Return the color used to draw a layer.
*
* @param aLayer is the layer number.
*/
inline const COLOR4D& GetLayerColor( int aLayer ) const
@ -222,8 +222,8 @@ public:
}
/**
* Function SetLayerColor
* Changes the color used to draw a layer.
* Change the color used to draw a layer.
*
* @param aLayer is the layer number.
* @param aColor is the new color.
*/
@ -259,7 +259,6 @@ public:
protected:
/**
* Function update
* Precalculates extra colors for layers (e.g. highlighted, darkened and any needed version
* of base colors).
*/

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2013-2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -43,8 +43,7 @@ class WX_INFOBAR;
/**
* REPORTER
* is a pure virtual class used to derive REPORTER objects from.
* A pure virtual class used to derive REPORTER objects from.
*
* The purpose of the REPORTER object is to offer a way for a procedural function
* to report multiple errors without having to:
@ -53,16 +52,17 @@ class WX_INFOBAR;
* <li> stop after the first error </li>
* </ul>
* the reporter has 4 severity levels (flags) tagging the messages:
* - information
* - warning
* - error
* - action (i.e. indication of changes - add component, change footprint, etc. )
* - information
* - warning
* - error
* - action (i.e. indication of changes - add component, change footprint, etc. )
*
* They are indicators for the message formatting and displaying code,
* filtering is not made here.
*/
class REPORTER {
class REPORTER
{
public:
/**
* Location where the message is to be reported.
@ -77,30 +77,30 @@ public:
};
/**
* Function Report
* is a pure virtual function to override in the derived object.
* Report a string with a given severity.
*
* @param aText is the string to report.
* @param aSeverity is an indicator ( RPT_UNDEFINED, RPT_INFO, RPT_WARNING,
* RPT_ERROR, RPT_ACTION ) used to filter and format messages
* @param aSeverity is an indicator ( RPT_UNDEFINED, RPT_INFO, RPT_WARNING, RPT_ERROR,
* RPT_ACTION ) used to filter and format messages
*/
virtual REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) = 0;
virtual REPORTER& Report( const wxString& aText,
SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) = 0;
/**
* Function ReportTail
* Places the report at the end of the list, for objects that support report ordering
*/
virtual REPORTER& ReportTail( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED )
virtual REPORTER& ReportTail( const wxString& aText,
SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED )
{
return Report( aText, aSeverity );
}
/**
* Function ReportHead
* Places the report at the beginning of the list for objects that support ordering
* Places the report at the beginning of the list for objects that support ordering.
*/
virtual REPORTER& ReportHead( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED )
virtual REPORTER& ReportHead( const wxString& aText,
SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED )
{
return Report( aText, aSeverity );
}
@ -113,7 +113,6 @@ public:
REPORTER& operator <<( const char* aText ) { return Report( aText ); }
/**
* Function HasMessage
* Returns true if the reporter client is non-empty.
*/
virtual bool HasMessage() const = 0;
@ -130,8 +129,7 @@ public:
/**
* WX_TEXT_CTRL_REPORTER
* is wrapper for reporting to a wxTextCtrl object.
* A wrapper for reporting to a wxTextCtrl object.
*/
class WX_TEXT_CTRL_REPORTER : public REPORTER
{
@ -148,15 +146,15 @@ public:
{
}
REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
REPORTER& Report( const wxString& aText,
SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
bool HasMessage() const override;
};
/**
* WX_STRING_REPORTER
* is a wrapper for reporting to a wxString object.
* A wrapper for reporting to a wxString object.
*/
class WX_STRING_REPORTER : public REPORTER
{
@ -180,8 +178,7 @@ public:
/**
* WX_HTML_PANEL_REPORTER
* is a wrapper for reporting to a wx HTML window
* A wrapper for reporting to a wx HTML window.
*/
class WX_HTML_PANEL_REPORTER : public REPORTER
{
@ -198,21 +195,23 @@ public:
{
}
REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
REPORTER& Report( const wxString& aText,
SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
REPORTER& ReportTail( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
REPORTER& ReportTail( const wxString& aText,
SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
REPORTER& ReportHead( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
REPORTER& ReportHead( const wxString& aText,
SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
bool HasMessage() const override;
};
/**
* NULL_REPORTER
* A singleton reporter that reports to nowhere.
*
* A singleton reporter that reports to nowhere. Used as to simplify code by
* avoiding the reportee to check for a non-NULL reporter object.
* Used as to simplify code by avoiding the reportee to check for a non-NULL reporter object.
*/
class NULL_REPORTER : public REPORTER
{
@ -227,15 +226,14 @@ public:
static REPORTER& GetInstance();
REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
REPORTER& Report( const wxString& aText,
SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
bool HasMessage() const override { return false; }
};
/**
* STDOUT_REPORTER
*
* Debug type reporter, forwarding messages to std::cout.
*/
class STDOUT_REPORTER : public REPORTER
@ -251,37 +249,38 @@ public:
static REPORTER& GetInstance();
REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
REPORTER& Report( const wxString& aText,
SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
bool HasMessage() const override { return false; }
};
/**
* STATUSBAR_REPORTER
* is a wrapper for reporting to a specific text location in a statusbar
* A wrapper for reporting to a specific text location in a statusbar.
*/
class STATUSBAR_REPORTER : public REPORTER
{
private:
wxStatusBar* m_statusBar;
int m_position;
public:
STATUSBAR_REPORTER( wxStatusBar* aStatusBar, int aPosition = 0 )
: REPORTER(), m_statusBar( aStatusBar ), m_position( aPosition )
: REPORTER(),
m_statusBar( aStatusBar ),
m_position( aPosition )
{
}
REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
bool HasMessage() const override;
private:
wxStatusBar* m_statusBar;
int m_position;
};
/**
* INFOBAR_REPORTER
* is a wrapper for reporting to a WX_INFOBAR UI element.
* A wrapper for reporting to a #WX_INFOBAR UI element.
*
* The infobar is not updated until the @c Finalize() method is called. That method will
* queue either a show message or a dismiss event for the infobar - so this reporter is
@ -291,12 +290,6 @@ public:
*/
class INFOBAR_REPORTER : public REPORTER
{
private:
bool m_messageSet;
WX_INFOBAR* m_infoBar;
wxString m_message;
SEVERITY m_severity;
public:
INFOBAR_REPORTER( WX_INFOBAR* aInfoBar )
: REPORTER(),
@ -307,7 +300,8 @@ public:
{
}
REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
REPORTER& Report( const wxString& aText,
SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
bool HasMessage() const override;
@ -315,6 +309,12 @@ public:
* Update the infobar with the reported text.
*/
void Finalize();
private:
bool m_messageSet;
WX_INFOBAR* m_infoBar;
wxString m_message;
SEVERITY m_severity;
};
#endif // _REPORTER_H_

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2007-2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2016-2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -42,13 +42,12 @@
/**
* Function StrPrintf
* is like sprintf() but the output is appended to a std::string instead of to a
* This is like sprintf() but the output is appended to a std::string instead of to a
* character array.
*
* @param aResult is the string to append to, previous text is not clear()ed.
* @param aFormat is a printf() style format string.
* @return int - the count of bytes appended to the result string, no terminating
* nul is included.
* @return the count of bytes appended to the result string, no terminating nul is included.
*/
int
#if defined(__GNUG__)
@ -58,9 +57,9 @@ int
/**
* Function StrPrintf
* is like sprintf() but the output is returned in a std::string instead of to a
* This is like sprintf() but the output is returned in a std::string instead of to a
* character array.
*
* @param format is a printf() style format string.
* @return std::string - the result of the sprintf().
*/
@ -75,13 +74,84 @@ std::string
#define LINE_READER_LINE_INITIAL_SIZE 5000
/**
* LINE_READER
* is an abstract class from which implementation specific LINE_READERs may
* be derived to read single lines of text and manage a line number counter.
* An abstract class from which implementation specific LINE_READERs may be derived to
* read single lines of text and manage a line number counter.
*/
class LINE_READER
{
public:
/**
* Build a line reader and fixes the length of the maximum supported line length
* to @a aMaxLineLength.
*/
LINE_READER( unsigned aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX );
virtual ~LINE_READER();
/**
* Read a line of text into the buffer and increments the line number counter.
*
* If the line is larger than the maximum length passed to the constructor, then an
* exception is thrown. The line is nul terminated.
*
* @return The beginning of the read line, or NULL if EOF.
* @throw IO_ERROR when a line is too long.
*/
virtual char* ReadLine() = 0;
/**
* Returns the name of the source of the lines in an abstract sense.
*
* This may be a file or it may be the clipboard or any other source of lines of text.
* The returned string is useful for reporting error messages.
*/
virtual const wxString& GetSource() const
{
return m_source;
}
/**
* Return a pointer to the last line that was read in.
*/
char* Line() const
{
return m_line;
}
/**
* A casting operator that returns a char* pointer to the start of the line buffer.
*/
operator char* () const
{
return Line();
}
/**
* Return the line number of the last line read from this LINE_READER.
*
* Lines start from 1.
*/
virtual unsigned LineNumber() const
{
return m_lineNum;
}
/**
* Return the number of bytes in the last line read from this LINE_READER.
*/
unsigned Length() const
{
return m_length;
}
protected:
/**
* Will expand the capacity of @a line up to maxLineLength but not greater, so
* be careful about making assumptions of @a capacity after calling this.
*/
void expandCapacity( unsigned aNewsize );
unsigned m_length; ///< no. bytes in line before trailing nul.
unsigned m_lineNum;
@ -91,127 +161,37 @@ protected:
unsigned m_maxLineLength; ///< maximum allowed capacity using resizing.
wxString m_source; ///< origin of text lines, e.g. filename or "clipboard"
/**
* Function expandCapacity
* will expand the capacity of @a line up to maxLineLength but not greater, so
* be careful about making assumptions of @a capacity after calling this.
*/
void expandCapacity( unsigned aNewsize );
public:
/**
* Constructor LINE_READER
* builds a line reader and fixes the length of the maximum supported
* line length to @a aMaxLineLength.
*/
LINE_READER( unsigned aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX );
virtual ~LINE_READER();
/**
* Function ReadLine
* reads a line of text into the buffer and increments the line number
* counter. If the line is larger than aMaxLineLength passed to the
* constructor, then an exception is thrown. The line is nul terminated.
* @return char* - The beginning of the read line, or NULL if EOF.
* @throw IO_ERROR when a line is too long.
*/
virtual char* ReadLine() = 0;
/**
* Function GetSource
* returns the name of the source of the lines in an abstract sense.
* This may be a file or it may be the clipboard or any other source
* of lines of text. The returned string is useful for reporting error
* messages.
*/
virtual const wxString& GetSource() const
{
return m_source;
}
/**
* Function Line
* returns a pointer to the last line that was read in.
*/
char* Line() const
{
return m_line;
}
/**
* Operator char*
* is a casting operator that returns a char* pointer to the start of the
* line buffer.
*/
operator char* () const
{
return Line();
}
/**
* Function Line Number
* returns the line number of the last line read from this LINE_READER. Lines
* start from 1.
*/
virtual unsigned LineNumber() const
{
return m_lineNum;
}
/**
* Function Length
* returns the number of bytes in the last line read from this LINE_READER.
*/
unsigned Length() const
{
return m_length;
}
};
/**
* FILE_LINE_READER
* is a LINE_READER that reads from an open file. File must be already open
* so that this class can exist without any UI policy.
* A LINE_READER that reads from an open file.
*
* File must be already open so that this class can exist without any UI policy.
*/
class FILE_LINE_READER : public LINE_READER
{
protected:
bool m_iOwn; ///< if I own the file, I'll promise to close it, else not.
FILE* m_fp; ///< I may own this file, but might not.
public:
/**
* Constructor FILE_LINE_READER
* takes @a aFileName and the size of the desired line buffer and opens
* the file and assumes the obligation to close it.
* Take @a aFileName and the size of the desired line buffer and opens the file and
* assumes the obligation to close it.
*
* @param aFileName is the name of the file to open and to use for error reporting purposes.
*
* @param aStartingLineNumber is the initial line number to report on error, and is
* accessible here for the case where multiple DSNLEXERs are reading from the
* same file in sequence, all from the same open file (with @a doOwn = false).
* Internally it is incremented by one after each ReadLine(), so the first
* reported line number will always be one greater than what is provided here.
*
* @param aMaxLineLength is the number of bytes to use in the line buffer.
*
* @throw IO_ERROR if @a aFileName cannot be opened.
*/
FILE_LINE_READER( const wxString& aFileName,
unsigned aStartingLineNumber = 0,
unsigned aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX );
FILE_LINE_READER( const wxString& aFileName, unsigned aStartingLineNumber = 0,
unsigned aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX );
/**
* Constructor FILE_LINE_READER
* takes an open FILE and the size of the desired line buffer and takes
* ownership of the open file, i.e. assumes the obligation to close it.
* Take an open FILE and the size of the desired line buffer and takes ownership of
* the open file, i.e. assumes the obligation to close it.
*
* @param aFile is an open file.
* @param aFileName is the name of the file for error reporting purposes.
@ -224,33 +204,35 @@ public:
* @param aMaxLineLength is the number of bytes to use in the line buffer.
*/
FILE_LINE_READER( FILE* aFile, const wxString& aFileName, bool doOwn = true,
unsigned aStartingLineNumber = 0,
unsigned aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX );
unsigned aStartingLineNumber = 0,
unsigned aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX );
/**
* Destructor
* may or may not close the open file, depending on @a doOwn in constructor.
* May or may not close the open file, depending on @a doOwn in constructor.
*/
~FILE_LINE_READER();
char* ReadLine() override;
/**
* Function Rewind
* rewinds the file and resets the line number back to zero. Line number
* will go to 1 on first ReadLine().
* Rewind the file and resets the line number back to zero.
*
* Line number will go to 1 on first ReadLine().
*/
void Rewind()
{
rewind( m_fp );
m_lineNum = 0;
}
protected:
bool m_iOwn; ///< if I own the file, I'll promise to close it, else not.
FILE* m_fp; ///< I may own this file, but might not.
};
/**
* STRING_LINE_READER
* is a LINE_READER that reads from a multiline 8 bit wide std::string
* Is a #LINE_READER that reads from a multiline 8 bit wide std::string
*/
class STRING_LINE_READER : public LINE_READER
{
@ -261,22 +243,21 @@ protected:
public:
/**
* Constructor STRING_LINE_READER( const std::string&, const wxString& )
* Construct a string line reader.
*
* @param aString is a source string consisting of one or more lines
* of text, where multiple lines are separated with a '\n' character.
* The last line does not necessarily need a trailing '\n'.
*
* @param aSource describes the source of aString for error reporting purposes
* can be anything meaninful, such as wxT( "clipboard" ).
* can be anything meaningful, such as wxT( "clipboard" ).
*/
STRING_LINE_READER( const std::string& aString, const wxString& aSource );
/**
* Constructor STRING_LINE_READER( const STRING_LINE_READER& )
* allows for a continuation of the reading of a stream started by another
* Construct a string line reader.
*
* Allows for a continuation of the reading of a stream started by another
* STRING_LINE_READER. Any stream offset and source name are used from
* @a aStartingPoint.
*/
STRING_LINE_READER( const STRING_LINE_READER& aStartingPoint );
@ -285,18 +266,13 @@ public:
/**
* INPUTSTREAM_LINE_READER
* is a LINE_READER that reads from a wxInputStream object.
* A #LINE_READER that reads from a wxInputStream object.
*/
class INPUTSTREAM_LINE_READER : public LINE_READER
{
protected:
wxInputStream* m_stream; //< The input stream to read. No ownership of this pointer.
public:
/**
* Constructor WXINPUTSTREAM_LINE_READER
* Construct a #LINE_READER from a wxInputStream object.
*
* @param aStream A pointer to a wxInputStream object to read.
* @param aSource The name of the stream source, for error reporting purposes.
@ -304,36 +280,31 @@ public:
INPUTSTREAM_LINE_READER( wxInputStream* aStream, const wxString& aSource );
char* ReadLine() override;
protected:
wxInputStream* m_stream; //< The input stream to read. No ownership of this pointer.
};
#define OUTPUTFMTBUFZ 500 ///< default buffer size for any OUTPUT_FORMATTER
/**
* OUTPUTFORMATTER
* is an important interface (abstract class) used to output 8 bit text in
* a convenient way. The primary interface is "printf() - like" but
* with support for indentation control. The destination of the 8 bit
* wide text is up to the implementer.
* An interface used to output 8 bit text in a convenient way.
*
* The primary interface is "printf() - like" but with support for indentation control. The
* destination of the 8 bit wide text is up to the implementer.
* <p>
* The implementer only has to implement the write() function, but can
* also optionally re-implement GetQuoteChar().
* The implementer only has to implement the write() function, but can also optionally
* re-implement GetQuoteChar().
* <p>
* If you want to output a wxString, then use TO_UTF8() on it
* before passing it as an argument to Print().
* If you want to output a wxString, then use TO_UTF8() on it before passing it as an
* argument to Print().
* <p>
* Since this is an abstract interface, only classes derived from
* this one may actually be used.
* Since this is an abstract interface, only classes derived from this one may actually be
* used.
*/
class OUTPUTFORMATTER
{
std::vector<char> m_buffer;
char quoteChar[2];
int sprint( const char* fmt, ... );
int vprint( const char* fmt, va_list ap );
protected:
OUTPUTFORMATTER( int aReserve = OUTPUTFMTBUFZ, char aQuoteChar = '"' ) :
m_buffer( aReserve, '\0' )
@ -345,22 +316,19 @@ protected:
virtual ~OUTPUTFORMATTER() {}
/**
* Function GetQuoteChar
* performs quote character need determination according to the Specctra DSN
* specification.
* Perform quote character need determination according to the Specctra DSN specification.
* @param wrapee A string that might need wrapping on each end.
* @param quote_char A single character C string which provides the current
* quote character, should it be needed by the wrapee.
* quote character, should it be needed by the wrapee.
*
* @return const char* - the quote_char as a single character string, or ""
* if the wrapee does not need to be wrapped.
* @return the quote_char as a single character string, or "" if the wrapee does not need
* to be wrapped.
*/
static const char* GetQuoteChar( const char* wrapee, const char* quote_char );
/**
* Function write
* should be coded in the interface implementation (derived) classes.
* Should be coded in the interface implementation (derived) classes.
*
* @param aOutBuf is the start of a byte buffer to write.
* @param aCount tells how many bytes to write.
@ -374,19 +342,14 @@ protected:
// so increase the STRING-INDEX and FIRST-TO_CHECK by one.
// See http://docs.freebsd.org/info/gcc/gcc.info.Function_Attributes.html
// Then to get format checking during the compile, compile with -Wall or -Wformat
#define PRINTF_FUNC __attribute__ ((format (printf, 3, 4)))
#define PRINTF_FUNC __attribute__( ( format( printf, 3, 4 ) ) )
#else
#define PRINTF_FUNC // nothing
#endif
public:
//-----<interface functions>------------------------------------------
/**
* Function Print
* formats and writes text to the output stream.
* Format and write text to the output stream.
*
* @param nestLevel The multiple of spaces to precede the output with.
* @param fmt A printf() style format string.
@ -398,35 +361,31 @@ public:
int PRINTF_FUNC Print( int nestLevel, const char* fmt, ... );
/**
* Function GetQuoteChar
* performs quote character need determination.
* It returns the quote character as a single character string for a given
* input wrapee string. If the wrappee does not need to be quoted,
* the return value is "" (the null string), such as when there are no
* delimiters in the input wrapee string. If you want the quote_char
* to be assuredly not "", then pass in "(" as the wrappee.
* Perform quote character need determination.
*
* It returns the quote character as a single character string for a given input wrapee
* string. If the wrappee does not need to be quoted, the return value is "" (the null
* string), such as when there are no delimiters in the input wrapee string. If you want
* the quote_char to be assuredly not "", then pass in "(" as the wrappee.
* <p>
* Implementations are free to override the default behavior, which is to
* call the static function of the same name.
* Implementations are free to override the default behavior, which is to call the static
* function of the same name.
*
* @param wrapee A string that might need wrapping on each end.
* @return const char* - the quote_char as a single character string, or ""
* if the wrapee does not need to be wrapped.
* @return the quote_char as a single character string, or "" if the wrapee does not need
* to be wrapped.
*/
virtual const char* GetQuoteChar( const char* wrapee );
/**
* Function Quotes
* checks \a aWrapee input string for a need to be quoted
* (e.g. contains a ')' character or a space), and for \" double quotes
* within the string that need to be escaped such that the DSNLEXER
* will correctly parse the string from a file later.
* Check \a aWrapee input string for a need to be quoted (e.g. contains a ')' character
* or a space), and for \" double quotes within the string that need to be escaped such
* that the DSNLEXER will correctly parse the string from a file later.
*
* @param aWrapee is a string that might need wraping in double quotes,
* and it might need to have its internal content escaped, or not.
*
* @return std::string - whose c_str() function can be called for passing
* to printf() style functions that output UTF8 encoded s-expression streams.
* @param aWrapee is a string that might need wrapping in double quotes, and it might need
* to have its internal content escaped, or not.
* @return a std::string- whose c_str() function can be called for passing to printf()
* style functions that output UTF8 encoded s-expression streams.
*
* @throw IO_ERROR, if there is any kind of problem with the input string.
*/
@ -434,24 +393,26 @@ public:
std::string Quotew( const wxString& aWrapee );
//-----</interface functions>-----------------------------------------
private:
std::vector<char> m_buffer;
char quoteChar[2];
int sprint( const char* fmt, ... );
int vprint( const char* fmt, va_list ap );
};
/**
* STRING_FORMATTER
* implements OUTPUTFORMATTER to a memory buffer. After Print()ing the
* string is available through GetString()
*/
* Implement an #OUTPUTFORMATTER to a memory buffer.
*
* After Print()ing the string is available through GetString()
*/
class STRING_FORMATTER : public OUTPUTFORMATTER
{
std::string m_mystring;
public:
/**
* Constructor STRING_FORMATTER
* reserves space in the buffer
* Reserve space in the buffer.
*/
STRING_FORMATTER( int aReserve = OUTPUTFMTBUFZ, char aQuoteChar = '"' ) :
OUTPUTFORMATTER( aReserve, aQuoteChar )
@ -459,8 +420,7 @@ public:
}
/**
* Function Clear
* clears the buffer and empties the internal string.
* Clear the buffer and empties the internal string.
*/
void Clear()
{
@ -468,8 +428,7 @@ public:
}
/**
* Function StripUseless
* removes whitespace, '(', and ')' from the mystring.
* Removes whitespace, '(', and ')' from the string.
*/
void StripUseless();
@ -479,40 +438,37 @@ public:
}
protected:
//-----<OUTPUTFORMATTER>------------------------------------------------
void write( const char* aOutBuf, int aCount ) override;
//-----</OUTPUTFORMATTER>-----------------------------------------------
private:
std::string m_mystring;
};
/**
* FILE_OUTPUTFORMATTER
* may be used for text file output. It is about 8 times faster than
* STREAM_OUTPUTFORMATTER for file streams.
* Used for text file output.
*
* It is about 8 times faster than STREAM_OUTPUTFORMATTER for file streams.
*/
class FILE_OUTPUTFORMATTER : public OUTPUTFORMATTER
{
public:
/**
* Constructor
* @param aFileName is the full filename to open and save to as a text file.
* @param aMode is what you would pass to wxFopen()'s mode, defaults to wxT( "wt" )
* for text files that are to be created here and now.
* @param aQuoteChar is a char used for quoting problematic strings
(with whitespace or special characters in them).
* for text files that are to be created here and now.
* @param aQuoteChar is a char used for quoting problematic strings (with whitespace or
* special characters in them).
* @throw IO_ERROR if the file cannot be opened.
*/
FILE_OUTPUTFORMATTER( const wxString& aFileName,
const wxChar* aMode = wxT( "wt" ),
char aQuoteChar = '"' );
FILE_OUTPUTFORMATTER( const wxString& aFileName, const wxChar* aMode = wxT( "wt" ),
char aQuoteChar = '"' );
~FILE_OUTPUTFORMATTER();
protected:
//-----<OUTPUTFORMATTER>------------------------------------------------
void write( const char* aOutBuf, int aCount ) override;
//-----</OUTPUTFORMATTER>-----------------------------------------------
FILE* m_fp; ///< takes ownership
wxString m_filename;
@ -520,9 +476,9 @@ protected:
/**
* STREAM_OUTPUTFORMATTER
* implements OUTPUTFORMATTER to a wxWidgets wxOutputStream. The stream is
* neither opened nor closed by this class.
* Implement an #OUTPUTFORMATTER to a wxWidgets wxOutputStream.
*
* The stream is neither opened nor closed by this class.
*/
class STREAM_OUTPUTFORMATTER : public OUTPUTFORMATTER
{
@ -530,9 +486,8 @@ class STREAM_OUTPUTFORMATTER : public OUTPUTFORMATTER
public:
/**
* Constructor STREAM_OUTPUTFORMATTER
* can take any number of wxOutputStream derivations, so it can write
* to a file, socket, or zip file.
* This can take any number of wxOutputStream derivations, so it can write to a file,
* socket, or zip file.
*/
STREAM_OUTPUTFORMATTER( wxOutputStream& aStream, char aQuoteChar = '"' ) :
OUTPUTFORMATTER( OUTPUTFMTBUFZ, aQuoteChar ),
@ -541,9 +496,7 @@ public:
}
protected:
//-----<OUTPUTFORMATTER>------------------------------------------------
void write( const char* aOutBuf, int aCount ) override;
//-----</OUTPUTFORMATTER>-----------------------------------------------
};
#endif // RICHIO_H_

View File

@ -28,9 +28,7 @@
#include <wx/stc/stc.h>
/**
* SCINTILLA_TRICKS
* is used to add cut/copy/paste, autocomplete and brace highlighting to a wxStyleTextCtrl
* instance.
* Add cut/copy/paste, autocomplete and brace highlighting to a wxStyleTextCtrl instance.
*/
class SCINTILLA_TRICKS : public wxEvtHandler
{

View File

@ -25,9 +25,8 @@
#define __SCOPED_SET_RESET_H
/**
* @class SCOPED_SET_RESET
* @brief RAII class that sets an value at construction and resets
* it to the original value at destruction.
* RAII class that sets an value at construction and resets it to the original value
* at destruction.
*
* @note There is no type deduction for template classes until C++17, \
* so you can't do this:
@ -46,8 +45,7 @@ class SCOPED_SET_RESET
{
public:
SCOPED_SET_RESET( VAL_TYPE& target,
VAL_TYPE value ):
SCOPED_SET_RESET( VAL_TYPE& target, VAL_TYPE value ):
m_target( target )
{
m_original = target;
@ -55,10 +53,7 @@ public:
}
/**
* Function ~SCOPED_SET_RESET
*
* Destruct the class, and return the target to its original
* value.
* Destruct the class, and return the target to its original value.
*/
~SCOPED_SET_RESET()
{

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2014 CERN
* Copyright (C) 1992-2014 KiCad Developers, see CHANGELOG.TXT for contributors.
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
* @author Maciej Suminski <maciej.suminski@cern.ch>
*
* This program is free software; you can redistribute it and/or
@ -32,16 +32,15 @@
/**
* SEARCH_STACK
* looks for files in a number of places. Augments wxPathList.
* I chose the name because it sounded like a stack of work, as a reminder
* that anything you put in here means searching work at some point in time.
* Look for files in a number of paths.
*
* Augments wxPathList. I chose the name because it sounded like a stack of work, as a
* reminder that anything you put in here means searching work at some point in time.
* (An alternative is to simply know where something is.)
*/
class SEARCH_STACK : public wxPathList, public PROJECT::_ELEM
{
public:
KICAD_T Type() override { return SEARCH_STACK_T; }
#if defined(DEBUG)
@ -49,26 +48,24 @@ public:
#endif
/**
* Function FilenameWithRelativePathInSearchList
* returns the shortest possible path which can be use later to find
* a full path from this SEARCH_STACK.
* <p>
* If the library path is already in the library search paths list,
* just add the library name to the list. Otherwise, add the library
* name with the full or relative path. The relative path is preferable
* because it preserves use of default libraries paths, when the path
* is a sub path of these default paths. Note we accept only sub paths
* not relative paths starting by ../ that are not subpaths and are
* outside kicad libs paths
* Return the shortest possible path which can be use later to find a full path from
* this SEARCH_STACK.
*
* If the library path is already in the library search paths list, just add the library
* name to the list. Otherwise, add the library name with the full or relative path.
* The relative path is preferable because it preserves use of default libraries paths,
* when the path is a sub path of these default paths. Note we accept only sub paths
* not relative paths starting by ../ that are not subpaths and are outside KiCad library
* paths
*
* @param aFullFilename The filename with path and extension.
* @param aBaseDir The absolute path on which relative paths in this
* SEARCH_STACK are based.
* @param aBaseDir The absolute path on which relative paths in this SEARCH_STACK are
* based.
* @return a short filename (with extension) with only a relative path if
* this filename can be found in library paths
*/
wxString FilenameWithRelativePathInSearchList(
const wxString& aFullFilename, const wxString& aBaseDir );
wxString FilenameWithRelativePathInSearchList( const wxString& aFullFilename,
const wxString& aBaseDir );
wxString FindValidPath( const wxString& aFileName ) const
{
@ -82,44 +79,42 @@ public:
}
/**
* Function AddPaths
* insert or append path(s)
* Insert or append path(s).
*
* @param aPaths = path or path list to add. paths must be
* separated by ";" on windows, or ":" | ";" on unix.
*
* @param aIndex = insertion point, -1 for append.
* @param aPaths path or path list to add. paths must be separated by ";" on windows,
* or ":" | ";" on unix.
* @param aIndex insertion point, -1 for append.
*/
void AddPaths( const wxString& aPaths, int aIndex = -1 );
/**
* Function RemovePaths
* removes the given path(s) from the library path list
* @param aPaths = path or list of paths to remove. If list, paths must be separated by
* ";" on windows, or ":" | ";" on unix.
* Remove the given path(s) from the library path list.
*
* @param aPaths path or list of paths to remove. If list, paths must be separated by
* ";" on windows, or ":" | ";" on unix.
*/
void RemovePaths( const wxString& aPaths );
/**
* Function Split
* separates aPathString into individual paths.
* Separate \a aPathString into individual paths.
*
* @param aResult is where to put the paths, it should be empty upon entry.
* @param aPathString is concatonated string with interposing ';' or ':' separators.
* @return int - the count of paths found in aPathString
* @param aPathString is concatenated string with interposing ';' or ':' separators.
* @return the count of paths found in \a aPathString
*/
static int Split( wxArrayString* aResult, const wxString& aPathString );
#if 1 // this function is so poorly designed it deserves not to exist.
/**
* Function LastVisitedPath
* is a quirky function inherited from old code that seems to serve particular
* needs in the UI. It returns what is called the last visited directory, or
* if aSubPathToSearch is empty, the first path in this SEARCH_STACK
* ( but not the CWD ).
* A quirky function inherited from old code that seems to serve particular needs in
* the UI.
*
* It returns what is called the last visited directory or if \a aSubPathToSearch is
* empty, the first path in this SEARCH_STACK ( but not the CWD ).
*
* @todo add more here if you can figure it out.
*
* @param aSubPathToSearch is the preferred sub path to search in path list
* @param aSubPathToSearch is the preferred sub path to search in path list.
*/
const wxString LastVisitedPath( const wxString& aSubPathToSearch = wxEmptyString );
#endif

View File

@ -2,6 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2014-2015 CERN
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
* Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
*
* This program is free software; you can redistribute it and/or
@ -36,8 +37,6 @@
class EDA_DRAW_FRAME;
/**
* STATUS_POPUP
*
* A tiny, headerless popup window used to display useful status (e.g. line length
* tuning info) next to the mouse cursor.
*/
@ -54,7 +53,7 @@ public:
virtual void Move( const VECTOR2I& aWhere );
/**
* Hides the popup after a specified time.
* Hide the popup after a specified time.
*
* @param aMsecs is the time expressed in milliseconds
*/
@ -75,9 +74,7 @@ protected:
/**
* STATUS_TEXT_POPUP
*
* Extension of STATUS_POPUP, displaying a single line text.
* Extension of #STATUS_POPUP for displaying a single line text.
*/
class STATUS_TEXT_POPUP : public STATUS_POPUP
{
@ -87,12 +84,14 @@ public:
/**
* Display a text.
*
* @param aText is the text to be displayed.
*/
void SetText( const wxString& aText );
/**
* Change text color.
*
* @param aColor is the new text color.
*/
void SetTextColor( const wxColour& aColor );

View File

@ -2,6 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* 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
@ -28,90 +29,91 @@
#if defined( _WIN32 ) && defined( __GNUC__ )
#include <ext/stdio_filebuf.h>
#include <ext/stdio_filebuf.h>
#define OSTREAM std::ostream
#define OSTREAM std::ostream
#define OPEN_OSTREAM( var, name ) \
kicad::stream var ## _BUF_; \
std::ostream& var = *var ## _BUF_.Open( name, std::ios_base::out | std::ios_base::trunc | std::ios_base::binary )
#define OPEN_OSTREAM( var, name ) \
kicad::stream var##_BUF_; \
std::ostream& var = *var##_BUF_.Open( name, std::ios_base::out | std::ios_base::trunc \
| std::ios_base::binary )
#define OPEN_ISTREAM( var, name ) \
kicad::stream var ## _BUF_; \
std::istream& var = *var ## _BUF_.Open( name, std::ios_base::in | std::ios_base::binary )
#define OPEN_ISTREAM( var, name ) \
kicad::stream var##_BUF_; \
std::istream& var = *var##_BUF_.Open( name, std::ios_base::in | std::ios_base::binary )
#define OPEN_IOSTREAM( var, name ) \
kicad::stream var ## _BUF_; \
std::iostream& var = *var ## _BUF_.Open( name, std::ios_base::out | std::ios_base::in | std::ios_base::binary )
#define OPEN_IOSTREAM( var, name ) \
kicad::stream var##_BUF_; \
std::iostream& var = *var##_BUF_.Open( name, std::ios_base::out | std::ios_base::in \
| std::ios_base::binary )
#define CLOSE_STREAM( var ) var ## _BUF_.Close()
#define CLOSE_STREAM( var ) var##_BUF_.Close()
/**
* \namespace kicad
*/
namespace kicad
{
/**
* class stream is equivalent to std::stream, but accept UTF8 chars
* in filenames
*/
class stream
{
private:
__gnu_cxx::stdio_filebuf<char>* m_buf;
std::iostream* m_stream;
/**
* \namespace kicad
*/
namespace kicad
{
/**
* This is equivalent to std::stream but accepts UTF8 chars in filenames.
*/
class stream
{
private:
__gnu_cxx::stdio_filebuf<char>* m_buf;
std::iostream* m_stream;
public:
stream();
virtual ~stream();
public:
stream();
virtual ~stream();
std::iostream* Open( const char* aFileName, std::ios_base::openmode aMode );
void Close( void );
std::iostream* Open( const char* aFileName, std::ios_base::openmode aMode );
void Close( void );
std::iostream* GetStream( void );
};
}
std::iostream* GetStream( void );
};
} // namespace kicad
#elif defined( _MSC_VER ) // defined( _WIN32 ) && defined( __GNUC__ )
#elif defined( _MSC_VER ) // defined( _WIN32 ) && defined( __GNUC__ )
#define OSTREAM std::ofstream
#define OSTREAM std::ofstream
#define OPEN_OSTREAM( var, name ) \
std::ofstream var; \
var.open( wxString::FromUTF8Unchecked( name ).wc_str(), \
std::ios_base::out | std::ios_base::trunc | std::ios_base::binary )
#define OPEN_OSTREAM( var, name ) \
std::ofstream var; \
var.open( wxString::FromUTF8Unchecked( name ).wc_str(), \
std::ios_base::out | std::ios_base::trunc | std::ios_base::binary )
#define OPEN_ISTREAM( var, name ) \
std::ifstream var; \
var.open( wxString::FromUTF8Unchecked( name ).wc_str(), \
std::ios_base::in | std::ios_base::binary )
#define OPEN_ISTREAM( var, name ) \
std::ifstream var; \
var.open( wxString::FromUTF8Unchecked( name ).wc_str(), \
std::ios_base::in | std::ios_base::binary )
#define OPEN_IOSTREAM( var, name ) \
std::fstream var; \
var.open( wxString::FromUTF8Unchecked( name ).wc_str(), \
std::ios_base::out | std::ios_base::in | std::ios_base::binary )
#define OPEN_IOSTREAM( var, name ) \
std::fstream var; \
var.open( wxString::FromUTF8Unchecked( name ).wc_str(), \
std::ios_base::out | std::ios_base::in | std::ios_base::binary )
#define CLOSE_STREAM( var ) var.close()
#define CLOSE_STREAM( var ) var.close()
#else // defined( _WIN32 ) && defined( __GNUC__ )
#else // defined( _WIN32 ) && defined( __GNUC__ )
#define OSTREAM std::ofstream
#define OSTREAM std::ofstream
#define OPEN_OSTREAM( var, name ) \
std::ofstream var; \
var.open( name, std::ios_base::out | std::ios_base::trunc )
#define OPEN_OSTREAM( var, name ) \
std::ofstream var; \
var.open( name, std::ios_base::out | std::ios_base::trunc )
#define OPEN_ISTREAM( var, name ) \
std::ifstream var; \
var.open( name, std::ios_base::in )
#define OPEN_ISTREAM( var, name ) \
std::ifstream var; \
var.open( name, std::ios_base::in )
#define OPEN_IOSTREAM( var, name ) \
std::fstream var; \
var.open( name, std::ios_base::out | std::ios_base::in )
#define OPEN_IOSTREAM( var, name ) \
std::fstream var; \
var.open( name, std::ios_base::out | std::ios_base::in )
#define CLOSE_STREAM( var ) var.close()
#define CLOSE_STREAM( var ) var.close()
#endif // defined( _WIN32 ) && defined( __GNUC__ )
#endif // defined( _WIN32 ) && defined( __GNUC__ )
#endif // STREAMWRAPPER_H

View File

@ -1,7 +1,7 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2017 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2017-2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* 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
@ -27,13 +27,9 @@
* Synchronized, locking queue. Safe for multiple producer/multiple consumer environments with
* nontrivial data (though bear in mind data needs to be copied in and out).
*/
template <typename T> class SYNC_QUEUE
template <typename T>
class SYNC_QUEUE
{
typedef std::lock_guard<std::mutex> GUARD;
std::queue<T> m_queue;
mutable std::mutex m_mutex;
public:
SYNC_QUEUE()
{
@ -58,10 +54,11 @@ public:
}
/**
* Pop a value off the queue into the provided variable. If the queue is empty, the
* variable is not touched.
* Pop a value if the queue into the provided variable.
*
* @return true iff a value was popped.
* If the queue is empty, the variable is not touched.
*
* @return true if a value was popped.
*/
bool pop( T& aReceiver )
{
@ -80,7 +77,7 @@ public:
}
/**
* Return true iff the queue is empty.
* Return true if the queue is empty.
*/
bool empty() const
{
@ -109,6 +106,12 @@ public:
m_queue.pop();
}
}
private:
typedef std::lock_guard<std::mutex> GUARD;
std::queue<T> m_queue;
mutable std::mutex m_mutex;
};
#endif // SYNC_QUEUE_H

View File

@ -1,7 +1,7 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2017 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2017-2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -32,10 +32,8 @@
class SEARCH_STACK;
/**
* Function SystemDirsAppend
* appends system places to aSearchStack in a platform specific way, and pertinent
* to KiCad programs. It seems to be a place to collect bad ideas and keep them
* out of view.
* Append system places to \a aSearchStack in a platform specific way and pertinent
* to KiCad programs.
*/
void SystemDirsAppend( SEARCH_STACK* aSearchStack );

View File

@ -33,12 +33,11 @@ class TEMPLATE_FIELDNAMES_LEXER;
/**
* Enum NumFieldType
* is the set of all field indices assuming an array like sequence that a
* SCH_COMPONENT or LIB_PART can hold.
* The first fields are called fixed fields and the quantity of them is
* given by MANDATORY_FIELDS. After that come an unlimited number of
* user defined fields, only some of which have indices defined here.
* The set of all field indices assuming an array like sequence that a SCH_COMPONENT or
* LIB_PART can hold.
*
* The first fields are fixed fields and are defined by #MANDATORY_FIELDS. After that come
* an unlimited number of user defined fields, only some of which have indices defined here.
*/
enum NumFieldType {
REFERENCE_FIELD = 0, ///< Field Reference of part, i.e. "IC21"
@ -62,17 +61,12 @@ enum NumFieldType {
/**
* Struct TEMPLATE_FIELDNAME
* holds a name of a component's field, field value, and default visibility.
* Template fieldnames are wanted fieldnames for use in the symbol/component
* property editors.
* Hold a name of a symbol's field, field value, and default visibility.
*
* Template fieldnames are wanted field names for use in the symbol property editors.
*/
struct TEMPLATE_FIELDNAME
{
wxString m_Name; // The field name
bool m_Visible; // Field defaults to being visible in schematic.
bool m_URL; // If field should have a browse button
TEMPLATE_FIELDNAME() :
m_Visible( false ),
m_URL( false )
@ -94,34 +88,37 @@ struct TEMPLATE_FIELDNAME
}
/**
* Function Format
* serializes this object out as text into the given OUTPUTFORMATTER.
* Serialize this object out as text into the given #OUTPUTFORMATTER.
*/
void Format( OUTPUTFORMATTER* out, int nestLevel ) const ;
/**
* Function Parse
* fills this object from information in the input stream \a aSpec, which
* is a TEMPLATE_FIELDNAMES_LEXER. The entire textual element spec is <br>
* (field (name _yourfieldname_)(value _yourvalue_) visible)) <br>
* The presence of value is optional, the presence of visible is optional.
* When this function is called, the input token stream given by \a aSpec
* is assumed to be positioned at the '^' in the following example, i.e. just after the
* identifying keyword and before the content specifying stuff.<br>
* (field ^ (....) )
* Fill this object from information in the input stream \a aSpec, which is a
* #TEMPLATE_FIELDNAMES_LEXER.
*
* The entire textual element spec is <br>(field (name _yourfieldname_)(value _yourvalue_)
* visible))</br>. The presence of value is optional, the presence of visible is optional.
* When this function is called, the input token stream given by \a aSpec is assumed to be
* positioned at the '^' in the following example, i.e. just after the identifying keyword
* and before the content specifying stuff.<br>(field ^ (....) )</br>.
*
* @param aSpec is the input token stream of keywords and symbols.
*/
void Parse( TEMPLATE_FIELDNAMES_LEXER* aSpec );
/**
* Function GetDefaultFieldName
* returns a default symbol field name for field \a aFieldNdx for all components.
* These fieldnames are not modifiable, but template fieldnames are.
* @param aFieldNdx The field number index, > 0
* @param aTranslate If true, return the translated field name, else get the canonical name
* Return a default symbol field name for field \a aFieldNdx for all components.
*
* These field names are not modifiable but template field names are.
*
* @param aFieldNdx The field number index, > 0.
* @param aTranslate If true, return the translated field name, else get the canonical name.
*/
static const wxString GetDefaultFieldName( int aFieldNdx, bool aTranslate = true );
wxString m_Name; // The field name
bool m_Visible; // Field defaults to being visible in schematic.
bool m_URL; // If field should have a browse button
};
typedef std::vector< TEMPLATE_FIELDNAME > TEMPLATE_FIELDNAMES;
@ -129,6 +126,61 @@ typedef std::vector< TEMPLATE_FIELDNAME > TEMPLATE_FIELDNAMES;
class TEMPLATES
{
public:
TEMPLATES() :
m_resolvedDirty( true )
{ }
/**
* Serialize this object out as text into the given #OUTPUTFORMATTER.
*/
void Format( OUTPUTFORMATTER* out, int nestLevel, bool aGlobal ) const ;
/**
* Fill this object from information in the input stream handled by
* #TEMPLATE_FIELDNAMES_LEXER.
*/
void Parse( TEMPLATE_FIELDNAMES_LEXER* in, bool aGlobal );
/**
* Insert or append a wanted symbol field name into the field names template.
*
* Should be used for any symbol property editor. If the name already exists, it
* overwrites the same name.
*
* @param aFieldName is a full description of the wanted field, and it must not match
* any of the default field names.
* @param aGlobal indicates whether to add to the global or project table.
*/
void AddTemplateFieldName( const TEMPLATE_FIELDNAME& aFieldName, bool aGlobal );
/**
* Delete the entire contents.
*/
void DeleteAllFieldNameTemplates( bool aGlobal );
/**
* Return a template field name list for read only access.
*/
const TEMPLATE_FIELDNAMES& GetTemplateFieldNames();
/**
* Return a specific list (global or project) for read only access.
*/
const TEMPLATE_FIELDNAMES& GetTemplateFieldNames( bool aGlobal );
/**
* Search for \a aName in the the template field name list.
*
* @param aName A wxString object containing the field name to search for.
* @return the template field name if found; NULL otherwise.
*/
const TEMPLATE_FIELDNAME* GetFieldName( const wxString& aName );
protected:
void resolveTemplates();
private:
TEMPLATE_FIELDNAMES m_globals;
TEMPLATE_FIELDNAMES m_project;
@ -136,67 +188,6 @@ private:
// Combined list. Project templates override global ones.
TEMPLATE_FIELDNAMES m_resolved;
bool m_resolvedDirty;
public:
TEMPLATES() :
m_resolvedDirty( true )
{ }
/**
* Function Format
* serializes this object out as text into the given OUTPUTFORMATTER.
*/
void Format( OUTPUTFORMATTER* out, int nestLevel, bool aGlobal ) const ;
/**
* Function Parse
* fills this object from information in the input stream handled by TEMPLATE_FIELDNAMES_LEXER
*/
void Parse( TEMPLATE_FIELDNAMES_LEXER* in, bool aGlobal );
/**
* Function AddTemplateFieldName
* inserts or appends a wanted symbol field name into the fieldnames
* template. Should be used for any symbol property editor. If the name
* already exists, it overwrites the same name.
*
* @param aFieldName is a full description of the wanted field, and it must not match
* any of the default fieldnames.
* @param aGlobal indicates whether to add to the global or project table.
*/
void AddTemplateFieldName( const TEMPLATE_FIELDNAME& aFieldName, bool aGlobal );
/**
* Function DeleteAllFieldNameTemplates
* deletes the entire contents.
*/
void DeleteAllFieldNameTemplates( bool aGlobal );
/**
* Function GetTemplateFieldName
* returns a template fieldnames list for read only access.
*/
const TEMPLATE_FIELDNAMES& GetTemplateFieldNames();
/**
* Function GetTemplateFieldName
* returns a specific list (global or project) for read only access.
*/
const TEMPLATE_FIELDNAMES& GetTemplateFieldNames( bool aGlobal );
/**
* Function GetFieldName
* searches for \a aName in the the template field name list.
*
* @param aName A wxString object containing the field name to search for.
* @return the template fieldname if found; NULL otherwise.
*/
const TEMPLATE_FIELDNAME* GetFieldName( const wxString& aName );
protected:
void resolveTemplates();
};
#endif // _TEMPLATE_FIELDNAME_H_

View File

@ -1,7 +1,7 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2020 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -28,9 +28,9 @@
#include <wx/textentry.h>
/**
* TEXTENTRY_TRICKS
* is used to add cut/copy/paste to a wxTextEntry instance. While these are normally handled
* witout our intervention, this is not always the case.
* Add cut/copy/paste to a wxTextEntry instance.
*
* While these are normally handled without our intervention, this is not always the case.
*/
struct TEXTENTRY_TRICKS
{

View File

@ -1,7 +1,7 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 1992-2012 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -31,8 +31,7 @@
class OUTPUTFORMATTER;
/**
* TITLE_BLOCK
* holds the information shown in the lower right corner of a plot, printout, or
* Hold the information shown in the lower right corner of a plot, printout, or
* editing view.
*
* @author Dick Hollenbeck
@ -52,7 +51,6 @@ class TITLE_BLOCK
};
public:
TITLE_BLOCK() {};
virtual ~TITLE_BLOCK() {}; // a virtual dtor seems needed to build
// python lib without warning
@ -68,8 +66,7 @@ public:
}
/**
* Function SetDate
* sets the date field, and defaults to the current time and date.
* Set the date field, and defaults to the current time and date.
*/
void SetDate( const wxString& aDate )
{
@ -119,8 +116,7 @@ public:
}
/**
* Function Format
* outputs the object to \a aFormatter in s-expression form.
* Output the object to \a aFormatter in s-expression form.
*
* @param aFormatter The #OUTPUTFORMATTER object to write to.
* @param aNestLevel The indentation next level.
@ -136,6 +132,7 @@ private:
{
if( (int)m_tbTexts.GetCount() <= aIdx )
m_tbTexts.Add( wxEmptyString, aIdx + 1 - m_tbTexts.GetCount() );
m_tbTexts[aIdx] = aText;
}

View File

@ -2,8 +2,8 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2009 jean-pierre.charras@gipsa-lab.inpg.fr
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 2009 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 2009-2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -47,8 +47,10 @@ class BASE_SCREEN;
*/
/* Type of undo/redo operations
* each type must be redo/undone by a specific operation
/**
* Type of undo/redo operations
*
* Each type must be redo/undone by a specific operation.
*/
enum class UNDO_REDO {
UNSPECIFIED = 0, // illegal
@ -77,29 +79,11 @@ enum class UNDO_REDO {
class ITEM_PICKER
{
private:
STATUS_FLAGS m_pickerFlags; /* a copy of m_flags member. useful in mode/drag
* undo/redo commands */
UNDO_REDO m_undoRedoStatus; /* type of operation to undo/redo for this item */
EDA_ITEM* m_pickedItem; /* Pointer on the schematic or board item that is concerned
* (picked), or in undo redo commands, the copy of an
* edited item. */
KICAD_T m_pickedItemType; /* type of schematic or board item that is concerned */
EDA_ITEM* m_link; /* Pointer on another item. Used in undo redo command
* used when a duplicate exists i.e. when an item is
* modified, and the copy of initial item exists (the
* duplicate) m_Item points the duplicate (i.e the old
* copy of an active item) and m_Link points the active
* item in schematic */
BASE_SCREEN* m_screen; /* For new and deleted items the screen the item should
* be added to/removed from. */
public:
// ITEM_PICKER( EDA_ITEM* aItem = NULL, UNDO_REDO aStatus = UNSPECIFIED );
ITEM_PICKER();
ITEM_PICKER( BASE_SCREEN* aScreen, EDA_ITEM* aItem, UNDO_REDO aStatus = UNDO_REDO::UNSPECIFIED );
ITEM_PICKER( BASE_SCREEN* aScreen, EDA_ITEM* aItem,
UNDO_REDO aStatus = UNDO_REDO::UNSPECIFIED );
EDA_ITEM* GetItem() const { return m_pickedItem; }
@ -124,21 +108,41 @@ public:
EDA_ITEM* GetLink() const { return m_link; }
BASE_SCREEN* GetScreen() const { return m_screen; }
private:
STATUS_FLAGS m_pickerFlags; /* a copy of m_flags member. useful in mode/drag
* undo/redo commands */
UNDO_REDO m_undoRedoStatus; /* type of operation to undo/redo for this item */
EDA_ITEM* m_pickedItem; /* Pointer on the schematic or board item that is concerned
* (picked), or in undo redo commands, the copy of an
* edited item. */
KICAD_T m_pickedItemType; /* type of schematic or board item that is concerned */
EDA_ITEM* m_link; /* Pointer on another item. Used in undo redo command
* used when a duplicate exists i.e. when an item is
* modified, and the copy of initial item exists (the
* duplicate) m_Item points the duplicate (i.e the old
* copy of an active item) and m_Link points the active
* item in schematic */
BASE_SCREEN* m_screen; /* For new and deleted items the screen the item should
* be added to/removed from. */
};
/**
* PICKED_ITEMS_LIST
* is a holder to handle information on schematic or board items.
* A holder to handle information on schematic or board items.
*
* The information held is a pointer on each item, and the command made.
*/
class PICKED_ITEMS_LIST
{
public:
UNDO_REDO m_Status; /* info about operation to undo/redo for this item. can be
* UNSPECIFIED */
wxPoint m_TransformPoint; /* used to undo redo command by the same command: usually
* need to know the rotate point or the move vector */
* UNSPECIFIED */
wxPoint m_TransformPoint; /* used to undo redo command by the same command: usually
* need to know the rotate point or the move vector */
private:
std::vector <ITEM_PICKER> m_ItemsList;
@ -148,46 +152,40 @@ public:
~PICKED_ITEMS_LIST();
/**
* Function PushItem
* pushes \a aItem to the top of the list
* Push \a aItem to the top of the list.
*
* @param aItem Picker to push on to the list.
*/
void PushItem( const ITEM_PICKER& aItem );
/**
* Function PopItem
* @return The picker removed from the top of the list.
*/
ITEM_PICKER PopItem();
/**
* Function IsItemInList
* @return True if \a aItem is found in the pick list.
*/
bool ContainsItem( const EDA_ITEM* aItem ) const;
/**
* Function FindItem
* @return Index of the searched item. If the item is not stored in the list, negative value
* is returned.
* is returned.
*/
int FindItem( const EDA_ITEM* aItem ) const;
/**
* Function ClearItemsList
* deletes only the list of pickers, NOT the picked data itself.
* Delete only the list of pickers NOT the picked data itself.
*/
void ClearItemsList();
/**
* Function ClearListAndDeleteItems
* deletes the list of pickers, AND the data pointed by m_PickedItem or
* m_PickedItemLink, according to the type of undo/redo command recorded
* Delete the list of pickers AND the data pointed by #m_PickedItem or #m_PickedItemLink
* according to the type of undo/redo command recorded.
*/
void ClearListAndDeleteItems();
/**
* Function GetCount
* @return The count of pickers stored in this list.
*/
unsigned GetCount() const
@ -196,9 +194,8 @@ public:
}
/**
* Function ReversePickersListOrder
* reverses the order of pickers stored in this list.
* <p>
* Reverse the order of pickers stored in this list.
*
* This is useful when pop a list from Undo to Redo (and vice-versa) because
* sometimes undo (or redo) a command needs to keep the order of successive
* changes. Obviously, undo and redo are in reverse order
@ -206,80 +203,72 @@ public:
void ReversePickersListOrder();
/**
* Function GetItemWrapper
* @return The picker of a picked item.
* @param aIdx Index of the picker in the picked list
* if this picker does not exist, a picker is returned,
* with its members set to 0 or NULL
* @param aIdx Index of the picker in the picked list if this picker does not exist,
* a picker is returned, with its members set to 0 or NULL.
*/
ITEM_PICKER GetItemWrapper( unsigned int aIdx ) const;
/**
* Function GetPickedItem
* @return A pointer to the picked item
* @param aIdx Index of the picked item in the picked list
* @return A pointer to the picked item.
* @param aIdx Index of the picked item in the picked list.
*/
EDA_ITEM* GetPickedItem( unsigned int aIdx ) const;
/**
* Function GetScreenForItem
* @return A pointer to the picked item's sceen
* @param aIdx Index of the picked item in the picked list
* @return A pointer to the picked item's sceen.
* @param aIdx Index of the picked item in the picked list.
*/
BASE_SCREEN* GetScreenForItem( unsigned int aIdx ) const;
/**
* Function GetPickedItemLink
* @return link of the picked item, or null if does not exist
* @param aIdx Index of the picked item in the picked list
* @return link of the picked item, or null if does not exist.
* @param aIdx Index of the picked item in the picked list.
*/
EDA_ITEM* GetPickedItemLink( unsigned int aIdx ) const;
/**
* Function GetPickedItemStatus
* @return The type of undo/redo operation associated to the picked item,
* or UNSPECIFIED if does not exist
* @param aIdx Index of the picked item in the picked list
* or UNSPECIFIED if does not exist.
* @param aIdx Index of the picked item in the picked list.
*/
UNDO_REDO GetPickedItemStatus( unsigned int aIdx ) const;
/**
* Function GetPickerFlags
* returns the value of the picker flag.
* @param aIdx Index of the picker in the picked list
* @return The value stored in the picker, if the picker exists, or 0 if does not exist
* Return the value of the picker flag.
*
* @param aIdx Index of the picker in the picked list.
* @return The value stored in the picker, if the picker exists, or 0 if does not exist.
*/
STATUS_FLAGS GetPickerFlags( unsigned aIdx ) const;
/**
* Function SetPickedItem
* @param aItem A pointer to the item to pick
* @param aIdx Index of the picker in the picked list
* @return True if the picker exists or false if does not exist
* @param aItem A pointer to the item to pick.
* @param aIdx Index of the picker in the picked list.
* @return True if the picker exists or false if does not exist.
*/
bool SetPickedItem( EDA_ITEM* aItem, unsigned aIdx );
/**
* Function SetPickedItem
* @param aItem A pointer to the item to pick
* @param aStatus The type of undo/redo operation associated to the item to pick
* @param aIdx Index of the picker in the picked list
* @return True if the picker exists or false if does not exist
* @param aItem A pointer to the item to pick.
* @param aStatus The type of undo/redo operation associated to the item to pick.
* @param aIdx Index of the picker in the picked list.
* @return True if the picker exists or false if does not exist.
*/
bool SetPickedItem( EDA_ITEM* aItem, UNDO_REDO aStatus, unsigned aIdx );
/**
* Function SetPickedItemLink
* set the link associated to a given picked item.
* @param aLink = the link to the item associated to the picked item
* @param aIdx = index of the picker in the picked list
* @return true if the picker exists, or false if does not exist
* Set the link associated to a given picked item.
*
* @param aLink is the link to the item associated to the picked item.
* @param aIdx is index of the picker in the picked list.
* @return true if the picker exists, or false if does not exist.
*/
bool SetPickedItemLink( EDA_ITEM* aLink, unsigned aIdx );
/**
* Function SetPickedItemStatus
* sets the type of undo/redo operation for a given picked item.
* Set the type of undo/redo operation for a given picked item.
*
* @param aStatus The type of undo/redo operation associated to the picked item
* @param aIdx Index of the picker in the picked list
* @return True if the picker exists or false if does not exist
@ -287,26 +276,27 @@ public:
bool SetPickedItemStatus( UNDO_REDO aStatus, unsigned aIdx );
/**
* Function SetPickerFlags
* set the flags of the picker (usually to the picked item m_flags value)
* @param aFlags The flag value to save in picker
* @param aIdx Index of the picker in the picked list
* @return True if the picker exists or false if does not exist
* Set the flags of the picker (usually to the picked item m_flags value).
*
* @param aFlags The flag value to save in picker.
* @param aIdx Index of the picker in the picked list.
* @return True if the picker exists or false if does not exist.
*/
bool SetPickerFlags( STATUS_FLAGS aFlags, unsigned aIdx );
/**
* Function RemovePicker
* removes one entry (one picker) from the list of picked items.
* @param aIdx Index of the picker in the picked list
* @return True if ok or false if did not exist
* Remove one entry (one picker) from the list of picked items.
*
* @param aIdx Index of the picker in the picked list.
* @return True if ok or false if did not exist.
*/
bool RemovePicker( unsigned aIdx );
/**
* Function CopyList
* copies all data from aSource to the list.
* Items picked are not copied. just pointer in them are copied
* Copy all data from aSource to the list.
*
* Items picked are not copied. just pointer in them are copied.
*
* @param aSource The list of items to copy to the list.
*/
void CopyList( const PICKED_ITEMS_LIST& aSource );
@ -314,17 +304,11 @@ public:
/**
* UNDO_REDO_CONTAINER
* is a holder to handle alist of undo (or redo) command.
* this class handles a list of ITEM_PICKER (each manage one schematic or board item).
* A holder to handle a list of undo (or redo) commands.
*/
class UNDO_REDO_CONTAINER
{
public:
std::vector <PICKED_ITEMS_LIST*> m_CommandsList; // the list of possible undo/redo commands
public:
UNDO_REDO_CONTAINER();
~UNDO_REDO_CONTAINER();
@ -333,6 +317,8 @@ public:
PICKED_ITEMS_LIST* PopCommand();
void ClearCommandList();
std::vector <PICKED_ITEMS_LIST*> m_CommandsList; // the list of possible undo/redo commands
};

View File

@ -2,7 +2,9 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2013 KiCad Developers, see CHANGELOG.TXT for contributors.
* Copyright (C) 2013-2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* @author Dick Hollenbeck
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -34,9 +36,9 @@
/**
* Function IsUTF8
* tests a c-string to see if it is UTF8 encoded. BTW an ASCII string is a valid
* UTF8 string.
* Test a C string to see if it is UTF8 encoded.
*
* An ASCII string is a valid UTF8 string.
*/
bool IsUTF8( const char* aString );
@ -49,31 +51,25 @@ bool IsUTF8( const char* aString );
/**
* UTF8
* is an 8 bit string that is assuredly encoded in UTF8, and supplies special
* conversion support to and from wxString, to and from std::string, and has
* non-mutating iteration over unicode characters.
* An 8 bit string that is assuredly encoded in UTF8, and supplies special conversion
* support to and from wxString, to and from std::string, and has non-mutating iteration
* over Unicode characters.
*
* <p>I've been careful to supply only conversion facilities and not try
* and duplicate wxString() with many member functions. There are multiple ways
* to create text into a std::string without the need of too many member functions:
* I've been careful to supply only conversion facilities and not try and duplicate
* wxString() with many member functions. There are multiple ways to create text into
* a std::string without the need of too many member functions:
*
* <ul>
* <li>richio.h's StrPrintf()</li>
* <li>std::ostringstream.</li>
* </ul>
* - richio.h's StrPrintf().
* - std::ostringstream.
*
* <p>Because this class used no virtuals, it should be possible to cast any
* std::string into a UTF8 using this kind of cast: (UTF8 &) without construction
* or copying being the effect of the cast. Be sure the source std::string holds
* UTF8 encoded text before you do that.
*
* @author Dick Hollenbeck
* Because this class uses no virtuals, it should be possible to cast any std::string
* into a UTF8 using this kind of cast: (UTF8 &) without construction or copying being
* the effect of the cast. Be sure the source std::string holds UTF8 encoded text before
* you do that.
*/
class UTF8
{
public:
UTF8( const wxString& o );
/// This is a constructor for which you could end up with
@ -103,7 +99,6 @@ public:
}
// expose some std::string functions publicly, since base class must be private.
const char* c_str() const { return m_s.c_str(); }
bool empty() const { return m_s.empty(); }
@ -119,7 +114,8 @@ public:
bool operator==( const std::string& rhs ) const { return m_s == rhs; }
bool operator==( const char* s ) const { return m_s == s; }
std::string::size_type find_first_of( const std::string& str, std::string::size_type pos = 0 ) const
std::string::size_type find_first_of( const std::string& str,
std::string::size_type pos = 0 ) const
{
return m_s.find_first_of( str, pos );
}
@ -206,19 +202,7 @@ public:
*/
class uni_iter
{
friend class UTF8;
const unsigned char* it;
// private constructor
uni_iter( const char* start ) :
it( (const unsigned char*) start )
{
}
public:
uni_iter() // Needed only to build python wrapper, not used outside the wrapper
{
it = NULL;
@ -276,11 +260,21 @@ public:
bool operator<=( const uni_iter& other ) const { return it <= other.it; }
bool operator> ( const uni_iter& other ) const { return it > other.it; }
bool operator>=( const uni_iter& other ) const { return it >= other.it; }
private:
friend class UTF8;
const unsigned char* it;
// private constructor
uni_iter( const char* start ) :
it( (const unsigned char*) start )
{
}
};
/**
* Function ubegin
* returns a @a uni_iter initialized to the start of "this" UTF8 byte sequence.
* Returns a @a uni_iter initialized to the start of "this" UTF8 byte sequence.
*/
uni_iter ubegin() const
{
@ -288,8 +282,7 @@ public:
}
/**
* Function uend
* returns a @a uni_iter initialized to the end of "this" UTF8 byte sequence.
* Return a @a uni_iter initialized to the end of "this" UTF8 byte sequence.
*/
uni_iter uend() const
{
@ -297,13 +290,12 @@ public:
}
/**
* Function uni_forward
* advances over a single UTF8 encoded multibyte character, capturing the
* unicode character as it goes, and returning the number of bytes consumed.
* Advance over a single UTF8 encoded multibyte character, capturing the Unicode character
* as it goes, and returning the number of bytes consumed.
*
* @param aSequence is the UTF8 byte sequence, must be aligned on start of character.
* @param aResult is where to put the unicode character, and may be NULL if no interest.
* @return int - the count of bytes consumed.
* @return the count of bytes consumed.
*/
static int uni_forward( const unsigned char* aSequence, unsigned* aResult = NULL );
#endif // SWIG

View File

@ -27,7 +27,7 @@
#include <wx/filename.h>
/**
* WX_FILENAME - A wrapper around a wxFileName which is much more performant with a subset of the API.
* A wrapper around a wxFileName which is much more performant with a subset of the API.
*
* A wrapper around a wxFileName which avoids expensive calls to wxFileName::SplitPath()
* and string concatenations by caching the path and filename locally and only resolving
@ -57,4 +57,4 @@ private:
wxString m_fullName;
};
#endif // WX_FILENAME_H
#endif // WX_FILENAME_H

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 1992-2010 KiCAd Developers, see change_log.txt for contributors.
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -36,26 +36,25 @@
/**
* XNODE
* holds an XML or S-expression element. It is used for eXporting
* a document tree in EITHER XML or S-expression.
* Hold an XML or S-expression element.
*
* It is used for exporting a document tree in either XML or S-expression.
*/
class XNODE : public wxXmlNode
{
public:
//-----<overloads>---------------------------------------------------------
XNODE() :
wxXmlNode()
{
}
XNODE( wxXmlNodeType aType, const wxString& aName, const wxString& aContent = wxEmptyString ) :
wxXmlNode( NULL, aType, aName, aContent )
wxXmlNode( nullptr, aType, aName, aContent )
{
}
XNODE( XNODE* aParent, wxXmlNodeType aType, const wxString& aName,
const wxString& aContent = wxEmptyString, wxXmlAttribute* aProperties = NULL ) :
const wxString& aContent = wxEmptyString, wxXmlAttribute* aProperties = nullptr ) :
wxXmlNode( aParent, aType, aName, aContent, aProperties )
{
}
@ -74,23 +73,23 @@ public:
{
return (XNODE* )wxXmlNode::GetParent();
}
//-----</overloads>--------------------------------------------------------
/**
* Function Format
* writes this object as UTF8 out to an OUTPUTFORMATTER as an S-expression.
* Write this object as #UTF8 out to an #OUTPUTFORMATTER as an S-expression.
*
* @param out The formatter to write to.
* @param nestLevel A multiple of the number of spaces to preceed the output with.
* @param nestLevel A multiple of the number of spaces to precede the output with.
* @throw IO_ERROR if a system error writing the output, such as a full disk.
*/
virtual void Format( OUTPUTFORMATTER* out, int nestLevel );
/**
* Function FormatContents
* writes the contents of object as UTF8 out to an OUTPUTFORMATTER as an S-expression.
* Write the contents of object as #UTF8 out to an #OUTPUTFORMATTER as an S-expression.
*
* This is the same as Format() except that the outer wrapper is not included.
*
* @param out The formatter to write to.
* @param nestLevel A multiple of the number of spaces to preceed the output with.
* @param nestLevel A multiple of the number of spaces to precede the output with.
* @throw IO_ERROR if a system error writing the output, such as a full disk.
*/
virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel );