Commit a094f7d5 authored by jean-pierre charras's avatar jean-pierre charras

Fix some issues in modview, relative to few incorrect use of some wxAuiManager functions.

Fix not working + and - keys in layers manager.
Fix typo errors and modify some messages to make translator's life more easy.
parents 76aa0ba7 59549109
///////////////////////////////////////////////////////////////////////////
// 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!
......@@ -343,7 +343,7 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind
wxBoxSizer* bSizerFilename;
bSizerFilename = new wxBoxSizer( wxVERTICAL );
m_staticTextfilename = new wxStaticText( this, wxID_ANY, _("Page layout file description"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextfilename = new wxStaticText( this, wxID_ANY, _("Page layout description file"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextfilename->Wrap( -1 );
bSizerFilename->Add( m_staticTextfilename, 0, wxRIGHT|wxLEFT, 5 );
......
......@@ -20,8 +20,10 @@
<property name="path">.</property>
<property name="precompiled_header"></property>
<property name="relative_path">1</property>
<property name="skip_lua_events">1</property>
<property name="skip_php_events">1</property>
<property name="skip_python_events">1</property>
<property name="ui_table">UI</property>
<property name="use_enum">0</property>
<property name="use_microsoft_bom">0</property>
<object class="Dialog" expanded="1">
......@@ -4173,7 +4175,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Page layout file description</property>
<property name="label">Page layout description file</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
......
///////////////////////////////////////////////////////////////////////////
// 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!
......
......@@ -118,6 +118,8 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( wxWindow* aParent,
m_snapToGrid = true;
m_MsgFrameHeight = EDA_MSG_PANEL::GetRequiredHeight();
m_auimgr.SetFlags(wxAUI_MGR_DEFAULT|wxAUI_MGR_LIVE_RESIZE);
CreateStatusBar( 6 );
// set the size of the status bar subwindows:
......
///////////////////////////////////////////////////////////////////////////
// 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!
......@@ -64,7 +64,7 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE( wx
m_staticTextNbUnits = new wxStaticText( m_PanelBasic, wxID_ANY, _("Number of Units"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextNbUnits->Wrap( -1 );
m_staticTextNbUnits->SetToolTip( _("Enter the number of units in for a component that contains more than one unit") );
m_staticTextNbUnits->SetToolTip( _("Enter the number of units for a component that contains more than one unit") );
bSizernbunits->Add( m_staticTextNbUnits, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
......@@ -74,20 +74,20 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE::DIALOG_EDIT_COMPONENT_IN_LIBRARY_BASE( wx
bSizerMidBasicPanel->Add( bSizernbunits, 1, wxEXPAND, 5 );
wxBoxSizer* bSizer17;
bSizer17 = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bSizerOffset;
bSizerOffset = new wxBoxSizer( wxVERTICAL );
m_staticTextskew = new wxStaticText( m_PanelBasic, wxID_ANY, _("Pin Name Position Offset"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextskew->Wrap( -1 );
m_staticTextskew->SetToolTip( _("Margin (in 0.001 inches) between a pin name position and the component body.\nA value from 10 to 40 is usually good.") );
bSizer17->Add( m_staticTextskew, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
bSizerOffset->Add( m_staticTextskew, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
m_SetSkew = new wxSpinCtrl( m_PanelBasic, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 100, 0 );
bSizer17->Add( m_SetSkew, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
bSizerOffset->Add( m_SetSkew, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
bSizerMidBasicPanel->Add( bSizer17, 1, wxEXPAND, 5 );
bSizerMidBasicPanel->Add( bSizerOffset, 1, wxEXPAND, 5 );
bSizerBasicPanel->Add( bSizerMidBasicPanel, 0, wxEXPAND, 5 );
......
......@@ -20,8 +20,10 @@
<property name="path">.</property>
<property name="precompiled_header"></property>
<property name="relative_path">1</property>
<property name="skip_lua_events">1</property>
<property name="skip_php_events">1</property>
<property name="skip_python_events">1</property>
<property name="ui_table">UI</property>
<property name="use_enum">0</property>
<property name="use_microsoft_bom">0</property>
<object class="Dialog" expanded="1">
......@@ -783,7 +785,7 @@
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip">Enter the number of units in for a component that contains more than one unit</property>
<property name="tooltip">Enter the number of units for a component that contains more than one unit</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
......@@ -908,7 +910,7 @@
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer17</property>
<property name="name">bSizerOffset</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
......
///////////////////////////////////////////////////////////////////////////
// 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!
......
......@@ -119,7 +119,7 @@ void LIB_EDIT_FRAME::LoadOneLibraryPart( wxCommandEvent& event )
m_canvas->EndMouseCapture( ID_NO_TOOL_SELECTED, m_canvas->GetDefaultCursor() );
if( GetScreen()->IsModify()
&& !IsOK( this, _( "Current component is not saved.\n\nDiscard current changes?" ) ) )
&& !IsOK( this, _( "The current component is not saved.\n\nDiscard current changes?" ) ) )
return;
// No current lib, ask user for the library to use.
......
......@@ -2752,7 +2752,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
continue; // OK, pad found
// not found: bad footprint, report error
msg.Printf( _( "** Error: Component \"%s\" pad '%s' not found in footprint \"%s\" **\n" ),
msg.Printf( _( "*** Error: Component '%s' pad '%s' not found in footprint '%s' ***\n" ),
GetChars( component->GetReference() ),
GetChars( padname ),
GetChars( footprint->GetFPID().Format() ) );
......@@ -2777,8 +2777,8 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
// Net name not valid, report error
wxString coord;
coord << zone->GetPosition();
msg.Printf( _( "** Error: Zone '%s' layer '%s'"
" has non-existent net name \"%s\" **\n" ),
msg.Printf( _( "*** Error: Zone '%s' layer '%s'"
" has non-existent net name '%s' ***\n" ),
GetChars( coord ),
GetChars( zone->GetLayerName() ),
GetChars( zone->GetNetName() ) );
......
///////////////////////////////////////////////////////////////////////////
// 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!
......@@ -171,7 +171,7 @@ DIALOG_DESIGN_RULES_BASE::DIALOG_DESIGN_RULES_BASE( wxWindow* parent, wxWindowID
int m_OptViaTypeNChoices = sizeof( m_OptViaTypeChoices ) / sizeof( wxString );
m_OptViaType = new wxRadioBox( m_panelGolbalDesignRules, wxID_ANY, _("Blind/buried Vias:"), wxDefaultPosition, wxDefaultSize, m_OptViaTypeNChoices, m_OptViaTypeChoices, 1, wxRA_SPECIFY_COLS );
m_OptViaType->SetSelection( 0 );
m_OptViaType->SetToolTip( _("Allows or not blind/buried vias.\nDo not allow is the usual selection\nNote: micro vias are a special type of blind vias and are not managed here") );
m_OptViaType->SetToolTip( _("Allows or not blind/buried vias.\nDo not allow is the usual selection.\nNote: micro vias are a special type of blind vias and are not managed here") );
sbViasOptionSizer->Add( m_OptViaType, 0, wxALL|wxEXPAND, 5 );
......
......@@ -20,8 +20,10 @@
<property name="path">.</property>
<property name="precompiled_header"></property>
<property name="relative_path">1</property>
<property name="skip_lua_events">1</property>
<property name="skip_php_events">1</property>
<property name="skip_python_events">1</property>
<property name="ui_table">UI</property>
<property name="use_enum">1</property>
<property name="use_microsoft_bom">0</property>
<object class="Dialog" expanded="1">
......@@ -1642,7 +1644,7 @@
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip">Allows or not blind/buried vias.&#x0A;Do not allow is the usual selection&#x0A;Note: micro vias are a special type of blind vias and are not managed here</property>
<property name="tooltip">Allows or not blind/buried vias.&#x0A;Do not allow is the usual selection.&#x0A;Note: micro vias are a special type of blind vias and are not managed here</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
......
///////////////////////////////////////////////////////////////////////////
// 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!
......
......@@ -493,7 +493,7 @@ void GITHUB_PLUGIN::remote_get_zip( const wxString& aRepoURL ) throw( IO_ERROR )
catch( boost::system::system_error& e )
{
// https "GET" has faild, report this to API caller.
wxString fmt( _( "Cannot GET zip: '%s'\nfor lib-path: '%s'.\nWhat: '%s'" ) );
wxString fmt( _( "Cannot get/download Zip archive: '%s'\nfor library path: '%s'.\nReason: '%s'" ) );
string msg = StrPrintf( TO_UTF8( fmt ),
zip_url.c_str(),
......
......@@ -90,7 +90,7 @@
typedef LEGACY_PLUGIN::BIU BIU;
#define VERSION_ERROR_FORMAT _( "File <%s> is format version: %d.\nI only support format version <= %d.\nPlease upgrade Pcbnew to load this file." )
#define VERSION_ERROR_FORMAT _( "File '%s' is format version: %d.\nI only support format version <= %d.\nPlease upgrade Pcbnew to load this file." )
#define UNKNOWN_GRAPHIC_FORMAT _( "unknown graphic type: %d")
#define UNKNOWN_PAD_FORMAT _( "unknown pad type: %d")
#define UNKNOWN_PAD_ATTRIBUTE _( "unknown pad attribute: %d" )
......@@ -1197,7 +1197,7 @@ void LEGACY_PLUGIN::loadPAD( MODULE* aModule )
case 'O': padshape = PAD_OVAL; break;
case 'T': padshape = PAD_TRAPEZOID; break;
default:
m_error.Printf( _( "Unknown padshape '%c=0x%02x' on line:%d of module:'%s'" ),
m_error.Printf( _( "Unknown padshape '%c=0x%02x' on line: %d of module: '%s'" ),
padchar,
padchar,
m_reader->LineNumber(),
......@@ -2777,7 +2777,7 @@ BIU LEGACY_PLUGIN::biuParse( const char* aValue, const char** nptrptr )
if( errno )
{
m_error.Printf( _( "invalid float number in file: <%s>\nline: %d, offset: %d" ),
m_error.Printf( _( "invalid float number in file: '%s'\nline: %d, offset: %d" ),
m_reader->GetSource().GetData(),
m_reader->LineNumber(), aValue - m_reader->Line() + 1 );
......@@ -2786,7 +2786,7 @@ BIU LEGACY_PLUGIN::biuParse( const char* aValue, const char** nptrptr )
if( aValue == nptr )
{
m_error.Printf( _( "missing float number in file: <%s>\nline: %d, offset: %d" ),
m_error.Printf( _( "missing float number in file: '%s'\nline: %d, offset: %d" ),
m_reader->GetSource().GetData(),
m_reader->LineNumber(), aValue - m_reader->Line() + 1 );
......@@ -2814,7 +2814,7 @@ double LEGACY_PLUGIN::degParse( const char* aValue, const char** nptrptr )
if( errno )
{
m_error.Printf( _( "invalid float number in file: <%s>\nline: %d, offset: %d" ),
m_error.Printf( _( "invalid float number in file: '%s'\nline: %d, offset: %d" ),
m_reader->GetSource().GetData(), m_reader->LineNumber(), aValue - m_reader->Line() + 1 );
THROW_IO_ERROR( m_error );
......@@ -2822,7 +2822,7 @@ double LEGACY_PLUGIN::degParse( const char* aValue, const char** nptrptr )
if( aValue == nptr )
{
m_error.Printf( _( "missing float number in file: <%s>\nline: %d, offset: %d" ),
m_error.Printf( _( "missing float number in file: '%s'\nline: %d, offset: %d" ),
m_reader->GetSource().GetData(), m_reader->LineNumber(), aValue - m_reader->Line() + 1 );
THROW_IO_ERROR( m_error );
......@@ -2865,7 +2865,7 @@ void LEGACY_PLUGIN::Save( const wxString& aFileName, BOARD* aBoard, const PROPER
FILE* fp = wxFopen( aFileName, wxT( "w" ) );
if( !fp )
{
m_error.Printf( _( "Unable to open file <%s>" ), aFileName.GetData() );
m_error.Printf( _( "Unable to open file '%s'" ), aFileName.GetData() );
THROW_IO_ERROR( m_error );
}
......@@ -2890,7 +2890,7 @@ void LEGACY_PLUGIN::Save( const wxString& aFileName, BOARD* aBoard, const PROPER
wxString LEGACY_PLUGIN::writeError() const
{
return wxString::Format( _( "error writing to file <%s>" ), m_filename.GetData() );
return wxString::Format( _( "error writing to file '%s'" ), m_filename.GetData() );
}
#define CHECK_WRITE_ERROR() \
......@@ -4001,7 +4001,7 @@ void LP_CACHE::ReadAndVerifyHeader( LINE_READER* aReader )
}
L_bad_library:
THROW_IO_ERROR( wxString::Format( _( "File <%s> is empty or is not a legacy library" ),
THROW_IO_ERROR( wxString::Format( _( "File '%s' is empty or is not a legacy library" ),
m_lib_path.GetData() ) );
}
......@@ -4138,7 +4138,7 @@ void LP_CACHE::Save()
if( !m_writable )
{
THROW_IO_ERROR( wxString::Format(
_( "Legacy library file <%s> is read only" ), m_lib_path.GetData() ) );
_( "Legacy library file '%s' is read only" ), m_lib_path.GetData() ) );
}
wxString tempFileName;
......@@ -4157,7 +4157,7 @@ void LP_CACHE::Save()
if( !fp )
{
THROW_IO_ERROR( wxString::Format(
_( "Unable to open or create legacy library file <%s>" ),
_( "Unable to open or create legacy library file '%s'" ),
m_lib_path.GetData() ) );
}
......@@ -4183,7 +4183,7 @@ void LP_CACHE::Save()
if( wxRename( tempFileName, m_lib_path ) )
{
THROW_IO_ERROR( wxString::Format(
_( "Unable to rename tempfile <%s> to library file <%s>" ),
_( "Unable to rename tempfile '%s' to library file '%s'" ),
tempFileName.GetData(),
m_lib_path.GetData() ) );
}
......@@ -4296,7 +4296,7 @@ void LEGACY_PLUGIN::FootprintSave( const wxString& aLibraryPath,
if( !m_cache->m_writable )
{
THROW_IO_ERROR( wxString::Format( _( "Library <%s> is read only" ), aLibraryPath.GetData() ) );
THROW_IO_ERROR( wxString::Format( _( "Library '%s' is read only" ), aLibraryPath.GetData() ) );
}
std::string footprintName = aFootprint->GetFPID().GetFootprintName();
......@@ -4341,7 +4341,7 @@ void LEGACY_PLUGIN::FootprintDelete( const wxString& aLibraryPath,
if( !m_cache->m_writable )
{
THROW_IO_ERROR( wxString::Format( _( "Library <%s> is read only" ), aLibraryPath.GetData() ) );
THROW_IO_ERROR( wxString::Format( _( "Library '%s' is read only" ), aLibraryPath.GetData() ) );
}
std::string footprintName = TO_UTF8( aFootprintName );
......@@ -4351,7 +4351,7 @@ void LEGACY_PLUGIN::FootprintDelete( const wxString& aLibraryPath,
if( erasedCount != 1 )
{
THROW_IO_ERROR( wxString::Format(
_( "library <%s> has no footprint '%s' to delete" ),
_( "library '%s' has no footprint '%s' to delete" ),
aLibraryPath.GetData(), aFootprintName.GetData() ) );
}
......@@ -4364,7 +4364,7 @@ void LEGACY_PLUGIN::FootprintLibCreate( const wxString& aLibraryPath, const PROP
if( wxFileExists( aLibraryPath ) )
{
THROW_IO_ERROR( wxString::Format(
_( "library <%s> already exists, will not create a new" ),
_( "library '%s' already exists, will not create a new" ),
aLibraryPath.GetData() ) );
}
......@@ -4391,7 +4391,7 @@ bool LEGACY_PLUGIN::FootprintLibDelete( const wxString& aLibraryPath, const PROP
if( wxRemove( aLibraryPath ) )
{
THROW_IO_ERROR( wxString::Format(
_( "library <%s> cannot be deleted" ),
_( "library '%s' cannot be deleted" ),
aLibraryPath.GetData() ) );
}
......
This diff is collapsed.
......@@ -44,16 +44,11 @@ class FP_LIB_TABLE;
class FOOTPRINT_VIEWER_FRAME : public PCB_BASE_FRAME
{
private:
// List of libraries (for selection )
wxSashLayoutWindow* m_LibListWindow;
wxListBox* m_LibList; // The list of libs names
// List of components in the selected library
wxSashLayoutWindow* m_FootprintListWindow;
wxListBox* m_FootprintList; // The list of footprint names
wxListBox* m_libList; // The list of libs names
wxListBox* m_footprintList; // The list of footprint names
// Flags
wxSemaphore* m_Semaphore; // != NULL if the frame must emulate a modal dialog
wxSemaphore* m_semaphore; // != NULL if the frame emulates a modal dialog
wxString m_configPath; // subpath for configuration
protected:
......
......@@ -356,7 +356,7 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( wxWindow* parent, const wxString& title,
if( screenHeight <= 900 )
pointSize = (pointSize * 8) / 10;
m_Layers = new PCB_LAYER_WIDGET( this, GetGalCanvas(), pointSize );
m_Layers = new PCB_LAYER_WIDGET( this, GetCanvas(), pointSize );
m_drc = new DRC( this ); // these 2 objects point to each other
......
......@@ -148,7 +148,7 @@ bool EnsureOutputDirectory( wxFileName* aOutputDir,
{
if( aReporter )
{
msg.Printf( _( "*** Error: cannot make path <%s> absolute with respect to <%s>! ***" ),
msg.Printf( _( "*** Error: cannot make path '%s' absolute with respect to '%s'! ***" ),
GetChars( aOutputDir->GetPath() ),
GetChars( boardFilePath ) );
aReporter->Report( msg );
......@@ -165,7 +165,7 @@ bool EnsureOutputDirectory( wxFileName* aOutputDir,
{
if( aReporter )
{
msg.Printf( _( "Output directory <%s> created.\n" ), GetChars( outputPath ) );
msg.Printf( _( "Output directory '%s' created.\n" ), GetChars( outputPath ) );
aReporter->Report( msg );
return true;
}
......@@ -174,7 +174,7 @@ bool EnsureOutputDirectory( wxFileName* aOutputDir,
{
if( aReporter )
{
msg.Printf( _( "*** Error: cannot create output directory <%s>! ***\n" ),
msg.Printf( _( "*** Error: cannot create output directory '%s'! ***\n" ),
GetChars( outputPath ) );
aReporter->Report( msg );
}
......
......@@ -124,7 +124,7 @@ void PLUGIN::FootprintLibOptions( PROPERTIES* aListToAppendTo ) const
(*aListToAppendTo)["enable_transaction_logging"] = UTF8( _(
"Enable transaction logging. The mere presence of this option turns on the "
" logging, no need to set a Value."
"logging, no need to set a Value."
));
(*aListToAppendTo)["username"] = UTF8( _(
......
......@@ -47,7 +47,9 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateHToolbar()
if( m_mainToolBar == NULL )
{
m_mainToolBar = new wxAuiToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_OVERFLOW );
wxAUI_TB_DEFAULT_STYLE
| wxAUI_TB_OVERFLOW
);
// Set up toolbar
m_mainToolBar->AddTool( ID_MODVIEW_SELECT_LIB, wxEmptyString,
......@@ -93,22 +95,14 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateHToolbar()
m_mainToolBar->AddTool( ID_ZOOM_PAGE, wxEmptyString,
KiBitmap( zoom_fit_in_page_xpm ), msg );
if( m_Semaphore )
// Enable this tool only if the library browser is called from
// a "load component" command
if( m_semaphore )
{
// The library browser is called from a "load component" command
m_mainToolBar->AddSeparator();
/*
this ID_MODVIEW_FOOTPRINT_EXPORT_TO_BOARD control
is broken it does not lead to a fetched footprint on linux, either 3.0 nor 2.8 wx:
and I really don't like the drop down menu here:
whoever broke it, please fix it:
m_mainToolBar->AddTool( ID_MODVIEW_FOOTPRINT_EXPORT_TO_BOARD, wxEmptyString,
KiBitmap( export_footprint_names_xpm ),
_( "Insert footprint in board" ) );
*/
}
// after adding the buttons to the toolbar, must call Realize() to
......
......@@ -388,7 +388,7 @@ bool DIALOG_EXCHANGE_MODULE::Change_1_Module( MODULE* aModule,
FPID oldFootprintFPID = aModule->GetFPID();
// Load module.
line.Printf( _( "Change module %s (from %s) to %s" ),
line.Printf( _( "Change module '%s' (from '%s') to '%s'" ),
GetChars( aModule->GetReference() ),
oldFootprintFPID.Format().c_str(),
aNewFootprintFPID.Format().c_str() );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment