Kaydet (Commit) a2f6b01f authored tarafından Caolán McNamara's avatar Caolán McNamara

weld ScDeleteContentsDlg

Change-Id: Ibd3723fc615d97a4747a41e881dbad6829929c0c
Reviewed-on: https://gerrit.libreoffice.org/52833Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst b6e7e255
...@@ -429,7 +429,7 @@ public: ...@@ -429,7 +429,7 @@ public:
virtual VclPtr<AbstractScDataFormDlg> CreateScDataFormDlg(vcl::Window* pParent, virtual VclPtr<AbstractScDataFormDlg> CreateScDataFormDlg(vcl::Window* pParent,
ScTabViewShell* pTabViewShell) = 0; ScTabViewShell* pTabViewShell) = 0;
virtual VclPtr<AbstractScDeleteContentsDlg> CreateScDeleteContentsDlg(vcl::Window* pParent) = 0; virtual VclPtr<AbstractScDeleteContentsDlg> CreateScDeleteContentsDlg(weld::Window* pParent) = 0;
virtual VclPtr<AbstractScFillSeriesDlg> CreateScFillSeriesDlg( vcl::Window* pParent, virtual VclPtr<AbstractScFillSeriesDlg> CreateScFillSeriesDlg( vcl::Window* pParent,
ScDocument& rDocument, ScDocument& rDocument,
FillDir eFillDir, FillDir eFillDir,
......
...@@ -191,7 +191,7 @@ VclPtr<VclAbstractDialog> ScScreenshotTest::createDialogByID(sal_uInt32 nID) ...@@ -191,7 +191,7 @@ VclPtr<VclAbstractDialog> ScScreenshotTest::createDialogByID(sal_uInt32 nID)
case 6: // "modules/scalc/ui/deletecontents.ui" case 6: // "modules/scalc/ui/deletecontents.ui"
{ {
pReturnDialog = mpFact->CreateScDeleteContentsDlg(mpViewShell->GetDialogParent()); pReturnDialog = mpFact->CreateScDeleteContentsDlg(mpViewShell->GetFrameWeld());
break; break;
} }
......
...@@ -90,7 +90,12 @@ short AbstractScDeleteCellDlg_Impl::Execute() ...@@ -90,7 +90,12 @@ short AbstractScDeleteCellDlg_Impl::Execute()
//for dataform //for dataform
IMPL_ABSTDLG_BASE(AbstractScDataFormDlg_Impl); IMPL_ABSTDLG_BASE(AbstractScDataFormDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractScDeleteContentsDlg_Impl);
short AbstractScDeleteContentsDlg_Impl::Execute()
{
return m_xDlg->run();
}
IMPL_ABSTDLG_BASE(AbstractScFillSeriesDlg_Impl); IMPL_ABSTDLG_BASE(AbstractScFillSeriesDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractScGroupDlg_Impl); IMPL_ABSTDLG_BASE(AbstractScGroupDlg_Impl);
...@@ -257,12 +262,12 @@ DelCellCmd AbstractScDeleteCellDlg_Impl::GetDelCellCmd() const ...@@ -257,12 +262,12 @@ DelCellCmd AbstractScDeleteCellDlg_Impl::GetDelCellCmd() const
void AbstractScDeleteContentsDlg_Impl::DisableObjects() void AbstractScDeleteContentsDlg_Impl::DisableObjects()
{ {
pDlg->DisableObjects(); m_xDlg->DisableObjects();
} }
InsertDeleteFlags AbstractScDeleteContentsDlg_Impl::GetDelContentsCmdBits() const InsertDeleteFlags AbstractScDeleteContentsDlg_Impl::GetDelContentsCmdBits() const
{ {
return pDlg->GetDelContentsCmdBits(); return m_xDlg->GetDelContentsCmdBits();
} }
FillDir AbstractScFillSeriesDlg_Impl::GetFillDir() const FillDir AbstractScFillSeriesDlg_Impl::GetFillDir() const
...@@ -702,10 +707,9 @@ VclPtr<AbstractScDataFormDlg> ScAbstractDialogFactory_Impl::CreateScDataFormDlg( ...@@ -702,10 +707,9 @@ VclPtr<AbstractScDataFormDlg> ScAbstractDialogFactory_Impl::CreateScDataFormDlg(
return VclPtr<AbstractScDataFormDlg_Impl>::Create(pDlg); return VclPtr<AbstractScDataFormDlg_Impl>::Create(pDlg);
} }
VclPtr<AbstractScDeleteContentsDlg> ScAbstractDialogFactory_Impl::CreateScDeleteContentsDlg(vcl::Window* pParent) VclPtr<AbstractScDeleteContentsDlg> ScAbstractDialogFactory_Impl::CreateScDeleteContentsDlg(weld::Window* pParent)
{ {
VclPtr<ScDeleteContentsDlg> pDlg = VclPtr<ScDeleteContentsDlg>::Create(pParent, InsertDeleteFlags::NONE); return VclPtr<AbstractScDeleteContentsDlg_Impl>::Create(new ScDeleteContentsDlg(pParent, InsertDeleteFlags::NONE));
return VclPtr<AbstractScDeleteContentsDlg_Impl>::Create( pDlg );
} }
VclPtr<AbstractScFillSeriesDlg> ScAbstractDialogFactory_Impl::CreateScFillSeriesDlg( vcl::Window* pParent, VclPtr<AbstractScFillSeriesDlg> ScAbstractDialogFactory_Impl::CreateScFillSeriesDlg( vcl::Window* pParent,
......
...@@ -180,7 +180,13 @@ class AbstractScDataFormDlg_Impl : public AbstractScDataFormDlg ...@@ -180,7 +180,13 @@ class AbstractScDataFormDlg_Impl : public AbstractScDataFormDlg
class AbstractScDeleteContentsDlg_Impl : public AbstractScDeleteContentsDlg class AbstractScDeleteContentsDlg_Impl : public AbstractScDeleteContentsDlg
{ {
DECL_ABSTDLG_BASE( AbstractScDeleteContentsDlg_Impl,ScDeleteContentsDlg) std::unique_ptr<ScDeleteContentsDlg> m_xDlg;
public:
explicit AbstractScDeleteContentsDlg_Impl(ScDeleteContentsDlg* p)
: m_xDlg(p)
{
}
virtual short Execute() override;
virtual void DisableObjects() override; virtual void DisableObjects() override;
virtual InsertDeleteFlags GetDelContentsCmdBits() const override; virtual InsertDeleteFlags GetDelContentsCmdBits() const override;
}; };
...@@ -453,7 +459,7 @@ public: ...@@ -453,7 +459,7 @@ public:
virtual VclPtr<AbstractScDataFormDlg> CreateScDataFormDlg(vcl::Window* pParent, virtual VclPtr<AbstractScDataFormDlg> CreateScDataFormDlg(vcl::Window* pParent,
ScTabViewShell* pTabViewShell) override; ScTabViewShell* pTabViewShell) override;
virtual VclPtr<AbstractScDeleteContentsDlg> CreateScDeleteContentsDlg(vcl::Window* pParent) override; virtual VclPtr<AbstractScDeleteContentsDlg> CreateScDeleteContentsDlg(weld::Window* pParent) override;
virtual VclPtr<AbstractScFillSeriesDlg> CreateScFillSeriesDlg( vcl::Window* pParent, virtual VclPtr<AbstractScFillSeriesDlg> CreateScFillSeriesDlg( vcl::Window* pParent,
ScDocument& rDocument, ScDocument& rDocument,
......
...@@ -20,36 +20,33 @@ ...@@ -20,36 +20,33 @@
#ifndef INCLUDED_SC_SOURCE_UI_INC_DELCODLG_HXX #ifndef INCLUDED_SC_SOURCE_UI_INC_DELCODLG_HXX
#define INCLUDED_SC_SOURCE_UI_INC_DELCODLG_HXX #define INCLUDED_SC_SOURCE_UI_INC_DELCODLG_HXX
#include <vcl/dialog.hxx> #include <vcl/weld.hxx>
#include <vcl/button.hxx>
#include <global.hxx> #include <global.hxx>
class ScDeleteContentsDlg : public ModalDialog class ScDeleteContentsDlg : public weld::GenericDialogController
{ {
private: private:
VclPtr<CheckBox> aBtnDelAll; bool m_bObjectsDisabled;
VclPtr<CheckBox> aBtnDelStrings;
VclPtr<CheckBox> aBtnDelNumbers; std::unique_ptr<weld::CheckButton> m_xBtnDelAll;
VclPtr<CheckBox> aBtnDelDateTime; std::unique_ptr<weld::CheckButton> m_xBtnDelStrings;
VclPtr<CheckBox> aBtnDelFormulas; std::unique_ptr<weld::CheckButton> m_xBtnDelNumbers;
VclPtr<CheckBox> aBtnDelNotes; std::unique_ptr<weld::CheckButton> m_xBtnDelDateTime;
VclPtr<CheckBox> aBtnDelAttrs; std::unique_ptr<weld::CheckButton> m_xBtnDelFormulas;
VclPtr<CheckBox> aBtnDelObjects; std::unique_ptr<weld::CheckButton> m_xBtnDelNotes;
VclPtr<OKButton> aBtnOk; std::unique_ptr<weld::CheckButton> m_xBtnDelAttrs;
std::unique_ptr<weld::CheckButton> m_xBtnDelObjects;
bool bObjectsDisabled; std::unique_ptr<weld::Button> m_xBtnOk;
static bool bPreviousAllCheck; static bool bPreviousAllCheck;
static InsertDeleteFlags nPreviousChecks; static InsertDeleteFlags nPreviousChecks;
void DisableChecks( bool bDelAllChecked ); void DisableChecks( bool bDelAllChecked );
DECL_LINK( DelAllHdl, Button*, void ); DECL_LINK( DelAllHdl, weld::Button&, void );
public: public:
ScDeleteContentsDlg( vcl::Window* pParent, ScDeleteContentsDlg(weld::Window* pParent, InsertDeleteFlags nCheckDefaults );
InsertDeleteFlags nCheckDefaults ); virtual ~ScDeleteContentsDlg() override;
virtual ~ScDeleteContentsDlg() override;
virtual void dispose() override;
void DisableObjects(); void DisableObjects();
InsertDeleteFlags GetDelContentsCmdBits() const; InsertDeleteFlags GetDelContentsCmdBits() const;
......
...@@ -28,88 +28,70 @@ InsertDeleteFlags ScDeleteContentsDlg::nPreviousChecks = (InsertDeleteFlags::D ...@@ -28,88 +28,70 @@ InsertDeleteFlags ScDeleteContentsDlg::nPreviousChecks = (InsertDeleteFlags::D
InsertDeleteFlags::NOTE | InsertDeleteFlags::FORMULA | InsertDeleteFlags::NOTE | InsertDeleteFlags::FORMULA |
InsertDeleteFlags::VALUE); InsertDeleteFlags::VALUE);
ScDeleteContentsDlg::ScDeleteContentsDlg( vcl::Window* pParent, ScDeleteContentsDlg::ScDeleteContentsDlg(weld::Window* pParent, InsertDeleteFlags nCheckDefaults)
InsertDeleteFlags nCheckDefaults ) : : GenericDialogController(pParent, "modules/scalc/ui/deletecontents.ui", "DeleteContentsDialog")
ModalDialog ( pParent, "DeleteContentsDialog", "modules/scalc/ui/deletecontents.ui" ), , m_bObjectsDisabled(false)
, m_xBtnDelAll(m_xBuilder->weld_check_button("deleteall"))
bObjectsDisabled( false ) , m_xBtnDelStrings(m_xBuilder->weld_check_button("text"))
, m_xBtnDelNumbers(m_xBuilder->weld_check_button("numbers"))
, m_xBtnDelDateTime(m_xBuilder->weld_check_button("datetime"))
, m_xBtnDelFormulas(m_xBuilder->weld_check_button("formulas"))
, m_xBtnDelNotes(m_xBuilder->weld_check_button("comments"))
, m_xBtnDelAttrs(m_xBuilder->weld_check_button("formats"))
, m_xBtnDelObjects(m_xBuilder->weld_check_button("objects"))
, m_xBtnOk(m_xBuilder->weld_button("ok"))
{ {
get( aBtnDelAll, "deleteall" );
get( aBtnDelStrings, "text" );
get( aBtnDelNumbers, "numbers" );
get( aBtnDelDateTime, "datetime" );
get( aBtnDelFormulas, "formulas" );
get( aBtnDelNotes, "comments" );
get( aBtnDelAttrs, "formats" );
get( aBtnDelObjects, "objects" );
get( aBtnOk, "ok" );
if ( nCheckDefaults != InsertDeleteFlags::NONE ) if ( nCheckDefaults != InsertDeleteFlags::NONE )
{ {
ScDeleteContentsDlg::nPreviousChecks = nCheckDefaults; ScDeleteContentsDlg::nPreviousChecks = nCheckDefaults;
ScDeleteContentsDlg::bPreviousAllCheck = false; ScDeleteContentsDlg::bPreviousAllCheck = false;
} }
aBtnDelAll->Check ( ScDeleteContentsDlg::bPreviousAllCheck ); m_xBtnDelAll->set_active( ScDeleteContentsDlg::bPreviousAllCheck );
aBtnDelStrings->Check ( IS_SET( InsertDeleteFlags::STRING, m_xBtnDelStrings->set_active( IS_SET( InsertDeleteFlags::STRING,
ScDeleteContentsDlg::nPreviousChecks ) ); ScDeleteContentsDlg::nPreviousChecks ) );
aBtnDelNumbers->Check ( IS_SET( InsertDeleteFlags::VALUE, m_xBtnDelNumbers->set_active( IS_SET( InsertDeleteFlags::VALUE,
ScDeleteContentsDlg::nPreviousChecks ) ); ScDeleteContentsDlg::nPreviousChecks ) );
aBtnDelDateTime->Check( IS_SET( InsertDeleteFlags::DATETIME, m_xBtnDelDateTime->set_active( IS_SET( InsertDeleteFlags::DATETIME,
ScDeleteContentsDlg::nPreviousChecks ) ); ScDeleteContentsDlg::nPreviousChecks ) );
aBtnDelFormulas->Check( IS_SET( InsertDeleteFlags::FORMULA, m_xBtnDelFormulas->set_active( IS_SET( InsertDeleteFlags::FORMULA,
ScDeleteContentsDlg::nPreviousChecks ) ); ScDeleteContentsDlg::nPreviousChecks ) );
aBtnDelNotes->Check ( IS_SET( InsertDeleteFlags::NOTE, m_xBtnDelNotes->set_active( IS_SET( InsertDeleteFlags::NOTE,
ScDeleteContentsDlg::nPreviousChecks ) ); ScDeleteContentsDlg::nPreviousChecks ) );
aBtnDelAttrs->Check ( IS_SET( InsertDeleteFlags::ATTRIB, m_xBtnDelAttrs->set_active( IS_SET( InsertDeleteFlags::ATTRIB,
ScDeleteContentsDlg::nPreviousChecks ) ); ScDeleteContentsDlg::nPreviousChecks ) );
aBtnDelObjects->Check ( IS_SET( InsertDeleteFlags::OBJECTS, m_xBtnDelObjects->set_active( IS_SET( InsertDeleteFlags::OBJECTS,
ScDeleteContentsDlg::nPreviousChecks ) ); ScDeleteContentsDlg::nPreviousChecks ) );
DisableChecks( aBtnDelAll->IsChecked() ); DisableChecks( m_xBtnDelAll->get_active() );
aBtnDelAll->SetClickHdl( LINK( this, ScDeleteContentsDlg, DelAllHdl ) ); m_xBtnDelAll->connect_clicked( LINK( this, ScDeleteContentsDlg, DelAllHdl ) );
} }
ScDeleteContentsDlg::~ScDeleteContentsDlg() ScDeleteContentsDlg::~ScDeleteContentsDlg()
{ {
disposeOnce();
}
void ScDeleteContentsDlg::dispose()
{
aBtnDelAll.clear();
aBtnDelStrings.clear();
aBtnDelNumbers.clear();
aBtnDelDateTime.clear();
aBtnDelFormulas.clear();
aBtnDelNotes.clear();
aBtnDelAttrs.clear();
aBtnDelObjects.clear();
aBtnOk.clear();
ModalDialog::dispose();
} }
InsertDeleteFlags ScDeleteContentsDlg::GetDelContentsCmdBits() const InsertDeleteFlags ScDeleteContentsDlg::GetDelContentsCmdBits() const
{ {
ScDeleteContentsDlg::nPreviousChecks = InsertDeleteFlags::NONE; ScDeleteContentsDlg::nPreviousChecks = InsertDeleteFlags::NONE;
if ( aBtnDelStrings->IsChecked() ) if ( m_xBtnDelStrings->get_active() )
ScDeleteContentsDlg::nPreviousChecks = InsertDeleteFlags::STRING; ScDeleteContentsDlg::nPreviousChecks = InsertDeleteFlags::STRING;
if ( aBtnDelNumbers->IsChecked() ) if ( m_xBtnDelNumbers->get_active() )
ScDeleteContentsDlg::nPreviousChecks |= InsertDeleteFlags::VALUE; ScDeleteContentsDlg::nPreviousChecks |= InsertDeleteFlags::VALUE;
if ( aBtnDelDateTime->IsChecked()) if ( m_xBtnDelDateTime->get_active())
ScDeleteContentsDlg::nPreviousChecks |= InsertDeleteFlags::DATETIME; ScDeleteContentsDlg::nPreviousChecks |= InsertDeleteFlags::DATETIME;
if ( aBtnDelFormulas->IsChecked()) if ( m_xBtnDelFormulas->get_active())
ScDeleteContentsDlg::nPreviousChecks |= InsertDeleteFlags::FORMULA; ScDeleteContentsDlg::nPreviousChecks |= InsertDeleteFlags::FORMULA;
if ( aBtnDelNotes->IsChecked() ) if ( m_xBtnDelNotes->get_active() )
ScDeleteContentsDlg::nPreviousChecks |= InsertDeleteFlags::NOTE; ScDeleteContentsDlg::nPreviousChecks |= InsertDeleteFlags::NOTE;
if ( aBtnDelAttrs->IsChecked() ) if ( m_xBtnDelAttrs->get_active() )
ScDeleteContentsDlg::nPreviousChecks |= InsertDeleteFlags::ATTRIB; ScDeleteContentsDlg::nPreviousChecks |= InsertDeleteFlags::ATTRIB;
if ( aBtnDelObjects->IsChecked() ) if ( m_xBtnDelObjects->get_active() )
ScDeleteContentsDlg::nPreviousChecks |= InsertDeleteFlags::OBJECTS; ScDeleteContentsDlg::nPreviousChecks |= InsertDeleteFlags::OBJECTS;
ScDeleteContentsDlg::bPreviousAllCheck = aBtnDelAll->IsChecked(); ScDeleteContentsDlg::bPreviousAllCheck = m_xBtnDelAll->get_active();
return ( ScDeleteContentsDlg::bPreviousAllCheck return ( ScDeleteContentsDlg::bPreviousAllCheck
? InsertDeleteFlags::ALL ? InsertDeleteFlags::ALL
...@@ -120,39 +102,39 @@ void ScDeleteContentsDlg::DisableChecks( bool bDelAllChecked ) ...@@ -120,39 +102,39 @@ void ScDeleteContentsDlg::DisableChecks( bool bDelAllChecked )
{ {
if ( bDelAllChecked ) if ( bDelAllChecked )
{ {
aBtnDelStrings->Disable(); m_xBtnDelStrings->set_sensitive(false);
aBtnDelNumbers->Disable(); m_xBtnDelNumbers->set_sensitive(false);
aBtnDelDateTime->Disable(); m_xBtnDelDateTime->set_sensitive(false);
aBtnDelFormulas->Disable(); m_xBtnDelFormulas->set_sensitive(false);
aBtnDelNotes->Disable(); m_xBtnDelNotes->set_sensitive(false);
aBtnDelAttrs->Disable(); m_xBtnDelAttrs->set_sensitive(false);
aBtnDelObjects->Disable(); m_xBtnDelObjects->set_sensitive(false);
} }
else else
{ {
aBtnDelStrings->Enable(); m_xBtnDelStrings->set_sensitive(true);
aBtnDelNumbers->Enable(); m_xBtnDelNumbers->set_sensitive(true);
aBtnDelDateTime->Enable(); m_xBtnDelDateTime->set_sensitive(true);
aBtnDelFormulas->Enable(); m_xBtnDelFormulas->set_sensitive(true);
aBtnDelNotes->Enable(); m_xBtnDelNotes->set_sensitive(true);
aBtnDelAttrs->Enable(); m_xBtnDelAttrs->set_sensitive(true);
if (bObjectsDisabled) if (m_bObjectsDisabled)
aBtnDelObjects->Disable(); m_xBtnDelObjects->set_sensitive(false);
else else
aBtnDelObjects->Enable(); m_xBtnDelObjects->set_sensitive(true);
} }
} }
void ScDeleteContentsDlg::DisableObjects() void ScDeleteContentsDlg::DisableObjects()
{ {
bObjectsDisabled = true; m_bObjectsDisabled = true;
aBtnDelObjects->Check(false); m_xBtnDelObjects->set_active(false);
aBtnDelObjects->Disable(); m_xBtnDelObjects->set_sensitive(false);
} }
IMPL_LINK_NOARG(ScDeleteContentsDlg, DelAllHdl, Button*, void) IMPL_LINK_NOARG(ScDeleteContentsDlg, DelAllHdl, weld::Button&, void)
{ {
DisableChecks( aBtnDelAll->IsChecked() ); DisableChecks( m_xBtnDelAll->get_active() );
} }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -428,7 +428,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) ...@@ -428,7 +428,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
OSL_ENSURE(pFact, "ScAbstractFactory create fail!"); OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
ScopedVclPtr<AbstractScDeleteContentsDlg> pDlg(pFact->CreateScDeleteContentsDlg(pTabViewShell->GetDialogParent())); ScopedVclPtr<AbstractScDeleteContentsDlg> pDlg(pFact->CreateScDeleteContentsDlg(pTabViewShell->GetFrameWeld()));
OSL_ENSURE(pDlg, "Dialog create fail!"); OSL_ENSURE(pDlg, "Dialog create fail!");
ScDocument* pDoc = GetViewData()->GetDocument(); ScDocument* pDoc = GetViewData()->GetDocument();
SCTAB nTab = GetViewData()->GetTabNo(); SCTAB nTab = GetViewData()->GetTabNo();
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 --> <!-- Generated with glade 3.20.4 -->
<interface domain="sc"> <interface domain="sc">
<requires lib="gtk+" version="3.18"/> <requires lib="gtk+" version="3.18"/>
<object class="GtkDialog" id="DeleteContentsDialog"> <object class="GtkDialog" id="DeleteContentsDialog">
...@@ -7,6 +7,9 @@ ...@@ -7,6 +7,9 @@
<property name="border_width">6</property> <property name="border_width">6</property>
<property name="title" translatable="yes" context="deletecontents|DeleteContentsDialog">Delete Contents</property> <property name="title" translatable="yes" context="deletecontents|DeleteContentsDialog">Delete Contents</property>
<property name="resizable">False</property> <property name="resizable">False</property>
<property name="modal">True</property>
<property name="default_width">0</property>
<property name="default_height">0</property>
<property name="type_hint">dialog</property> <property name="type_hint">dialog</property>
<child internal-child="vbox"> <child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1"> <object class="GtkBox" id="dialog-vbox1">
...@@ -254,5 +257,8 @@ ...@@ -254,5 +257,8 @@
<action-widget response="-6">cancel</action-widget> <action-widget response="-6">cancel</action-widget>
<action-widget response="-11">help</action-widget> <action-widget response="-11">help</action-widget>
</action-widgets> </action-widgets>
<child>
<placeholder/>
</child>
</object> </object>
</interface> </interface>
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