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

move set master password dialog to uui and adapt code

Change-Id: Ic23b7589f48f7b2fc4b8f6e4bc285364b8819081
üst 27b04131
......@@ -52,7 +52,6 @@ $(eval $(call gb_SrsTarget_add_files,uui/res,\
uui/source/ids.src \
uui/source/lockfailed.src \
uui/source/logindlg.src \
uui/source/masterpasscrtdlg.src \
uui/source/nameclashdlg.src \
uui/source/newerverwarn.src \
uui/source/openlocked.src \
......
......@@ -11,6 +11,7 @@ $(eval $(call gb_UI_UI,uui))
$(eval $(call gb_UI_add_uifiles,uui,\
uui/uiconfig/ui/masterpassworddlg \
uui/uiconfig/ui/setmasterpassworddlg \
))
# vim: set noet sw=4 ts=4:
......@@ -155,7 +155,6 @@
#define TITLE_UUI_SSLWARN_INVALID (ERRCODE_AREA_UUI_UNKNOWNAUTH + SSLWARN_TYPE_INVALID + 3)
#define HID_DLG_LOGIN "UUI_HID_DLG_LOGIN"
#define HID_DLG_MASTERPASSWORD_CRT "UUI_HID_DLG_MASTERPASSWORD_CRT"
#define HID_DLG_FILTER_SELECT "UUI_HID_DLG_FILTER_SELECT"
#define HID_DLG_PASSWORD_UUI "UUI_HID_DLG_PASSWORD_UUI"
#define HID_DLG_UNKNOWNAUTH_UUI "UUI_HID_DLG_UNKNOWNAUTH_UUI"
......
......@@ -21,7 +21,6 @@
#include <vcl/msgbox.hxx>
#include <ids.hrc>
#include <masterpasscrtdlg.hrc>
#include <masterpasscrtdlg.hxx>
// MasterPasswordCreateDialog---------------------------------------------------
......@@ -30,7 +29,7 @@
IMPL_LINK_NOARG(MasterPasswordCreateDialog, EditHdl_Impl)
{
aOKBtn.Enable( aEDMasterPasswordCrt.GetText().getLength() >= nMinLen );
m_pOKBtn->Enable( m_pEDMasterPasswordCrt->GetText().getLength() >= nMinLen );
return 0;
}
......@@ -39,141 +38,33 @@ IMPL_LINK_NOARG(MasterPasswordCreateDialog, EditHdl_Impl)
IMPL_LINK_NOARG(MasterPasswordCreateDialog, OKHdl_Impl)
{
// compare both passwords and show message box if there are not equal!!
if( aEDMasterPasswordCrt.GetText() == aEDMasterPasswordRepeat.GetText() )
if( m_pEDMasterPasswordCrt->GetText() == m_pEDMasterPasswordRepeat->GetText() )
EndDialog( RET_OK );
else
{
String aErrorMsg( ResId( STR_ERROR_PASSWORDS_NOT_IDENTICAL, *pResourceMgr ));
ErrorBox aErrorBox( this, WB_OK, aErrorMsg );
aErrorBox.Execute();
aEDMasterPasswordCrt.SetText( String() );
aEDMasterPasswordRepeat.SetText( String() );
aEDMasterPasswordCrt.GrabFocus();
m_pEDMasterPasswordCrt->SetText( String() );
m_pEDMasterPasswordRepeat->SetText( String() );
m_pEDMasterPasswordCrt->GrabFocus();
}
return 1;
}
// -----------------------------------------------------------------------
MasterPasswordCreateDialog::MasterPasswordCreateDialog
(
Window* pParent,
ResMgr* pResMgr
) :
ModalDialog( pParent, ResId( DLG_UUI_MASTERPASSWORD_CRT, *pResMgr ) ),
aFTInfoText ( this, ResId( FT_INFOTEXT, *pResMgr ) ),
aFLInfoText ( this, ResId( FL_INFOTEXT, *pResMgr ) ),
aFTMasterPasswordCrt ( this, ResId( FT_MASTERPASSWORD_CRT, *pResMgr ) ),
aEDMasterPasswordCrt ( this, ResId( ED_MASTERPASSWORD_CRT, *pResMgr ) ),
aFTMasterPasswordRepeat ( this, ResId( FT_MASTERPASSWORD_REPEAT, *pResMgr ) ),
aEDMasterPasswordRepeat ( this, ResId( ED_MASTERPASSWORD_REPEAT, *pResMgr ) ),
aFTCautionText ( this, ResId( FT_CAUTIONTEXT, *pResMgr ) ),
aFLCautionText ( this, ResId( FL_CAUTIONTEXT, *pResMgr ) ),
aFTMasterPasswordWarning ( this, ResId( FT_MASTERPASSWORD_WARNING, *pResMgr ) ),
aFL ( this, ResId( FL_FIXED_LINE, *pResMgr ) ),
aOKBtn ( this, ResId( BTN_MASTERPASSCRT_OK, *pResMgr ) ),
aCancelBtn ( this, ResId( BTN_MASTERPASSCRT_CANCEL, *pResMgr ) ),
aHelpBtn ( this, ResId( BTN_MASTERPASSCRT_HELP, *pResMgr ) ),
pResourceMgr ( pResMgr ),
nMinLen ( 1 )
{
FreeResource();
aOKBtn.Enable( sal_False );
aOKBtn.SetClickHdl( LINK( this, MasterPasswordCreateDialog, OKHdl_Impl ) );
aEDMasterPasswordCrt.SetModifyHdl( LINK( this, MasterPasswordCreateDialog, EditHdl_Impl ) );
CalculateTextHeight();
long nLableWidth = aFTMasterPasswordWarning.GetSizePixel().Width();
long nLabelHeight = aFTMasterPasswordWarning.GetSizePixel().Height();
long nTextWidth = aFTMasterPasswordWarning.GetCtrlTextWidth( aFTMasterPasswordWarning.GetText() );
long nTextHeight = aFTMasterPasswordWarning.GetTextHeight();
Rectangle aLabelRect( aFTMasterPasswordWarning.GetPosPixel(), aFTMasterPasswordWarning.GetSizePixel() );
Rectangle aRect = aFTMasterPasswordWarning.GetTextRect( aLabelRect, aFTMasterPasswordWarning.GetText() );
long nNewLabelHeight = 0;
if ( nTextWidth > 0 )
{
for( nNewLabelHeight = ( nTextWidth / nLableWidth + 1 ) * nTextHeight;
nNewLabelHeight < aRect.GetHeight();
nNewLabelHeight += nTextHeight ) {};
}
long nDelta = nNewLabelHeight - nLabelHeight;
Size aNewDlgSize = GetSizePixel();
aNewDlgSize.Height() += nDelta;
SetSizePixel( aNewDlgSize );
Size aNewWarningSize = aFTMasterPasswordWarning.GetSizePixel();
aNewWarningSize.Height() = nNewLabelHeight;
aFTMasterPasswordWarning.SetPosSizePixel( aFTMasterPasswordWarning.GetPosPixel(), aNewWarningSize );
Window* pControls[] = { &aFL, &aOKBtn, &aCancelBtn, &aHelpBtn };
const sal_Int32 nCCount = sizeof( pControls ) / sizeof( pControls[0] );
for ( int i = 0; i < nCCount; ++i )
{
Point aNewPos =(*pControls[i]).GetPosPixel();
aNewPos.Y() += nDelta;
pControls[i]->SetPosSizePixel( aNewPos, pControls[i]->GetSizePixel() );
}
};
void MasterPasswordCreateDialog::CalculateTextHeight()
MasterPasswordCreateDialog::MasterPasswordCreateDialog(Window* pParent, ResMgr* pResMgr)
: ModalDialog(pParent, "SetMasterPasswordDialog", "uui/ui/setmasterpassworddlg.ui")
, pResourceMgr(pResMgr)
, nMinLen(1)
{
Size aSize = aFTInfoText.GetSizePixel();
Size aMinSize = aFTInfoText.CalcMinimumSize( aSize.Width() );
long nDelta = 0;
if ( aSize.Height() > aMinSize.Height() )
{
aFTInfoText.SetSizePixel( aMinSize );
nDelta = aSize.Height() - aMinSize.Height();
Window* pWins[] = { &aFLInfoText, &aFTMasterPasswordCrt, &aEDMasterPasswordCrt,
&aFTMasterPasswordRepeat, &aEDMasterPasswordRepeat, &aFTCautionText,
&aFLCautionText, &aOKBtn, &aCancelBtn, &aHelpBtn };
Window** pWindow = pWins;
const sal_Int32 nCount = sizeof( pWins ) / sizeof( pWins[0] );
for ( sal_Int32 i = 0; i < nCount; ++i, ++pWindow )
{
Point aNewPos = (*pWindow)->GetPosPixel();
aNewPos.Y() -= nDelta;
(*pWindow)->SetPosPixel( aNewPos );
}
}
aSize = aFTCautionText.GetSizePixel();
aMinSize = aFTCautionText.CalcMinimumSize( aSize.Width() );
if ( aSize.Height() > aMinSize.Height() )
{
aFTCautionText.SetSizePixel( aMinSize );
long nTemp = aSize.Height() - aMinSize.Height();
nDelta += nTemp;
Window* pWins[] = { &aFLCautionText, &aOKBtn, &aCancelBtn, &aHelpBtn };
Window** pWindow = pWins;
const sal_Int32 nCount = sizeof( pWins ) / sizeof( pWins[0] );
for ( sal_Int32 i = 0; i < nCount; ++i, ++pWindow )
{
Point aNewPos = (*pWindow)->GetPosPixel();
aNewPos.Y() -= nTemp;
(*pWindow)->SetPosPixel( aNewPos );
}
}
if ( nDelta > 0 )
{
Size aDlgSize = GetOutputSizePixel();
aDlgSize.Height() -= nDelta;
SetSizePixel( aDlgSize );
}
get(m_pEDMasterPasswordCrt, "password1");
get(m_pEDMasterPasswordRepeat, "password2");
get(m_pOKBtn, "ok");
m_pOKBtn->Enable( sal_False );
m_pOKBtn->SetClickHdl( LINK( this, MasterPasswordCreateDialog, OKHdl_Impl ) );
m_pEDMasterPasswordCrt->SetModifyHdl( LINK( this, MasterPasswordCreateDialog, EditHdl_Impl ) );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef UUI_MASTERPASSCRT_HRC
#define UUI_MASTERPASSCRT_HRC
#include <svtools/controldims.hrc>
//============================================================================
#define FT_INFOTEXT 10
#define FL_INFOTEXT 11
#define FT_MASTERPASSWORD_CRT 20
#define ED_MASTERPASSWORD_CRT 21
#define FT_MASTERPASSWORD_REPEAT 22
#define ED_MASTERPASSWORD_REPEAT 23
#define FT_MASTERPASSWORD_WARNING 24
#define FL_FIXED_LINE 30
#define FT_CAUTIONTEXT 30
#define FL_CAUTIONTEXT 31
#define BTN_MASTERPASSCRT_OK 50
#define BTN_MASTERPASSCRT_CANCEL 51
#define BTN_MASTERPASSCRT_HELP 52
#define ROW_0 (RSC_SP_FLGR_INNERBORDER_TOP)
#define ROW_1 (ROW_0+7*RSC_CD_FIXEDTEXT_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_2 (ROW_1+RSC_CD_FIXEDLINE_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_3 (ROW_2+RSC_CD_FIXEDTEXT_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_4 (ROW_3+RSC_CD_TEXTBOX_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_5 (ROW_4+RSC_CD_FIXEDTEXT_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_6 (ROW_5+RSC_CD_TEXTBOX_HEIGHT+RSC_SP_CTRL_X)
#define ROW_7 (ROW_6+8*RSC_CD_FIXEDTEXT_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_8 (ROW_7+RSC_CD_FIXEDLINE_HEIGHT+RSC_SP_CTRL_DESC_Y)
#define ROW_9 (ROW_8+RSC_CD_PUSHBUTTON_HEIGHT+RSC_SP_CTRL_X)
#define COL_0 (RSC_SP_FLGR_INNERBORDER_LEFT)
#define COL_2 (DLG_WIDTH-RSC_SP_FLGR_INNERBORDER_LEFT-RSC_CD_PUSHBUTTON_WIDTH)
#define COL_1 (COL_2-RSC_SP_CTRL_GROUP_X-RSC_CD_PUSHBUTTON_WIDTH)
#define DLG_WIDTH 180
#define CTRL_WIDTH (DLG_WIDTH-2*RSC_SP_FLGR_INNERBORDER_LEFT)
#define DLG_HEIGHT (ROW_9)
#endif // UUI_MASTERPASSCRT_HRC
......@@ -32,22 +32,9 @@
class MasterPasswordCreateDialog : public ModalDialog
{
private:
FixedText aFTInfoText;
FixedLine aFLInfoText;
FixedText aFTMasterPasswordCrt;
Edit aEDMasterPasswordCrt;
FixedText aFTMasterPasswordRepeat;
Edit aEDMasterPasswordRepeat;
FixedText aFTCautionText;
FixedLine aFLCautionText;
FixedText aFTMasterPasswordWarning;
FixedLine aFL;
OKButton aOKBtn;
CancelButton aCancelBtn;
HelpButton aHelpBtn;
Edit* m_pEDMasterPasswordCrt;
Edit* m_pEDMasterPasswordRepeat;
OKButton* m_pOKBtn;
DECL_LINK(OKHdl_Impl, void *);
......@@ -56,13 +43,11 @@ private:
public:
MasterPasswordCreateDialog( Window* pParent, ResMgr * pResMgr );
String GetMasterPassword() const { return aEDMasterPasswordCrt.GetText(); }
OUString GetMasterPassword() const { return m_pEDMasterPasswordCrt->GetText(); }
private:
ResMgr* pResourceMgr;
sal_uInt16 nMinLen;
void CalculateTextHeight();
};
#endif // UUI_MASTERPASSCRTDLG_HXX
......
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#define __RSC
#include <ids.hrc>
#include <masterpasscrtdlg.hrc>
ModalDialog DLG_UUI_MASTERPASSWORD_CRT
{
HelpId = HID_DLG_MASTERPASSWORD_CRT ;
Border = TRUE ;
Moveable = TRUE ;
OutputSize = TRUE ;
SVLook = TRUE ;
Size = MAP_APPFONT ( DLG_WIDTH , DLG_HEIGHT ) ;
Text [ en-US ] = "Set Master Password";
FixedText FT_INFOTEXT
{
Pos = MAP_APPFONT ( COL_0 , ROW_0 ) ;
Size = MAP_APPFONT ( CTRL_WIDTH , 7*RSC_CD_FIXEDTEXT_HEIGHT ) ;
WordBreak = TRUE ;
Text [ en-US ] = "Passwords for web connections are protected by a master password. You will be asked to enter it once per session, if %PRODUCTNAME retrieves a password from the protected password list.";
};
FixedLine FL_INFOTEXT
{
Pos = MAP_APPFONT ( 0 , ROW_1 ) ;
Size = MAP_APPFONT ( DLG_WIDTH , RSC_CD_FIXEDLINE_HEIGHT ) ;
};
FixedText FT_MASTERPASSWORD_CRT
{
Pos = MAP_APPFONT ( COL_0 , ROW_2 ) ;
Size = MAP_APPFONT ( CTRL_WIDTH , RSC_CD_FIXEDLINE_HEIGHT ) ;
Text [ en-US ] = "~Enter password";
};
Edit ED_MASTERPASSWORD_CRT
{
HelpID = "uui:Edit:DLG_UUI_MASTERPASSWORD_CRT:ED_MASTERPASSWORD_CRT";
Pos = MAP_APPFONT ( COL_0 , ROW_3 ) ;
Size = MAP_APPFONT ( CTRL_WIDTH , RSC_CD_TEXTBOX_HEIGHT ) ;
Border = TRUE ;
PassWord = TRUE ;
};
FixedText FT_MASTERPASSWORD_REPEAT
{
Pos = MAP_APPFONT ( COL_0 , ROW_4 ) ;
Size = MAP_APPFONT ( CTRL_WIDTH , RSC_CD_FIXEDLINE_HEIGHT ) ;
Text [ en-US ] = "~Reenter password";
};
Edit ED_MASTERPASSWORD_REPEAT
{
HelpID = "uui:Edit:DLG_UUI_MASTERPASSWORD_CRT:ED_MASTERPASSWORD_REPEAT";
Pos = MAP_APPFONT ( COL_0 , ROW_5 ) ;
Size = MAP_APPFONT ( CTRL_WIDTH , RSC_CD_TEXTBOX_HEIGHT ) ;
Border = TRUE ;
PassWord = TRUE ;
};
FixedText FT_CAUTIONTEXT
{
Pos = MAP_APPFONT ( COL_0 , ROW_6 ) ;
Size = MAP_APPFONT ( CTRL_WIDTH , 8*RSC_CD_FIXEDTEXT_HEIGHT ) ;
WordBreak = TRUE ;
Text [ en-US ] = "Caution: If you forget the master password, you will be unable to access any of the information protected by it. Passwords are case-sensitive.";
};
FixedLine FL_CAUTIONTEXT
{
Pos = MAP_APPFONT ( 0 , ROW_7 ) ;
Size = MAP_APPFONT ( DLG_WIDTH , RSC_CD_FIXEDLINE_HEIGHT ) ;
};
HelpButton BTN_MASTERPASSCRT_HELP
{
Pos = MAP_APPFONT ( COL_0 , ROW_8 ) ;
Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH , RSC_CD_PUSHBUTTON_HEIGHT ) ;
};
OKButton BTN_MASTERPASSCRT_OK
{
Pos = MAP_APPFONT ( COL_1 , ROW_8 ) ;
Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH , RSC_CD_PUSHBUTTON_HEIGHT ) ;
DefButton = TRUE ;
};
CancelButton BTN_MASTERPASSCRT_CANCEL
{
Pos = MAP_APPFONT ( COL_2 , ROW_8 ) ;
Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH , RSC_CD_PUSHBUTTON_HEIGHT ) ;
};
};
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<object class="GtkDialog" id="dialog1">
<object class="GtkDialog" id="SetMasterPasswordDialog">
<property name="can_focus">False</property>
<property name="border_width">5</property>
<property name="border_width">6</property>
<property name="title" translatable="yes">Set Master Password</property>
<property name="type_hint">dialog</property>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<property name="spacing">12</property>
<child internal-child="action_area">
<object class="GtkButtonBox" id="dialog-action_area1">
<property name="can_focus">False</property>
<property name="layout_style">spread</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="help">
<property name="label">gtk-help</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
<property name="secondary">True</property>
</packing>
</child>
<child>
<object class="GtkButton" id="ok">
<property name="label">gtk-ok</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
......@@ -49,11 +49,9 @@
<child>
<object class="GtkButton" id="cancel">
<property name="label">gtk-cancel</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
......@@ -80,10 +78,10 @@
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Passwords for web connections are protected by a master
password. You will be asked to enter it once per session, if
LibreOffice retrieves a password from the protected password
list.</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Passwords for web connections are protected by a master password. You will be asked to enter it once per session, if %PRODUCTNAME retrieves a password from the protected password list.</property>
<property name="wrap">True</property>
<property name="max_width_chars">62</property>
</object>
<packing>
<property name="expand">False</property>
......@@ -96,8 +94,9 @@ list.</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">1</property>
<property name="label" translatable="yes">~Enter password</property>
<property name="label" translatable="yes">_Enter password:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">password1</property>
</object>
<packing>
<property name="expand">False</property>
......@@ -106,9 +105,10 @@ list.</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry1">
<object class="GtkEntry" id="password1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="visibility">False</property>
<property name="invisible_char"></property>
</object>
<packing>
......@@ -122,7 +122,9 @@ list.</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">~Reenter password</property>
<property name="label" translatable="yes">_Reenter password:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">password2</property>
</object>
<packing>
<property name="expand">False</property>
......@@ -131,9 +133,10 @@ list.</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry2">
<object class="GtkEntry" id="password2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="visibility">False</property>
<property name="invisible_char"></property>
</object>
<packing>
......@@ -146,7 +149,11 @@ list.</property>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Caution:If you forget the master password,you will be unable to access any of the information protected by it. Passwords are case-sensitive.</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Caution: If you forget the master password, you will be unable to access any of the information protected by it. Passwords are case sensitive.</property>
<property name="wrap">True</property>
<property name="width_chars">56</property>
<property name="max_width_chars">62</property>
</object>
<packing>
<property name="expand">False</property>
......
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