From 5a6f259f2c9795293998383601f121b9b52816bc Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Mon, 3 Feb 2014 13:05:27 +0100 Subject: [PATCH 01/52] Fixed tracks of 0 width causing division by 0 error. --- pcbnew/class_track.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pcbnew/class_track.cpp b/pcbnew/class_track.cpp index 21cca65517..79863c19f2 100644 --- a/pcbnew/class_track.cpp +++ b/pcbnew/class_track.cpp @@ -763,9 +763,9 @@ void TRACK::ViewGetLayers( int aLayers[], int& aCount ) const unsigned int TRACK::ViewGetLOD( int aLayer ) const { // Netnames will be shown only if zoom is appropriate - if( aLayer == GetNetnameLayer( GetLayer() ) ) + if( aLayer == ITEM_GAL_LAYER( TRACK_NETNAMES_VISIBLE ) ) { - return ( 20000000 / m_Width ); + return ( 20000000 / ( m_Width + 1 ) ); } // Other layers are shown without any conditions From eb053cac2bcec8765ae9f7e3ee719ea5847df0a0 Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Mon, 3 Feb 2014 13:08:01 +0100 Subject: [PATCH 02/52] Changed BOARD_DESIGN_SETTINGS::m_VisibleElements from int to long, to assure at least 32 bits length (without depending on the platfrom int size). --- include/class_board_design_settings.h | 18 ++++++++++-------- pcbnew/kicad_plugin.cpp | 2 +- pcbnew/legacy_plugin.cpp | 4 ++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/include/class_board_design_settings.h b/include/class_board_design_settings.h index 9b516308b2..579d7dad38 100644 --- a/include/class_board_design_settings.h +++ b/include/class_board_design_settings.h @@ -100,7 +100,7 @@ public: * returns a bit-mask of all the element categories that are visible * @return int - the visible element categories in bit-mapped form. */ - int GetVisibleElements() const + long GetVisibleElements() const { return m_VisibleElements; } @@ -110,7 +110,7 @@ public: * changes the bit-mask of visible element categories * @param aMask = The new bit-mask of visible element categories */ - void SetVisibleElements( int aMask ) + void SetVisibleElements( long aMask ) { m_VisibleElements = aMask; } @@ -119,23 +119,25 @@ public: * Function IsElementVisible * tests whether a given element category is visible. Keep this as an * inline function. - * @param aPCB_VISIBLE is from the enum by the same name + * @param aElementCategory is from the enum by the same name * @return bool - true if the element is visible. * @see enum PCB_VISIBLE */ - bool IsElementVisible( int aPCB_VISIBLE ) const + bool IsElementVisible( int aElementCategory ) const { - return bool( m_VisibleElements & (1 << aPCB_VISIBLE) ); + assert( aElementCategory >= 0 && aElementCategory < END_PCB_VISIBLE_LIST ); + + return ( m_VisibleElements & ( 1 << aElementCategory ) ); } /** * Function SetElementVisibility * changes the visibility of an element category - * @param aPCB_VISIBLE is from the enum by the same name + * @param aElementCategory is from the enum by the same name * @param aNewState = The new visibility state of the element category * @see enum PCB_VISIBLE */ - void SetElementVisibility( int aPCB_VISIBLE, bool aNewState ); + void SetElementVisibility( int aElementCategory, bool aNewState ); /** * Function GetEnabledLayers @@ -196,7 +198,7 @@ private: int m_CopperLayerCount; ///< Number of copper layers for this design LAYER_MSK m_EnabledLayers; ///< Bit-mask for layer enabling LAYER_MSK m_VisibleLayers; ///< Bit-mask for layer visibility - int m_VisibleElements; ///< Bit-mask for element category visibility + long m_VisibleElements; ///< Bit-mask for element category visibility int m_boardThickness; ///< Board thickness for 3D viewer }; diff --git a/pcbnew/kicad_plugin.cpp b/pcbnew/kicad_plugin.cpp index 99211a7e4d..2121c98e61 100644 --- a/pcbnew/kicad_plugin.cpp +++ b/pcbnew/kicad_plugin.cpp @@ -647,7 +647,7 @@ void PCB_IO::format( BOARD* aBoard, int aNestLevel ) const FMTIU( aBoard->GetGridOrigin().x ).c_str(), FMTIU( aBoard->GetGridOrigin().y ).c_str() ); - m_out->Print( aNestLevel+1, "(visible_elements %X)\n", + m_out->Print( aNestLevel+1, "(visible_elements %lX)\n", aBoard->GetDesignSettings().GetVisibleElements() ); aBoard->GetPlotOptions().Format( m_out, aNestLevel+1 ); diff --git a/pcbnew/legacy_plugin.cpp b/pcbnew/legacy_plugin.cpp index a1fd78a9b0..1c1a920bf8 100644 --- a/pcbnew/legacy_plugin.cpp +++ b/pcbnew/legacy_plugin.cpp @@ -870,7 +870,7 @@ void LEGACY_PLUGIN::loadSETUP() else if( TESTLINE( "VisibleElements" ) ) { - int visibleElements = hexParse( line + SZ( "VisibleElements" ) ); + long visibleElements = hexParse( line + SZ( "VisibleElements" ) ); bds.SetVisibleElements( visibleElements ); } @@ -3071,7 +3071,7 @@ void LEGACY_PLUGIN::saveSETUP( const BOARD* aBoard ) const fprintf( m_fp, "GridOrigin %s\n", fmtBIUPoint( aBoard->GetGridOrigin() ).c_str() ); fprintf( m_fp, "AuxiliaryAxisOrg %s\n", fmtBIUPoint( aBoard->GetAuxOrigin() ).c_str() ); - fprintf( m_fp, "VisibleElements %X\n", bds.GetVisibleElements() ); + fprintf( m_fp, "VisibleElements %lX\n", bds.GetVisibleElements() ); { STRING_FORMATTER sf; From 90e8aba660faee2b18089252fe9cca10e495984a Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Mon, 3 Feb 2014 13:09:10 +0100 Subject: [PATCH 03/52] Changed ROUTER_PREVIEW_ITEM layer. --- pcbnew/router/router_preview_item.cpp | 1 + pcbnew/router/router_preview_item.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pcbnew/router/router_preview_item.cpp b/pcbnew/router/router_preview_item.cpp index b29caf7322..8ce1db4721 100644 --- a/pcbnew/router/router_preview_item.cpp +++ b/pcbnew/router/router_preview_item.cpp @@ -36,6 +36,7 @@ ROUTER_PREVIEW_ITEM::ROUTER_PREVIEW_ITEM( const PNS_ITEM* aItem, VIEW_GROUP* aPa { m_Flags = 0; m_parent = aParent; + m_layer = DRAW_N; if( aItem ) Update( aItem ); diff --git a/pcbnew/router/router_preview_item.h b/pcbnew/router/router_preview_item.h index f891f3bf66..058c47f816 100644 --- a/pcbnew/router/router_preview_item.h +++ b/pcbnew/router/router_preview_item.h @@ -73,7 +73,7 @@ public: virtual void ViewGetLayers( int aLayers[], int& aCount ) const { - aLayers[0] = GP_OVERLAY; + aLayers[0] = m_layer; aCount = 1; } From f35e6412bdc1b29bb7ff8d6fcf02322a74bc5254 Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Mon, 3 Feb 2014 13:26:25 +0100 Subject: [PATCH 04/52] Minor changes. --- pcbnew/pcb_painter.cpp | 11 ++++++----- pcbnew/pcb_painter.h | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/pcbnew/pcb_painter.cpp b/pcbnew/pcb_painter.cpp index 105362f83c..41faebdf5c 100644 --- a/pcbnew/pcb_painter.cpp +++ b/pcbnew/pcb_painter.cpp @@ -261,13 +261,14 @@ void PCB_PAINTER::draw( const TRACK* aTrack, int aLayer ) VECTOR2D start( aTrack->GetStart() ); VECTOR2D end( aTrack->GetEnd() ); int width = aTrack->GetWidth(); - int netNumber = aTrack->GetNet(); COLOR4D color; if( m_pcbSettings->m_netNamesOnTracks && IsNetnameLayer( aLayer ) ) { + int netCode = aTrack->GetNet(); + // If there is a net name - display it on the track - if( netNumber > 0 ) + if( netCode > 0 ) { VECTOR2D line = ( end - start ); double length = line.EuclideanNorm(); @@ -276,11 +277,11 @@ void PCB_PAINTER::draw( const TRACK* aTrack, int aLayer ) if( length < 10 * width ) return; - NETINFO_ITEM* net = ( (BOARD*) aTrack->GetParent() )->FindNet( netNumber ); + NETINFO_ITEM* net = ( (BOARD*) aTrack->GetParent() )->FindNet( netCode ); if( !net ) return; - std::wstring netName = std::wstring( net->GetShortNetname().wc_str() ); + wxString netName = net->GetShortNetname(); VECTOR2D textPosition = start + line / 2.0; // center of the track double textOrientation = -atan( line.y / line.x ); double textSize = std::min( static_cast( width ), length / netName.length() ); @@ -304,7 +305,7 @@ void PCB_PAINTER::draw( const TRACK* aTrack, int aLayer ) m_gal->StrokeText( netName, textPosition, textOrientation ); } } - else if( IsCopperLayer( aLayer )) + else if( IsCopperLayer( aLayer ) ) { // Draw a regular track color = m_pcbSettings->GetColor( aTrack, aLayer ); diff --git a/pcbnew/pcb_painter.h b/pcbnew/pcb_painter.h index e5b60a82ca..cf9f242b8c 100644 --- a/pcbnew/pcb_painter.h +++ b/pcbnew/pcb_painter.h @@ -114,6 +114,7 @@ protected: ///> Colors for all layers (darkened) COLOR4D m_layerColorsDark[TOTAL_LAYER_COUNT]; + ///> Flag determining if items on a given layer should be drawn as an outline or a full item bool m_sketchModeSelect[TOTAL_LAYER_COUNT]; ///> Flag determining if pad numbers should be visible From 82838e6770552eaab31157ed41a278710bbddccb Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Mon, 3 Feb 2014 14:14:53 +0100 Subject: [PATCH 05/52] Moved netnames (GAL specific layers) to a separate enum, to avoid saving/reading their settings from files. Added a check for the number of PCB_VISIBLE elements. Worksheet & general purpose overlay layers are visible by default. --- include/layers_id_colors_and_visibility.h | 62 +++++++++++++++-------- pcbnew/basepcbframe.cpp | 44 ++++++++-------- pcbnew/class_pad.cpp | 6 +-- pcbnew/class_track.cpp | 2 +- pcbnew/pcb_painter.cpp | 16 +++--- pcbnew/pcbframe.cpp | 23 +++++---- 6 files changed, 88 insertions(+), 65 deletions(-) diff --git a/include/layers_id_colors_and_visibility.h b/include/layers_id_colors_and_visibility.h index d421e6cf4e..7dc0660457 100644 --- a/include/layers_id_colors_and_visibility.h +++ b/include/layers_id_colors_and_visibility.h @@ -239,8 +239,33 @@ enum PCB_VISIBLE PADS_HOLES_VISIBLE, VIAS_HOLES_VISIBLE, - // Netname layers - LAYER_1_NETNAMES_VISIBLE, // Bottom layer + WORKSHEET, ///< worksheet frame + GP_OVERLAY, ///< general purpose overlay + + END_PCB_VISIBLE_LIST // sentinel +}; + +#ifndef NDEBUG +struct static_check { + static_check() + { + // Long (the type used for saving visibility settings) is only 32 bits guaranteed, + // be sure that we do not cross the limit + assert( END_PCB_VISIBLE_LIST <= 32 ); + }; +}; +static static_check check; +#endif + +/** + * Enum NETNAMES_VISIBLE + * is a set of layers specific for displaying net names. + * Their visiblity is not supposed to be saved in a board file, + * they are only to be used by the GAL. + */ +enum NETNAMES_VISIBLE +{ + LAYER_1_NETNAMES_VISIBLE, // bottom layer LAYER_2_NETNAMES_VISIBLE, LAYER_3_NETNAMES_VISIBLE, LAYER_4_NETNAMES_VISIBLE, @@ -255,25 +280,22 @@ enum PCB_VISIBLE LAYER_13_NETNAMES_VISIBLE, LAYER_14_NETNAMES_VISIBLE, LAYER_15_NETNAMES_VISIBLE, - LAYER_16_NETNAMES_VISIBLE, // Top layer + LAYER_16_NETNAMES_VISIBLE, // top layer + PAD_FR_NETNAMES_VISIBLE, PAD_BK_NETNAMES_VISIBLE, PADS_NETNAMES_VISIBLE, - WORKSHEET, - GP_OVERLAY, // General purpose overlay - - END_PCB_VISIBLE_LIST // sentinel + END_NETNAMES_VISIBLE_LIST // sentinel }; -#define FIRST_NETNAME_LAYER ITEM_GAL_LAYER( LAYER_1_NETNAMES_VISIBLE ) -#define LAST_NETNAME_LAYER ITEM_GAL_LAYER( PADS_NETNAMES_VISIBLE ) - /// macro for obtaining layer number for specific item (eg. pad or text) -#define ITEM_GAL_LAYER(layer) (NB_LAYERS + layer) +#define ITEM_GAL_LAYER(layer) (NB_LAYERS + layer) + +#define NETNAMES_GAL_LAYER(layer) (NB_LAYERS + END_PCB_VISIBLE_LIST + layer ) /// number of *all* layers including PCB and item layers -#define TOTAL_LAYER_COUNT 128 //(NB_LAYERS + END_PCB_VISIBLE_LIST) +#define TOTAL_LAYER_COUNT (NB_LAYERS + END_PCB_VISIBLE_LIST + END_NETNAMES_VISIBLE_LIST) /** * Function IsValidLayer @@ -390,30 +412,28 @@ wxString LayerMaskDescribe( const BOARD *aBoard, LAYER_MSK aMask ); inline LAYER_NUM GetNetnameLayer( LAYER_NUM aLayer ) { if( IsCopperLayer( aLayer ) ) - { - // Compute the offset in description layers - return FIRST_NETNAME_LAYER + ( aLayer - FIRST_COPPER_LAYER ); - } + return NETNAMES_GAL_LAYER( aLayer ); else if( aLayer == ITEM_GAL_LAYER( PADS_VISIBLE ) ) - return ITEM_GAL_LAYER( PADS_NETNAMES_VISIBLE ); + return NETNAMES_GAL_LAYER( PADS_NETNAMES_VISIBLE ); else if( aLayer == ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ) - return ITEM_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ); + return NETNAMES_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ); else if( aLayer == ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ) - return ITEM_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ); + return NETNAMES_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ); // Fallback return COMMENT_N; } /** - * Function IsCopperLayer + * Function IsNetnameLayer * tests whether a layer is a netname layer * @param aLayer = Layer to test * @return true if aLayer is a valid netname layer */ inline bool IsNetnameLayer( LAYER_NUM aLayer ) { - return aLayer >= FIRST_NETNAME_LAYER && aLayer <= LAST_NETNAME_LAYER; + return aLayer >= NETNAMES_GAL_LAYER( LAYER_1_NETNAMES_VISIBLE ) && + aLayer < NETNAMES_GAL_LAYER( END_NETNAMES_VISIBLE_LIST ); } #endif // _LAYERS_ID_AND_VISIBILITY_H_ diff --git a/pcbnew/basepcbframe.cpp b/pcbnew/basepcbframe.cpp index 858aa40c0e..dc26c04ee5 100644 --- a/pcbnew/basepcbframe.cpp +++ b/pcbnew/basepcbframe.cpp @@ -75,7 +75,7 @@ static const wxString FastGrid2Entry( wxT( "FastGrid2" ) ); const LAYER_NUM PCB_BASE_FRAME::GAL_LAYER_ORDER[] = { ITEM_GAL_LAYER( GP_OVERLAY ), - ITEM_GAL_LAYER( PADS_NETNAMES_VISIBLE ), + NETNAMES_GAL_LAYER( PADS_NETNAMES_VISIBLE ), DRAW_N, COMMENT_N, ECO1_N, ECO2_N, EDGE_N, UNUSED_LAYER_29, UNUSED_LAYER_30, UNUSED_LAYER_31, ITEM_GAL_LAYER( MOD_TEXT_FR_VISIBLE ), @@ -85,25 +85,25 @@ const LAYER_NUM PCB_BASE_FRAME::GAL_LAYER_ORDER[] = ITEM_GAL_LAYER( VIAS_HOLES_VISIBLE ), ITEM_GAL_LAYER( PADS_HOLES_VISIBLE ), ITEM_GAL_LAYER( VIAS_VISIBLE ), ITEM_GAL_LAYER( PADS_VISIBLE ), - ITEM_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PAD_FR_VISIBLE ), SOLDERMASK_N_FRONT, - ITEM_GAL_LAYER( LAYER_16_NETNAMES_VISIBLE ), LAYER_N_FRONT, + NETNAMES_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PAD_FR_VISIBLE ), SOLDERMASK_N_FRONT, + NETNAMES_GAL_LAYER( LAYER_16_NETNAMES_VISIBLE ), LAYER_N_FRONT, SILKSCREEN_N_FRONT, SOLDERPASTE_N_FRONT, ADHESIVE_N_FRONT, - ITEM_GAL_LAYER( LAYER_15_NETNAMES_VISIBLE ), LAYER_N_15, - ITEM_GAL_LAYER( LAYER_14_NETNAMES_VISIBLE ), LAYER_N_14, - ITEM_GAL_LAYER( LAYER_13_NETNAMES_VISIBLE ), LAYER_N_13, - ITEM_GAL_LAYER( LAYER_12_NETNAMES_VISIBLE ), LAYER_N_12, - ITEM_GAL_LAYER( LAYER_11_NETNAMES_VISIBLE ), LAYER_N_11, - ITEM_GAL_LAYER( LAYER_10_NETNAMES_VISIBLE ), LAYER_N_10, - ITEM_GAL_LAYER( LAYER_9_NETNAMES_VISIBLE ), LAYER_N_9, - ITEM_GAL_LAYER( LAYER_8_NETNAMES_VISIBLE ), LAYER_N_8, - ITEM_GAL_LAYER( LAYER_7_NETNAMES_VISIBLE ), LAYER_N_7, - ITEM_GAL_LAYER( LAYER_6_NETNAMES_VISIBLE ), LAYER_N_6, - ITEM_GAL_LAYER( LAYER_5_NETNAMES_VISIBLE ), LAYER_N_5, - ITEM_GAL_LAYER( LAYER_4_NETNAMES_VISIBLE ), LAYER_N_4, - ITEM_GAL_LAYER( LAYER_3_NETNAMES_VISIBLE ), LAYER_N_3, - ITEM_GAL_LAYER( LAYER_2_NETNAMES_VISIBLE ), LAYER_N_2, - ITEM_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PAD_BK_VISIBLE ), SOLDERMASK_N_BACK, - ITEM_GAL_LAYER( LAYER_1_NETNAMES_VISIBLE ), LAYER_N_BACK, + NETNAMES_GAL_LAYER( LAYER_15_NETNAMES_VISIBLE ), LAYER_N_15, + NETNAMES_GAL_LAYER( LAYER_14_NETNAMES_VISIBLE ), LAYER_N_14, + NETNAMES_GAL_LAYER( LAYER_13_NETNAMES_VISIBLE ), LAYER_N_13, + NETNAMES_GAL_LAYER( LAYER_12_NETNAMES_VISIBLE ), LAYER_N_12, + NETNAMES_GAL_LAYER( LAYER_11_NETNAMES_VISIBLE ), LAYER_N_11, + NETNAMES_GAL_LAYER( LAYER_10_NETNAMES_VISIBLE ), LAYER_N_10, + NETNAMES_GAL_LAYER( LAYER_9_NETNAMES_VISIBLE ), LAYER_N_9, + NETNAMES_GAL_LAYER( LAYER_8_NETNAMES_VISIBLE ), LAYER_N_8, + NETNAMES_GAL_LAYER( LAYER_7_NETNAMES_VISIBLE ), LAYER_N_7, + NETNAMES_GAL_LAYER( LAYER_6_NETNAMES_VISIBLE ), LAYER_N_6, + NETNAMES_GAL_LAYER( LAYER_5_NETNAMES_VISIBLE ), LAYER_N_5, + NETNAMES_GAL_LAYER( LAYER_4_NETNAMES_VISIBLE ), LAYER_N_4, + NETNAMES_GAL_LAYER( LAYER_3_NETNAMES_VISIBLE ), LAYER_N_3, + NETNAMES_GAL_LAYER( LAYER_2_NETNAMES_VISIBLE ), LAYER_N_2, + NETNAMES_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PAD_BK_VISIBLE ), SOLDERMASK_N_BACK, + NETNAMES_GAL_LAYER( LAYER_1_NETNAMES_VISIBLE ), LAYER_N_BACK, ADHESIVE_N_BACK, SOLDERPASTE_N_BACK, SILKSCREEN_N_BACK, ITEM_GAL_LAYER( MOD_TEXT_BK_VISIBLE ), @@ -793,14 +793,14 @@ void PCB_BASE_FRAME::LoadSettings() // Some more required layers settings view->SetRequired( ITEM_GAL_LAYER( VIAS_HOLES_VISIBLE ), ITEM_GAL_LAYER( VIAS_VISIBLE ) ); view->SetRequired( ITEM_GAL_LAYER( PADS_HOLES_VISIBLE ), ITEM_GAL_LAYER( PADS_VISIBLE ) ); - view->SetRequired( ITEM_GAL_LAYER( PADS_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PADS_VISIBLE ) ); + view->SetRequired( NETNAMES_GAL_LAYER( PADS_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PADS_VISIBLE ) ); - view->SetRequired( ITEM_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ); + view->SetRequired( NETNAMES_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ); view->SetRequired( ADHESIVE_N_FRONT, ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ); view->SetRequired( SOLDERPASTE_N_FRONT, ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ); view->SetRequired( SOLDERMASK_N_FRONT, ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ); - view->SetRequired( ITEM_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ); + view->SetRequired( NETNAMES_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ); view->SetRequired( ADHESIVE_N_BACK, ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ); view->SetRequired( SOLDERPASTE_N_BACK, ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ); view->SetRequired( SOLDERMASK_N_BACK, ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ); diff --git a/pcbnew/class_pad.cpp b/pcbnew/class_pad.cpp index 5a48ac461a..57d605d42f 100644 --- a/pcbnew/class_pad.cpp +++ b/pcbnew/class_pad.cpp @@ -841,7 +841,7 @@ void D_PAD::ViewGetLayers( int aLayers[], int& aCount ) const { // Multi layer pad aLayers[aCount++] = ITEM_GAL_LAYER( PADS_VISIBLE ); - aLayers[aCount++] = ITEM_GAL_LAYER( PADS_NETNAMES_VISIBLE ); + aLayers[aCount++] = NETNAMES_GAL_LAYER( PADS_NETNAMES_VISIBLE ); aLayers[aCount++] = SOLDERMASK_N_FRONT; aLayers[aCount++] = SOLDERMASK_N_BACK; aLayers[aCount++] = SOLDERPASTE_N_FRONT; @@ -850,14 +850,14 @@ void D_PAD::ViewGetLayers( int aLayers[], int& aCount ) const else if( IsOnLayer( LAYER_N_FRONT ) ) { aLayers[aCount++] = ITEM_GAL_LAYER( PAD_FR_VISIBLE ); - aLayers[aCount++] = ITEM_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ); + aLayers[aCount++] = NETNAMES_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ); aLayers[aCount++] = SOLDERMASK_N_FRONT; aLayers[aCount++] = SOLDERPASTE_N_FRONT; } else if( IsOnLayer( LAYER_N_BACK ) ) { aLayers[aCount++] = ITEM_GAL_LAYER( PAD_BK_VISIBLE ); - aLayers[aCount++] = ITEM_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ); + aLayers[aCount++] = NETNAMES_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ); aLayers[aCount++] = SOLDERMASK_N_BACK; aLayers[aCount++] = SOLDERPASTE_N_BACK; } diff --git a/pcbnew/class_track.cpp b/pcbnew/class_track.cpp index 79863c19f2..ee3e198bff 100644 --- a/pcbnew/class_track.cpp +++ b/pcbnew/class_track.cpp @@ -763,7 +763,7 @@ void TRACK::ViewGetLayers( int aLayers[], int& aCount ) const unsigned int TRACK::ViewGetLOD( int aLayer ) const { // Netnames will be shown only if zoom is appropriate - if( aLayer == ITEM_GAL_LAYER( TRACK_NETNAMES_VISIBLE ) ) + if( IsNetnameLayer( aLayer ) ) { return ( 20000000 / ( m_Width + 1 ) ); } diff --git a/pcbnew/pcb_painter.cpp b/pcbnew/pcb_painter.cpp index 41faebdf5c..2e0bec81bf 100644 --- a/pcbnew/pcb_painter.cpp +++ b/pcbnew/pcb_painter.cpp @@ -68,14 +68,14 @@ void PCB_RENDER_SETTINGS::ImportLegacyColors( COLORS_DESIGN_SETTINGS* aSettings } // Default colors for specific layers - m_layerColors[ITEM_GAL_LAYER( VIAS_HOLES_VISIBLE )] = COLOR4D( 0.5, 0.4, 0.0, 1.0 ); - m_layerColors[ITEM_GAL_LAYER( PADS_HOLES_VISIBLE )] = COLOR4D( 0.0, 0.5, 0.5, 1.0 ); - m_layerColors[ITEM_GAL_LAYER( VIAS_VISIBLE )] = COLOR4D( 0.7, 0.7, 0.7, 1.0 ); - m_layerColors[ITEM_GAL_LAYER( PADS_VISIBLE )] = COLOR4D( 0.7, 0.7, 0.7, 1.0 ); - m_layerColors[ITEM_GAL_LAYER( PADS_NETNAMES_VISIBLE )] = COLOR4D( 0.8, 0.8, 0.8, 0.7 ); - m_layerColors[ITEM_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE )] = COLOR4D( 0.8, 0.8, 0.8, 0.7 ); - m_layerColors[ITEM_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE )] = COLOR4D( 0.8, 0.8, 0.8, 0.7 ); - m_layerColors[ITEM_GAL_LAYER( WORKSHEET )] = COLOR4D( 0.5, 0.0, 0.0, 1.0 ); + m_layerColors[ITEM_GAL_LAYER( VIAS_HOLES_VISIBLE )] = COLOR4D( 0.5, 0.4, 0.0, 1.0 ); + m_layerColors[ITEM_GAL_LAYER( PADS_HOLES_VISIBLE )] = COLOR4D( 0.0, 0.5, 0.5, 1.0 ); + m_layerColors[ITEM_GAL_LAYER( VIAS_VISIBLE )] = COLOR4D( 0.7, 0.7, 0.7, 1.0 ); + m_layerColors[ITEM_GAL_LAYER( PADS_VISIBLE )] = COLOR4D( 0.7, 0.7, 0.7, 1.0 ); + m_layerColors[NETNAMES_GAL_LAYER( PADS_NETNAMES_VISIBLE )] = COLOR4D( 0.8, 0.8, 0.8, 0.7 ); + m_layerColors[NETNAMES_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE )] = COLOR4D( 0.8, 0.8, 0.8, 0.7 ); + m_layerColors[NETNAMES_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE )] = COLOR4D( 0.8, 0.8, 0.8, 0.7 ); + m_layerColors[ITEM_GAL_LAYER( WORKSHEET )] = COLOR4D( 0.5, 0.0, 0.0, 1.0 ); // Netnames for copper layers for( LAYER_NUM layer = FIRST_COPPER_LAYER; layer <= LAST_COPPER_LAYER; ++layer ) diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index 62dab6ff16..5f9cc9c09a 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -916,7 +916,7 @@ void PCB_EDIT_FRAME::setHighContrastLayer( LAYER_NUM aLayer ) LAYER_NUM layers[] = { GetNetnameLayer( aLayer ), ITEM_GAL_LAYER( VIAS_VISIBLE ), ITEM_GAL_LAYER( VIAS_HOLES_VISIBLE ), ITEM_GAL_LAYER( PADS_VISIBLE ), - ITEM_GAL_LAYER( PADS_HOLES_VISIBLE ), ITEM_GAL_LAYER( PADS_NETNAMES_VISIBLE ), + ITEM_GAL_LAYER( PADS_HOLES_VISIBLE ), NETNAMES_GAL_LAYER( PADS_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( GP_OVERLAY ), ITEM_GAL_LAYER( RATSNEST_VISIBLE ) }; @@ -927,12 +927,12 @@ void PCB_EDIT_FRAME::setHighContrastLayer( LAYER_NUM aLayer ) if( aLayer == FIRST_COPPER_LAYER ) { rSettings->SetActiveLayer( ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ); - rSettings->SetActiveLayer( ITEM_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ) ); + rSettings->SetActiveLayer( NETNAMES_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ) ); } else if( aLayer == LAST_COPPER_LAYER ) { rSettings->SetActiveLayer( ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ); - rSettings->SetActiveLayer( ITEM_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ) ); + rSettings->SetActiveLayer( NETNAMES_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ) ); } } @@ -956,7 +956,7 @@ void PCB_EDIT_FRAME::setTopLayer( LAYER_NUM aLayer ) LAYER_NUM layers[] = { GetNetnameLayer( aLayer ), ITEM_GAL_LAYER( VIAS_VISIBLE ), ITEM_GAL_LAYER( VIAS_HOLES_VISIBLE ), ITEM_GAL_LAYER( PADS_VISIBLE ), - ITEM_GAL_LAYER( PADS_HOLES_VISIBLE ), ITEM_GAL_LAYER( PADS_NETNAMES_VISIBLE ), + ITEM_GAL_LAYER( PADS_HOLES_VISIBLE ), NETNAMES_GAL_LAYER( PADS_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( GP_OVERLAY ), ITEM_GAL_LAYER( RATSNEST_VISIBLE ), DRAW_N }; @@ -969,12 +969,12 @@ void PCB_EDIT_FRAME::setTopLayer( LAYER_NUM aLayer ) if( aLayer == FIRST_COPPER_LAYER ) { view->SetTopLayer( ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ); - view->SetTopLayer( ITEM_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ) ); + view->SetTopLayer( NETNAMES_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ) ); } else if( aLayer == LAST_COPPER_LAYER ) { view->SetTopLayer( ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ); - view->SetTopLayer( ITEM_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ) ); + view->SetTopLayer( NETNAMES_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ) ); } } @@ -1014,10 +1014,15 @@ void PCB_EDIT_FRAME::syncLayerVisibilities() m_Layers->SyncLayerVisibilities(); KIGFX::VIEW* view = GetGalCanvas()->GetView(); + // Load layer & elements visibility settings for( LAYER_NUM i = 0; i < NB_LAYERS; ++i ) { view->SetLayerVisible( i, m_Pcb->IsLayerVisible( i ) ); + + // Synchronize netname layers as well + if( IsCopperLayer( i ) ) + view->SetLayerVisible( GetNetnameLayer( i ), m_Pcb->IsLayerVisible( i ) ); } for( LAYER_NUM i = 0; i < END_PCB_VISIBLE_LIST; ++i ) @@ -1026,12 +1031,10 @@ void PCB_EDIT_FRAME::syncLayerVisibilities() } // Enable some layers that are GAL specific - for( LAYER_NUM i = FIRST_NETNAME_LAYER; i < LAST_NETNAME_LAYER; ++i ) - { - view->SetLayerVisible( i, true ); - } view->SetLayerVisible( ITEM_GAL_LAYER( PADS_HOLES_VISIBLE ), true ); view->SetLayerVisible( ITEM_GAL_LAYER( VIAS_HOLES_VISIBLE ), true ); + view->SetLayerVisible( ITEM_GAL_LAYER( WORKSHEET ), true ); + view->SetLayerVisible( ITEM_GAL_LAYER( GP_OVERLAY ), true ); } From 9f18e6f152c7af53420b0a1b0654c3a993b3f038 Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Thu, 6 Feb 2014 21:34:03 +0100 Subject: [PATCH 06/52] Reverted changes introduced by the revision 4655. --- include/class_board_design_settings.h | 6 +++--- pcbnew/kicad_plugin.cpp | 2 +- pcbnew/legacy_plugin.cpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/class_board_design_settings.h b/include/class_board_design_settings.h index 579d7dad38..a651e982fc 100644 --- a/include/class_board_design_settings.h +++ b/include/class_board_design_settings.h @@ -100,7 +100,7 @@ public: * returns a bit-mask of all the element categories that are visible * @return int - the visible element categories in bit-mapped form. */ - long GetVisibleElements() const + int GetVisibleElements() const { return m_VisibleElements; } @@ -110,7 +110,7 @@ public: * changes the bit-mask of visible element categories * @param aMask = The new bit-mask of visible element categories */ - void SetVisibleElements( long aMask ) + void SetVisibleElements( int aMask ) { m_VisibleElements = aMask; } @@ -198,7 +198,7 @@ private: int m_CopperLayerCount; ///< Number of copper layers for this design LAYER_MSK m_EnabledLayers; ///< Bit-mask for layer enabling LAYER_MSK m_VisibleLayers; ///< Bit-mask for layer visibility - long m_VisibleElements; ///< Bit-mask for element category visibility + int m_VisibleElements; ///< Bit-mask for element category visibility int m_boardThickness; ///< Board thickness for 3D viewer }; diff --git a/pcbnew/kicad_plugin.cpp b/pcbnew/kicad_plugin.cpp index 2121c98e61..99211a7e4d 100644 --- a/pcbnew/kicad_plugin.cpp +++ b/pcbnew/kicad_plugin.cpp @@ -647,7 +647,7 @@ void PCB_IO::format( BOARD* aBoard, int aNestLevel ) const FMTIU( aBoard->GetGridOrigin().x ).c_str(), FMTIU( aBoard->GetGridOrigin().y ).c_str() ); - m_out->Print( aNestLevel+1, "(visible_elements %lX)\n", + m_out->Print( aNestLevel+1, "(visible_elements %X)\n", aBoard->GetDesignSettings().GetVisibleElements() ); aBoard->GetPlotOptions().Format( m_out, aNestLevel+1 ); diff --git a/pcbnew/legacy_plugin.cpp b/pcbnew/legacy_plugin.cpp index 1c1a920bf8..a1fd78a9b0 100644 --- a/pcbnew/legacy_plugin.cpp +++ b/pcbnew/legacy_plugin.cpp @@ -870,7 +870,7 @@ void LEGACY_PLUGIN::loadSETUP() else if( TESTLINE( "VisibleElements" ) ) { - long visibleElements = hexParse( line + SZ( "VisibleElements" ) ); + int visibleElements = hexParse( line + SZ( "VisibleElements" ) ); bds.SetVisibleElements( visibleElements ); } @@ -3071,7 +3071,7 @@ void LEGACY_PLUGIN::saveSETUP( const BOARD* aBoard ) const fprintf( m_fp, "GridOrigin %s\n", fmtBIUPoint( aBoard->GetGridOrigin() ).c_str() ); fprintf( m_fp, "AuxiliaryAxisOrg %s\n", fmtBIUPoint( aBoard->GetAuxOrigin() ).c_str() ); - fprintf( m_fp, "VisibleElements %lX\n", bds.GetVisibleElements() ); + fprintf( m_fp, "VisibleElements %X\n", bds.GetVisibleElements() ); { STRING_FORMATTER sf; From 56c237410bb154096d79d9f4aadd6fff1700143d Mon Sep 17 00:00:00 2001 From: Cirilo Bbernardo Date: Fri, 7 Feb 2014 17:01:46 +0100 Subject: [PATCH 07/52] IDF export: fix incorrect rotation of flipped items. --- pcbnew/exporters/export_idf.cpp | 4 +++- pcbnew/exporters/idf.cpp | 32 +++++++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/pcbnew/exporters/export_idf.cpp b/pcbnew/exporters/export_idf.cpp index 6becbe26cf..3d363f5caa 100644 --- a/pcbnew/exporters/export_idf.cpp +++ b/pcbnew/exporters/export_idf.cpp @@ -334,7 +334,7 @@ static void idf_export_module( BOARD* aPcb, MODULE* aModule, refdes = aIDFBoard.GetRefDes(); } - double rotz = modfile->m_MatRotation.z + aModule->GetOrientation()/10.0; + double rotz = aModule->GetOrientation()/10.0; double locx = modfile->m_MatPosition.x; double locy = modfile->m_MatPosition.y; double locz = modfile->m_MatPosition.z; @@ -343,6 +343,7 @@ static void idf_export_module( BOARD* aPcb, MODULE* aModule, if( top ) { + rotz += modfile->m_MatRotation.z; locy = -locy; RotatePoint( &locx, &locy, aModule->GetOrientation() ); locy = -locy; @@ -352,6 +353,7 @@ static void idf_export_module( BOARD* aPcb, MODULE* aModule, RotatePoint( &locx, &locy, aModule->GetOrientation() ); locy = -locy; + rotz -= modfile->m_MatRotation.z; rotz = 180.0 - rotz; if( rotz >= 360.0 ) diff --git a/pcbnew/exporters/idf.cpp b/pcbnew/exporters/idf.cpp index 03a29692bf..21e4af1c9d 100644 --- a/pcbnew/exporters/idf.cpp +++ b/pcbnew/exporters/idf.cpp @@ -1055,13 +1055,35 @@ bool IDF_COMP::substituteComponent( FILE* aLibFile ) if( parent->RegisterOutline( "NOGEOM_NOPART" ) ) return true; + // Create a star shape 5mm high with points on 5 and 2.5 mm circles fprintf( aLibFile, ".ELECTRICAL\n" ); fprintf( aLibFile, "\"NOGEOM\" \"NOPART\" MM 5\n" ); - // TODO: for now we shall use a simple cylinder; a more intricate - // and readily recognized feature (a stylistic X) would be of - // much greater value. - fprintf( aLibFile, "0 0 0 0\n" ); - fprintf( aLibFile, "0 2.5 0 360\n" ); + + double a, da, x, y; + da = M_PI / 5.0; + a = da / 2.0; + + for( int i = 0; i < 10; ++i ) + { + if( i & 1 ) + { + x = 2.5 * cos( a ); + y = 2.5 * sin( a ); + } + else + { + x = 1.5 * cos( a ); + y = 1.5 * sin( a ); + } + + a += da; + fprintf( aLibFile, "0 %.3f %.3f 0\n", x, y ); + } + + a = da / 2.0; + x = 1.5 * cos( a ); + y = 1.5 * sin( a ); + fprintf( aLibFile, "0 %.3f %.3f 0\n", x, y ); fprintf( aLibFile, ".END_ELECTRICAL\n\n" ); return true; From 8ddba7a836db7dc45ce295877dd1986274a33a6c Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Fri, 7 Feb 2014 17:09:15 +0100 Subject: [PATCH 08/52] Minor fixes. --- .../notes_about_pcbnew_new_file_format.odt | Bin common/dialog_about/AboutDialog_main.cpp | 2 + common/eda_doc.cpp | 4 ++ common/edaappl.cpp | 1 + include/appl_wxstruct.h | 23 +++++++++- kicad/menubar.cpp | 43 ++++++------------ kicad/preferences.cpp | 21 ++++++--- .../tracks_width_versus_current.cpp | 15 ++++-- 8 files changed, 70 insertions(+), 39 deletions(-) rename notes_about_pcbnew_new_file_format.odt => Documentation/notes_about_pcbnew_new_file_format.odt (100%) diff --git a/notes_about_pcbnew_new_file_format.odt b/Documentation/notes_about_pcbnew_new_file_format.odt similarity index 100% rename from notes_about_pcbnew_new_file_format.odt rename to Documentation/notes_about_pcbnew_new_file_format.odt diff --git a/common/dialog_about/AboutDialog_main.cpp b/common/dialog_about/AboutDialog_main.cpp index d66561fe5d..91377a60a1 100644 --- a/common/dialog_about/AboutDialog_main.cpp +++ b/common/dialog_about/AboutDialog_main.cpp @@ -302,6 +302,8 @@ static void InitKiCadAboutNew( AboutAppInfo& info ) new Contributor( wxT( "IƱigo Zuluagaz" ), wxT( "inigo_zuluaga@yahoo.es" ), wxT( "Icons by" ), KiBitmapNew( edit_module_xpm ) ) ); info.AddArtist( new Contributor( wxT( "Fabrizio Tappero" ), wxT( "fabrizio.tappero@gmail.com" ), wxT( "New icons by" ), KiBitmapNew( edit_module_xpm ) ) ); + info.AddArtist( + new Contributor( wxT( "Konstantin Baranovskiy" ), wxT( "baranovskiykonstantin@gmail.com" ), wxT( "New icons by" ), KiBitmapNew( edit_module_xpm ) ) ); info.AddArtist( new Contributor( wxT( "Renie Marquet" ), wxT( "reniemarquet@uol.com.br" ), wxT( "3D modules by" ), KiBitmapNew( three_d_xpm ) ) ); info.AddArtist( diff --git a/common/eda_doc.cpp b/common/eda_doc.cpp index 495359cf06..0c5d756fa5 100644 --- a/common/eda_doc.cpp +++ b/common/eda_doc.cpp @@ -19,6 +19,9 @@ void EDA_APP::ReadPdfBrowserInfos() wxASSERT( m_commonSettings != NULL ); m_PdfBrowser = m_commonSettings->Read( wxT( "PdfBrowserName" ), wxEmptyString ); + int tmp; + m_commonSettings->Read( wxT( "UseSystemBrowser" ), &tmp, 0 ); + m_useSystemPdfBrowser = tmp != 0; } @@ -27,6 +30,7 @@ void EDA_APP::WritePdfBrowserInfos() wxASSERT( m_commonSettings != NULL ); m_commonSettings->Write( wxT( "PdfBrowserName" ), m_PdfBrowser ); + m_commonSettings->Write( wxT( "UseSystemBrowser" ), m_useSystemPdfBrowser ); } diff --git a/common/edaappl.cpp b/common/edaappl.cpp index a512c0dc84..d01535c76c 100644 --- a/common/edaappl.cpp +++ b/common/edaappl.cpp @@ -273,6 +273,7 @@ EDA_APP::EDA_APP() m_Locale = NULL; m_projectSettings = NULL; m_commonSettings = NULL; + ForceSystemPdfBrowser( false ); } diff --git a/include/appl_wxstruct.h b/include/appl_wxstruct.h index e58dd4f6be..a4305a4d28 100644 --- a/include/appl_wxstruct.h +++ b/include/appl_wxstruct.h @@ -97,6 +97,9 @@ protected: /// The file name of the the program selected for browsing pdf files. wxString m_PdfBrowser; + /// true to use the selected PDF browser, if exists, or false to use the default + bool m_useSystemPdfBrowser; + wxPathList m_searchPaths; wxFileHistory m_fileHistory; wxString m_HelpFileName; @@ -150,11 +153,29 @@ public: wxLocale* GetLocale() { return m_Locale; } + /** + * @return the full file name of the prefered PDF browser + * ( the file name is empty if no prefered there is no PDF browser selected + */ wxString GetPdfBrowserFileName() const { return m_PdfBrowser; } + /** + * Set the name of a prefered PDF browser, which could be an alternate browser + * to the system PDF browser. + */ void SetPdfBrowserFileName( const wxString& aFileName ) { m_PdfBrowser = aFileName; } - bool UseSystemPdfBrowser() const { return m_PdfBrowser.IsEmpty(); } + /** + * @return true if the PDF browser is the default (system) PDF browser + * and false if the PDF browser is the prefered (selected) browser + * returns false if there is no selected browser + */ + bool UseSystemPdfBrowser() const { return m_useSystemPdfBrowser || m_PdfBrowser.IsEmpty(); } + + /** + * force the use of system PDF browser, even if a preferend PDF browser is set + */ + void ForceSystemPdfBrowser( bool aFlg ) { m_useSystemPdfBrowser = aFlg; } wxFileHistory& GetFileHistory() { return m_fileHistory; } diff --git a/kicad/menubar.cpp b/kicad/menubar.cpp index 90af49c3ff..77283b6a53 100644 --- a/kicad/menubar.cpp +++ b/kicad/menubar.cpp @@ -97,7 +97,6 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar() // static to remember this menu // Create and try to get the current menubar - wxMenuItem* item; wxMenuBar* menuBar = GetMenuBar(); if( !menuBar ) @@ -219,32 +218,24 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar() wxMenu* SubMenuPdfBrowserChoice = new wxMenu; // Default - item = new wxMenuItem( SubMenuPdfBrowserChoice, - ID_SELECT_DEFAULT_PDF_BROWSER, - _( "&Default" ), - _( "Use system default PDF viewer used to browse datasheets" ), - wxITEM_CHECK ); - - SETBITMAPS( datasheet_xpm ); - - SubMenuPdfBrowserChoice->Append( item ); + AddMenuItem( SubMenuPdfBrowserChoice, ID_SELECT_DEFAULT_PDF_BROWSER, + _( "&Default" ), + _( "Use system default PDF viewer used to browse datasheets" ), + KiBitmap( datasheet_xpm ), + wxITEM_CHECK ); SubMenuPdfBrowserChoice->Check( ID_SELECT_DEFAULT_PDF_BROWSER, wxGetApp().UseSystemPdfBrowser() ); // Favourite - item = new wxMenuItem( SubMenuPdfBrowserChoice, - ID_SELECT_PREFERED_PDF_BROWSER, - _( "&Favourite" ), - _( "Use your favourite PDF viewer used to browse datasheets" ), - wxITEM_CHECK ); - - SETBITMAPS( preference_xpm ); - - SubMenuPdfBrowserChoice->Append( item ); - SubMenuPdfBrowserChoice->AppendSeparator(); + AddMenuItem( SubMenuPdfBrowserChoice, ID_SELECT_PREFERED_PDF_BROWSER, + _( "&Favourite" ), + _( "Use your favourite PDF viewer used to browse datasheets" ), + KiBitmap( preference_xpm ), + wxITEM_CHECK ); SubMenuPdfBrowserChoice->Check( ID_SELECT_PREFERED_PDF_BROWSER, !wxGetApp().UseSystemPdfBrowser() ); + SubMenuPdfBrowserChoice->AppendSeparator(); // Append PDF Viewer submenu to preferences AddMenuItem( SubMenuPdfBrowserChoice, ID_SELECT_PREFERED_PDF_BROWSER_NAME, @@ -253,8 +244,7 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar() KiBitmap( datasheet_xpm ) ); // PDF viewer submenu - AddMenuItem( preferencesMenu, - SubMenuPdfBrowserChoice, -1, + AddMenuItem( preferencesMenu, SubMenuPdfBrowserChoice, -1, _( "&PDF Viewer" ), _( "PDF viewer preferences" ), KiBitmap( datasheet_xpm ) ); @@ -270,14 +260,12 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar() AddHelpVersionInfoMenuEntry( helpMenu ); // Contents - AddMenuItem( helpMenu, - wxID_HELP, + AddMenuItem( helpMenu, wxID_HELP, _( "&Contents" ), _( "Open the KiCad handbook" ), KiBitmap( online_help_xpm ) ); - AddMenuItem( helpMenu, - wxID_INDEX, + AddMenuItem( helpMenu, wxID_INDEX, _( "&Getting Started in KiCad" ), _( "Open the \"Getting Started in KiCad\" guide for beginners" ), KiBitmap( help_xpm ) ); @@ -286,8 +274,7 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar() helpMenu->AppendSeparator(); // About - AddMenuItem( helpMenu, - wxID_ABOUT, + AddMenuItem( helpMenu, wxID_ABOUT, _( "&About KiCad" ), _( "About KiCad project manager" ), KiBitmap( info_xpm ) ); diff --git a/kicad/preferences.cpp b/kicad/preferences.cpp index b7e046c878..3842cea75b 100644 --- a/kicad/preferences.cpp +++ b/kicad/preferences.cpp @@ -49,6 +49,7 @@ void KICAD_MANAGER_FRAME::OnUpdateDefaultPdfBrowser( wxUpdateUIEvent& event ) void KICAD_MANAGER_FRAME::OnSelectDefaultPdfBrowser( wxCommandEvent& event ) { + wxGetApp().ForceSystemPdfBrowser( true ); wxGetApp().WritePdfBrowserInfos(); } @@ -61,26 +62,34 @@ void KICAD_MANAGER_FRAME::OnUpdatePreferredPdfBrowser( wxUpdateUIEvent& event ) void KICAD_MANAGER_FRAME::OnSelectPreferredPdfBrowser( wxCommandEvent& event ) { - bool select = event.GetId() == ID_SELECT_PREFERED_PDF_BROWSER_NAME; + wxGetApp().ForceSystemPdfBrowser( false ); - if( !wxGetApp().GetPdfBrowserFileName() && !select ) + bool selectName = event.GetId() == ID_SELECT_PREFERED_PDF_BROWSER_NAME; + if( wxGetApp().GetPdfBrowserFileName().IsEmpty() && !selectName ) { DisplayError( this, _( "You must choose a PDF viewer before using this option." ) ); } - wxString wildcard( wxT( "*" ) ); + if( !wxGetApp().GetPdfBrowserFileName().IsEmpty() && !selectName ) + { + wxGetApp().WritePdfBrowserInfos(); + return; + } + + wxString mask( wxT( "*" ) ); #ifdef __WINDOWS__ - wildcard += wxT( ".exe" ); + mask += wxT( ".exe" ); #endif - wildcard = _( "Executable files (" ) + wildcard + wxT( ")|" ) + wildcard; + wxString wildcard = _( "Executable files (" ) + mask + wxT( ")|" ) + mask; wxGetApp().ReadPdfBrowserInfos(); wxFileName fn = wxGetApp().GetPdfBrowserFileName(); + wxFileDialog dlg( this, _( "Select Preferred Pdf Browser" ), fn.GetPath(), - fn.GetFullName(), wildcard, + fn.GetFullPath(), wildcard, wxFD_OPEN | wxFD_FILE_MUST_EXIST ); if( dlg.ShowModal() == wxID_CANCEL ) diff --git a/pcb_calculator/tracks_width_versus_current.cpp b/pcb_calculator/tracks_width_versus_current.cpp index 331dbac0a0..3145f87524 100644 --- a/pcb_calculator/tracks_width_versus_current.cpp +++ b/pcb_calculator/tracks_width_versus_current.cpp @@ -28,6 +28,7 @@ * for more info */ +#include #include #include @@ -67,10 +68,10 @@ void PCB_CALCULATOR_FRAME::TW_WriteConfig() void PCB_CALCULATOR_FRAME::OnTWCalculateButt( wxCommandEvent& event ) { // Prepare parameters: - double current = ReturnDoubleFromString( m_TrackCurrentValue->GetValue() ); - double thickness = ReturnDoubleFromString( m_TrackThicknessValue->GetValue() ); - double deltaT_C = ReturnDoubleFromString( m_TrackDeltaTValue->GetValue() ); - double track_len = ReturnDoubleFromString( m_TrackLengthValue->GetValue() ); + double current = std::abs( ReturnDoubleFromString( m_TrackCurrentValue->GetValue() ) ); + double thickness = std::abs( ReturnDoubleFromString( m_TrackThicknessValue->GetValue() ) ); + double deltaT_C = std::abs( ReturnDoubleFromString( m_TrackDeltaTValue->GetValue() ) ); + double track_len = std::abs( ReturnDoubleFromString( m_TrackLengthValue->GetValue() ) ); double extTrackWidth; double intTrackWidth; @@ -91,13 +92,16 @@ void PCB_CALCULATOR_FRAME::OnTWCalculateButt( wxCommandEvent& event ) double scale = m_TW_ExtTrackWidth_choiceUnit->GetUnitScale(); double ext_area = thickness * extTrackWidth; msg.Printf( wxT( "%g" ), ext_area / (scale * scale) ); + m_ExtTrackAreaValue->SetValue( msg ); wxString strunit = m_TW_ExtTrackWidth_choiceUnit->GetUnitName(); msg = strunit + wxT( " x " ) + strunit; m_ExtTrackAreaUnitLabel->SetLabel( msg ); + scale = m_TW_IntTrackWidth_choiceUnit->GetUnitScale(); double int_area = thickness * intTrackWidth; msg.Printf( wxT( "%g" ), int_area / (scale * scale) ); + m_IntTrackAreaValue->SetValue( msg ); strunit = m_TW_IntTrackWidth_choiceUnit->GetUnitName(); msg = strunit + wxT( " x " ) + strunit; @@ -108,6 +112,7 @@ void PCB_CALCULATOR_FRAME::OnTWCalculateButt( wxCommandEvent& event ) double ext_res = rho / ext_area * track_len; msg.Printf( wxT( "%g" ), ext_res ); m_ExtTrackResistValue->SetValue( msg ); + double int_res = rho / int_area * track_len; msg.Printf( wxT( "%g" ), int_res ); m_IntTrackResistValue->SetValue( msg ); @@ -116,6 +121,7 @@ void PCB_CALCULATOR_FRAME::OnTWCalculateButt( wxCommandEvent& event ) double ext_drop_volt = ext_res * current; msg.Printf( wxT( "%g" ), ext_drop_volt ); m_ExtTrackVDropValue->SetValue( msg ); + double int_drop_volt = int_res * current; msg.Printf( wxT( "%g" ), int_drop_volt ); m_IntTrackVDropValue->SetValue( msg ); @@ -124,6 +130,7 @@ void PCB_CALCULATOR_FRAME::OnTWCalculateButt( wxCommandEvent& event ) double loss = ext_drop_volt * current; msg.Printf( wxT( "%g" ), loss ); m_ExtTrackLossValue->SetValue( msg ); + loss = int_drop_volt * current; msg.Printf( wxT( "%g" ), loss ); m_IntTrackLossValue->SetValue( msg ); From d97316573734228363fe9a49de68e0b847714065 Mon Sep 17 00:00:00 2001 From: Brian Sidebotham Date: Fri, 7 Feb 2014 18:17:58 +0000 Subject: [PATCH 09/52] * Fix linux location for system project templates --- kicad/prjconfig.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/kicad/prjconfig.cpp b/kicad/prjconfig.cpp index 8d19791e24..93da24b603 100644 --- a/kicad/prjconfig.cpp +++ b/kicad/prjconfig.cpp @@ -85,12 +85,23 @@ void KICAD_MANAGER_FRAME::CreateNewProject( const wxString aPrjFullFileName, if( !envStr.EndsWith( sep ) ) envStr += sep; - templatePath = envStr + wxT("template") + sep; + templatePath = envStr + wxT( "template" ) + sep; } else { - templatePath = wxPathOnly(wxStandardPaths::Get().GetExecutablePath()) + + // The standard path should be in the share directory for kicad. As + // it is normal on Windows to only have the share directory and not + // the kicad sub-directory we fall back to that if the directory + // doesn't exist + templatePath = wxPathOnly( wxStandardPaths::Get().GetExecutablePath() ) + + sep + wxT( ".." ) + sep + wxT( "share" ) + sep + wxT( "kicad" ) + + sep + wxT( "template" ) + sep; + + if( !wxDirExists( templatePath.GetFullPath() ) ) + { + templatePath = wxPathOnly( wxStandardPaths::Get().GetExecutablePath() ) + sep + wxT( ".." ) + sep + wxT( "share" ) + sep + wxT( "template" ) + sep; + } } ps->AddPage( _( "System Templates" ), templatePath ); From 09636c1a88c393f794b0703923154a4452ca0b73 Mon Sep 17 00:00:00 2001 From: Marco Serantoni Date: Fri, 7 Feb 2014 19:53:54 +0100 Subject: [PATCH 10/52] [MacOSX] Automating building for OSX with KICAD_SCRIPTING, see Documentation/compiling/mac-osx.txt --- CMakeLists.txt | 44 ++++++- CMakeModules/download_pcre.cmake | 73 +++++++++++ CMakeModules/download_swig.cmake | 77 ++++++++++++ CMakeModules/download_wxpython.cmake | 117 ++++++++++++++++++ Documentation/compiling/mac-osx.txt | 174 +++++---------------------- pcbnew/CMakeLists.txt | 35 ++++++ pcbnew/pcbnew.cpp | 17 +++ scripts/osx_fixbundle.sh | 55 ++++++++- 8 files changed, 443 insertions(+), 149 deletions(-) create mode 100644 CMakeModules/download_pcre.cmake create mode 100644 CMakeModules/download_swig.cmake create mode 100644 CMakeModules/download_wxpython.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 83f2fdfd9b..e8a47a5b13 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,9 +58,16 @@ option( KICAD_SCRIPTING_WXPYTHON ) option( KICAD_BUILD_STATIC - "Builds Kicad and all libraries static (except wx-widgets)" + "Builds Kicad and all libraries static" ) +option( KICAD_BUILD_DYNAMIC + "Builds Kicad and all libraries dynamic (required for wxPython)" + ) + + +# WARNING: KiCad developers strongly advise you to build Boost with supplied patches, +# as it is known to work with KiCad. Other versions may contain bugs that may result # WARNING: KiCad developers strongly advise you to build Boost with supplied patches, # as it is known to work with KiCad. Other versions may contain bugs that may result # in KiCad errors. @@ -334,6 +341,14 @@ add_definitions(-DWX_COMPATIBILITY) find_package( OpenGL QUIET ) check_find_package_result( OPENGL_FOUND "OpenGL" ) +add_custom_target( lib-wxpython ) + include( download_pcre ) + include( download_swig ) + include( download_wxpython ) + add_dependencies( lib-wxpython pcre ) + add_dependencies( lib-wxpython swig ) + add_dependencies( lib-wxpython libwxpython ) + if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) #set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so;.dylib;.dll") @@ -348,7 +363,6 @@ if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) if( KICAD_BUILD_DYNAMIC ) message(STATUS "KICAD_BUILD_DYNAMIC set") - # TODO - Library packaging/relocation endif() add_custom_target( lib-dependencies @@ -357,8 +371,28 @@ if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) include( download_libpng ) - if( KICAD_SCRIPTING_WXPYTHON ) - message( FATAL_ERROR "KICAD_BUILD_* and SCRIPTING Not Implemented Yet!" ) + if( KICAD_SCRIPTING OR KICAD_SCRIPTING_WXPYTHON OR KICAD_SCRIPTING_MODULES ) + set( SWIG_EXECUTABLE ${SWIG_ROOT}/bin/swig ) + set( SWIG_INCLUDE ${SWIG_ROOT}/include ) + set( PYTHON_DEST ${LIBWXPYTHON_ROOT}/wxPython/lib/python2.6/site-packages ) + + if( NOT EXISTS ${SWIG_EXECUTABLE} ) + set(KICAD_SCRIPTING CACHE OFF FORCE "Disabling KICAD_SCRIPTING") + message( STATUS "KICAD_SCRIPTING Enabled but SWIG not found, please disable and before reenabling execute: make lib-wxpython") + message( FATAL_ERROR "Missing SWIG!") + endif() + message(STATUS "SWIG_EXECUTABLE: ${SWIG_EXECUTABLE}") + + set( PYTHON_EXECUTABLE /usr/bin/python2.6 ) + + set( PYTHON_DEST ${LIBWXPYTHON_ROOT}/wxPython/lib/python2.6/site-packages ) + + set(wxWidgets_BIN_DIR ${LIBWXPYTHON_ROOT}/bin/wxrc ) + set(wxWidgets_CONFIG_EXECUTABLE ${LIBWXPYTHON_ROOT}/bin/wx-config ) + set(wxWidgets_INCLUDE_DIRS ${LIBWXPYTHON_ROOT}/include/wx-3.0 ) + set(wxWidgets_LIBRARY_DIRS ${LIBWXPYTHON_ROOT}/lib ) + + add_dependencies( lib-dependencies libwxpython ) else() include( download_wxwidgets ) add_dependencies( lib-dependencies libwx ) @@ -421,7 +455,7 @@ endif() # On Apple only wxwidgets 2.9 or higher doesn't need to find aui part of base # Seems no more needed on wx-3 -if( APPLE AND NOT (KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC) ) +if( APPLE AND ( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES OR KICAD_SCRIPTING_WXPYTHON) ) find_package( wxWidgets COMPONENTS gl adv html core net base xml QUIET ) else() find_package( wxWidgets COMPONENTS gl aui adv html core net base xml QUIET ) diff --git a/CMakeModules/download_pcre.cmake b/CMakeModules/download_pcre.cmake new file mode 100644 index 0000000000..540887a7a8 --- /dev/null +++ b/CMakeModules/download_pcre.cmake @@ -0,0 +1,73 @@ +# This program source code file is part of KICAD, a free EDA CAD application. +# +# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck +# Copyright (C) 2013 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 Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, you may find one here: +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html +# or you may search the http://www.gnu.org website for the version 2 license, +# or you may write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +# Downloads and builds PCRE + +#--------------------------------------------------------------------- + +set( PCRE_RELEASE 8.34 ) +set( PCRE_MD5 eb34b2c9c727fd64940d6fd9a00995eb ) # re-calc this on every RELEASE change + +# The boost headers [and static libs if built] go here, at the top of KiCad +# source tree in boost_root. +set( PCRE_ROOT "${PROJECT_SOURCE_DIR}/pcre_root" ) + +#-------------------------------------------------------------------- + +find_package( BZip2 REQUIRED ) + +set( PREFIX ${DOWNLOAD_DIR}/pcre ) + +if (APPLE) + if( CMAKE_OSX_ARCHITECTURES ) + set( PCRE_CFLAGS "CFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" ) + set( PCRE_CXXFLAGS "CXXFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" ) + set( PCRE_LDFLAGS "LDFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" ) + endif( CMAKE_OSX_ARCHITECTURES ) +endif(APPLE) + +# There is a Bazaar 'boost scratch repo' in /boost and after committing pristine +# download, the patch is applied. This lets you regenerate a new patch at any time +# easily, simply by editing the working tree in and doing "bzr diff" in there. + +ExternalProject_Add( pcre + PREFIX "${PREFIX}" + DOWNLOAD_DIR "${DOWNLOAD_DIR}" + URL http://sourceforge.net/projects/pcre/files/pcre/${PCRE_RELEASE}/pcre-${PCRE_RELEASE}.tar.gz + URL_MD5 ${PCRE_MD5} + STAMP_DIR "${PREFIX}" + + #SOURCE_DIR "${PREFIX}" + BUILD_IN_SOURCE 1 + + UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${PCRE_ROOT}" + + #PATCH_COMMAND "true" + CONFIGURE_COMMAND ./configure --prefix=${PCRE_ROOT} ${PCRE_CFLAGS} ${PCRE_CXXFLAGS} ${PCRE_LDFLAGS} --disable-dependency-tracking + + #BINARY_DIR "${PREFIX}" + + BUILD_COMMAND $(MAKE) + + INSTALL_DIR "${PCRE_ROOT}" + INSTALL_COMMAND $(MAKE) install + ) diff --git a/CMakeModules/download_swig.cmake b/CMakeModules/download_swig.cmake new file mode 100644 index 0000000000..7ee8a4ebc6 --- /dev/null +++ b/CMakeModules/download_swig.cmake @@ -0,0 +1,77 @@ +# This program source code file is part of KICAD, a free EDA CAD application. +# +# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck +# Copyright (C) 2013 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 Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, you may find one here: +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html +# or you may search the http://www.gnu.org website for the version 2 license, +# or you may write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +# Downloads and builds SWIG + +#--------------------------------------------------------------------- + +set( SWIG_RELEASE 2.0.11 ) +set( SWIG_MD5 291ba57c0acd218da0b0916c280dcbae ) # re-calc this on every RELEASE change + +# The boost headers [and static libs if built] go here, at the top of KiCad +# source tree in boost_root. +set( SWIG_ROOT "${PROJECT_SOURCE_DIR}/swig_root" ) + +#-------------------------------------------------------------------- + +find_package( BZip2 REQUIRED ) + +set( PREFIX ${DOWNLOAD_DIR}/swig ) + +if (APPLE) + if( CMAKE_OSX_ARCHITECTURES ) + set( SWIG_CFLAGS "CFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" ) + set( SWIG_CXXFLAGS "CXXFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" ) + set( SWIG_LDFLAGS "LDFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" ) + set( SWIG_PYTHON "--with-python=/usr/bin/python2.6" ) + endif( CMAKE_OSX_ARCHITECTURES ) +endif(APPLE) + +# = ${PREFIX}/src/glew +# There is a Bazaar 'boost scratch repo' in /boost and after committing pristine +# download, the patch is applied. This lets you regenerate a new patch at any time +# easily, simply by editing the working tree in and doing "bzr diff" in there. + +ExternalProject_Add( swig + PREFIX "${PREFIX}" + DOWNLOAD_DIR "${DOWNLOAD_DIR}" + URL http://sourceforge.net/projects/swig/files/swig/swig-${SWIG_RELEASE}/swig-${SWIG_RELEASE}.tar.gz + URL_MD5 ${SWIG_MD5} + STAMP_DIR "${PREFIX}" + + DEPENDS pcre + + #SOURCE_DIR "${PREFIX}" + BUILD_IN_SOURCE 1 + + UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${SWIG_ROOT}" + + #PATCH_COMMAND "true" + CONFIGURE_COMMAND ./configure --prefix=${SWIG_ROOT} --with-pcre-prefix=${PCRE_ROOT} ${SWIG_CFLAGS} ${SWIG_LDFLAGS} ${SWIG_CXXFLAGS} ${SWIG_PYTHON} + + #BINARY_DIR "${PREFIX}" + + BUILD_COMMAND $(MAKE) + + INSTALL_DIR "${SWIG_ROOT}" + INSTALL_COMMAND $(MAKE) install + ) diff --git a/CMakeModules/download_wxpython.cmake b/CMakeModules/download_wxpython.cmake new file mode 100644 index 0000000000..e9738f5830 --- /dev/null +++ b/CMakeModules/download_wxpython.cmake @@ -0,0 +1,117 @@ +# This program source code file is part of KICAD, a free EDA CAD application. +# +# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck +# Copyright (C) 2013 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 Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, you may find one here: +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html +# or you may search the http://www.gnu.org website for the version 2 license, +# or you may write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +# Downloads and builds LIBWXPYTHON + +#--------------------------------------------------------------------- + +set( LIBWXPYTHON_RELEASE 3.0.0.0 ) +set( LIBWXPYTHON_MD5 f5e32c7d85dc261ba777e113c3b7e365 ) # re-calc this on every RELEASE change + +set( LIBWXPYTHON_ROOT "${PROJECT_SOURCE_DIR}/libwxpython_root" ) + +#-------------------------------------------------------------------- + +find_package( BZip2 REQUIRED ) + +set( PREFIX ${DOWNLOAD_DIR}/libwxpython ) +set( LIBWXPYTHON_EXEC python ) +set( LIBWXPYTHON_OPTS --wxpy_installdir=${LIBWXPYTHON_ROOT}/wxPython ) + +if (APPLE) + SET( LIBWXPYTHON_EXEC python2.6 ) + SET( LIBWXPYTHON_OPTS ${LIBWXPYTHON_OPTS} --osx_cocoa ) + #SET( LIBWXPYTHON_OPTS ${LIBWXPYTHON_OPTS} --mac_framework --mac_framework_prefix=${LIBWXPYTHON_ROOT}/wxPython ) + + if( CMAKE_OSX_ARCHITECTURES ) + STRING(REGEX REPLACE " -arch " "," LIBWXPYTHON_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES}) + SET( LIBWXPYTHON_OPTS ${LIBWXPYTHON_OPTS} --mac_arch=${LIBWXPYTHON_ARCHITECTURES}) + endif( CMAKE_OSX_ARCHITECTURES ) +endif(APPLE) + +if ( KICAD_BUILD_STATIC ) + #message fail + set( LIBWXPYTHON_BUILDTYPE "--disable-shared" ) +endif( KICAD_BUILD_STATIC ) + +# = ${PREFIX}/src/libwx +# There is a Bazaar 'boost scratch repo' in /boost and after committing pristine +# download, the patch is applied. This lets you regenerate a new patch at any time +# easily, simply by editing the working tree in and doing "bzr diff" in there. + +ExternalProject_Add( libwxpython + PREFIX "${PREFIX}" + DOWNLOAD_DIR "${DOWNLOAD_DIR}" + URL http://sourceforge.net/projects/wxpython/files/wxPython/${LIBWXPYTHON_RELEASE}/wxPython-src-${LIBWXPYTHON_RELEASE}.tar.bz2 + URL_MD5 ${LIBWXPYTHON_MD5} + STAMP_DIR "${PREFIX}" + + BUILD_IN_SOURCE 1 + + PATCH_COMMAND bzr revert + COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxpython-3.0.0_macosx.patch" + #COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxwidgets-3.0.0_macosx_bug_15908.patch" + + UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${LIBWXPYTHON_ROOT}" + COMMAND ${LIBWXPYTHON_EXEC} wxPython/build-wxpython.py --clean + + CONFIGURE_COMMAND ${LIBWXPYTHON_EXEC} wxPython/build-wxpython.py --prefix=/Users/marco/Development/product/libwxpython_root --unicode --install ${LIBWXPYTHON_OPTS} + + #BINARY_DIR "${PREFIX}" + + BUILD_COMMAND true + + INSTALL_DIR "${LIBWXPYTHON_ROOT}" + INSTALL_COMMAND true + ) + +ExternalProject_Add_Step( libwxpython bzr_commit_libwxpython + COMMAND bzr ci -q -m pristine + COMMENT "committing pristine libwxpython files to 'libwxpython scratch repo'" + DEPENDERS patch + ) + + +ExternalProject_Add_Step( libwxpython bzr_add_libwxpython + COMMAND bzr add -q ${PREFIX}/src/libwxpython + COMMENT "adding pristine libwxpython files to 'libwxpython scratch repo'" + DEPENDERS bzr_commit_libwxpython + ) + + +ExternalProject_Add_Step( libwxpython bzr_init_libwxpython + COMMAND bzr init -q + COMMENT "creating 'libwxpython scratch repo' specifically for libwx to track libwx patches" + DEPENDERS bzr_add_libwxpython + DEPENDEES download + ) + +###### +# Now is time to search what we have built +###### + +ExternalProject_Add_Step( libwxpython libwxpython_recursive_message + COMMAND cmake . + COMMENT "*** RERUN CMAKE - wxWidgets built, now reissue a cmake to build Kicad" + DEPENDEES install + ) + diff --git a/Documentation/compiling/mac-osx.txt b/Documentation/compiling/mac-osx.txt index 01477eede3..ac606ff3c5 100644 --- a/Documentation/compiling/mac-osx.txt +++ b/Documentation/compiling/mac-osx.txt @@ -1,8 +1,10 @@ Compiling KiCad on Apple Mac OS X ================================= First written: 2010-01-31 -Last edited by: Jerry Jacobs + by: Jerry Jacobs + Modified at: 2014-02-07 + by: Marco Serantoni Snow Leopard ------------ @@ -11,158 +13,48 @@ Requirements * XCode Tools (http://developer.apple.com/tools/xcode) * bzr (bazaar) * CMake (http://www.cmake.org) - * wxWidgets 2.9 (http://www.wxwidgets.org/downloads) - * Doxygen (http://www.doxygen.nl) - * ccache (http://www.macports.org) + The build of Kicad for OSX is now easier than before. + The building system will download and compile the needed libraries for you + patching them accordly to the needs. -Building wxWidgets 2.9 Universal +Building Kicad with no support for Scripting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -To check if your tools and libraries are installed check with file for architectures. -user@macosx$ file /Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib + The building needs to know if you want a static binary or a dynamic one + Just set ONE of those two options KICAD_BUILD_STATIC or KICAD_BUILD_DYNAMIC + + If you set KICAD_BUILD_DYNAMIC the building system will build all and include + the needed libraries for each executable in its bundle -/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib: Mach-O universal binary with 4 architectures -/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib (for architecture ppc7400): Mach-O dynamically linked shared library stub ppc -/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib (for architecture ppc64)Mach-O 64-bit dynamically linked shared library stub ppc64 -/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib (for architecture i386):Mach-O dynamically linked shared library stub i386 -/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library stub x86_64 +Building Kicad with support for Scripting +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Due some problems with some dependencies the build of this kind of binary is a bit + more complex, you should initially set KICAD_BUILD_DYNAMIC + then issue for example -You need the architectures what you are compiling for ! + cmake -DKICAD_BUILD_DYNAMIC=ON + make lib-wxpython -If you have problems that the 64bits library is not build you should add in -the configure file: + After successfully building you can set your KICAD_SCRIPTING* options (for example): -At time of writing (2009-01-16) this is on line 18381 - changing this: OSX_UNIV_OPTS="-arch ppc -arch i386" - into this: OSX_UNIV_OPTS="-arch ppc -arch i386 -arch x86_64" + cmake -DKICAD_SCRIPTING=ON -DKICAD_SCRIPTING_WXPYTHON=ON + make -Building a universal monolib wxWidgets 2.9 with the following parameters: -./configure --enable-unicode=yes --enable-shared=no --enable-monolithic --with-opengl --with-expat=builtin --enable-universal_binary --enable-aui --enable-debug --with-osx_cocoa --with-macosx-sdk=/Developer/SDKs/MacOSX10.5.sdk/ --prefix=/opt/wxwidgets/ + The system will build all accordling your choices and package all in the bundle + I know bundles will be huge, but those will be autosufficient. - Should be subsituded with the revision from SVN +Building Kicad for other processors or Universal binaries +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Then you should a message like this: + I wish remember you should set the processor like -Configured wxWidgets 2.9.2 for `i686-apple-darwin10.4.0' + cmake -DCMAKE_OSX_ARCHITECTURES="x86_64" - Which GUI toolkit should wxWidgets use? osx_cocoa - Should wxWidgets be compiled into single library? yes - Should wxWidgets be linked as a shared library? no - Should wxWidgets support Unicode? yes (using UTF-8) - What level of wxWidgets compatibility should be enabled? - wxWidgets 2.6 no - wxWidgets 2.8 yes - Which libraries should wxWidgets use? - STL no - jpeg builtin - png builtin - regex builtin - tiff builtin - zlib sys - expat builtin - libmspack no - sdl no + for other platforms + cmake -DCMAKE_OSX_ARCHITECTURES="x86_64 -arch i386" + cmake -DCMAKE_OSX_ARCHITECTURES="x86_64 -arch i386 -arch ppc" -If you don't need the debugging symbols then you can remove the --enable-debug parameter. - -Compiling and installing: -make -sudo make install - - -Move the old Mac OS X wxconfig and symlink it to the new compiled 2.9 - -sudo mv /usr/bin/wx-config /usr/bin/wx-config.osx -sudo ln -s /opt/wxwidgets-svn/bin/wx-config /usr - -Building KiCad -~~~~~~~~~~~~~~ -Extract the sources or get them from subversion. - -user@mac-osx$ cmake . - -Regarding Kicad the only things i've changed are the Variables -in the generated CMakeCache.txt - -It depends on which CMake version you use: - -//Flags used by the compiler during all build types. -//This fixes also BOOST macro errors -CMAKE_CXX_FLAGS:STRING=-D__ASSERTMACROS__ - -//Build architectures for OSX -CMAKE_OSX_ARCHITECTURES:STRING=x86_64 -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk/ -mmacosx-version-min=10.5 - -//The product will be built against the headers and libraries located -// inside the indicated SDK. -CMAKE_OSX_SYSROOT:PATH=/Developer/SDKs/MacOSX10.5.sdk - -//Minimum OS X version to target for deployment (at runtime); newer -// APIs weak linked. Set to empty string for default value. -CMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.5 - -Or: - -CMAKE_OSX_ARCHITECTURE = x86_64 -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk/ -mmacosx-version-min=10.5 -CMAKE_OSX_SYSROOT = /Developer/SDKs/MacOSX10.5.sdk -CMAKE_CXX_FLAGS = -D__ASSERTMACROS__ - - -Then we invoke make: -user@mac-osx$ make - -It is also possible to give all the options on the commandline and not to edit the CMakeCache.txt. This is a oneliner for Leopard and up: - -cmake ~/Repositories/testing -DCMAKE_OSX_ARCHITECTURES="i386 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.6" -DCMAKE_CXX_FLAGS="-D__ASSERTMACROS__" -DCMAKE_OSX_SYSROOT="/Developer/SDKs/MacOSX10.6.sdk" - -Optional compiler cache -~~~~~~~~~~~~~~~~~~~~~~~ -If you (re)compile often, you would love to use cache. The best is to install it using macports and set the libexec symlink -directory of ccache in your PATH variable. - -Then start with a clean directory and invoke cmake, make sure that the C++ compiler points to /opt/local/libexec/ccache/g++ - -Further reading at http://trac.macports.org/wiki/howto/ccache - -Known Problems -~~~~~~~~~~~~~~ -In file included from -/temp/kicad-sources/boost_1_38_0/boost/ptr_container/detail/reversible_ptr_container.hpp:22In -file included from -/temp/kicad-sources/boost_1_38_0/boost/ptr_container/detail/reversible_ptr_container.hpp:22, - from -/temp/kicad-sources/boost_1_38_0/boost/ptr_container/ptr_sequence_adapter.hpp:20, - from -/temp/kicad-sources/boost_1_38_0/boost/ptr_container/ptr_vector.hpp:20, - from -/temp/kicad-sources/kicad/include/board_item_struct.h:9, - from /temp/kicad-sources/kicad/include/pcbstruct.h:10, - from /temp/kicad-sources/kicad/3d-viewer/3d_viewer.h:29, - from /temp/kicad-sources/kicad/3d-viewer/3d_aux.cpp:23: - /temp/kicad-sources/boost_1_38_0/boost/ptr_container/detail/static_move_ptr.hpp:154:50: -error: macro "check" passed 2 arguments, but takes just 1 - -CMAKE_CXX_FLAGS = -D__ASSERTMACROS__ fixes this :-) - - -configure:18585: gcc -isysroot /Developer/SDKs/MacOSX10.5.sdk/ -mmacosx-version-min=10.5 -o conftest -arch i386 -arch x86_64 -arch ppc -arch i386 -arch x86_64 -arch ppc conftest.c >&5 -ld: warning: in /Developer/SDKs/MacOSX10.5.sdk//usr/lib/libSystem.dylib, missing required architecture ppc in file - -Installing rosetta and xcode with all architectures fixes this "problem" - - -ld: warning: in /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks//QuickTime.framework/QuickTime, missing required architecture x86_64 in file - -You get this error because the QuickTime 10.6 framework is not build with 64bit support. This not a real issue for KiCad because we don't use it anyway. - -Undefined symbols: - "TestForIntersectionOfStraightLineSegments(int, int, int, int, int, int, int, int, int*, int*, double*)", referenced from: - clipLine(EDA_Rect*, int&, int&, int&, int&)in libcommon.a(gr_basic.cpp.o) - -Make sure you marked the build type Release: - -//Choose the type of build, options are: None(CMAKE_CXX_FLAGS or -// CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel. -CMAKE_BUILD_TYPE:STRING=Release + I know some you should prefer use ; as separator, this will be accomplished soon + keeping support for both the syntaxes diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index b3c424e6d6..e486d013d9 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -593,6 +593,23 @@ if( KICAD_SCRIPTING ) ) install( FILES ${CMAKE_BINARY_DIR}/pcbnew/pcbnew.py DESTINATION ${PYTHON_DEST} ) + + if( APPLE ) + # copies all into PYTHON_DEST then all into the bundle ! + add_custom_target( _pcbnew_py_copy ALL + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/pcbnew/pcbnew.py "${PYTHON_DEST}" + DEPENDS FixSwigImportsModuleScripting + COMMENT "Copying pcbnew.py into PYTHON_DEST" + ) + + add_custom_target( pcbnew_copy_wxpython_scripting ALL + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBWXPYTHON_ROOT}/wxPython ${CMAKE_SOURCE_DIR}/pcbnew/pcbnew.app/Contents/Frameworks/wxPython + DEPENDS FixSwigImportsScripting _pcbnew_py_copy + COMMENT "Copying wxPython into pcbnew.app Framework" + ) + # fix bundle after copying wxpython, fixing and copying + add_dependencies( osx_fix_bundles pcbnew_copy_wxpython_scripting ) + endif() endif() if( KICAD_SCRIPTING_MODULES ) @@ -609,6 +626,24 @@ if( KICAD_SCRIPTING_MODULES ) else() install( FILES ${CMAKE_BINARY_DIR}/pcbnew/_pcbnew.so DESTINATION ${PYTHON_DEST} ) endif() + + if( APPLE ) + # copies needed files into PYTHON_DEST then copy all into the bundle ! + add_custom_target( _pcbnew_so_copy ALL + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/pcbnew/_pcbnew.so "${PYTHON_DEST}" + DEPENDS _pcbnew FixSwigImportsModuleScripting + COMMENT "Copying _pcbnew.so into PYTHON_DEST" + ) + + add_custom_target( pcbnew_copy_wxpython_module ALL + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBWXPYTHON_ROOT}/wxPython ${CMAKE_SOURCE_DIR}/pcbnew/pcbnew.app/Contents/Frameworks/wxPython + DEPENDS FixSwigImportsModuleScripting _pcbnew_so_copy + COMMENT "Copying wxPython into pcbnew.app Frameworks" + ) + # Tell that we have to run osx_fix_bundles fix after building _pcbnew and migrating wxPython + add_dependencies( osx_fix_bundles pcbnew_copy_wxpython_module ) + add_dependencies( osx_fix_bundles _pcbnew ) + endif() endif() diff --git a/pcbnew/pcbnew.cpp b/pcbnew/pcbnew.cpp index 37e0d12057..b111a9ff49 100644 --- a/pcbnew/pcbnew.cpp +++ b/pcbnew/pcbnew.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -153,6 +154,22 @@ bool EDA_APP::OnInit() #else // Add this default search path: msg = wxT("/usr/local/kicad/bin/scripting/plugins"); + // OSX + // System Library first + // User Library then + // (TODO) Bundle package ? where to place ? Shared Support ? + + msg = wxT("/Library/Application Support/kicad/scripting"); + msg = wxString( wxGetenv("HOME") ) + wxT("/Library/Application Support/kicad/scripting"); + + // Get pcbnew.app/Contents directory + wxFileName bundledir( wxStandardPaths::Get().GetExecutablePath() ) ; + bundledir.RemoveLastDir(); + + // Prepend in PYTHONPATH the content of the bundle libraries ! + wxSetEnv("PYTHONPATH",((wxGetenv("PYTHONPATH") != NULL ) ? (wxString(wxGetenv("PYTHONPATH")) + ":") : wxString("")) + + bundledir.GetPath() + + "/Frameworks/wxPython/lib/python2.6/site-packages/wx-3.0-osx_cocoa" ); #endif // On linux and osx, 2 others paths are // [HOME]/.kicad_plugins/ diff --git a/scripts/osx_fixbundle.sh b/scripts/osx_fixbundle.sh index 4eb7be82f1..93ace4b6db 100755 --- a/scripts/osx_fixbundle.sh +++ b/scripts/osx_fixbundle.sh @@ -12,7 +12,6 @@ fi EXECUTABLES="`find . -name '*.app'`" - # # Copies libraries under in the bundle and relocates them in the binary # @@ -27,12 +26,62 @@ function fixbundle() { for library in $LIBRARIES; do mkdir -p ${execpath}${exec}.app/Contents/Frameworks - if [[ "$library" =~ "$2" ]]; then + if [[ "$library" =~ "$bzroot" ]]; then echo "${exec}: Migrating `basename $library` in the bundle" - cp -f $library ${execpath}${exec}.app/Contents/Frameworks + if [ ! -f ${exec}.app/Contents/Frameworks/`basename $library` ]; then + cp -f $library ${execpath}${exec}.app/Contents/Frameworks + fi install_name_tool -change $library @executable_path/../Frameworks/`basename $library` ${execpath}${exec}.app/Contents/MacOS/${exec} fi done + + # Resolve issue in python modules (.so) + cd ${execpath} + MODULES="`find ${exec}.app -name '*.so'`" + + for module in $MODULES; do + LIBRARIES="`otool -L $module | cut -d' ' -f1`" + mkdir -p ${exec}.app/Contents/Frameworks + + for library in $LIBRARIES; do + if [[ "$library" =~ "$bzroot" ]]; then + if [ ! -f ${exec}.app/Contents/Frameworks/`basename $library` ]; then + cp -f $library ${exec}.app/Contents/Frameworks + fi + install_name_tool -change $library @executable_path/../Frameworks/`basename $library` $module + fi + done + echo "${exec}: elaborated module `basename ${module}`" + done + + # Resolve issue between DYNLIBS + dynlib_migrate="1"; + dynlib_cycle="0"; + + while [ $dynlib_migrate -gt 0 ]; do + dynlib_migrate="0"; + (( dynlib_cycle += 1 )) + DYNLIBS="`find ${exec}.app -name '*.dylib'`" + + for dynlib in $DYNLIBS; do + LIBRARIES="`otool -L $dynlib | cut -d' ' -f1`" + mkdir -p ${exec}.app/Contents/Frameworks + + for library in $LIBRARIES; do + if [[ "$library" =~ "$bzroot" ]]; then + if [ ! -f ${exec}.app/Contents/Frameworks/`basename $library` ]; then + cp -f $library ${exec}.app/Contents/Frameworks + echo "copied `basename $library` into bundle" + (( dynlib_migrate += 1)) + fi + + install_name_tool -change $library @executable_path/../Frameworks/`basename $library` $dynlib + fi + done + done + echo "${exec}: bundle dynlib dependencies migration Pass $dynlib_cycle: Migrated $dynlib_migrate libraries in bundle" + done + cd - >/dev/null } From c0b0918c4552276a47468ba5b84f4f5657b8f7ad Mon Sep 17 00:00:00 2001 From: Marco Serantoni Date: Fri, 7 Feb 2014 20:19:53 +0100 Subject: [PATCH 11/52] =?UTF-8?q?[MacOSX]=C2=A0Fixing=20minor=20issue=20fo?= =?UTF-8?q?r=20wxPython?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pcbnew/pcbnew.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pcbnew/pcbnew.cpp b/pcbnew/pcbnew.cpp index b111a9ff49..2d695c8f44 100644 --- a/pcbnew/pcbnew.cpp +++ b/pcbnew/pcbnew.cpp @@ -154,11 +154,12 @@ bool EDA_APP::OnInit() #else // Add this default search path: msg = wxT("/usr/local/kicad/bin/scripting/plugins"); + +#ifdef __WXMAC__ // OSX // System Library first // User Library then // (TODO) Bundle package ? where to place ? Shared Support ? - msg = wxT("/Library/Application Support/kicad/scripting"); msg = wxString( wxGetenv("HOME") ) + wxT("/Library/Application Support/kicad/scripting"); @@ -170,6 +171,7 @@ bool EDA_APP::OnInit() wxSetEnv("PYTHONPATH",((wxGetenv("PYTHONPATH") != NULL ) ? (wxString(wxGetenv("PYTHONPATH")) + ":") : wxString("")) + bundledir.GetPath() + "/Frameworks/wxPython/lib/python2.6/site-packages/wx-3.0-osx_cocoa" ); +#endif #endif // On linux and osx, 2 others paths are // [HOME]/.kicad_plugins/ From aff1bdc853fe65faa743dbf1f0251a5aeea0ca99 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Fri, 7 Feb 2014 20:32:08 +0100 Subject: [PATCH 12/52] Remove duplicate icon apply.svg (use ckecked_ok.svg instead which is the same icon). Add a workaround to fix a new bug in wxWidgets 3.0 ( Windows specific ) which shows icons only with a size = 16x16 in menus which have attribute wxITEM_CHECK --- bitmaps_png/CMakeLists.txt | 1 - bitmaps_png/cpp_26/apply.cpp | 84 ------- bitmaps_png/sources/apply.svg | 390 ------------------------------ eeschema/libedit_onrightclick.cpp | 6 +- eeschema/onrightclick.cpp | 16 +- gerbview/onrightclick.cpp | 2 +- include/bitmaps.h | 1 - include/menus_helpers.h | 37 ++- kicad/menubar.cpp | 4 +- pcbnew/modedit_onclick.cpp | 6 +- pcbnew/onrightclick.cpp | 16 +- 11 files changed, 59 insertions(+), 504 deletions(-) delete mode 100644 bitmaps_png/cpp_26/apply.cpp delete mode 100644 bitmaps_png/sources/apply.svg diff --git a/bitmaps_png/CMakeLists.txt b/bitmaps_png/CMakeLists.txt index 61e46e6d9a..75976e635a 100644 --- a/bitmaps_png/CMakeLists.txt +++ b/bitmaps_png/CMakeLists.txt @@ -151,7 +151,6 @@ set( BMAPS_MID annotate_down_right annotate_right_down annotate - apply auto_associe auto_delete_track auto_track_width diff --git a/bitmaps_png/cpp_26/apply.cpp b/bitmaps_png/cpp_26/apply.cpp deleted file mode 100644 index e1a10e90cf..0000000000 --- a/bitmaps_png/cpp_26/apply.cpp +++ /dev/null @@ -1,84 +0,0 @@ - -/* Do not modify this file, it was automatically generated by the - * PNG2cpp CMake script, using a *.png file as input. - */ - -#include - -static const unsigned char png[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, - 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, - 0xce, 0x00, 0x00, 0x04, 0x34, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0x5b, 0x4c, 0x1c, - 0x65, 0x18, 0x86, 0xdf, 0x99, 0xd9, 0x93, 0x7b, 0x5e, 0x18, 0x76, 0x61, 0x61, 0x17, 0x58, 0x76, - 0xcb, 0x61, 0x43, 0xc9, 0xd2, 0x0a, 0xb6, 0xa5, 0x07, 0x11, 0x50, 0xd3, 0x2a, 0x49, 0x63, 0x10, - 0xab, 0x89, 0x4d, 0x49, 0x6d, 0x34, 0xc6, 0x28, 0x68, 0xbc, 0x28, 0x89, 0x69, 0x8c, 0x51, 0x13, - 0x63, 0xe2, 0x8d, 0xa9, 0xc6, 0x4a, 0x4c, 0x31, 0x95, 0xa4, 0x9a, 0xda, 0xb4, 0x52, 0x82, 0x8d, - 0x12, 0xf0, 0x50, 0x5b, 0x1a, 0x52, 0x6c, 0x88, 0x4a, 0x09, 0xb4, 0x85, 0x5a, 0xc2, 0xc2, 0xec, - 0x61, 0x4e, 0xbb, 0x3b, 0xf3, 0x7b, 0xb1, 0xb4, 0x91, 0x0a, 0x05, 0x2b, 0xed, 0x95, 0x5f, 0xf2, - 0x5e, 0x4d, 0xbe, 0x3c, 0xc9, 0x37, 0xff, 0xff, 0x7c, 0x3f, 0x45, 0x08, 0xc1, 0xbd, 0x28, 0x1a, - 0xf7, 0xa8, 0x56, 0x1d, 0x44, 0x35, 0x51, 0x4c, 0xfd, 0xc7, 0xf5, 0x3d, 0xa1, 0x77, 0x43, 0x7b, - 0xef, 0x2a, 0xc8, 0x14, 0x34, 0x8d, 0xd6, 0x95, 0xd4, 0x35, 0x64, 0x16, 0x64, 0x7e, 0xc4, 0xb4, - 0x31, 0x2f, 0xdf, 0x15, 0x90, 0xfd, 0x80, 0x7d, 0x64, 0x5b, 0x60, 0x5b, 0x41, 0x30, 0x18, 0x44, - 0x73, 0x71, 0x33, 0x65, 0x72, 0x9b, 0xde, 0xa7, 0xda, 0xa8, 0x3d, 0x00, 0x40, 0xad, 0xd6, 0x61, - 0x60, 0x0f, 0xb0, 0xe7, 0x43, 0x05, 0xa1, 0x50, 0xcb, 0xd6, 0x16, 0x50, 0x7a, 0x0a, 0x00, 0x30, - 0x39, 0x36, 0x89, 0xf6, 0x81, 0x76, 0xe2, 0x53, 0x7c, 0x7b, 0x56, 0x05, 0xe4, 0x7a, 0xc3, 0x35, - 0x10, 0x2c, 0x28, 0xdb, 0xb4, 0xeb, 0xfe, 0x5d, 0xa0, 0x75, 0xcc, 0x82, 0x6f, 0xe3, 0x63, 0xe3, - 0xe8, 0x1a, 0xee, 0xba, 0xba, 0x60, 0x74, 0xee, 0xfd, 0xee, 0x87, 0x9b, 0x3a, 0x9a, 0x86, 0xdc, - 0xaf, 0xba, 0xd7, 0xad, 0x14, 0x92, 0xdd, 0x9e, 0xdd, 0x53, 0xe6, 0x2d, 0xd9, 0xd4, 0x18, 0x7c, - 0x1c, 0x92, 0x22, 0x82, 0xe7, 0xe3, 0x88, 0xc7, 0xd2, 0xe1, 0x66, 0x39, 0x74, 0xff, 0xd1, 0x8d, - 0x39, 0x6e, 0x6e, 0xe2, 0x26, 0xc8, 0xfc, 0xa2, 0xf9, 0x21, 0xab, 0xdd, 0x7a, 0x72, 0x47, 0xf9, - 0xa3, 0x15, 0x36, 0xa7, 0xed, 0xc7, 0x8c, 0xd6, 0x8c, 0xf2, 0xe5, 0x20, 0x79, 0xfb, 0xf3, 0xbe, - 0x5c, 0xe3, 0xf5, 0x37, 0x3c, 0x52, 0xdc, 0x80, 0x04, 0x24, 0x08, 0x22, 0x3f, 0x9f, 0x34, 0xe8, - 0xf3, 0x81, 0x4e, 0x0c, 0x5e, 0x1a, 0x1c, 0x9b, 0x7e, 0x6b, 0xba, 0x86, 0x06, 0x00, 0xe3, 0x5e, - 0xe3, 0x03, 0xd6, 0x2c, 0xeb, 0xa9, 0x86, 0xc0, 0x16, 0xe6, 0x6a, 0x62, 0x02, 0x5b, 0xfd, 0x55, - 0x3a, 0x57, 0x86, 0xeb, 0x17, 0x7b, 0xab, 0xdd, 0xb7, 0x14, 0xc4, 0xf3, 0x9a, 0xe7, 0x70, 0x20, - 0xdf, 0xb7, 0xb3, 0x3e, 0xb0, 0x19, 0x09, 0x48, 0x10, 0x65, 0x3e, 0x1d, 0x89, 0x47, 0x42, 0x92, - 0xd1, 0x73, 0xa1, 0x1b, 0x17, 0xae, 0x0c, 0x4f, 0x92, 0x0f, 0xc8, 0x1a, 0x00, 0xa0, 0xf5, 0xfb, - 0xf4, 0xe5, 0x59, 0xee, 0xac, 0xbe, 0x1d, 0xc5, 0x0f, 0x6a, 0x2c, 0x56, 0x33, 0x78, 0x39, 0x0a, - 0x17, 0xeb, 0x44, 0x4d, 0x71, 0x85, 0xc1, 0x6d, 0x76, 0x0f, 0xb3, 0xcf, 0xb3, 0xb9, 0xb7, 0x42, - 0xbc, 0xaf, 0x78, 0x0f, 0x16, 0xe5, 0x79, 0x9f, 0xd9, 0x58, 0x54, 0x01, 0x99, 0x96, 0x21, 0x25, - 0x78, 0x48, 0xf3, 0x10, 0x35, 0x95, 0xc4, 0xb9, 0x4b, 0x67, 0x70, 0x76, 0x6c, 0x70, 0x3a, 0x15, - 0x4d, 0xf9, 0x09, 0x21, 0x0a, 0x00, 0xd0, 0x1e, 0xbb, 0xe7, 0xed, 0x9a, 0xc2, 0x0a, 0x9d, 0xc5, - 0x6a, 0x85, 0x94, 0xe0, 0x21, 0xa7, 0x78, 0x88, 0xc9, 0x18, 0x58, 0xa7, 0x03, 0x55, 0x25, 0x01, - 0x23, 0x6b, 0x63, 0x47, 0xac, 0x3b, 0xad, 0x99, 0x37, 0xc7, 0xf5, 0x52, 0xde, 0x7b, 0x5e, 0x57, - 0xce, 0xbe, 0xea, 0x60, 0x29, 0x92, 0x74, 0x12, 0x72, 0x2a, 0xdd, 0x23, 0x25, 0x05, 0xd0, 0x44, - 0xc1, 0xd8, 0xe4, 0xef, 0xf8, 0xee, 0xe2, 0x0f, 0x9c, 0x18, 0x13, 0xfd, 0xa4, 0x83, 0x48, 0x37, - 0xfa, 0x34, 0x5c, 0x84, 0xeb, 0xbf, 0x38, 0x35, 0xba, 0xdd, 0x6c, 0xd4, 0x40, 0x63, 0x34, 0x82, - 0x26, 0x00, 0xad, 0xa1, 0x40, 0xa5, 0x00, 0xd6, 0xed, 0xc0, 0xfa, 0x84, 0xcf, 0x72, 0x46, 0x54, - 0x46, 0xb3, 0x1a, 0xb3, 0xbc, 0xba, 0x6c, 0x5d, 0x9b, 0xd7, 0x9d, 0xd3, 0x5a, 0x5d, 0x59, 0x84, - 0x04, 0x23, 0x43, 0x55, 0x64, 0x10, 0x85, 0x80, 0x28, 0xc0, 0x7d, 0xb4, 0x11, 0x5c, 0x24, 0x8c, - 0x93, 0xe7, 0xbf, 0x8f, 0xc7, 0xa3, 0x71, 0x3f, 0xf9, 0x8c, 0xc4, 0x16, 0x18, 0x83, 0x10, 0x02, - 0xf3, 0x6e, 0xf3, 0x27, 0x85, 0xf9, 0xd9, 0x2d, 0x1b, 0x2b, 0x4a, 0x01, 0xbd, 0x16, 0xb4, 0x86, - 0x02, 0xcd, 0x00, 0x14, 0x43, 0x41, 0xa7, 0xa1, 0x31, 0x39, 0x32, 0x83, 0x73, 0x43, 0x13, 0x51, - 0x87, 0xc5, 0x6c, 0xd9, 0x5c, 0x5b, 0x48, 0xa5, 0xf4, 0x1a, 0x10, 0x15, 0x20, 0x0a, 0x81, 0xaa, - 0x10, 0x18, 0x28, 0x13, 0x74, 0xa2, 0x1e, 0x87, 0xbe, 0x3d, 0x26, 0x0a, 0x82, 0x50, 0x2c, 0x7c, - 0x2a, 0x5c, 0xf9, 0x87, 0x9a, 0x6e, 0xdc, 0x23, 0xdb, 0xb3, 0xb6, 0x2f, 0xfc, 0xbe, 0x9c, 0x27, - 0x2b, 0x2b, 0x3d, 0x50, 0x35, 0x0c, 0x18, 0x6d, 0x1a, 0x44, 0x31, 0x80, 0x8e, 0xa6, 0x71, 0xfd, - 0xd7, 0x18, 0x9c, 0x05, 0x06, 0xa4, 0x4c, 0x0c, 0xa0, 0x52, 0xb0, 0x68, 0x1c, 0x50, 0x12, 0x0a, - 0x64, 0x31, 0x01, 0x43, 0xc2, 0x88, 0xce, 0xde, 0x5e, 0x99, 0x93, 0x22, 0x15, 0xd2, 0x21, 0xe9, - 0xb7, 0x45, 0x1d, 0xf8, 0xf7, 0x0b, 0x6b, 0xdb, 0x6d, 0x3b, 0x51, 0x56, 0xe4, 0xde, 0xbe, 0x76, - 0x7d, 0x0e, 0x92, 0xda, 0x14, 0x28, 0x06, 0xa0, 0x18, 0x15, 0x34, 0x43, 0x43, 0x4b, 0xd1, 0x50, - 0x54, 0x02, 0x55, 0x55, 0x21, 0xcb, 0x12, 0xae, 0xcd, 0x5d, 0x86, 0x20, 0x0a, 0x60, 0xe5, 0x5c, - 0x9c, 0x3d, 0x1f, 0x49, 0x46, 0xe4, 0x58, 0x55, 0xbc, 0x23, 0x3e, 0xb4, 0xa4, 0x6c, 0x6f, 0x35, - 0x83, 0xe3, 0x69, 0x47, 0x5f, 0x59, 0xc0, 0xb5, 0x85, 0x5d, 0x1b, 0x85, 0xa0, 0xe5, 0x41, 0x6b, - 0xe7, 0xff, 0x59, 0xda, 0x2a, 0x20, 0x2a, 0xa0, 0x24, 0x09, 0x94, 0x24, 0xe0, 0x8c, 0xe6, 0x62, - 0xa0, 0x2f, 0x92, 0x9a, 0xe1, 0x67, 0x6b, 0xc5, 0x23, 0x62, 0xff, 0x6d, 0xad, 0xbe, 0x98, 0x82, - 0x1c, 0xcd, 0x8e, 0xc1, 0x50, 0xa9, 0xab, 0x32, 0xab, 0x26, 0x06, 0x5e, 0x2b, 0xa4, 0xc7, 0x48, - 0x03, 0x20, 0x80, 0xaa, 0xa4, 0x41, 0xce, 0xb0, 0x07, 0xa7, 0x4f, 0xcc, 0xaa, 0xe1, 0x18, 0xf7, - 0x18, 0x7f, 0x94, 0xff, 0x66, 0xd9, 0xf5, 0xb1, 0x94, 0xeb, 0xec, 0x4f, 0xd8, 0x47, 0x36, 0xac, - 0x73, 0x97, 0xb0, 0x75, 0x51, 0x88, 0x3a, 0x01, 0x34, 0x03, 0x10, 0x00, 0x6a, 0x0a, 0x70, 0xfe, - 0x99, 0x87, 0x53, 0x9d, 0x61, 0x72, 0x3d, 0x3e, 0xf7, 0x94, 0x70, 0x4c, 0xe8, 0xfa, 0x4f, 0x8b, - 0x8f, 0x3b, 0xca, 0x95, 0xfe, 0xf4, 0xf3, 0xd4, 0x78, 0xbc, 0xdf, 0x0e, 0xbb, 0xd1, 0x08, 0xad, - 0x89, 0x86, 0xce, 0x44, 0xc3, 0x13, 0xf7, 0xa0, 0xf7, 0x70, 0x98, 0x4c, 0xc7, 0xb8, 0x17, 0x56, - 0x0a, 0x59, 0x76, 0x1f, 0x45, 0x8e, 0x47, 0xfc, 0xa7, 0x7b, 0x2f, 0x5f, 0x13, 0x7a, 0x33, 0x60, - 0x37, 0x1a, 0xe1, 0xe1, 0x3c, 0xe8, 0xfe, 0x30, 0x4c, 0xa6, 0xa2, 0x73, 0xaf, 0xf3, 0x5f, 0xf3, - 0x07, 0xff, 0x95, 0xe2, 0x09, 0x21, 0xb7, 0x0d, 0x82, 0xd0, 0x99, 0x6b, 0xcd, 0x33, 0x6d, 0x47, - 0x36, 0x90, 0xea, 0xe7, 0x7c, 0xc4, 0xd0, 0x60, 0x78, 0x73, 0xb9, 0x9e, 0xc5, 0xb2, 0xa2, 0x7d, - 0x44, 0x35, 0x52, 0x96, 0x7c, 0x2d, 0x7b, 0x5c, 0x50, 0x93, 0x3d, 0xd3, 0x5f, 0x71, 0xef, 0xdc, - 0xd1, 0x5b, 0xe2, 0xff, 0xe7, 0xd6, 0x9d, 0xd6, 0x5f, 0x63, 0x4d, 0x14, 0x46, 0x86, 0xf4, 0x75, - 0x7d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, -}; - -const BITMAP_OPAQUE apply_xpm[1] = {{ png, sizeof( png ), "apply_xpm" }}; - -//EOF diff --git a/bitmaps_png/sources/apply.svg b/bitmaps_png/sources/apply.svg deleted file mode 100644 index f522fb4faa..0000000000 --- a/bitmaps_png/sources/apply.svg +++ /dev/null @@ -1,390 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eeschema/libedit_onrightclick.cpp b/eeschema/libedit_onrightclick.cpp index d9d247ed5a..47eade4997 100644 --- a/eeschema/libedit_onrightclick.cpp +++ b/eeschema/libedit_onrightclick.cpp @@ -6,7 +6,7 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2004-2013 KiCad Developers, see change_log.txt for contributors. + * Copyright (C) 2004-2014 KiCad Developers, see change_log.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 @@ -216,7 +216,7 @@ bool LIB_EDIT_FRAME::OnRightClick( const wxPoint& aPosition, wxMenu* PopMenu ) if( item->IsNew() ) { AddMenuItem( PopMenu, ID_POPUP_LIBEDIT_END_CREATE_ITEM, _( "Line End" ), - KiBitmap( apply_xpm ) ); + KiBitmap( checked_ok_xpm ) ); } msg = AddHotkeyName( _( "Edit Line Options" ), s_Libedit_Hokeys_Descr, HK_EDIT ); @@ -328,7 +328,7 @@ void AddMenusForBlock( wxMenu* PopMenu, LIB_EDIT_FRAME* frame ) PopMenu->AppendSeparator(); - AddMenuItem( PopMenu, ID_POPUP_PLACE_BLOCK, _( "Place Block" ), KiBitmap( apply_xpm ) ); + AddMenuItem( PopMenu, ID_POPUP_PLACE_BLOCK, _( "Place Block" ), KiBitmap( checked_ok_xpm ) ); if( frame->GetScreen()->m_BlockLocate.GetCommand() == BLOCK_MOVE ) { diff --git a/eeschema/onrightclick.cpp b/eeschema/onrightclick.cpp index c6f9661197..9e10448382 100644 --- a/eeschema/onrightclick.cpp +++ b/eeschema/onrightclick.cpp @@ -1,9 +1,9 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr - * Copyright (C) 2008-2013 Wayne Stambaugh - * Copyright (C) 2004-2013 KiCad Developers, see change_log.txt for contributors. + * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2008-2014 Wayne Stambaugh + * Copyright (C) 2004-2014 KiCad Developers, see change_log.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 @@ -270,7 +270,7 @@ bool SCH_EDIT_FRAME::OnRightClick( const wxPoint& aPosition, wxMenu* PopMenu ) default: if( is_new ) AddMenuItem( PopMenu, ID_POPUP_END_LINE, _( "End Drawing" ), - KiBitmap( apply_xpm ) ); + KiBitmap( checked_ok_xpm ) ); AddMenuItem( PopMenu, ID_POPUP_SCH_DELETE, _( "Delete Drawing" ), KiBitmap( delete_xpm ) ); @@ -677,7 +677,7 @@ void AddMenusForWire( wxMenu* PopMenu, SCH_LINE* Wire, SCH_EDIT_FRAME* frame ) if( is_new ) { msg = AddHotkeyName( _( "Wire End" ), s_Schematic_Hokeys_Descr, HK_END_CURR_LINEWIREBUS ); - AddMenuItem( PopMenu, ID_POPUP_END_LINE, msg, KiBitmap( apply_xpm ) ); + AddMenuItem( PopMenu, ID_POPUP_END_LINE, msg, KiBitmap( checked_ok_xpm ) ); return; } @@ -727,7 +727,7 @@ void AddMenusForBus( wxMenu* PopMenu, SCH_LINE* Bus, SCH_EDIT_FRAME* frame ) if( is_new ) { msg = AddHotkeyName( _( "Bus End" ), s_Schematic_Hokeys_Descr, HK_END_CURR_LINEWIREBUS ); - AddMenuItem( PopMenu, ID_POPUP_END_LINE, msg, KiBitmap( apply_xpm ) ); + AddMenuItem( PopMenu, ID_POPUP_END_LINE, msg, KiBitmap( checked_ok_xpm ) ); return; } @@ -768,7 +768,7 @@ void AddMenusForHierchicalSheet( wxMenu* PopMenu, SCH_SHEET* Sheet ) if( Sheet->GetFlags() ) { - AddMenuItem( PopMenu, ID_POPUP_SCH_END_SHEET, _( "Place Sheet" ), KiBitmap( apply_xpm ) ); + AddMenuItem( PopMenu, ID_POPUP_SCH_END_SHEET, _( "Place Sheet" ), KiBitmap( checked_ok_xpm ) ); } else { @@ -823,7 +823,7 @@ void AddMenusForBlock( wxMenu* PopMenu, SCH_EDIT_FRAME* frame ) if( frame->GetScreen()->m_BlockLocate.GetCommand() == BLOCK_MOVE ) AddMenuItem( PopMenu, ID_POPUP_ZOOM_BLOCK, _( "Window Zoom" ), KiBitmap( zoom_area_xpm ) ); - AddMenuItem( PopMenu, ID_POPUP_PLACE_BLOCK, _( "Place Block" ), KiBitmap( apply_xpm ) ); + AddMenuItem( PopMenu, ID_POPUP_PLACE_BLOCK, _( "Place Block" ), KiBitmap( checked_ok_xpm ) ); // After a block move (that is also a block selection) one can reselect // a block function. diff --git a/gerbview/onrightclick.cpp b/gerbview/onrightclick.cpp index 798b968ba7..aefc0e006b 100644 --- a/gerbview/onrightclick.cpp +++ b/gerbview/onrightclick.cpp @@ -53,7 +53,7 @@ bool GERBVIEW_FRAME::OnRightClick( const wxPoint& aPosition, wxMenu* PopMenu ) _( "Cancel Block" ), KiBitmap( cancel_xpm ) ); PopMenu->AppendSeparator(); AddMenuItem( PopMenu, ID_POPUP_PLACE_BLOCK, - _( "Place Block" ), KiBitmap( apply_xpm ) ); + _( "Place Block" ), KiBitmap( checked_ok_xpm ) ); AddMenuItem( PopMenu, ID_POPUP_DELETE_BLOCK, _( "Delete Block (ctrl + drag mouse)" ), KiBitmap( delete_xpm ) ); } diff --git a/include/bitmaps.h b/include/bitmaps.h index 8714a297d7..eecf111f30 100644 --- a/include/bitmaps.h +++ b/include/bitmaps.h @@ -78,7 +78,6 @@ EXTERN_BITMAP( anchor_xpm ) EXTERN_BITMAP( annotate_down_right_xpm ) EXTERN_BITMAP( annotate_right_down_xpm ) EXTERN_BITMAP( annotate_xpm ) -EXTERN_BITMAP( apply_xpm ) EXTERN_BITMAP( auto_associe_xpm ) EXTERN_BITMAP( auto_delete_track_xpm ) EXTERN_BITMAP( auto_track_width_xpm ) diff --git a/include/menus_helpers.h b/include/menus_helpers.h index e808cd688b..9b0d3511d1 100644 --- a/include/menus_helpers.h +++ b/include/menus_helpers.h @@ -3,6 +3,29 @@ * @brief Usefull macros and inline functions to create menus items * in menubars or popup menus */ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2004-2014 KiCad Developers. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + #include @@ -13,7 +36,7 @@ * @param aImage is the image to add the menu item. */ #if defined( USE_IMAGES_IN_MENUS ) && defined( __WINDOWS__ ) -# define SETBITMAPS( aImage ) item->SetBitmaps( KiBitmap( apply_xpm ), KiBitmap( aImage ) ) +# define SETBITMAPS( aImage ) item->SetBitmaps( KiBitmap( checked_ok_xpm ), KiBitmap( aImage ) ) #else # define SETBITMAPS( aImage ) #endif @@ -55,7 +78,11 @@ static inline wxMenuItem* AddMenuItem( wxMenu* aMenu, if( aType == wxITEM_CHECK ) { #if defined( USE_IMAGES_IN_MENUS ) && defined( __WINDOWS__ ) - item->SetBitmaps( KiBitmap( apply_xpm ), aImage ); + item->SetBitmaps( KiBitmap( checked_ok_xpm ), aImage ); + // A workaround to a strange bug on Windows, wx Widgets 3.0: + // size of bitmaps is not taken in account for wxITEM_CHECK menu + // unless we call SetFont + item->SetFont(*wxNORMAL_FONT); #endif } else @@ -96,7 +123,11 @@ static inline wxMenuItem* AddMenuItem( wxMenu* aMenu, if( aType == wxITEM_CHECK ) { #if defined( USE_IMAGES_IN_MENUS ) && defined( __WINDOWS__ ) - item->SetBitmaps( KiBitmap( apply_xpm ), aImage ); + item->SetBitmaps( KiBitmap( checked_ok_xpm ), aImage ); + // A workaround to a strange bug on Windows, wx Widgets 3.0: + // size of bitmaps is not taken in account for wxITEM_CHECK menu + // unless we call SetFont + item->SetFont(*wxNORMAL_FONT); #endif } else diff --git a/kicad/menubar.cpp b/kicad/menubar.cpp index 77283b6a53..674c972d41 100644 --- a/kicad/menubar.cpp +++ b/kicad/menubar.cpp @@ -230,7 +230,7 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar() AddMenuItem( SubMenuPdfBrowserChoice, ID_SELECT_PREFERED_PDF_BROWSER, _( "&Favourite" ), _( "Use your favourite PDF viewer used to browse datasheets" ), - KiBitmap( preference_xpm ), + KiBitmap( datasheet_xpm ), wxITEM_CHECK ); SubMenuPdfBrowserChoice->Check( ID_SELECT_PREFERED_PDF_BROWSER, !wxGetApp().UseSystemPdfBrowser() ); @@ -239,7 +239,7 @@ void KICAD_MANAGER_FRAME::ReCreateMenuBar() // Append PDF Viewer submenu to preferences AddMenuItem( SubMenuPdfBrowserChoice, ID_SELECT_PREFERED_PDF_BROWSER_NAME, - _( "&PDF Viewer" ), + _( "Select &PDF Viewer" ), _( "Select your favourite PDF viewer used to browse datasheets" ), KiBitmap( datasheet_xpm ) ); diff --git a/pcbnew/modedit_onclick.cpp b/pcbnew/modedit_onclick.cpp index 3590df63f2..e4ff4eb701 100644 --- a/pcbnew/modedit_onclick.cpp +++ b/pcbnew/modedit_onclick.cpp @@ -223,7 +223,7 @@ bool FOOTPRINT_EDIT_FRAME::OnRightClick( const wxPoint& MousePos, wxMenu* PopMen KiBitmap( zoom_area_xpm ) ); PopMenu->AppendSeparator(); AddMenuItem( PopMenu, ID_POPUP_PLACE_BLOCK, - _( "Place Block" ), KiBitmap( apply_xpm ) ); + _( "Place Block" ), KiBitmap( checked_ok_xpm ) ); AddMenuItem( PopMenu, ID_POPUP_COPY_BLOCK, _( "Copy Block (shift + drag mouse)" ), KiBitmap( copyblock_xpm ) ); @@ -327,7 +327,7 @@ bool FOOTPRINT_EDIT_FRAME::OnRightClick( const wxPoint& MousePos, wxMenu* PopMen { if( (flags & IS_NEW) ) AddMenuItem( PopMenu, ID_POPUP_PCB_STOP_CURRENT_DRAWING, _( "End edge" ), - KiBitmap( apply_xpm ) ); + KiBitmap( checked_ok_xpm ) ); if( !flags ) { @@ -337,7 +337,7 @@ bool FOOTPRINT_EDIT_FRAME::OnRightClick( const wxPoint& MousePos, wxMenu* PopMen if( ( flags & (IS_NEW | IS_MOVED) ) == IS_MOVED ) AddMenuItem( PopMenu, ID_POPUP_PCB_PLACE_EDGE, _( "Place edge" ), - KiBitmap( apply_xpm ) ); + KiBitmap( checked_ok_xpm ) ); msg = AddHotkeyName( _("Edit" ), g_Module_Editor_Hokeys_Descr, HK_EDIT_ITEM ); AddMenuItem( PopMenu, ID_POPUP_MODEDIT_EDIT_BODY_ITEM, diff --git a/pcbnew/onrightclick.cpp b/pcbnew/onrightclick.cpp index 37d53b3795..e0a156f66f 100644 --- a/pcbnew/onrightclick.cpp +++ b/pcbnew/onrightclick.cpp @@ -195,7 +195,7 @@ bool PCB_EDIT_FRAME::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) if( (flags & IS_NEW) ) { AddMenuItem( aPopMenu, ID_POPUP_PCB_STOP_CURRENT_DRAWING, - _( "End Drawing" ), KiBitmap( apply_xpm ) ); + _( "End Drawing" ), KiBitmap( checked_ok_xpm ) ); } if( !flags ) @@ -225,7 +225,7 @@ bool PCB_EDIT_FRAME::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) if( flags & IS_NEW ) { AddMenuItem( aPopMenu, ID_POPUP_PCB_STOP_CURRENT_EDGE_ZONE, - _( "Close Zone Outline" ), KiBitmap( apply_xpm ) ); + _( "Close Zone Outline" ), KiBitmap( checked_ok_xpm ) ); AddMenuItem( aPopMenu, ID_POPUP_PCB_DELETE_ZONE_LAST_CREATED_CORNER, _( "Delete Last Corner" ), KiBitmap( delete_xpm ) ); } @@ -452,7 +452,7 @@ void PCB_EDIT_FRAME::createPopUpBlockMenu( wxMenu* menu ) KiBitmap( cancel_xpm ) ); AddMenuItem( menu, ID_POPUP_ZOOM_BLOCK, _( "Zoom Block" ), KiBitmap( zoom_area_xpm ) ); menu->AppendSeparator(); - AddMenuItem( menu, ID_POPUP_PLACE_BLOCK, _( "Place Block" ), KiBitmap( apply_xpm ) ); + AddMenuItem( menu, ID_POPUP_PLACE_BLOCK, _( "Place Block" ), KiBitmap( checked_ok_xpm ) ); AddMenuItem( menu, ID_POPUP_COPY_BLOCK, _( "Copy Block" ), KiBitmap( copyblock_xpm ) ); AddMenuItem( menu, ID_POPUP_FLIP_BLOCK, _( "Flip Block" ), KiBitmap( invert_module_xpm ) ); AddMenuItem( menu, ID_POPUP_ROTATE_BLOCK, _( "Rotate Block" ), KiBitmap( rotate_ccw_xpm ) ); @@ -517,7 +517,7 @@ void PCB_EDIT_FRAME::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu ) else if( flags & IS_DRAGGED ) // Drag via or node in progress { AddMenuItem( PopMenu, ID_POPUP_PCB_PLACE_MOVED_TRACK_NODE, - _( "Place Node" ), KiBitmap( apply_xpm ) ); + _( "Place Node" ), KiBitmap( checked_ok_xpm ) ); return; } else // Edition in progress @@ -525,7 +525,7 @@ void PCB_EDIT_FRAME::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu ) if( flags & IS_NEW ) { msg = AddHotkeyName( _( "End Track" ), g_Board_Editor_Hokeys_Descr, HK_END_TRACK ); - AddMenuItem( PopMenu, ID_POPUP_PCB_END_TRACK, msg, KiBitmap( apply_xpm ) ); + AddMenuItem( PopMenu, ID_POPUP_PCB_END_TRACK, msg, KiBitmap( checked_ok_xpm ) ); } msg = AddHotkeyName( _( "Place Through Via" ), g_Board_Editor_Hokeys_Descr, HK_ADD_THROUGH_VIA ); @@ -646,16 +646,16 @@ void PCB_EDIT_FRAME::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu* if( edge_zone->GetFlags() == IS_DRAGGED ) { AddMenuItem( aPopMenu, ID_POPUP_PCB_PLACE_DRAGGED_ZONE_OUTLINE_SEGMENT, - _( "Place Edge Outline" ), KiBitmap( apply_xpm ) ); + _( "Place Edge Outline" ), KiBitmap( checked_ok_xpm ) ); } else if( edge_zone->GetFlags() ) { if( (edge_zone->GetFlags() & IN_EDIT ) ) AddMenuItem( aPopMenu, ID_POPUP_PCB_PLACE_ZONE_CORNER, - _( "Place Corner" ), KiBitmap( apply_xpm ) ); + _( "Place Corner" ), KiBitmap( checked_ok_xpm ) ); else AddMenuItem( aPopMenu, ID_POPUP_PCB_PLACE_ZONE_OUTLINES, - _( "Place Zone" ), KiBitmap( apply_xpm ) ); + _( "Place Zone" ), KiBitmap( checked_ok_xpm ) ); } else { From 9583c522dd2331fcbf37922613a24924736992f5 Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Fri, 7 Feb 2014 20:54:58 +0100 Subject: [PATCH 13/52] Moved PCB_VISIBLE size check to .cpp. --- include/layers_id_colors_and_visibility.h | 12 ------------ pcbnew/class_board_design_settings.cpp | 13 +++++++++++++ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/include/layers_id_colors_and_visibility.h b/include/layers_id_colors_and_visibility.h index 7dc0660457..5df67215be 100644 --- a/include/layers_id_colors_and_visibility.h +++ b/include/layers_id_colors_and_visibility.h @@ -245,18 +245,6 @@ enum PCB_VISIBLE END_PCB_VISIBLE_LIST // sentinel }; -#ifndef NDEBUG -struct static_check { - static_check() - { - // Long (the type used for saving visibility settings) is only 32 bits guaranteed, - // be sure that we do not cross the limit - assert( END_PCB_VISIBLE_LIST <= 32 ); - }; -}; -static static_check check; -#endif - /** * Enum NETNAMES_VISIBLE * is a set of layers specific for displaying net names. diff --git a/pcbnew/class_board_design_settings.cpp b/pcbnew/class_board_design_settings.cpp index e98dc81ef1..654ca11653 100644 --- a/pcbnew/class_board_design_settings.cpp +++ b/pcbnew/class_board_design_settings.cpp @@ -243,3 +243,16 @@ void BOARD_DESIGN_SETTINGS::SetEnabledLayers( LAYER_MSK aMask ) // update m_CopperLayerCount to ensure its consistency with m_EnabledLayers m_CopperLayerCount = LayerMaskCountSet( aMask & ALL_CU_LAYERS); } + + +#ifndef NDEBUG +struct static_check { + static_check() + { + // Int (the type used for saving visibility settings) is only 32 bits guaranteed, + // be sure that we do not cross the limit + assert( END_PCB_VISIBLE_LIST <= 32 ); + }; +}; +static static_check check; +#endif From b93146ab874a5c48557a28056fe34a246b0c4266 Mon Sep 17 00:00:00 2001 From: Marco Serantoni Date: Fri, 7 Feb 2014 23:00:19 +0100 Subject: [PATCH 14/52] [MacOSX] Adding patches for wxPython && http://trac.wxwidgets.org/ticket/15957 --- CMakeModules/download_wxpython.cmake | 2 +- patches/wxpython-3.0.0_macosx.patch | 289 ++++++++++++++++++ patches/wxpython-3.0.0_macosx_multiarch.patch | 25 ++ 3 files changed, 315 insertions(+), 1 deletion(-) create mode 100644 patches/wxpython-3.0.0_macosx.patch create mode 100644 patches/wxpython-3.0.0_macosx_multiarch.patch diff --git a/CMakeModules/download_wxpython.cmake b/CMakeModules/download_wxpython.cmake index e9738f5830..60225b40f4 100644 --- a/CMakeModules/download_wxpython.cmake +++ b/CMakeModules/download_wxpython.cmake @@ -69,7 +69,7 @@ ExternalProject_Add( libwxpython PATCH_COMMAND bzr revert COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxpython-3.0.0_macosx.patch" - #COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxwidgets-3.0.0_macosx_bug_15908.patch" + COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxpython-3.0.0_macosx_multiarch.patch" # http://trac.wxwidgets.org/ticket/15957 UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${LIBWXPYTHON_ROOT}" COMMAND ${LIBWXPYTHON_EXEC} wxPython/build-wxpython.py --clean diff --git a/patches/wxpython-3.0.0_macosx.patch b/patches/wxpython-3.0.0_macosx.patch new file mode 100644 index 0000000000..746943f5b4 --- /dev/null +++ b/patches/wxpython-3.0.0_macosx.patch @@ -0,0 +1,289 @@ +=== modified file 'Makefile.in' +--- Makefile.in 2014-02-05 21:57:29 +0000 ++++ Makefile.in 2014-02-05 22:00:01 +0000 +@@ -14601,7 +14601,7 @@ + monodll_carbon_frame.o \ + monodll_carbon_mdi.o \ + monodll_carbon_metafile.o \ +- monodll_carbon_overlay.o \ ++ monodll_osx_cocoa_overlay.o \ + monodll_carbon_popupwin.o \ + monodll_carbon_renderer.o \ + monodll_carbon_settings.o \ +@@ -14748,7 +14748,7 @@ + monolib_carbon_frame.o \ + monolib_carbon_mdi.o \ + monolib_carbon_metafile.o \ +- monolib_carbon_overlay.o \ ++ monolib_osx_cocoa_overlay.o \ + monolib_carbon_popupwin.o \ + monolib_carbon_renderer.o \ + monolib_carbon_settings.o \ +@@ -14895,7 +14895,7 @@ + coredll_carbon_frame.o \ + coredll_carbon_mdi.o \ + coredll_carbon_metafile.o \ +- coredll_carbon_overlay.o \ ++ coredll_osx_cocoa_overlay.o \ + coredll_carbon_popupwin.o \ + coredll_carbon_renderer.o \ + coredll_carbon_settings.o \ +@@ -15027,7 +15027,7 @@ + corelib_carbon_frame.o \ + corelib_carbon_mdi.o \ + corelib_carbon_metafile.o \ +- corelib_carbon_overlay.o \ ++ corelib_osx_cocoa_overlay.o \ + corelib_carbon_popupwin.o \ + corelib_carbon_renderer.o \ + corelib_carbon_settings.o \ +@@ -17774,6 +17774,9 @@ + monodll_osx_cocoa_notebook.o: $(srcdir)/src/osx/cocoa/notebook.mm $(MONODLL_ODEP) + $(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/notebook.mm + ++monodll_osx_cocoa_overla.o: $(srcdir)/src/osx/cocoa/overlay.mm $(MONODLL_ODEP) ++ $(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm ++ + monodll_osx_cocoa_radiobut.o: $(srcdir)/src/osx/cocoa/radiobut.mm $(MONODLL_ODEP) + $(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/radiobut.mm + +@@ -21683,8 +21686,8 @@ + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@monodll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(MONODLL_ODEP) + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp + +-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@monodll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(MONODLL_ODEP) +-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp ++@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@monodll_osx_cocoa_overlay.o: $(srcdir)/src/osx/cocoa/overlay.mm $(MONODLL_ODEP) ++@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm + + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@monodll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(MONODLL_ODEP) + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp +@@ -23642,6 +23645,9 @@ + monolib_osx_cocoa_notebook.o: $(srcdir)/src/osx/cocoa/notebook.mm $(MONOLIB_ODEP) + $(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/notebook.mm + ++monolib_osx_cocoa_overlay.o: $(srcdir)/src/osx/cocoa/overlay.mm $(MONOLIB_ODEP) ++ $(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm ++ + monolib_osx_cocoa_radiobut.o: $(srcdir)/src/osx/cocoa/radiobut.mm $(MONOLIB_ODEP) + $(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/radiobut.mm + +@@ -33584,8 +33590,8 @@ + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@coredll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(COREDLL_ODEP) + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp + +-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@coredll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(COREDLL_ODEP) +-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp ++@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@coredll_osx_cocoa_overlay.o: $(srcdir)/src/osx/cocoa/overlay.mm $(COREDLL_ODEP) ++@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm + + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@coredll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(COREDLL_ODEP) + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp +@@ -37961,8 +37967,8 @@ + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@corelib_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(CORELIB_ODEP) + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp + +-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@corelib_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(CORELIB_ODEP) +-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp ++@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@corelib_osx_cocoa_overlay.o: $(srcdir)/src/osx/cocoa/overlay.mm $(CORELIB_ODEP) ++@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm + + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@corelib_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(CORELIB_ODEP) + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp + +=== modified file 'include/wx/overlay.h' +--- include/wx/overlay.h 2014-02-05 21:57:29 +0000 ++++ include/wx/overlay.h 2014-02-05 21:57:47 +0000 +@@ -13,7 +13,7 @@ + + #include "wx/defs.h" + +-#if defined(__WXMAC__) && wxOSX_USE_CARBON ++#if defined(__WXMAC__) && wxOSX_USE_COCOA_OR_CARBON + #define wxHAS_NATIVE_OVERLAY 1 + #elif defined(__WXDFB__) + #define wxHAS_NATIVE_OVERLAY 1 + +=== modified file 'include/wx/private/overlay.h' +--- include/wx/private/overlay.h 2014-02-05 21:57:29 +0000 ++++ include/wx/private/overlay.h 2014-02-05 21:57:47 +0000 +@@ -16,7 +16,11 @@ + #ifdef wxHAS_NATIVE_OVERLAY + + #if defined(__WXMAC__) ++#if wxOSX_USE_CARBON + #include "wx/osx/carbon/private/overlay.h" ++#else ++ #include "wx/osx/cocoa/private/overlay.h" ++#endif + #elif defined(__WXDFB__) + #include "wx/dfb/private/overlay.h" + #else + +=== modified file 'src/osx/cocoa/overlay.mm' +--- src/osx/cocoa/overlay.mm 2014-02-05 21:57:29 +0000 ++++ src/osx/cocoa/overlay.mm 2014-02-05 21:57:47 +0000 +@@ -34,6 +34,7 @@ + #include "wx/private/overlay.h" + + #ifdef wxHAS_NATIVE_OVERLAY ++#import + + // ============================================================================ + // implementation +@@ -58,48 +59,6 @@ + + void wxOverlayImpl::CreateOverlayWindow() + { +- if ( m_window ) +- { +- m_overlayParentWindow = m_window->MacGetTopLevelWindowRef(); +- [m_overlayParentWindow makeKeyAndOrderFront:nil]; +- +- NSView* view = m_window->GetHandle(); +- +- NSPoint viewOriginBase, viewOriginScreen; +- viewOriginBase = [view convertPoint:NSMakePoint(0, 0) toView:nil]; +- viewOriginScreen = [m_overlayParentWindow convertBaseToScreen:viewOriginBase]; +- +- NSSize viewSize = [view frame].size; +- if ( [view isFlipped] ) +- viewOriginScreen.y -= viewSize.height; +- +- m_overlayWindow=[[NSWindow alloc] initWithContentRect:NSMakeRect(viewOriginScreen.x,viewOriginScreen.y, +- viewSize.width, +- viewSize.height) +- styleMask:NSBorderlessWindowMask +- backing:NSBackingStoreBuffered +- defer:YES]; +- +- [m_overlayParentWindow addChildWindow:m_overlayWindow ordered:NSWindowAbove]; +- } +- else +- { +- m_overlayParentWindow = NULL ; +- CGRect cgbounds ; +- cgbounds = CGDisplayBounds(CGMainDisplayID()); +- +- m_overlayWindow=[[NSWindow alloc] initWithContentRect:NSMakeRect(cgbounds.origin.x,cgbounds.origin.y, +- cgbounds.size.width, +- cgbounds.size.height) +- styleMask:NSBorderlessWindowMask +- backing:NSBackingStoreBuffered +- defer:YES]; +- } +- [m_overlayWindow setOpaque:NO]; +- [m_overlayWindow setIgnoresMouseEvents:YES]; +- [m_overlayWindow setAlphaValue:1.0]; +- +- [m_overlayWindow orderFront:nil]; + } + + void wxOverlayImpl::Init( wxDC* dc, int x , int y , int width , int height ) +@@ -107,84 +66,50 @@ + wxASSERT_MSG( !IsOk() , _("You cannot Init an overlay twice") ); + + m_window = dc->GetWindow(); +- m_x = x ; +- m_y = y ; +- if ( dc->IsKindOf( CLASSINFO( wxClientDC ) )) +- { +- wxPoint origin = m_window->GetClientAreaOrigin(); +- m_x += origin.x; +- m_y += origin.y; +- } +- m_width = width ; +- m_height = height ; +- +- CreateOverlayWindow(); +- wxASSERT_MSG( m_overlayWindow != NULL , _("Couldn't create the overlay window") ); +- m_overlayContext = (CGContextRef) [[m_overlayWindow graphicsContext] graphicsPort]; +- wxASSERT_MSG( m_overlayContext != NULL , _("Couldn't init the context on the overlay window") ); +- +- int ySize = 0; +- if ( m_window ) +- { +- NSView* view = m_window->GetHandle(); +- NSSize viewSize = [view frame].size; +- ySize = viewSize.height; +- } +- else +- { +- CGRect cgbounds ; +- cgbounds = CGDisplayBounds(CGMainDisplayID()); +- ySize = cgbounds.size.height; +- +- +- +- } +- CGContextTranslateCTM( m_overlayContext, 0, ySize ); +- CGContextScaleCTM( m_overlayContext, 1, -1 ); +- CGContextTranslateCTM( m_overlayContext, -m_x , -m_y ); ++ m_overlayWindow = m_window->MacGetTopLevelWindowRef(); ++ ++ NSRect box = [m_overlayWindow frame]; ++ ++ if( [m_overlayWindow isVisible] ) ++ { ++ [m_overlayWindow discardCachedImage]; ++ [m_overlayWindow cacheImageInRect:box]; ++ } + } + + void wxOverlayImpl::BeginDrawing( wxDC* dc) + { +- wxDCImpl *impl = dc->GetImpl(); +- wxGCDCImpl *win_impl = wxDynamicCast(impl,wxGCDCImpl); +- if (win_impl) +- { +- win_impl->SetGraphicsContext( wxGraphicsContext::CreateFromNative( m_overlayContext ) ); +- dc->SetClippingRegion( m_x , m_y , m_width , m_height ) ; +- } ++ + } + + void wxOverlayImpl::EndDrawing( wxDC* dc) + { +- wxDCImpl *impl = dc->GetImpl(); +- wxGCDCImpl *win_impl = wxDynamicCast(impl,wxGCDCImpl); +- if (win_impl) +- win_impl->SetGraphicsContext(NULL); +- +- CGContextFlush( m_overlayContext ); + } + + void wxOverlayImpl::Clear(wxDC* WXUNUSED(dc)) + { + wxASSERT_MSG( IsOk() , _("You cannot Clear an overlay that is not inited") ); +- CGRect box = CGRectMake( m_x - 1, m_y - 1 , m_width + 2 , m_height + 2 ); +- CGContextClearRect( m_overlayContext, box ); ++ if( [m_overlayWindow isVisible] ) ++ { ++ [m_overlayWindow restoreCachedImage]; ++// [m_overlayWindow flushWindow]; ++ } + } + + void wxOverlayImpl::Reset() + { +- if ( m_overlayContext ) ++ if ( m_overlayContext) + { + m_overlayContext = NULL ; + } + + // todo : don't dispose, only hide and reposition on next run +- if (m_overlayWindow) ++ if (m_overlayWindow && [m_overlayWindow isVisible]) + { +- [m_overlayParentWindow removeChildWindow:m_overlayWindow]; +- [m_overlayWindow release]; +- m_overlayWindow = NULL ; ++ NSRect box = [m_overlayWindow frame]; ++ ++ [m_overlayWindow discardCachedImage]; ++ [m_overlayWindow cacheImageInRect:box]; + } + } + + diff --git a/patches/wxpython-3.0.0_macosx_multiarch.patch b/patches/wxpython-3.0.0_macosx_multiarch.patch new file mode 100644 index 0000000000..e8270251b7 --- /dev/null +++ b/patches/wxpython-3.0.0_macosx_multiarch.patch @@ -0,0 +1,25 @@ +=== modified file 'wxPython/config.py' +--- wxPython/config.py 2014-02-07 20:23:11 +0000 ++++ wxPython/config.py 2014-02-07 21:00:18 +0000 +@@ -22,6 +22,7 @@ + + import sys, os, glob, fnmatch, tempfile + import subprocess ++import re + + EGGing = 'bdist_egg' in sys.argv or 'egg_info' in sys.argv + if not EGGing: +@@ -1059,10 +1060,8 @@ + libs = ['stdc++'] + NO_SCRIPTS = 1 + if ARCH != "": +- cflags.append("-arch") +- cflags.append(ARCH) +- lflags.append("-arch") +- lflags.append(ARCH) ++ cflags.append('-arch ' + re.sub(',',' -arch ',ARCH)) ++ lflags.append('-arch ' + re.sub(',',' -arch ',ARCH)) + + if not os.environ.get('CC') or not os.environ.get('CXX'): + os.environ["CXX"] = getWxConfigValue('--cxx') + From 6f6a79407b77466bd6520194984d1320cc7487f4 Mon Sep 17 00:00:00 2001 From: Marco Serantoni Date: Sat, 8 Feb 2014 00:40:11 +0100 Subject: [PATCH 15/52] [MacOSX] Fixing qa, thanks Miguel Angel for the feedback --- CMakeLists.txt | 13 ++++++++++--- qa/CMakeLists.txt | 6 +++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e8a47a5b13..25e58e036a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -383,8 +383,6 @@ if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) endif() message(STATUS "SWIG_EXECUTABLE: ${SWIG_EXECUTABLE}") - set( PYTHON_EXECUTABLE /usr/bin/python2.6 ) - set( PYTHON_DEST ${LIBWXPYTHON_ROOT}/wxPython/lib/python2.6/site-packages ) set(wxWidgets_BIN_DIR ${LIBWXPYTHON_ROOT}/bin/wxrc ) @@ -504,7 +502,16 @@ set( INC_AFTER # Find Python and other scripting resources if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES ) - set( PythonInterp_FIND_VERSION ) + + if( NOT APPLE ) + set( PythonInterp_FIND_VERSION ) + else() + set( PYTHON_LIBRARY /System/Library/Frameworks/Python.framework/Versions/2.6/Python ) + set( PYTHON_INCLUDE_DIR /System/Library/Frameworks/Python.framework/Versions//2.6/include/python2.6 ) + set( PythonInterp_FIND_VERSION 2.6 ) + set( PythonLibs_FIND_VERSION 2.6 ) + endif() + find_package( PythonInterp ) check_find_package_result( PYTHONINTERP_FOUND "Python Interpreter" ) diff --git a/qa/CMakeLists.txt b/qa/CMakeLists.txt index 783987f585..796575d288 100644 --- a/qa/CMakeLists.txt +++ b/qa/CMakeLists.txt @@ -1,8 +1,12 @@ if( KICAD_SCRIPTING_MODULES ) + if( APPLE AND ( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) ) + set( PYTHON_QA_PATH :${LIBWXPYTHON_ROOT}/wxPython/lib/python2.6/site-packages ) + endif() + # build target that runs the QA tests through scripting add_custom_target( qa - COMMAND PYTHONPATH=${CMAKE_BINARY_DIR}/pcbnew ${PYTHON_EXECUTABLE} test.py + COMMAND PYTHONPATH=${CMAKE_BINARY_DIR}/pcbnew${PYTHON_QA_PATH} ${PYTHON_EXECUTABLE} test.py COMMENT "running qa" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} From 669912ea9b24616cd50ddb62eb01728bcf26410b Mon Sep 17 00:00:00 2001 From: Miguel Angel Ajo Date: Sat, 8 Feb 2014 01:02:29 +0100 Subject: [PATCH 16/52] More BOARD unit tests --- qa/testcases/test_002_board_class.py | 69 +++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 11 deletions(-) diff --git a/qa/testcases/test_002_board_class.py b/qa/testcases/test_002_board_class.py index 230214ea6f..c9897e97f2 100644 --- a/qa/testcases/test_002_board_class.py +++ b/qa/testcases/test_002_board_class.py @@ -3,29 +3,76 @@ import unittest import pcbnew import pdb -from pcbnew import ToMM +from pcbnew import * class TestBoardClass(unittest.TestCase): def setUp(self): - self.pcb = pcbnew.LoadBoard("data/complex_hierarchy.kicad_pcb") - + self.pcb = LoadBoard("data/complex_hierarchy.kicad_pcb") + def test_pcb_find_module(self): module = self.pcb.FindModule('P1') self.assertEqual(module.GetReference(),'P1') + def test_pcb_get_track_count(self): + pcb = BOARD() + + self.assertEqual(pcb.GetNumSegmTrack(),0) + + track0 = TRACK(pcb) + pcb.Add(track0) + self.assertEqual(pcb.GetNumSegmTrack(),1) + + track1 = TRACK(pcb) + pcb.Add(track1) + self.assertEqual(pcb.GetNumSegmTrack(),2) + def test_pcb_bounding_box(self): - bounding_box = self.pcb.ComputeBoundingBox() + pcb = BOARD() + track = TRACK(pcb) + pcb.Add(track) + + #track.SetStartEnd(wxPointMM(10.0, 10.0), + # wxPointMM(20.0, 30.0)) - height = ToMM( bounding_box.GetHeight() ) - width = ToMM( bounding_box.GetWidth() ) + track.SetStart(wxPointMM(10.0, 10.0)) + track.SetEnd(wxPointMM(20.0, 30.0)) - # probably it's a cleaner test to generate a board with - # a couple of things, that we can know the exact size, - # and then compute the bounding box, + track.SetWidth(FromMM(0.5)) - self.assertAlmostEqual(height, 89.52, 2) - self.assertAlmostEqual(width, 108.44, 2) + #!!! THIS FAILS? == 0.0 x 0.0 ?? + #height, width = ToMM(pcb.ComputeBoundingBox().GetSize()) + bounding_box = pcb.ComputeBoundingBox() + height, width = ToMM(bounding_box.GetSize()) + + self.assertAlmostEqual(width, (30-10) + 0.5, 2) + self.assertAlmostEqual(height, (20-10) + 0.5, 2) + + def test_pcb_get_pad(self): + pcb = BOARD() + module = MODULE(pcb) + pcb.Add(module) + pad = D_PAD(module) + module.Add(pad) + + pad.SetShape(PAD_OVAL) + pad.SetSize(wxSizeMM(2.0, 3.0)) + pad.SetPosition(wxPointMM(0,0)) + + # easy case + p1 = pcb.GetPad(wxPointMM(0,0)) + + # top side + p2 = pcb.GetPad(wxPointMM(0.9,0.0)) + + # bottom side + p3 = pcb.GetPad(wxPointMM(0,1.4)) + + # TODO: get pad == p1 evaluated as true instead + # of relying in the internal C++ object pointer + self.assertEqual(pad.this, p1.this) + self.assertEqual(pad.this, p2.this) + self.assertEqual(pad.this, p3.this) #def test_interactive(self): # code.interact(local=locals()) From 42aeed5421345f26453005cfcaddd149dc3e9dd4 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Sat, 8 Feb 2014 08:42:41 +0100 Subject: [PATCH 17/52] main CMakeLists: build lib-wxpython only if KICAD_SCRIPTING_WXPYTHON is ON --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 25e58e036a..b653827b17 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -341,6 +341,7 @@ add_definitions(-DWX_COMPATIBILITY) find_package( OpenGL QUIET ) check_find_package_result( OPENGL_FOUND "OpenGL" ) +if( KICAD_SCRIPTING_WXPYTHON ) add_custom_target( lib-wxpython ) include( download_pcre ) include( download_swig ) @@ -348,6 +349,7 @@ add_custom_target( lib-wxpython ) add_dependencies( lib-wxpython pcre ) add_dependencies( lib-wxpython swig ) add_dependencies( lib-wxpython libwxpython ) +endif() if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) @@ -387,7 +389,7 @@ if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) set(wxWidgets_BIN_DIR ${LIBWXPYTHON_ROOT}/bin/wxrc ) set(wxWidgets_CONFIG_EXECUTABLE ${LIBWXPYTHON_ROOT}/bin/wx-config ) - set(wxWidgets_INCLUDE_DIRS ${LIBWXPYTHON_ROOT}/include/wx-3.0 ) + set(wxWidgets_INCLUDE_DIRS ${LIBWXPYTHON_ROOT}/include/wx-3.0 ) set(wxWidgets_LIBRARY_DIRS ${LIBWXPYTHON_ROOT}/lib ) add_dependencies( lib-dependencies libwxpython ) @@ -503,7 +505,7 @@ set( INC_AFTER # Find Python and other scripting resources if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES ) - if( NOT APPLE ) + if( NOT APPLE ) set( PythonInterp_FIND_VERSION ) else() set( PYTHON_LIBRARY /System/Library/Frameworks/Python.framework/Versions/2.6/Python ) From 0c615f78a15ba05880bd048208857990c9817b03 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Sat, 8 Feb 2014 11:44:55 +0100 Subject: [PATCH 18/52] Add the environment variable KYSYS3DMOD to define a default path for 3D models. --- 3d-viewer/3d_read_mesh.cpp | 36 ++++++++++++++++- 3d-viewer/3d_struct.h | 8 ++++ 3d-viewer/3d_viewer.h | 3 ++ common/edaappl.cpp | 66 ++++++++++++++++++++++++++++++++ cvpcb/cvpcb.cpp | 4 ++ include/appl_wxstruct.h | 20 ++++++++++ pcbnew/exporters/export_vrml.cpp | 3 +- pcbnew/pcbnew.cpp | 10 +++-- 8 files changed, 143 insertions(+), 7 deletions(-) diff --git a/3d-viewer/3d_read_mesh.cpp b/3d-viewer/3d_read_mesh.cpp index 24046f9e9c..1863b339b2 100644 --- a/3d-viewer/3d_read_mesh.cpp +++ b/3d-viewer/3d_read_mesh.cpp @@ -59,6 +59,39 @@ S3D_MODEL_PARSER* S3D_MODEL_PARSER::Create( S3D_MASTER* aMaster, } } +const wxString S3D_MASTER::GetShape3DFullFilename() +{ + + wxString shapeName; + + // Expand any environment variables embedded in footprint's m_Shape3DName field. + // To ensure compatibility with most of footprint's m_Shape3DName field, + // if the m_Shape3DName is not an absolute path the default path + // given by the environment variable KISYS3DMOD will be used + + if( m_Shape3DName.StartsWith( wxT("${") ) ) + shapeName = wxExpandEnvVars( m_Shape3DName ); + else + shapeName = m_Shape3DName; + + wxFileName fn( shapeName ); + + if( fn.IsAbsolute() || shapeName.StartsWith( wxT(".") ) ) + return shapeName; + + wxString default_path; + wxGetEnv( wxT( KISYS3DMOD ), &default_path ); + + if( default_path.IsEmpty() ) + return shapeName; + + if( !default_path.EndsWith( wxT("/") ) && !default_path.EndsWith( wxT("\\") ) ) + default_path += wxT("/"); + + default_path += shapeName; + + return default_path; +} int S3D_MASTER::ReadData() { @@ -67,8 +100,7 @@ int S3D_MASTER::ReadData() return 1; } - // Expand any environment variables embedded in footprint's m_Shape3DName field. - wxString filename = wxExpandEnvVars( m_Shape3DName ); + wxString filename = GetShape3DFullFilename(); #ifdef __WINDOWS__ filename.Replace( wxT( "/" ), wxT( "\\" ) ); diff --git a/3d-viewer/3d_struct.h b/3d-viewer/3d_struct.h index ebbe54e874..d53327f7e9 100644 --- a/3d-viewer/3d_struct.h +++ b/3d-viewer/3d_struct.h @@ -144,6 +144,14 @@ public: return m_Shape3DName; } + /** + * Function GetShape3DFullFilename + * @return the full filename of the 3D shape, + * expanding environment variable (if any ) and/or adding default 3D path + * given by environment variable KISYS3DMOD + */ + const wxString GetShape3DFullFilename(); + void SetShape3DName( const wxString& aShapeName ); }; diff --git a/3d-viewer/3d_viewer.h b/3d-viewer/3d_viewer.h index 24d76d6aa7..dc94f933ef 100644 --- a/3d-viewer/3d_viewer.h +++ b/3d-viewer/3d_viewer.h @@ -48,6 +48,9 @@ # include #endif + +#define KISYS3DMOD "KISYS3DMOD" + #include <3d_struct.h> class EDA_3D_CANVAS; diff --git a/common/edaappl.cpp b/common/edaappl.cpp index d01535c76c..c3595b0f8b 100644 --- a/common/edaappl.cpp +++ b/common/edaappl.cpp @@ -1196,3 +1196,69 @@ bool EDA_APP::SetFootprintLibTablePath() return false; } +/** + * Function Set3DShapesPath + * attempts set the environment variable given by aKiSys3Dmod to a valid path. + * (typically "KISYS3DMOD" ) + * If the environment variable is already set, + * then it left as is to respect the wishes of the user. + * + * The path is determined by attempting to find the path modules/packages3d + * files in kicad tree. + * This may or may not be the best path but it provides the best solution for + * backwards compatibility with the previous 3D shapes search path implementation. + * + * @note This must be called after #SetBinDir() is called at least on Windows. + * Otherwise, the kicad path is not known (Windows specific) + * + * @param aKiSys3Dmod = the value of environment variable, typically "KISYS3DMOD" + * @return false if the aKiSys3Dmod path is not valid. + */ +bool EDA_APP::Set3DShapesPath( const wxString& aKiSys3Dmod ) +{ + wxString path; + + // Set the KISYS3DMOD environment variable for the current process, + // if it is not already defined in the user's environment and valid. + if( wxGetEnv( aKiSys3Dmod, &path ) && wxFileName::DirExists( path ) ) + return true; + + // Attempt to determine where the 3D shape libraries were installed using the + // legacy path: + // on Unix: /usr/local/kicad/share/modules/packages3d + // or /usr/share/kicad/modules/packages3d + // On Windows: bin../share/modules/packages3d + wxString relpath( wxT( "modules/packages3d" ) ); + +// Apple MacOSx +#ifdef __APPLE__ + // TO DO + +#elif defined(__UNIX__) // Linux and non-Apple Unix + path = wxT("/usr/local/kicad/share/") + relpath; + if( wxFileName::DirExists( path ) ) + { + wxSetEnv( aKiSys3Dmod, path ); + return true; + } + + path = wxT("/usr/share/kicad/") + relpath; + if( wxFileName::DirExists( path ) ) + { + wxSetEnv( aKiSys3Dmod, path ); + return true; + } + +#else // Windows + path = m_BinDir + wxT("../share/") + relpath; + + if( wxFileName::DirExists( path ) ) + { + wxSetEnv( aKiSys3Dmod, path ); + return true; + } +#endif + + return false; +} + diff --git a/cvpcb/cvpcb.cpp b/cvpcb/cvpcb.cpp index 84a1ae8b73..b2f307fb32 100644 --- a/cvpcb/cvpcb.cpp +++ b/cvpcb/cvpcb.cpp @@ -33,6 +33,7 @@ #include #include +#include <3d_viewer.h> #include #include #include @@ -102,6 +103,9 @@ bool EDA_APP::OnInit() SetFootprintLibTablePath(); + // Set 3D shape path from environment variable KISYS3DMOD + Set3DShapesPath( wxT(KISYS3DMOD) ); + if( m_Checker && m_Checker->IsAnotherRunning() ) { if( !IsOK( NULL, _( "CvPcb is already running, Continue?" ) ) ) diff --git a/include/appl_wxstruct.h b/include/appl_wxstruct.h index a4305a4d28..afb2b91ed8 100644 --- a/include/appl_wxstruct.h +++ b/include/appl_wxstruct.h @@ -456,6 +456,26 @@ public: */ bool SetFootprintLibTablePath(); + /** + * Function Set3DShapesPath + * attempts set the environment variable given by aKiSys3Dmod to a valid path. + * (typically "KISYS3DMOD" ) + * If the environment variable is already set, + * then it left as is to respect the wishes of the user. + * + * The path is determined by attempting to find the path modules/packages3d + * files in kicad tree. + * This may or may not be the best path but it provides the best solution for + * backwards compatibility with the previous 3D shapes search path implementation. + * + * @note This must be called after #SetBinDir() is called at least on Windows. + * Otherwise, the kicad path is not known (Windows specific) + * + * @param aKiSys3Dmod = the value of environment variable, typically "KISYS3DMOD" + * @return false if the aKiSys3Dmod path is not valid. + */ + bool Set3DShapesPath( const wxString& aKiSys3Dmod ); + const wxString& GetModuleLibraryNickname() { return m_module_nickname; } void SetModuleLibraryNickname( const wxString& aNickname ) { m_module_nickname = aNickname; } }; diff --git a/pcbnew/exporters/export_vrml.cpp b/pcbnew/exporters/export_vrml.cpp index 9002657d19..83965bfbf5 100644 --- a/pcbnew/exporters/export_vrml.cpp +++ b/pcbnew/exporters/export_vrml.cpp @@ -1154,8 +1154,7 @@ static void export_vrml_module( MODEL_VRML& aModel, BOARD* aPcb, MODULE* aModule if( !vrmlm->Is3DType( S3D_MASTER::FILE3D_VRML ) ) continue; - // expand environment variables - wxString fname = wxExpandEnvVars( vrmlm->GetShape3DName() ); + wxString fname = vrmlm->GetShape3DFullFilename(); fname.Replace( wxT( "\\" ), wxT( "/" ) ); wxString source_fname = fname; diff --git a/pcbnew/pcbnew.cpp b/pcbnew/pcbnew.cpp index 2d695c8f44..49cae3dea4 100644 --- a/pcbnew/pcbnew.cpp +++ b/pcbnew/pcbnew.cpp @@ -42,6 +42,7 @@ #include #include #include +#include <3d_viewer.h> #include #include @@ -168,10 +169,10 @@ bool EDA_APP::OnInit() bundledir.RemoveLastDir(); // Prepend in PYTHONPATH the content of the bundle libraries ! - wxSetEnv("PYTHONPATH",((wxGetenv("PYTHONPATH") != NULL ) ? (wxString(wxGetenv("PYTHONPATH")) + ":") : wxString("")) - + bundledir.GetPath() + + wxSetEnv("PYTHONPATH",((wxGetenv("PYTHONPATH") != NULL ) ? (wxString(wxGetenv("PYTHONPATH")) + ":") : wxString("")) + + bundledir.GetPath() + "/Frameworks/wxPython/lib/python2.6/site-packages/wx-3.0-osx_cocoa" ); -#endif +#endif #endif // On linux and osx, 2 others paths are // [HOME]/.kicad_plugins/ @@ -233,6 +234,9 @@ bool EDA_APP::OnInit() // Set any environment variables before loading FP_LIB_TABLE SetFootprintLibTablePath(); + // Set 3D shape path from environment variable KISYS3DMOD + Set3DShapesPath( wxT(KISYS3DMOD) ); + frame = new PCB_EDIT_FRAME( NULL, wxT( "Pcbnew" ), wxPoint( 0, 0 ), wxSize( 600, 400 ) ); #ifdef KICAD_SCRIPTING From 1cacfffd5f8db9b7e0f78220961586d935c61758 Mon Sep 17 00:00:00 2001 From: Marco Serantoni Date: Sat, 8 Feb 2014 16:15:06 +0100 Subject: [PATCH 19/52] [MacOSX] Fixing build system, sorry guys, refining build system and make building smoother. --- CMakeLists.txt | 6 +++--- CMakeModules/download_swig.cmake | 6 ++++-- CMakeModules/download_wxpython.cmake | 2 +- Documentation/compiling/mac-osx.txt | 7 +++++-- patches/wxpython-3.0.0_macosx_multiarch.patch | 8 ++++---- pcbnew/CMakeLists.txt | 2 +- tools/Info.plist | 0 7 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 tools/Info.plist diff --git a/CMakeLists.txt b/CMakeLists.txt index b653827b17..25042ed729 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -341,7 +341,9 @@ add_definitions(-DWX_COMPATIBILITY) find_package( OpenGL QUIET ) check_find_package_result( OPENGL_FOUND "OpenGL" ) -if( KICAD_SCRIPTING_WXPYTHON ) + +if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) + add_custom_target( lib-wxpython ) include( download_pcre ) include( download_swig ) @@ -349,9 +351,7 @@ add_custom_target( lib-wxpython ) add_dependencies( lib-wxpython pcre ) add_dependencies( lib-wxpython swig ) add_dependencies( lib-wxpython libwxpython ) -endif() -if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) #set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so;.dylib;.dll") diff --git a/CMakeModules/download_swig.cmake b/CMakeModules/download_swig.cmake index 7ee8a4ebc6..e72918e89f 100644 --- a/CMakeModules/download_swig.cmake +++ b/CMakeModules/download_swig.cmake @@ -42,8 +42,10 @@ if (APPLE) set( SWIG_CFLAGS "CFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" ) set( SWIG_CXXFLAGS "CXXFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" ) set( SWIG_LDFLAGS "LDFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" ) - set( SWIG_PYTHON "--with-python=/usr/bin/python2.6" ) endif( CMAKE_OSX_ARCHITECTURES ) + + set( SWIG_PYTHON "--with-python=/usr/bin/python2.6" ) + set( SWIG_OPTS --disable-dependency-tracking ) endif(APPLE) # = ${PREFIX}/src/glew @@ -66,7 +68,7 @@ ExternalProject_Add( swig UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${SWIG_ROOT}" #PATCH_COMMAND "true" - CONFIGURE_COMMAND ./configure --prefix=${SWIG_ROOT} --with-pcre-prefix=${PCRE_ROOT} ${SWIG_CFLAGS} ${SWIG_LDFLAGS} ${SWIG_CXXFLAGS} ${SWIG_PYTHON} + CONFIGURE_COMMAND ./configure --prefix=${SWIG_ROOT} --with-pcre-prefix=${PCRE_ROOT} ${SWIG_CFLAGS} ${SWIG_LDFLAGS} ${SWIG_CXXFLAGS} ${SWIG_PYTHON} ${SWIG_OPTS} #BINARY_DIR "${PREFIX}" diff --git a/CMakeModules/download_wxpython.cmake b/CMakeModules/download_wxpython.cmake index 60225b40f4..4e1a71f688 100644 --- a/CMakeModules/download_wxpython.cmake +++ b/CMakeModules/download_wxpython.cmake @@ -74,7 +74,7 @@ ExternalProject_Add( libwxpython UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${LIBWXPYTHON_ROOT}" COMMAND ${LIBWXPYTHON_EXEC} wxPython/build-wxpython.py --clean - CONFIGURE_COMMAND ${LIBWXPYTHON_EXEC} wxPython/build-wxpython.py --prefix=/Users/marco/Development/product/libwxpython_root --unicode --install ${LIBWXPYTHON_OPTS} + CONFIGURE_COMMAND ${LIBWXPYTHON_EXEC} wxPython/build-wxpython.py --prefix=${LIBWXPYTHON_ROOT} --unicode --install ${LIBWXPYTHON_OPTS} #BINARY_DIR "${PREFIX}" diff --git a/Documentation/compiling/mac-osx.txt b/Documentation/compiling/mac-osx.txt index ac606ff3c5..cb24f9632d 100644 --- a/Documentation/compiling/mac-osx.txt +++ b/Documentation/compiling/mac-osx.txt @@ -27,18 +27,21 @@ Building Kicad with no support for Scripting If you set KICAD_BUILD_DYNAMIC the building system will build all and include the needed libraries for each executable in its bundle + cmake -DKICAD_BUILD_DYNAMIC=ON . + make + Building Kicad with support for Scripting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Due some problems with some dependencies the build of this kind of binary is a bit more complex, you should initially set KICAD_BUILD_DYNAMIC then issue for example - cmake -DKICAD_BUILD_DYNAMIC=ON + cmake -DKICAD_BUILD_DYNAMIC=ON . make lib-wxpython After successfully building you can set your KICAD_SCRIPTING* options (for example): - cmake -DKICAD_SCRIPTING=ON -DKICAD_SCRIPTING_WXPYTHON=ON + cmake -DKICAD_SCRIPTING=ON -DKICAD_SCRIPTING_WXPYTHON=ON . make The system will build all accordling your choices and package all in the bundle diff --git a/patches/wxpython-3.0.0_macosx_multiarch.patch b/patches/wxpython-3.0.0_macosx_multiarch.patch index e8270251b7..d3b70dd0ec 100644 --- a/patches/wxpython-3.0.0_macosx_multiarch.patch +++ b/patches/wxpython-3.0.0_macosx_multiarch.patch @@ -1,6 +1,6 @@ === modified file 'wxPython/config.py' ---- wxPython/config.py 2014-02-07 20:23:11 +0000 -+++ wxPython/config.py 2014-02-07 21:00:18 +0000 +--- wxPython/config.py 2014-02-08 12:23:31 +0000 ++++ wxPython/config.py 2014-02-08 13:58:07 +0000 @@ -22,6 +22,7 @@ import sys, os, glob, fnmatch, tempfile @@ -17,8 +17,8 @@ - cflags.append(ARCH) - lflags.append("-arch") - lflags.append(ARCH) -+ cflags.append('-arch ' + re.sub(',',' -arch ',ARCH)) -+ lflags.append('-arch ' + re.sub(',',' -arch ',ARCH)) ++ cflags.append("-arch " + re.sub(","," -arch ",ARCH)) ++ #lflags.append("-arch " + re.sub(","," -arch ",ARCH)) if not os.environ.get('CC') or not os.environ.get('CXX'): os.environ["CXX"] = getWxConfigValue('--cxx') diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index e486d013d9..c1cf74bd32 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -598,7 +598,7 @@ if( KICAD_SCRIPTING ) # copies all into PYTHON_DEST then all into the bundle ! add_custom_target( _pcbnew_py_copy ALL COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/pcbnew/pcbnew.py "${PYTHON_DEST}" - DEPENDS FixSwigImportsModuleScripting + DEPENDS FixSwigImportsScripting COMMENT "Copying pcbnew.py into PYTHON_DEST" ) diff --git a/tools/Info.plist b/tools/Info.plist new file mode 100644 index 0000000000..e69de29bb2 From a4fe76d2a7de14e5e2d5830e21e71d19197d8698 Mon Sep 17 00:00:00 2001 From: Marco Serantoni Date: Sat, 8 Feb 2014 18:33:21 +0100 Subject: [PATCH 20/52] [MacOSX] Setting Set3DShapesPath --- common/edaappl.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/common/edaappl.cpp b/common/edaappl.cpp index c3595b0f8b..c4780b49f3 100644 --- a/common/edaappl.cpp +++ b/common/edaappl.cpp @@ -1231,8 +1231,22 @@ bool EDA_APP::Set3DShapesPath( const wxString& aKiSys3Dmod ) wxString relpath( wxT( "modules/packages3d" ) ); // Apple MacOSx -#ifdef __APPLE__ - // TO DO +#ifdef __WXMAC__ + path = wxT("/Library/Application Support/kicad/modules/packages3d/"); + + if( wxFileName::DirExists( path ) ) + { + wxSetEnv( aKiSys3Dmod, path ); + return true; + } + + path = wxString( wxGetenv( wxT( "HOME" ) ) ) + wxT("/Library/Application Support/kicad/modules/packages3d/"); + + if( wxFileName::DirExists( path ) ) + { + wxSetEnv( aKiSys3Dmod, path ); + return true; + } #elif defined(__UNIX__) // Linux and non-Apple Unix path = wxT("/usr/local/kicad/share/") + relpath; From 373a5b5bb70fdf6ab91daf56894ce560e930ed33 Mon Sep 17 00:00:00 2001 From: Miguel Angel Ajo Date: Sun, 9 Feb 2014 00:21:47 +0100 Subject: [PATCH 21/52] BOARD saving test --- pcbnew/scripting/tests/testLoadSave.py | 29 -------------------------- qa/testcases/test_002_board_class.py | 22 +++++++++++++++++++ scripting/kicad.i | 2 +- 3 files changed, 23 insertions(+), 30 deletions(-) delete mode 100644 pcbnew/scripting/tests/testLoadSave.py diff --git a/pcbnew/scripting/tests/testLoadSave.py b/pcbnew/scripting/tests/testLoadSave.py deleted file mode 100644 index d8d9649a38..0000000000 --- a/pcbnew/scripting/tests/testLoadSave.py +++ /dev/null @@ -1,29 +0,0 @@ -from pcbnew import * -import unittest - -class TestLoadSave(unittest.TestCase): - - def setUp(self): - self.TITLE="Test Board" - self.COMMENT1="For load/save test" - self.FILENAME="/tmp/test.brd" - - def test_00_save(self): - pcb = BOARD() - pcb.GetTitleBlock().SetTitle(self.TITLE) - pcb.GetTitleBlock().SetComment1(self.COMMENT1) - result = SaveBoard(self.FILENAME,pcb) - self.assertTrue(result) - - def test_01_load(self): - pcb2 = LoadBoard(self.FILENAME) - self.assertIsNotNone(pcb2) - - def test_02_titleblock_ok(self): - pcb2 = LoadBoard(self.FILENAME) - tb = pcb2.GetTitleBlock() - self.assertEqual(tb.GetTitle(),self.TITLE) - self.assertEqual(tb.GetComment1(),self.COMMENT1) - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/qa/testcases/test_002_board_class.py b/qa/testcases/test_002_board_class.py index c9897e97f2..79773ba0c3 100644 --- a/qa/testcases/test_002_board_class.py +++ b/qa/testcases/test_002_board_class.py @@ -1,7 +1,10 @@ import code import unittest +import os import pcbnew import pdb +import tempfile + from pcbnew import * @@ -9,6 +12,9 @@ class TestBoardClass(unittest.TestCase): def setUp(self): self.pcb = LoadBoard("data/complex_hierarchy.kicad_pcb") + self.TITLE="Test Board" + self.COMMENT1="For load/save test" + self.FILENAME=tempfile.mktemp()+".kicad_pcb" def test_pcb_find_module(self): module = self.pcb.FindModule('P1') @@ -74,6 +80,22 @@ class TestBoardClass(unittest.TestCase): self.assertEqual(pad.this, p2.this) self.assertEqual(pad.this, p3.this) + def test_pcb_save_and_load(self): + pcb = BOARD() + pcb.GetTitleBlock().SetTitle(self.TITLE) + pcb.GetTitleBlock().SetComment1(self.COMMENT1) + result = SaveBoard(self.FILENAME,pcb) + self.assertTrue(result) + + pcb2 = LoadBoard(self.FILENAME) + self.assertIsNotNone(pcb2) + + tb = pcb2.GetTitleBlock() + self.assertEqual(tb.GetTitle(),self.TITLE) + self.assertEqual(tb.GetComment1(),self.COMMENT1) + + os.remove(self.FILENAME) + #def test_interactive(self): # code.interact(local=locals()) diff --git a/scripting/kicad.i b/scripting/kicad.i index 5887886204..451f541417 100644 --- a/scripting/kicad.i +++ b/scripting/kicad.i @@ -66,7 +66,7 @@ #include #include #include - #include + #include #include #include From 2451de0e1b72e1f744137cc2fcce30434b8a8244 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Sun, 9 Feb 2014 21:06:05 +0100 Subject: [PATCH 22/52] Cosmetic enhancement: better icon for bitmap2component. --- bitmaps_png/cpp_26/image.cpp | 144 +- bitmaps_png/cpp_48/icon_bitmap2component.cpp | 412 ++-- bitmaps_png/icons/icon_bitmap2component.ico | Bin 103478 -> 3262 bytes bitmaps_png/sources/icon_bitmap2component.svg | 1746 ++++++++++++----- bitmaps_png/sources/image.svg | 1488 +++++++------- 5 files changed, 2213 insertions(+), 1577 deletions(-) diff --git a/bitmaps_png/cpp_26/image.cpp b/bitmaps_png/cpp_26/image.cpp index 967f38ae4d..72f3c8bc83 100644 --- a/bitmaps_png/cpp_26/image.cpp +++ b/bitmaps_png/cpp_26/image.cpp @@ -8,84 +8,72 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, - 0xce, 0x00, 0x00, 0x04, 0xba, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0xcf, 0x6f, 0x54, - 0x55, 0x14, 0xc7, 0x3f, 0xf7, 0xcd, 0x9b, 0x9f, 0x9d, 0x96, 0x29, 0x9d, 0x99, 0x76, 0x86, 0x52, - 0x09, 0xa5, 0x50, 0xa0, 0x88, 0x8a, 0x89, 0x88, 0xa2, 0xd5, 0x0d, 0xa2, 0x22, 0x1b, 0x15, 0xf7, - 0xc6, 0x85, 0xd1, 0xb8, 0x72, 0x61, 0xe2, 0x46, 0x37, 0x12, 0xff, 0x01, 0x59, 0xb0, 0x30, 0x24, - 0x2e, 0x8c, 0x86, 0xc4, 0x68, 0xfc, 0x81, 0x0b, 0xa9, 0x91, 0x5f, 0x89, 0x18, 0x02, 0x48, 0x11, - 0x69, 0x4b, 0x29, 0xb4, 0x9d, 0xb6, 0xd0, 0x99, 0x32, 0xd3, 0xf7, 0xeb, 0xde, 0xfb, 0xae, 0x8b, - 0x19, 0x60, 0x08, 0xd5, 0x05, 0x31, 0x2c, 0x8c, 0xe7, 0xe5, 0x2e, 0xee, 0xb9, 0x79, 0xe7, 0x7b, - 0xce, 0xbb, 0xe7, 0xfb, 0x3d, 0x4f, 0x18, 0x63, 0xb8, 0x1f, 0x66, 0x71, 0x9f, 0xec, 0x7f, 0xa0, - 0x7b, 0x36, 0x31, 0x38, 0x38, 0x68, 0xb7, 0x76, 0x74, 0xbc, 0x18, 0x6a, 0xfd, 0x48, 0xf3, 0xc1, - 0xa3, 0x5b, 0xb6, 0xac, 0xcd, 0xe7, 0x72, 0xdd, 0xb3, 0x33, 0x33, 0x13, 0x27, 0x4f, 0x9d, 0x1a, - 0xb9, 0xe7, 0x4a, 0x22, 0x91, 0xd3, 0x85, 0x8e, 0x8e, 0xaf, 0xed, 0xc2, 0xca, 0x07, 0xbe, 0x94, - 0x81, 0xbf, 0x43, 0x47, 0x22, 0x49, 0x81, 0x00, 0x20, 0x12, 0x89, 0xf0, 0xf0, 0xa6, 0x4d, 0x78, - 0x9e, 0x47, 0xb1, 0xab, 0xeb, 0x89, 0xb3, 0xe7, 0xce, 0x23, 0xfe, 0xae, 0x76, 0x73, 0xe7, 0xc6, - 0x34, 0xf9, 0x0c, 0x06, 0xcb, 0x8a, 0x78, 0x55, 0xd7, 0xfb, 0xc9, 0xce, 0x64, 0x32, 0xeb, 0x9f, - 0x7f, 0x6e, 0x47, 0x32, 0xdb, 0x91, 0x05, 0x01, 0x02, 0x70, 0x5d, 0x8f, 0xb1, 0x89, 0x71, 0x26, - 0xaf, 0x5c, 0xa5, 0xbb, 0xbb, 0x9b, 0x77, 0xde, 0x7e, 0x8b, 0x54, 0x32, 0x89, 0x10, 0xe2, 0x56, - 0xc8, 0x30, 0xd4, 0x94, 0x66, 0x4a, 0xb4, 0xb5, 0xb6, 0x91, 0x4a, 0xb5, 0xd4, 0xc3, 0x9a, 0x26, - 0x6c, 0x63, 0xc0, 0x18, 0xe6, 0xcb, 0xe5, 0xc4, 0xf7, 0x87, 0x0e, 0xad, 0xb3, 0x37, 0x0d, 0x6c, - 0x48, 0x3f, 0xb9, 0x6d, 0x2b, 0x4a, 0xa9, 0x3b, 0x12, 0x1d, 0xd8, 0xd8, 0xcf, 0x52, 0x1c, 0x5b, - 0xb8, 0xb1, 0x40, 0xba, 0x25, 0xcd, 0xd0, 0xcf, 0x87, 0x39, 0xf0, 0xd9, 0xe7, 0x3c, 0xb5, 0x7d, - 0x1b, 0x7b, 0x5e, 0x7e, 0x05, 0x21, 0xc0, 0x18, 0x41, 0x2c, 0x16, 0x43, 0x6b, 0x8d, 0xd6, 0x0a, - 0x29, 0x15, 0xb9, 0x5c, 0x96, 0x99, 0xb9, 0xd9, 0xb4, 0x1d, 0x8f, 0x27, 0x2c, 0xc7, 0x59, 0x44, - 0x29, 0xb5, 0x64, 0xe0, 0x66, 0xd7, 0xe2, 0xe2, 0x22, 0xfb, 0xf6, 0xef, 0xe7, 0x85, 0x9d, 0x3b, - 0x69, 0x49, 0xa7, 0x59, 0x96, 0x59, 0x46, 0x76, 0x79, 0x96, 0x4b, 0x97, 0xc6, 0x68, 0x6d, 0x6b, - 0xa5, 0xb3, 0xb3, 0x13, 0xa9, 0x1d, 0x2c, 0x21, 0xc0, 0xd2, 0x58, 0x11, 0x8d, 0x65, 0x45, 0x88, - 0x27, 0xe2, 0x96, 0x6d, 0x47, 0x23, 0xc6, 0x71, 0x5d, 0xa4, 0x94, 0xff, 0xf0, 0xed, 0xeb, 0x76, - 0xed, 0xfa, 0x75, 0x76, 0xef, 0xda, 0x45, 0x32, 0x11, 0x23, 0x91, 0x58, 0xce, 0x9b, 0x6f, 0xbc, - 0xce, 0xd4, 0xd4, 0x34, 0xe5, 0x85, 0x05, 0xf2, 0x9d, 0x5d, 0x0c, 0x0f, 0x9f, 0xa7, 0xa7, 0x67, - 0x25, 0xe3, 0xe3, 0x13, 0xf4, 0xf4, 0xf4, 0x20, 0x84, 0x40, 0xdb, 0x0a, 0x5b, 0x58, 0xc6, 0x56, - 0x81, 0xc4, 0xf3, 0x3c, 0x82, 0x20, 0x58, 0xba, 0xa2, 0x46, 0x83, 0xf8, 0xbe, 0x4f, 0xa5, 0x52, - 0x61, 0x4d, 0xef, 0x6a, 0x4a, 0xa5, 0x69, 0x0e, 0x1e, 0xfc, 0x0a, 0x15, 0x2a, 0x04, 0x10, 0x89, - 0xd8, 0x0c, 0x0d, 0x0d, 0xf1, 0xd0, 0xe6, 0xcd, 0xf4, 0xf7, 0xf7, 0xb3, 0xa2, 0xb8, 0x82, 0xb1, - 0xd1, 0x31, 0x0a, 0xc5, 0x02, 0xd1, 0x68, 0x14, 0x5f, 0x06, 0x58, 0x81, 0x92, 0xc6, 0x75, 0x5c, - 0x1c, 0xc7, 0xc1, 0x75, 0x5d, 0x5c, 0xd7, 0x45, 0xeb, 0x10, 0xd7, 0xf5, 0x70, 0x1c, 0x17, 0xd7, - 0x71, 0x70, 0x1c, 0x87, 0xb1, 0xd1, 0x51, 0xd6, 0xf4, 0xae, 0x66, 0x64, 0x74, 0x84, 0xa3, 0xc7, - 0x8e, 0xb3, 0xba, 0x77, 0x15, 0xae, 0xe3, 0x72, 0x79, 0x62, 0x92, 0xab, 0x93, 0x93, 0x14, 0xba, - 0x8a, 0x38, 0x8e, 0xc3, 0x89, 0x13, 0xc7, 0xc8, 0xe7, 0x73, 0xf8, 0xbe, 0x4f, 0xad, 0x56, 0xc3, - 0x75, 0x5c, 0xa4, 0x94, 0xc6, 0x0e, 0x7c, 0x69, 0x1c, 0xd7, 0xc5, 0xf7, 0xfd, 0x5b, 0x55, 0x64, - 0x32, 0x19, 0x1c, 0xd7, 0xe1, 0x46, 0xb5, 0x8a, 0xd6, 0x9a, 0x54, 0x32, 0x85, 0x92, 0x0a, 0x83, - 0xa0, 0x54, 0x9a, 0x66, 0x60, 0xe3, 0x00, 0xdf, 0x7c, 0xfb, 0x1d, 0xbd, 0x7d, 0xbd, 0x3c, 0xf6, - 0xf8, 0x56, 0xca, 0xf3, 0x65, 0x7e, 0x3f, 0x37, 0xcc, 0x86, 0xf5, 0xeb, 0xa8, 0xd6, 0x1c, 0x8e, - 0x1e, 0xfb, 0x85, 0x7c, 0x67, 0x17, 0x33, 0x33, 0xb3, 0x74, 0x64, 0xb3, 0x04, 0x52, 0x1b, 0x4b, - 0x69, 0x8d, 0x54, 0x0a, 0xa9, 0x14, 0x4a, 0x6b, 0x94, 0xd6, 0x84, 0x61, 0x88, 0xd6, 0x21, 0x81, - 0xef, 0xe3, 0x7b, 0x1e, 0x4a, 0x49, 0xa2, 0x31, 0x9b, 0x2b, 0x57, 0xc6, 0xc9, 0x66, 0x73, 0x8c, - 0x8d, 0x5f, 0xe2, 0xb5, 0x3d, 0xaf, 0x22, 0xb0, 0x38, 0xf0, 0xe9, 0x17, 0x9c, 0x3e, 0x73, 0x96, - 0xc1, 0x67, 0xb6, 0x53, 0x9e, 0x9f, 0x67, 0x6d, 0x5f, 0x1f, 0xe5, 0x4a, 0x85, 0x7c, 0x3e, 0x4f, - 0xad, 0x56, 0x83, 0x30, 0x44, 0x2b, 0x89, 0xad, 0x94, 0xac, 0xdf, 0x84, 0xb8, 0x4d, 0x38, 0x03, - 0x77, 0xdd, 0x57, 0x9d, 0x16, 0x86, 0xcc, 0xb2, 0x76, 0x0a, 0x45, 0xc9, 0xb1, 0xe3, 0x27, 0x28, - 0x7f, 0x62, 0xe8, 0x4e, 0x6d, 0xe6, 0x8f, 0xea, 0x19, 0xce, 0x0d, 0xef, 0xe3, 0xfd, 0xf7, 0xde, - 0x45, 0x29, 0x45, 0x6b, 0x3a, 0x8d, 0x65, 0x59, 0xc4, 0x63, 0x31, 0x0c, 0x06, 0xa9, 0x14, 0x96, - 0xd6, 0x0a, 0x8c, 0xc1, 0x98, 0x10, 0x63, 0xc2, 0x5b, 0x44, 0xab, 0x13, 0xd0, 0x70, 0xf3, 0x71, - 0x3d, 0x97, 0x7c, 0xbe, 0x93, 0xb9, 0x6b, 0x33, 0x64, 0xdb, 0xdb, 0xf9, 0xf1, 0x87, 0x23, 0x5c, - 0x4d, 0x97, 0x99, 0xd0, 0x97, 0xf1, 0xe4, 0x22, 0xb9, 0x5c, 0x96, 0xab, 0x93, 0x53, 0x08, 0x21, - 0xe8, 0xe9, 0x59, 0xc5, 0xf5, 0x6b, 0x73, 0x24, 0x5b, 0x12, 0x84, 0x46, 0xa3, 0x54, 0x20, 0x2c, - 0x19, 0x48, 0xa1, 0x43, 0x8d, 0x09, 0x4d, 0x63, 0x35, 0xc0, 0x42, 0x83, 0x65, 0x09, 0x22, 0x96, - 0x85, 0xd1, 0x06, 0x0c, 0xa4, 0x5b, 0xda, 0xea, 0xe0, 0x02, 0xf2, 0xc5, 0x76, 0x2e, 0x24, 0xcf, - 0x50, 0x8a, 0x8f, 0xd2, 0x96, 0x81, 0x5c, 0x36, 0x47, 0xa1, 0xd0, 0x49, 0x6b, 0x6b, 0x9a, 0xfe, - 0x75, 0xfd, 0xcc, 0xce, 0xcd, 0x11, 0x8d, 0xc6, 0xd0, 0x3a, 0x44, 0x05, 0x0a, 0x4b, 0x49, 0xd5, - 0x60, 0xf2, 0xed, 0x35, 0x7b, 0x6d, 0x96, 0x45, 0x77, 0x11, 0x3b, 0x62, 0x13, 0x8f, 0xc5, 0x09, - 0xb5, 0x26, 0x97, 0xcd, 0x72, 0xf4, 0xe8, 0x11, 0x06, 0x9f, 0x7e, 0x96, 0x6a, 0xb5, 0xca, 0xee, - 0x97, 0x76, 0x62, 0xc7, 0x6b, 0x64, 0x96, 0x47, 0x49, 0xa4, 0x5a, 0xc8, 0xe5, 0xb2, 0xe4, 0xb3, - 0x39, 0xfa, 0xfa, 0xd6, 0x32, 0x35, 0x35, 0x85, 0xd6, 0x9a, 0x30, 0xd4, 0x84, 0x5a, 0x23, 0xa5, - 0x12, 0x76, 0x20, 0x25, 0x5a, 0xd5, 0x01, 0x0c, 0x06, 0x61, 0xa0, 0xba, 0x50, 0x65, 0x09, 0xa9, - 0x24, 0x9e, 0x88, 0x73, 0x78, 0xe8, 0x30, 0x1b, 0x07, 0x36, 0x50, 0xab, 0xd6, 0xd8, 0xfb, 0xd1, - 0x07, 0x5c, 0xf8, 0x73, 0x84, 0x95, 0xc5, 0x22, 0xc5, 0x62, 0x91, 0xf5, 0xfd, 0xeb, 0x99, 0x9b, - 0x9b, 0xe5, 0xe2, 0xc8, 0x45, 0x80, 0x7a, 0xa7, 0x1a, 0x83, 0x54, 0x81, 0xb1, 0x95, 0x52, 0x48, - 0x19, 0xdc, 0xa5, 0x75, 0x37, 0xd5, 0xa1, 0x0e, 0x52, 0x27, 0x6d, 0x34, 0x1a, 0x45, 0x29, 0xc5, - 0xc9, 0x5f, 0x7f, 0xa3, 0xd0, 0x55, 0x20, 0x9e, 0x88, 0xf3, 0xe0, 0xc0, 0x06, 0xda, 0x97, 0x2d, - 0x27, 0x9e, 0x88, 0x33, 0x7c, 0xfe, 0x1c, 0xa5, 0xe9, 0x52, 0x5d, 0xce, 0xc4, 0xed, 0x24, 0x03, - 0x29, 0x85, 0x5d, 0x59, 0xa8, 0x78, 0xc6, 0x34, 0x2e, 0xbe, 0x59, 0x7e, 0xc5, 0xd2, 0x7a, 0x14, - 0xb1, 0x2c, 0x92, 0xc9, 0x04, 0xf3, 0xe5, 0xeb, 0x18, 0x63, 0x48, 0xa5, 0x52, 0xdc, 0xa8, 0x2c, - 0xa0, 0x43, 0x43, 0x10, 0x04, 0x8d, 0x0e, 0x16, 0xb7, 0x5f, 0xb1, 0x2c, 0xca, 0x95, 0x8a, 0x67, - 0x5f, 0x1c, 0x19, 0xd9, 0xeb, 0x7b, 0xc1, 0x87, 0xa9, 0x96, 0x44, 0xba, 0x71, 0x28, 0xc2, 0x26, - 0x35, 0xbd, 0xd5, 0xea, 0x4d, 0xfb, 0xa6, 0x81, 0x73, 0xa7, 0xaf, 0x69, 0x0e, 0x89, 0xc6, 0xd4, - 0xf0, 0x7d, 0x6f, 0x71, 0x6a, 0xba, 0xf4, 0xb1, 0x00, 0x62, 0x40, 0x1a, 0x68, 0x69, 0xd4, 0x11, - 0xfd, 0x97, 0xa6, 0xb7, 0x6c, 0xe4, 0xe0, 0x00, 0x35, 0xf1, 0x9f, 0xfb, 0xaf, 0xfb, 0x0b, 0x65, - 0x77, 0xac, 0x4d, 0xaa, 0xdb, 0x20, 0xef, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, - 0x42, 0x60, 0x82, + 0xce, 0x00, 0x00, 0x04, 0x02, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0x4f, 0x6c, 0x54, + 0x55, 0x14, 0xc6, 0x7f, 0xf7, 0xde, 0x37, 0x6f, 0xca, 0xbc, 0x19, 0x66, 0xe8, 0x14, 0xa4, 0x25, + 0x25, 0xad, 0x36, 0xe2, 0xa4, 0x35, 0x44, 0x49, 0x86, 0x56, 0xd0, 0xa5, 0x51, 0x16, 0x18, 0x84, + 0x15, 0x6e, 0x24, 0xae, 0x5c, 0xb0, 0x94, 0xa4, 0x09, 0x26, 0x68, 0x88, 0x0b, 0x37, 0xa2, 0xac, + 0x88, 0x1b, 0x13, 0x17, 0x06, 0x49, 0x48, 0x8c, 0x84, 0xd0, 0x00, 0x89, 0x04, 0x5b, 0x9b, 0x40, + 0x80, 0x50, 0x42, 0xac, 0xa5, 0xd3, 0xd2, 0x16, 0xa6, 0x33, 0x03, 0xb4, 0xd2, 0xd7, 0x79, 0xd3, + 0xf7, 0xef, 0xba, 0x18, 0x5a, 0x3a, 0xa0, 0x6d, 0x25, 0x86, 0x95, 0x27, 0x79, 0xc9, 0xbd, 0xe7, + 0x9d, 0x93, 0x2f, 0xe7, 0x9c, 0xef, 0x9c, 0x73, 0x85, 0xd6, 0x9a, 0xe7, 0x21, 0x92, 0xe7, 0x24, + 0xcf, 0x0d, 0xc8, 0x78, 0x52, 0xb1, 0x6f, 0xdf, 0x91, 0x94, 0x6d, 0x97, 0xb7, 0xcc, 0xce, 0xce, + 0x9a, 0xae, 0x3b, 0x7b, 0xe5, 0xdc, 0xb9, 0x23, 0x85, 0xff, 0x02, 0x48, 0x64, 0xb3, 0x1f, 0x37, + 0x00, 0xef, 0x0b, 0x21, 0x62, 0x96, 0x65, 0xb5, 0xa6, 0x52, 0x7a, 0xbf, 0x52, 0x9e, 0x00, 0x8d, + 0xe7, 0x09, 0xee, 0xdd, 0xd3, 0xc7, 0xa5, 0x54, 0xfd, 0x42, 0x08, 0x9e, 0xf1, 0x0b, 0x84, 0x10, + 0xa7, 0xc5, 0xd1, 0xa3, 0x27, 0xa6, 0x76, 0xee, 0x7c, 0x23, 0x65, 0x9a, 0x11, 0x7c, 0x3f, 0x64, + 0x66, 0xa6, 0xc2, 0xdc, 0x9c, 0x87, 0xd6, 0x20, 0x84, 0x44, 0x29, 0xf9, 0xc8, 0x41, 0x22, 0x84, + 0xa4, 0x58, 0x9c, 0x64, 0xfd, 0xfa, 0x26, 0xa4, 0x94, 0x38, 0x8e, 0x83, 0xef, 0xbb, 0xd4, 0xd7, + 0xaf, 0x45, 0x08, 0x09, 0x84, 0xb8, 0xae, 0x87, 0x10, 0x02, 0x29, 0x25, 0xe5, 0xb2, 0x4b, 0x10, + 0x08, 0xfa, 0xfa, 0x06, 0x02, 0xa3, 0xa9, 0x29, 0x99, 0x52, 0x4a, 0x23, 0x44, 0x48, 0x10, 0x78, + 0x4c, 0x4d, 0xcd, 0x30, 0x3d, 0x6d, 0x13, 0x86, 0xa0, 0x94, 0x81, 0x52, 0x0a, 0xa5, 0x0c, 0xa4, + 0x54, 0x7c, 0x7f, 0xfc, 0x07, 0xcc, 0x8e, 0x5d, 0x5c, 0xfd, 0xf2, 0x53, 0xbe, 0x3a, 0xf8, 0x11, + 0x37, 0x6e, 0x0c, 0x90, 0x4e, 0xa7, 0x09, 0x82, 0x8d, 0x94, 0x4a, 0xf7, 0x29, 0x04, 0x49, 0xde, + 0xde, 0xfe, 0x1a, 0x65, 0x37, 0x64, 0x62, 0x46, 0x33, 0xe1, 0x48, 0x82, 0xc1, 0x41, 0x84, 0x88, + 0x29, 0xc3, 0x75, 0xbd, 0x15, 0xe5, 0xd8, 0xf7, 0x3d, 0x6e, 0xdc, 0x1a, 0x26, 0x97, 0xec, 0xa0, + 0xae, 0x92, 0x24, 0x9b, 0xcd, 0xb2, 0x63, 0xc7, 0xbb, 0xb4, 0xb5, 0xb5, 0xd1, 0xdb, 0xfb, 0x1b, + 0x9e, 0xe7, 0x73, 0xf2, 0x6c, 0x3f, 0x17, 0x6e, 0x96, 0x70, 0x83, 0xaa, 0x4f, 0xe0, 0xbb, 0xc4, + 0x0c, 0x45, 0xa5, 0x52, 0x79, 0x9a, 0x0c, 0x7f, 0x27, 0x61, 0x18, 0x32, 0x35, 0x35, 0xcc, 0x37, + 0x87, 0x3f, 0xe1, 0xc4, 0xc9, 0xcf, 0x78, 0xef, 0xd0, 0x2e, 0x00, 0xfa, 0xfa, 0xfa, 0x88, 0xc7, + 0xe3, 0x0b, 0x76, 0xef, 0x6c, 0xdb, 0x4c, 0xa5, 0xe2, 0x92, 0xcb, 0x0d, 0xb1, 0x66, 0xcd, 0x26, + 0x3c, 0x2f, 0x41, 0x71, 0xce, 0xa0, 0x30, 0x39, 0xb2, 0x32, 0xa0, 0xf1, 0xf1, 0x9b, 0x6c, 0xdf, + 0xbe, 0x0d, 0xcb, 0xb2, 0x38, 0xd8, 0xdd, 0x4d, 0x34, 0x1a, 0x01, 0x20, 0x93, 0xc9, 0xa0, 0x35, + 0x78, 0x9e, 0x5f, 0xa5, 0xb0, 0x61, 0x10, 0x89, 0x68, 0x5a, 0x5b, 0x5f, 0xe6, 0xd2, 0xa5, 0x7e, + 0x5a, 0x5a, 0xde, 0xaa, 0x32, 0x4e, 0x08, 0x0c, 0x21, 0x96, 0x06, 0x79, 0xf8, 0xf0, 0x3e, 0x6d, + 0x6d, 0x2f, 0x21, 0x84, 0xaa, 0xd1, 0x5f, 0xbb, 0x76, 0x95, 0x52, 0xa9, 0x84, 0xeb, 0xba, 0x98, + 0xa6, 0x49, 0x57, 0xd7, 0xb6, 0x85, 0x7f, 0x5a, 0x6b, 0x32, 0x99, 0x76, 0xae, 0x5f, 0xef, 0x27, + 0x99, 0xcc, 0xcc, 0x37, 0xac, 0x58, 0x06, 0xa8, 0x48, 0x22, 0x51, 0xff, 0xb8, 0x1f, 0x04, 0x5c, + 0xbc, 0xf8, 0x0b, 0xc5, 0xe2, 0x03, 0x5c, 0xd7, 0x44, 0xa9, 0x14, 0x8e, 0x13, 0x70, 0xfe, 0xfc, + 0x59, 0x7c, 0xff, 0x71, 0xbd, 0x0d, 0xc3, 0x24, 0x1e, 0x17, 0x2b, 0x9f, 0x0c, 0xb1, 0xd8, 0x2a, + 0xc2, 0xf0, 0xf1, 0x3c, 0x1c, 0x1b, 0xcb, 0x61, 0x59, 0xab, 0x69, 0x58, 0xdb, 0xcc, 0xe5, 0xcb, + 0xbf, 0x72, 0xea, 0xd4, 0x8f, 0x24, 0x56, 0xa7, 0x49, 0x26, 0xd7, 0xd1, 0xd3, 0x73, 0xba, 0xc6, + 0x37, 0x91, 0x48, 0xa0, 0x75, 0x38, 0x3f, 0x19, 0x96, 0x8e, 0xc8, 0xb2, 0x12, 0x35, 0xf7, 0x42, + 0xa1, 0x40, 0x7d, 0xba, 0x91, 0x9e, 0x9e, 0x9f, 0x39, 0x7c, 0xf8, 0x10, 0x00, 0xb7, 0x6f, 0x8f, + 0xf0, 0xf5, 0xd1, 0x63, 0xe4, 0xf3, 0xa3, 0x28, 0x25, 0x17, 0x01, 0x25, 0xb9, 0x7b, 0xb7, 0x58, + 0xed, 0xab, 0xa5, 0x40, 0xb4, 0xd6, 0x18, 0x46, 0x2d, 0x5f, 0x82, 0x20, 0x20, 0x5a, 0x17, 0xe5, + 0xee, 0x9d, 0xf1, 0x05, 0xdd, 0xc4, 0xc4, 0x04, 0xb1, 0x58, 0x0c, 0xa5, 0x6a, 0x6d, 0xa5, 0x54, + 0xf8, 0xfe, 0x5c, 0xf5, 0xbc, 0x14, 0x19, 0x84, 0x10, 0x94, 0xcb, 0x76, 0x8d, 0x2e, 0x1a, 0x8d, + 0x52, 0x98, 0xbc, 0xc3, 0xde, 0x0f, 0x3e, 0xa4, 0xb3, 0xb3, 0x8b, 0x96, 0x96, 0x56, 0x0e, 0x1c, + 0xe8, 0x66, 0x74, 0x74, 0x18, 0xdb, 0x9e, 0xa9, 0x49, 0xf3, 0xec, 0xec, 0x0c, 0xa9, 0x54, 0xe3, + 0xca, 0x52, 0xe7, 0x38, 0x4e, 0xcd, 0x7d, 0xf3, 0xe6, 0x2d, 0xf4, 0xf6, 0x5e, 0x40, 0x48, 0xc5, + 0xb1, 0x6f, 0xbf, 0x43, 0x29, 0xc5, 0xfd, 0x7b, 0x45, 0xa6, 0xa7, 0x4a, 0xb4, 0xb7, 0xbf, 0xca, + 0xe2, 0xfd, 0x66, 0xdb, 0x7f, 0x62, 0x18, 0xeb, 0x96, 0x8f, 0xa8, 0x9a, 0x2a, 0x89, 0xd6, 0xfe, + 0xa2, 0x28, 0x25, 0xd9, 0x6c, 0x27, 0xc5, 0xc9, 0x3b, 0x8c, 0xe6, 0x7e, 0x67, 0x78, 0xe8, 0x26, + 0x23, 0xb9, 0x3f, 0x88, 0x5b, 0x71, 0x32, 0x99, 0xf6, 0x9a, 0x6c, 0x3c, 0x78, 0x60, 0xff, 0xf3, + 0x9a, 0x78, 0x52, 0x1a, 0x1b, 0x5f, 0x64, 0x70, 0xf0, 0x3a, 0x5b, 0xb7, 0xbe, 0xb9, 0xa8, 0xc8, + 0xab, 0xd9, 0xbd, 0x7b, 0x0f, 0x42, 0x54, 0x23, 0x36, 0xcd, 0x3a, 0x3c, 0xcf, 0x67, 0xf1, 0x38, + 0x1b, 0x1f, 0xcf, 0xd1, 0xd2, 0xd2, 0xc9, 0xf4, 0xf4, 0xdc, 0xf2, 0x64, 0x98, 0x97, 0x64, 0x72, + 0x23, 0xf9, 0xfc, 0xd8, 0x53, 0xf5, 0x53, 0x4a, 0x61, 0x59, 0xf1, 0xa7, 0xec, 0xcb, 0x65, 0x9b, + 0x30, 0x8c, 0x63, 0x9a, 0x75, 0xff, 0x6e, 0xc3, 0xae, 0x5a, 0x15, 0x67, 0x72, 0xd2, 0x66, 0x60, + 0xe0, 0x0a, 0x61, 0x18, 0x2c, 0x69, 0x3b, 0x36, 0x36, 0xc2, 0xf0, 0xf0, 0x04, 0x9b, 0x36, 0xbd, + 0x5e, 0xbb, 0x61, 0x1d, 0xc7, 0xd5, 0x2c, 0xc7, 0x08, 0xa0, 0xa1, 0xa1, 0x09, 0x80, 0x33, 0x67, + 0x7a, 0x68, 0x6f, 0x7f, 0x85, 0x0d, 0x1b, 0x9a, 0x48, 0xa7, 0xeb, 0x01, 0x81, 0x6d, 0xdb, 0xe4, + 0xf3, 0x79, 0x86, 0x86, 0x6e, 0xd1, 0xdc, 0xbc, 0x85, 0x8e, 0x8e, 0x17, 0x6a, 0x7c, 0x5d, 0xd7, + 0x43, 0xec, 0xdd, 0xfb, 0xc5, 0xe7, 0x1d, 0x1d, 0xcd, 0xfb, 0x41, 0x46, 0xc3, 0x50, 0x53, 0x2e, + 0xbb, 0xb8, 0x8f, 0xe6, 0x7c, 0x75, 0xe9, 0x29, 0xa4, 0xac, 0x2e, 0x3e, 0x29, 0xe7, 0xcf, 0x02, + 0xdf, 0xb7, 0xa5, 0x69, 0x56, 0x54, 0x24, 0xa2, 0xa8, 0x54, 0xcc, 0xa0, 0xae, 0xae, 0x3e, 0x54, + 0xca, 0x44, 0x4a, 0xb1, 0xe0, 0x57, 0xa9, 0xb8, 0x38, 0x8e, 0x1b, 0x16, 0x0a, 0xa5, 0x9f, 0xc4, + 0xff, 0xcf, 0xad, 0x67, 0x95, 0xbf, 0x00, 0x63, 0x72, 0x9e, 0xb4, 0x74, 0xe3, 0xad, 0xa6, 0x00, + 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE image_xpm[1] = {{ png, sizeof( png ), "image_xpm" }}; diff --git a/bitmaps_png/cpp_48/icon_bitmap2component.cpp b/bitmaps_png/cpp_48/icon_bitmap2component.cpp index 345efcbb2c..6d3a8a8313 100644 --- a/bitmaps_png/cpp_48/icon_bitmap2component.cpp +++ b/bitmaps_png/cpp_48/icon_bitmap2component.cpp @@ -8,210 +8,214 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9, - 0x87, 0x00, 0x00, 0x0c, 0x98, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xd5, 0x9a, 0x6b, 0x6c, 0x5c, - 0xc7, 0x75, 0xc7, 0x7f, 0x77, 0xef, 0x63, 0xdf, 0x4b, 0xed, 0x2e, 0xa9, 0x15, 0x1f, 0xcb, 0x87, - 0x62, 0x29, 0x92, 0x4c, 0xc5, 0x26, 0x65, 0xc9, 0x90, 0x95, 0x38, 0x0d, 0xda, 0x3a, 0xb2, 0x95, - 0x34, 0x75, 0x04, 0x18, 0x30, 0x10, 0x14, 0x95, 0xeb, 0xc0, 0x71, 0x9b, 0xa6, 0x40, 0x8a, 0x02, - 0x4d, 0xdb, 0xcf, 0x05, 0x0a, 0xb4, 0xf9, 0xe2, 0x6f, 0xfd, 0x58, 0x58, 0x40, 0x5d, 0xb7, 0x0e, - 0xe2, 0x20, 0x71, 0x10, 0xdb, 0x42, 0x92, 0xca, 0xb2, 0x25, 0xdb, 0xb2, 0x24, 0x8a, 0x54, 0x25, - 0xc6, 0x7c, 0x89, 0xa4, 0x96, 0x2f, 0x91, 0xfb, 0xde, 0xfb, 0x98, 0x3b, 0xfd, 0xb0, 0x0f, 0x2d, - 0xf7, 0xc1, 0x87, 0x3e, 0x14, 0xe8, 0x2c, 0x06, 0x33, 0x77, 0x66, 0x76, 0x70, 0xfe, 0x73, 0xce, - 0xf9, 0x9f, 0x33, 0x77, 0x57, 0x91, 0x52, 0xf2, 0xff, 0xb9, 0x68, 0xed, 0x26, 0x5e, 0x78, 0xe1, - 0x85, 0x90, 0xa6, 0x69, 0x6f, 0xed, 0xd9, 0xb3, 0xe7, 0xb8, 0xa6, 0x69, 0x8a, 0xc7, 0xe3, 0xa1, - 0xbe, 0x2a, 0x8a, 0x82, 0xaa, 0xaa, 0x28, 0x8a, 0x52, 0x1b, 0x6b, 0x7c, 0xae, 0x5f, 0xbb, 0xd5, - 0x9a, 0xea, 0x73, 0xb5, 0xad, 0xae, 0x69, 0x55, 0x8b, 0xc5, 0xe2, 0x74, 0xb1, 0x58, 0x3c, 0xfb, - 0xea, 0xab, 0xaf, 0x4e, 0x6d, 0x09, 0xa0, 0x50, 0x28, 0x9c, 0x7d, 0xf1, 0xc5, 0x17, 0xbf, 0x7a, - 0xf6, 0xec, 0x59, 0x43, 0x08, 0x51, 0x1b, 0x57, 0x14, 0xa5, 0xe5, 0xfa, 0x76, 0xe3, 0x0f, 0xbb, - 0xae, 0xb1, 0x48, 0x29, 0x51, 0x55, 0x95, 0x7b, 0xf7, 0xee, 0x3d, 0x7e, 0xe1, 0xc2, 0x85, 0x1f, - 0x01, 0xdf, 0xdd, 0x12, 0x00, 0x10, 0x4d, 0x24, 0x12, 0x86, 0x6d, 0xdb, 0x14, 0x0a, 0x85, 0x2d, - 0x37, 0x17, 0x42, 0x60, 0x59, 0x16, 0x7e, 0xbf, 0x9f, 0x46, 0x93, 0xac, 0x7f, 0x6e, 0xd5, 0xdf, - 0x4d, 0xeb, 0xf3, 0xf9, 0xf0, 0xfb, 0xfd, 0x68, 0x9a, 0x96, 0xa8, 0xee, 0xe3, 0xd9, 0xe9, 0xa9, - 0x6d, 0x55, 0xd7, 0xd6, 0xd6, 0x98, 0x9e, 0x9e, 0x6e, 0x5a, 0x5b, 0xff, 0xdc, 0xaa, 0xbf, 0xdb, - 0xb6, 0xda, 0x57, 0x55, 0x75, 0x7b, 0x1f, 0xd8, 0x8d, 0xea, 0xa5, 0x94, 0x48, 0x29, 0x6b, 0x6b, - 0x1c, 0xc7, 0xe1, 0xda, 0xb5, 0x6b, 0x58, 0x96, 0xc5, 0xc9, 0x93, 0x27, 0x9b, 0xd6, 0xb6, 0xda, - 0x6b, 0x7c, 0x7c, 0x1c, 0x45, 0x51, 0xe8, 0xe9, 0xe9, 0x21, 0x12, 0x89, 0xd4, 0xd6, 0x35, 0xb6, - 0xf5, 0x40, 0xb6, 0xd5, 0x40, 0xe3, 0x29, 0xb4, 0xd2, 0x46, 0xab, 0xb1, 0xc9, 0xc9, 0x49, 0x46, - 0x46, 0x46, 0xf0, 0x7a, 0xbd, 0x6d, 0xd7, 0x34, 0xee, 0x6f, 0x59, 0x16, 0xc9, 0x64, 0x92, 0x99, - 0x99, 0x99, 0x2d, 0x35, 0xd5, 0x58, 0x3c, 0xbb, 0x35, 0x9f, 0x76, 0xf3, 0xf5, 0xfd, 0x83, 0x07, - 0x0f, 0xf2, 0xfe, 0xfb, 0xef, 0x63, 0x18, 0xc6, 0x8e, 0x4d, 0xc7, 0x30, 0x0c, 0xae, 0x5c, 0xb9, - 0xc2, 0xd1, 0xa3, 0x47, 0xdb, 0x7e, 0xa7, 0x95, 0x2f, 0x69, 0xbb, 0xd5, 0xc0, 0x76, 0x20, 0xa5, - 0x94, 0xe8, 0xba, 0xce, 0xe9, 0xd3, 0xa7, 0x9b, 0x9c, 0xb0, 0xd5, 0x3e, 0xd5, 0xf1, 0xe1, 0xe1, - 0x61, 0x86, 0x87, 0x87, 0x9b, 0x9c, 0xb7, 0xde, 0x7c, 0xaa, 0xc5, 0x75, 0xdd, 0x9d, 0xfb, 0x40, - 0xe3, 0xc9, 0x4f, 0x4c, 0x4c, 0xb0, 0xb1, 0xb1, 0x51, 0xa5, 0x5a, 0x54, 0x55, 0x45, 0xd7, 0x75, - 0x84, 0x10, 0x5c, 0xbc, 0x78, 0x91, 0x42, 0xa1, 0x40, 0x38, 0x1c, 0xae, 0x39, 0xdb, 0xe8, 0xe8, - 0xe8, 0x26, 0xa7, 0x6b, 0xb4, 0xe9, 0x56, 0x60, 0xea, 0xe7, 0xea, 0xc7, 0xea, 0x59, 0x6f, 0x47, - 0x00, 0xa4, 0x94, 0xd8, 0xb6, 0xcd, 0xfc, 0xfc, 0x3c, 0xc9, 0x64, 0x12, 0x80, 0xa1, 0xa1, 0x21, - 0x4c, 0xd3, 0xc4, 0x34, 0x4d, 0x26, 0x26, 0x26, 0x38, 0x78, 0xf0, 0x20, 0xc1, 0x60, 0xb0, 0xb6, - 0xf1, 0xf8, 0xf8, 0x38, 0x89, 0x44, 0x82, 0x68, 0x34, 0x8a, 0xaa, 0xaa, 0x68, 0x9a, 0xd6, 0xd6, - 0x21, 0x77, 0x22, 0x70, 0xab, 0x7e, 0xbd, 0x06, 0xb6, 0x75, 0xe2, 0x5c, 0x2e, 0xc7, 0xec, 0xec, - 0x6c, 0x4d, 0x13, 0xc1, 0x60, 0x90, 0x58, 0x2c, 0x46, 0x36, 0x9b, 0xa5, 0xab, 0xab, 0x8b, 0x64, - 0x32, 0x49, 0x2c, 0x16, 0x23, 0x1a, 0x8d, 0xd2, 0xd9, 0xd9, 0xc9, 0xd0, 0xd0, 0x10, 0xeb, 0xeb, - 0xeb, 0xc4, 0x62, 0x31, 0x3a, 0x3a, 0x3a, 0x76, 0x45, 0x95, 0xed, 0x68, 0xb3, 0xd1, 0x0a, 0x76, - 0x0c, 0xa0, 0xd5, 0x86, 0x8a, 0xa2, 0x70, 0xf5, 0xea, 0x55, 0xe6, 0xe7, 0xe7, 0x19, 0x18, 0x18, - 0x68, 0x9a, 0xef, 0xed, 0xed, 0xc5, 0xb6, 0x6d, 0x56, 0x57, 0x57, 0xb7, 0x8d, 0x1f, 0x5b, 0x09, - 0xdc, 0x8a, 0xbe, 0xab, 0xfd, 0x7a, 0x13, 0xf2, 0xec, 0x86, 0xfb, 0xab, 0xcf, 0x2b, 0x2b, 0x2b, - 0x14, 0x8b, 0x45, 0x0a, 0x85, 0x42, 0x93, 0x50, 0x9a, 0xa6, 0xd1, 0xdb, 0xdb, 0xcb, 0xdc, 0xdc, - 0xdc, 0xae, 0x4e, 0x7b, 0x2b, 0x81, 0xeb, 0xfb, 0x52, 0xca, 0x9d, 0xfb, 0x40, 0x2b, 0x47, 0xce, - 0xe7, 0xf3, 0x98, 0xa6, 0xc9, 0xc0, 0xc0, 0x00, 0xbd, 0xbd, 0xbd, 0x2d, 0x81, 0xf6, 0xf5, 0xf5, - 0x31, 0x3f, 0x3f, 0xcf, 0xda, 0xda, 0x1a, 0xf1, 0x78, 0xbc, 0xc9, 0xde, 0x4d, 0xd3, 0x64, 0x7e, - 0x7e, 0xbe, 0x89, 0x71, 0xea, 0x73, 0x9e, 0xaa, 0xcf, 0x35, 0xfa, 0xc1, 0xae, 0x59, 0xa8, 0x1a, - 0x59, 0xd3, 0xe9, 0x34, 0x00, 0x9f, 0x7f, 0xfe, 0x39, 0x91, 0x48, 0x84, 0xd1, 0xd1, 0xd1, 0xb6, - 0x94, 0x68, 0x18, 0x06, 0x3d, 0x3d, 0x3d, 0x4c, 0x4d, 0x4d, 0xd5, 0x9c, 0xb8, 0xbe, 0x2c, 0x2c, - 0x2c, 0x90, 0xc9, 0x64, 0x88, 0x46, 0xa3, 0x4d, 0xc2, 0x4b, 0x29, 0x49, 0xa5, 0x52, 0xe8, 0xba, - 0x4e, 0x20, 0x10, 0x00, 0x20, 0x18, 0x0c, 0x3e, 0x3c, 0x8d, 0xea, 0xba, 0x8e, 0x69, 0x9a, 0x5c, - 0xbf, 0x7e, 0x1d, 0x80, 0x5c, 0x2e, 0xc7, 0xc8, 0xc8, 0x48, 0x5b, 0x0a, 0xac, 0xf6, 0xfb, 0xfb, - 0xfb, 0xb9, 0x73, 0xe7, 0x0e, 0x63, 0x63, 0x63, 0x35, 0xca, 0xd5, 0x75, 0x1d, 0x5d, 0xd7, 0x29, - 0x16, 0x8b, 0x84, 0x42, 0x21, 0x0e, 0x1c, 0x38, 0xb0, 0x49, 0xf0, 0x6a, 0x7f, 0x6e, 0x6e, 0x8e, - 0xe9, 0xe9, 0x69, 0x34, 0xad, 0x2c, 0xde, 0xfe, 0xfd, 0xfb, 0x89, 0xc5, 0x62, 0x0f, 0x67, 0x42, - 0xe1, 0x70, 0x98, 0x33, 0x67, 0xce, 0xec, 0x38, 0x0d, 0xae, 0xd7, 0xc2, 0x73, 0xcf, 0x3d, 0x57, - 0x13, 0xec, 0xe6, 0xcd, 0x9b, 0x24, 0x12, 0x09, 0xe2, 0xf1, 0x38, 0x73, 0x73, 0x73, 0xcc, 0xcd, - 0xcd, 0x71, 0xe5, 0xca, 0x95, 0x26, 0x13, 0x02, 0x08, 0x04, 0x02, 0x0c, 0x0f, 0x0f, 0x13, 0x0c, - 0x06, 0xdb, 0x9a, 0xd9, 0xae, 0x7d, 0x60, 0xab, 0x88, 0xdc, 0x18, 0x94, 0x5a, 0xf1, 0x7c, 0xa3, - 0x8f, 0x84, 0x42, 0xa1, 0xa6, 0x93, 0xaf, 0xf7, 0x81, 0xea, 0x7c, 0xbb, 0xf4, 0xfd, 0xa1, 0x52, - 0x89, 0xed, 0xb4, 0xb0, 0x5d, 0x04, 0xad, 0x51, 0x9f, 0xc7, 0x53, 0xb3, 0xff, 0x7a, 0xc1, 0x5b, - 0xf5, 0x1b, 0xf7, 0x68, 0x34, 0x21, 0xcf, 0x6e, 0x4f, 0x7f, 0x3b, 0x2e, 0xdf, 0x29, 0x1d, 0xee, - 0x24, 0x4d, 0x6f, 0xb7, 0xb6, 0x1e, 0xd0, 0xae, 0x2f, 0x34, 0x3b, 0xc9, 0x2e, 0x1f, 0x56, 0xf8, - 0x9d, 0x68, 0xb8, 0xa5, 0x13, 0x9f, 0x3b, 0x77, 0xce, 0x97, 0xce, 0x15, 0xcf, 0x0a, 0xc4, 0x77, - 0x90, 0x4a, 0x18, 0x40, 0xf5, 0xfa, 0x7a, 0xde, 0xf8, 0xaf, 0xb7, 0xf8, 0xc5, 0xaf, 0xde, 0x45, - 0xd3, 0x75, 0x86, 0xfa, 0x93, 0x04, 0x02, 0x41, 0x24, 0x92, 0x7c, 0xa1, 0xc0, 0xcc, 0xcc, 0xec, - 0xa6, 0x8d, 0xda, 0xa5, 0xbb, 0xd5, 0x92, 0xcf, 0xe7, 0x31, 0x0c, 0xa3, 0xc6, 0x2c, 0xed, 0xd7, - 0x4b, 0x06, 0x07, 0x06, 0xf9, 0xca, 0xa9, 0xa7, 0xd8, 0x97, 0x48, 0xb4, 0x04, 0xd7, 0x04, 0xa0, - 0x24, 0xdc, 0xf3, 0xaa, 0xa1, 0x9e, 0x76, 0x2d, 0x37, 0x00, 0x12, 0x14, 0x40, 0x51, 0xb8, 0x97, - 0x4a, 0x71, 0x77, 0x7e, 0x9e, 0x2f, 0x3f, 0xf5, 0x14, 0x03, 0xc9, 0x64, 0xed, 0x6e, 0xbc, 0xaf, - 0xab, 0x8b, 0xe9, 0xa9, 0x69, 0xfe, 0xe7, 0xf6, 0x1d, 0x54, 0x75, 0x47, 0x4a, 0xdc, 0x24, 0x60, - 0x7d, 0xf3, 0xa0, 0xfb, 0x60, 0x7c, 0x66, 0x76, 0x8e, 0xcf, 0xae, 0x5d, 0xe3, 0x87, 0x3f, 0xf8, - 0x4b, 0xe2, 0xf1, 0x78, 0x13, 0xd8, 0x4d, 0x00, 0x5e, 0x7a, 0xe9, 0xa5, 0x2e, 0xbf, 0xdf, 0xff, - 0x87, 0x1e, 0x85, 0x80, 0xdf, 0xe7, 0x43, 0xd3, 0x34, 0x94, 0x32, 0x64, 0x14, 0x40, 0xd5, 0x75, - 0xae, 0xdd, 0xb8, 0xc1, 0xe7, 0xd3, 0xd3, 0x18, 0xba, 0x86, 0x61, 0x78, 0x49, 0x67, 0x32, 0x98, - 0x96, 0xc9, 0x91, 0x43, 0x07, 0xeb, 0x36, 0x53, 0x5a, 0x0a, 0x5b, 0xef, 0x84, 0xe5, 0xa6, 0x1e, - 0x80, 0xac, 0x8d, 0xc9, 0xca, 0x02, 0x09, 0x14, 0x8b, 0x45, 0x84, 0x70, 0xf9, 0xcd, 0xc5, 0x0f, - 0xf8, 0xf6, 0xb7, 0xfe, 0x68, 0x4b, 0x8d, 0x69, 0xde, 0x8e, 0x8e, 0xa0, 0xe2, 0xba, 0xce, 0xf7, - 0x5f, 0xf9, 0x1e, 0x03, 0x03, 0x03, 0x6d, 0xce, 0x4c, 0x92, 0xcd, 0x66, 0x99, 0xbb, 0x7b, 0x97, - 0x70, 0x38, 0x4c, 0x67, 0x3c, 0x46, 0x30, 0x10, 0xdc, 0xf2, 0x9c, 0xf3, 0xf9, 0x3c, 0x63, 0x37, - 0xaf, 0xe3, 0xd8, 0x36, 0x1d, 0xd1, 0x18, 0x87, 0xbe, 0x78, 0x08, 0x4d, 0xd5, 0x36, 0x45, 0x77, - 0xc7, 0xb1, 0x1b, 0xc0, 0x81, 0xc7, 0x53, 0xf6, 0xa1, 0x37, 0xdf, 0xfa, 0x09, 0xa6, 0x69, 0x6e, - 0x4f, 0xa3, 0x3e, 0x9f, 0x8f, 0xfe, 0xde, 0x5e, 0xad, 0xaf, 0xaf, 0x87, 0x62, 0x31, 0xd7, 0x1e, - 0xa9, 0xaa, 0xb0, 0x7f, 0xb0, 0xbf, 0x06, 0x29, 0x9f, 0xcf, 0x35, 0x6d, 0xbc, 0x91, 0x4e, 0x13, - 0x09, 0x87, 0xb1, 0x6d, 0x9b, 0x4b, 0x1f, 0x7e, 0xc0, 0x4f, 0x7e, 0xf6, 0x73, 0xae, 0xdf, 0xb8, - 0xc9, 0xf3, 0xdf, 0xfa, 0x26, 0x1e, 0x20, 0x16, 0x8b, 0x03, 0x12, 0xd7, 0x95, 0x80, 0x82, 0xcf, - 0xe7, 0xc5, 0x75, 0x5d, 0x5c, 0xd7, 0x45, 0x88, 0x72, 0x5b, 0xbd, 0x24, 0x9d, 0x38, 0x7e, 0x8c, - 0x4b, 0x1f, 0x5d, 0x69, 0x79, 0xfa, 0x4d, 0x00, 0x0c, 0xdd, 0x50, 0x4c, 0xcb, 0x6a, 0x89, 0xb8, - 0xd1, 0x21, 0x95, 0x36, 0xf3, 0x1f, 0x5d, 0xb9, 0xcc, 0x9b, 0x6f, 0xfd, 0x94, 0xa7, 0x4f, 0x3d, - 0xc5, 0x89, 0x27, 0x9e, 0x40, 0x37, 0x0c, 0xd2, 0xe9, 0x0c, 0x89, 0xbd, 0x09, 0xf2, 0xf9, 0x02, - 0xb6, 0xe3, 0xa0, 0xaa, 0x2a, 0x5e, 0xaf, 0x17, 0x21, 0x1c, 0x50, 0x1c, 0x84, 0xcc, 0x23, 0x3d, - 0x12, 0x14, 0x89, 0xc7, 0x23, 0xc1, 0x95, 0x04, 0x42, 0x0a, 0xae, 0xa3, 0x62, 0xe6, 0x2d, 0xb4, - 0x86, 0x9b, 0x5c, 0x6b, 0x0d, 0x78, 0xbd, 0x68, 0xaa, 0x2a, 0x1d, 0xdb, 0xc2, 0xaa, 0x00, 0x90, - 0x5b, 0xd0, 0x58, 0xbb, 0x62, 0x9a, 0x16, 0x85, 0x42, 0x91, 0x68, 0x2c, 0xc6, 0x9e, 0x3d, 0x1d, - 0x2c, 0x2d, 0xa7, 0xf8, 0xe1, 0x0f, 0xbe, 0xcf, 0xfd, 0x8d, 0x34, 0x43, 0x03, 0x03, 0xac, 0xac, - 0x2e, 0x31, 0x3b, 0x3b, 0x8d, 0x70, 0x5d, 0x92, 0xbd, 0x49, 0x0e, 0x1f, 0x3e, 0xc4, 0xfd, 0xfb, - 0x26, 0x8e, 0x23, 0xd8, 0xb3, 0xa7, 0xa3, 0xc6, 0x32, 0xae, 0xeb, 0x62, 0x7b, 0x1c, 0x9c, 0x4c, - 0xb6, 0x25, 0x63, 0x35, 0xfb, 0x80, 0xcf, 0x87, 0xaa, 0xa9, 0x98, 0x96, 0x4d, 0xc9, 0xb4, 0x76, - 0x24, 0x6c, 0xe3, 0xbc, 0x6d, 0xdb, 0x78, 0x75, 0x2f, 0xff, 0xf2, 0x4f, 0xff, 0x48, 0x7a, 0x63, - 0x83, 0xc5, 0x7b, 0x8b, 0x3c, 0xf6, 0xa5, 0xc7, 0xb9, 0x75, 0xfb, 0x16, 0x66, 0xa1, 0xc0, 0x1b, - 0xff, 0xfe, 0x06, 0x81, 0x50, 0x90, 0xfd, 0x43, 0x43, 0x1c, 0x1b, 0x2d, 0x27, 0x82, 0x9f, 0x5e, - 0xfd, 0x8c, 0x2f, 0xec, 0xff, 0x02, 0xd9, 0x6c, 0x96, 0xd9, 0xd9, 0x59, 0x06, 0x07, 0x07, 0x6b, - 0xfe, 0xa6, 0xaa, 0x2a, 0x8e, 0x6d, 0x37, 0x01, 0x68, 0x1d, 0x07, 0x4a, 0x25, 0x84, 0xe3, 0x60, - 0xdb, 0x16, 0xa6, 0x59, 0xda, 0xf5, 0xc9, 0x03, 0xdc, 0xbe, 0x7d, 0x87, 0xa1, 0xc1, 0x41, 0x8a, - 0xc5, 0xf2, 0x85, 0x3e, 0x5f, 0xc8, 0xf3, 0xcf, 0x3f, 0xfe, 0x31, 0x99, 0x6c, 0x86, 0x80, 0xcf, - 0x8f, 0x6e, 0xe8, 0xa4, 0xd3, 0x19, 0x2e, 0x5f, 0xbe, 0xcc, 0x7b, 0xef, 0xbd, 0xcf, 0x93, 0x4f, - 0x1e, 0xe7, 0xe9, 0xa7, 0x9f, 0xa6, 0x58, 0x2a, 0xd0, 0xd3, 0xdb, 0xcb, 0xc2, 0xe2, 0x22, 0xf7, - 0xee, 0xa5, 0x88, 0xc6, 0xa2, 0xb5, 0x97, 0x01, 0x8e, 0x23, 0xd0, 0x34, 0x8d, 0x68, 0x34, 0xba, - 0x49, 0x86, 0xd5, 0xd5, 0x55, 0x1c, 0xc7, 0xa9, 0x21, 0xd0, 0x4c, 0x40, 0x38, 0x0e, 0x96, 0x65, - 0x61, 0x59, 0xd6, 0x0e, 0x4e, 0x7e, 0xf3, 0xf3, 0x52, 0x6a, 0x09, 0x55, 0x55, 0xe9, 0xee, 0xee, - 0x66, 0x61, 0x71, 0x9e, 0x54, 0x2a, 0xc5, 0xdb, 0x6f, 0xff, 0x8c, 0x64, 0xb2, 0x9f, 0x7d, 0xdd, - 0x09, 0x84, 0x23, 0xb0, 0x1d, 0x1b, 0x29, 0x41, 0x55, 0xa3, 0x1c, 0x8a, 0x74, 0x90, 0x5a, 0x5a, - 0xe6, 0x3f, 0xde, 0x7c, 0x93, 0x67, 0x9e, 0xf9, 0x7d, 0xe2, 0xb1, 0x4e, 0x46, 0x47, 0x46, 0x79, - 0xf7, 0xdd, 0x5f, 0x71, 0xc8, 0x38, 0x84, 0xae, 0xeb, 0xa8, 0xaa, 0x86, 0xed, 0xd8, 0x4c, 0x4e, - 0x4e, 0xda, 0xaf, 0xbd, 0xf6, 0x5a, 0xb6, 0xfe, 0x20, 0xe7, 0xe6, 0xe6, 0xb4, 0x62, 0xb1, 0xf8, - 0x6f, 0x0f, 0x34, 0x60, 0x9a, 0xd8, 0x42, 0x60, 0x9a, 0x16, 0xa5, 0x92, 0xd9, 0x24, 0x6c, 0x24, - 0x1c, 0xc6, 0xf0, 0x7a, 0x59, 0x5b, 0x5b, 0x6b, 0x4e, 0xb2, 0x90, 0xcc, 0x2f, 0x2c, 0xf0, 0xb5, - 0xaf, 0xfd, 0x1e, 0x6b, 0x6b, 0x6b, 0xdc, 0xbf, 0xbf, 0xca, 0x87, 0x97, 0x3f, 0xe1, 0xd4, 0xa9, - 0x53, 0xac, 0xac, 0xae, 0xf0, 0xd9, 0xb5, 0x1b, 0xa4, 0x52, 0xcb, 0xac, 0x67, 0x32, 0x78, 0xbd, - 0x3a, 0x1d, 0xe1, 0x08, 0xfd, 0x7d, 0xbd, 0x9c, 0x38, 0x71, 0x02, 0xcb, 0x34, 0xb9, 0x73, 0x67, - 0x92, 0x6c, 0x36, 0xcb, 0xb1, 0xd1, 0x13, 0xec, 0x4d, 0x24, 0x58, 0x59, 0x59, 0x25, 0x16, 0x8f, - 0xa3, 0x6b, 0x02, 0xdb, 0x76, 0x28, 0x14, 0x8b, 0x1f, 0x4f, 0x4d, 0x4e, 0xfe, 0x7d, 0xbd, 0x4c, - 0xae, 0xeb, 0x4e, 0x9f, 0x3f, 0x7f, 0x7e, 0xb6, 0x06, 0xa0, 0x54, 0xf7, 0x76, 0xb9, 0x25, 0xef, - 0x2a, 0x21, 0xc0, 0xc5, 0xb2, 0x2d, 0x84, 0x10, 0xac, 0xaf, 0xdf, 0x47, 0xd3, 0x75, 0x22, 0xe1, - 0x08, 0x00, 0xa5, 0x52, 0x91, 0x9e, 0x9e, 0x6e, 0x7e, 0xf9, 0xcb, 0x5f, 0x50, 0x2c, 0x9a, 0x3c, - 0x71, 0x6c, 0x94, 0xe5, 0xd4, 0x32, 0x97, 0x3e, 0xfa, 0x98, 0xe8, 0x9e, 0x3d, 0x7c, 0xe3, 0x1b, - 0xcf, 0x12, 0x8f, 0xc5, 0xc9, 0x66, 0x33, 0x2c, 0xa6, 0x96, 0xf9, 0xe4, 0x93, 0x4f, 0x71, 0xc4, - 0x87, 0x9c, 0x7d, 0xfe, 0x8f, 0x19, 0x9f, 0x98, 0xc0, 0x2c, 0x59, 0xac, 0x2c, 0x2f, 0xd3, 0xd5, - 0xd9, 0xc5, 0xc4, 0xad, 0x5b, 0x04, 0x43, 0x61, 0x84, 0xd0, 0xb0, 0x6d, 0x1b, 0xdb, 0xb6, 0xf3, - 0xaf, 0xbf, 0xfe, 0xfa, 0xed, 0x0a, 0xaf, 0x08, 0xa0, 0x04, 0x98, 0xe7, 0xcf, 0x9f, 0xdf, 0x9c, - 0xcc, 0x39, 0xc2, 0x41, 0xb8, 0x62, 0x53, 0x75, 0x44, 0xb9, 0x96, 0x79, 0xba, 0xec, 0x38, 0xae, - 0x70, 0x11, 0xb6, 0xc0, 0xb1, 0x1d, 0x5c, 0xe1, 0x92, 0x49, 0x67, 0x08, 0x06, 0x43, 0x6c, 0x6c, - 0x6c, 0x90, 0xcb, 0xe7, 0xd1, 0x34, 0x8d, 0x78, 0x34, 0xc6, 0xcd, 0x5b, 0x13, 0x3c, 0x77, 0xfa, - 0xeb, 0xbc, 0xfc, 0x67, 0x7f, 0xca, 0xdc, 0xdd, 0x05, 0xde, 0xf8, 0xcf, 0xb7, 0xf8, 0xed, 0x07, - 0x1f, 0xe2, 0xf3, 0xea, 0xbc, 0xfa, 0xca, 0x39, 0x0c, 0xaf, 0x8f, 0x6b, 0xd7, 0x6f, 0xf0, 0xe4, - 0xf1, 0xe3, 0x38, 0x8e, 0xc3, 0xdd, 0xf9, 0x59, 0x7a, 0x7b, 0x7b, 0xc8, 0xe5, 0x73, 0x15, 0x59, - 0xcb, 0xef, 0x7e, 0x8a, 0xa5, 0x92, 0x1f, 0xe8, 0x06, 0xfa, 0x2b, 0x6d, 0x02, 0xe8, 0x54, 0x14, - 0xa5, 0x43, 0x51, 0x14, 0xad, 0xe6, 0xc4, 0x6e, 0x20, 0x80, 0x2b, 0x5c, 0xa4, 0x2b, 0xa1, 0x6d, - 0x46, 0x28, 0x71, 0x71, 0x71, 0x91, 0x78, 0xa4, 0xc4, 0x95, 0x2e, 0xc5, 0x52, 0x91, 0x8e, 0x48, - 0x84, 0x5c, 0x36, 0x87, 0xe3, 0xd8, 0x74, 0x27, 0xba, 0x59, 0x5d, 0x5d, 0xe5, 0xf0, 0xa1, 0x23, - 0xf4, 0xf5, 0xf5, 0xf2, 0xca, 0x9f, 0xff, 0x15, 0x46, 0x3a, 0x80, 0x8f, 0x18, 0x33, 0xda, 0x14, - 0x57, 0x3f, 0xf9, 0x8c, 0x43, 0x47, 0xbe, 0xc8, 0xcb, 0xe7, 0xbe, 0xc3, 0x85, 0x5f, 0x5f, 0xa4, - 0xa3, 0xa3, 0x83, 0x1b, 0x63, 0x63, 0x80, 0x24, 0x1a, 0x8d, 0xe2, 0xd8, 0x76, 0x19, 0x40, 0xc5, - 0x54, 0x5d, 0xdb, 0xf1, 0x54, 0xf2, 0x35, 0x0d, 0x50, 0x2b, 0xd5, 0x53, 0x57, 0xcb, 0x26, 0x14, - 0x74, 0x9c, 0x5a, 0x94, 0x92, 0x8d, 0x59, 0x56, 0x35, 0x7f, 0x29, 0xc7, 0x9b, 0x72, 0x9e, 0x57, - 0xa9, 0x7e, 0xbf, 0x9f, 0xd5, 0x95, 0x55, 0xbc, 0x5e, 0x1f, 0x8a, 0xa2, 0x10, 0x8d, 0x45, 0x99, - 0x9e, 0x9a, 0xe1, 0x89, 0x63, 0x23, 0xfc, 0xf5, 0xdf, 0xfe, 0x1d, 0x8f, 0xce, 0x9f, 0xe4, 0x11, - 0xeb, 0x08, 0x37, 0x83, 0x13, 0x94, 0x02, 0x12, 0x25, 0xa8, 0x33, 0x76, 0x63, 0x8c, 0x4b, 0x1f, - 0x7d, 0xcc, 0xd0, 0x40, 0x3f, 0xa6, 0x65, 0xd1, 0x97, 0xec, 0x25, 0x18, 0xf0, 0x93, 0xc9, 0x64, - 0x09, 0x85, 0x42, 0x20, 0xc1, 0x95, 0x2e, 0xc2, 0x75, 0x40, 0x53, 0x8b, 0x40, 0xaa, 0x9a, 0x7d, - 0x00, 0x66, 0xc5, 0x8c, 0x8a, 0x52, 0x4a, 0xf7, 0x01, 0x8d, 0x06, 0x43, 0xb8, 0x6e, 0x45, 0x03, - 0x2d, 0xf2, 0x20, 0x64, 0xf5, 0x54, 0x5c, 0xca, 0xdf, 0x2b, 0x23, 0x0b, 0xf8, 0x7d, 0xe4, 0x72, - 0x19, 0x22, 0x91, 0x30, 0x86, 0xae, 0xb3, 0xb4, 0x94, 0x22, 0x1e, 0x8f, 0xb1, 0xb0, 0xb8, 0x40, - 0x6e, 0xc5, 0xc4, 0xf4, 0xab, 0x8c, 0x29, 0xe3, 0xac, 0xc8, 0x65, 0xb2, 0xf6, 0x3a, 0x7e, 0x4d, - 0xb2, 0xaf, 0x7b, 0x1f, 0x37, 0xc6, 0x26, 0x18, 0x79, 0xec, 0x4b, 0x20, 0x25, 0x9a, 0xaa, 0xd1, - 0xd3, 0xd3, 0xcb, 0xd2, 0x52, 0x8a, 0x70, 0xb8, 0x72, 0x8d, 0x94, 0xe0, 0x0a, 0x89, 0xaa, 0xa8, - 0x45, 0xe0, 0xae, 0xdc, 0x82, 0x1a, 0x3d, 0x25, 0xc0, 0x71, 0x45, 0x59, 0x38, 0x5c, 0x64, 0xc3, - 0xa7, 0x5e, 0x11, 0x12, 0x70, 0x91, 0x08, 0x5c, 0x84, 0x74, 0x91, 0x52, 0xa2, 0x69, 0x3a, 0xe9, - 0x4c, 0x9a, 0xbe, 0xbe, 0x7e, 0x32, 0xd9, 0x34, 0xa1, 0x50, 0x98, 0x52, 0xc9, 0xc4, 0xf1, 0x08, - 0x66, 0x8d, 0x69, 0xa6, 0x8c, 0xdf, 0xb1, 0xac, 0x2d, 0x62, 0x6b, 0x59, 0x82, 0x7e, 0x0f, 0xfb, - 0x12, 0xdd, 0x08, 0xe1, 0xe0, 0xf7, 0xfb, 0xb1, 0x1d, 0x9b, 0xae, 0xce, 0x4e, 0x12, 0x7b, 0xbb, - 0x59, 0x5b, 0x5b, 0xc5, 0x1f, 0x08, 0xe0, 0x4a, 0x51, 0xae, 0xae, 0x40, 0xb8, 0x8e, 0x94, 0xdb, - 0xf0, 0xba, 0x87, 0x52, 0xa9, 0x96, 0x48, 0x49, 0x57, 0x22, 0x5d, 0x17, 0xe9, 0xba, 0xb8, 0xae, - 0xa8, 0xd5, 0x6a, 0xf4, 0x93, 0xae, 0xc4, 0xab, 0x1b, 0x78, 0x35, 0x2f, 0x52, 0x94, 0x93, 0xb2, - 0x78, 0x3c, 0xce, 0xc5, 0x8b, 0x17, 0x79, 0xfc, 0xb1, 0x51, 0x7c, 0x5e, 0x3f, 0xcb, 0xab, 0x4b, - 0x24, 0xf6, 0xed, 0xc5, 0x17, 0xd0, 0xb8, 0xef, 0xce, 0x60, 0x85, 0x37, 0x70, 0xbc, 0x69, 0x42, - 0x21, 0x85, 0x9e, 0xbe, 0x1e, 0x22, 0x91, 0x30, 0xc3, 0x8f, 0x1e, 0x46, 0xd7, 0x34, 0x3a, 0x22, - 0x1d, 0x24, 0x93, 0x03, 0xe4, 0xf3, 0x79, 0x96, 0x97, 0x57, 0xf1, 0xea, 0x5e, 0xa4, 0x00, 0x29, - 0x40, 0x08, 0x17, 0xa7, 0xcd, 0x85, 0xa9, 0x49, 0x03, 0xc2, 0xb2, 0xca, 0x6c, 0x23, 0x2b, 0xb5, - 0x06, 0x46, 0x92, 0x4e, 0x67, 0xd8, 0xd8, 0x48, 0xe3, 0x08, 0x1b, 0x57, 0x0a, 0xfc, 0x01, 0x3f, - 0x86, 0xa1, 0xd7, 0xcc, 0xa9, 0x23, 0x12, 0xc1, 0x32, 0x2d, 0xae, 0x5e, 0xfd, 0x94, 0xaf, 0x7c, - 0xf9, 0xab, 0x28, 0x28, 0xe4, 0xb2, 0x39, 0xbe, 0xfb, 0xf2, 0x9f, 0xe0, 0xf5, 0x4b, 0x6c, 0xb1, - 0x41, 0x24, 0x62, 0x10, 0x8a, 0x84, 0xd9, 0xd8, 0xd8, 0x60, 0x79, 0x65, 0x95, 0x67, 0x4f, 0xff, - 0x01, 0x7b, 0xbb, 0x12, 0xec, 0xdb, 0xd7, 0x8d, 0xcf, 0xe7, 0xe3, 0xea, 0xd5, 0x4f, 0x09, 0x47, - 0x42, 0xb8, 0x65, 0xdd, 0xe2, 0x4a, 0x81, 0x70, 0x1d, 0x84, 0xbd, 0x3d, 0x00, 0x8d, 0x12, 0x38, - 0xae, 0x8b, 0x70, 0x1c, 0x44, 0x35, 0x42, 0xd7, 0x11, 0x51, 0x2e, 0x9f, 0x83, 0x6a, 0xea, 0x2c, - 0x1b, 0x7c, 0xa3, 0x12, 0xd0, 0xba, 0x12, 0x5d, 0x4c, 0xfe, 0x6e, 0x92, 0x40, 0x30, 0xc8, 0xd1, - 0xa3, 0x8f, 0x91, 0x4e, 0x6f, 0xa0, 0xaa, 0x0a, 0xff, 0xf0, 0xa3, 0xbf, 0xe1, 0xed, 0x9f, 0xbf, - 0xc3, 0xf4, 0xcc, 0x1c, 0x7e, 0xbf, 0x8f, 0xe1, 0x47, 0x8f, 0x70, 0xe6, 0xd9, 0x67, 0x88, 0x76, - 0x44, 0x39, 0x70, 0xe0, 0x20, 0xa6, 0x65, 0x32, 0x3e, 0x3e, 0x8e, 0x65, 0xd9, 0x78, 0x54, 0x4f, - 0x99, 0x09, 0x2b, 0xfb, 0x0a, 0x51, 0xa6, 0xf3, 0x6d, 0x01, 0x94, 0x28, 0x21, 0x44, 0x50, 0x8a, - 0x8a, 0x06, 0xca, 0xe1, 0x6e, 0xb3, 0xa0, 0x0a, 0xca, 0xb6, 0x49, 0x5d, 0x3c, 0x16, 0xe7, 0xe6, - 0xd8, 0x18, 0xcb, 0x4b, 0x29, 0x06, 0x87, 0x06, 0xd8, 0xdb, 0x95, 0xa0, 0xb3, 0x13, 0xfe, 0xe2, - 0x7b, 0x2f, 0x23, 0x5d, 0x89, 0xaa, 0xab, 0xf8, 0xbd, 0x01, 0x22, 0x91, 0x08, 0x5e, 0xc3, 0xcb, - 0xbd, 0xd4, 0x3d, 0xa6, 0xa7, 0xa6, 0x49, 0xa7, 0x37, 0x90, 0x6c, 0x4e, 0xd0, 0x90, 0x94, 0xe3, - 0x8d, 0xd8, 0x89, 0x06, 0x00, 0xdb, 0x11, 0x8a, 0xe3, 0xd8, 0x0f, 0x34, 0xb0, 0xe5, 0x55, 0xb6, - 0x7a, 0xf2, 0x9b, 0xa7, 0x55, 0xcd, 0x43, 0xbc, 0x33, 0x46, 0x36, 0x97, 0xe5, 0xfa, 0xf5, 0x31, - 0x3a, 0xe3, 0x71, 0x42, 0xe1, 0x30, 0x81, 0x80, 0x1f, 0x8f, 0xa1, 0xe0, 0x33, 0xfc, 0x18, 0x86, - 0x41, 0x3e, 0x97, 0x63, 0x29, 0xbf, 0xc4, 0xda, 0xda, 0x2a, 0xf9, 0x7c, 0xa1, 0xc2, 0x72, 0xcd, - 0x87, 0xe2, 0x08, 0xbb, 0x7c, 0x6f, 0xd8, 0x0e, 0x80, 0xe5, 0x38, 0x66, 0xa9, 0x58, 0x52, 0xca, - 0xbf, 0x7c, 0x88, 0x32, 0x85, 0xb1, 0xc3, 0xff, 0x4f, 0xc8, 0xe6, 0xdb, 0x83, 0x61, 0x18, 0xb8, - 0xae, 0xcb, 0xfa, 0xfa, 0x3a, 0xf7, 0xd7, 0xef, 0xa3, 0x69, 0x1a, 0xa1, 0x60, 0x18, 0x55, 0x55, - 0x91, 0xb2, 0x1c, 0xd9, 0xad, 0x72, 0x9a, 0xd0, 0xfe, 0x57, 0x7f, 0x34, 0x0a, 0x85, 0x12, 0x42, - 0xc8, 0xdc, 0xb6, 0xaf, 0x7c, 0x00, 0xe3, 0xcc, 0xf3, 0xdf, 0xbe, 0x70, 0xe2, 0xd8, 0xc8, 0xc9, - 0x47, 0xf6, 0x0f, 0x7a, 0x14, 0xc5, 0xb3, 0xab, 0x94, 0xba, 0x46, 0xb5, 0x0d, 0x17, 0xf6, 0xaa, - 0x39, 0x6e, 0x7a, 0xdb, 0x56, 0x97, 0x25, 0xb6, 0x7c, 0x23, 0x57, 0xbd, 0x4f, 0x67, 0x0b, 0x5c, - 0x1f, 0x1b, 0x2b, 0xcc, 0x2f, 0x2e, 0x7e, 0xfd, 0xbd, 0x77, 0xde, 0xf9, 0x60, 0x2b, 0x2a, 0x55, - 0x80, 0xc8, 0x23, 0x8f, 0x1c, 0x4e, 0x26, 0xf7, 0x0f, 0xbc, 0xe2, 0xf5, 0x1a, 0xdf, 0x94, 0x28, - 0x81, 0x8a, 0xd9, 0x4b, 0xa4, 0x7c, 0xb8, 0x3f, 0x36, 0x3c, 0x4c, 0x51, 0x14, 0x59, 0x83, 0x27, - 0xc4, 0x9d, 0x5c, 0x36, 0xf7, 0xaf, 0x97, 0xfe, 0xfb, 0xd7, 0xef, 0x00, 0x79, 0x29, 0x65, 0x69, - 0x2b, 0x00, 0x0a, 0xe0, 0x07, 0x7c, 0x95, 0xaa, 0x57, 0x72, 0x0e, 0xea, 0xda, 0xff, 0x8b, 0x62, - 0x57, 0x64, 0xa9, 0x4f, 0x19, 0x0a, 0x52, 0xca, 0x2d, 0x1d, 0xe1, 0x7f, 0x01, 0x0c, 0xe6, 0x84, - 0xf7, 0x85, 0xc0, 0x86, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, - 0x82, + 0x87, 0x00, 0x00, 0x0c, 0xdb, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xd5, 0x99, 0x7b, 0x6c, 0x54, + 0xd7, 0x9d, 0x80, 0xbf, 0xfb, 0xf0, 0xcc, 0xd8, 0x1e, 0x3f, 0xc6, 0x9e, 0xf1, 0x1b, 0x1b, 0x1c, + 0x8c, 0xbd, 0xa6, 0x36, 0x09, 0x09, 0x10, 0x36, 0xae, 0x4b, 0x29, 0xc1, 0x09, 0x50, 0x85, 0x87, + 0x01, 0xb5, 0x8e, 0x20, 0x51, 0xac, 0x88, 0x26, 0x80, 0xaa, 0xb6, 0xa4, 0x34, 0x8d, 0xd2, 0xa8, + 0x5d, 0x56, 0x95, 0x1a, 0xd4, 0x55, 0x68, 0x57, 0x9b, 0x84, 0x50, 0x20, 0x9b, 0x22, 0x2d, 0x54, + 0x21, 0x29, 0x24, 0x4d, 0xe4, 0x50, 0x20, 0x6e, 0x03, 0xd4, 0xa1, 0x6e, 0x30, 0x25, 0x25, 0x7e, + 0xe1, 0x07, 0x7e, 0x8e, 0x3d, 0xf6, 0xd8, 0x33, 0x9e, 0xc7, 0xbd, 0x67, 0xff, 0xb0, 0xe7, 0xe2, + 0xf1, 0x8c, 0x89, 0xcd, 0x2e, 0x2b, 0xed, 0x91, 0xae, 0xce, 0xb9, 0xe7, 0xde, 0x73, 0xce, 0xef, + 0xfd, 0x3a, 0x92, 0x10, 0x82, 0xff, 0xcf, 0x4d, 0x0d, 0x0d, 0xb6, 0x6d, 0xdb, 0xf6, 0xb4, 0xd9, + 0x6c, 0xce, 0x51, 0x55, 0x15, 0x59, 0x96, 0x51, 0x55, 0x95, 0xc9, 0xe3, 0xc9, 0xbd, 0xa2, 0x28, + 0xa8, 0xea, 0xf8, 0xd2, 0xe9, 0xfe, 0x99, 0xfc, 0x08, 0x21, 0x3a, 0x9e, 0x7c, 0xf2, 0xc9, 0xd7, + 0xee, 0x1a, 0x02, 0x4f, 0x3c, 0xf1, 0xc4, 0xee, 0x17, 0x5e, 0x78, 0xe1, 0xe5, 0xa4, 0xa4, 0xa4, + 0x18, 0x00, 0x49, 0x92, 0x98, 0xda, 0x0b, 0x21, 0x90, 0x24, 0x29, 0x6c, 0x3c, 0xb5, 0x45, 0x9b, + 0x13, 0x42, 0xa0, 0x69, 0x5a, 0xf0, 0xe8, 0xd1, 0xa3, 0xea, 0xb6, 0x6d, 0xdb, 0xfe, 0xfd, 0xae, + 0x20, 0x60, 0x32, 0x99, 0x8a, 0x6d, 0x36, 0x5b, 0x8c, 0xae, 0xeb, 0xc6, 0xa1, 0x00, 0xa3, 0x17, + 0x2f, 0x62, 0xca, 0xcd, 0x45, 0xcd, 0xc8, 0x08, 0x9b, 0x8f, 0xd6, 0x87, 0x9e, 0xa9, 0xef, 0x42, + 0x08, 0x6c, 0x36, 0x9b, 0x6a, 0x32, 0x99, 0x0a, 0xef, 0x06, 0x07, 0xe4, 0xa9, 0x14, 0x94, 0x24, + 0x09, 0x59, 0x96, 0xc1, 0xe3, 0xa1, 0xe3, 0xe9, 0xa7, 0x69, 0xdd, 0xb8, 0x11, 0xd7, 0xb1, 0x63, + 0x48, 0x93, 0x38, 0x30, 0xdb, 0x27, 0x24, 0x6a, 0x77, 0x15, 0x81, 0xc9, 0xc0, 0x4f, 0x16, 0x85, + 0xcc, 0xea, 0x6a, 0x06, 0x5e, 0x7d, 0x95, 0xb6, 0xed, 0xdb, 0x09, 0x34, 0x35, 0x85, 0xfd, 0x33, + 0x1d, 0xb0, 0x93, 0xf7, 0x9b, 0x2a, 0x8e, 0x77, 0x95, 0x03, 0x53, 0x01, 0x03, 0xb0, 0x6f, 0xd8, + 0xc0, 0xa2, 0x3f, 0xfe, 0x91, 0xb8, 0x79, 0xf3, 0x68, 0xdd, 0xba, 0x95, 0xfe, 0x5f, 0xfd, 0x0a, + 0x02, 0x81, 0x19, 0x51, 0x7d, 0x72, 0xd3, 0x34, 0xed, 0xff, 0x86, 0x03, 0xd1, 0x80, 0x88, 0x49, + 0x4d, 0xa5, 0xe0, 0xc0, 0x01, 0x0a, 0x0f, 0x1d, 0x62, 0xe4, 0xfd, 0xf7, 0x69, 0xad, 0xac, 0xc4, + 0x7b, 0xf9, 0x72, 0x18, 0x75, 0xbf, 0x0c, 0x99, 0x60, 0x30, 0x78, 0xf7, 0xcc, 0x68, 0x34, 0x36, + 0x47, 0xa3, 0x62, 0xf2, 0x8a, 0x15, 0x2c, 0xaa, 0xa9, 0xa1, 0x7d, 0xff, 0x7e, 0xda, 0xab, 0xab, + 0x49, 0xda, 0xb0, 0x01, 0xc7, 0x77, 0xbf, 0x8b, 0x64, 0xb5, 0x46, 0xfd, 0xbf, 0xab, 0xab, 0x8b, + 0x9a, 0x9a, 0x1a, 0x54, 0x55, 0xa5, 0xb7, 0xb7, 0x77, 0xe3, 0xc5, 0x8b, 0x17, 0x4b, 0x14, 0x45, + 0x31, 0xcc, 0xad, 0xa2, 0x28, 0x86, 0x49, 0x9e, 0x3c, 0x3f, 0xd5, 0x64, 0x87, 0xbe, 0x4d, 0x7e, + 0x00, 0xdd, 0xef, 0xf7, 0xbf, 0xa8, 0x4e, 0x06, 0x38, 0xd0, 0xd1, 0x41, 0xf7, 0xcb, 0x2f, 0x23, + 0x34, 0x0d, 0x31, 0x41, 0x31, 0x11, 0x0c, 0xd2, 0x7d, 0xf8, 0x30, 0x3d, 0x47, 0x8e, 0x18, 0x80, + 0x2d, 0x38, 0x78, 0x10, 0xfb, 0xfa, 0xf5, 0x34, 0xed, 0xd9, 0x43, 0xcb, 0x86, 0x0d, 0xa4, 0xed, + 0xdd, 0x8b, 0xf5, 0x1b, 0xdf, 0x88, 0x40, 0xa0, 0xa6, 0xa6, 0x86, 0x67, 0x9e, 0x79, 0x26, 0xf4, + 0x9a, 0x23, 0x49, 0x52, 0xce, 0x4c, 0xa8, 0x1a, 0x32, 0xd5, 0xd3, 0x35, 0x21, 0x04, 0xb2, 0x2c, + 0x53, 0x5b, 0x5b, 0x3b, 0x5f, 0x9d, 0x3c, 0xa9, 0x58, 0xad, 0xc4, 0x16, 0x15, 0x81, 0x10, 0xe8, + 0x3e, 0x1f, 0xee, 0x73, 0xe7, 0x40, 0x96, 0xb1, 0x6f, 0xdc, 0x88, 0x6d, 0xd5, 0x2a, 0x63, 0x03, + 0x53, 0x7a, 0x3a, 0x52, 0x4c, 0x0c, 0x25, 0xa7, 0x4e, 0xd1, 0xf5, 0xfa, 0xeb, 0x74, 0xfc, 0xf8, + 0xc7, 0xc4, 0x9f, 0x3e, 0x8d, 0x63, 0xef, 0x5e, 0x14, 0x87, 0xc3, 0xf8, 0x2f, 0x21, 0x21, 0x01, + 0x80, 0xb1, 0xb1, 0xb1, 0xdb, 0x02, 0x33, 0x75, 0x7c, 0x3b, 0x93, 0x1c, 0x9a, 0x8b, 0x8b, 0x8b, + 0x23, 0x29, 0x29, 0x49, 0x09, 0xe3, 0x40, 0x8c, 0xdd, 0x4e, 0xc6, 0xce, 0x9d, 0xe3, 0x4a, 0x37, + 0x3c, 0x4c, 0xef, 0x6b, 0xaf, 0x21, 0xc9, 0x32, 0x6a, 0x62, 0x22, 0x6a, 0x62, 0x62, 0x24, 0xa5, + 0x54, 0x95, 0xac, 0xef, 0x7c, 0x87, 0xd4, 0xb5, 0x6b, 0x69, 0xda, 0xbb, 0x97, 0xd6, 0x8d, 0x1b, + 0xb1, 0xef, 0xde, 0x4d, 0xe2, 0xa6, 0x4d, 0x11, 0xd6, 0x28, 0x5a, 0xab, 0xaf, 0xaf, 0xe7, 0xcc, + 0x99, 0x33, 0x51, 0xa9, 0x3d, 0xe1, 0x3f, 0xa8, 0xaa, 0xaa, 0x0a, 0x89, 0x4c, 0x04, 0xc2, 0x92, + 0x24, 0xa1, 0x4e, 0xe7, 0x49, 0x67, 0x63, 0xf6, 0xcc, 0xb9, 0xb9, 0x14, 0xff, 0xf6, 0xb7, 0x74, + 0xbd, 0xfe, 0x3a, 0x37, 0x7e, 0xf6, 0x33, 0xfa, 0x5f, 0x79, 0x05, 0xc9, 0x6c, 0x26, 0xb0, 0x6e, + 0x9d, 0xb1, 0x57, 0xc7, 0x48, 0x07, 0xdb, 0xdf, 0xdf, 0x8e, 0x2e, 0x74, 0x1e, 0xce, 0x7b, 0x98, + 0xe7, 0x97, 0x3d, 0xcf, 0xd1, 0xa3, 0x47, 0x71, 0x3a, 0x9d, 0xe4, 0xe6, 0xe6, 0xe2, 0x74, 0x3a, + 0x51, 0x55, 0x95, 0x60, 0x30, 0x88, 0xa2, 0x28, 0xc4, 0xc6, 0xc6, 0x72, 0xe6, 0xcc, 0x19, 0x96, + 0x2f, 0x5f, 0x0e, 0x0e, 0xd8, 0xf6, 0xc1, 0x36, 0x74, 0xa1, 0x53, 0x91, 0x5b, 0xc1, 0x8b, 0x4b, + 0x5f, 0xbc, 0xe5, 0x5f, 0xa2, 0x21, 0x20, 0x49, 0x12, 0x42, 0x0e, 0xb3, 0xb0, 0x8c, 0xd4, 0xd7, + 0xd3, 0xfe, 0x8b, 0x5f, 0xf0, 0x4f, 0x6f, 0xbd, 0x15, 0x15, 0x89, 0xfe, 0xb7, 0xdf, 0xa6, 0xf3, + 0xd7, 0xbf, 0x26, 0xb6, 0xa4, 0x84, 0xc4, 0x4d, 0x9b, 0x50, 0xec, 0x76, 0xd4, 0x96, 0x16, 0x83, + 0x03, 0xbd, 0x9e, 0x5e, 0xae, 0xf4, 0x5d, 0x01, 0x20, 0x3d, 0x2e, 0xdd, 0x38, 0x6b, 0xc9, 0x92, + 0x25, 0xec, 0xda, 0xb5, 0x8b, 0x43, 0x87, 0x0e, 0xe1, 0xf3, 0xf9, 0x70, 0xb9, 0x5c, 0x94, 0x94, + 0x94, 0xb0, 0x78, 0xf1, 0x62, 0x9e, 0x7a, 0xea, 0x29, 0x84, 0x10, 0x38, 0xbd, 0x4e, 0xda, 0xdd, + 0xed, 0x00, 0x34, 0x0d, 0x35, 0x19, 0x6b, 0x85, 0x10, 0x84, 0x89, 0x90, 0xf0, 0x7a, 0x71, 0x7d, + 0xf8, 0xe1, 0xb8, 0x12, 0x87, 0xe4, 0x56, 0x08, 0x9c, 0xef, 0xbe, 0x4b, 0xf7, 0x9b, 0x6f, 0xe2, + 0xbd, 0x7e, 0x9d, 0x7f, 0x54, 0x57, 0x33, 0xf7, 0x27, 0x3f, 0xc1, 0x3c, 0x67, 0x0e, 0x00, 0xbe, + 0x8e, 0x0e, 0x9a, 0x7f, 0xf4, 0x23, 0xdc, 0x75, 0x75, 0x38, 0x76, 0xef, 0x26, 0x79, 0xcb, 0x16, + 0x84, 0x24, 0xa1, 0xeb, 0x3a, 0x72, 0x77, 0xb7, 0xe1, 0x5f, 0x2c, 0xaa, 0xe5, 0x16, 0xc7, 0x54, + 0xb3, 0x21, 0x16, 0x21, 0x04, 0xcb, 0xca, 0xca, 0xf8, 0xe0, 0x83, 0x0f, 0xb0, 0x5a, 0xad, 0x2c, + 0x5e, 0xbc, 0x38, 0x8c, 0x98, 0xf1, 0x31, 0xf1, 0xc6, 0xda, 0xc9, 0x63, 0x5d, 0xd7, 0xc3, 0x39, + 0xe0, 0xbf, 0x79, 0x93, 0x9e, 0x43, 0x87, 0x40, 0x08, 0xc4, 0x84, 0xe3, 0xd1, 0xfd, 0x7e, 0xe2, + 0x4b, 0x4b, 0x49, 0xa9, 0xa8, 0xa0, 0x6f, 0x68, 0x88, 0xf4, 0xc7, 0x1f, 0x47, 0xb5, 0xd9, 0x10, + 0x9a, 0x46, 0xf7, 0x1b, 0x6f, 0xd0, 0xbe, 0x7f, 0x3f, 0xf1, 0x4b, 0x97, 0x92, 0x7f, 0xf2, 0x24, + 0x6a, 0x7a, 0xfa, 0xb8, 0x8c, 0x4e, 0x0a, 0xf6, 0x42, 0x00, 0x96, 0xa6, 0x95, 0x72, 0xe5, 0xc9, + 0x2b, 0x68, 0x42, 0x23, 0xc5, 0x92, 0x12, 0x21, 0xae, 0x45, 0x45, 0x45, 0x14, 0x16, 0x16, 0x1a, + 0xca, 0xda, 0xd3, 0xd3, 0x63, 0x7c, 0xbf, 0x37, 0xed, 0x5e, 0x3e, 0xdf, 0xfe, 0x39, 0xba, 0xd0, + 0xb1, 0x28, 0x16, 0x63, 0xcf, 0x08, 0x04, 0x62, 0x0b, 0x0a, 0x58, 0x78, 0xea, 0x14, 0x92, 0x24, + 0xa1, 0x0d, 0x0f, 0xf3, 0x69, 0x69, 0x29, 0xb2, 0xd9, 0x8c, 0x65, 0xee, 0x5c, 0x52, 0x1e, 0x7d, + 0x14, 0x49, 0x55, 0x49, 0x5e, 0xb1, 0x82, 0xd1, 0xab, 0x57, 0x69, 0xde, 0xb3, 0x07, 0x5f, 0x77, + 0x37, 0xd9, 0xfb, 0xf6, 0x91, 0x58, 0x51, 0x81, 0xae, 0xeb, 0xd3, 0x9a, 0x3e, 0x49, 0x92, 0xd0, + 0x84, 0xc6, 0x75, 0xd7, 0x75, 0x84, 0x10, 0xe4, 0x27, 0xe7, 0x93, 0x60, 0x4e, 0xf8, 0x52, 0x25, + 0x0f, 0xb5, 0xb1, 0xe0, 0x18, 0x67, 0x3b, 0xce, 0xa2, 0xe9, 0x1a, 0x85, 0xb6, 0x42, 0x16, 0x24, + 0x2f, 0x88, 0x2e, 0x42, 0xb7, 0x0b, 0x07, 0xcc, 0xd9, 0xd9, 0xa4, 0x6d, 0xdd, 0xca, 0x8d, 0x7d, + 0xfb, 0xe8, 0x3e, 0x78, 0x10, 0xdb, 0xfa, 0xf5, 0xe4, 0xbd, 0xf1, 0x06, 0x72, 0x42, 0x82, 0x11, + 0x5e, 0x47, 0x43, 0x20, 0xb4, 0xd7, 0xc5, 0xce, 0x8b, 0x6c, 0x7a, 0x7b, 0xdc, 0x3a, 0xad, 0x9a, + 0xbb, 0x8a, 0x13, 0xeb, 0x4f, 0x44, 0x0d, 0xd7, 0xa3, 0xe9, 0xe3, 0x85, 0xee, 0x0b, 0xec, 0xf8, + 0x68, 0x07, 0x00, 0x15, 0x79, 0x15, 0x1c, 0x5c, 0x75, 0xd0, 0x08, 0x4f, 0x66, 0x1c, 0x22, 0x0e, + 0x7d, 0xfc, 0x31, 0xcd, 0x7b, 0xf7, 0x82, 0x2c, 0x93, 0xff, 0x9b, 0xdf, 0x10, 0xbf, 0x74, 0x69, + 0x98, 0x6d, 0xbe, 0x9d, 0x53, 0x92, 0x24, 0x09, 0xa4, 0x70, 0x13, 0x19, 0x0d, 0x58, 0x31, 0x45, + 0xf4, 0x8c, 0x5e, 0x9a, 0xde, 0x87, 0x84, 0x39, 0xb2, 0x68, 0x4e, 0x25, 0x38, 0x30, 0x40, 0xe3, + 0x81, 0x03, 0x38, 0xdf, 0x79, 0x87, 0xb4, 0xea, 0x6a, 0xd2, 0x77, 0xee, 0x44, 0x32, 0x99, 0x22, + 0x00, 0x9f, 0x8e, 0xfa, 0xa1, 0x7e, 0xbe, 0x6d, 0x3e, 0x95, 0x45, 0x95, 0x08, 0x21, 0x28, 0x9f, + 0x53, 0x1e, 0xa1, 0x23, 0xb7, 0xdb, 0x67, 0x61, 0xea, 0x42, 0xb6, 0x17, 0x8f, 0x9b, 0xe0, 0x87, + 0xb2, 0x1e, 0x32, 0xd6, 0x44, 0x70, 0x20, 0x1a, 0x02, 0xd7, 0xaa, 0xaa, 0x88, 0x2d, 0x28, 0xa0, + 0xe8, 0xe4, 0x49, 0x2c, 0x45, 0x45, 0x51, 0x11, 0x9d, 0x09, 0x17, 0xb2, 0x12, 0xb2, 0x38, 0xbc, + 0xee, 0x70, 0x54, 0x20, 0x6f, 0x97, 0xdd, 0x49, 0x92, 0x44, 0x46, 0x7c, 0x06, 0x3f, 0xff, 0xea, + 0xcf, 0xa3, 0x7a, 0x64, 0x35, 0x1a, 0x5b, 0x84, 0x10, 0x48, 0xb1, 0xb1, 0x78, 0x1e, 0xab, 0xa2, + 0xd7, 0x96, 0xcd, 0x40, 0xc6, 0x5c, 0x4c, 0x7f, 0xe9, 0x22, 0xa7, 0xcb, 0xc7, 0xc2, 0x85, 0xb9, + 0xa4, 0xa6, 0x26, 0x7e, 0x29, 0xe0, 0x53, 0x3d, 0x66, 0xbb, 0xbb, 0x9d, 0x6f, 0x9d, 0xfc, 0x16, + 0x9a, 0xd0, 0x58, 0x99, 0xb7, 0x92, 0x7d, 0x5f, 0xdb, 0x17, 0x15, 0x81, 0x68, 0x7b, 0xb6, 0x0e, + 0xb7, 0xb2, 0xf9, 0xdd, 0xcd, 0xe8, 0xe8, 0x3c, 0x92, 0xf7, 0x08, 0x2f, 0x3d, 0xf8, 0x52, 0xb8, + 0x19, 0x0d, 0x04, 0x02, 0x3d, 0x2d, 0x2d, 0x1d, 0x5a, 0x47, 0xc7, 0x90, 0xa2, 0x69, 0x3a, 0x20, + 0xd1, 0xd8, 0xd8, 0x45, 0xdd, 0xa0, 0x8c, 0x32, 0xdc, 0x86, 0xdc, 0x7e, 0x63, 0x22, 0x24, 0x96, + 0xf0, 0x7a, 0x55, 0xb6, 0x6c, 0x59, 0x8d, 0xd5, 0x1a, 0xcb, 0xb8, 0x70, 0x4e, 0x3e, 0x30, 0xfc, + 0xbd, 0xbd, 0xdd, 0xc3, 0x99, 0x33, 0x9f, 0x01, 0x82, 0x96, 0xa1, 0x16, 0xfa, 0x1a, 0xc6, 0xf7, + 0xfe, 0xac, 0xab, 0x93, 0xb3, 0xe2, 0x0a, 0x7e, 0x7f, 0x02, 0x4e, 0x27, 0x9c, 0x3b, 0xd7, 0x60, + 0xac, 0x99, 0x3b, 0x37, 0x8d, 0xec, 0xec, 0x70, 0x33, 0xeb, 0xf4, 0x3a, 0x69, 0x73, 0xb7, 0x01, + 0xd0, 0xe8, 0x6a, 0x8c, 0x74, 0x64, 0x57, 0xaf, 0x9a, 0x3f, 0x3f, 0x7f, 0xfe, 0xaa, 0xbc, 0x74, + 0x69, 0x31, 0x8a, 0xa2, 0x20, 0x49, 0x32, 0x0e, 0x47, 0x12, 0x8b, 0x17, 0xcf, 0x27, 0x18, 0xd4, + 0xd0, 0x75, 0x1d, 0x49, 0x92, 0x19, 0x5f, 0x17, 0xca, 0xd8, 0x24, 0x64, 0x39, 0x9a, 0xe5, 0xba, + 0x35, 0x5e, 0xb3, 0x66, 0x9d, 0x31, 0x77, 0x7f, 0x8a, 0x9d, 0xe3, 0xf9, 0xbf, 0x0b, 0xfb, 0xfe, + 0xfd, 0xef, 0x3f, 0x37, 0x21, 0xcb, 0x3a, 0x7e, 0xbf, 0x46, 0x20, 0x10, 0xa4, 0xb6, 0xb6, 0x15, + 0x4d, 0xbb, 0xca, 0xca, 0x95, 0x05, 0x06, 0x77, 0xe2, 0xd4, 0x38, 0x03, 0x19, 0xab, 0xc9, 0x6a, + 0x8c, 0x83, 0xc1, 0xe0, 0x38, 0x02, 0x79, 0x79, 0xe9, 0x7b, 0x2a, 0x2b, 0xbf, 0x2a, 0x99, 0xcd, + 0x26, 0x23, 0x06, 0x1f, 0x1a, 0xf2, 0x30, 0x34, 0xe4, 0xc5, 0xe3, 0x19, 0xc3, 0xe7, 0x0b, 0x22, + 0xcb, 0xca, 0x04, 0xc0, 0xe1, 0xbd, 0x2c, 0x2b, 0xf4, 0xf5, 0x75, 0x73, 0xfc, 0xf8, 0x9b, 0x98, + 0x4c, 0x16, 0xb6, 0x6c, 0x79, 0x1c, 0xbf, 0xdf, 0x4f, 0x4f, 0x4f, 0x3b, 0x9a, 0xe6, 0x43, 0xd7, + 0x75, 0x12, 0x13, 0xed, 0x64, 0x65, 0xcd, 0x23, 0x3d, 0x3d, 0x87, 0x9b, 0x3d, 0x9d, 0x38, 0x07, + 0x9d, 0x48, 0x12, 0x84, 0x88, 0xac, 0xeb, 0xe0, 0xf5, 0xfa, 0xc8, 0x76, 0x14, 0x50, 0x5a, 0x5a, + 0xc4, 0x47, 0x1f, 0x7d, 0xc2, 0xd8, 0x58, 0xc0, 0x00, 0xb4, 0xd8, 0x5e, 0x4c, 0xe3, 0x53, 0x8d, + 0x68, 0xba, 0x86, 0x45, 0xb1, 0x44, 0x5a, 0xa1, 0x8c, 0x8c, 0xe4, 0x7c, 0xb7, 0x7b, 0x18, 0x49, + 0x4a, 0x44, 0x51, 0x14, 0x84, 0x10, 0xf8, 0x7c, 0x7e, 0x46, 0x47, 0xbd, 0xb8, 0xdd, 0x1e, 0xc6, + 0xc6, 0x42, 0x08, 0xc8, 0x11, 0xbd, 0xa2, 0x28, 0xbc, 0xf4, 0xaf, 0xff, 0x42, 0xfe, 0xe3, 0x47, + 0xe9, 0x73, 0x7b, 0xd8, 0xff, 0xcb, 0x9d, 0xbc, 0xf2, 0x6f, 0xbf, 0x44, 0x92, 0x86, 0x39, 0x72, + 0xe4, 0x08, 0x6b, 0xd6, 0xac, 0xe1, 0xeb, 0x5f, 0x7f, 0x90, 0x9e, 0x9e, 0x6e, 0xbe, 0xf8, 0xe2, + 0x02, 0x0d, 0xed, 0x43, 0x54, 0x6d, 0xac, 0x20, 0xa0, 0x43, 0xe7, 0xa8, 0x42, 0x9f, 0x47, 0xc6, + 0x35, 0x26, 0xe3, 0x72, 0xfb, 0xf0, 0x35, 0x5f, 0xc6, 0x6c, 0x76, 0x30, 0x32, 0x12, 0xc4, 0xed, + 0xbe, 0x15, 0x82, 0x7b, 0x02, 0x1e, 0x8e, 0xfe, 0xfd, 0x28, 0x41, 0x3d, 0xc8, 0x22, 0xfb, 0x22, + 0xca, 0xb2, 0xca, 0xc2, 0x75, 0xc0, 0xe7, 0x0b, 0xdc, 0x71, 0x79, 0x4e, 0x08, 0x9d, 0x2f, 0xba, + 0xdc, 0x34, 0x34, 0xa6, 0xa0, 0x6b, 0xc9, 0x14, 0x0e, 0x04, 0xc8, 0xcd, 0xcd, 0xe5, 0x87, 0x3f, + 0x7c, 0x8e, 0x13, 0x27, 0x4e, 0x50, 0x5f, 0x5f, 0xcf, 0xe6, 0xcd, 0x5b, 0x89, 0x8d, 0x8d, 0x23, + 0x23, 0x23, 0x9b, 0x76, 0x57, 0x2d, 0xb5, 0x6d, 0xe0, 0x09, 0x2a, 0x13, 0xda, 0xa2, 0x03, 0x3a, + 0x09, 0x8a, 0x17, 0x49, 0x92, 0x27, 0xf2, 0x07, 0x7f, 0xd8, 0x19, 0xd7, 0x06, 0xae, 0xf1, 0xd3, + 0x4f, 0x7e, 0x0a, 0xc0, 0x8a, 0x9c, 0x15, 0x06, 0x02, 0x06, 0x07, 0xee, 0xb4, 0x62, 0xe0, 0xf1, + 0xb8, 0xb9, 0x79, 0xb3, 0x81, 0x5d, 0x55, 0x0f, 0xf3, 0x1f, 0xa7, 0xab, 0x20, 0x38, 0xc6, 0x0f, + 0x7e, 0x50, 0x05, 0xc0, 0xb3, 0xcf, 0x3e, 0x4b, 0x77, 0x77, 0x37, 0x3b, 0x76, 0xec, 0x30, 0x2c, + 0x8b, 0xaa, 0xaa, 0x3c, 0xb8, 0x70, 0x2e, 0xcd, 0x2d, 0xe7, 0x19, 0x1b, 0x76, 0xd3, 0xd6, 0xd6, + 0x41, 0x71, 0xf1, 0x72, 0x02, 0x01, 0x1d, 0x9f, 0x4f, 0xc3, 0x9e, 0x36, 0x0f, 0x97, 0x6b, 0x74, + 0xc6, 0xe7, 0x47, 0xc4, 0x42, 0xb3, 0xa3, 0xbc, 0xa0, 0xa3, 0xa3, 0x81, 0xd5, 0xab, 0xd7, 0x60, + 0xb1, 0x98, 0xf9, 0xf6, 0xb7, 0xdd, 0xc4, 0xc5, 0x99, 0xb1, 0xdb, 0x53, 0x01, 0x28, 0x2f, 0x2f, + 0xe7, 0xfc, 0xf9, 0x8f, 0x11, 0x42, 0x27, 0x18, 0xd4, 0x8d, 0x75, 0x59, 0x59, 0x73, 0x70, 0x38, + 0x32, 0x09, 0x04, 0x34, 0x3c, 0x9e, 0x11, 0x2e, 0x5c, 0xb8, 0xcc, 0x92, 0x25, 0x6b, 0x70, 0xb9, + 0x46, 0x19, 0x1a, 0x1a, 0x35, 0x14, 0xb7, 0xbe, 0xbe, 0xde, 0x58, 0x53, 0x98, 0x52, 0xc8, 0x73, + 0x4b, 0x9e, 0x43, 0xd3, 0x35, 0xee, 0x75, 0xdc, 0x1b, 0x89, 0xc0, 0x9d, 0x30, 0xa0, 0xa9, 0xe9, + 0x33, 0x96, 0x2d, 0xfb, 0x67, 0x83, 0xed, 0xa9, 0xa9, 0xa9, 0x98, 0x4c, 0xca, 0xac, 0xf6, 0x88, + 0x89, 0xb1, 0x90, 0x97, 0x97, 0x41, 0x6f, 0x6f, 0x3b, 0x26, 0x53, 0x4a, 0xd8, 0xb7, 0x63, 0xc7, + 0x8e, 0x61, 0xb3, 0xd9, 0x70, 0x38, 0x1c, 0xc4, 0xab, 0xf1, 0x7c, 0xef, 0xfe, 0xef, 0x45, 0x38, + 0xb2, 0x59, 0xc5, 0x42, 0x53, 0x45, 0x27, 0x3b, 0xdb, 0x81, 0xc5, 0x62, 0x8d, 0xfa, 0x3d, 0x10, + 0xf0, 0xd3, 0xd6, 0xd6, 0xc6, 0xe0, 0xe0, 0x20, 0x00, 0x69, 0x69, 0xe9, 0x64, 0x66, 0x66, 0x45, + 0xfd, 0x37, 0x3b, 0x3b, 0x97, 0xda, 0xda, 0xb3, 0x14, 0x14, 0xac, 0x0e, 0x9b, 0x3f, 0x7c, 0xf8, + 0x30, 0xe9, 0xe9, 0x49, 0xd3, 0xe6, 0xca, 0xaa, 0xaa, 0x22, 0x84, 0x10, 0x77, 0x84, 0x40, 0x57, + 0xd7, 0x75, 0x96, 0x2d, 0xfb, 0x5a, 0xd4, 0x6f, 0x9d, 0x9d, 0xed, 0xb4, 0xb5, 0xb5, 0xa1, 0xaa, + 0x26, 0x86, 0x86, 0x46, 0x90, 0x24, 0x09, 0x9f, 0xcf, 0xcf, 0xa7, 0x9f, 0xd6, 0x51, 0x56, 0x56, + 0x8e, 0xd9, 0x1c, 0x37, 0x45, 0x8e, 0xe1, 0xbe, 0xfb, 0x96, 0x50, 0x57, 0xf7, 0x09, 0xd9, 0xd9, + 0xf7, 0x19, 0x22, 0xd4, 0xd3, 0xd3, 0x43, 0x30, 0x38, 0x12, 0x35, 0x4a, 0x08, 0x51, 0xbf, 0xa1, + 0xa1, 0xa1, 0xff, 0x8e, 0x94, 0xd8, 0xe1, 0x70, 0xa0, 0xeb, 0x91, 0x86, 0xab, 0xb7, 0xb7, 0x9b, + 0xc1, 0xc1, 0x41, 0x46, 0x47, 0x35, 0xac, 0x56, 0xab, 0x51, 0x95, 0xd0, 0xb4, 0x20, 0x16, 0x8b, + 0x87, 0x0b, 0x17, 0xfe, 0x4c, 0x59, 0x59, 0xf9, 0xd4, 0x82, 0x20, 0xb1, 0xb1, 0x56, 0x02, 0x81, + 0x81, 0x30, 0x8f, 0x7e, 0xe0, 0xc0, 0xab, 0xaf, 0xc8, 0xf2, 0x48, 0xff, 0xd4, 0xca, 0x21, 0x20, + 0x64, 0x59, 0xd6, 0x15, 0x45, 0xf1, 0x0d, 0x0e, 0x0e, 0xbe, 0x35, 0x6b, 0x04, 0x7c, 0xbe, 0x31, + 0x12, 0x13, 0x93, 0x22, 0xe6, 0x15, 0x45, 0xa2, 0xa3, 0xa3, 0x1d, 0xbf, 0x5f, 0x22, 0x3b, 0x7b, + 0x1e, 0x03, 0x03, 0x7d, 0xfc, 0xfe, 0xf7, 0x27, 0x70, 0x38, 0x1c, 0xac, 0x5c, 0xb9, 0x0e, 0x9b, + 0xad, 0x80, 0xae, 0xae, 0x26, 0xde, 0x7b, 0xef, 0x14, 0x6b, 0xd7, 0xae, 0x27, 0x10, 0xd0, 0xc2, + 0x3c, 0xaa, 0xdd, 0x6e, 0x0b, 0xdb, 0xef, 0xf2, 0xe5, 0xab, 0x57, 0x9a, 0x9b, 0x2f, 0xb6, 0x47, + 0x93, 0x50, 0xc0, 0x07, 0x0c, 0x44, 0x24, 0xf5, 0x33, 0x69, 0x2e, 0x57, 0x1f, 0x76, 0x7b, 0x5e, + 0x64, 0x52, 0xdf, 0xdf, 0x4b, 0x7c, 0x7c, 0x3c, 0x99, 0x59, 0x59, 0x0c, 0x38, 0xfb, 0x78, 0xf4, + 0xd1, 0x72, 0x02, 0x81, 0x71, 0x6f, 0xba, 0x60, 0xc1, 0x21, 0x4e, 0xbf, 0x77, 0x0e, 0xc1, 0x1c, + 0x5c, 0xae, 0x7e, 0x14, 0x45, 0x9a, 0x22, 0x1a, 0x90, 0x94, 0x64, 0xc3, 0xe7, 0xf3, 0x13, 0x32, + 0x2a, 0x56, 0x6b, 0x4a, 0x17, 0x10, 0x0d, 0x01, 0x6d, 0xe2, 0xf1, 0x00, 0x6e, 0xf9, 0x56, 0x10, + 0x36, 0x53, 0x04, 0x7a, 0xb1, 0x58, 0x62, 0xa3, 0xcc, 0x0f, 0x10, 0x08, 0x6a, 0xd8, 0x52, 0x12, + 0x79, 0xe7, 0xdd, 0xff, 0x32, 0x80, 0x07, 0xb8, 0x7e, 0xfd, 0x3a, 0x7f, 0xfb, 0xdb, 0x25, 0xb2, + 0x73, 0xb2, 0x48, 0x48, 0x48, 0xa0, 0xb9, 0xb9, 0x29, 0x62, 0x7d, 0x52, 0x92, 0x0d, 0x97, 0xab, + 0xc7, 0xd0, 0x81, 0xc2, 0xc2, 0xf2, 0x66, 0xe0, 0x5a, 0x94, 0xe7, 0xba, 0x10, 0xa2, 0x51, 0x08, + 0x71, 0x53, 0x08, 0x31, 0x3a, 0x6b, 0x11, 0x92, 0x24, 0x99, 0x68, 0x51, 0x74, 0x28, 0x2d, 0xd4, + 0x75, 0x1d, 0x6b, 0x7c, 0xa4, 0x75, 0x8a, 0xb7, 0x5a, 0x8d, 0xc0, 0x30, 0x74, 0x91, 0x32, 0xd5, + 0xa3, 0x2b, 0x8a, 0x32, 0x49, 0x24, 0x55, 0x21, 0x66, 0x70, 0x81, 0x27, 0xcf, 0x56, 0x84, 0x92, + 0x93, 0xd3, 0x18, 0x1b, 0x8b, 0xf4, 0x96, 0xa9, 0xa9, 0x76, 0x4c, 0x31, 0x31, 0x8c, 0x8c, 0xb8, + 0xf9, 0xe6, 0x63, 0x9b, 0x48, 0x49, 0xb9, 0x65, 0xd7, 0x1f, 0x7a, 0xa8, 0x8c, 0xe2, 0xe2, 0x12, + 0x7a, 0x7b, 0xbb, 0x71, 0xbb, 0xdd, 0xe4, 0xe7, 0xcf, 0x8f, 0x4c, 0x59, 0x87, 0x06, 0x49, 0x4a, + 0x4a, 0x9f, 0x75, 0x61, 0x6d, 0xd6, 0x8e, 0xcc, 0x66, 0x73, 0xe0, 0x76, 0x0f, 0x61, 0xb1, 0x24, + 0x4c, 0x41, 0xcc, 0x4e, 0x43, 0xc3, 0x15, 0xdc, 0x23, 0xa3, 0xe4, 0xcc, 0xc9, 0xe7, 0xec, 0xf9, + 0x8b, 0xd4, 0x7c, 0xf8, 0x1e, 0x76, 0xbb, 0x83, 0x65, 0xcb, 0xcb, 0xf0, 0x7a, 0xbd, 0xf4, 0x76, + 0x77, 0xe0, 0x74, 0x3a, 0xd1, 0xb4, 0xc8, 0x8c, 0x6c, 0x70, 0x70, 0x90, 0xa4, 0xa4, 0x7b, 0x66, + 0x5c, 0xa9, 0x08, 0xe3, 0xc0, 0x6c, 0x44, 0x28, 0x26, 0xc6, 0xc4, 0xe8, 0xe8, 0x50, 0x94, 0x0b, + 0x0c, 0x9d, 0xd2, 0xd2, 0x45, 0x20, 0x34, 0x6e, 0xb4, 0x7e, 0x81, 0xa6, 0x05, 0x58, 0xfd, 0xc8, + 0x5a, 0x16, 0x3f, 0xb0, 0x14, 0x97, 0x6b, 0x80, 0x96, 0xa6, 0x6b, 0xb4, 0xb6, 0xb6, 0x50, 0x59, + 0xb9, 0x35, 0x22, 0xeb, 0x8a, 0x89, 0x51, 0xe8, 0xef, 0x1f, 0xfe, 0x9f, 0x5d, 0xb3, 0xce, 0xa6, + 0xf5, 0xf4, 0xf4, 0x93, 0x9f, 0x1f, 0x29, 0x9e, 0x29, 0x29, 0xe3, 0x71, 0xd0, 0x9f, 0xfe, 0x54, + 0x8b, 0x84, 0x3e, 0xa1, 0x2f, 0x3a, 0x63, 0x63, 0x63, 0x34, 0x37, 0x37, 0xf3, 0xd8, 0x63, 0x1b, + 0x89, 0x8d, 0x8d, 0x27, 0x10, 0x08, 0xbf, 0xec, 0x70, 0xbb, 0x5d, 0x58, 0xad, 0x19, 0x5f, 0x9a, + 0x27, 0xff, 0xaf, 0xe8, 0xc0, 0x78, 0x02, 0xf4, 0x15, 0x9a, 0x9a, 0xfe, 0x1e, 0x71, 0x88, 0x10, + 0xe3, 0x61, 0x43, 0x65, 0xe5, 0x66, 0x0a, 0x0b, 0x0b, 0xf1, 0x7a, 0x3d, 0xf8, 0x7c, 0x3e, 0x4a, + 0x4b, 0x17, 0x51, 0x5d, 0xfd, 0x34, 0xc9, 0xc9, 0xb6, 0x48, 0x00, 0x64, 0xa8, 0xab, 0xfb, 0x0b, + 0x05, 0x05, 0x0f, 0xcc, 0xa8, 0xa2, 0x7d, 0xdb, 0x1b, 0x9a, 0x99, 0x36, 0x93, 0xc9, 0x42, 0x5f, + 0x9f, 0xce, 0xf0, 0xb0, 0x13, 0x87, 0x23, 0x23, 0x7a, 0x15, 0x22, 0x2b, 0x8b, 0xec, 0xec, 0x1c, + 0x23, 0x1a, 0x0d, 0x06, 0xb5, 0x69, 0x82, 0xc2, 0x7f, 0x50, 0x52, 0xb2, 0x6a, 0x8a, 0x29, 0x9f, + 0x39, 0x3c, 0x77, 0xc4, 0x01, 0x80, 0x39, 0x73, 0x0a, 0xb8, 0x74, 0xe9, 0x12, 0xc1, 0x60, 0xe0, + 0x8e, 0xef, 0xb7, 0x3c, 0x1e, 0x37, 0xc3, 0xc3, 0x1a, 0xc9, 0xc9, 0xf6, 0x19, 0x5d, 0x9a, 0xdf, + 0x06, 0x81, 0x3b, 0x4b, 0x68, 0xee, 0xb9, 0xe7, 0x7e, 0xfe, 0xf0, 0x87, 0xd3, 0xf4, 0xf5, 0xf5, + 0xcc, 0x7a, 0xed, 0x8d, 0x1b, 0x8d, 0xd4, 0xd5, 0x7d, 0xc6, 0x92, 0x25, 0xab, 0xa2, 0x00, 0x3f, + 0x7b, 0x1d, 0xb8, 0xa3, 0x94, 0xd2, 0x6c, 0xb6, 0x50, 0x5a, 0xba, 0x82, 0xbf, 0xfe, 0xf5, 0x73, + 0x2e, 0x5d, 0xfa, 0xf3, 0x8c, 0xae, 0x52, 0xbd, 0x5e, 0x2f, 0x35, 0x35, 0x1f, 0xa2, 0xeb, 0xc9, + 0x94, 0x97, 0xaf, 0x9f, 0xa6, 0xa8, 0x35, 0x73, 0x98, 0x54, 0x80, 0x96, 0x96, 0xde, 0xda, 0x91, + 0x11, 0xcf, 0x37, 0x13, 0xa3, 0x5c, 0x23, 0xcd, 0x8c, 0x13, 0x5f, 0xc1, 0xeb, 0x1d, 0xe5, 0xf8, + 0xf1, 0xdf, 0x91, 0x9e, 0x6e, 0x27, 0x27, 0x27, 0x8b, 0xcc, 0xcc, 0x4c, 0x1c, 0x8e, 0x34, 0x02, + 0x01, 0x3f, 0x3d, 0x3d, 0xbd, 0x74, 0x76, 0x76, 0xd2, 0xd5, 0xd5, 0x8d, 0xdb, 0xed, 0x63, 0xd9, + 0xb2, 0xb5, 0x98, 0xcd, 0x96, 0x69, 0x32, 0x3d, 0x70, 0xbb, 0x47, 0x9c, 0x92, 0x24, 0x35, 0xcf, + 0x28, 0x32, 0x10, 0x42, 0x50, 0x51, 0xf1, 0xfc, 0x03, 0x99, 0x99, 0xc9, 0xff, 0xb9, 0x60, 0x41, + 0x56, 0xa1, 0x10, 0xe3, 0xf5, 0x1e, 0xbf, 0x5f, 0xc3, 0xe7, 0x0b, 0x10, 0x0c, 0xea, 0x84, 0x8a, + 0x5d, 0xe3, 0xd5, 0x88, 0x90, 0x85, 0x90, 0x8d, 0x8b, 0xf1, 0xd0, 0x9c, 0x2c, 0x2b, 0x13, 0x3e, + 0xc1, 0x47, 0x30, 0x38, 0x8c, 0xaa, 0x8e, 0xa1, 0x69, 0x12, 0x8a, 0x92, 0x88, 0xc5, 0x62, 0x43, + 0x55, 0xcd, 0x46, 0x5d, 0xe8, 0xd6, 0x75, 0xe9, 0x78, 0x8d, 0x33, 0x10, 0x18, 0xaf, 0x0b, 0xf5, + 0xf5, 0x0d, 0xf4, 0x8d, 0x8c, 0x8c, 0xee, 0x39, 0x7c, 0x78, 0xd7, 0x91, 0x99, 0x20, 0xf0, 0xdf, + 0xd1, 0x1d, 0xfc, 0xa3, 0x61, 0x31, 0x70, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE icon_bitmap2component_xpm[1] = {{ png, sizeof( png ), "icon_bitmap2component_xpm" }}; diff --git a/bitmaps_png/icons/icon_bitmap2component.ico b/bitmaps_png/icons/icon_bitmap2component.ico index 33f2bae718948b45067611c4b9d8e4e2885e2dfe..590b782d593b06818ca9605f653ee712a6e0b60c 100644 GIT binary patch literal 3262 zcmcJRNlaUJ9><+q4tAWIztCvMXf)ah9Qca%cO2F4YxXftsz=Q%W;5^JJ(ABi5=0-9 zsd(@}djG!S`|njPEt(&G(6+Yrx3%dyItV)baa)^OCXRR3zdvnH+t69-Yo_FocGNqGq#Qt0nvU7w6`7 zcXyvXd-n70?slb8%;$TR%5pgTESs%_!^NQ?KZm1cGWWQ(GbNYnv{(+}Yeb@u&$qt3 z3}&6bv$?sky1Fty?;IVCjEqqH;N!>2&dwTj?_J5^ILzjK`J)<5(CuC<6b|Aq! z*D1F;+S@!%hfpA(`1yET&EZt}4pv+LM?Ie3^1HI4*Xu1tqjg}w(%)~? z>2Tu{H01OA23@W+NrK;g=T7(UjLl}F-VWlUK6M&Ry?)SNUayxVNv&3kaO(A0LVYR} zRDF)A)vK$kPo6wkd2Y+g%XYh6c7Xqw4<@BD;`blkU(T_y1-F~x|MS9yYuBzJthu?l znVFelu?Ux{{Ndq!`xo;^B@_;5Gz}NeqOC9=+S}U`@i^wgO1bQDI(6FK0f{(j&{O*8 zc)TlDuK1>WNA4bZz3X)_eLkOz#X5wK`POjh!s<0z!|A^*EiD~Adi3_~+u%ndkp+)( zBPieUa(7&vgWR8>KgAEE12291(rMOd@B@K>S||)S9Eb?F=aR_@yFFksg)Ekc)f%_i zQcfo+k=$(j`1WU?VO;d6)drI6S1KJOnHcLWj+^nHbq~0d;yCgymBRmO+Dk}$9{lm~ zag=ChbF)z*8Inp3e13m-x0b=^XEFy^ERw?+BLrcSN^LTkRZ5J> zrEZnVrBu3=N*h7oF%b=i!S_yiX?JO_b-f0DC=>!8Dpe|#&CSiAJtk~}a7Yb`%eTA#zot?Q%X1$?dA|78&B-TFqX#B>F zSU!)Sf71tQ12|cl%+2M{KH!(jWdw+_NhA`NFJDGyW%8L!E|bq=vc|!8yWQpTy4gJU z_1DR+uAELc|L(hff+!)7ot>vbVe#x)Z%@zk?CflBZ!gsLrmGe5YS*i{5qxZY>(;I2 z=4Q~qhyPXeI#1?uIYdP9kuoGsAjm;~U;}{_yw)w9UO#cd@zz`Jn>Qs;JCq4QpZA6D zyIihImoA~Hu}foPBb`o%KJJ7Y^>e2COg5XX^ARath|lM8QR zGc`L~X=;jIy&8(eNDyXA1me zvRXEue;%2ho~^^-JQX-LLRxXxi<{HwM0LT~?9}=5fw$lG8jV>9{J(IN1U5pyzc?H# z!3PRJ{9d5bqZL?)BzPx1fXi{HcshaE=_bKov6zWDLxFL!Bs$1kv70Z@9x_y7O^ literal 103478 zcmeFa2Y8mpvG=WJiHU-MdWeBsNaw`~Oy2aqH2e2ISXpF~7-h=_>z^{-Q2=lNd|5d-vIo;)e9SN>Z>#O(hQ5mBg6>g&fNB1-3t zh=`0#d7Zy(M8t=cBO+pAQeXe%M-l%zF(M+r?x{yaJR|TN{-*xe73uyfP$2Jb%a@Ow zRjJ}D8!A>PyE!vd&}VlMxw%65$jy~1l-*Fie3^BnN|tD=oBmVq#x0vSUYxLaku6`f zG6gGBOaEHs(&fu-@zN!>cEbkSv}LocTD!)Utz40YnAn&Je)w}DCbsN^} zyQ^)rzMqCQYi!k;)t2b)x89DOJYm~*Y_qekowawaT(Nxz_S>q}s~zUdoAZ}ets2us zX@5}z`|Q}fZHsN#w9(ZiX;+f1-?YJj`|jGk%a*FnefssZ=bwMp>eZ=k^B2ss&%XG= zcIq>}8=tW7&mB6nN_XEOLk8{GzH^6hZ@zc*_;FX~bsN^Xx^CIN&9?5?VHFD%vpSCz zv+^&$U_EcaE!}-bj2O0qI&I&v-S+I=W5-S$w>9by z>c4jVI-5Ixo-JCMXg%9>vaWgSTd5)iZRDs}+p=w|ojrHXmZ+aru3Y}-GG$6vRVO?l z{G84hJ8snWJ$rWBj->6jci$d6apIV5P+hld*`)8UNTug;iyawbeR0%b)8eQ)ox$m6W(|5i7 z&f9kB%}Wj!FI_Z`H!i+mNl8hTq<(ts{A(7sAkG#oNwn84oVTOmk3)wK+Zz`z+WrIk z?8=pQ?bA;`wKHeVe8_!g&YZgI!;e0)_dfU_fcJHsf~1{EwqfH2gU3gXjJ4C}&e*$G zuiBMcH|_1~SM3ee>D1X%_NMCf{`>FS*|TTeeY zN#cW(>g$uD<0 zwpukR@9ojO^Y^i_!)*TixfVNoh`svi0AZjF8Z;mk{jG1`9u^(d&!PtQbr?9Hk4>ID z!9M)(LwDcv=g+(Q(ii^k)TvXS{oxOPus{Csj}Baa`|Y>(%{SlJ?|=V$`}*sz?e*7R zw=ci^(mwzEbNlSG&+L;=KCzEK{@C4@eh`m@y)XCRULO9Qw{PFJC>m}BhivNazF6aTW>*Y_2)s`EB<=(%{T4sx8HW_0?Cd?O#Y1@ILM5`sU4>uHF|eTrl;gcwH z$MZA2FTX!_?3lYh_vZJsk$cjo@M*AL;R8Oub?cVB^UgbA@5^uLgX5AvwE4t|6Si;P zK6mfXd-6ShPwGlLE?>T!;l8?ue)^fCwWl|I&3in@*OB`{r+43d*Y&x-=ZzaT=##Mb z<+rrcL%iqicj(X|$4~yA)Dv1B(0HN!-1GYN>tXMEn~hC`jWc(Yu^Um^Uw8d zfQNae`u77r9(*}``0(~KX3R*OJ$rWI{Q2_}7cN|wxM{a;#mDGZom?;=LmH>6A4i1=}q zNRIfK(+8wtL=+X$^Z_TC^+x)?pT6|MbM+%jzc?wfbjb;&UwUEcy@2299utcfFIrQ# z|9{dyA|gU^s^^GNv3KGY#u=EO9Tv>DxcCK@uqeUe5*FJ0xcOOa?Wkn&IgQz!k_CKk`6}kV z6;8)!Sijcn(C4&j)nvt%?OUbGth)=%!)w;BO?$m$`BGaiUFXfW-?I3{3D$o=ZyO}J zymsR{`&u&Tgyhj`=^AU+t+NfAH(IkM^)o!DefyRxn0q#AZrG$bdEfqhnjiP*zUyuM z#`SLgU$%Ui?bAH5X5CsVTj~XSp~y2<)~^wL)>=Yhg1s(%VPQgo&6qjECQX@SQ>Rb1iId0M(3rutVBrGCZ?tEr zbSHG9_U&7((5-pS!-9Lxph5jtoIZ0(ZO~kO=z#RHV|G;Y{DFh}9cUx;TD)SpO_@H; zh722G4I0$7Mvdw^-DmQ&$+li};XCx%QT0dv{(Ua?@85s6Ftc5|cE8oLB8Co)Uh$^n z-Z}Nn+1Jjc;moR%=|XTrQn! zr)?B}UQ~a*q0g`0yl&T|8(oo(w0!vzH@_ff6B84U^PB+#daw9ceEAXj0{Aoqy!QA| zG8mq^q`7+h#Bo-mdSyGQdEs5ntLVz_OFrL}es)FjpZ5|)Q|1SrBRTAz)2(ZV_<3_@ z+rj;N?V$K!ukJT*-YlCieze8So1^#k+Y#wm9=kNw){74hY0f;XF?CQluwS&)xZ5wC zbo%tEwpe4?KS#3OJ*RQwy7}wZuX(&~?dq2r)UWkLr;crH$lz#;7e5b*>Tg}Ubg-U1 zx;RK*)7VTwm(K02d$&&34Rr13z<1Hp-cmpM=d4}3);)*5^M8H%^qGR*6x7ks)xzm% z=r`yV%zb{|^K%{ZoPW-`b?Y)br&q6D?m6gc+}k6l3!-D85AqzZ5AmFEx(n}b+O#R` zbI{qS7ocq(UYFzE=sxI6=qY>l>@m&rc38SS@(Q4LpmV?nntQ`OhxVcqp}(MOcsnkwbx!V&D*YRv=5z+*Zda!gXiqnu_Nqr&{5D=&}o-z{mX0miPz|}UVrv< z;dAtvtE?@=)3lMg(jNL!&&~8X=*rNTI-=il4d@?!>z_e=!_kF)_0QS8dw1C9P;XCH z+OKxI{(~O+jcbp;fAATe$NV#BC!g=%zdy_8a4&R8fKE-{&>!?&=>7fLfWD(0JcIs& zm!vOdcuvorJ*Ut=+=u6Q(0{2qu+uYxE7mF0hiA}!z8|hVojZ4q*6;qz=OFkj+8EkS|2kOu@9|seEc)*E^2V1j zF){zpp+kqxk_*w2LD2&S42X`3ii#dQcyP3It; z%$YNzr7uTIUyfd|U_o?ze0;QY=4k26(My&r88~_J2O@s<=a`5eCr3p5;|<|J zM(8UthXoO%*Eb>}S_x6vK{t*vvmY?7*vUw-=2pZ-_j!Ud}rEnKiM zDDvzx&F&ZeUfh@a>$(3D=GhS?N|eacu~Yj`MvWQu-Kfzc?~EKZ;?9VXBkshG9PTiD zM9iJxu`zdIVu#%s28MeKy)!gs$Q|h$!eEENLtni!c*v`FUL7*%&LA)tM1R-1b<0n9 zPPpecXi#&|JlVal(=C+_lMa$+OQaX3doT4n=v9eJ7CT*Vm&VBs&8yh)mabT)-z=3L zxzrX5{9g7s=|nXLg?oOJCUs&LX}-l)m=4bVx5idVf5u+tfqijde7v(E?Z<{9T@2gc zx!2Cw70HZ~r%yTk5#4^}npF<*i{g#vgnNFA7L8(;tw4{LzU{GI*TT9~tkwH~H3$0f zHI30t(#7K9o8a3s&;^g4U&5N4NGw zKfWm4ir->m+@N(-+qNwx>-oPB{#E#AUzc9Jy2WA(_3IVZ5{K3I=%L$HC)SbJvggVE zimp3#)(qK>ckBH`8$D*ERer9Nm43F6HEdX0yuZ{YPMYA>QU|rZlDWXGO*TvaZ`!os zB0aN=P*}(#{7i@#(63i4bxe{?+2e?K`jplj)Mc5*+cwd9>C(mG@v|1Uc#*9X9}bKj zV53KkaCBL;WRXpqF~wT9Z7H7FY;(1)qOR1Ldu-Xd$vSszH(if=M8ItD{|Y}6A_fiW z7rS@gZnwT+jRTI!j(bw{XT8HZhjN$tn|?U0^~j7_Gi{FO(6?V7t5>g<)7zUiZDKQL z&5|8C){TufH1{Q{uGnJvZB$ghbN%}DTL3gK_vP9A4IMft_Q=sAcKYm@G@Lnm+Jay` z1EeGC`R8Qsy>}k$pG;iYZDJ_%UeYY`e)~!T~0q_JpV-&mc-?MjEd{P?d`Q zojhftHLPFT(dCHrGvv;d_iowSH?G-RvRPlea@pRHZQ}fe^O9$4(mj9Bph52Wefo5Z z#lHTzbb%n)2l-TbJY^_Yx82ZlX3d>tU9_gzy?3|WeE)q{Z*((s7<6>m7@b}Byy&rJ z&C0arqq__pI@CSCbH}y=Uybhnm$j=`+B(ev>m63x)Tt9}^vK~hX~H|$+A$a zmuy_QYPoxVqh#1dz21-t?!*1K@8ChQ$*f(K?)lPV-1D0>Y4Y>NjqATrzh2Fc>({IC zsn&MiwQSK?Hu-5z=5E$_njqQUTJp6`>*it6s%6vE&-qR>UGq8x{H9Nz9!{V2^hfs^ zHENW5K0Lr*{c6>IQ>#{`JRLi>KXOZaaP#I3>5ez0=iYMQ+P{C}#&z}aHHT~0u1Y68 zq&3Vr_4hlnXTB}F_gfBciKpL@Zb^R!^>dyt-7VeoQ)&?r(Y0&WJ*+WhrF>-Ff| zJYV*ZET7MBu8WW9tKb?n_-xh_==H26vFWp3V($T4IbhAC^^aRiu*X5Y{PU$VXZn2l zQ2M{SC;NufCHP#{m#k}88?$EOxqk11bu#pzK7e|#|Din&S69Doo;7P$rq8E;_#Mw- z?JS#t>oZ;h)`+Zaf@@pq44?77-_PN5K)XHdc|LMjHr}w$@6x5q9-dF%`871U82!d; z+6|x4cKYA*o0skU7MgjU57OPQ8Tqc(Cz(E<`%`b81(0R*G4BJ`-q;NMv;DdXHWa$sG^X`HqMB@wV&&FZ($sw5(F4O3_-iYDLzoS1+nS!dv-|tkC-dfgx>AKQ(`!_(biHQvil5Z1R`FBH8Y=(0;GWB~t5^J3 zduWFuOTE}k6_-a=#80wmz`xX~UG>O_k;DItO@nn=I4s3p5(dsDvK+g}64^ykAzKFi zD*(R}5U)Ls_{4aJg|b^LNLc8=Ug_OERqd57oG%@Diq^HQzO7uj9GlB-J(pP<@Vn9) z{P*i+4{-JzXWPL(lLMsMa_7_=;?;)5&R()n^VB-oD%NPu##apgt>ABh z*URNYHfhoXYt*3D^33Y(-*45bQJ!8syWHNec~iQ5-r%0EyVgBd;G2eTQ<{HMMqf4R z9Jg?R_E=N)=8kC1c2sL#_K2}FoY(x%Iu1Ke+J3RWXKKkheAb*zRgz42h2h16YuYq!T&Arnfs3HVXK9uvOlrTUZv|3S`(i*eM+_x`4`D%a8T>r zBPZGCeoeM8*~q0cy?gbFvsbLv+S%LCe2HyozH9`|n>EO`{+(L2$|Ikm+uP-T#XhdX zhQQu<@Y;W_lKpbOXHJ`^&6uwB_(AROUY3pHv~AkHRsFj{_OZqmS-ON(ty;kb%8zNU z><-Z4n{U6hFTVQHj!4I*{r=h96Cb^W2@9-M%O=^^zf-F`(NP0#v){;Gyo1I9_A!8u z0Q=V7N08Eg=1TF&tl6_=Pub!6b&cA_e(3y#^Q=grr|p@ipRnS^i`Xk=OIh{mm8?#! zsc2e)_S#D?6t(B_<+YazK5d1c%xlGp7PjWi8(D|; ztz~2CZ#&d4jE9e;kKB^(A-&bONV_sy$NJA|K6f z&*y*KUMW-B8aJ$KHEL9ruftaPejL|0Iqm3x-@$6xBe896m2C`Pht8eb<)Hq(@{Al2 zbNj$S*^*>m3`I))FF5|d=85kDG+?}AR~ zU)(gLw!_yS8!&cf?U^~hiyfl-8jWN6|LXN?&bABv_a8iH-Q`!jNMqroY{jy#TD`h8 ztYyn4HfG#t`8{os-*H#%ON_NcvPH7Lvr&ABU3k*uiLURk%Wja|?%K7(Vb!yUKpP4Q zXrRym8@1EzsQk{}ixqr`vDSx*(5yfN!5wJsHF4AeqFT|3%gRfUd!Q{6PeFEgSaC znKPUp@)><^gZfc>Y;KQh^0X<|s&xyiQn`Y?RPuQ%qw!F)W>wimJ3HE7gP#*OPruo0 zAAIK=a^s@uz5al=V#zvP+`hr~Qo?6O%{$di#w_7w!1T6V5*zAMs2f z-NpN6Q*Mx-+A8TQ*ERkQ%Li$j#(AeMowbKC+D45X_rp$-f4E%lqdxp>$|0VD9;!ErXT4QeT^`A0jOrC^zCTnZI)}V>n+U(8>Nd72eDfAefBvvBX70-StPw+uWX+mNN-^O1mD6Ns?$yB5a7Dn zjZfEc`P0Q~A2nEi>^s;w`u6RcR)6Hryty-f|LJF++O7BH`w;?s+R`KCIsSP(8=z-5 zX;NQv&&Q1?sJKrm+UwV^*oCW??X}Bq zJ03hOy=DIVIbrKB+eBLZnSW=@n0!0=>#yw-+3bQ~zcy2dmd<}JP`)EOKe_~Ck~LP- zW)1Dxg86OmkZ8wO_)fkfye;}LXTxLHWOqXLV?)E=1Roge!^G3fnKL7;{@9Rw{|_8E zFs=URZ#{Z+{_@RBm+aebWSb9zZ@&4x_8C5uUGju{qAuAd^7-?&^UO+kb(i*&w`pB* z{N!=z$zM5JH#R_k{q^@ADhp`|R`2UEj}`F*QT|83)?qN~?eC)~)}uV~5ta zJ9cdA;&J-+?Ir%wo?$=G$D*a{HdjA(>DwYA1Nv%zFBRI8><{z|p2PEaF3<1MrK5G~*v{t8nHjeJLxv1Vt3Pt6Me|1M znl!2Rt@f%k*9(*auNjlZ0Q{5&%c)Dmqp!u{V9hJAD*uM zel7@>RjXF*wO?}1?~ze@{OM1BGT>kPxyA2iF(yLyb=Ws%p7r}2*vbJmTWsNsO~4qC zJ=N7cXnUsL`JDQX962&q^`~CGj=s*m^zVn(-Phmm4N-sgOM>;M?!o#~_pItqJK-nk z3^}ep_49S}bqy{3=Ux{1y8C^^9BuG@A6kF;9Ok(G&{TUe_!B#It|9`=wm3TD8j6o9~3<9oD4ywBXwX*mDf_zxFM1Tz`H?f1vjPWD>7^U4x|` ztCZf?nSCkthJs)(nZ9Q)mOX9{c#O|zC%?!48Sq^6HslYoY5Mf(xvD>X@9PFF6-(gu z!To!|5?-NC`Az6}^<$Pk!3R9JA5U9+d-#m!c)sEL!TQUmHCOeA=G2RNQo;+`XLWm# z{yp9Y$Vc{4nWKZU#@9V4FTK3aOlJD}Q}|-M%kPW;B$Z^It`~UF1-_xbPeV=Dm z_i*yw^9^-puh`dLJ`y>qKYW6$_kBr;eDJaqIY=9@8RN@=tRq&!e~ym}eS0r;5Auz# zKlh^jvQ_7}{>XQ)r({-Q6F{!|vFZCeT)lI`GvVq^|NHvO2AHGz!#~tNSf6m$=;`Ph z{xilPc1C{hX&zc{&o6$CWy~O#sb?tP@E)?l*I)Bnj_c3-1kF5r9ev6Bi~;KJzk`ny z^@4wb_2&81JGAbMRd|lM3fV>dJ``_2qm%guq{T*6w&+ER=!}U9L2i%9} z=aheZ|NHu6R?>&upU;DJ&aB?P&vR3EWHD{0{_=6j3IDW|j_@7ptf0Oes{8xbp=%mm z^V`t({kko*46a8*KlAtb?z`{YIF|g63$As;UDvN)|9>}b+<2E_lfLTSy?e5JyOVqO z?wu^#U9#d^ljY}}93355KnGiOe+bb(~W7A0#=O;$X9aza8vvidh!@+(>Wmn>dM7QZJ; z7f+Vn#pka{|G_`z{}+Gw3YifaIq!2m0>< zZOU?gU7!2E|E<4Y)T~iyTfMr~e`wdX#rJL7w)`#?{+cosd@i)Pi#EDWkLG$EKxe8moAMuP z*R0Z7@eg+rmn6#fM?OGWLxy6te2=n4s1H;QU*q3|&s18D5bb*|Uo9Unp#2gD?T6zZ zhK~mRaQO74K>lzmmT6yMzNt^{&=$2fS7ShS@$<1GhPgfNw0OwnseX3yq4TkkL0`BW zUCWlR7=-b|i(iyr3xx#v2C&yp4h?+$h{;@|wHH2d{0@J-?7;V+O-#&CZ2af5p?8Ll zn>4O_i}=9xiox=ER?^DUeoyny%i-&wucePir5$tQ<|{YaeEGyIcJyYy6hE%xS{t*+ zN?go`u z*`xK-X018kjSRk%y03q4gVyL%rc5&0l1+0ne5`SEYld=~;RogY8!6d)b$*WC|1qmF zWUTw&!Uy;d;X9I~eP?3*@E2ge{J`OZ@(I{$`&1r3ebT)?qFBAx-?-rROF#VNW9>(O z$iDbi@xeN+Jy(awXU0A;w9^#>M_V!wIGZ;#=iQnsKPzIw8E+o= z`~dI&h!5r_`6>C=t_*zN|BjO1&C}i>v8VVQ;7db1^71vSY}fuhHcx(-rCuuLd@+j_ zDPYB)FJv#ukFHe7Vs3vQf4_b5W4WsJAA9iMsvq!$St*`p4US#PgShW)vMJ2czASCY zrnwnD*1qwr`SN4JM{1+S*#_rJia%*8)Nb0&n8jC@ehT`U(%!qTQ+~5dbJDo+;}jQr zMs5Gl`EtdJ5AYo!pVNyaidg<99<`_C!&$tT{MqD(TB~L?;*L%G#_EHLE>@mCKpwDv z&YJPGd<&UV@DugVgbv(yj%Y|*GBhxoH#&D}dy9Qs;>0&QU)7Y{R^+!zL5lw>{=ER7 zQ18#m+{he8A9&wZuE$Ln=VE$4|KfACcboj+;%vKYA%``-TeWU#g`R%gia+^;MHYI- z3P1jc<$vrU`9wUeu~5T0cWUS2WQQqtV$$B7DRNPE)ej{LelNQvV}M*?-dC1*cYIpr z$IaDm+vd9c%I|Y4K7N7tbFcGpbv~^4v3f`@A{+5{1^Z>k;x*4rNK_nv;Nt$pv+ynP z0psOAhn?c6_AKTuT;S-x|KI^Teg2%i^kPvflm8j3{Y){dlDCjWK9b*FeC%<1E`MI} ze{ts%sF(}++SRk&@@2!9=;Yb6c23X6hk|i1W9Cekr;6u+U5e>ls2BsKkdKq#eQMzq{FDLtRK0)jwCU62_rBEm$l!xX3_daXNuvKz z`HU1RTF`1fQQW%Zt7dI}TizN!RMM(E@~oA5BA*q1_9^i|b&GuYMfvEJv;CSI;Y)M^ z=EzI31%CU7Z(U9a^gn!)0rNtBY^HY1OM$v}%vNXd`~t z-bVeZqxJZ&+ScfIC9UkEPueTb%P(4Oe@-&7OPBUe-r@&%Li*8KjjO%lA#&9*-{ITm zb3hmlFLJy2-vH9q)wVU?y4N0#Dko|LkN- zem-9P(81b2R?+GfEMet}7P2QL7YmCIh^rx20{J-J)*cGFAGrjv)$NmAe~Nq_J#X&U z>&1%~nP~Z;+WUy`SZc{SnKkl%2pRlL^zt>ywRobem3!)0d-kcvB?q5$zWlrQ@0M>Q3LwkTCVku=j+_GKZX8x+fPnI z+W)rv?apYwl-w5R{pfn=^X=t7g`Y8be8ECVmb+^giYjCr)&8GkehM#1E^augaF}=FF8^Q}pWH z%lV5pY*1VNv#+|`g$onnq%VzDj*?zhsZv?xD5+xoTaGchW z_}G&t8yr>+9AYa54<7J=+K4?2I|ySQdk{Hf;Q6p}FlOkhx7Mp)i5bU#+=E;wLEsZi z&Jps7q`fb>yI1qmzWrLqq=Gy$^Cb8117)qVQtKwx1_Po7y7f!kf(6!pV1KJEU5B`l z7ZuY}yqNS~m1WDkKgJD@FUXRiKY zV~5<@w0VPco7Ws|p>GiQ*aCdliJS4S!saw>Eh-7^1UQB zW9sy&hWzS3puh76Z`7oLwQ1W%H1Ff)PxyVlbjEh=+qqm$Ns0r*kD4{%-hF#rEG6;^ zSxia(nGKqQhYX1}`Q?X&d`izXZ{8ePnC@@n$l#Yh8Op1~epoo*`_#UD z`>GmxcX$`tq{qwpB44w1b!gVgZQn z8!258zOPfKw%XrOd1gjB`yaLf;s}VJ+pT`Uf1I4T#8hxU`o-&`l*DNy>HdnD3A>NZ zUM2jkSo{p_A2TNQ7V$0k&!cB$fcOI6^z1;KL?~GEEM2}-Ym+!ffAan>(OgS>9Q@0C zLcgLbUlN_Mf$i4##%8uc^8VtbOK#mqZd>M1HCAz738cT=l5$qcQFT_%Ev-$fA2rf`j2^qJ?r-rQ^8u0XR%MeS8KqD6US!R ze#OXSXur-UxP=_$dBh+)NI&yuEo4@P#&m?f#%6`yOYBukjcasQV%rX?ZO8`VaEm@y zNIKsOvgNJPIDgwdQTsj+uhTB{+;=~C&n~@xGfSM)Sh%i!W!@e$W`t{hs6T_Je~%tL zGPGa0k8crk^`(5e(&9SQ$Dwf?nZ6c{(ta1_ntou6l1CYv9x`CQc;N-vyPnMdm=)F8 zAlMIxA7bp0iw%%p8Xu9*WJCG%b7D|;Hu=cAK>&_BM~Nbe$=rhoOu4&%e}lPC70uN*#Y*JP8+nA3EO`B zQE0znoHDe(ef!o&g&*3rYi;d8`!4 z2J!P1CFj(aEq%sBVT)a(3=>jQ8sRwm(byFRwtLpCR-LYd^@qbLF z?Z<~+J}w#Bud|5CYv1+HjgrdU-fP{m zsnw`fNpU;1Q=s)tgRJ1cmq}T_erik)rRo)gk0qk6yieW9VRuNnFtRUH{y~4*uNbim z?MDw%PK=?t$4A0ngzp2mqibu{w1GqWcCBo))+G4#;m3t9BG;=mUt_oS-@BKxsp9-V zZhyps?HZLlYS*kjpkCcNcQ_X)6t78_ zJtzDAX{{MJGbo7A@1D^70**_E1IHw*J&tP41md*jp>L09egvF1bm*YgIKn~AZ9$O# z-siwSqgeW&k6bwVGylesomY@BPZNYCmnyuKn=7=YRarhYcHc-|Y|WgJ64u*STpswj$`CRr|xyKC|}Y z3mWtXr7rm1YYlu~?T3cJb_Lt(uY;d^nup_ie2_iw2iu<$+I!v)ZGSl4_w=Xz^5eYk z_J{UCu)V?S+_XJh`)MQmfGr~kZ_~i8;X#~5&@VVM`YVs?J-45>A-jU@%I@0BI?8Y{ zU9=l8<~{#If5ts=Pd?TRpYyChERCl-3l*bz&+Ug-nd`A@5X%D4d!S9Q zAA)W6*P(5vj`+r7xAY+H1Yda{|3!O=XSy!^*T=c}m>SyRVFsH@Fp!@M$;>Mt%Z>ukZZ4Qog`jHqX;xcHXr!lr7ol}&B@GHLwH`l}a z%=h#WeFL8Wcb24dZC|2;1MWqeX=~`XhxVTSv|s+}_uYQ_fwuT|5>E09DY(6K$>^>APv?8klR*!S({e)83SVD0y9g9h+2xl&kT`1dJ& zn| z_V6@y^6d|8cQ9U!b_d%YI^XBE{fg7L=l0WX>drW#J-%(&)%{pSf9HMQ-e5`H8LPHV0|WT$dZ3&r0U`wqqOh?N?mVJ+~j(PTi=# zZy$RqvQaww4b*7_QQAblfSR_d)oOD zp7!}3yk92sA=mH<`V7~^6Z`xM{`-s<+7hJsgJ?Va8Kix%{fbAsul5IdHoI$bpEDkU z-}AKgrRVj`+8xfW6OQM-o)@m|&>jA#Oh`z$=k_z7Q}1AVvbv`I=%K!?zND_u-nZS$ zH(z>tPF8JajljIay|QaN?PmUm52PpGQ~UY7Z@+Ixb|quOx8JvwQu)r^8Y(U>&W-=9 z+8rG0p6<+_j4SjF@*)KFoZy(Jy|g{pe(7oV)&5{Rvb*-}4}K4tA_u86@_@Dn=^dnb zu57>yEBt@p>6l==Y7S<=W6`xY>VPGYSj2Mx*v0>x9tSW zpzSO4ntlr+_<8XC2X!61fAIRwojcC{E!la|@9pHIR36@c(Agf>v~Td8bk{q=53)Zv z$R_cFWY78<1ixw?nlshp-zIHJ>|0G6dv&P8p zDn@4|ImibmMt&$U%J&+h9I`RmlaEo}1qbELj?o@njQnL|lzTzlpYo@Dix}w*F|uFB z$cF2nyuC59=f%jT8!h`&&2gul@X=*$vmump$Eal#k)9 zAMq~_SNhY7tpE4|@%73$;c^Y&Q;&~1IT-La$M4+xp#M_W0DpAy6Z{?7_kr&--*5D# z_vNRL>1+C&JP*(ST4YN!edm7vh#&AYCzgm<8tO$oiLLQDL-OeQQQy+1=D$Oq8sAA|?_NBj`9 zN4|Sm{?LmrJm08trB~vrSF3QKW{t|%Yt^j$VJbe-Yw$7PJ>_T7_1}?QAEfkEO25&E zdJSB^>h*Q{nm(uRMGIsCb1F1}HqZ!K{j=~R;X(Z|_BmgL7`k5;En2v=>avem<-g-^ z*9Xu5T0oOj+CU>{^`K>dAOAluQT(~*m81VF<-<47M(4>8w-~K6-lLTFJ}V65+<^?x zSp`vdF+eeL>7la;24+P60XnAu^bdzVdjBr^={h|)e?2|=_R~2Bspz9K4>F>c-n)z5 z?i_c{a`)(|>-6ZQv$WHpw_c}1cfG!gp1rzT*68NWFjwv?*Z1^4w16g}xt|068si@w z^Cx-oJoJBb?)X~`>ep0^VFMS(=yGK#zSHH-3MsSAnWeao?7p+g=etQQ$$=9DaZ>4^ zIH_PREuVuZEti&jwTa132gNC+&)KANF;^(ZRuId5&aKpPSxRoKwES3{9T@;IK0$Ei zBr&b&uvo7H@cA@+NuI1A7Al4wa318SF{7NnIJAH!&;}X_f35Yvk0k4B5w{G8QzsXR zM@r71@O%)CH^RM_9WVT?KleG8h*t{cin^C;f39Vam$SR}x#IluCMb^H(*xRw_78H- z*X`2(HEvjEyg;5Qmy?UUT+orRqd40%H7ZB1V&#N5*SsN;Q@8`9iw+3 z7V1A`Op}7fz^XXsnnt3`sQgUR5)+eji zjO{s!KO$Gn9G%xV54sDCeRz@_Yn;WJB>&TW@?9bx`>^7fTzQn3-owfZbuX8jW^sKb+1;$0__@KXi{<9uEx;Q-m+N7t}gMX#iv?Suw6f^7cnvvTK zSrpW*a&;~L1WFa2~`45TFCpRf)7jq6XXWbI>!FxxQBj~VvS2&aO_^Fe2 zhFlcl0dhBRhM~`U;7aAWAomG*u*m(#{IF57fO!Ev2v_%X@1+|TjFG!zg5P`j+pAYM z#h#KkvEg5x{?av)&^L63tvh=eS%)s{b=fRS&6}&TL3aA@J$wm4uR%Zh8Zcm&v$tF#i;&Mna zmQO2B6FHd~x6qpWI?U&sFHEjka=Gq3EMIle`-Ji=ojiBOPU#F<@|d2M>_4NNVL{Lz zoN-JZ4?w;W@}`j6gOc1O?}-n{Y3lSsWPs)(=%1T$!kF8kSTMlZuh0bAJa~$yzhm1r z&65OoF6l1iBm?x3&-d(0>X&P1ElWS$+!#Cf0WZ_}V$k2WC;hna zEY=*BLCy z!?AsLlEDMW1ak6{5Ac2E)j}4KyZQI>hx}Tx&|fN+06u{Kup@E49BVx2pXs;>jE(iO zyYA9j6bu;9hrHk5uTFpEKS?473g=Iw8v$%UK3BRgkqNnm+C;lDLyq`M&&W;4cxUa7e#aida((}ZbbRQ(b?0{FBX5u`-Ge+p4$Cp) zM!IzYa|HQ~SSO$ZG6#@f>QCQ&=W{D@C~N9CDGBG=5IK?7XAY;tCkBYlJDof`ysgLMqLHS*Tw)K}YbRA$3t^y38O zAs;(#oK2rGUHJo#xp|#Dcbr8}PHA)ibU<ITI18YubAFsU~*0#a^an~W^0{w9hvC%@b_EVt=v`J5`2mh*5 z$2LiVz541vcWw!1m#}v7wy3mnbIO?koEs1pnlt$B9_iM|-m|i&P%@{b-6Qoo{&jXd z;lJn0IN9$;j~OE#nCPB!WY z^|}9yu|ImuXqRJ`{U}d+ayc^3uh;Vvv==)^c{#U=Hd}UVb+l)^VozfXKlM~zd-Cx| zggo|)@)Q<%_DOr8Xd%gkVvhdhHQsAfuk6ljXrlbRt(42MQ^&T}qk9)49~`;8SFKa- zdbN=?Bf0Cb4We_9Ym|J5*MA-?*GM;J-<&&isXCDN=W`kK3~wDd-5^Mm*>}(_o4r?M<4!;<$K~WcV<*0lCkiWmX8%#$RvNeDCRw?F_I6 zcV~L&e%`)Kn>p_!fj!t%uwM3`hn9TC85HEl=Uf7EgtGp^PPw0u{?3#@IXC(Ju$p5&N%$Ltze(EW!T(pRl$eY)SJp8ado9A~{;E{*yna3Ws{E`j% zo_JL2gA(q{mUeAhx!jD%fhv_=arZ)(IC|=YJEP{9TT7*k{sTziRM9|2L!*vHDf&?QM35}dYvj+9+xE!i} zEznuA8C&rIo#nG#I_62OJFqdbuXt3~XH$6q8HJ4iyYZ~qIwN4(G`HsyIv#k<-W#?B z5EC=lpb4}|Ppt?4O6Th&3Cg24H0_Lp?dVUUz49xAOfie9pM50$W*4;Qt{j~235@;;?AoAO)n{8|@i zt|+ct-u2{XsxZhr=)z!%rMPdw~8NqHv|BO=yXY zlritm)pB{QHU2~I!Je!?XUmuD--dpV*Yh>6Lx0YmBY*mrUw!HF<-4&j8}N)dvuvXJ z^)2;3`Npxsqd&Z^^Ak=;M)>g`nXizwezcr*d%TAA%h$lV{I;5P{Eg)MZ_8QZ-<7i3 zd7gJXP&V(=R#I}HC})=yE3Ev-6=Vm9)VU@vx%2$EUnk{_K6K)!?bjJCoPh<;k>4Eo z&wQ|3Iy^k^hI|N!vt~WGUp^+2wNJr*1^Q3=@g(|d%prRLV-cD_oAlIr@UOJjn8beL z$dNJbOeXTiXQ0363T?9kdINJ|5RCuO-*KiAXN(1rf&Qt_W6p>E=!rf*2{JxW;|ZN_ zitIqF_pjZ!;dl=pjn&#Syr}*Aw=@qkcA;7ECkj}%JT)xp;l>vGXgeG7>z3C4myO(6 zW$k`b(eXg7JVmX-qt95Wy!q_;#~-!wI=ilNg_lKl*^Oi)C|2}YcdxM%M%%&TM{JL5 zWmBh3PCfVGqP_9fn{F+_SrEHq2Vst4jq=U6-?$uOoFOxAyw3dz!|U|<4(@HF8Gi{UFeL{W)8{#1|s?9sdmUKIo5a2igCT_FgyZehZ~L&Xi6)Y5G)KD|vE7 zb{J$2<7$EIL~qI_{La;PmCL=KquEpW@>;uxs#?si+S=6L^tI{#)!#<_M;9CPi)PmS z*R`zGZ(p%`50`NIKxyfPWeOCqiY1@7GNnpb0oe%)Jd@v@?*K2Y5PuywCL6Qnw82AO zb@pJ+!{eE&W#`3*Z;QqPb_w>4|M15@xEx!^f5o`FdC#}cmpgQR#?j-Vzc5O)fF`|q zcH1W!6PHIE0I@)n#ETLW@~;B1LH|qeJd$faaqTrGvEQgOb7ZSYp+9x;^$OA?yKD5u z;MnIH`ultNGVJ*043&V4;aTw2Fr6o)9KSA4E9+{`ttv2G8zSI@2oMcX_Aae==} z1=pN?MtttC1o(qE0r&!*fFE)kGoZc3B=#FQXXJ#|vLI=f#=rPC$4DLDVd*cLgx&{x zfgkt2I{YMPf-u-EpuZpv5uasGm=Nuhtdbb@88 zS2`Osb^84`zjwK2;uYh84U;p3gY<{*8FQRh2S$q)(4=S2E=NR5;zWrZeliurToW^z zS0Ik~VF8|iABY)*7myFclY2hUW%$3Sfqjw$on1KcF8u@Y-=7tjlah1m{F#EjWK5=~ ztMce&Bme!gR;dqT9Q|Wm|FWLCtT}y^Z0VdsI$dl2d0P9gUcV-d{>=Y9d-rsEsQ7l? zl)S)q4?Uo0k!LJF=hHm$j1BxnYn%8Vz1@7!?{^KX(<4=^*<+=x))Pgoe7*wqqU=OZ zr_%nJr=M{AGdy;f=6&gXM-RKRNt-rpq;<&%r}tt1!{=n#DxHmvT|;(X&Pl{RgdK>w zFIOJHk+NYZ-BF2Cc(KmJ&L{3HJt$c`|7;rtZ(YpyvcxjZyxsLo((FI(|M%>h@O zuNFRFr8J+j2gKeVsFc5?HF~_fwS1zYwSKaK)qkd>Rgmm2Sx{#^<$T`IXU6KBz|gir ze|NXN#8&BDSB>!VwUVQQuGM3lMe!%=cD{h{P$(b(S zPtIiLEN}J!k+1FAx6!%WE#$+pPX2lyyYsB58|TzQ&zyoY+((RxaeIj9{QC|aupYg- zTD|(UtzEk|DKcJb9DIeHPorehLfNA^Bb&K^wIMbj@~g7eMVFl*-xW`PU+xtBPfAt* z&JBeoJ$iILD|%KHpm}AXybvkyx`co{cvkRofII@ZiXYd$ZxVaIoU?|!1b+PcahTJR zH7x!YL8OfT6j|cw%Dw{mrGvn)+kft#hn>ief7Zq5P~?i+B)xE<#yw~8F40;FKM>9o z#?}n|@x$w_c;DvDn_7#OO`TolL-7FnbMMQ3xIlA8Y3cRZ@j&B7b@Z&w&eqF%|A72T zChFYQ+S(hcFZz!hGt$W$_zwLeX817in`~Q>ZP+F83upg>Jz>uNVh@0`gjompHu}n< zC$p0A@8!NP??wLm`!m0I`lBCX_r>Q1ACE-Yi|1*KaUT0p@y;a8srY1IgWaZi2)W$4 zO>1k|sGiQQs$+9CS8(3idmqYIL^=WIG_G3Bd>pHNzGf-@f7L2--nwiw<2A>ucD{n_ z^Rd^1j@G412diGalGUhD#l?JMzvj$G?49g$cJ1E9?SW&PfIs0=&iZ8hQ*Y?5yl3v* zaNkB>GUog_trI4UGiahU;4#sUF^-IXE)~$6F`v`?A*>Ct8T?4d@Hcd5bdsRCa=g>A z(X;*d_jSu@nL_{Ej{g)rAUOYfnMjG<7x~ZLDgL(1qs*!3fSfP6OnL+T+`CU7=W~PK z%`UCGh{qYLwRS_D$y&QkP1$U#T1&}-9rE$VR&Z5ogUebU;@kh`<+q*f=KQ6LZr=bu zVD=A>=?py1xSc+2idC*$&Z<-{Z&k%3&098eKBB~g5etIN1AnB+`rf+D8*Q=HfAA$X zX?#<#|KT$}M!LV!-bwx}2rK_jiPylyN#nE!7%e}rK8HoH`~vzNWl;C`Ib)FbtOxyC z5Icci2mV;s|0HDkr@f{m_M4_mnIOM4`OFLWy)z$$f-#sC;2V5kgJ8}L{SADwOyd`u z_|j!MXFyo1b$XK4K%qc~LuZ;NJ3oFl=+XFkVh>{9m-rg?fJcoPC3=t1{x#<{?{dC2 zbLP)=^FYm-)vUUFc&f^`2RaVZ{>oaN*^a*Tmh`r_u3Wa)rMq7c{V7k%cCb~porMeM zStFelSFZfaTKAWAzvT?$7_9>qO1@+7CkEtzbb=Z+s<|^@i3uae0DQn)gv|o`KWF?n zTb9QE62+^8jw$-i&%d0V4o&2fcR++gpCca(Ydq*2T>G=$`wsz{v*ttJCs# z-|(2hNrKLwp5)F-=Dg&6@&Vl~-pwuWAI1(A1n2ttGuVUWdd=Dpf1#%=-53+}|;hGsH8Xx9yg%=4{0oR<2S}dyVVe8OUp;|1lq- z7knh06MryDY=8K#D2Hj7C6CyXW?nj=zN77&q0HFFW}&>coKtS(Sdj@3>6|!^LPVK2$RORf`@JWl{3Ej#7U|MGw>*A8oJ7u0JqpK zUnrfA`~v84)x{^(YgCu7f&4Z#-uGzkW4{l57ySoY13ux`&1Kif5fXDE2(<5$#NN*w^$~u|*w=}d_Ip7Ovh@4Q z_foP}n5r1xnX>J%-oE+XEyK?e+Y4*#W76gEo!xivpwqhth>msZ)v;!>0S%R1X1x3e zm;=UWO$dJs9X3?sE6U}Y>!xnDof^9 zs8B(=<{I~`0~))`MT~p=!0=0TwhGZ7TbIr#;VCyBkEIdf*Y@x++IjzW%vTtl`)zlM2GoF0WtyF z1AM~psl$%LzAHYz)ccJ5Z;pr##061~kiK23R!z;}b*)Xi){dsb#0x_-Uk@HSB&~dP z=pZ-d*~=Ruz8EIifXyLR^haKd(Yms)c%x3;T2?{xMBRF|-99sMV8``ratpwN*t!mi z7a04We*T&B14Zv+{Bwp>R%3~|lJge9>^U>se%#WfiOz2z^h_e}2NPOyW(TpaZQHh$ zt)nFvnH~Mdj~|^R*t~hOC98C{hJZZ-9!Q5&+km$bJc!b-cXC>?Z-~Cl+{gq2nd-weZ^wZey z=gR&A2iQQ#4g3cNi5L3y?MS;0lw+S1Jf>T~8`*5AHD9_Pl>fHc0PR9w`#4B-FQLor`~|E z2u)VYKK=do-)D;;k8ox^Hs;o?TZ5I^(O>&MN$mZ^#m!Z26OAW#bY1!KR{X+cmaPYoz()erT^qfu#pgqhL@B`~I_G;N9m?536uVj4Nwr#AQ zbj8L^8p#&eRkrsbPR6jGh+c6;d(Ozkcf?D`{C(0hH(*~}zSQ|5;A8Z;Xiv=N>(bwe z`zOAMJTR;W7)RNS4b}`dZs~kGVZnmA22EBhUlR7rG*5GXh8X-GN`G_!AzS+U@sF+h zgO7C1y711smtCLHZ}$rHq5Fo$l(!>=miSuWPlK)Z>}zM8E#O1ZA6|(9c=_5OKEtmU-_J#|-{XI4TPtFm>J2q|N{~7Z+9WU5joE#G^k;TYl#=jr;!SNnS|IqQzd5k)z31mzEapOiM z36AGJ(wZ8e&mcE51N`xzf&WZyf$bQ-VVOIe{f<1AM~@zM=NUprbbiX=z|2jNj}%+EgGlu<7n2jq2pWU?;#r@KAC$p?{C*$Ew(v$VuE}fTDNZI za%_wpH`?h6$b<`u8Dl?bL85X5i`MfN#yNW9V>(UiPJC3^AH=T1`rgg=Dv3$+;}bez zpAKD{@tXA+=L&jSLN{z#$Qk8ca{X=CyQ2rAqtuxv{w)7t{VyNu@ zLv6m=NV@$TmY+nGD&^DBzkIouUEBr!n9K+01+3M`1H>Ld zn>H<+tSDQiq;>At*1B|V=W^{~mtp+FE0d)c5LYmDme%bW&&2ZFP@gcrfBMDeX=i2Q z)8)^N_9gQVXQ)DJ_ySr(XMeUM`W-qxxv8+XvEFCR?(-R7FP=AVmhAsSEg>Q9p6Jg$ zQ^$@SLALadiFq|i(E4w-<7app`?}9{n3C^M=WeV04-$U9y`K^tuTTHp&MzBZF7|MS z41Lw@trKsB9)4M43mt*=8TmW-UXemi+jGkK(!5z?m*1nJ_V+pC0vjT}{Mhd<%WpKr zjw5=ejtff0FLWpG%Y~a)?d)~wg!h4SZ@=lzea7xftPq$h`a=_RGWf^C%NSq6S02>K z>;KSS=QDzA=|5zM{J(}oIhliR#g_u(hCBxM4AvwM7{pSB;_Y|eu}QMej?lhbNBL%r zl{{dsN5-=!a8!1{<0ntLcnthR+P81*=udnRI+1cqxjEtur>EV}JbmrckMA2-Kl#WGNtfkpWiLbKYW)vQ;xrF<+EaSE`_j{% zGDv^+89R6G46>#FplJF3iuchulW*U4K&OTGa|-(BZwd5s;z1d|@T{j7c3E=%CN4*R zOVl|m-5mY#=YQ(49CY?njAY1wm9MC68aL*!60r<5n{Qn7h z%Y#O$p6T_?dnw`3oPd1-WIw*b#0rz=5qjg-PfQQ-0523TY;)(&l`p{-`E=}Y^D^<= z_>_|e-0kVGW|WLZ@6b8Drt^H=UftEJn#Bb z$ukZgk%M}R_7B&sTj%!O@f8De=FD{YIA=@$2+}`P24pt=i7~{EA!JK`AOAUIaJ2JN z#a9)7MSRx$`sRN^>145&$+;}w5q+RN@gid;j8#6bl$c=nfP6mW6GYEjy?(9J0g?3{ z*aq-Bgx7o>kPW9KuXQ%Gi%aC(dYvI{J9qAMW10PaY`)Nzy}6CDQLUGM&|2k%T%$ch z@`JJ;#C{$5vze!ud&wh7->3Ti+RPbK@0tEOlUZkabjz0hy?b?4{C`(sO~j{fq&wR? z+!@~AeEY4-ZIfjw9txh-9lRzM&Yv~@jjs6&p8IQq@r=(NYXIatIlzfmU`>c!fHgns za^#<{i)^BVf#%V( z8YkPN@0`>;{eg5%LFLz9C)>B;hd*R;Z{ELO&|m0y*oB$rS?l35aOC(=x9<^--~YSb zV;nGNL@D#Sz^T zSxpX4Vmi1!ES~VsqU1YikZyh?6^B*ch5StPJ8&q7K)?g_G`zj92jPt7%{T!-znW(4gWI;-rgILgkQJEWnD zu8D)`(xqb>y6T!Ui@J90B;T1H@{by39on~49@P|Gi+L6_Yg*r4Df^PU#>bYp8~>Rv zt5qrI&Z5C5wTFDFd-V7#gJ(FT^u4D+hLW)%bPGjSy{C55_H>|60)3RyU+T9&U%Gy! zk5l_QrQg;69bN8E`Q%T$XZrW*)ysrz>EFIx%K?IHp)Fm$OLAVeZq@uQv@U8L0B3_b z$c~0BEr_;lTDrWIqm@j`F*aA>dhbBl2IY1gim?w3+Q~N5UAASF(lL{)vB z5wtl2e4nJ1>H99&xBQkqr|&%-hyn2X2SFb2wm)A6^?$GbLH~aJ`oRM^qJOg{_5VfK zD_9UsBm){Zbmvf}l!}KYCi*V)Io}C`mMt4=+#j+NCr-F^GCTmCw{25iAJH7JPG-#v z?U50T|3u~TYSf^X@$A19!nNoA-wX6xpigOIu+O=U(H;hLy;u5AojO(L`SgbeazuY* zfN1)ULL1@MUHS&1@hbvUeCvDCJ1*<|~q^X=ZH7|jhjXIQ$Q|6NvPxcdd)Ta>WC zGDCv)gwi8UukRvW`}`iGMh>@_VS|+qFIMl(cYbmB#@)p{U8i6{+&oK5`8`o=WoOE<&f6>!EJNkRsPl^4<%YWhx1`Zqua!vmfF38#c)v8q+E8u5p ze^j1Rd`|)SE`s2*ApG}oS_Xg1b@1N)I%uZ}+8dpH5gS_osMu@w$UhKY zYGO@2=;I*#ew{Cae)>UsAlLW=czFAtFQIu54}$(tQHp7biuxZxe`pj+LtbY`|8T$g z|Jpm3U8}Mx3{!SYd3D)_J{c6@7?~zU3xF` z=QqB2^QMad9z1vu`$zo-S&TnShhY@9!A#B5z!yj@RapWA-e&*kszv+v)n z*pE8U;{U}L%pZ&Ot)G9sC-{rgPWkIOS!ed-J>DPk`?CG9{AKgfef-ttOS|o7`*+*V zZGX0ZXHOcRB>QL0@!h+3k&W=D{4*oZPpt?3-JD)0`xgJ*^8Hiz%jZiE@n;Qi$j11K zOXjt%yq=%+klkm$@3udNzieK*&-QoX`?LLvyL2D_hYufi`{u^pxf|y%K1*}2eEtyo zivJYb&uzbazI31O-%0GpxVJ@$K4w6SO>ll{^B7%yQTI2WSz%&D!b2q zANKU2z5id?KJ&eKZ#`9*|2rhS6NUR!-|zfc0|bB80EcXpzqqWMzn)v^ov?TQ*roHA z?K6*mDtqo9Vz1A$-RHQU_TTLv_L={aCr`S4Mq?fDV*K&zjQ`;O;X+yRyZpD3R{Vly zO(eX=)Q^g_U#qxRcF%A6`s>&`sv*ozV4gm66JEcLeF0YT?^p|jux5kL;l(}d>stxy zJS435aAEC-gm>UPi)S(?hBhDz>q8NKb1u({|I?>WyR(vG9q>l@!}Z0B7v28;{B7Ew z%r$@SmtV&I46%m?W$Y}cq+8r8_OSbN?90Oci%s&LFAHZ9a1UCaxxF)YiO&)Ib&mOR z%unps7x&Sg@PGX&&Im@BA0=OaCNH7f9cb}~ zAHGlimU_S%+RU{tFUFOIyM#DQ?3sg%-L=@O9*DU#>=B+N{zKZij!naMDCXxLXYc+W z`^T^TA=UtfY?MD`4uAMm9N~kX<@c(sP@kZ>pKBHCd`;ZZ@FS)df99ahWe@*<#oFK@ z?tDI$x8FyfbB^s-{8rT4=2i4Z2Ppc&S`kjN7rwG3GAJ>r=7XdVlF)t?+x|$@;HAU z>#O*yy_X*1PkH_^&Y2HcoIgIm`NOx5ANI+(hxnuMiPQn&f$F=NbCrj)+dh7UvUT1{ zi*?pwE}hv=?d$Ir`)vQjRIC9E*%SOLK3sz>F(CGteE_jFv3Bdb)phxGG%Q(jCfjFi znRvU-%*l(l>pASJ{vP)3qV`^TO3aTRfPKZEHDDoonm-I_^I)WL71}OhLjJajadpkP zE6v_JVvp_fJm*gO+rmEcXY7hKU?Ge0XYc9C|5wa(jW!KV#LTq)jCGJ_U6}64T8vvd z+dlnsXJ2vOYj&SwzN*hB+eh>J75_2z#u~7YJ;A@l39iIT^Z|(Xaz7pa+4^qlI-K41 zsY|kt7WbvuuPf$j@yCu>0~WFvf5z@w_TOT~b=f6p+S{RVy6Rba1{#)(%gXmN9;fRS ze{bVGy{`6tH)B5Wr@zeKCi{m!Yk)#F!k<`6xw<~FAJ=*z&eY^`IXO~+t-)fi@oz_4mj~M zYk)!)}UB>T$tb3cEs->>*Hp2ixGkd5(oyQ|W0kd0Sb@8KB_WK6*Ax=L$4 zfyNQZSNCyE;{lc3XJ4=UT)SU_eYSu8cGdudEW-aMan_*w|B83MMqJq9!*#}h;Vzzj zFP~+;&Y$s5zrRY;MrHnD?YiPV*5~gQdvEt;|CF!%KV`uhfRM%cGyfCcntA6u?H}(6 zH2=NQ_;BXz&?ofI@$WFk&*{42KJKUgr|Z&uj*zGBIeX{r>Ak?dugw>G=1)3*%78iG zAsgeb_BHEV560&89GJL0>w2Y~ag}z~o}R+J>f_C|`=K$u%I-Bk+4(bu${g^JJ;%S| zH02uQ-N(P;oUb|SoSwoS&RO&x$Mu+4Zw`Cxzr~+9;313gXTApgfBZk?J%#C%do%yc zww2GEbAAfV5;?f2?=*qhtGuD3LtY414?i}xa9 zxl|WaaKjp(5;E+AXzr|_n z^)dXNG5v?*$B%b$ALW1g^y#h+wCsH<_c82=a}ORo*v<21T<*}JL+|T=bFX5(zBXU% zv;EVbW)5)3N5S8D=k$paC%QHon`B(^UhIp&SWv~kvUOb>Yx9-QXD>Ela_TtmIPpX9 znZw@OeDTMhxc$SQdcP_DnSt_SZM=0K&!K$X|LfV6=H4Smj&!jIz8LPT*(Nr2{$gC| ziu)Lwci(^b@ZpXR{+=;v)&MX++xfe%S6aT_wU|r8zT&?cJK2c+S1i_bZ47^Bd+gY; zZf*h07;}U_@ll_jryfk+@T7U-4&rb7}s} zF4om^D*nzpr&$Njdt}}ZFjt%T!0gFT*?J%Mmd&@=E4D+!BlcqG<}=a;F$P6@urBu5 z{x{7(Gf=+bIprG9!LG1hiJslkaAR)i-{Pz%_Md0Wkh+lhx9oi?cYdF?8Dp5QoBI@-Ux(epKJ(}O597Z}j{h^4Tk(G%lXZLsGup`ftg*a@nD_blmc6&Q zPqBIaCU57JuG)KXmuAdF@gK1!?|+tj|L6QOhs-hh8#@KlZx=-(} zl$X|Z*RAo+e7))`D=y;wtL&foG0gvn`9FUdcaqP%yMp~s;g2wv6aG_#y$a_DYux7u zb7SWS>ni37OqLYNf5o2pf4`eYcHFmu`}acr1OMySuXlZ&ZzF%|%v}C_Zz=wiJ!8wO zxu0)i{_pq4k(_^5u>UpuT~3}nxpnH)sW>|{&Jq3e)9#(?nKNg$kh5pcZk;=KZtMK{ z^II1#T-dsJ@nW1Y`@=Xx_D6Bn>W@3Qbm>yprd+vlW$WtIt6R)3<%}WD8AGmJyB6o~ zayIbKx_Za>I`8*y+_=%n&6_vlZ0euKdCb3v^O}DdXKMedI}d$zCN}3Hb2e^wMlR>1 z@?Mzp5?5#Db!Vq>eirZTI7f%GR95F{bmuCtw?6L?V}EV!v)qmEGS(b>Zg%hZWAD9g z4?gx`V=pfDV_NOW!@ext{v4}48oIUmtk+(x+3nVDuGa5q9hcVgXk7<$`?twzzPILm zqo2&DI_;am{z%BnkZ-656@T8l_wn~SQ1SOV(BiK;(BgmV)~)Vb^oqaN0nW}7|6B(+ zS3~^04luqi{$2;f-|N6?Z=S(Az#3la!D=nv`#QkduGRXU_j*+y{ulbMAwLND&NPbq zckh?LehKWCz + inkscape:version="0.48.4 r9939" + sodipodi:docname="icon_bitmap2component.svg" + inkscape:export-filename="E:\kicad-launchpad\kicad-bzr\bitmaps_png\icon_bitmap2component.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> @@ -22,6 +25,7 @@ image/svg+xml + @@ -35,14 +39,14 @@ inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1280" - inkscape:window-height="949" + inkscape:window-height="977" id="namedview345" showgrid="false" inkscape:zoom="4.9166667" inkscape:cx="24" inkscape:cy="23.59322" - inkscape:window-x="0" - inkscape:window-y="25" + inkscape:window-x="-4" + inkscape:window-y="-4" inkscape:window-maximized="1" inkscape:current-layer="svg2" /> + y="-0.34118" + x="-0.34118"> @@ -131,18 +135,18 @@ id="ba" xlink:href="#aw" gradientUnits="userSpaceOnUse" - cy="486.65" - cx="605.71" - gradientTransform="matrix(-.062854 0 0 .020588 46.705 34.451)" + cy="486.64999" + cx="605.71002" + gradientTransform="matrix(-0.062854,0,0,0.020588,46.705,34.451)" r="117.14" /> + x2="302.85999" + gradientTransform="matrix(0.062854,0,0,0.020588,1.2826,34.451)" + y1="366.64999" + x1="302.85999"> + r="0.54688001" /> + x1="6.5595999"> + x1="5.3347998"> + x2="24.082001" + gradientTransform="matrix(1.0732,0,0,1.0757,2.6528,-0.50307)" + y1="21.016001" + x1="21.568001" /> + r="77.922997"> + cx="258.76001" + gradientTransform="matrix(0.17369,-0.0023476,0.0017845,0.13208,-14.213,13.883)" + r="18.577999" /> + cx="439.04999" + gradientTransform="matrix(0.071034,-0.056703,0.11549,0.15363,-18.07,41.978)" + r="75.751999"> + x1="457.20001"> + gradientTransform="matrix(-0.15022,0.15417,-0.1987,-0.20393,113.38,-16.437)" + r="74.907997" /> + cx="441.35999" + gradientTransform="matrix(-0.012867,-0.088952,0.29168,-0.044437,-3.9993,74.887)" + r="75.755997"> + gradientTransform="matrix(-0.14051,-0.13746,0.12306,-0.13043,81.917,108.28)" + r="74.907997" /> + cx="344.26001" + gradientTransform="matrix(-0.013724,-0.24747,0.093642,-0.0055498,12.749,122.21)" + r="74.907997" /> + x1="469.35999" /> + cy="95.382004" + cx="529.40002" + gradientTransform="matrix(0,0.10037,-0.10096,0,38.13,-18.815)" + r="74.907997"> + gradientTransform="matrix(0,-0.096503,0.10561,0,11.021,76.299)" + r="74.907997"> + cx="459.45001" + gradientTransform="matrix(0.15094,-2.3254e-8,1.3013e-8,0.12469,-40.912,13.001)" + r="74.907997"> + gradientTransform="matrix(0.10492,-0.072831,0.035871,0.057009,-25.672,64.354)" + r="74.907997"> + cx="427.79999" + gradientTransform="matrix(-0.44827,0.10225,-0.081708,-0.35819,230.04,-5.144)" + r="74.907997"> + gradientTransform="matrix(0.942,-0.093118,0.12194,0.43761,-363.99,7.6542)" + r="2.0222001"> + r="2.0222001"> + x1="697.90997"> @@ -693,7 +697,7 @@ id="ch" gradientUnits="userSpaceOnUse" cy="7.2679" - cx="8.1436" + cx="8.1436005" gradientTransform="matrix(0.83037,0,0,0.95552,-34.846,-1.8031)" r="38.159"> + r="37.751999"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + id="g4556" + transform="translate(22.517791,-2.369546)"> - - - - + transform="matrix(0.4256726,0,0,0.4725695,-24.2945,2.8664656)" + id="g3214"> - - - - - - - - - - - - - - - - - + inkscape:connector-curvature="0" + style="opacity:0.3;fill:url(#radialGradient4571)" + id="path221" + d="M 12.491276,32.6163 V 37.616 C 9.5334885,37.625 5.3407,36.496 5.3407,35.116 c 0,-1.38 3.300737,-2.4995 7.150576,-2.4995 z" /> + style="opacity:0.3;fill:url(#linearGradient4573)" + id="rect223" + x="12.491277" + y="32.616299" + width="27.733829" + height="5" /> + inkscape:connector-curvature="0" + style="opacity:0.3;fill:url(#radialGradient4575)" + id="path225" + d="m 40.225015,32.6163 v 4.9997 c 2.957879,0.0094 7.150576,-1.1202 7.150576,-2.5002 0,-1.38 -3.300645,-2.5 -7.150485,-2.5 z" /> + + + + + + + + + + + + + height="2.5815265" + width="11.686437" + y="22.073664" + x="-15.861252" + id="rect4047-6" + style="opacity:0.3;fill:url(#linearGradient3974)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + style="fill:url(#XMLID_20_)" + id="rect184" + x="185.10001" + y="-76.116669" + width="36.259998" + height="11.18" /> + style="fill:url(#XMLID_21_)" + inkscape:connector-curvature="0" + id="path197" + d="m 185.1,-77.536667 v 9.77 c 12.5,-2.16 23.8,-7.14 36.3,-6.93 v -2.85 c 0,0.01 -36.3,0.01 -36.3,0.01 z" /> + + style="fill:#ffffff" + inkscape:connector-curvature="0" + id="path201" + d="m 148.5,-75.356667 c -3.1,1.63 -5.2,4.88 -5.2,8.61 0,5.37 4.3,9.74 9.7,9.74 5.4,0 9.7,-4.37 9.7,-9.74 0,-3.9 -2.3,-7.25 -5.6,-8.81 -0.9,-0.04 -1.8,-0.07 -2.8,-0.07 -2,0 -3.9,0.1 -5.8,0.27 z" /> + inkscape:connector-curvature="0" + id="path203" + d="m 144.2,-66.926667 c 0,4.57 3.7,8.29 8.3,8.29 4.5,0 8.2,-3.72 8.2,-8.29 0,-4.57 -3.7,-8.28 -8.2,-8.28 -4.6,0 -8.3,3.71 -8.3,8.28 z" /> + style="fill:url(#XMLID_22_)" + inkscape:connector-curvature="0" + id="path216" + d="m 116.1,-68.356667 c 0,4.29 3.5,7.78 7.8,7.78 4.3,0 7.8,-3.49 7.8,-7.78 0,-4.29 -3.5,-7.77 -7.8,-7.77 -4.3,0 -7.8,3.48 -7.8,7.77 z" /> + style="fill:url(#XMLID_23_)" + inkscape:connector-curvature="0" + id="path241-7" + d="m 123.9,-76.026667 c -2.5,0 -4.7,1.3 -5.7,3.18 0.3,2.54 2.7,4.52 5.7,4.52 3,0 5.4,-1.95 5.7,-4.47 -1,-1.9 -3.2,-3.23 -5.7,-3.23 z" /> - - - - - - - - - - - - - - - - - - - - - - - - - - + style="fill:url(#linearGradient3558)" + inkscape:connector-curvature="0" + id="path254" + d="m 147.1,-68.946667 c 1,1.92 2.9,3.26 5.2,3.26 2.4,0 4.5,-1.48 5.4,-3.58 -0.9,-1.98 -2.9,-3.37 -5.2,-3.37 -2.5,0 -4.5,1.54 -5.4,3.69 z" /> diff --git a/bitmaps_png/sources/image.svg b/bitmaps_png/sources/image.svg index d845d8c901..4997dd2593 100644 --- a/bitmaps_png/sources/image.svg +++ b/bitmaps_png/sources/image.svg @@ -1,32 +1,38 @@ + + + inkscape:version="0.48.4 r9939" + sodipodi:docname="Gnome-dev-camera.svg"> + id="metadata262"> image/svg+xml - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + id="g3239" + transform="matrix(0.493198,0,0,0.5064487,-7.2700036,65.334498)"> + + + + + + + + + + + + + + + + + + + + + + + + - + style="fill:url(#XMLID_20_)" + id="rect184" + x="185.10001" + y="-76.116669" + width="36.259998" + height="11.18" /> + style="fill:url(#XMLID_21_)" + inkscape:connector-curvature="0" + id="path197" + d="m 185.1,-77.536667 v 9.77 c 12.5,-2.16 23.8,-7.14 36.3,-6.93 v -2.85 c 0,0.01 -36.3,0.01 -36.3,0.01 z" /> + + style="fill:#ffffff" + inkscape:connector-curvature="0" + id="path201" + d="m 148.5,-75.356667 c -3.1,1.63 -5.2,4.88 -5.2,8.61 0,5.37 4.3,9.74 9.7,9.74 5.4,0 9.7,-4.37 9.7,-9.74 0,-3.9 -2.3,-7.25 -5.6,-8.81 -0.9,-0.04 -1.8,-0.07 -2.8,-0.07 -2,0 -3.9,0.1 -5.8,0.27 z" /> + inkscape:connector-curvature="0" + id="path203" + d="m 144.2,-66.926667 c 0,4.57 3.7,8.29 8.3,8.29 4.5,0 8.2,-3.72 8.2,-8.29 0,-4.57 -3.7,-8.28 -8.2,-8.28 -4.6,0 -8.3,3.71 -8.3,8.28 z" /> + style="fill:url(#XMLID_22_)" + inkscape:connector-curvature="0" + id="path216" + d="m 116.1,-68.356667 c 0,4.29 3.5,7.78 7.8,7.78 4.3,0 7.8,-3.49 7.8,-7.78 0,-4.29 -3.5,-7.77 -7.8,-7.77 -4.3,0 -7.8,3.48 -7.8,7.77 z" /> + style="fill:url(#XMLID_23_)" + inkscape:connector-curvature="0" + id="path241" + d="m 123.9,-76.026667 c -2.5,0 -4.7,1.3 -5.7,3.18 0.3,2.54 2.7,4.52 5.7,4.52 3,0 5.4,-1.95 5.7,-4.47 -1,-1.9 -3.2,-3.23 -5.7,-3.23 z" /> - - - - - - - - - - - - - - - - - - - - - - - - - - + style="fill:url(#XMLID_24_)" + inkscape:connector-curvature="0" + id="path254" + d="m 147.1,-68.946667 c 1,1.92 2.9,3.26 5.2,3.26 2.4,0 4.5,-1.48 5.4,-3.58 -0.9,-1.98 -2.9,-3.37 -5.2,-3.37 -2.5,0 -4.5,1.54 -5.4,3.69 z" /> + From b84ada1ab6a0b1554c14fc83f7d6b3fcf7d615fb Mon Sep 17 00:00:00 2001 From: Miguel Angel Ajo Date: Mon, 10 Feb 2014 10:15:48 +0100 Subject: [PATCH 23/52] Fix py26 testing for OSX, assertIsNotNone unavailable for py26 --- qa/testcases/test_002_board_class.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qa/testcases/test_002_board_class.py b/qa/testcases/test_002_board_class.py index 79773ba0c3..98f82abc29 100644 --- a/qa/testcases/test_002_board_class.py +++ b/qa/testcases/test_002_board_class.py @@ -88,7 +88,7 @@ class TestBoardClass(unittest.TestCase): self.assertTrue(result) pcb2 = LoadBoard(self.FILENAME) - self.assertIsNotNone(pcb2) + self.assertNotEqual(pcb2,None) tb = pcb2.GetTitleBlock() self.assertEqual(tb.GetTitle(),self.TITLE) From b7d5bd5ab8027ef83912984bd8e32d38381965c6 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Mon, 10 Feb 2014 10:30:08 +0100 Subject: [PATCH 24/52] Use environment KISYS3DMOD to know defaut path for 3D shapes in footprint editors dialogs. --- Documentation/compiling/COMPILING.txt | 78 ++-- common/edaappl.cpp | 19 +- pcbnew/dialogs/dialog_SVG_print.cpp | 2 +- .../dialog_edit_module_for_BoardEditor.cpp | 36 +- ...ialog_edit_module_for_BoardEditor_base.cpp | 11 +- ...ialog_edit_module_for_BoardEditor_base.fbp | 188 +++++++- .../dialog_edit_module_for_BoardEditor_base.h | 2 + .../dialog_edit_module_for_Modedit.cpp | 42 +- .../dialog_edit_module_for_Modedit_base.cpp | 15 +- .../dialog_edit_module_for_Modedit_base.fbp | 414 +++++++++++++----- .../dialog_edit_module_for_Modedit_base.h | 4 +- 11 files changed, 625 insertions(+), 186 deletions(-) diff --git a/Documentation/compiling/COMPILING.txt b/Documentation/compiling/COMPILING.txt index f53e7b10dc..fde596fa3a 100644 --- a/Documentation/compiling/COMPILING.txt +++ b/Documentation/compiling/COMPILING.txt @@ -31,15 +31,22 @@ KiCad from source. * bzr - Bazaar version control system * CMake - Cross-platform make * GLUT - The OpenGL Utility Library +* GLEW * wxGTK or wxWidgets - The wxWidgets GUI toolkit with GTK+ bindings +* libbz2 (dev) +* libcairo (dev) * Boost - Collection of portable C++ source libraries -boost will be automagically downloaded and copied in kicad sources tree, +boost will be automagically downloaded, copied in kicad sources tree and patched, the first time you compile kicad. Useful, but not required: * Doxygen - Documentation system for several programming languages +Required to build Kicad with scripting (using python) support: +Python +Swig + KiCad uses the Bazaar version control system to track source code changes, and download the boost libraries needed by Kicad. Be sure you bzr install also includes bzrtools. @@ -60,40 +67,43 @@ Install or Build wxWidgets WARNING: see wxWidgets_patch_notes.txt for patches and issues in wxWidgets. -If on Windows, download -http://sourceforge.net/projects/wxwindows/files/wxAll/2.9.3/wxWidgets-2.9.3.zip/download +On Windows, download +http://sourceforge.net/projects/wxwindows/files/3.0.0/wxWidgets-3.0.0.zip/download or a newer version. Do NOT use previous versions which all have annoying issues for KiCad. Start msys so you have a bash shell. Note also since 2.9 versions no need to build a "debug" version of the wxWidgets library, -the release abd the debug version are same. +the release and the debug version are same. Unzip the wxWidgets zip file into the build directory. Change directories into there, and then: mkdir Release cd Release - ../configure --enable-unicode --enable-monolithic=no --disable-shared --with-opengl + ../configure --with-opengl make and under Linux, but not under Windows: sudo make install that install wxWidgets libs and headers in /usr/local/ -If on linux, you can use your package manager to install the -development versions of the wxWidgets packages which include the C++ headers. An -alternative is to build static libaries from source. Verify that wx-config is in -your path by running it from a command prompt. Linux users then go to next step. +On linux, yo can also download wxWidgets 3.0 (recommandedd) +or you can use your package manager to install the +development versions of the wxWidgets packages which include the C++ headers. +The recommended way is to build wxWidgets from source, and use wxWidgets 3.0 +or more recent (Older versions have a print function which does not work). +Verify that wx-config is in your path by running it from a command prompt. +Linux users then go to next step. Install CMake ------------- -If windows, download the installation binary for windows from cmake.org. +On windows, download the installation binary for windows from cmake.org. Install that and choose to add cmake to your path during installation. You -will have to restart and command shells for the new path to take effect. +will have to restart your command shell for the new path to take effect. Verify that cmake is in your path by trying to run it from a command prompt. -If linux, use your package manager to install cmake. You should get cmake 2.6.4 +On linux, use your package manager to install cmake. You should get cmake 2.8.4 or later. If only an older one is available in your package repository, build cmake from source. Verify that cmake is in your path by trying to run it from a command prompt. @@ -106,25 +116,42 @@ To download files from Launchpad repository, you should install bazaar (bzr) th version control system like subversion, mercurial, git... Launchpad repository handle 2 branches for KiCda sources: -- a testing branch (used by developers) -- a stable branch (a copy of the testing branch, when this testing branch is near a stable state)) +- a product branch (used by developers, which is most of time usable in production) +- a stable branch (a copy of the testing branch, + when the product branch is a stable state)) +Remarks: +- The product branch is actively maintained +- From the product branch, you can go back to any previous version, using bzr features +- The stable branch is poorly or not maintained (and could be removed) -Testing branch: -bzr branch lp:kicad kicad_testing +In order to have a working Kicad installtion, you need +- sources to build binaries +- libraries (they are not included in sources) +- documentation and translations (they are not included in sources) + +product branch: +bzr branch lp:kicad kicad_src Stable branch: -bzr branch lp:kicad/stable kicad_stable +bzr branch lp:kicad/stable kicad_src Components and Footprints libraries -bzr branch lp:~kicad-lib-committers/kicad/library kicad_libraries +all (schematic libs, 3D shapes ...) but new footprints libraries (use Download zip tool) +https://github.com/KiCad/kicad-library/ +New footprints libraries (use Download zip tool for each lib you want) +https://github.com/KiCad/ for footprint libs (*.pretty folders) + +Note also Kicad is able to read on github.com/KiCad/ the *.pretty folders +without download, using github plugin. +(however the time to read them can be long) Documentation and translations: bzr branch lp:~kicad-developers/kicad/doc kicad_doc Create Makefiles with CMake --------------------------- -If windows, go into your msys shell. Linux and windows users both then make -two "out of source" build directories: +On windows, go into your msys shell. +Linux and windows users both then make two "out of source" build directories: cd mkdir -p build/release mkdir build/debug (if you want a debug version of KiCad) @@ -133,10 +160,10 @@ two "out of source" build directories: On either cmake command line shown below, you can optionally include -DCMAKE_INSTALL_PREFIX= -If windows, run the following command: +On windows, run the following command: cmake -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -DwxWidgets_ROOT_DIR= ../../ -If linux, run instead the following command: +On linux, run instead the following command: cmake -DCMAKE_BUILD_TYPE=Release ../../ Take a look at CMakeCache.txt, and in particular CMAKE_INSTALL_PREFIX, which @@ -166,18 +193,15 @@ On either cmake command line shown below, you can optionally include Although normally you do not install the Debug binaries, you can debug them where they were built. -If windows, run the following command: +On windows, run the following command: cmake -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debug -DwxWidgets_ROOT_DIR= ../../ where is /Release -If linux, run instead the following command: +On linux, run instead the following command: cmake -DCMAKE_BUILD_TYPE=Debug -DwxWidgets_USE_DEBUG=ON ../../ Make the Debug binaries: make -Note: that it is easy to build only a specific binary such as pcbnew alone: - make pcbnew - See ./cmake_config.txt for customizing the KiCad build setting. diff --git a/common/edaappl.cpp b/common/edaappl.cpp index c4780b49f3..289abc3b2c 100644 --- a/common/edaappl.cpp +++ b/common/edaappl.cpp @@ -1249,6 +1249,18 @@ bool EDA_APP::Set3DShapesPath( const wxString& aKiSys3Dmod ) } #elif defined(__UNIX__) // Linux and non-Apple Unix + // Try the home directory: + path.Empty(); + wxGetEnv( wxT("${HOME}", &path ) + path += wxT("/kicad/share/") + relpath; + + if( wxFileName::DirExists( path ) ) + { + wxSetEnv( aKiSys3Dmod, path ); + return true; + } + + // Try the standard install path: path = wxT("/usr/local/kicad/share/") + relpath; if( wxFileName::DirExists( path ) ) { @@ -1256,6 +1268,7 @@ bool EDA_APP::Set3DShapesPath( const wxString& aKiSys3Dmod ) return true; } + // Try the official distrib standard install path: path = wxT("/usr/share/kicad/") + relpath; if( wxFileName::DirExists( path ) ) { @@ -1264,7 +1277,11 @@ bool EDA_APP::Set3DShapesPath( const wxString& aKiSys3Dmod ) } #else // Windows - path = m_BinDir + wxT("../share/") + relpath; + // On Windows, the install path is given by the path of executables + wxFileName fn; + fn.AssignDir( m_BinDir ); + fn.RemoveLastDir(); + path = fn.GetPathWithSep() + wxT("share/") + relpath; if( wxFileName::DirExists( path ) ) { diff --git a/pcbnew/dialogs/dialog_SVG_print.cpp b/pcbnew/dialogs/dialog_SVG_print.cpp index f8eec0ad5b..cfd0f4fa3b 100644 --- a/pcbnew/dialogs/dialog_SVG_print.cpp +++ b/pcbnew/dialogs/dialog_SVG_print.cpp @@ -269,7 +269,7 @@ void DIALOG_SVG_PRINT::ExportSVGFile( bool aOnlyOneFile ) if( aOnlyOneFile ) { m_printMaskLayer = printMaskLayer; - suffix = wxT( "-brd" ); + suffix = wxT( "brd" ); } else { diff --git a/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.cpp b/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.cpp index 1a66d7e21b..00c860a3fd 100644 --- a/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.cpp +++ b/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.cpp @@ -242,6 +242,13 @@ void DIALOG_MODULE_BOARD_EDITOR::InitModeditProperties() { SetFocus(); + wxString default_path; + wxGetEnv( wxT( KISYS3DMOD ), &default_path ); +#ifdef __WINDOWS__ + default_path.Replace( wxT( "/" ), wxT( "\\" ) ); +#endif + m_textCtrl3DDefaultPath->SetValue( default_path ); + m_LastSelected3DShapeIndex = -1; // Init 3D shape list @@ -449,18 +456,25 @@ void DIALOG_MODULE_BOARD_EDITOR::Browse3DLib( wxCommandEvent& event ) wxFileName fn = fullfilename; wxGetApp().SaveLastVisitedLibraryPath( fn.GetPath() ); - /* If the file 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. + /* If the file path is already in the default search path + * list, just add the name to the list. Otherwise, add + * the name with the full or relative path. * the relative path, when possible is preferable, - * because it preserve use of default libraries paths, when the path is a - * sub path of these default paths + * because it preserve use of default search path, when the path is a + * sub path */ - shortfilename = - wxGetApp().ReturnFilenameWithRelativePathInLibPath( fullfilename ); - wxFileName aux = shortfilename; - if( aux.IsAbsolute() ) + wxString default_path; + wxGetEnv( wxT( KISYS3DMOD ), &default_path ); + fn.MakeRelativeTo( default_path ); + + // Here, we want a path relative only to the default_path + if( fn.GetPathWithSep().StartsWith( wxT("..") ) ) + fn = fullfilename; // keep the full file name + + shortfilename = fn.GetFullPath(); + + if( fn.IsAbsolute() ) { // Absolute path, ask if the user wants a relative one int diag = wxMessageBox( _( "Use a relative path?" ), @@ -469,8 +483,8 @@ void DIALOG_MODULE_BOARD_EDITOR::Browse3DLib( wxCommandEvent& event ) if( diag == wxYES ) { // Make it relative - aux.MakeRelativeTo( wxT(".") ); - shortfilename = aux.GetPathWithSep() + aux.GetFullName(); + fn.MakeRelativeTo( wxT(".") ); + shortfilename = fn.GetFullPath(); } } diff --git a/pcbnew/dialogs/dialog_edit_module_for_BoardEditor_base.cpp b/pcbnew/dialogs/dialog_edit_module_for_BoardEditor_base.cpp index 99efb9008e..ee0a156d12 100644 --- a/pcbnew/dialogs/dialog_edit_module_for_BoardEditor_base.cpp +++ b/pcbnew/dialogs/dialog_edit_module_for_BoardEditor_base.cpp @@ -309,7 +309,14 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare bSizerMain3D->Add( m_staticText3Dname, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); m_3D_ShapeNameListBox = new wxListBox( m_Panel3D, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE ); - bSizerMain3D->Add( m_3D_ShapeNameListBox, 0, wxALL|wxEXPAND, 5 ); + bSizerMain3D->Add( m_3D_ShapeNameListBox, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_staticTextDefault3DPath = new wxStaticText( m_Panel3D, wxID_ANY, _("Default Path (from KISYS3DMOD environment variable)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDefault3DPath->Wrap( -1 ); + bSizerMain3D->Add( m_staticTextDefault3DPath, 0, wxRIGHT|wxLEFT, 5 ); + + m_textCtrl3DDefaultPath = new wxTextCtrl( m_Panel3D, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); + bSizerMain3D->Add( m_textCtrl3DDefaultPath, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); wxBoxSizer* bLowerSizer3D; bLowerSizer3D = new wxBoxSizer( wxHORIZONTAL ); @@ -362,7 +369,7 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare bLowerSizer3D->Add( bSizer3DButtons, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizerMain3D->Add( bLowerSizer3D, 1, wxEXPAND, 5 ); + bSizerMain3D->Add( bLowerSizer3D, 0, wxEXPAND, 5 ); m_Panel3D->SetSizer( bSizerMain3D ); diff --git a/pcbnew/dialogs/dialog_edit_module_for_BoardEditor_base.fbp b/pcbnew/dialogs/dialog_edit_module_for_BoardEditor_base.fbp index 131c722600..032726aa21 100644 --- a/pcbnew/dialogs/dialog_edit_module_for_BoardEditor_base.fbp +++ b/pcbnew/dialogs/dialog_edit_module_for_BoardEditor_base.fbp @@ -97,7 +97,7 @@ 5 wxEXPAND | wxALL 1 - + 1 1 1 @@ -4336,11 +4336,11 @@ - + 3D settings 0 - + 1 1 1 @@ -4414,7 +4414,7 @@ - + bSizerMain3D wxVERTICAL @@ -4504,8 +4504,8 @@ 5 - wxALL|wxEXPAND - 0 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 1 1 1 @@ -4590,10 +4590,184 @@ + + 5 + wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Default Path (from KISYS3DMOD environment variable) + + 0 + + + 0 + + 1 + m_staticTextDefault3DPath + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrl3DDefaultPath + 1 + + + protected + 1 + + Resizable + 1 + + wxTE_READONLY + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 wxEXPAND - 1 + 0 bLowerSizer3D diff --git a/pcbnew/dialogs/dialog_edit_module_for_BoardEditor_base.h b/pcbnew/dialogs/dialog_edit_module_for_BoardEditor_base.h index 234f5b09f6..3a12366e63 100644 --- a/pcbnew/dialogs/dialog_edit_module_for_BoardEditor_base.h +++ b/pcbnew/dialogs/dialog_edit_module_for_BoardEditor_base.h @@ -106,6 +106,8 @@ class DIALOG_MODULE_BOARD_EDITOR_BASE : public DIALOG_SHIM wxPanel* m_Panel3D; wxStaticText* m_staticText3Dname; wxListBox* m_3D_ShapeNameListBox; + wxStaticText* m_staticTextDefault3DPath; + wxTextCtrl* m_textCtrl3DDefaultPath; wxBoxSizer* m_bSizerShapeScale; wxStaticText* m_staticTextShapeScale; wxBoxSizer* m_bSizerShapeOffset; diff --git a/pcbnew/dialogs/dialog_edit_module_for_Modedit.cpp b/pcbnew/dialogs/dialog_edit_module_for_Modedit.cpp index 0b97c21f0e..169e4e6c9a 100644 --- a/pcbnew/dialogs/dialog_edit_module_for_Modedit.cpp +++ b/pcbnew/dialogs/dialog_edit_module_for_Modedit.cpp @@ -7,10 +7,10 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr - * Copyright (C) 2013 Dick Hollenbeck, dick@softplc.com - * Copyright (C) 2008-2013 Wayne Stambaugh - * Copyright (C) 2004-2013 KiCad Developers, see change_log.txt for contributors. + * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2014 Dick Hollenbeck, dick@softplc.com + * Copyright (C) 2008-2014 Wayne Stambaugh + * Copyright (C) 2004-2014 KiCad Developers, see change_log.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 @@ -91,6 +91,14 @@ void DIALOG_MODULE_MODULE_EDITOR::initModeditProperties() { SetFocus(); + // Display the default path, given by environment variable KISYS3DMOD + wxString default_path; + wxGetEnv( wxT( KISYS3DMOD ), &default_path ); +#ifdef __WINDOWS__ + default_path.Replace( wxT( "/" ), wxT( "\\" ) ); +#endif + m_textCtrl3DDefaultPath->SetValue( default_path ); + m_lastSelected3DShapeIndex = -1; // Init 3D shape list @@ -313,17 +321,25 @@ void DIALOG_MODULE_MODULE_EDITOR::BrowseAndAdd3DLib( wxCommandEvent& event ) wxFileName fn = fullfilename; wxGetApp().SaveLastVisitedLibraryPath( fn.GetPath() ); - /* If the file 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. + /* If the file path is already in the default search path + * list, just add the name to the list. Otherwise, add + * the name with the full or relative path. * the relative path, when possible is preferable, - * because it preserve use of default libraries paths, when the path is a sub path of these default paths + * because it preserve use of default search path, when the path is a + * sub path */ - shortfilename = wxGetApp().ReturnFilenameWithRelativePathInLibPath( fullfilename ); - wxFileName aux = shortfilename; + wxString default_path; + wxGetEnv( wxT( KISYS3DMOD ), &default_path ); + fn.MakeRelativeTo( default_path ); - if( aux.IsAbsolute() ) + // Here, we want a path relative only to the default_path + if( fn.GetPathWithSep().StartsWith( wxT("..") ) ) + fn = fullfilename; // keep the full file name + + shortfilename = fn.GetFullPath(); + + if( fn.IsAbsolute() ) { // Absolute path, ask if the user wants a relative one int diag = wxMessageBox( _( "Use a relative path?" ), @@ -332,8 +348,8 @@ void DIALOG_MODULE_MODULE_EDITOR::BrowseAndAdd3DLib( wxCommandEvent& event ) if( diag == wxYES ) { // Make it relative - aux.MakeRelativeTo( wxT( "." ) ); - shortfilename = aux.GetPathWithSep() + aux.GetFullName(); + fn.MakeRelativeTo( wxT( "." ) ); + shortfilename = fn.GetFullPath(); } } diff --git a/pcbnew/dialogs/dialog_edit_module_for_Modedit_base.cpp b/pcbnew/dialogs/dialog_edit_module_for_Modedit_base.cpp index fd62e5b8da..093a513828 100644 --- a/pcbnew/dialogs/dialog_edit_module_for_Modedit_base.cpp +++ b/pcbnew/dialogs/dialog_edit_module_for_Modedit_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Oct 8 2012) +// C++ code generated with wxFormBuilder (version Nov 6 2013) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! @@ -238,12 +238,19 @@ DIALOG_MODULE_MODULE_EDITOR_BASE::DIALOG_MODULE_MODULE_EDITOR_BASE( wxWindow* pa wxBoxSizer* bSizerMain3D; bSizerMain3D = new wxBoxSizer( wxVERTICAL ); - m_staticText3Dname = new wxStaticText( m_Panel3D, wxID_ANY, _("3D Shape Name"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText3Dname = new wxStaticText( m_Panel3D, wxID_ANY, _("3D Shape Names"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText3Dname->Wrap( -1 ); bSizerMain3D->Add( m_staticText3Dname, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); m_3D_ShapeNameListBox = new wxListBox( m_Panel3D, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE ); - bSizerMain3D->Add( m_3D_ShapeNameListBox, 0, wxALL|wxEXPAND, 5 ); + bSizerMain3D->Add( m_3D_ShapeNameListBox, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_staticTextDefault3DPath = new wxStaticText( m_Panel3D, wxID_ANY, _("Default Path (from KISYS3DMOD environment variable)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDefault3DPath->Wrap( -1 ); + bSizerMain3D->Add( m_staticTextDefault3DPath, 0, wxRIGHT|wxLEFT, 5 ); + + m_textCtrl3DDefaultPath = new wxTextCtrl( m_Panel3D, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); + bSizerMain3D->Add( m_textCtrl3DDefaultPath, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); wxBoxSizer* bLowerSizer3D; bLowerSizer3D = new wxBoxSizer( wxHORIZONTAL ); @@ -293,7 +300,7 @@ DIALOG_MODULE_MODULE_EDITOR_BASE::DIALOG_MODULE_MODULE_EDITOR_BASE( wxWindow* pa bLowerSizer3D->Add( bSizer3DButtons, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizerMain3D->Add( bLowerSizer3D, 1, wxALL|wxEXPAND, 5 ); + bSizerMain3D->Add( bLowerSizer3D, 0, wxALL|wxEXPAND, 5 ); m_Panel3D->SetSizer( bSizerMain3D ); diff --git a/pcbnew/dialogs/dialog_edit_module_for_Modedit_base.fbp b/pcbnew/dialogs/dialog_edit_module_for_Modedit_base.fbp index aa3c448b54..f78792055f 100644 --- a/pcbnew/dialogs/dialog_edit_module_for_Modedit_base.fbp +++ b/pcbnew/dialogs/dialog_edit_module_for_Modedit_base.fbp @@ -20,8 +20,10 @@ . 1 + 1 1 1 + UI 0 0 @@ -177,7 +179,7 @@ Properties 1 - + 1 1 1 @@ -251,16 +253,16 @@ - + m_PanelPropertiesBoxSizer wxHORIZONTAL none - + 5 wxEXPAND|wxLEFT|wxRIGHT|wxTOP 1 - + wxID_ANY Fields @@ -268,11 +270,11 @@ wxVERTICAL none - + 5 wxTOP|wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -351,11 +353,11 @@ - + 5 wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND 0 - + 1 1 1 @@ -442,11 +444,11 @@ - + 5 wxTOP|wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -525,11 +527,11 @@ - + 5 wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND 0 - + 1 1 1 @@ -616,11 +618,11 @@ - + 5 wxTOP|wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -699,20 +701,20 @@ - + 5 wxEXPAND 0 - + bSizerRef wxHORIZONTAL none - + 5 wxBOTTOM|wxLEFT|wxRIGHT 1 - + 1 1 1 @@ -799,11 +801,11 @@ - + 5 wxBOTTOM|wxRIGHT 0 - + 1 1 1 @@ -889,11 +891,11 @@ - + 5 wxTOP|wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -972,20 +974,20 @@ - + 5 wxEXPAND 0 - + bSizerVal wxHORIZONTAL none - + 5 wxBOTTOM|wxLEFT|wxRIGHT 1 - + 1 1 1 @@ -1072,11 +1074,11 @@ - + 5 wxBOTTOM|wxRIGHT 0 - + 1 1 1 @@ -1162,21 +1164,21 @@ - + 5 0 - + 20 protected 0 - + 5 wxTOP|wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -1255,11 +1257,11 @@ - + 5 wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND 0 - + 1 1 1 @@ -1346,11 +1348,11 @@ - + 5 wxEXPAND 0 - + 0 protected 0 @@ -1358,29 +1360,29 @@ - + 5 0 - + m_PropRightSizer wxVERTICAL private - + 5 wxEXPAND 0 - + bSizerAttrib wxHORIZONTAL none - + 5 wxALL|wxEXPAND 1 - + 1 1 1 @@ -1466,11 +1468,11 @@ - + 5 wxALL|wxEXPAND 1 - + 1 1 1 @@ -1558,11 +1560,11 @@ - + 5 wxEXPAND|wxALL 0 - + wxID_ANY Auto Place @@ -1570,20 +1572,20 @@ wxHORIZONTAL none - + 5 1 - + bSizerRot90 wxVERTICAL none - + 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 - + 1 1 1 @@ -1662,11 +1664,11 @@ - + 5 wxEXPAND|wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -1772,20 +1774,20 @@ - + 5 1 - + bSizerRot180 wxVERTICAL none - + 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 - + 1 1 1 @@ -1864,11 +1866,11 @@ - + 5 wxEXPAND|wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -1976,11 +1978,11 @@ - + 5 wxEXPAND|wxALL 0 - + wxID_ANY Local Clearance Values @@ -1988,11 +1990,11 @@ wxVERTICAL none - + 5 wxALL 0 - + 1 1 1 @@ -2071,11 +2073,11 @@ - + 5 wxEXPAND 1 - + 3 wxBOTH 1 @@ -2087,11 +2089,11 @@ none 5 0 - + 5 wxLEFT|wxALIGN_CENTER_VERTICAL 0 - + 1 1 1 @@ -2170,11 +2172,11 @@ - + 5 wxALL|wxEXPAND 0 - + 1 1 1 @@ -2261,11 +2263,11 @@ - + 5 wxRIGHT|wxALIGN_CENTER_VERTICAL 0 - + 1 1 1 @@ -2344,11 +2346,11 @@ - + 5 wxEXPAND 0 - + 1 1 1 @@ -2425,11 +2427,11 @@ - + 5 wxEXPAND 0 - + 1 1 1 @@ -2506,11 +2508,11 @@ - + 5 wxEXPAND 0 - + 1 1 1 @@ -2587,11 +2589,11 @@ - + 5 wxALIGN_CENTER_VERTICAL|wxLEFT 0 - + 1 1 1 @@ -2670,11 +2672,11 @@ - + 5 wxALL|wxEXPAND 0 - + 1 1 1 @@ -2761,11 +2763,11 @@ - + 5 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 - + 1 1 1 @@ -2844,11 +2846,11 @@ - + 5 wxALIGN_CENTER_VERTICAL|wxLEFT 0 - + 1 1 1 @@ -2927,11 +2929,11 @@ - + 5 wxTOP|wxRIGHT|wxLEFT|wxEXPAND 0 - + 1 1 1 @@ -3018,11 +3020,11 @@ - + 5 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 - + 1 1 1 @@ -3101,11 +3103,11 @@ - + 5 wxALIGN_CENTER_VERTICAL|wxLEFT 0 - + 1 1 1 @@ -3184,11 +3186,11 @@ - + 5 wxALL|wxEXPAND 0 - + 1 1 1 @@ -3275,11 +3277,11 @@ - + 5 wxALIGN_CENTER_VERTICAL|wxRIGHT 0 - + 1 1 1 @@ -3482,7 +3484,7 @@ 0 0 wxID_ANY - 3D Shape Name + 3D Shape Names 0 @@ -3535,8 +3537,8 @@ 5 - wxALL|wxEXPAND - 0 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 1 1 1 @@ -3621,20 +3623,194 @@ + + 5 + wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Default Path (from KISYS3DMOD environment variable) + + 0 + + + 0 + + 1 + m_staticTextDefault3DPath + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrl3DDefaultPath + 1 + + + protected + 1 + + Resizable + 1 + + wxTE_READONLY + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 wxALL|wxEXPAND - 1 - + 0 + bLowerSizer3D wxHORIZONTAL none - + 5 wxEXPAND 1 - + wxID_ANY 3D Scale and Position @@ -3642,20 +3818,20 @@ wxVERTICAL protected - + 5 wxEXPAND 0 - + m_bSizerShapeScale wxVERTICAL protected - + 5 wxTOP|wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -3736,20 +3912,20 @@ - + 5 wxEXPAND 0 - + m_bSizerShapeOffset wxVERTICAL protected - + 5 wxTOP|wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -3830,20 +4006,20 @@ - + 5 wxEXPAND 0 - + m_bSizerShapeRotation wxVERTICAL protected - + 5 wxTOP|wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -3926,20 +4102,20 @@ - + 5 wxALIGN_CENTER_VERTICAL 0 - + bSizer3DButtons wxVERTICAL none - + 5 wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND 0 - + 1 1 1 @@ -4023,11 +4199,11 @@ - + 5 wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND 0 - + 1 1 1 diff --git a/pcbnew/dialogs/dialog_edit_module_for_Modedit_base.h b/pcbnew/dialogs/dialog_edit_module_for_Modedit_base.h index 9491f0b965..839854b525 100644 --- a/pcbnew/dialogs/dialog_edit_module_for_Modedit_base.h +++ b/pcbnew/dialogs/dialog_edit_module_for_Modedit_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Oct 8 2012) +// C++ code generated with wxFormBuilder (version Nov 6 2013) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! @@ -90,6 +90,8 @@ class DIALOG_MODULE_MODULE_EDITOR_BASE : public DIALOG_SHIM wxPanel* m_Panel3D; wxStaticText* m_staticText3Dname; wxListBox* m_3D_ShapeNameListBox; + wxStaticText* m_staticTextDefault3DPath; + wxTextCtrl* m_textCtrl3DDefaultPath; wxStaticBoxSizer* m_Sizer3DValues; wxBoxSizer* m_bSizerShapeScale; wxStaticText* m_staticTextShapeScale; From c795d04614c12d2e4a32ec395b8bbc5c2c6d2f18 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Mon, 10 Feb 2014 10:58:17 +0100 Subject: [PATCH 25/52] fix linux compil. --- common/edaappl.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/common/edaappl.cpp b/common/edaappl.cpp index 289abc3b2c..eb5b54bdd3 100644 --- a/common/edaappl.cpp +++ b/common/edaappl.cpp @@ -1251,7 +1251,7 @@ bool EDA_APP::Set3DShapesPath( const wxString& aKiSys3Dmod ) #elif defined(__UNIX__) // Linux and non-Apple Unix // Try the home directory: path.Empty(); - wxGetEnv( wxT("${HOME}", &path ) + wxGetEnv( wxT("HOME"), &path ); path += wxT("/kicad/share/") + relpath; if( wxFileName::DirExists( path ) ) @@ -1262,6 +1262,7 @@ bool EDA_APP::Set3DShapesPath( const wxString& aKiSys3Dmod ) // Try the standard install path: path = wxT("/usr/local/kicad/share/") + relpath; + if( wxFileName::DirExists( path ) ) { wxSetEnv( aKiSys3Dmod, path ); @@ -1270,6 +1271,7 @@ bool EDA_APP::Set3DShapesPath( const wxString& aKiSys3Dmod ) // Try the official distrib standard install path: path = wxT("/usr/share/kicad/") + relpath; + if( wxFileName::DirExists( path ) ) { wxSetEnv( aKiSys3Dmod, path ); From ae93328c213f3bc343fd0d776b0aa75f87e027e7 Mon Sep 17 00:00:00 2001 From: Lorenzo Marcantonio Date: Mon, 10 Feb 2014 18:19:15 +0100 Subject: [PATCH 26/52] - Do not autonumber NPTH pads on add in module editor (keep the number blank) Factored out the next-pad-number function --- pcbnew/pad_edition_functions.cpp | 49 ++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/pcbnew/pad_edition_functions.cpp b/pcbnew/pad_edition_functions.cpp index b99bd1580a..27ea996d8f 100644 --- a/pcbnew/pad_edition_functions.cpp +++ b/pcbnew/pad_edition_functions.cpp @@ -123,14 +123,34 @@ void PCB_BASE_FRAME::Import_Pad_Settings( D_PAD* aPad, bool aDraw ) aPad->GetParent()->SetLastEditTime(); } +/** Compute the 'next' pad number for autoincrement + * aPadName is the last pad name used */ +static wxString GetNextPadName( wxString aPadName ) +{ + // Automatically increment the current pad number. + int num = 0; + int ponder = 1; + + // Trim and extract the trailing numeric part + while( aPadName.Len() + && aPadName.Last() >= '0' + && aPadName.Last() <= '9' ) + { + num += ( aPadName.Last() - '0' ) * ponder; + aPadName.RemoveLast(); + ponder *= 10; + } + + num++; // Use next number for the new pad + aPadName << num; + + return aPadName; +} /* Add a new pad to aModule. */ void PCB_BASE_FRAME::AddPad( MODULE* aModule, bool draw ) { - // Last used pad name (pad num) - wxString lastPadName = GetDesignSettings().m_Pad_Master.GetPadName(); - m_Pcb->m_Status_Pcb = 0; aModule->SetLastEditTime(); @@ -152,22 +172,15 @@ void PCB_BASE_FRAME::AddPad( MODULE* aModule, bool draw ) RotatePoint( &pos0, -aModule->GetOrientation() ); pad->SetPos0( pos0 ); - // Automatically increment the current pad number. - long num = 0; - int ponder = 1; - - while( lastPadName.Len() && lastPadName.Last() >= '0' && lastPadName.Last() <= '9' ) - { - num += ( lastPadName.Last() - '0' ) * ponder; - lastPadName.RemoveLast(); - ponder *= 10; + /* NPTH pads take empty pad number (since they can't be connected), + * other pads get incremented from the last one edited */ + wxString padName; + if( pad->GetAttribute() != PAD_HOLE_NOT_PLATED ) { + padName = GetNextPadName( GetDesignSettings() + .m_Pad_Master.GetPadName() ); } - - num++; // Use next number for the new pad - lastPadName << num; - pad->SetPadName( lastPadName ); - - GetDesignSettings().m_Pad_Master.SetPadName(lastPadName); + pad->SetPadName( padName ); + GetDesignSettings().m_Pad_Master.SetPadName( padName ); aModule->CalculateBoundingBox(); SetMsgPanel( pad ); From 6c8b0ea59ce6176134d2b190eaba0facd54b3756 Mon Sep 17 00:00:00 2001 From: Fabrizio Tappero Date: Tue, 11 Feb 2014 19:32:09 +0100 Subject: [PATCH 27/52] Icon update, and an other very minor fix. --- bitmaps_png/CMakeLists.txt | 1 + bitmaps_png/cpp_26/add_dashed_line.cpp | 42 +- bitmaps_png/cpp_26/annotate.cpp | 94 +- bitmaps_png/cpp_26/datasheet.cpp | 199 ++- bitmaps_png/cpp_26/hidden_pin.cpp | 59 +- bitmaps_png/cpp_26/import_footprint_names.cpp | 166 +- bitmaps_png/cpp_26/py_script.cpp | 100 ++ bitmaps_png/sources/add_dashed_line.svg | 35 +- bitmaps_png/sources/annotate.svg | 79 +- bitmaps_png/sources/datasheet.svg | 103 +- bitmaps_png/sources/hidden_pin.svg | 76 +- .../sources/import_footprint_names.svg | 1385 ++++------------- bitmaps_png/sources/py_script.svg | 43 +- include/bitmaps.h | 1 + pcbnew/hotkeys.h | 2 +- 15 files changed, 851 insertions(+), 1534 deletions(-) create mode 100644 bitmaps_png/cpp_26/py_script.cpp diff --git a/bitmaps_png/CMakeLists.txt b/bitmaps_png/CMakeLists.txt index 75976e635a..944a5450fb 100644 --- a/bitmaps_png/CMakeLists.txt +++ b/bitmaps_png/CMakeLists.txt @@ -446,6 +446,7 @@ set( BMAPS_MID preference print_button ps_router + py_script ratsnest read_setup redo diff --git a/bitmaps_png/cpp_26/add_dashed_line.cpp b/bitmaps_png/cpp_26/add_dashed_line.cpp index 7e6bfcf752..e2db0b9363 100644 --- a/bitmaps_png/cpp_26/add_dashed_line.cpp +++ b/bitmaps_png/cpp_26/add_dashed_line.cpp @@ -8,26 +8,28 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, - 0xce, 0x00, 0x00, 0x01, 0x26, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f, - 0x03, 0x3d, 0x30, 0x55, 0x0d, 0x6b, 0x68, 0x68, 0x60, 0x49, 0xc9, 0x4c, 0xc9, 0x4e, 0xce, 0x49, - 0x79, 0x08, 0xc2, 0x20, 0x36, 0x48, 0x8c, 0xea, 0x16, 0x81, 0x0c, 0x8e, 0xaa, 0x8c, 0xfb, 0x6a, - 0xb1, 0xd6, 0xed, 0x3f, 0x08, 0x83, 0xd8, 0x20, 0x31, 0xaa, 0x5b, 0x04, 0xf2, 0x05, 0xc8, 0x02, - 0xad, 0x43, 0x36, 0x60, 0x0c, 0x62, 0x83, 0xc4, 0x86, 0xa6, 0x45, 0x0c, 0x0c, 0x17, 0xc5, 0x0c, - 0x8c, 0xe6, 0xde, 0x0f, 0x2f, 0x4d, 0xfa, 0x4b, 0xb3, 0xa0, 0x63, 0x60, 0x38, 0x27, 0xca, 0xc0, - 0x70, 0xe1, 0x04, 0x13, 0xd3, 0xb9, 0x0f, 0x06, 0xc6, 0x73, 0xee, 0xd2, 0x24, 0x31, 0x30, 0x30, - 0x9c, 0x11, 0x61, 0x60, 0x38, 0x7f, 0x02, 0x88, 0x3f, 0x80, 0x2c, 0x03, 0xf9, 0x8c, 0x26, 0xc9, - 0x1b, 0xe8, 0x9b, 0x76, 0x88, 0x25, 0x20, 0xcb, 0xce, 0x89, 0xd2, 0x2c, 0x1f, 0x01, 0x7d, 0x64, - 0x0e, 0xf4, 0x49, 0x0f, 0xc8, 0x67, 0x54, 0xcf, 0xb0, 0xd0, 0xe0, 0x0a, 0x05, 0xd2, 0xac, 0x34, - 0x2b, 0x19, 0x40, 0x71, 0x00, 0xb4, 0xe4, 0x24, 0x24, 0xb8, 0xce, 0x85, 0xd0, 0xc4, 0x22, 0x58, - 0xea, 0x82, 0xc6, 0x09, 0xd0, 0xb2, 0xab, 0x42, 0x54, 0xb7, 0x08, 0x18, 0x4c, 0x5c, 0x40, 0x8b, - 0x8e, 0x13, 0x4a, 0x5d, 0x54, 0xb0, 0xe8, 0xbc, 0x29, 0x34, 0xb8, 0x8e, 0xe3, 0x4b, 0x5d, 0x54, - 0x0a, 0xba, 0xf3, 0x56, 0x40, 0x2c, 0x40, 0xf5, 0x6a, 0x02, 0x9a, 0xba, 0xe6, 0x31, 0x30, 0x9c, - 0x0d, 0xa7, 0x59, 0x7d, 0x04, 0xb1, 0xe4, 0xdc, 0x31, 0x68, 0xc4, 0xcf, 0xa6, 0x89, 0x45, 0xa8, - 0x96, 0x80, 0x68, 0xfc, 0x99, 0x91, 0x68, 0x8b, 0xd0, 0x6b, 0x46, 0x63, 0xd3, 0x99, 0x57, 0x40, - 0x05, 0x24, 0xb5, 0x2c, 0x81, 0x5b, 0x84, 0x5e, 0x33, 0x86, 0x97, 0x26, 0xfc, 0x31, 0x34, 0x99, - 0x7d, 0x93, 0x5a, 0x96, 0xc0, 0x2d, 0xc2, 0x57, 0x61, 0x0d, 0x4d, 0x8b, 0xf0, 0x35, 0x2a, 0xa8, - 0x6a, 0x11, 0xbe, 0x66, 0xd2, 0xa0, 0x6c, 0xd7, 0xe1, 0xc3, 0x00, 0x42, 0x71, 0x3f, 0x3f, 0xa1, - 0x5f, 0x72, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, + 0xce, 0x00, 0x00, 0x01, 0x3f, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x95, 0xbd, 0x4a, 0x03, + 0x41, 0x14, 0x46, 0x4f, 0x82, 0x88, 0x22, 0x58, 0x0b, 0x36, 0x96, 0x22, 0x16, 0x06, 0x7f, 0x48, + 0xa5, 0x22, 0x88, 0xfa, 0x0e, 0x56, 0xbe, 0x4a, 0x1a, 0x0b, 0x1b, 0x1f, 0x42, 0xb0, 0xb2, 0xf1, + 0x01, 0xb6, 0xb1, 0x08, 0xe8, 0xce, 0xbd, 0x2b, 0x2e, 0xd8, 0xa8, 0x68, 0x14, 0xa3, 0x8d, 0xbe, + 0xc1, 0x58, 0x64, 0x75, 0x43, 0xb2, 0xab, 0x71, 0x76, 0xa6, 0x18, 0x66, 0x60, 0x67, 0x38, 0x7c, + 0x73, 0x76, 0xee, 0xc5, 0x5a, 0x4b, 0xa8, 0x01, 0x57, 0xf3, 0x3f, 0xeb, 0x70, 0x90, 0xeb, 0x3d, + 0x90, 0x77, 0x30, 0xad, 0x60, 0xa0, 0x1c, 0x22, 0x9f, 0x20, 0x0f, 0xa0, 0xb3, 0x81, 0x40, 0xe6, + 0x00, 0xe4, 0x03, 0xe4, 0x1e, 0x92, 0x45, 0xef, 0x89, 0x20, 0x99, 0xca, 0xd7, 0xba, 0x0f, 0x66, + 0xc1, 0xbb, 0x23, 0x90, 0x6d, 0xd0, 0x3b, 0x48, 0x9a, 0x85, 0xdf, 0xfd, 0x40, 0xe2, 0x1d, 0x90, + 0xb7, 0xcc, 0xc9, 0x0d, 0xa4, 0xe3, 0xde, 0x41, 0x90, 0xec, 0xf6, 0x89, 0x7f, 0x04, 0x59, 0x0a, + 0x92, 0x08, 0xf4, 0xb0, 0x07, 0x31, 0x4f, 0xa0, 0x8d, 0xd2, 0x7d, 0xee, 0x80, 0x68, 0xac, 0x37, + 0xdb, 0x1a, 0x98, 0x16, 0xc4, 0xcb, 0xbf, 0xee, 0x77, 0x74, 0xb2, 0x05, 0x72, 0x09, 0x32, 0x37, + 0xf2, 0x19, 0x87, 0xbf, 0x6b, 0x13, 0xb4, 0x9b, 0x39, 0x69, 0x83, 0xad, 0x7b, 0x07, 0x81, 0xd9, + 0x00, 0xe9, 0xe6, 0x4e, 0xcc, 0x4a, 0x90, 0x44, 0xa0, 0xa7, 0x2e, 0x10, 0x07, 0x50, 0x67, 0x12, + 0xe4, 0xe4, 0xbf, 0x90, 0x91, 0x40, 0x60, 0xd6, 0x41, 0xce, 0xa1, 0x3d, 0x5d, 0xe9, 0x19, 0xfc, + 0x0d, 0x31, 0xaf, 0x99, 0xf8, 0xb3, 0x20, 0xa0, 0x01, 0x48, 0x07, 0x64, 0xd5, 0x3b, 0x08, 0x6c, + 0x1d, 0xe4, 0x22, 0x83, 0x3c, 0x83, 0xae, 0x55, 0xae, 0x20, 0xe5, 0x89, 0xd2, 0x19, 0x90, 0x08, + 0xe2, 0xa6, 0x97, 0xc2, 0x3b, 0x7c, 0x5d, 0x7a, 0xfc, 0xfd, 0x08, 0xc1, 0xd6, 0xbc, 0xb5, 0x91, + 0x62, 0x27, 0x7a, 0xe4, 0xbd, 0xeb, 0x16, 0x88, 0x7f, 0x29, 0x6b, 0x5e, 0xd5, 0xaa, 0x3c, 0xd1, + 0x04, 0xe8, 0x6d, 0x48, 0x48, 0x5f, 0x22, 0x6d, 0x80, 0xa4, 0xa1, 0x20, 0x03, 0x8e, 0x86, 0xdb, + 0xaf, 0xcf, 0xf1, 0x05, 0x56, 0x13, 0x40, 0xc7, 0xbb, 0x6a, 0xb9, 0x16, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE add_dashed_line_xpm[1] = {{ png, sizeof( png ), "add_dashed_line_xpm" }}; diff --git a/bitmaps_png/cpp_26/annotate.cpp b/bitmaps_png/cpp_26/annotate.cpp index 3a22a66202..ac0d65c1a4 100644 --- a/bitmaps_png/cpp_26/annotate.cpp +++ b/bitmaps_png/cpp_26/annotate.cpp @@ -8,54 +8,52 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, - 0xce, 0x00, 0x00, 0x02, 0xe2, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x5b, 0x68, 0x13, - 0x41, 0x14, 0x86, 0xd7, 0x35, 0x97, 0x26, 0x16, 0x5a, 0xac, 0x34, 0x4d, 0x91, 0x5a, 0x11, 0xf1, - 0x82, 0x8a, 0x08, 0x82, 0x4f, 0xd2, 0x87, 0x3e, 0x08, 0x22, 0xa2, 0x88, 0x88, 0x60, 0x0b, 0x21, - 0x2f, 0x51, 0xac, 0x28, 0xda, 0x17, 0x2d, 0xc4, 0xc4, 0x58, 0x31, 0xb5, 0x3e, 0x08, 0x56, 0xac, - 0x77, 0x31, 0xa8, 0x50, 0xaa, 0x34, 0xc6, 0x14, 0x5a, 0x51, 0x44, 0x5a, 0x52, 0x41, 0x04, 0xa1, - 0xf6, 0x41, 0x4a, 0x1f, 0x82, 0x84, 0x5a, 0x8c, 0x97, 0x62, 0x62, 0x85, 0xf1, 0x3f, 0xc9, 0x49, - 0x19, 0xb7, 0xd9, 0xc4, 0x4d, 0xc5, 0x85, 0x8f, 0x99, 0x9d, 0xdd, 0x99, 0x7f, 0xfe, 0x39, 0xb3, - 0x73, 0x56, 0x11, 0x42, 0x28, 0xff, 0x03, 0x63, 0x2f, 0x2b, 0xca, 0x25, 0xb0, 0x5d, 0xba, 0x1f, - 0x00, 0x6f, 0xc0, 0x0d, 0x50, 0xc7, 0x6d, 0x4e, 0xf0, 0x04, 0x8c, 0x82, 0xeb, 0xc0, 0x66, 0x48, - 0x08, 0x97, 0x09, 0xbc, 0xa4, 0xce, 0x52, 0x5b, 0x94, 0xcb, 0x5d, 0x20, 0xc8, 0xf5, 0x7b, 0xc0, - 0x05, 0x16, 0x82, 0x9d, 0xa0, 0xc6, 0xa8, 0xd0, 0x56, 0x70, 0x1c, 0xf4, 0xe7, 0x11, 0x5a, 0x09, - 0xae, 0x72, 0xfd, 0xe9, 0xbc, 0x96, 0x0e, 0xd7, 0x59, 0xb0, 0x01, 0x74, 0x52, 0xc9, 0x6d, 0x1f, - 0xc0, 0x30, 0xf8, 0x08, 0xd6, 0x80, 0x55, 0xe0, 0xf2, 0x5f, 0x09, 0x79, 0x15, 0xc5, 0xae, 0x23, - 0x34, 0x08, 0x56, 0x03, 0x0f, 0x68, 0xe5, 0xb6, 0x7e, 0x50, 0x06, 0x1a, 0x40, 0x88, 0x96, 0x09, - 0xdc, 0x2d, 0x2a, 0x14, 0x50, 0x14, 0x87, 0xcf, 0x64, 0x9a, 0x0e, 0xd8, 0x6c, 0x3d, 0x10, 0x5c, - 0x22, 0x89, 0x38, 0x38, 0xb8, 0xf7, 0x99, 0xb0, 0xbc, 0x74, 0x5c, 0x1f, 0xe2, 0x32, 0x52, 0x54, - 0x08, 0x83, 0xd7, 0x03, 0x71, 0xab, 0xb1, 0x31, 0x75, 0xc6, 0x6a, 0x4d, 0xa2, 0xbe, 0x9b, 0x3b, - 0x1f, 0xa0, 0x00, 0x4b, 0x83, 0xf6, 0x81, 0x72, 0xf0, 0x0a, 0x6c, 0x03, 0xa7, 0xa4, 0x18, 0x5d, - 0x00, 0x77, 0xc0, 0x16, 0x70, 0x11, 0x2c, 0xd3, 0x15, 0x4a, 0xa7, 0xd3, 0x62, 0xa4, 0xbb, 0x5b, - 0x04, 0xec, 0xf6, 0x34, 0xb9, 0xab, 0xca, 0x0a, 0xd5, 0x4a, 0x42, 0x34, 0x78, 0x3d, 0x38, 0x09, - 0xce, 0x81, 0xfd, 0xb3, 0xdb, 0x38, 0xbb, 0x3b, 0x4f, 0x80, 0xdb, 0x60, 0x5f, 0x41, 0x47, 0x24, - 0x44, 0x7c, 0x1a, 0x1f, 0x9f, 0xe3, 0xae, 0xe4, 0x0f, 0x16, 0x03, 0xa8, 0xa0, 0x92, 0xf0, 0x29, - 0xca, 0x7a, 0x59, 0x28, 0x87, 0xec, 0x4e, 0x8e, 0x9d, 0x51, 0xa1, 0x00, 0x0d, 0x2e, 0xa3, 0x15, - 0xfa, 0x17, 0xee, 0x48, 0xc8, 0x94, 0xcf, 0x51, 0xac, 0xab, 0x4b, 0xf8, 0xad, 0xd6, 0x59, 0xfa, - 0x3c, 0x9e, 0x79, 0xb9, 0x2b, 0x18, 0x23, 0x3d, 0x34, 0xee, 0xf6, 0xe4, 0x26, 0xda, 0xc9, 0x1b, - 0xa2, 0x24, 0xa1, 0x67, 0x5e, 0xaf, 0xae, 0xe0, 0x23, 0xb7, 0x5b, 0x68, 0x96, 0x7d, 0xa2, 0x64, - 0x21, 0x5a, 0x36, 0xad, 0xc0, 0xb7, 0xa9, 0x29, 0xf1, 0xd8, 0xed, 0x9e, 0xc1, 0xc7, 0x9d, 0xf6, - 0xaa, 0x6a, 0x2b, 0xfa, 0x2c, 0x66, 0x57, 0x65, 0x85, 0x62, 0x54, 0x0e, 0x6a, 0x98, 0x8d, 0x39, - 0xa1, 0x48, 0x4b, 0x8b, 0x68, 0xaf, 0xa8, 0xc8, 0xcc, 0x94, 0xca, 0xc1, 0xb6, 0xb6, 0x4c, 0xfb, - 0x58, 0x34, 0x2a, 0x3a, 0x9c, 0xce, 0x1f, 0x88, 0xd3, 0x6b, 0x3f, 0x0e, 0x53, 0x23, 0x9b, 0xe1, - 0x9d, 0x64, 0xfd, 0x7b, 0x4e, 0x68, 0x3a, 0x99, 0x14, 0x5f, 0x12, 0x09, 0xe1, 0xb7, 0x58, 0x32, - 0xe5, 0xe7, 0x78, 0x5c, 0xf4, 0xba, 0x5c, 0x33, 0x3e, 0xb3, 0x39, 0x7d, 0x5a, 0x55, 0x8f, 0xd2, - 0x67, 0x61, 0x68, 0xd7, 0x3d, 0x44, 0xde, 0x20, 0xcb, 0x04, 0x66, 0xb8, 0x42, 0xbb, 0x74, 0x6f, - 0x43, 0x21, 0xf1, 0x3e, 0x12, 0x11, 0x41, 0x87, 0x83, 0x5c, 0xc4, 0x16, 0x65, 0xf3, 0xcd, 0x18, - 0x58, 0xca, 0x27, 0x01, 0x1d, 0xa8, 0x31, 0xce, 0x55, 0x3b, 0xb8, 0xed, 0x20, 0x18, 0x01, 0xcf, - 0xc1, 0xa6, 0xa2, 0x31, 0xfa, 0x3a, 0x39, 0x29, 0x7a, 0x9b, 0x9b, 0x33, 0xb1, 0x80, 0x8b, 0x23, - 0x78, 0x7d, 0x01, 0x3a, 0xae, 0xa3, 0x73, 0x8d, 0x8e, 0x20, 0x1e, 0xb4, 0x0e, 0x58, 0xf8, 0x14, - 0x1f, 0xe0, 0x36, 0x0b, 0x97, 0x74, 0x4c, 0xdd, 0x2c, 0x28, 0x34, 0x1a, 0x0e, 0x8b, 0x60, 0x75, - 0x75, 0x0a, 0x2e, 0x86, 0xc9, 0xa9, 0x26, 0x65, 0x5c, 0xc9, 0x09, 0x49, 0x6d, 0x34, 0x89, 0x17, - 0xd2, 0x3d, 0x1d, 0xba, 0x7b, 0x41, 0xbb, 0xae, 0x50, 0x4f, 0x53, 0xd3, 0x4f, 0xbf, 0xd9, 0x9c, - 0x82, 0x8b, 0xc3, 0xe4, 0x22, 0x4f, 0x6e, 0xca, 0x27, 0x44, 0xe9, 0xfb, 0x98, 0x74, 0x7f, 0x1e, - 0x4c, 0x80, 0xcd, 0xf9, 0x84, 0x6a, 0x31, 0xf8, 0x2f, 0xb8, 0x18, 0x82, 0x8b, 0xe5, 0x05, 0xb2, - 0xed, 0x1f, 0x42, 0xb8, 0xd6, 0x52, 0x8e, 0x52, 0x34, 0x1b, 0x04, 0x57, 0x65, 0x2e, 0xb5, 0xcf, - 0x19, 0x04, 0xc9, 0xcf, 0x99, 0xcf, 0x85, 0x9e, 0x10, 0x2f, 0x11, 0x65, 0x5f, 0x87, 0xf4, 0x5c, - 0x95, 0x84, 0x1e, 0x18, 0xfe, 0xdd, 0xe2, 0xce, 0xd7, 0x40, 0x82, 0x7f, 0xb3, 0xe8, 0x87, 0xe5, - 0x10, 0x88, 0xf3, 0xbf, 0xc3, 0x30, 0xbf, 0xd3, 0xc1, 0xc9, 0x91, 0x76, 0x5d, 0x43, 0x49, 0x42, - 0x06, 0x26, 0x54, 0x25, 0xdf, 0xff, 0x06, 0x98, 0xb8, 0xca, 0x4e, 0xe4, 0x43, 0x05, 0x5b, 0x00, - 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, + 0xce, 0x00, 0x00, 0x02, 0xba, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x4d, 0x68, 0x13, + 0x41, 0x18, 0x86, 0xc7, 0x35, 0x3f, 0x4d, 0x14, 0xaa, 0xa2, 0x49, 0xa3, 0x20, 0xd5, 0x5a, 0xf0, + 0xa0, 0xe0, 0x4d, 0xf0, 0xe0, 0xc5, 0x1e, 0x3c, 0x79, 0x28, 0xa2, 0x20, 0xd8, 0x42, 0x08, 0x6a, + 0xc0, 0xb6, 0x78, 0xb0, 0x82, 0x50, 0x4c, 0x1b, 0x83, 0x87, 0x8a, 0xd7, 0x1e, 0x02, 0xda, 0x8b, + 0x45, 0xc4, 0x92, 0x8a, 0x6d, 0xc8, 0x41, 0x6b, 0x15, 0xa4, 0xa9, 0x3f, 0x48, 0xc1, 0xff, 0x4b, + 0x11, 0xec, 0xa1, 0xa6, 0xc5, 0x54, 0x5b, 0xcc, 0xb6, 0xca, 0xf8, 0x7e, 0xe1, 0x5b, 0x19, 0xa6, + 0x9b, 0x34, 0xae, 0xd1, 0x81, 0x27, 0xfb, 0xcd, 0xce, 0x64, 0xde, 0x7d, 0x67, 0x76, 0xe6, 0x5b, + 0x21, 0xa5, 0x14, 0xff, 0x83, 0xca, 0x3b, 0x0a, 0x51, 0xa3, 0xd5, 0xd7, 0xac, 0xd2, 0xdf, 0x45, + 0x38, 0x11, 0x92, 0xaa, 0x18, 0xca, 0x4f, 0xaa, 0x83, 0x3b, 0xe0, 0x31, 0x78, 0x08, 0x8e, 0x28, + 0xed, 0x43, 0x44, 0x35, 0x84, 0xe8, 0xc7, 0x0f, 0xb6, 0x71, 0xfd, 0x20, 0xf8, 0xc0, 0xf1, 0x46, + 0xf0, 0x06, 0xbc, 0xa6, 0xb8, 0x1a, 0x42, 0x35, 0x1c, 0xbb, 0x41, 0x0a, 0x5c, 0xe4, 0xfa, 0x29, + 0x10, 0x07, 0x97, 0x28, 0xb6, 0x15, 0x8a, 0xe1, 0x29, 0x1d, 0x08, 0x5d, 0x07, 0xe7, 0x95, 0xb6, + 0x47, 0x60, 0x37, 0xd8, 0x09, 0xc6, 0x56, 0x08, 0x25, 0x84, 0x08, 0xf6, 0xb8, 0x5c, 0x8b, 0x09, + 0x9f, 0x6f, 0x10, 0x82, 0x9b, 0x35, 0xa1, 0xcf, 0x20, 0xc0, 0xf1, 0x16, 0x90, 0x07, 0x06, 0xd7, + 0xe7, 0xad, 0x85, 0x47, 0xd9, 0x0e, 0x0a, 0xdc, 0x7f, 0x0e, 0x2c, 0x15, 0xef, 0x69, 0x6e, 0xea, + 0x81, 0xec, 0x6f, 0x6a, 0x2a, 0x5c, 0xf6, 0x7a, 0xf3, 0x88, 0x9b, 0x15, 0xa1, 0x24, 0x38, 0xc1, + 0xd3, 0x74, 0x16, 0xdc, 0x52, 0xda, 0xbc, 0x4a, 0x7c, 0x41, 0x73, 0xd7, 0x51, 0xbc, 0x67, 0x27, + 0x64, 0x9a, 0xa6, 0x7c, 0x96, 0x4c, 0xca, 0x84, 0xdf, 0x6f, 0x5a, 0xee, 0xd0, 0xb9, 0x11, 0xdc, + 0x00, 0x9f, 0xc0, 0x4d, 0xb0, 0x87, 0x07, 0x5a, 0x0b, 0x16, 0x2c, 0x31, 0x94, 0x49, 0x72, 0xa0, + 0x08, 0xd5, 0x81, 0x97, 0x25, 0x85, 0x88, 0xd9, 0xa9, 0x29, 0x5b, 0x77, 0x8e, 0x36, 0x2c, 0x06, + 0x30, 0xc0, 0x06, 0x02, 0xaf, 0xc9, 0x5e, 0x55, 0xc8, 0x42, 0x77, 0xe7, 0x54, 0x28, 0x41, 0x83, + 0xab, 0xe8, 0x42, 0xd5, 0x70, 0x47, 0x42, 0x2e, 0x3b, 0x47, 0x13, 0x7d, 0x7d, 0x32, 0xee, 0xf5, + 0xfe, 0xe6, 0x5e, 0x34, 0xfa, 0x57, 0xee, 0xca, 0xae, 0x51, 0x29, 0x54, 0x77, 0xdd, 0x42, 0x1c, + 0xb5, 0x1e, 0xf4, 0x9a, 0x10, 0x3e, 0xc7, 0x42, 0xa3, 0xb1, 0x58, 0x49, 0xc1, 0xa1, 0x48, 0x44, + 0x6a, 0xd3, 0xfe, 0xd1, 0xb1, 0x10, 0x4d, 0x9b, 0x2e, 0xf0, 0x6d, 0x6e, 0x4e, 0xde, 0x8d, 0x44, + 0x96, 0xb1, 0xb9, 0xcd, 0x1e, 0xc3, 0xe8, 0xc4, 0x7f, 0x36, 0xb1, 0xab, 0x9a, 0x72, 0x6b, 0xb4, + 0x1e, 0xd4, 0x31, 0xfb, 0x2c, 0xa1, 0x91, 0xf6, 0x76, 0x79, 0xa5, 0xb6, 0xb6, 0xf8, 0xa4, 0x74, + 0x7d, 0xd0, 0xd5, 0x55, 0xbc, 0xff, 0x3e, 0x93, 0x91, 0x57, 0x43, 0xa1, 0xef, 0x58, 0xa7, 0xe7, + 0x58, 0xd3, 0xc6, 0x3f, 0x79, 0x19, 0x5e, 0x29, 0xd6, 0x17, 0x2c, 0xa1, 0xc5, 0x7c, 0x5e, 0xce, + 0xcf, 0xcc, 0xc8, 0xb8, 0xc7, 0x53, 0xbc, 0x7e, 0x99, 0x9e, 0x96, 0xa9, 0x70, 0x78, 0xb9, 0xc7, + 0xed, 0x36, 0xbb, 0x0d, 0xe3, 0x5c, 0x8c, 0x8f, 0x9f, 0x4a, 0x73, 0x94, 0xb8, 0x8d, 0x9d, 0x4d, + 0x96, 0x99, 0x06, 0x7d, 0xea, 0x26, 0x07, 0x06, 0xe4, 0xbb, 0x74, 0x5a, 0xf6, 0x06, 0x83, 0xe4, + 0xe2, 0x29, 0xda, 0x77, 0xd1, 0x99, 0x07, 0x46, 0x28, 0x0f, 0x69, 0xf9, 0x67, 0x82, 0x8e, 0x26, + 0x4e, 0x7a, 0x87, 0xc0, 0x0b, 0x30, 0x0e, 0x9a, 0xcb, 0xae, 0xd1, 0xd7, 0x5c, 0x4e, 0xa6, 0x5a, + 0x5b, 0x8b, 0x6b, 0x01, 0x17, 0x1d, 0x92, 0x9f, 0x18, 0x65, 0x1d, 0x68, 0x00, 0x19, 0x45, 0xa8, + 0x9e, 0xaf, 0x9d, 0xe0, 0x30, 0x9d, 0x89, 0x5c, 0xf7, 0x80, 0xd1, 0x92, 0x42, 0x6f, 0x87, 0x87, + 0x65, 0x6f, 0x20, 0x50, 0x80, 0x8b, 0x2c, 0xd6, 0xa2, 0xa1, 0x44, 0xea, 0xc8, 0xd8, 0xdc, 0x8b, + 0x82, 0xe3, 0x1c, 0xfb, 0xc0, 0x7e, 0x41, 0x13, 0x67, 0x27, 0x34, 0xd8, 0xd2, 0xb2, 0x14, 0x77, + 0xbb, 0x0b, 0x70, 0xd1, 0x26, 0xcb, 0xcd, 0xbb, 0x26, 0xc4, 0x4e, 0xc7, 0x04, 0xef, 0x27, 0x94, + 0xd3, 0x60, 0x0a, 0x1c, 0xd3, 0x85, 0xb6, 0x62, 0xf0, 0x1f, 0x70, 0x31, 0x0e, 0x17, 0x3b, 0x2a, + 0xc8, 0xba, 0xba, 0x50, 0x3f, 0x38, 0xa0, 0xbf, 0x20, 0xe0, 0xc9, 0x8a, 0x3f, 0x23, 0xf9, 0x85, + 0xe4, 0x2a, 0x5f, 0x38, 0x76, 0x42, 0x28, 0x6d, 0x94, 0x7b, 0x94, 0xba, 0xa1, 0xc4, 0xf7, 0x9d, + 0x1d, 0xf9, 0xd8, 0x7b, 0x20, 0xcb, 0x59, 0x36, 0xcb, 0xf5, 0x1c, 0xc7, 0xc4, 0x49, 0x70, 0x06, + 0xa4, 0x39, 0xad, 0x87, 0xff, 0xed, 0x47, 0x23, 0x4e, 0x0b, 0x4a, 0x8c, 0x14, 0xff, 0x02, 0xf9, + 0xe5, 0xd4, 0x72, 0xb3, 0x13, 0xa5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, + 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE annotate_xpm[1] = {{ png, sizeof( png ), "annotate_xpm" }}; diff --git a/bitmaps_png/cpp_26/datasheet.cpp b/bitmaps_png/cpp_26/datasheet.cpp index b1eee6fec4..91bff1e34e 100644 --- a/bitmaps_png/cpp_26/datasheet.cpp +++ b/bitmaps_png/cpp_26/datasheet.cpp @@ -8,106 +8,105 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, - 0xce, 0x00, 0x00, 0x06, 0x19, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xad, 0x96, 0x6b, 0x4c, 0x5a, - 0x67, 0x18, 0xc7, 0xbb, 0xfb, 0x25, 0x5b, 0x17, 0x9b, 0x2c, 0xcd, 0xb2, 0xc5, 0xf4, 0xc3, 0xd6, - 0x2d, 0xbb, 0x25, 0x5d, 0xb3, 0x98, 0x7e, 0x68, 0xb2, 0x58, 0x93, 0xb5, 0xeb, 0xcd, 0x64, 0xcd, - 0xda, 0x26, 0x4d, 0xbb, 0x69, 0xdd, 0x66, 0x5b, 0x6d, 0xc4, 0xcb, 0xac, 0xd6, 0x56, 0x05, 0xb5, - 0x5a, 0x45, 0xb1, 0x0a, 0x5a, 0x40, 0xb4, 0xde, 0x2f, 0x45, 0xf0, 0x86, 0x8a, 0x80, 0x88, 0x08, - 0x05, 0x14, 0x44, 0xae, 0x47, 0xe4, 0x26, 0x88, 0x94, 0x82, 0x0a, 0x56, 0x51, 0xc1, 0xb3, 0xf7, - 0x98, 0xd1, 0x58, 0x2f, 0x9b, 0x26, 0x3b, 0xc9, 0x3f, 0x27, 0xef, 0x79, 0xce, 0xfb, 0xfc, 0xce, - 0xfb, 0xfc, 0xcf, 0x7b, 0xd9, 0x03, 0xc3, 0xf0, 0x9e, 0xf5, 0x02, 0xd7, 0xeb, 0x40, 0xef, 0x85, - 0x84, 0x84, 0xec, 0x3f, 0x75, 0x2a, 0xf4, 0xe3, 0xdd, 0xe8, 0xe8, 0xd1, 0xa3, 0x1f, 0x81, 0xbe, - 0xef, 0x03, 0xbd, 0xb5, 0x29, 0xef, 0xfa, 0xc6, 0xbe, 0x7d, 0xfb, 0xf6, 0x3e, 0x24, 0xe0, 0x7e, - 0x19, 0x95, 0x89, 0x49, 0x90, 0x56, 0x45, 0x1d, 0x87, 0x94, 0x4d, 0x5a, 0xf5, 0x58, 0xbd, 0x5a, - 0x29, 0xab, 0x51, 0x8c, 0x8d, 0x54, 0xc9, 0xa5, 0x22, 0x8a, 0x4c, 0x22, 0x20, 0x0d, 0x8b, 0xf8, - 0xe5, 0x22, 0xc1, 0x00, 0x5e, 0x30, 0xc4, 0x79, 0x30, 0x34, 0xc8, 0x2a, 0xe4, 0x71, 0x7b, 0xf3, - 0xfb, 0xd9, 0x5d, 0xb9, 0xcc, 0x9e, 0xb6, 0x1c, 0x5a, 0x73, 0x75, 0x4a, 0x51, 0x01, 0xe6, 0xe7, - 0x43, 0x87, 0x0e, 0x7d, 0x08, 0x80, 0xaf, 0x6c, 0x02, 0x81, 0xeb, 0x1d, 0x46, 0x27, 0x35, 0x71, - 0xd9, 0xeb, 0xb5, 0xfb, 0x7c, 0x2b, 0x33, 0xcb, 0xcb, 0xde, 0xe9, 0xc5, 0xc5, 0x05, 0xd3, 0xc2, - 0xbc, 0x07, 0x9a, 0xf7, 0xb8, 0xe5, 0x73, 0xb3, 0x2e, 0x89, 0xcb, 0xf9, 0x94, 0xef, 0x1a, 0x19, - 0x52, 0x3a, 0x78, 0x0c, 0xa5, 0x75, 0xd2, 0xd8, 0x6a, 0x32, 0xe8, 0x1a, 0x0c, 0x3a, 0x6d, 0x25, - 0xa4, 0x56, 0x94, 0x2b, 0xe5, 0x92, 0x62, 0xe9, 0xf0, 0xd0, 0x7d, 0x91, 0x90, 0x8b, 0x06, 0xd0, - 0xb4, 0x0a, 0x62, 0x71, 0x74, 0x50, 0x50, 0xd0, 0x07, 0x9b, 0x40, 0xb1, 0xd1, 0x57, 0x0f, 0xcf, - 0xce, 0xb8, 0x46, 0x57, 0x56, 0x96, 0x5d, 0x4b, 0x5e, 0xaf, 0x0d, 0x40, 0x8c, 0xf3, 0xf3, 0x1e, - 0xad, 0xc7, 0x33, 0x3b, 0x3a, 0x37, 0xeb, 0x14, 0x01, 0x08, 0xcf, 0x61, 0xb7, 0xf5, 0xcd, 0xd4, - 0x3e, 0xf0, 0x3a, 0x8b, 0xd3, 0xe0, 0x49, 0x3e, 0xb3, 0x67, 0x02, 0x52, 0x53, 0x20, 0xd5, 0x28, - 0x41, 0x39, 0x2a, 0x29, 0x92, 0x0e, 0xf3, 0x73, 0x85, 0x43, 0xec, 0xcc, 0xc1, 0xfe, 0xee, 0x94, - 0xbe, 0xee, 0xd6, 0xf8, 0x0e, 0x5a, 0x7d, 0x42, 0xfa, 0xed, 0x84, 0x50, 0x30, 0x80, 0xd7, 0x5e, - 0x80, 0x90, 0x46, 0x6e, 0xf6, 0xed, 0x33, 0x20, 0xb9, 0x05, 0x40, 0xac, 0xe0, 0xae, 0x9f, 0x9f, - 0x77, 0xab, 0xdd, 0xee, 0x19, 0x19, 0x80, 0x08, 0x01, 0x84, 0xfb, 0xd4, 0x3e, 0xd5, 0x6b, 0xb3, - 0x4e, 0xb6, 0x3b, 0x1f, 0x15, 0x39, 0x1d, 0xd9, 0x37, 0x61, 0x53, 0x5f, 0x5b, 0xbb, 0x46, 0x29, - 0xc5, 0x83, 0x72, 0x16, 0x8e, 0x88, 0x06, 0x73, 0x84, 0x83, 0xec, 0x8c, 0x01, 0x36, 0xe3, 0x56, - 0x6f, 0x67, 0x0b, 0xaa, 0xa7, 0xb3, 0x25, 0x0e, 0xd1, 0x83, 0xa2, 0x7b, 0x97, 0x40, 0xee, 0x37, - 0xd7, 0x83, 0xde, 0xc0, 0x62, 0xb3, 0x2e, 0x2c, 0x2e, 0x2c, 0x98, 0x16, 0x17, 0x9e, 0xeb, 0x00, - 0x44, 0x39, 0x37, 0x37, 0x33, 0xe2, 0x72, 0x3d, 0x13, 0x3c, 0x73, 0x4c, 0xf7, 0x03, 0x48, 0xb7, - 0xcd, 0x6a, 0xa6, 0x4f, 0x9a, 0xf4, 0x4d, 0x56, 0x5a, 0xb5, 0xc0, 0x9e, 0x1a, 0x01, 0x43, 0xfc, - 0x3e, 0x8a, 0x42, 0x26, 0x2e, 0x00, 0x90, 0x6c, 0x01, 0x8f, 0x79, 0x97, 0xdd, 0x4b, 0x4f, 0x0a, - 0x00, 0x02, 0x22, 0x96, 0xe3, 0x7e, 0x47, 0x2c, 0x79, 0x09, 0x84, 0xc3, 0xde, 0xbb, 0x00, 0x4a, - 0xa5, 0xf1, 0xb8, 0xe7, 0x14, 0x00, 0x22, 0x01, 0x10, 0x3e, 0x80, 0xb0, 0xed, 0x36, 0x2b, 0x63, - 0xca, 0x6a, 0x6e, 0x35, 0x9b, 0x74, 0x0d, 0x7a, 0x9d, 0xba, 0xca, 0xdc, 0x44, 0xe4, 0xd8, 0x6e, - 0x9e, 0x83, 0x35, 0x75, 0x84, 0x46, 0x00, 0x48, 0x47, 0x00, 0x4c, 0x06, 0x35, 0x6e, 0x23, 0x04, - 0x51, 0xc5, 0x76, 0x20, 0xf7, 0xec, 0x8c, 0x6c, 0x76, 0xc6, 0x29, 0x76, 0xb9, 0x1c, 0x3c, 0x00, - 0xe9, 0x9b, 0xb6, 0x59, 0x3a, 0xa7, 0x26, 0x8d, 0x54, 0xb3, 0x51, 0x57, 0x0f, 0x20, 0x95, 0x5a, - 0xb5, 0xbc, 0xdc, 0x8a, 0xbe, 0x61, 0xb1, 0x25, 0x5c, 0x84, 0x75, 0x57, 0x42, 0xc7, 0x37, 0x26, - 0x46, 0x80, 0x5c, 0x56, 0x67, 0x32, 0xf0, 0x2a, 0x43, 0x2a, 0x1e, 0xca, 0xab, 0xae, 0x20, 0x44, - 0x6f, 0x09, 0x72, 0x39, 0x9f, 0x21, 0x7e, 0x0c, 0x38, 0xec, 0x53, 0x4c, 0xdb, 0xd4, 0x64, 0x87, - 0xc5, 0x6c, 0x78, 0x6c, 0x36, 0x8e, 0xd7, 0x4e, 0x8c, 0xab, 0x2b, 0x34, 0xc0, 0x74, 0x15, 0x9f, - 0x85, 0x37, 0x9f, 0x3b, 0xec, 0x5f, 0xd2, 0xa9, 0x60, 0xd3, 0xd9, 0x6f, 0x57, 0x86, 0x13, 0x2f, - 0x57, 0x33, 0xbb, 0xa8, 0x09, 0x22, 0x01, 0x07, 0x2d, 0x1f, 0x15, 0x17, 0x22, 0xef, 0x20, 0x1f, - 0x13, 0x50, 0x0d, 0xa5, 0xec, 0xda, 0x96, 0x20, 0xc7, 0xd3, 0x69, 0x0e, 0xf0, 0xa3, 0x07, 0xf8, - 0xd1, 0x66, 0x31, 0xe9, 0x9b, 0x8d, 0x13, 0x50, 0xcd, 0xc4, 0xb8, 0x8a, 0x04, 0x12, 0x94, 0x8e, - 0x8e, 0x08, 0xf3, 0xe5, 0x89, 0x97, 0xe8, 0xd6, 0x98, 0xf0, 0x25, 0xd0, 0x07, 0xf6, 0x8e, 0x89, - 0x61, 0xe3, 0x89, 0x83, 0x3e, 0xa8, 0xa1, 0xfc, 0xf1, 0xfa, 0xe4, 0x3b, 0x02, 0xd9, 0x6d, 0x96, - 0x2e, 0xe0, 0x07, 0x0d, 0x40, 0x1a, 0x8d, 0x3a, 0xed, 0xa3, 0x71, 0x8d, 0x82, 0xa8, 0x52, 0x48, - 0x4b, 0xa4, 0x62, 0x7e, 0x6e, 0x7f, 0x23, 0x39, 0xcd, 0x70, 0xf2, 0x0b, 0xef, 0x3c, 0xb7, 0x13, - 0x5e, 0x1c, 0x1e, 0x84, 0xe7, 0xa8, 0x14, 0xd8, 0xf2, 0xdb, 0xb1, 0x55, 0xe3, 0xf1, 0x83, 0x2b, - 0x86, 0x93, 0x5f, 0x2e, 0x1b, 0x4f, 0x7f, 0xb5, 0xa4, 0x4f, 0x8d, 0x90, 0xed, 0x08, 0x34, 0x69, - 0x36, 0x50, 0x37, 0x4e, 0x42, 0x89, 0x70, 0x20, 0xbb, 0x8f, 0x5e, 0x97, 0xa4, 0xb9, 0x12, 0x2a, - 0x31, 0x84, 0x1d, 0x00, 0xa3, 0xf8, 0xcc, 0x6f, 0xbc, 0x78, 0xc4, 0x6d, 0x88, 0x3e, 0x6d, 0x9c, - 0xb8, 0x15, 0x21, 0x31, 0xa0, 0xce, 0x2b, 0x0d, 0xc7, 0x3f, 0xf5, 0x1b, 0x8f, 0x1d, 0x58, 0xd5, - 0xc7, 0x9d, 0x57, 0xed, 0x08, 0x04, 0x4a, 0x55, 0x8b, 0x4c, 0x42, 0x8d, 0x5a, 0x5e, 0x06, 0x26, - 0x21, 0x4e, 0xce, 0xa4, 0x15, 0x6b, 0x22, 0x7f, 0x7c, 0x62, 0xf8, 0xe9, 0xf3, 0x25, 0xc3, 0xf1, - 0x83, 0xcb, 0xba, 0xf4, 0x6b, 0x02, 0x88, 0xdd, 0x51, 0xb3, 0xa9, 0x4c, 0xa2, 0x01, 0x0a, 0xd4, - 0xdb, 0x5a, 0xb7, 0xe3, 0xd2, 0x8d, 0x6b, 0x94, 0x64, 0xe0, 0x07, 0x5e, 0x01, 0x8c, 0x55, 0xd0, - 0x6a, 0x1e, 0x1a, 0xcf, 0x7d, 0xe7, 0xb1, 0xa7, 0x45, 0xf9, 0x4c, 0xe1, 0xdf, 0xf8, 0x75, 0x98, - 0x58, 0xfe, 0x76, 0x5e, 0xec, 0xda, 0x23, 0xc4, 0x8f, 0xc0, 0x24, 0x94, 0xa7, 0x45, 0x51, 0xcd, - 0x17, 0x8f, 0xf8, 0xad, 0x7f, 0x9e, 0x5c, 0x31, 0x46, 0x84, 0x59, 0xb5, 0x0a, 0xe9, 0xc3, 0xff, - 0x0d, 0x04, 0x56, 0xe6, 0xfc, 0xe1, 0x27, 0x3c, 0x0c, 0x8f, 0xd3, 0x95, 0x2a, 0xb9, 0x97, 0x88, - 0xd7, 0xff, 0x71, 0x4a, 0x3f, 0x91, 0xfc, 0xab, 0x4c, 0x33, 0x26, 0x21, 0xee, 0x16, 0xf2, 0xaf, - 0x20, 0x21, 0x9f, 0x83, 0x6e, 0x69, 0x69, 0x71, 0x66, 0x64, 0x64, 0xac, 0xa6, 0xa7, 0xa7, 0xaf, - 0x09, 0x8b, 0xc5, 0x2e, 0x71, 0x39, 0x2c, 0x21, 0x04, 0xa9, 0xda, 0x03, 0xcf, 0x10, 0x65, 0x65, - 0x65, 0xf9, 0x6b, 0x6b, 0x6b, 0xec, 0x5a, 0xcd, 0x18, 0x09, 0x49, 0xaa, 0x54, 0xc8, 0x59, 0x64, - 0x32, 0xd9, 0x0b, 0x9e, 0xaf, 0xc5, 0xf3, 0xf2, 0xf2, 0x16, 0xb7, 0x05, 0x71, 0x59, 0x1d, 0xa9, - 0x78, 0x3c, 0xde, 0x8d, 0x42, 0xc5, 0xf9, 0x28, 0x14, 0x32, 0x44, 0x26, 0x93, 0xf4, 0x49, 0x49, - 0x49, 0x7e, 0x14, 0x0a, 0xe5, 0xd7, 0x6a, 0x55, 0x1d, 0x91, 0x91, 0x91, 0x70, 0x21, 0x16, 0x3b, - 0x5d, 0x59, 0x59, 0x01, 0xa1, 0xd1, 0xe8, 0x45, 0xa4, 0xdd, 0x50, 0x5f, 0xa7, 0x85, 0x80, 0xb7, - 0x20, 0xb1, 0x3f, 0x3e, 0x3e, 0x7e, 0xa5, 0xbc, 0xbc, 0xcc, 0x80, 0xf4, 0xad, 0xae, 0x7e, 0x34, - 0xba, 0x2d, 0x88, 0xd1, 0xde, 0x84, 0xc2, 0xe3, 0x4b, 0x3d, 0x77, 0xef, 0xde, 0x59, 0x0c, 0x0c, - 0xbf, 0x8d, 0x4e, 0xb7, 0x20, 0x09, 0x07, 0xb8, 0x6c, 0x2e, 0x72, 0x6f, 0xa3, 0x51, 0x39, 0x81, - 0x58, 0x4e, 0x4e, 0x8e, 0x2f, 0x3f, 0xff, 0xbe, 0x5b, 0x22, 0x11, 0x09, 0xd6, 0x62, 0x6d, 0x34, - 0xc6, 0x8e, 0x4a, 0x07, 0xf6, 0x91, 0xa4, 0x32, 0x02, 0xe1, 0x79, 0x72, 0x72, 0xb2, 0xaf, 0x8f, - 0xd9, 0x0b, 0xf5, 0xf6, 0x74, 0x1b, 0x32, 0x33, 0x33, 0xfd, 0x31, 0x31, 0x31, 0x7e, 0x8d, 0x66, - 0xac, 0x73, 0x23, 0xa8, 0xaa, 0xb2, 0x72, 0x2e, 0x26, 0xe6, 0xc6, 0x2a, 0x9b, 0xcd, 0x52, 0x22, - 0xb1, 0xdc, 0xdc, 0x5c, 0x00, 0xce, 0x5f, 0x53, 0x69, 0x69, 0x89, 0x7b, 0x4b, 0x10, 0xb2, 0x4d, - 0x20, 0x0b, 0x21, 0x81, 0x80, 0x5f, 0x88, 0x8a, 0x8a, 0x82, 0xaf, 0x5f, 0xbf, 0xbe, 0x8a, 0x08, - 0x40, 0xbd, 0x8d, 0x0d, 0xf5, 0x82, 0x40, 0xe9, 0xd6, 0x83, 0x88, 0xc4, 0x87, 0x0b, 0x09, 0x09, - 0xf1, 0x2b, 0xfd, 0x1c, 0x96, 0x0a, 0x89, 0xe1, 0xf1, 0x25, 0x26, 0x12, 0x91, 0xa8, 0x47, 0x54, - 0x55, 0x55, 0xa9, 0xa8, 0xda, 0x02, 0x04, 0x36, 0xbe, 0xf4, 0x33, 0xe0, 0xd7, 0x2e, 0x41, 0x40, - 0xeb, 0x4b, 0xf7, 0x42, 0x1b, 0x40, 0xe3, 0x90, 0x9a, 0x9e, 0x92, 0x92, 0x02, 0x17, 0x16, 0x62, - 0x1d, 0x01, 0x90, 0x80, 0xdf, 0x5f, 0x1d, 0x78, 0x5f, 0xa3, 0x94, 0x11, 0x4a, 0x4b, 0x0b, 0x2e, - 0x07, 0x0e, 0x2a, 0x2f, 0xb6, 0xf2, 0x9b, 0xd7, 0xa2, 0xbe, 0x1f, 0x1a, 0xec, 0xcb, 0xfb, 0x2f, - 0x10, 0x06, 0x83, 0xf1, 0xe1, 0x70, 0x45, 0xcb, 0xb1, 0xb1, 0xb1, 0x30, 0xd2, 0xa6, 0x52, 0x9b, - 0x79, 0x5b, 0x81, 0x24, 0x62, 0x5e, 0x41, 0xc6, 0x9d, 0xa4, 0x63, 0x2f, 0x6d, 0xe5, 0xff, 0x8c, - 0xea, 0xdd, 0x0a, 0x12, 0xfe, 0x6a, 0x63, 0x63, 0x9d, 0xb4, 0x82, 0x4c, 0x52, 0x6d, 0x04, 0x81, - 0x65, 0xa9, 0xb6, 0xb8, 0x18, 0x67, 0x0b, 0x88, 0x00, 0xca, 0x44, 0x6f, 0x7d, 0xcc, 0x42, 0x62, - 0xfc, 0xc1, 0x81, 0x1e, 0x1c, 0x0e, 0x37, 0x35, 0x2c, 0x11, 0x52, 0x90, 0xf6, 0x98, 0x4c, 0x5c, - 0xdc, 0xd2, 0x50, 0x85, 0x0a, 0x0e, 0xfe, 0x20, 0x68, 0xcb, 0xe3, 0x56, 0x70, 0x70, 0x70, 0xd0, - 0x7d, 0xcc, 0x9d, 0xb3, 0xcd, 0xf5, 0x94, 0xbf, 0x98, 0x8c, 0x56, 0x34, 0x93, 0x41, 0xdf, 0xb5, - 0x5a, 0x9b, 0x6b, 0x6e, 0x15, 0x14, 0x60, 0xce, 0x87, 0x84, 0x7c, 0xbd, 0x1f, 0x7c, 0xfc, 0xab, - 0x5b, 0x82, 0x02, 0x3f, 0x06, 0xd0, 0xde, 0x13, 0x27, 0x7e, 0xf8, 0x24, 0x3c, 0x3c, 0xfc, 0xc0, - 0x6e, 0x74, 0x3a, 0x2c, 0x2c, 0x18, 0xe9, 0x0b, 0xf4, 0xf6, 0xc6, 0xbc, 0x7f, 0x03, 0xdc, 0x7e, - 0xbd, 0xdc, 0x1e, 0xdc, 0x1a, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, - 0x60, 0x82, + 0xce, 0x00, 0x00, 0x06, 0x0b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xad, 0x96, 0x5b, 0x6c, 0x1c, + 0x57, 0x19, 0xc7, 0xbf, 0x33, 0x33, 0x3b, 0xbb, 0xeb, 0xf5, 0x2d, 0xb6, 0xb3, 0xb6, 0x37, 0x8e, + 0x9d, 0x26, 0xb5, 0x9a, 0x36, 0x76, 0x93, 0x86, 0xd8, 0x49, 0x21, 0x6e, 0x5a, 0x41, 0x2b, 0x59, + 0x6d, 0x94, 0xa8, 0x8d, 0x28, 0x12, 0x85, 0x40, 0x84, 0xa8, 0x10, 0x20, 0x51, 0x24, 0x10, 0x25, + 0x42, 0x20, 0xf2, 0x00, 0x0f, 0x15, 0xa2, 0x49, 0xe1, 0x21, 0x48, 0xa8, 0xaa, 0x48, 0x1f, 0x7a, + 0x09, 0x02, 0x1a, 0x41, 0xe8, 0x45, 0x8d, 0x4c, 0xd3, 0xa2, 0x36, 0x55, 0x02, 0xa2, 0x97, 0x24, + 0x8d, 0x5d, 0xdf, 0xbd, 0xf6, 0xda, 0x8e, 0xb3, 0xde, 0x99, 0xf3, 0xdd, 0x0e, 0x0f, 0xbb, 0x76, + 0x13, 0x68, 0xd5, 0x40, 0xfa, 0x97, 0xbe, 0x39, 0x9a, 0xd1, 0x9c, 0xef, 0x77, 0xfe, 0xf3, 0x3f, + 0x33, 0x1a, 0xe3, 0x9c, 0x03, 0x63, 0x8c, 0xdf, 0xdb, 0xb3, 0x39, 0xbb, 0xf7, 0x81, 0x2f, 0xec, + 0xd8, 0xd0, 0xd5, 0xbd, 0xb1, 0xba, 0xba, 0xa6, 0x09, 0x00, 0x9c, 0xaa, 0x3a, 0xe7, 0x9c, 0xaa, + 0x6a, 0xe5, 0xa8, 0xea, 0x54, 0x2f, 0xbb, 0x5c, 0x39, 0x55, 0x5d, 0xbe, 0x87, 0x05, 0x79, 0x61, + 0xa1, 0x38, 0x37, 0x36, 0x36, 0x7a, 0xe1, 0xd7, 0x87, 0x1f, 0x7f, 0x65, 0x68, 0x68, 0x78, 0xde, + 0x39, 0x27, 0x81, 0x31, 0xc6, 0xec, 0xda, 0xd9, 0xdf, 0x71, 0xe0, 0xc0, 0x81, 0x1f, 0xad, 0xbf, + 0xa9, 0x7b, 0xa7, 0x67, 0xbc, 0x40, 0x9d, 0xa2, 0xaa, 0x5a, 0xa7, 0x8a, 0xaa, 0x8a, 0xaa, 0x62, + 0x55, 0x15, 0x45, 0x04, 0xe3, 0xe7, 0x8e, 0x34, 0xb8, 0x54, 0x3a, 0xf2, 0xb6, 0xf7, 0x8f, 0x8a, + 0x30, 0x0a, 0xb3, 0xe5, 0xf2, 0x88, 0xcc, 0x84, 0x44, 0x68, 0x99, 0x28, 0x68, 0x6b, 0x5b, 0xd5, + 0xd0, 0xd2, 0xda, 0xb2, 0xf6, 0xe0, 0x63, 0x87, 0x9f, 0x32, 0xc6, 0x4c, 0xf8, 0x00, 0x50, 0x7d, + 0xe8, 0xe0, 0x2f, 0xbe, 0xd1, 0xbb, 0x75, 0xfb, 0x3e, 0x30, 0x00, 0x15, 0x40, 0xac, 0xaa, 0xb6, + 0x5c, 0xb2, 0x3c, 0xe2, 0x9b, 0xaf, 0xa4, 0xec, 0x6f, 0x7e, 0xde, 0xad, 0xff, 0xf8, 0x7b, 0x8b, + 0xd6, 0x35, 0xe4, 0x35, 0xd7, 0x51, 0x60, 0x66, 0x2b, 0x4c, 0x96, 0x08, 0x97, 0x0b, 0x6d, 0x6c, + 0x85, 0x29, 0x4e, 0x24, 0x02, 0x58, 0xdd, 0x96, 0xcb, 0xfe, 0xf9, 0xf8, 0x8b, 0xe7, 0x83, 0xdd, + 0x3b, 0xfb, 0xb3, 0x9d, 0x9d, 0x37, 0x6c, 0x76, 0xce, 0x51, 0xd9, 0x49, 0x79, 0xf5, 0x4b, 0x6e, + 0x44, 0xc4, 0xaa, 0x0a, 0xaa, 0x08, 0xf2, 0x6c, 0x3e, 0xe5, 0x37, 0xe7, 0x34, 0x75, 0xe3, 0x66, + 0xaf, 0xf8, 0xce, 0xe9, 0x5a, 0xde, 0xdc, 0x17, 0x33, 0x91, 0x65, 0x26, 0x64, 0x42, 0x44, 0x42, + 0x4b, 0x68, 0x11, 0xad, 0x45, 0x66, 0xe2, 0xc0, 0xf7, 0x21, 0x9b, 0x6d, 0x6a, 0x6b, 0x5f, 0xdd, + 0x96, 0x09, 0xd6, 0xae, 0xbb, 0xae, 0x39, 0x95, 0xae, 0x4a, 0x8b, 0x4a, 0x5c, 0x69, 0x5e, 0x6e, + 0xac, 0x8a, 0x2a, 0x82, 0xa2, 0x62, 0x55, 0x04, 0x45, 0x04, 0x5d, 0x53, 0xcb, 0x9c, 0x4e, 0x8e, + 0xf8, 0xda, 0xd9, 0xad, 0x4e, 0x85, 0x08, 0x6d, 0xc4, 0x44, 0x48, 0x84, 0x48, 0x65, 0x02, 0xda, + 0x38, 0xb2, 0xce, 0x39, 0x07, 0x15, 0x25, 0xc3, 0xa4, 0xbb, 0x6d, 0xfb, 0xad, 0x2b, 0x83, 0xc0, + 0xf3, 0x3c, 0x55, 0x25, 0x15, 0x89, 0xf4, 0x83, 0x4c, 0xb0, 0xe2, 0xc2, 0x4a, 0x19, 0x56, 0xce, + 0x62, 0xf5, 0xba, 0x05, 0x2f, 0x59, 0x85, 0xf6, 0xd4, 0xdf, 0x42, 0xb9, 0x71, 0x13, 0x22, 0xda, + 0x98, 0x10, 0x6d, 0xa9, 0x54, 0x5c, 0x24, 0xb4, 0xa4, 0xaa, 0x0a, 0xff, 0x25, 0x03, 0x61, 0x32, + 0x0c, 0x3c, 0x00, 0x00, 0x15, 0xe1, 0xf2, 0x23, 0x93, 0x58, 0x84, 0xcb, 0xc5, 0x1c, 0xf3, 0x52, + 0x11, 0xc5, 0xcc, 0x14, 0xb3, 0x83, 0x88, 0xbb, 0x7a, 0xce, 0xc8, 0xfc, 0x8c, 0xb1, 0x4d, 0xb9, + 0xd1, 0xf9, 0xb9, 0x42, 0x61, 0x7e, 0x6e, 0x66, 0xce, 0xc6, 0x91, 0xfd, 0x30, 0x88, 0x31, 0xc6, + 0xf8, 0xbe, 0xef, 0x01, 0x00, 0x04, 0x00, 0x00, 0x22, 0x42, 0x22, 0x12, 0x95, 0x5d, 0x28, 0x8a, + 0xb0, 0x95, 0xa5, 0x5c, 0x98, 0xad, 0x08, 0x23, 0x33, 0xa3, 0x30, 0xa1, 0x74, 0xf5, 0xbc, 0x95, + 0x79, 0xf5, 0xf9, 0xde, 0x05, 0xcf, 0x8c, 0xa0, 0x8d, 0xf1, 0xf2, 0xa6, 0x61, 0x98, 0x0c, 0x53, + 0xe9, 0xaa, 0x54, 0x18, 0x26, 0x53, 0x61, 0x32, 0x95, 0x0a, 0x12, 0x89, 0xe4, 0xd4, 0xe4, 0xc4, + 0xc2, 0x32, 0x48, 0x55, 0x48, 0x84, 0x63, 0x15, 0xc5, 0x32, 0x80, 0x2d, 0x33, 0xa3, 0x88, 0x60, + 0x19, 0x42, 0x96, 0x89, 0xb0, 0x78, 0xe9, 0xe2, 0x7c, 0x78, 0x6a, 0xa0, 0x11, 0x00, 0x60, 0xc5, + 0xe9, 0x57, 0x3f, 0x53, 0xbc, 0xfe, 0xe6, 0xa7, 0x93, 0xa9, 0x74, 0xb2, 0xb6, 0xb6, 0xbe, 0x3e, + 0x9d, 0xa9, 0xae, 0xf5, 0x8c, 0xe7, 0xc3, 0x47, 0xa8, 0xe2, 0x88, 0x59, 0x44, 0x62, 0x11, 0xae, + 0x04, 0xcf, 0xc8, 0x2c, 0x28, 0x4c, 0x96, 0x99, 0x91, 0x19, 0x71, 0x7e, 0xae, 0x30, 0x53, 0x5a, + 0x2c, 0x96, 0xd6, 0x4c, 0x8d, 0x74, 0x57, 0x7d, 0xfa, 0x4e, 0x30, 0x6f, 0x0c, 0xf4, 0xb4, 0xd5, + 0xaf, 0x38, 0x1d, 0x34, 0x64, 0x3f, 0xb2, 0xf9, 0xe5, 0xf2, 0x00, 0x00, 0x84, 0x85, 0x84, 0x29, + 0x16, 0x66, 0xcb, 0x44, 0x31, 0x11, 0xc5, 0x4c, 0x18, 0x13, 0xa1, 0xb5, 0x36, 0x2a, 0xcd, 0xe4, + 0x27, 0x27, 0x4b, 0x8b, 0xc5, 0x52, 0x38, 0x9b, 0xcf, 0x24, 0xa6, 0xc6, 0x6e, 0x5a, 0xf1, 0xe0, + 0x0f, 0x21, 0xec, 0xdc, 0x00, 0xc9, 0x17, 0x8f, 0xde, 0x02, 0x57, 0x29, 0xaf, 0xe2, 0x88, 0x98, + 0x39, 0x62, 0xa2, 0x88, 0x98, 0xe2, 0x32, 0x0c, 0xa3, 0x28, 0x2a, 0x5d, 0x9a, 0xc9, 0x4f, 0x4e, + 0x21, 0x5a, 0x4c, 0xa6, 0xd2, 0xc9, 0xdc, 0xb9, 0x33, 0x77, 0x26, 0x6f, 0xd8, 0xa8, 0x89, 0xb6, + 0xb5, 0x50, 0xbf, 0xf7, 0xa1, 0xc0, 0x7f, 0xed, 0xa5, 0x2d, 0x66, 0x62, 0x38, 0xf3, 0x3f, 0x81, + 0x88, 0x28, 0x26, 0xc6, 0x98, 0x08, 0x63, 0x44, 0x1b, 0x5b, 0x1b, 0x47, 0x73, 0x85, 0xe9, 0x82, + 0xaa, 0x68, 0x63, 0x53, 0xf3, 0xca, 0xd6, 0x5c, 0xfb, 0x9a, 0xe4, 0x3b, 0xa7, 0x6f, 0xa9, 0xdd, + 0xf5, 0xa5, 0x00, 0x00, 0x20, 0xfd, 0xa9, 0x3e, 0xc8, 0xec, 0xb8, 0xdb, 0x24, 0x8e, 0x3c, 0x7a, + 0xc7, 0x55, 0x83, 0x98, 0x99, 0x99, 0x31, 0x26, 0xa4, 0x98, 0xd0, 0x46, 0x88, 0x36, 0x9a, 0x9f, + 0x9b, 0x99, 0x75, 0x4e, 0x5d, 0x73, 0x6b, 0x5b, 0xae, 0xa6, 0xb6, 0xbe, 0xd1, 0xbc, 0x71, 0x22, + 0x07, 0xd1, 0x62, 0x55, 0x55, 0x5f, 0xff, 0xf2, 0xe4, 0x86, 0x6f, 0xfe, 0xd8, 0x37, 0x17, 0x67, + 0x9b, 0xbd, 0x3f, 0x3e, 0xb1, 0xfe, 0xe3, 0x40, 0x01, 0x00, 0x00, 0x13, 0x11, 0x21, 0x9a, 0xa5, + 0xb7, 0xbc, 0x58, 0x5c, 0x58, 0x70, 0xea, 0x5c, 0xeb, 0xaa, 0x8e, 0xf6, 0x44, 0x22, 0x4c, 0x01, + 0x00, 0x04, 0x2f, 0x3c, 0xbb, 0xb5, 0xee, 0xfe, 0x07, 0x3d, 0x13, 0x26, 0x3f, 0x58, 0x65, 0xa6, + 0x06, 0xb2, 0xfb, 0x0f, 0xf9, 0x93, 0x0f, 0xef, 0xdd, 0x0e, 0x41, 0x42, 0xa1, 0xb1, 0xb9, 0x68, + 0xa6, 0xc7, 0x6b, 0x21, 0x91, 0x64, 0x48, 0x67, 0x50, 0xb7, 0xf4, 0x8d, 0x5f, 0x09, 0x62, 0x22, + 0x44, 0xab, 0x44, 0x68, 0xe3, 0xa8, 0x14, 0x31, 0x11, 0xe7, 0xda, 0x3a, 0x3a, 0x7c, 0x3f, 0x08, + 0x01, 0x00, 0xbc, 0xd7, 0x5f, 0xce, 0x79, 0xf3, 0xb3, 0x8d, 0x35, 0xf7, 0xee, 0x33, 0x1a, 0x2d, + 0x02, 0x0d, 0x9e, 0x05, 0x1c, 0x7a, 0x17, 0x68, 0xe8, 0x2c, 0xe0, 0x7b, 0xff, 0x62, 0x63, 0x8c, + 0xe7, 0x1f, 0x3b, 0x72, 0x3b, 0x78, 0x3e, 0x24, 0xd7, 0x6f, 0x62, 0x65, 0x74, 0x32, 0x39, 0xe2, + 0xeb, 0xc9, 0xbf, 0xe4, 0xe1, 0x2b, 0x3f, 0x78, 0x62, 0x19, 0x44, 0x44, 0x54, 0xf9, 0x9a, 0x58, + 0x1b, 0x47, 0xb6, 0xb9, 0x75, 0xf5, 0xaa, 0x25, 0x08, 0x00, 0x80, 0xff, 0xfc, 0x33, 0xdb, 0x12, + 0xab, 0x3a, 0xfc, 0xa9, 0xfd, 0xfb, 0xd8, 0xfe, 0xf3, 0x75, 0xdf, 0xa4, 0xab, 0xc8, 0x34, 0xb5, + 0xcc, 0x4b, 0x43, 0x36, 0xef, 0x5a, 0xaf, 0x2b, 0xe8, 0xb6, 0xbb, 0x66, 0xcd, 0xcc, 0x64, 0x26, + 0x38, 0xfe, 0xd4, 0x6d, 0x3c, 0x3d, 0x1e, 0xa4, 0x7b, 0x76, 0xf8, 0x8b, 0xa3, 0x83, 0xce, 0xad, + 0xeb, 0x7a, 0xff, 0x0a, 0x47, 0x44, 0x48, 0x9e, 0x71, 0x1c, 0xc7, 0x91, 0x6d, 0x5a, 0xd9, 0x92, + 0x4d, 0x26, 0x53, 0x19, 0xc0, 0xd8, 0xf7, 0x8e, 0x3f, 0xdd, 0x19, 0x9c, 0x1a, 0xd8, 0xe4, 0x0a, + 0x53, 0xd5, 0xd6, 0x0f, 0xa6, 0x34, 0xb7, 0xe6, 0x3d, 0xfd, 0xde, 0x23, 0xc3, 0xae, 0xbd, 0x73, + 0xe1, 0x3f, 0x33, 0x70, 0x00, 0xd3, 0xb6, 0xaf, 0x7f, 0x38, 0x38, 0x71, 0xac, 0x83, 0x06, 0xdf, + 0x6e, 0xd6, 0xfb, 0xbe, 0x36, 0xe2, 0xb6, 0x7d, 0x6e, 0x0c, 0x26, 0xc7, 0xaf, 0x00, 0xb1, 0x0a, + 0xc5, 0x75, 0xf5, 0x0d, 0xf5, 0x19, 0x07, 0x59, 0xff, 0xc9, 0xc7, 0xba, 0xfc, 0x33, 0x27, 0x37, + 0x1a, 0x3f, 0x08, 0xf4, 0xe2, 0xac, 0xa7, 0xbb, 0xbe, 0xfc, 0x92, 0xdc, 0xf5, 0xf9, 0xf3, 0x1f, + 0x17, 0xb8, 0x09, 0x12, 0x2a, 0x9f, 0xdd, 0x3d, 0x08, 0xb0, 0x7b, 0xf0, 0xc3, 0x77, 0x1d, 0x11, + 0x57, 0x55, 0x55, 0xa7, 0x1b, 0x4a, 0xc5, 0xeb, 0xc3, 0x47, 0xbe, 0x7b, 0x5f, 0x6a, 0x76, 0x6a, + 0x73, 0x76, 0xff, 0xa1, 0x30, 0x75, 0xf3, 0x56, 0x67, 0x3a, 0x37, 0x0c, 0x5f, 0x0d, 0xe4, 0xaa, + 0xb6, 0xb7, 0x31, 0xc6, 0xac, 0xcc, 0x8f, 0x74, 0x27, 0x1e, 0x7d, 0x78, 0x4f, 0x4d, 0x5f, 0x7f, + 0x75, 0xee, 0xe0, 0xb3, 0xbe, 0xcc, 0xcf, 0x40, 0x74, 0x6a, 0x40, 0xf0, 0x81, 0x87, 0x5e, 0x86, + 0x4f, 0x40, 0x9e, 0x88, 0x68, 0x5d, 0x7d, 0x43, 0x5d, 0x78, 0xe2, 0xb9, 0xde, 0x9a, 0xfe, 0xfb, + 0xc3, 0x86, 0x6f, 0xfd, 0xc4, 0x5b, 0xf8, 0xd3, 0xef, 0xa0, 0xf0, 0xcb, 0xfd, 0xc2, 0x7b, 0xbe, + 0xfe, 0x57, 0x68, 0x6a, 0x89, 0xaf, 0x15, 0x42, 0x48, 0x12, 0x5c, 0x18, 0x1a, 0xce, 0x8b, 0x4a, + 0xe0, 0x82, 0x10, 0xed, 0xf9, 0xb7, 0x74, 0xfa, 0x67, 0xdf, 0x81, 0xd2, 0xc9, 0x17, 0x98, 0xbe, + 0xfa, 0xfd, 0x63, 0xae, 0xbb, 0x77, 0xfa, 0x5a, 0x21, 0xa5, 0xc5, 0x45, 0x3e, 0x31, 0x70, 0x32, + 0xef, 0xfd, 0xfe, 0x0f, 0xc7, 0xa6, 0x27, 0xc7, 0x27, 0x26, 0xe8, 0xee, 0x2f, 0xbe, 0x19, 0xab, + 0x9e, 0x2d, 0x16, 0xa6, 0xde, 0xa6, 0x6f, 0xff, 0xf4, 0xe8, 0x27, 0x01, 0x11, 0x11, 0x37, 0x3c, + 0x3c, 0x72, 0x6e, 0x78, 0x64, 0xb4, 0xe4, 0x03, 0x00, 0x11, 0xd3, 0xcc, 0xda, 0x4d, 0x9b, 0xda, + 0x33, 0x77, 0xdc, 0x93, 0x37, 0x3d, 0xb7, 0x8f, 0x42, 0x5d, 0xa3, 0xbd, 0x56, 0x88, 0xb5, 0x31, + 0x9f, 0x3b, 0xfb, 0xee, 0xd8, 0xa1, 0x5f, 0x1d, 0x3e, 0x3a, 0x3a, 0x36, 0x3e, 0x6b, 0x2a, 0x3f, + 0x90, 0xc1, 0xb6, 0xde, 0x2d, 0xcd, 0x7b, 0xee, 0xbd, 0xe7, 0xd6, 0x96, 0x96, 0xd6, 0xb6, 0xea, + 0xea, 0xea, 0x3a, 0xcf, 0x03, 0xf3, 0xff, 0x00, 0x54, 0x9d, 0xbb, 0xb4, 0x70, 0x71, 0x76, 0x74, + 0x7c, 0xe2, 0xfd, 0xdf, 0x3e, 0xfe, 0xe4, 0x6b, 0xe7, 0xce, 0x5f, 0x28, 0x38, 0xe7, 0xe4, 0xdf, + 0x37, 0x89, 0xa4, 0x7d, 0x90, 0x97, 0xe7, 0x08, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE datasheet_xpm[1] = {{ png, sizeof( png ), "datasheet_xpm" }}; diff --git a/bitmaps_png/cpp_26/hidden_pin.cpp b/bitmaps_png/cpp_26/hidden_pin.cpp index 2e93d4ccda..c31ca3ca4c 100644 --- a/bitmaps_png/cpp_26/hidden_pin.cpp +++ b/bitmaps_png/cpp_26/hidden_pin.cpp @@ -8,32 +8,39 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, - 0xce, 0x00, 0x00, 0x01, 0x7e, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f, - 0x03, 0x39, 0x38, 0x3d, 0x3d, 0x3d, 0x2d, 0x35, 0x35, 0x35, 0x89, 0x58, 0xf5, 0x18, 0x02, 0x0d, - 0x0c, 0x0c, 0x49, 0x40, 0xdc, 0x0c, 0xc4, 0x5c, 0xf8, 0x34, 0xa6, 0xa5, 0xa5, 0x1d, 0x00, 0x61, - 0x4a, 0x2c, 0x3a, 0x00, 0xc4, 0xff, 0x9b, 0x98, 0x99, 0xef, 0x01, 0x69, 0x1b, 0x9a, 0x5a, 0xd4, - 0x2f, 0x2f, 0xff, 0x7f, 0x82, 0xbc, 0xfc, 0x9f, 0x46, 0x46, 0xc6, 0x7f, 0x40, 0x7e, 0x3f, 0x36, - 0xdf, 0x51, 0xc5, 0xa2, 0x79, 0x76, 0x76, 0xff, 0xbf, 0xbc, 0x7f, 0xff, 0x7f, 0x4b, 0x56, 0xd6, - 0xff, 0x06, 0x46, 0x46, 0xac, 0xbe, 0xa3, 0x9a, 0x45, 0x3f, 0x7f, 0xfe, 0x04, 0xe3, 0x3b, 0x7b, - 0xf6, 0x60, 0xf5, 0x1d, 0xd5, 0x2d, 0x02, 0x61, 0xb0, 0xef, 0xb2, 0xb3, 0x51, 0x7c, 0x47, 0x13, - 0x8b, 0xb0, 0xf9, 0xae, 0x5c, 0x4d, 0xed, 0x71, 0x46, 0x62, 0xe2, 0x21, 0xa2, 0x2d, 0x82, 0x26, - 0xe7, 0x03, 0x48, 0xf8, 0xfd, 0x24, 0x55, 0x55, 0xac, 0x16, 0xa1, 0xfb, 0xae, 0x9e, 0x87, 0xe7, - 0x2b, 0xbe, 0x94, 0x89, 0x6e, 0x51, 0x1a, 0x86, 0x45, 0x6a, 0x6a, 0x60, 0x43, 0xdf, 0x3e, 0x78, - 0xf0, 0xff, 0xd9, 0xa5, 0x4b, 0x28, 0xf8, 0xeb, 0x87, 0x0f, 0x10, 0xdf, 0xed, 0xdd, 0xfb, 0x7f, - 0x82, 0x82, 0x02, 0xde, 0x94, 0x49, 0x54, 0xd0, 0x7d, 0xff, 0xfa, 0xf5, 0x7f, 0x1b, 0x2f, 0xef, - 0x7f, 0x50, 0x9e, 0x42, 0xc6, 0x07, 0xdb, 0xdb, 0x51, 0x7c, 0xb7, 0x35, 0x27, 0x07, 0x67, 0xca, - 0x24, 0x3a, 0x8e, 0xbe, 0x7f, 0xf9, 0xf2, 0xff, 0xeb, 0xc7, 0x8f, 0x28, 0x18, 0x6b, 0xdc, 0x11, - 0xe1, 0x3b, 0xa2, 0x12, 0xc3, 0xeb, 0x3b, 0x77, 0xfe, 0xbf, 0x7d, 0xf8, 0x10, 0x67, 0xbc, 0x21, - 0xfb, 0x0e, 0x6c, 0x19, 0x23, 0x23, 0x28, 0xee, 0x8e, 0x20, 0x45, 0x47, 0x1a, 0x51, 0x16, 0xad, - 0x8b, 0x8f, 0xff, 0xbf, 0xbd, 0xa0, 0x80, 0x12, 0x8b, 0x92, 0xf0, 0x5a, 0xf4, 0xe9, 0xf5, 0xeb, - 0xff, 0xef, 0x1e, 0x3d, 0xfa, 0xbf, 0x32, 0x24, 0xe4, 0xff, 0x86, 0xa4, 0x24, 0x30, 0x1b, 0x14, - 0x77, 0x54, 0x0d, 0x3a, 0x9c, 0x89, 0xa1, 0xb5, 0x95, 0xbc, 0xc4, 0x80, 0x2f, 0x1f, 0x7d, 0x7c, - 0xf9, 0x12, 0xc3, 0x47, 0x3f, 0xbe, 0x7f, 0x27, 0x2f, 0x79, 0xe3, 0xcb, 0x47, 0x30, 0xbc, 0x3e, - 0x31, 0xf1, 0xff, 0xb6, 0xbc, 0x3c, 0xca, 0x32, 0x2c, 0xd1, 0xa9, 0x0e, 0x98, 0x79, 0x29, 0x2a, - 0x82, 0x06, 0x4d, 0xa1, 0x4a, 0xf3, 0x6a, 0x82, 0x2e, 0x15, 0x1f, 0xdd, 0xaa, 0x72, 0x7a, 0x35, - 0x4e, 0x40, 0xf9, 0xaa, 0x83, 0xe6, 0xcd, 0x2d, 0x62, 0x31, 0xa8, 0xf1, 0x08, 0x6a, 0x44, 0x12, - 0xab, 0x1e, 0x00, 0x39, 0x9d, 0x1a, 0x1b, 0x9d, 0x19, 0x48, 0x46, 0x00, 0x00, 0x00, 0x00, 0x49, - 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, + 0xce, 0x00, 0x00, 0x01, 0xf4, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0xbd, 0x4b, 0x42, + 0x51, 0x18, 0x87, 0xbd, 0x08, 0x59, 0x41, 0xe1, 0x26, 0xda, 0xa0, 0x86, 0x3a, 0xf8, 0x17, 0x34, + 0x84, 0x4d, 0x35, 0x45, 0x4b, 0x34, 0xb4, 0x3a, 0x38, 0xa8, 0xa3, 0xee, 0x96, 0x04, 0x0e, 0xa5, + 0x72, 0x0d, 0x3f, 0x51, 0xf7, 0x0b, 0x6d, 0x49, 0x8b, 0x8a, 0x44, 0x43, 0x4d, 0xad, 0x41, 0xd6, + 0xe6, 0xe0, 0xe2, 0x07, 0x78, 0x51, 0x41, 0x7c, 0x7b, 0xcf, 0xc5, 0x44, 0xbc, 0x1e, 0xef, 0x87, + 0x3a, 0x3c, 0x9c, 0xab, 0xdc, 0x7b, 0x1e, 0x7e, 0xe7, 0xbc, 0xe7, 0x43, 0x03, 0x00, 0x1a, 0x35, + 0x64, 0x32, 0x99, 0x2b, 0xe4, 0x25, 0x9b, 0xcd, 0x96, 0x90, 0x0b, 0xa9, 0xf7, 0x45, 0x7f, 0x84, + 0x34, 0x1a, 0x37, 0x12, 0x46, 0x76, 0x69, 0x1f, 0xe5, 0x72, 0x39, 0x2b, 0x4a, 0xbe, 0x11, 0x0e, + 0x79, 0x42, 0xbe, 0x10, 0xa3, 0x52, 0x51, 0x0d, 0x81, 0x5b, 0xad, 0xf6, 0x17, 0xdb, 0xe3, 0x45, + 0x1f, 0x61, 0x82, 0x73, 0x22, 0x4a, 0x26, 0x93, 0x47, 0xf8, 0x7c, 0x32, 0x91, 0x9e, 0x29, 0x16, + 0xc5, 0xcc, 0x66, 0x88, 0x9b, 0xcd, 0xa3, 0x1b, 0x86, 0x19, 0xe3, 0xef, 0xd8, 0x7c, 0x3a, 0x96, + 0x65, 0xf7, 0xb1, 0xe3, 0x4f, 0xa4, 0x9e, 0x4e, 0xa7, 0x7f, 0x50, 0xf6, 0x11, 0x8d, 0x46, 0x77, + 0x14, 0x8b, 0x0a, 0x2e, 0x17, 0xf4, 0xda, 0x6d, 0x78, 0xf6, 0x7a, 0x21, 0xc4, 0x30, 0x0b, 0xd3, + 0x4d, 0x86, 0x6f, 0x80, 0xf0, 0xe4, 0x59, 0xcd, 0x1c, 0x09, 0xa2, 0xe1, 0x70, 0x28, 0x50, 0x2f, + 0x97, 0xa9, 0xe9, 0x50, 0x02, 0x84, 0x62, 0xb1, 0xb8, 0xbd, 0xb2, 0x88, 0x20, 0xa4, 0xf3, 0xf9, + 0x44, 0xe9, 0xd6, 0x2e, 0xa2, 0xa5, 0x4b, 0x27, 0x12, 0xf2, 0x45, 0x93, 0x72, 0xae, 0xcd, 0xd0, + 0x66, 0xed, 0xf6, 0x85, 0xa2, 0xf9, 0x74, 0x77, 0x06, 0x03, 0x24, 0x82, 0x41, 0xc0, 0xe2, 0xd0, + 0xc9, 0x11, 0x79, 0x44, 0x22, 0x87, 0x83, 0x2a, 0x9a, 0xa6, 0xab, 0x54, 0x20, 0x6e, 0xb5, 0x8e, + 0x89, 0x70, 0x51, 0x65, 0xca, 0x1f, 0xba, 0xc1, 0x00, 0x58, 0x9b, 0x0d, 0x22, 0x7a, 0xfd, 0x94, + 0x47, 0xa7, 0x53, 0x94, 0xae, 0xe4, 0xf7, 0x53, 0x2b, 0x53, 0xf6, 0x1c, 0xf5, 0x5a, 0x2d, 0xe8, + 0x36, 0x9b, 0x53, 0xf8, 0x4e, 0x87, 0x9e, 0xce, 0x62, 0xa1, 0xae, 0x3b, 0xc5, 0xc5, 0xb0, 0x8c, + 0xff, 0x74, 0x82, 0x8c, 0x61, 0x78, 0xec, 0xe7, 0x6d, 0x66, 0x3a, 0x3c, 0xb2, 0x44, 0xaf, 0x91, + 0xc8, 0xaa, 0x22, 0xf7, 0x52, 0x51, 0x9f, 0xe7, 0x81, 0xef, 0x76, 0x21, 0xac, 0xd3, 0x09, 0x6d, + 0xbf, 0xd7, 0xdb, 0xc0, 0xd0, 0x61, 0x31, 0xdc, 0x1b, 0x8d, 0xa4, 0xa2, 0xa6, 0x3c, 0x98, 0x4c, + 0xea, 0x8b, 0x41, 0xce, 0x3a, 0x22, 0x89, 0x68, 0xe5, 0xbd, 0x2c, 0x85, 0xe2, 0x75, 0x54, 0x0d, + 0x85, 0xe8, 0x0b, 0x36, 0x10, 0x18, 0x73, 0x1c, 0xb7, 0xb5, 0xb9, 0x2d, 0x48, 0xab, 0x4d, 0x28, + 0xda, 0x82, 0xd4, 0x6e, 0xaa, 0xa4, 0xf3, 0xb5, 0x6e, 0xaa, 0xb4, 0x63, 0x62, 0x6d, 0x22, 0xa9, + 0x83, 0x0f, 0x4f, 0x56, 0x3b, 0x4a, 0x46, 0x44, 0x54, 0x28, 0x14, 0x0e, 0x55, 0x89, 0xa4, 0x8e, + 0xf2, 0x7c, 0x3e, 0xbf, 0x37, 0x39, 0xca, 0x1b, 0x78, 0x8c, 0x37, 0xb0, 0x7d, 0x97, 0x4a, 0xa5, + 0xea, 0x72, 0x92, 0x4a, 0xa5, 0x44, 0x97, 0x13, 0x4c, 0x78, 0xaa, 0xe6, 0xba, 0x15, 0x59, 0xb6, + 0x2e, 0xc8, 0x50, 0xcd, 0x5f, 0xb7, 0x50, 0x7e, 0xa0, 0x48, 0x24, 0x17, 0xbc, 0x90, 0x5c, 0xa3, + 0xa0, 0x8a, 0x94, 0x31, 0xd5, 0xa5, 0xd4, 0xfb, 0x7f, 0x24, 0x96, 0x19, 0xb2, 0xcd, 0x00, 0xac, + 0xcd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE hidden_pin_xpm[1] = {{ png, sizeof( png ), "hidden_pin_xpm" }}; diff --git a/bitmaps_png/cpp_26/import_footprint_names.cpp b/bitmaps_png/cpp_26/import_footprint_names.cpp index ef81a32dac..1f51612551 100644 --- a/bitmaps_png/cpp_26/import_footprint_names.cpp +++ b/bitmaps_png/cpp_26/import_footprint_names.cpp @@ -8,90 +8,88 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, - 0xce, 0x00, 0x00, 0x05, 0x22, 0x49, 0x44, 0x41, 0x54, 0x48, 0x4b, 0xb5, 0x96, 0x59, 0x4c, 0x5c, - 0x65, 0x14, 0xc7, 0xc7, 0x28, 0x3b, 0x6d, 0x11, 0x1f, 0x1a, 0x23, 0x46, 0xfa, 0xa2, 0x7d, 0x11, - 0xe3, 0x0b, 0xa6, 0xd4, 0x54, 0x1e, 0x88, 0x1a, 0xa1, 0x0a, 0xb4, 0xd5, 0xb6, 0x50, 0xa0, 0x36, - 0x94, 0x58, 0x13, 0x12, 0xe3, 0xfe, 0xa8, 0xd4, 0x17, 0x7d, 0x40, 0x53, 0xa7, 0x2c, 0xb2, 0xaf, - 0x03, 0x88, 0x82, 0x2c, 0x01, 0xc2, 0x0e, 0x65, 0x91, 0x25, 0x4a, 0x59, 0xc2, 0xbe, 0xaf, 0x33, - 0x30, 0xc3, 0xbe, 0x0c, 0x70, 0x3c, 0xff, 0x03, 0x77, 0x18, 0xca, 0xf6, 0xe4, 0x24, 0xff, 0xdc, - 0x73, 0xef, 0x9d, 0x39, 0xbf, 0xef, 0x2c, 0xdf, 0xf9, 0x46, 0xa5, 0x52, 0xa9, 0x9c, 0x59, 0x6f, - 0xb2, 0xdc, 0xff, 0x27, 0xc1, 0xb7, 0x33, 0x4b, 0x75, 0x49, 0xaf, 0x37, 0x90, 0x56, 0xab, 0x23, - 0xdd, 0xec, 0x2c, 0xcd, 0xce, 0xcd, 0xd1, 0x9c, 0x5e, 0x4f, 0x53, 0x53, 0x53, 0xa4, 0x37, 0x18, - 0xc8, 0x30, 0x3f, 0x2f, 0x9a, 0xd1, 0x6a, 0x69, 0x61, 0x61, 0x61, 0x47, 0x8b, 0x8b, 0xa2, 0xc5, - 0xa5, 0x25, 0xd1, 0x12, 0xb4, 0xbc, 0x2c, 0xc2, 0xef, 0x15, 0x1b, 0x5a, 0x5d, 0x5d, 0x25, 0x30, - 0x00, 0x72, 0x9f, 0x99, 0x99, 0xa1, 0xfa, 0xfa, 0x06, 0x9a, 0x9c, 0x9a, 0xa6, 0xe9, 0x19, 0x2d, - 0x8d, 0x8f, 0x8f, 0x93, 0x46, 0xa3, 0xa1, 0xc1, 0xa1, 0x21, 0x13, 0xb8, 0xae, 0xae, 0x8e, 0x2a, - 0x2a, 0x2a, 0x04, 0x3a, 0x0f, 0x31, 0x30, 0x33, 0x33, 0x73, 0x07, 0xb8, 0xab, 0xaa, 0xaa, 0x2a, - 0x6a, 0x68, 0x68, 0x30, 0x2d, 0x60, 0x72, 0x72, 0x92, 0x56, 0x56, 0x56, 0x00, 0x42, 0x64, 0x2a, - 0x77, 0x44, 0x32, 0x32, 0x32, 0x22, 0xab, 0xd6, 0xea, 0x76, 0x22, 0x1b, 0x1a, 0x1e, 0xa6, 0x8c, - 0x8c, 0x0c, 0x79, 0x6e, 0xd8, 0x8d, 0xac, 0xb2, 0xb2, 0x92, 0xaa, 0xab, 0xab, 0x77, 0x1c, 0xb3, - 0x23, 0x80, 0x94, 0x68, 0x6a, 0x6a, 0x6a, 0xe4, 0xdd, 0x32, 0xdb, 0xcb, 0xec, 0xbc, 0xb4, 0xac, - 0x8c, 0xe2, 0xe2, 0xe2, 0x94, 0x88, 0xf6, 0x40, 0x58, 0x09, 0x20, 0x45, 0x45, 0x45, 0x34, 0xcc, - 0x10, 0x3d, 0x47, 0x01, 0x08, 0x60, 0xa3, 0x63, 0x63, 0xa6, 0x95, 0xe3, 0x1e, 0x8e, 0xe1, 0x10, - 0x20, 0xac, 0x18, 0x82, 0x0d, 0xa7, 0x10, 0x22, 0x8f, 0x8f, 0x8f, 0xa7, 0xc4, 0xc4, 0x44, 0x5a, - 0x5f, 0x5f, 0xdf, 0x03, 0xa1, 0x16, 0x70, 0x86, 0x34, 0xc9, 0x17, 0x92, 0x92, 0x68, 0x64, 0x74, - 0x54, 0xd2, 0x33, 0xc6, 0x69, 0xcc, 0xca, 0xca, 0x92, 0x95, 0x9b, 0x3b, 0x87, 0x43, 0x3c, 0x5f, - 0x5b, 0x5b, 0x13, 0xc1, 0x86, 0x53, 0x08, 0x80, 0xa8, 0xa8, 0x28, 0xb9, 0x6e, 0x6c, 0x6c, 0x98, - 0x81, 0x78, 0xf5, 0x8d, 0x8d, 0x8d, 0x02, 0xc2, 0xcb, 0x98, 0x98, 0x18, 0x4a, 0x4e, 0x4e, 0x96, - 0x08, 0x00, 0x80, 0x73, 0xa4, 0x63, 0xc5, 0xdc, 0x39, 0x3b, 0x84, 0x0d, 0x47, 0x90, 0x62, 0x1b, - 0x8d, 0x46, 0x4a, 0xe2, 0x85, 0x02, 0x84, 0xeb, 0xe6, 0xe6, 0xe6, 0x1e, 0x08, 0xf9, 0x1f, 0xe3, - 0x88, 0x50, 0x0b, 0x80, 0x00, 0x45, 0x3d, 0x94, 0x14, 0x21, 0x5d, 0x88, 0x00, 0x00, 0x40, 0xb1, - 0x6a, 0x38, 0x85, 0x0d, 0xc7, 0x10, 0x6c, 0x38, 0x85, 0xcc, 0x41, 0x5b, 0x5b, 0x5b, 0x7b, 0x20, - 0x74, 0x51, 0x53, 0x53, 0x93, 0x14, 0x1c, 0xa0, 0xe6, 0xe6, 0x66, 0x9a, 0x35, 0xcc, 0x88, 0x73, - 0x74, 0x60, 0x74, 0x74, 0xb4, 0x74, 0x10, 0x04, 0x7b, 0x7a, 0x7a, 0x5a, 0xda, 0x1f, 0x36, 0x3a, - 0x16, 0xf7, 0x8a, 0x0d, 0xc7, 0x47, 0x82, 0x90, 0xa2, 0xf1, 0x89, 0x09, 0x29, 0xb8, 0x02, 0xfa, - 0x22, 0xde, 0x8b, 0xee, 0x67, 0x06, 0x72, 0x07, 0xea, 0x24, 0x95, 0x7d, 0x7d, 0x7d, 0x22, 0x38, - 0xe8, 0xef, 0xef, 0x17, 0xc1, 0x1e, 0x18, 0x18, 0x10, 0x29, 0xf6, 0xf6, 0xf6, 0xf6, 0x3e, 0x10, - 0xee, 0xf7, 0x81, 0x10, 0x91, 0x39, 0xe8, 0xdb, 0x14, 0x6f, 0xf2, 0x8d, 0xb5, 0xa3, 0xcf, 0x13, - 0xdf, 0xa5, 0xb1, 0x89, 0x61, 0xd9, 0xa8, 0xf8, 0x1e, 0xba, 0x12, 0x57, 0xa4, 0xb4, 0xb8, 0xb8, - 0x58, 0x6a, 0x88, 0xe6, 0x80, 0x8d, 0x67, 0x47, 0x82, 0xc2, 0xc2, 0xc2, 0xee, 0xe1, 0x0b, 0xd8, - 0x43, 0xf8, 0x41, 0x7e, 0x7e, 0x3e, 0x75, 0x74, 0x74, 0x30, 0xc8, 0x87, 0xae, 0xa5, 0xd8, 0xd0, - 0x75, 0x8d, 0x2d, 0x7d, 0x1a, 0x77, 0x81, 0xc6, 0xb5, 0x83, 0x92, 0x7f, 0xa4, 0x02, 0x3f, 0x56, - 0x3e, 0xb0, 0x21, 0x3c, 0x57, 0x74, 0x68, 0xea, 0x6a, 0xdb, 0xf3, 0xa9, 0xe0, 0xef, 0x84, 0x03, - 0x0a, 0x89, 0xb8, 0x48, 0xd7, 0x52, 0x6d, 0xc8, 0x2f, 0xdb, 0x9e, 0x02, 0xf3, 0x4e, 0x53, 0x70, - 0xbc, 0x0b, 0xb5, 0x0d, 0xd4, 0x0b, 0x4c, 0x01, 0x28, 0x8e, 0x95, 0x26, 0x50, 0x1a, 0xe3, 0xd0, - 0xae, 0xf3, 0xfb, 0xe5, 0x3c, 0xbd, 0xf7, 0xc0, 0xf2, 0x80, 0x2e, 0x47, 0x58, 0xd1, 0x87, 0x69, - 0x0c, 0xfa, 0xc3, 0x9e, 0x82, 0x0a, 0x4f, 0xd3, 0xdd, 0x72, 0x07, 0x0a, 0x4e, 0x3d, 0x4f, 0xa5, - 0xff, 0x6a, 0xc4, 0x99, 0x02, 0x50, 0x9c, 0xa3, 0x0b, 0x8f, 0xdd, 0x47, 0xb7, 0x1f, 0xba, 0xd0, - 0xfb, 0xd1, 0x96, 0x07, 0xe4, 0x1d, 0x6b, 0x25, 0x11, 0xdd, 0xcc, 0xb6, 0xa3, 0xa0, 0x02, 0x8e, - 0xa8, 0xd4, 0x81, 0xee, 0xd5, 0x3a, 0xd2, 0xdd, 0xec, 0x73, 0x94, 0x54, 0xf5, 0x83, 0xd4, 0xa3, - 0xa4, 0xa4, 0x44, 0xe6, 0x1e, 0xf6, 0x61, 0x61, 0x61, 0x21, 0xcd, 0xf2, 0x84, 0xc1, 0x73, 0x73, - 0x90, 0x69, 0x04, 0x1d, 0x05, 0xfa, 0x20, 0xc6, 0x92, 0xae, 0x26, 0xdb, 0xd0, 0x8d, 0x2c, 0x3b, - 0x0a, 0xf8, 0xeb, 0x14, 0xdd, 0x29, 0x3e, 0x43, 0x21, 0x15, 0xcf, 0xd2, 0x27, 0x35, 0x8e, 0x14, - 0x9c, 0xfb, 0x02, 0xfd, 0x98, 0x1b, 0x2c, 0xa3, 0xaa, 0xb7, 0xb7, 0x97, 0xba, 0xba, 0xba, 0xc4, - 0x71, 0x67, 0x67, 0xa7, 0x80, 0xcd, 0x41, 0x68, 0x96, 0x63, 0x41, 0xd0, 0x95, 0x44, 0x6b, 0xfa, - 0x88, 0x9b, 0xc1, 0xff, 0x4f, 0x7b, 0x89, 0xea, 0x4e, 0xc9, 0x19, 0x0a, 0x2e, 0x73, 0x10, 0x05, - 0xe5, 0x38, 0xd2, 0x37, 0x29, 0x5e, 0x34, 0x67, 0xd0, 0x99, 0xf6, 0x1a, 0x5a, 0x1e, 0x51, 0x25, - 0x24, 0x24, 0x08, 0x08, 0x57, 0x80, 0x4f, 0x04, 0xf9, 0xc4, 0xed, 0xa4, 0x0f, 0x51, 0xdd, 0xca, - 0xe1, 0xa6, 0xc8, 0x3f, 0x45, 0xb7, 0xb9, 0x5e, 0x10, 0xec, 0x1b, 0x31, 0xcf, 0x53, 0x51, 0x4b, - 0xaa, 0xa4, 0x2b, 0x3d, 0x3d, 0x5d, 0x36, 0xf1, 0x04, 0xef, 0x47, 0xcc, 0xcb, 0xc8, 0xc8, 0x48, - 0x01, 0x4d, 0x4c, 0x4c, 0x1a, 0x19, 0xf4, 0xd6, 0xb1, 0x20, 0xc8, 0x37, 0xc1, 0x5a, 0x9a, 0x02, - 0x30, 0x34, 0x06, 0x80, 0xfe, 0xac, 0x80, 0xd8, 0x73, 0x94, 0xd3, 0x10, 0x25, 0xa9, 0xc1, 0x64, - 0x48, 0x49, 0x49, 0xa1, 0x1e, 0x4e, 0x23, 0xb6, 0x86, 0x5a, 0xad, 0xa6, 0xd4, 0xd4, 0x54, 0x2a, - 0x2f, 0x2f, 0xa7, 0xd0, 0xd0, 0xd0, 0x58, 0x06, 0xbd, 0x7e, 0x22, 0x08, 0xb5, 0xf2, 0xe5, 0x14, - 0x22, 0x32, 0xa4, 0xf1, 0x7a, 0x86, 0x2d, 0x05, 0x46, 0xbd, 0x42, 0x8f, 0x3a, 0x0b, 0xa9, 0xa5, - 0xa5, 0x45, 0x20, 0x03, 0x83, 0x83, 0x14, 0x1e, 0x1e, 0x2e, 0xf3, 0xae, 0xbe, 0xbe, 0x5e, 0x6a, - 0x85, 0x4d, 0xef, 0xe7, 0xe7, 0x17, 0xc5, 0x10, 0x57, 0x96, 0xed, 0x89, 0x20, 0x81, 0xfd, 0xc6, - 0x69, 0x8c, 0xb7, 0x92, 0xe8, 0x3e, 0x8e, 0x78, 0x8d, 0xba, 0x47, 0xff, 0x91, 0xdc, 0xe3, 0x14, - 0xc6, 0x31, 0xd2, 0xdd, 0xdd, 0x4d, 0xb9, 0xb9, 0xb9, 0xb2, 0xbf, 0x00, 0x66, 0xc8, 0xb6, 0xa7, - 0xa7, 0xe7, 0x4f, 0x0c, 0x70, 0x61, 0x59, 0xb3, 0x9e, 0x52, 0xdd, 0xfa, 0xf9, 0x55, 0xba, 0xa1, - 0x76, 0x3e, 0xa0, 0x2b, 0x0f, 0xce, 0xee, 0x83, 0x79, 0x45, 0x58, 0x52, 0x48, 0xe4, 0x05, 0x1a, - 0x1a, 0xef, 0x95, 0x71, 0x84, 0xa2, 0x03, 0xd4, 0xc9, 0x1d, 0xf7, 0xf8, 0x71, 0xbb, 0x1c, 0xf5, - 0xa8, 0x0f, 0x4f, 0xfe, 0x2d, 0x0f, 0x0f, 0x8f, 0xfb, 0xec, 0xfc, 0x65, 0x96, 0x15, 0xb3, 0x55, - 0x90, 0xca, 0xb0, 0x30, 0x4b, 0x3a, 0xfd, 0xd4, 0x01, 0x7d, 0x99, 0xe8, 0x65, 0x82, 0x5c, 0x7e, - 0x68, 0x43, 0x9f, 0xc5, 0xbd, 0x43, 0x86, 0xc5, 0x39, 0xca, 0xcb, 0xcb, 0x93, 0xe3, 0x44, 0xc7, - 0xa7, 0x71, 0x4f, 0x4f, 0x8f, 0xd4, 0x02, 0xc7, 0x38, 0x06, 0x6e, 0x6d, 0x6d, 0xad, 0xd1, 0xcd, - 0xcd, 0xed, 0x6b, 0x06, 0xbc, 0xc4, 0x7a, 0x46, 0x81, 0x08, 0xc8, 0xc9, 0xc9, 0xe9, 0x6d, 0xec, - 0x5e, 0x84, 0x8c, 0x1d, 0xde, 0xde, 0xde, 0xbe, 0x3b, 0xeb, 0xbc, 0x05, 0xe2, 0xa3, 0x76, 0xa0, - 0xef, 0x34, 0xfe, 0xbc, 0xf1, 0x76, 0x8e, 0xec, 0xd6, 0xd6, 0x56, 0x13, 0x08, 0x11, 0xb4, 0xb5, - 0xb5, 0x49, 0x5d, 0xca, 0xca, 0xca, 0xe6, 0x5d, 0x5d, 0x5d, 0x03, 0x19, 0xf0, 0x1c, 0xeb, 0x69, - 0x73, 0x88, 0x80, 0xf8, 0x73, 0xc9, 0xb8, 0x3b, 0x4a, 0x94, 0xa1, 0x09, 0x1b, 0xa0, 0xab, 0xea, - 0xb3, 0xa4, 0x2e, 0xf8, 0xca, 0x74, 0x72, 0x62, 0xbc, 0x00, 0x86, 0x4e, 0x43, 0xfa, 0xe6, 0xf8, - 0x44, 0xe6, 0x03, 0xd3, 0x98, 0x96, 0x96, 0xd6, 0x60, 0x61, 0x61, 0xf1, 0x06, 0xfb, 0xb2, 0x43, - 0x3d, 0x9e, 0x84, 0x28, 0x20, 0x67, 0xd5, 0x13, 0x7f, 0x20, 0xf9, 0xc8, 0x48, 0xfb, 0x5e, 0x13, - 0x40, 0xbf, 0x3f, 0x52, 0x6f, 0x97, 0x96, 0x96, 0xfe, 0x6a, 0xfe, 0xee, 0x10, 0x5d, 0x64, 0xbd, - 0xa8, 0x32, 0xab, 0xc7, 0x61, 0xfa, 0x0f, 0x95, 0x20, 0x3b, 0xce, 0x3e, 0xbe, 0xf9, 0x26, 0x00, - 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, + 0xce, 0x00, 0x00, 0x05, 0x06, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x9d, 0x96, 0x59, 0x4c, 0x94, + 0x57, 0x14, 0xc7, 0xa7, 0x36, 0xb6, 0x69, 0x6a, 0xfb, 0x42, 0x9f, 0xfa, 0xe0, 0x83, 0x6f, 0x6d, + 0xe4, 0xb1, 0x29, 0xa6, 0xf5, 0xb1, 0xc5, 0xf6, 0xa1, 0x61, 0x53, 0x09, 0x58, 0x04, 0x42, 0x20, + 0x68, 0x4c, 0x59, 0x85, 0xb2, 0x23, 0x5b, 0x0d, 0x24, 0xf0, 0xd2, 0x6a, 0x40, 0x44, 0x24, 0x31, + 0x40, 0x02, 0x9a, 0xa2, 0x61, 0x71, 0x00, 0x41, 0x06, 0x85, 0x2a, 0x0c, 0x13, 0x28, 0xfb, 0x26, + 0xca, 0x36, 0x6c, 0xc3, 0xc0, 0x0c, 0xf3, 0xcd, 0x72, 0x7a, 0xfe, 0xb7, 0xf3, 0x4d, 0x87, 0xe1, + 0x73, 0x49, 0x6f, 0x72, 0xf2, 0xdd, 0xb9, 0xf7, 0x7e, 0xe7, 0x77, 0xb6, 0x7b, 0xbe, 0x51, 0x11, + 0x91, 0xca, 0x5d, 0x78, 0xbc, 0xef, 0xeb, 0xeb, 0x1b, 0x56, 0x59, 0x59, 0xf9, 0xe7, 0xb5, 0x6b, + 0xd7, 0x34, 0x78, 0xde, 0xbc, 0x79, 0xf3, 0x6e, 0x55, 0x55, 0x95, 0xa2, 0xdc, 0xb8, 0x71, 0xe3, + 0x6e, 0xd9, 0xef, 0x7f, 0x34, 0xf8, 0x7c, 0xf3, 0x6d, 0x0c, 0xbf, 0xfb, 0x91, 0xa7, 0x3e, 0x97, + 0x5e, 0x05, 0xd0, 0x11, 0x8d, 0x46, 0xa3, 0xbb, 0x7f, 0xff, 0x3e, 0x0d, 0x0d, 0x0d, 0x51, 0x5b, + 0x5b, 0x1b, 0xed, 0xed, 0xed, 0x91, 0xcd, 0x66, 0x13, 0x62, 0xb7, 0xdb, 0xc9, 0xe1, 0x70, 0xb8, + 0x04, 0x7b, 0xaf, 0x5e, 0xbd, 0xa2, 0x27, 0x7f, 0x3d, 0x97, 0xbe, 0x3f, 0xf5, 0x43, 0x0e, 0xbf, + 0xff, 0xf1, 0xbb, 0x82, 0x3e, 0x65, 0x4b, 0xf5, 0x2f, 0x5e, 0xbc, 0x20, 0x8c, 0xd5, 0xd5, 0x55, + 0xea, 0xeb, 0xeb, 0x7b, 0x2d, 0xc8, 0x6c, 0x36, 0xd3, 0xc2, 0xc2, 0x02, 0x3d, 0x7c, 0xa8, 0xa6, + 0xc1, 0x21, 0x9d, 0xdd, 0xe7, 0xe4, 0x49, 0xc0, 0x3e, 0x79, 0x2b, 0x28, 0x33, 0x33, 0xb3, 0x90, + 0x15, 0x6f, 0x93, 0x73, 0x48, 0x92, 0x44, 0x5d, 0x5d, 0x5d, 0x6f, 0xf4, 0x68, 0x71, 0x71, 0x91, + 0x3a, 0x3b, 0x1f, 0x91, 0x56, 0x3b, 0x44, 0xc3, 0x23, 0x23, 0x8e, 0xaf, 0x4f, 0x9c, 0xc8, 0x87, + 0xc1, 0xaf, 0x05, 0xe5, 0xe6, 0xe6, 0xfe, 0xc2, 0x21, 0x7b, 0xec, 0x80, 0x06, 0x1e, 0x78, 0x74, + 0x76, 0x76, 0xd2, 0xda, 0xda, 0x9a, 0x22, 0x48, 0x36, 0x64, 0x7d, 0x7d, 0x9d, 0x9e, 0x3d, 0x7b, + 0x4e, 0x2d, 0xad, 0x6d, 0xfc, 0xdb, 0x42, 0x03, 0x83, 0x83, 0x8e, 0xe3, 0xc7, 0xbf, 0x4c, 0x62, + 0xd8, 0x87, 0x07, 0x40, 0x71, 0x71, 0x71, 0x3f, 0xdf, 0xb9, 0x73, 0xa7, 0x9f, 0x15, 0xec, 0xc9, + 0xde, 0xe8, 0x74, 0x3a, 0x1a, 0x1f, 0x1f, 0x27, 0xab, 0xd5, 0xba, 0x0f, 0x24, 0xc3, 0x30, 0xb0, + 0x66, 0x34, 0x1a, 0x69, 0x6a, 0x6a, 0x9a, 0x1e, 0x3c, 0x78, 0x20, 0x3c, 0xb4, 0x58, 0xf6, 0xe8, + 0xb1, 0x46, 0x23, 0x79, 0x79, 0x79, 0x05, 0x30, 0xec, 0x90, 0x0b, 0x94, 0x90, 0x90, 0xf0, 0x63, + 0x69, 0x69, 0xe9, 0xdf, 0x3c, 0xdf, 0x92, 0x21, 0x2b, 0x2b, 0x2b, 0x54, 0x5b, 0x5b, 0x4b, 0xc3, + 0xc3, 0xc3, 0x34, 0x3a, 0x3a, 0x2a, 0x80, 0xd3, 0xd3, 0xd3, 0x34, 0x37, 0x37, 0x47, 0xc8, 0xdf, + 0xe6, 0xe6, 0x26, 0xc9, 0x5e, 0xc3, 0xab, 0x8d, 0x8d, 0x0d, 0x1a, 0x19, 0x19, 0x61, 0xaf, 0x9a, + 0x39, 0xa7, 0xfd, 0x22, 0x6f, 0xad, 0x6a, 0xb5, 0xf1, 0xf0, 0xe1, 0xc3, 0x5f, 0x31, 0xec, 0x3d, + 0x40, 0x7c, 0x0a, 0x0a, 0x0a, 0x26, 0xd8, 0xca, 0x65, 0x19, 0x82, 0xd0, 0xe9, 0xf5, 0x7a, 0x82, + 0xa0, 0x18, 0x96, 0x97, 0x97, 0x69, 0x69, 0x69, 0x49, 0xe4, 0x02, 0x15, 0x06, 0x01, 0x48, 0xf6, + 0x0a, 0x1e, 0xc2, 0x13, 0xc0, 0xe0, 0x19, 0xc2, 0xd8, 0xa3, 0xe9, 0xa5, 0x01, 0xed, 0x20, 0xd5, + 0x37, 0xde, 0x1d, 0x67, 0xd0, 0x51, 0x55, 0x52, 0x52, 0x52, 0x1b, 0x87, 0x66, 0x9a, 0xde, 0x30, + 0xe4, 0x9c, 0xc8, 0x61, 0x83, 0x20, 0x64, 0xee, 0xb9, 0xc2, 0x9a, 0xc5, 0x62, 0xa1, 0xed, 0xed, + 0x6d, 0x91, 0x33, 0x44, 0x04, 0x06, 0xae, 0xad, 0x6f, 0xd0, 0xd1, 0x63, 0xc7, 0x82, 0x54, 0xf1, + 0xf1, 0xf1, 0xbf, 0x71, 0xc2, 0xbb, 0xfe, 0x0f, 0xc8, 0xb3, 0x30, 0xf0, 0xc4, 0x3a, 0x42, 0x09, + 0x0f, 0x21, 0x92, 0x64, 0x25, 0x6f, 0x6f, 0xef, 0x50, 0x55, 0x4e, 0x4e, 0xce, 0x21, 0x86, 0xd5, + 0xf1, 0xe5, 0xec, 0x74, 0x0f, 0x1d, 0x4a, 0xfa, 0xf6, 0xed, 0xdb, 0xd4, 0xd0, 0xd0, 0x40, 0x4d, + 0x4d, 0x4d, 0xd4, 0xd2, 0xd2, 0x42, 0xed, 0xed, 0xed, 0xd4, 0xdd, 0xdd, 0x4d, 0x4f, 0x9f, 0x3e, + 0xa5, 0xd9, 0xd9, 0xd9, 0x7d, 0x85, 0x21, 0xc3, 0x3c, 0x8d, 0xc3, 0x10, 0x20, 0x14, 0x03, 0xc3, + 0x3e, 0x60, 0xd8, 0x43, 0xce, 0xc1, 0x23, 0xf9, 0x20, 0x14, 0xa0, 0x3b, 0x20, 0x0c, 0x08, 0x09, + 0xac, 0x44, 0xf5, 0x29, 0x55, 0xa0, 0xe7, 0xdd, 0x72, 0x87, 0x62, 0xee, 0x02, 0x41, 0x2e, 0x5c, + 0xb8, 0x70, 0xe4, 0xca, 0x95, 0x2b, 0xdd, 0xac, 0xb8, 0x4f, 0x3e, 0x84, 0x5b, 0xdf, 0xdc, 0xdc, + 0x4c, 0x26, 0x93, 0xe9, 0x9d, 0x60, 0x4a, 0xc0, 0x03, 0x20, 0xa7, 0x67, 0x9f, 0x15, 0x16, 0x16, + 0x3e, 0xd9, 0xda, 0xda, 0x32, 0xcb, 0x30, 0x54, 0x5b, 0x7f, 0x7f, 0xbf, 0xf3, 0x7e, 0x28, 0xc3, + 0x94, 0x80, 0xee, 0x72, 0x00, 0x04, 0x39, 0x77, 0xee, 0xdc, 0x17, 0xe5, 0xe5, 0xe5, 0xbb, 0x50, + 0x88, 0x01, 0x85, 0xc8, 0x0d, 0xbc, 0xfb, 0x37, 0xb9, 0xd2, 0x3e, 0x98, 0x27, 0x50, 0x09, 0xaa, + 0x08, 0x42, 0x43, 0x6c, 0x6d, 0x6d, 0x1d, 0x6f, 0x6c, 0x6c, 0x14, 0xca, 0xd1, 0xbd, 0x5f, 0xbe, + 0x7c, 0x29, 0xc2, 0x27, 0x60, 0x4e, 0xaf, 0x3c, 0x61, 0x4a, 0x40, 0x59, 0x5e, 0x0b, 0xea, 0xed, + 0xed, 0xd5, 0x4d, 0x4e, 0x4d, 0x11, 0x60, 0xa8, 0xae, 0x9d, 0x9d, 0x1d, 0xda, 0xdd, 0xdd, 0xfd, + 0x0f, 0xe6, 0x16, 0x46, 0x25, 0xa0, 0xa7, 0xc8, 0xa0, 0xcf, 0x59, 0xbe, 0x93, 0x85, 0x5b, 0xcc, + 0x4f, 0x63, 0x63, 0x63, 0x33, 0x46, 0x56, 0xbe, 0xe3, 0x54, 0xee, 0x0e, 0x70, 0x87, 0x60, 0x0e, + 0x03, 0xde, 0xe6, 0xd5, 0xf5, 0xeb, 0xd7, 0x8b, 0x54, 0x67, 0xcf, 0x9e, 0x5d, 0x0d, 0x0a, 0x0a, + 0x72, 0xf0, 0xd3, 0x9e, 0x9a, 0x9a, 0x6a, 0x52, 0xab, 0xd5, 0x2b, 0xac, 0xc0, 0x82, 0xd8, 0xe2, + 0x96, 0x07, 0x07, 0x07, 0xd3, 0xe9, 0xd3, 0xa7, 0x45, 0x1f, 0x93, 0xab, 0x0a, 0xad, 0xa6, 0xa8, + 0xa8, 0x48, 0xac, 0xfb, 0xfb, 0xfb, 0x53, 0x5a, 0x5a, 0x9a, 0x80, 0x87, 0x87, 0x87, 0x13, 0xb7, + 0x33, 0x71, 0x66, 0x60, 0x60, 0x80, 0x58, 0x27, 0x95, 0x95, 0x95, 0xa1, 0xe9, 0x2e, 0xab, 0xce, + 0x9c, 0x39, 0xb3, 0x19, 0x19, 0x19, 0x69, 0xad, 0xab, 0xab, 0xd3, 0x47, 0x47, 0x47, 0x4b, 0x5c, + 0x0c, 0x36, 0x0e, 0x95, 0xc5, 0xc6, 0x4a, 0x71, 0x69, 0xfd, 0xfc, 0xfc, 0x84, 0xdc, 0xba, 0x75, + 0xcb, 0x95, 0xdc, 0x5f, 0x59, 0x31, 0xd6, 0x32, 0x32, 0x32, 0xe8, 0xde, 0xbd, 0x7b, 0x94, 0x92, + 0x92, 0x22, 0x3a, 0x78, 0x48, 0x48, 0x08, 0xf1, 0xa7, 0x46, 0x34, 0xd4, 0xd0, 0xd0, 0x50, 0x4a, + 0x4c, 0x4c, 0x14, 0x91, 0x70, 0x81, 0xb8, 0xb1, 0xa2, 0x9c, 0x27, 0x99, 0x6e, 0x80, 0x02, 0x2e, + 0x69, 0x09, 0x2e, 0x17, 0x17, 0x17, 0x53, 0x58, 0x58, 0x18, 0xa5, 0xa7, 0xa7, 0xd3, 0xc5, 0x8b, + 0x17, 0x05, 0x64, 0x72, 0x72, 0x52, 0x40, 0xf2, 0xf2, 0xf2, 0x0e, 0xb4, 0x26, 0x80, 0x2e, 0x5f, + 0xbe, 0x4c, 0xb1, 0xb1, 0xb1, 0xc4, 0xc6, 0x8b, 0xa6, 0x8c, 0x7d, 0x17, 0x28, 0x30, 0x30, 0xd0, + 0x11, 0x11, 0x11, 0x61, 0x85, 0x82, 0xab, 0x57, 0xaf, 0x1a, 0x11, 0x3a, 0x84, 0x02, 0x2f, 0x96, + 0x94, 0x94, 0x88, 0x36, 0x84, 0x3d, 0x54, 0x5f, 0x47, 0x47, 0x87, 0x98, 0xa3, 0x6b, 0xb8, 0x4a, + 0xd8, 0x09, 0xc4, 0x79, 0xec, 0x21, 0x9c, 0x9c, 0x67, 0x97, 0x21, 0x2e, 0x10, 0x20, 0xfc, 0x3f, + 0x61, 0xfd, 0xd2, 0xa5, 0x4b, 0x7b, 0x9c, 0x13, 0xfb, 0xfc, 0xfc, 0xbc, 0xa4, 0xd5, 0x6a, 0xc5, + 0x4b, 0x9c, 0x33, 0xf1, 0x1d, 0xc2, 0x1c, 0x61, 0x52, 0x04, 0xb9, 0x79, 0x04, 0x08, 0xf6, 0xab, + 0xb9, 0x4f, 0xda, 0x3d, 0x41, 0x72, 0xe8, 0x7a, 0x7a, 0x7a, 0x16, 0x71, 0x88, 0xef, 0x8e, 0xb5, + 0xa2, 0xa2, 0x42, 0xbc, 0x80, 0x62, 0x90, 0x2d, 0x4d, 0xe3, 0x10, 0x4e, 0x4c, 0x4c, 0x88, 0x79, + 0x7e, 0x7e, 0xfe, 0x81, 0x6e, 0x8e, 0x73, 0x59, 0x59, 0x59, 0x94, 0x9d, 0x9d, 0x2d, 0xce, 0xe0, + 0x6f, 0x00, 0xf6, 0xf6, 0x15, 0x43, 0x7d, 0x7d, 0xbd, 0x1e, 0x40, 0x1c, 0xe0, 0xbb, 0x23, 0x45, + 0xc7, 0xc4, 0x50, 0x0c, 0x4b, 0x75, 0x75, 0xb5, 0x90, 0xe4, 0xe4, 0x64, 0x0a, 0x08, 0x08, 0xa0, + 0x2d, 0x83, 0x41, 0x24, 0x1f, 0xe7, 0xb8, 0x37, 0x8a, 0xcf, 0x37, 0x72, 0x88, 0x0a, 0x05, 0x88, + 0xdb, 0x98, 0x28, 0x0c, 0xe4, 0x14, 0x55, 0x89, 0xaf, 0xb3, 0x00, 0xc9, 0xe5, 0x0d, 0xe1, 0x0e, + 0x6e, 0xe6, 0xcf, 0xf7, 0x1a, 0x6f, 0x1a, 0x70, 0xa8, 0xa6, 0xa6, 0x46, 0x32, 0x39, 0x07, 0x57, + 0xa0, 0x05, 0x6b, 0x1c, 0x4a, 0x0b, 0xe7, 0xca, 0xcc, 0x96, 0xdb, 0x38, 0xb7, 0x02, 0xc8, 0x06, + 0xda, 0x0d, 0x06, 0x83, 0xe9, 0xfc, 0xf9, 0xf3, 0x0e, 0xae, 0x3a, 0x1b, 0xce, 0xcf, 0xcc, 0xcc, + 0x98, 0xf1, 0x3b, 0x2a, 0x2a, 0xca, 0xc1, 0xe7, 0x97, 0xfe, 0x01, 0x59, 0x66, 0x79, 0x68, 0xc5, + 0x68, 0xb6, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE import_footprint_names_xpm[1] = {{ png, sizeof( png ), "import_footprint_names_xpm" }}; diff --git a/bitmaps_png/cpp_26/py_script.cpp b/bitmaps_png/cpp_26/py_script.cpp new file mode 100644 index 0000000000..e621814637 --- /dev/null +++ b/bitmaps_png/cpp_26/py_script.cpp @@ -0,0 +1,100 @@ + +/* Do not modify this file, it was automatically generated by the + * PNG2cpp CMake script, using a *.png file as input. + */ + +#include + +static const unsigned char png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, + 0xce, 0x00, 0x00, 0x05, 0x2f, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xad, 0x96, 0x4d, 0x6f, 0x14, + 0xd9, 0x15, 0x86, 0x9f, 0x5b, 0x75, 0xab, 0xab, 0x3f, 0xdc, 0x6e, 0x5b, 0x06, 0x0f, 0x99, 0xcc, + 0xe0, 0xb1, 0x3b, 0x0a, 0xd2, 0x10, 0x69, 0x3c, 0x2d, 0x88, 0x8c, 0x64, 0x40, 0x10, 0x90, 0x50, + 0x94, 0x59, 0x8d, 0x66, 0x97, 0x5d, 0x16, 0x88, 0x25, 0x8b, 0x2c, 0xf8, 0x15, 0x2c, 0xf2, 0x07, + 0x92, 0x45, 0xb2, 0x42, 0x42, 0x59, 0x86, 0x0c, 0x4a, 0x76, 0x64, 0x62, 0x8b, 0xaf, 0x40, 0x88, + 0x47, 0x96, 0x09, 0x89, 0x89, 0x8d, 0xed, 0x71, 0xb7, 0xbb, 0xba, 0xba, 0x3e, 0xba, 0xef, 0x3d, + 0x59, 0xe4, 0x96, 0xd5, 0xd8, 0x26, 0x1a, 0x45, 0x29, 0xe9, 0xe8, 0x54, 0xd7, 0xbd, 0x75, 0xde, + 0x73, 0xde, 0xf3, 0x9e, 0x5b, 0xad, 0x44, 0x84, 0xff, 0xc7, 0xa5, 0x94, 0x3a, 0x01, 0x2c, 0x02, + 0xe7, 0x9d, 0x1f, 0x03, 0x96, 0x80, 0x3f, 0x03, 0x5f, 0xaa, 0xff, 0x15, 0x48, 0x29, 0xf5, 0xfd, + 0x91, 0xa0, 0x8b, 0xc0, 0xf7, 0x00, 0xa6, 0xa6, 0xa6, 0x76, 0x2f, 0x5d, 0xba, 0xf4, 0x75, 0x9e, + 0xe7, 0xd9, 0xbd, 0x7b, 0xf7, 0x3e, 0x4c, 0xd3, 0x74, 0x0e, 0xf8, 0xd5, 0xb7, 0x02, 0x52, 0x4a, + 0x69, 0x60, 0xfe, 0x40, 0xe0, 0xe9, 0x30, 0x0c, 0x69, 0xb5, 0x5a, 0xff, 0xba, 0x72, 0xe5, 0xca, + 0xeb, 0xf3, 0xe7, 0xcf, 0x4b, 0xb3, 0xd9, 0xfc, 0x4e, 0x10, 0x04, 0x1f, 0x02, 0x6c, 0x6c, 0x6c, + 0xac, 0xb6, 0xdb, 0xed, 0x67, 0xd7, 0xae, 0x5d, 0x6b, 0x02, 0x7f, 0xd2, 0xef, 0x08, 0x5c, 0x03, + 0x16, 0x46, 0xa8, 0x58, 0x50, 0x4a, 0xd5, 0xe6, 0xe6, 0xe6, 0xec, 0xe2, 0xe2, 0xe2, 0xfa, 0xe5, + 0xcb, 0x97, 0xb7, 0xe6, 0xe7, 0xe7, 0x7b, 0x93, 0x93, 0x93, 0x27, 0x81, 0xf7, 0x9d, 0xd1, 0xe9, + 0x74, 0x92, 0x3c, 0xcf, 0xbf, 0x99, 0x9e, 0x9e, 0x9e, 0x12, 0x11, 0x2b, 0x22, 0x16, 0x28, 0x01, + 0x03, 0xed, 0x02, 0x1f, 0x3f, 0xc0, 0xef, 0xa7, 0xc7, 0x8f, 0x1f, 0xd7, 0xad, 0x56, 0x2b, 0xbf, + 0x78, 0xf1, 0xe2, 0xe6, 0xb9, 0x73, 0xe7, 0xb6, 0x66, 0x66, 0x66, 0xa6, 0xb5, 0xd6, 0x35, 0xe0, + 0x24, 0x40, 0x96, 0x65, 0x66, 0x79, 0x79, 0xd9, 0x2c, 0x2d, 0x2d, 0xf1, 0xf8, 0xf1, 0x63, 0x1e, + 0x3d, 0x7a, 0x34, 0xdc, 0xdc, 0xdc, 0xd4, 0xb7, 0x6e, 0xdd, 0xfa, 0xfb, 0x8d, 0x1b, 0x37, 0xa6, + 0xe4, 0x3f, 0x54, 0x59, 0x20, 0x00, 0x06, 0x5a, 0x29, 0xf5, 0x23, 0xad, 0xf5, 0x97, 0xad, 0x56, + 0x8b, 0xb3, 0x67, 0xcf, 0xf6, 0x2f, 0x5c, 0xb8, 0xb0, 0x77, 0xfa, 0xf4, 0xe9, 0xde, 0xf8, 0xf8, + 0xf8, 0x84, 0xcb, 0xe6, 0xa4, 0x31, 0x86, 0xb5, 0xb5, 0x35, 0xfb, 0xf0, 0xe1, 0x43, 0x9e, 0x3c, + 0x79, 0xc2, 0xb3, 0x67, 0xcf, 0x7a, 0xaf, 0x5e, 0xbd, 0x5a, 0xd5, 0x5a, 0xb7, 0x83, 0x20, 0x10, + 0x6b, 0xed, 0x84, 0x31, 0xa6, 0x19, 0x86, 0xe1, 0x46, 0xb9, 0x5c, 0xf6, 0x00, 0x8c, 0x31, 0x16, + 0x90, 0x7d, 0x20, 0xa0, 0x3c, 0x33, 0x33, 0xc3, 0x9d, 0x3b, 0x77, 0x00, 0xaa, 0x22, 0x52, 0x7d, + 0xf3, 0xe6, 0x0d, 0x0f, 0x1e, 0x3c, 0xe0, 0xe9, 0xd3, 0xa7, 0xac, 0xac, 0xac, 0x6c, 0xad, 0xae, + 0xae, 0xbe, 0x14, 0x91, 0xa8, 0x56, 0xab, 0x95, 0xc3, 0x30, 0x9c, 0xd6, 0x5a, 0x7f, 0x74, 0xea, + 0xd4, 0xa9, 0x79, 0xad, 0x35, 0x83, 0xc1, 0x80, 0x9d, 0x9d, 0x1d, 0x7a, 0xbd, 0x1e, 0x22, 0xb2, + 0x51, 0x2a, 0x95, 0x14, 0x80, 0x88, 0x88, 0x52, 0xea, 0x2d, 0xea, 0xf6, 0xfb, 0x74, 0xff, 0xfe, + 0x7d, 0x6e, 0xdf, 0xbe, 0xbd, 0xa4, 0x94, 0xea, 0x55, 0xa7, 0xc7, 0xc7, 0xc3, 0x81, 0xff, 0x9e, + 0x52, 0xea, 0xbb, 0xcd, 0x66, 0x73, 0xda, 0xf7, 0x7d, 0x3c, 0xcf, 0x03, 0xd8, 0xf7, 0x69, 0x9a, + 0xd2, 0xed, 0x76, 0x49, 0xd3, 0x14, 0x6b, 0x2d, 0x22, 0xa2, 0xc2, 0x30, 0xf4, 0x1c, 0x50, 0xd1, + 0xa3, 0xe0, 0x10, 0xd0, 0xe6, 0xe6, 0x26, 0x69, 0x9a, 0xae, 0x54, 0x7f, 0xfc, 0xfe, 0x4f, 0x97, + 0x7f, 0x6e, 0x69, 0xfe, 0xae, 0xc4, 0xdc, 0xef, 0xcb, 0x94, 0x12, 0x0f, 0xa5, 0xd4, 0xbe, 0x58, + 0x44, 0x84, 0x2c, 0xcb, 0xe8, 0x74, 0x3a, 0xb4, 0xdb, 0x6d, 0x06, 0x83, 0xc1, 0xbe, 0x8e, 0x46, + 0x2b, 0x72, 0x7d, 0x0a, 0x80, 0x81, 0x37, 0x0a, 0xa4, 0x94, 0xc2, 0xf7, 0x7d, 0xed, 0x97, 0x35, + 0xa5, 0x58, 0xf1, 0xb7, 0xcf, 0x13, 0xee, 0xdd, 0xee, 0xf0, 0xe2, 0x8b, 0x84, 0xbc, 0x2e, 0xfb, + 0x20, 0x79, 0x9e, 0xd3, 0x6e, 0xb7, 0xd9, 0xd9, 0xd9, 0x21, 0xcb, 0x32, 0x8a, 0x11, 0x11, 0x11, + 0xc2, 0x30, 0xf4, 0x8b, 0x8a, 0xde, 0x49, 0x9d, 0x88, 0xe0, 0x79, 0x9e, 0x3e, 0xf6, 0xc8, 0xe7, + 0xea, 0xad, 0x3a, 0xeb, 0x3f, 0xcc, 0xf8, 0xfa, 0xb3, 0x84, 0x95, 0x9f, 0xf4, 0x59, 0xbd, 0xda, + 0x67, 0xf6, 0x0f, 0x15, 0x66, 0x7f, 0xab, 0xe9, 0x6f, 0xef, 0xb1, 0xb5, 0xb5, 0x45, 0x92, 0x24, + 0x8c, 0xce, 0xa1, 0x88, 0x78, 0xa3, 0xd4, 0x39, 0xa0, 0xa3, 0x2b, 0xf2, 0x3c, 0x4f, 0x2b, 0xa5, + 0x50, 0x16, 0xa6, 0x56, 0x03, 0xc6, 0x36, 0xbc, 0x62, 0x11, 0x3f, 0x16, 0xd2, 0x9d, 0x98, 0xed, + 0xed, 0x6d, 0xfa, 0xfd, 0x3e, 0xd6, 0xda, 0xb7, 0xe6, 0x4f, 0x44, 0x08, 0x82, 0xa0, 0x50, 0x9d, + 0xb8, 0x75, 0xef, 0x5d, 0x15, 0x79, 0x26, 0x84, 0xbf, 0x7e, 0xde, 0x67, 0xf5, 0x5a, 0x82, 0x09, + 0x84, 0x0f, 0xbe, 0x0a, 0xf9, 0xf8, 0x37, 0x15, 0xcc, 0x3f, 0xfb, 0xbc, 0x7e, 0xfd, 0x86, 0x28, + 0x8a, 0x30, 0xc6, 0x1c, 0x35, 0xeb, 0x5e, 0xa9, 0x54, 0x2a, 0x62, 0xd9, 0x91, 0x3d, 0xb9, 0x3e, + 0x50, 0x91, 0xf8, 0xbe, 0x1f, 0x7c, 0xf3, 0x89, 0x61, 0xe5, 0xb3, 0x94, 0xc6, 0x3f, 0x34, 0x9f, + 0xfc, 0x7a, 0x8c, 0xc9, 0x17, 0x1e, 0x2b, 0x17, 0x22, 0x3a, 0x1f, 0x47, 0xc4, 0x43, 0x8d, 0xd1, + 0x93, 0x78, 0xdb, 0x86, 0xca, 0x2f, 0x77, 0x0f, 0x56, 0xa4, 0x8a, 0x8a, 0x9c, 0x16, 0x0a, 0x05, + 0x0d, 0xb4, 0xe3, 0xb0, 0x90, 0xad, 0x05, 0xfc, 0x13, 0xcb, 0x01, 0x0b, 0xbf, 0x28, 0x71, 0xe2, + 0x61, 0x80, 0x18, 0x21, 0x4d, 0x53, 0x56, 0xbf, 0xc8, 0x19, 0x36, 0xca, 0x40, 0x19, 0x00, 0xfd, + 0x3c, 0x3d, 0x04, 0xe4, 0x54, 0xe7, 0x01, 0x58, 0x6b, 0x47, 0x2b, 0xda, 0xa7, 0x4e, 0x00, 0xe5, + 0x79, 0x9e, 0xf5, 0x7d, 0x5f, 0x2b, 0xa5, 0x78, 0x6f, 0x49, 0x33, 0x18, 0x0e, 0x48, 0xd3, 0x94, + 0xdd, 0xdd, 0x5d, 0x8e, 0xfd, 0xac, 0x4b, 0x9e, 0xe6, 0x90, 0x5b, 0xc8, 0x04, 0x95, 0xd8, 0x43, + 0xbc, 0x89, 0x88, 0xe7, 0xe4, 0x9d, 0xbb, 0x3e, 0xbd, 0x55, 0x91, 0x56, 0x4a, 0x19, 0xe7, 0xad, + 0xb5, 0xd6, 0xcb, 0xb2, 0x8c, 0x24, 0x49, 0xe8, 0x74, 0x3a, 0xec, 0xed, 0xed, 0x91, 0x24, 0x09, + 0xf6, 0xf5, 0x10, 0xff, 0xbf, 0x9f, 0xf4, 0x43, 0xc0, 0xd3, 0x5a, 0x7b, 0x22, 0x92, 0x1d, 0x09, + 0xe4, 0x36, 0x69, 0xc0, 0x46, 0x51, 0x64, 0xb3, 0x2c, 0x23, 0x8e, 0x63, 0xb2, 0x2c, 0xc3, 0x18, + 0x73, 0x48, 0x5d, 0xef, 0xb8, 0xb2, 0x02, 0x48, 0x29, 0x95, 0x15, 0xe2, 0x3a, 0x58, 0xd1, 0xd0, + 0x3d, 0xb0, 0xeb, 0xeb, 0xeb, 0x33, 0x95, 0x4a, 0xe5, 0xb9, 0x31, 0xc6, 0x58, 0x6b, 0x0d, 0x60, + 0x45, 0xc4, 0x88, 0x48, 0x71, 0x6f, 0x01, 0x63, 0xad, 0xb5, 0x8e, 0x09, 0x6b, 0xad, 0x35, 0x22, + 0x32, 0x04, 0xae, 0x06, 0x41, 0xd0, 0x03, 0x52, 0x80, 0xe1, 0x70, 0x78, 0xa8, 0x22, 0x03, 0x70, + 0xe6, 0xcc, 0x19, 0x6e, 0xde, 0xbc, 0x79, 0x2c, 0x8e, 0x63, 0x1b, 0x45, 0x91, 0xc4, 0x71, 0x6c, + 0xbb, 0xdd, 0xae, 0xed, 0xf5, 0x7a, 0x12, 0x45, 0x91, 0x8d, 0xa2, 0xc8, 0x76, 0xbb, 0x5d, 0x89, + 0xa2, 0xc8, 0x26, 0x49, 0x72, 0x14, 0x8f, 0x5b, 0xa5, 0x52, 0xa9, 0xe6, 0xaa, 0x3b, 0x92, 0x3a, + 0x0f, 0x60, 0x76, 0x76, 0xb6, 0x76, 0xfd, 0xfa, 0xf5, 0x6f, 0xfb, 0x35, 0x1f, 0x02, 0x91, 0xb3, + 0xae, 0x88, 0x44, 0x4a, 0xa9, 0xae, 0xfb, 0xa6, 0x6d, 0x39, 0xe5, 0xbd, 0x05, 0x54, 0x5a, 0x5b, + 0x5b, 0xab, 0x2f, 0x2c, 0x2c, 0x50, 0xad, 0x56, 0x19, 0x1b, 0x1b, 0xdb, 0xb7, 0x5a, 0xad, 0x26, + 0x8d, 0x46, 0x23, 0x6d, 0x34, 0x1a, 0xf9, 0xc4, 0xc4, 0x44, 0xde, 0x68, 0x34, 0xcc, 0xc4, 0xc4, + 0x84, 0xa9, 0xd7, 0xeb, 0x52, 0xaf, 0xd7, 0x55, 0xb5, 0x5a, 0xf5, 0xaa, 0xd5, 0x6a, 0xa5, 0x5c, + 0x2e, 0x8f, 0x87, 0x61, 0x18, 0x6a, 0xad, 0x43, 0xa5, 0x94, 0x17, 0xc7, 0xb1, 0xf7, 0xf2, 0xe5, + 0xcb, 0xbf, 0xdc, 0xbd, 0x7b, 0x77, 0xb2, 0x00, 0x52, 0xc0, 0x07, 0xee, 0x8f, 0xc5, 0x31, 0xa0, + 0x32, 0x62, 0x55, 0xe7, 0x6b, 0xee, 0xbe, 0x06, 0xd4, 0x9d, 0x8d, 0x1f, 0xf0, 0x63, 0x80, 0x02, + 0xa8, 0x54, 0x2a, 0x94, 0xcb, 0x65, 0xda, 0xed, 0x76, 0x21, 0x90, 0x3f, 0x02, 0xd7, 0x15, 0xf0, + 0x03, 0xe0, 0x53, 0xe0, 0xc4, 0x08, 0x25, 0x43, 0x60, 0xe0, 0x36, 0xa6, 0xce, 0x12, 0xf7, 0x7b, + 0xe0, 0x6c, 0x38, 0xe2, 0x8b, 0x53, 0xba, 0x02, 0x84, 0x2e, 0x31, 0x05, 0x7c, 0x05, 0x74, 0x44, + 0xc4, 0x16, 0xd2, 0x4e, 0xdc, 0x90, 0x55, 0xdc, 0xe8, 0x8f, 0xf6, 0x4e, 0x8d, 0xf4, 0xc5, 0x3a, + 0xe1, 0x0c, 0x0f, 0x00, 0x0d, 0xdd, 0xfb, 0x99, 0x8b, 0x95, 0x00, 0x1d, 0x60, 0x0a, 0x18, 0x28, + 0xa5, 0x62, 0x0d, 0x6c, 0xb8, 0x85, 0x17, 0x2e, 0xab, 0xe2, 0x58, 0x0a, 0x5c, 0x76, 0xc5, 0xb9, + 0x53, 0x64, 0x5b, 0x1a, 0x59, 0xd7, 0xee, 0x79, 0x91, 0x98, 0x72, 0x66, 0x80, 0x36, 0xf0, 0x1c, + 0x88, 0x81, 0xe4, 0xdf, 0xcc, 0xce, 0xc6, 0x31, 0x0e, 0xd1, 0x38, 0x5b, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +const BITMAP_OPAQUE py_script_xpm[1] = {{ png, sizeof( png ), "py_script_xpm" }}; + +//EOF diff --git a/bitmaps_png/sources/add_dashed_line.svg b/bitmaps_png/sources/add_dashed_line.svg index 31022de172..7665c7ba71 100644 --- a/bitmaps_png/sources/add_dashed_line.svg +++ b/bitmaps_png/sources/add_dashed_line.svg @@ -34,15 +34,15 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="1301" - inkscape:window-height="744" + inkscape:window-width="1600" + inkscape:window-height="849" id="namedview48" showgrid="true" inkscape:zoom="22.961538" - inkscape:cx="13" + inkscape:cx="4.3551087" inkscape:cy="13" - inkscape:window-x="65" - inkscape:window-y="24" + inkscape:window-x="0" + inkscape:window-y="29" inkscape:window-maximized="1" inkscape:current-layer="svg2" inkscape:snap-to-guides="false" @@ -60,26 +60,9 @@ - - + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> diff --git a/bitmaps_png/sources/annotate.svg b/bitmaps_png/sources/annotate.svg index 179b72eac3..e200d033c5 100644 --- a/bitmaps_png/sources/annotate.svg +++ b/bitmaps_png/sources/annotate.svg @@ -39,13 +39,13 @@ inkscape:window-height="849" id="namedview184" showgrid="true" - inkscape:zoom="22.961538" - inkscape:cx="6.1110434" - inkscape:cy="11.23117" + inkscape:zoom="45.923076" + inkscape:cx="16.222556" + inkscape:cy="5.7369038" inkscape:window-x="0" inkscape:window-y="29" inkscape:window-maximized="1" - inkscape:current-layer="svg2" + inkscape:current-layer="text3040" inkscape:snap-grids="false" inkscape:snap-to-guides="false"> - - - + + + + + + + + + + + id="path3001" + inkscape:connector-curvature="0" /> + id="path3003" + inkscape:connector-curvature="0" /> + id="path3005" + inkscape:connector-curvature="0" /> diff --git a/bitmaps_png/sources/datasheet.svg b/bitmaps_png/sources/datasheet.svg index 3429ecbebf..dc3513962e 100644 --- a/bitmaps_png/sources/datasheet.svg +++ b/bitmaps_png/sources/datasheet.svg @@ -8,11 +8,11 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - height="48" - width="48" + height="26" + width="26" version="1.1" id="svg2" - inkscape:version="0.48.1 r9760" + inkscape:version="0.48.3.1 r9886" sodipodi:docname="datasheet.svg"> @@ -36,26 +36,36 @@ inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1600" - inkscape:window-height="876" + inkscape:window-height="849" id="namedview31" - showgrid="false" - inkscape:zoom="9.8333333" - inkscape:cx="-0.5832341" - inkscape:cy="26.726924" + showgrid="true" + inkscape:zoom="23.882667" + inkscape:cx="6.9462797" + inkscape:cy="13.806302" inkscape:window-x="0" - inkscape:window-y="24" + inkscape:window-y="29" inkscape:window-maximized="1" - inkscape:current-layer="svg2" /> + inkscape:current-layer="svg2" + inkscape:snap-to-guides="false" + inkscape:snap-grids="false"> + + + y1="16.368999" + x1="23.983999"> + gradientTransform="matrix(0.19611083,0,0,0.17490217,-2.6221466,-1.3587275)" + x1="23.983999" + y1="16.368999" + x2="72.999001" + y2="73.399002" /> + style="fill:none;stroke:#000000;stroke-width:1.51282549;stroke-linejoin:round;stroke-opacity:0.0657895" /> + style="fill:#bab5ab;fill-opacity:0.44298245;fill-rule:evenodd;stroke:#000000;stroke-width:0.75641274;stroke-opacity:0.04385962" /> + style="fill:#ffffff;fill-opacity:0.27935001;fill-rule:evenodd" + inkscape:connector-curvature="0" /> - - - + style="fill:url(#linearGradient2824);fill-rule:evenodd" + inkscape:connector-curvature="0" /> + diff --git a/bitmaps_png/sources/hidden_pin.svg b/bitmaps_png/sources/hidden_pin.svg index 1c2cc01c84..0fc1dd5be6 100644 --- a/bitmaps_png/sources/hidden_pin.svg +++ b/bitmaps_png/sources/hidden_pin.svg @@ -38,55 +38,37 @@ inkscape:window-height="849" id="namedview48" showgrid="true" - inkscape:zoom="22.961538" - inkscape:cx="3.0154941" - inkscape:cy="13" + inkscape:zoom="32.472518" + inkscape:cx="13.960505" + inkscape:cy="19.966555" inkscape:window-x="0" inkscape:window-y="29" inkscape:window-maximized="1" inkscape:current-layer="svg2" inkscape:snap-to-guides="false" - inkscape:snap-grids="true" + inkscape:snap-grids="false" showguides="true" inkscape:guide-bbox="true"> + snapvisiblegridlinesonly="true" + dotted="false" /> - - - - - - - + id="defs4" /> + d="m 16.017072,8.8986023 0,-4.3193309" + style="fill:#b3b3b3;stroke:#999999;stroke-width:2.0134213;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> @@ -97,8 +79,8 @@ inkscape:connector-curvature="0" sodipodi:nodetypes="cccc" /> @@ -106,8 +88,8 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3762" - d="m 7.5,15.5 4.5,0" - style="fill:none;stroke:#800000;stroke-width:1.20000005000000010;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + d="m 7.4489163,15.478224 4.0795547,0" + style="fill:none;stroke:#800000;stroke-width:1.03539085;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + + diff --git a/bitmaps_png/sources/import_footprint_names.svg b/bitmaps_png/sources/import_footprint_names.svg index 8dadbcb049..42ed7fbba8 100644 --- a/bitmaps_png/sources/import_footprint_names.svg +++ b/bitmaps_png/sources/import_footprint_names.svg @@ -10,19 +10,18 @@ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" height="26" width="26" - version="1.0" + version="1.1" id="svg2" inkscape:version="0.48.3.1 r9886" sodipodi:docname="import_footprint_names.svg"> + id="metadata132"> image/svg+xml - @@ -37,1180 +36,376 @@ inkscape:pageshadow="2" inkscape:window-width="1600" inkscape:window-height="849" - id="namedview356" + id="namedview130" showgrid="true" - inkscape:zoom="22.961538" - inkscape:cx="1.3886714" - inkscape:cy="12.06054" + inkscape:snap-grids="false" + inkscape:snap-to-guides="false" + inkscape:zoom="23.730769" + inkscape:cx="8.9147325" + inkscape:cy="4.5721232" inkscape:window-x="0" inkscape:window-y="29" inkscape:window-maximized="1" - inkscape:current-layer="svg2" - inkscape:snap-grids="true" - inkscape:snap-to-guides="false"> + inkscape:current-layer="text126"> + snapvisiblegridlinesonly="true" /> - - - + id="stop7" /> + stop-color="#186389" + offset=".0151" + id="stop9" /> + stop-color="#558ca8" + offset=".0558" + id="stop11" /> + + + + + + offset=".27220" + id="stop23" /> + + + + + + offset=".23630" + id="stop32" /> + + + id="stop38" /> + id="stop40" /> - - - - - - - - - - - - - + x2="86.536003" + y1="102.34" + x1="94.344002"> + id="stop43" /> + id="stop45" /> - - - - - - - - - - + x2="86.586998" + y1="103" + x1="95"> + id="stop48" /> + id="stop50" /> - - - - - - + x2="87.292999" + y1="103" + x1="95"> + id="stop53" /> + id="stop55" /> - - + x2="88" + y1="104" + x1="96"> + id="stop58" /> + + + + + + + + id="stop74" /> + x2="2.7471001" + gradientTransform="matrix(-0.37672,0,0,-0.40275,28.619,48.2)" + y1="56.230999" + x1="64.129997"> + + + + + + + - - - - - - - - - + id="stop88" /> - - - - - - - - - + offset=".5" + id="stop90" /> - + id="stop92" /> - - - - - - - - - - + gradientTransform="matrix(-0.20731399,0,0,-0.21498904,15.790877,19.470215)" + x1="72" + y1="47.403999" + x2="4" + y2="47.403999" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + gradientTransform="matrix(-0.20731399,0,0,-0.21498904,15.790877,19.466478)" + x1="64.129997" + y1="56.230999" + x2="2.7471001" + y2="56.230999" /> + + + + + + + + + + + + + + + + + id="path122" + d="m 7.5697483,0.54744305 c 0.1956858,0.0166173 0.3793419,0.10471073 0.5182794,0.24858124 L 9.7465066,2.5159366 C 10.046411,2.8270635 10.071566,3.322726 9.8048123,3.6647868 L 7.5632766,6.5671254 h 7.3984104 c 0.45796,4.7e-5 0.829212,0.3850372 0.829267,0.8599562 V 10.00695 c -4.6e-5,0.474924 -0.371285,0.859903 -0.829267,0.859956 H 7.5632766 l 2.2415357,2.902339 c 0.2667537,0.342055 0.2415987,0.83775 -0.058306,1.14885 L 8.0880277,16.638007 C 7.9291688,16.802862 7.7102377,16.89711 7.4855448,16.893309 7.2608354,16.889519 7.0495977,16.78799 6.8959943,16.617856 L 0.26196868,9.3084959 c -0.30270528,-0.331641 -0.30270528,-0.8507748 0,-1.1824264 L 6.895444,0.81617534 C 7.0686826,0.6246149 7.3168353,0.52563721 7.5691924,0.54743771 z M 7.4984827,1.4073992 0.86445707,8.7172934 7.4984827,16.027188 9.1569616,14.307275 5.8399488,10.007494 H 14.96139 V 7.427626 H 5.8399488 L 9.1569616,3.1278453 7.4984827,1.407933 z" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + id="path124" + d="M 9.1568515,3.1310481 7.4982075,1.4111358 0.86418191,8.72103 7.4982075,16.03039 9.1568515,14.310478 5.8395636,10.010697 H 14.961005 V 7.4308289 H 5.8395636 L 9.1565764,3.1310481 z" /> + + + + + + + diff --git a/bitmaps_png/sources/py_script.svg b/bitmaps_png/sources/py_script.svg index d672b740d0..3a2d6575c5 100644 --- a/bitmaps_png/sources/py_script.svg +++ b/bitmaps_png/sources/py_script.svg @@ -22,7 +22,7 @@ image/svg+xml - + @@ -40,7 +40,7 @@ id="namedview27" showgrid="true" inkscape:zoom="16.236259" - inkscape:cx="11.015112" + inkscape:cx="-1.2106107" inkscape:cy="12.903668" inkscape:window-x="0" inkscape:window-y="29" @@ -324,33 +324,26 @@ d="M 2.7193662,6.605523 21.488121,2.5852623 20.951874,21.208529 2.7193662,20.262586 z" id="path4082" inkscape:connector-curvature="0" /> - - - - - - - + + + diff --git a/include/bitmaps.h b/include/bitmaps.h index eecf111f30..ae049aa719 100644 --- a/include/bitmaps.h +++ b/include/bitmaps.h @@ -410,6 +410,7 @@ EXTERN_BITMAP( post_module_xpm ) EXTERN_BITMAP( preference_xpm ) EXTERN_BITMAP( print_button_xpm ) EXTERN_BITMAP( ps_router_xpm ) +EXTERN_BITMAP( py_script_xpm ) EXTERN_BITMAP( ratsnest_xpm ) EXTERN_BITMAP( read_setup_xpm ) EXTERN_BITMAP( redo_xpm ) diff --git a/pcbnew/hotkeys.h b/pcbnew/hotkeys.h index 844aeca776..6424e713da 100644 --- a/pcbnew/hotkeys.h +++ b/pcbnew/hotkeys.h @@ -2,7 +2,7 @@ * @file pcbnew/hotkeys.h * Pcbnew hotkeys */ -#ifndef _PCBNEW_KOTKEYS_H +#ifndef _PCBNEW_HOTKEYS_H #define _PCBNEW_HOTKEYS_H #include From a66758406e67e4801e472f296b74c4cd74cf21af Mon Sep 17 00:00:00 2001 From: Henner Zeller Date: Tue, 11 Feb 2014 21:54:30 +0000 Subject: [PATCH 28/52] * Apply Henner Zeller's patch to add connecting line from reference and labels to component position whilst moving to help identify which component the reference or label belongs too --- eeschema/sch_field.cpp | 10 ++++++++++ eeschema/schedit.cpp | 6 ++++++ eeschema/schframe.cpp | 4 ++++ include/base_struct.h | 4 +++- 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/eeschema/sch_field.cpp b/eeschema/sch_field.cpp index af21d0add0..71886a0205 100644 --- a/eeschema/sch_field.cpp +++ b/eeschema/sch_field.cpp @@ -199,6 +199,16 @@ void SCH_FIELD::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, LineWidth, m_Italic, m_Bold ); + // While moving: don't loose visual contact to which component this label belongs. + if ( IsWireImage() ) + { + const wxPoint origin = parentComponent->GetPosition(); + textpos = m_Pos - origin; + textpos = parentComponent->GetScreenCoord( textpos ); + textpos += parentComponent->GetPosition(); + GRLine( clipbox, DC, origin.x, origin.y, textpos.x, textpos.y, 2, DARKGRAY ); + } + /* Enable this to draw the bounding box around the text field to validate * the bounding box calculations. */ diff --git a/eeschema/schedit.cpp b/eeschema/schedit.cpp index 8f3d425bb1..3bfeba654b 100644 --- a/eeschema/schedit.cpp +++ b/eeschema/schedit.cpp @@ -653,6 +653,7 @@ static void moveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPositio item->SetPosition( aPanel->GetParent()->GetCrossHairPosition() ); // Draw the item item at it's new position. + item->SetWireImage(); // While moving, the item may choose to render differently item->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); } @@ -697,6 +698,11 @@ static void abortMoveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC ) // Never delete existing item, because it can be referenced by an undo/redo command // Just restore its data currentItem->SwapData( oldItem ); + + // Erase the wire representation before the 'normal' view is drawn. + if ( item->IsWireImage() ) + item->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); + item->ClearFlags(); } diff --git a/eeschema/schframe.cpp b/eeschema/schframe.cpp index f69760a292..ffa575f7f8 100644 --- a/eeschema/schframe.cpp +++ b/eeschema/schframe.cpp @@ -973,6 +973,10 @@ void SCH_EDIT_FRAME::addCurrentItemToList( wxDC* aDC ) SaveUndoItemInUndoList( undoItem ); } + // Erase the wire representation before the 'normal' view is drawn. + if ( item->IsWireImage() ) + item->Draw( m_canvas, aDC, wxPoint( 0, 0 ), g_XorMode ); + item->ClearFlags(); screen->SetModify(); screen->SetCurItem( NULL ); diff --git a/include/base_struct.h b/include/base_struct.h index 90e3b4b67a..8679cfdd5b 100644 --- a/include/base_struct.h +++ b/include/base_struct.h @@ -298,7 +298,7 @@ public: #define IS_RESIZED (1 << 5) ///< Item being resized #define IS_DRAGGED (1 << 6) ///< Item being dragged #define IS_DELETED (1 << 7) -#define IS_WIRE_IMAGE (1 << 8) +#define IS_WIRE_IMAGE (1 << 8) ///< Item to be drawn as wireframe while editing #define STARTPOINT (1 << 9) #define ENDPOINT (1 << 10) #define SELECTED (1 << 11) @@ -389,11 +389,13 @@ public: inline bool IsModified() const { return m_Flags & IS_CHANGED; } inline bool IsMoving() const { return m_Flags & IS_MOVED; } inline bool IsDragging() const { return m_Flags & IS_DRAGGED; } + inline bool IsWireImage() const { return m_Flags & IS_WIRE_IMAGE; } inline bool IsSelected() const { return m_Flags & SELECTED; } inline bool IsResized() const { return m_Flags & IS_RESIZED; } inline bool IsHighlighted() const { return m_Flags & HIGHLIGHTED; } inline bool IsBrightened() const { return m_Flags & BRIGHTENED; } + inline void SetWireImage() { SetFlags( IS_WIRE_IMAGE ); } inline void SetSelected() { SetFlags( SELECTED ); ViewUpdate( COLOR ); } inline void SetHighlighted() { SetFlags( HIGHLIGHTED ); ViewUpdate( COLOR ); } inline void SetBrightened() { SetFlags( BRIGHTENED ); } From d6fcc48ed07ba800bb9d5c01756aeae03c3cce84 Mon Sep 17 00:00:00 2001 From: Marco Serantoni Date: Wed, 12 Feb 2014 00:13:14 +0100 Subject: [PATCH 29/52] [MacOSX] Refines in building system, now bundles lib migration supports symbolic links --- CMakeLists.txt | 26 +++++++++++++++--------- scripts/osx_fixbundle.sh | 43 ++++++++++++++++++++++++++++++++++------ 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 25042ed729..84ec69197f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -190,9 +190,11 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" ) set( TO_LINKER -Wl ) endif() - # Thou shalt not link vaporware and tell us it's a valid DSO: - set( CMAKE_SHARED_LINKER_FLAGS "${TO_LINKER},--no-undefined" ) - set( CMAKE_MODULE_LINKER_FLAGS "${TO_LINKER},--no-undefined" ) + # Thou shalt not link vaporware and tell us it's a valid DSO (apple ld doesn't support it) + if( NOT APPLE ) + set( CMAKE_SHARED_LINKER_FLAGS "${TO_LINKER},--no-undefined" ) + set( CMAKE_MODULE_LINKER_FLAGS "${TO_LINKER},--no-undefined" ) + endif() set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" ) endif() @@ -345,12 +347,6 @@ check_find_package_result( OPENGL_FOUND "OpenGL" ) if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) add_custom_target( lib-wxpython ) - include( download_pcre ) - include( download_swig ) - include( download_wxpython ) - add_dependencies( lib-wxpython pcre ) - add_dependencies( lib-wxpython swig ) - add_dependencies( lib-wxpython libwxpython ) #set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so;.dylib;.dll") @@ -361,6 +357,9 @@ add_custom_target( lib-wxpython ) if( KICAD_BUILD_STATIC ) message(STATUS "KICAD_BUILD_STATIC set") + if( KICAD_SCRIPTING OR KICAD_SCRIPTING_WXPYTHON OR KICAD_SCRIPTING_MODULES ) + message(FATAL_ERROR "KICAD_SCRIPTING* is not supported with KICAD_BUILD_STATIC, please select KICAD_BUILD_DYNAMIC" ) + endif() endif() if( KICAD_BUILD_DYNAMIC ) @@ -374,6 +373,9 @@ add_custom_target( lib-wxpython ) include( download_libpng ) if( KICAD_SCRIPTING OR KICAD_SCRIPTING_WXPYTHON OR KICAD_SCRIPTING_MODULES ) + + message(STATUS "Scripting ENABLED") + set( SWIG_EXECUTABLE ${SWIG_ROOT}/bin/swig ) set( SWIG_INCLUDE ${SWIG_ROOT}/include ) set( PYTHON_DEST ${LIBWXPYTHON_ROOT}/wxPython/lib/python2.6/site-packages ) @@ -392,6 +394,12 @@ add_custom_target( lib-wxpython ) set(wxWidgets_INCLUDE_DIRS ${LIBWXPYTHON_ROOT}/include/wx-3.0 ) set(wxWidgets_LIBRARY_DIRS ${LIBWXPYTHON_ROOT}/lib ) + include( download_pcre ) + include( download_swig ) + include( download_wxpython ) + add_dependencies( lib-wxpython pcre ) + add_dependencies( lib-wxpython swig ) + add_dependencies( lib-wxpython libwxpython ) add_dependencies( lib-dependencies libwxpython ) else() include( download_wxwidgets ) diff --git a/scripts/osx_fixbundle.sh b/scripts/osx_fixbundle.sh index 93ace4b6db..d2c8726963 100755 --- a/scripts/osx_fixbundle.sh +++ b/scripts/osx_fixbundle.sh @@ -1,4 +1,5 @@ -#!/bin/bash +#!/bin/bash +# v 1.1 Supports migration of links (limited to the same directory) - I should add checks.. # usage osx_fixbundle.sh if [[ ! -f version.h ]]; then @@ -11,7 +12,6 @@ fi EXECUTABLES="`find . -name '*.app'`" - # # Copies libraries under in the bundle and relocates them in the binary # @@ -29,7 +29,11 @@ function fixbundle() { if [[ "$library" =~ "$bzroot" ]]; then echo "${exec}: Migrating `basename $library` in the bundle" if [ ! -f ${exec}.app/Contents/Frameworks/`basename $library` ]; then - cp -f $library ${execpath}${exec}.app/Contents/Frameworks + if [ ! -L $library ]; then + cp -f $library ${execpath}${exec}.app/Contents/Frameworks + else + resolvelink "$library" "`dirname $library`" "${execpath}/${exec}.app/Contents/Frameworks" + fi fi install_name_tool -change $library @executable_path/../Frameworks/`basename $library` ${execpath}${exec}.app/Contents/MacOS/${exec} fi @@ -46,7 +50,11 @@ function fixbundle() { for library in $LIBRARIES; do if [[ "$library" =~ "$bzroot" ]]; then if [ ! -f ${exec}.app/Contents/Frameworks/`basename $library` ]; then - cp -f $library ${exec}.app/Contents/Frameworks + if [ ! -L $library ]; then + cp -f $library ${exec}.app/Contents/Frameworks + else + resolvelink "$library" "`dirname $library`" "${execpath}/${exec}.app/Contents/Frameworks" + fi fi install_name_tool -change $library @executable_path/../Frameworks/`basename $library` $module fi @@ -70,7 +78,11 @@ function fixbundle() { for library in $LIBRARIES; do if [[ "$library" =~ "$bzroot" ]]; then if [ ! -f ${exec}.app/Contents/Frameworks/`basename $library` ]; then - cp -f $library ${exec}.app/Contents/Frameworks + if [ ! -L $library ]; then + cp -f $library ${exec}.app/Contents/Frameworks + else + resolvelink "$library" "`dirname $library`" "${execpath}/${exec}.app/Contents/Frameworks" + fi echo "copied `basename $library` into bundle" (( dynlib_migrate += 1)) fi @@ -84,8 +96,27 @@ function fixbundle() { cd - >/dev/null } +# +# This supports only links on the same dir (TODO ?) +# -#fixbundle $1 $2 $3 +function resolvelink() { + local srclib="`basename $1`" + local srcpath="$2" + local destpath="$3" + + #if is a file i expect a pointed "" + local pointed="`readlink ${srcpath}/${srclib}`" + + if [ ! -f ${pointed} ]; then + resolvelink "${pointed}" "${srcpath}" "${destpath}" + echo "Link ${srclib} -> ${pointed} " + (cd "${destpath}"; ln -s "${pointed}" "${srclib}" ) + else + echo "Copy ${srcpath}/${srclib} -> ${destpath} " + cp "${srcpath}/${srclib}" ${destpath} + fi +} for executable in $EXECUTABLES; do From b46b5352c405ea269a093e81bdce0b317e9ba142 Mon Sep 17 00:00:00 2001 From: Fabrizio Tappero Date: Wed, 12 Feb 2014 08:53:55 +0100 Subject: [PATCH 30/52] Update icon_bitmap2component. --- bitmaps_png/cpp_48/icon_bitmap2component.cpp | 291 ++---- bitmaps_png/icons/icon_bitmap2component.ico | Bin 3262 -> 3262 bytes bitmaps_png/sources/icon_bitmap2component.svg | 834 +++++++----------- 3 files changed, 394 insertions(+), 731 deletions(-) diff --git a/bitmaps_png/cpp_48/icon_bitmap2component.cpp b/bitmaps_png/cpp_48/icon_bitmap2component.cpp index 6d3a8a8313..e96ff04481 100644 --- a/bitmaps_png/cpp_48/icon_bitmap2component.cpp +++ b/bitmaps_png/cpp_48/icon_bitmap2component.cpp @@ -8,214 +8,89 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9, - 0x87, 0x00, 0x00, 0x0c, 0xdb, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xd5, 0x99, 0x7b, 0x6c, 0x54, - 0xd7, 0x9d, 0x80, 0xbf, 0xfb, 0xf0, 0xcc, 0xd8, 0x1e, 0x3f, 0xc6, 0x9e, 0xf1, 0x1b, 0x1b, 0x1c, - 0x8c, 0xbd, 0xa6, 0x36, 0x09, 0x09, 0x10, 0x36, 0xae, 0x4b, 0x29, 0xc1, 0x09, 0x50, 0x85, 0x87, - 0x01, 0xb5, 0x8e, 0x20, 0x51, 0xac, 0x88, 0x26, 0x80, 0xaa, 0xb6, 0xa4, 0x34, 0x8d, 0xd2, 0xa8, - 0x5d, 0x56, 0x95, 0x1a, 0xd4, 0x55, 0x68, 0x57, 0x9b, 0x84, 0x50, 0x20, 0x9b, 0x22, 0x2d, 0x54, - 0x21, 0x29, 0x24, 0x4d, 0xe4, 0x50, 0x20, 0x6e, 0x03, 0xd4, 0xa1, 0x6e, 0x30, 0x25, 0x25, 0x7e, - 0xe1, 0x07, 0x7e, 0x8e, 0x3d, 0xf6, 0xd8, 0x33, 0x9e, 0xc7, 0xbd, 0x67, 0xff, 0xb0, 0xe7, 0xe2, - 0xf1, 0x8c, 0x89, 0xcd, 0x2e, 0x2b, 0xed, 0x91, 0xae, 0xce, 0xb9, 0xe7, 0xde, 0x73, 0xce, 0xef, - 0xfd, 0x3a, 0x92, 0x10, 0x82, 0xff, 0xcf, 0x4d, 0x0d, 0x0d, 0xb6, 0x6d, 0xdb, 0xf6, 0xb4, 0xd9, - 0x6c, 0xce, 0x51, 0x55, 0x15, 0x59, 0x96, 0x51, 0x55, 0x95, 0xc9, 0xe3, 0xc9, 0xbd, 0xa2, 0x28, - 0xa8, 0xea, 0xf8, 0xd2, 0xe9, 0xfe, 0x99, 0xfc, 0x08, 0x21, 0x3a, 0x9e, 0x7c, 0xf2, 0xc9, 0xd7, - 0xee, 0x1a, 0x02, 0x4f, 0x3c, 0xf1, 0xc4, 0xee, 0x17, 0x5e, 0x78, 0xe1, 0xe5, 0xa4, 0xa4, 0xa4, - 0x18, 0x00, 0x49, 0x92, 0x98, 0xda, 0x0b, 0x21, 0x90, 0x24, 0x29, 0x6c, 0x3c, 0xb5, 0x45, 0x9b, - 0x13, 0x42, 0xa0, 0x69, 0x5a, 0xf0, 0xe8, 0xd1, 0xa3, 0xea, 0xb6, 0x6d, 0xdb, 0xfe, 0xfd, 0xae, - 0x20, 0x60, 0x32, 0x99, 0x8a, 0x6d, 0x36, 0x5b, 0x8c, 0xae, 0xeb, 0xc6, 0xa1, 0x00, 0xa3, 0x17, - 0x2f, 0x62, 0xca, 0xcd, 0x45, 0xcd, 0xc8, 0x08, 0x9b, 0x8f, 0xd6, 0x87, 0x9e, 0xa9, 0xef, 0x42, - 0x08, 0x6c, 0x36, 0x9b, 0x6a, 0x32, 0x99, 0x0a, 0xef, 0x06, 0x07, 0xe4, 0xa9, 0x14, 0x94, 0x24, - 0x09, 0x59, 0x96, 0xc1, 0xe3, 0xa1, 0xe3, 0xe9, 0xa7, 0x69, 0xdd, 0xb8, 0x11, 0xd7, 0xb1, 0x63, - 0x48, 0x93, 0x38, 0x30, 0xdb, 0x27, 0x24, 0x6a, 0x77, 0x15, 0x81, 0xc9, 0xc0, 0x4f, 0x16, 0x85, - 0xcc, 0xea, 0x6a, 0x06, 0x5e, 0x7d, 0x95, 0xb6, 0xed, 0xdb, 0x09, 0x34, 0x35, 0x85, 0xfd, 0x33, - 0x1d, 0xb0, 0x93, 0xf7, 0x9b, 0x2a, 0x8e, 0x77, 0x95, 0x03, 0x53, 0x01, 0x03, 0xb0, 0x6f, 0xd8, - 0xc0, 0xa2, 0x3f, 0xfe, 0x91, 0xb8, 0x79, 0xf3, 0x68, 0xdd, 0xba, 0x95, 0xfe, 0x5f, 0xfd, 0x0a, - 0x02, 0x81, 0x19, 0x51, 0x7d, 0x72, 0xd3, 0x34, 0xed, 0xff, 0x86, 0x03, 0xd1, 0x80, 0x88, 0x49, - 0x4d, 0xa5, 0xe0, 0xc0, 0x01, 0x0a, 0x0f, 0x1d, 0x62, 0xe4, 0xfd, 0xf7, 0x69, 0xad, 0xac, 0xc4, - 0x7b, 0xf9, 0x72, 0x18, 0x75, 0xbf, 0x0c, 0x99, 0x60, 0x30, 0x78, 0xf7, 0xcc, 0x68, 0x34, 0x36, - 0x47, 0xa3, 0x62, 0xf2, 0x8a, 0x15, 0x2c, 0xaa, 0xa9, 0xa1, 0x7d, 0xff, 0x7e, 0xda, 0xab, 0xab, - 0x49, 0xda, 0xb0, 0x01, 0xc7, 0x77, 0xbf, 0x8b, 0x64, 0xb5, 0x46, 0xfd, 0xbf, 0xab, 0xab, 0x8b, - 0x9a, 0x9a, 0x1a, 0x54, 0x55, 0xa5, 0xb7, 0xb7, 0x77, 0xe3, 0xc5, 0x8b, 0x17, 0x4b, 0x14, 0x45, - 0x31, 0xcc, 0xad, 0xa2, 0x28, 0x86, 0x49, 0x9e, 0x3c, 0x3f, 0xd5, 0x64, 0x87, 0xbe, 0x4d, 0x7e, - 0x00, 0xdd, 0xef, 0xf7, 0xbf, 0xa8, 0x4e, 0x06, 0x38, 0xd0, 0xd1, 0x41, 0xf7, 0xcb, 0x2f, 0x23, - 0x34, 0x0d, 0x31, 0x41, 0x31, 0x11, 0x0c, 0xd2, 0x7d, 0xf8, 0x30, 0x3d, 0x47, 0x8e, 0x18, 0x80, - 0x2d, 0x38, 0x78, 0x10, 0xfb, 0xfa, 0xf5, 0x34, 0xed, 0xd9, 0x43, 0xcb, 0x86, 0x0d, 0xa4, 0xed, - 0xdd, 0x8b, 0xf5, 0x1b, 0xdf, 0x88, 0x40, 0xa0, 0xa6, 0xa6, 0x86, 0x67, 0x9e, 0x79, 0x26, 0xf4, - 0x9a, 0x23, 0x49, 0x52, 0xce, 0x4c, 0xa8, 0x1a, 0x32, 0xd5, 0xd3, 0x35, 0x21, 0x04, 0xb2, 0x2c, - 0x53, 0x5b, 0x5b, 0x3b, 0x5f, 0x9d, 0x3c, 0xa9, 0x58, 0xad, 0xc4, 0x16, 0x15, 0x81, 0x10, 0xe8, - 0x3e, 0x1f, 0xee, 0x73, 0xe7, 0x40, 0x96, 0xb1, 0x6f, 0xdc, 0x88, 0x6d, 0xd5, 0x2a, 0x63, 0x03, - 0x53, 0x7a, 0x3a, 0x52, 0x4c, 0x0c, 0x25, 0xa7, 0x4e, 0xd1, 0xf5, 0xfa, 0xeb, 0x74, 0xfc, 0xf8, - 0xc7, 0xc4, 0x9f, 0x3e, 0x8d, 0x63, 0xef, 0x5e, 0x14, 0x87, 0xc3, 0xf8, 0x2f, 0x21, 0x21, 0x01, - 0x80, 0xb1, 0xb1, 0xb1, 0xdb, 0x02, 0x33, 0x75, 0x7c, 0x3b, 0x93, 0x1c, 0x9a, 0x8b, 0x8b, 0x8b, - 0x23, 0x29, 0x29, 0x49, 0x09, 0xe3, 0x40, 0x8c, 0xdd, 0x4e, 0xc6, 0xce, 0x9d, 0xe3, 0x4a, 0x37, - 0x3c, 0x4c, 0xef, 0x6b, 0xaf, 0x21, 0xc9, 0x32, 0x6a, 0x62, 0x22, 0x6a, 0x62, 0x62, 0x24, 0xa5, - 0x54, 0x95, 0xac, 0xef, 0x7c, 0x87, 0xd4, 0xb5, 0x6b, 0x69, 0xda, 0xbb, 0x97, 0xd6, 0x8d, 0x1b, - 0xb1, 0xef, 0xde, 0x4d, 0xe2, 0xa6, 0x4d, 0x11, 0xd6, 0x28, 0x5a, 0xab, 0xaf, 0xaf, 0xe7, 0xcc, - 0x99, 0x33, 0x51, 0xa9, 0x3d, 0xe1, 0x3f, 0xa8, 0xaa, 0xaa, 0x0a, 0x89, 0x4c, 0x04, 0xc2, 0x92, - 0x24, 0xa1, 0x4e, 0xe7, 0x49, 0x67, 0x63, 0xf6, 0xcc, 0xb9, 0xb9, 0x14, 0xff, 0xf6, 0xb7, 0x74, - 0xbd, 0xfe, 0x3a, 0x37, 0x7e, 0xf6, 0x33, 0xfa, 0x5f, 0x79, 0x05, 0xc9, 0x6c, 0x26, 0xb0, 0x6e, - 0x9d, 0xb1, 0x57, 0xc7, 0x48, 0x07, 0xdb, 0xdf, 0xdf, 0x8e, 0x2e, 0x74, 0x1e, 0xce, 0x7b, 0x98, - 0xe7, 0x97, 0x3d, 0xcf, 0xd1, 0xa3, 0x47, 0x71, 0x3a, 0x9d, 0xe4, 0xe6, 0xe6, 0xe2, 0x74, 0x3a, - 0x51, 0x55, 0x95, 0x60, 0x30, 0x88, 0xa2, 0x28, 0xc4, 0xc6, 0xc6, 0x72, 0xe6, 0xcc, 0x19, 0x96, - 0x2f, 0x5f, 0x0e, 0x0e, 0xd8, 0xf6, 0xc1, 0x36, 0x74, 0xa1, 0x53, 0x91, 0x5b, 0xc1, 0x8b, 0x4b, - 0x5f, 0xbc, 0xe5, 0x5f, 0xa2, 0x21, 0x20, 0x49, 0x12, 0x42, 0x0e, 0xb3, 0xb0, 0x8c, 0xd4, 0xd7, - 0xd3, 0xfe, 0x8b, 0x5f, 0xf0, 0x4f, 0x6f, 0xbd, 0x15, 0x15, 0x89, 0xfe, 0xb7, 0xdf, 0xa6, 0xf3, - 0xd7, 0xbf, 0x26, 0xb6, 0xa4, 0x84, 0xc4, 0x4d, 0x9b, 0x50, 0xec, 0x76, 0xd4, 0x96, 0x16, 0x83, - 0x03, 0xbd, 0x9e, 0x5e, 0xae, 0xf4, 0x5d, 0x01, 0x20, 0x3d, 0x2e, 0xdd, 0x38, 0x6b, 0xc9, 0x92, - 0x25, 0xec, 0xda, 0xb5, 0x8b, 0x43, 0x87, 0x0e, 0xe1, 0xf3, 0xf9, 0x70, 0xb9, 0x5c, 0x94, 0x94, - 0x94, 0xb0, 0x78, 0xf1, 0x62, 0x9e, 0x7a, 0xea, 0x29, 0x84, 0x10, 0x38, 0xbd, 0x4e, 0xda, 0xdd, - 0xed, 0x00, 0x34, 0x0d, 0x35, 0x19, 0x6b, 0x85, 0x10, 0x84, 0x89, 0x90, 0xf0, 0x7a, 0x71, 0x7d, - 0xf8, 0xe1, 0xb8, 0x12, 0x87, 0xe4, 0x56, 0x08, 0x9c, 0xef, 0xbe, 0x4b, 0xf7, 0x9b, 0x6f, 0xe2, - 0xbd, 0x7e, 0x9d, 0x7f, 0x54, 0x57, 0x33, 0xf7, 0x27, 0x3f, 0xc1, 0x3c, 0x67, 0x0e, 0x00, 0xbe, - 0x8e, 0x0e, 0x9a, 0x7f, 0xf4, 0x23, 0xdc, 0x75, 0x75, 0x38, 0x76, 0xef, 0x26, 0x79, 0xcb, 0x16, - 0x84, 0x24, 0xa1, 0xeb, 0x3a, 0x72, 0x77, 0xb7, 0xe1, 0x5f, 0x2c, 0xaa, 0xe5, 0x16, 0xc7, 0x54, - 0xb3, 0x21, 0x16, 0x21, 0x04, 0xcb, 0xca, 0xca, 0xf8, 0xe0, 0x83, 0x0f, 0xb0, 0x5a, 0xad, 0x2c, - 0x5e, 0xbc, 0x38, 0x8c, 0x98, 0xf1, 0x31, 0xf1, 0xc6, 0xda, 0xc9, 0x63, 0x5d, 0xd7, 0xc3, 0x39, - 0xe0, 0xbf, 0x79, 0x93, 0x9e, 0x43, 0x87, 0x40, 0x08, 0xc4, 0x84, 0xe3, 0xd1, 0xfd, 0x7e, 0xe2, - 0x4b, 0x4b, 0x49, 0xa9, 0xa8, 0xa0, 0x6f, 0x68, 0x88, 0xf4, 0xc7, 0x1f, 0x47, 0xb5, 0xd9, 0x10, - 0x9a, 0x46, 0xf7, 0x1b, 0x6f, 0xd0, 0xbe, 0x7f, 0x3f, 0xf1, 0x4b, 0x97, 0x92, 0x7f, 0xf2, 0x24, - 0x6a, 0x7a, 0xfa, 0xb8, 0x8c, 0x4e, 0x0a, 0xf6, 0x42, 0x00, 0x96, 0xa6, 0x95, 0x72, 0xe5, 0xc9, - 0x2b, 0x68, 0x42, 0x23, 0xc5, 0x92, 0x12, 0x21, 0xae, 0x45, 0x45, 0x45, 0x14, 0x16, 0x16, 0x1a, - 0xca, 0xda, 0xd3, 0xd3, 0x63, 0x7c, 0xbf, 0x37, 0xed, 0x5e, 0x3e, 0xdf, 0xfe, 0x39, 0xba, 0xd0, - 0xb1, 0x28, 0x16, 0x63, 0xcf, 0x08, 0x04, 0x62, 0x0b, 0x0a, 0x58, 0x78, 0xea, 0x14, 0x92, 0x24, - 0xa1, 0x0d, 0x0f, 0xf3, 0x69, 0x69, 0x29, 0xb2, 0xd9, 0x8c, 0x65, 0xee, 0x5c, 0x52, 0x1e, 0x7d, - 0x14, 0x49, 0x55, 0x49, 0x5e, 0xb1, 0x82, 0xd1, 0xab, 0x57, 0x69, 0xde, 0xb3, 0x07, 0x5f, 0x77, - 0x37, 0xd9, 0xfb, 0xf6, 0x91, 0x58, 0x51, 0x81, 0xae, 0xeb, 0xd3, 0x9a, 0x3e, 0x49, 0x92, 0xd0, - 0x84, 0xc6, 0x75, 0xd7, 0x75, 0x84, 0x10, 0xe4, 0x27, 0xe7, 0x93, 0x60, 0x4e, 0xf8, 0x52, 0x25, - 0x0f, 0xb5, 0xb1, 0xe0, 0x18, 0x67, 0x3b, 0xce, 0xa2, 0xe9, 0x1a, 0x85, 0xb6, 0x42, 0x16, 0x24, - 0x2f, 0x88, 0x2e, 0x42, 0xb7, 0x0b, 0x07, 0xcc, 0xd9, 0xd9, 0xa4, 0x6d, 0xdd, 0xca, 0x8d, 0x7d, - 0xfb, 0xe8, 0x3e, 0x78, 0x10, 0xdb, 0xfa, 0xf5, 0xe4, 0xbd, 0xf1, 0x06, 0x72, 0x42, 0x82, 0x11, - 0x5e, 0x47, 0x43, 0x20, 0xb4, 0xd7, 0xc5, 0xce, 0x8b, 0x6c, 0x7a, 0x7b, 0xdc, 0x3a, 0xad, 0x9a, - 0xbb, 0x8a, 0x13, 0xeb, 0x4f, 0x44, 0x0d, 0xd7, 0xa3, 0xe9, 0xe3, 0x85, 0xee, 0x0b, 0xec, 0xf8, - 0x68, 0x07, 0x00, 0x15, 0x79, 0x15, 0x1c, 0x5c, 0x75, 0xd0, 0x08, 0x4f, 0x66, 0x1c, 0x22, 0x0e, - 0x7d, 0xfc, 0x31, 0xcd, 0x7b, 0xf7, 0x82, 0x2c, 0x93, 0xff, 0x9b, 0xdf, 0x10, 0xbf, 0x74, 0x69, - 0x98, 0x6d, 0xbe, 0x9d, 0x53, 0x92, 0x24, 0x09, 0xa4, 0x70, 0x13, 0x19, 0x0d, 0x58, 0x31, 0x45, - 0xf4, 0x8c, 0x5e, 0x9a, 0xde, 0x87, 0x84, 0x39, 0xb2, 0x68, 0x4e, 0x25, 0x38, 0x30, 0x40, 0xe3, - 0x81, 0x03, 0x38, 0xdf, 0x79, 0x87, 0xb4, 0xea, 0x6a, 0xd2, 0x77, 0xee, 0x44, 0x32, 0x99, 0x22, - 0x00, 0x9f, 0x8e, 0xfa, 0xa1, 0x7e, 0xbe, 0x6d, 0x3e, 0x95, 0x45, 0x95, 0x08, 0x21, 0x28, 0x9f, - 0x53, 0x1e, 0xa1, 0x23, 0xb7, 0xdb, 0x67, 0x61, 0xea, 0x42, 0xb6, 0x17, 0x8f, 0x9b, 0xe0, 0x87, - 0xb2, 0x1e, 0x32, 0xd6, 0x44, 0x70, 0x20, 0x1a, 0x02, 0xd7, 0xaa, 0xaa, 0x88, 0x2d, 0x28, 0xa0, - 0xe8, 0xe4, 0x49, 0x2c, 0x45, 0x45, 0x51, 0x11, 0x9d, 0x09, 0x17, 0xb2, 0x12, 0xb2, 0x38, 0xbc, - 0xee, 0x70, 0x54, 0x20, 0x6f, 0x97, 0xdd, 0x49, 0x92, 0x44, 0x46, 0x7c, 0x06, 0x3f, 0xff, 0xea, - 0xcf, 0xa3, 0x7a, 0x64, 0x35, 0x1a, 0x5b, 0x84, 0x10, 0x48, 0xb1, 0xb1, 0x78, 0x1e, 0xab, 0xa2, - 0xd7, 0x96, 0xcd, 0x40, 0xc6, 0x5c, 0x4c, 0x7f, 0xe9, 0x22, 0xa7, 0xcb, 0xc7, 0xc2, 0x85, 0xb9, - 0xa4, 0xa6, 0x26, 0x7e, 0x29, 0xe0, 0x53, 0x3d, 0x66, 0xbb, 0xbb, 0x9d, 0x6f, 0x9d, 0xfc, 0x16, - 0x9a, 0xd0, 0x58, 0x99, 0xb7, 0x92, 0x7d, 0x5f, 0xdb, 0x17, 0x15, 0x81, 0x68, 0x7b, 0xb6, 0x0e, - 0xb7, 0xb2, 0xf9, 0xdd, 0xcd, 0xe8, 0xe8, 0x3c, 0x92, 0xf7, 0x08, 0x2f, 0x3d, 0xf8, 0x52, 0xb8, - 0x19, 0x0d, 0x04, 0x02, 0x3d, 0x2d, 0x2d, 0x1d, 0x5a, 0x47, 0xc7, 0x90, 0xa2, 0x69, 0x3a, 0x20, - 0xd1, 0xd8, 0xd8, 0x45, 0xdd, 0xa0, 0x8c, 0x32, 0xdc, 0x86, 0xdc, 0x7e, 0x63, 0x22, 0x24, 0x96, - 0xf0, 0x7a, 0x55, 0xb6, 0x6c, 0x59, 0x8d, 0xd5, 0x1a, 0xcb, 0xb8, 0x70, 0x4e, 0x3e, 0x30, 0xfc, - 0xbd, 0xbd, 0xdd, 0xc3, 0x99, 0x33, 0x9f, 0x01, 0x82, 0x96, 0xa1, 0x16, 0xfa, 0x1a, 0xc6, 0xf7, - 0xfe, 0xac, 0xab, 0x93, 0xb3, 0xe2, 0x0a, 0x7e, 0x7f, 0x02, 0x4e, 0x27, 0x9c, 0x3b, 0xd7, 0x60, - 0xac, 0x99, 0x3b, 0x37, 0x8d, 0xec, 0xec, 0x70, 0x33, 0xeb, 0xf4, 0x3a, 0x69, 0x73, 0xb7, 0x01, - 0xd0, 0xe8, 0x6a, 0x8c, 0x74, 0x64, 0x57, 0xaf, 0x9a, 0x3f, 0x3f, 0x7f, 0xfe, 0xaa, 0xbc, 0x74, - 0x69, 0x31, 0x8a, 0xa2, 0x20, 0x49, 0x32, 0x0e, 0x47, 0x12, 0x8b, 0x17, 0xcf, 0x27, 0x18, 0xd4, - 0xd0, 0x75, 0x1d, 0x49, 0x92, 0x19, 0x5f, 0x17, 0xca, 0xd8, 0x24, 0x64, 0x39, 0x9a, 0xe5, 0xba, - 0x35, 0x5e, 0xb3, 0x66, 0x9d, 0x31, 0x77, 0x7f, 0x8a, 0x9d, 0xe3, 0xf9, 0xbf, 0x0b, 0xfb, 0xfe, - 0xfd, 0xef, 0x3f, 0x37, 0x21, 0xcb, 0x3a, 0x7e, 0xbf, 0x46, 0x20, 0x10, 0xa4, 0xb6, 0xb6, 0x15, - 0x4d, 0xbb, 0xca, 0xca, 0x95, 0x05, 0x06, 0x77, 0xe2, 0xd4, 0x38, 0x03, 0x19, 0xab, 0xc9, 0x6a, - 0x8c, 0x83, 0xc1, 0xe0, 0x38, 0x02, 0x79, 0x79, 0xe9, 0x7b, 0x2a, 0x2b, 0xbf, 0x2a, 0x99, 0xcd, - 0x26, 0x23, 0x06, 0x1f, 0x1a, 0xf2, 0x30, 0x34, 0xe4, 0xc5, 0xe3, 0x19, 0xc3, 0xe7, 0x0b, 0x22, - 0xcb, 0xca, 0x04, 0xc0, 0xe1, 0xbd, 0x2c, 0x2b, 0xf4, 0xf5, 0x75, 0x73, 0xfc, 0xf8, 0x9b, 0x98, - 0x4c, 0x16, 0xb6, 0x6c, 0x79, 0x1c, 0xbf, 0xdf, 0x4f, 0x4f, 0x4f, 0x3b, 0x9a, 0xe6, 0x43, 0xd7, - 0x75, 0x12, 0x13, 0xed, 0x64, 0x65, 0xcd, 0x23, 0x3d, 0x3d, 0x87, 0x9b, 0x3d, 0x9d, 0x38, 0x07, - 0x9d, 0x48, 0x12, 0x84, 0x88, 0xac, 0xeb, 0xe0, 0xf5, 0xfa, 0xc8, 0x76, 0x14, 0x50, 0x5a, 0x5a, - 0xc4, 0x47, 0x1f, 0x7d, 0xc2, 0xd8, 0x58, 0xc0, 0x00, 0xb4, 0xd8, 0x5e, 0x4c, 0xe3, 0x53, 0x8d, - 0x68, 0xba, 0x86, 0x45, 0xb1, 0x44, 0x5a, 0xa1, 0x8c, 0x8c, 0xe4, 0x7c, 0xb7, 0x7b, 0x18, 0x49, - 0x4a, 0x44, 0x51, 0x14, 0x84, 0x10, 0xf8, 0x7c, 0x7e, 0x46, 0x47, 0xbd, 0xb8, 0xdd, 0x1e, 0xc6, - 0xc6, 0x42, 0x08, 0xc8, 0x11, 0xbd, 0xa2, 0x28, 0xbc, 0xf4, 0xaf, 0xff, 0x42, 0xfe, 0xe3, 0x47, - 0xe9, 0x73, 0x7b, 0xd8, 0xff, 0xcb, 0x9d, 0xbc, 0xf2, 0x6f, 0xbf, 0x44, 0x92, 0x86, 0x39, 0x72, - 0xe4, 0x08, 0x6b, 0xd6, 0xac, 0xe1, 0xeb, 0x5f, 0x7f, 0x90, 0x9e, 0x9e, 0x6e, 0xbe, 0xf8, 0xe2, - 0x02, 0x0d, 0xed, 0x43, 0x54, 0x6d, 0xac, 0x20, 0xa0, 0x43, 0xe7, 0xa8, 0x42, 0x9f, 0x47, 0xc6, - 0x35, 0x26, 0xe3, 0x72, 0xfb, 0xf0, 0x35, 0x5f, 0xc6, 0x6c, 0x76, 0x30, 0x32, 0x12, 0xc4, 0xed, - 0xbe, 0x15, 0x82, 0x7b, 0x02, 0x1e, 0x8e, 0xfe, 0xfd, 0x28, 0x41, 0x3d, 0xc8, 0x22, 0xfb, 0x22, - 0xca, 0xb2, 0xca, 0xc2, 0x75, 0xc0, 0xe7, 0x0b, 0xdc, 0x71, 0x79, 0x4e, 0x08, 0x9d, 0x2f, 0xba, - 0xdc, 0x34, 0x34, 0xa6, 0xa0, 0x6b, 0xc9, 0x14, 0x0e, 0x04, 0xc8, 0xcd, 0xcd, 0xe5, 0x87, 0x3f, - 0x7c, 0x8e, 0x13, 0x27, 0x4e, 0x50, 0x5f, 0x5f, 0xcf, 0xe6, 0xcd, 0x5b, 0x89, 0x8d, 0x8d, 0x23, - 0x23, 0x23, 0x9b, 0x76, 0x57, 0x2d, 0xb5, 0x6d, 0xe0, 0x09, 0x2a, 0x13, 0xda, 0xa2, 0x03, 0x3a, - 0x09, 0x8a, 0x17, 0x49, 0x92, 0x27, 0xf2, 0x07, 0x7f, 0xd8, 0x19, 0xd7, 0x06, 0xae, 0xf1, 0xd3, - 0x4f, 0x7e, 0x0a, 0xc0, 0x8a, 0x9c, 0x15, 0x06, 0x02, 0x06, 0x07, 0xee, 0xb4, 0x62, 0xe0, 0xf1, - 0xb8, 0xb9, 0x79, 0xb3, 0x81, 0x5d, 0x55, 0x0f, 0xf3, 0x1f, 0xa7, 0xab, 0x20, 0x38, 0xc6, 0x0f, - 0x7e, 0x50, 0x05, 0xc0, 0xb3, 0xcf, 0x3e, 0x4b, 0x77, 0x77, 0x37, 0x3b, 0x76, 0xec, 0x30, 0x2c, - 0x8b, 0xaa, 0xaa, 0x3c, 0xb8, 0x70, 0x2e, 0xcd, 0x2d, 0xe7, 0x19, 0x1b, 0x76, 0xd3, 0xd6, 0xd6, - 0x41, 0x71, 0xf1, 0x72, 0x02, 0x01, 0x1d, 0x9f, 0x4f, 0xc3, 0x9e, 0x36, 0x0f, 0x97, 0x6b, 0x74, - 0xc6, 0xe7, 0x47, 0xc4, 0x42, 0xb3, 0xa3, 0xbc, 0xa0, 0xa3, 0xa3, 0x81, 0xd5, 0xab, 0xd7, 0x60, - 0xb1, 0x98, 0xf9, 0xf6, 0xb7, 0xdd, 0xc4, 0xc5, 0x99, 0xb1, 0xdb, 0x53, 0x01, 0x28, 0x2f, 0x2f, - 0xe7, 0xfc, 0xf9, 0x8f, 0x11, 0x42, 0x27, 0x18, 0xd4, 0x8d, 0x75, 0x59, 0x59, 0x73, 0x70, 0x38, - 0x32, 0x09, 0x04, 0x34, 0x3c, 0x9e, 0x11, 0x2e, 0x5c, 0xb8, 0xcc, 0x92, 0x25, 0x6b, 0x70, 0xb9, - 0x46, 0x19, 0x1a, 0x1a, 0x35, 0x14, 0xb7, 0xbe, 0xbe, 0xde, 0x58, 0x53, 0x98, 0x52, 0xc8, 0x73, - 0x4b, 0x9e, 0x43, 0xd3, 0x35, 0xee, 0x75, 0xdc, 0x1b, 0x89, 0xc0, 0x9d, 0x30, 0xa0, 0xa9, 0xe9, - 0x33, 0x96, 0x2d, 0xfb, 0x67, 0x83, 0xed, 0xa9, 0xa9, 0xa9, 0x98, 0x4c, 0xca, 0xac, 0xf6, 0x88, - 0x89, 0xb1, 0x90, 0x97, 0x97, 0x41, 0x6f, 0x6f, 0x3b, 0x26, 0x53, 0x4a, 0xd8, 0xb7, 0x63, 0xc7, - 0x8e, 0x61, 0xb3, 0xd9, 0x70, 0x38, 0x1c, 0xc4, 0xab, 0xf1, 0x7c, 0xef, 0xfe, 0xef, 0x45, 0x38, - 0xb2, 0x59, 0xc5, 0x42, 0x53, 0x45, 0x27, 0x3b, 0xdb, 0x81, 0xc5, 0x62, 0x8d, 0xfa, 0x3d, 0x10, - 0xf0, 0xd3, 0xd6, 0xd6, 0xc6, 0xe0, 0xe0, 0x20, 0x00, 0x69, 0x69, 0xe9, 0x64, 0x66, 0x66, 0x45, - 0xfd, 0x37, 0x3b, 0x3b, 0x97, 0xda, 0xda, 0xb3, 0x14, 0x14, 0xac, 0x0e, 0x9b, 0x3f, 0x7c, 0xf8, - 0x30, 0xe9, 0xe9, 0x49, 0xd3, 0xe6, 0xca, 0xaa, 0xaa, 0x22, 0x84, 0x10, 0x77, 0x84, 0x40, 0x57, - 0xd7, 0x75, 0x96, 0x2d, 0xfb, 0x5a, 0xd4, 0x6f, 0x9d, 0x9d, 0xed, 0xb4, 0xb5, 0xb5, 0xa1, 0xaa, - 0x26, 0x86, 0x86, 0x46, 0x90, 0x24, 0x09, 0x9f, 0xcf, 0xcf, 0xa7, 0x9f, 0xd6, 0x51, 0x56, 0x56, - 0x8e, 0xd9, 0x1c, 0x37, 0x45, 0x8e, 0xe1, 0xbe, 0xfb, 0x96, 0x50, 0x57, 0xf7, 0x09, 0xd9, 0xd9, - 0xf7, 0x19, 0x22, 0xd4, 0xd3, 0xd3, 0x43, 0x30, 0x38, 0x12, 0x35, 0x4a, 0x08, 0x51, 0xbf, 0xa1, - 0xa1, 0xa1, 0xff, 0x8e, 0x94, 0xd8, 0xe1, 0x70, 0xa0, 0xeb, 0x91, 0x86, 0xab, 0xb7, 0xb7, 0x9b, - 0xc1, 0xc1, 0x41, 0x46, 0x47, 0x35, 0xac, 0x56, 0xab, 0x51, 0x95, 0xd0, 0xb4, 0x20, 0x16, 0x8b, - 0x87, 0x0b, 0x17, 0xfe, 0x4c, 0x59, 0x59, 0xf9, 0xd4, 0x82, 0x20, 0xb1, 0xb1, 0x56, 0x02, 0x81, - 0x81, 0x30, 0x8f, 0x7e, 0xe0, 0xc0, 0xab, 0xaf, 0xc8, 0xf2, 0x48, 0xff, 0xd4, 0xca, 0x21, 0x20, - 0x64, 0x59, 0xd6, 0x15, 0x45, 0xf1, 0x0d, 0x0e, 0x0e, 0xbe, 0x35, 0x6b, 0x04, 0x7c, 0xbe, 0x31, - 0x12, 0x13, 0x93, 0x22, 0xe6, 0x15, 0x45, 0xa2, 0xa3, 0xa3, 0x1d, 0xbf, 0x5f, 0x22, 0x3b, 0x7b, - 0x1e, 0x03, 0x03, 0x7d, 0xfc, 0xfe, 0xf7, 0x27, 0x70, 0x38, 0x1c, 0xac, 0x5c, 0xb9, 0x0e, 0x9b, - 0xad, 0x80, 0xae, 0xae, 0x26, 0xde, 0x7b, 0xef, 0x14, 0x6b, 0xd7, 0xae, 0x27, 0x10, 0xd0, 0xc2, - 0x3c, 0xaa, 0xdd, 0x6e, 0x0b, 0xdb, 0xef, 0xf2, 0xe5, 0xab, 0x57, 0x9a, 0x9b, 0x2f, 0xb6, 0x47, - 0x93, 0x50, 0xc0, 0x07, 0x0c, 0x44, 0x24, 0xf5, 0x33, 0x69, 0x2e, 0x57, 0x1f, 0x76, 0x7b, 0x5e, - 0x64, 0x52, 0xdf, 0xdf, 0x4b, 0x7c, 0x7c, 0x3c, 0x99, 0x59, 0x59, 0x0c, 0x38, 0xfb, 0x78, 0xf4, - 0xd1, 0x72, 0x02, 0x81, 0x71, 0x6f, 0xba, 0x60, 0xc1, 0x21, 0x4e, 0xbf, 0x77, 0x0e, 0xc1, 0x1c, - 0x5c, 0xae, 0x7e, 0x14, 0x45, 0x9a, 0x22, 0x1a, 0x90, 0x94, 0x64, 0xc3, 0xe7, 0xf3, 0x13, 0x32, - 0x2a, 0x56, 0x6b, 0x4a, 0x17, 0x10, 0x0d, 0x01, 0x6d, 0xe2, 0xf1, 0x00, 0x6e, 0xf9, 0x56, 0x10, - 0x36, 0x53, 0x04, 0x7a, 0xb1, 0x58, 0x62, 0xa3, 0xcc, 0x0f, 0x10, 0x08, 0x6a, 0xd8, 0x52, 0x12, - 0x79, 0xe7, 0xdd, 0xff, 0x32, 0x80, 0x07, 0xb8, 0x7e, 0xfd, 0x3a, 0x7f, 0xfb, 0xdb, 0x25, 0xb2, - 0x73, 0xb2, 0x48, 0x48, 0x48, 0xa0, 0xb9, 0xb9, 0x29, 0x62, 0x7d, 0x52, 0x92, 0x0d, 0x97, 0xab, - 0xc7, 0xd0, 0x81, 0xc2, 0xc2, 0xf2, 0x66, 0xe0, 0x5a, 0x94, 0xe7, 0xba, 0x10, 0xa2, 0x51, 0x08, - 0x71, 0x53, 0x08, 0x31, 0x3a, 0x6b, 0x11, 0x92, 0x24, 0x99, 0x68, 0x51, 0x74, 0x28, 0x2d, 0xd4, - 0x75, 0x1d, 0x6b, 0x7c, 0xa4, 0x75, 0x8a, 0xb7, 0x5a, 0x8d, 0xc0, 0x30, 0x74, 0x91, 0x32, 0xd5, - 0xa3, 0x2b, 0x8a, 0x32, 0x49, 0x24, 0x55, 0x21, 0x66, 0x70, 0x81, 0x27, 0xcf, 0x56, 0x84, 0x92, - 0x93, 0xd3, 0x18, 0x1b, 0x8b, 0xf4, 0x96, 0xa9, 0xa9, 0x76, 0x4c, 0x31, 0x31, 0x8c, 0x8c, 0xb8, - 0xf9, 0xe6, 0x63, 0x9b, 0x48, 0x49, 0xb9, 0x65, 0xd7, 0x1f, 0x7a, 0xa8, 0x8c, 0xe2, 0xe2, 0x12, - 0x7a, 0x7b, 0xbb, 0x71, 0xbb, 0xdd, 0xe4, 0xe7, 0xcf, 0x8f, 0x4c, 0x59, 0x87, 0x06, 0x49, 0x4a, - 0x4a, 0x9f, 0x75, 0x61, 0x6d, 0xd6, 0x8e, 0xcc, 0x66, 0x73, 0xe0, 0x76, 0x0f, 0x61, 0xb1, 0x24, - 0x4c, 0x41, 0xcc, 0x4e, 0x43, 0xc3, 0x15, 0xdc, 0x23, 0xa3, 0xe4, 0xcc, 0xc9, 0xe7, 0xec, 0xf9, - 0x8b, 0xd4, 0x7c, 0xf8, 0x1e, 0x76, 0xbb, 0x83, 0x65, 0xcb, 0xcb, 0xf0, 0x7a, 0xbd, 0xf4, 0x76, - 0x77, 0xe0, 0x74, 0x3a, 0xd1, 0xb4, 0xc8, 0x8c, 0x6c, 0x70, 0x70, 0x90, 0xa4, 0xa4, 0x7b, 0x66, - 0x5c, 0xa9, 0x08, 0xe3, 0xc0, 0x6c, 0x44, 0x28, 0x26, 0xc6, 0xc4, 0xe8, 0xe8, 0x50, 0x94, 0x0b, - 0x0c, 0x9d, 0xd2, 0xd2, 0x45, 0x20, 0x34, 0x6e, 0xb4, 0x7e, 0x81, 0xa6, 0x05, 0x58, 0xfd, 0xc8, - 0x5a, 0x16, 0x3f, 0xb0, 0x14, 0x97, 0x6b, 0x80, 0x96, 0xa6, 0x6b, 0xb4, 0xb6, 0xb6, 0x50, 0x59, - 0xb9, 0x35, 0x22, 0xeb, 0x8a, 0x89, 0x51, 0xe8, 0xef, 0x1f, 0xfe, 0x9f, 0x5d, 0xb3, 0xce, 0xa6, - 0xf5, 0xf4, 0xf4, 0x93, 0x9f, 0x1f, 0x29, 0x9e, 0x29, 0x29, 0xe3, 0x71, 0xd0, 0x9f, 0xfe, 0x54, - 0x8b, 0x84, 0x3e, 0xa1, 0x2f, 0x3a, 0x63, 0x63, 0x63, 0x34, 0x37, 0x37, 0xf3, 0xd8, 0x63, 0x1b, - 0x89, 0x8d, 0x8d, 0x27, 0x10, 0x08, 0xbf, 0xec, 0x70, 0xbb, 0x5d, 0x58, 0xad, 0x19, 0x5f, 0x9a, - 0x27, 0xff, 0xaf, 0xe8, 0xc0, 0x78, 0x02, 0xf4, 0x15, 0x9a, 0x9a, 0xfe, 0x1e, 0x71, 0x88, 0x10, - 0xe3, 0x61, 0x43, 0x65, 0xe5, 0x66, 0x0a, 0x0b, 0x0b, 0xf1, 0x7a, 0x3d, 0xf8, 0x7c, 0x3e, 0x4a, - 0x4b, 0x17, 0x51, 0x5d, 0xfd, 0x34, 0xc9, 0xc9, 0xb6, 0x48, 0x00, 0x64, 0xa8, 0xab, 0xfb, 0x0b, - 0x05, 0x05, 0x0f, 0xcc, 0xa8, 0xa2, 0x7d, 0xdb, 0x1b, 0x9a, 0x99, 0x36, 0x93, 0xc9, 0x42, 0x5f, - 0x9f, 0xce, 0xf0, 0xb0, 0x13, 0x87, 0x23, 0x23, 0x7a, 0x15, 0x22, 0x2b, 0x8b, 0xec, 0xec, 0x1c, - 0x23, 0x1a, 0x0d, 0x06, 0xb5, 0x69, 0x82, 0xc2, 0x7f, 0x50, 0x52, 0xb2, 0x6a, 0x8a, 0x29, 0x9f, - 0x39, 0x3c, 0x77, 0xc4, 0x01, 0x80, 0x39, 0x73, 0x0a, 0xb8, 0x74, 0xe9, 0x12, 0xc1, 0x60, 0xe0, - 0x8e, 0xef, 0xb7, 0x3c, 0x1e, 0x37, 0xc3, 0xc3, 0x1a, 0xc9, 0xc9, 0xf6, 0x19, 0x5d, 0x9a, 0xdf, - 0x06, 0x81, 0x3b, 0x4b, 0x68, 0xee, 0xb9, 0xe7, 0x7e, 0xfe, 0xf0, 0x87, 0xd3, 0xf4, 0xf5, 0xf5, - 0xcc, 0x7a, 0xed, 0x8d, 0x1b, 0x8d, 0xd4, 0xd5, 0x7d, 0xc6, 0x92, 0x25, 0xab, 0xa2, 0x00, 0x3f, - 0x7b, 0x1d, 0xb8, 0xa3, 0x94, 0xd2, 0x6c, 0xb6, 0x50, 0x5a, 0xba, 0x82, 0xbf, 0xfe, 0xf5, 0x73, - 0x2e, 0x5d, 0xfa, 0xf3, 0x8c, 0xae, 0x52, 0xbd, 0x5e, 0x2f, 0x35, 0x35, 0x1f, 0xa2, 0xeb, 0xc9, - 0x94, 0x97, 0xaf, 0x9f, 0xa6, 0xa8, 0x35, 0x73, 0x98, 0x54, 0x80, 0x96, 0x96, 0xde, 0xda, 0x91, - 0x11, 0xcf, 0x37, 0x13, 0xa3, 0x5c, 0x23, 0xcd, 0x8c, 0x13, 0x5f, 0xc1, 0xeb, 0x1d, 0xe5, 0xf8, - 0xf1, 0xdf, 0x91, 0x9e, 0x6e, 0x27, 0x27, 0x27, 0x8b, 0xcc, 0xcc, 0x4c, 0x1c, 0x8e, 0x34, 0x02, - 0x01, 0x3f, 0x3d, 0x3d, 0xbd, 0x74, 0x76, 0x76, 0xd2, 0xd5, 0xd5, 0x8d, 0xdb, 0xed, 0x63, 0xd9, - 0xb2, 0xb5, 0x98, 0xcd, 0x96, 0x69, 0x32, 0x3d, 0x70, 0xbb, 0x47, 0x9c, 0x92, 0x24, 0x35, 0xcf, - 0x28, 0x32, 0x10, 0x42, 0x50, 0x51, 0xf1, 0xfc, 0x03, 0x99, 0x99, 0xc9, 0xff, 0xb9, 0x60, 0x41, - 0x56, 0xa1, 0x10, 0xe3, 0xf5, 0x1e, 0xbf, 0x5f, 0xc3, 0xe7, 0x0b, 0x10, 0x0c, 0xea, 0x84, 0x8a, - 0x5d, 0xe3, 0xd5, 0x88, 0x90, 0x85, 0x90, 0x8d, 0x8b, 0xf1, 0xd0, 0x9c, 0x2c, 0x2b, 0x13, 0x3e, - 0xc1, 0x47, 0x30, 0x38, 0x8c, 0xaa, 0x8e, 0xa1, 0x69, 0x12, 0x8a, 0x92, 0x88, 0xc5, 0x62, 0x43, - 0x55, 0xcd, 0x46, 0x5d, 0xe8, 0xd6, 0x75, 0xe9, 0x78, 0x8d, 0x33, 0x10, 0x18, 0xaf, 0x0b, 0xf5, - 0xf5, 0x0d, 0xf4, 0x8d, 0x8c, 0x8c, 0xee, 0x39, 0x7c, 0x78, 0xd7, 0x91, 0x99, 0x20, 0xf0, 0xdf, - 0xd1, 0x1d, 0xfc, 0xa3, 0x61, 0x31, 0x70, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, - 0xae, 0x42, 0x60, 0x82, + 0x87, 0x00, 0x00, 0x05, 0x10, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xdd, 0x59, 0x5d, 0x4c, 0x14, + 0x57, 0x14, 0xde, 0x76, 0x85, 0xb6, 0x01, 0x1a, 0x1b, 0x94, 0x07, 0x9f, 0x0c, 0xb6, 0x94, 0xd2, + 0x16, 0x69, 0xf1, 0xc1, 0x6a, 0x6d, 0x35, 0x2d, 0xd4, 0x57, 0x53, 0xd3, 0x8a, 0x11, 0x94, 0x28, + 0xb1, 0x89, 0x09, 0xb1, 0x21, 0xc6, 0x18, 0xfb, 0x47, 0xda, 0x26, 0xc6, 0x57, 0x63, 0x7c, 0x30, + 0x3e, 0x98, 0x5a, 0xda, 0x25, 0x4d, 0x30, 0x08, 0xd6, 0x52, 0x96, 0xa2, 0x82, 0xeb, 0xee, 0xec, + 0x32, 0xf1, 0xa7, 0x69, 0x8c, 0x35, 0x90, 0x22, 0xd4, 0x34, 0xa2, 0x24, 0x12, 0x81, 0x65, 0x96, + 0xd3, 0x73, 0xc6, 0x19, 0x32, 0xcc, 0xde, 0xb9, 0xf7, 0xce, 0xec, 0x6c, 0xd1, 0x6e, 0xf2, 0x65, + 0xf8, 0x96, 0xbd, 0x3f, 0xdf, 0xcc, 0x77, 0xee, 0x39, 0xf7, 0x4e, 0x00, 0x00, 0x02, 0x4e, 0xc0, + 0x4f, 0x1e, 0xa2, 0x9c, 0xf7, 0x1b, 0x2f, 0xc0, 0xcf, 0x53, 0x88, 0x4a, 0xea, 0x3f, 0xe3, 0xbe, + 0x18, 0x9d, 0x2f, 0x42, 0xbc, 0x86, 0xa8, 0x45, 0x7c, 0x8d, 0x78, 0xd7, 0x6f, 0x01, 0xc6, 0x38, + 0xef, 0x19, 0xfd, 0xd3, 0x38, 0xaf, 0x22, 0x82, 0x19, 0x09, 0x30, 0x3a, 0xd9, 0x82, 0xf8, 0x02, + 0xf1, 0xad, 0x05, 0x65, 0x88, 0xa5, 0x59, 0xc0, 0xeb, 0xb6, 0x71, 0x3e, 0x47, 0x7c, 0x8c, 0x28, + 0x75, 0x79, 0x23, 0x02, 0xf9, 0x88, 0x7a, 0x5b, 0x67, 0x0b, 0x8d, 0x6d, 0x88, 0xe7, 0xa4, 0x9f, + 0x80, 0xe1, 0x49, 0xb2, 0xcd, 0x56, 0xc4, 0x97, 0x0b, 0xf4, 0x04, 0x3e, 0x43, 0x7c, 0x84, 0x78, + 0x39, 0xd3, 0x18, 0xc8, 0xa1, 0xc0, 0x45, 0xec, 0x30, 0x3c, 0xfa, 0x4e, 0x96, 0x62, 0xe0, 0x7d, + 0x44, 0xb3, 0x71, 0xd3, 0x5e, 0xc9, 0x38, 0x06, 0x1c, 0x06, 0x79, 0x1e, 0xf1, 0x66, 0x96, 0x56, + 0xa1, 0x95, 0xb2, 0x36, 0xf1, 0x2c, 0xe0, 0x49, 0xc0, 0xff, 0x42, 0xc0, 0x22, 0xc4, 0x16, 0xc4, + 0x6f, 0x88, 0xf1, 0x05, 0xc6, 0x7d, 0x44, 0x17, 0x62, 0x33, 0x22, 0xc8, 0xb0, 0xde, 0xb3, 0x2c, + 0x01, 0xf5, 0xf1, 0x78, 0x1c, 0x1e, 0x37, 0x24, 0x93, 0xc9, 0x3a, 0x86, 0x80, 0x1a, 0x96, 0x00, + 0x95, 0x1a, 0x58, 0x3f, 0xd9, 0xe6, 0x89, 0x44, 0x22, 0x8d, 0xa7, 0x52, 0xa9, 0x79, 0x5c, 0xd3, + 0xb4, 0x8b, 0xb6, 0xc9, 0xbf, 0x68, 0x2c, 0xb7, 0x25, 0x76, 0x01, 0x9e, 0x27, 0xa4, 0xcd, 0x6a, + 0x70, 0xed, 0xfe, 0x35, 0x9d, 0x37, 0x5f, 0x6d, 0x86, 0xa6, 0x78, 0x13, 0x34, 0x44, 0x1a, 0x74, + 0xbe, 0x7f, 0x60, 0x3f, 0x1c, 0xba, 0x7e, 0x08, 0x3a, 0x6f, 0x77, 0x7a, 0x12, 0x30, 0x3b, 0x3b, + 0x3b, 0x6e, 0x13, 0xf0, 0xa1, 0x21, 0x60, 0xb3, 0x2f, 0x02, 0x76, 0x45, 0x76, 0xc1, 0xe2, 0xd0, + 0x62, 0x08, 0x7c, 0x17, 0xd0, 0x39, 0x5d, 0x4d, 0xb0, 0x78, 0x65, 0x67, 0x25, 0x1c, 0xbd, 0x71, + 0x14, 0x26, 0x66, 0x26, 0x5c, 0x0b, 0xa0, 0x1c, 0x61, 0x24, 0x3a, 0x33, 0xe1, 0x05, 0xd3, 0x04, + 0x3c, 0x6e, 0x40, 0x41, 0x56, 0x01, 0xa5, 0xb6, 0xac, 0x5d, 0x9a, 0x26, 0x80, 0xee, 0x80, 0x09, + 0x16, 0x3f, 0x3b, 0x7c, 0x16, 0x0a, 0x43, 0x85, 0x90, 0x7b, 0x2a, 0x57, 0xe7, 0x74, 0x35, 0xe1, + 0x96, 0x47, 0x94, 0x08, 0x84, 0x47, 0xc3, 0x73, 0xfd, 0xd3, 0x1d, 0x9f, 0x99, 0x99, 0x99, 0xc7, + 0x6d, 0x4f, 0xa0, 0xc6, 0x26, 0xa0, 0xc6, 0xb5, 0x85, 0x82, 0xa7, 0x82, 0x5c, 0x8b, 0xb8, 0xe1, + 0x97, 0x94, 0x4b, 0x50, 0xf0, 0x63, 0x01, 0x0c, 0x4d, 0x0c, 0x09, 0x2d, 0x44, 0xd9, 0xda, 0x28, + 0x39, 0xac, 0x02, 0x9a, 0xcd, 0x2c, 0x2e, 0x14, 0x10, 0xbb, 0x1b, 0xcb, 0x78, 0xc2, 0x2c, 0x01, + 0x74, 0xdd, 0xd4, 0xbb, 0x49, 0x46, 0x00, 0x95, 0x1c, 0x1f, 0x58, 0x8a, 0xbf, 0x0a, 0x44, 0x35, + 0x7d, 0xff, 0x44, 0xc4, 0x00, 0xd5, 0x4d, 0xc6, 0xf5, 0x05, 0x43, 0xc0, 0xd2, 0x79, 0xdf, 0xf3, + 0x62, 0xe0, 0xf0, 0xf5, 0xc3, 0x42, 0x4f, 0x57, 0x74, 0x54, 0x30, 0xdb, 0x9f, 0xbf, 0x73, 0x1e, + 0x56, 0x75, 0xae, 0x72, 0x8c, 0x01, 0xf3, 0xef, 0x13, 0x37, 0x4f, 0x08, 0x63, 0x80, 0x25, 0x40, + 0x18, 0x03, 0xb4, 0xc6, 0x2f, 0xfb, 0x69, 0x19, 0xd7, 0x12, 0x65, 0xed, 0x65, 0x30, 0x36, 0x3d, + 0xe6, 0x68, 0xc1, 0xd1, 0x87, 0xa3, 0x50, 0xd8, 0x5a, 0xe8, 0x68, 0x21, 0xc2, 0x41, 0xf5, 0xa0, + 0x6c, 0x1e, 0x70, 0x27, 0x40, 0xb9, 0xab, 0x40, 0x71, 0x5b, 0x31, 0xe4, 0xfd, 0x90, 0xe7, 0x28, + 0x20, 0xfc, 0x77, 0x58, 0x98, 0x37, 0x6a, 0xfb, 0x6b, 0xb9, 0x02, 0x1a, 0x95, 0x46, 0x7f, 0x04, + 0x50, 0x23, 0x13, 0x2c, 0x1e, 0x4f, 0x3c, 0x82, 0x92, 0x50, 0x74, 0x1e, 0x8b, 0xc7, 0xb8, 0xbf, + 0x37, 0xff, 0x8e, 0xc6, 0xa3, 0x3a, 0xa7, 0x49, 0x9b, 0xb0, 0x72, 0xea, 0x87, 0xd5, 0xde, 0x9a, + 0x07, 0xa4, 0x04, 0x88, 0xf2, 0x80, 0x57, 0x5e, 0xf5, 0x6b, 0x15, 0x37, 0x06, 0x8e, 0xdd, 0x38, + 0x96, 0x9d, 0x18, 0xf0, 0x8b, 0x2f, 0x69, 0x5d, 0xc2, 0xb5, 0x50, 0xdb, 0x5f, 0x6d, 0xd9, 0x89, + 0x01, 0x2f, 0x7c, 0x3a, 0x35, 0x0d, 0xb7, 0x1e, 0xdc, 0xd2, 0xf9, 0xbe, 0xc4, 0x3e, 0x58, 0x73, + 0x6e, 0x0d, 0x37, 0x0f, 0x10, 0x06, 0x1f, 0x0c, 0xfe, 0x37, 0x31, 0x60, 0xe7, 0x4a, 0x5c, 0xd1, + 0xfd, 0x6b, 0x7a, 0x9c, 0x6c, 0xc1, 0xf2, 0x38, 0x8f, 0x53, 0x1b, 0xa7, 0xfe, 0x7d, 0x8f, 0x81, + 0xdd, 0x91, 0xdd, 0x50, 0x72, 0xba, 0xc4, 0xb7, 0x5a, 0x88, 0xae, 0x1b, 0xc3, 0x1b, 0xa5, 0x6a, + 0x21, 0xcf, 0x16, 0x6a, 0x1f, 0x6e, 0x87, 0xf2, 0x8e, 0xf2, 0xac, 0x95, 0x12, 0xb4, 0x67, 0x70, + 0xb1, 0x1f, 0x70, 0x27, 0x60, 0xaf, 0xb2, 0xd7, 0xb7, 0x09, 0x3b, 0x09, 0x08, 0x0d, 0x85, 0xfc, + 0x13, 0x60, 0xf7, 0xa0, 0x8c, 0x87, 0x79, 0x5c, 0x26, 0x26, 0x28, 0xaf, 0xf8, 0x1e, 0x03, 0x54, + 0xa7, 0xbb, 0xf1, 0x74, 0x7e, 0x4b, 0xbe, 0xce, 0xf7, 0x44, 0xf7, 0xc0, 0x91, 0x3f, 0x8e, 0x40, + 0xf7, 0x48, 0xb7, 0xce, 0x3b, 0x86, 0x3b, 0xb8, 0x31, 0x50, 0xd4, 0x5a, 0x04, 0x5a, 0x4a, 0xf3, + 0x3f, 0x06, 0x56, 0xff, 0xbc, 0x5a, 0xca, 0x12, 0x3b, 0x23, 0x3b, 0xa1, 0xe7, 0x4e, 0x0f, 0x4c, + 0x6a, 0x93, 0x4c, 0x0b, 0x1e, 0x50, 0x0f, 0x70, 0x2d, 0xb4, 0xa1, 0x6b, 0x83, 0xdb, 0x3d, 0xb1, + 0x58, 0x80, 0x7a, 0x4f, 0x15, 0x7a, 0x98, 0x6a, 0x78, 0x99, 0xbc, 0xb0, 0xf6, 0xdc, 0x5a, 0xae, + 0x00, 0x3a, 0x00, 0xf0, 0x55, 0x00, 0x35, 0xa2, 0x75, 0x9d, 0xe7, 0xd9, 0xcb, 0xca, 0x65, 0xe9, + 0x3c, 0x21, 0x8a, 0x01, 0xca, 0x23, 0xbc, 0xf6, 0x9e, 0x62, 0xa0, 0xee, 0x62, 0x1d, 0xd7, 0xf3, + 0x27, 0xff, 0x3c, 0x29, 0x5d, 0x0b, 0x89, 0xf2, 0x80, 0x3a, 0xa6, 0x4a, 0xef, 0x89, 0xa5, 0x2d, + 0x44, 0x89, 0x85, 0x67, 0xa1, 0x2b, 0xf7, 0xae, 0x48, 0x97, 0x16, 0xbc, 0x18, 0x22, 0x01, 0x54, + 0x76, 0xf8, 0x1e, 0x03, 0xeb, 0x7e, 0x59, 0xc7, 0x15, 0x70, 0xe6, 0xf6, 0x19, 0xa1, 0x80, 0xe3, + 0x37, 0x8f, 0x0b, 0x05, 0x90, 0x15, 0x3d, 0x1c, 0x6c, 0x89, 0x63, 0x80, 0xea, 0x1a, 0x5e, 0x0c, + 0xd0, 0xff, 0x79, 0x31, 0x40, 0x7b, 0x05, 0xba, 0xbb, 0x32, 0x79, 0x42, 0x14, 0x43, 0x9e, 0x62, + 0x80, 0xd6, 0x72, 0xd1, 0xba, 0xdf, 0xa4, 0x34, 0x31, 0x3d, 0xbf, 0xbd, 0x6f, 0xbb, 0x74, 0x2d, + 0x44, 0x37, 0xc2, 0xda, 0x9e, 0x17, 0x03, 0xc6, 0xcb, 0xc7, 0xb7, 0x11, 0xc5, 0xe6, 0xd9, 0x28, + 0xe2, 0x2d, 0xc4, 0x1b, 0x69, 0x16, 0x6a, 0x19, 0x6c, 0x91, 0x2e, 0x0d, 0xd6, 0x77, 0xad, 0x87, + 0xea, 0xee, 0x6a, 0x58, 0x71, 0x7a, 0x85, 0xeb, 0x52, 0x82, 0x56, 0x3b, 0x59, 0x0b, 0xd1, 0x91, + 0x3a, 0xe3, 0x5c, 0xe8, 0x1b, 0x7a, 0x7b, 0x94, 0x26, 0x80, 0x36, 0xe8, 0xbc, 0x3d, 0xb0, 0x5f, + 0x9c, 0x96, 0x50, 0x97, 0x67, 0xa3, 0xf6, 0x93, 0xb9, 0x7a, 0xc7, 0x5a, 0xc8, 0xdc, 0xa3, 0x7a, + 0xad, 0x85, 0xb2, 0x11, 0x03, 0x8c, 0xb3, 0xd1, 0x8a, 0x34, 0x01, 0x9a, 0xa6, 0xe9, 0x18, 0x9f, + 0x1c, 0xd7, 0x79, 0x41, 0x4b, 0xc1, 0x1c, 0x64, 0x79, 0x51, 0xa8, 0x08, 0x7a, 0x46, 0x7a, 0x84, + 0xbf, 0xa7, 0x9b, 0x64, 0x8e, 0x47, 0xa0, 0x49, 0x27, 0x93, 0xc9, 0x79, 0xdc, 0xf6, 0x04, 0x9e, + 0xb6, 0x9c, 0x4e, 0x7f, 0x85, 0xc8, 0x15, 0x96, 0xd3, 0xe6, 0x99, 0x90, 0xac, 0x45, 0x96, 0xb7, + 0x2d, 0x87, 0xfe, 0x7f, 0xfa, 0xa5, 0xf2, 0x00, 0x05, 0x71, 0x06, 0xef, 0x07, 0xb6, 0xd9, 0x57, + 0xa1, 0xdf, 0x59, 0x02, 0x46, 0x1e, 0x8e, 0x40, 0x55, 0x77, 0x95, 0x50, 0x40, 0xce, 0xf7, 0x39, + 0x3a, 0xa7, 0x73, 0x7f, 0x37, 0x89, 0x4c, 0xe2, 0x0d, 0x4d, 0xd4, 0x26, 0xe0, 0x25, 0x43, 0xc0, + 0x4a, 0xbb, 0x80, 0x4f, 0x68, 0x00, 0x55, 0x55, 0xe7, 0x60, 0xe5, 0xca, 0xc0, 0xa3, 0x73, 0xa0, + 0x0b, 0xb1, 0x0b, 0xd0, 0x1b, 0xeb, 0xd5, 0x41, 0x41, 0xd8, 0xa7, 0xf4, 0x41, 0x34, 0x11, 0x85, + 0x01, 0x75, 0x00, 0x58, 0xed, 0xa9, 0x9d, 0x09, 0x16, 0x77, 0x1a, 0xcf, 0xe4, 0x68, 0xa9, 0x06, + 0xc6, 0x3b, 0xb2, 0x1d, 0xe6, 0x99, 0xa8, 0x55, 0xc0, 0x33, 0x53, 0x53, 0x53, 0x9f, 0xe2, 0x3a, + 0x7c, 0xd5, 0xea, 0xcb, 0x85, 0x02, 0xce, 0x23, 0x81, 0xf3, 0x69, 0xc4, 0x79, 0xe5, 0x30, 0x04, + 0xe4, 0xdb, 0xbf, 0xfb, 0x17, 0xa9, 0xb6, 0x0a, 0x59, 0x1b, 0xa7, 0xa9, 0x98, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE icon_bitmap2component_xpm[1] = {{ png, sizeof( png ), "icon_bitmap2component_xpm" }}; diff --git a/bitmaps_png/icons/icon_bitmap2component.ico b/bitmaps_png/icons/icon_bitmap2component.ico index 590b782d593b06818ca9605f653ee712a6e0b60c..c336b69f382e947d7b6634703646b86df19bf5ea 100644 GIT binary patch literal 3262 zcmbuBTTBya6vt;@G%@?&YO-1NL7&VfzW88bVvL#?eex3ZfoL!i@e&{=#%p9%geXA> zU_|i>6c(gVEd_cLq+Ci{pxjEKgWM~3L|hcJ;H~?EStm_fSvG#m9R73qeg8S%IsZ8` zg76c6Yt{(Z-vs5)g7B*#2)}dU61H*9`oE1sfZ6lgXliPD_3G95`1tVf@axyF0YgJW z;(%!Fwu)|%%h98yg!L8Q~HOW^HF@XH`{|M6A(hBrq^A(BI$x_U+q_j*j86 z;iUQ`MYUp^X4`)4{^W|}AY)K|V}5UcFB4i^EfEzF9O@c1_Dau%eq-6;Gi#F}EUE0rtHmYfCbF510EzsEdkwzOHeI016rj7in`q(G>2$%t!8dN)0JA$$6#1#Nu9St4Yi(LA!K1I8a79u7YvCnpDfY82TRdHKcV70MNhvKPgf;;@^w zo1Zm3D|8p$wckDX{GjXyur=(ur|Vk#TEBexf*#(zdk0_(#Gjv^fAQi)ZgKVM)wsAg zDL)FELSxm)`Qa9=?XB#WC1g)*7qe@#rM!9Pr_NEw1poYy_Vee@7Z(@H_1#*s)jL1C zOuJ@gX3#C$XLpm6lb^qS&ah>W9Pj+7ThsybyIQ zdK8Pa+-^6!2G|@ne&xuj&cYtiA5qpR@v{X|1VElref{~Lv_A3XXL){0z7M}kbnVsd z_2$2Cx&NR1l72@19*H(Z`{*a8A|}z5Sl3%OIx$Kfh%=}v$U8sBjK@BG{p7EI@Azf? zTN|x%eJP@k{!`2;Cc7!kn&w^KTuW|4d&5HNOL*itsxgZ27OwvgeaPd^$MeT8_Xqet ze*9QFUYk>!vovq%LY^=9!)n9k=jT_K%hlD@)zZ>JK>-ejgHG7sYOpogj7`Sp_UD>f z%_GYrV~vpna!BAo z51EIV9@yO1oYtIXup6Q+(X{srOGcqs*w@!b08F4yVAXBvoa!8!_Ho1Uo2HupyJ#l> zX@WmL_vIOp^fUB+Xi4r8Z~ZLGTh=q&Lw}I-wqCp5J3l1K<#x@JAM{T`cn47?o*-4d zs>oJ!t?U{NpYj2+ELpmGozY<|uP=|Uh{r>t!zNWEWmjj%Rm33=^Z1#P|7 z;dCH-fBh#VCBc940Rl!?YGZWpWC3{aL0US$BP|Dtw(i@ zI`@?O!-o&V#!ReFeR;FM&&!KKpeP0kp+*xE699yYr6|M(K%6khegHzn^36lZ09alY z(gfDR$%u%Ec>44yfNp?#nf&7e37O62IeMX>pg;nW<-6+#M`dNDH{thiQBhG@S=sk~ z_3>-9T9e7-;|zFdG#XP=Q_q|^gR}xp2({UIIma#7!m|Yr;%5oBU=`#gB_-e61%93dwiz26 zyYT$OpOTWI*X!q@<)>AgD>#4QT>9_Hzd7Hm|Now|YiGwS*DUAk`c)Nz5H;g@?=gG+ Q@^HQSnjma-dnP^q0KVuR-T(jq literal 3262 zcmcJRNlaUJ9><+q4tAWIztCvMXf)ah9Qca%cO2F4YxXftsz=Q%W;5^JJ(ABi5=0-9 zsd(@}djG!S`|njPEt(&G(6+Yrx3%dyItV)baa)^OCXRR3zdvnH+t69-Yo_FocGNqGq#Qt0nvU7w6`7 zcXyvXd-n70?slb8%;$TR%5pgTESs%_!^NQ?KZm1cGWWQ(GbNYnv{(+}Yeb@u&$qt3 z3}&6bv$?sky1Fty?;IVCjEqqH;N!>2&dwTj?_J5^ILzjK`J)<5(CuC<6b|Aq! z*D1F;+S@!%hfpA(`1yET&EZt}4pv+LM?Ie3^1HI4*Xu1tqjg}w(%)~? z>2Tu{H01OA23@W+NrK;g=T7(UjLl}F-VWlUK6M&Ry?)SNUayxVNv&3kaO(A0LVYR} zRDF)A)vK$kPo6wkd2Y+g%XYh6c7Xqw4<@BD;`blkU(T_y1-F~x|MS9yYuBzJthu?l znVFelu?Ux{{Ndq!`xo;^B@_;5Gz}NeqOC9=+S}U`@i^wgO1bQDI(6FK0f{(j&{O*8 zc)TlDuK1>WNA4bZz3X)_eLkOz#X5wK`POjh!s<0z!|A^*EiD~Adi3_~+u%ndkp+)( zBPieUa(7&vgWR8>KgAEE12291(rMOd@B@K>S||)S9Eb?F=aR_@yFFksg)Ekc)f%_i zQcfo+k=$(j`1WU?VO;d6)drI6S1KJOnHcLWj+^nHbq~0d;yCgymBRmO+Dk}$9{lm~ zag=ChbF)z*8Inp3e13m-x0b=^XEFy^ERw?+BLrcSN^LTkRZ5J> zrEZnVrBu3=N*h7oF%b=i!S_yiX?JO_b-f0DC=>!8Dpe|#&CSiAJtk~}a7Yb`%eTA#zot?Q%X1$?dA|78&B-TFqX#B>F zSU!)Sf71tQ12|cl%+2M{KH!(jWdw+_NhA`NFJDGyW%8L!E|bq=vc|!8yWQpTy4gJU z_1DR+uAELc|L(hff+!)7ot>vbVe#x)Z%@zk?CflBZ!gsLrmGe5YS*i{5qxZY>(;I2 z=4Q~qhyPXeI#1?uIYdP9kuoGsAjm;~U;}{_yw)w9UO#cd@zz`Jn>Qs;JCq4QpZA6D zyIihImoA~Hu}foPBb`o%KJJ7Y^>e2COg5XX^ARath|lM8QR zGc`L~X=;jIy&8(eNDyXA1me zvRXEue;%2ho~^^-JQX-LLRxXxi<{HwM0LT~?9}=5fw$lG8jV>9{J(IN1U5pyzc?H# z!3PRJ{9d5bqZL?)BzPx1fXi{HcshaE=_bKov6zWDLxFL!Bs$1kv70Z@9x_y7O^ diff --git a/bitmaps_png/sources/icon_bitmap2component.svg b/bitmaps_png/sources/icon_bitmap2component.svg index 1cc7950255..01324ffd40 100644 --- a/bitmaps_png/sources/icon_bitmap2component.svg +++ b/bitmaps_png/sources/icon_bitmap2component.svg @@ -8,11 +8,11 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - height="32" - width="32" + height="48" + width="48" version="1.1" id="svg2" - inkscape:version="0.48.4 r9939" + inkscape:version="0.48.3.1 r9886" sodipodi:docname="icon_bitmap2component.svg" inkscape:export-filename="E:\kicad-launchpad\kicad-bzr\bitmaps_png\icon_bitmap2component.png" inkscape:export-xdpi="90" @@ -38,19 +38,107 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="1280" - inkscape:window-height="977" + inkscape:window-width="1600" + inkscape:window-height="849" id="namedview345" - showgrid="false" - inkscape:zoom="4.9166667" - inkscape:cx="24" - inkscape:cy="23.59322" - inkscape:window-x="-4" - inkscape:window-y="-4" + showgrid="true" + inkscape:zoom="18.178537" + inkscape:cx="20.737894" + inkscape:cy="23.730717" + inkscape:window-x="0" + inkscape:window-y="29" inkscape:window-maximized="1" - inkscape:current-layer="svg2" /> + inkscape:current-layer="svg2" + inkscape:snap-to-guides="false" + inkscape:snap-grids="false"> + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + a - - - - - - - + id="g4585" + transform="matrix(1.011705,0,0,1,-0.00570879,0)" + style="stroke:#cccccc"> + id="path3333-6" + d="m 0.98772317,30.533269 36.59759283,0 0,0" + style="fill:none;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + id="path3333-33" + d="m 0.98772317,34.538333 36.59759283,0 0,0" + style="fill:none;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + id="path3333-7" + d="m 0.98772317,38.543396 36.59759283,0 0,0" + style="fill:none;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + id="path3333-79" + d="m 0.98772317,42.548457 36.59759383,0 0,0" + style="fill:none;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + id="path3333-31-7" + d="m 0.98772317,10.507956 36.59759283,0 0,0" + style="fill:none;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + id="path3333-8-1" + d="m 0.98772317,14.513019 36.59759283,0 0,0" + style="fill:none;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + id="path3333-33-0" + d="m 0.98772317,18.518083 36.59759283,0 0,0" + style="fill:none;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + + + + id="g4563" + transform="matrix(1,0,0,0.99268819,-0.08251488,0.07386002)" + style="stroke:#cccccc"> - + inkscape:connector-curvature="0" + id="path3333-79-6-7" + d="m 9.5832994,10.601471 0,36.617177 0,0" + style="fill:none;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + inkscape:connector-curvature="0" + id="path3333-79-6-7-4" + d="m 5.5802244,10.601471 0,36.617177 0,0" + style="fill:none;stroke:#cccccc;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + + + + + + + + + + + From 5a9d750f7d862f61ca867f80024a7c794a66acb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nick=20=C3=98stergaard?= Date: Wed, 12 Feb 2014 08:59:56 +0100 Subject: [PATCH 31/52] Fix wrong numbering in the QFP footprint wizard python script --- pcbnew/scripting/plugins/qfp_wizard.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pcbnew/scripting/plugins/qfp_wizard.py b/pcbnew/scripting/plugins/qfp_wizard.py index 8bd5600b6b..2df89e113b 100644 --- a/pcbnew/scripting/plugins/qfp_wizard.py +++ b/pcbnew/scripting/plugins/qfp_wizard.py @@ -109,18 +109,22 @@ class QFPWizard(pcbnew.FootprintWizardPlugin): pad_size = pad_size_left_right pad_pos_x = -(pad_horizontal_pitch / 2) + pad_pos_y = (cur_pad % (num_pads / 4)) * pad_pitch - (side_length / 2) + if side == 2: pad_pos_x = -pad_pos_x + pad_pos_y = -pad_pos_y - pad_pos_y = (cur_pad % (num_pads / 4)) * pad_pitch - (side_length / 2) else: pad_size = pad_size_bottom_top pad_pos_x = (cur_pad % (num_pads / 4)) * pad_pitch - (side_length / 2) - pad_pos_y = -(pad_vertical_pitch / 2) + if side == 1: pad_pos_y = -pad_pos_y + else: + pad_pos_x = -pad_pos_x pad_pos = pcbnew.wxPoint(pad_pos_x, pad_pos_y) From ddd39027e76afd895fd8dc0d05642b8d51f5caf5 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Wed, 12 Feb 2014 11:03:34 +0100 Subject: [PATCH 32/52] Fix issues in print mirror. (include some changes coming from Cirilo Berdarno's patch) gr_basic.cpp: rewrite the function which draws the outlines of a thick segment. --- common/gr_basic.cpp | 149 ++++++++++------------------------ pcbnew/class_edge_mod.cpp | 12 ++- pcbnew/printout_controler.cpp | 34 ++++---- 3 files changed, 74 insertions(+), 121 deletions(-) diff --git a/common/gr_basic.cpp b/common/gr_basic.cpp index 22a58b338a..1e256225b0 100644 --- a/common/gr_basic.cpp +++ b/common/gr_basic.cpp @@ -623,18 +623,10 @@ void GRLineArray( EDA_RECT* aClipBox, wxDC* aDC, std::vector& aLines, aClipBox->Inflate(-aWidth/2); } - +// Draw the outline of a thick segment wih rounded ends void GRCSegm( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2, int width, int aPenSize, EDA_COLOR_T Color ) { - long radius; - int dwx, dwy; - long dx, dy, dwx2, dwy2; - long sx1, sy1, ex1, ey1; - long sx2, sy2, ex2, ey2; - bool swap_ends = false; - - GRLastMoveToX = x2; GRLastMoveToY = y2; @@ -658,114 +650,63 @@ void GRCSegm( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2, GRSetColorPen( DC, Color, aPenSize ); GRSetBrush( DC, Color, false ); - radius = (width + 1) >> 1; + int radius = (width + 1) >> 1; + int dx = x2 - x1; + int dy = y2 - y1; + double angle = -ArcTangente( dy, dx ); + wxPoint start; + wxPoint end; + wxPoint org( x1, y1); + int len = (int) hypot( dx, dy ); - dx = x2 - x1; - dy = y2 - y1; + // We know if the DC is mirrored, to draw arcs + int slx = DC->DeviceToLogicalX( 1 ) - DC->DeviceToLogicalX( 0 ); + int sly = DC->DeviceToLogicalY( 1 ) - DC->DeviceToLogicalY( 0 ); + bool mirrored = (slx > 0 && sly < 0) || (slx < 0 && sly > 0); - if( dx == 0 ) /* segment vertical */ - { - dwx = radius; - if( dy >= 0 ) - dwx = -dwx; + // first edge + start.x = 0; + start.y = radius; + end.x = len; + end.y = radius; + RotatePoint( &start, angle); + RotatePoint( &end, angle); - sx1 = x1 - dwx; - sy1 = y1; + start += org; + end += org; - ex1 = x2 - dwx; - ey1 = y2; + DC->DrawLine( start, end ); - DC->DrawLine( sx1, sy1, ex1, ey1 ); + // first rounded end + end.x = 0; + end.y = -radius; + RotatePoint( &end, angle); + end += org; - sx2 = x1 + dwx; - sy2 = y1; - - ex2 = x2 + dwx; - ey2 = y2; - - DC->DrawLine( sx2, sy2, ex2, ey2 ); - } - else if( dy == 0 ) /* segment horizontal */ - { - dwy = radius; - if( dx < 0 ) - dwy = -dwy; - - sx1 = x1; - sy1 = y1 - dwy; - - ex1 = x2; - ey1 = y2 - dwy; - - DC->DrawLine( sx1, sy1, ex1, ey1 ); - - sx2 = x1; - sy2 = y1 + dwy; - - ex2 = x2; - ey2 = y2 + dwy; - - DC->DrawLine( sx2, sy2, ex2, ey2 ); - } + if( !mirrored ) + DC->DrawArc( end, start, org ); else - { - if( std::abs( dx ) == std::abs( dy ) ) // segment 45 degrees - { - dwx = dwy = ( (width * 5) + 4 ) / 7; // = width / 2 * 0.707 - if( dy < 0 ) - { - if( dx <= 0 ) - { - dwx = -dwx; swap_ends = true; - } - } - else // dy >= 0 - { - if( dx > 0 ) - { - dwy = -dwy; swap_ends = true; - } - else - swap_ends = true; - } - } - else - { - double delta_angle = ArcTangente( dy, dx ); - dwx = 0; - dwy = width; - RotatePoint( &dwx, &dwy, -delta_angle ); - } - dwx2 = dwx >> 1; - dwy2 = dwy >> 1; + DC->DrawArc( start, end, org ); - sx1 = x1 - dwx2; - sy1 = y1 - dwy2; - ex1 = x2 - dwx2; - ey1 = y2 - dwy2; + // second edge + start.x = len; + start.y = -radius; + RotatePoint( &start, angle); + start += org; - DC->DrawLine( sx1, sy1, ex1, ey1 ); + DC->DrawLine( start, end ); - sx2 = x1 + dwx2; - sy2 = y1 + dwy2; + // second rounded end + end.x = len; + end.y = radius; + RotatePoint( &end, angle); + end += org; - ex2 = x2 + dwx2; - ey2 = y2 + dwy2; - - DC->DrawLine( sx2, sy2, ex2, ey2 ); - } - - if( swap_ends ) - { - DC->DrawArc( sx2, sy2, sx1, sy1, x1, y1 ); - DC->DrawArc( ex1, ey1, ex2, ey2, x2, y2 ); - } + if( !mirrored ) + DC->DrawArc( end.x, end.y, start.x, start.y, x2, y2 ); else - { - DC->DrawArc( sx1, sy1, sx2, sy2, x1, y1 ); - DC->DrawArc( ex2, ey2, ex1, ey1, x2, y2 ); - } + DC->DrawArc( start.x, start.y, end.x, end.y, x2, y2 ); } diff --git a/pcbnew/class_edge_mod.cpp b/pcbnew/class_edge_mod.cpp index 7513096095..ede9d43564 100644 --- a/pcbnew/class_edge_mod.cpp +++ b/pcbnew/class_edge_mod.cpp @@ -200,8 +200,16 @@ void EDGE_MODULE::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode, StAngle = ArcTangente( dy - uy0, dx - ux0 ); EndAngle = StAngle + m_Angle; - if( StAngle > EndAngle ) - EXCHG( StAngle, EndAngle ); + if( !panel->GetPrintMirrored() ) + { + if( StAngle > EndAngle ) + EXCHG( StAngle, EndAngle ); + } + else // Mirrored mode: arc orientation is reversed + { + if( StAngle < EndAngle ) + EXCHG( StAngle, EndAngle ); + } if( typeaff == LINE ) { diff --git a/pcbnew/printout_controler.cpp b/pcbnew/printout_controler.cpp index 7be6b40d3c..3ee6e390f0 100644 --- a/pcbnew/printout_controler.cpp +++ b/pcbnew/printout_controler.cpp @@ -282,7 +282,7 @@ void BOARD_PRINTOUT_CONTROLLER::DrawPage() if( printMirror ) { // Calculate the mirrored center of the board. - center.y = m_Parent->GetPageSizeIU().y - boardBoundingBox.Centre().y; + center.x = m_Parent->GetPageSizeIU().x - boardBoundingBox.Centre().x; } offset += center; @@ -301,21 +301,29 @@ void BOARD_PRINTOUT_CONTROLLER::DrawPage() screen->m_IsPrinting = true; EDA_COLOR_T bg_color = g_DrawBgColor; + // Print frame reference, if reqquested, before + if( m_PrintParams.m_Print_Black_and_White ) + GRForceBlackPen( true ); + + if( m_PrintParams.PrintBorderAndTitleBlock() ) + m_Parent->DrawWorkSheet( dc, screen, m_PrintParams.m_PenDefaultSize, + IU_PER_MILS, titleblockFilename ); + if( printMirror ) { - // To plot mirror, we reverse the y axis, and modify the plot y origin - dc->SetAxisOrientation( true, true ); + // To plot mirror, we reverse the x axis, and modify the plot x origin + dc->SetAxisOrientation( false, false); - /* Plot offset y is moved by the y plot area size in order to have + /* Plot offset x is moved by the x plot area size in order to have * the old draw area in the new draw area, because the draw origin has not moved - * (this is the upper left corner) but the Y axis is reversed, therefore the plotting area - * is the y coordinate values from - PlotAreaSize.y to 0 */ - int y_dc_offset = PlotAreaSizeInPixels.y; - y_dc_offset = KiROUND( y_dc_offset * userscale ); - dc->SetDeviceOrigin( 0, y_dc_offset ); + * (this is the upper left corner) but the X axis is reversed, therefore the plotting area + * is the x coordinate values from - PlotAreaSize.x to 0 */ + int x_dc_offset = PlotAreaSizeInPixels.x; + x_dc_offset = KiROUND( x_dc_offset * userscale ); + dc->SetDeviceOrigin( x_dc_offset, 0 ); wxLogTrace( tracePrinting, wxT( "Device origin: x=%d, y=%d" ), - 0, y_dc_offset ); + x_dc_offset, 0 ); panel->SetClipBox( EDA_RECT( wxPoint( -MAX_VALUE/2, -MAX_VALUE/2 ), panel->GetClipBox()->GetSize() ) ); @@ -359,13 +367,9 @@ void BOARD_PRINTOUT_CONTROLLER::DrawPage() printMirror, &m_PrintParams ); GRForceBlackPen( false ); } - - if( m_PrintParams.m_Print_Black_and_White ) + else GRForceBlackPen( true ); - if( m_PrintParams.PrintBorderAndTitleBlock() ) - m_Parent->DrawWorkSheet( dc, screen, m_PrintParams.m_PenDefaultSize, - IU_PER_MILS, titleblockFilename ); #if defined (GERBVIEW) // In B&W mode, do not force black pen for Gerbview From 3f05c57f618cd29f4aa7bbb216dc205f18e2e624 Mon Sep 17 00:00:00 2001 From: Fabrizio Tappero Date: Wed, 12 Feb 2014 14:56:52 +0100 Subject: [PATCH 33/52] Some icons update --- bitmaps_png/cpp_26/find.cpp | 168 +- bitmaps_png/cpp_26/new_pcb.cpp | 125 +- bitmaps_png/cpp_48/icon_bitmap2component.cpp | 165 +- bitmaps_png/sources/find.svg | 435 +++- bitmaps_png/sources/icon_bitmap2component.svg | 1489 +----------- bitmaps_png/sources/new_pcb.svg | 2045 +++++++---------- 6 files changed, 1421 insertions(+), 3006 deletions(-) diff --git a/bitmaps_png/cpp_26/find.cpp b/bitmaps_png/cpp_26/find.cpp index d223aedacc..e57d2a01de 100644 --- a/bitmaps_png/cpp_26/find.cpp +++ b/bitmaps_png/cpp_26/find.cpp @@ -8,84 +8,96 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, - 0xce, 0x00, 0x00, 0x04, 0xbb, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x4b, 0x6c, 0x1b, - 0x55, 0x14, 0x86, 0xbf, 0x7b, 0x67, 0xfc, 0x4a, 0x1c, 0xdb, 0x72, 0xd3, 0x34, 0x4a, 0xe3, 0x28, - 0xa5, 0xb1, 0xe2, 0x3a, 0x21, 0x88, 0x22, 0x0a, 0x34, 0x52, 0xda, 0xaa, 0xa2, 0x5d, 0x20, 0xd2, - 0xec, 0x40, 0xa2, 0x11, 0x0b, 0x58, 0x50, 0x56, 0xac, 0x91, 0x8a, 0x58, 0x21, 0x58, 0x74, 0xd3, - 0x15, 0xad, 0x94, 0x45, 0x57, 0x45, 0x42, 0x42, 0x65, 0x55, 0xb1, 0xa0, 0x40, 0xc5, 0x06, 0xa5, - 0x4f, 0x35, 0xcd, 0x4b, 0x4e, 0x1f, 0x4e, 0x5b, 0x8b, 0x46, 0x69, 0x1c, 0xb7, 0x71, 0x33, 0x9e, - 0xc7, 0x61, 0x41, 0xc6, 0xb2, 0x63, 0x07, 0xe8, 0x86, 0x2b, 0xfd, 0x9a, 0x3b, 0x9a, 0x3b, 0xf7, - 0x3f, 0xff, 0x39, 0x67, 0xfe, 0x3b, 0x4a, 0x44, 0xf8, 0x3f, 0x86, 0x09, 0x70, 0xf6, 0xec, 0xd9, - 0xf3, 0x4a, 0xa9, 0xf7, 0x4d, 0xd3, 0xc4, 0x30, 0x0c, 0x44, 0x04, 0xc7, 0x71, 0x70, 0x5d, 0x17, - 0xc7, 0x71, 0xaa, 0x78, 0xd1, 0x7b, 0xad, 0xf5, 0xb7, 0x13, 0x13, 0x13, 0x27, 0x00, 0x38, 0x7d, - 0xfa, 0x74, 0xec, 0xcc, 0x99, 0x33, 0x15, 0xdb, 0xb6, 0xc5, 0x75, 0xdd, 0xa6, 0x70, 0x1c, 0xa7, - 0x0a, 0xdb, 0xb6, 0xeb, 0x50, 0xa9, 0x54, 0xaa, 0xb0, 0x2c, 0xab, 0x8a, 0x52, 0xa9, 0x24, 0xe3, - 0xe3, 0xe3, 0x9e, 0x88, 0x20, 0x22, 0x98, 0xae, 0xeb, 0x6a, 0xad, 0xb5, 0xa7, 0x94, 0x22, 0x9f, - 0xcf, 0xa3, 0x94, 0x02, 0x40, 0x29, 0x55, 0x37, 0x6f, 0x76, 0xdd, 0x6a, 0x68, 0xad, 0x49, 0x24, - 0x12, 0x88, 0x88, 0xaa, 0x4b, 0x9d, 0xe7, 0x79, 0x4d, 0x37, 0x6f, 0x36, 0xff, 0x2f, 0x44, 0xcd, - 0x9e, 0x9b, 0x00, 0xae, 0xeb, 0x02, 0x50, 0x2a, 0x95, 0x58, 0x59, 0x59, 0xa1, 0xa7, 0xa7, 0x07, - 0xad, 0x35, 0x0b, 0x0b, 0x0b, 0x6c, 0x6e, 0x96, 0x7f, 0x22, 0x11, 0x11, 0xfa, 0xfb, 0xfb, 0xab, - 0x6b, 0x6a, 0xdf, 0x6d, 0x50, 0xd4, 0xd7, 0xd7, 0x47, 0x28, 0x14, 0xa2, 0x5c, 0x2e, 0x93, 0x4e, - 0xa7, 0x5f, 0x28, 0x7d, 0x22, 0x82, 0xd6, 0x1a, 0xad, 0x75, 0x23, 0xd1, 0xea, 0xea, 0x2a, 0x89, - 0x44, 0x02, 0x80, 0x44, 0x22, 0x81, 0x52, 0x0a, 0xcb, 0xb2, 0x50, 0x4a, 0x91, 0xcb, 0xe5, 0xea, - 0x16, 0x6f, 0xde, 0x5c, 0x44, 0x18, 0x18, 0x18, 0xd8, 0x32, 0x75, 0x0d, 0x8a, 0x5c, 0xd7, 0x45, - 0x44, 0x50, 0x4a, 0x55, 0x1f, 0x2a, 0xa5, 0x48, 0xa7, 0xd3, 0xd5, 0xe8, 0x9a, 0x35, 0x87, 0xaf, - 0x60, 0x33, 0xb9, 0xbf, 0xb6, 0x81, 0xc8, 0x71, 0x9c, 0xa6, 0x11, 0xfd, 0x9b, 0xa2, 0x66, 0x0a, - 0xb3, 0xd9, 0x6c, 0xf5, 0xde, 0x2f, 0x49, 0x43, 0x33, 0xf8, 0x91, 0xf8, 0x1b, 0xf8, 0x85, 0xad, - 0x55, 0x92, 0xcb, 0xe5, 0xb0, 0x6d, 0x9b, 0xb6, 0xb6, 0x36, 0x4c, 0xd3, 0xa4, 0x58, 0x2c, 0xb2, - 0xbe, 0xbe, 0x4e, 0x36, 0x9b, 0x25, 0x14, 0x0a, 0xd5, 0x29, 0x6c, 0x20, 0xb2, 0x6d, 0xbb, 0x4e, - 0xb2, 0xbf, 0xf1, 0xfc, 0xfc, 0x7c, 0x55, 0x91, 0x65, 0x59, 0x88, 0x08, 0x83, 0x43, 0xaf, 0xf0, - 0xd3, 0xd5, 0x87, 0x4c, 0xdd, 0x5c, 0xc2, 0x71, 0x3c, 0xd2, 0xdd, 0x09, 0xde, 0x79, 0xa3, 0x8f, - 0xc5, 0xc5, 0xfb, 0x14, 0x0a, 0x05, 0x46, 0x46, 0x46, 0x30, 0x0c, 0xa3, 0x91, 0xa8, 0x58, 0x2c, - 0x12, 0x8b, 0xc5, 0xea, 0xd2, 0xb1, 0x59, 0x91, 0xe7, 0x79, 0xcc, 0xcc, 0xcc, 0xd0, 0xb2, 0xbd, - 0x97, 0x93, 0xe7, 0xae, 0x71, 0x6c, 0x64, 0x0f, 0x1f, 0x0e, 0xec, 0xc2, 0xb2, 0x3d, 0xee, 0x14, - 0x56, 0xf9, 0xea, 0xbb, 0x9b, 0x1c, 0x7d, 0xb5, 0x93, 0x3d, 0xe9, 0x34, 0x4b, 0x4b, 0x4b, 0x74, - 0x76, 0x76, 0x36, 0x57, 0xe4, 0x38, 0x4e, 0xc3, 0x47, 0x09, 0x30, 0x37, 0x37, 0x87, 0x88, 0xf0, - 0xf8, 0xf1, 0x63, 0x5e, 0x7f, 0x73, 0x98, 0x2f, 0xce, 0x5d, 0xe5, 0xb3, 0xf7, 0xf6, 0xd1, 0xb5, - 0x2d, 0x8a, 0xe3, 0x7a, 0x94, 0x2d, 0x9b, 0x4c, 0x77, 0x8c, 0x64, 0x6c, 0x88, 0xef, 0x7f, 0xbe, - 0x4d, 0x3a, 0xd5, 0xcf, 0xfd, 0x85, 0x5b, 0x74, 0x74, 0x74, 0x6c, 0x5d, 0xa3, 0x66, 0xa9, 0xcb, - 0x64, 0x32, 0x68, 0xad, 0xb1, 0x2c, 0x8b, 0x1f, 0x7e, 0xbf, 0xcb, 0xdb, 0x6f, 0xf5, 0x13, 0x8f, - 0x46, 0x70, 0x3c, 0x01, 0xa5, 0x09, 0x06, 0x02, 0x78, 0x68, 0x44, 0x2a, 0xbc, 0x36, 0xd8, 0xc3, - 0xc4, 0xc5, 0x69, 0x4e, 0x1c, 0xdd, 0xc5, 0xf2, 0xf2, 0x32, 0x91, 0x48, 0xa4, 0xb9, 0xa2, 0x66, - 0x63, 0x7e, 0x7e, 0x1e, 0xdb, 0xb6, 0x31, 0x4d, 0x93, 0x85, 0x47, 0x25, 0x76, 0xf7, 0xec, 0xe0, - 0xe9, 0xb3, 0x32, 0xeb, 0xa6, 0x42, 0x21, 0xb8, 0xae, 0xc7, 0xda, 0xba, 0xcd, 0x83, 0x47, 0x4b, - 0xd8, 0x15, 0xe1, 0xb9, 0xe5, 0x10, 0x0e, 0x87, 0x29, 0x14, 0x0a, 0x74, 0x77, 0x77, 0xd7, 0xfb, - 0x5f, 0xb1, 0x58, 0xac, 0x76, 0xdd, 0xe6, 0x3a, 0x65, 0x32, 0x19, 0x32, 0x99, 0x0c, 0x86, 0x61, - 0x60, 0x1a, 0x0a, 0xcc, 0x20, 0xda, 0x0c, 0x12, 0x0c, 0x86, 0x88, 0x44, 0x22, 0x44, 0x5a, 0x5a, - 0xc0, 0x0c, 0x93, 0xda, 0xd9, 0x49, 0x57, 0xe7, 0x76, 0x42, 0xc1, 0x00, 0x96, 0x65, 0xe1, 0x79, - 0x5e, 0x43, 0x19, 0xaa, 0x8a, 0x6a, 0x53, 0xe7, 0x8f, 0xd9, 0xd9, 0x59, 0x3c, 0xcf, 0x63, 0x6d, - 0x6d, 0x8d, 0xc1, 0xde, 0x76, 0xae, 0xdc, 0xbe, 0xc7, 0xb3, 0xd5, 0x36, 0xa2, 0x21, 0x8d, 0x16, - 0x07, 0x25, 0x36, 0xcf, 0x6d, 0xc5, 0xba, 0xa3, 0x58, 0x29, 0x7b, 0x84, 0x03, 0x42, 0xb9, 0x5c, - 0x26, 0x99, 0x4c, 0x36, 0x3a, 0xba, 0xdf, 0xde, 0x00, 0x4f, 0x9e, 0x3c, 0x61, 0x7a, 0x7a, 0x1a, - 0xcb, 0xb2, 0xaa, 0x35, 0x1a, 0x1c, 0x1c, 0x44, 0x6b, 0xcd, 0xb1, 0xfd, 0xbb, 0x78, 0xf8, 0xe7, - 0x53, 0x08, 0x44, 0x69, 0x8d, 0x6f, 0x63, 0xfb, 0x8e, 0x9d, 0x74, 0xa5, 0x76, 0xd3, 0xd3, 0xd3, - 0x4b, 0x47, 0x67, 0x17, 0x33, 0xf9, 0xa7, 0x7c, 0x3a, 0x3a, 0xc4, 0xf5, 0xeb, 0xd7, 0x49, 0xa5, - 0x52, 0xcd, 0xdd, 0xdb, 0xaf, 0x91, 0x61, 0x18, 0xa4, 0xd3, 0x69, 0x5a, 0x5b, 0x5b, 0xa9, 0x54, - 0x2a, 0xcc, 0xce, 0xce, 0x22, 0x22, 0x84, 0xc3, 0x61, 0x2e, 0x5f, 0xfe, 0x8d, 0x93, 0xe3, 0x07, - 0xf8, 0xe6, 0xfc, 0x24, 0xd1, 0x48, 0x80, 0x9d, 0xed, 0x61, 0xa2, 0xad, 0x11, 0xd6, 0x2a, 0x26, - 0x53, 0xb9, 0x02, 0x9f, 0xbc, 0x3b, 0x40, 0x40, 0x39, 0x58, 0x96, 0xc5, 0xe4, 0xe4, 0x24, 0xc3, - 0xc3, 0xc3, 0xf5, 0x44, 0xc5, 0x62, 0x91, 0x78, 0x3c, 0x8e, 0x88, 0x10, 0x8f, 0xc7, 0xd1, 0x5a, - 0x57, 0x15, 0xf6, 0xf7, 0xf7, 0x63, 0x18, 0x06, 0x4a, 0x29, 0x8a, 0xc5, 0x22, 0xd7, 0xfe, 0xb8, - 0xcc, 0x97, 0xe3, 0xc3, 0xdc, 0x5b, 0x5a, 0xe7, 0xd6, 0x9d, 0x65, 0xca, 0x65, 0x9b, 0x97, 0x5f, - 0x4a, 0xf0, 0xc1, 0x81, 0x7d, 0x5c, 0xbd, 0x32, 0x89, 0x93, 0x48, 0x10, 0x0a, 0x85, 0xc8, 0xe7, - 0xf3, 0x2c, 0x2e, 0x2e, 0x36, 0xa6, 0xae, 0xb6, 0xeb, 0x6a, 0xbd, 0xad, 0xd6, 0x50, 0x93, 0xc9, - 0x24, 0x87, 0x0f, 0x1f, 0x26, 0x97, 0xcb, 0xf1, 0x60, 0xee, 0x0a, 0xa9, 0xd0, 0x12, 0x43, 0x1d, - 0xcf, 0x59, 0xbe, 0x7b, 0x8d, 0x5f, 0x7f, 0xb9, 0x44, 0xa9, 0x54, 0x22, 0x9f, 0xcf, 0xfb, 0x27, - 0x2b, 0x22, 0x42, 0x7b, 0x7b, 0x3b, 0xa3, 0xa3, 0xa3, 0x2d, 0x00, 0x66, 0x20, 0x10, 0x10, 0xcb, - 0xb2, 0xb4, 0xaf, 0xa8, 0xd6, 0xa7, 0x6a, 0x7d, 0xcb, 0x0f, 0x60, 0xef, 0xde, 0xbd, 0x78, 0x9e, - 0x87, 0xeb, 0xba, 0xd8, 0xb6, 0x5d, 0xb5, 0x1b, 0xa5, 0x14, 0x97, 0x2e, 0xfd, 0x4d, 0xd8, 0xd6, - 0xd6, 0x46, 0xa5, 0x52, 0xe1, 0xe0, 0xc1, 0x83, 0x4c, 0x4d, 0x4d, 0xcd, 0x1f, 0x39, 0x72, 0x64, - 0x9f, 0x02, 0x92, 0x63, 0x63, 0x63, 0x3f, 0x2a, 0xa5, 0xf6, 0xfb, 0x2f, 0xd5, 0xda, 0xbd, 0x3f, - 0xf7, 0x3c, 0xaf, 0xee, 0xea, 0xc3, 0x3f, 0x0e, 0x6a, 0x8f, 0x86, 0x43, 0x87, 0x0e, 0xe9, 0xde, - 0xde, 0x5e, 0x5a, 0x5a, 0x5a, 0x48, 0xa5, 0x52, 0x9c, 0x3a, 0x75, 0xea, 0xa2, 0x09, 0x78, 0x17, - 0x2e, 0x5c, 0xf8, 0x38, 0x16, 0x8b, 0xf5, 0x2a, 0xa5, 0xa2, 0x7e, 0x83, 0x00, 0x0a, 0x10, 0x40, - 0x89, 0x88, 0x29, 0x22, 0x06, 0x60, 0x88, 0x88, 0x21, 0x22, 0xda, 0x9f, 0x6f, 0xa4, 0x5f, 0x01, - 0x9e, 0x52, 0xca, 0x03, 0xec, 0x1b, 0x37, 0x6e, 0xc4, 0x8e, 0x1f, 0x3f, 0xfe, 0xf9, 0xd8, 0xd8, - 0x58, 0x3c, 0x1a, 0x8d, 0x12, 0x0c, 0x06, 0x5d, 0xb5, 0x11, 0x8d, 0x06, 0xc2, 0x1b, 0x08, 0x6e, - 0xf5, 0x73, 0xb3, 0x11, 0x84, 0xb1, 0x01, 0x5d, 0x43, 0xc2, 0x46, 0x50, 0x02, 0xb8, 0xc0, 0x7a, - 0x2a, 0x95, 0xf2, 0xb2, 0xd9, 0xec, 0x47, 0xf1, 0x78, 0x3c, 0xb9, 0xbc, 0xbc, 0xfc, 0xf5, 0x5f, - 0x8c, 0x86, 0xc8, 0x61, 0x09, 0x89, 0x45, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, - 0xae, 0x42, 0x60, 0x82, + 0xce, 0x00, 0x00, 0x05, 0x7d, 0x49, 0x44, 0x41, 0x54, 0x48, 0x4b, 0xbd, 0x95, 0xd9, 0x4f, 0x54, + 0x67, 0x18, 0xc6, 0x69, 0xaf, 0x9a, 0x36, 0x05, 0xda, 0x9b, 0x36, 0xbd, 0xed, 0x45, 0xfb, 0x87, + 0x34, 0xe9, 0x0d, 0x91, 0x75, 0x2c, 0xbb, 0x06, 0x4c, 0x34, 0x46, 0x22, 0x2d, 0x09, 0x04, 0x90, + 0xcd, 0x85, 0x04, 0x8b, 0x28, 0x16, 0x94, 0x4d, 0x36, 0x45, 0x10, 0x18, 0x86, 0x75, 0x70, 0x1a, + 0xa2, 0xec, 0xc8, 0x80, 0xc8, 0x3e, 0x08, 0x38, 0x1b, 0x30, 0x2c, 0xb3, 0x00, 0x0e, 0xe8, 0x08, + 0xd2, 0xa7, 0xdf, 0xfb, 0xea, 0x39, 0x72, 0xac, 0x4d, 0xd3, 0x34, 0xe9, 0x24, 0xcf, 0xcc, 0x9c, + 0x93, 0x73, 0xbe, 0xdf, 0xf7, 0xbc, 0xdb, 0xe7, 0x05, 0xc0, 0xeb, 0xff, 0x10, 0x7f, 0x15, 0x17, + 0x17, 0xd7, 0x96, 0x94, 0x94, 0xa0, 0xbc, 0xbc, 0x1c, 0x55, 0x55, 0x55, 0xa8, 0xac, 0xac, 0x44, + 0x59, 0x59, 0x19, 0xc4, 0x7d, 0x14, 0x16, 0x16, 0x22, 0x3f, 0x3f, 0x1f, 0x57, 0xae, 0x5c, 0xc1, + 0xe5, 0xcb, 0x97, 0x91, 0x9d, 0x9d, 0x8d, 0xf3, 0xe7, 0xcf, 0x23, 0x3d, 0x3d, 0x1d, 0xa9, 0xa9, + 0xa9, 0x48, 0x4a, 0x4a, 0x42, 0x42, 0x42, 0x02, 0xce, 0x9e, 0x3d, 0x8b, 0x33, 0x67, 0xce, 0xe0, + 0xd4, 0xa9, 0x53, 0x38, 0x71, 0xe2, 0x04, 0x8e, 0x1f, 0x3f, 0x8e, 0x98, 0x98, 0x98, 0x9b, 0x32, + 0xe8, 0xfa, 0xf5, 0xeb, 0xde, 0x62, 0xc1, 0xbd, 0xfd, 0xfd, 0x7d, 0x1c, 0x1c, 0x1c, 0x7c, 0x50, + 0xaf, 0x5f, 0xbf, 0x96, 0x45, 0xcf, 0x1d, 0xd6, 0xde, 0xde, 0x9e, 0xac, 0x57, 0xaf, 0x5e, 0xc9, + 0x7a, 0xfe, 0xfc, 0x39, 0xa2, 0xa2, 0xa2, 0xfe, 0x90, 0x41, 0x57, 0xaf, 0x5e, 0xf5, 0x2d, 0x2d, + 0x2d, 0xf5, 0xd0, 0x22, 0x26, 0x93, 0x09, 0x66, 0xb3, 0x99, 0x65, 0xb1, 0x58, 0x60, 0xb5, 0x5a, + 0x59, 0x4b, 0x4b, 0x4b, 0x18, 0x1e, 0x1e, 0x46, 0x7b, 0x7b, 0x3b, 0x6e, 0xdf, 0xbe, 0xcd, 0xce, + 0x6b, 0x6b, 0x6b, 0xa1, 0xd3, 0xe9, 0x30, 0x3d, 0x3d, 0x8d, 0x95, 0x95, 0x15, 0x85, 0x56, 0x57, + 0x57, 0xf1, 0xf2, 0xe5, 0x4b, 0x44, 0x46, 0x46, 0x42, 0x01, 0x12, 0x8e, 0x18, 0x24, 0x01, 0x24, + 0x08, 0x01, 0xe6, 0xe7, 0xe7, 0x51, 0x53, 0x53, 0x83, 0xb1, 0xb1, 0x31, 0x38, 0x1c, 0x0e, 0x6c, + 0x6f, 0x6f, 0xc3, 0xe1, 0xda, 0xc4, 0xd6, 0xd6, 0x16, 0xd6, 0xd6, 0xd6, 0xa0, 0x56, 0xab, 0x79, + 0x03, 0xf4, 0xac, 0xcd, 0x66, 0x63, 0xd1, 0xfd, 0x0f, 0x82, 0x6e, 0xdc, 0xb8, 0xc1, 0xa0, 0xc9, + 0xc9, 0x49, 0xf4, 0xf4, 0xf4, 0xb0, 0x33, 0x82, 0x69, 0xb5, 0x5a, 0xdc, 0xbd, 0x7b, 0x17, 0x9b, + 0x9b, 0x9b, 0x68, 0xed, 0x99, 0x46, 0x58, 0x66, 0x33, 0x82, 0x52, 0x9b, 0xa0, 0x4a, 0xd7, 0x20, + 0xe4, 0x5c, 0x13, 0x7e, 0xc9, 0xd7, 0xc1, 0xb6, 0xe1, 0xe2, 0xcd, 0x88, 0x35, 0xd0, 0xd5, 0xd5, + 0xc5, 0x8e, 0xd6, 0xd7, 0xd7, 0x19, 0x14, 0x11, 0x11, 0xa1, 0x04, 0x15, 0x14, 0x14, 0x30, 0x68, + 0x6a, 0x6a, 0x8a, 0x1f, 0xa4, 0x9d, 0x93, 0x3b, 0x2a, 0x0c, 0x72, 0x10, 0x2f, 0x16, 0x8c, 0xc9, + 0xe9, 0x84, 0x76, 0xc4, 0x8a, 0x09, 0xa3, 0x13, 0xa6, 0x75, 0x37, 0x9e, 0x2e, 0x6f, 0xa1, 0xee, + 0xe1, 0x02, 0x02, 0x52, 0xd4, 0xe8, 0x7d, 0xbc, 0x88, 0xd9, 0xd9, 0x59, 0xb4, 0xb4, 0xb4, 0x30, + 0xc4, 0x6e, 0xb7, 0x33, 0x28, 0x3c, 0x3c, 0xfc, 0x1d, 0x28, 0x33, 0x33, 0xd3, 0xf7, 0xda, 0xb5, + 0x6b, 0x0c, 0x92, 0xec, 0x13, 0x4c, 0xa3, 0xd1, 0xc0, 0x68, 0x34, 0xa2, 0xac, 0x59, 0x8f, 0x58, + 0x01, 0x69, 0x1b, 0x5a, 0xc4, 0xe3, 0xf9, 0x35, 0xcc, 0x5a, 0x1c, 0x30, 0xad, 0x8a, 0xb0, 0xb9, + 0x76, 0x61, 0x73, 0xb8, 0xd1, 0x33, 0xb5, 0x0a, 0xff, 0x64, 0x35, 0xec, 0xae, 0x6d, 0x34, 0x34, + 0x34, 0x70, 0x54, 0x68, 0xa3, 0x04, 0x0a, 0x0b, 0x0b, 0x53, 0x82, 0x44, 0xe9, 0x7a, 0xa8, 0x82, + 0x96, 0x97, 0x97, 0xe5, 0x84, 0x8a, 0xfb, 0x70, 0x8a, 0x5c, 0xd0, 0x22, 0x45, 0x5a, 0x03, 0x3a, + 0x47, 0x97, 0xd8, 0xcd, 0x9c, 0x70, 0x62, 0x5a, 0x73, 0x63, 0xc9, 0xbe, 0xc3, 0x32, 0x0b, 0x77, + 0x85, 0x2d, 0x93, 0xb8, 0x54, 0xd9, 0x83, 0xb9, 0xb9, 0x39, 0xb4, 0xb6, 0xb6, 0xc2, 0xe9, 0x74, + 0xc2, 0xe3, 0xf1, 0x20, 0x34, 0x34, 0x54, 0x09, 0xca, 0xc9, 0xc9, 0x51, 0x80, 0x9e, 0x3d, 0x7b, + 0xc6, 0xa0, 0xc1, 0x27, 0x0b, 0x88, 0xbe, 0xd8, 0x86, 0x5f, 0xef, 0xe9, 0x51, 0xdc, 0x36, 0x8e, + 0xc1, 0x99, 0x15, 0x8c, 0x0a, 0x57, 0x93, 0x46, 0x3b, 0x66, 0xcd, 0x76, 0x18, 0x2c, 0x76, 0xcc, + 0x98, 0xd6, 0xd1, 0x31, 0x60, 0x40, 0x44, 0x96, 0x86, 0x0b, 0xe8, 0xd6, 0xad, 0x5b, 0x32, 0xe8, + 0xe8, 0xd1, 0xa3, 0x4a, 0x90, 0x68, 0x42, 0x06, 0x11, 0x84, 0x42, 0xd7, 0xdb, 0xdb, 0x8b, 0xdc, + 0xdc, 0x5c, 0xdc, 0xd1, 0x8e, 0x22, 0xee, 0xb7, 0x07, 0x28, 0xee, 0x9c, 0x63, 0xb5, 0xe9, 0xad, + 0x18, 0x59, 0xb0, 0x63, 0x5c, 0x38, 0x9b, 0xb5, 0x8a, 0x22, 0x58, 0xd9, 0xc2, 0xa2, 0xd0, 0xe3, + 0xf9, 0x75, 0x84, 0x65, 0x68, 0x38, 0xf4, 0xa2, 0x2f, 0xe1, 0x72, 0xb9, 0x18, 0x14, 0x12, 0x12, + 0xa2, 0x04, 0x65, 0x65, 0x65, 0x79, 0xa8, 0xe1, 0x08, 0x42, 0x3d, 0x40, 0x89, 0x8d, 0x8b, 0x8b, + 0xc3, 0x83, 0x47, 0xd3, 0x88, 0xbc, 0xd0, 0x82, 0xdc, 0xfa, 0x11, 0x59, 0xd5, 0xbf, 0xcf, 0xe0, + 0xe1, 0x13, 0x33, 0x06, 0xa6, 0x2c, 0x18, 0x9e, 0xb6, 0x60, 0x64, 0xc6, 0x8c, 0xd6, 0xee, 0x31, + 0x44, 0xbe, 0x75, 0x54, 0x54, 0x54, 0xc4, 0xa5, 0x4f, 0xa0, 0xa0, 0xa0, 0xa0, 0x77, 0xa0, 0xf8, + 0xf8, 0x78, 0x5f, 0x31, 0x4e, 0x64, 0x10, 0xf5, 0x00, 0x55, 0x0e, 0x55, 0x8c, 0x75, 0x69, 0x19, + 0x7e, 0x49, 0x0d, 0xec, 0xa6, 0xe4, 0xfe, 0x53, 0x59, 0x77, 0x1e, 0x2c, 0xa2, 0x5d, 0x6f, 0x41, + 0xef, 0xe4, 0x0a, 0x1e, 0x19, 0x6c, 0xa8, 0xd2, 0x4d, 0xe1, 0x62, 0xf9, 0x43, 0xce, 0x51, 0x63, + 0x63, 0xa3, 0x0c, 0x0a, 0x08, 0x08, 0x50, 0x82, 0x52, 0x52, 0x52, 0x38, 0x74, 0xe4, 0x46, 0x02, + 0xd1, 0x2c, 0x1b, 0x1a, 0x1a, 0x42, 0x91, 0xfa, 0x91, 0xa8, 0x3a, 0xad, 0xc2, 0x55, 0xbe, 0x5a, + 0x8f, 0xa2, 0xe6, 0x61, 0x54, 0xb4, 0x0d, 0xa3, 0xe6, 0xfe, 0x08, 0x54, 0x69, 0x1a, 0xac, 0x6e, + 0x38, 0x51, 0x5f, 0x5f, 0x8f, 0xf1, 0xf1, 0x71, 0x6e, 0x09, 0x02, 0x1d, 0x39, 0x72, 0x44, 0x09, + 0x12, 0x83, 0x91, 0x1d, 0x49, 0x90, 0x8d, 0x8d, 0x0d, 0x18, 0x0c, 0x06, 0x1c, 0x3b, 0x76, 0x8c, + 0x9b, 0x35, 0x2e, 0x4f, 0x8b, 0xa8, 0x4b, 0x5a, 0xdc, 0xd4, 0xce, 0xa1, 0x54, 0x37, 0x8f, 0x8a, + 0xae, 0x05, 0xdc, 0xeb, 0x33, 0xa2, 0x40, 0x54, 0x1b, 0x35, 0x70, 0xff, 0xb8, 0x91, 0x1b, 0x5c, + 0xb4, 0x09, 0xfa, 0xfb, 0xfb, 0x79, 0xce, 0x51, 0x79, 0xfb, 0xf9, 0xf9, 0x29, 0x41, 0x62, 0xfa, + 0xfe, 0x05, 0x44, 0xbf, 0x34, 0xb9, 0xd3, 0xd2, 0xd2, 0xde, 0x4c, 0x86, 0xde, 0x19, 0xa8, 0xce, + 0xa9, 0x45, 0xb9, 0x37, 0x20, 0x38, 0x55, 0xcd, 0xfa, 0x39, 0xff, 0x3e, 0xd6, 0x1c, 0x5b, 0xfc, + 0xbc, 0x5e, 0xaf, 0xe7, 0x86, 0xad, 0xae, 0xae, 0xe6, 0x89, 0xf2, 0xe2, 0xc5, 0x0b, 0x25, 0x48, + 0x8c, 0x73, 0x5f, 0x01, 0x53, 0x80, 0xa8, 0xb3, 0xe9, 0x65, 0x6a, 0xbc, 0xe6, 0xe6, 0x66, 0x9e, + 0x59, 0xb4, 0x53, 0x8a, 0xbd, 0x7b, 0x67, 0x87, 0x9b, 0x73, 0x77, 0x77, 0x97, 0x9f, 0xa3, 0xbe, + 0xa1, 0xbc, 0xd0, 0xa0, 0xcd, 0xc8, 0xc8, 0xe0, 0x69, 0x42, 0x21, 0x24, 0xf9, 0xfb, 0xfb, 0x2b, + 0x41, 0xe2, 0x1c, 0xf1, 0xd0, 0x68, 0x97, 0xdc, 0x48, 0x20, 0x5a, 0x9c, 0x4a, 0xbd, 0xb3, 0xb3, + 0x13, 0x89, 0x89, 0x89, 0x5c, 0x20, 0xd1, 0xd1, 0xd1, 0x7c, 0xf6, 0x9c, 0x3c, 0x79, 0x12, 0xc9, + 0xc9, 0xc9, 0xa8, 0xab, 0xab, 0x63, 0xe7, 0x4d, 0x4d, 0x4d, 0x5c, 0x71, 0x14, 0x01, 0x3a, 0xc7, + 0xe8, 0x9a, 0x7a, 0x51, 0x9c, 0x61, 0xdf, 0xc8, 0x20, 0xf1, 0x12, 0x83, 0x28, 0x2f, 0xdd, 0xdd, + 0xdd, 0xdc, 0xb8, 0x92, 0x23, 0xea, 0x09, 0x0a, 0x1d, 0xb9, 0xa1, 0x24, 0x93, 0x6b, 0x2a, 0x7f, + 0xba, 0xa6, 0xf0, 0x50, 0x2e, 0xe8, 0x3f, 0x0d, 0x5f, 0x1a, 0x41, 0x15, 0x15, 0x15, 0x5c, 0x48, + 0xd4, 0x4f, 0x14, 0x4a, 0x31, 0x75, 0x6c, 0x02, 0xf6, 0x3d, 0x83, 0x62, 0x63, 0x63, 0x19, 0x44, + 0x53, 0x98, 0x9a, 0x96, 0x5e, 0x94, 0x1c, 0xf5, 0xf5, 0xf5, 0xc9, 0xa2, 0xeb, 0x81, 0x81, 0x01, + 0xd6, 0xe0, 0xe0, 0x20, 0x9f, 0x45, 0x54, 0x5d, 0x14, 0x76, 0x02, 0xd2, 0x71, 0x41, 0x47, 0x0a, + 0x41, 0xc9, 0x0d, 0x9d, 0xd4, 0xa3, 0xa3, 0xa3, 0xe4, 0x4a, 0xe7, 0x25, 0x6a, 0xdd, 0x57, 0x54, + 0x97, 0x87, 0x5e, 0x90, 0xf2, 0x23, 0x85, 0x8e, 0x7e, 0xdf, 0x77, 0x44, 0x15, 0xb5, 0x23, 0xf2, + 0x44, 0x39, 0x22, 0x47, 0xf4, 0x9e, 0x74, 0xaa, 0xd2, 0x7f, 0xda, 0x10, 0xe5, 0x8b, 0xf2, 0x46, + 0x7d, 0x45, 0xbd, 0x99, 0x97, 0x97, 0xe7, 0x64, 0x90, 0x38, 0x37, 0x64, 0xd0, 0xe1, 0x1c, 0xd1, + 0xcc, 0x22, 0xd0, 0x61, 0x88, 0xdb, 0xed, 0x56, 0x80, 0xc8, 0xc9, 0x61, 0xd1, 0xbd, 0x89, 0x89, + 0x09, 0xce, 0x17, 0xb9, 0xee, 0xe8, 0xe8, 0x20, 0x47, 0x85, 0x5e, 0x2a, 0x95, 0xca, 0x47, 0xcc, + 0xa4, 0x3d, 0x7a, 0x88, 0x60, 0x92, 0xa4, 0xdd, 0x4a, 0x7a, 0x7f, 0xc1, 0x7f, 0x12, 0x39, 0x39, + 0x7d, 0xfa, 0x34, 0x41, 0x02, 0x85, 0x3e, 0xf2, 0x12, 0x9f, 0x2f, 0x85, 0xab, 0xbe, 0xc0, 0xc0, + 0xc0, 0x03, 0x01, 0x94, 0x15, 0x1c, 0x1c, 0xac, 0xb8, 0xfe, 0x3b, 0x89, 0x8d, 0x2a, 0x24, 0xdd, + 0x17, 0x53, 0x81, 0xd4, 0x26, 0xd6, 0xff, 0x9c, 0xab, 0x4e, 0x7c, 0x7c, 0x85, 0xbe, 0xf3, 0xf6, + 0xf6, 0xfe, 0xd1, 0xc7, 0xc7, 0x27, 0x58, 0xe8, 0xa7, 0xb7, 0x0a, 0x3d, 0xf4, 0xff, 0xdf, 0x48, + 0xe5, 0xf3, 0x66, 0x9d, 0x1f, 0xc4, 0xba, 0xdf, 0x0a, 0x7d, 0xc6, 0xa0, 0xb7, 0xb4, 0x8f, 0x85, + 0x3e, 0x25, 0x77, 0x42, 0x5f, 0xff, 0x47, 0x7d, 0x25, 0xf4, 0x85, 0xd0, 0x27, 0x52, 0xb3, 0x92, + 0xfe, 0x04, 0xe6, 0x65, 0xc3, 0xbb, 0x89, 0x46, 0xb5, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, + 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE find_xpm[1] = {{ png, sizeof( png ), "find_xpm" }}; diff --git a/bitmaps_png/cpp_26/new_pcb.cpp b/bitmaps_png/cpp_26/new_pcb.cpp index 93e658d06f..9859d0419b 100644 --- a/bitmaps_png/cpp_26/new_pcb.cpp +++ b/bitmaps_png/cpp_26/new_pcb.cpp @@ -8,85 +8,52 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, - 0xce, 0x00, 0x00, 0x04, 0xd4, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0x49, 0x4f, 0x5d, - 0x75, 0x18, 0x87, 0x31, 0x6a, 0xe2, 0xc2, 0x98, 0xe8, 0x86, 0x8d, 0x89, 0x71, 0xa3, 0x18, 0x1a, - 0x59, 0x6a, 0x5c, 0xba, 0xe0, 0xdb, 0x98, 0x7e, 0x08, 0x16, 0x5d, 0xb0, 0x64, 0x86, 0x96, 0x05, - 0x94, 0x36, 0x1d, 0x80, 0x96, 0x99, 0x36, 0x05, 0x0a, 0x65, 0x86, 0x32, 0xcf, 0x73, 0x69, 0x65, - 0x86, 0x0b, 0x1c, 0xc6, 0x0b, 0xbc, 0xfe, 0x9e, 0x57, 0xcf, 0xe5, 0x5c, 0x5b, 0x63, 0x62, 0xe2, - 0x49, 0xde, 0x1c, 0xee, 0xff, 0x9c, 0xfb, 0x7b, 0xde, 0xf9, 0x92, 0x92, 0x92, 0x92, 0xf2, 0x45, - 0x5a, 0x5a, 0xda, 0x77, 0x19, 0x19, 0x19, 0x37, 0xfe, 0x0f, 0x4b, 0x4f, 0x4f, 0xff, 0x41, 0x8c, - 0x2f, 0x65, 0x29, 0xe9, 0xbf, 0xaf, 0xad, 0xc5, 0x36, 0xb7, 0xb6, 0x6c, 0x6b, 0x7b, 0xdb, 0xb6, - 0x77, 0x76, 0x6c, 0x71, 0x69, 0xc9, 0x76, 0xf7, 0xf6, 0x6c, 0x2f, 0x16, 0xb3, 0x2d, 0x9d, 0x2f, - 0x2e, 0x2e, 0x5a, 0x6c, 0x7f, 0x3f, 0x61, 0x73, 0xf3, 0xf3, 0x76, 0x70, 0x78, 0xe8, 0xb6, 0xba, - 0xba, 0x6a, 0x87, 0x41, 0x60, 0x83, 0xaf, 0x5f, 0x5b, 0x4d, 0x6d, 0xad, 0xad, 0xbe, 0x7d, 0xeb, - 0x9f, 0x03, 0x99, 0xdf, 0x8f, 0x8e, 0xe2, 0x62, 0xfc, 0x04, 0xe8, 0xc7, 0xb5, 0xb5, 0xb5, 0x60, - 0x71, 0x69, 0xd9, 0xd6, 0x37, 0x36, 0xdd, 0x9e, 0x3c, 0x7d, 0x6a, 0x23, 0xa3, 0xa3, 0x0e, 0xdd, - 0xd8, 0xd4, 0xe7, 0x27, 0x4f, 0x6c, 0x6a, 0x7a, 0xda, 0xc1, 0x38, 0xc0, 0xf3, 0xf5, 0xf5, 0x75, - 0xdb, 0x17, 0xf4, 0xa9, 0xfe, 0xde, 0x3f, 0x38, 0xb0, 0x87, 0x0f, 0x1f, 0x5a, 0x5e, 0x5e, 0x9e, - 0x03, 0x43, 0x27, 0x30, 0x81, 0x2e, 0xc5, 0xf8, 0xc5, 0x41, 0xeb, 0x1b, 0x1b, 0xc1, 0xca, 0x9b, - 0x37, 0xb6, 0xb4, 0xbc, 0x6c, 0x43, 0xc3, 0xc3, 0x46, 0x74, 0x2e, 0x3e, 0x35, 0xe5, 0xc2, 0x3b, - 0xbb, 0xbb, 0x56, 0x5f, 0x5f, 0xef, 0x91, 0x22, 0xfe, 0xa2, 0xa5, 0xc5, 0xe4, 0x9c, 0x0b, 0xd5, - 0xd4, 0xd4, 0xd8, 0xa1, 0xee, 0x8f, 0x1e, 0x3d, 0xb2, 0xfc, 0xfc, 0x7c, 0x1b, 0x1a, 0x1a, 0xf2, - 0x68, 0x42, 0x3b, 0x8a, 0x82, 0x36, 0x04, 0xea, 0xed, 0xeb, 0xb3, 0xb1, 0xf1, 0x71, 0x2b, 0x2c, - 0x2c, 0x74, 0x20, 0x69, 0xc4, 0xf3, 0xb9, 0xb9, 0x39, 0x4f, 0x17, 0x11, 0x8e, 0xca, 0x10, 0x6f, - 0x6d, 0x6d, 0x55, 0xe4, 0x1b, 0x2e, 0x54, 0x5b, 0x57, 0x87, 0x98, 0x3d, 0x7e, 0xfc, 0xd8, 0x0a, - 0x0a, 0x0a, 0x6c, 0x58, 0x8e, 0x1e, 0x1d, 0x1f, 0x27, 0xec, 0xf8, 0xe4, 0xe4, 0x1a, 0xb4, 0xb9, - 0xb9, 0x19, 0x90, 0xa6, 0x49, 0x45, 0x90, 0x93, 0x93, 0x63, 0xe5, 0x77, 0xef, 0x7a, 0x54, 0x6f, - 0xdf, 0xbd, 0x73, 0xef, 0x0f, 0x94, 0x9a, 0xd1, 0xb1, 0x31, 0x1b, 0x93, 0x21, 0xde, 0xda, 0xd6, - 0x66, 0x72, 0xce, 0x85, 0xea, 0x04, 0x3a, 0xd6, 0xbd, 0xb2, 0xb2, 0xd2, 0x9d, 0x1c, 0x19, 0x19, - 0xb1, 0x93, 0x93, 0x93, 0xa8, 0x45, 0x40, 0x5b, 0x5b, 0x01, 0x29, 0xa3, 0x0e, 0x39, 0xb9, 0xb9, - 0x96, 0x2b, 0x7b, 0xf9, 0xf2, 0xa5, 0xa9, 0x49, 0xac, 0x45, 0xde, 0x53, 0x54, 0x20, 0xe3, 0x8a, - 0x18, 0x71, 0x9e, 0xe1, 0x08, 0x42, 0xa4, 0xf4, 0xf4, 0xf4, 0xd4, 0xaa, 0xaa, 0xaa, 0xac, 0xa8, - 0xa8, 0xc8, 0xa3, 0x3e, 0x3d, 0x3b, 0xb3, 0x33, 0x19, 0x77, 0x3d, 0xbb, 0x06, 0xa9, 0xb3, 0x02, - 0xea, 0x30, 0x2d, 0x10, 0x90, 0x5c, 0x15, 0x15, 0x31, 0x0a, 0x4e, 0x9a, 0x54, 0x50, 0x1b, 0x9f, - 0x98, 0xb0, 0x09, 0x19, 0xe2, 0xed, 0xed, 0xed, 0xb6, 0xad, 0xd4, 0x02, 0x68, 0x6c, 0x6c, 0x74, - 0xd1, 0xea, 0xea, 0x6a, 0x2b, 0x2e, 0x2e, 0x76, 0x67, 0xce, 0xcf, 0xcf, 0xa3, 0x16, 0x01, 0x6d, - 0x6f, 0x07, 0x0b, 0x6a, 0xe1, 0xe9, 0x99, 0x19, 0x87, 0xe4, 0xa9, 0xa8, 0x80, 0x48, 0x4f, 0x9b, - 0xd2, 0x44, 0x6a, 0x26, 0x27, 0x27, 0xdd, 0x10, 0xef, 0xe8, 0xe8, 0xb0, 0x1d, 0xa5, 0x1a, 0x21, - 0x40, 0xdc, 0x01, 0x95, 0x94, 0x94, 0xb8, 0x33, 0xf1, 0x78, 0x3c, 0x61, 0x49, 0x20, 0xd5, 0x27, - 0x98, 0x90, 0x08, 0x20, 0x20, 0x74, 0x4f, 0xc7, 0xab, 0x57, 0x0e, 0x02, 0x48, 0x14, 0x74, 0x20, - 0x11, 0xe3, 0xfd, 0x2b, 0x3d, 0xdb, 0x55, 0x06, 0x10, 0x6a, 0x6a, 0x6a, 0xf2, 0x7b, 0x43, 0x43, - 0x43, 0x12, 0xe8, 0xe2, 0xe2, 0xe2, 0x7d, 0x90, 0xbc, 0x0b, 0x68, 0xe3, 0x59, 0x75, 0x18, 0x90, - 0x7c, 0x75, 0x4f, 0x67, 0x57, 0x97, 0xd7, 0x81, 0x88, 0x88, 0x82, 0x68, 0x00, 0xe1, 0x3d, 0x11, - 0xed, 0xe9, 0x7d, 0x84, 0x88, 0x08, 0x51, 0x3a, 0x2f, 0x04, 0xf1, 0x39, 0x34, 0xbd, 0x93, 0x0c, - 0x1a, 0x18, 0x18, 0xf0, 0x89, 0x07, 0x42, 0x9b, 0x76, 0x75, 0x77, 0x5b, 0xbf, 0xce, 0x00, 0x13, - 0x05, 0x83, 0x49, 0xe1, 0x11, 0xe7, 0x79, 0xd8, 0x81, 0xb7, 0x6e, 0xdd, 0xf2, 0xe8, 0x2e, 0x2f, - 0x2f, 0xed, 0xf6, 0xed, 0xdb, 0xee, 0x10, 0x7f, 0x87, 0x26, 0xd8, 0x35, 0x48, 0x2f, 0x06, 0x0c, - 0xdd, 0xbc, 0x40, 0x88, 0x14, 0xa8, 0x4d, 0x7b, 0x7a, 0x7a, 0x6c, 0x60, 0x70, 0xd0, 0xca, 0xcb, - 0xcb, 0x3d, 0x8a, 0xe6, 0xe6, 0x66, 0x7b, 0xfe, 0xfc, 0xb9, 0x83, 0x2a, 0x2a, 0x2a, 0xbc, 0xbb, - 0x18, 0x5e, 0xc4, 0x19, 0xde, 0x10, 0x44, 0x8a, 0xaf, 0xae, 0xae, 0x12, 0xf6, 0x1e, 0x68, 0x76, - 0x76, 0xd6, 0x16, 0x16, 0x16, 0x1c, 0xc4, 0x3c, 0xf4, 0xf6, 0xf6, 0xba, 0xa7, 0x9c, 0x21, 0x8e, - 0x18, 0x5d, 0x48, 0x3a, 0x38, 0x63, 0xb6, 0x10, 0x47, 0x98, 0xe7, 0x88, 0xfe, 0x3b, 0x68, 0x6f, - 0x2f, 0x60, 0x66, 0x58, 0x9e, 0x40, 0x98, 0x87, 0x3e, 0x6d, 0x0a, 0x22, 0x09, 0xbb, 0x27, 0xcc, - 0x79, 0x34, 0x2d, 0x51, 0x41, 0xae, 0x3b, 0x77, 0xee, 0x78, 0x1d, 0xa3, 0xe7, 0x7a, 0xef, 0x1a, - 0xa4, 0xc2, 0x06, 0x74, 0x18, 0xbb, 0x0c, 0x08, 0x46, 0xcd, 0xfe, 0x09, 0xf2, 0x77, 0x00, 0x17, - 0xe7, 0xd1, 0xae, 0x0b, 0x9d, 0x4c, 0xea, 0x3a, 0x40, 0xaf, 0xb5, 0x75, 0x89, 0x08, 0x08, 0x83, - 0x37, 0xa8, 0xfa, 0xd0, 0x04, 0xd4, 0x01, 0x08, 0xb3, 0x44, 0x9b, 0x23, 0x4e, 0x13, 0x20, 0xcc, - 0x15, 0xd3, 0x46, 0x47, 0x90, 0x77, 0xc9, 0x06, 0xbb, 0x2e, 0xba, 0x54, 0xf5, 0xbd, 0x64, 0x90, - 0x96, 0x9f, 0x2d, 0x6b, 0x99, 0x86, 0x20, 0xc0, 0xec, 0xad, 0x07, 0x0f, 0x1e, 0x38, 0xa8, 0x45, - 0x3b, 0x8f, 0x99, 0x02, 0xc4, 0xd9, 0x8c, 0x66, 0x8e, 0x06, 0xe2, 0x5d, 0xea, 0xc7, 0xdf, 0x6c, - 0x15, 0x52, 0xce, 0x30, 0x87, 0x26, 0x47, 0x2f, 0xc4, 0xf8, 0xf9, 0x4f, 0x50, 0x2c, 0x16, 0xd0, - 0x96, 0x51, 0x10, 0xeb, 0x1e, 0x18, 0xe9, 0xc0, 0x7b, 0x06, 0x92, 0x99, 0x01, 0x54, 0x5a, 0x5a, - 0xea, 0x9e, 0x13, 0x4d, 0x76, 0x76, 0xb6, 0xd7, 0x05, 0xd1, 0xce, 0xce, 0x4e, 0xdf, 0xf6, 0x2b, - 0x2b, 0x2b, 0x6e, 0x4b, 0x2a, 0x85, 0x96, 0xed, 0x0b, 0x31, 0xbe, 0x71, 0x90, 0xbe, 0xe0, 0xed, - 0xbd, 0xac, 0x87, 0x40, 0xe8, 0x1e, 0xa2, 0xa1, 0x6e, 0x00, 0x00, 0xf1, 0x19, 0xe3, 0xe2, 0x8c, - 0x67, 0xa4, 0xb3, 0x5b, 0xf3, 0x46, 0x84, 0x6c, 0x88, 0x67, 0xcf, 0x9e, 0xf9, 0x1c, 0x01, 0x60, - 0xe7, 0x49, 0xab, 0x49, 0xfa, 0xdf, 0xca, 0x3e, 0x4d, 0x80, 0xf8, 0x49, 0x7e, 0xa3, 0x1f, 0xbf, - 0xb2, 0xb2, 0x32, 0x5f, 0x9a, 0xe4, 0x1c, 0x8f, 0xbb, 0xb4, 0x21, 0x00, 0x31, 0x63, 0x18, 0x17, - 0x67, 0x2c, 0x55, 0x9c, 0x23, 0x12, 0xc4, 0xef, 0xdd, 0xbf, 0xef, 0xcf, 0x38, 0xc7, 0xa1, 0xac, - 0xac, 0xac, 0x7b, 0x7f, 0x45, 0xf2, 0x89, 0x8e, 0x53, 0x12, 0x20, 0xc2, 0xa7, 0xd8, 0x14, 0x3f, - 0xec, 0x36, 0xd2, 0xc3, 0x5c, 0x84, 0x20, 0xe6, 0x87, 0xd4, 0x21, 0xdc, 0xdf, 0xdf, 0xef, 0x8e, - 0xe8, 0xb7, 0xcc, 0xcf, 0x59, 0x4b, 0x44, 0xa9, 0x26, 0xba, 0xba, 0x79, 0xf3, 0x66, 0xbe, 0x74, - 0xbf, 0x0e, 0x21, 0x49, 0x20, 0x3a, 0x84, 0x28, 0x80, 0x91, 0x12, 0x06, 0x16, 0x50, 0xd8, 0xd2, - 0x51, 0x10, 0xad, 0x4b, 0xd1, 0xf9, 0x09, 0x21, 0x0b, 0x44, 0x40, 0x5b, 0x2b, 0x8d, 0xf1, 0xcc, - 0xcc, 0xcc, 0xdf, 0xa4, 0x99, 0x2a, 0xfb, 0x38, 0x84, 0x24, 0x81, 0x78, 0x19, 0x10, 0xf3, 0x43, - 0x87, 0x11, 0x61, 0x74, 0x76, 0x58, 0x9a, 0x38, 0x10, 0x82, 0xf8, 0xcc, 0x08, 0xf0, 0xf3, 0xc0, - 0xff, 0x0d, 0x5a, 0x51, 0xfb, 0xa9, 0xa9, 0xa9, 0xbf, 0x4a, 0xef, 0x73, 0xd9, 0x47, 0x51, 0x48, - 0x08, 0xba, 0xa1, 0xf6, 0x5c, 0x93, 0x48, 0x5c, 0xd1, 0xc4, 0xb5, 0xa9, 0x13, 0x26, 0x70, 0x5c, - 0xa2, 0x09, 0xe3, 0xe2, 0xce, 0x33, 0x65, 0x20, 0xae, 0x34, 0xc7, 0x55, 0x93, 0xb8, 0x20, 0xbd, - 0xd2, 0xf9, 0x5e, 0xf6, 0xd9, 0x87, 0x20, 0x21, 0x88, 0x7f, 0xee, 0xd2, 0x65, 0x19, 0xff, 0xd1, - 0xf8, 0xee, 0x57, 0xd1, 0x7a, 0x7c, 0xc8, 0xfe, 0x00, 0x0a, 0x0d, 0x10, 0x76, 0xc6, 0x00, 0x96, - 0x87, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, + 0xce, 0x00, 0x00, 0x02, 0xbc, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0xb1, 0x6e, 0x1b, + 0x47, 0x10, 0x86, 0xbf, 0x99, 0x3b, 0x16, 0x76, 0xc3, 0xe8, 0x00, 0x35, 0x24, 0x61, 0x50, 0x4f, + 0xe2, 0x56, 0x2f, 0xa1, 0x57, 0x48, 0xa0, 0x52, 0x11, 0x54, 0x07, 0x10, 0x90, 0x56, 0xb0, 0xe1, + 0xca, 0xae, 0xf8, 0x00, 0x2e, 0xd9, 0xa4, 0x15, 0x60, 0x40, 0x10, 0xd2, 0xa4, 0x10, 0xa1, 0x44, + 0xe1, 0x11, 0x48, 0x63, 0x8b, 0x80, 0x62, 0x92, 0xb7, 0xb7, 0xeb, 0xc2, 0xdc, 0xe3, 0xde, 0xf2, + 0x8e, 0xb4, 0x81, 0x64, 0x81, 0xc5, 0xce, 0x2d, 0xee, 0xf6, 0x9f, 0x6f, 0x66, 0x67, 0x70, 0x02, + 0x0c, 0x81, 0x01, 0x90, 0xf2, 0xff, 0x0c, 0x03, 0xfc, 0x9d, 0x02, 0x2f, 0x3e, 0x7e, 0xfc, 0xf4, + 0x9b, 0x31, 0x06, 0x51, 0x41, 0x64, 0x3d, 0x01, 0xc2, 0x55, 0x04, 0xe0, 0xeb, 0xf3, 0x7a, 0xaf, + 0x7a, 0x16, 0x69, 0x55, 0x49, 0x92, 0x84, 0xe7, 0xcf, 0x9e, 0xbd, 0x4c, 0x01, 0x2d, 0x8a, 0x15, + 0x77, 0x77, 0x13, 0x86, 0x47, 0x47, 0xa8, 0x2a, 0xaa, 0xeb, 0x43, 0x62, 0x51, 0xd9, 0xec, 0xe3, + 0x1c, 0x02, 0xb8, 0xc0, 0xa6, 0x41, 0xd4, 0x59, 0x0b, 0xa0, 0x29, 0x80, 0x26, 0x09, 0xfd, 0x7e, + 0x8f, 0x24, 0xd1, 0xcd, 0xe1, 0x91, 0xc0, 0x16, 0x61, 0xb8, 0xc6, 0x84, 0xc1, 0xf0, 0xce, 0xa9, + 0xdf, 0xc8, 0xf3, 0xbc, 0x4e, 0x21, 0x82, 0xa8, 0xa2, 0xb1, 0xdd, 0xb4, 0xae, 0xed, 0xf0, 0xdd, + 0x6a, 0xae, 0x85, 0x52, 0x1f, 0xc7, 0xfe, 0x60, 0x40, 0x92, 0x24, 0x88, 0xf7, 0xe2, 0x7b, 0xc8, + 0x62, 0x3b, 0x18, 0xaa, 0x1a, 0x10, 0x39, 0x47, 0x3e, 0x9d, 0x7e, 0x7d, 0x7f, 0xed, 0x85, 0x36, + 0x90, 0x35, 0x12, 0x89, 0x54, 0x44, 0xb2, 0x8f, 0x48, 0x54, 0xe9, 0xf7, 0xfb, 0xa8, 0x6a, 0x8d, + 0xc2, 0xdb, 0x44, 0x7b, 0xec, 0x58, 0xd9, 0x9b, 0xa3, 0xd9, 0xac, 0x9e, 0xa3, 0x40, 0x54, 0x23, + 0x42, 0xef, 0x50, 0xe8, 0xd8, 0x56, 0x7e, 0x83, 0x59, 0x11, 0xa9, 0x2a, 0xfd, 0x5e, 0xaf, 0x4e, + 0x14, 0x51, 0xc5, 0x07, 0xee, 0xa2, 0x68, 0x1a, 0x7b, 0x6f, 0x5d, 0x9b, 0x97, 0xfb, 0x28, 0x9a, + 0x89, 0x44, 0xb6, 0x73, 0xd4, 0x42, 0x16, 0xc7, 0xbe, 0xed, 0xb9, 0x91, 0xc8, 0x39, 0xc7, 0x74, + 0x3a, 0xad, 0x2a, 0x3c, 0x14, 0xd1, 0x16, 0x82, 0x98, 0x26, 0x14, 0x6c, 0x25, 0x12, 0x55, 0x06, + 0x83, 0xc1, 0x86, 0x68, 0x5d, 0xe1, 0x12, 0x79, 0xdb, 0x46, 0xf4, 0x2d, 0xb9, 0xaa, 0x72, 0x34, + 0xf5, 0x75, 0xb4, 0x23, 0x17, 0x6d, 0x44, 0x6d, 0x74, 0xe1, 0x77, 0xb5, 0x1c, 0x35, 0x25, 0x7f, + 0x5f, 0xcd, 0x78, 0xdb, 0x5a, 0x8b, 0x73, 0x0e, 0xe7, 0x1c, 0x3e, 0x1d, 0x5b, 0xa1, 0x73, 0xeb, + 0x5b, 0xd7, 0xed, 0x76, 0x6b, 0x5d, 0xba, 0xc9, 0xb3, 0x78, 0xb5, 0xd6, 0x6e, 0x4d, 0x2f, 0x06, + 0x90, 0xa6, 0x69, 0x9d, 0xa8, 0x17, 0xdc, 0xba, 0x7d, 0xb5, 0xe2, 0xf7, 0xca, 0xb2, 0xc4, 0x5a, + 0x4b, 0x59, 0x96, 0x18, 0x63, 0xb6, 0xc4, 0x54, 0x95, 0xc5, 0x62, 0x61, 0x00, 0x57, 0x11, 0xcd, + 0xf2, 0x9c, 0x1f, 0xba, 0xdd, 0xc6, 0xb0, 0x34, 0x89, 0xfa, 0x03, 0x8b, 0xa2, 0xc0, 0x18, 0xc3, + 0x6a, 0xb5, 0x62, 0xb1, 0x58, 0xb0, 0x5c, 0x2e, 0x29, 0x8a, 0x82, 0x4e, 0xa7, 0x83, 0xb5, 0xd6, + 0x5e, 0x5d, 0x5d, 0xbd, 0x03, 0xe6, 0x1b, 0xa2, 0xa8, 0x33, 0xec, 0x0a, 0x9d, 0x17, 0x31, 0xc6, + 0x60, 0x8c, 0xe1, 0xe9, 0xe9, 0x89, 0x9b, 0x9b, 0x1b, 0x44, 0x84, 0x2c, 0xcb, 0xc8, 0xb2, 0x8c, + 0xf9, 0x7c, 0xee, 0x2e, 0x2f, 0x2f, 0x5f, 0x8d, 0x46, 0xa3, 0xb7, 0xc0, 0x1f, 0x55, 0x1d, 0xe5, + 0x79, 0x5e, 0x8b, 0xed, 0xae, 0xab, 0xeb, 0x9c, 0xa3, 0x2c, 0xcb, 0x2a, 0x64, 0x45, 0x51, 0x20, + 0x22, 0x1c, 0x1f, 0x1f, 0x33, 0x1c, 0x0e, 0x79, 0x7c, 0x7c, 0x74, 0x17, 0x17, 0x17, 0xbf, 0x8e, + 0x46, 0xa3, 0xd7, 0xc0, 0x2d, 0xf0, 0x39, 0xf5, 0x87, 0xf5, 0x7a, 0xbd, 0xbd, 0xf5, 0x20, 0x22, + 0xd5, 0xcd, 0xf2, 0xb9, 0x29, 0xcb, 0x92, 0xe5, 0x6a, 0xc5, 0xc1, 0xc1, 0x01, 0xb3, 0xd9, 0x8c, + 0x87, 0x87, 0x07, 0x7b, 0x7e, 0x7e, 0xfe, 0xcb, 0x78, 0x3c, 0x7e, 0x07, 0xfc, 0xe9, 0x9c, 0x5b, + 0xd6, 0x3a, 0x43, 0x4c, 0xb4, 0x4b, 0xd4, 0x8b, 0x79, 0xb2, 0xe5, 0x62, 0xc1, 0xe1, 0xe1, 0x21, + 0x93, 0xc9, 0xc4, 0x9c, 0x9e, 0x9e, 0xfe, 0x3c, 0x1e, 0x8f, 0xdf, 0x00, 0x13, 0x2f, 0xb2, 0xe9, + 0x0c, 0xdf, 0x48, 0xe4, 0x45, 0x42, 0xb1, 0xb2, 0x2c, 0x49, 0x92, 0x84, 0xfb, 0xfb, 0xfb, 0xf9, + 0xd9, 0xd9, 0xd9, 0x8f, 0xd7, 0xd7, 0xd7, 0xef, 0x81, 0x4f, 0xce, 0xb9, 0x32, 0xfc, 0x2e, 0x05, + 0xac, 0x26, 0x09, 0x59, 0x96, 0xed, 0xec, 0x02, 0x71, 0x2f, 0x4b, 0xd3, 0x14, 0xe7, 0x1c, 0x69, + 0xa7, 0x63, 0x6e, 0x6f, 0x6f, 0x3f, 0x9c, 0x9c, 0x9c, 0xfc, 0x54, 0x14, 0xc5, 0xef, 0xc0, 0xbf, + 0xae, 0x21, 0xd9, 0xf2, 0x1f, 0xfc, 0x40, 0x16, 0xc0, 0x5f, 0xc0, 0x3f, 0x61, 0xa8, 0xe2, 0xf1, + 0x05, 0x95, 0x9b, 0x4e, 0x78, 0x5f, 0x66, 0xb8, 0x85, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, + 0x44, 0xae, 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE new_pcb_xpm[1] = {{ png, sizeof( png ), "new_pcb_xpm" }}; diff --git a/bitmaps_png/cpp_48/icon_bitmap2component.cpp b/bitmaps_png/cpp_48/icon_bitmap2component.cpp index e96ff04481..e831592b8e 100644 --- a/bitmaps_png/cpp_48/icon_bitmap2component.cpp +++ b/bitmaps_png/cpp_48/icon_bitmap2component.cpp @@ -8,89 +8,88 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9, - 0x87, 0x00, 0x00, 0x05, 0x10, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xdd, 0x59, 0x5d, 0x4c, 0x14, - 0x57, 0x14, 0xde, 0x76, 0x85, 0xb6, 0x01, 0x1a, 0x1b, 0x94, 0x07, 0x9f, 0x0c, 0xb6, 0x94, 0xd2, - 0x16, 0x69, 0xf1, 0xc1, 0x6a, 0x6d, 0x35, 0x2d, 0xd4, 0x57, 0x53, 0xd3, 0x8a, 0x11, 0x94, 0x28, - 0xb1, 0x89, 0x09, 0xb1, 0x21, 0xc6, 0x18, 0xfb, 0x47, 0xda, 0x26, 0xc6, 0x57, 0x63, 0x7c, 0x30, - 0x3e, 0x98, 0x5a, 0xda, 0x25, 0x4d, 0x30, 0x08, 0xd6, 0x52, 0x96, 0xa2, 0x82, 0xeb, 0xee, 0xec, - 0x32, 0xf1, 0xa7, 0x69, 0x8c, 0x35, 0x90, 0x22, 0xd4, 0x34, 0xa2, 0x24, 0x12, 0x81, 0x65, 0x96, - 0xd3, 0x73, 0xc6, 0x19, 0x32, 0xcc, 0xde, 0xb9, 0xf7, 0xce, 0xec, 0x6c, 0xd1, 0x6e, 0xf2, 0x65, - 0xf8, 0x96, 0xbd, 0x3f, 0xdf, 0xcc, 0x77, 0xee, 0x39, 0xf7, 0x4e, 0x00, 0x00, 0x02, 0x4e, 0xc0, - 0x4f, 0x1e, 0xa2, 0x9c, 0xf7, 0x1b, 0x2f, 0xc0, 0xcf, 0x53, 0x88, 0x4a, 0xea, 0x3f, 0xe3, 0xbe, - 0x18, 0x9d, 0x2f, 0x42, 0xbc, 0x86, 0xa8, 0x45, 0x7c, 0x8d, 0x78, 0xd7, 0x6f, 0x01, 0xc6, 0x38, - 0xef, 0x19, 0xfd, 0xd3, 0x38, 0xaf, 0x22, 0x82, 0x19, 0x09, 0x30, 0x3a, 0xd9, 0x82, 0xf8, 0x02, - 0xf1, 0xad, 0x05, 0x65, 0x88, 0xa5, 0x59, 0xc0, 0xeb, 0xb6, 0x71, 0x3e, 0x47, 0x7c, 0x8c, 0x28, - 0x75, 0x79, 0x23, 0x02, 0xf9, 0x88, 0x7a, 0x5b, 0x67, 0x0b, 0x8d, 0x6d, 0x88, 0xe7, 0xa4, 0x9f, - 0x80, 0xe1, 0x49, 0xb2, 0xcd, 0x56, 0xc4, 0x97, 0x0b, 0xf4, 0x04, 0x3e, 0x43, 0x7c, 0x84, 0x78, - 0x39, 0xd3, 0x18, 0xc8, 0xa1, 0xc0, 0x45, 0xec, 0x30, 0x3c, 0xfa, 0x4e, 0x96, 0x62, 0xe0, 0x7d, - 0x44, 0xb3, 0x71, 0xd3, 0x5e, 0xc9, 0x38, 0x06, 0x1c, 0x06, 0x79, 0x1e, 0xf1, 0x66, 0x96, 0x56, - 0xa1, 0x95, 0xb2, 0x36, 0xf1, 0x2c, 0xe0, 0x49, 0xc0, 0xff, 0x42, 0xc0, 0x22, 0xc4, 0x16, 0xc4, - 0x6f, 0x88, 0xf1, 0x05, 0xc6, 0x7d, 0x44, 0x17, 0x62, 0x33, 0x22, 0xc8, 0xb0, 0xde, 0xb3, 0x2c, - 0x01, 0xf5, 0xf1, 0x78, 0x1c, 0x1e, 0x37, 0x24, 0x93, 0xc9, 0x3a, 0x86, 0x80, 0x1a, 0x96, 0x00, - 0x95, 0x1a, 0x58, 0x3f, 0xd9, 0xe6, 0x89, 0x44, 0x22, 0x8d, 0xa7, 0x52, 0xa9, 0x79, 0x5c, 0xd3, - 0xb4, 0x8b, 0xb6, 0xc9, 0xbf, 0x68, 0x2c, 0xb7, 0x25, 0x76, 0x01, 0x9e, 0x27, 0xa4, 0xcd, 0x6a, - 0x70, 0xed, 0xfe, 0x35, 0x9d, 0x37, 0x5f, 0x6d, 0x86, 0xa6, 0x78, 0x13, 0x34, 0x44, 0x1a, 0x74, - 0xbe, 0x7f, 0x60, 0x3f, 0x1c, 0xba, 0x7e, 0x08, 0x3a, 0x6f, 0x77, 0x7a, 0x12, 0x30, 0x3b, 0x3b, - 0x3b, 0x6e, 0x13, 0xf0, 0xa1, 0x21, 0x60, 0xb3, 0x2f, 0x02, 0x76, 0x45, 0x76, 0xc1, 0xe2, 0xd0, - 0x62, 0x08, 0x7c, 0x17, 0xd0, 0x39, 0x5d, 0x4d, 0xb0, 0x78, 0x65, 0x67, 0x25, 0x1c, 0xbd, 0x71, - 0x14, 0x26, 0x66, 0x26, 0x5c, 0x0b, 0xa0, 0x1c, 0x61, 0x24, 0x3a, 0x33, 0xe1, 0x05, 0xd3, 0x04, - 0x3c, 0x6e, 0x40, 0x41, 0x56, 0x01, 0xa5, 0xb6, 0xac, 0x5d, 0x9a, 0x26, 0x80, 0xee, 0x80, 0x09, - 0x16, 0x3f, 0x3b, 0x7c, 0x16, 0x0a, 0x43, 0x85, 0x90, 0x7b, 0x2a, 0x57, 0xe7, 0x74, 0x35, 0xe1, - 0x96, 0x47, 0x94, 0x08, 0x84, 0x47, 0xc3, 0x73, 0xfd, 0xd3, 0x1d, 0x9f, 0x99, 0x99, 0x99, 0xc7, - 0x6d, 0x4f, 0xa0, 0xc6, 0x26, 0xa0, 0xc6, 0xb5, 0x85, 0x82, 0xa7, 0x82, 0x5c, 0x8b, 0xb8, 0xe1, - 0x97, 0x94, 0x4b, 0x50, 0xf0, 0x63, 0x01, 0x0c, 0x4d, 0x0c, 0x09, 0x2d, 0x44, 0xd9, 0xda, 0x28, - 0x39, 0xac, 0x02, 0x9a, 0xcd, 0x2c, 0x2e, 0x14, 0x10, 0xbb, 0x1b, 0xcb, 0x78, 0xc2, 0x2c, 0x01, - 0x74, 0xdd, 0xd4, 0xbb, 0x49, 0x46, 0x00, 0x95, 0x1c, 0x1f, 0x58, 0x8a, 0xbf, 0x0a, 0x44, 0x35, - 0x7d, 0xff, 0x44, 0xc4, 0x00, 0xd5, 0x4d, 0xc6, 0xf5, 0x05, 0x43, 0xc0, 0xd2, 0x79, 0xdf, 0xf3, - 0x62, 0xe0, 0xf0, 0xf5, 0xc3, 0x42, 0x4f, 0x57, 0x74, 0x54, 0x30, 0xdb, 0x9f, 0xbf, 0x73, 0x1e, - 0x56, 0x75, 0xae, 0x72, 0x8c, 0x01, 0xf3, 0xef, 0x13, 0x37, 0x4f, 0x08, 0x63, 0x80, 0x25, 0x40, - 0x18, 0x03, 0xb4, 0xc6, 0x2f, 0xfb, 0x69, 0x19, 0xd7, 0x12, 0x65, 0xed, 0x65, 0x30, 0x36, 0x3d, - 0xe6, 0x68, 0xc1, 0xd1, 0x87, 0xa3, 0x50, 0xd8, 0x5a, 0xe8, 0x68, 0x21, 0xc2, 0x41, 0xf5, 0xa0, - 0x6c, 0x1e, 0x70, 0x27, 0x40, 0xb9, 0xab, 0x40, 0x71, 0x5b, 0x31, 0xe4, 0xfd, 0x90, 0xe7, 0x28, - 0x20, 0xfc, 0x77, 0x58, 0x98, 0x37, 0x6a, 0xfb, 0x6b, 0xb9, 0x02, 0x1a, 0x95, 0x46, 0x7f, 0x04, - 0x50, 0x23, 0x13, 0x2c, 0x1e, 0x4f, 0x3c, 0x82, 0x92, 0x50, 0x74, 0x1e, 0x8b, 0xc7, 0xb8, 0xbf, - 0x37, 0xff, 0x8e, 0xc6, 0xa3, 0x3a, 0xa7, 0x49, 0x9b, 0xb0, 0x72, 0xea, 0x87, 0xd5, 0xde, 0x9a, - 0x07, 0xa4, 0x04, 0x88, 0xf2, 0x80, 0x57, 0x5e, 0xf5, 0x6b, 0x15, 0x37, 0x06, 0x8e, 0xdd, 0x38, - 0x96, 0x9d, 0x18, 0xf0, 0x8b, 0x2f, 0x69, 0x5d, 0xc2, 0xb5, 0x50, 0xdb, 0x5f, 0x6d, 0xd9, 0x89, - 0x01, 0x2f, 0x7c, 0x3a, 0x35, 0x0d, 0xb7, 0x1e, 0xdc, 0xd2, 0xf9, 0xbe, 0xc4, 0x3e, 0x58, 0x73, - 0x6e, 0x0d, 0x37, 0x0f, 0x10, 0x06, 0x1f, 0x0c, 0xfe, 0x37, 0x31, 0x60, 0xe7, 0x4a, 0x5c, 0xd1, - 0xfd, 0x6b, 0x7a, 0x9c, 0x6c, 0xc1, 0xf2, 0x38, 0x8f, 0x53, 0x1b, 0xa7, 0xfe, 0x7d, 0x8f, 0x81, - 0xdd, 0x91, 0xdd, 0x50, 0x72, 0xba, 0xc4, 0xb7, 0x5a, 0x88, 0xae, 0x1b, 0xc3, 0x1b, 0xa5, 0x6a, - 0x21, 0xcf, 0x16, 0x6a, 0x1f, 0x6e, 0x87, 0xf2, 0x8e, 0xf2, 0xac, 0x95, 0x12, 0xb4, 0x67, 0x70, - 0xb1, 0x1f, 0x70, 0x27, 0x60, 0xaf, 0xb2, 0xd7, 0xb7, 0x09, 0x3b, 0x09, 0x08, 0x0d, 0x85, 0xfc, - 0x13, 0x60, 0xf7, 0xa0, 0x8c, 0x87, 0x79, 0x5c, 0x26, 0x26, 0x28, 0xaf, 0xf8, 0x1e, 0x03, 0x54, - 0xa7, 0xbb, 0xf1, 0x74, 0x7e, 0x4b, 0xbe, 0xce, 0xf7, 0x44, 0xf7, 0xc0, 0x91, 0x3f, 0x8e, 0x40, - 0xf7, 0x48, 0xb7, 0xce, 0x3b, 0x86, 0x3b, 0xb8, 0x31, 0x50, 0xd4, 0x5a, 0x04, 0x5a, 0x4a, 0xf3, - 0x3f, 0x06, 0x56, 0xff, 0xbc, 0x5a, 0xca, 0x12, 0x3b, 0x23, 0x3b, 0xa1, 0xe7, 0x4e, 0x0f, 0x4c, - 0x6a, 0x93, 0x4c, 0x0b, 0x1e, 0x50, 0x0f, 0x70, 0x2d, 0xb4, 0xa1, 0x6b, 0x83, 0xdb, 0x3d, 0xb1, - 0x58, 0x80, 0x7a, 0x4f, 0x15, 0x7a, 0x98, 0x6a, 0x78, 0x99, 0xbc, 0xb0, 0xf6, 0xdc, 0x5a, 0xae, - 0x00, 0x3a, 0x00, 0xf0, 0x55, 0x00, 0x35, 0xa2, 0x75, 0x9d, 0xe7, 0xd9, 0xcb, 0xca, 0x65, 0xe9, - 0x3c, 0x21, 0x8a, 0x01, 0xca, 0x23, 0xbc, 0xf6, 0x9e, 0x62, 0xa0, 0xee, 0x62, 0x1d, 0xd7, 0xf3, - 0x27, 0xff, 0x3c, 0x29, 0x5d, 0x0b, 0x89, 0xf2, 0x80, 0x3a, 0xa6, 0x4a, 0xef, 0x89, 0xa5, 0x2d, - 0x44, 0x89, 0x85, 0x67, 0xa1, 0x2b, 0xf7, 0xae, 0x48, 0x97, 0x16, 0xbc, 0x18, 0x22, 0x01, 0x54, - 0x76, 0xf8, 0x1e, 0x03, 0xeb, 0x7e, 0x59, 0xc7, 0x15, 0x70, 0xe6, 0xf6, 0x19, 0xa1, 0x80, 0xe3, - 0x37, 0x8f, 0x0b, 0x05, 0x90, 0x15, 0x3d, 0x1c, 0x6c, 0x89, 0x63, 0x80, 0xea, 0x1a, 0x5e, 0x0c, - 0xd0, 0xff, 0x79, 0x31, 0x40, 0x7b, 0x05, 0xba, 0xbb, 0x32, 0x79, 0x42, 0x14, 0x43, 0x9e, 0x62, - 0x80, 0xd6, 0x72, 0xd1, 0xba, 0xdf, 0xa4, 0x34, 0x31, 0x3d, 0xbf, 0xbd, 0x6f, 0xbb, 0x74, 0x2d, - 0x44, 0x37, 0xc2, 0xda, 0x9e, 0x17, 0x03, 0xc6, 0xcb, 0xc7, 0xb7, 0x11, 0xc5, 0xe6, 0xd9, 0x28, - 0xe2, 0x2d, 0xc4, 0x1b, 0x69, 0x16, 0x6a, 0x19, 0x6c, 0x91, 0x2e, 0x0d, 0xd6, 0x77, 0xad, 0x87, - 0xea, 0xee, 0x6a, 0x58, 0x71, 0x7a, 0x85, 0xeb, 0x52, 0x82, 0x56, 0x3b, 0x59, 0x0b, 0xd1, 0x91, - 0x3a, 0xe3, 0x5c, 0xe8, 0x1b, 0x7a, 0x7b, 0x94, 0x26, 0x80, 0x36, 0xe8, 0xbc, 0x3d, 0xb0, 0x5f, - 0x9c, 0x96, 0x50, 0x97, 0x67, 0xa3, 0xf6, 0x93, 0xb9, 0x7a, 0xc7, 0x5a, 0xc8, 0xdc, 0xa3, 0x7a, - 0xad, 0x85, 0xb2, 0x11, 0x03, 0x8c, 0xb3, 0xd1, 0x8a, 0x34, 0x01, 0x9a, 0xa6, 0xe9, 0x18, 0x9f, - 0x1c, 0xd7, 0x79, 0x41, 0x4b, 0xc1, 0x1c, 0x64, 0x79, 0x51, 0xa8, 0x08, 0x7a, 0x46, 0x7a, 0x84, - 0xbf, 0xa7, 0x9b, 0x64, 0x8e, 0x47, 0xa0, 0x49, 0x27, 0x93, 0xc9, 0x79, 0xdc, 0xf6, 0x04, 0x9e, - 0xb6, 0x9c, 0x4e, 0x7f, 0x85, 0xc8, 0x15, 0x96, 0xd3, 0xe6, 0x99, 0x90, 0xac, 0x45, 0x96, 0xb7, - 0x2d, 0x87, 0xfe, 0x7f, 0xfa, 0xa5, 0xf2, 0x00, 0x05, 0x71, 0x06, 0xef, 0x07, 0xb6, 0xd9, 0x57, - 0xa1, 0xdf, 0x59, 0x02, 0x46, 0x1e, 0x8e, 0x40, 0x55, 0x77, 0x95, 0x50, 0x40, 0xce, 0xf7, 0x39, - 0x3a, 0xa7, 0x73, 0x7f, 0x37, 0x89, 0x4c, 0xe2, 0x0d, 0x4d, 0xd4, 0x26, 0xe0, 0x25, 0x43, 0xc0, - 0x4a, 0xbb, 0x80, 0x4f, 0x68, 0x00, 0x55, 0x55, 0xe7, 0x60, 0xe5, 0xca, 0xc0, 0xa3, 0x73, 0xa0, - 0x0b, 0xb1, 0x0b, 0xd0, 0x1b, 0xeb, 0xd5, 0x41, 0x41, 0xd8, 0xa7, 0xf4, 0x41, 0x34, 0x11, 0x85, - 0x01, 0x75, 0x00, 0x58, 0xed, 0xa9, 0x9d, 0x09, 0x16, 0x77, 0x1a, 0xcf, 0xe4, 0x68, 0xa9, 0x06, - 0xc6, 0x3b, 0xb2, 0x1d, 0xe6, 0x99, 0xa8, 0x55, 0xc0, 0x33, 0x53, 0x53, 0x53, 0x9f, 0xe2, 0x3a, - 0x7c, 0xd5, 0xea, 0xcb, 0x85, 0x02, 0xce, 0x23, 0x81, 0xf3, 0x69, 0xc4, 0x79, 0xe5, 0x30, 0x04, - 0xe4, 0xdb, 0xbf, 0xfb, 0x17, 0xa9, 0xb6, 0x0a, 0x59, 0x1b, 0xa7, 0xa9, 0x98, 0x00, 0x00, 0x00, - 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, + 0x87, 0x00, 0x00, 0x05, 0x02, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xdd, 0x59, 0x5b, 0x6c, 0x14, + 0x55, 0x18, 0x5e, 0xdd, 0x52, 0x15, 0xcb, 0x92, 0x72, 0x79, 0xe0, 0x09, 0xd2, 0x68, 0x2f, 0x5a, + 0x7b, 0xd1, 0x07, 0x22, 0x18, 0x25, 0xb1, 0x69, 0x79, 0x81, 0x07, 0x4a, 0x94, 0x9a, 0x6a, 0xe8, + 0x83, 0x49, 0x81, 0xc4, 0xc4, 0x07, 0x78, 0xb2, 0x17, 0x62, 0x4d, 0x78, 0xe0, 0x85, 0x47, 0x08, + 0xf0, 0x80, 0xbd, 0x28, 0xb1, 0xb6, 0x15, 0xbc, 0xd4, 0x00, 0x2b, 0x6d, 0x43, 0xbb, 0x97, 0xd9, + 0xad, 0xc4, 0xc6, 0xb4, 0x6b, 0x43, 0x8a, 0x10, 0xaa, 0xc1, 0x42, 0xd5, 0xa5, 0xed, 0x76, 0xb6, + 0xbf, 0xff, 0x7f, 0x3a, 0x67, 0x33, 0x3b, 0x3d, 0xbb, 0x7b, 0x66, 0x76, 0x26, 0x05, 0x37, 0xf9, + 0x32, 0xf3, 0xcd, 0xce, 0x9c, 0x39, 0xdf, 0x9c, 0xef, 0x3f, 0xff, 0x3f, 0x67, 0x5c, 0x00, 0xe0, + 0x4a, 0x05, 0xfc, 0x3d, 0x8f, 0x28, 0x4b, 0x77, 0x8e, 0x15, 0xe0, 0xef, 0x29, 0xc4, 0x6b, 0xd4, + 0x7e, 0xd6, 0x6d, 0x09, 0x1a, 0xcf, 0x41, 0x94, 0x22, 0xde, 0x47, 0x7c, 0x8a, 0x78, 0xcb, 0x6e, + 0x01, 0xda, 0x7d, 0xde, 0xd6, 0xda, 0xa7, 0xfb, 0xbc, 0x8c, 0x70, 0x67, 0x25, 0x40, 0x6b, 0xe4, + 0x00, 0xa2, 0x19, 0xf1, 0x99, 0x0e, 0x2f, 0x21, 0x36, 0x3b, 0x80, 0x57, 0x0c, 0xf7, 0x69, 0x42, + 0xbc, 0x8b, 0x28, 0x36, 0xf9, 0x20, 0x5c, 0x79, 0x88, 0x06, 0x43, 0x63, 0xab, 0x8d, 0x7a, 0xc4, + 0x73, 0xd2, 0x23, 0xa0, 0x79, 0x92, 0x6c, 0xf3, 0x1e, 0xa2, 0x65, 0x95, 0x46, 0xe0, 0x13, 0xc4, + 0x3b, 0x88, 0xa2, 0x6c, 0x63, 0x60, 0x0d, 0x05, 0x2e, 0xe2, 0xa0, 0xe6, 0xd1, 0x37, 0x1d, 0x8a, + 0x81, 0x2a, 0xc4, 0x71, 0xed, 0xa1, 0x95, 0x64, 0x1d, 0x03, 0x29, 0x6e, 0xe2, 0x41, 0xbc, 0xea, + 0xd0, 0x2c, 0x54, 0x2e, 0x6b, 0x13, 0xcb, 0x02, 0x9e, 0x04, 0xfc, 0x2f, 0x04, 0xe4, 0x20, 0x0e, + 0x20, 0xbc, 0x88, 0x87, 0xab, 0x8c, 0x07, 0x88, 0x1f, 0x11, 0xfb, 0x11, 0x6e, 0x81, 0xf5, 0x9e, + 0x15, 0x09, 0x68, 0x08, 0x06, 0x83, 0xf0, 0xb8, 0x21, 0x16, 0x8b, 0x7d, 0x20, 0x10, 0x50, 0x27, + 0x12, 0x10, 0xa6, 0x0b, 0xf4, 0x3f, 0x11, 0x1f, 0x9f, 0x1d, 0x87, 0xae, 0x5b, 0x5d, 0x70, 0x54, + 0x39, 0xca, 0xf8, 0x86, 0x2f, 0x37, 0x80, 0xeb, 0x73, 0x17, 0x03, 0x71, 0xbe, 0x2f, 0xc3, 0x47, + 0x02, 0x23, 0x70, 0x7a, 0xe2, 0x34, 0x3c, 0x52, 0x1f, 0xb1, 0xf6, 0x15, 0x45, 0x81, 0x78, 0x3c, + 0x9e, 0xb8, 0x1f, 0x71, 0x55, 0x55, 0x07, 0x0d, 0x9d, 0x7f, 0x41, 0x9b, 0x6e, 0x0b, 0x8d, 0x02, + 0x20, 0x9d, 0x80, 0xa9, 0x7f, 0xa7, 0x4c, 0x77, 0x30, 0x13, 0xbf, 0x11, 0xb8, 0xc1, 0xb6, 0x9b, + 0x2e, 0x6e, 0x82, 0xa6, 0xd1, 0x26, 0xa1, 0x80, 0xa5, 0xa5, 0xa5, 0x87, 0x06, 0x01, 0xb5, 0x9a, + 0x80, 0xfd, 0xa6, 0x04, 0xf4, 0xdc, 0xee, 0x71, 0x4c, 0x00, 0xc7, 0x70, 0x60, 0x18, 0xae, 0xdd, + 0xbb, 0x96, 0x52, 0x00, 0xe5, 0x08, 0x2d, 0xd1, 0xf1, 0x84, 0xe7, 0x5e, 0x21, 0xe0, 0x71, 0x03, + 0x8e, 0x88, 0x5e, 0x40, 0xb1, 0x21, 0x6b, 0x17, 0xaf, 0x10, 0x40, 0x43, 0xc8, 0xa1, 0xe7, 0xb5, + 0x3f, 0xd5, 0x32, 0x9e, 0xdb, 0x9e, 0x9b, 0x40, 0xb6, 0x9c, 0x9e, 0xb8, 0x91, 0xe7, 0x75, 0xe4, + 0x41, 0xc5, 0xe5, 0x0a, 0x88, 0xa9, 0x31, 0xd1, 0x08, 0xd4, 0x19, 0x04, 0xd4, 0x49, 0x5b, 0x68, + 0xeb, 0xd7, 0x5b, 0x1d, 0xb7, 0x10, 0x71, 0x12, 0x42, 0xfb, 0xe7, 0x7f, 0x3b, 0x9f, 0x24, 0x80, + 0xb2, 0xb5, 0x56, 0x72, 0xe8, 0x05, 0x1c, 0xe7, 0x59, 0x3c, 0xad, 0x80, 0x99, 0x85, 0x19, 0xe9, + 0x0e, 0x6e, 0xf9, 0x6a, 0x0b, 0x54, 0x7e, 0x5b, 0x09, 0x05, 0x3d, 0x05, 0x59, 0x09, 0xa8, 0xb9, + 0x5a, 0x63, 0x14, 0x40, 0x25, 0x47, 0x8d, 0xae, 0xf8, 0xab, 0x40, 0x54, 0xd3, 0xf1, 0x27, 0x22, + 0x06, 0xa8, 0x6e, 0xd2, 0xb6, 0xf9, 0x9a, 0x80, 0xcd, 0x49, 0xc7, 0xd3, 0xc5, 0xc0, 0xa9, 0x5f, + 0x4f, 0x25, 0x3c, 0xdc, 0x3a, 0xda, 0x0a, 0x91, 0xd9, 0xc8, 0x8a, 0x18, 0x91, 0xe5, 0x9e, 0x2e, + 0x4f, 0xc6, 0x18, 0x48, 0xc4, 0x8c, 0x12, 0x14, 0x4d, 0xa3, 0x49, 0x02, 0xa4, 0x62, 0xa0, 0xf7, + 0x76, 0x2f, 0x0c, 0xfd, 0x39, 0x04, 0x32, 0x89, 0x2e, 0x13, 0x6f, 0xf9, 0xb9, 0x45, 0xca, 0x42, + 0xcc, 0x72, 0x76, 0x09, 0xb0, 0x93, 0x0f, 0xfc, 0x31, 0xe0, 0xac, 0x00, 0x0a, 0x1c, 0x0e, 0x27, + 0x38, 0x75, 0x8a, 0x3a, 0x4a, 0x20, 0xce, 0xf7, 0x53, 0x71, 0x7d, 0x1e, 0x90, 0x12, 0x60, 0xd6, + 0xd3, 0x46, 0x1e, 0x8d, 0x45, 0x61, 0x62, 0x76, 0x02, 0x06, 0xa6, 0x07, 0x18, 0xf7, 0xde, 0xf3, + 0x26, 0x40, 0xbc, 0xed, 0x66, 0x9b, 0x74, 0x0c, 0xa4, 0x28, 0x25, 0xb2, 0xb7, 0xd0, 0xfd, 0xf9, + 0xfb, 0xd0, 0x79, 0xab, 0x93, 0xf1, 0xc3, 0xbe, 0xc3, 0xb0, 0xc7, 0xbb, 0x87, 0x25, 0x1f, 0x3b, + 0xf3, 0x40, 0x6e, 0x87, 0xcd, 0x02, 0xe6, 0xd4, 0x39, 0xc6, 0xab, 0xaf, 0x54, 0x43, 0x4e, 0x7b, + 0x8e, 0xe3, 0x89, 0xac, 0xa8, 0xaf, 0xc8, 0x9a, 0x00, 0x91, 0x87, 0x03, 0x4a, 0x80, 0x0d, 0xaf, + 0x8c, 0x67, 0xed, 0xe2, 0xbe, 0xa0, 0xcf, 0x9e, 0x18, 0xd8, 0x7d, 0x75, 0xb7, 0x6d, 0xb5, 0x8f, + 0x6c, 0x2d, 0x44, 0xfb, 0x94, 0x6f, 0xb2, 0xb2, 0xd0, 0xf4, 0xdc, 0xb4, 0xed, 0xb5, 0x8f, 0x19, + 0x0b, 0x75, 0x4f, 0x75, 0x5b, 0x17, 0x40, 0x7e, 0x2f, 0xf9, 0xa6, 0x64, 0x55, 0x05, 0x4c, 0xfe, + 0x33, 0x69, 0x3d, 0x06, 0xfc, 0x41, 0xbf, 0x69, 0xcf, 0xf2, 0x18, 0x21, 0xef, 0xd2, 0xf5, 0x81, + 0x60, 0x80, 0x71, 0xda, 0x72, 0xc8, 0xb6, 0x47, 0x6d, 0xf1, 0x18, 0x34, 0x1d, 0x03, 0x63, 0x0f, + 0xc6, 0x60, 0x6d, 0xc7, 0x5a, 0x69, 0x4f, 0xef, 0xf3, 0xee, 0x63, 0x6f, 0x51, 0x6a, 0x5c, 0x95, + 0xca, 0x13, 0x32, 0x31, 0xb0, 0xab, 0x7f, 0x17, 0x3b, 0xdf, 0xd2, 0x08, 0x1c, 0x0b, 0x1d, 0x33, + 0x65, 0x09, 0xd9, 0x52, 0x22, 0xf2, 0x77, 0x44, 0xda, 0x42, 0x47, 0xfc, 0x47, 0xd2, 0xbd, 0x13, + 0xa7, 0x17, 0x40, 0x75, 0xbc, 0x8c, 0x80, 0xd2, 0x4b, 0xa5, 0xa6, 0x04, 0x9c, 0xf8, 0xe5, 0x84, + 0xb4, 0x80, 0x33, 0x91, 0x33, 0xd6, 0x05, 0x98, 0x9d, 0xa7, 0x65, 0x6b, 0x21, 0x5a, 0x42, 0x91, + 0x6d, 0x9f, 0xea, 0x25, 0xcb, 0x31, 0x20, 0x3b, 0x8f, 0x9f, 0x8b, 0x9c, 0x93, 0xae, 0x95, 0xfa, + 0xa6, 0xfa, 0xa4, 0xf3, 0xc0, 0xfa, 0xce, 0xf5, 0xac, 0x9e, 0xb2, 0x1c, 0x03, 0xb2, 0xd3, 0x60, + 0xf3, 0x68, 0xb3, 0x94, 0x85, 0xee, 0x44, 0xef, 0xc0, 0xc6, 0x8b, 0x1b, 0xa5, 0xa7, 0xd1, 0xb2, + 0x4b, 0x65, 0x99, 0xd6, 0x85, 0xec, 0x11, 0x50, 0x7e, 0xb9, 0x5c, 0x4a, 0xc0, 0xce, 0x1f, 0x76, + 0x9a, 0xca, 0x03, 0xf5, 0x83, 0xf5, 0xd9, 0x09, 0x30, 0x5b, 0xbb, 0xa4, 0xf2, 0xbc, 0x99, 0x79, + 0x5f, 0xcf, 0x29, 0x87, 0xe8, 0xdb, 0x73, 0x2c, 0x06, 0x38, 0xdf, 0xd6, 0xbd, 0x0d, 0x1a, 0x87, + 0x1b, 0xe1, 0xe4, 0xd8, 0x49, 0xc6, 0x69, 0xfd, 0xa8, 0xb0, 0xb7, 0xd0, 0x72, 0x2d, 0xd4, 0xff, + 0x7b, 0x7f, 0x22, 0x86, 0x0c, 0xab, 0x12, 0xf4, 0xf1, 0xf1, 0x0d, 0x44, 0x01, 0x5f, 0x1b, 0x45, + 0xbc, 0x8e, 0xa8, 0x4c, 0x12, 0xe0, 0xf9, 0xc2, 0xe3, 0x58, 0xe9, 0x20, 0x63, 0xa1, 0xbb, 0xd1, + 0xbb, 0x42, 0x0b, 0xd1, 0x92, 0xba, 0x60, 0x5d, 0xa8, 0x8d, 0xbe, 0x1e, 0x25, 0x09, 0xd8, 0xeb, + 0xdd, 0x6b, 0x6b, 0x87, 0x29, 0x56, 0xaa, 0xae, 0x54, 0x49, 0xaf, 0x8d, 0xa6, 0x5b, 0xdc, 0x15, + 0xac, 0xcc, 0x35, 0x08, 0x6b, 0x21, 0x6a, 0xc8, 0xae, 0xfa, 0x9e, 0xe7, 0x00, 0xab, 0x31, 0x95, + 0x61, 0x6d, 0xb4, 0x62, 0x85, 0x00, 0x55, 0x55, 0xe1, 0xec, 0xf8, 0x59, 0x58, 0xd7, 0xb9, 0x8e, + 0x71, 0xda, 0x72, 0x98, 0xe1, 0x3b, 0xbe, 0xdb, 0xb1, 0xfc, 0x8e, 0xbc, 0x10, 0x85, 0xfc, 0xae, + 0x7c, 0xe1, 0xf9, 0xf4, 0xa0, 0xf4, 0x9c, 0x02, 0x38, 0x16, 0x8b, 0xb1, 0x3e, 0x10, 0x04, 0x23, + 0xf0, 0xb4, 0x6e, 0x75, 0xba, 0x15, 0x91, 0x9b, 0xf2, 0x7d, 0xe0, 0x90, 0xef, 0x90, 0x25, 0xcb, + 0xd0, 0xeb, 0x26, 0xad, 0xf5, 0x2f, 0xc4, 0x17, 0x18, 0x0f, 0xcf, 0x84, 0xa5, 0x63, 0x80, 0x66, + 0x2e, 0x13, 0xdf, 0x07, 0xea, 0x8d, 0xb3, 0xd0, 0x98, 0x68, 0x1e, 0xdf, 0xfe, 0xfd, 0x76, 0x29, + 0x01, 0xee, 0x76, 0xf7, 0xb2, 0x05, 0xfe, 0x52, 0x92, 0xae, 0xbf, 0x30, 0x79, 0x41, 0x5a, 0x00, + 0x95, 0x10, 0x82, 0x2f, 0x34, 0x3e, 0x83, 0x80, 0x17, 0x35, 0x01, 0xe5, 0x46, 0x01, 0x8d, 0xec, + 0x89, 0x85, 0xc3, 0x09, 0x70, 0xee, 0x57, 0xfc, 0x30, 0x1c, 0x5c, 0xae, 0xf7, 0x07, 0x03, 0x83, + 0x70, 0xdd, 0x7f, 0x9d, 0x81, 0x9e, 0xd8, 0x50, 0x60, 0x08, 0x46, 0x94, 0x11, 0x08, 0x85, 0x42, + 0x20, 0xba, 0x3e, 0x14, 0x0e, 0xb1, 0xff, 0xf8, 0xff, 0x7c, 0x3f, 0x15, 0x37, 0x5e, 0x8f, 0x96, + 0xfa, 0x50, 0xf0, 0x8d, 0xec, 0x20, 0x5f, 0x13, 0xd5, 0x0b, 0x78, 0x66, 0x7e, 0x7e, 0xfe, 0xe3, + 0xc5, 0xc5, 0xc5, 0x9b, 0xdc, 0x83, 0xab, 0x09, 0xec, 0x87, 0x82, 0xfd, 0xf9, 0x08, 0xfb, 0xb5, + 0x46, 0x20, 0x20, 0xcf, 0x78, 0xec, 0x3f, 0x1b, 0x75, 0xce, 0x5d, 0xf3, 0xcf, 0xc0, 0x5f, 0x00, + 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE icon_bitmap2component_xpm[1] = {{ png, sizeof( png ), "icon_bitmap2component_xpm" }}; diff --git a/bitmaps_png/sources/find.svg b/bitmaps_png/sources/find.svg index 47623cf7c1..f5901fee87 100644 --- a/bitmaps_png/sources/find.svg +++ b/bitmaps_png/sources/find.svg @@ -13,8 +13,8 @@ inkscape:export-ydpi="90.000000" inkscape:export-xdpi="90.000000" inkscape:export-filename="/home/steven/edit-find-48.png" - sodipodi:docname="find.svg.BASE" - inkscape:version="0.48.2 r9819" + sodipodi:docname="find.svg" + inkscape:version="0.48.3.1 r9886" sodipodi:version="0.32" id="svg249" height="26" @@ -59,18 +59,6 @@ offset="1.0000000" style="stop-color:#ffffff;stop-opacity:0.24761905;" /> - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -611,66 +800,74 @@ id="rect15686-03" style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" /> - + id="g3976" + transform="translate(25.279068,-0.44194166)"> + id="path2844-9-9" + d="m -11.906647,26.457898 c -3.713666,0 -6.727656,2.978546 -6.727656,6.64854 0,3.669995 3.01399,6.648541 6.727656,6.648541 1.587627,0 2.9890449,-0.624233 4.140095,-1.534279 -0.093708,0.45401 -0.035603,0.917763 0.3450081,1.244471 l 5.0026161,4.29598 c 0.5627744,0.48307 1.4087257,0.419777 1.89754376,-0.13638 0.4888181,-0.556158 0.42477151,-1.39216 -0.13800297,-1.87523 l -5.00261609,-4.29598 c -0.3063996,-0.263005 -0.68116,-0.340872 -1.0522742,-0.289808 0.9064777,-1.13287 1.5352853,-2.501996 1.5352853,-4.057315 0,-3.669994 -3.0139896,-6.64854 -6.727655,-6.64854 z m -0.0345,0.552895 c 3.4856796,0 6.0646791,2.159374 6.0646791,5.99336 0,3.911673 -2.6539989,5.99336 -6.0646791,5.99336 -3.332138,0 -6.064678,-2.470112 -6.064678,-5.99336 0,-3.600093 2.657626,-5.99336 6.064678,-5.99336 z" + style="color:#000000;fill:#dcdcdc;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3985);stroke-width:1.80999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + inkscape:r_cx="true" + inkscape:r_cy="true" /> + d="m -11.917901,26.429401 c -3.72567,0 -6.749403,2.988174 -6.749403,6.670032 0,3.681857 3.023733,6.670031 6.749403,6.670031 1.59276,0 2.9987074,-0.62625 4.1534789,-1.539237 -0.094011,0.455477 -0.035722,0.920729 0.3461228,1.248493 l 5.0187873,4.309866 c 0.5645936,0.484632 1.41327926,0.421134 1.90367743,-0.136821 0.49039817,-0.557954 0.42614443,-1.396659 -0.13844921,-1.881291 L -5.6530706,37.460607 c -0.3073902,-0.263854 -0.683362,-0.341974 -1.0556758,-0.290744 0.9094079,-1.136532 1.5402483,-2.510085 1.5402483,-4.07043 0,-3.681858 -3.0237325,-6.670032 -6.7494029,-6.670032 z m -0.03461,1.436622 c 2.8659006,0 5.1918483,2.298596 5.1918483,5.130794 0,2.832198 -2.3259477,5.130793 -5.1918483,5.130793 -2.8659,0 -5.191848,-2.298595 -5.191848,-5.130793 0,-2.832198 2.325948,-5.130794 5.191848,-5.130794 z" + id="path4430-3-6" + inkscape:r_cx="true" + inkscape:r_cy="true" /> + inkscape:connector-curvature="0" + style="color:#000000;fill:url(#linearGradient3987);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + d="m -2.3799238,43.788135 c -0.2184051,-1.024997 0.637564,-2.169506 1.63530681,-2.159114 0,0 -4.90966551,-4.174551 -4.90966551,-4.174551 -1.3436287,-0.02557 -1.9480587,1.02474 -1.7232584,2.074139 l 4.9976171,4.259526 z" + id="path4438-0-4" + sodipodi:nodetypes="ccccc" + inkscape:r_cx="true" + inkscape:r_cy="true" /> + transform="matrix(0.56839909,0,0,0.56171489,-21.968801,22.255175)" + inkscape:r_cx="true" + inkscape:r_cy="true" /> + style="opacity:0.43315507;color:#000000;fill:none;stroke:#ffffff;stroke-width:0.70510882;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + id="rect4495-7-3" + width="8.6471872" + height="2.0123112" + x="19.239033" + y="32.352734" + rx="1.5078329" + ry="1.3300102" + transform="matrix(0.75682702,0.65361522,-0.65333777,0.75706655,0,0)" + inkscape:r_cx="true" + inkscape:r_cy="true" /> + transform="matrix(0.63815043,0,0,0.63064598,-23.245907,21.298384)" + inkscape:r_cx="true" + inkscape:r_cy="true" /> + inkscape:connector-curvature="0" + style="opacity:0.83422457;color:#000000;fill:url(#radialGradient3993);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" + d="m -11.921206,28.37567 c 2.3760829,0 4.3001667,1.901457 4.3001667,4.249598 0,0.678154 -0.1917749,1.302119 -0.4777963,1.871222 -0.5714273,0.208145 -1.1784425,0.349762 -1.8227046,0.349762 -2.8156408,0 -5.0643028,-2.192149 -5.2380628,-4.931633 0.789792,-0.922345 1.920927,-1.538949 3.238397,-1.538949 z" + id="path4462-9-8" + inkscape:r_cx="true" + inkscape:r_cy="true" /> diff --git a/bitmaps_png/sources/icon_bitmap2component.svg b/bitmaps_png/sources/icon_bitmap2component.svg index 01324ffd40..c5446344d4 100644 --- a/bitmaps_png/sources/icon_bitmap2component.svg +++ b/bitmaps_png/sources/icon_bitmap2component.svg @@ -5,7 +5,6 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" height="48" @@ -25,7 +24,7 @@ image/svg+xml - + @@ -43,8 +42,8 @@ id="namedview345" showgrid="true" inkscape:zoom="18.178537" - inkscape:cx="20.737894" - inkscape:cy="23.730717" + inkscape:cx="11.963811" + inkscape:cy="27.182846" inkscape:window-x="0" inkscape:window-y="29" inkscape:window-maximized="1" @@ -61,45 +60,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a + + + + sodipodi:docname="new_sch.svg"> @@ -22,7 +22,7 @@ image/svg+xml - + @@ -39,22 +39,24 @@ inkscape:window-height="849" id="namedview356" showgrid="true" - inkscape:zoom="8.146395" - inkscape:cx="33.460702" - inkscape:cy="37.915782" + inkscape:zoom="22.961538" + inkscape:cx="13.043551" + inkscape:cy="13" inkscape:window-x="0" inkscape:window-y="29" inkscape:window-maximized="1" inkscape:current-layer="svg2" - inkscape:snap-grids="false" + inkscape:snap-grids="true" inkscape:snap-to-guides="false"> + snapvisiblegridlinesonly="true" + spacingx="0.5px" + spacingy="0.5px" /> @@ -120,448 +122,6 @@ stdDeviation="1.9447689" id="feGaussianBlur13" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + style="opacity:0.5;filter:url(#bb)" + sodipodi:nodetypes="cccccccc" /> + style="fill:#ffffff" + sodipodi:nodetypes="cccccc" /> + style="fill:url(#radialGradient3371)" + sodipodi:nodetypes="cssssccssscc" /> + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + style="opacity:0.4;filter:url(#bc)" + sodipodi:nodetypes="ccccc" /> + style="fill:url(#linearGradient3327)" + sodipodi:nodetypes="ccccc" /> + + + + + + + + + + + + + + + + + + + + From 7b754b723caf5ed4c2748fe8305a164e02bdecfe Mon Sep 17 00:00:00 2001 From: Miguel Angel Ajo Date: Wed, 12 Feb 2014 22:17:19 +0100 Subject: [PATCH 34/52] Enforces python2.6 / 2.7, thanks to orsonmmz --- CMakeLists.txt | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 84ec69197f..44e56d5c72 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -513,18 +513,24 @@ set( INC_AFTER # Find Python and other scripting resources if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES ) - if( NOT APPLE ) - set( PythonInterp_FIND_VERSION ) - else() + if( APPLE ) set( PYTHON_LIBRARY /System/Library/Frameworks/Python.framework/Versions/2.6/Python ) set( PYTHON_INCLUDE_DIR /System/Library/Frameworks/Python.framework/Versions//2.6/include/python2.6 ) set( PythonInterp_FIND_VERSION 2.6 ) set( PythonLibs_FIND_VERSION 2.6 ) endif() + + # force a python version < 3.0 + set( PythonInterp_FIND_VERSION 2.6) + set( PythonLibs_FIND_VERSION 2.6 ) find_package( PythonInterp ) + check_find_package_result( PYTHONINTERP_FOUND "Python Interpreter" ) - + + if( NOT PYTHON_VERSION_MAJOR EQUAL 2 ) + message( FATAL_ERROR "Python 2.x is required." ) + endif() # Get the correct Python site package install path from the Python interpreter found by # FindPythonInterp unless the user specifically defined a custom path. if( NOT PYTHON_SITE_PACKAGE_PATH ) @@ -542,7 +548,7 @@ if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES ) mark_as_advanced( PYTHON_DEST ) message( STATUS "Python module install path: ${PYTHON_DEST}" ) - find_package( PythonLibs ) + find_package( PythonLibs 2.6 ) #message( STATUS "PYTHON_INCLUDE_DIRS:${PYTHON_INCLUDE_DIRS}" ) From 750cf6a26e6a6b8e0d54a46175c943c5de109bee Mon Sep 17 00:00:00 2001 From: Miguel Angel Ajo Date: Wed, 12 Feb 2014 22:19:12 +0100 Subject: [PATCH 35/52] switching to the new python scripting console icon --- pcbnew/tool_pcb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pcbnew/tool_pcb.cpp b/pcbnew/tool_pcb.cpp index d57011f534..e0f4647a2e 100644 --- a/pcbnew/tool_pcb.cpp +++ b/pcbnew/tool_pcb.cpp @@ -307,7 +307,7 @@ void PCB_EDIT_FRAME::ReCreateHToolbar() // Access to the scripting console #ifdef KICAD_SCRIPTING_WXPYTHON m_mainToolBar->AddTool( ID_TOOLBARH_PCB_SCRIPTING_CONSOLE, wxEmptyString, - KiBitmap( book_xpm ), + KiBitmap( py_script_xpm ), _( "Show/Hide the Scripting console" ) ); m_mainToolBar->AddSeparator(); From 9a56467e136a0730b288444d85e845f9a4d014fc Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Thu, 13 Feb 2014 18:27:48 +0100 Subject: [PATCH 36/52] Fix a minor error in class D_PAD: void D_PAD::Flip( int Y ) changed to virtual void D_PAD::Flip( const wxPoint& aCentre ) (as defined in BOARD_ITEM) Scripting: fix compatibility current pcbnew version in 2 examples and the default extension of board files in board.i (was .kicad_brd, now is .kicad_pcb) --- Documentation/compiling/COMPILING.txt | 8 ++++++ pcbnew/class_module.cpp | 2 +- pcbnew/class_pad.cpp | 6 ++--- pcbnew/class_pad.h | 2 +- pcbnew/scripting/board.i | 34 ++++++++++++------------ pcbnew/scripting/examples/createFPC40.py | 9 ++++--- pcbnew/scripting/examples/createPcb.py | 8 +++--- 7 files changed, 39 insertions(+), 30 deletions(-) diff --git a/Documentation/compiling/COMPILING.txt b/Documentation/compiling/COMPILING.txt index fde596fa3a..8457885384 100644 --- a/Documentation/compiling/COMPILING.txt +++ b/Documentation/compiling/COMPILING.txt @@ -138,9 +138,17 @@ bzr branch lp:kicad/stable kicad_src Components and Footprints libraries all (schematic libs, 3D shapes ...) but new footprints libraries (use Download zip tool) https://github.com/KiCad/kicad-library/ + New footprints libraries (use Download zip tool for each lib you want) https://github.com/KiCad/ for footprint libs (*.pretty folders) +A mirror of github is available, using bzr: +(schematic libs, 3D shapes ... all but new footprints libraries) +bzr checkout lp:~kicad-product-committers/kicad/library + +Old legacy libraries: +bzr checkout lp:~dickelbeck/kicad/library-read-only + Note also Kicad is able to read on github.com/KiCad/ the *.pretty folders without download, using github plugin. (however the time to read them can be long) diff --git a/pcbnew/class_module.cpp b/pcbnew/class_module.cpp index 11f14217fe..95db2ce46f 100644 --- a/pcbnew/class_module.cpp +++ b/pcbnew/class_module.cpp @@ -799,7 +799,7 @@ void MODULE::Flip( const wxPoint& aCentre ) // Mirror pads to other side of board about the x axis, i.e. vertically. for( D_PAD* pad = m_Pads; pad; pad = pad->Next() ) - pad->Flip( m_Pos.y ); + pad->Flip( m_Pos ); // Mirror reference. text = m_Reference; diff --git a/pcbnew/class_pad.cpp b/pcbnew/class_pad.cpp index 5a48ac461a..7ebcc376b9 100644 --- a/pcbnew/class_pad.cpp +++ b/pcbnew/class_pad.cpp @@ -214,13 +214,13 @@ void D_PAD::SetOrientation( double aAngle ) } -void D_PAD::Flip( int aTranslationY ) +void D_PAD::Flip( const wxPoint& aCentre ) { - int y = GetPosition().y - aTranslationY; + int y = GetPosition().y - aCentre.y; y = -y; // invert about x axis. - y += aTranslationY; + y += aCentre.y; SetY( y ); diff --git a/pcbnew/class_pad.h b/pcbnew/class_pad.h index 0391d92b4b..a32bb06acf 100644 --- a/pcbnew/class_pad.h +++ b/pcbnew/class_pad.h @@ -167,7 +167,7 @@ public: void SetOffset( const wxPoint& aOffset ) { m_Offset = aOffset; } const wxPoint& GetOffset() const { return m_Offset; } - void Flip( int aTranslationY ); + void Flip( const wxPoint& aCentre ); // Virtual function /** * Function SetOrientation diff --git a/pcbnew/scripting/board.i b/pcbnew/scripting/board.i index e5b51cdef3..7c6f8e1985 100644 --- a/pcbnew/scripting/board.i +++ b/pcbnew/scripting/board.i @@ -29,7 +29,7 @@ %extend BOARD -{ +{ %pythoncode { def GetModules(self): return self.m_Modules @@ -42,35 +42,35 @@ def GetCurrentNetClassName(self): return self.m_CurrentNetClassName def GetViasDimensionsList(self): return self.m_ViasDimensionsList def GetTrackWidthList(self): return self.m_TrackWidthList - + def Save(self,filename,format = None): if format is None: str_filename = str(filename) if str_filename.endswith(".brd"): format = IO_MGR.LEGACY - if str_filename.endswith(".kicad_brd"): - format = IO_MGR.KICAD + if str_filename.endswith(".kicad_pcb"): + format = IO_MGR.KICAD return SaveBoard(filename,self,format) - + # # add function, clears the thisown to avoid python from deleting # the object in the garbage collector # - - def Add(self,item): + + def Add(self,item): item.thisown=0 self.AddNative(item) } - + } -// this is to help python with the * accessor of DLIST templates +// this is to help python with the * accessor of DLIST templates -%rename(Get) operator BOARD_ITEM*; -%rename(Get) operator TRACK*; -%rename(Get) operator D_PAD*; -%rename(Get) operator MODULE*; -%rename(Get) operator SEGZONE*; +%rename(Get) operator BOARD_ITEM*; +%rename(Get) operator TRACK*; +%rename(Get) operator D_PAD*; +%rename(Get) operator MODULE*; +%rename(Get) operator SEGZONE*; // we must translate C++ templates to scripting languages @@ -81,14 +81,14 @@ %template(TRACK_List) DLIST; %template(PAD_List) DLIST; -// std::vector templates +// std::vector templates %template(VIA_DIMENSION_Vector) std::vector; %template (RASTNET_Vector) std::vector; %extend DRAWSEGMENT { - %pythoncode + %pythoncode { def GetShapeStr(self): return self.ShowShape(self.GetShape()) @@ -102,7 +102,7 @@ def SetPos(self,p): self.SetPosition(p) self.SetPos0(p) - + def SetStartEnd(self,start,end): self.SetStart(start) self.SetStart0(start) diff --git a/pcbnew/scripting/examples/createFPC40.py b/pcbnew/scripting/examples/createFPC40.py index 95f4678e7c..7c6568e730 100755 --- a/pcbnew/scripting/examples/createFPC40.py +++ b/pcbnew/scripting/examples/createFPC40.py @@ -34,10 +34,10 @@ def smdRectPad(module,size,pos,name): for n in range (0,pads): pad = smdRectPad(module,size_025_160mm,wxPointMM(0.5*n,0),str(n+1)) module.Add(pad) - + pad_s0 = smdRectPad(module,size_150_200mm,wxPointMM(-1.6,1.3),"0") -pad_s1 = smdRectPad(module,size_150_200mm,wxPointMM((pads-1)*0.5+1.6,1.3),"0") +pad_s1 = smdRectPad(module,size_150_200mm,wxPointMM((pads-1)*0.5+1.6,1.3),"0") module.Add(pad_s0) module.Add(pad_s1) @@ -50,10 +50,11 @@ e.SetShape(S_SEGMENT) module.Add(e) # save the PCB to disk -module.SetLibRef("FPC"+str(pads)) +fpid = FPID("FPC"+str(pads)) #the name in library +module.SetFPID( fpid ) + try: FootprintLibCreate("fpc40.mod") except: pass # we try to create, but may be it exists already FootprintSave("fpc40.mod",module) - diff --git a/pcbnew/scripting/examples/createPcb.py b/pcbnew/scripting/examples/createPcb.py index b3c977d24e..21c38036c6 100755 --- a/pcbnew/scripting/examples/createPcb.py +++ b/pcbnew/scripting/examples/createPcb.py @@ -30,13 +30,13 @@ for y in range (0,10): pad.SetPadName(str(n)) module.Add(pad) n+=1 - + # save the PCB to disk -pcb.Save("/tmp/my2.kicad_brd") -pcb.Save("/tmp/my2.brd") +pcb.Save("my2.kicad_pcb") +pcb.Save("my2.brd") -pcb = LoadBoard("/tmp/my2.brd") +pcb = LoadBoard("my2.kicad_pcb") print map( lambda x: x.GetReference() , list(pcb.GetModules())) From 33c07934b698d9a9b8897193a3c166607c32fcef Mon Sep 17 00:00:00 2001 From: Henner Zeller Date: Fri, 14 Feb 2014 09:05:04 +0100 Subject: [PATCH 37/52] PATCH: making component choosing (much!) more usable --- eeschema/CMakeLists.txt | 3 + eeschema/component_tree_search_container.cpp | 356 +++++++++ eeschema/component_tree_search_container.h | 108 +++ eeschema/dialogs/dialog_choose_component.cpp | 275 +++++++ eeschema/dialogs/dialog_choose_component.h | 69 ++ .../dialogs/dialog_choose_component_base.cpp | 109 +++ .../dialogs/dialog_choose_component_base.fbp | 710 ++++++++++++++++++ .../dialogs/dialog_choose_component_base.h | 67 ++ eeschema/getpart.cpp | 111 +-- 9 files changed, 1728 insertions(+), 80 deletions(-) create mode 100644 eeschema/component_tree_search_container.cpp create mode 100644 eeschema/component_tree_search_container.h create mode 100644 eeschema/dialogs/dialog_choose_component.cpp create mode 100644 eeschema/dialogs/dialog_choose_component.h create mode 100644 eeschema/dialogs/dialog_choose_component_base.cpp create mode 100644 eeschema/dialogs/dialog_choose_component_base.fbp create mode 100644 eeschema/dialogs/dialog_choose_component_base.h diff --git a/eeschema/CMakeLists.txt b/eeschema/CMakeLists.txt index 05dd30bf82..45411d8fae 100644 --- a/eeschema/CMakeLists.txt +++ b/eeschema/CMakeLists.txt @@ -19,6 +19,8 @@ set( EESCHEMA_DLGS dialogs/dialog_bom.cpp dialogs/dialog_bom_base.cpp dialogs/dialog_bom_cfg_keywords.cpp + dialogs/dialog_choose_component.cpp + dialogs/dialog_choose_component_base.cpp dialogs/dialog_lib_edit_text.cpp dialogs/dialog_lib_edit_text_base.cpp dialogs/dialog_edit_component_in_lib.cpp @@ -88,6 +90,7 @@ set( EESCHEMA_SRCS files-io.cpp find.cpp getpart.cpp + component_tree_search_container.cpp hierarch.cpp hotkeys.cpp libarch.cpp diff --git a/eeschema/component_tree_search_container.cpp b/eeschema/component_tree_search_container.cpp new file mode 100644 index 0000000000..6972ff1956 --- /dev/null +++ b/eeschema/component_tree_search_container.cpp @@ -0,0 +1,356 @@ +/* -*- c++ -*- + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2014 Henner Zeller + * Copyright (C) 2014 KiCad Developers, see change_log.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 Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +// Each node gets this lowest score initially, without any matches applied. Matches +// will then increase this score depending on match quality. +// This way, an empty search string will result in all components being displayed as they +// have the minimum score. However, in that case, we avoid expanding all the nodes asd the +// result is very unspecific. +static const unsigned kLowestDefaultScore = 1; + +struct COMPONENT_TREE_SEARCH_CONTAINER::TREE_NODE +{ + TREE_NODE(TREE_NODE* aParent, CMP_LIBRARY* aOwningLib, + const wxString& aName, const wxString& aDisplayInfo, + const wxString& aSearchText, + bool aNormallyExpanded = false) + : parent( aParent ), + lib( aOwningLib ), + normally_expanded( aNormallyExpanded ), + name( aName ), + display_info( aDisplayInfo ), + match_name( aName.Lower() ), + search_text( aSearchText.Lower() ), + match_score( 0 ), previous_score( 0 ) + { + } + + TREE_NODE* parent; // NULL if library, pointer to lib when component. + CMP_LIBRARY* lib; // Owning library of this component. + bool normally_expanded; // If this is a parent node, should it be unfolded ? + wxString name; // Exact name as displayed to the user. + wxString display_info; // Additional info displayed in the tree (description..) + + wxString match_name; // Preprocessed: lowercased display name. + wxString search_text; // Other lowercase text (keywords, description..) to search in. + + unsigned match_score; // Result-Score after UpdateSearchTerm() + unsigned previous_score; // Optimization: used to see if we need any tree update. + wxTreeItemId tree_id; // Tree-ID if stored in the tree (if match_score > 0). +}; + + +// Sort tree nodes by reverse match-score (bigger is first), then alphabetically. +// Library nodes (i.e. the ones that don't have a parent) are always sorted before any +// leaf nodes. +bool COMPONENT_TREE_SEARCH_CONTAINER::scoreComparator( const TREE_NODE* a1, const TREE_NODE* a2 ) +{ + if ( a1->parent == NULL && a2->parent != NULL ) + return true; + + if ( a1->parent != NULL && a2->parent == NULL ) + return false; + + if ( a1->match_score != a2->match_score ) + return a1->match_score > a2->match_score; // biggest first. + + if (a1->parent != a2->parent) + return a1->parent->match_name.Cmp(a2->parent->match_name) < 0; + + return a1->match_name.Cmp( a2->match_name ) < 0; +} + +COMPONENT_TREE_SEARCH_CONTAINER::COMPONENT_TREE_SEARCH_CONTAINER() + : tree( NULL ) +{ +} + + +COMPONENT_TREE_SEARCH_CONTAINER::~COMPONENT_TREE_SEARCH_CONTAINER() +{ + BOOST_FOREACH( TREE_NODE* node, nodes ) + delete node; + nodes.clear(); +} + + +void COMPONENT_TREE_SEARCH_CONTAINER::SetPreselectNode( const wxString& aComponentName ) +{ + preselect_node_name = aComponentName.Lower(); +} + + +void COMPONENT_TREE_SEARCH_CONTAINER::SetTree( wxTreeCtrl* aTree ) +{ + tree = aTree; + UpdateSearchTerm( wxEmptyString ); +} + + +void COMPONENT_TREE_SEARCH_CONTAINER::AddLibrary( CMP_LIBRARY& aLib ) +{ + wxArrayString all_comp; + + aLib.GetEntryNames( all_comp ); + AddComponentList( aLib.GetName(), all_comp, &aLib, false ); +} + + +void COMPONENT_TREE_SEARCH_CONTAINER::AddComponentList( const wxString& aNodeName, + const wxArrayString& aComponentNameList, + CMP_LIBRARY* aOptionalLib, + bool aNormallyExpanded ) +{ + TREE_NODE* parent_node = new TREE_NODE( NULL, NULL, aNodeName, wxEmptyString, wxEmptyString, + aNormallyExpanded ); + + nodes.push_back( parent_node ); + + BOOST_FOREACH( const wxString& cName, aComponentNameList ) + { + LIB_COMPONENT *c; + + if (aOptionalLib) + c = aOptionalLib->FindComponent( cName ); + else + c = CMP_LIBRARY::FindLibraryComponent( cName, wxEmptyString ); + + if (c == NULL) + continue; + + wxString keywords, descriptions; + wxString display_info; + + for ( size_t i = 0; i < c->GetAliasCount(); ++i ) + { + LIB_ALIAS *a = c->GetAlias( i ); + keywords += a->GetKeyWords(); + descriptions += a->GetDescription(); + + if ( display_info.empty() && !a->GetDescription().empty() ) + { + // Preformatting. Unfortunately, the tree widget doesn't have columns + display_info.Printf( wxT(" %s[ %s ]"), + ( cName.length() <= 8 ) ? wxT("\t\t") : wxT("\t"), + GetChars( a->GetDescription() ) ); + } + } + + // If there are no keywords, we give a couple of characters whitespace penalty. We want + // a component with a search-term found in the keywords score slightly higher than another + // component without keywords, but that term in the descriptions. + wxString search_text = ( !keywords.empty() ) ? keywords : wxT(" "); + search_text += descriptions; + nodes.push_back( new TREE_NODE( parent_node, c->GetLibrary(), + cName, display_info, search_text ) ); + } +} + + +LIB_COMPONENT* COMPONENT_TREE_SEARCH_CONTAINER::GetSelectedComponent() +{ + const wxTreeItemId& select_id = tree->GetSelection(); + BOOST_FOREACH( TREE_NODE* node, nodes ) + { + if ( node->match_score > 0 && node->tree_id == select_id && node->lib ) + return node->lib->FindComponent( node->name ); + } + return NULL; +} + + +// Creates a score depending on the position of a string match. If the position +// is 0 (= prefix match), this returns the maximum score. This degrades until +// pos == max, which returns a score of 0; +// Evertyhing else beyond that is just 0. Only values >= 0 allowed for position and max. +// +// @param aPosition is the position a string has been found in a substring. +// @param aMaximum is the maximum score this function returns. +// @return position dependent score. +static int matchPosScore(int aPosition, int aMaximum) +{ + return ( aPosition < aMaximum ) ? aMaximum - aPosition : 0; +} + + +void COMPONENT_TREE_SEARCH_CONTAINER::UpdateSearchTerm( const wxString& aSearch ) +{ + if ( tree == NULL ) + return; + + // We score the list by going through it several time, essentially with a complexity + // of O(n). For the default library of 2000+ items, this typically takes less than 5ms + // on an i5. Good enough, no index needed. + + // Initial AND condition: Leaf nodes are considered to match initially. + BOOST_FOREACH( TREE_NODE* node, nodes ) + { + node->previous_score = node->match_score; + node->match_score = node->parent ? kLowestDefaultScore : 0; // start-match for leafs. + } + + // Create match scores for each node for all the terms, that come space-separated. + // Scoring adds up values for each term according to importance of the match. If a term does + // not match at all, the result is thrown out of the results (AND semantics). + // From high to low + // - Exact match for a ccmponent name gives the highest score, trumping all. + // - A positional score depending of where a term is found as substring; prefix-match: high. + // - substring-match in library name. + // - substring match in keywords and descriptions with positional score. Keywords come + // first so contribute more to the score. + // + // This is of course subject to tweaking. + wxStringTokenizer tokenizer( aSearch ); + + while ( tokenizer.HasMoreTokens() ) + { + const wxString term = tokenizer.GetNextToken().Lower(); + BOOST_FOREACH( TREE_NODE* node, nodes ) + { + if ( node->parent == NULL) + continue; // Library nodes are not scored here. + + if ( node->match_score == 0) + continue; // Leaf node without score are out of the game. + + // Keywords and description we only count if the match string is at + // least two characters long. That avoids spurious, low quality + // matches. Most abbreviations are at three characters long. + int found_pos; + + if ( term == node->match_name ) + node->match_score += 1000; // exact match. High score :) + else if ( (found_pos = node->match_name.Find( term ) ) != wxNOT_FOUND ) + { + // Substring match. The earlier in the string the better. score += 20..40 + node->match_score += matchPosScore( found_pos, 20 ) + 20; + } + else if ( node->parent->match_name.Find( term ) != wxNOT_FOUND ) + node->match_score += 19; // parent name matches. score += 19 + else if ( ( found_pos = node->search_text.Find( term ) ) != wxNOT_FOUND ) + { + // If we have a very short string (like one or two letters), we don't want + // to accumulate scores if they just happen to be in keywords or description. + // For longer terms, we add scores 1..18 for positional match (higher in the + // front, where the keywords are). score += 0..18 + node->match_score += ( ( term.length() >= 2 ) + ? matchPosScore( found_pos, 17 ) + 1 + : 0 ); + } + else + node->match_score = 0; // No match. That's it for this item. + } + } + + // Parent nodes have the maximum score seen in any of their children. + unsigned highest_score_seen = 0; + bool any_change = false; + BOOST_FOREACH( TREE_NODE* node, nodes ) + { + if ( node->parent == NULL ) + continue; + + any_change |= (node->previous_score != node->match_score); + node->parent->match_score = std::max( node->parent->match_score, node->match_score ); + highest_score_seen = std::max( highest_score_seen, node->match_score ); + } + + + // The tree update might be slow, so we want to bail out if there is no change. + if ( !any_change ) + return; + + // Now: sort all items according to match score, libraries first. + std::sort( nodes.begin(), nodes.end(), scoreComparator ); + + // Fill the tree with all items that have a match. Re-arranging, adding and removing changed + // items is pretty complex, so we just re-build the whole tree. + tree->Freeze(); + tree->DeleteAllItems(); + wxTreeItemId root = tree->AddRoot( wxEmptyString ); + const TREE_NODE* first_match = NULL; + const TREE_NODE* preselected_node = NULL; + BOOST_FOREACH( TREE_NODE* node, nodes ) + { + if ( node->match_score == 0 ) + continue; + + // If we have nodes that go beyond the default score, suppress nodes that + // have the default score. That can happen if they have an honary += 0 score due to + // some one-letter match in the keyword or description. In this case, we prefer matches + // that just have higher scores. Improves confusion (and performance as the tree has to + // display less items). + if ( highest_score_seen > kLowestDefaultScore && node->match_score == kLowestDefaultScore ) + continue; + + wxString node_text; +#if 0 + // Node text with scoring information for debugging + node_text.Printf( wxT("%s (s=%u)%s"), GetChars(node->name), + node->match_score, GetChars(node->display_info)); +#else + node_text = node->name + node->display_info; +#endif + node->tree_id = tree->AppendItem( ( node->parent == NULL ) ? root : node->parent->tree_id, + node_text); + + // If we are a child node, we might need to expand. + if ( node->parent != NULL ) + { + if ( node->match_score > kLowestDefaultScore ) + { + tree->EnsureVisible( node->tree_id ); + + if ( first_match == NULL ) + first_match = node; // The "I am feeling lucky" element. + } + + if ( preselected_node == NULL && node->match_name == preselect_node_name ) + preselected_node = node; + } + + if ( node->parent == NULL && node->normally_expanded ) + tree->Expand( node->tree_id ); + } + + if ( first_match ) // Highest score search match pre-selected. + tree->SelectItem( first_match->tree_id ); + else if ( preselected_node ) // No search, so history item preselected. + tree->SelectItem( preselected_node->tree_id ); + + tree->Thaw(); +} diff --git a/eeschema/component_tree_search_container.h b/eeschema/component_tree_search_container.h new file mode 100644 index 0000000000..b89d1b2c6b --- /dev/null +++ b/eeschema/component_tree_search_container.h @@ -0,0 +1,108 @@ +/* -*- c++ -*- + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2014 Henner Zeller + * Copyright (C) 2014 KiCad Developers, see change_log.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 Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http: *www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http: *www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include + +class LIB_COMPONENT; +class CMP_LIBRARY; +class wxTreeCtrl; +class wxArrayString; + +// class COMPONENT_TREE_SEARCH_CONTAINER +// A container for components that allows to search them matching their name, keywords +// and descripotions, updating a wxTreeCtrl with the results (toplevel nodes: +// libraries, leafs: components), scored by relevance. +// +// The scored result list is adpated on each update on the search-term: this allows +// to have a search-as-you-type experience. +class COMPONENT_TREE_SEARCH_CONTAINER +{ +public: + COMPONENT_TREE_SEARCH_CONTAINER(); + ~COMPONENT_TREE_SEARCH_CONTAINER(); + + /** Function AddLibrary + * Add the components of this library to be searched. + * To be called in the setup phase to fill this container. + * + * @param aLib containting all the components to be added. + */ + void AddLibrary( CMP_LIBRARY& aLib ); + + /** Function AddComponentList + * Add the given list of components, given by name, to be searched. + * To be called in the setup phase to fill this container. + * + * @param aNodeName The parent node name the components will show up as leaf. + * @param aComponentNameList List of component names. + * @param aOptionalLib Library to look up the component names (if NULL: global lookup) + * @param aNormallyExpanded Should the node in the tree be expanded by default. + */ + void AddComponentList( const wxString& aNodeName, const wxArrayString& aComponentNameList, + CMP_LIBRARY* aOptionalLib, bool aNormallyExpanded ); + + /** Function SetPreselectNode + * Set the component name to be selected in absence of any search-result. + * + * @param aComponentName the component name to be selected. + */ + void SetPreselectNode( const wxString& aComponentName ); + + /** Function SetTree + * Set the tree to be manipulated. + * Each update of the search term will update the tree, with the most + * scoring component at the top and selected. If a preselect node is set, this + * is displayed. Does not take ownership of the tree. + * + * @param aTree that is to be modified on search updates. + */ + void SetTree( wxTreeCtrl* aTree ); + + /** Function UpdateSearchTerm + * Update the search string provided by the user and narrow down the result list. + * + * This string is a space-separated list of terms, each of which + * is applied to the components list to narrow it down. Results are scored by + * relevancy (e.g. exact match scores higher than prefix-match which in turn scores + * higher than substring match). This updates the search and tree on each call. + * + * @param aSearch is the user-provided search string. + */ + void UpdateSearchTerm( const wxString& aSearch ); + + /** Function GetSelectedComponent + * + * @return the selected component or NULL if there is none. + */ + LIB_COMPONENT* GetSelectedComponent(); + +private: + struct TREE_NODE; + static bool scoreComparator( const TREE_NODE* a1, const TREE_NODE* a2 ); + + std::vector nodes; + wxString preselect_node_name; + wxTreeCtrl* tree; +}; diff --git a/eeschema/dialogs/dialog_choose_component.cpp b/eeschema/dialogs/dialog_choose_component.cpp new file mode 100644 index 0000000000..9d5ad8cd64 --- /dev/null +++ b/eeschema/dialogs/dialog_choose_component.cpp @@ -0,0 +1,275 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2014 Henner Zeller + * Copyright (C) 2014 KiCad Developers, see change_log.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 Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +#include + +#include +#include +#include + +#include +#include +#include + +// Work-around broken implementation in wxWidgets <=2.8 tree. +static wxTreeItemId fixedGetPrevVisible( const wxTreeCtrl& tree, const wxTreeItemId& item ); + +// Combine descriptions of all aliases from given component. +static wxString combineDescriptions( LIB_COMPONENT* aComponent ) +{ + std::set descriptions; + + for( size_t i = 0; i < aComponent->GetAliasCount(); ++i ) + { + LIB_ALIAS* a = aComponent->GetAlias( i ); + + if ( !a->GetDescription().empty() ) + descriptions.insert( a->GetDescription() ); + } + + wxString result; + BOOST_FOREACH( const wxString& s, descriptions ) + result += s + wxT("\n"); + return result; +} + + +// Combine keywords. Keywords come as a string, but are considered space-separated +// individual words. Return a string with a unique set of these. +static wxString combineKeywords( LIB_COMPONENT* aComponent ) +{ + std::set keywords; + + for( size_t i = 0; i < aComponent->GetAliasCount(); ++i ) + { + LIB_ALIAS* a = aComponent->GetAlias( i ); + wxStringTokenizer tokenizer( a->GetKeyWords() ); + + while ( tokenizer.HasMoreTokens() ) + keywords.insert( tokenizer.GetNextToken() ); + } + + wxString result; + BOOST_FOREACH( const wxString& s, keywords ) + result += s + wxT(" "); + return result; +} + + +DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT( wxWindow* aParent, const wxString& aTitle, + COMPONENT_TREE_SEARCH_CONTAINER* aContainer ) + : DIALOG_CHOOSE_COMPONENT_BASE( aParent, wxID_ANY, aTitle ), + m_search_container( aContainer ), + m_selected_component( NULL ), + m_external_browser_requested( false ), + m_received_doubleclick_in_tree( false ) +{ + // TODO: restore last size user was choosing. + m_search_container->SetTree( m_libraryComponentTree ); + m_searchBox->SetFocus(); + m_componentDetails->SetEditable( false ); +} + + +// After this dialog is done: return the component that has been selected, or an +// empty string if there is none. +wxString DIALOG_CHOOSE_COMPONENT::GetSelectedComponentName() const +{ + if ( m_selected_component == NULL ) + return wxEmptyString; + + return m_selected_component->GetName(); +} + + +void DIALOG_CHOOSE_COMPONENT::OnSearchBoxChange( wxCommandEvent& aEvent ) +{ + m_selected_component = NULL; + m_search_container->UpdateSearchTerm( m_searchBox->GetLineText(0) ); + updateSelection(); +} + + +void DIALOG_CHOOSE_COMPONENT::OnSearchBoxEnter( wxCommandEvent& aEvent ) +{ + EndModal( wxID_OK ); // We are done. +} + + +void DIALOG_CHOOSE_COMPONENT::SelectIfValid( const wxTreeItemId& aTreeId ) +{ + if ( aTreeId.IsOk() && aTreeId != m_libraryComponentTree->GetRootItem() ) + m_libraryComponentTree->SelectItem( aTreeId ); +} + + +void DIALOG_CHOOSE_COMPONENT::OnInterceptSearchBoxKey( wxKeyEvent& aKeyStroke ) +{ + // Cursor up/down are forwarded to the tree. This is done by intercepting some navigational + // keystrokes that normally would go to the text search box (which has the focus by default). + const wxTreeItemId sel = m_libraryComponentTree->GetSelection(); + + switch ( aKeyStroke.GetKeyCode() ) + { + case WXK_UP: + SelectIfValid( fixedGetPrevVisible( *m_libraryComponentTree, sel ) ); + break; + + case WXK_DOWN: + SelectIfValid( m_libraryComponentTree->GetNextVisible( sel ) ); + break; + + default: + aKeyStroke.Skip(); // Pass on to search box. + break; + } +} + + +void DIALOG_CHOOSE_COMPONENT::OnTreeSelect( wxTreeEvent& aEvent ) +{ + updateSelection(); +} + + +void DIALOG_CHOOSE_COMPONENT::OnDoubleClickTreeSelect( wxTreeEvent& aEvent ) +{ + updateSelection(); + + if ( m_selected_component == NULL ) + return; + + // Ok, got selection. We don't just end the modal dialog here, but + // wait for the MouseUp event to occur. Otherwise something (broken?) + // happens: the dialog will close and will deliver the 'MouseUp' event + // to the eeschema canvas, that will immediately place the component. + m_received_doubleclick_in_tree = true; +} + + +void DIALOG_CHOOSE_COMPONENT::OnTreeMouseUp( wxMouseEvent& aMouseEvent ) +{ + if ( m_received_doubleclick_in_tree ) + EndModal( wxID_OK ); // We are done (see OnDoubleClickTreeSelect) + else + aMouseEvent.Skip(); // Let upstream handle it. +} + + +void DIALOG_CHOOSE_COMPONENT::OnStartComponentBrowser( wxMouseEvent& aEvent ) +{ + m_external_browser_requested = true; + EndModal( wxID_OK ); // We are done. +} + + +void DIALOG_CHOOSE_COMPONENT::updateSelection() +{ + LIB_COMPONENT* selection = m_search_container->GetSelectedComponent(); + + if ( selection == m_selected_component ) + return; // no change. + + m_selected_component = selection; + + m_componentDetails->Clear(); + + if ( m_selected_component == NULL ) + return; + + wxFont font_normal = m_componentDetails->GetFont(); + wxFont font_bold = m_componentDetails->GetFont(); + font_bold.SetWeight( wxFONTWEIGHT_BOLD ); + + wxTextAttr headline_attribute; + headline_attribute.SetFont(font_bold); + wxTextAttr text_attribute; + text_attribute.SetFont(font_normal); + + const wxString description = combineDescriptions( selection ); + + if ( !description.empty() ) + { + m_componentDetails->SetDefaultStyle( headline_attribute ); + m_componentDetails->AppendText( _("Description\n") ); + m_componentDetails->SetDefaultStyle( text_attribute ); + m_componentDetails->AppendText( description ); + m_componentDetails->AppendText( wxT("\n") ); + } + + const wxString keywords = combineKeywords( selection ); + + if ( !keywords.empty() ) + { + m_componentDetails->SetDefaultStyle( headline_attribute ); + m_componentDetails->AppendText( _("Keywords\n") ); + m_componentDetails->SetDefaultStyle( text_attribute ); + m_componentDetails->AppendText( keywords ); + } + + m_componentDetails->SetInsertionPoint( 0 ); // scroll up. +} + + +// The GetPrevVisible() method is broken in at least 2.8 wxWidgets. This is mostly copied +// verbatim from the latest 3.x source in which this is fixed. +// ( wxWidgets/src/generic/treectlg.cpp ) +static wxTreeItemId fixedGetPrevVisible( const wxTreeCtrl& tree, const wxTreeItemId& item ) +{ +#if wxCHECK_VERSION( 3, 0, 0 ) + return tree.GetPrevVisible(item); +#else + // find out the starting point + wxTreeItemId prevItem = tree.GetPrevSibling(item); + + if ( !prevItem.IsOk() ) + { + prevItem = tree.GetItemParent(item); + } + + // find the first visible item after it + while ( prevItem.IsOk() && !tree.IsVisible(prevItem) ) + { + prevItem = tree.GetNext(prevItem); + + if ( !prevItem.IsOk() || prevItem == item ) + { + // there are no visible items before item + return wxTreeItemId(); + } + } + + // from there we must be able to navigate until this item + while ( prevItem.IsOk() ) + { + const wxTreeItemId nextItem = tree.GetNextVisible(prevItem); + + if ( !nextItem.IsOk() || nextItem == item ) + break; + + prevItem = nextItem; + } + + return prevItem; +#endif +} diff --git a/eeschema/dialogs/dialog_choose_component.h b/eeschema/dialogs/dialog_choose_component.h new file mode 100644 index 0000000000..3f02b74ef6 --- /dev/null +++ b/eeschema/dialogs/dialog_choose_component.h @@ -0,0 +1,69 @@ +/* -*- c++ -*- + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2014 Henner Zeller + * Copyright (C) 2014 KiCad Developers, see change_log.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 Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +class COMPONENT_TREE_SEARCH_CONTAINER; +class LIB_COMPONENT; +class wxTreeItemId; + +class DIALOG_CHOOSE_COMPONENT : public DIALOG_CHOOSE_COMPONENT_BASE +{ +public: + DIALOG_CHOOSE_COMPONENT( wxWindow* aParent, const wxString& aTitle, + COMPONENT_TREE_SEARCH_CONTAINER* aSearch_container ); + + /** Function GetSelectedComponentName + * To be called after this dialog returns from ShowModal(). + * + * @return the component that has been selected, or an empty string if there is none. + */ + wxString GetSelectedComponentName() const; + + /** Function IsExternalBrowserSelected + * + * @return true, iff the browser pressed the browsing button. + */ + bool IsExternalBrowserSelected() const { return m_external_browser_requested; } + +protected: + virtual void OnSearchBoxChange( wxCommandEvent& aEvent ); + virtual void OnSearchBoxEnter( wxCommandEvent& aEvent ); + virtual void OnInterceptSearchBoxKey( wxKeyEvent& aEvent ); + + virtual void OnTreeSelect( wxTreeEvent& aEvent ); + virtual void OnDoubleClickTreeSelect( wxTreeEvent& aEvent ); + virtual void OnTreeMouseUp( wxMouseEvent& aMouseEvent ); + + virtual void OnStartComponentBrowser( wxMouseEvent& aEvent ); + +private: + void updateSelection(); + void SelectIfValid( const wxTreeItemId& aTreeId ); + + COMPONENT_TREE_SEARCH_CONTAINER* const m_search_container; + LIB_COMPONENT* m_selected_component; + bool m_external_browser_requested; + bool m_received_doubleclick_in_tree; +}; diff --git a/eeschema/dialogs/dialog_choose_component_base.cpp b/eeschema/dialogs/dialog_choose_component_base.cpp new file mode 100644 index 0000000000..a9334549ba --- /dev/null +++ b/eeschema/dialogs/dialog_choose_component_base.cpp @@ -0,0 +1,109 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Nov 6 2013) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "dialog_choose_component_base.h" + +/////////////////////////////////////////////////////////////////////////// + +DIALOG_CHOOSE_COMPONENT_BASE::DIALOG_CHOOSE_COMPONENT_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style ) +{ + this->SetSizeHints( wxSize( 450,-1 ), wxDefaultSize ); + + wxBoxSizer* bSizer1; + bSizer1 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSearchSizer; + bSearchSizer = new wxBoxSizer( wxHORIZONTAL ); + + m_searchLabel = new wxStaticText( this, wxID_ANY, wxT("Search"), wxDefaultPosition, wxDefaultSize, 0 ); + m_searchLabel->Wrap( -1 ); + bSearchSizer->Add( m_searchLabel, 0, wxALL, 5 ); + + m_searchBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER ); + bSearchSizer->Add( m_searchBox, 1, wxALL, 5 ); + + + bSizer1->Add( bSearchSizer, 0, wxEXPAND, 5 ); + + m_libraryComponentTree = new wxTreeCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_DEFAULT_STYLE|wxTR_HIDE_ROOT ); + m_libraryComponentTree->SetMinSize( wxSize( -1,50 ) ); + + bSizer1->Add( m_libraryComponentTree, 2, wxALL|wxEXPAND, 5 ); + + wxBoxSizer* bSizer3; + bSizer3 = new wxBoxSizer( wxHORIZONTAL ); + + m_componentView = new wxStaticText( this, wxID_ANY, wxT("TODO\n(mini. comp image)"), wxDefaultPosition, wxSize( 100,100 ), 0 ); + m_componentView->Wrap( -1 ); + m_componentView->SetMinSize( wxSize( 100,100 ) ); + + bSizer3->Add( m_componentView, 0, wxALL, 5 ); + + wxBoxSizer* bSizer6; + bSizer6 = new wxBoxSizer( wxVERTICAL ); + + m_componentDetails = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,100 ), wxTE_MULTILINE ); + bSizer6->Add( m_componentDetails, 1, wxALL|wxEXPAND, 5 ); + + m_unitChoice = new wxComboBox( this, wxID_ANY, wxT("Unit A"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + m_unitChoice->Enable( false ); + m_unitChoice->Hide(); + + bSizer6->Add( m_unitChoice, 0, wxALL, 5 ); + + + bSizer3->Add( bSizer6, 2, wxEXPAND, 5 ); + + + bSizer1->Add( bSizer3, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizer5; + bSizer5 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer5->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_button = new wxStdDialogButtonSizer(); + m_buttonOK = new wxButton( this, wxID_OK ); + m_button->AddButton( m_buttonOK ); + m_buttonCancel = new wxButton( this, wxID_CANCEL ); + m_button->AddButton( m_buttonCancel ); + m_button->Realize(); + + bSizer5->Add( m_button, 0, wxEXPAND, 5 ); + + + bSizer1->Add( bSizer5, 0, wxEXPAND, 5 ); + + + this->SetSizer( bSizer1 ); + this->Layout(); + + this->Centre( wxBOTH ); + + // Connect Events + m_searchBox->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnInterceptSearchBoxKey ), NULL, this ); + m_searchBox->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnSearchBoxChange ), NULL, this ); + m_searchBox->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnSearchBoxEnter ), NULL, this ); + m_libraryComponentTree->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnTreeMouseUp ), NULL, this ); + m_libraryComponentTree->Connect( wxEVT_COMMAND_TREE_ITEM_ACTIVATED, wxTreeEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnDoubleClickTreeSelect ), NULL, this ); + m_libraryComponentTree->Connect( wxEVT_COMMAND_TREE_SEL_CHANGED, wxTreeEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnTreeSelect ), NULL, this ); + m_componentView->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnStartComponentBrowser ), NULL, this ); +} + +DIALOG_CHOOSE_COMPONENT_BASE::~DIALOG_CHOOSE_COMPONENT_BASE() +{ + // Disconnect Events + m_searchBox->Disconnect( wxEVT_KEY_DOWN, wxKeyEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnInterceptSearchBoxKey ), NULL, this ); + m_searchBox->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnSearchBoxChange ), NULL, this ); + m_searchBox->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnSearchBoxEnter ), NULL, this ); + m_libraryComponentTree->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnTreeMouseUp ), NULL, this ); + m_libraryComponentTree->Disconnect( wxEVT_COMMAND_TREE_ITEM_ACTIVATED, wxTreeEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnDoubleClickTreeSelect ), NULL, this ); + m_libraryComponentTree->Disconnect( wxEVT_COMMAND_TREE_SEL_CHANGED, wxTreeEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnTreeSelect ), NULL, this ); + m_componentView->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( DIALOG_CHOOSE_COMPONENT_BASE::OnStartComponentBrowser ), NULL, this ); + +} diff --git a/eeschema/dialogs/dialog_choose_component_base.fbp b/eeschema/dialogs/dialog_choose_component_base.fbp new file mode 100644 index 0000000000..73cdcb2f83 --- /dev/null +++ b/eeschema/dialogs/dialog_choose_component_base.fbp @@ -0,0 +1,710 @@ + + + + + + C++ + 1 + source_name + 0 + 0 + res + UTF-8 + connect + dialog_choose_component_base + 1000 + none + 0 + dialog_choose_component_base + + . + + 1 + 1 + 1 + 1 + UI + 0 + 0 + + 0 + wxAUI_MGR_DEFAULT + + wxBOTH + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + + 450,-1 + DIALOG_CHOOSE_COMPONENT_BASE + + 450,500 + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER + DIALOG_SHIM; dialog_shim.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer1 + wxVERTICAL + none + + 5 + wxEXPAND + 0 + + + bSearchSizer + wxHORIZONTAL + none + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Search + + 0 + + + 0 + + 1 + m_searchLabel + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + -1,-1 + + + 0 + + 1 + m_searchBox + 1 + + + protected + 1 + + Resizable + 1 + + wxTE_PROCESS_ENTER + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + OnInterceptSearchBoxKey + + + + + + + + + + + + + + + + + + + OnSearchBoxChange + OnSearchBoxEnter + + + + + + + + + 5 + wxALL|wxEXPAND + 2 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + -1,50 + 1 + m_libraryComponentTree + 1 + + + protected + 1 + + Resizable + 1 + + wxTR_DEFAULT_STYLE|wxTR_HIDE_ROOT + + 0 + + + + + + + + + + + + + + OnTreeMouseUp + + + + + + + + + + + + + + + + + + + + OnDoubleClickTreeSelect + + + + + + + + + + OnTreeSelect + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer3 + wxHORIZONTAL + none + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + TODO (mini. comp image) + + 0 + + + 0 + 100,100 + 1 + m_componentView + 1 + + + protected + 1 + + Resizable + 1 + 100,100 + + + 0 + + + + + -1 + + + + + + + + + + OnStartComponentBrowser + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 2 + + + bSizer6 + wxVERTICAL + none + + 5 + wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + -1,100 + 1 + m_componentDetails + 1 + + + protected + 1 + + Resizable + 1 + -1,-1 + wxTE_MULTILINE + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 0 + + 1 + + 0 + 1 + wxID_ANY + + 0 + + + 0 + + 1 + m_unitChoice + 1 + + + protected + 1 + + Resizable + -1 + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + Unit A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_RIGHT + 0 + + + bSizer5 + wxVERTICAL + none + + 5 + wxEXPAND + 0 + + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + + m_button + protected + + + + + + + + + + + + + + + + diff --git a/eeschema/dialogs/dialog_choose_component_base.h b/eeschema/dialogs/dialog_choose_component_base.h new file mode 100644 index 0000000000..005aceb9cd --- /dev/null +++ b/eeschema/dialogs/dialog_choose_component_base.h @@ -0,0 +1,67 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Nov 6 2013) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __DIALOG_CHOOSE_COMPONENT_BASE_H__ +#define __DIALOG_CHOOSE_COMPONENT_BASE_H__ + +#include +#include +class DIALOG_SHIM; + +#include "dialog_shim.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////// +/// Class DIALOG_CHOOSE_COMPONENT_BASE +/////////////////////////////////////////////////////////////////////////////// +class DIALOG_CHOOSE_COMPONENT_BASE : public DIALOG_SHIM +{ + private: + + protected: + wxStaticText* m_searchLabel; + wxTextCtrl* m_searchBox; + wxTreeCtrl* m_libraryComponentTree; + wxStaticText* m_componentView; + wxTextCtrl* m_componentDetails; + wxComboBox* m_unitChoice; + wxStdDialogButtonSizer* m_button; + wxButton* m_buttonOK; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnInterceptSearchBoxKey( wxKeyEvent& event ) { event.Skip(); } + virtual void OnSearchBoxChange( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSearchBoxEnter( wxCommandEvent& event ) { event.Skip(); } + virtual void OnTreeMouseUp( wxMouseEvent& event ) { event.Skip(); } + virtual void OnDoubleClickTreeSelect( wxTreeEvent& event ) { event.Skip(); } + virtual void OnTreeSelect( wxTreeEvent& event ) { event.Skip(); } + virtual void OnStartComponentBrowser( wxMouseEvent& event ) { event.Skip(); } + + + public: + + DIALOG_CHOOSE_COMPONENT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 450,500 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~DIALOG_CHOOSE_COMPONENT_BASE(); + +}; + +#endif //__DIALOG_CHOOSE_COMPONENT_BASE_H__ diff --git a/eeschema/getpart.cpp b/eeschema/getpart.cpp index a423d2ea72..4554e4f4be 100644 --- a/eeschema/getpart.cpp +++ b/eeschema/getpart.cpp @@ -45,11 +45,14 @@ #include #include +#include +#include #include #include +// TODO(hzeller): would be good if we could give a pre-selected component. wxString SCH_BASE_FRAME::SelectComponentFromLibBrowser( void ) { wxSemaphore semaphore( 0, 1 ); @@ -76,118 +79,66 @@ wxString SCH_BASE_FRAME::SelectComponentFromLibBrowser( void ) return cmpname; } - wxString SCH_BASE_FRAME::SelectComponentFromLibrary( const wxString& aLibname, wxArrayString& aHistoryList, bool aUseLibBrowser, int* aUnit, int* aConvert ) { - int CmpCount = 0; - LIB_COMPONENT* libEntry = NULL; - CMP_LIBRARY* currLibrary = NULL; - wxString cmpName, keys, msg; - bool allowWildSeach = true; + int cmpCount = 0; + wxString dialogTitle; + + COMPONENT_TREE_SEARCH_CONTAINER search_container; // Container doing search-as-you-type if( !aLibname.IsEmpty() ) { - currLibrary = CMP_LIBRARY::FindLibrary( aLibname ); + CMP_LIBRARY* currLibrary = CMP_LIBRARY::FindLibrary( aLibname ); if( currLibrary != NULL ) - CmpCount = currLibrary->GetCount(); + { + cmpCount = currLibrary->GetCount(); + search_container.AddLibrary( *currLibrary ); + } } else { BOOST_FOREACH( CMP_LIBRARY& lib, CMP_LIBRARY::GetLibraryList() ) { - CmpCount += lib.GetCount(); + cmpCount += lib.GetCount(); + search_container.AddLibrary( lib ); } } - // Ask for a component name or key words - msg.Printf( _( "Component selection (%d items loaded):" ), CmpCount ); + if( !aHistoryList.empty() ) + { + // This is good for a transition for experineced users: giving them a History. Ideally, + // we actually make this part even faster to access with a popup on ALT-a or something. + search_container.AddComponentList( _("-- History --"), aHistoryList, NULL, true ); + search_container.SetPreselectNode( aHistoryList[0] ); + } - DIALOG_GET_COMPONENT dlg( this, aHistoryList, msg, aUseLibBrowser ); - - if( aHistoryList.GetCount() ) - dlg.SetComponentName( aHistoryList[0] ); + dialogTitle.Printf( _( "Choose Component (%d items loaded)" ), cmpCount ); + DIALOG_CHOOSE_COMPONENT dlg( this, dialogTitle, &search_container ); if( dlg.ShowModal() == wxID_CANCEL ) return wxEmptyString; - if( dlg.m_GetExtraFunction ) + wxString cmpName = dlg.GetSelectedComponentName(); + + if( dlg.IsExternalBrowserSelected() ) { - cmpName = SelectComponentFromLibBrowser(); + cmpName = SelectComponentFromLibBrowser(); // Would be good if we could pre-select. + if( aUnit ) *aUnit = LIB_VIEW_FRAME::GetUnit(); + if( aConvert ) *aConvert = LIB_VIEW_FRAME::GetConvert(); - if( !cmpName.IsEmpty() ) - AddHistoryComponentName( aHistoryList, cmpName ); - return cmpName; - } - else - cmpName = dlg.GetComponentName(); - - if( cmpName.IsEmpty() ) - return wxEmptyString; - - // Here, cmpName contains the component name, - // or "*" if the Select All dialog button was pressed - -#ifndef KICAD_KEEPCASE - cmpName.MakeUpper(); -#endif - - if( dlg.IsKeyword() ) - { - allowWildSeach = false; - keys = cmpName; - cmpName = DataBaseGetName( this, keys, cmpName ); - - if( cmpName.IsEmpty() ) - return wxEmptyString; - } - else if( cmpName == wxT( "*" ) ) - { - allowWildSeach = false; - - if( GetNameOfPartToLoad( this, currLibrary, cmpName ) == 0 ) - return wxEmptyString; - } - else if( cmpName.Contains( wxT( "?" ) ) || cmpName.Contains( wxT( "*" ) ) ) - { - allowWildSeach = false; - cmpName = DataBaseGetName( this, keys, cmpName ); - - if( cmpName.IsEmpty() ) - return wxEmptyString; } - libEntry = CMP_LIBRARY::FindLibraryComponent( cmpName, aLibname ); + if ( !cmpName.empty() ) + AddHistoryComponentName( aHistoryList, cmpName ); - if( !libEntry && allowWildSeach ) // Search with wildcard - { - allowWildSeach = false; - wxString wildname = wxChar( '*' ) + cmpName + wxChar( '*' ); - cmpName = wildname; - cmpName = DataBaseGetName( this, keys, cmpName ); - - if( !cmpName.IsEmpty() ) - libEntry = CMP_LIBRARY::FindLibraryComponent( cmpName, aLibname ); - - if( !libEntry ) - return wxEmptyString; - } - - if( !libEntry ) - { - msg.Printf( _( "Failed to find part <%s> in library" ), GetChars( cmpName ) ); - DisplayError( this, msg ); - return wxEmptyString; - } - - AddHistoryComponentName( aHistoryList, cmpName ); return cmpName; } From 79807dd948b3835ae9ef3f4a720a1568c0317182 Mon Sep 17 00:00:00 2001 From: Henner Zeller Date: Fri, 14 Feb 2014 18:16:59 +0100 Subject: [PATCH 38/52] Eeschema: Better naming for private struct: public fields uppercase. * make some more fields 'const' that can. * Instead of previous/next _visible_ element, Go through previous and next element. Otherwise the cursor stops moving if the item is only partially visible. --- eeschema/component_tree_search_container.cpp | 131 ++++++++++--------- eeschema/dialogs/dialog_choose_component.cpp | 62 ++++----- 2 files changed, 89 insertions(+), 104 deletions(-) diff --git a/eeschema/component_tree_search_container.cpp b/eeschema/component_tree_search_container.cpp index 6972ff1956..f0d9a2ffb1 100644 --- a/eeschema/component_tree_search_container.cpp +++ b/eeschema/component_tree_search_container.cpp @@ -48,29 +48,29 @@ struct COMPONENT_TREE_SEARCH_CONTAINER::TREE_NODE const wxString& aName, const wxString& aDisplayInfo, const wxString& aSearchText, bool aNormallyExpanded = false) - : parent( aParent ), - lib( aOwningLib ), - normally_expanded( aNormallyExpanded ), - name( aName ), - display_info( aDisplayInfo ), - match_name( aName.Lower() ), - search_text( aSearchText.Lower() ), - match_score( 0 ), previous_score( 0 ) + : Parent( aParent ), + Lib( aOwningLib ), + NormallyExpanded( aNormallyExpanded ), + Name( aName ), + DisplayInfo( aDisplayInfo ), + MatchName( aName.Lower() ), + SearchText( aSearchText.Lower() ), + MatchScore( 0 ), PreviousScore( 0 ) { } - TREE_NODE* parent; // NULL if library, pointer to lib when component. - CMP_LIBRARY* lib; // Owning library of this component. - bool normally_expanded; // If this is a parent node, should it be unfolded ? - wxString name; // Exact name as displayed to the user. - wxString display_info; // Additional info displayed in the tree (description..) + TREE_NODE* const Parent; ///< NULL if library, pointer to lib-node when component. + CMP_LIBRARY* const Lib; ///< Owning library of this component. + const bool NormallyExpanded; ///< If this is a parent node, should it be unfolded ? + const wxString Name; ///< Exact name as displayed to the user. + const wxString DisplayInfo; ///< Additional info displayed in the tree (description..) - wxString match_name; // Preprocessed: lowercased display name. - wxString search_text; // Other lowercase text (keywords, description..) to search in. + const wxString MatchName; ///< Preprocessed: lowercased display name. + const wxString SearchText; ///< Other text (keywords, description..) to search in. - unsigned match_score; // Result-Score after UpdateSearchTerm() - unsigned previous_score; // Optimization: used to see if we need any tree update. - wxTreeItemId tree_id; // Tree-ID if stored in the tree (if match_score > 0). + unsigned MatchScore; ///< Result-Score after UpdateSearchTerm() + unsigned PreviousScore; ///< Optimization: used to see if we need any tree update. + wxTreeItemId TreeId; ///< Tree-ID if stored in the tree (if MatchScore > 0). }; @@ -79,19 +79,19 @@ struct COMPONENT_TREE_SEARCH_CONTAINER::TREE_NODE // leaf nodes. bool COMPONENT_TREE_SEARCH_CONTAINER::scoreComparator( const TREE_NODE* a1, const TREE_NODE* a2 ) { - if ( a1->parent == NULL && a2->parent != NULL ) + if ( a1->Parent == NULL && a2->Parent != NULL ) return true; - if ( a1->parent != NULL && a2->parent == NULL ) + if ( a1->Parent != NULL && a2->Parent == NULL ) return false; - if ( a1->match_score != a2->match_score ) - return a1->match_score > a2->match_score; // biggest first. + if ( a1->MatchScore != a2->MatchScore ) + return a1->MatchScore > a2->MatchScore; // biggest first. - if (a1->parent != a2->parent) - return a1->parent->match_name.Cmp(a2->parent->match_name) < 0; + if (a1->Parent != a2->Parent) + return a1->Parent->MatchName.Cmp(a2->Parent->MatchName) < 0; - return a1->match_name.Cmp( a2->match_name ) < 0; + return a1->MatchName.Cmp( a2->MatchName ) < 0; } COMPONENT_TREE_SEARCH_CONTAINER::COMPONENT_TREE_SEARCH_CONTAINER() @@ -186,8 +186,8 @@ LIB_COMPONENT* COMPONENT_TREE_SEARCH_CONTAINER::GetSelectedComponent() const wxTreeItemId& select_id = tree->GetSelection(); BOOST_FOREACH( TREE_NODE* node, nodes ) { - if ( node->match_score > 0 && node->tree_id == select_id && node->lib ) - return node->lib->FindComponent( node->name ); + if ( node->MatchScore > 0 && node->TreeId == select_id && node->Lib ) + return node->Lib->FindComponent( node->Name ); } return NULL; } @@ -219,8 +219,8 @@ void COMPONENT_TREE_SEARCH_CONTAINER::UpdateSearchTerm( const wxString& aSearch // Initial AND condition: Leaf nodes are considered to match initially. BOOST_FOREACH( TREE_NODE* node, nodes ) { - node->previous_score = node->match_score; - node->match_score = node->parent ? kLowestDefaultScore : 0; // start-match for leafs. + node->PreviousScore = node->MatchScore; + node->MatchScore = node->Parent ? kLowestDefaultScore : 0; // start-match for leafs. } // Create match scores for each node for all the terms, that come space-separated. @@ -241,10 +241,10 @@ void COMPONENT_TREE_SEARCH_CONTAINER::UpdateSearchTerm( const wxString& aSearch const wxString term = tokenizer.GetNextToken().Lower(); BOOST_FOREACH( TREE_NODE* node, nodes ) { - if ( node->parent == NULL) + if ( node->Parent == NULL) continue; // Library nodes are not scored here. - if ( node->match_score == 0) + if ( node->MatchScore == 0) continue; // Leaf node without score are out of the game. // Keywords and description we only count if the match string is at @@ -252,27 +252,28 @@ void COMPONENT_TREE_SEARCH_CONTAINER::UpdateSearchTerm( const wxString& aSearch // matches. Most abbreviations are at three characters long. int found_pos; - if ( term == node->match_name ) - node->match_score += 1000; // exact match. High score :) - else if ( (found_pos = node->match_name.Find( term ) ) != wxNOT_FOUND ) + if ( term == node->MatchName ) + node->MatchScore += 1000; // exact match. High score :) + else if ( (found_pos = node->MatchName.Find( term ) ) != wxNOT_FOUND ) { // Substring match. The earlier in the string the better. score += 20..40 - node->match_score += matchPosScore( found_pos, 20 ) + 20; + node->MatchScore += matchPosScore( found_pos, 20 ) + 20; } - else if ( node->parent->match_name.Find( term ) != wxNOT_FOUND ) - node->match_score += 19; // parent name matches. score += 19 - else if ( ( found_pos = node->search_text.Find( term ) ) != wxNOT_FOUND ) + else if ( node->Parent->MatchName.Find( term ) != wxNOT_FOUND ) + node->MatchScore += 19; // parent name matches. score += 19 + else if ( ( found_pos = node->SearchText.Find( term ) ) != wxNOT_FOUND ) { - // If we have a very short string (like one or two letters), we don't want - // to accumulate scores if they just happen to be in keywords or description. + // If we have a very short search term (like one or two letters), we don't want + // to accumulate scores if they just happen to be in keywords or description as + // almost any one or two-letter combination shows up in there. // For longer terms, we add scores 1..18 for positional match (higher in the // front, where the keywords are). score += 0..18 - node->match_score += ( ( term.length() >= 2 ) + node->MatchScore += ( ( term.length() >= 2 ) ? matchPosScore( found_pos, 17 ) + 1 : 0 ); } else - node->match_score = 0; // No match. That's it for this item. + node->MatchScore = 0; // No match. That's it for this item. } } @@ -281,12 +282,12 @@ void COMPONENT_TREE_SEARCH_CONTAINER::UpdateSearchTerm( const wxString& aSearch bool any_change = false; BOOST_FOREACH( TREE_NODE* node, nodes ) { - if ( node->parent == NULL ) + if ( node->Parent == NULL ) continue; - any_change |= (node->previous_score != node->match_score); - node->parent->match_score = std::max( node->parent->match_score, node->match_score ); - highest_score_seen = std::max( highest_score_seen, node->match_score ); + any_change |= (node->PreviousScore != node->MatchScore); + node->Parent->MatchScore = std::max( node->Parent->MatchScore, node->MatchScore ); + highest_score_seen = std::max( highest_score_seen, node->MatchScore ); } @@ -301,56 +302,56 @@ void COMPONENT_TREE_SEARCH_CONTAINER::UpdateSearchTerm( const wxString& aSearch // items is pretty complex, so we just re-build the whole tree. tree->Freeze(); tree->DeleteAllItems(); - wxTreeItemId root = tree->AddRoot( wxEmptyString ); + const wxTreeItemId root_id = tree->AddRoot( wxEmptyString ); const TREE_NODE* first_match = NULL; const TREE_NODE* preselected_node = NULL; BOOST_FOREACH( TREE_NODE* node, nodes ) { - if ( node->match_score == 0 ) + if ( node->MatchScore == 0 ) continue; // If we have nodes that go beyond the default score, suppress nodes that // have the default score. That can happen if they have an honary += 0 score due to // some one-letter match in the keyword or description. In this case, we prefer matches - // that just have higher scores. Improves confusion (and performance as the tree has to - // display less items). - if ( highest_score_seen > kLowestDefaultScore && node->match_score == kLowestDefaultScore ) + // that just have higher scores. Improves relevancy and performance as the tree has to + // display less items. + if ( highest_score_seen > kLowestDefaultScore && node->MatchScore == kLowestDefaultScore ) continue; + const bool isLeaf = ( node->Parent != NULL ); wxString node_text; #if 0 // Node text with scoring information for debugging - node_text.Printf( wxT("%s (s=%u)%s"), GetChars(node->name), - node->match_score, GetChars(node->display_info)); + node_text.Printf( wxT("%s (s=%u)%s"), GetChars(node->Name), + node->MatchScore, GetChars(node->DisplayInfo)); #else - node_text = node->name + node->display_info; + node_text = node->Name + node->DisplayInfo; #endif - node->tree_id = tree->AppendItem( ( node->parent == NULL ) ? root : node->parent->tree_id, - node_text); + node->TreeId = tree->AppendItem( !isLeaf ? root_id : node->Parent->TreeId, node_text ); - // If we are a child node, we might need to expand. - if ( node->parent != NULL ) + // If we are a leaf node, we might need to expand. + if ( isLeaf ) { - if ( node->match_score > kLowestDefaultScore ) + if ( node->MatchScore > kLowestDefaultScore ) { - tree->EnsureVisible( node->tree_id ); + tree->EnsureVisible( node->TreeId ); if ( first_match == NULL ) first_match = node; // The "I am feeling lucky" element. } - if ( preselected_node == NULL && node->match_name == preselect_node_name ) + if ( preselected_node == NULL && node->MatchName == preselect_node_name ) preselected_node = node; } - if ( node->parent == NULL && node->normally_expanded ) - tree->Expand( node->tree_id ); + if ( !isLeaf && node->NormallyExpanded ) + tree->Expand( node->TreeId ); } if ( first_match ) // Highest score search match pre-selected. - tree->SelectItem( first_match->tree_id ); + tree->SelectItem( first_match->TreeId ); else if ( preselected_node ) // No search, so history item preselected. - tree->SelectItem( preselected_node->tree_id ); + tree->SelectItem( preselected_node->TreeId ); tree->Thaw(); } diff --git a/eeschema/dialogs/dialog_choose_component.cpp b/eeschema/dialogs/dialog_choose_component.cpp index 9d5ad8cd64..604c9cb94a 100644 --- a/eeschema/dialogs/dialog_choose_component.cpp +++ b/eeschema/dialogs/dialog_choose_component.cpp @@ -31,8 +31,9 @@ #include #include -// Work-around broken implementation in wxWidgets <=2.8 tree. -static wxTreeItemId fixedGetPrevVisible( const wxTreeCtrl& tree, const wxTreeItemId& item ); +// Tree navigation helpers. +static wxTreeItemId GetPrevItem( const wxTreeCtrl& tree, const wxTreeItemId& item ); +static wxTreeItemId GetNextItem( const wxTreeCtrl& tree, const wxTreeItemId& item ); // Combine descriptions of all aliases from given component. static wxString combineDescriptions( LIB_COMPONENT* aComponent ) @@ -132,11 +133,11 @@ void DIALOG_CHOOSE_COMPONENT::OnInterceptSearchBoxKey( wxKeyEvent& aKeyStroke ) switch ( aKeyStroke.GetKeyCode() ) { case WXK_UP: - SelectIfValid( fixedGetPrevVisible( *m_libraryComponentTree, sel ) ); + SelectIfValid( GetPrevItem( *m_libraryComponentTree, sel ) ); break; case WXK_DOWN: - SelectIfValid( m_libraryComponentTree->GetNextVisible( sel ) ); + SelectIfValid( GetNextItem( *m_libraryComponentTree, sel ) ); break; default: @@ -230,46 +231,29 @@ void DIALOG_CHOOSE_COMPONENT::updateSelection() m_componentDetails->SetInsertionPoint( 0 ); // scroll up. } - -// The GetPrevVisible() method is broken in at least 2.8 wxWidgets. This is mostly copied -// verbatim from the latest 3.x source in which this is fixed. -// ( wxWidgets/src/generic/treectlg.cpp ) -static wxTreeItemId fixedGetPrevVisible( const wxTreeCtrl& tree, const wxTreeItemId& item ) +static wxTreeItemId GetPrevItem( const wxTreeCtrl& tree, const wxTreeItemId& item ) { -#if wxCHECK_VERSION( 3, 0, 0 ) - return tree.GetPrevVisible(item); -#else - // find out the starting point - wxTreeItemId prevItem = tree.GetPrevSibling(item); + wxTreeItemId prevItem = tree.GetPrevSibling( item ); if ( !prevItem.IsOk() ) { - prevItem = tree.GetItemParent(item); - } - - // find the first visible item after it - while ( prevItem.IsOk() && !tree.IsVisible(prevItem) ) - { - prevItem = tree.GetNext(prevItem); - - if ( !prevItem.IsOk() || prevItem == item ) - { - // there are no visible items before item - return wxTreeItemId(); - } - } - - // from there we must be able to navigate until this item - while ( prevItem.IsOk() ) - { - const wxTreeItemId nextItem = tree.GetNextVisible(prevItem); - - if ( !nextItem.IsOk() || nextItem == item ) - break; - - prevItem = nextItem; + const wxTreeItemId parent = tree.GetItemParent( item ); + prevItem = tree.GetLastChild( tree.GetPrevSibling( parent ) ); } return prevItem; -#endif +} + +static wxTreeItemId GetNextItem( const wxTreeCtrl& tree, const wxTreeItemId& item ) +{ + wxTreeItemId nextItem = tree.GetNextSibling( item ); + + if ( !nextItem.IsOk() ) + { + const wxTreeItemId parent = tree.GetItemParent( item ); + wxTreeItemIdValue dummy; + nextItem = tree.GetFirstChild( tree.GetNextSibling( parent ), dummy ); + } + + return nextItem; } From 45f64652ef0af79a55b8e70f11e36155e8f0d327 Mon Sep 17 00:00:00 2001 From: Marco Serantoni Date: Fri, 14 Feb 2014 22:09:48 +0100 Subject: [PATCH 39/52] [MacOSX] Reorg and preparation to include scripts into Bundles --- CMakeLists.txt | 12 ++++++------ pcbnew/pcbnew.cpp | 10 +++++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 44e56d5c72..87bdd4efee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -347,6 +347,12 @@ check_find_package_result( OPENGL_FOUND "OpenGL" ) if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC ) add_custom_target( lib-wxpython ) + include( download_pcre ) + include( download_swig ) + include( download_wxpython ) + add_dependencies( lib-wxpython pcre ) + add_dependencies( lib-wxpython swig ) + add_dependencies( lib-wxpython libwxpython ) #set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so;.dylib;.dll") @@ -394,12 +400,6 @@ add_custom_target( lib-wxpython ) set(wxWidgets_INCLUDE_DIRS ${LIBWXPYTHON_ROOT}/include/wx-3.0 ) set(wxWidgets_LIBRARY_DIRS ${LIBWXPYTHON_ROOT}/lib ) - include( download_pcre ) - include( download_swig ) - include( download_wxpython ) - add_dependencies( lib-wxpython pcre ) - add_dependencies( lib-wxpython swig ) - add_dependencies( lib-wxpython libwxpython ) add_dependencies( lib-dependencies libwxpython ) else() include( download_wxwidgets ) diff --git a/pcbnew/pcbnew.cpp b/pcbnew/pcbnew.cpp index 49cae3dea4..d070e1825f 100644 --- a/pcbnew/pcbnew.cpp +++ b/pcbnew/pcbnew.cpp @@ -169,9 +169,13 @@ bool EDA_APP::OnInit() bundledir.RemoveLastDir(); // Prepend in PYTHONPATH the content of the bundle libraries ! - wxSetEnv("PYTHONPATH",((wxGetenv("PYTHONPATH") != NULL ) ? (wxString(wxGetenv("PYTHONPATH")) + ":") : wxString("")) - + bundledir.GetPath() + - "/Frameworks/wxPython/lib/python2.6/site-packages/wx-3.0-osx_cocoa" ); + wxSetEnv("PYTHONPATH",((wxGetenv("PYTHONPATH") != NULL ) ? (wxString(wxGetenv("PYTHONPATH")) + ":") : wxString("")) + + "/Library/Application Support/kicad/scripting" + ":" + + bundledir.GetPath() + "/PlugIns" + ":" + + wxString( wxGetenv("HOME") ) + "/Library/Application Support/kicad/scripting" + + bundledir.GetPath() + + "/Frameworks/wxPython/lib/python2.6/site-packages/wx-3.0-osx_cocoa" + ); #endif #endif // On linux and osx, 2 others paths are From 8123415163f5701c3ca4a320da68d23923f23aad Mon Sep 17 00:00:00 2001 From: Cirilo Bernardo Date: Sat, 15 Feb 2014 08:39:06 +0100 Subject: [PATCH 40/52] Export VRML and IDF maintenance. Fix minor bug in eeschema (opening a relative path does not work) (patch from HennerZeller). --- eeschema/eeschema.cpp | 2 +- pcbnew/exporters/export_vrml.cpp | 46 +++++++++++++++++++++++++++++--- utils/idftools/idf_cylinder.cpp | 2 +- 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/eeschema/eeschema.cpp b/eeschema/eeschema.cpp index 5efa3e62c8..7b1d86cd90 100644 --- a/eeschema/eeschema.cpp +++ b/eeschema/eeschema.cpp @@ -205,7 +205,7 @@ bool EDA_APP::OnInit() // wxSetWorkingDirectory does not like empty paths wxSetWorkingDirectory( filename.GetPath() ); - if( frame->LoadOneEEProject( filename.GetFullPath(), false ) ) + if( frame->LoadOneEEProject( filename.GetFullName(), false ) ) frame->GetCanvas()->Refresh( true ); } else diff --git a/pcbnew/exporters/export_vrml.cpp b/pcbnew/exporters/export_vrml.cpp index 83965bfbf5..ba45f83988 100644 --- a/pcbnew/exporters/export_vrml.cpp +++ b/pcbnew/exporters/export_vrml.cpp @@ -44,6 +44,7 @@ * * 3. Export Graphics to Layer objects (see 3d_draw.cpp for clues) to ensure that custom * tracks/fills/logos are rendered. + * module->TransformGraphicShapesWithClearanceToPolygonSet * * For mechanical correctness, we should use the following settings with arcs: * 1. max. deviation: the number of edges should be determined by the max. @@ -925,7 +926,8 @@ static void export_vrml_text_module( TEXTE_MODULE* module ) } -static void export_vrml_edge_module( MODEL_VRML& aModel, EDGE_MODULE* aOutline ) +static void export_vrml_edge_module( MODEL_VRML& aModel, EDGE_MODULE* aOutline, + double aOrientation ) { LAYER_NUM layer = aOutline->GetLayer(); double x = aOutline->GetStart().x * aModel.scale + aModel.tx; @@ -936,6 +938,10 @@ static void export_vrml_edge_module( MODEL_VRML& aModel, EDGE_MODULE* aOutline ) switch( aOutline->GetShape() ) { + case S_SEGMENT: + export_vrml_line( aModel, layer, x, y, xf, yf, w ); + break; + case S_ARC: export_vrml_arc( aModel, layer, x, y, xf, yf, w, aOutline->GetAngle() / 10 ); break; @@ -944,8 +950,41 @@ static void export_vrml_edge_module( MODEL_VRML& aModel, EDGE_MODULE* aOutline ) export_vrml_circle( aModel, layer, x, y, xf, yf, w ); break; + case S_POLYGON: + { + VRML_LAYER* vl; + + if( !VRMLEXPORT::GetLayer( aModel, layer, &vl ) ) + break; + + int nvert = aOutline->GetPolyPoints().size(); + int i = 0; + + if( nvert < 3 ) break; + + int seg = vl->NewContour(); + + if( seg < 0 ) + break; + + while( i < nvert ) + { + CPolyPt corner( aOutline->GetPolyPoints()[i] ); + RotatePoint( &corner.x, &corner.y, aOrientation ); + corner.x += aOutline->GetPosition().x; + corner.y += aOutline->GetPosition().y; + + x = corner.x * aModel.scale + aModel.tx; + y = - ( corner.y * aModel.scale + aModel.ty ); + vl->AddVertex( seg, x, y ); + + ++i; + } + vl->EnsureWinding( seg, false ); + } + break; + default: - export_vrml_line( aModel, layer, x, y, xf, yf, w ); break; } } @@ -1134,7 +1173,8 @@ static void export_vrml_module( MODEL_VRML& aModel, BOARD* aPcb, MODULE* aModule break; case PCB_MODULE_EDGE_T: - export_vrml_edge_module( aModel, dynamic_cast( item ) ); + export_vrml_edge_module( aModel, dynamic_cast( item ), + aModule->GetOrientation() ); break; default: diff --git a/utils/idftools/idf_cylinder.cpp b/utils/idftools/idf_cylinder.cpp index e289a0f2d6..f64a9b3d5c 100644 --- a/utils/idftools/idf_cylinder.cpp +++ b/utils/idftools/idf_cylinder.cpp @@ -177,7 +177,7 @@ int main( int argc, char **argv ) tstr.clear(); tstr.str( line ); - if( (tstr >> extraZ) && extraZ > 0.0 ) + if( (tstr >> extraZ) && extraZ >= 0.0 ) ok = true; } From af54a74a245393d0637b2c26b98375ff839ce233 Mon Sep 17 00:00:00 2001 From: Marco Serantoni Date: Sat, 15 Feb 2014 11:01:27 +0100 Subject: [PATCH 41/52] [MacOSX] support for plugins in the bundle --- pcbnew/CMakeLists.txt | 10 +++++++++- pcbnew/pcbnew.cpp | 8 ++++---- scripting/kicadplugins.i | 7 +++++-- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index c1cf74bd32..6845afbdc1 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -607,6 +607,13 @@ if( KICAD_SCRIPTING ) DEPENDS FixSwigImportsScripting _pcbnew_py_copy COMMENT "Copying wxPython into pcbnew.app Framework" ) + + add_custom_target( pcbnew_copy_plugins ALL + COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/pcbnew/scripting/plugins ${PROJECT_SOURCE_DIR}/pcbnew/pcbnew.app/Contents/PlugIns/scripting/plugins + DEPENDS pcbnew_copy_wxpython_scripting + COMMENT "Copying plugins into bundle" + ) + # fix bundle after copying wxpython, fixing and copying add_dependencies( osx_fix_bundles pcbnew_copy_wxpython_scripting ) endif() @@ -636,10 +643,11 @@ if( KICAD_SCRIPTING_MODULES ) ) add_custom_target( pcbnew_copy_wxpython_module ALL - COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBWXPYTHON_ROOT}/wxPython ${CMAKE_SOURCE_DIR}/pcbnew/pcbnew.app/Contents/Frameworks/wxPython + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBWXPYTHON_ROOT}/wxPython ${PROJECT_SOURCE_DIR}/pcbnew/pcbnew.app/Contents/Frameworks/wxPython DEPENDS FixSwigImportsModuleScripting _pcbnew_so_copy COMMENT "Copying wxPython into pcbnew.app Frameworks" ) + # Tell that we have to run osx_fix_bundles fix after building _pcbnew and migrating wxPython add_dependencies( osx_fix_bundles pcbnew_copy_wxpython_module ) add_dependencies( osx_fix_bundles _pcbnew ) diff --git a/pcbnew/pcbnew.cpp b/pcbnew/pcbnew.cpp index d070e1825f..a7b4db9f4c 100644 --- a/pcbnew/pcbnew.cpp +++ b/pcbnew/pcbnew.cpp @@ -170,11 +170,11 @@ bool EDA_APP::OnInit() // Prepend in PYTHONPATH the content of the bundle libraries ! wxSetEnv("PYTHONPATH",((wxGetenv("PYTHONPATH") != NULL ) ? (wxString(wxGetenv("PYTHONPATH")) + ":") : wxString("")) + - "/Library/Application Support/kicad/scripting" + ":" + - bundledir.GetPath() + "/PlugIns" + ":" + - wxString( wxGetenv("HOME") ) + "/Library/Application Support/kicad/scripting" + bundledir.GetPath() + - "/Frameworks/wxPython/lib/python2.6/site-packages/wx-3.0-osx_cocoa" + "/Frameworks/wxPython/lib/python2.6/site-packages/wx-3.0-osx_cocoa" + ":" + + "/Library/Application Support/kicad/" + ":" + + bundledir.GetPath() + "/PlugIns" + ":" + + wxString( wxGetenv("HOME") ) + "/Library/Application Support/kicad/" ); #endif #endif diff --git a/scripting/kicadplugins.i b/scripting/kicadplugins.i index 32679ed69e..7a79f31588 100644 --- a/scripting/kicadplugins.i +++ b/scripting/kicadplugins.i @@ -80,11 +80,14 @@ def LoadPlugins( plugpath ): if kicad_path and os.path.isdir(kicad_path): plugin_directories.append(os.path.join(kicad_path, 'scripting', 'plugins')) - if sys.platform.startswith('linux') or sys.platform.startswith('darwin'): + if sys.platform.startswith('linux'): plugin_directories.append(os.environ['HOME']+'/.kicad_plugins/') plugin_directories.append(os.environ['HOME']+'/.kicad/scripting/plugins/') - + if sys.platform.startswith('darwin'): + for singlepath in sys.path: + if os.path.isdir( os.path.join( singlepath, 'scripting', 'plugins') ): + plugin_directories.append( os.path.join( singlepath, 'scripting', 'plugins') ) for plugins_dir in plugin_directories: sys.path.append(plugins_dir) From ea87d8247e189230fba09706527a33cba4b3e45e Mon Sep 17 00:00:00 2001 From: Marco Serantoni Date: Sat, 15 Feb 2014 19:09:14 +0100 Subject: [PATCH 42/52] =?UTF-8?q?[MacOSX]=C2=A0wxPython=20patch=20revised?= =?UTF-8?q?=20for=20http://trac.wxwidgets.org/ticket/15957?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- patches/wxpython-3.0.0_macosx_multiarch.patch | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/patches/wxpython-3.0.0_macosx_multiarch.patch b/patches/wxpython-3.0.0_macosx_multiarch.patch index d3b70dd0ec..b3d39dc7cc 100644 --- a/patches/wxpython-3.0.0_macosx_multiarch.patch +++ b/patches/wxpython-3.0.0_macosx_multiarch.patch @@ -1,6 +1,6 @@ === modified file 'wxPython/config.py' ---- wxPython/config.py 2014-02-08 12:23:31 +0000 -+++ wxPython/config.py 2014-02-08 13:58:07 +0000 +--- wxPython/config.py 2014-02-15 10:10:05 +0000 ++++ wxPython/config.py 2014-02-15 18:05:33 +0000 @@ -22,6 +22,7 @@ import sys, os, glob, fnmatch, tempfile @@ -9,7 +9,7 @@ EGGing = 'bdist_egg' in sys.argv or 'egg_info' in sys.argv if not EGGing: -@@ -1059,10 +1060,8 @@ +@@ -1059,10 +1060,9 @@ libs = ['stdc++'] NO_SCRIPTS = 1 if ARCH != "": @@ -17,8 +17,9 @@ - cflags.append(ARCH) - lflags.append("-arch") - lflags.append(ARCH) -+ cflags.append("-arch " + re.sub(","," -arch ",ARCH)) -+ #lflags.append("-arch " + re.sub(","," -arch ",ARCH)) ++ splitArch = "-arch " + re.sub(","," -arch ",ARCH) ++ cflags.extend(splitArch.split(' ')) ++ lflags.extend(splitArch.split(' ')) if not os.environ.get('CC') or not os.environ.get('CXX'): os.environ["CXX"] = getWxConfigValue('--cxx') From 19d3864a5d9e81e94432d1a8de8dd32a841eef12 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Feb 2014 19:42:52 +0100 Subject: [PATCH 43/52] GLM (tool for opengl) update to 0.9.4.6 --- include/gal/opengl/glm/core/_detail.hpp | 11 +- include/gal/opengl/glm/core/_fixes.hpp | 2 +- include/gal/opengl/glm/core/_swizzle.hpp | 105 +++++---- include/gal/opengl/glm/core/_swizzle_func.hpp | 2 +- include/gal/opengl/glm/core/_vectorize.hpp | 2 +- include/gal/opengl/glm/core/dummy.cpp | 2 +- include/gal/opengl/glm/core/func_common.hpp | 100 ++++----- include/gal/opengl/glm/core/func_common.inl | 211 ++++++++++-------- .../gal/opengl/glm/core/func_exponential.hpp | 22 +- .../gal/opengl/glm/core/func_exponential.inl | 3 +- .../gal/opengl/glm/core/func_geometric.hpp | 18 +- .../gal/opengl/glm/core/func_geometric.inl | 5 +- include/gal/opengl/glm/core/func_integer.hpp | 26 +-- include/gal/opengl/glm/core/func_integer.inl | 20 +- include/gal/opengl/glm/core/func_matrix.hpp | 20 +- include/gal/opengl/glm/core/func_matrix.inl | 2 +- include/gal/opengl/glm/core/func_noise.hpp | 10 +- include/gal/opengl/glm/core/func_noise.inl | 2 +- include/gal/opengl/glm/core/func_packing.hpp | 26 +-- include/gal/opengl/glm/core/func_packing.inl | 38 +++- .../opengl/glm/core/func_trigonometric.hpp | 32 +-- .../opengl/glm/core/func_trigonometric.inl | 2 +- .../glm/core/func_vector_relational.hpp | 20 +- .../glm/core/func_vector_relational.inl | 2 +- include/gal/opengl/glm/core/hint.hpp | 2 +- .../gal/opengl/glm/core/intrinsic_common.hpp | 2 +- .../gal/opengl/glm/core/intrinsic_common.inl | 2 +- .../opengl/glm/core/intrinsic_exponential.hpp | 2 +- .../opengl/glm/core/intrinsic_exponential.inl | 2 +- .../opengl/glm/core/intrinsic_geometric.hpp | 2 +- .../opengl/glm/core/intrinsic_geometric.inl | 2 +- .../gal/opengl/glm/core/intrinsic_matrix.hpp | 2 +- .../gal/opengl/glm/core/intrinsic_matrix.inl | 2 +- .../glm/core/intrinsic_trigonometric.hpp | 2 +- .../glm/core/intrinsic_trigonometric.inl | 2 +- .../glm/core/intrinsic_vector_relational.hpp | 2 +- .../glm/core/intrinsic_vector_relational.inl | 2 +- include/gal/opengl/glm/core/setup.hpp | 166 +++++++------- include/gal/opengl/glm/core/type.hpp | 2 +- include/gal/opengl/glm/core/type_float.hpp | 2 +- include/gal/opengl/glm/core/type_gentype.hpp | 2 +- include/gal/opengl/glm/core/type_gentype.inl | 2 +- include/gal/opengl/glm/core/type_half.hpp | 32 +-- include/gal/opengl/glm/core/type_half.inl | 8 +- include/gal/opengl/glm/core/type_int.hpp | 10 +- include/gal/opengl/glm/core/type_mat.hpp | 36 +-- include/gal/opengl/glm/core/type_mat.inl | 2 +- include/gal/opengl/glm/core/type_mat2x2.hpp | 52 ++--- include/gal/opengl/glm/core/type_mat2x2.inl | 22 +- include/gal/opengl/glm/core/type_mat2x3.hpp | 46 ++-- include/gal/opengl/glm/core/type_mat2x3.inl | 22 +- include/gal/opengl/glm/core/type_mat2x4.hpp | 42 ++-- include/gal/opengl/glm/core/type_mat2x4.inl | 24 +- include/gal/opengl/glm/core/type_mat3x2.hpp | 58 ++--- include/gal/opengl/glm/core/type_mat3x2.inl | 22 +- include/gal/opengl/glm/core/type_mat3x3.hpp | 52 ++--- include/gal/opengl/glm/core/type_mat3x3.inl | 22 +- include/gal/opengl/glm/core/type_mat3x4.hpp | 46 ++-- include/gal/opengl/glm/core/type_mat3x4.inl | 22 +- include/gal/opengl/glm/core/type_mat4x2.hpp | 42 ++-- include/gal/opengl/glm/core/type_mat4x2.inl | 22 +- include/gal/opengl/glm/core/type_mat4x3.hpp | 46 ++-- include/gal/opengl/glm/core/type_mat4x3.inl | 22 +- include/gal/opengl/glm/core/type_mat4x4.hpp | 52 ++--- include/gal/opengl/glm/core/type_mat4x4.inl | 24 +- include/gal/opengl/glm/core/type_size.hpp | 2 +- include/gal/opengl/glm/core/type_vec.hpp | 2 +- include/gal/opengl/glm/core/type_vec.inl | 2 +- include/gal/opengl/glm/core/type_vec1.hpp | 2 +- include/gal/opengl/glm/core/type_vec1.inl | 2 +- include/gal/opengl/glm/core/type_vec2.hpp | 32 +-- include/gal/opengl/glm/core/type_vec2.inl | 52 +---- include/gal/opengl/glm/core/type_vec3.hpp | 30 +-- include/gal/opengl/glm/core/type_vec3.inl | 52 +---- include/gal/opengl/glm/core/type_vec4.hpp | 30 +-- include/gal/opengl/glm/core/type_vec4.inl | 52 +---- include/gal/opengl/glm/ext.hpp | 2 +- include/gal/opengl/glm/glm.hpp | 2 +- include/gal/opengl/glm/gtc/constants.hpp | 52 ++--- include/gal/opengl/glm/gtc/constants.inl | 2 +- include/gal/opengl/glm/gtc/epsilon.hpp | 2 +- include/gal/opengl/glm/gtc/epsilon.inl | 2 +- include/gal/opengl/glm/gtc/half_float.hpp | 208 +++++++++-------- include/gal/opengl/glm/gtc/half_float.inl | 13 +- include/gal/opengl/glm/gtc/matrix_access.hpp | 2 +- include/gal/opengl/glm/gtc/matrix_access.inl | 2 +- include/gal/opengl/glm/gtc/matrix_integer.hpp | 2 +- include/gal/opengl/glm/gtc/matrix_inverse.hpp | 2 +- include/gal/opengl/glm/gtc/matrix_inverse.inl | 2 +- .../gal/opengl/glm/gtc/matrix_transform.hpp | 2 +- .../gal/opengl/glm/gtc/matrix_transform.inl | 20 +- include/gal/opengl/glm/gtc/noise.hpp | 2 +- include/gal/opengl/glm/gtc/noise.inl | 2 +- include/gal/opengl/glm/gtc/quaternion.hpp | 2 +- include/gal/opengl/glm/gtc/quaternion.inl | 14 +- include/gal/opengl/glm/gtc/random.hpp | 2 +- include/gal/opengl/glm/gtc/random.inl | 2 +- include/gal/opengl/glm/gtc/reciprocal.hpp | 2 +- include/gal/opengl/glm/gtc/reciprocal.inl | 2 +- include/gal/opengl/glm/gtc/swizzle.hpp | 2 +- include/gal/opengl/glm/gtc/swizzle.inl | 2 +- include/gal/opengl/glm/gtc/type_precision.hpp | 2 +- include/gal/opengl/glm/gtc/type_precision.inl | 2 +- include/gal/opengl/glm/gtc/type_ptr.hpp | 2 +- include/gal/opengl/glm/gtc/type_ptr.inl | 19 +- include/gal/opengl/glm/gtc/ulp.hpp | 2 +- include/gal/opengl/glm/gtc/ulp.inl | 12 +- .../gal/opengl/glm/gtx/associated_min_max.hpp | 2 +- .../gal/opengl/glm/gtx/associated_min_max.inl | 2 +- include/gal/opengl/glm/gtx/bit.hpp | 2 +- include/gal/opengl/glm/gtx/bit.inl | 2 +- include/gal/opengl/glm/gtx/closest_point.hpp | 2 +- include/gal/opengl/glm/gtx/closest_point.inl | 2 +- include/gal/opengl/glm/gtx/color_cast.hpp | 2 +- include/gal/opengl/glm/gtx/color_cast.inl | 2 +- include/gal/opengl/glm/gtx/color_space.hpp | 2 +- include/gal/opengl/glm/gtx/color_space.inl | 2 +- .../gal/opengl/glm/gtx/color_space_YCoCg.hpp | 2 +- .../gal/opengl/glm/gtx/color_space_YCoCg.inl | 2 +- include/gal/opengl/glm/gtx/compatibility.hpp | 2 +- include/gal/opengl/glm/gtx/compatibility.inl | 2 +- include/gal/opengl/glm/gtx/component_wise.hpp | 2 +- include/gal/opengl/glm/gtx/component_wise.inl | 4 +- include/gal/opengl/glm/gtx/constants.hpp | 2 +- include/gal/opengl/glm/gtx/epsilon.hpp | 2 +- include/gal/opengl/glm/gtx/euler_angles.hpp | 2 +- include/gal/opengl/glm/gtx/euler_angles.inl | 6 +- include/gal/opengl/glm/gtx/extend.hpp | 2 +- include/gal/opengl/glm/gtx/extend.inl | 2 +- .../gal/opengl/glm/gtx/extented_min_max.hpp | 2 +- .../gal/opengl/glm/gtx/extented_min_max.inl | 2 +- .../gal/opengl/glm/gtx/fast_exponential.hpp | 2 +- .../gal/opengl/glm/gtx/fast_exponential.inl | 2 +- .../gal/opengl/glm/gtx/fast_square_root.hpp | 2 +- .../gal/opengl/glm/gtx/fast_square_root.inl | 2 +- .../gal/opengl/glm/gtx/fast_trigonometry.hpp | 2 +- .../gal/opengl/glm/gtx/fast_trigonometry.inl | 2 +- include/gal/opengl/glm/gtx/gradient_paint.hpp | 2 +- include/gal/opengl/glm/gtx/gradient_paint.inl | 2 +- .../glm/gtx/handed_coordinate_space.hpp | 2 +- .../glm/gtx/handed_coordinate_space.inl | 2 +- include/gal/opengl/glm/gtx/inertia.hpp | 2 +- include/gal/opengl/glm/gtx/inertia.inl | 2 +- include/gal/opengl/glm/gtx/int_10_10_10_2.hpp | 2 +- include/gal/opengl/glm/gtx/int_10_10_10_2.inl | 2 +- include/gal/opengl/glm/gtx/integer.hpp | 2 +- include/gal/opengl/glm/gtx/integer.inl | 2 +- include/gal/opengl/glm/gtx/intersect.hpp | 2 +- include/gal/opengl/glm/gtx/intersect.inl | 2 +- include/gal/opengl/glm/gtx/log_base.hpp | 2 +- include/gal/opengl/glm/gtx/log_base.inl | 2 +- .../opengl/glm/gtx/matrix_cross_product.hpp | 2 +- .../opengl/glm/gtx/matrix_cross_product.inl | 2 +- .../opengl/glm/gtx/matrix_interpolation.hpp | 2 +- .../opengl/glm/gtx/matrix_interpolation.inl | 7 +- .../opengl/glm/gtx/matrix_major_storage.hpp | 2 +- .../opengl/glm/gtx/matrix_major_storage.inl | 2 +- .../gal/opengl/glm/gtx/matrix_operation.hpp | 2 +- .../gal/opengl/glm/gtx/matrix_operation.inl | 2 +- include/gal/opengl/glm/gtx/matrix_query.hpp | 2 +- include/gal/opengl/glm/gtx/matrix_query.inl | 2 +- include/gal/opengl/glm/gtx/mixed_product.hpp | 2 +- include/gal/opengl/glm/gtx/mixed_product.inl | 2 +- include/gal/opengl/glm/gtx/multiple.hpp | 2 +- include/gal/opengl/glm/gtx/multiple.inl | 20 +- include/gal/opengl/glm/gtx/noise.hpp | 2 +- include/gal/opengl/glm/gtx/norm.hpp | 2 +- include/gal/opengl/glm/gtx/norm.inl | 2 +- include/gal/opengl/glm/gtx/normal.hpp | 2 +- include/gal/opengl/glm/gtx/normal.inl | 2 +- include/gal/opengl/glm/gtx/normalize_dot.hpp | 2 +- include/gal/opengl/glm/gtx/normalize_dot.inl | 2 +- .../gal/opengl/glm/gtx/number_precision.hpp | 2 +- .../gal/opengl/glm/gtx/number_precision.inl | 2 +- include/gal/opengl/glm/gtx/ocl_type.hpp | 10 +- include/gal/opengl/glm/gtx/ocl_type.inl | 27 +++ include/gal/opengl/glm/gtx/optimum_pow.hpp | 2 +- include/gal/opengl/glm/gtx/optimum_pow.inl | 2 +- include/gal/opengl/glm/gtx/orthonormalize.hpp | 2 +- include/gal/opengl/glm/gtx/orthonormalize.inl | 2 +- include/gal/opengl/glm/gtx/perpendicular.hpp | 2 +- include/gal/opengl/glm/gtx/perpendicular.inl | 2 +- .../gal/opengl/glm/gtx/polar_coordinates.hpp | 14 +- .../gal/opengl/glm/gtx/polar_coordinates.inl | 4 +- include/gal/opengl/glm/gtx/projection.hpp | 2 +- include/gal/opengl/glm/gtx/projection.inl | 2 +- include/gal/opengl/glm/gtx/quaternion.hpp | 5 +- include/gal/opengl/glm/gtx/quaternion.inl | 15 +- include/gal/opengl/glm/gtx/random.hpp | 2 +- include/gal/opengl/glm/gtx/raw_data.hpp | 2 +- include/gal/opengl/glm/gtx/raw_data.inl | 2 +- include/gal/opengl/glm/gtx/reciprocal.hpp | 2 +- include/gal/opengl/glm/gtx/rotate_vector.hpp | 2 +- include/gal/opengl/glm/gtx/rotate_vector.inl | 8 +- include/gal/opengl/glm/gtx/simd_mat4.hpp | 2 +- include/gal/opengl/glm/gtx/simd_mat4.inl | 2 +- include/gal/opengl/glm/gtx/simd_vec4.hpp | 6 +- include/gal/opengl/glm/gtx/simd_vec4.inl | 4 +- include/gal/opengl/glm/gtx/spline.hpp | 2 +- include/gal/opengl/glm/gtx/spline.inl | 2 +- include/gal/opengl/glm/gtx/std_based_type.hpp | 2 +- include/gal/opengl/glm/gtx/std_based_type.inl | 2 +- include/gal/opengl/glm/gtx/string_cast.hpp | 2 +- include/gal/opengl/glm/gtx/transform.hpp | 2 +- include/gal/opengl/glm/gtx/transform.inl | 2 +- include/gal/opengl/glm/gtx/transform2.hpp | 2 +- include/gal/opengl/glm/gtx/transform2.inl | 2 +- include/gal/opengl/glm/gtx/ulp.hpp | 2 +- include/gal/opengl/glm/gtx/unsigned_int.hpp | 2 +- include/gal/opengl/glm/gtx/unsigned_int.inl | 2 +- include/gal/opengl/glm/gtx/vec1.hpp | 2 +- include/gal/opengl/glm/gtx/vec1.inl | 27 +++ include/gal/opengl/glm/gtx/vector_access.hpp | 2 +- include/gal/opengl/glm/gtx/vector_access.inl | 2 +- include/gal/opengl/glm/gtx/vector_angle.hpp | 2 +- include/gal/opengl/glm/gtx/vector_angle.inl | 2 +- include/gal/opengl/glm/gtx/vector_query.hpp | 2 +- include/gal/opengl/glm/gtx/vector_query.inl | 2 +- .../gal/opengl/glm/gtx/verbose_operator.hpp | 2 +- .../gal/opengl/glm/gtx/verbose_operator.inl | 2 +- include/gal/opengl/glm/gtx/wrap.hpp | 2 +- include/gal/opengl/glm/gtx/wrap.inl | 2 +- include/gal/opengl/glm/virtrev/xstream.hpp | 2 +- 223 files changed, 1298 insertions(+), 1316 deletions(-) diff --git a/include/gal/opengl/glm/core/_detail.hpp b/include/gal/opengl/glm/core/_detail.hpp index ecc9250ecf..e6b42c26ed 100644 --- a/include/gal/opengl/glm/core/_detail.hpp +++ b/include/gal/opengl/glm/core/_detail.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -445,7 +445,14 @@ namespace detail # define GLM_RESTRICT __declspec(restrict) # define GLM_RESTRICT_VAR __restrict # define GLM_CONSTEXPR -#elif((GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC)) && (GLM_COMPILER >= GLM_COMPILER_GCC31)) +#elif(GLM_COMPILER & GLM_COMPILER_INTEL) +# define GLM_DEPRECATED +# define GLM_ALIGN(x) __declspec(align(x)) +# define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct +# define GLM_RESTRICT +# define GLM_RESTRICT_VAR __restrict +# define GLM_CONSTEXPR +#elif(((GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC)) && (GLM_COMPILER >= GLM_COMPILER_GCC31)) || (GLM_COMPILER & GLM_COMPILER_CLANG)) # define GLM_DEPRECATED __attribute__((__deprecated__)) # define GLM_ALIGN(x) __attribute__((aligned(x))) # define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x))) diff --git a/include/gal/opengl/glm/core/_fixes.hpp b/include/gal/opengl/glm/core/_fixes.hpp index 1b4dddaac7..b4cec5f259 100644 --- a/include/gal/opengl/glm/core/_fixes.hpp +++ b/include/gal/opengl/glm/core/_fixes.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights diff --git a/include/gal/opengl/glm/core/_swizzle.hpp b/include/gal/opengl/glm/core/_swizzle.hpp index e234a02719..dc069443f7 100644 --- a/include/gal/opengl/glm/core/_swizzle.hpp +++ b/include/gal/opengl/glm/core/_swizzle.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -60,8 +60,8 @@ namespace detail typedef T value_type; protected: - value_type& elem (size_t i) { return (reinterpret_cast(_buffer))[i]; } - const value_type& elem (size_t i) const { return (reinterpret_cast(_buffer))[i]; } + GLM_FUNC_QUALIFIER value_type& elem (size_t i) { return (reinterpret_cast(_buffer))[i]; } + GLM_FUNC_QUALIFIER const value_type& elem (size_t i) const { return (reinterpret_cast(_buffer))[i]; } // Use an opaque buffer to *ensure* the compiler doesn't call a constructor. // The size 1 buffer is assumed to aligned to the actual members so that the @@ -77,19 +77,19 @@ namespace detail template struct _swizzle_base1 : public _swizzle_base0 { - V operator ()() const { return V(this->elem(E0), this->elem(E1)); } + GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1)); } }; template struct _swizzle_base1 : public _swizzle_base0 { - V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2)); } + GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2)); } }; template struct _swizzle_base1 : public _swizzle_base0 { - V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); } + GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); } }; // Internal class for implementing swizzle operators @@ -110,67 +110,73 @@ namespace detail typedef VecType vec_type; typedef ValueType value_type; - _swizzle_base2& operator= (const ValueType& t) + GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const ValueType& t) { for (int i = 0; i < N; ++i) (*this)[i] = t; return *this; } - _swizzle_base2& operator= (const VecType& that) + GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const VecType& that) { struct op { - void operator() (value_type& e, value_type& t) { e = t; } + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e = t; } }; _apply_op(that, op()); return *this; } - void operator -= (const VecType& that) + GLM_FUNC_QUALIFIER void operator -= (const VecType& that) { struct op { - void operator() (value_type& e, value_type& t) { e -= t; } + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e -= t; } }; _apply_op(that, op()); } - void operator += (const VecType& that) + GLM_FUNC_QUALIFIER void operator += (const VecType& that) { struct op { - void operator() (value_type& e, value_type& t) { e += t; } + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e += t; } }; _apply_op(that, op()); } - void operator *= (const VecType& that) + GLM_FUNC_QUALIFIER void operator *= (const VecType& that) { struct op { - void operator() (value_type& e, value_type& t) { e *= t; } + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e *= t; } }; _apply_op(that, op()); } - void operator /= (const VecType& that) + GLM_FUNC_QUALIFIER void operator /= (const VecType& that) { struct op { - void operator() (value_type& e, value_type& t) { e /= t; } + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e /= t; } }; _apply_op(that, op()); } - value_type& operator[] (size_t i) + GLM_FUNC_QUALIFIER value_type& operator[] (size_t i) { - static const int offset_dst[4] = { E0, E1, E2, E3 }; +#ifndef __CUDA_ARCH__ + static +#endif + const int offset_dst[4] = { E0, E1, E2, E3 }; return this->elem(offset_dst[i]); } - value_type operator[] (size_t i) const + GLM_FUNC_QUALIFIER value_type operator[] (size_t i) const { - static const int offset_dst[4] = { E0, E1, E2, E3 }; +#ifndef __CUDA_ARCH__ + static +#endif + const int offset_dst[4] = { E0, E1, E2, E3 }; return this->elem(offset_dst[i]); } protected: template - void _apply_op(const VecType& that, T op) + GLM_FUNC_QUALIFIER void _apply_op(const VecType& that, T op) { // Make a copy of the data in this == &that. // The copier should optimize out the copy in cases where the function is @@ -191,11 +197,14 @@ namespace detail typedef ValueType value_type; struct Stub {}; - _swizzle_base2& operator= (Stub const &) {} + GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const &) { return *this; } - value_type operator[] (size_t i) const + GLM_FUNC_QUALIFIER value_type operator[] (size_t i) const { - static const int offset_dst[4] = { E0, E1, E2, E3 }; +#ifndef __CUDA_ARCH__ + static +#endif + const int offset_dst[4] = { E0, E1, E2, E3 }; return this->elem(offset_dst[i]); } }; @@ -207,7 +216,7 @@ namespace detail using base_type::operator=; - operator VecType () const { return (*this)(); } + GLM_FUNC_QUALIFIER operator VecType () const { return (*this)(); } }; // @@ -223,17 +232,17 @@ namespace detail // #define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ _GLM_SWIZZLE_TEMPLATE2 \ - V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \ + GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \ { \ return a() OPERAND b(); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ - V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const V& b) \ + GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const V& b) \ { \ return a() OPERAND b; \ } \ _GLM_SWIZZLE_TEMPLATE1 \ - V operator OPERAND ( const V& a, const _GLM_SWIZZLE_TYPE1& b) \ + GLM_FUNC_QUALIFIER V operator OPERAND ( const V& a, const _GLM_SWIZZLE_TYPE1& b) \ { \ return a OPERAND b(); \ } @@ -243,12 +252,12 @@ namespace detail // #define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ _GLM_SWIZZLE_TEMPLATE1 \ - V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b) \ + GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b) \ { \ return a() OPERAND b; \ } \ _GLM_SWIZZLE_TEMPLATE1 \ - V operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b) \ + GLM_FUNC_QUALIFIER V operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b) \ { \ return a OPERAND b(); \ } @@ -258,7 +267,7 @@ namespace detail // #define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \ _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a) \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a) \ { \ return FUNCTION(a()); \ } @@ -268,22 +277,22 @@ namespace detail // #define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \ _GLM_SWIZZLE_TEMPLATE2 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \ { \ return FUNCTION(a(), b()); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \ { \ return FUNCTION(a(), b()); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b) \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b) \ { \ return FUNCTION(a(), b); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b) \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b) \ { \ return FUNCTION(a, b()); \ } @@ -293,22 +302,22 @@ namespace detail // #define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \ _GLM_SWIZZLE_TEMPLATE2 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c) \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c) \ { \ return FUNCTION(a(), b(), c); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \ { \ return FUNCTION(a(), b(), c); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\ { \ return FUNCTION(a(), b, c); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \ { \ return FUNCTION(a, b(), c); \ } @@ -640,6 +649,22 @@ namespace glm struct { glm::detail::swizzle<4,T,P,0,2,3,1> E0 ## E2 ## E3 ## E1; }; \ struct { glm::detail::swizzle<4,T,P,0,2,3,2> E0 ## E2 ## E3 ## E2; }; \ struct { glm::detail::swizzle<4,T,P,0,2,3,3> E0 ## E2 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,0,0> E0 ## E3 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,0,1> E0 ## E3 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,0,2> E0 ## E3 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,0,3> E0 ## E3 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,1,0> E0 ## E3 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,1,1> E0 ## E3 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,1,2> E0 ## E3 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,1,3> E0 ## E3 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,2,0> E0 ## E3 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,2,1> E0 ## E3 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,2,2> E0 ## E3 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,2,3> E0 ## E3 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,3,0> E0 ## E3 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,3,1> E0 ## E3 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,3,2> E0 ## E3 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,3,3> E0 ## E3 ## E3 ## E3; }; \ struct { glm::detail::swizzle<4,T,P,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ struct { glm::detail::swizzle<4,T,P,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ struct { glm::detail::swizzle<4,T,P,1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ diff --git a/include/gal/opengl/glm/core/_swizzle_func.hpp b/include/gal/opengl/glm/core/_swizzle_func.hpp index 255a3ec980..be66784373 100644 --- a/include/gal/opengl/glm/core/_swizzle_func.hpp +++ b/include/gal/opengl/glm/core/_swizzle_func.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights diff --git a/include/gal/opengl/glm/core/_vectorize.hpp b/include/gal/opengl/glm/core/_vectorize.hpp index 7e14cc17ef..9984014fa8 100644 --- a/include/gal/opengl/glm/core/_vectorize.hpp +++ b/include/gal/opengl/glm/core/_vectorize.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights diff --git a/include/gal/opengl/glm/core/dummy.cpp b/include/gal/opengl/glm/core/dummy.cpp index db03cf8970..38fcca0206 100644 --- a/include/gal/opengl/glm/core/dummy.cpp +++ b/include/gal/opengl/glm/core/dummy.cpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights diff --git a/include/gal/opengl/glm/core/func_common.hpp b/include/gal/opengl/glm/core/func_common.hpp index 9ed943ccf6..fcf7eb7619 100644 --- a/include/gal/opengl/glm/core/func_common.hpp +++ b/include/gal/opengl/glm/core/func_common.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -50,7 +50,7 @@ namespace glm /// @see GLSL abs man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType abs(genType const & x); + GLM_FUNC_DECL genType abs(genType const & x); /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. /// @@ -59,7 +59,7 @@ namespace glm /// @see GLSL sign man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType sign(genType const & x); + GLM_FUNC_DECL genType sign(genType const & x); /// Returns a value equal to the nearest integer that is less then or equal to x. /// @@ -68,7 +68,7 @@ namespace glm /// @see GLSL floor man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType floor(genType const & x); + GLM_FUNC_DECL genType floor(genType const & x); /// Returns a value equal to the nearest integer to x /// whose absolute value is not larger than the absolute value of x. @@ -78,7 +78,7 @@ namespace glm /// @see GLSL trunc man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType trunc(genType const & x); + GLM_FUNC_DECL genType trunc(genType const & x); /// Returns a value equal to the nearest integer to x. /// The fraction 0.5 will round in a direction chosen by the @@ -91,7 +91,7 @@ namespace glm /// @see GLSL round man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType round(genType const & x); + GLM_FUNC_DECL genType round(genType const & x); /// Returns a value equal to the nearest integer to x. /// A fractional part of 0.5 will round toward the nearest even @@ -103,7 +103,7 @@ namespace glm /// @see GLSL 4.20.8 specification, section 8.3 Common Functions /// @see New round to even technique template - genType roundEven(genType const & x); + GLM_FUNC_DECL genType roundEven(genType const & x); /// Returns a value equal to the nearest integer /// that is greater than or equal to x. @@ -113,7 +113,7 @@ namespace glm /// @see GLSL ceil man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType ceil(genType const & x); + GLM_FUNC_DECL genType ceil(genType const & x); /// Return x - floor(x). /// @@ -122,7 +122,7 @@ namespace glm /// @see GLSL fract man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType fract(genType const & x); + GLM_FUNC_DECL genType fract(genType const & x); /// Modulus. Returns x - y * floor(x / y) /// for each component in x using the floating point value y. @@ -132,7 +132,7 @@ namespace glm /// @see GLSL mod man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType mod( + GLM_FUNC_DECL genType mod( genType const & x, genType const & y); @@ -144,7 +144,7 @@ namespace glm /// @see GLSL mod man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType mod( + GLM_FUNC_DECL genType mod( genType const & x, typename genType::value_type const & y); @@ -158,7 +158,7 @@ namespace glm /// @see GLSL modf man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType modf( + GLM_FUNC_DECL genType modf( genType const & x, genType & i); @@ -169,12 +169,12 @@ namespace glm /// @see GLSL min man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType min( + GLM_FUNC_DECL genType min( genType const & x, genType const & y); template - genType min( + GLM_FUNC_DECL genType min( genType const & x, typename genType::value_type const & y); @@ -185,12 +185,12 @@ namespace glm /// @see GLSL max man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType max( + GLM_FUNC_DECL genType max( genType const & x, genType const & y); template - genType max( + GLM_FUNC_DECL genType max( genType const & x, typename genType::value_type const & y); @@ -202,33 +202,33 @@ namespace glm /// @see GLSL clamp man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType clamp( + GLM_FUNC_DECL genType clamp( genType const & x, genType const & minVal, genType const & maxVal); template - genType clamp( + GLM_FUNC_DECL genType clamp( genType const & x, typename genType::value_type const & minVal, typename genType::value_type const & maxVal); - //! @return If genTypeU is a floating scalar or vector: - //! Returns x * (1.0 - a) + y * a, i.e., the linear blend of - //! x and y using the floating-point value a. - //! The value for a is not restricted to the range [0, 1]. - //! - //! @return If genTypeU is a boolean scalar or vector: - //! Selects which vector each returned component comes - //! from. For a component of a that is false, the - //! corresponding component of x is returned. For a - //! component of a that is true, the corresponding - //! component of y is returned. Components of x and y that - //! are not selected are allowed to be invalid floating point - //! values and will have no effect on the results. Thus, this - //! provides different functionality than - //! genType mix(genType x, genType y, genType(a)) - //! where a is a Boolean vector. + /// If genTypeU is a floating scalar or vector: + /// Returns x * (1.0 - a) + y * a, i.e., the linear blend of + /// x and y using the floating-point value a. + /// The value for a is not restricted to the range [0, 1]. + /// + /// If genTypeU is a boolean scalar or vector: + /// Selects which vector each returned component comes + /// from. For a component of that is false, the + /// corresponding component of x is returned. For a + /// component of a that is true, the corresponding + /// component of y is returned. Components of x and y that + /// are not selected are allowed to be invalid floating point + /// values and will have no effect on the results. Thus, this + /// provides different functionality than + /// genType mix(genType x, genType y, genType(a)) + /// where a is a Boolean vector. /// /// @see GLSL mix man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions @@ -256,19 +256,19 @@ namespace glm /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter. /// @endcode template - genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a); + GLM_FUNC_DECL genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a); //! Returns 0.0 if x < edge, otherwise it returns 1.0. //! /// @see GLSL step man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType step( + GLM_FUNC_DECL genType step( genType const & edge, genType const & x); template - genType step( + GLM_FUNC_DECL genType step( typename genType::value_type const & edge, genType const & x); @@ -278,8 +278,8 @@ namespace glm /// you would want a threshold function with a smooth /// transition. This is equivalent to: /// genType t; - /// t = clamp ((x – edge0) / (edge1 – edge0), 0, 1); - /// return t * t * (3 – 2 * t); + /// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); + /// return t * t * (3 - 2 * t); /// Results are undefined if edge0 >= edge1. /// /// @tparam genType Floating-point scalar or vector types. @@ -287,13 +287,13 @@ namespace glm /// @see GLSL smoothstep man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType smoothstep( + GLM_FUNC_DECL genType smoothstep( genType const & edge0, genType const & edge1, genType const & x); template - genType smoothstep( + GLM_FUNC_DECL genType smoothstep( typename genType::value_type const & edge0, typename genType::value_type const & edge1, genType const & x); @@ -311,7 +311,7 @@ namespace glm /// @see GLSL isnan man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - typename genType::bool_type isnan(genType const & x); + GLM_FUNC_DECL typename genType::bool_type isnan(genType const & x); /// Returns true if x holds a positive infinity or negative /// infinity representation in the underlying implementation's @@ -324,7 +324,7 @@ namespace glm /// @see GLSL isinf man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - typename genType::bool_type isinf(genType const & x); + GLM_FUNC_DECL typename genType::bool_type isinf(genType const & x); /// Returns a signed integer value representing /// the encoding of a floating-point value. The floatingpoint @@ -336,7 +336,7 @@ namespace glm /// @see GLSL floatBitsToInt man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genIType floatBitsToInt(genType const & value); + GLM_FUNC_DECL genIType floatBitsToInt(genType const & value); /// Returns a unsigned integer value representing /// the encoding of a floating-point value. The floatingpoint @@ -348,7 +348,7 @@ namespace glm /// @see GLSL floatBitsToUint man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genUType floatBitsToUint(genType const & value); + GLM_FUNC_DECL genUType floatBitsToUint(genType const & value); /// Returns a floating-point value corresponding to a signed /// integer encoding of a floating-point value. @@ -364,7 +364,7 @@ namespace glm /// /// @todo Clarify this declaration, we don't need to actually specify the return type template - genType intBitsToFloat(genIType const & value); + GLM_FUNC_DECL genType intBitsToFloat(genIType const & value); /// Returns a floating-point value corresponding to a /// unsigned integer encoding of a floating-point value. @@ -380,7 +380,7 @@ namespace glm /// /// @todo Clarify this declaration, we don't need to actually specify the return type template - genType uintBitsToFloat(genUType const & value); + GLM_FUNC_DECL genType uintBitsToFloat(genUType const & value); /// Computes and returns a * b + c. /// @@ -389,7 +389,7 @@ namespace glm /// @see GLSL fma man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType fma(genType const & a, genType const & b, genType const & c); + GLM_FUNC_DECL genType fma(genType const & a, genType const & b, genType const & c); /// Splits x into a floating-point significand in the range /// [0.5, 1.0) and an integral exponent of two, such that: @@ -406,7 +406,7 @@ namespace glm /// @see GLSL frexp man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType frexp(genType const & x, genIType & exp); + GLM_FUNC_DECL genType frexp(genType const & x, genIType & exp); /// Builds a floating-point number from x and the /// corresponding integral exponent of two in exp, returning: @@ -420,7 +420,7 @@ namespace glm /// @see GLSL ldexp man page; /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template - genType ldexp(genType const & x, genIType const & exp); + GLM_FUNC_DECL genType ldexp(genType const & x, genIType const & exp); /// @} }//namespace glm diff --git a/include/gal/opengl/glm/core/func_common.inl b/include/gal/opengl/glm/core/func_common.inl index 9c1c0470c2..1c0d9df979 100644 --- a/include/gal/opengl/glm/core/func_common.inl +++ b/include/gal/opengl/glm/core/func_common.inl @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -36,7 +36,7 @@ namespace detail template struct Abs_ { - static genFIType get(genFIType const & x) + GLM_FUNC_QUALIFIER static genFIType get(genFIType const & x) { GLM_STATIC_ASSERT( detail::type::is_float || @@ -49,7 +49,7 @@ namespace detail template struct Abs_ { - static genFIType get(genFIType const & x) + GLM_FUNC_QUALIFIER static genFIType get(genFIType const & x) { GLM_STATIC_ASSERT( detail::type::is_uint, "'abs' only accept floating-point and integer inputs"); @@ -275,7 +275,7 @@ namespace detail //// Only valid if (INT_MIN <= x-y <= INT_MAX) //// min(x,y) //r = y + ((x - y) & ((x - y) >> (sizeof(int) * - //CHAR_BIT – 1))); + //CHAR_BIT - 1))); //// max(x,y) //r = x - ((x - y) & ((x - y) >> (sizeof(int) * //CHAR_BIT - 1))); @@ -420,93 +420,87 @@ namespace detail } // mix - template - GLM_FUNC_QUALIFIER genTypeT mix + template + GLM_FUNC_QUALIFIER genType mix ( - genTypeT const & x, - genTypeT const & y, - genTypeU const & a + genType const & x, + genType const & y, + genType const & a ) { - // It could be a vector too - //GLM_STATIC_ASSERT( - // detail::type::is_float && - // detail::type::is_float); + GLM_STATIC_ASSERT(detail::type::is_float , "'genType' is not floating-point type"); - //return x + a * (y - x); - return genTypeT(genTypeU(x) + a * genTypeU(y - x)); + return x + a * (y - x); } - template - GLM_FUNC_QUALIFIER detail::tvec2 mix + template + GLM_FUNC_QUALIFIER detail::tvec2 mix ( - detail::tvec2 const & x, - detail::tvec2 const & y, - valTypeB const & a + detail::tvec2 const & x, + detail::tvec2 const & y, + valType const & a ) { - return detail::tvec2( - detail::tvec2(x) + a * detail::tvec2(y - x)); + GLM_STATIC_ASSERT(detail::type::is_float , "'genType' is not floating-point type"); + + return x + a * (y - x); } - template - GLM_FUNC_QUALIFIER detail::tvec3 mix + template + GLM_FUNC_QUALIFIER detail::tvec3 mix ( - detail::tvec3 const & x, - detail::tvec3 const & y, - valTypeB const & a + detail::tvec3 const & x, + detail::tvec3 const & y, + valType const & a ) { - return detail::tvec3( - detail::tvec3(x) + a * detail::tvec3(y - x)); + return x + a * (y - x); } - template - GLM_FUNC_QUALIFIER detail::tvec4 mix + template + GLM_FUNC_QUALIFIER detail::tvec4 mix ( - detail::tvec4 const & x, - detail::tvec4 const & y, - valTypeB const & a + detail::tvec4 const & x, + detail::tvec4 const & y, + valType const & a ) { - return detail::tvec4( - detail::tvec4(x) + a * detail::tvec4(y - x)); + return x + a * (y - x); } - template - GLM_FUNC_QUALIFIER detail::tvec2 mix + template + GLM_FUNC_QUALIFIER detail::tvec2 mix ( - detail::tvec2 const & x, - detail::tvec2 const & y, - detail::tvec2 const & a + detail::tvec2 const & x, + detail::tvec2 const & y, + detail::tvec2 const & a ) { - return detail::tvec2( - detail::tvec2(x) + a * detail::tvec2(y - x)); + return x + a * (y - x); } - template - GLM_FUNC_QUALIFIER detail::tvec3 mix + template + GLM_FUNC_QUALIFIER detail::tvec3 mix ( - detail::tvec3 const & x, - detail::tvec3 const & y, - detail::tvec3 const & a + detail::tvec3 const & x, + detail::tvec3 const & y, + detail::tvec3 const & a ) { - return detail::tvec3( - detail::tvec3(x) + a * detail::tvec3(y - x)); + GLM_STATIC_ASSERT(detail::type::is_float , "'genType' is not floating-point type"); + + return x + a * (y - x); } - template - GLM_FUNC_QUALIFIER detail::tvec4 mix + template + GLM_FUNC_QUALIFIER detail::tvec4 mix ( - detail::tvec4 const & x, - detail::tvec4 const & y, - detail::tvec4 const & a + detail::tvec4 const & x, + detail::tvec4 const & y, + detail::tvec4 const & a ) { - return detail::tvec4( - detail::tvec4(x) + a * detail::tvec4(y - x)); + return x + a * (y - x); } //template @@ -525,15 +519,63 @@ namespace detail // return x + a * (y - x); //} - template - GLM_FUNC_QUALIFIER genType mix + template <> + GLM_FUNC_QUALIFIER float mix ( - genType const & x, - genType const & y, + float const & x, + float const & y, bool const & a ) { - GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + return a ? y : x; + } + + template <> + GLM_FUNC_QUALIFIER double mix + ( + double const & x, + double const & y, + bool const & a + ) + { + return a ? y : x; + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 mix + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + bool a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + return a ? y : x; + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 mix + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + bool a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + return a ? y : x; + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 mix + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + bool a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); return a ? y : x; } @@ -552,8 +594,7 @@ namespace detail for ( typename detail::tvec2::size_type i = 0; - i < detail::tvec2::value_size(); - ++i + i < x.length(); ++i ) { result[i] = a[i] ? y[i] : x[i]; @@ -575,8 +616,7 @@ namespace detail for ( typename detail::tvec3::size_type i = 0; - i < detail::tvec3::value_size(); - ++i + i < x.length(); ++i ) { result[i] = a[i] ? y[i] : x[i]; @@ -598,8 +638,7 @@ namespace detail for ( typename detail::tvec4::size_type i = 0; - i < detail::tvec4::value_size(); - ++i + i < x.length(); ++i ) { result[i] = a[i] ? y[i] : x[i]; @@ -803,17 +842,19 @@ namespace detail { GLM_STATIC_ASSERT(detail::type::is_float, "'isnan' only accept floating-point inputs"); -# if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_INTEL)) +# if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_INTEL)) return _isnan(x) != 0; -# elif(GLM_COMPILER & GLM_COMPILER_GCC) +# elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) # if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) return _isnan(x) != 0; # else return std::isnan(x); # endif -# else +# elif(GLM_COMPILER & GLM_COMPILER_CUDA) + return isnan(x) != 0; +# else return std::isnan(x); -# endif +# endif } template @@ -858,32 +899,20 @@ namespace detail { GLM_STATIC_ASSERT(detail::type::is_float, "'isinf' only accept floating-point inputs"); -# if(GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC)) +# if(GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC)) return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; -# elif(GLM_COMPILER & GLM_COMPILER_GCC) +# elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) # if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) return _isinf(x) != 0; # else return std::isinf(x); # endif -# else +# elif(GLM_COMPILER & GLM_COMPILER_CUDA) + // http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab + return isinf(double(x)) != 0; +# else return std::isinf(x); -# endif -/* -# if(GLM_COMPILER & GLM_COMPILER_VC) - return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; -# elif(GLM_COMPILER & GLM_COMPILER_GCC) -# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return _isinf(x) != 0; -# else - return std::isinf(x); -# endif -# elif(GLM_COMPILER & GLM_COMPILER_INTEL) - return isinf(x) != 0; -# else - return std::isinf(x); -# endif -*/ +# endif } template diff --git a/include/gal/opengl/glm/core/func_exponential.hpp b/include/gal/opengl/glm/core/func_exponential.hpp index 557ac175d2..dc76fcbb93 100644 --- a/include/gal/opengl/glm/core/func_exponential.hpp +++ b/include/gal/opengl/glm/core/func_exponential.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -41,16 +41,16 @@ namespace glm /// @addtogroup core_func_exponential /// @{ - /// Returns x raised to the y power. + /// Returns 'base' raised to the power 'exponent'. /// - /// @param x pow function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. - /// @param y + /// @param base Floating point value. pow function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. + /// @param exponent Floating point value representing the 'exponent'. /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL pow man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template - genType pow(genType const & x, genType const & y); + GLM_FUNC_DECL genType pow(genType const & base, genType const & exponent); /// Returns the natural exponentiation of x, i.e., e^x. /// @@ -60,7 +60,7 @@ namespace glm /// @see GLSL exp man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template - genType exp(genType const & x); + GLM_FUNC_DECL genType exp(genType const & x); /// Returns the natural logarithm of x, i.e., /// returns the value y which satisfies the equation x = e^y. @@ -72,7 +72,7 @@ namespace glm /// @see GLSL log man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template - genType log(genType const & x); + GLM_FUNC_DECL genType log(genType const & x); /// Returns 2 raised to the x power. /// @@ -82,7 +82,7 @@ namespace glm /// @see GLSL exp2 man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template - genType exp2(genType const & x); + GLM_FUNC_DECL genType exp2(genType const & x); /// Returns the base 2 log of x, i.e., returns the value y, /// which satisfies the equation x = 2 ^ y. @@ -93,7 +93,7 @@ namespace glm /// @see GLSL log2 man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template - genType log2(genType const & x); + GLM_FUNC_DECL genType log2(genType const & x); /// Returns the positive square root of x. /// @@ -103,7 +103,7 @@ namespace glm /// @see GLSL sqrt man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template - genType sqrt(genType const & x); + GLM_FUNC_DECL genType sqrt(genType const & x); /// Returns the reciprocal of the positive square root of x. /// @@ -113,7 +113,7 @@ namespace glm /// @see GLSL inversesqrt man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template - genType inversesqrt(genType const & x); + GLM_FUNC_DECL genType inversesqrt(genType const & x); /// @} }//namespace glm diff --git a/include/gal/opengl/glm/core/func_exponential.inl b/include/gal/opengl/glm/core/func_exponential.inl index 6ae709c6de..1b08786df6 100644 --- a/include/gal/opengl/glm/core/func_exponential.inl +++ b/include/gal/opengl/glm/core/func_exponential.inl @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -146,6 +146,7 @@ namespace _detail ) { GLM_STATIC_ASSERT(detail::type::is_float, "'inversesqrt' only accept floating-point input"); + assert(x > genType(0)); return genType(1) / ::std::sqrt(x); } diff --git a/include/gal/opengl/glm/core/func_geometric.hpp b/include/gal/opengl/glm/core/func_geometric.hpp index 1c92e1b88b..c221084f14 100644 --- a/include/gal/opengl/glm/core/func_geometric.hpp +++ b/include/gal/opengl/glm/core/func_geometric.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -48,7 +48,7 @@ namespace glm /// @see GLSL length man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template - typename genType::value_type length( + GLM_FUNC_DECL typename genType::value_type length( genType const & x); /// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). @@ -58,7 +58,7 @@ namespace glm /// @see GLSL distance man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template - typename genType::value_type distance( + GLM_FUNC_DECL typename genType::value_type distance( genType const & p0, genType const & p1); @@ -69,7 +69,7 @@ namespace glm /// @see GLSL dot man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template - typename genType::value_type dot( + GLM_FUNC_DECL typename genType::value_type dot( genType const & x, genType const & y); @@ -80,7 +80,7 @@ namespace glm /// @see GLSL cross man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template - detail::tvec3 cross( + GLM_FUNC_DECL detail::tvec3 cross( detail::tvec3 const & x, detail::tvec3 const & y); @@ -89,7 +89,7 @@ namespace glm /// @see GLSL normalize man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template - genType normalize( + GLM_FUNC_DECL genType normalize( genType const & x); /// If dot(Nref, I) < 0.0, return N, otherwise, return -N. @@ -99,7 +99,7 @@ namespace glm /// @see GLSL faceforward man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template - genType faceforward( + GLM_FUNC_DECL genType faceforward( genType const & N, genType const & I, genType const & Nref); @@ -112,7 +112,7 @@ namespace glm /// @see GLSL reflect man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template - genType reflect( + GLM_FUNC_DECL genType reflect( genType const & I, genType const & N); @@ -125,7 +125,7 @@ namespace glm /// @see GLSL refract man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template - genType refract( + GLM_FUNC_DECL genType refract( genType const & I, genType const & N, typename genType::value_type const & eta); diff --git a/include/gal/opengl/glm/core/func_geometric.inl b/include/gal/opengl/glm/core/func_geometric.inl index 1923d05d1b..259a0ffdf9 100644 --- a/include/gal/opengl/glm/core/func_geometric.inl +++ b/include/gal/opengl/glm/core/func_geometric.inl @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -132,7 +132,6 @@ namespace glm ( genType const & x, genType const & y - ) { GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); @@ -271,7 +270,7 @@ namespace glm // reflect template - genType reflect + GLM_FUNC_QUALIFIER genType reflect ( genType const & I, genType const & N diff --git a/include/gal/opengl/glm/core/func_integer.hpp b/include/gal/opengl/glm/core/func_integer.hpp index affbcd8fa5..df9a401591 100644 --- a/include/gal/opengl/glm/core/func_integer.hpp +++ b/include/gal/opengl/glm/core/func_integer.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -52,7 +52,7 @@ namespace glm /// @see GLSL uaddCarry man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template - genUType uaddCarry( + GLM_FUNC_DECL genUType uaddCarry( genUType const & x, genUType const & y, genUType & carry); @@ -66,7 +66,7 @@ namespace glm /// @see GLSL usubBorrow man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template - genUType usubBorrow( + GLM_FUNC_DECL genUType usubBorrow( genUType const & x, genUType const & y, genUType & borrow); @@ -80,7 +80,7 @@ namespace glm /// @see GLSL umulExtended man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template - void umulExtended( + GLM_FUNC_DECL void umulExtended( genUType const & x, genUType const & y, genUType & msb, @@ -95,7 +95,7 @@ namespace glm /// @see GLSL imulExtended man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template - void imulExtended( + GLM_FUNC_DECL void imulExtended( genIType const & x, genIType const & y, genIType & msb, @@ -105,7 +105,7 @@ namespace glm /// returning them in the least significant bits of the result. /// For unsigned data types, the most significant bits of the /// result will be set to zero. For signed data types, the - /// most significant bits will be set to the value of bit offset + base – 1. + /// most significant bits will be set to the value of bit offset + base - 1. /// /// If bits is zero, the result will be zero. The result will be /// undefined if offset or bits is negative, or if the sum of @@ -117,7 +117,7 @@ namespace glm /// @see GLSL bitfieldExtract man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template - genIUType bitfieldExtract( + GLM_FUNC_DECL genIUType bitfieldExtract( genIUType const & Value, int const & Offset, int const & Bits); @@ -125,7 +125,7 @@ namespace glm /// Returns the insertion the bits least-significant bits of insert into base. /// /// The result will have bits [offset, offset + bits - 1] taken - /// from bits [0, bits – 1] of insert, and all other bits taken + /// from bits [0, bits - 1] of insert, and all other bits taken /// directly from the corresponding bits of base. If bits is /// zero, the result will simply be base. The result will be /// undefined if offset or bits is negative, or if the sum of @@ -137,7 +137,7 @@ namespace glm /// @see GLSL bitfieldInsert man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template - genIUType bitfieldInsert( + GLM_FUNC_DECL genIUType bitfieldInsert( genIUType const & Base, genIUType const & Insert, int const & Offset, @@ -152,7 +152,7 @@ namespace glm /// @see GLSL bitfieldReverse man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template - genIUType bitfieldReverse(genIUType const & Value); + GLM_FUNC_DECL genIUType bitfieldReverse(genIUType const & Value); /// Returns the number of bits set to 1 in the binary representation of value. /// @@ -163,7 +163,7 @@ namespace glm /// /// @todo Clarify the declaration to specify that scalars are suported. template class genIUType> - typename genIUType::signed_type bitCount(genIUType const & Value); + GLM_FUNC_DECL typename genIUType::signed_type bitCount(genIUType const & Value); /// Returns the bit number of the least significant bit set to /// 1 in the binary representation of value. @@ -176,7 +176,7 @@ namespace glm /// /// @todo Clarify the declaration to specify that scalars are suported. template class genIUType> - typename genIUType::signed_type findLSB(genIUType const & Value); + GLM_FUNC_DECL typename genIUType::signed_type findLSB(genIUType const & Value); /// Returns the bit number of the most significant bit in the binary representation of value. /// For positive integers, the result will be the bit number of the most significant bit set to 1. @@ -190,7 +190,7 @@ namespace glm /// /// @todo Clarify the declaration to specify that scalars are suported. template class genIUType> - typename genIUType::signed_type findMSB(genIUType const & Value); + GLM_FUNC_DECL typename genIUType::signed_type findMSB(genIUType const & Value); /// @} }//namespace glm diff --git a/include/gal/opengl/glm/core/func_integer.inl b/include/gal/opengl/glm/core/func_integer.inl index ae7bf8af36..ad8b1fe83c 100644 --- a/include/gal/opengl/glm/core/func_integer.inl +++ b/include/gal/opengl/glm/core/func_integer.inl @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -26,10 +26,12 @@ /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// +#if(GLM_ARCH != GLM_ARCH_PURE) #if(GLM_COMPILER & GLM_COMPILER_VC) -#include -#pragma intrinsic(_BitScanReverse) -#endif +# include +# pragma intrinsic(_BitScanReverse) +#endif//(GLM_COMPILER & GLM_COMPILER_VC) +#endif//(GLM_ARCH != GLM_ARCH_PURE) namespace glm { @@ -103,7 +105,7 @@ namespace glm if(x > y) return genUType(detail::highp_int_t(x) - detail::highp_int_t(y)); else - return genUType(detail::highp_int_t(1) << detail::highp_int_t(32) + detail::highp_int_t(x) - detail::highp_int_t(y)); + return genUType((detail::highp_int_t(1) << detail::highp_int_t(32)) + detail::highp_int_t(x) - detail::highp_int_t(y)); } template @@ -521,7 +523,6 @@ namespace glm } // findMSB -/* #if((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_VC)) template @@ -538,7 +539,7 @@ namespace glm _BitScanReverse(&Result, Value); return int(Result); } - +/* // __builtin_clz seems to be buggy as it crasks for some values, from 0x00200000 to 80000000 #elif((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC40)) @@ -560,8 +561,9 @@ namespace glm // return 31 - __builtin_clzl(Value); } -#else */ +#else + /* SSE implementation idea __m128i const Zero = _mm_set_epi32( 0, 0, 0, 0); @@ -606,7 +608,7 @@ namespace glm return MostSignificantBit; } } -//#endif//(GLM_COMPILER) +#endif//(GLM_COMPILER) template GLM_FUNC_QUALIFIER detail::tvec2 findMSB diff --git a/include/gal/opengl/glm/core/func_matrix.hpp b/include/gal/opengl/glm/core/func_matrix.hpp index ac1fda8482..3c92cbbaba 100644 --- a/include/gal/opengl/glm/core/func_matrix.hpp +++ b/include/gal/opengl/glm/core/func_matrix.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -53,7 +53,7 @@ namespace glm /// @see GLSL matrixCompMult man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template - matType matrixCompMult( + GLM_FUNC_DECL matType matrixCompMult( matType const & x, matType const & y); @@ -68,7 +68,7 @@ namespace glm /// /// @todo Clarify the declaration to specify that matType doesn't have to be provided when used. template - matType outerProduct( + GLM_FUNC_DECL matType outerProduct( vecType const & c, vecType const & r); @@ -79,7 +79,7 @@ namespace glm /// @see GLSL transpose man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template - typename matType::transpose_type transpose( + GLM_FUNC_DECL typename matType::transpose_type transpose( matType const & x); /// Return the determinant of a mat2 matrix. @@ -89,7 +89,7 @@ namespace glm /// @see GLSL determinant man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template - typename detail::tmat2x2::value_type determinant( + GLM_FUNC_DECL typename detail::tmat2x2::value_type determinant( detail::tmat2x2 const & m); /// Return the determinant of a mat3 matrix. @@ -99,7 +99,7 @@ namespace glm /// @see GLSL determinant man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template - typename detail::tmat3x3::value_type determinant( + GLM_FUNC_DECL typename detail::tmat3x3::value_type determinant( detail::tmat3x3 const & m); /// Return the determinant of a mat4 matrix. @@ -109,7 +109,7 @@ namespace glm /// @see GLSL determinant man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template - typename detail::tmat4x4::value_type determinant( + GLM_FUNC_DECL typename detail::tmat4x4::value_type determinant( detail::tmat4x4 const & m); /// Return the inverse of a mat2 matrix. @@ -119,7 +119,7 @@ namespace glm /// @see GLSL inverse man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template - detail::tmat2x2 inverse( + GLM_FUNC_DECL detail::tmat2x2 inverse( detail::tmat2x2 const & m); /// Return the inverse of a mat3 matrix. @@ -129,7 +129,7 @@ namespace glm /// @see GLSL inverse man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template - detail::tmat3x3 inverse( + GLM_FUNC_DECL detail::tmat3x3 inverse( detail::tmat3x3 const & m); /// Return the inverse of a mat4 matrix. @@ -139,7 +139,7 @@ namespace glm /// @see GLSL inverse man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template - detail::tmat4x4 inverse( + GLM_FUNC_DECL detail::tmat4x4 inverse( detail::tmat4x4 const & m); /// @} diff --git a/include/gal/opengl/glm/core/func_matrix.inl b/include/gal/opengl/glm/core/func_matrix.inl index 3b07b74b1d..d89d5d4b16 100644 --- a/include/gal/opengl/glm/core/func_matrix.inl +++ b/include/gal/opengl/glm/core/func_matrix.inl @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights diff --git a/include/gal/opengl/glm/core/func_noise.hpp b/include/gal/opengl/glm/core/func_noise.hpp index 369f56de6f..3e5f874187 100644 --- a/include/gal/opengl/glm/core/func_noise.hpp +++ b/include/gal/opengl/glm/core/func_noise.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -50,7 +50,7 @@ namespace glm /// @see GLSL noise1 man page /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions template - typename genType::value_type noise1(genType const & x); + GLM_FUNC_DECL typename genType::value_type noise1(genType const & x); /// Returns a 2D noise value based on the input value x. /// @@ -59,7 +59,7 @@ namespace glm /// @see GLSL noise2 man page /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions template - detail::tvec2 noise2(genType const & x); + GLM_FUNC_DECL detail::tvec2 noise2(genType const & x); /// Returns a 3D noise value based on the input value x. /// @@ -68,7 +68,7 @@ namespace glm /// @see GLSL noise3 man page /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions template - detail::tvec3 noise3(genType const & x); + GLM_FUNC_DECL detail::tvec3 noise3(genType const & x); /// Returns a 4D noise value based on the input value x. /// @@ -77,7 +77,7 @@ namespace glm /// @see GLSL noise4 man page /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions template - detail::tvec4 noise4(genType const & x); + GLM_FUNC_DECL detail::tvec4 noise4(genType const & x); /// @} }//namespace glm diff --git a/include/gal/opengl/glm/core/func_noise.inl b/include/gal/opengl/glm/core/func_noise.inl index a53ba5a75b..68a19333f1 100644 --- a/include/gal/opengl/glm/core/func_noise.inl +++ b/include/gal/opengl/glm/core/func_noise.inl @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights diff --git a/include/gal/opengl/glm/core/func_packing.hpp b/include/gal/opengl/glm/core/func_packing.hpp index e4f26dcbf5..b4312e12b4 100644 --- a/include/gal/opengl/glm/core/func_packing.hpp +++ b/include/gal/opengl/glm/core/func_packing.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -52,7 +52,7 @@ namespace glm //! /// @see GLSL packUnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::uint32 packUnorm2x16(detail::tvec2 const & v); + GLM_FUNC_DECL detail::uint32 packUnorm2x16(detail::tvec2 const & v); //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. //! Then, the results are packed into the returned 32-bit unsigned integer. @@ -65,7 +65,7 @@ namespace glm //! /// @see GLSL packSnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::uint32 packSnorm2x16(detail::tvec2 const & v); + GLM_FUNC_DECL detail::uint32 packSnorm2x16(detail::tvec2 const & v); //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. //! Then, the results are packed into the returned 32-bit unsigned integer. @@ -78,7 +78,7 @@ namespace glm //! /// @see GLSL packUnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::uint32 packUnorm4x8(detail::tvec4 const & v); + GLM_FUNC_DECL detail::uint32 packUnorm4x8(detail::tvec4 const & v); //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. //! Then, the results are packed into the returned 32-bit unsigned integer. @@ -91,7 +91,7 @@ namespace glm //! /// @see GLSL packSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::uint32 packSnorm4x8(detail::tvec4 const & v); + GLM_FUNC_DECL detail::uint32 packSnorm4x8(detail::tvec4 const & v); //! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. //! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. @@ -104,7 +104,7 @@ namespace glm //! /// @see GLSL unpackUnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::tvec2 unpackUnorm2x16(detail::uint32 const & p); + GLM_FUNC_DECL detail::tvec2 unpackUnorm2x16(detail::uint32 const & p); //! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. //! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. @@ -117,7 +117,7 @@ namespace glm //! /// @see GLSL unpackSnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::tvec2 unpackSnorm2x16(detail::uint32 const & p); + GLM_FUNC_DECL detail::tvec2 unpackSnorm2x16(detail::uint32 const & p); /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. @@ -130,7 +130,7 @@ namespace glm /// /// @see GLSL unpackUnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::tvec4 unpackUnorm4x8(detail::uint32 const & p); + GLM_FUNC_DECL detail::tvec4 unpackUnorm4x8(detail::uint32 const & p); /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. @@ -143,7 +143,7 @@ namespace glm /// /// @see GLSL unpackSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::tvec4 unpackSnorm4x8(detail::uint32 const & p); + GLM_FUNC_DECL detail::tvec4 unpackSnorm4x8(detail::uint32 const & p); /// Returns a double-precision value obtained by packing the components of v into a 64-bit value. /// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. @@ -153,7 +153,7 @@ namespace glm /// /// @see GLSL packDouble2x32 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - double packDouble2x32(detail::tvec2 const & v); + GLM_FUNC_DECL double packDouble2x32(detail::tvec2 const & v); /// Returns a two-component unsigned integer vector representation of v. /// The bit-level representation of v is preserved. @@ -162,7 +162,7 @@ namespace glm /// /// @see GLSL unpackDouble2x32 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::tvec2 unpackDouble2x32(double const & v); + GLM_FUNC_DECL detail::tvec2 unpackDouble2x32(double const & v); /// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector /// to the 16-bit floating-point representation found in the OpenGL Specification, @@ -172,7 +172,7 @@ namespace glm /// /// @see GLSL packHalf2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - uint packHalf2x16(vec2 const & v); + GLM_FUNC_DECL uint packHalf2x16(vec2 const & v); /// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, @@ -182,7 +182,7 @@ namespace glm /// /// @see GLSL unpackHalf2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - vec2 unpackHalf2x16(uint const & v); + GLM_FUNC_DECL vec2 unpackHalf2x16(uint const & v); /// @} }//namespace glm diff --git a/include/gal/opengl/glm/core/func_packing.inl b/include/gal/opengl/glm/core/func_packing.inl index 27197151bb..e10e161840 100644 --- a/include/gal/opengl/glm/core/func_packing.inl +++ b/include/gal/opengl/glm/core/func_packing.inl @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -136,12 +136,42 @@ namespace glm GLM_FUNC_QUALIFIER double packDouble2x32(detail::tvec2 const & v) { - return *(double*)&v; + struct uint32_pair + { + detail::uint32 x; + detail::uint32 y; + }; + + union helper + { + uint32_pair input; + double output; + } Helper; + + Helper.input.x = v.x; + Helper.input.y = v.y; + + return Helper.output; + //return *(double*)&v; } GLM_FUNC_QUALIFIER detail::tvec2 unpackDouble2x32(double const & v) { - return *(detail::tvec2*)&v; + struct uint32_pair + { + detail::uint32 x; + detail::uint32 y; + }; + + union helper + { + double input; + uint32_pair output; + } Helper; + + Helper.input = v; + + return detail::tvec2(Helper.output.x, Helper.output.y); } GLM_FUNC_QUALIFIER uint packHalf2x16(detail::tvec2 const & v) @@ -157,7 +187,7 @@ namespace glm Pack.orig.a = detail::toFloat16(v.x); Pack.orig.b = detail::toFloat16(v.y); - return *(uint*)&Pack; + return Pack.other; } GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint const & v) diff --git a/include/gal/opengl/glm/core/func_trigonometric.hpp b/include/gal/opengl/glm/core/func_trigonometric.hpp index ccb7f9ea6d..9954d9cea6 100644 --- a/include/gal/opengl/glm/core/func_trigonometric.hpp +++ b/include/gal/opengl/glm/core/func_trigonometric.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -52,7 +52,7 @@ namespace glm /// @see GLSL radians man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType radians(genType const & degrees); + GLM_FUNC_DECL genType radians(genType const & degrees); /// Converts radians to degrees and returns the result. /// @@ -61,7 +61,7 @@ namespace glm /// @see GLSL degrees man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType degrees(genType const & radians); + GLM_FUNC_DECL genType degrees(genType const & radians); /// The standard trigonometric sine function. /// The values returned by this function will range from [-1, 1]. @@ -71,7 +71,7 @@ namespace glm /// @see GLSL sin man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType sin(genType const & angle); + GLM_FUNC_DECL genType sin(genType const & angle); /// The standard trigonometric cosine function. /// The values returned by this function will range from [-1, 1]. @@ -81,7 +81,7 @@ namespace glm /// @see GLSL cos man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType cos(genType const & angle); + GLM_FUNC_DECL genType cos(genType const & angle); /// The standard trigonometric tangent function. /// @@ -90,7 +90,7 @@ namespace glm /// @see GLSL tan man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType tan(genType const & angle); + GLM_FUNC_DECL genType tan(genType const & angle); /// Arc sine. Returns an angle whose sine is x. /// The range of values returned by this function is [-PI/2, PI/2]. @@ -101,7 +101,7 @@ namespace glm /// @see GLSL asin man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType asin(genType const & x); + GLM_FUNC_DECL genType asin(genType const & x); /// Arc cosine. Returns an angle whose sine is x. /// The range of values returned by this function is [0, PI]. @@ -112,7 +112,7 @@ namespace glm /// @see GLSL acos man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType acos(genType const & x); + GLM_FUNC_DECL genType acos(genType const & x); /// Arc tangent. Returns an angle whose tangent is y/x. /// The signs of x and y are used to determine what @@ -125,7 +125,7 @@ namespace glm /// @see GLSL atan man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType atan(genType const & y, genType const & x); + GLM_FUNC_DECL genType atan(genType const & y, genType const & x); /// Arc tangent. Returns an angle whose tangent is y_over_x. /// The range of values returned by this function is [-PI/2, PI/2]. @@ -135,7 +135,7 @@ namespace glm /// @see GLSL atan man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType atan(genType const & y_over_x); + GLM_FUNC_DECL genType atan(genType const & y_over_x); /// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2 /// @@ -144,7 +144,7 @@ namespace glm /// @see GLSL sinh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType sinh(genType const & angle); + GLM_FUNC_DECL genType sinh(genType const & angle); /// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2 /// @@ -153,7 +153,7 @@ namespace glm /// @see GLSL cosh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType cosh(genType const & angle); + GLM_FUNC_DECL genType cosh(genType const & angle); /// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) /// @@ -162,7 +162,7 @@ namespace glm /// @see GLSL tanh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType tanh(genType const & angle); + GLM_FUNC_DECL genType tanh(genType const & angle); /// Arc hyperbolic sine; returns the inverse of sinh. /// @@ -171,7 +171,7 @@ namespace glm /// @see GLSL asinh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType asinh(genType const & x); + GLM_FUNC_DECL genType asinh(genType const & x); /// Arc hyperbolic cosine; returns the non-negative inverse /// of cosh. Results are undefined if x < 1. @@ -181,7 +181,7 @@ namespace glm /// @see GLSL acosh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType acosh(genType const & x); + GLM_FUNC_DECL genType acosh(genType const & x); /// Arc hyperbolic tangent; returns the inverse of tanh. /// Results are undefined if abs(x) >= 1. @@ -191,7 +191,7 @@ namespace glm /// @see GLSL atanh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template - genType atanh(genType const & x); + GLM_FUNC_DECL genType atanh(genType const & x); /// @} }//namespace glm diff --git a/include/gal/opengl/glm/core/func_trigonometric.inl b/include/gal/opengl/glm/core/func_trigonometric.inl index 240cdafca0..bd59cd73d4 100644 --- a/include/gal/opengl/glm/core/func_trigonometric.inl +++ b/include/gal/opengl/glm/core/func_trigonometric.inl @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights diff --git a/include/gal/opengl/glm/core/func_vector_relational.hpp b/include/gal/opengl/glm/core/func_vector_relational.hpp index 7b5a7cd080..4ffe14eab7 100644 --- a/include/gal/opengl/glm/core/func_vector_relational.hpp +++ b/include/gal/opengl/glm/core/func_vector_relational.hpp @@ -1,7 +1,7 @@ /////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights @@ -55,7 +55,7 @@ namespace glm /// @see GLSL lessThan man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template - typename vecType::bool_type lessThan(vecType const & x, vecType const & y); + GLM_FUNC_DECL typename vecType::bool_type lessThan(vecType const & x, vecType const & y); /// Returns the component-wise comparison of result x <= y. /// @@ -64,7 +64,7 @@ namespace glm /// @see GLSL lessThanEqual man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template - typename vecType::bool_type lessThanEqual(vecType const & x, vecType const & y); + GLM_FUNC_DECL typename vecType::bool_type lessThanEqual(vecType const & x, vecType const & y); /// Returns the component-wise comparison of result x > y. /// @@ -73,7 +73,7 @@ namespace glm /// @see GLSL greaterThan man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template - typename vecType::bool_type greaterThan(vecType const & x, vecType const & y); + GLM_FUNC_DECL typename vecType::bool_type greaterThan(vecType const & x, vecType const & y); /// Returns the component-wise comparison of result x >= y. /// @@ -82,7 +82,7 @@ namespace glm /// @see GLSL greaterThanEqual man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template - typename vecType::bool_type greaterThanEqual(vecType const & x, vecType const & y); + GLM_FUNC_DECL typename vecType::bool_type greaterThanEqual(vecType const & x, vecType const & y); /// Returns the component-wise comparison of result x == y. /// @@ -91,7 +91,7 @@ namespace glm /// @see GLSL equal man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template - typename vecType::bool_type equal(vecType const & x, vecType const & y); + GLM_FUNC_DECL typename vecType::bool_type equal(vecType const & x, vecType const & y); /// Returns the component-wise comparison of result x != y. /// @@ -100,7 +100,7 @@ namespace glm /// @see GLSL notEqual man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template - typename vecType::bool_type notEqual(vecType const & x, vecType const & y); + GLM_FUNC_DECL typename vecType::bool_type notEqual(vecType const & x, vecType const & y); /// Returns true if any component of x is true. /// @@ -109,7 +109,7 @@ namespace glm /// @see GLSL any man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template