Kaydet (Commit) d7f2c36d authored tarafından Noel Grandin's avatar Noel Grandin

loplugin:unusedmethods

Change-Id: I5f63ac44654ed3fc658e72e0d1148a5a22decc47
Reviewed-on: https://gerrit.libreoffice.org/60662
Tested-by: Jenkins
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst 5d86154f
......@@ -196,11 +196,9 @@ include/vcl/texteng.hxx:279
_Bool TextEngine::Read(class SvStream &,const class TextSelection *)
include/vcl/toolbox.hxx:514
_Bool ToolBox::ChangeHighlightUpDn(_Bool)
include/vcl/weld.hxx:286
include/vcl/weld.hxx:299
_Bool weld::ComboBoxText::get_entry_selection_bounds(int &,int &)
include/vcl/weld.hxx:495
_Bool weld::Entry::get_selection_bounds(int &,int &)
include/vcl/weld.hxx:816
include/vcl/weld.hxx:911
_Bool weld::TextView::get_selection_bounds(int &,int &)
lotuswordpro/inc/lwpsvstream.hxx:76
class LwpSvStream & LwpSvStream::ReadUInt8(unsigned char &)
......@@ -308,12 +306,14 @@ vcl/inc/opengl/texture.hxx:112
_Bool OpenGLTexture::CopyData(int,int,int,int,const unsigned char *)
vcl/inc/salframe.hxx:222
_Bool SalFrame::SetPluginParent(struct SystemParentData *)
vcl/inc/salgdi.hxx:219
vcl/inc/salgdi.hxx:214
class basegfx::B2DPoint SalGraphics::mirror(const class basegfx::B2DPoint &,const class OutputDevice *) const
vcl/inc/salgdi.hxx:401
vcl/inc/salgdi.hxx:397
_Bool SalGraphics::BlendBitmap(const struct SalTwoRect &,const class SalBitmap &,const class OutputDevice *)
vcl/inc/unx/gtk/gtkdata.hxx:164
int GtkSalDisplay::CaptureMouse(class SalFrame *)
vcl/inc/unx/saldisp.hxx:316
_Bool SalDisplay::Dispatch(union _XEvent *)
vcl/source/gdi/pdfwriter_impl.hxx:1259
_Bool vcl::PDFWriterImpl::setCurrentStructureElement(int)
vcl/source/gdi/pdfwriter_impl.hxx:1260
......
......@@ -2311,14 +2311,6 @@ OUString Attr::getValueByName (const sal_Char *str) const {
return OUString();
}
sal_Int32 Attr::getLength() const{
return name.getLength();
}
const OUString& Attr::getTypeByIndex (sal_Int32 idx) const {
return name[idx];
}
const OUString& Attr::getValueByIndex (sal_Int32 idx) const
{
return value[idx];
......
......@@ -75,8 +75,6 @@ class Attr {
public:
explicit Attr (const Reference< XAttributeList > & attr);
OUString getValueByName (const sal_Char *str) const;
sal_Int32 getLength() const;
const OUString& getTypeByIndex (sal_Int32 idx) const;
const OUString& getValueByIndex (sal_Int32 idx) const ;
};
......
......@@ -415,8 +415,6 @@ public:
ComboBox::SetText( rText );
}
void Fill( const OUString& rName, const FontList* pList );
private:
FontStyleBox( const FontStyleBox& ) = delete;
FontStyleBox& operator =( const FontStyleBox& ) = delete;
......@@ -474,16 +472,7 @@ public:
void Fill( const FontMetric* pFontMetric, const FontList* pList );
void EnableRelativeMode( sal_uInt16 nMin, sal_uInt16 nMax,
sal_uInt16 nStep = 5 );
void EnablePtRelativeMode( short nMin, short nMax,
short nStep = 10 );
bool IsRelativeMode() const { return bRelativeMode; }
void SetRelative( bool bRelative );
bool IsRelative() const { return bRelative; }
void SetPtRelative( bool bPtRel )
{ bPtRelative = bPtRel; SetRelative( true ); }
bool IsPtRelative() const { return bPtRelative; }
virtual void SetValue( sal_Int64 nNewValue, FieldUnit eInUnit ) override;
virtual void SetValue( sal_Int64 nNewValue ) override;
......
......@@ -41,7 +41,6 @@ public:
virtual void Resize() override;
virtual void Command( const CommandEvent& rEvt ) override;
sal_uInt32 getColumnCount() const { return nColCount; }
Size const & GetIconSize() const { return aIconSize; }
void DrawLayout();
};
......
......@@ -80,9 +80,6 @@ public:
void SetFontWidthScale( const SfxItemSet& rSet );
void SetFontEscapement( sal_uInt8 nProp, sal_uInt8 nEscProp, short nEsc );
void SetFromItemSet( const SfxItemSet &rSet,
bool bPreviewBackgroundToCharacter );
virtual Size GetOptimalSize() const override;
};
......
......@@ -82,14 +82,6 @@ public:
LanguageType GetSelectedLanguage() const;
bool IsLanguageSelected( const LanguageType eLangType ) const;
void SetNoSelectionLBB();
void HideLBB();
void DisableLBB();
void SaveValueLBB();
sal_Int32 GetSelectedEntryPosLBB() const;
void* GetEntryDataLBB( sal_Int32 nPos ) const;
sal_Int32 GetSavedValueLBB() const;
protected:
Image m_aNotCheckedImage;
Image m_aCheckedImage;
......@@ -206,10 +198,6 @@ public:
Invalid
};
EditedAndValid GetEditedAndValid() const { return meEditedAndValid;}
sal_Int32 SaveEditedAsEntry();
private:
sal_Int32 mnSavedValuePos;
EditedAndValid meEditedAndValid;
......
......@@ -154,7 +154,6 @@ public:
void SetUserValue( sal_Int64 nNewValue );
virtual void SetValue( sal_Int64 nNewValue );
sal_Int64 GetValue() const;
sal_Int64 GetSavedIntValue() const;
virtual OUString CreateFieldText( sal_Int64 nValue ) const;
bool IsValueModified() const;
......
......@@ -1083,144 +1083,6 @@ void FontStyleBox::Modify()
ComboBox::Modify();
}
void FontStyleBox::Fill( const OUString& rName, const FontList* pList )
{
// note: this method must call ComboBox::SetText(),
// else aLastStyle will overwritten
// store prior selection position and clear box
OUString aOldText = GetText();
sal_Int32 nPos = GetEntryPos( aOldText );
Clear();
// does a font with this name already exist?
sal_Handle hFontMetric = pList->GetFirstFontMetric( rName );
if ( hFontMetric )
{
OUString aStyleText;
FontWeight eLastWeight = WEIGHT_DONTKNOW;
FontItalic eLastItalic = ITALIC_NONE;
FontWidth eLastWidth = WIDTH_DONTKNOW;
bool bNormal = false;
bool bItalic = false;
bool bBold = false;
bool bBoldItalic = false;
bool bInsert = false;
FontMetric aFontMetric;
while ( hFontMetric )
{
aFontMetric = FontList::GetFontMetric( hFontMetric );
FontWeight eWeight = aFontMetric.GetWeight();
FontItalic eItalic = aFontMetric.GetItalic();
FontWidth eWidth = aFontMetric.GetWidthType();
// Only if the attributes are different, we insert the
// Font to avoid double Entries in different languages
if ( (eWeight != eLastWeight) || (eItalic != eLastItalic) ||
(eWidth != eLastWidth) )
{
if ( bInsert )
InsertEntry( aStyleText );
if ( eWeight <= WEIGHT_NORMAL )
{
if ( eItalic != ITALIC_NONE )
bItalic = true;
else
bNormal = true;
}
else
{
if ( eItalic != ITALIC_NONE )
bBoldItalic = true;
else
bBold = true;
}
// For wrong StyleNames we replace this with the correct once
aStyleText = pList->GetStyleName( aFontMetric );
bInsert = GetEntryPos( aStyleText ) == LISTBOX_ENTRY_NOTFOUND;
if ( !bInsert )
{
aStyleText = pList->GetStyleName( eWeight, eItalic );
bInsert = GetEntryPos( aStyleText ) == LISTBOX_ENTRY_NOTFOUND;
}
eLastWeight = eWeight;
eLastItalic = eItalic;
eLastWidth = eWidth;
}
else
{
if ( bInsert )
{
// If we have two names for the same attributes
// we prefer the translated standard names
const OUString& rAttrStyleText = pList->GetStyleName( eWeight, eItalic );
if (rAttrStyleText != aStyleText)
{
OUString aTempStyleText = pList->GetStyleName( aFontMetric );
if (rAttrStyleText == aTempStyleText)
aStyleText = rAttrStyleText;
bInsert = GetEntryPos( aStyleText ) == LISTBOX_ENTRY_NOTFOUND;
}
}
}
if ( !bItalic && (aStyleText == pList->GetItalicStr()) )
bItalic = true;
else if ( !bBold && (aStyleText == pList->GetBoldStr()) )
bBold = true;
else if ( !bBoldItalic && (aStyleText == pList->GetBoldItalicStr()) )
bBoldItalic = true;
hFontMetric = FontList::GetNextFontMetric( hFontMetric );
}
if ( bInsert )
InsertEntry( aStyleText );
// certain style as copy
if ( bNormal )
{
if ( !bItalic )
InsertEntry( pList->GetItalicStr() );
if ( !bBold )
InsertEntry( pList->GetBoldStr() );
}
if ( !bBoldItalic )
{
if ( bNormal || bItalic || bBold )
InsertEntry( pList->GetBoldItalicStr() );
}
if (!aOldText.isEmpty())
{
if ( GetEntryPos( aLastStyle ) != LISTBOX_ENTRY_NOTFOUND )
ComboBox::SetText( aLastStyle );
else
{
if ( nPos >= GetEntryCount() )
ComboBox::SetText( GetEntry( 0 ) );
else
ComboBox::SetText( GetEntry( nPos ) );
}
}
}
else
{
// insert standard styles if no font
InsertEntry( pList->GetNormalStr() );
InsertEntry( pList->GetItalicStr() );
InsertEntry( pList->GetBoldStr() );
InsertEntry( pList->GetBoldItalicStr() );
if (!aOldText.isEmpty())
{
if ( nPos > GetEntryCount() )
ComboBox::SetText( GetEntry( 0 ) );
else
ComboBox::SetText( GetEntry( nPos ) );
}
}
}
SvtFontStyleBox::SvtFontStyleBox(std::unique_ptr<weld::ComboBox> p)
: m_xComboBox(std::move(p))
......@@ -1568,24 +1430,6 @@ void FontSizeBox::Fill( const FontMetric* pFontMetric, const FontList* pList )
SetSelection( aSelection );
}
void FontSizeBox::EnableRelativeMode( sal_uInt16 nMin, sal_uInt16 nMax, sal_uInt16 nStep )
{
bRelativeMode = true;
nRelMin = nMin;
nRelMax = nMax;
nRelStep = nStep;
SetUnit( FUNIT_POINT );
}
void FontSizeBox::EnablePtRelativeMode( short nMin, short nMax, short nStep )
{
bRelativeMode = true;
nPtRelMin = nMin;
nPtRelMax = nMax;
nPtRelStep = nStep;
SetUnit( FUNIT_POINT );
}
void FontSizeBox::SetRelative( bool bNewRelative )
{
if ( !bRelativeMode )
......
......@@ -910,235 +910,6 @@ static void SetPrevFontEscapement(SvxFont& rFont, sal_uInt8 nProp, sal_uInt8 nEs
rFont.SetEscapement(nEsc);
}
void SvxFontPrevWindow::SetFromItemSet(const SfxItemSet &rSet, bool bPreviewBackgroundToCharacter)
{
sal_uInt16 nWhich;
SvxFont& rFont = GetFont();
SvxFont& rCJKFont = GetCJKFont();
SvxFont& rCTLFont = GetCTLFont();
// Preview string
if( GetWhich( rSet, SID_CHAR_DLG_PREVIEW_STRING, nWhich ) )
{
const SfxStringItem& rItem = static_cast<const SfxStringItem&>( rSet.Get( nWhich ) );
const OUString& aString = rItem.GetValue();
if( !aString.isEmpty() )
SetPreviewText( aString );
else
SetFontNameAsPreviewText();
}
// Underline
FontLineStyle eUnderline;
if( GetWhich( rSet, SID_ATTR_CHAR_UNDERLINE, nWhich ) )
{
const SvxUnderlineItem& rItem = static_cast<const SvxUnderlineItem&>( rSet.Get( nWhich ) );
eUnderline = rItem.GetValue();
SetTextLineColor( rItem.GetColor() );
}
else
eUnderline = LINESTYLE_NONE;
rFont.SetUnderline( eUnderline );
rCJKFont.SetUnderline( eUnderline );
rCTLFont.SetUnderline( eUnderline );
// Overline
FontLineStyle eOverline;
if( GetWhich( rSet, SID_ATTR_CHAR_OVERLINE, nWhich ) )
{
const SvxOverlineItem& rItem = static_cast<const SvxOverlineItem&>( rSet.Get( nWhich ) );
eOverline = rItem.GetValue();
SetOverlineColor( rItem.GetColor() );
}
else
eOverline = LINESTYLE_NONE;
rFont.SetOverline( eOverline );
rCJKFont.SetOverline( eOverline );
rCTLFont.SetOverline( eOverline );
// Strikeout
FontStrikeout eStrikeout;
if( GetWhich( rSet, SID_ATTR_CHAR_STRIKEOUT, nWhich ) )
{
const SvxCrossedOutItem& rItem = static_cast<const SvxCrossedOutItem&>( rSet.Get( nWhich ) );
eStrikeout = rItem.GetValue();
}
else
eStrikeout = STRIKEOUT_NONE;
rFont.SetStrikeout( eStrikeout );
rCJKFont.SetStrikeout( eStrikeout );
rCTLFont.SetStrikeout( eStrikeout );
// WordLineMode
if( GetWhich( rSet, SID_ATTR_CHAR_WORDLINEMODE, nWhich ) )
{
const SvxWordLineModeItem& rItem = static_cast<const SvxWordLineModeItem&>( rSet.Get( nWhich ) );
rFont.SetWordLineMode( rItem.GetValue() );
rCJKFont.SetWordLineMode( rItem.GetValue() );
rCTLFont.SetWordLineMode( rItem.GetValue() );
}
// Emphasis
if( GetWhich( rSet, SID_ATTR_CHAR_EMPHASISMARK, nWhich ) )
{
const SvxEmphasisMarkItem& rItem = static_cast<const SvxEmphasisMarkItem&>( rSet.Get( nWhich ) );
FontEmphasisMark eMark = rItem.GetEmphasisMark();
rFont.SetEmphasisMark( eMark );
rCJKFont.SetEmphasisMark( eMark );
rCTLFont.SetEmphasisMark( eMark );
}
// Relief
if( GetWhich( rSet, SID_ATTR_CHAR_RELIEF, nWhich ) )
{
const SvxCharReliefItem& rItem = static_cast<const SvxCharReliefItem&>( rSet.Get( nWhich ) );
FontRelief eFontRelief = rItem.GetValue();
rFont.SetRelief( eFontRelief );
rCJKFont.SetRelief( eFontRelief );
rCTLFont.SetRelief( eFontRelief );
}
// Effects
if( GetWhich( rSet, SID_ATTR_CHAR_CASEMAP, nWhich ) )
{
const SvxCaseMapItem& rItem = static_cast<const SvxCaseMapItem&>( rSet.Get( nWhich ) );
SvxCaseMap eCaseMap = rItem.GetValue();
rFont.SetCaseMap( eCaseMap );
rCJKFont.SetCaseMap( eCaseMap );
// #i78474# small caps do not exist in CTL fonts
rCTLFont.SetCaseMap( eCaseMap == SvxCaseMap::SmallCaps ? SvxCaseMap::NotMapped : eCaseMap );
}
// Outline
if( GetWhich( rSet, SID_ATTR_CHAR_CONTOUR, nWhich ) )
{
const SvxContourItem& rItem = static_cast<const SvxContourItem&>( rSet.Get( nWhich ) );
bool bOutline = rItem.GetValue();
rFont.SetOutline( bOutline );
rCJKFont.SetOutline( bOutline );
rCTLFont.SetOutline( bOutline );
}
// Shadow
if( GetWhich( rSet, SID_ATTR_CHAR_SHADOWED, nWhich ) )
{
const SvxShadowedItem& rItem = static_cast<const SvxShadowedItem&>( rSet.Get( nWhich ) );
bool bShadow = rItem.GetValue();
rFont.SetShadow( bShadow );
rCJKFont.SetShadow( bShadow );
rCTLFont.SetShadow( bShadow );
}
// Background
bool bTransparent;
if( GetWhich( rSet, bPreviewBackgroundToCharacter ? SID_ATTR_BRUSH : SID_ATTR_BRUSH_CHAR, nWhich ) )
{
const SvxBrushItem& rBrush = static_cast<const SvxBrushItem&>( rSet.Get( nWhich ) );
const Color& rColor = rBrush.GetColor();
bTransparent = rColor.GetTransparency() > 0;
rFont.SetFillColor( rColor );
rCJKFont.SetFillColor( rColor );
rCTLFont.SetFillColor( rColor );
}
else
bTransparent = TRUE;
rFont.SetTransparent( bTransparent );
rCJKFont.SetTransparent( bTransparent );
rCTLFont.SetTransparent( bTransparent );
Color aBackCol( COL_TRANSPARENT );
if( !bPreviewBackgroundToCharacter )
{
if( GetWhich( rSet, SID_ATTR_BRUSH, nWhich ) )
{
const SvxBrushItem& rBrush = static_cast<const SvxBrushItem&>( rSet.Get( nWhich ) );
if( GPOS_NONE == rBrush.GetGraphicPos() )
aBackCol = rBrush.GetColor();
}
}
SetBackColor( aBackCol );
// Font
SetPrevFont( rSet, SID_ATTR_CHAR_FONT, rFont );
SetPrevFont( rSet, SID_ATTR_CHAR_CJK_FONT, rCJKFont );
SetPrevFont( rSet, SID_ATTR_CHAR_CTL_FONT, rCTLFont );
// Style
SetPrevFontStyle( rSet, SID_ATTR_CHAR_POSTURE, SID_ATTR_CHAR_WEIGHT, rFont );
SetPrevFontStyle( rSet, SID_ATTR_CHAR_CJK_POSTURE, SID_ATTR_CHAR_CJK_WEIGHT, rCJKFont );
SetPrevFontStyle( rSet, SID_ATTR_CHAR_CTL_POSTURE, SID_ATTR_CHAR_CTL_WEIGHT, rCTLFont );
// Size
SetFontSize( rSet, SID_ATTR_CHAR_FONTHEIGHT, rFont );
SetFontSize( rSet, SID_ATTR_CHAR_CJK_FONTHEIGHT, rCJKFont );
SetFontSize( rSet, SID_ATTR_CHAR_CTL_FONTHEIGHT, rCTLFont );
// Language
SetFontLang( rSet, SID_ATTR_CHAR_LANGUAGE, rFont );
SetFontLang( rSet, SID_ATTR_CHAR_CJK_LANGUAGE, rCJKFont );
SetFontLang( rSet, SID_ATTR_CHAR_CTL_LANGUAGE, rCTLFont );
// Color
if( GetWhich( rSet, SID_ATTR_CHAR_COLOR, nWhich ) )
{
const SvxColorItem& rItem = static_cast<const SvxColorItem&>( rSet.Get( nWhich ) );
Color aCol( rItem.GetValue() );
rFont.SetColor( aCol );
rCJKFont.SetColor( aCol );
rCTLFont.SetColor( aCol );
AutoCorrectFontColor(); // handle color COL_AUTO
}
// Kerning
if( GetWhich( rSet, SID_ATTR_CHAR_KERNING, nWhich ) )
{
const SvxKerningItem& rItem = static_cast<const SvxKerningItem&>( rSet.Get( nWhich ) );
short nKern = static_cast<short>(LogicToLogic( rItem.GetValue(), rSet.GetPool()->GetMetric( nWhich ), MapUnit::MapTwip ));
rFont.SetFixKerning( nKern );
rCJKFont.SetFixKerning( nKern );
rCTLFont.SetFixKerning( nKern );
}
// Escapement
const sal_uInt8 nProp = 100;
short nEsc;
sal_uInt8 nEscProp;
if( GetWhich( rSet, SID_ATTR_CHAR_ESCAPEMENT, nWhich ) )
{
const SvxEscapementItem& rItem = static_cast<const SvxEscapementItem&>( rSet.Get( nWhich ) );
nEsc = rItem.GetEsc();
nEscProp = rItem.GetProportionalHeight();
if( nEsc == DFLT_ESC_AUTO_SUPER )
nEsc = DFLT_ESC_SUPER;
else if( nEsc == DFLT_ESC_AUTO_SUB )
nEsc = DFLT_ESC_SUB;
}
else
{
nEsc = 0;
nEscProp = 100;
}
SetPrevFontEscapement( rFont, nProp, nEscProp, nEsc );
SetPrevFontEscapement( rCJKFont, nProp, nEscProp, nEsc );
SetPrevFontEscapement( rCTLFont, nProp, nEscProp, nEsc );
// Font width scale
if( GetWhich( rSet, SID_ATTR_CHAR_SCALEWIDTH, nWhich ) )
{
const SvxCharScaleWidthItem&rItem = static_cast<const SvxCharScaleWidthItem&>( rSet.Get( nWhich ) );
SetFontWidthScale( rItem.GetValue() );
}
Invalidate();
}
void SvxFontPrevWindow::Init(const SfxItemSet& rSet)
{
SvxFont& rFont = GetFont();
......
......@@ -493,41 +493,6 @@ sal_Int32 SvxLanguageBoxBase::ImplTypeToPos( LanguageType eType ) const
}
void SvxLanguageBoxBase::SetNoSelectionLBB()
{
ImplSetNoSelection();
}
void SvxLanguageBoxBase::HideLBB()
{
ImplHide();
}
void SvxLanguageBoxBase::DisableLBB()
{
ImplDisable();
}
void SvxLanguageBoxBase::SaveValueLBB()
{
ImplSaveValue();
}
sal_Int32 SvxLanguageBoxBase::GetSelectedEntryPosLBB() const
{
return ImplGetSelectedEntryPos();
}
void* SvxLanguageBoxBase::GetEntryDataLBB( sal_Int32 nPos ) const
{
return ImplGetEntryData( nPos);
}
sal_Int32 SvxLanguageBoxBase::GetSavedValueLBB() const
{
return ImplGetSavedValue();
}
LanguageType LanguageBox::get_active_id() const
{
OUString sLang = m_xControl->get_active_id();
......@@ -1129,43 +1094,6 @@ IMPL_LINK_NOARG( SvxLanguageComboBox, EditModifyHdl, Edit&, void )
}
sal_Int32 SvxLanguageComboBox::SaveEditedAsEntry()
{
if (meEditedAndValid != EditedAndValid::Valid)
return COMBOBOX_ENTRY_NOTFOUND;
LanguageTag aLanguageTag( vcl::I18nHelper::filterFormattingChars( GetText()));
LanguageType nLang = aLanguageTag.getLanguageType();
if (nLang == LANGUAGE_DONTKNOW)
{
SAL_WARN( "svx.dialog", "SvxLanguageComboBox::SaveEditedAsEntry: unknown tag");
return COMBOBOX_ENTRY_NOTFOUND;
}
sal_Int32 nPos = ImplTypeToPos( nLang);
if (nPos != COMBOBOX_ENTRY_NOTFOUND)
return nPos; // Already present but with a different string.
if (SvtLanguageTable::HasLanguageType( nLang))
{
// In SvtLanguageTable but not in SvxLanguageComboBox. On purpose? This
// may be an entry with different settings or CTL instead of Western or
// ... all things we don't handle yet.
SAL_WARN( "svx.dialog", "SvxLanguageComboBox::SaveEditedAsEntry: already in SvtLanguageTable: " <<
SvtLanguageTable::GetLanguageString( nLang) << ", " << nLang);
}
else
{
// Add to both, SvtLanguageTable and SvxLanguageComboBox.
/* TODO: a descriptive user comment would be a nice to have here. */
SvtLanguageTable::AddLanguageTag( aLanguageTag );
}
nPos = InsertLanguage( nLang);
return nPos;
}
sal_Int32 LanguageBox::SaveEditedAsEntry()
{
if (m_eEditedAndValid != EditedAndValid::Valid)
......
......@@ -611,11 +611,6 @@ sal_Int64 NumericFormatter::GetValue() const
return GetField() ? GetValueFromString(GetField()->GetText()) : 0;
}
sal_Int64 NumericFormatter::GetSavedIntValue() const
{
return GetField() ? GetValueFromString(GetField()->GetSavedValue()) : 0;
}
bool NumericFormatter::IsValueModified() const
{
if ( ImplGetEmptyFieldValue() )
......
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