summaryrefslogtreecommitdiff
path: root/fpicker
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-10-21 14:20:12 +0100
committerCaolán McNamara <caolanm@redhat.com>2019-10-29 13:58:47 +0100
commit09e3d45cdc5c739e5246388a83ccfc6d76bf66e9 (patch)
tree5ae533f38a626016951b02e7d2406c368b298723 /fpicker
parent93a641d291adf86491cc68ac64f4f614c937183a (diff)
weld fpicker cluster
Change-Id: I6566263809ff0032388a0b56571f0cf7428058d7 Reviewed-on: https://gerrit.libreoffice.org/81334 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'fpicker')
-rw-r--r--fpicker/Library_fps_office.mk2
-rw-r--r--fpicker/UIConfig_fps.mk1
-rw-r--r--fpicker/inc/bitmaps.hlst2
-rw-r--r--fpicker/inc/strings.hrc1
-rw-r--r--fpicker/source/office/OfficeControlAccess.cxx296
-rw-r--r--fpicker/source/office/OfficeControlAccess.hxx59
-rw-r--r--fpicker/source/office/OfficeFilePicker.cxx131
-rw-r--r--fpicker/source/office/OfficeFilePicker.hxx4
-rw-r--r--fpicker/source/office/OfficeFolderPicker.cxx30
-rw-r--r--fpicker/source/office/OfficeFolderPicker.hxx2
-rw-r--r--fpicker/source/office/PlacesListBox.cxx183
-rw-r--r--fpicker/source/office/PlacesListBox.hxx100
-rw-r--r--fpicker/source/office/RemoteFilesDialog.cxx795
-rw-r--r--fpicker/source/office/RemoteFilesDialog.hxx78
-rw-r--r--fpicker/source/office/asyncfilepicker.hxx5
-rw-r--r--fpicker/source/office/autocmpledit.cxx41
-rw-r--r--fpicker/source/office/autocmpledit.hxx26
-rw-r--r--fpicker/source/office/breadcrumb.cxx164
-rw-r--r--fpicker/source/office/breadcrumb.hxx62
-rw-r--r--fpicker/source/office/commonpicker.cxx107
-rw-r--r--fpicker/source/office/commonpicker.hxx8
-rw-r--r--fpicker/source/office/contentenumeration.hxx6
-rw-r--r--fpicker/source/office/fileview.cxx1204
-rw-r--r--fpicker/source/office/fileview.hxx53
-rw-r--r--fpicker/source/office/foldertree.cxx110
-rw-r--r--fpicker/source/office/foldertree.hxx26
-rw-r--r--fpicker/source/office/fpdialogbase.hxx11
-rw-r--r--fpicker/source/office/iconview.cxx233
-rw-r--r--fpicker/source/office/iconview.hxx41
-rw-r--r--fpicker/source/office/iconviewimpl.cxx662
-rw-r--r--fpicker/source/office/iconviewimpl.hxx68
-rw-r--r--fpicker/source/office/iodlg.cxx1568
-rw-r--r--fpicker/source/office/iodlg.hxx131
-rw-r--r--fpicker/source/office/iodlgimp.cxx186
-rw-r--r--fpicker/source/office/iodlgimp.hxx232
-rw-r--r--fpicker/source/office/pickercallbacks.hxx14
-rw-r--r--fpicker/uiconfig/ui/breadcrumb.ui32
-rw-r--r--fpicker/uiconfig/ui/explorerfiledialog.ui498
-rw-r--r--fpicker/uiconfig/ui/remotefilesdialog.ui319
39 files changed, 3016 insertions, 4475 deletions
diff --git a/fpicker/Library_fps_office.mk b/fpicker/Library_fps_office.mk
index eff3f5ebe84f..3aec0b66906e 100644
--- a/fpicker/Library_fps_office.mk
+++ b/fpicker/Library_fps_office.mk
@@ -52,8 +52,6 @@ $(eval $(call gb_Library_add_exception_objects,fps_office,\
fpicker/source/office/fpinteraction \
fpicker/source/office/fpsmartcontent \
fpicker/source/office/fps_office \
- fpicker/source/office/iconview \
- fpicker/source/office/iconviewimpl \
fpicker/source/office/iodlg \
fpicker/source/office/iodlgimp \
fpicker/source/office/OfficeControlAccess \
diff --git a/fpicker/UIConfig_fps.mk b/fpicker/UIConfig_fps.mk
index ee8fea50d663..2c179b296481 100644
--- a/fpicker/UIConfig_fps.mk
+++ b/fpicker/UIConfig_fps.mk
@@ -10,6 +10,7 @@
$(eval $(call gb_UIConfig_UIConfig,fps))
$(eval $(call gb_UIConfig_add_uifiles,fps,\
+ fpicker/uiconfig/ui/breadcrumb \
fpicker/uiconfig/ui/explorerfiledialog \
fpicker/uiconfig/ui/foldernamedialog \
fpicker/uiconfig/ui/remotefilesdialog \
diff --git a/fpicker/inc/bitmaps.hlst b/fpicker/inc/bitmaps.hlst
index 878058154fb6..4951ead796f0 100644
--- a/fpicker/inc/bitmaps.hlst
+++ b/fpicker/inc/bitmaps.hlst
@@ -11,8 +11,6 @@
#define INCLUDED_FPICKER_INC_BITMAPS_HRC
#define RID_BMP_FOLDER_OPEN "res/folderop.png"
-#define BMP_FILEDLG_BTN_UP "res/fp010.png"
-#define BMP_FILEDLG_CREATEFOLDER "fpicker/res/fp014.png"
#define BMP_FILEDLG_PLACE_LOCAL "fpicker/res/fp015.png"
#define BMP_FILEDLG_PLACE_REMOTE "fpicker/res/fp016.png"
#define RID_BMP_FOLDER "svtools/res/folder.png"
diff --git a/fpicker/inc/strings.hrc b/fpicker/inc/strings.hrc
index 05acac0935fc..b175069c05da 100644
--- a/fpicker/inc/strings.hrc
+++ b/fpicker/inc/strings.hrc
@@ -30,7 +30,6 @@
#define STR_BUTTONSELECT NC_("STR_BUTTONSELECT", "~Select")
#define STR_PREVIEW NC_("STR_PREVIEW", "File Preview")
#define STR_DEFAULT_DIRECTORY NC_("STR_DEFAULT_DIRECTORY", "My Documents")
-#define STR_PLACES_TITLE NC_("STR_PLACES_TITLE", "Places")
#define RID_FILEOPEN_NOTEXISTENTFILE NC_("RID_FILEOPEN_NOTEXISTENTFILE", "The file $name$ does not exist.\nMake sure you have entered the correct file name.")
#define STR_SVT_NEW_FOLDER NC_("STR_SVT_NEW_FOLDER", "Folder")
#define STR_SVT_NOREMOVABLEDEVICE NC_("STR_SVT_NOREMOVABLEDEVICE", "No removable storage device detected.\nMake sure it is plugged in properly and try again.")
diff --git a/fpicker/source/office/OfficeControlAccess.cxx b/fpicker/source/office/OfficeControlAccess.cxx
index 073d0268a9be..256839897f83 100644
--- a/fpicker/source/office/OfficeControlAccess.cxx
+++ b/fpicker/source/office/OfficeControlAccess.cxx
@@ -101,22 +101,19 @@ namespace svt
{ "VersionListLabel", LISTBOX_VERSION_LABEL, PROPERTY_FLAGS_COMMON | PropFlags::Text }
};
-
static const sal_Int32 s_nControlCount = SAL_N_ELEMENTS( aDescriptions );
static ControlDescIterator s_pControls = aDescriptions;
static ControlDescIterator s_pControlsEnd = aDescriptions + s_nControlCount;
-
struct ControlDescriptionLookup
{
- bool operator()( const ControlDescription& _rDesc1, const ControlDescription& _rDesc2 )
+ bool operator()( const ControlDescription& rDesc1, const ControlDescription& rDesc2 )
{
- return strcmp(_rDesc1.pControlName, _rDesc2.pControlName) < 0;
+ return strcmp(rDesc1.pControlName, rDesc2.pControlName) < 0;
}
};
-
struct ControlProperty
{
const sal_Char* pPropertyName;
@@ -125,7 +122,6 @@ namespace svt
typedef const ControlProperty* ControlPropertyIterator;
-
static const ControlProperty aProperties[] = {
{ "Text", PropFlags::Text },
{ "Enabled", PropFlags::Enabled },
@@ -137,7 +133,6 @@ namespace svt
{ "Checked", PropFlags::Checked }
};
-
static const int s_nPropertyCount = SAL_N_ELEMENTS( aProperties );
static ControlPropertyIterator s_pProperties = aProperties;
@@ -166,38 +161,48 @@ namespace svt
}
}
-
- OControlAccess::OControlAccess( IFilePickerController* _pController, SvtFileView* _pFileView )
- :m_pFilePickerController( _pController )
- ,m_pFileView( _pFileView )
+ OControlAccess::OControlAccess(IFilePickerController* pController, SvtFileView* pFileView)
+ : m_pFilePickerController(pController)
+ , m_pFileView(pFileView)
{
DBG_ASSERT( m_pFilePickerController, "OControlAccess::OControlAccess: invalid control locator!" );
}
+ bool OControlAccess::IsFileViewWidget(weld::Widget const * pControl) const
+ {
+ if (!pControl)
+ return false;
+ if (!m_pFileView)
+ return false;
+ return pControl == m_pFileView->identifier();
+ }
- void OControlAccess::setHelpURL( vcl::Window* _pControl, const OUString& sHelpURL, bool _bFileView )
+ void OControlAccess::setHelpURL(weld::Widget* pControl, const OUString& sHelpURL)
{
OUString sHelpID( sHelpURL );
INetURLObject aHID( sHelpURL );
- if ( aHID.GetProtocol() == INetProtocol::Hid )
- sHelpID = aHID.GetURLPath();
+ if (aHID.GetProtocol() == INetProtocol::Hid)
+ sHelpID = aHID.GetURLPath();
// URLs should always be UTF8 encoded and escaped
OString sID( OUStringToOString( sHelpID, RTL_TEXTENCODING_UTF8 ) );
- if ( _bFileView )
+ if (IsFileViewWidget(pControl))
+ {
// the file view "overrides" the SetHelpId
- static_cast< SvtFileView* >( _pControl )->SetHelpId( sID );
+ m_pFileView->set_help_id(sID);
+ }
else
- _pControl->SetHelpId( sID );
+ pControl->set_help_id(sID);
}
-
- OUString OControlAccess::getHelpURL( vcl::Window const * _pControl, bool _bFileView )
+ OUString OControlAccess::getHelpURL(weld::Widget const * pControl) const
{
- OString aHelpId = _pControl->GetHelpId();
- if ( _bFileView )
+ OString aHelpId = pControl->get_help_id();
+ if (IsFileViewWidget(pControl))
+ {
// the file view "overrides" the SetHelpId
- aHelpId = static_cast< SvtFileView const * >( _pControl )->GetHelpId( );
+ aHelpId = m_pFileView->get_help_id();
+ }
OUString sHelpURL;
OUString aTmp( OStringToOUString( aHelpId, RTL_TEXTENCODING_UTF8 ) );
@@ -208,17 +213,16 @@ namespace svt
return sHelpURL;
}
-
- Any OControlAccess::getControlProperty( const OUString& _rControlName, const OUString& _rControlProperty )
+ Any OControlAccess::getControlProperty( const OUString& rControlName, const OUString& rControlProperty )
{
// look up the control
sal_Int16 nControlId = -1;
PropFlags nPropertyMask = PropFlags::NONE;
- Control* pControl = implGetControl( _rControlName, &nControlId, &nPropertyMask );
+ weld::Widget* pControl = implGetControl( rControlName, &nControlId, &nPropertyMask );
// will throw an IllegalArgumentException if the name is not valid
// look up the property
- ControlPropertyIterator aPropDesc = ::std::find_if( s_pProperties, s_pPropertiesEnd, ControlPropertyLookup( _rControlProperty ) );
+ ControlPropertyIterator aPropDesc = ::std::find_if( s_pProperties, s_pPropertiesEnd, ControlPropertyLookup( rControlProperty ) );
if ( aPropDesc == s_pPropertiesEnd )
// it's a completely unknown property
lcl_throwIllegalArgumentException();
@@ -230,12 +234,11 @@ namespace svt
return implGetControlProperty( pControl, aPropDesc->nPropertyId );
}
-
- Control* OControlAccess::implGetControl( const OUString& _rControlName, sal_Int16* _pId, PropFlags* _pPropertyMask ) const
+ weld::Widget* OControlAccess::implGetControl( const OUString& rControlName, sal_Int16* _pId, PropFlags* _pPropertyMask ) const
{
- Control* pControl = nullptr;
+ weld::Widget* pControl = nullptr;
ControlDescription tmpDesc;
- OString aControlName = OUStringToOString( _rControlName, RTL_TEXTENCODING_UTF8 );
+ OString aControlName = OUStringToOString( rControlName, RTL_TEXTENCODING_UTF8 );
tmpDesc.pControlName = aControlName.getStr();
// translate the name into an id
@@ -259,24 +262,22 @@ namespace svt
return pControl;
}
-
- void OControlAccess::setControlProperty( const OUString& _rControlName, const OUString& _rControlProperty, const css::uno::Any& _rValue )
+ void OControlAccess::setControlProperty( const OUString& rControlName, const OUString& rControlProperty, const css::uno::Any& rValue )
{
// look up the control
sal_Int16 nControlId = -1;
- Control* pControl = implGetControl( _rControlName, &nControlId );
+ weld::Widget* pControl = implGetControl( rControlName, &nControlId );
// will throw an IllegalArgumentException if the name is not valid
// look up the property
- ControlPropertyIterator aPropDesc = ::std::find_if( s_pProperties, s_pPropertiesEnd, ControlPropertyLookup( _rControlProperty ) );
+ ControlPropertyIterator aPropDesc = ::std::find_if( s_pProperties, s_pPropertiesEnd, ControlPropertyLookup( rControlProperty ) );
if ( aPropDesc == s_pPropertiesEnd )
lcl_throwIllegalArgumentException();
// set the property
- implSetControlProperty( nControlId, pControl, aPropDesc->nPropertyId, _rValue, false );
+ implSetControlProperty( nControlId, pControl, aPropDesc->nPropertyId, rValue, false );
}
-
Sequence< OUString > OControlAccess::getSupportedControls( ) const
{
Sequence< OUString > aControls( s_nControlCount );
@@ -293,12 +294,11 @@ namespace svt
return aControls;
}
-
- Sequence< OUString > OControlAccess::getSupportedControlProperties( const OUString& _rControlName )
+ Sequence< OUString > OControlAccess::getSupportedControlProperties( const OUString& rControlName )
{
sal_Int16 nControlId = -1;
PropFlags nPropertyMask = PropFlags::NONE;
- implGetControl( _rControlName, &nControlId, &nPropertyMask );
+ implGetControl( rControlName, &nControlId, &nPropertyMask );
// will throw an IllegalArgumentException if the name is not valid
// fill in the property names
@@ -313,26 +313,24 @@ namespace svt
return aProps;
}
-
- bool OControlAccess::isControlSupported( const OUString& _rControlName )
+ bool OControlAccess::isControlSupported( const OUString& rControlName )
{
ControlDescription tmpDesc;
- OString aControlName = OUStringToOString(_rControlName, RTL_TEXTENCODING_UTF8);
+ OString aControlName = OUStringToOString(rControlName, RTL_TEXTENCODING_UTF8);
tmpDesc.pControlName = aControlName.getStr();
return ::std::binary_search( s_pControls, s_pControlsEnd, tmpDesc, ControlDescriptionLookup() );
}
-
- bool OControlAccess::isControlPropertySupported( const OUString& _rControlName, const OUString& _rControlProperty )
+ bool OControlAccess::isControlPropertySupported( const OUString& rControlName, const OUString& rControlProperty )
{
// look up the control
sal_Int16 nControlId = -1;
PropFlags nPropertyMask = PropFlags::NONE;
- implGetControl( _rControlName, &nControlId, &nPropertyMask );
+ implGetControl( rControlName, &nControlId, &nPropertyMask );
// will throw an IllegalArgumentException if the name is not valid
// look up the property
- ControlPropertyIterator aPropDesc = ::std::find_if( s_pProperties, s_pPropertiesEnd, ControlPropertyLookup( _rControlProperty ) );
+ ControlPropertyIterator aPropDesc = ::std::find_if( s_pProperties, s_pPropertiesEnd, ControlPropertyLookup( rControlProperty ) );
if ( aPropDesc == s_pPropertiesEnd )
// it's a property which is completely unknown
return false;
@@ -340,21 +338,20 @@ namespace svt
return bool( aPropDesc->nPropertyId & nPropertyMask );
}
-
- void OControlAccess::setValue( sal_Int16 _nControlId, sal_Int16 _nControlAction, const Any& _rValue )
+ void OControlAccess::setValue( sal_Int16 nControlId, sal_Int16 nControlAction, const Any& rValue )
{
- Control* pControl = m_pFilePickerController->getControl( _nControlId );
+ weld::Widget* pControl = m_pFilePickerController->getControl( nControlId );
DBG_ASSERT( pControl, "OControlAccess::SetValue: don't have this control in the current mode!" );
if ( pControl )
{
PropFlags nPropertyId = PropFlags::Unknown;
- if ( ControlActions::SET_HELP_URL == _nControlAction )
+ if ( ControlActions::SET_HELP_URL == nControlAction )
{
nPropertyId = PropFlags::HelpUrl;
}
else
{
- switch ( _nControlId )
+ switch ( nControlId )
{
case CHECKBOX_AUTOEXTENSION:
case CHECKBOX_PASSWORD:
@@ -374,41 +371,41 @@ namespace svt
case LISTBOX_TEMPLATE:
case LISTBOX_IMAGE_TEMPLATE:
case LISTBOX_IMAGE_ANCHOR:
- if ( ControlActions::SET_SELECT_ITEM == _nControlAction )
+ if ( ControlActions::SET_SELECT_ITEM == nControlAction )
{
nPropertyId = PropFlags::SelectedItemIndex;
}
else
{
- DBG_ASSERT( WindowType::LISTBOX == pControl->GetType(), "OControlAccess::SetValue: implGetControl returned nonsense!" );
- implDoListboxAction( static_cast< ListBox* >( pControl ), _nControlAction, _rValue );
+ weld::ComboBox* pComboBox = dynamic_cast<weld::ComboBox*>(pControl);
+ assert(pComboBox && "OControlAccess::SetValue: implGetControl returned nonsense!");
+ implDoListboxAction(pComboBox, nControlAction, rValue);
}
break;
}
}
if ( PropFlags::Unknown != nPropertyId )
- implSetControlProperty( _nControlId, pControl, nPropertyId, _rValue );
+ implSetControlProperty( nControlId, pControl, nPropertyId, rValue );
}
}
-
- Any OControlAccess::getValue( sal_Int16 _nControlId, sal_Int16 _nControlAction ) const
+ Any OControlAccess::getValue( sal_Int16 nControlId, sal_Int16 nControlAction ) const
{
Any aRet;
- Control* pControl = m_pFilePickerController->getControl( _nControlId );
+ weld::Widget* pControl = m_pFilePickerController->getControl( nControlId );
DBG_ASSERT( pControl, "OControlAccess::GetValue: don't have this control in the current mode!" );
if ( pControl )
{
PropFlags nPropertyId = PropFlags::Unknown;
- if ( ControlActions::SET_HELP_URL == _nControlAction )
+ if ( ControlActions::SET_HELP_URL == nControlAction )
{
nPropertyId = PropFlags::HelpUrl;
}
else
{
- switch ( _nControlId )
+ switch ( nControlId )
{
case CHECKBOX_AUTOEXTENSION:
case CHECKBOX_PASSWORD:
@@ -422,7 +419,7 @@ namespace svt
break;
case LISTBOX_FILTER:
- if ( ControlActions::GET_SELECTED_ITEM == _nControlAction )
+ if ( ControlActions::GET_SELECTED_ITEM == nControlAction )
{
aRet <<= m_pFilePickerController->getCurFilter();
}
@@ -436,7 +433,7 @@ namespace svt
case LISTBOX_TEMPLATE:
case LISTBOX_IMAGE_TEMPLATE:
case LISTBOX_IMAGE_ANCHOR:
- switch ( _nControlAction )
+ switch ( nControlAction )
{
case ControlActions::GET_SELECTED_ITEM:
nPropertyId = PropFlags::SelectedItem;
@@ -462,57 +459,47 @@ namespace svt
return aRet;
}
-
void OControlAccess::setLabel( sal_Int16 nId, const OUString &rLabel )
{
- Control* pControl = m_pFilePickerController->getControl( nId, true );
- DBG_ASSERT( pControl, "OControlAccess::GetValue: don't have this control in the current mode!" );
- if ( pControl )
- pControl->SetText( rLabel );
+ weld::Label* pControl = dynamic_cast<weld::Label*>(m_pFilePickerController->getControl(nId, true));
+ assert(pControl && "OControlAccess::GetValue: don't have this control in the current mode!");
+ pControl->set_label(rLabel);
}
-
OUString OControlAccess::getLabel( sal_Int16 nId ) const
{
- OUString sLabel;
-
- Control* pControl = m_pFilePickerController->getControl( nId, true );
- DBG_ASSERT( pControl, "OControlAccess::GetValue: don't have this control in the current mode!" );
- if ( pControl )
- sLabel = pControl->GetText();
-
- return sLabel;
+ weld::Label* pControl = dynamic_cast<weld::Label*>(m_pFilePickerController->getControl(nId, true));
+ assert(pControl && "OControlAccess::GetValue: don't have this control in the current mode!");
+ return pControl->get_label();
}
-
- void OControlAccess::enableControl( sal_Int16 _nId, bool _bEnable )
+ void OControlAccess::enableControl(sal_Int16 nId, bool bEnable)
{
- m_pFilePickerController->enableControl( _nId, _bEnable );
+ m_pFilePickerController->enableControl(nId, bEnable);
}
-
- void OControlAccess::implDoListboxAction( ListBox* _pListbox, sal_Int16 _nControlAction, const Any& _rValue )
+ void OControlAccess::implDoListboxAction(weld::ComboBox* pListbox, sal_Int16 nControlAction, const Any& rValue)
{
- switch ( _nControlAction )
+ switch ( nControlAction )
{
case ControlActions::ADD_ITEM:
{
OUString aEntry;
- _rValue >>= aEntry;
+ rValue >>= aEntry;
if ( !aEntry.isEmpty() )
- _pListbox->InsertEntry( aEntry );
+ pListbox->append_text( aEntry );
}
break;
case ControlActions::ADD_ITEMS:
{
Sequence < OUString > aTemplateList;
- _rValue >>= aTemplateList;
+ rValue >>= aTemplateList;
if ( aTemplateList.hasElements() )
{
for ( long i=0; i < aTemplateList.getLength(); i++ )
- _pListbox->InsertEntry( aTemplateList[i] );
+ pListbox->append_text( aTemplateList[i] );
}
}
break;
@@ -520,13 +507,13 @@ namespace svt
case ControlActions::DELETE_ITEM:
{
sal_Int32 nPos = 0;
- if ( _rValue >>= nPos )
- _pListbox->RemoveEntry( nPos );
+ if ( rValue >>= nPos )
+ pListbox->remove( nPos );
}
break;
case ControlActions::DELETE_ITEMS:
- _pListbox->Clear();
+ pListbox->clear();
break;
default:
@@ -534,16 +521,15 @@ namespace svt
}
}
-
- void OControlAccess::implSetControlProperty( sal_Int16 _nControlId, Control* _pControl, PropFlags _nProperty, const Any& _rValue, bool _bIgnoreIllegalArgument )
+ void OControlAccess::implSetControlProperty( sal_Int16 nControlId, weld::Widget* pControl, PropFlags _nProperty, const Any& rValue, bool _bIgnoreIllegalArgument )
{
- if ( !_pControl )
- _pControl = m_pFilePickerController->getControl( _nControlId );
- DBG_ASSERT( _pControl, "OControlAccess::implSetControlProperty: invalid argument, this will crash!" );
- if ( !_pControl )
+ if ( !pControl )
+ pControl = m_pFilePickerController->getControl( nControlId );
+ DBG_ASSERT( pControl, "OControlAccess::implSetControlProperty: invalid argument, this will crash!" );
+ if ( !pControl )
return;
- DBG_ASSERT( _pControl == m_pFilePickerController->getControl( _nControlId ),
+ DBG_ASSERT( pControl == m_pFilePickerController->getControl( nControlId ),
"OControlAccess::implSetControlProperty: inconsistent parameters!" );
switch ( _nProperty )
@@ -551,9 +537,11 @@ namespace svt
case PropFlags::Text:
{
OUString sText;
- if ( _rValue >>= sText )
+ if (rValue >>= sText)
{
- _pControl->SetText( sText );
+ weld::Label* pLabel = dynamic_cast<weld::Label*>(pControl);
+ assert(pLabel);
+ pLabel->set_label(sText);
}
else if ( !_bIgnoreIllegalArgument )
{
@@ -565,9 +553,9 @@ namespace svt
case PropFlags::Enabled:
{
bool bEnabled = false;
- if ( _rValue >>= bEnabled )
+ if ( rValue >>= bEnabled )
{
- m_pFilePickerController->enableControl( _nControlId, bEnabled );
+ m_pFilePickerController->enableControl( nControlId, bEnabled );
}
else if ( !_bIgnoreIllegalArgument )
{
@@ -579,9 +567,9 @@ namespace svt
case PropFlags::Visible:
{
bool bVisible = false;
- if ( _rValue >>= bVisible )
+ if ( rValue >>= bVisible )
{
- _pControl->Show( bVisible );
+ pControl->set_visible( bVisible );
}
else if ( !_bIgnoreIllegalArgument )
{
@@ -593,9 +581,9 @@ namespace svt
case PropFlags::HelpUrl:
{
OUString sHelpURL;
- if ( _rValue >>= sHelpURL )
+ if ( rValue >>= sHelpURL )
{
- setHelpURL( _pControl, sHelpURL, m_pFileView == _pControl );
+ setHelpURL(pControl, sHelpURL);
}
else if ( !_bIgnoreIllegalArgument )
{
@@ -606,19 +594,19 @@ namespace svt
case PropFlags::ListItems:
{
- DBG_ASSERT( WindowType::LISTBOX == _pControl->GetType(),
- "OControlAccess::implSetControlProperty: invalid control/property combination!" );
+ weld::ComboBox* pComboBox = dynamic_cast<weld::ComboBox*>(pControl);
+ assert(pComboBox && "OControlAccess::implSetControlProperty: invalid control/property combination!");
Sequence< OUString > aItems;
- if ( _rValue >>= aItems )
+ if ( rValue >>= aItems )
{
// remove all previous items
- static_cast< ListBox* >( _pControl )->Clear();
+ pComboBox->clear();
// add the new ones
- for ( auto const & item : std::as_const(aItems) )
+ for (auto const & item : std::as_const(aItems))
{
- static_cast< ListBox* >( _pControl )->InsertEntry( item );
+ pComboBox->append_text(item);
}
}
@@ -631,13 +619,13 @@ namespace svt
case PropFlags::SelectedItem:
{
- DBG_ASSERT( WindowType::LISTBOX == _pControl->GetType(),
- "OControlAccess::implSetControlProperty: invalid control/property combination!" );
+ weld::ComboBox* pComboBox = dynamic_cast<weld::ComboBox*>(pControl);
+ assert(pComboBox && "OControlAccess::implSetControlProperty: invalid control/property combination!");
OUString sSelected;
- if ( _rValue >>= sSelected )
+ if ( rValue >>= sSelected )
{
- static_cast< ListBox* >( _pControl )->SelectEntry( sSelected );
+ pComboBox->set_active_text(sSelected);
}
else if ( !_bIgnoreIllegalArgument )
{
@@ -648,13 +636,13 @@ namespace svt
case PropFlags::SelectedItemIndex:
{
- DBG_ASSERT( WindowType::LISTBOX == _pControl->GetType(),
- "OControlAccess::implSetControlProperty: invalid control/property combination!" );
+ weld::ComboBox* pComboBox = dynamic_cast<weld::ComboBox*>(pControl);
+ assert(pComboBox && "OControlAccess::implSetControlProperty: invalid control/property combination!");
sal_Int32 nPos = 0;
- if ( _rValue >>= nPos )
+ if ( rValue >>= nPos )
{
- static_cast< ListBox* >( _pControl )->SelectEntryPos( nPos );
+ pComboBox->set_active(nPos);
}
else if ( !_bIgnoreIllegalArgument )
{
@@ -665,13 +653,13 @@ namespace svt
case PropFlags::Checked:
{
- DBG_ASSERT( WindowType::CHECKBOX == _pControl->GetType(),
- "OControlAccess::implSetControlProperty: invalid control/property combination!" );
+ weld::ToggleButton* pToggleButton = dynamic_cast<weld::ToggleButton*>(pControl);
+ assert(pToggleButton && "OControlAccess::implSetControlProperty: invalid control/property combination!");
bool bChecked = false;
- if ( _rValue >>= bChecked )
+ if ( rValue >>= bChecked )
{
- static_cast< CheckBox* >( _pControl )->Check( bChecked );
+ pToggleButton->set_active(bChecked);
}
else if ( !_bIgnoreIllegalArgument )
{
@@ -685,76 +673,80 @@ namespace svt
}
}
-
- Any OControlAccess::implGetControlProperty( Control const * _pControl, PropFlags _nProperty ) const
+ Any OControlAccess::implGetControlProperty( weld::Widget const * pControl, PropFlags _nProperty ) const
{
- DBG_ASSERT( _pControl, "OControlAccess::implGetControlProperty: invalid argument, this will crash!" );
+ assert(pControl && "OControlAccess::implGetControlProperty: invalid argument, this will crash!");
Any aReturn;
switch ( _nProperty )
{
case PropFlags::Text:
- aReturn <<= _pControl->GetText();
+ {
+ const weld::Label* pLabel = dynamic_cast<const weld::Label*>(pControl);
+ assert(pLabel);
+ aReturn <<= pLabel->get_label();
break;
-
+ }
case PropFlags::Enabled:
- aReturn <<= _pControl->IsEnabled();
+ aReturn <<= pControl->get_sensitive();
break;
case PropFlags::Visible:
- aReturn <<= _pControl->IsVisible();
+ aReturn <<= pControl->get_visible();
break;
case PropFlags::HelpUrl:
- aReturn <<= getHelpURL( _pControl, m_pFileView == _pControl );
+ aReturn <<= getHelpURL(pControl);
break;
case PropFlags::ListItems:
{
- DBG_ASSERT( WindowType::LISTBOX == _pControl->GetType(),
- "OControlAccess::implGetControlProperty: invalid control/property combination!" );
+ const weld::ComboBox* pComboBox = dynamic_cast<const weld::ComboBox*>(pControl);
+ assert(pComboBox && "OControlAccess::implGetControlProperty: invalid control/property combination!");
- Sequence< OUString > aItems( static_cast< ListBox const * >( _pControl )->GetEntryCount() );
+ Sequence< OUString > aItems(pComboBox->get_count());
OUString* pItems = aItems.getArray();
- for ( sal_Int32 i=0; i<static_cast< ListBox const * >( _pControl )->GetEntryCount(); ++i )
- *pItems++ = static_cast< ListBox const * >( _pControl )->GetEntry( i );
+ for (sal_Int32 i = 0; i < pComboBox->get_count(); ++i)
+ *pItems++ = pComboBox->get_text(i);
aReturn <<= aItems;
+ break;
}
- break;
case PropFlags::SelectedItem:
{
- DBG_ASSERT( WindowType::LISTBOX == _pControl->GetType(),
- "OControlAccess::implGetControlProperty: invalid control/property combination!" );
+ const weld::ComboBox* pComboBox = dynamic_cast<const weld::ComboBox*>(pControl);
+ assert(pComboBox && "OControlAccess::implGetControlProperty: invalid control/property combination!");
- sal_Int32 nSelected = static_cast< ListBox const * >( _pControl )->GetSelectedEntryPos();
+ sal_Int32 nSelected = pComboBox->get_active();
OUString sSelected;
- if ( LISTBOX_ENTRY_NOTFOUND != nSelected )
- sSelected = static_cast< ListBox const * >( _pControl )->GetSelectedEntry();
+ if (nSelected != -1)
+ sSelected = pComboBox->get_active_text();
aReturn <<= sSelected;
+ break;
}
- break;
case PropFlags::SelectedItemIndex:
{
- DBG_ASSERT( WindowType::LISTBOX == _pControl->GetType(),
- "OControlAccess::implGetControlProperty: invalid control/property combination!" );
+ const weld::ComboBox* pComboBox = dynamic_cast<const weld::ComboBox*>(pControl);
+ assert(pComboBox && "OControlAccess::implGetControlProperty: invalid control/property combination!");
- sal_Int32 nSelected = static_cast< ListBox const * >( _pControl )->GetSelectedEntryPos();
- if ( LISTBOX_ENTRY_NOTFOUND != nSelected )
- aReturn <<= static_cast< ListBox const * >( _pControl )->GetSelectedEntryPos();
+ sal_Int32 nSelected = pComboBox->get_active();
+ if (nSelected != -1)
+ aReturn <<= nSelected;
else
aReturn <<= sal_Int32(-1);
+ break;
}
- break;
case PropFlags::Checked:
- DBG_ASSERT( WindowType::CHECKBOX == _pControl->GetType(),
- "OControlAccess::implGetControlProperty: invalid control/property combination!" );
+ {
+ const weld::ToggleButton* pToggleButton = dynamic_cast<const weld::ToggleButton*>(pControl);
+ assert(pToggleButton && "OControlAccess::implGetControlProperty: invalid control/property combination!");
- aReturn <<= static_cast< CheckBox const * >( _pControl )->IsChecked( );
+ aReturn <<= pToggleButton->get_active();
break;
+ }
default:
OSL_FAIL( "OControlAccess::implGetControlProperty: invalid property id!" );
@@ -762,8 +754,6 @@ namespace svt
return aReturn;
}
-
} // namespace svt
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/office/OfficeControlAccess.hxx b/fpicker/source/office/OfficeControlAccess.hxx
index 0f857cb08f78..e66baae3d37c 100644
--- a/fpicker/source/office/OfficeControlAccess.hxx
+++ b/fpicker/source/office/OfficeControlAccess.hxx
@@ -25,7 +25,6 @@
#include "pickercallbacks.hxx"
#include <o3tl/typed_flags_set.hxx>
-
enum class PropFlags {
Unknown = -1, // used as an error sentinel
NONE = 0x0000,
@@ -62,66 +61,68 @@ namespace svt
class OControlAccess
{
IFilePickerController* m_pFilePickerController;
- VclPtr<SvtFileView> m_pFileView;
+ SvtFileView* m_pFileView;
public:
- OControlAccess( IFilePickerController* _pController, SvtFileView* _pFileView );
+ OControlAccess( IFilePickerController* pController, SvtFileView* pFileView );
// XControlAccess implementation
- void setControlProperty( const OUString& _rControlName, const OUString& _rControlProperty, const css::uno::Any& _rValue );
- css::uno::Any getControlProperty( const OUString& _rControlName, const OUString& _rControlProperty );
+ void setControlProperty( const OUString& rControlName, const OUString& rControlProperty, const css::uno::Any& rValue );
+ css::uno::Any getControlProperty( const OUString& rControlName, const OUString& rControlProperty );
// XControlInformation implementation
css::uno::Sequence< OUString > getSupportedControls( ) const;
- css::uno::Sequence< OUString > getSupportedControlProperties( const OUString& _rControlName );
- static bool isControlSupported( const OUString& _rControlName );
- bool isControlPropertySupported( const OUString& _rControlName, const OUString& _rControlProperty );
+ css::uno::Sequence< OUString > getSupportedControlProperties( const OUString& rControlName );
+ static bool isControlSupported( const OUString& rControlName );
+ bool isControlPropertySupported( const OUString& rControlName, const OUString& rControlProperty );
// XFilePickerControlAccess
- void setValue( sal_Int16 _nId, sal_Int16 _nCtrlAction, const css::uno::Any& _rValue );
- css::uno::Any getValue( sal_Int16 _nId, sal_Int16 _nCtrlAction ) const;
- void setLabel( sal_Int16 _nId, const OUString& _rValue );
- OUString getLabel( sal_Int16 _nId ) const;
- void enableControl( sal_Int16 _nId, bool _bEnable );
+ void setValue( sal_Int16 nId, sal_Int16 nCtrlAction, const css::uno::Any& rValue );
+ css::uno::Any getValue( sal_Int16 nId, sal_Int16 nCtrlAction ) const;
+ void setLabel( sal_Int16 nId, const OUString& rValue );
+ OUString getLabel( sal_Int16 nId ) const;
+ void enableControl( sal_Int16 nId, bool bEnable );
- static void setHelpURL( vcl::Window* _pControl, const OUString& _rURL, bool _bFileView );
- static OUString getHelpURL( vcl::Window const * _pControl, bool _bFileView );
+ void setHelpURL(weld::Widget* pControl, const OUString& rURL);
+ OUString getHelpURL(weld::Widget const* pControl) const;
private:
/** implements the various methods for setting properties on controls
- @param _nControlId
+ @param nControlId
the id of the control
- @param _pControl
- the affected control. Must be the same as referred by <arg>_nControlId</arg>, or NULL.
- @param _nProperty
+ @param pControl
+ the affected control. Must be the same as referred by <arg>nControlId</arg>, or NULL.
+ @param nProperty
the property to set
See PropFlags::*
- @param _rValue
+ @param rValue
the value to set
- @param _bIgnoreIllegalArgument
+ @param bIgnoreIllegalArgument
if <FALSE/>, an exception will be thrown if the given value is of improper type
*/
void implSetControlProperty(
- sal_Int16 _nControlId,
- Control* _pControl, PropFlags _nProperty, const css::uno::Any& _rValue,
- bool _bIgnoreIllegalArgument = true );
+ sal_Int16 nControlId,
+ weld::Widget* pControl, PropFlags nProperty, const css::uno::Any& rValue,
+ bool bIgnoreIllegalArgument = true );
- Control* implGetControl( const OUString& _rControlName, sal_Int16* _pId, PropFlags* _pPropertyMask = nullptr ) const;
+ weld::Widget* implGetControl( const OUString& rControlName, sal_Int16* pId, PropFlags* pPropertyMask = nullptr ) const;
/** implements the various methods for retrieving properties from controls
- @param _pControl
+ @param pControl
the affected control
@PRECOND not <NULL/>
- @param _nProperty
+ @param nProperty
the property to retrieve
See PropFlags::*
@return
*/
- css::uno::Any implGetControlProperty( Control const * _pControl, PropFlags _nProperty ) const;
+ css::uno::Any implGetControlProperty( weld::Widget const * pControl, PropFlags nProperty ) const;
+
+ bool IsFileViewWidget(weld::Widget const * pControl) const;
- static void implDoListboxAction( ListBox* _pListbox, sal_Int16 _nCtrlAction, const css::uno::Any& _rValue );
+ static void implDoListboxAction(weld::ComboBox* pListbox, sal_Int16 nCtrlAction, const css::uno::Any& rValue);
};
diff --git a/fpicker/source/office/OfficeFilePicker.cxx b/fpicker/source/office/OfficeFilePicker.cxx
index ab5d0e3b435e..db7ac9d2bd60 100644
--- a/fpicker/source/office/OfficeFilePicker.cxx
+++ b/fpicker/source/office/OfficeFilePicker.cxx
@@ -149,28 +149,28 @@ void SvtFilePicker::prepareExecute()
if ( !m_aDefaultName.isEmpty() )
{
aPath.insertName( m_aDefaultName );
- getDialog()->SetHasFilename( true );
+ m_xDlg->SetHasFilename( true );
}
- getDialog()->SetPath( aPath.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
+ m_xDlg->SetPath( aPath.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
isFileSet = true;
}
if ( !isFileSet && !m_aDefaultName.isEmpty() )
{
- getDialog()->SetPath( m_aDefaultName );
- getDialog()->SetHasFilename( true );
+ m_xDlg->SetPath( m_aDefaultName );
+ m_xDlg->SetHasFilename( true );
}
}
else
{
// set the default standard dir
INetURLObject aStdDirObj( SvtPathOptions().GetWorkPath() );
- getDialog()->SetPath( aStdDirObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
+ m_xDlg->SetPath( aStdDirObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
}
// set the control values and set the control labels, too
if ( m_pElemList && !m_pElemList->empty() )
{
- ::svt::OControlAccess aAccess( getDialog(), getDialog()->GetView() );
+ ::svt::OControlAccess aAccess( m_xDlg.get(), m_xDlg->GetView() );
for (auto const& elem : *m_pElemList)
{
@@ -193,17 +193,19 @@ void SvtFilePicker::prepareExecute()
UnoFilterList aSubFilters;
elem.getSubFilters( aSubFilters );
- getDialog()->AddFilterGroup( elem.getTitle(), aSubFilters );
- }
+ m_xDlg->AddFilterGroup( elem.getTitle(), aSubFilters );
+ }
else
+ {
// it's a single filter
- getDialog()->AddFilter( elem.getTitle(), elem.getFilter() );
+ m_xDlg->AddFilter( elem.getTitle(), elem.getFilter() );
+ }
}
}
// set the default filter
if ( !m_aCurrentFilter.isEmpty() )
- getDialog()->SetCurFilter( m_aCurrentFilter );
+ m_xDlg->SetCurFilter( m_aCurrentFilter );
}
@@ -413,30 +415,28 @@ SvtFilePicker::~SvtFilePicker()
{
}
-
sal_Int16 SvtFilePicker::implExecutePicker( )
{
- getDialog()->SetFileCallback( this );
+ m_xDlg->SetFileCallback( this );
prepareExecute();
- getDialog()->EnableAutocompletion();
+ m_xDlg->EnableAutocompletion();
// now we are ready to execute the dialog
- sal_Int16 nRet = getDialog()->Execute();
+ sal_Int16 nRet = m_xDlg->run();
// the execution of the dialog yields, so it is possible the at this point the window or the dialog is closed
- if ( getDialog() )
- getDialog()->SetFileCallback( nullptr );
+ if (m_xDlg)
+ m_xDlg->SetFileCallback( nullptr );
return nRet;
}
-
-VclPtr<SvtFileDialog_Base> SvtFilePicker::implCreateDialog( vcl::Window* _pParent )
+std::unique_ptr<SvtFileDialog_Base> SvtFilePicker::implCreateDialog( weld::Window* pParent )
{
PickerFlags nBits = getPickerFlags();
- VclPtrInstance<SvtFileDialog> dialog( _pParent, nBits );
+ auto dialog = std::make_unique<SvtFileDialog>(pParent, nBits);
// Set StandardDir if present
if ( !m_aStandardDir.isEmpty())
@@ -475,38 +475,31 @@ void SAL_CALL SvtFilePicker::setTitle( const OUString& _rTitle )
OCommonPicker::setTitle( _rTitle );
}
-
sal_Int16 SAL_CALL SvtFilePicker::execute( )
{
return OCommonPicker::execute();
}
-
// XAsynchronousExecutableDialog functions
-
-
void SAL_CALL SvtFilePicker::setDialogTitle( const OUString& _rTitle )
{
setTitle( _rTitle );
}
-
void SAL_CALL SvtFilePicker::startExecuteModal( const Reference< css::ui::dialogs::XDialogClosedListener >& xListener )
{
m_xDlgClosedListener = xListener;
prepareDialog();
prepareExecute();
- SvtFileDialog_Base* pDialog = getDialog();
- pDialog->EnableAutocompletion();
- pDialog->StartExecuteAsync([this](sal_Int32 nResult){
+ m_xDlg->EnableAutocompletion();
+ if (!m_xDlg->PrepareExecute())
+ return;
+ weld::DialogController::runAsync(m_xDlg, [this](sal_Int32 nResult){
DialogClosedHdl(nResult);
});
}
-
// XFilePicker functions
-
-
void SAL_CALL SvtFilePicker::setMultiSelectionMode( sal_Bool bMode )
{
checkAlive();
@@ -536,15 +529,15 @@ OUString SAL_CALL SvtFilePicker::getDisplayDirectory()
checkAlive();
SolarMutexGuard aGuard;
- if ( getDialog() )
+ if (m_xDlg)
{
- OUString aPath = getDialog()->GetPath();
+ OUString aPath = m_xDlg->GetPath();
if( m_aOldHideDirectory == aPath )
return m_aOldDisplayDirectory;
m_aOldHideDirectory = aPath;
- if( !getDialog()->ContentIsFolder( aPath ) )
+ if( !m_xDlg->ContentIsFolder( aPath ) )
{
INetURLObject aFolder( aPath );
aFolder.CutLastName();
@@ -562,13 +555,13 @@ Sequence< OUString > SAL_CALL SvtFilePicker::getSelectedFiles()
checkAlive();
SolarMutexGuard aGuard;
- if ( ! getDialog() )
+ if (!m_xDlg)
{
Sequence< OUString > aEmpty;
return aEmpty;
}
- return comphelper::containerToSequence(getDialog()->GetPathList());
+ return comphelper::containerToSequence(m_xDlg->GetPathList());
}
Sequence< OUString > SAL_CALL SvtFilePicker::getFiles()
@@ -590,9 +583,9 @@ void SAL_CALL SvtFilePicker::setValue( sal_Int16 nElementID,
checkAlive();
SolarMutexGuard aGuard;
- if ( getDialog() )
+ if (m_xDlg)
{
- ::svt::OControlAccess aAccess( getDialog(), getDialog()->GetView() );
+ ::svt::OControlAccess aAccess( m_xDlg.get(), m_xDlg->GetView() );
aAccess.setValue( nElementID, nControlAction, rValue );
}
else
@@ -632,9 +625,9 @@ Any SAL_CALL SvtFilePicker::getValue( sal_Int16 nElementID, sal_Int16 nControlAc
Any aAny;
// execute() called?
- if ( getDialog() )
+ if (m_xDlg)
{
- ::svt::OControlAccess aAccess( getDialog(), getDialog()->GetView() );
+ ::svt::OControlAccess aAccess( m_xDlg.get(), m_xDlg->GetView() );
aAny = aAccess.getValue( nElementID, nControlAction );
}
else if ( m_pElemList )
@@ -660,9 +653,9 @@ void SAL_CALL SvtFilePicker::setLabel( sal_Int16 nLabelID, const OUString& rValu
checkAlive();
SolarMutexGuard aGuard;
- if ( getDialog() )
+ if (m_xDlg)
{
- ::svt::OControlAccess aAccess( getDialog(), getDialog()->GetView() );
+ ::svt::OControlAccess aAccess( m_xDlg.get(), m_xDlg->GetView() );
aAccess.setLabel( nLabelID, rValue );
}
else
@@ -698,9 +691,9 @@ OUString SAL_CALL SvtFilePicker::getLabel( sal_Int16 nLabelID )
SolarMutexGuard aGuard;
OUString aLabel;
- if ( getDialog() )
+ if (m_xDlg)
{
- ::svt::OControlAccess aAccess( getDialog(), getDialog()->GetView() );
+ ::svt::OControlAccess aAccess(m_xDlg.get(), m_xDlg->GetView());
aLabel = aAccess.getLabel( nLabelID );
}
else if ( m_pElemList )
@@ -725,9 +718,9 @@ void SAL_CALL SvtFilePicker::enableControl( sal_Int16 nElementID, sal_Bool bEnab
checkAlive();
SolarMutexGuard aGuard;
- if ( getDialog() )
+ if (m_xDlg)
{
- ::svt::OControlAccess aAccess( getDialog(), getDialog()->GetView() );
+ ::svt::OControlAccess aAccess(m_xDlg.get(), m_xDlg->GetView());
aAccess.enableControl( nElementID, bEnable );
}
else
@@ -776,10 +769,7 @@ void SAL_CALL SvtFilePicker::removeFilePickerListener( const Reference< XFilePic
m_xListener.clear();
}
-
// XFilePreview functions
-
-
Sequence< sal_Int16 > SAL_CALL SvtFilePicker::getSupportedImageFormats()
{
checkAlive();
@@ -792,21 +782,11 @@ Sequence< sal_Int16 > SAL_CALL SvtFilePicker::getSupportedImageFormats()
return aFormats;
}
-
sal_Int32 SAL_CALL SvtFilePicker::getTargetColorDepth()
{
- checkAlive();
-
- SolarMutexGuard aGuard;
- sal_Int32 nDepth = 0;
-
- if ( getDialog() )
- nDepth = getDialog()->getTargetColorDepth();
-
- return nDepth;
+ return 0;
}
-
sal_Int32 SAL_CALL SvtFilePicker::getAvailableWidth()
{
checkAlive();
@@ -814,13 +794,12 @@ sal_Int32 SAL_CALL SvtFilePicker::getAvailableWidth()
SolarMutexGuard aGuard;
sal_Int32 nWidth = 0;
- if ( getDialog() )
- nWidth = getDialog()->getAvailableWidth();
+ if (m_xDlg)
+ nWidth = m_xDlg->getAvailableWidth();
return nWidth;
}
-
sal_Int32 SAL_CALL SvtFilePicker::getAvailableHeight()
{
checkAlive();
@@ -828,23 +807,21 @@ sal_Int32 SAL_CALL SvtFilePicker::getAvailableHeight()
SolarMutexGuard aGuard;
sal_Int32 nHeight = 0;
- if ( getDialog() )
- nHeight = getDialog()->getAvailableHeight();
+ if (m_xDlg)
+ nHeight = m_xDlg->getAvailableHeight();
return nHeight;
}
-
-void SAL_CALL SvtFilePicker::setImage( sal_Int16 /*aImageFormat*/, const Any& rImage )
+void SAL_CALL SvtFilePicker::setImage(sal_Int16 /*aImageFormat*/, const Any& rImage)
{
checkAlive();
SolarMutexGuard aGuard;
- if ( getDialog() )
- getDialog()->setImage( rImage );
+ if (m_xDlg)
+ m_xDlg->setImage(rImage);
}
-
sal_Bool SAL_CALL SvtFilePicker::setShowState( sal_Bool )
{
checkAlive();
@@ -852,7 +829,7 @@ sal_Bool SAL_CALL SvtFilePicker::setShowState( sal_Bool )
SolarMutexGuard aGuard;
bool bRet = false;
- if ( getDialog() )
+ if (m_xDlg)
{
// #97633 for the system filedialog it's
// useful to make the preview switchable
@@ -880,8 +857,8 @@ sal_Bool SAL_CALL SvtFilePicker::getShowState()
SolarMutexGuard aGuard;
bool bRet = false;
- if ( getDialog() )
- bRet = getDialog()->getShowState();
+ if (m_xDlg)
+ bRet = m_xDlg->getShowState();
return bRet;
}
@@ -946,8 +923,8 @@ void SAL_CALL SvtFilePicker::setCurrentFilter( const OUString& aTitle )
m_aCurrentFilter = aTitle;
- if ( getDialog() )
- getDialog()->SetCurFilter( aTitle );
+ if (m_xDlg)
+ m_xDlg->SetCurFilter( aTitle );
}
@@ -956,7 +933,7 @@ OUString SAL_CALL SvtFilePicker::getCurrentFilter()
checkAlive();
SolarMutexGuard aGuard;
- OUString aFilter = getDialog() ? getDialog()->GetCurFilter() :
+ OUString aFilter = m_xDlg ? m_xDlg->GetCurFilter() :
m_aCurrentFilter;
return aFilter;
}
@@ -1091,11 +1068,11 @@ SvtRemoteFilePicker::SvtRemoteFilePicker()
{
}
-VclPtr<SvtFileDialog_Base> SvtRemoteFilePicker::implCreateDialog( vcl::Window* _pParent )
+std::unique_ptr<SvtFileDialog_Base> SvtRemoteFilePicker::implCreateDialog(weld::Window* pParent)
{
PickerFlags nBits = getPickerFlags();
- VclPtrInstance<RemoteFilesDialog> dialog( _pParent, nBits);
+ auto dialog = std::make_unique<RemoteFilesDialog>(pParent, nBits);
// Set StandardDir if present
if ( !m_aStandardDir.isEmpty())
diff --git a/fpicker/source/office/OfficeFilePicker.hxx b/fpicker/source/office/OfficeFilePicker.hxx
index 678ad35197f4..e682581c5372 100644
--- a/fpicker/source/office/OfficeFilePicker.hxx
+++ b/fpicker/source/office/OfficeFilePicker.hxx
@@ -203,7 +203,7 @@ protected:
// OCommonPicker overridables
- virtual VclPtr<SvtFileDialog_Base> implCreateDialog( vcl::Window* _pParent ) override;
+ virtual std::unique_ptr<SvtFileDialog_Base> implCreateDialog( weld::Window* pParent ) override;
virtual sal_Int16 implExecutePicker( ) override;
virtual bool implHandleInitializationArgument(
const OUString& _rName,
@@ -231,7 +231,7 @@ class SvtRemoteFilePicker : public SvtFilePicker
public:
SvtRemoteFilePicker();
- virtual VclPtr<SvtFileDialog_Base> implCreateDialog( vcl::Window* _pParent ) override;
+ virtual std::unique_ptr<SvtFileDialog_Base> implCreateDialog( weld::Window* pParent ) override;
// disambiguate XInterface
diff --git a/fpicker/source/office/OfficeFolderPicker.cxx b/fpicker/source/office/OfficeFolderPicker.cxx
index 398fbe3a3932..db06eb421c76 100644
--- a/fpicker/source/office/OfficeFolderPicker.cxx
+++ b/fpicker/source/office/OfficeFolderPicker.cxx
@@ -59,16 +59,18 @@ void SAL_CALL SvtFolderPicker::startExecuteModal( const Reference< css::ui::dial
m_xListener = xListener;
prepareDialog();
prepareExecute();
- SvtFileDialog_Base* pDialog = getDialog();
- pDialog->EnableAutocompletion();
- pDialog->StartExecuteAsync([this](sal_Int32 nResult){
+
+ m_xDlg->EnableAutocompletion();
+ if (!m_xDlg->PrepareExecute())
+ return;
+ weld::DialogController::runAsync(m_xDlg, [this](sal_Int32 nResult){
DialogClosedHdl(nResult);
});
}
-VclPtr<SvtFileDialog_Base> SvtFolderPicker::implCreateDialog( vcl::Window* _pParent )
+std::unique_ptr<SvtFileDialog_Base> SvtFolderPicker::implCreateDialog( weld::Window* pParent )
{
- return VclPtr<SvtFileDialog>::Create( _pParent, PickerFlags::PathDialog );
+ return std::make_unique<SvtFileDialog>(pParent, PickerFlags::PathDialog);
}
sal_Int16 SvtFolderPicker::implExecutePicker( )
@@ -76,22 +78,20 @@ sal_Int16 SvtFolderPicker::implExecutePicker( )
prepareExecute();
// now we are ready to execute the dialog
- getDialog()->EnableAutocompletion( false );
- sal_Int16 nRet = getDialog()->Execute();
-
- return nRet;
+ m_xDlg->EnableAutocompletion( false );
+ return m_xDlg->run();
}
void SvtFolderPicker::prepareExecute()
{
// set the default directory
if ( !m_aDisplayDirectory.isEmpty() )
- getDialog()->SetPath( m_aDisplayDirectory );
+ m_xDlg->SetPath( m_aDisplayDirectory );
else
{
// set the default standard dir
INetURLObject aStdDirObj( SvtPathOptions().GetWorkPath() );
- getDialog()->SetPath( aStdDirObj.GetMainURL( INetURLObject::DecodeMechanism::NONE) );
+ m_xDlg->SetPath( aStdDirObj.GetMainURL( INetURLObject::DecodeMechanism::NONE) );
}
}
@@ -113,10 +113,10 @@ void SAL_CALL SvtFolderPicker::setDisplayDirectory( const OUString& aDirectory )
OUString SAL_CALL SvtFolderPicker::getDisplayDirectory()
{
- if ( ! getDialog() )
+ if (!m_xDlg)
return m_aDisplayDirectory;
- std::vector<OUString> aPathList(getDialog()->GetPathList());
+ std::vector<OUString> aPathList(m_xDlg->GetPathList());
if(!aPathList.empty())
return aPathList[0];
@@ -126,10 +126,10 @@ OUString SAL_CALL SvtFolderPicker::getDisplayDirectory()
OUString SAL_CALL SvtFolderPicker::getDirectory()
{
- if ( ! getDialog() )
+ if (!m_xDlg)
return m_aDisplayDirectory;
- std::vector<OUString> aPathList(getDialog()->GetPathList());
+ std::vector<OUString> aPathList(m_xDlg->GetPathList());
if(!aPathList.empty())
return aPathList[0];
diff --git a/fpicker/source/office/OfficeFolderPicker.hxx b/fpicker/source/office/OfficeFolderPicker.hxx
index e4408df314db..a9f3606b1050 100644
--- a/fpicker/source/office/OfficeFolderPicker.hxx
+++ b/fpicker/source/office/OfficeFolderPicker.hxx
@@ -93,7 +93,7 @@ protected:
// OCommonPicker overridables
- virtual VclPtr<SvtFileDialog_Base> implCreateDialog( vcl::Window* _pParent ) override;
+ virtual std::unique_ptr<SvtFileDialog_Base> implCreateDialog( weld::Window* pParent ) override;
virtual sal_Int16 implExecutePicker( ) override;
};
diff --git a/fpicker/source/office/PlacesListBox.cxx b/fpicker/source/office/PlacesListBox.cxx
index da318d6030a5..f500e9a608cc 100644
--- a/fpicker/source/office/PlacesListBox.cxx
+++ b/fpicker/source/office/PlacesListBox.cxx
@@ -14,96 +14,36 @@
#include <vcl/event.hxx>
#include <bitmaps.hlst>
-#define COLUMN_NAME 1
-
-
-PlacesListBox_Impl::PlacesListBox_Impl( PlacesListBox* pParent, const OUString& rTitle ) :
- SvHeaderTabListBox( pParent, WB_TABSTOP | WB_NOINITIALSELECTION ),
- mpHeaderBar( nullptr ),
- mpParent( pParent )
-{
- Size aBoxSize = pParent->GetSizePixel( );
- mpHeaderBar = VclPtr<HeaderBar>::Create( pParent, WB_BUTTONSTYLE | WB_BOTTOMBORDER );
- mpHeaderBar->SetPosSizePixel( Point( 0, 0 ), Size( 600, 16 ) );
-
- long aTabPositions[] = { 20, 600 };
- SetTabs( SAL_N_ELEMENTS(aTabPositions), aTabPositions, MapUnit::MapPixel );
- mpHeaderBar->InsertItem( COLUMN_NAME, rTitle, 600, HeaderBarItemBits::LEFT );
-
- Size aHeadSize = mpHeaderBar->GetSizePixel();
- SetPosSizePixel( Point( 0, aHeadSize.getHeight() ),
- Size( aBoxSize.getWidth(), aBoxSize.getHeight() - aHeadSize.getHeight() ) );
-
- InitHeaderBar( mpHeaderBar );
-
- Show( );
- mpHeaderBar->Show();
-}
-
-PlacesListBox_Impl::~PlacesListBox_Impl( )
-{
- disposeOnce();
-}
-
-void PlacesListBox_Impl::dispose()
-{
- mpHeaderBar.disposeAndClear();
- mpParent.clear();
- SvHeaderTabListBox::dispose();
-}
-
-void PlacesListBox_Impl::MouseButtonUp( const MouseEvent& rMEvt )
-{
- SvHeaderTabListBox::MouseButtonUp( rMEvt );
- mpParent->updateView( );
-}
-
-PlacesListBox::PlacesListBox( vcl::Window* pParent, SvtFileDialog* pFileDlg, const OUString& rTitle, WinBits nBits ) :
- Control( pParent, nBits ),
- maPlaces( ),
- mpDlg( pFileDlg ),
- mpImpl( nullptr ),
- mpAddBtn( ),
- mpDelBtn( ),
- mnNbEditables( 0 ),
- mbUpdated( false ),
- mbSelectionChanged( false )
-{
- mpImpl = VclPtr<PlacesListBox_Impl>::Create( this, rTitle );
-
- mpImpl->SetSelectHdl( LINK( this, PlacesListBox, Selection ) );
- mpImpl->SetDoubleClickHdl( LINK( this, PlacesListBox, DoubleClick ) ) ;
-
- mpAddBtn.reset( VclPtr<ImageButton>::Create( this, 0 ) );
- mpAddBtn->SetText( "+" );
- mpAddBtn->SetPosSizePixel( Point( 0, 0 ), Size( 22, 22 ) );
- mpAddBtn->Show();
-
- mpDelBtn.reset( VclPtr<ImageButton>::Create( this, 0 ) );
- mpDelBtn->SetText( "-" );
- mpDelBtn->SetPosSizePixel( Point( 0, 0 ), Size( 22, 22 ) );
- mpDelBtn->Show();
+PlacesListBox::PlacesListBox(std::unique_ptr<weld::TreeView> xControl,
+ std::unique_ptr<weld::Button> xAdd,
+ std::unique_ptr<weld::Button> xDel,
+ SvtFileDialog* pFileDlg)
+ : maPlaces( )
+ , mpDlg(pFileDlg)
+ , mxImpl(std::move(xControl))
+ , mxAddBtn(std::move(xAdd))
+ , mxDelBtn(std::move(xDel))
+ , mnNbEditables(0)
+ , mbUpdated( false )
+ , mbSelectionChanged( false )
+{
+ Size aSize(mxImpl->get_approximate_digit_width() * 18,
+ mxImpl->get_height_rows(9));
+ mxImpl->set_size_request(aSize.Width(), aSize.Height());
+
+ mxImpl->connect_changed( LINK( this, PlacesListBox, Selection ) );
+ mxImpl->connect_row_activated( LINK( this, PlacesListBox, DoubleClick ) ) ;
}
PlacesListBox::~PlacesListBox( )
{
- disposeOnce();
-}
-
-void PlacesListBox::dispose()
-{
- mpImpl.disposeAndClear();
- mpAddBtn.disposeAndClear();
- mpDelBtn.disposeAndClear();
- mpDlg.clear();
- Control::dispose();
}
void PlacesListBox::AppendPlace( const PlacePtr& pPlace )
{
maPlaces.push_back( pPlace );
- mpImpl->InsertEntry( pPlace->GetName( ),
- getEntryIcon( pPlace ), getEntryIcon( pPlace ) );
+ mxImpl->append_text(pPlace->GetName());
+ mxImpl->set_image(maPlaces.size() - 1, getEntryIcon(pPlace));
if(pPlace->IsEditable()) {
++mnNbEditables;
@@ -111,7 +51,6 @@ void PlacesListBox::AppendPlace( const PlacePtr& pPlace )
}
}
-
bool PlacesListBox::IsUpdated() {
if(mbUpdated) {
mbUpdated = false;
@@ -120,7 +59,6 @@ bool PlacesListBox::IsUpdated() {
return false;
}
-
void PlacesListBox::RemovePlace( sal_uInt16 nPos )
{
if ( nPos < maPlaces.size() )
@@ -130,88 +68,61 @@ void PlacesListBox::RemovePlace( sal_uInt16 nPos )
mbUpdated = true;
}
maPlaces.erase( maPlaces.begin() + nPos );
- SvTreeListEntry* pEntry = mpImpl->GetEntry( nPos );
- mpImpl->RemoveEntry( pEntry );
+ mxImpl->remove(nPos);
}
}
void PlacesListBox::RemoveSelectedPlace() {
- RemovePlace(mpImpl->GetCurrRow());
+ RemovePlace(mxImpl->get_cursor_index());
}
-void PlacesListBox::SetAddHdl( const Link<Button*,void>& rHdl )
+void PlacesListBox::SetAddHdl( const Link<weld::Button&,void>& rHdl )
{
- mpAddBtn->SetClickHdl( rHdl );
+ mxAddBtn->connect_clicked( rHdl );
}
-void PlacesListBox::SetDelHdl( const Link<Button*,void>& rHdl )
+void PlacesListBox::SetDelHdl( const Link<weld::Button&,void>& rHdl )
{
- mpDelBtn->SetClickHdl( rHdl );
+ mxDelBtn->connect_clicked( rHdl );
}
void PlacesListBox::SetDelEnabled( bool enabled )
{
- mpDelBtn->Enable( enabled );
-}
-
-void PlacesListBox::SetSizePixel( const Size& rNewSize )
-{
- Control::SetSizePixel( rNewSize );
- Size aListSize( rNewSize );
- aListSize.AdjustHeight( -(26 + 18) );
- mpImpl->SetSizePixel( aListSize );
-
- sal_Int32 nBtnY = rNewSize.Height() - 26;
- mpAddBtn->SetPosPixel( Point( 3, nBtnY ) );
- mpDelBtn->SetPosPixel( Point( 6 + 24, nBtnY ) );
-}
-
-bool PlacesListBox::EventNotify( NotifyEvent& rNEvt )
-{
- if( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
- {
- const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent();
- const vcl::KeyCode& rCode = pKeyEvent->GetKeyCode();
-
- if( rCode.GetCode() == KEY_RETURN )
- {
- mbSelectionChanged = true;
- updateView();
- return true;
- }
- }
- return Control::EventNotify(rNEvt);
+ mxDelBtn->set_sensitive( enabled );
}
-Image PlacesListBox::getEntryIcon( const PlacePtr& pPlace )
+OUString PlacesListBox::getEntryIcon( const PlacePtr& pPlace )
{
- Image theImage = SvtFileDialog::GetButtonImage( BMP_FILEDLG_PLACE_LOCAL );
+ OUString theImage = BMP_FILEDLG_PLACE_LOCAL;
if ( !pPlace->IsLocal( ) )
- theImage = SvtFileDialog::GetButtonImage( BMP_FILEDLG_PLACE_REMOTE );
+ theImage = BMP_FILEDLG_PLACE_REMOTE;
return theImage;
}
-IMPL_LINK_NOARG( PlacesListBox, Selection, SvTreeListBox*, void )
+IMPL_LINK_NOARG( PlacesListBox, Selection, weld::TreeView&, void )
{
- sal_uInt32 nSelected = mpImpl->GetCurrRow();
+ sal_uInt32 nSelected = mxImpl->get_cursor_index();
PlacePtr pPlace = maPlaces[nSelected];
mbSelectionChanged = true;
- if(pPlace->IsEditable())
+ if (pPlace->IsEditable())
mpDlg->RemovablePlaceSelected();
else
mpDlg->RemovablePlaceSelected(false);
+
+ updateView();
}
-IMPL_LINK_NOARG( PlacesListBox, DoubleClick, SvTreeListBox*, bool )
+IMPL_LINK_NOARG( PlacesListBox, DoubleClick, weld::TreeView&, bool )
{
- sal_uInt16 nSelected = mpImpl->GetCurrRow();
+ sal_uInt16 nSelected = mxImpl->get_cursor_index();
PlacePtr pPlace = maPlaces[nSelected];
if ( pPlace->IsEditable() && !pPlace->IsLocal( ) )
{
- PlaceEditDialog aDlg(mpDlg->GetFrameWeld(), pPlace);
+ PlaceEditDialog aDlg(mpDlg->getDialog(), pPlace);
short aRetCode = aDlg.run();
- switch(aRetCode) {
+ switch (aRetCode)
+ {
case RET_OK :
{
pPlace->SetName ( aDlg.GetServerName() );
@@ -228,18 +139,14 @@ IMPL_LINK_NOARG( PlacesListBox, DoubleClick, SvTreeListBox*, bool )
break;
};
}
- return false;
+ return true;
}
void PlacesListBox::updateView( )
{
- if ( mbSelectionChanged )
- {
- mbSelectionChanged = false;
- sal_uInt32 nSelected = mpImpl->GetCurrRow();
- PlacePtr pPlace = maPlaces[nSelected];
- mpDlg->OpenURL_Impl( pPlace->GetUrl( ) );
- }
+ sal_uInt32 nSelected = mxImpl->get_cursor_index();
+ PlacePtr pPlace = maPlaces[nSelected];
+ mpDlg->OpenURL_Impl( pPlace->GetUrl( ) );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/office/PlacesListBox.hxx b/fpicker/source/office/PlacesListBox.hxx
index 81a11f0e8123..151a0d1d4a01 100644
--- a/fpicker/source/office/PlacesListBox.hxx
+++ b/fpicker/source/office/PlacesListBox.hxx
@@ -12,72 +12,60 @@
#include "iodlg.hxx"
#include <svtools/place.hxx>
-#include <vcl/svtabbx.hxx>
+#include <vcl/weld.hxx>
#include <memory>
#include <vector>
-typedef std::shared_ptr< Place > PlacePtr;
+typedef std::shared_ptr<Place> PlacePtr;
class PlacesListBox;
-class PlacesListBox_Impl : public SvHeaderTabListBox
-{
- private:
- VclPtr<HeaderBar> mpHeaderBar;
- VclPtr<PlacesListBox> mpParent;
-
- public:
- PlacesListBox_Impl( PlacesListBox* pParent, const OUString& rTitle );
- virtual ~PlacesListBox_Impl( ) override;
- virtual void dispose() override;
-
- virtual void MouseButtonUp( const MouseEvent& rMEvt ) override;
-};
/** ListBox to handle Places.
*/
-class PlacesListBox : public Control
+class PlacesListBox
{
- private:
- std::vector< PlacePtr > maPlaces;
- VclPtr<SvtFileDialog> mpDlg;
- VclPtr<PlacesListBox_Impl> mpImpl;
- VclPtr<PushButton> mpAddBtn;
- VclPtr<PushButton> mpDelBtn;
- sal_Int32 mnNbEditables;
- bool mbUpdated;
- bool mbSelectionChanged;
-
- public:
- PlacesListBox( vcl::Window* pParent, SvtFileDialog* pFileDlg, const OUString& rTitle, WinBits nBits );
- virtual ~PlacesListBox( ) override;
- virtual void dispose() override;
-
- void AppendPlace( const PlacePtr& pPlace );
- void RemovePlace( sal_uInt16 nPos );
- void RemoveSelectedPlace();
- sal_Int32 GetNbEditablePlaces() const { return mnNbEditables;}
- bool IsUpdated();
- const std::vector<PlacePtr>& GetPlaces() const { return maPlaces;}
-
- void SetAddHdl( const Link<Button*,void>& rHdl );
- void SetDelHdl( const Link<Button*,void>& rHdl );
- void SetDelEnabled( bool enabled );
- void SetSizePixel( const Size& rNewSize ) override;
- void updateView( );
-
- const VclPtr<PushButton>& GetAddButton() const { return mpAddBtn; }
- const VclPtr<PushButton>& GetDeleteButton() const { return mpDelBtn; }
- const VclPtr<PlacesListBox_Impl>& GetPlacesListBox() const { return mpImpl; }
-
- virtual bool EventNotify( NotifyEvent& rNEvt ) override;
-
- private:
-
- static Image getEntryIcon( const PlacePtr& pPlace );
-
- DECL_LINK( Selection, SvTreeListBox*, void );
- DECL_LINK( DoubleClick, SvTreeListBox*, bool );
+private:
+ std::vector<PlacePtr> maPlaces;
+ SvtFileDialog* mpDlg;
+ std::unique_ptr<weld::TreeView> mxImpl;
+ std::unique_ptr<weld::Button> mxAddBtn;
+ std::unique_ptr<weld::Button> mxDelBtn;
+ sal_Int32 mnNbEditables;
+ bool mbUpdated;
+ bool mbSelectionChanged;
+
+public:
+ PlacesListBox(std::unique_ptr<weld::TreeView> xTreeView,
+ std::unique_ptr<weld::Button> xAddBtn,
+ std::unique_ptr<weld::Button> xDelBtn,
+ SvtFileDialog* pFileDlg);
+ ~PlacesListBox();
+
+ void AppendPlace( const PlacePtr& pPlace );
+ void RemovePlace( sal_uInt16 nPos );
+ void RemoveSelectedPlace();
+ sal_Int32 GetNbEditablePlaces() const { return mnNbEditables;}
+ bool IsUpdated();
+ const std::vector<PlacePtr>& GetPlaces() const { return maPlaces;}
+
+ void SetAddHdl( const Link<weld::Button&,void>& rHdl );
+ void SetDelHdl( const Link<weld::Button&,void>& rHdl );
+ void SetDelEnabled( bool enabled );
+ void updateView( );
+
+ void set_help_id(const OString& rHelpId) { mxImpl->set_help_id(rHelpId); }
+
+ const weld::Button& GetAddButton() const { return *mxAddBtn; }
+ const weld::Button& GetDeleteButton() const { return *mxDelBtn; }
+ weld::TreeView& GetPlacesListBox() { return *mxImpl; }
+
+private:
+
+ static OUString getEntryIcon(const PlacePtr& pPlace);
+
+ DECL_LINK( Selection, weld::TreeView&, void );
+ DECL_LINK( DoubleClick, weld::TreeView&, bool );
};
#endif
diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index 97aa44706a6d..a795338581f4 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -22,7 +22,6 @@
#include <svtools/PlaceEditDialog.hxx>
#include <tools/debug.hxx>
#include <ucbhelper/commandenvironment.hxx>
-#include <vcl/dialog.hxx>
#include <vcl/errinf.hxx>
#include <vcl/lstbox.hxx>
#include <vcl/treelistentry.hxx>
@@ -30,183 +29,25 @@
#include <vcl/ptrstyle.hxx>
#include <officecfg/Office/Common.hxx>
-class FileViewContainer : public vcl::Window
-{
- enum FocusState
- {
- Prev = 0,
- TreeView,
- FileView,
- Next,
- FocusCount
- };
-
- private:
- VclPtr< SvtFileView > m_pFileView;
- VclPtr< FolderTree > m_pTreeView;
- VclPtr< Splitter > m_pSplitter;
-
- int m_nCurrentFocus;
- VclPtr<vcl::Window> m_pFocusWidgets[FocusState::FocusCount];
-
- public:
- explicit FileViewContainer( vcl::Window *pParent )
- : Window( pParent, WB_TABSTOP )
- , m_pFileView( nullptr )
- , m_pTreeView( nullptr )
- , m_pSplitter( nullptr )
- , m_nCurrentFocus( 0 )
- {
- }
-
- virtual ~FileViewContainer() override
- {
- disposeOnce();
- }
-
- virtual void dispose() override
- {
- m_pFileView.clear();
- m_pTreeView.clear();
- m_pSplitter.clear();
- vcl::Window::dispose();
- }
-
- void init( SvtFileView* pFileView,
- Splitter* pSplitter,
- FolderTree* pTreeView,
- vcl::Window* pPrevSibling,
- vcl::Window* pNextSibling )
- {
- m_pFileView = pFileView;
- m_pTreeView = pTreeView;
- m_pSplitter = pSplitter;
- m_pFocusWidgets[FocusState::Prev] = pPrevSibling;
- m_pFocusWidgets[FocusState::TreeView] = pTreeView;
- m_pFocusWidgets[FocusState::FileView] = pFileView;
- m_pFocusWidgets[FocusState::Next] = pNextSibling;
- }
-
- virtual void Resize() override
- {
- Window::Resize();
-
- if( !m_pFileView || !m_pTreeView )
- return;
-
- Size aSize = GetSizePixel();
- Point aPos( m_pFileView->GetPosPixel() );
- Size aNewSize( aSize.Width() - aPos.X(), aSize.Height() );
-
- m_pFileView->SetSizePixel( aNewSize );
-
- // Resize the Splitter to fit the height
- Size splitterNewSize = m_pSplitter->GetSizePixel();
- splitterNewSize.setHeight( aSize.Height() );
- m_pSplitter->SetSizePixel( splitterNewSize );
- sal_Int32 nMinX = m_pTreeView->GetPosPixel().X();
- sal_Int32 nMaxX = m_pFileView->GetPosPixel().X() + m_pFileView->GetSizePixel().Width() - nMinX;
- m_pSplitter->SetDragRectPixel( tools::Rectangle( Point( nMinX, 0 ), Size( nMaxX, aSize.Width() ) ) );
-
- // Resize the tree list box to fit the height of the FileView
- Size placesNewSize( m_pTreeView->GetSizePixel() );
- placesNewSize.setHeight( aSize.Height() );
- m_pTreeView->SetSizePixel( placesNewSize );
- }
-
- void changeFocus( bool bReverse )
- {
- if( !m_pFileView || !m_pTreeView )
- return;
-
- if( bReverse && m_nCurrentFocus > FocusState::Prev && m_nCurrentFocus <= FocusState::Next )
- {
- m_pFocusWidgets[m_nCurrentFocus]->SetFakeFocus(false);
- m_pFocusWidgets[m_nCurrentFocus]->LoseFocus();
-
- m_pFocusWidgets[--m_nCurrentFocus]->SetFakeFocus( true );
- m_pFocusWidgets[m_nCurrentFocus]->GrabFocus();
- }
- else if( !bReverse && m_nCurrentFocus >= FocusState::Prev && m_nCurrentFocus < FocusState::Next )
- {
- m_pFocusWidgets[m_nCurrentFocus]->SetFakeFocus(false);
- m_pFocusWidgets[m_nCurrentFocus]->LoseFocus();
-
- m_pFocusWidgets[++m_nCurrentFocus]->SetFakeFocus( true );
- m_pFocusWidgets[m_nCurrentFocus]->GrabFocus();
- }
- }
-
- virtual void GetFocus() override
- {
- if( !m_pFileView || !m_pTreeView )
- return;
-
- GetFocusFlags aFlags = GetGetFocusFlags();
-
- if( aFlags & GetFocusFlags::Forward )
- m_nCurrentFocus = FocusState::TreeView;
- else if( aFlags & GetFocusFlags::Backward )
- m_nCurrentFocus = FocusState::FileView;
-
- if( m_nCurrentFocus >= FocusState::Prev && m_nCurrentFocus <= FocusState::Next )
- {
- m_pFocusWidgets[m_nCurrentFocus]->SetFakeFocus( true );
- m_pFocusWidgets[m_nCurrentFocus]->GrabFocus();
- }
- }
-
- virtual bool EventNotify( NotifyEvent& rNEvt ) override
- {
- if( rNEvt.GetType() == MouseNotifyEvent::GETFOCUS )
- {
- // we must also update counter when user change focus using mouse
- for(int i = FocusState::Prev; i <= FocusState::Next; i++)
- {
- if( rNEvt.GetWindow() == m_pFocusWidgets[i] )
- {
- m_nCurrentFocus = i;
- return true;
- }
- }
-
- // GETFOCUS for one of FileView's subcontrols
- m_nCurrentFocus = FocusState::FileView;
- return true;
- }
- if( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
- {
- const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent();
- const vcl::KeyCode& rCode = pKeyEvent->GetKeyCode();
- bool bShift = rCode.IsShift();
- if( rCode.GetCode() == KEY_TAB )
- {
- changeFocus( bShift );
- return true;
- }
- }
- return Window::EventNotify(rNEvt);
- }
-};
-
-RemoteFilesDialog::RemoteFilesDialog( vcl::Window* pParent, PickerFlags nBits )
- : SvtFileDialog_Base( pParent, "RemoteFilesDialog", "fps/ui/remotefilesdialog.ui" )
+RemoteFilesDialog::RemoteFilesDialog( weld::Window* pParent, PickerFlags nBits )
+ : SvtFileDialog_Base( pParent, "fps/ui/remotefilesdialog.ui", "RemoteFilesDialog" )
, m_xContext( comphelper::getProcessComponentContext() )
, m_xMasterPasswd( PasswordContainer::create( m_xContext ) )
, m_nWidth( 0 )
, m_nHeight( 0 )
- , m_pSplitter( nullptr )
- , m_pFileView( nullptr )
- , m_pContainer( nullptr )
- , m_pAddMenu( nullptr )
+ , m_bIsInExecute( false )
+ , m_xCancel_btn(m_xBuilder->weld_button("cancel"))
+ , m_xAddService_bar(m_xBuilder->weld_toolbar("add_service_bar"))
+ , m_xAddService_menu(m_xBuilder->weld_menu("service_edit_menu"))
+ , m_xServices_lb(m_xBuilder->weld_combo_box("services_lb"))
+ , m_xPathContainer(m_xBuilder->weld_container("breadcrumb_container"))
+ , m_xNewFolder(m_xBuilder->weld_button("new_folder"))
+ , m_xListView_btn(m_xBuilder->weld_toggle_button("list_view"))
+ , m_xIconView_btn(m_xBuilder->weld_toggle_button("icon_view"))
+ , m_xFilter_lb(m_xBuilder->weld_combo_box("filter_lb"))
+ , m_xName_ed(new AutocompleteEdit(m_xBuilder->weld_entry("filename")))
{
- get( m_pCancel_btn, "cancel" );
- get( m_pAddService_btn, "add_service_btn" );
- get( m_pServices_lb, "services_lb" );
- get( m_pFilter_lb, "filter_lb" );
- get( m_pNewFolder, "new_folder" );
- get( m_pListView_btn, "list_view" );
- get( m_pIconView_btn, "icon_view" );
+ m_xAddService_bar->set_item_menu("add_service_btn", m_xAddService_menu.get());
m_eMode = ( nBits & PickerFlags::SaveAs ) ? REMOTEDLG_MODE_SAVE : REMOTEDLG_MODE_OPEN;
m_eType = ( nBits & PickerFlags::PathDialog ) ? REMOTEDLG_TYPE_PATHDLG : REMOTEDLG_TYPE_FILEDLG;
@@ -214,124 +55,94 @@ RemoteFilesDialog::RemoteFilesDialog( vcl::Window* pParent, PickerFlags nBits )
m_bIsUpdated = false;
m_bIsConnected = false;
m_bServiceChanged = false;
- m_nCurrentFilter = LISTBOX_ENTRY_NOTFOUND;
+ m_nCurrentFilter = -1;
- m_pName_ed = VclPtr< AutocompleteEdit >::Create( get< vcl::Window >( "filename_container" ) );
- m_pName_ed->Show();
+ m_xName_ed->show();
- m_pFilter_lb->Enable( false );
- m_pName_ed->Enable( false );
- m_pNewFolder->Enable( false );
+ // limit width due to super wide strings that may end up here
+ m_xFilter_lb->set_size_request(m_xFilter_lb->get_approximate_digit_width() * 60, -1);
+
+ m_xFilter_lb->set_sensitive(false);
+ m_xName_ed->set_sensitive(false);
+ m_xNewFolder->set_sensitive(false);
if( m_eMode == REMOTEDLG_MODE_OPEN )
{
- get( m_pOk_btn, "open" );
+ m_xOk_btn = m_xBuilder->weld_button("open");
- m_pNewFolder->Hide();
+ m_xNewFolder->hide();
}
else
{
- get( m_pOk_btn, "save" );
-
- m_pNewFolder->SetModeImage(Image(StockImage::Yes, BMP_FILEDLG_CREATEFOLDER));
- m_pNewFolder->SetClickHdl( LINK( this, RemoteFilesDialog, NewFolderHdl ) );
+ m_xOk_btn = m_xBuilder->weld_button("save");
+ m_xNewFolder->connect_clicked( LINK( this, RemoteFilesDialog, NewFolderHdl ) );
}
- m_pIconView_btn->SetClickHdl( LINK( this, RemoteFilesDialog, IconViewHdl ) );
- m_pListView_btn->SetClickHdl( LINK( this, RemoteFilesDialog, ListViewHdl ) );
+ m_xListView_btn->set_active(true);
+ m_xIconView_btn->connect_clicked( LINK( this, RemoteFilesDialog, IconViewHdl ) );
+ m_xListView_btn->connect_clicked( LINK( this, RemoteFilesDialog, ListViewHdl ) );
- m_pOk_btn->Show();
- m_pOk_btn->Enable( false );
+ m_xOk_btn->show();
+ m_xOk_btn->set_sensitive(false);
- m_pOk_btn->SetClickHdl( LINK( this, RemoteFilesDialog, OkHdl ) );
- m_pCancel_btn->SetClickHdl( LINK( this, RemoteFilesDialog, CancelHdl ) );
+ m_xOk_btn->connect_clicked( LINK( this, RemoteFilesDialog, OkHdl ) );
+ m_xCancel_btn->connect_clicked( LINK( this, RemoteFilesDialog, CancelHdl ) );
m_sRootLabel = FpsResId( STR_SVT_ROOTLABEL );
- m_pPath = VclPtr<Breadcrumb>::Create( get< vcl::Window >( "breadcrumb_container" ) );
- m_pPath->set_hexpand( true );
- m_pPath->SetClickHdl( LINK( this, RemoteFilesDialog, SelectBreadcrumbHdl ) );
- m_pPath->SetMode( SvtBreadcrumbMode::ALL_VISITED );
- m_pPath->Show();
-
- m_pContainer = VclPtr< FileViewContainer >::Create( get< vcl::Window >("container") );
-
- m_pContainer->set_hexpand( true );
- m_pContainer->set_vexpand( true );
-
- m_pFileView = VclPtr< SvtFileView >::Create( m_pContainer, WB_BORDER | WB_TABSTOP,
- REMOTEDLG_TYPE_PATHDLG == m_eType,
- bMultiselection, false );
-
- m_pFileView->Show();
- m_pFileView->EnableAutoResize();
- m_pFileView->SetDoubleClickHdl( LINK( this, RemoteFilesDialog, DoubleClickHdl ) );
- m_pFileView->SetSelectHdl( LINK( this, RemoteFilesDialog, SelectHdl ) );
- m_pFileView->EnableDelete( true );
-
- m_pSplitter = VclPtr< Splitter >::Create( m_pContainer, WB_HSCROLL );
- m_pSplitter->SetBackground( Wallpaper( Application::GetSettings().GetStyleSettings().GetFaceColor() ) );
- m_pSplitter->SetSplitHdl( LINK( this, RemoteFilesDialog, SplitHdl ) );
- m_pSplitter->Show();
-
- m_pTreeView = VclPtr< FolderTree >::Create( m_pContainer, WB_BORDER );
- Size aSize( 150, 200 );
- m_pTreeView->set_height_request( aSize.Height() );
- m_pTreeView->set_width_request( aSize.Width() );
- m_pTreeView->SetSizePixel( aSize );
- m_pTreeView->Show();
-
- m_pTreeView->SetSelectHdl( LINK( this, RemoteFilesDialog, TreeSelectHdl ) );
-
- sal_Int32 nPosX = m_pTreeView->GetSizePixel().Width();
- m_pSplitter->SetPosPixel( Point( nPosX, 0 ) );
- nPosX += m_pSplitter->GetSizePixel().Width();
- m_pFileView->SetPosPixel( Point( nPosX, 0 ) );
-
- m_pContainer->init( m_pFileView, m_pSplitter, m_pTreeView, m_pAddService_btn, m_pFilter_lb );
- m_pContainer->Show();
- m_pContainer->Enable( false );
+ m_xPath.reset(new Breadcrumb(m_xPathContainer.get()));
+ m_xPath->connect_clicked( LINK( this, RemoteFilesDialog, SelectBreadcrumbHdl ) );
+ m_xPath->SetMode( SvtBreadcrumbMode::ALL_VISITED );
+
+ m_xContainer = m_xBuilder->weld_container("container");
+ m_xContainer->set_size_request(m_xContainer->get_approximate_digit_width() * 82, -1);
+
+ m_xFileView.reset(new SvtFileView(m_xDialog.get(),
+ m_xBuilder->weld_tree_view("fileview"),
+ m_xBuilder->weld_icon_view("iconview"),
+ REMOTEDLG_TYPE_PATHDLG == m_eType,
+ bMultiselection, false));
+
+ m_xFileView->SetDoubleClickHdl( LINK( this, RemoteFilesDialog, DoubleClickHdl ) );
+ m_xFileView->SetSelectHdl( LINK( this, RemoteFilesDialog, SelectHdl ) );
+ m_xFileView->EnableDelete( true );
+
+ m_xTreeView.reset(new FolderTree(m_xBuilder->weld_tree_view("foldertree"), m_xDialog.get()));
+ m_xTreeView->connect_changed(LINK(this, RemoteFilesDialog, TreeSelectHdl));
+
+ m_xContainer->set_sensitive(false);
m_sIniKey = "RemoteFilesDialog";
InitSize();
- m_pName_ed->SetGetFocusHdl( LINK( this, RemoteFilesDialog, FileNameGetFocusHdl ) );
- m_pName_ed->SetModifyHdl( LINK( this, RemoteFilesDialog, FileNameModifyHdl ) );
-
- m_pAddService_btn->SetDelayMenu(true);
- m_pAddService_btn->SetDropDown(PushButtonDropdownStyle::SplitMenuButton);
+ m_xName_ed->connect_focus_in(LINK(this, RemoteFilesDialog, FileNameGetFocusHdl));
+ m_xName_ed->connect_changed(LINK(this, RemoteFilesDialog, FileNameModifyHdl));
- m_pAddMenu = m_pAddService_btn->GetPopupMenu();
- m_pAddService_btn->SetClickHdl( LINK( this, RemoteFilesDialog, AddServiceHdl ) );
- m_pAddService_btn->SetSelectHdl( LINK( this, RemoteFilesDialog, EditServiceMenuHdl ) );
+ m_xAddService_bar->connect_clicked(LINK( this, RemoteFilesDialog, AddServiceHdl));
+ m_xAddService_menu->connect_activate(LINK(this, RemoteFilesDialog, EditServiceMenuHdl));
FillServicesListbox();
- m_pServices_lb->SetSelectHdl( LINK( this, RemoteFilesDialog, SelectServiceHdl ) );
+ m_xServices_lb->connect_changed( LINK( this, RemoteFilesDialog, SelectServiceHdl ) );
- m_pFilter_lb->SetSelectHdl( LINK( this, RemoteFilesDialog, SelectFilterHdl ) );
+ m_xFilter_lb->connect_changed( LINK( this, RemoteFilesDialog, SelectFilterHdl ) );
}
RemoteFilesDialog::~RemoteFilesDialog()
{
- disposeOnce();
-}
-
-void RemoteFilesDialog::dispose()
-{
- m_pFileView->SetSelectHdl( Link<SvTreeListBox*,void>() );
+ m_xFileView->SetSelectHdl(Link<SvtFileView*,void>());
// save window state
if( !m_sIniKey.isEmpty() )
{
SvtViewOptions aDlgOpt( EViewType::Dialog, m_sIniKey );
- aDlgOpt.SetWindowState( OStringToOUString( GetWindowState(), osl_getThreadTextEncoding() ) );
+ aDlgOpt.SetWindowState(OStringToOUString(m_xDialog->get_window_state(WindowStateMask::All), RTL_TEXTENCODING_UTF8));
- Size aSize( GetSizePixel() );
+ Size aSize(m_xDialog->get_size());
OUString sSize = OUString::number( aSize.Width() ) + "|";
sSize = sSize + OUString::number( aSize.Height() ) + "|";
- OUString sUserData = m_pFileView->GetConfigString();
+ OUString sUserData = m_xFileView->GetConfigString();
aDlgOpt.SetUserItem( "UserData",
makeAny( sSize + sUserData ) );
}
@@ -359,68 +170,27 @@ void RemoteFilesDialog::dispose()
}
batch->commit();
-
- m_pTreeView.disposeAndClear();
- m_pFileView.disposeAndClear();
- m_pSplitter.disposeAndClear();
- m_pContainer.disposeAndClear();
- m_pPath.disposeAndClear();
-
- m_pOk_btn.clear();
- m_pCancel_btn.clear();
- m_pAddService_btn.clear();
- m_pServices_lb.clear();
- m_pFilter_lb.clear();
- m_pName_ed.disposeAndClear();
- m_pNewFolder.clear();
- m_pIconView_btn.clear();
- m_pListView_btn.clear();
- m_pAddMenu.clear();
-
- Dialog::dispose();
}
-void RemoteFilesDialog::Resize()
+short RemoteFilesDialog::run()
{
- Dialog::Resize();
-
- if( m_pFileView && m_pContainer )
+ if (m_xServices_lb->get_count() > 0)
{
- Size aSize = m_pContainer->GetSizePixel();
- m_pFileView->SetSizePixel( aSize );
+ m_xDialog->show();
+ SelectServiceHdl(*m_xServices_lb);
}
- Invalidate(InvalidateFlags::Update);
-}
-
-short RemoteFilesDialog::Execute()
-{
- if( m_pServices_lb->GetEntryCount() > 0 )
- {
- Show();
- SelectServiceHdl( *m_pServices_lb );
- }
- if( !m_bIsConnected )
+ if (!m_bIsConnected)
{
- m_pServices_lb->SetNoSelection();
- m_pAddService_btn->SetPopupMenu( nullptr );
+ m_xServices_lb->set_active(-1);
+ m_xAddService_bar->set_item_menu("add_service_btn", nullptr);
}
- short nRet = SvtFileDialog_Base::Execute();
-
+ m_bIsInExecute = true;
+ short nRet = SvtFileDialog_Base::run();
+ m_bIsInExecute = false;
return nRet;
}
-void RemoteFilesDialog::Show()
-{
- SvtFileDialog_Base::Show();
-
- if( m_nWidth > 0 && m_nHeight > 0 )
- {
- Size aSize( m_nWidth, m_nHeight );
- SetSizePixel( aSize );
- }
-}
-
static OUString lcl_GetServiceType( const ServicePtr& pService )
{
INetProtocol aProtocol = pService->GetUrlObject().GetProtocol();
@@ -466,7 +236,7 @@ void RemoteFilesDialog::InitSize()
if( aDlgOpt.Exists() )
{
- SetWindowState( OUStringToOString( aDlgOpt.GetWindowState(), osl_getThreadTextEncoding() ) );
+ m_xDialog->set_window_state(OUStringToOString(aDlgOpt.GetWindowState(), RTL_TEXTENCODING_UTF8));
Any aUserData = aDlgOpt.GetUserItem( "UserData" );
OUString sCfgStr;
@@ -480,16 +250,14 @@ void RemoteFilesDialog::InitSize()
return;
m_nWidth = sCfgStr.copy(0, nPos1++).toInt32();
m_nHeight = sCfgStr.copy(nPos1, nPos2-nPos1).toInt32();
- m_pFileView->SetConfigString( sCfgStr.copy(nPos2+1) );
+ m_xFileView->SetConfigString( sCfgStr.copy(nPos2+1) );
}
}
- else
- m_pFileView->SetConfigString( "" );
}
void RemoteFilesDialog::FillServicesListbox()
{
- m_pServices_lb->Clear();
+ m_xServices_lb->clear();
m_aServices.clear();
// Load from user settings
@@ -517,31 +285,32 @@ void RemoteFilesDialog::FillServicesListbox()
if( placesUrlsList[nPlace] == m_sLastServiceUrl )
nPos = i;
- m_pServices_lb->InsertEntry( sPrefix + placesNamesList[nPlace] );
+ m_xServices_lb->append_text(sPrefix + placesNamesList[nPlace]);
i++;
}
}
- if( m_pServices_lb->GetEntryCount() > 0 )
+ if (m_xServices_lb->get_count() > 0)
{
- m_pServices_lb->SelectEntryPos( nPos );
- m_pAddService_btn->SetPopupMenu( m_pAddMenu );
+ m_xServices_lb->set_active(nPos);
+ m_xAddService_bar->set_item_menu("add_service_btn", m_xAddService_menu.get());
}
else
- m_pAddService_btn->SetPopupMenu( nullptr );
+ m_xAddService_bar->set_item_menu("add_service_btn", nullptr);
EnableControls();
}
int RemoteFilesDialog::GetSelectedServicePos()
{
- int nSelected = m_pServices_lb->GetSelectedEntryPos();
+ if( m_aServices.empty() )
+ return -1;
+
int nPos = 0;
int i = -1;
- if( m_aServices.empty() )
- return -1;
+ int nSelected = m_xServices_lb->get_active();
int nServices = static_cast<int>(m_aServices.size());
while( nPos < nServices )
@@ -561,94 +330,85 @@ void RemoteFilesDialog::AddFilter( const OUString& rFilter, const OUString& rTyp
{
OUString sName = rFilter;
- if ( rType.isEmpty() )
- sName = "------------------------------------------";
-
m_aFilters.emplace_back( rFilter, rType );
- m_pFilter_lb->InsertEntry( sName );
+ if (rType.isEmpty())
+ m_xFilter_lb->append_separator("");
+ else
+ m_xFilter_lb->append_text(sName);
- if( m_pFilter_lb->GetSelectedEntryPos() == LISTBOX_ENTRY_NOTFOUND )
- m_pFilter_lb->SelectEntryPos( 0 );
+ if (m_xFilter_lb->get_active() == -1)
+ m_xFilter_lb->set_active(0);
}
-
void RemoteFilesDialog::OpenURL( OUString const & sURL )
{
- if( m_pFileView )
+ if( m_xFileView )
{
- m_pTreeView->EndSelection();
DisableControls();
- EnableChildPointerOverwrite( true );
- SetPointer( PointerStyle::Wait );
- Invalidate(InvalidateFlags::Update);
+ auto xWait = std::make_unique<weld::WaitObject>(m_xDialog.get());
if( !sURL.isEmpty() )
{
OUString sFilter = FILEDIALOG_FILTER_ALL;
- if( m_nCurrentFilter != LISTBOX_ENTRY_NOTFOUND )
+ if( m_nCurrentFilter != -1)
{
sFilter = m_aFilters[m_nCurrentFilter].second;
}
- m_pFileView->EndInplaceEditing();
+ m_xFileView->EndInplaceEditing();
DBG_ASSERT( !m_pCurrentAsyncAction.is(), "SvtFileDialog::executeAsync: previous async action not yet finished!" );
- m_pCurrentAsyncAction = new AsyncPickerAction( this, m_pFileView, AsyncPickerAction::Action::eOpenURL );
+ m_pCurrentAsyncAction = new AsyncPickerAction( this, m_xFileView.get(), AsyncPickerAction::Action::eOpenURL );
// -1 timeout - sync
m_pCurrentAsyncAction->execute( sURL, sFilter, -1, -1, GetBlackList() );
if( m_eMode != REMOTEDLG_MODE_SAVE )
- m_pName_ed->SetText( "" );
+ m_xName_ed->set_text( "" );
- m_pFileView->GrabFocus();
+ m_xFileView->grab_focus();
}
else
{
- SetPointer( PointerStyle::Arrow );
- EnableChildPointerOverwrite( false );
+ xWait.reset();
// content doesn't exist
ErrorHandler::HandleError( ERRCODE_IO_NOTEXISTS );
EnableControls();
- return;
}
-
- SetPointer( PointerStyle::Arrow );
- EnableChildPointerOverwrite( false );
}
}
void RemoteFilesDialog::AddFileExtension()
{
- if( m_nCurrentFilter != LISTBOX_ENTRY_NOTFOUND )
+ if (m_nCurrentFilter != -1)
{
OUString sExt = m_aFilters[m_nCurrentFilter].second;
- OUString sFileName = m_pName_ed->GetText();
+ OUString sFileName = m_xName_ed->get_text();
sal_Int32 nDotPos = sFileName.lastIndexOf( '.' );
if ( nDotPos == -1 )
{
sFileName += sExt.copy( 1 ); // without '*'
- m_pName_ed->SetText( sFileName );
+ m_xName_ed->set_text( sFileName );
}
}
}
void RemoteFilesDialog::EnableControls()
{
- if( m_pServices_lb->GetEntryCount() > 0 )
+ if (m_xServices_lb->get_count() > 0)
{
- m_pServices_lb->Enable();
+ m_xServices_lb->set_sensitive(true);
- if( m_pServices_lb->GetSelectedEntryCount() )
+ if (m_xServices_lb->get_active() != -1)
{
- m_pAddMenu->EnableItem( "change_password", false );
+ m_xAddService_menu->set_sensitive("change_password", false);
try
{
@@ -664,7 +424,7 @@ void RemoteFilesDialog::EnableControls()
if( aURLEntries.UserList.hasElements() )
{
- m_pAddMenu->EnableItem( "change_password" );
+ m_xAddService_menu->set_sensitive("change_password", true);
}
}
}
@@ -674,50 +434,48 @@ void RemoteFilesDialog::EnableControls()
}
}
else
- m_pServices_lb->Enable( false );
+ m_xServices_lb->set_sensitive(false);
if( m_bIsConnected )
{
- m_pFilter_lb->Enable();
- m_pName_ed->Enable();
- m_pContainer->Enable();
- m_pNewFolder->Enable();
+ m_xFilter_lb->set_sensitive(true);
+ m_xName_ed->set_sensitive(true);
+ m_xContainer->set_sensitive(true);
+ m_xNewFolder->set_sensitive(true);
- if( !m_pName_ed->GetText().isEmpty() )
- m_pOk_btn->Enable();
+ if (!m_xName_ed->get_text().isEmpty())
+ m_xOk_btn->set_sensitive(true);
else
- m_pOk_btn->Enable( false );
+ m_xOk_btn->set_sensitive(false);
}
else
{
- m_pFilter_lb->Enable( false );
- m_pName_ed->Enable( false );
- m_pContainer->Enable( false );
- m_pNewFolder->Enable( false );
- m_pOk_btn->Enable( false );
+ m_xFilter_lb->set_sensitive(false);
+ m_xName_ed->set_sensitive(false);
+ m_xContainer->set_sensitive(false);
+ m_xNewFolder->set_sensitive(false);
+ m_xOk_btn->set_sensitive(false);
}
- m_pPath->EnableFields( true );
- m_pAddService_btn->Enable();
-
- Invalidate(InvalidateFlags::Update);
+ m_xPath->EnableFields( true );
+ m_xAddService_bar->set_sensitive(true);
}
void RemoteFilesDialog::DisableControls()
{
- m_pServices_lb->Enable( false );
- m_pFilter_lb->Enable( false );
- m_pAddService_btn->Enable( false );
- m_pName_ed->Enable( false );
- m_pContainer->Enable( false );
- m_pOk_btn->Enable( false );
- m_pPath->EnableFields( false );
-
- m_pCancel_btn->Enable();
+ m_xServices_lb->set_sensitive(false);
+ m_xFilter_lb->set_sensitive(false);
+ m_xAddService_bar->set_sensitive(false);
+ m_xName_ed->set_sensitive(false);
+ m_xContainer->set_sensitive(false);
+ m_xOk_btn->set_sensitive(false);
+ m_xPath->EnableFields( false );
+
+ m_xCancel_btn->set_sensitive(true);
}
-void RemoteFilesDialog::SavePassword( const OUString& rURL, const OUString& rUser
- , const OUString& rPassword, bool bPersistent )
+void RemoteFilesDialog::SavePassword(const OUString& rURL, const OUString& rUser,
+ const OUString& rPassword, bool bPersistent)
{
if( rURL.isEmpty() || rUser.isEmpty() || rPassword.isEmpty() )
return;
@@ -745,19 +503,21 @@ void RemoteFilesDialog::SavePassword( const OUString& rURL, const OUString& rUse
{}
}
-IMPL_LINK_NOARG ( RemoteFilesDialog, IconViewHdl, Button*, void )
+IMPL_LINK_NOARG ( RemoteFilesDialog, IconViewHdl, weld::Button&, void )
{
- m_pFileView->SetViewMode( eIcon );
+ m_xListView_btn->set_active(false);
+ m_xFileView->SetViewMode( eIcon );
}
-IMPL_LINK_NOARG ( RemoteFilesDialog, ListViewHdl, Button*, void )
+IMPL_LINK_NOARG ( RemoteFilesDialog, ListViewHdl, weld::Button&, void )
{
- m_pFileView->SetViewMode( eDetailedList );
+ m_xIconView_btn->set_active(false);
+ m_xFileView->SetViewMode( eDetailedList );
}
-IMPL_LINK_NOARG ( RemoteFilesDialog, AddServiceHdl, Button*, void )
+IMPL_LINK_NOARG ( RemoteFilesDialog, AddServiceHdl, const OString&, void )
{
- PlaceEditDialog aDlg(GetFrameWeld());
+ PlaceEditDialog aDlg(m_xDialog.get());
aDlg.ShowPasswordControl();
short aRetCode = aDlg.run();
@@ -781,10 +541,10 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, AddServiceHdl, Button*, void )
if(!sPrefix.isEmpty())
sPrefix += ": ";
- m_pServices_lb->InsertEntry( sPrefix + newService->GetName() );
- m_pServices_lb->SelectEntryPos( m_pServices_lb->GetEntryCount() - 1 );
- m_pAddService_btn->SetPopupMenu( m_pAddMenu );
- SelectServiceHdl( *m_pServices_lb );
+ m_xServices_lb->append_text( sPrefix + newService->GetName() );
+ m_xServices_lb->set_active( m_xServices_lb->get_count() - 1 );
+ m_xAddService_bar->set_item_menu("add_service_btn", m_xAddService_menu.get());
+ SelectServiceHdl( *m_xServices_lb );
m_bIsUpdated = true;
@@ -798,31 +558,31 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, AddServiceHdl, Button*, void )
};
}
-IMPL_LINK_NOARG( RemoteFilesDialog, SelectServiceHdl, ListBox&, void )
+IMPL_LINK_NOARG( RemoteFilesDialog, SelectServiceHdl, weld::ComboBox&, void )
{
int nPos = GetSelectedServicePos();
if( nPos >= 0 )
{
OUString sURL = m_aServices[nPos]->GetUrl();
- m_pAddService_btn->SetPopupMenu( m_pAddMenu );
+ m_xAddService_bar->set_item_menu("add_service_btn", m_xAddService_menu.get());
m_bServiceChanged = true;
OpenURL( sURL );
}
}
-IMPL_LINK ( RemoteFilesDialog, EditServiceMenuHdl, MenuButton *, pButton, void )
+IMPL_LINK ( RemoteFilesDialog, EditServiceMenuHdl, const OString&, rIdent, void )
{
- OString sIdent( pButton->GetCurItemIdent() );
- if( sIdent == "edit_service" && m_pServices_lb->GetEntryCount() > 0 )
+ OString sIdent(rIdent);
+ if( sIdent == "edit_service" && m_xServices_lb->get_count() > 0 )
{
- unsigned int nSelected = m_pServices_lb->GetSelectedEntryPos();
+ int nSelected = m_xServices_lb->get_active();
int nPos = GetSelectedServicePos();
if( nPos >= 0 )
{
- PlaceEditDialog aDlg(GetFrameWeld(), m_aServices[nPos]);
+ PlaceEditDialog aDlg(m_xDialog.get(), m_aServices[nPos]);
short aRetCode = aDlg.run();
switch( aRetCode )
@@ -832,15 +592,15 @@ IMPL_LINK ( RemoteFilesDialog, EditServiceMenuHdl, MenuButton *, pButton, void )
ServicePtr pEditedService = aDlg.GetPlace();
m_aServices[nPos] = pEditedService;
- m_pServices_lb->RemoveEntry( nSelected );
+ m_xServices_lb->remove( nSelected );
OUString sPrefix = lcl_GetServiceType( pEditedService );
if(!sPrefix.isEmpty())
sPrefix += ": ";
- m_pServices_lb->InsertEntry( sPrefix + pEditedService->GetName(), nSelected );
- m_pServices_lb->SelectEntryPos( nSelected );
+ m_xServices_lb->insert_text(nSelected, sPrefix + pEditedService->GetName());
+ m_xServices_lb->set_active( nSelected );
m_bIsUpdated = true;
break;
@@ -855,16 +615,16 @@ IMPL_LINK ( RemoteFilesDialog, EditServiceMenuHdl, MenuButton *, pButton, void )
};
}
}
- if( sIdent == "delete_service" && m_pServices_lb->GetEntryCount() > 0 )
+ if( sIdent == "delete_service" && m_xServices_lb->get_count() > 0 )
{
- unsigned int nSelected = m_pServices_lb->GetSelectedEntryPos();
+ int nSelected = m_xServices_lb->get_active();
int nPos = GetSelectedServicePos();
if( nPos >= 0 )
{
OUString sMsg = FpsResId( STR_SVT_DELETESERVICE );
- sMsg = sMsg.replaceFirst( "$servicename$", m_pServices_lb->GetSelectedEntry() );
- std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetFrameWeld(),
+ sMsg = sMsg.replaceFirst( "$servicename$", m_xServices_lb->get_active_text() );
+ std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(),
VclMessageType::Question, VclButtonsType::YesNo, sMsg));
if (xBox->run() == RET_YES)
{
@@ -892,10 +652,10 @@ IMPL_LINK ( RemoteFilesDialog, EditServiceMenuHdl, MenuButton *, pButton, void )
{}
m_aServices.erase( m_aServices.begin() + nPos );
- m_pServices_lb->RemoveEntry( nSelected );
+ m_xServices_lb->remove( nSelected );
- m_pServices_lb->SetNoSelection();
- m_pAddService_btn->SetPopupMenu( nullptr );
+ m_xServices_lb->set_active(-1);
+ m_xAddService_bar->set_item_menu("add_service_btn", nullptr);
m_bIsUpdated = true;
@@ -950,128 +710,81 @@ IMPL_LINK ( RemoteFilesDialog, EditServiceMenuHdl, MenuButton *, pButton, void )
EnableControls();
}
-IMPL_LINK_NOARG( RemoteFilesDialog, DoubleClickHdl, SvTreeListBox*, bool )
+IMPL_LINK_NOARG( RemoteFilesDialog, DoubleClickHdl, SvtFileView*, bool )
{
- if( m_pFileView->GetSelectionCount() )
+ SvtContentEntry* pData = m_xFileView->FirstSelected();
+ if (pData)
{
- SvTreeListEntry* pEntry = m_pFileView->FirstSelected();
-
- if( pEntry )
- {
- SvtContentEntry* pData = static_cast< SvtContentEntry* >( pEntry->GetUserData() );
-
- if( pData )
- {
- if( !pData->mbIsFolder )
- {
- EndDialog( RET_OK );
- }
- else
- {
- OpenURL( pData->maURL );
- }
- }
- }
+ if (!pData->mbIsFolder)
+ m_xDialog->response(RET_OK);
+ else
+ OpenURL(pData->maURL);
}
-
return true;
}
-IMPL_LINK_NOARG( RemoteFilesDialog, SelectHdl, SvTreeListBox*, void )
+IMPL_LINK_NOARG( RemoteFilesDialog, SelectHdl, SvtFileView*, void )
{
- SvTreeListEntry* pEntry = m_pFileView->FirstSelected();
-
- if( pEntry )
+ SvtContentEntry* pData = m_xFileView->FirstSelected();
+ if (pData)
{
- SvtContentEntry* pData = static_cast< SvtContentEntry* >( pEntry->GetUserData() );
-
- if( pData )
+ if( ( pData->mbIsFolder && ( m_eType == REMOTEDLG_TYPE_PATHDLG ) )
+ || ( !pData->mbIsFolder && ( m_eType == REMOTEDLG_TYPE_FILEDLG ) ) )
{
- if( ( pData->mbIsFolder && ( m_eType == REMOTEDLG_TYPE_PATHDLG ) )
- || ( !pData->mbIsFolder && ( m_eType == REMOTEDLG_TYPE_FILEDLG ) ) )
- {
- // url must contain user info, because we need this info in recent files entry
- // (to fill user field in login box by default)
- INetURLObject aURL( pData->maURL );
- INetURLObject aCurrentURL( m_sLastServiceUrl );
- aURL.SetUser( aCurrentURL.GetUser() );
+ // url must contain user info, because we need this info in recent files entry
+ // (to fill user field in login box by default)
+ INetURLObject aURL( pData->maURL );
+ INetURLObject aCurrentURL( m_sLastServiceUrl );
+ aURL.SetUser( aCurrentURL.GetUser() );
- m_sPath = aURL.GetMainURL( INetURLObject::DecodeMechanism::NONE );
+ m_sPath = aURL.GetMainURL( INetURLObject::DecodeMechanism::NONE );
- m_pName_ed->SetText( aURL.GetLastName(INetURLObject::DecodeMechanism::WithCharset) );
- }
- else
+ m_xName_ed->set_text( aURL.GetLastName(INetURLObject::DecodeMechanism::WithCharset) );
+ }
+ else
+ {
+ if( m_eMode == REMOTEDLG_MODE_OPEN )
{
- if( m_eMode == REMOTEDLG_MODE_OPEN )
- {
- m_sPath.clear();
- m_pName_ed->SetText( "" );
- }
+ m_sPath.clear();
+ m_xName_ed->set_text( "" );
}
-
- EnableControls();
}
+
+ EnableControls();
}
}
-IMPL_LINK_NOARG( RemoteFilesDialog, FileNameGetFocusHdl, Control&, void )
+IMPL_LINK_NOARG(RemoteFilesDialog, FileNameGetFocusHdl, weld::Widget&, void)
{
- m_pFileView->SetNoSelection();
+ m_xFileView->SetNoSelection();
}
-IMPL_LINK_NOARG( RemoteFilesDialog, FileNameModifyHdl, Edit&, void )
+IMPL_LINK_NOARG(RemoteFilesDialog, FileNameModifyHdl, weld::Entry&, void)
{
- m_pFileView->SetNoSelection();
- if( !m_pOk_btn->IsEnabled() )
+ m_xFileView->SetNoSelection();
+ if (!m_xOk_btn->get_sensitive())
EnableControls();
}
-IMPL_LINK_NOARG( RemoteFilesDialog, SplitHdl, Splitter*, void )
+IMPL_LINK_NOARG( RemoteFilesDialog, SelectFilterHdl, weld::ComboBox&, void )
{
- sal_Int32 nSplitPos = m_pSplitter->GetSplitPosPixel();
-
- // Resize the tree list box
- sal_Int32 nPlaceX = m_pTreeView->GetPosPixel().X();
- Size placeSize = m_pTreeView->GetSizePixel();
- placeSize.setWidth( nSplitPos - nPlaceX );
- m_pTreeView->SetSizePixel( placeSize );
-
- // Change Pos and size of the fileview
- Point fileViewPos = m_pFileView->GetPosPixel();
- sal_Int32 nOldX = fileViewPos.X();
- sal_Int32 nNewX = nSplitPos + m_pSplitter->GetSizePixel().Width();
- fileViewPos.setX( nNewX );
- Size fileViewSize = m_pFileView->GetSizePixel();
- fileViewSize.AdjustWidth( -( nNewX - nOldX ) );
- m_pFileView->SetPosSizePixel( fileViewPos, fileViewSize );
-
- m_pSplitter->SetPosPixel( Point( placeSize.Width(), m_pSplitter->GetPosPixel().Y() ) );
-}
+ int nPos = m_xFilter_lb->get_active();
-IMPL_LINK_NOARG( RemoteFilesDialog, SelectFilterHdl, ListBox&, void )
-{
- unsigned int nPos = m_pFilter_lb->GetSelectedEntryPos();
-
- if( nPos != LISTBOX_ENTRY_NOTFOUND && !m_aFilters[nPos].second.isEmpty() )
+ if( nPos != -1 && !m_aFilters[nPos].second.isEmpty() )
{
m_nCurrentFilter = nPos;
- OUString sCurrentURL = m_pFileView->GetViewURL();
+ OUString sCurrentURL = m_xFileView->GetViewURL();
if( !sCurrentURL.isEmpty() && m_bIsConnected )
OpenURL( sCurrentURL );
}
}
-IMPL_LINK( RemoteFilesDialog, TreeSelectHdl, SvTreeListBox *, pBox, void )
+IMPL_LINK(RemoteFilesDialog, TreeSelectHdl, weld::TreeView&, rBox, void)
{
- OUString* sURL = static_cast< OUString* >( pBox->GetHdlEntry()->GetUserData() );
-
- if( sURL )
- {
- OpenURL( *sURL );
- m_pFileView->GrabFocus();
- }
+ OpenURL(rBox.get_selected_id());
+ m_xFileView->grab_focus();
}
IMPL_LINK ( RemoteFilesDialog, SelectBreadcrumbHdl, Breadcrumb*, pPtr, void )
@@ -1079,21 +792,21 @@ IMPL_LINK ( RemoteFilesDialog, SelectBreadcrumbHdl, Breadcrumb*, pPtr, void )
OpenURL( pPtr->GetHdlURL() );
}
-IMPL_LINK_NOARG ( RemoteFilesDialog, NewFolderHdl, Button*, void )
+IMPL_LINK_NOARG ( RemoteFilesDialog, NewFolderHdl, weld::Button&, void )
{
- m_pFileView->EndInplaceEditing();
+ m_xFileView->EndInplaceEditing();
// will be bound after InteractionHandler is enabled
SmartContent aContent;
aContent.enableDefaultInteractionHandler();
// now it can be bound
- aContent.bindTo( m_pFileView->GetViewURL() );
+ aContent.bindTo( m_xFileView->GetViewURL() );
if( !aContent.canCreateFolder() )
return;
OUString aTitle;
aContent.getTitle( aTitle );
- QueryFolderNameDialog aDlg(GetFrameWeld(), aTitle, FpsResId(STR_SVT_NEW_FOLDER));
+ QueryFolderNameDialog aDlg(m_xDialog.get(), aTitle, FpsResId(STR_SVT_NEW_FOLDER));
bool bHandled = false;
while( !bHandled )
@@ -1103,7 +816,7 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, NewFolderHdl, Button*, void )
OUString aUrl = aContent.createFolder(aDlg.GetName());
if( !aUrl.isEmpty() )
{
- m_pFileView->CreatedFolder(aUrl, aDlg.GetName());
+ m_xFileView->CreatedFolder(aUrl, aDlg.GetName());
bHandled = true;
}
}
@@ -1112,9 +825,9 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, NewFolderHdl, Button*, void )
}
}
-IMPL_LINK_NOARG ( RemoteFilesDialog, OkHdl, Button*, void )
+IMPL_LINK_NOARG ( RemoteFilesDialog, OkHdl, weld::Button&, void )
{
- OUString sNameNoExt = m_pName_ed->GetText();
+ OUString sNameNoExt = m_xName_ed->get_text();
OUString sPathNoExt;
// auto extension
@@ -1123,12 +836,12 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, OkHdl, Button*, void )
// check if file/path exists
- OUString sCurrentPath = m_pFileView->GetViewURL();
- OUString sSelectedItem = m_pFileView->GetCurrentURL();
- OUString sName = m_pName_ed->GetText();
+ OUString sCurrentPath = m_xFileView->GetViewURL();
+ OUString sSelectedItem = m_xFileView->GetCurrentURL();
+ OUString sName = m_xName_ed->get_text();
bool bFileDlg = ( m_eType == REMOTEDLG_TYPE_FILEDLG );
- bool bSelected = ( m_pFileView->GetSelectionCount() > 0 );
+ bool bSelected = ( m_xFileView->GetSelectionCount() > 0 );
if( !sCurrentPath.endsWith("/") )
sCurrentPath += "/";
@@ -1167,7 +880,7 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, OkHdl, Button*, void )
{
OUString sMsg = FpsResId( STR_SVT_ALREADYEXISTOVERWRITE );
sMsg = sMsg.replaceFirst( "$filename$", sName );
- std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetFrameWeld(),
+ std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(),
VclMessageType::Question, VclButtonsType::YesNo, sMsg));
if (xBox->run() != RET_YES)
return;
@@ -1178,10 +891,10 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, OkHdl, Button*, void )
if( ContentIsFolder( sPathNoExt ) )
{
OpenURL( sPathNoExt );
- m_pName_ed->SetText( "" );
+ m_xName_ed->set_text( "" );
- if( !bSelected )
- m_pName_ed->GrabFocus();
+ if (!bSelected)
+ m_xName_ed->grab_focus();
return;
}
@@ -1190,10 +903,10 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, OkHdl, Button*, void )
return;
}
- EndDialog( RET_OK );
+ m_xDialog->response(RET_OK);
}
-IMPL_LINK_NOARG ( RemoteFilesDialog, CancelHdl, Button*, void )
+IMPL_LINK_NOARG ( RemoteFilesDialog, CancelHdl, weld::Button&, void )
{
if( m_pCurrentAsyncAction.is() )
{
@@ -1202,15 +915,14 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, CancelHdl, Button*, void )
}
else
{
- EndDialog();
+ m_xDialog->response(RET_CANCEL);
}
}
// SvtFileDialog_Base
-
SvtFileView* RemoteFilesDialog::GetView()
{
- return m_pFileView;
+ return m_xFileView.get();
}
void RemoteFilesDialog::SetHasFilename( bool )
@@ -1220,7 +932,7 @@ void RemoteFilesDialog::SetHasFilename( bool )
void RemoteFilesDialog::SetBlackList( const css::uno::Sequence< OUString >& rBlackList )
{
m_aBlackList = rBlackList;
- m_pTreeView->SetBlackList( rBlackList );
+ m_xTreeView->SetBlackList( rBlackList );
}
const css::uno::Sequence< OUString >& RemoteFilesDialog::GetBlackList() const
@@ -1247,25 +959,25 @@ void RemoteFilesDialog::SetPath( const OUString& rNewURL )
INetURLObject aUrl( m_sPath );
OUString sFileName = aUrl.GetLastName( INetURLObject::DecodeMechanism::WithCharset );
- m_pName_ed->SetText( sFileName );
+ m_xName_ed->set_text( sFileName );
}
}
OUString RemoteFilesDialog::getCurrentFileText() const
{
OUString sReturn;
- if( m_pName_ed )
- sReturn = m_pName_ed->GetText();
+ if( m_xName_ed )
+ sReturn = m_xName_ed->get_text();
return sReturn;
}
void RemoteFilesDialog::setCurrentFileText( const OUString& rText, bool bSelectAll )
{
- if( m_pName_ed )
+ if (m_xName_ed)
{
- m_pName_ed->SetText( rText );
+ m_xName_ed->set_text(rText);
if( bSelectAll )
- m_pName_ed->SetSelection( Selection( 0, rText.getLength() ) );
+ m_xName_ed->select_region(0, -1);
}
}
@@ -1284,7 +996,7 @@ OUString RemoteFilesDialog::GetCurFilter() const
{
OUString sFilter;
- if( m_nCurrentFilter != LISTBOX_ENTRY_NOTFOUND )
+ if (m_nCurrentFilter != -1)
{
sFilter = m_aFilters[m_nCurrentFilter].first;
}
@@ -1299,7 +1011,7 @@ OUString RemoteFilesDialog::getCurFilter( ) const
void RemoteFilesDialog::SetCurFilter( const OUString& rFilter )
{
- DBG_ASSERT( !IsInExecute(), "SvtFileDialog::SetCurFilter: currently executing!" );
+ DBG_ASSERT( !m_bIsInExecute, "SvtFileDialog::SetCurFilter: currently executing!" );
// look for corresponding filter
sal_uInt16 nPos = m_aFilters.size();
@@ -1309,7 +1021,7 @@ void RemoteFilesDialog::SetCurFilter( const OUString& rFilter )
if ( m_aFilters[nPos].first == rFilter )
{
m_nCurrentFilter = nPos;
- m_pFilter_lb->SelectEntryPos( m_nCurrentFilter );
+ m_xFilter_lb->set_active( m_nCurrentFilter );
break;
}
}
@@ -1342,29 +1054,27 @@ void RemoteFilesDialog::UpdateControls( const OUString& rURL )
{
OUString sURL = m_aServices[nPos]->GetUrl();
- m_pPath->SetRootName( m_sRootLabel );
- m_pTreeView->Clear();
+ m_xPath->SetRootName( m_sRootLabel );
+ m_xTreeView->clear();
- SvTreeListEntry* pRoot = m_pTreeView->InsertEntry( m_sRootLabel, nullptr, true );
- OUString* sData = new OUString( rURL );
- pRoot->SetUserData( static_cast< void* >( sData ) );
+ m_xTreeView->InsertRootEntry(rURL, m_sRootLabel);
- m_pName_ed->GrabFocus();
+ m_xName_ed->grab_focus();
m_sLastServiceUrl = sURL;
m_bServiceChanged = false;
}
- m_pPath->SetURL( rURL );
+ m_xPath->SetURL( rURL );
- m_pTreeView->SetSelectHdl( Link<SvTreeListBox*,void>() );
+ m_xTreeView->connect_changed(Link<weld::TreeView&,void>());
// read cached data for this url and fill the tree
- const ::std::vector< SvtContentEntry >& rFolders = m_pFileView->GetContent();
+ const ::std::vector< SvtContentEntry >& rFolders = m_xFileView->GetContent();
::std::vector< std::pair< OUString, OUString > > aFolders;
- m_pName_ed->ClearEntries();
+ m_xName_ed->ClearEntries();
for(const auto & rFolder : rFolders)
{
@@ -1386,13 +1096,13 @@ void RemoteFilesDialog::UpdateControls( const OUString& rURL )
}
// add entries to the autocompletion mechanism
- m_pName_ed->AddEntry( sTitle );
+ m_xName_ed->AddEntry( sTitle );
}
}
- m_pTreeView->FillTreeEntry( rURL, aFolders );
+ m_xTreeView->FillTreeEntry( rURL, aFolders );
- m_pTreeView->SetSelectHdl( LINK( this, RemoteFilesDialog, TreeSelectHdl ) );
+ m_xTreeView->connect_changed( LINK( this, RemoteFilesDialog, TreeSelectHdl ) );
m_bIsConnected = true;
EnableControls();
@@ -1411,20 +1121,18 @@ const OUString& RemoteFilesDialog::GetPath()
std::vector<OUString> RemoteFilesDialog::GetPathList() const
{
std::vector<OUString> aList;
- sal_uLong nCount = m_pFileView->GetSelectionCount();
- SvTreeListEntry* pEntry = nCount ? m_pFileView->FirstSelected() : nullptr;
- while( pEntry )
- {
+ m_xFileView->selected_foreach([this, &aList](weld::TreeIter& rCurEntry){
// url must contain user info, because we need this info in recent files entry
// (to fill user field in login box by default)
- INetURLObject aURL( SvtFileView::GetURL( pEntry ) );
+ INetURLObject aURL(m_xFileView->GetURL(rCurEntry));
INetURLObject aCurrentURL( m_sLastServiceUrl );
aURL.SetUser( aCurrentURL.GetUser() );
aList.push_back( aURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
- pEntry = m_pFileView->NextSelected( pEntry );
- }
+
+ return false;
+ });
if( aList.empty() && !m_sPath.isEmpty() )
aList.push_back( m_sPath );
@@ -1489,12 +1197,6 @@ bool RemoteFilesDialog::ContentIsDocument( const OUString& rURL )
return false;
}
-sal_Int32 RemoteFilesDialog::getTargetColorDepth()
-{
- // This dialog doesn't contain preview
- return 0;
-}
-
sal_Int32 RemoteFilesDialog::getAvailableWidth()
{
// This dialog doesn't contain preview
@@ -1518,10 +1220,11 @@ bool RemoteFilesDialog::getShowState()
return false;
}
-Control* RemoteFilesDialog::getControl( sal_Int16, bool) const
+weld::Widget* RemoteFilesDialog::getControl( sal_Int16, bool) const
{
return nullptr;
}
+
void RemoteFilesDialog::enableControl( sal_Int16, bool )
{
}
diff --git a/fpicker/source/office/RemoteFilesDialog.hxx b/fpicker/source/office/RemoteFilesDialog.hxx
index ff0a3d6ce3e7..349a3f7d5d64 100644
--- a/fpicker/source/office/RemoteFilesDialog.hxx
+++ b/fpicker/source/office/RemoteFilesDialog.hxx
@@ -52,18 +52,13 @@ enum SvtRemoteDlgType
typedef std::shared_ptr< Place > ServicePtr;
-class FileViewContainer;
-
class RemoteFilesDialog : public SvtFileDialog_Base
{
public:
- RemoteFilesDialog( vcl::Window* pParent, PickerFlags nBits );
+ RemoteFilesDialog( weld::Window* pParent, PickerFlags nBits );
virtual ~RemoteFilesDialog() override;
- virtual void dispose() override;
- virtual void Resize() override;
- virtual short Execute() override;
- void Show();
+ virtual short run() override;
// SvtFileDialog_Base
@@ -97,7 +92,6 @@ public:
virtual void EnableAutocompletion( bool = true) override;
- virtual sal_Int32 getTargetColorDepth() override;
virtual sal_Int32 getAvailableWidth() override;
virtual sal_Int32 getAvailableHeight() override;
@@ -105,7 +99,7 @@ public:
virtual bool getShowState() override;
- virtual Control* getControl( sal_Int16 nControlId, bool bLabelControl = false ) const override;
+ virtual weld::Widget* getControl( sal_Int16 nControlId, bool bLabelControl = false ) const override;
virtual void enableControl( sal_Int16 nControlId, bool bEnable ) override;
virtual OUString getCurFilter( ) const override;
@@ -123,31 +117,33 @@ private:
int m_nWidth;
int m_nHeight;
+ bool m_bIsInExecute;
+
OUString m_sPath;
OUString m_sStdDir;
OUString m_sRootLabel;
OUString m_sLastServiceUrl;
- unsigned int m_nCurrentFilter;
+ int m_nCurrentFilter;
::rtl::Reference< ::svt::AsyncPickerAction > m_pCurrentAsyncAction;
css::uno::Sequence< OUString > m_aBlackList;
- VclPtr< PushButton > m_pOk_btn;
- VclPtr< CancelButton > m_pCancel_btn;
- VclPtr< MenuButton > m_pAddService_btn;
- VclPtr< ListBox > m_pServices_lb;
- VclPtr< Breadcrumb > m_pPath;
- VclPtr< PushButton > m_pNewFolder;
- VclPtr< PushButton > m_pListView_btn;
- VclPtr< PushButton > m_pIconView_btn;
- VclPtr< Splitter > m_pSplitter;
- VclPtr< FolderTree > m_pTreeView;
- VclPtr< SvtFileView > m_pFileView;
- VclPtr< FileViewContainer > m_pContainer;
- VclPtr< ListBox > m_pFilter_lb;
- VclPtr< AutocompleteEdit > m_pName_ed;
- VclPtr<PopupMenu> m_pAddMenu;
+ std::unique_ptr<weld::Button> m_xOk_btn;
+ std::unique_ptr<weld::Button> m_xCancel_btn;
+ std::unique_ptr<weld::Toolbar> m_xAddService_bar;
+ std::unique_ptr<weld::Menu> m_xAddService_menu;
+ std::unique_ptr<weld::ComboBox> m_xServices_lb;
+ std::unique_ptr<weld::Container> m_xPathContainer;
+ std::unique_ptr<Breadcrumb> m_xPath;
+ std::unique_ptr<weld::Button> m_xNewFolder;
+ std::unique_ptr<weld::ToggleButton> m_xListView_btn;
+ std::unique_ptr<weld::ToggleButton> m_xIconView_btn;
+ std::unique_ptr<FolderTree> m_xTreeView;
+ std::unique_ptr<SvtFileView> m_xFileView;
+ std::unique_ptr<weld::Container> m_xContainer;
+ std::unique_ptr<weld::ComboBox> m_xFilter_lb;
+ std::unique_ptr<AutocompleteEdit> m_xName_ed;
std::vector< ServicePtr > m_aServices;
std::vector< std::pair< OUString, OUString > > m_aFilters;
@@ -166,33 +162,33 @@ private:
void EnableControls();
void DisableControls();
- void SavePassword( const OUString& rURL, const OUString& rUser
- , const OUString& rPassword, bool bPersistent );
+ void SavePassword(const OUString& rURL, const OUString& rUser,
+ const OUString& rPassword, bool bPersistent);
- DECL_LINK ( AddServiceHdl, Button*, void );
- DECL_LINK ( SelectServiceHdl, ListBox&, void );
- DECL_LINK ( EditServiceMenuHdl, MenuButton *, void );
+ DECL_LINK ( AddServiceHdl, const OString&, void );
+ DECL_LINK ( SelectServiceHdl, weld::ComboBox&, void );
+ DECL_LINK ( EditServiceMenuHdl, const OString&, void );
- DECL_LINK( DoubleClickHdl, SvTreeListBox*, bool );
- DECL_LINK( SelectHdl, SvTreeListBox*, void );
+ DECL_LINK( DoubleClickHdl, SvtFileView*, bool );
+ DECL_LINK( SelectHdl, SvtFileView*, void );
- DECL_LINK( FileNameGetFocusHdl, Control&, void );
- DECL_LINK( FileNameModifyHdl, Edit&, void );
+ DECL_LINK( FileNameGetFocusHdl, weld::Widget&, void );
+ DECL_LINK( FileNameModifyHdl, weld::Entry&, void );
DECL_LINK( SplitHdl, Splitter*, void );
- DECL_LINK( SelectFilterHdl, ListBox&, void );
+ DECL_LINK( SelectFilterHdl, weld::ComboBox&, void );
- DECL_LINK( TreeSelectHdl, SvTreeListBox*, void );
+ DECL_LINK( TreeSelectHdl, weld::TreeView&, void );
DECL_LINK( SelectBreadcrumbHdl, Breadcrumb *, void );
- DECL_LINK( NewFolderHdl, Button*, void );
- DECL_LINK( IconViewHdl, Button*, void );
- DECL_LINK( ListViewHdl, Button*, void );
+ DECL_LINK( NewFolderHdl, weld::Button&, void );
+ DECL_LINK( IconViewHdl, weld::Button&, void );
+ DECL_LINK( ListViewHdl, weld::Button&, void );
- DECL_LINK( OkHdl, Button*, void );
- DECL_LINK( CancelHdl, Button*, void );
+ DECL_LINK( OkHdl, weld::Button&, void );
+ DECL_LINK( CancelHdl, weld::Button&, void );
};
#endif // INCLUDED_SVTOOLS_REMOTEFILESDIALOG_HXX
diff --git a/fpicker/source/office/asyncfilepicker.hxx b/fpicker/source/office/asyncfilepicker.hxx
index 6f4cb427b41e..830577f626d5 100644
--- a/fpicker/source/office/asyncfilepicker.hxx
+++ b/fpicker/source/office/asyncfilepicker.hxx
@@ -24,7 +24,6 @@
#include <rtl/ustring.hxx>
#include <com/sun/star/uno/Sequence.h>
#include <salhelper/simplereferenceobject.hxx>
-#include <vcl/vclptr.hxx>
class SvtFileView;
class SvtFileDialog_Base;
@@ -47,8 +46,8 @@ namespace svt
private:
Action m_eAction;
- VclPtr<SvtFileView> m_pView;
- VclPtr<SvtFileDialog_Base> m_pDialog;
+ SvtFileView* m_pView;
+ SvtFileDialog_Base* m_pDialog;
OUString m_sURL;
OUString m_sFileName;
bool m_bRunning;
diff --git a/fpicker/source/office/autocmpledit.cxx b/fpicker/source/office/autocmpledit.cxx
index d7b5f6359da3..f6dddd0e57fd 100644
--- a/fpicker/source/office/autocmpledit.cxx
+++ b/fpicker/source/office/autocmpledit.cxx
@@ -11,11 +11,20 @@
#include <vcl/svapp.hxx>
#include <vcl/event.hxx>
-AutocompleteEdit::AutocompleteEdit( vcl::Window* pParent )
- : Edit( pParent )
- , m_nCurrent( 0 )
+AutocompleteEdit::AutocompleteEdit(std::unique_ptr<weld::Entry> xEntry)
+ : m_xEntry(std::move(xEntry))
+ , m_nCurrent(0)
{
- SetAutocompleteHdl(LINK(this, AutocompleteEdit, AutoCompleteHdl_Impl));
+ m_xEntry->connect_changed(LINK(this, AutocompleteEdit, ChangedHdl));
+
+ m_aChangedIdle.SetInvokeHandler(LINK(this, AutocompleteEdit, TryAutoComplete));
+ m_aChangedIdle.SetDebugName("fpicker::AutocompleteEdit m_aChangedIdle");
+}
+
+IMPL_LINK_NOARG(AutocompleteEdit, ChangedHdl, weld::Entry&, void)
+{
+ m_aChangeHdl.Call(*m_xEntry);
+ m_aChangedIdle.Start(); //launch this to happen on idle after cursor position will have been set
}
void AutocompleteEdit::AddEntry( const OUString& rEntry )
@@ -29,18 +38,16 @@ void AutocompleteEdit::ClearEntries()
m_aMatching.clear();
}
-IMPL_LINK_NOARG(AutocompleteEdit, AutoCompleteHdl_Impl, Edit&, void)
+IMPL_LINK_NOARG(AutocompleteEdit, TryAutoComplete, Timer *, void)
{
- if( Application::AnyInput( VclInputFlags::KEYBOARD ) )
- return;
-
- OUString aCurText = GetText();
- Selection aSelection( GetSelection() );
+ OUString aCurText = m_xEntry->get_text();
- if( aSelection.Max() != aCurText.getLength() )
+ int nStartPos, nEndPos;
+ m_xEntry->get_selection_bounds(nStartPos, nEndPos);
+ if (std::max(nStartPos, nEndPos) != aCurText.getLength())
return;
- sal_uInt16 nLen = static_cast<sal_uInt16>(aSelection.Min());
+ auto nLen = std::min(nStartPos, nEndPos);
aCurText = aCurText.copy( 0, nLen );
if( aCurText.isEmpty() )
return;
@@ -50,11 +57,9 @@ IMPL_LINK_NOARG(AutocompleteEdit, AutoCompleteHdl_Impl, Edit&, void)
if( Match( aCurText ) )
{
m_nCurrent = 0;
- SetText( m_aMatching[0] );
- sal_uInt16 nNewLen = m_aMatching[0].getLength();
-
- Selection aSel( nLen, nNewLen );
- SetSelection( aSel );
+ m_xEntry->set_text(m_aMatching[0]);
+ auto nNewLen = m_aMatching[0].getLength();
+ m_xEntry->select_region(nLen, nNewLen);
}
}
}
@@ -77,6 +82,7 @@ bool AutocompleteEdit::Match( const OUString& rText )
return bRet;
}
+#if 0
bool AutocompleteEdit::PreNotify( NotifyEvent& rNEvt )
{
if( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
@@ -103,5 +109,6 @@ bool AutocompleteEdit::PreNotify( NotifyEvent& rNEvt )
return Edit::PreNotify( rNEvt );
}
+#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/office/autocmpledit.hxx b/fpicker/source/office/autocmpledit.hxx
index 89b431ebc9e0..03e05bf559a2 100644
--- a/fpicker/source/office/autocmpledit.hxx
+++ b/fpicker/source/office/autocmpledit.hxx
@@ -10,22 +10,38 @@
#ifndef INCLUDED_SVTOOLS_AUTOCMPLEDIT_HXX
#define INCLUDED_SVTOOLS_AUTOCMPLEDIT_HXX
-#include <vcl/edit.hxx>
+#include <vcl/idle.hxx>
+#include <vcl/weld.hxx>
#include <vector>
-class AutocompleteEdit : public Edit
+class AutocompleteEdit
{
private:
+ std::unique_ptr<weld::Entry> m_xEntry;
+
std::vector< OUString > m_aEntries;
std::vector< OUString > m_aMatching;
std::vector< OUString >::size_type m_nCurrent;
+ Idle m_aChangedIdle;
+ Link<weld::Entry&, void> m_aChangeHdl;
+
+ DECL_LINK(ChangedHdl, weld::Entry&, void);
+ DECL_LINK(TryAutoComplete, Timer*, void);
- DECL_LINK(AutoCompleteHdl_Impl, Edit&, void);
bool Match( const OUString& rText );
- bool PreNotify( NotifyEvent& rNEvt ) override;
public:
- AutocompleteEdit( vcl::Window* pParent );
+ AutocompleteEdit(std::unique_ptr<weld::Entry> xEntry);
+
+ void show() { m_xEntry->show(); }
+ void set_sensitive(bool bSensitive) { m_xEntry->set_sensitive(bSensitive); }
+ OUString get_text() const { return m_xEntry->get_text(); }
+ void set_text(const OUString& rText) { m_xEntry->set_text(rText); }
+ void grab_focus() { m_xEntry->grab_focus(); }
+ void select_region(int nStartPos, int nEndPos) { m_xEntry->select_region(nStartPos, nEndPos); }
+
+ void connect_changed(const Link<weld::Entry&, void>& rLink) { m_aChangeHdl = rLink; }
+ void connect_focus_in(const Link<weld::Widget&, void>& rLink) { m_xEntry->connect_focus_in(rLink); }
void AddEntry( const OUString& rEntry );
void ClearEntries();
diff --git a/fpicker/source/office/breadcrumb.cxx b/fpicker/source/office/breadcrumb.cxx
index 039664778056..1216a543a00d 100644
--- a/fpicker/source/office/breadcrumb.cxx
+++ b/fpicker/source/office/breadcrumb.cxx
@@ -8,76 +8,39 @@
*/
#include <tools/urlobj.hxx>
-#include <vcl/fixedhyper.hxx>
+#include <vcl/svapp.hxx>
#include "breadcrumb.hxx"
-class CustomLink : public FixedHyperlink
-{
-public:
- CustomLink( vcl::Window* pParent, WinBits nWinStyle )
- : FixedHyperlink( pParent, nWinStyle )
- {
- vcl::Font aFont = GetControlFont( );
- aFont.SetUnderline( LINESTYLE_NONE );
- SetControlFont( aFont );
- }
-
-protected:
- virtual void MouseMove( const MouseEvent& rMEvt ) override
- {
- // changes the style if the control is enabled
- if ( !rMEvt.IsLeaveWindow() && IsEnabled() )
- {
- vcl::Font aFont = GetControlFont( );
- aFont.SetUnderline( LINESTYLE_SINGLE );
- SetControlFont( aFont );
- }
- else
- {
- vcl::Font aFont = GetControlFont( );
- aFont.SetUnderline( LINESTYLE_NONE );
- SetControlFont( aFont );
- }
-
- FixedHyperlink::MouseMove( rMEvt );
- }
-};
-
-Breadcrumb::Breadcrumb( vcl::Window* pParent ) : VclHBox( pParent )
+Breadcrumb::Breadcrumb(weld::Container* pParent)
+ : m_pParent(pParent)
+ , m_nMaxWidth(m_pParent->get_preferred_size().Width())
{
+ m_pParent->connect_size_allocate(LINK(this, Breadcrumb, SizeAllocHdl));
m_eMode = SvtBreadcrumbMode::ONLY_CURRENT_PATH;
- set_spacing( SPACING );
appendField(); // root
}
-Breadcrumb::~Breadcrumb()
+IMPL_LINK(Breadcrumb, SizeAllocHdl, const Size&, rSize, void)
{
- disposeOnce();
+ m_nMaxWidth = rSize.Width();
}
-void Breadcrumb::dispose()
+Breadcrumb::~Breadcrumb()
{
- for( std::vector<VclPtr<FixedHyperlink>>::size_type i = 0; i < m_aLinks.size(); i++ )
- {
- m_aSeparators[i].disposeAndClear();
- m_aLinks[i].disposeAndClear();
- }
-
- VclHBox::dispose();
+ m_pParent->connect_size_allocate(Link<const Size&, void>());
}
void Breadcrumb::EnableFields( bool bEnable )
{
- VclHBox::Enable( bEnable );
if( bEnable )
{
INetURLObject aURL( m_aCurrentURL );
int nSegments = aURL.getSegmentCount();
- m_aLinks[nSegments]->Enable( false );
+ m_aSegments[nSegments]->m_xLink->set_sensitive(false);
}
}
-void Breadcrumb::SetClickHdl( const Link<Breadcrumb*,void>& rLink )
+void Breadcrumb::connect_clicked( const Link<Breadcrumb*,void>& rLink )
{
m_aClickHdl = rLink;
}
@@ -92,13 +55,13 @@ void Breadcrumb::SetRootName( const OUString& rURL )
m_sRootName = rURL;
// we changed root - clear all fields
- for( std::vector<VclPtr<FixedHyperlink>>::size_type i = 1; i < m_aLinks.size(); i++ )
+ for (size_t i = 1; i < m_aSegments.size(); ++i)
{
- m_aLinks[i]->SetText( "" );
+ m_aSegments[i]->m_xLink->set_label("");
- m_aLinks[i]->Hide();
- m_aSeparators[i]->Hide();
- m_aLinks[i]->Enable();
+ m_aSegments[i]->m_xLink->hide();
+ m_aSegments[i]->m_xSeparator->hide();
+ m_aSegments[i]->m_xLink->set_sensitive(true);
}
}
@@ -130,16 +93,16 @@ void Breadcrumb::SetURL( const OUString& rURL )
bool bClear = ( m_eMode == SvtBreadcrumbMode::ONLY_CURRENT_PATH );
// root field
-
- m_aLinks[0]->SetText( m_sRootName );
- m_aLinks[0]->Enable();
- m_aLinks[0]->SetURL( sRootPath );
+ m_aSegments[0]->m_xLink->set_label( m_sRootName );
+ m_aSegments[0]->m_xLink->set_sensitive(true);
+ m_aSegments[0]->m_xLink->set_uri(sRootPath);
+ m_aUris[m_aSegments[0]->m_xLink.get()] = sRootPath;
// fill the other fields
for( unsigned int i = 1; i < static_cast<unsigned int>(nSegments) + 1; i++ )
{
- if( i >= m_aLinks.size() )
+ if( i >= m_aSegments.size() )
appendField();
unsigned int nEnd = sPath.indexOf( '/', nPos + 1 );
@@ -147,37 +110,33 @@ void Breadcrumb::SetURL( const OUString& rURL )
if( m_eMode == SvtBreadcrumbMode::ALL_VISITED )
{
- if( m_aLinks[i]->GetText() != sLabel )
+ if( m_aSegments[i]->m_xLink->get_label() != sLabel )
bClear = true;
}
- m_aLinks[i]->SetText( sLabel );
- m_aLinks[i]->SetURL( sRootPath + sPath.copy( 0, nEnd ) );
- m_aLinks[i]->Hide();
- m_aLinks[i]->Enable();
+ m_aSegments[i]->m_xLink->set_label( sLabel );
+ m_aUris[m_aSegments[i]->m_xLink.get()] = sRootPath + sPath.copy(0, nEnd);
+ m_aSegments[i]->m_xLink->hide();
+ m_aSegments[i]->m_xLink->set_sensitive(true);
- m_aSeparators[i]->Hide();
+ m_aSegments[i]->m_xSeparator->hide();
nPos = nEnd;
}
// clear unused fields
-
- for( std::vector<VclPtr<FixedHyperlink>>::size_type i = nSegments + 1; i < m_aLinks.size(); i++ )
+ for (size_t i = nSegments + 1; i < m_aSegments.size(); i++ )
{
if( bClear )
- m_aLinks[i]->SetText( "" );
+ m_aSegments[i]->m_xLink->set_label( "" );
- m_aLinks[i]->Hide();
- m_aSeparators[i]->Hide();
- m_aLinks[i]->Enable();
+ m_aSegments[i]->m_xLink->hide();
+ m_aSegments[i]->m_xSeparator->hide();
+ m_aSegments[i]->m_xLink->set_sensitive(true);
}
// show fields
-
- Resize();
- unsigned int nMaxWidth = GetSizePixel().Width();
- unsigned int nSeparatorWidth = m_aSeparators[0]->GetSizePixel().Width();
+ unsigned int nSeparatorWidth = m_aSegments[0]->m_xSeparator->get_preferred_size().Width();
unsigned int nCurrentWidth = 0;
unsigned int nLastVisible = nSegments;
@@ -195,9 +154,9 @@ void Breadcrumb::SetURL( const OUString& rURL )
{
unsigned int nIndex = nSegments - i;
- if( showField( nIndex, nMaxWidth - nCurrentWidth ) )
+ if( showField( nIndex, m_nMaxWidth - nCurrentWidth ) )
{
- nCurrentWidth += m_aLinks[nIndex]->GetSizePixel().Width()
+ nCurrentWidth += m_aSegments[nIndex]->m_xLink->get_preferred_size().Width()
+ nSeparatorWidth + 2*SPACING;
}
else
@@ -205,27 +164,27 @@ void Breadcrumb::SetURL( const OUString& rURL )
// label is too long
if( nSegments != 0 )
{
- m_aLinks[0]->SetText( "..." );
- m_aLinks[0]->Enable( false );
+ m_aSegments[0]->m_xLink->set_label("...");
+ m_aSegments[0]->m_xLink->set_sensitive(false);
}
bLeft = false;
}
}
- if( nSegments + i == static_cast<int>(m_aLinks.size()) )
+ if( nSegments + i == static_cast<int>(m_aSegments.size()) )
bRight = false;
if( i != 0 && bRight )
{
unsigned int nIndex = nSegments + i;
- if( m_aLinks[nIndex]->GetText().isEmpty() )
+ if( m_aSegments[nIndex]->m_xLink->get_label().isEmpty() )
{
bRight = false;
}
- else if( showField( nIndex, nMaxWidth - nCurrentWidth ) )
+ else if( showField( nIndex, m_nMaxWidth - nCurrentWidth ) )
{
- nCurrentWidth += m_aLinks[nIndex]->GetSizePixel().Width()
+ nCurrentWidth += m_aSegments[nIndex]->m_xLink->get_preferred_size().Width()
+ nSeparatorWidth + 3*SPACING;
nLastVisible = nIndex;
}
@@ -239,10 +198,10 @@ void Breadcrumb::SetURL( const OUString& rURL )
}
// current dir should be inactive
- m_aLinks[nSegments]->Enable( false );
+ m_aSegments[nSegments]->m_xLink->set_sensitive(false);
// hide last separator
- m_aSeparators[nLastVisible]->Hide();
+ m_aSegments[nLastVisible]->m_xSeparator->hide();
}
void Breadcrumb::SetMode( SvtBreadcrumbMode eMode )
@@ -252,30 +211,29 @@ void Breadcrumb::SetMode( SvtBreadcrumbMode eMode )
void Breadcrumb::appendField()
{
- m_aLinks.push_back( VclPtr< CustomLink >::Create( this, WB_TABSTOP ) );
- m_aLinks[m_aLinks.size() - 1]->Hide();
- m_aLinks[m_aLinks.size() - 1]->SetClickHdl( LINK( this, Breadcrumb, ClickLinkHdl ) );
-
- m_aSeparators.push_back( VclPtr< FixedText >::Create( this ) );
- m_aSeparators[m_aLinks.size() - 1]->SetText( ">" );
- m_aSeparators[m_aLinks.size() - 1]->Hide();
+ m_aSegments.emplace_back(std::make_unique<BreadcrumbPath>(m_pParent));
+ size_t nIndex = m_aSegments.size() - 1;
+ m_aSegments[nIndex]->m_xLink->hide();
+ m_aSegments[nIndex]->m_xLink->connect_clicked( LINK( this, Breadcrumb, ClickLinkHdl ) );
+ m_aSegments[nIndex]->m_xSeparator->set_label( ">" );
+ m_aSegments[nIndex]->m_xSeparator->hide();
}
bool Breadcrumb::showField( unsigned int nIndex, unsigned int nWidthMax )
{
- m_aLinks[nIndex]->Show();
- m_aSeparators[nIndex]->Show();
+ m_aSegments[nIndex]->m_xLink->show();
+ m_aSegments[nIndex]->m_xSeparator->show();
- unsigned int nSeparatorWidth = m_aSeparators[0]->GetSizePixel().Width();
- unsigned int nWidth = m_aLinks[nIndex]->GetSizePixel().Width()
+ unsigned int nSeparatorWidth = m_aSegments[0]->m_xSeparator->get_preferred_size().Width();
+ unsigned int nWidth = m_aSegments[nIndex]->m_xLink->get_preferred_size().Width()
+ nSeparatorWidth + 3*SPACING;
if( nWidth > nWidthMax )
{
if( nIndex != 0 )
{
- m_aLinks[nIndex]->Hide();
- m_aSeparators[nIndex]->Hide();
+ m_aSegments[nIndex]->m_xLink->hide();
+ m_aSegments[nIndex]->m_xSeparator->hide();
}
return false;
@@ -284,10 +242,18 @@ bool Breadcrumb::showField( unsigned int nIndex, unsigned int nWidthMax )
return true;
}
-IMPL_LINK( Breadcrumb, ClickLinkHdl, FixedHyperlink&, rLink, void )
+IMPL_LINK( Breadcrumb, ClickLinkHdl, weld::LinkButton&, rLink, void )
{
- m_sClickedURL = rLink.GetURL();
+ m_sClickedURL = m_aUris[&rLink];
m_aClickHdl.Call( this );
}
+BreadcrumbPath::BreadcrumbPath(weld::Container* pContainer)
+ : m_xBuilder(Application::CreateBuilder(pContainer, "fps/ui/breadcrumb.ui"))
+ , m_xContainer(m_xBuilder->weld_container("container"))
+ , m_xLink(m_xBuilder->weld_link_button("link"))
+ , m_xSeparator(m_xBuilder->weld_label("label"))
+{
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/office/breadcrumb.hxx b/fpicker/source/office/breadcrumb.hxx
index 0fe53c4b821c..784ef32b9391 100644
--- a/fpicker/source/office/breadcrumb.hxx
+++ b/fpicker/source/office/breadcrumb.hxx
@@ -10,12 +10,10 @@
#ifndef INCLUDED_SVTOOLS_BREADCRUMB_HXX
#define INCLUDED_SVTOOLS_BREADCRUMB_HXX
-#include <vcl/layout.hxx>
-
+#include <vcl/weld.hxx>
+#include <map>
#include <vector>
-class FixedHyperlink;
-
#define SPACING 6
enum SvtBreadcrumbMode
@@ -24,40 +22,50 @@ enum SvtBreadcrumbMode
ALL_VISITED = 1
};
-class CustomLink;
+struct BreadcrumbPath
+{
+ BreadcrumbPath(weld::Container* pParent);
+ std::unique_ptr<weld::Builder> m_xBuilder;
+ std::unique_ptr<weld::Container> m_xContainer;
+ std::unique_ptr<weld::LinkButton> m_xLink;
+ std::unique_ptr<weld::Label> m_xSeparator;
+};
-class Breadcrumb : public VclHBox
+class Breadcrumb
{
- private:
- std::vector< VclPtr< CustomLink > > m_aLinks;
- std::vector< VclPtr< FixedText > > m_aSeparators;
+private:
+ weld::Container* m_pParent;
+ int m_nMaxWidth;
+
+ std::vector<std::unique_ptr<BreadcrumbPath>> m_aSegments;
+ std::map<weld::LinkButton*, OUString> m_aUris;
- OUString m_sRootName;
- OUString m_sClickedURL;
- OUString m_aCurrentURL;
+ OUString m_sRootName;
+ OUString m_sClickedURL;
+ OUString m_aCurrentURL;
- SvtBreadcrumbMode m_eMode;
+ SvtBreadcrumbMode m_eMode;
- Link<Breadcrumb*,void> m_aClickHdl;
+ Link<Breadcrumb*,void> m_aClickHdl;
- void appendField();
- bool showField( unsigned int nIndex, unsigned int nWidthMax );
+ void appendField();
+ bool showField( unsigned int nIndex, unsigned int nWidthMax );
- DECL_LINK( ClickLinkHdl, FixedHyperlink&, void );
+ DECL_LINK(SizeAllocHdl, const Size&, void);
+ DECL_LINK(ClickLinkHdl, weld::LinkButton&, void);
- public:
- Breadcrumb( vcl::Window* pParent );
- virtual ~Breadcrumb() override;
+public:
+ Breadcrumb(weld::Container* pParent);
+ ~Breadcrumb();
- void dispose() override;
- void EnableFields( bool bEnable );
+ void EnableFields( bool bEnable );
- void SetClickHdl( const Link<Breadcrumb*,void>& rLink );
- const OUString& GetHdlURL() const;
+ void connect_clicked( const Link<Breadcrumb*,void>& rLink );
+ const OUString& GetHdlURL() const;
- void SetRootName( const OUString& rURL );
- void SetURL( const OUString& rURL );
- void SetMode( SvtBreadcrumbMode eMode );
+ void SetRootName( const OUString& rURL );
+ void SetURL( const OUString& rURL );
+ void SetMode( SvtBreadcrumbMode eMode );
};
#endif
diff --git a/fpicker/source/office/commonpicker.cxx b/fpicker/source/office/commonpicker.cxx
index b52d4ed2f9ca..2b2413bdc024 100644
--- a/fpicker/source/office/commonpicker.cxx
+++ b/fpicker/source/office/commonpicker.cxx
@@ -52,7 +52,6 @@ namespace svt
OCommonPicker::OCommonPicker()
:OCommonPicker_Base( m_aMutex )
,OPropertyContainer( GetBroadcastHelper() )
- ,m_pDlg( nullptr )
,m_nCancelEvent( nullptr )
,m_bExecuting( false )
{
@@ -105,7 +104,7 @@ namespace svt
{
// set the title
if ( !m_aTitle.isEmpty() )
- m_pDlg->SetText( m_aTitle );
+ m_xDlg->set_title(m_aTitle);
}
}
@@ -121,11 +120,11 @@ namespace svt
{
::osl::MutexGuard aOwnGuard( m_aMutex );
- if ( m_bExecuting && m_pDlg )
- m_pDlg->EndDialog();
+ if ( m_bExecuting && m_xDlg )
+ m_xDlg->response(RET_CANCEL);
}
- m_pDlg.disposeAndClear();
+ m_xDlg.reset();
m_xWindow = nullptr;
m_xDialogParent = nullptr;
}
@@ -137,9 +136,7 @@ namespace svt
disposeComponent( m_xParentListenerAdapter );
}
-
// XEventListener
-
void SAL_CALL OCommonPicker::disposing( const EventObject& _rSource )
{
SolarMutexGuard aGuard;
@@ -150,11 +147,16 @@ namespace svt
{
stopWindowListening();
- if ( !bDialogDying ) // it's the parent which is dying -> delete the dialog
- m_pDlg.disposeAndClear();
- else
- m_pDlg.clear();
+ SAL_WARN_IF(bDialogDying && m_bExecuting, "fpicker.office", "unexpected disposing before response" );
+
+ // it's the parent which is dying -> delete the dialog
+ {
+ ::osl::MutexGuard aOwnGuard(m_aMutex);
+ if (m_bExecuting && m_xDlg)
+ m_xDlg->response(RET_CANCEL);
+ }
+ m_xDlg.reset();
m_xWindow = nullptr;
m_xDialogParent = nullptr;
}
@@ -164,9 +166,7 @@ namespace svt
}
}
-
// property set related methods
-
::cppu::IPropertyArrayHelper* OCommonPicker::createArrayHelper( ) const
{
Sequence< Property > aProps;
@@ -174,50 +174,51 @@ namespace svt
return new cppu::OPropertyArrayHelper( aProps );
}
-
::cppu::IPropertyArrayHelper& SAL_CALL OCommonPicker::getInfoHelper()
{
return *getArrayHelper();
}
-
Reference< XPropertySetInfo > SAL_CALL OCommonPicker::getPropertySetInfo( )
{
return ::cppu::OPropertySetHelper::createPropertySetInfo( getInfoHelper() );
}
-
- void SAL_CALL OCommonPicker::setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const Any& _rValue )
+ void SAL_CALL OCommonPicker::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& rValue)
{
- OPropertyContainer::setFastPropertyValue_NoBroadcast( _nHandle, _rValue );
+ OPropertyContainer::setFastPropertyValue_NoBroadcast(nHandle, rValue);
// if the HelpURL changed, forward this to the dialog
- if ( PROPERTY_ID_HELPURL == _nHandle )
- if ( m_pDlg )
- OControlAccess::setHelpURL( m_pDlg, m_sHelpURL, false );
+ if (PROPERTY_ID_HELPURL == nHandle && m_xDlg)
+ {
+ ::svt::OControlAccess aAccess(m_xDlg.get(), m_xDlg->GetView());
+ aAccess.setHelpURL(m_xDlg->getDialog(), m_sHelpURL);
+ }
}
-
bool OCommonPicker::createPicker()
{
- if ( !m_pDlg )
+ if ( !m_xDlg )
{
- m_pDlg.reset( implCreateDialog( VCLUnoHelper::GetWindow( m_xDialogParent ) ) );
- SAL_WARN_IF( !m_pDlg, "fpicker.office", "OCommonPicker::createPicker: invalid dialog returned!" );
+ m_xDlg = implCreateDialog(Application::GetFrameWeld(m_xDialogParent));
+ SAL_WARN_IF( !m_xDlg, "fpicker.office", "OCommonPicker::createPicker: invalid dialog returned!" );
- if ( m_pDlg )
+ if ( m_xDlg )
{
+ weld::Dialog* pDlg = m_xDlg->getDialog();
+
+ ::svt::OControlAccess aAccess(m_xDlg.get(), m_xDlg->GetView());
// synchronize the help id of the dialog without help URL property
if ( !m_sHelpURL.isEmpty() )
{ // somebody already set the help URL while we had no dialog yet
- OControlAccess::setHelpURL( m_pDlg, m_sHelpURL, false );
+ aAccess.setHelpURL(pDlg, m_sHelpURL);
}
else
{
- m_sHelpURL = OControlAccess::getHelpURL( m_pDlg, false );
+ m_sHelpURL = aAccess.getHelpURL(pDlg);
}
- m_xWindow = VCLUnoHelper::GetInterface( m_pDlg );
+ m_xWindow = pDlg->GetXWindow();
// add as event listener to the window
OSL_ENSURE( m_xWindow.is(), "OCommonPicker::createFileDialog: invalid window component!" );
@@ -227,10 +228,14 @@ namespace svt
// the adapter will add itself as listener, and forward notifications
}
- // _and_ add as event listener to the parent - in case the parent is destroyed
- // before we are disposed, our disposal would access dead VCL windows then...
- m_xDialogParent = VCLUnoHelper::GetInterface( m_pDlg->GetParent() );
- OSL_ENSURE( m_xDialogParent.is() || !m_pDlg->GetParent(), "OCommonPicker::createFileDialog: invalid window component (the parent this time)!" );
+ VclPtr<vcl::Window> xVclDialog(VCLUnoHelper::GetWindow(m_xWindow));
+ if (xVclDialog) // this block is quite possibly unnecessary by now
+ {
+ // _and_ add as event listener to the parent - in case the parent is destroyed
+ // before we are disposed, our disposal would access dead VCL windows then...
+ m_xDialogParent = VCLUnoHelper::GetInterface(xVclDialog->GetParent());
+ OSL_ENSURE(m_xDialogParent.is() || !xVclDialog->GetParent(), "OCommonPicker::createFileDialog: invalid window component (the parent this time)!");
+ }
if ( m_xDialogParent.is() )
{
m_xParentListenerAdapter = new OWeakEventListenerAdapter( this, m_xDialogParent );
@@ -239,12 +244,10 @@ namespace svt
}
}
- return nullptr != m_pDlg;
+ return nullptr != m_xDlg;
}
-
// XControlAccess functions
-
void SAL_CALL OCommonPicker::setControlProperty( const OUString& aControlName, const OUString& aControlProperty, const Any& aValue )
{
checkAlive();
@@ -252,12 +255,11 @@ namespace svt
SolarMutexGuard aGuard;
if ( createPicker() )
{
- ::svt::OControlAccess aAccess( m_pDlg, m_pDlg->GetView() );
+ ::svt::OControlAccess aAccess( m_xDlg.get(), m_xDlg->GetView() );
aAccess.setControlProperty( aControlName, aControlProperty, aValue );
}
}
-
Any SAL_CALL OCommonPicker::getControlProperty( const OUString& aControlName, const OUString& aControlProperty )
{
checkAlive();
@@ -265,16 +267,14 @@ namespace svt
SolarMutexGuard aGuard;
if ( createPicker() )
{
- ::svt::OControlAccess aAccess( m_pDlg, m_pDlg->GetView() );
+ ::svt::OControlAccess aAccess( m_xDlg.get(), m_xDlg->GetView() );
return aAccess.getControlProperty( aControlName, aControlProperty );
}
return Any();
}
-
// XControlInformation functions
-
Sequence< OUString > SAL_CALL OCommonPicker::getSupportedControls( )
{
checkAlive();
@@ -282,14 +282,13 @@ namespace svt
SolarMutexGuard aGuard;
if ( createPicker() )
{
- ::svt::OControlAccess aAccess( m_pDlg, m_pDlg->GetView() );
+ ::svt::OControlAccess aAccess( m_xDlg.get(), m_xDlg->GetView() );
return aAccess.getSupportedControls( );
}
return Sequence< OUString >();
}
-
sal_Bool SAL_CALL OCommonPicker::isControlSupported( const OUString& aControlName )
{
checkAlive();
@@ -303,7 +302,6 @@ namespace svt
return false;
}
-
Sequence< OUString > SAL_CALL OCommonPicker::getSupportedControlProperties( const OUString& aControlName )
{
checkAlive();
@@ -311,14 +309,13 @@ namespace svt
SolarMutexGuard aGuard;
if ( createPicker() )
{
- ::svt::OControlAccess aAccess( m_pDlg, m_pDlg->GetView() );
+ ::svt::OControlAccess aAccess( m_xDlg.get(), m_xDlg->GetView() );
return aAccess.getSupportedControlProperties( aControlName );
}
return Sequence< OUString >();
}
-
sal_Bool SAL_CALL OCommonPicker::isControlPropertySupported( const OUString& aControlName, const OUString& aControlProperty )
{
checkAlive();
@@ -326,7 +323,7 @@ namespace svt
SolarMutexGuard aGuard;
if ( createPicker() )
{
- ::svt::OControlAccess aAccess( m_pDlg, m_pDlg->GetView() );
+ ::svt::OControlAccess aAccess( m_xDlg.get(), m_xDlg->GetView() );
return aAccess.isControlPropertySupported( aControlName, aControlProperty );
}
@@ -387,11 +384,10 @@ namespace svt
m_nCancelEvent = Application::PostUserEvent( LINK( this, OCommonPicker, OnCancelPicker ) );
}
-
IMPL_LINK_NOARG(OCommonPicker, OnCancelPicker, void*, void)
{
// By definition, the solar mutex is locked when we arrive here. Note that this
- // is important, as for instance the consistency of m_pDlg depends on this mutex.
+ // is important, as for instance the consistency of m_xDlg depends on this mutex.
::osl::MutexGuard aGuard( m_aMutex );
m_nCancelEvent = nullptr;
@@ -401,14 +397,12 @@ namespace svt
// being executed at this time.
return;
- OSL_ENSURE( getDialog(), "OCommonPicker::OnCancelPicker: executing, but no dialog!" );
- if ( getDialog() )
- getDialog()->EndDialog();
+ OSL_ENSURE( m_xDlg, "OCommonPicker::OnCancelPicker: executing, but no dialog!" );
+ if (m_xDlg)
+ m_xDlg->response(RET_CANCEL);
}
-
// XInitialization functions
-
void SAL_CALL OCommonPicker::initialize( const Sequence< Any >& _rArguments )
{
checkAlive();
@@ -462,7 +456,6 @@ namespace svt
}
}
-
bool OCommonPicker::implHandleInitializationArgument( const OUString& _rName, const Any& _rValue )
{
bool bKnown = true;
@@ -470,15 +463,13 @@ namespace svt
{
m_xDialogParent.clear();
OSL_VERIFY( _rValue >>= m_xDialogParent );
- OSL_ENSURE( VCLUnoHelper::GetWindow( m_xDialogParent ), "OCommonPicker::implHandleInitializationArgument: invalid parent window given!" );
+ OSL_ENSURE( m_xDialogParent.is(), "OCommonPicker::implHandleInitializationArgument: invalid parent window given!" );
}
else
bKnown = false;
return bKnown;
}
-
} // namespace svt
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/office/commonpicker.hxx b/fpicker/source/office/commonpicker.hxx
index 1a379a22665f..e4c5e7125f38 100644
--- a/fpicker/source/office/commonpicker.hxx
+++ b/fpicker/source/office/commonpicker.hxx
@@ -31,10 +31,9 @@
#include <comphelper/proparrhlp.hxx>
#include <comphelper/uno3.hxx>
#include <tools/link.hxx>
-#include <vcl/vclptr.hxx>
class SvtFileDialog_Base;
-namespace vcl { class Window; }
+namespace weld { class Window; }
struct ImplSVEvent;
namespace svt
@@ -61,7 +60,6 @@ namespace svt
css::uno::Reference< css::awt::XWindow > m_xWindow;
// </properties>
- VclPtr<SvtFileDialog_Base> m_pDlg;
ImplSVEvent * m_nCancelEvent;
bool m_bExecuting;
@@ -75,7 +73,7 @@ namespace svt
OUString m_aDisplayDirectory;
protected:
- SvtFileDialog_Base* getDialog() { return m_pDlg; }
+ std::shared_ptr<SvtFileDialog_Base> m_xDlg;
const ::cppu::OBroadcastHelper& GetBroadcastHelper() const { return OCommonPicker_Base::rBHelper; }
::cppu::OBroadcastHelper& GetBroadcastHelper() { return OCommonPicker_Base::rBHelper; }
@@ -89,7 +87,7 @@ namespace svt
// overridables
// will be called with locked SolarMutex
- virtual VclPtr<SvtFileDialog_Base> implCreateDialog( vcl::Window* _pParent ) = 0;
+ virtual std::unique_ptr<SvtFileDialog_Base> implCreateDialog( weld::Window* pParent ) = 0;
virtual sal_Int16 implExecutePicker( ) = 0;
// do NOT override XExecutableDialog::execute! We need to do some stuff there ourself ...
diff --git a/fpicker/source/office/contentenumeration.hxx b/fpicker/source/office/contentenumeration.hxx
index 2b0be7d79a80..bb906ce44514 100644
--- a/fpicker/source/office/contentenumeration.hxx
+++ b/fpicker/source/office/contentenumeration.hxx
@@ -45,9 +45,11 @@ namespace svt
public:
OUString maType;
OUString maTargetURL;
- OUString maDisplayText;
+ OUString maDisplayName;
+ OUString maDisplaySize;
+ OUString maDisplayDate;
DateTime maModDate;
- Image maImage;
+ OUString maImage;
sal_Int64 maSize;
bool mbIsFolder;
bool mbIsVolume;
diff --git a/fpicker/source/office/fileview.cxx b/fpicker/source/office/fileview.cxx
index 719ea9232592..442e83276b41 100644
--- a/fpicker/source/office/fileview.cxx
+++ b/fpicker/source/office/fileview.cxx
@@ -17,55 +17,50 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <vcl/treelistbox.hxx>
#include <sal/config.h>
#include <sal/log.hxx>
#include <osl/diagnose.h>
-#include <vcl/treelistentry.hxx>
#include <svtools/svtresid.hxx>
#include <svtools/imagemgr.hxx>
#include <svtools/querydelete.hxx>
-#include <vcl/event.hxx>
-#include <vcl/headbar.hxx>
-#include <vcl/svtabbx.hxx>
#include <svtools/strings.hrc>
#include <bitmaps.hlst>
#include <toolkit/helper/vclunohelper.hxx>
#include "contentenumeration.hxx"
-#include <vcl/AccessibleBrowseBoxObjType.hxx>
#include <com/sun/star/task/InteractionHandler.hpp>
#include <com/sun/star/ucb/XProgressHandler.hpp>
#include <com/sun/star/ucb/XContent.hpp>
#include <com/sun/star/container/XChild.hpp>
#include <com/sun/star/ucb/CommandAbortedException.hpp>
-#include <vcl/waitobj.hxx>
-#include <vcl/settings.hxx>
#include <com/sun/star/ucb/XCommandInfo.hpp>
#include <com/sun/star/beans/XPropertySetInfo.hpp>
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <algorithm>
#include <vector>
+#include <tools/debug.hxx>
#include <tools/urlobj.hxx>
#include <comphelper/processfactory.hxx>
#include <comphelper/string.hxx>
#include <ucbhelper/content.hxx>
#include <ucbhelper/commandenvironment.hxx>
#include <rtl/math.hxx>
+#include <o3tl/typed_flags_set.hxx>
#include <osl/mutex.hxx>
#include <osl/conditn.hxx>
#include <salhelper/timer.hxx>
-#include <vcl/svapp.hxx>
-#include <vcl/dialog.hxx>
+#include <svtools/urlfilter.hxx>
#include <unotools/collatorwrapper.hxx>
#include <unotools/localedatawrapper.hxx>
#include <unotools/intlwrapper.hxx>
#include <unotools/syslocale.hxx>
-#include <svtools/urlfilter.hxx>
-#include <o3tl/typed_flags_set.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/commandevent.hxx>
+#include <vcl/event.hxx>
+#include <vcl/settings.hxx>
+#include <vcl/timer.hxx>
#include <memory>
#include "fileview.hxx"
-#include "iconview.hxx"
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::sdbc;
@@ -85,7 +80,6 @@ using ::svt::FolderDescriptor;
#define COLUMN_SIZE 3
#define COLUMN_DATE 4
-#define ROW_HEIGHT 17 // the height of a row has to be a little higher than the bitmap
#define QUICK_SEARCH_TIMEOUT 1500 // time in mSec before the quicksearch string will be reset
enum class FileViewFlags
@@ -120,68 +114,122 @@ namespace
}
-
-class ViewTabListBox_Impl : public SvHeaderTabListBox
+class ViewTabListBox_Impl
{
private:
Reference< XCommandEnvironment > mxCmdEnv;
- std::unique_ptr<VclBuilder> mxBuilder;
- VclPtr<PopupMenu> mxMenu;
+ std::unique_ptr<weld::TreeView> mxTreeView;
+ std::unique_ptr<weld::TreeIter> mxScratchIter;
::osl::Mutex maMutex;
- VclPtr<HeaderBar> mpHeaderBar;
SvtFileView_Impl* mpParent;
Timer maResetQuickSearch;
OUString maQuickSearchText;
OUString const msAccessibleDescText;
- OUString const msFolder;
- OUString const msFile;
sal_uInt32 mnSearchIndex;
- bool mbResizeDisabled : 1;
- bool mbAutoResize : 1;
- bool mbEnableDelete : 1;
+ bool mbEnableDelete;
+ bool mbEditing;
bool const mbShowHeader;
+ bool const mbShowType;
void DeleteEntries();
void DoQuickSearch( sal_Unicode rChar );
bool Kill( const OUString& rURL );
-protected:
- virtual bool DoubleClickHdl() override;
- virtual OUString GetAccessibleObjectDescription( ::vcl::AccessibleBrowseBoxObjType _eType, sal_Int32 _nPos = -1 ) const override;
-
public:
- ViewTabListBox_Impl( vcl::Window* pParentWin, SvtFileView_Impl* pParent, FileViewFlags nFlags );
- virtual ~ViewTabListBox_Impl() override;
- virtual void dispose() override;
+ ViewTabListBox_Impl(std::unique_ptr<weld::TreeView> xTreeView, weld::Window* pTopLevel, SvtFileView_Impl* pParent, FileViewFlags nFlags);
+ virtual ~ViewTabListBox_Impl();
+
+ std::unique_ptr<weld::TreeIter> make_iterator() const { return mxTreeView->make_iterator(); }
+ void insert(const OUString &rEntry, const OUString& rId, const OUString& rImage, weld::TreeIter& rIter)
+ {
+ mxTreeView->insert(nullptr, -1, &rEntry, &rId, nullptr, nullptr, &rImage, false, &rIter);
+ }
+ void append(const OUString& rId, const OUString& rStr, const OUString& rType, const OUString& rSize, const OUString& rDate, const OUString& rImage)
+ {
+ mxTreeView->insert(nullptr, -1, &rStr, &rId, nullptr, nullptr, &rImage, false, mxScratchIter.get());
+ int nCol = 1;
+ if (mbShowType)
+ mxTreeView->set_text(*mxScratchIter, rType, nCol++);
+ mxTreeView->set_text(*mxScratchIter, rSize, nCol++);
+ mxTreeView->set_text(*mxScratchIter, rDate, nCol++);
+ }
+
+ void scroll_to_row(const weld::TreeIter& rIter) { mxTreeView->scroll_to_row(rIter); }
+ void set_cursor(int nPos) { mxTreeView->set_cursor(nPos); }
+ void set_cursor(const weld::TreeIter& rIter) { mxTreeView->set_cursor(rIter); }
+ bool get_cursor(weld::TreeIter* pIter) const { return mxTreeView->get_cursor(pIter); }
+ bool get_iter_first(weld::TreeIter& rIter) const { return mxTreeView->get_iter_first(rIter); }
+ bool get_selected(weld::TreeIter* pIter) const { return mxTreeView->get_selected(pIter); }
+
+ OUString get_selected_text() const { return mxTreeView->get_selected_text(); }
- virtual void Resize() override;
- virtual void KeyInput( const KeyEvent& rKEvt ) override;
- virtual bool EditedEntry( SvTreeListEntry* pEntry, const OUString& rNewText ) override;
+ void unselect_all() { mxTreeView->unselect_all(); }
- void ClearAll();
- HeaderBar* GetHeaderBar() const { return mpHeaderBar; }
+ OUString get_id(const weld::TreeIter& rIter) { return mxTreeView->get_id(rIter); }
+
+ void connect_row_activated(const Link<weld::TreeView&, bool>& rLink) { mxTreeView->connect_row_activated(rLink); }
+ void connect_changed(const Link<weld::TreeView&, void>& rLink) { mxTreeView->connect_changed(rLink); }
+
+ int n_children() const { return mxTreeView->n_children(); }
+
+ void freeze() { mxTreeView->freeze(); }
+ void thaw() { mxTreeView->thaw(); }
+
+ void show() { mxTreeView->show(); }
+ void hide() { mxTreeView->hide(); }
+ bool get_visible() const { return mxTreeView->get_visible(); }
+
+ int count_selected_rows() const { return mxTreeView->count_selected_rows(); }
+
+ void grab_focus() { mxTreeView->grab_focus(); }
+ bool has_focus() const { return mxTreeView->has_focus(); }
+
+ void set_help_id(const OString& rHelpId) { mxTreeView->set_help_id(rHelpId); }
+ OString get_help_id() const { return mxTreeView->get_help_id(); }
+
+ bool IsEditingActive() const { return mbEditing; }
+
+ void end_editing()
+ {
+ mxTreeView->end_editing();
+ mxTreeView->connect_editing(Link<const weld::TreeIter&, bool>(), Link<const IterString&, bool>());
+ mbEditing = false;
+ }
+
+ void selected_foreach(const std::function<bool(weld::TreeIter&)>& func)
+ {
+ mxTreeView->selected_foreach(func);
+ }
+
+ weld::TreeView* getWidget() const
+ {
+ return mxTreeView.get();
+ }
+
+ void clear() { mxTreeView->clear(); }
- void EnableAutoResize() { mbAutoResize = true; }
void EnableDelete( bool bEnable ) { mbEnableDelete = bEnable; }
+ bool TypeColumnVisible() const { return mbShowType; }
const Reference< XCommandEnvironment >& GetCommandEnvironment() const { return mxCmdEnv; }
DECL_LINK(ResetQuickSearch_Impl, Timer *, void);
+ DECL_LINK(CommandHdl, const CommandEvent&, bool);
+ DECL_LINK(EditingEntryHdl, const weld::TreeIter&, bool);
+ typedef std::pair<const weld::TreeIter&, OUString> IterString;
+ DECL_LINK(EditedEntryHdl, const IterString&, bool);
+ DECL_LINK(KeyInputHdl, const KeyEvent&, bool);
- virtual VclPtr<PopupMenu> CreateContextMenu() override;
- virtual void ExecuteContextMenuAction( sal_uInt16 nSelectedPopentry ) override;
+ void ExecuteContextMenuAction(const OString& rSelectedPopentry);
};
-
//= SvtFileView_Impl
-
-
class SvtFileView_Impl :public ::svt::IEnumerationResultHandler
{
protected:
- VclPtr<SvtFileView> mpAntiImpl;
- Link<SvTreeListBox*,void> m_aSelectHandler;
+ SvtFileView* m_pAntiImpl;
+ Link<SvtFileView*,void> m_aSelectHandler;
::rtl::Reference< ::svt::FileViewContentEnumerator >
m_xContentEnumerator;
@@ -194,12 +242,13 @@ protected:
public:
- ::std::vector< std::unique_ptr<SortingData_Impl> > maContent;
+ ::std::vector<std::unique_ptr<SortingData_Impl>> maContent;
+ ::std::vector<std::unique_ptr<SvtContentEntry>> maEntries;
::osl::Mutex maMutex;
- VclPtr<SvTreeListBox> mpCurView;
- VclPtr<ViewTabListBox_Impl> mpView;
- VclPtr<IconView> mpIconView;
+ weld::Window* m_pTopLevel;
+ std::unique_ptr<ViewTabListBox_Impl> mxView;
+ std::unique_ptr<weld::IconView> mxIconView;
sal_uInt16 mnSortColumn;
bool mbAscending : 1;
bool const mbOnlyFolder : 1;
@@ -210,14 +259,20 @@ public:
OUString maViewURL;
OUString maCurrentFilter;
- Image const maFolderImage;
+ OUString maFolderImage;
Link<SvtFileView*,void> maOpenDoneLink;
+ Link<SvtFileView*,bool> maDoubleClickHandler;
+
Reference< XCommandEnvironment > mxCmdEnv;
- SvtFileView_Impl( SvtFileView* pAntiImpl, Reference < XCommandEnvironment > const & xEnv,
- FileViewFlags nFlags,
- bool bOnlyFolder );
- virtual ~SvtFileView_Impl();
+ SvtFileView_Impl(SvtFileView* pAntiImpl, weld::Window* pTopLevel,
+ std::unique_ptr<weld::TreeView> xTreeView,
+ std::unique_ptr<weld::IconView> xIconView,
+ Reference < XCommandEnvironment > const & xEnv,
+ FileViewFlags nFlags,
+ bool bOnlyFolder);
+
+ virtual ~SvtFileView_Impl();
void Clear();
@@ -234,17 +289,17 @@ public:
void CancelRunningAsyncAction();
void OpenFolder_Impl();
- static void ReplaceTabWithString( OUString& aValue );
+ static OUString ReplaceTabWithString(const OUString& rValue);
void CreateDisplayText_Impl();
void SortFolderContent_Impl();
void EntryRemoved( const OUString& rURL );
void EntryRenamed( OUString& rURL,
const OUString& rName );
- OUString FolderInserted( const OUString& rURL,
+ const SortingData_Impl& FolderInserted( const OUString& rURL,
const OUString& rTitle );
- sal_uLong GetEntryPos( const OUString& rURL );
+ int GetEntryPos( const OUString& rURL );
void SetViewMode( FileViewMode eMode );
@@ -255,17 +310,46 @@ public:
const OUString& rTitle,
bool bWrapAround );
- void SetSelectHandler( const Link<SvTreeListBox*,void>& _rHdl );
+ void SetSelectHandler( const Link<SvtFileView*,void>& rHdl );
+ void SetDoubleClickHandler(const Link<SvtFileView*,bool>& rHdl);
- void InitSelection();
void ResetCursor();
- inline void EndEditing();
+ void EndEditing()
+ {
+ if (mxView->IsEditingActive())
+ mxView->end_editing();
+ }
+
+ void onTimeout();
+
+ void grab_focus()
+ {
+ if (mxView->get_visible())
+ mxView->grab_focus();
+ else
+ mxIconView->grab_focus();
+ }
+
+ bool has_focus() const
+ {
+ return mxView->has_focus() || mxIconView->has_focus();
+ }
- void onTimeout();
+ int GetSortColumn() const
+ {
+ sal_uInt16 nOldSortID = mnSortColumn;
+ // skip "TYPE"
+ if (!mxView->TypeColumnVisible() && nOldSortID != COLUMN_TITLE)
+ --nOldSortID;
+ return nOldSortID - 1;
+ }
protected:
- DECL_LINK( SelectionMultiplexer, SvTreeListBox*, void );
+ DECL_LINK(ChangedHdl, weld::TreeView&, void);
+ DECL_LINK(SelectionChangedHdl, weld::IconView&, void);
+ DECL_LINK(RowActivatedHdl, weld::TreeView&, bool);
+ DECL_LINK(ItemActivatedHdl, weld::IconView&, bool);
// IEnumerationResultHandler overridables
virtual void enumerationDone( ::svt::EnumerationResult eResult ) override;
@@ -274,13 +358,7 @@ protected:
inline void SvtFileView_Impl::EnableDelete( bool bEnable )
{
- mpView->EnableDelete( bEnable );
-}
-
-inline void SvtFileView_Impl::EndEditing()
-{
- if ( mpCurView->IsEditingActive() )
- mpCurView->EndEditing();
+ mxView->EnableDelete( bEnable );
}
namespace
@@ -330,80 +408,49 @@ namespace
}
}
-ViewTabListBox_Impl::ViewTabListBox_Impl( vcl::Window* pParentWin,
- SvtFileView_Impl* pParent,
- FileViewFlags nFlags ) :
-
- SvHeaderTabListBox( pParentWin, WB_TABSTOP ),
-
- mpHeaderBar ( nullptr ),
- mpParent ( pParent ),
- msAccessibleDescText( SvtResId(STR_SVT_ACC_DESC_FILEVIEW) ),
- msFolder ( SvtResId(STR_SVT_ACC_DESC_FOLDER) ),
- msFile ( SvtResId(STR_SVT_ACC_DESC_FILE) ),
- mnSearchIndex ( 0 ),
- mbResizeDisabled ( false ),
- mbAutoResize ( false ),
- mbEnableDelete ( false ),
- mbShowHeader ( !(nFlags & FileViewFlags::SHOW_NONE) )
-{
- Size aBoxSize = pParentWin->GetSizePixel();
- mpHeaderBar = VclPtr<HeaderBar>::Create( pParentWin, WB_BUTTONSTYLE | WB_BOTTOMBORDER );
- mpHeaderBar->SetPosSizePixel( Point( 0, 0 ), mpHeaderBar->CalcWindowSizePixel() );
-
- HeaderBarItemBits nBits = HeaderBarItemBits::LEFT | HeaderBarItemBits::CLICKABLE;
-
- long aTabPositions[] = { 20, 180, 320, 400, 600 };
- SetTabs(SAL_N_ELEMENTS(aTabPositions), aTabPositions, MapUnit::MapPixel);
- SetTabJustify(2, SvTabJustify::AdjustRight); // column "Size"
-
- mpHeaderBar->InsertItem(COLUMN_TITLE, SvtResId(STR_SVT_FILEVIEW_COLUMN_TITLE), 180, nBits | HeaderBarItemBits::UPARROW);
+ViewTabListBox_Impl::ViewTabListBox_Impl(std::unique_ptr<weld::TreeView> xTreeView,
+ weld::Window* pTopLevel,
+ SvtFileView_Impl* pParent,
+ FileViewFlags nFlags)
+ : mxTreeView(std::move(xTreeView))
+ , mxScratchIter(mxTreeView->make_iterator())
+ , mpParent( pParent )
+ , mnSearchIndex( 0 )
+ , mbEnableDelete( false )
+ , mbEditing( false )
+ , mbShowHeader( !(nFlags & FileViewFlags::SHOW_NONE) )
+ , mbShowType(nFlags & FileViewFlags::SHOW_TYPE)
+{
+ std::vector<int> aWidths;
+ aWidths.push_back(180);
if (nFlags & FileViewFlags::SHOW_TYPE)
- {
- mpHeaderBar->InsertItem(COLUMN_TYPE, SvtResId(STR_SVT_FILEVIEW_COLUMN_TYPE), 140, nBits);
- }
- mpHeaderBar->InsertItem(COLUMN_SIZE, SvtResId(STR_SVT_FILEVIEW_COLUMN_SIZE), 80, nBits);
- mpHeaderBar->InsertItem(COLUMN_DATE, SvtResId(STR_SVT_FILEVIEW_COLUMN_DATE), 500, nBits);
-
- Size aHeadSize = mpHeaderBar->GetSizePixel();
- SetPosSizePixel( Point( 0, aHeadSize.Height() ),
- Size( aBoxSize.Width(), aBoxSize.Height() - aHeadSize.Height() ) );
- InitHeaderBar( mpHeaderBar );
- SetHighlightRange();
- SetEntryHeight( ROW_HEIGHT );
- if (nFlags & FileViewFlags::MULTISELECTION)
- SetSelectionMode( SelectionMode::Multiple );
+ aWidths.push_back(140);
+ aWidths.push_back(80);
+ mxTreeView->set_column_fixed_widths(aWidths);
- Show();
- if( mbShowHeader )
- mpHeaderBar->Show();
+ if (nFlags & FileViewFlags::MULTISELECTION)
+ mxTreeView->set_selection_mode(SelectionMode::Multiple);
maResetQuickSearch.SetTimeout( QUICK_SEARCH_TIMEOUT );
maResetQuickSearch.SetInvokeHandler( LINK( this, ViewTabListBox_Impl, ResetQuickSearch_Impl ) );
Reference< XComponentContext > xContext = ::comphelper::getProcessComponentContext();
Reference< XInteractionHandler > xInteractionHandler(
- InteractionHandler::createWithParent(xContext, VCLUnoHelper::GetInterface(GetParentDialog())), UNO_QUERY_THROW );
+ InteractionHandler::createWithParent(xContext, pTopLevel->GetXWindow()), UNO_QUERY_THROW);
mxCmdEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, Reference< XProgressHandler >() );
- EnableContextMenuHandling();
+ mxTreeView->connect_popup_menu(LINK(this, ViewTabListBox_Impl, CommandHdl));
+ mxTreeView->connect_key_press(LINK(this, ViewTabListBox_Impl, KeyInputHdl));
}
-ViewTabListBox_Impl::~ViewTabListBox_Impl()
+IMPL_LINK_NOARG(ViewTabListBox_Impl, EditingEntryHdl, const weld::TreeIter&, bool)
{
- disposeOnce();
+ return mbEditing;
}
-void ViewTabListBox_Impl::dispose()
+ViewTabListBox_Impl::~ViewTabListBox_Impl()
{
- maResetQuickSearch.Stop();
-
- mxMenu.disposeAndClear();
- mxBuilder.reset();
-
- mpHeaderBar.disposeAndClear();
- SvHeaderTabListBox::dispose();
}
IMPL_LINK_NOARG(ViewTabListBox_Impl, ResetQuickSearch_Impl, Timer *, void)
@@ -414,47 +461,17 @@ IMPL_LINK_NOARG(ViewTabListBox_Impl, ResetQuickSearch_Impl, Timer *, void)
mnSearchIndex = 0;
}
-
-void ViewTabListBox_Impl::Resize()
+IMPL_LINK(ViewTabListBox_Impl, KeyInputHdl, const KeyEvent&, rKEvt, bool)
{
- SvTabListBox::Resize();
- Size aBoxSize = Control::GetParent()->GetOutputSizePixel();
-
- if ( mbResizeDisabled || !aBoxSize.Width() )
- return;
-
- Size aBarSize;
- if ( mbShowHeader )
- {
- aBarSize = mpHeaderBar->GetSizePixel();
- aBarSize.setWidth( mbAutoResize ? aBoxSize.Width() : GetSizePixel().Width() );
- mpHeaderBar->SetSizePixel( aBarSize );
- }
-
- if ( mbAutoResize )
- {
- mbResizeDisabled = true;
- SetPosSizePixel( Point( 0, aBarSize.Height() ),
- Size( aBoxSize.Width(), aBoxSize.Height() - aBarSize.Height() ) );
- mbResizeDisabled = false;
- }
-}
-
+ if (mbEditing)
+ return false;
-void ViewTabListBox_Impl::KeyInput( const KeyEvent& rKEvt )
-{
bool bHandled = false;
const vcl::KeyCode& rKeyCode = rKEvt.GetKeyCode();
if ( 0 == rKeyCode.GetModifier() )
{
- if ( rKeyCode.GetCode() == KEY_RETURN )
- {
- ResetQuickSearch_Impl( nullptr );
- GetDoubleClickHdl().Call( this );
- bHandled = true;
- }
- else if ( ( rKeyCode.GetCode() == KEY_DELETE ) &&
+ if ( ( rKeyCode.GetCode() == KEY_DELETE ) &&
mbEnableDelete )
{
ResetQuickSearch_Impl( nullptr );
@@ -469,131 +486,125 @@ void ViewTabListBox_Impl::KeyInput( const KeyEvent& rKEvt )
}
}
- if ( !bHandled )
- {
+ if (!bHandled)
ResetQuickSearch_Impl( nullptr );
- SvHeaderTabListBox::KeyInput( rKEvt );
- }
+ return bHandled;
}
-
-VclPtr<PopupMenu> ViewTabListBox_Impl::CreateContextMenu()
+IMPL_LINK(ViewTabListBox_Impl, CommandHdl, const CommandEvent&, rCEvt, bool)
{
+ if (rCEvt.GetCommand() != CommandEventId::ContextMenu)
+ return false;
+
bool bEnableDelete = mbEnableDelete;
bool bEnableRename = true;
- if ( bEnableDelete || bEnableRename )
- {
- sal_Int32 nSelectedEntries = GetSelectionCount();
- bEnableDelete &= nSelectedEntries > 0;
- bEnableRename &= nSelectedEntries == 1;
- }
+ int nCount = 0;
+ mxTreeView->selected_foreach([this, &nCount, &bEnableDelete, &bEnableRename](weld::TreeIter& rEntry){
+ ++nCount;
- if ( bEnableDelete || bEnableRename )
- {
- SvTreeListEntry* pEntry = FirstSelected();
- while ( pEntry )
+ ::ucbhelper::Content aCnt;
+ try
+ {
+ OUString aURL(reinterpret_cast<SvtContentEntry*>(
+ mxTreeView->get_id(rEntry).toInt64())->maURL);
+ aCnt = ::ucbhelper::Content( aURL, mxCmdEnv, comphelper::getProcessComponentContext() );
+ }
+ catch( Exception const & )
+ {
+ bEnableDelete = bEnableRename = false;
+ }
+
+ if ( bEnableDelete )
{
- ::ucbhelper::Content aCnt;
try
{
- OUString aURL( static_cast< SvtContentEntry * >(
- pEntry->GetUserData() )->maURL );
- aCnt = ::ucbhelper::Content( aURL, mxCmdEnv, comphelper::getProcessComponentContext() );
+ Reference< XCommandInfo > aCommands = aCnt.getCommands();
+ if ( aCommands.is() )
+ bEnableDelete = aCommands->hasCommandByName( "delete" );
+ else
+ bEnableDelete = false;
}
catch( Exception const & )
{
- bEnableDelete = bEnableRename = false;
+ bEnableDelete = false;
}
+ }
- if ( bEnableDelete )
+ if ( bEnableRename )
+ {
+ try
{
- try
+ Reference< XPropertySetInfo > aProps = aCnt.getProperties();
+ if ( aProps.is() )
{
- Reference< XCommandInfo > aCommands = aCnt.getCommands();
- if ( aCommands.is() )
- bEnableDelete = aCommands->hasCommandByName( "delete" );
- else
- bEnableDelete = false;
- }
- catch( Exception const & )
- {
- bEnableDelete = false;
+ Property aProp = aProps->getPropertyByName("Title");
+ bEnableRename
+ = !( aProp.Attributes & PropertyAttribute::READONLY );
}
+ else
+ bEnableRename = false;
}
-
- if ( bEnableRename )
+ catch( Exception const & )
{
- try
- {
- Reference< XPropertySetInfo > aProps = aCnt.getProperties();
- if ( aProps.is() )
- {
- Property aProp = aProps->getPropertyByName("Title");
- bEnableRename
- = !( aProp.Attributes & PropertyAttribute::READONLY );
- }
- else
- bEnableRename = false;
- }
- catch( Exception const & )
- {
- bEnableRename = false;
- }
+ bEnableRename = false;
}
-
- pEntry = ( bEnableDelete || bEnableRename )
- ? NextSelected( pEntry )
- : nullptr;
}
- }
- if ( bEnableDelete || bEnableRename )
+ bool bStop = !bEnableDelete && !bEnableRename;
+ return bStop;
+ });
+
+ if (nCount == 0)
+ bEnableDelete = false;
+ if (nCount != 1)
+ bEnableRename = false;
+
+ if (bEnableDelete || bEnableRename)
{
- mxMenu.disposeAndClear();
- mxBuilder.reset(new VclBuilder(nullptr, VclBuilderContainer::getUIRootDir(), "svt/ui/fileviewmenu.ui", ""));
- mxMenu.set(mxBuilder->get_menu("menu"));
- mxMenu->EnableItem(mxMenu->GetItemId("delete"), bEnableDelete);
- mxMenu->EnableItem(mxMenu->GetItemId("rename"), bEnableRename);
- mxMenu->RemoveDisabledEntries( true, true );
- return mxMenu;
+ std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(mxTreeView.get(), "svt/ui/fileviewmenu.ui"));
+ auto xContextMenu = xBuilder->weld_menu("menu");
+ xContextMenu->set_visible("delete", bEnableDelete);
+ xContextMenu->set_visible("rename", bEnableRename);
+ OString sCommand(xContextMenu->popup_at_rect(mxTreeView.get(), tools::Rectangle(rCEvt.GetMousePosPixel(), Size(1,1))));
+ ExecuteContextMenuAction(sCommand);
}
- return nullptr;
+ return true;
}
-void ViewTabListBox_Impl::ExecuteContextMenuAction( sal_uInt16 nSelectedPopupEntry )
+void ViewTabListBox_Impl::ExecuteContextMenuAction(const OString& rSelectedPopupEntry)
{
- if (nSelectedPopupEntry == mxMenu->GetItemId("delete"))
+ if (rSelectedPopupEntry == "delete")
DeleteEntries();
- else if (nSelectedPopupEntry == mxMenu->GetItemId("rename"))
- EditEntry( FirstSelected() );
-}
+ else if (rSelectedPopupEntry == "rename")
+ {
+ std::unique_ptr<weld::TreeIter> xEntry = mxTreeView->make_iterator();
+ if (mxTreeView->get_selected(xEntry.get()))
+ {
+ mbEditing = true;
-void ViewTabListBox_Impl::ClearAll()
-{
- for ( sal_uLong i = 0; i < GetEntryCount(); ++i )
- delete static_cast<SvtContentEntry*>(GetEntry(i)->GetUserData());
- Clear();
-}
+ mxTreeView->connect_editing(LINK(this, ViewTabListBox_Impl, EditingEntryHdl),
+ LINK(this, ViewTabListBox_Impl, EditedEntryHdl));
+ mxTreeView->start_editing(*xEntry);
+ }
+ }
+}
void ViewTabListBox_Impl::DeleteEntries()
{
short eResult = svtools::QUERYDELETE_YES;
- SvTreeListEntry* pEntry = FirstSelected();
- OUString aURL;
- while ( pEntry )
- {
- SvTreeListEntry *pCurEntry = pEntry;
- pEntry = NextSelected( pEntry );
-
- if ( pCurEntry->GetUserData() )
- aURL = static_cast<SvtContentEntry*>(pCurEntry->GetUserData())->maURL;
-
- if ( aURL.isEmpty() )
- continue;
+ mxTreeView->selected_foreach([this, &eResult](weld::TreeIter& rCurEntry){
+ OUString aURL;
+ if (!mxTreeView->get_id(rCurEntry).isEmpty())
+ aURL = reinterpret_cast<SvtContentEntry*>(mxTreeView->get_id(rCurEntry).toInt64())->maURL;
+ if (aURL.isEmpty())
+ {
+ mxTreeView->unselect(rCurEntry);
+ return false;
+ }
bool canDelete = true;
try
@@ -611,15 +622,18 @@ void ViewTabListBox_Impl::DeleteEntries()
}
if (!canDelete)
- continue; // process next entry
+ {
+ mxTreeView->unselect(rCurEntry);
+ return false; // process next entry
+ }
if ( eResult != svtools::QUERYDELETE_ALL )
{
INetURLObject aObj( aURL );
svtools::QueryDeleteDlg_Impl aDlg(
- GetFrameWeld(), aObj.GetLastName(INetURLObject::DecodeMechanism::WithCharset));
+ mxTreeView.get(), aObj.GetLastName(INetURLObject::DecodeMechanism::WithCharset));
- if ( GetSelectionCount() > 1 )
+ if (mxTreeView->count_selected_rows() > 1)
aDlg.EnableAllButton();
eResult = aDlg.run();
@@ -630,22 +644,33 @@ void ViewTabListBox_Impl::DeleteEntries()
{
if ( Kill( aURL ) )
{
- delete static_cast<SvtContentEntry*>(pCurEntry->GetUserData());
- GetModel()->Remove( pCurEntry );
+ delete reinterpret_cast<SvtContentEntry*>(mxTreeView->get_id(rCurEntry).toInt64());
mpParent->EntryRemoved( aURL );
}
}
- }
-}
+ return false;
+ });
+
+ mxTreeView->remove_selection();
+}
-bool ViewTabListBox_Impl::EditedEntry( SvTreeListEntry* pEntry,
- const OUString& rNewText )
+IMPL_LINK(ViewTabListBox_Impl, EditedEntryHdl, const IterString&, rIterString, bool)
{
+ mbEditing = false;
+
+ mxTreeView->connect_editing(Link<const weld::TreeIter&, bool>(), Link<const IterString&, bool>());
+
+ const weld::TreeIter& rEntry = rIterString.first;
+ OUString sNewText = rIterString.second;
+
+ if (sNewText.isEmpty())
+ return false;
+
bool bRet = false;
OUString aURL;
- SvtContentEntry* pData = static_cast<SvtContentEntry*>(pEntry->GetUserData());
+ SvtContentEntry* pData = reinterpret_cast<SvtContentEntry*>(mxTreeView->get_id(rEntry).toInt64());
if ( pData )
aURL = pData->maURL;
@@ -680,14 +705,14 @@ bool ViewTabListBox_Impl::EditedEntry( SvTreeListEntry* pEntry,
if ( canRename )
{
Any aValue;
- aValue <<= rNewText;
+ aValue <<= sNewText;
aContent.setPropertyValue( aPropName, aValue );
- mpParent->EntryRenamed( aURL, rNewText );
+ mpParent->EntryRenamed(aURL, sNewText);
if (pData)
pData->maURL = aURL;
- pEntry->SetUserData( pData );
+ mxTreeView->set_id(rEntry, OUString::number(reinterpret_cast<sal_Int64>(pData)));
bRet = true;
}
@@ -699,7 +724,6 @@ bool ViewTabListBox_Impl::EditedEntry( SvTreeListEntry* pEntry,
return bRet;
}
-
void ViewTabListBox_Impl::DoQuickSearch( sal_Unicode rChar )
{
::osl::MutexGuard aGuard( maMutex );
@@ -721,64 +745,17 @@ void ViewTabListBox_Impl::DoQuickSearch( sal_Unicode rChar )
bFound = mpParent->SearchNextEntry( mnSearchIndex, maQuickSearchText, true );
}
- if ( bFound )
+ if (bFound)
{
- SvTreeListEntry* pEntry = GetEntry( mnSearchIndex );
- if ( pEntry )
- {
- SelectAll( false );
- Select( pEntry );
- SetCurEntry( pEntry );
- MakeVisible( pEntry );
- }
+ mxTreeView->unselect_all();
+ mxTreeView->select(mnSearchIndex);
+ mxTreeView->set_cursor(mnSearchIndex);
+ mxTreeView->scroll_to_row(mnSearchIndex);
}
maResetQuickSearch.Start();
}
-
-bool ViewTabListBox_Impl::DoubleClickHdl()
-{
- SvHeaderTabListBox::DoubleClickHdl();
- return false;
- // this means "do no additional handling". Especially this means that the SvImpLBox does not
- // recognize that the entry at the double click position change after the handler call (which is
- // the case if in the handler, our content was replaced)
- // If it _would_ recognize this change, it would take this as a reason to select the entry, again
- // - which is not what in the case of content replace
- // (I really doubt that this behaviour of the SvImpLBox does make any sense at all, but
- // who knows ...)
-}
-
-OUString ViewTabListBox_Impl::GetAccessibleObjectDescription( ::vcl::AccessibleBrowseBoxObjType _eType, sal_Int32 _nPos ) const
-{
- OUString sRet = SvHeaderTabListBox::GetAccessibleObjectDescription( _eType, _nPos );
- if ( ::vcl::BBTYPE_TABLECELL == _eType )
- {
- sal_Int32 nRow = -1;
- const sal_uInt16 nColumnCount = GetColumnCount();
- if (nColumnCount > 0)
- nRow = _nPos / nColumnCount;
- SvTreeListEntry* pEntry = GetEntry( nRow );
- if ( pEntry )
- {
- SvtContentEntry* pData = static_cast<SvtContentEntry*>(pEntry->GetUserData());
- if ( pData )
- {
- const OUString sVar1( "%1" );
- const OUString sVar2( "%2" );
- OUString aText( msAccessibleDescText );
- aText = aText.replaceAll( sVar1, pData->mbIsFolder ? msFolder : msFile );
- aText = aText.replaceAll( sVar2, pData->maURL );
- sRet += aText;
- }
- }
- }
-
- return sRet;
-}
-
-
bool ViewTabListBox_Impl::Kill( const OUString& rContent )
{
bool bRet = true;
@@ -802,10 +779,10 @@ bool ViewTabListBox_Impl::Kill( const OUString& rContent )
return bRet;
}
-SvtFileView::SvtFileView( vcl::Window* pParent, WinBits nBits,
- bool bOnlyFolder, bool bMultiSelection, bool bShowType ) :
-
- Control( pParent, nBits )
+SvtFileView::SvtFileView(weld::Window* pTopLevel,
+ std::unique_ptr<weld::TreeView> xTreeView,
+ std::unique_ptr<weld::IconView> xIconView,
+ bool bOnlyFolder, bool bMultiSelection, bool bShowType )
{
FileViewFlags nFlags = FileViewFlags::NONE;
if ( bMultiSelection )
@@ -815,31 +792,27 @@ SvtFileView::SvtFileView( vcl::Window* pParent, WinBits nBits,
Reference< XComponentContext > xContext = ::comphelper::getProcessComponentContext();
Reference< XInteractionHandler > xInteractionHandler(
- InteractionHandler::createWithParent(xContext, VCLUnoHelper::GetInterface(GetParentDialog())), UNO_QUERY_THROW );
+ InteractionHandler::createWithParent(xContext, pTopLevel->GetXWindow()), UNO_QUERY_THROW);
Reference < XCommandEnvironment > xCmdEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, Reference< XProgressHandler >() );
- mpImpl.reset( new SvtFileView_Impl( this, xCmdEnv, nFlags, bOnlyFolder ) );
- mpImpl->mpView->ForbidEmptyText();
+ mpImpl.reset(new SvtFileView_Impl(this, pTopLevel, std::move(xTreeView), std::move(xIconView), xCmdEnv, nFlags, bOnlyFolder));
- HeaderBar* pHeaderBar = mpImpl->mpView->GetHeaderBar();
- pHeaderBar->SetSelectHdl( LINK( this, SvtFileView, HeaderSelect_Impl ) );
- pHeaderBar->SetEndDragHdl( LINK( this, SvtFileView, HeaderEndDrag_Impl ) );
+ weld::TreeView* pView = mpImpl->mxView->getWidget();
+ pView->connect_column_clicked(LINK(this, SvtFileView, HeaderSelect_Impl));
}
-SvtFileView::~SvtFileView()
+void SvtFileView::grab_focus()
{
- disposeOnce();
+ mpImpl->grab_focus();
}
-void SvtFileView::dispose()
+bool SvtFileView::has_focus() const
{
- mpImpl.reset();
- Control::dispose();
+ return mpImpl->has_focus();
}
-Size SvtFileView::GetOptimalSize() const
+SvtFileView::~SvtFileView()
{
- return LogicToPixel(Size(208, 50), MapMode(MapUnit::MapAppFont));
}
void SvtFileView::SetViewMode( FileViewMode eMode )
@@ -847,40 +820,54 @@ void SvtFileView::SetViewMode( FileViewMode eMode )
mpImpl->SetViewMode( eMode );
}
-OUString SvtFileView::GetURL( SvTreeListEntry const * pEntry )
+OUString SvtFileView::GetURL(const weld::TreeIter& rEntry) const
{
- OUString aURL;
- if ( pEntry && pEntry->GetUserData() )
- aURL = static_cast<SvtContentEntry*>(pEntry->GetUserData())->maURL;
- return aURL;
+ SvtContentEntry* pEntry;
+ if (mpImpl->mxView->get_visible())
+ pEntry = reinterpret_cast<SvtContentEntry*>(mpImpl->mxView->get_id(rEntry).toInt64());
+ else
+ pEntry = reinterpret_cast<SvtContentEntry*>(mpImpl->mxIconView->get_id(rEntry).toInt64());
+ if (pEntry)
+ return pEntry->maURL;
+ return OUString();
}
-
OUString SvtFileView::GetCurrentURL() const
{
+ SvtContentEntry* pEntry = nullptr;
OUString aURL;
- SvTreeListEntry* pEntry = mpImpl->mpCurView->FirstSelected();
- if ( pEntry && pEntry->GetUserData() )
- aURL = static_cast<SvtContentEntry*>(pEntry->GetUserData())->maURL;
+ if (mpImpl->mxView->get_visible())
+ {
+ std::unique_ptr<weld::TreeIter> xEntry = mpImpl->mxView->make_iterator();
+ if (mpImpl->mxView->get_selected(xEntry.get()))
+ pEntry = reinterpret_cast<SvtContentEntry*>(mpImpl->mxView->get_id(*xEntry).toInt64());
+ }
+ else
+ {
+ std::unique_ptr<weld::TreeIter> xEntry = mpImpl->mxIconView->make_iterator();
+ if (mpImpl->mxIconView->get_selected(xEntry.get()))
+ pEntry = reinterpret_cast<SvtContentEntry*>(mpImpl->mxIconView->get_id(*xEntry).toInt64());
+ }
+ if (pEntry)
+ aURL = pEntry->maURL;
return aURL;
}
-
void SvtFileView::CreatedFolder( const OUString& rUrl, const OUString& rNewFolder )
{
- OUString sEntry = mpImpl->FolderInserted( rUrl, rNewFolder );
+ const SortingData_Impl& rEntry = mpImpl->FolderInserted( rUrl, rNewFolder );
- SvTreeListEntry* pEntry = mpImpl->mpView->InsertEntry( sEntry, mpImpl->maFolderImage, mpImpl->maFolderImage );
- SvtContentEntry* pUserData = new SvtContentEntry( rUrl, true );
- pEntry->SetUserData( pUserData );
- mpImpl->mpView->MakeVisible( pEntry );
+ mpImpl->maEntries.emplace_back(std::make_unique<SvtContentEntry>(rUrl, true));
+ OUString sId(OUString::number(reinterpret_cast<sal_Int64>(mpImpl->maEntries.back().get())));
- SvTreeListEntry* pEntry2 = mpImpl->mpIconView->InsertEntry( sEntry.getToken( 0, '\t' ), mpImpl->maFolderImage, mpImpl->maFolderImage );
- SvtContentEntry* pUserData2 = new SvtContentEntry( rUrl, true );
- pEntry2->SetUserData( pUserData2 );
- mpImpl->mpIconView->MakeVisible( pEntry2 );
-}
+ std::unique_ptr<weld::TreeIter> xEntry = mpImpl->mxView->make_iterator();
+ mpImpl->mxView->insert(rEntry.maDisplayName, sId, mpImpl->maFolderImage, *xEntry);
+ mpImpl->mxView->scroll_to_row(*xEntry);
+ std::unique_ptr<weld::TreeIter> xIconEntry = mpImpl->mxIconView->make_iterator();
+ mpImpl->mxIconView->insert(-1, &rEntry.maDisplayName, &sId, &mpImpl->maFolderImage, xIconEntry.get());
+ mpImpl->mxIconView->scroll_to_item(*xEntry);
+}
FileViewResult SvtFileView::PreviousLevel( const FileViewAsyncAction* pAsyncDescriptor )
{
@@ -888,12 +875,11 @@ FileViewResult SvtFileView::PreviousLevel( const FileViewAsyncAction* pAsyncDesc
OUString sParentURL;
if ( GetParentURL( sParentURL ) )
- eResult = Initialize( sParentURL, mpImpl->maCurrentFilter, pAsyncDescriptor, mpBlackList );
+ eResult = Initialize( sParentURL, mpImpl->maCurrentFilter, pAsyncDescriptor, maBlackList );
return eResult;
}
-
bool SvtFileView::GetParentURL( OUString& rParentURL ) const
{
bool bRet = false;
@@ -920,42 +906,31 @@ bool SvtFileView::GetParentURL( OUString& rParentURL ) const
return bRet;
}
-
-const OString& SvtFileView::GetHelpId( ) const
+OString SvtFileView::get_help_id() const
{
- return mpImpl->mpView->GetHelpId( );
+ return mpImpl->mxView->get_help_id();
}
-
-void SvtFileView::SetHelpId( const OString& rHelpId )
+void SvtFileView::set_help_id(const OString& rHelpId)
{
- mpImpl->mpView->SetHelpId( rHelpId );
+ mpImpl->mxView->set_help_id(rHelpId);
}
-
-void SvtFileView::SetSizePixel( const Size& rNewSize )
+OUString SvtFileView::get_selected_text() const
{
- Control::SetSizePixel( rNewSize );
- mpImpl->mpView->SetSizePixel( rNewSize );
- mpImpl->mpIconView->SetSizePixel( rNewSize );
+ if (mpImpl->mxView->get_visible())
+ return mpImpl->mxView->get_selected_text();
+ return mpImpl->mxIconView->get_selected_text();
}
-
-void SvtFileView::SetPosSizePixel( const Point& rNewPos, const Size& rNewSize )
-{
- SetPosPixel( rNewPos );
- SetSizePixel( rNewSize );
-}
-
-
FileViewResult SvtFileView::Initialize(
const OUString& rURL,
const OUString& rFilter,
const FileViewAsyncAction* pAsyncDescriptor,
- const css::uno::Sequence< OUString >& rBlackList )
+ const css::uno::Sequence< OUString >& rBlackList )
{
- WaitObject aWaitCursor( this );
- mpBlackList = rBlackList;
+ weld::WaitObject aWaitCursor(mpImpl->m_pTopLevel);
+ maBlackList = rBlackList;
OUString sPushURL( mpImpl->maViewURL );
@@ -984,7 +959,7 @@ FileViewResult SvtFileView::ExecuteFilter( const OUString& rFilter, const FileVi
mpImpl->maCurrentFilter = rFilter.toAsciiLowerCase();
mpImpl->Clear();
- FileViewResult eResult = mpImpl->GetFolderContent_Impl( mpImpl->maViewURL, pAsyncDescriptor, mpBlackList );
+ FileViewResult eResult = mpImpl->GetFolderContent_Impl(mpImpl->maViewURL, pAsyncDescriptor, maBlackList);
OSL_ENSURE( ( eResult != eStillRunning ) || pAsyncDescriptor, "SvtFileView::ExecuteFilter: we told it to read synchronously!" );
return eResult;
}
@@ -996,51 +971,43 @@ void SvtFileView::CancelRunningAsyncAction()
void SvtFileView::SetNoSelection()
{
- mpImpl->mpCurView->SelectAll( false );
-}
-
-
-void SvtFileView::GetFocus()
-{
- Control::GetFocus();
- if ( mpImpl && mpImpl->mpCurView )
- mpImpl->mpCurView->GrabFocus();
+ mpImpl->mxView->unselect_all();
+ mpImpl->mxIconView->unselect_all();
}
-
-void SvtFileView::SetSelectHdl( const Link<SvTreeListBox*,void>& rHdl )
+void SvtFileView::SetSelectHdl(const Link<SvtFileView*,void>& rHdl)
{
- mpImpl->SetSelectHandler( rHdl );
+ mpImpl->SetSelectHandler(rHdl);
}
-
-void SvtFileView::SetDoubleClickHdl( const Link<SvTreeListBox*,bool>& rHdl )
+void SvtFileView::SetDoubleClickHdl(const Link<SvtFileView*,bool>& rHdl)
{
- mpImpl->mpView->SetDoubleClickHdl( rHdl );
- mpImpl->mpIconView->SetDoubleClickHdl( rHdl );
+ mpImpl->SetDoubleClickHandler(rHdl);
}
-
sal_uLong SvtFileView::GetSelectionCount() const
{
- return mpImpl->mpCurView->GetSelectionCount();
+ if (mpImpl->mxView->get_visible())
+ return mpImpl->mxView->count_selected_rows();
+ return mpImpl->mxIconView->count_selected_items();
}
-
-SvTreeListEntry* SvtFileView::FirstSelected() const
+SvtContentEntry* SvtFileView::FirstSelected() const
{
- return mpImpl->mpCurView->FirstSelected();
-}
-
-
-SvTreeListEntry* SvtFileView::NextSelected( SvTreeListEntry* pEntry ) const
-{
- return mpImpl->mpCurView->NextSelected( pEntry );
-}
+ if (mpImpl->mxView->get_visible())
+ {
+ SvtContentEntry* pRet = nullptr;
+ std::unique_ptr<weld::TreeIter> xEntry = mpImpl->mxView->make_iterator();
+ if (mpImpl->mxView->get_selected(xEntry.get()))
+ pRet = reinterpret_cast<SvtContentEntry*>(mpImpl->mxView->get_id(*xEntry).toInt64());
+ return pRet;
+ }
-void SvtFileView::EnableAutoResize()
-{
- mpImpl->mpView->EnableAutoResize();
+ SvtContentEntry* pRet = nullptr;
+ std::unique_ptr<weld::TreeIter> xEntry = mpImpl->mxIconView->make_iterator();
+ if (mpImpl->mxIconView->get_selected(xEntry.get()))
+ pRet = reinterpret_cast<SvtContentEntry*>(mpImpl->mxIconView->get_id(*xEntry).toInt64());
+ return pRet;
}
const OUString& SvtFileView::GetViewURL() const
@@ -1063,92 +1030,53 @@ void SvtFileView::EndInplaceEditing()
return mpImpl->EndEditing();
}
-IMPL_LINK( SvtFileView, HeaderSelect_Impl, HeaderBar*, pBar, void )
+IMPL_LINK(SvtFileView, HeaderSelect_Impl, int, nColumn, void)
{
- DBG_ASSERT( pBar, "no headerbar" );
- sal_uInt16 nItemID = pBar->GetCurItemId();
-
- HeaderBarItemBits nBits;
-
- // clear the arrow of the recently used column
- if ( nItemID != mpImpl->mnSortColumn )
- {
- if ( !nItemID )
- {
- // first call -> remove arrow from title column,
- // because another column is the sort column
- nItemID = mpImpl->mnSortColumn;
- mpImpl->mnSortColumn = COLUMN_TITLE;
- }
- nBits = pBar->GetItemBits( mpImpl->mnSortColumn );
- nBits &= ~HeaderBarItemBits( HeaderBarItemBits::UPARROW | HeaderBarItemBits::DOWNARROW );
- pBar->SetItemBits( mpImpl->mnSortColumn, nBits );
- }
-
- nBits = pBar->GetItemBits( nItemID );
+ sal_uInt16 nItemID = nColumn + 1;
+ // skip "TYPE"
+ if (!mpImpl->mxView->TypeColumnVisible() && nItemID != COLUMN_TITLE)
+ ++nItemID;
- bool bUp = ( ( nBits & HeaderBarItemBits::UPARROW ) == HeaderBarItemBits::UPARROW );
+ weld::TreeView* pView = mpImpl->mxView->getWidget();
+ bool bSortAtoZ = mpImpl->mbAscending;
- if ( bUp )
+ //set new arrow positions in headerbar
+ if (nItemID != mpImpl->mnSortColumn)
{
- nBits &= ~HeaderBarItemBits::UPARROW;
- nBits |= HeaderBarItemBits::DOWNARROW;
+ // remove old indicator, new will be created in OpenFolder_Impl
+ pView->set_sort_indicator(TRISTATE_INDET, mpImpl->GetSortColumn());
}
else
- {
- nBits &= ~HeaderBarItemBits::DOWNARROW;
- nBits |= HeaderBarItemBits::UPARROW;
- }
+ bSortAtoZ = !bSortAtoZ;
- pBar->SetItemBits( nItemID, nBits );
- mpImpl->Resort_Impl( nItemID, !bUp );
-}
-
-
-IMPL_LINK( SvtFileView, HeaderEndDrag_Impl, HeaderBar*, pBar, void )
-{
- if ( pBar->IsItemMode() )
- return;
-
- Size aSize;
- sal_uInt16 nTabs = pBar->GetItemCount();
- long nTmpSize = 0;
-
- for ( sal_uInt16 i = 1; i <= nTabs; ++i )
- {
- long nWidth = pBar->GetItemSize(i);
- aSize.setWidth( nWidth + nTmpSize );
- nTmpSize += nWidth;
- mpImpl->mpView->SetTab( i, aSize.Width(), MapUnit::MapPixel );
- }
+ mpImpl->Resort_Impl(nItemID, bSortAtoZ);
}
-
OUString SvtFileView::GetConfigString() const
{
- OUString sRet;
- HeaderBar* pBar = mpImpl->mpView->GetHeaderBar();
- DBG_ASSERT( pBar, "invalid headerbar" );
-
// sort order
- sRet += OUString::number( mpImpl->mnSortColumn ) + ";";
- HeaderBarItemBits nBits = pBar->GetItemBits( mpImpl->mnSortColumn );
- bool bUp = ( ( nBits & HeaderBarItemBits::UPARROW ) == HeaderBarItemBits::UPARROW );
+ OUString sRet = OUString::number( mpImpl->mnSortColumn ) + ";";
+
+ bool bUp = mpImpl->mbAscending;
sRet += bUp ? OUString("1") : OUString("0");
sRet += ";";
- sal_uInt16 nCount = pBar->GetItemCount();
- for ( sal_uInt16 i = 0; i < nCount; ++i )
+ weld::TreeView* pView = mpImpl->mxView->getWidget();
+ sal_uInt16 nCount = mpImpl->mxView->TypeColumnVisible() ? 4 : 3;
+ for (sal_uInt16 i = 0; i < nCount; ++i)
{
- sal_uInt16 nId = pBar->GetItemId(i);
+ sal_uInt16 nId = i + 1;
+ // skip "TYPE"
+ if (!mpImpl->mxView->TypeColumnVisible() && nId != COLUMN_TITLE)
+ ++nId;
+
sRet += OUString::number( nId )
+ ";"
- + OUString::number( pBar->GetItemSize( nId ) )
+ + OUString::number(pView->get_column_width(i))
+ ";";
}
- sRet = comphelper::string::stripEnd(sRet, ';');
- return sRet;
+ return comphelper::string::stripEnd(sRet, ';');
}
::std::vector< SvtContentEntry > SvtFileView::GetContent()
@@ -1164,84 +1092,69 @@ OUString SvtFileView::GetConfigString() const
return aContent;
}
-void SvtFileView::SetConfigString( const OUString& rCfgStr )
+void SvtFileView::SetConfigString(const OUString& rCfgStr)
{
- HeaderBar* pBar = mpImpl->mpView->GetHeaderBar();
- DBG_ASSERT( pBar, "invalid headerbar" );
-
sal_Int32 nIdx = 0;
mpImpl->mnSortColumn = static_cast<sal_uInt16>(rCfgStr.getToken( 0, ';', nIdx ).toInt32());
- bool bUp = static_cast<bool>(static_cast<sal_uInt16>(rCfgStr.getToken( 0, ';', nIdx ).toInt32()));
- HeaderBarItemBits nBits = pBar->GetItemBits( mpImpl->mnSortColumn );
+ mpImpl->mbAscending = static_cast<bool>(static_cast<sal_uInt16>(rCfgStr.getToken( 0, ';', nIdx ).toInt32()));
- if ( bUp )
- {
- nBits &= ~HeaderBarItemBits::UPARROW;
- nBits |= HeaderBarItemBits::DOWNARROW;
- }
- else
- {
- nBits &= ~HeaderBarItemBits::DOWNARROW;
- nBits |= HeaderBarItemBits::UPARROW;
- }
- pBar->SetItemBits( mpImpl->mnSortColumn, nBits );
+ std::vector<int> aWidths(mpImpl->mxView->TypeColumnVisible() ? 4 : 3, -1);
while ( nIdx != -1 )
{
sal_uInt16 nItemId = static_cast<sal_uInt16>(rCfgStr.getToken( 0, ';', nIdx ).toInt32());
- pBar->SetItemSize( nItemId, rCfgStr.getToken( 0, ';', nIdx ).toInt32() );
- }
- HeaderSelect_Impl( pBar );
- HeaderEndDrag_Impl( pBar );
-}
+ int nWidth = rCfgStr.getToken( 0, ';', nIdx ).toInt32();
+ // skip "TYPE"
+ if (!mpImpl->mxView->TypeColumnVisible() && nItemId != COLUMN_TITLE)
+ --nItemId;
+ int nColumn = nItemId - 1;
-void SvtFileView::StateChanged( StateChangedType nStateChange )
-{
- if ( nStateChange == StateChangedType::Enable )
- Invalidate();
- Control::StateChanged( nStateChange );
-}
+ if (nColumn >= 0 && static_cast<unsigned int>(nColumn) < aWidths.size())
+ aWidths[nColumn] = nWidth;
+ }
+ weld::TreeView* pView = mpImpl->mxView->getWidget();
+ pView->set_column_fixed_widths(aWidths);
+}
// class SvtFileView_Impl
-
-
-SvtFileView_Impl::SvtFileView_Impl( SvtFileView* pAntiImpl, Reference < XCommandEnvironment > const & xEnv, FileViewFlags nFlags, bool bOnlyFolder )
-
- :mpAntiImpl ( pAntiImpl )
- ,m_eAsyncActionResult ( ::svt::EnumerationResult::ERROR )
- ,m_bRunningAsyncAction ( false )
- ,m_bAsyncActionCancelled ( false )
- ,mnSortColumn ( COLUMN_TITLE )
- ,mbAscending ( true )
- ,mbOnlyFolder ( bOnlyFolder )
- ,mnSuspendSelectCallback ( 0 )
- ,mbIsFirstResort ( true )
- ,aIntlWrapper ( Application::GetSettings().GetLanguageTag() )
- ,maFolderImage (StockImage::Yes, RID_BMP_FOLDER)
- ,mxCmdEnv ( xEnv )
-
-{
- mpView = VclPtr<ViewTabListBox_Impl>::Create( mpAntiImpl, this, nFlags );
- mpCurView = mpView;
- mpIconView = VclPtr<IconView>::Create( mpAntiImpl, WB_TABSTOP );
- mpIconView->Hide();
- mpView->EnableCellFocus();
+SvtFileView_Impl::SvtFileView_Impl(SvtFileView* pAntiImpl, weld::Window* pTopLevel,
+ std::unique_ptr<weld::TreeView> xTreeView,
+ std::unique_ptr<weld::IconView> xIconView,
+ Reference < XCommandEnvironment > const & xEnv,
+ FileViewFlags nFlags, bool bOnlyFolder)
+ : m_pAntiImpl ( pAntiImpl )
+ , m_eAsyncActionResult ( ::svt::EnumerationResult::ERROR )
+ , m_bRunningAsyncAction ( false )
+ , m_bAsyncActionCancelled ( false )
+ , m_pTopLevel ( pTopLevel )
+ , mxView(new ViewTabListBox_Impl(std::move(xTreeView), pTopLevel, this, nFlags))
+ , mxIconView(std::move(xIconView))
+ , mnSortColumn ( COLUMN_TITLE )
+ , mbAscending ( true )
+ , mbOnlyFolder ( bOnlyFolder )
+ , mnSuspendSelectCallback ( 0 )
+ , mbIsFirstResort ( true )
+ , aIntlWrapper ( Application::GetSettings().GetLanguageTag() )
+ , maFolderImage (RID_BMP_FOLDER)
+ , mxCmdEnv ( xEnv )
+{
+ weld::TreeView* pWidget = mxView->getWidget();
+
+ // set the width to something small so its the parent that decides the final
+ // width
+ Size aSize(42, pWidget->get_height_rows(7));
+ pWidget->set_size_request(aSize.Width(), aSize.Height());
+ mxIconView->set_size_request(aSize.Width(), aSize.Height());
}
-
SvtFileView_Impl::~SvtFileView_Impl()
{
Clear();
- mpView.disposeAndClear();
- mpCurView.clear();
- mpIconView.disposeAndClear();
- mpAntiImpl.clear();
}
-
void SvtFileView_Impl::Clear()
{
::osl::MutexGuard aGuard( maMutex );
@@ -1249,7 +1162,6 @@ void SvtFileView_Impl::Clear()
maContent.clear();
}
-
FileViewResult SvtFileView_Impl::GetFolderContent_Impl(
const OUString& rFolder,
const FileViewAsyncAction* pAsyncDescriptor,
@@ -1265,7 +1177,6 @@ FileViewResult SvtFileView_Impl::GetFolderContent_Impl(
return GetFolderContent_Impl( aFolder, pAsyncDescriptor, rBlackList );
}
-
FileViewResult SvtFileView_Impl::GetFolderContent_Impl(
const FolderDescriptor& _rFolder,
const FileViewAsyncAction* pAsyncDescriptor,
@@ -1276,7 +1187,7 @@ FileViewResult SvtFileView_Impl::GetFolderContent_Impl(
OSL_ENSURE( !m_xContentEnumerator.is(), "SvtFileView_Impl::GetFolderContent_Impl: still running another enumeration!" );
m_xContentEnumerator.set(new ::svt::FileViewContentEnumerator(
- mpView->GetCommandEnvironment(), maContent, maMutex));
+ mxView->GetCommandEnvironment(), maContent, maMutex));
// TODO: should we cache and re-use this thread?
if ( !pAsyncDescriptor )
@@ -1346,8 +1257,9 @@ FileViewResult SvtFileView_Impl::GetFolderContent_Impl(
m_aCurrentAsyncActionHandler = pAsyncDescriptor->aFinishHandler;
DBG_ASSERT( m_aCurrentAsyncActionHandler.IsSet(), "SvtFileView_Impl::GetFolderContent_Impl: nobody interested when it's finished?" );
- mpView->ClearAll();
- mpIconView->ClearAll();
+ maEntries.clear();
+ mxView->clear();
+ mxIconView->clear();
return eStillRunning;
}
@@ -1365,7 +1277,6 @@ FileViewResult SvtFileView_Impl::GetFolderContent_Impl(
return eFailure;
}
-
void SvtFileView_Impl::FilterFolderContent_Impl( const OUString &rFilter )
{
if ( rFilter.isEmpty() || ( rFilter == ALL_FILES_FILTER ) )
@@ -1395,90 +1306,105 @@ void SvtFileView_Impl::FilterFolderContent_Impl( const OUString &rFilter )
maContent.end());
}
-
-IMPL_LINK( SvtFileView_Impl, SelectionMultiplexer, SvTreeListBox*, _pSource, void )
+IMPL_LINK_NOARG(SvtFileView_Impl, ChangedHdl, weld::TreeView&, void)
{
if (!mnSuspendSelectCallback)
- m_aSelectHandler.Call( _pSource );
+ m_aSelectHandler.Call(m_pAntiImpl);
}
-
-void SvtFileView_Impl::SetSelectHandler( const Link<SvTreeListBox*,void>& _rHdl )
+IMPL_LINK_NOARG(SvtFileView_Impl, SelectionChangedHdl, weld::IconView&, void)
{
- m_aSelectHandler = _rHdl;
+ if (!mnSuspendSelectCallback)
+ m_aSelectHandler.Call(m_pAntiImpl);
+}
- Link<SvTreeListBox*,void> aMasterHandler;
- if ( m_aSelectHandler.IsSet() )
- aMasterHandler = LINK( this, SvtFileView_Impl, SelectionMultiplexer );
+void SvtFileView_Impl::SetSelectHandler(const Link<SvtFileView*,void>& rHdl)
+{
+ m_aSelectHandler = rHdl;
- mpView->SetSelectHdl( aMasterHandler );
- mpIconView->SetSelectHdl( aMasterHandler );
+ mxView->connect_changed(LINK(this, SvtFileView_Impl, ChangedHdl));
+ mxIconView->connect_selection_changed(LINK(this, SvtFileView_Impl, SelectionChangedHdl));
}
+IMPL_LINK_NOARG(SvtFileView_Impl, RowActivatedHdl, weld::TreeView&, bool)
+{
+ return maDoubleClickHandler.Call(m_pAntiImpl);
+}
-void SvtFileView_Impl::InitSelection()
+IMPL_LINK_NOARG(SvtFileView_Impl, ItemActivatedHdl, weld::IconView&, bool)
{
- mpCurView->SelectAll( false );
- SvTreeListEntry* pFirst = mpCurView->First();
- if ( pFirst )
- mpCurView->SetCursor( pFirst, true );
+ return maDoubleClickHandler.Call(m_pAntiImpl);
}
+void SvtFileView_Impl::SetDoubleClickHandler(const Link<SvtFileView*,bool>& rHdl)
+{
+ maDoubleClickHandler = rHdl;
+
+ mxView->connect_row_activated(LINK(this, SvtFileView_Impl, RowActivatedHdl));
+ mxIconView->connect_item_activated(LINK(this, SvtFileView_Impl, ItemActivatedHdl));
+}
void SvtFileView_Impl::OpenFolder_Impl()
{
::osl::MutexGuard aGuard( maMutex );
- mpView->SetUpdateMode( false );
- mpIconView->SetUpdateMode( false );
- mpView->ClearAll();
- mpIconView->ClearAll();
+ mxView->freeze();
+ mxIconView->freeze();
+ maEntries.clear();
+ mxView->clear();
+ mxIconView->clear();
for (auto const& elem : maContent)
{
- if ( mbOnlyFolder && ! elem->mbIsFolder )
+ if (mbOnlyFolder && !elem->mbIsFolder)
continue;
// insert entry and set user data
- SvTreeListEntry* pEntry = mpView->InsertEntry( elem->maDisplayText,
- elem->maImage,
- elem->maImage );
-
- SvTreeListEntry* pEntry2 = mpIconView->InsertEntry( elem->maDisplayText.getToken( 0, '\t' ),
- elem->maImage, elem->maImage );
-
- SvtContentEntry* pUserData = new SvtContentEntry( elem->maTargetURL,
- elem->mbIsFolder );
- SvtContentEntry* pUserData2 = new SvtContentEntry( elem->maTargetURL,
- elem->mbIsFolder );
-
- pEntry->SetUserData( pUserData );
- pEntry2->SetUserData( pUserData2 );
+ maEntries.emplace_back(std::make_unique<SvtContentEntry>(elem->maTargetURL, elem->mbIsFolder));
+ OUString sId(OUString::number(reinterpret_cast<sal_Int64>(maEntries.back().get())));
+ mxView->append(sId, elem->maDisplayName, elem->maType, elem->maDisplaySize, elem->maDisplayDate, elem->maImage);
+ mxIconView->append(sId, elem->maDisplayName, elem->maImage);
}
- InitSelection();
-
++mnSuspendSelectCallback;
- mpView->SetUpdateMode( true );
- mpIconView->SetUpdateMode( true );
+ mxView->thaw();
+
+ //set sort indicator
+ weld::TreeView* pView = mxView->getWidget();
+ pView->set_sort_indicator(mbAscending ? TRISTATE_TRUE : TRISTATE_FALSE, GetSortColumn());
+
+ mxIconView->thaw();
--mnSuspendSelectCallback;
ResetCursor();
}
-
void SvtFileView_Impl::ResetCursor()
{
- // deselect
- SvTreeListEntry* pEntry = mpCurView->FirstSelected();
- if ( pEntry )
- mpCurView->Select( pEntry, false );
- // set cursor to the first entry
- mpCurView->SetCursor( mpCurView->First(), true );
- mpCurView->Update();
+ if (mxView->get_visible())
+ {
+ // deselect
+ mxView->unselect_all();
+ std::unique_ptr<weld::TreeIter> xFirst = mxView->make_iterator();
+ if (mxView->get_iter_first(*xFirst))
+ {
+ // set cursor to the first entry
+ mxView->set_cursor(*xFirst);
+ }
+ }
+ else
+ {
+ // deselect
+ mxIconView->unselect_all();
+ std::unique_ptr<weld::TreeIter> xFirst = mxIconView->make_iterator();
+ if (mxIconView->get_iter_first(*xFirst))
+ {
+ // set cursor to the first entry
+ mxIconView->set_cursor(*xFirst);
+ }
+ }
}
-
void SvtFileView_Impl::CancelRunningAsyncAction()
{
DBG_TESTSOLARMUTEX();
@@ -1551,48 +1477,43 @@ void SvtFileView_Impl::implEnumerationSuccess()
SortFolderContent_Impl();
CreateDisplayText_Impl();
OpenFolder_Impl();
- maOpenDoneLink.Call( mpAntiImpl );
+ maOpenDoneLink.Call( m_pAntiImpl );
}
-
-void SvtFileView_Impl::ReplaceTabWithString( OUString& aValue )
+OUString SvtFileView_Impl::ReplaceTabWithString(const OUString& rValue)
{
OUString const aTab( "\t" );
OUString const aTabString( "%09" );
- sal_Int32 iPos;
+ sal_Int32 iPos;
+ OUString aValue(rValue);
while ( ( iPos = aValue.indexOf( aTab ) ) >= 0 )
- aValue = aValue.replaceAt( iPos, 1, aTabString );
+ aValue = aValue.replaceAt( iPos, 1, aTabString );
+ return aValue;
}
-
void SvtFileView_Impl::CreateDisplayText_Impl()
{
::osl::MutexGuard aGuard( maMutex );
- OUString const aTab( "\t" );
OUString const aDateSep( ", " );
for (auto const& elem : maContent)
{
// title, type, size, date
- OUString aValue = elem->GetTitle();
- ReplaceTabWithString( aValue );
- aValue += aTab + elem->maType + aTab;
+ elem->maDisplayName = ReplaceTabWithString(elem->GetTitle());
// folders don't have a size
if ( ! elem->mbIsFolder )
- aValue += CreateExactSizeText( elem->maSize );
- aValue += aTab;
+ elem->maDisplaySize = CreateExactSizeText( elem->maSize );
// set the date, but volumes have no date
if ( ! elem->mbIsFolder || ! elem->mbIsVolume )
{
SvtSysLocale aSysLocale;
const LocaleDataWrapper& rLocaleData = aSysLocale.GetLocaleData();
- aValue += rLocaleData.getDate( elem->maModDate )
- + aDateSep
- + rLocaleData.getTime( elem->maModDate, false );
+ elem->maDisplayDate = rLocaleData.getDate( elem->maModDate )
+ + aDateSep
+ + rLocaleData.getTime( elem->maModDate, false );
}
- elem->maDisplayText = aValue;
// detect image
if ( elem->mbIsFolder )
@@ -1600,10 +1521,10 @@ void SvtFileView_Impl::CreateDisplayText_Impl()
::svtools::VolumeInfo aVolInfo( elem->mbIsVolume, elem->mbIsRemote,
elem->mbIsRemoveable, elem->mbIsFloppy,
elem->mbIsCompactDisc );
- elem->maImage = SvFileInformationManager::GetFolderImage( aVolInfo );
+ elem->maImage = SvFileInformationManager::GetFolderImageId(aVolInfo);
}
else
- elem->maImage = SvFileInformationManager::GetFileImage( INetURLObject( elem->maTargetURL ) );
+ elem->maImage = SvFileInformationManager::GetFileImageId(INetURLObject(elem->maTargetURL));
}
}
@@ -1617,12 +1538,14 @@ void SvtFileView_Impl::Resort_Impl( sal_Int16 nColumn, bool bAscending )
return;
// reset the quick search index
- mpView->ResetQuickSearch_Impl( nullptr );
+ mxView->ResetQuickSearch_Impl( nullptr );
+
+ std::unique_ptr<weld::TreeIter> xEntry(mxView->make_iterator());
+ bool bEntry = mxView->get_cursor(xEntry.get());
OUString aEntryURL;
- SvTreeListEntry* pEntry = mpView->GetCurEntry();
- if ( pEntry && pEntry->GetUserData() )
- aEntryURL = static_cast<SvtContentEntry*>(pEntry->GetUserData())->maURL;
+ if (bEntry && !mxView->get_id(*xEntry).isEmpty())
+ aEntryURL = reinterpret_cast<SvtContentEntry*>(mxView->get_id(*xEntry).toInt64())->maURL;
mnSortColumn = nColumn;
mbAscending = bAscending;
@@ -1632,13 +1555,11 @@ void SvtFileView_Impl::Resort_Impl( sal_Int16 nColumn, bool bAscending )
if ( !mbIsFirstResort )
{
- sal_uLong nPos = GetEntryPos( aEntryURL );
- if ( nPos < mpView->GetEntryCount() )
+ int nPos = GetEntryPos( aEntryURL );
+ if (nPos != -1 && nPos < mxView->n_children())
{
- pEntry = mpView->GetEntry( nPos );
-
++mnSuspendSelectCallback; // #i15668#
- mpView->SetCurEntry( pEntry );
+ mxView->set_cursor(nPos);
--mnSuspendSelectCallback;
}
}
@@ -1646,7 +1567,6 @@ void SvtFileView_Impl::Resort_Impl( sal_Int16 nColumn, bool bAscending )
mbIsFirstResort = false;
}
-
static bool gbAscending = true;
static sal_Int16 gnColumn = COLUMN_TITLE;
static const CollatorWrapper* pCollatorWrapper = nullptr;
@@ -1763,11 +1683,7 @@ void SvtFileView_Impl::EntryRenamed( OUString& rURL,
if (aFoundElem != maContent.end())
{
(*aFoundElem)->SetNewTitle( rTitle );
- OUString aDisplayText = (*aFoundElem)->maDisplayText;
- sal_Int32 nIndex = aDisplayText.indexOf( '\t' );
-
- if ( nIndex > 0 )
- (*aFoundElem)->maDisplayText = aDisplayText.replaceAt( 0, nIndex, rTitle );
+ (*aFoundElem)->maDisplayName = ReplaceTabWithString(rTitle);
INetURLObject aURLObj( rURL );
aURLObj.setName( rTitle, INetURLObject::EncodeMechanism::All );
@@ -1778,8 +1694,7 @@ void SvtFileView_Impl::EntryRenamed( OUString& rURL,
}
}
-
-OUString SvtFileView_Impl::FolderInserted( const OUString& rURL, const OUString& rTitle )
+const SortingData_Impl& SvtFileView_Impl::FolderInserted( const OUString& rURL, const OUString& rTitle )
{
::osl::MutexGuard aGuard( maMutex );
@@ -1792,69 +1707,53 @@ OUString SvtFileView_Impl::FolderInserted( const OUString& rURL, const OUString&
::svtools::VolumeInfo aVolInfo;
pData->maType = SvFileInformationManager::GetFolderDescription( aVolInfo );
- pData->maImage = SvFileInformationManager::GetFolderImage( aVolInfo );
+ pData->maImage = SvFileInformationManager::GetFolderImageId( aVolInfo );
- OUString aValue;
- OUString const aTab( "\t" );
OUString const aDateSep( ", " );
// title, type, size, date
- aValue = pData->GetTitle();
- ReplaceTabWithString( aValue );
- aValue += aTab + pData->maType + aTab +
- // folders don't have a size
- aTab;
+ pData->maDisplayName = ReplaceTabWithString(pData->GetTitle());
// set the date
SvtSysLocale aSysLocale;
const LocaleDataWrapper& rLocaleData = aSysLocale.GetLocaleData();
- aValue += rLocaleData.getDate( pData->maModDate )
- + aDateSep
- + rLocaleData.getTime( pData->maModDate );
+ pData->maDisplayDate = rLocaleData.getDate( pData->maModDate )
+ + aDateSep
+ + rLocaleData.getTime( pData->maModDate );
- pData->maDisplayText = aValue;
maContent.push_back( std::move(pData) );
- return aValue;
+ return *maContent.back();
}
-
-sal_uLong SvtFileView_Impl::GetEntryPos( const OUString& rURL )
+int SvtFileView_Impl::GetEntryPos(const OUString& rURL)
{
::osl::MutexGuard aGuard( maMutex );
auto aFoundElem = std::find_if(maContent.begin(), maContent.end(),
[&](const std::unique_ptr<SortingData_Impl> & data) { return data->maTargetURL == rURL; });
- return aFoundElem != maContent.end()?std::distance(maContent.begin(), aFoundElem):0;
+ return aFoundElem != maContent.end() ? std::distance(maContent.begin(), aFoundElem) : -1;
}
-
void SvtFileView_Impl::SetViewMode( FileViewMode eMode )
{
switch ( eMode )
{
case eDetailedList:
- mpCurView = mpView;
- mpView->Show();
- mpView->GetHeaderBar()->Show();
- mpIconView->Hide();
+ mxView->show();
+ mxIconView->hide();
break;
case eIcon:
- mpCurView = mpIconView;
- mpView->Hide();
- mpView->GetHeaderBar()->Hide();
- mpIconView->Show();
+ mxView->hide();
+ mxIconView->show();
break;
default:
- mpCurView = mpView;
- mpView->Show();
- mpView->GetHeaderBar()->Show();
- mpIconView->Hide();
+ mxView->show();
+ mxIconView->hide();
};
}
-
bool SvtFileView_Impl::SearchNextEntry( sal_uInt32& nIndex, const OUString& rTitle, bool bWrapAround )
{
::osl::MutexGuard aGuard( maMutex );
@@ -1894,4 +1793,17 @@ namespace {
}
}
+void SvtFileView::selected_foreach(const std::function<bool(weld::TreeIter&)>& func)
+{
+ if (mpImpl->mxView->get_visible())
+ mpImpl->mxView->selected_foreach(func);
+ else
+ mpImpl->mxIconView->selected_foreach(func);
+}
+
+weld::Widget* SvtFileView::identifier() const
+{
+ return mpImpl->mxView->getWidget();
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/office/fileview.hxx b/fpicker/source/office/fileview.hxx
index 141159ee8719..89b16ec64267 100644
--- a/fpicker/source/office/fileview.hxx
+++ b/fpicker/source/office/fileview.hxx
@@ -22,6 +22,8 @@
#include <memory>
#include <com/sun/star/uno/Sequence.h>
#include <vcl/ctrl.hxx>
+#include <vcl/errinf.hxx>
+#include <vcl/weld.hxx>
#include <rtl/ustring.hxx>
namespace com :: sun :: star :: ucb { class XContent; }
@@ -29,10 +31,7 @@ namespace com :: sun :: star :: ucb { class XContent; }
// class SvtFileView -----------------------------------------------------
class SvtFileView_Impl;
-class SvTreeListEntry;
-class HeaderBar;
struct SvtContentEntry;
-class SvTreeListBox;
/// the result of an action in the FileView
enum FileViewResult
@@ -62,38 +61,39 @@ struct FileViewAsyncAction
}
};
-class SvtFileView : public Control
+class SvtFileView
{
private:
std::unique_ptr<SvtFileView_Impl> mpImpl;
- css::uno::Sequence< OUString > mpBlackList;
+ css::uno::Sequence<OUString> maBlackList;
- DECL_LINK( HeaderSelect_Impl, HeaderBar*, void );
- DECL_LINK( HeaderEndDrag_Impl, HeaderBar*, void );
-
-protected:
- virtual void GetFocus() override;
+ DECL_LINK(HeaderSelect_Impl, int, void);
public:
- SvtFileView( vcl::Window* pParent, WinBits nBits, bool bOnlyFolder, bool bMultiSelection, bool bShowType = true );
- virtual ~SvtFileView() override;
- virtual void dispose() override;
-
- virtual Size GetOptimalSize() const override;
+ SvtFileView(weld::Window* pTopLevel,
+ std::unique_ptr<weld::TreeView> xTreeView,
+ std::unique_ptr<weld::IconView> xIconView,
+ bool bOnlyFolder, bool bMultiSelection, bool bShowType = true);
+ virtual ~SvtFileView();
void SetViewMode( FileViewMode eMode );
const OUString& GetViewURL() const;
- static OUString GetURL( SvTreeListEntry const * pEntry );
+ OUString GetURL(const weld::TreeIter& rEntry) const;
OUString GetCurrentURL() const;
bool GetParentURL( OUString& _rParentURL ) const;
void CreatedFolder( const OUString& rUrl, const OUString& rNewFolder );
- void SetHelpId( const OString& rHelpId );
- const OString& GetHelpId( ) const;
- void SetSizePixel( const Size& rNewSize ) override;
- virtual void SetPosSizePixel( const Point& rNewPos, const Size& rNewSize ) override;
+ void set_help_id(const OString& rHelpId);
+ OString get_help_id() const;
+
+ void grab_focus();
+ bool has_focus() const;
+
+ OUString get_selected_text() const;
+
+ weld::Widget* identifier() const; // just to uniquely identify this widget
/** initialize the view with the content of a folder given by URL, and apply an immediate filter
@@ -153,14 +153,14 @@ public:
void SetNoSelection();
- void SetSelectHdl( const Link<SvTreeListBox*,void>& rHdl );
- void SetDoubleClickHdl( const Link<SvTreeListBox*,bool>& rHdl );
+ void SetSelectHdl( const Link<SvtFileView*,void>& rHdl );
+ void SetDoubleClickHdl( const Link<SvtFileView*,bool>& rHdl );
void SetOpenDoneHdl( const Link<SvtFileView*,void>& rHdl );
sal_uLong GetSelectionCount() const;
- SvTreeListEntry* FirstSelected() const;
- SvTreeListEntry* NextSelected( SvTreeListEntry* pEntry ) const;
- void EnableAutoResize();
+ SvtContentEntry* FirstSelected() const;
+
+ void selected_foreach(const std::function<bool(weld::TreeIter&)>& func);
void EnableDelete( bool bEnable );
@@ -171,9 +171,6 @@ public:
void EndInplaceEditing();
::std::vector< SvtContentEntry > GetContent();
-
-protected:
- virtual void StateChanged( StateChangedType nStateChange ) override;
};
// struct SvtContentEntry ------------------------------------------------
diff --git a/fpicker/source/office/foldertree.cxx b/fpicker/source/office/foldertree.cxx
index a2cc56aca385..e97411c61fd1 100644
--- a/fpicker/source/office/foldertree.cxx
+++ b/fpicker/source/office/foldertree.cxx
@@ -11,9 +11,7 @@
#include <toolkit/helper/vclunohelper.hxx>
#include <tools/urlobj.hxx>
#include <ucbhelper/commandenvironment.hxx>
-#include <vcl/dialog.hxx>
#include <vcl/treelistentry.hxx>
-#include <vcl/ptrstyle.hxx>
#include <com/sun/star/task/InteractionHandler.hpp>
#include "contentenumeration.hxx"
#include "foldertree.hxx"
@@ -21,44 +19,51 @@
using namespace ::com::sun::star::task;
-FolderTree::FolderTree( vcl::Window* pParent, WinBits nBits )
- : SvTreeListBox( pParent, nBits | WB_SORT | WB_TABSTOP )
+FolderTree::FolderTree(std::unique_ptr<weld::TreeView> xTreeView, weld::Window* pTopLevel)
+ : m_xTreeView(std::move(xTreeView))
+ , m_pTopLevel(pTopLevel)
{
+ m_xTreeView->set_size_request(m_xTreeView->get_approximate_digit_width() * 24,
+ m_xTreeView->get_height_rows(7));
+
Reference< XComponentContext > xContext = ::comphelper::getProcessComponentContext();
Reference< XInteractionHandler > xInteractionHandler(
- InteractionHandler::createWithParent(xContext, VCLUnoHelper::GetInterface(GetParentDialog())), UNO_QUERY_THROW );
+ InteractionHandler::createWithParent(xContext, pTopLevel->GetXWindow()), UNO_QUERY_THROW);
m_xEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, Reference< XProgressHandler >() );
- Image aFolderImage(StockImage::Yes, RID_BMP_FOLDER);
- Image aFolderExpandedImage(StockImage::Yes, RID_BMP_FOLDER_OPEN);
- SetDefaultCollapsedEntryBmp( aFolderImage );
- SetDefaultExpandedEntryBmp( aFolderExpandedImage );
+ m_xTreeView->connect_expanding(LINK(this, FolderTree, RequestingChildrenHdl));
}
-void FolderTree::RequestingChildren( SvTreeListEntry* pEntry )
+IMPL_LINK(FolderTree, RequestingChildrenHdl, const weld::TreeIter&, rEntry, bool)
{
- EnableChildPointerOverwrite( true );
- SetPointer( PointerStyle::Wait );
- Invalidate(InvalidateFlags::Update);
+ weld::WaitObject aWait(m_pTopLevel);
- FillTreeEntry( pEntry );
+ FillTreeEntry(rEntry);
- SetPointer( PointerStyle::Arrow );
- EnableChildPointerOverwrite( false );
+ return true;
}
-void FolderTree::FillTreeEntry( SvTreeListEntry* pEntry )
+void FolderTree::InsertRootEntry(const OUString& rId, const OUString& rRootLabel)
{
- if( !pEntry )
- return;
+ std::unique_ptr<weld::TreeIter> xEntry(m_xTreeView->make_iterator());
+ OUString sFolderImage(RID_BMP_FOLDER);
+ m_xTreeView->insert(nullptr, -1, &rRootLabel, &rId, nullptr, nullptr,
+ &sFolderImage, true, xEntry.get());
+ m_xTreeView->set_cursor(*xEntry);
+}
- OUString* pURL = static_cast< OUString* >( pEntry->GetUserData() );
+void FolderTree::FillTreeEntry(const weld::TreeIter& rEntry)
+{
+ OUString sURL = m_xTreeView->get_id(rEntry);
+ OUString sFolderImage(RID_BMP_FOLDER);
- if( pURL && m_sLastUpdatedDir != *pURL )
+ if (m_sLastUpdatedDir != sURL)
{
- while (SvTreeListEntry* pChild = FirstChild(pEntry))
+ while (m_xTreeView->iter_has_child(rEntry))
{
- GetModel()->Remove(pChild);
+ std::unique_ptr<weld::TreeIter> xChild(m_xTreeView->make_iterator(&rEntry));
+ m_xTreeView->iter_children(*xChild);
+ m_xTreeView->remove(*xChild);
}
::std::vector< std::unique_ptr<SortingData_Impl> > aContent;
@@ -67,22 +72,19 @@ void FolderTree::FillTreeEntry( SvTreeListEntry* pEntry )
xContentEnumerator(new FileViewContentEnumerator(
m_xEnv, aContent, m_aMutex));
- FolderDescriptor aFolder( *pURL );
+ FolderDescriptor aFolder(sURL);
EnumerationResult eResult =
xContentEnumerator->enumerateFolderContentSync( aFolder, m_aBlackList );
- if ( EnumerationResult::SUCCESS == eResult )
+ if (EnumerationResult::SUCCESS == eResult)
{
for(const auto & i : aContent)
{
- if( i->mbIsFolder )
- {
- SvTreeListEntry* pNewEntry = InsertEntry( i->GetTitle(), pEntry, true );
-
- OUString* sData = new OUString( i->maTargetURL );
- pNewEntry->SetUserData( static_cast< void* >( sData ) );
- }
+ if (!i->mbIsFolder)
+ continue;
+ m_xTreeView->insert(&rEntry, -1, &i->GetTitle(), &i->maTargetURL,
+ nullptr, nullptr, &sFolderImage, true, nullptr);
}
}
}
@@ -96,27 +98,30 @@ void FolderTree::FillTreeEntry( SvTreeListEntry* pEntry )
void FolderTree::FillTreeEntry( const OUString & rUrl, const ::std::vector< std::pair< OUString, OUString > >& rFolders )
{
- SetTreePath( rUrl );
+ SetTreePath(rUrl);
- SvTreeListEntry* pParent = GetCurEntry();
+ std::unique_ptr<weld::TreeIter> xParent(m_xTreeView->make_iterator());
+ bool bParent = m_xTreeView->get_cursor(xParent.get());
- if( !(pParent && !IsExpanded( pParent )) )
+ if (!bParent || m_xTreeView->get_row_expanded(*xParent))
return;
- while (SvTreeListEntry* pChild = FirstChild(pParent))
+ OUString sFolderImage(RID_BMP_FOLDER);
+ while (m_xTreeView->iter_has_child(*xParent))
{
- GetModel()->Remove(pChild);
+ std::unique_ptr<weld::TreeIter> xChild(m_xTreeView->make_iterator(xParent.get()));
+ m_xTreeView->iter_children(*xChild);
+ m_xTreeView->remove(*xChild);
}
for (auto const& folder : rFolders)
{
- SvTreeListEntry* pNewEntry = InsertEntry( folder.first, pParent, true );
- OUString* sData = new OUString( folder.second );
- pNewEntry->SetUserData( static_cast< void* >( sData ) );
+ m_xTreeView->insert(xParent.get(), -1, &folder.first, &folder.second,
+ nullptr, nullptr, &sFolderImage, true, nullptr);
}
m_sLastUpdatedDir = rUrl;
- Expand( pParent );
+ m_xTreeView->expand_row(*xParent);
}
void FolderTree::SetTreePath( OUString const & sUrl )
@@ -126,14 +131,15 @@ void FolderTree::SetTreePath( OUString const & sUrl )
OUString sPath = aUrl.GetURLPath( INetURLObject::DecodeMechanism::WithCharset );
- SvTreeListEntry* pEntry = First();
- bool end = false;
+ std::unique_ptr<weld::TreeIter> xEntry(m_xTreeView->make_iterator());
+ bool bEntry = m_xTreeView->get_iter_first(*xEntry);
+ bool bEnd = false;
- while( pEntry && !end )
+ while (bEntry && !bEnd)
{
- if( pEntry->GetUserData() )
+ if (!m_xTreeView->get_id(*xEntry).isEmpty())
{
- OUString sNodeUrl = *static_cast< OUString* >( pEntry->GetUserData() );
+ OUString sNodeUrl = m_xTreeView->get_id(*xEntry);
INetURLObject aUrlObj( sNodeUrl );
aUrlObj.setFinalSlash();
@@ -142,19 +148,19 @@ void FolderTree::SetTreePath( OUString const & sUrl )
if( sPath == sNodeUrl )
{
- Select( pEntry );
- end = true;
+ m_xTreeView->select(*xEntry);
+ bEnd = true;
}
else if( sPath.startsWith( sNodeUrl ) )
{
- if( !IsExpanded( pEntry ) )
- Expand( pEntry );
+ if (!m_xTreeView->get_row_expanded(*xEntry))
+ m_xTreeView->expand_row(*xEntry);
- pEntry = FirstChild( pEntry );
+ bEntry = m_xTreeView->iter_children(*xEntry);
}
else
{
- pEntry = pEntry->NextSibling();
+ bEntry = m_xTreeView->iter_next_sibling(*xEntry);
}
}
else
diff --git a/fpicker/source/office/foldertree.hxx b/fpicker/source/office/foldertree.hxx
index 03710efb2076..7e5e85816c48 100644
--- a/fpicker/source/office/foldertree.hxx
+++ b/fpicker/source/office/foldertree.hxx
@@ -11,35 +11,39 @@
#define INCLUDED_SVTOOLS_FOLDERTREE_HXX
#include <com/sun/star/uno/Sequence.hxx>
-#include <tools/wintypes.hxx>
-#include <vcl/treelistbox.hxx>
+#include <vcl/weld.hxx>
namespace com :: sun :: star :: ucb { class XCommandEnvironment; }
-class SvTreeListEntry;
-
using namespace ::com::sun::star::ucb;
using namespace ::com::sun::star::uno;
using namespace ::svt;
-class FolderTree : public SvTreeListBox
+class FolderTree
{
private:
+ std::unique_ptr<weld::TreeView> m_xTreeView;
+ weld::Window* m_pTopLevel;
Reference< XCommandEnvironment > m_xEnv;
::osl::Mutex m_aMutex;
Sequence< OUString > m_aBlackList;
OUString m_sLastUpdatedDir;
+ DECL_LINK(RequestingChildrenHdl, const weld::TreeIter&, bool);
+
public:
- FolderTree( vcl::Window* pParent, WinBits nBits );
+ FolderTree(std::unique_ptr<weld::TreeView> xTreeView, weld::Window* pTopLevel);
+
+ void clear() { m_xTreeView->clear(); }
- virtual void RequestingChildren( SvTreeListEntry* pEntry ) override;
+ void connect_changed(const Link<weld::TreeView&, void>& rLink) { m_xTreeView->connect_changed(rLink); }
- void FillTreeEntry( SvTreeListEntry* pEntry );
- void FillTreeEntry( const OUString & rUrl, const ::std::vector< std::pair< OUString, OUString > >& rFolders );
- void SetTreePath( OUString const & sUrl );
- void SetBlackList( const css::uno::Sequence< OUString >& rBlackList );
+ void InsertRootEntry(const OUString& rId, const OUString& rRootLabel);
+ void FillTreeEntry(const weld::TreeIter& rEntry);
+ void FillTreeEntry(const OUString & rUrl, const ::std::vector< std::pair< OUString, OUString > >& rFolders);
+ void SetTreePath(OUString const & sUrl);
+ void SetBlackList(const css::uno::Sequence< OUString >& rBlackList);
};
#endif
diff --git a/fpicker/source/office/fpdialogbase.hxx b/fpicker/source/office/fpdialogbase.hxx
index 9db337f286a2..5176e626c861 100644
--- a/fpicker/source/office/fpdialogbase.hxx
+++ b/fpicker/source/office/fpdialogbase.hxx
@@ -19,7 +19,7 @@
#ifndef INCLUDED_FPICKER_SOURCE_OFFICE_FPDIALOGBASE_HXX
#define INCLUDED_FPICKER_SOURCE_OFFICE_FPDIALOGBASE_HXX
-#include <vcl/dialog.hxx>
+#include <vcl/weld.hxx>
#include <com/sun/star/beans/StringPair.hpp>
#include <com/sun/star/uno/Any.hxx>
#include <com/sun/star/uno/Sequence.hxx>
@@ -57,14 +57,16 @@ namespace o3tl {
// SvtFileDialog_Base
-class SvtFileDialog_Base : public Dialog, public ::svt::IFilePickerController
+class SvtFileDialog_Base : public weld::GenericDialogController, public ::svt::IFilePickerController
{
public:
- SvtFileDialog_Base( vcl::Window* pParent, const OUString& rID, const OUString& rUIXMLDescription )
- : Dialog(pParent, rID, rUIXMLDescription)
+ SvtFileDialog_Base(weld::Window* pParent, const OUString& rUIXMLDescription, const OString& rID)
+ : weld::GenericDialogController(pParent, rUIXMLDescription, rID)
{
}
+ virtual bool PrepareExecute() { return true ; }
+
virtual SvtFileView* GetView() = 0;
virtual void SetHasFilename( bool bHasFilename ) = 0;
@@ -94,7 +96,6 @@ public:
virtual void EnableAutocompletion( bool _bEnable = true ) = 0;
- virtual sal_Int32 getTargetColorDepth() = 0;
virtual sal_Int32 getAvailableWidth() = 0;
virtual sal_Int32 getAvailableHeight() = 0;
diff --git a/fpicker/source/office/iconview.cxx b/fpicker/source/office/iconview.cxx
deleted file mode 100644
index b6571b72d1da..000000000000
--- a/fpicker/source/office/iconview.cxx
+++ /dev/null
@@ -1,233 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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 .
- */
-
-#include <vcl/treelistentry.hxx>
-#include <vcl/viewdataentry.hxx>
-#include "fileview.hxx"
-#include "iconview.hxx"
-#include "iconviewimpl.hxx"
-
-IconView::IconView( vcl::Window* pParent, WinBits nBits )
-: SvTreeListBox( pParent, nBits )
-{
- nColumns = 1;
- mbCenterAndClipText = true;
- SetEntryHeight( 100 );
- SetEntryWidth( 100 );
-
- pImpl.reset( new IconViewImpl( this, GetModel(), GetStyle() ) );
-}
-
-void IconView::Resize()
-{
- Size aBoxSize = Control::GetParent()->GetOutputSizePixel();
-
- if ( !aBoxSize.Width() )
- return;
-
- SetSizePixel( aBoxSize );
-
- nColumns = aBoxSize.Width() / nEntryWidth;
-
- SvTreeListBox::Resize();
-}
-
-tools::Rectangle IconView::GetFocusRect( SvTreeListEntry*, long nEntryPos )
-{
- Size aSize;
- aSize.setHeight( nEntryHeight );
- aSize.setWidth( nEntryWidth );
-
- Point aPos;
- aPos.setX( 0 );
- aPos.setY( 0 );
-
- tools::Rectangle aRect;
-
- short nCols = GetColumnsCount();
-
- if(nCols)
- {
- aPos.setY( ( nEntryPos / nCols ) * nEntryHeight );
- aPos.setX( ( nEntryPos % nCols ) * nEntryWidth );
- }
-
- aRect.SetPos( aPos );
- aRect.SetSize( aSize );
-
- return aRect;
-}
-
-void IconView::ClearAll()
-{
- for ( sal_uLong i = 0; i < GetEntryCount(); ++i )
- delete static_cast<SvtContentEntry*>(GetEntry(i)->GetUserData());
-
- Clear();
-}
-
-void IconView::PaintEntry(SvTreeListEntry& rEntry, long nX, long nY,
- vcl::RenderContext& rRenderContext)
-{
-
- tools::Rectangle aRect; // multi purpose
-
- PreparePaint(rRenderContext, rEntry);
-
- pImpl->UpdateContextBmpWidthMax(&rEntry);
-
- short nTempEntryHeight = GetEntryHeight();
- short nTempEntryWidth = GetEntryWidth();
-
- Point aEntryPos;
-
- Color aBackupTextColor(rRenderContext.GetTextColor());
- vcl::Font aBackupFont(rRenderContext.GetFont());
- Color aBackupColor = rRenderContext.GetFillColor();
-
- bool bCurFontIsSel = false;
- const WinBits nWindowStyle = GetStyle();
- const bool bHideSelection = (nWindowStyle & WB_HIDESELECTION) !=0 && !HasFocus();
- const StyleSettings& rSettings = rRenderContext.GetSettings().GetStyleSettings();
-
- vcl::Font aHighlightFont(rRenderContext.GetFont());
- const Color aHighlightTextColor(rSettings.GetHighlightTextColor());
- aHighlightFont.SetColor(aHighlightTextColor);
-
- Size aRectSize(nTempEntryWidth, nTempEntryHeight);
-
- SvViewDataEntry* pViewDataEntry = GetViewDataEntry( &rEntry );
-
- sal_uInt16 nItemCount = rEntry.ItemCount();
- sal_uInt16 nCurItem = 0;
- sal_uInt16 nIconItem = nItemCount;
-
- while (nCurItem < nItemCount)
- {
- SvLBoxItem* pItem = nCurItem < nItemCount ? &rEntry.GetItem(nCurItem) : nullptr;
- SvLBoxItemType nItemType = pItem->GetType();
-
- if (nItemType == SvLBoxItemType::ContextBmp)
- {
- nIconItem = nCurItem;
- nCurItem++;
- continue;
- }
-
- auto nItemHeight = SvLBoxItem::GetHeight(pViewDataEntry, nCurItem);
-
- aEntryPos.setX( nX );
- aEntryPos.setY( nY );
-
- // set background pattern/color
-
- Wallpaper aWallpaper = rRenderContext.GetBackground();
-
- if (pViewDataEntry->IsHighlighted())
- {
- Color aNewWallColor = rSettings.GetHighlightColor();
- // if the face color is bright then the deactivate color is also bright
- // -> so you can't see any deactivate selection
- if (bHideSelection && !rSettings.GetFaceColor().IsBright()
- && aWallpaper.GetColor().IsBright() != rSettings.GetDeactiveColor().IsBright())
- {
- aNewWallColor = rSettings.GetDeactiveColor();
- }
- // set font color to highlight
- if (!bCurFontIsSel)
- {
- rRenderContext.SetTextColor(aHighlightTextColor);
- rRenderContext.SetFont(aHighlightFont);
- bCurFontIsSel = true;
- }
- aWallpaper.SetColor(aNewWallColor);
- }
- else // no selection
- {
- if (bCurFontIsSel)
- {
- bCurFontIsSel = false;
- rRenderContext.SetTextColor(aBackupTextColor);
- rRenderContext.SetFont(aBackupFont);
- }
- else
- {
- aWallpaper.SetColor(rEntry.GetBackColor());
- }
- }
-
- // draw background
- if (!(nTreeFlags & SvTreeFlags::USESEL))
- {
- aRect.SetPos(aEntryPos);
- aRect.SetSize(aRectSize);
-
- Color aBackgroundColor = aWallpaper.GetColor();
- if (aBackgroundColor != COL_TRANSPARENT)
- {
- rRenderContext.SetFillColor(aBackgroundColor);
- // this case may occur for smaller horizontal resizes
- if (aRect.Left() < aRect.Right())
- rRenderContext.DrawRect(aRect);
- }
- }
-
- // center vertically
- aEntryPos.AdjustY((nTempEntryHeight - nItemHeight) / 2 );
-
- // draw item
- pViewDataEntry->SetPaintRectangle(aRect);
-
- aEntryPos.AdjustY(15 );
-
- pItem->Paint(aEntryPos, *this, rRenderContext, pViewDataEntry, rEntry);
-
- rRenderContext.SetFillColor(aBackupColor);
-
- nCurItem++;
- }
-
- // draw icon
- if(nIconItem != nItemCount && nIconItem < nItemCount)
- {
- SvLBoxItem* pItem = &rEntry.GetItem(nIconItem);
- auto nItemWidth = pItem->GetWidth(this, pViewDataEntry, nIconItem);
- auto nItemHeight = SvLBoxItem::GetHeight(pViewDataEntry, nIconItem);
-
- aEntryPos.setX( nX );
- aEntryPos.setY( nY );
-
- // center horizontally
- aEntryPos.AdjustX((nTempEntryWidth - nItemWidth) / 2 );
- // center vertically
- aEntryPos.AdjustY((nTempEntryHeight - nItemHeight) / 2 );
-
- aEntryPos.AdjustY( -10 );
-
- pItem->Paint(aEntryPos, *this, rRenderContext, pViewDataEntry, rEntry);
- }
-
- if (bCurFontIsSel)
- {
- rRenderContext.SetTextColor(aBackupTextColor);
- rRenderContext.SetFont(aBackupFont);
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/office/iconview.hxx b/fpicker/source/office/iconview.hxx
deleted file mode 100644
index 17a9103e9c2f..000000000000
--- a/fpicker/source/office/iconview.hxx
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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 INCLUDED_SVTOOLS_ICONVIEW_HXX
-#define INCLUDED_SVTOOLS_ICONVIEW_HXX
-
-#include <vcl/treelistbox.hxx>
-
-class IconView : public SvTreeListBox
-{
-public:
- IconView( vcl::Window* pParent, WinBits nBits );
-
- virtual void Resize() override;
-
- virtual tools::Rectangle GetFocusRect( SvTreeListEntry*, long nEntryPos ) override;
-
- void ClearAll();
-
- void PaintEntry( SvTreeListEntry&, long nX, long nY, vcl::RenderContext& rRenderContext);
-};
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/office/iconviewimpl.cxx b/fpicker/source/office/iconviewimpl.cxx
deleted file mode 100644
index ff3bdfcd9e76..000000000000
--- a/fpicker/source/office/iconviewimpl.cxx
+++ /dev/null
@@ -1,662 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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 .
- */
-
-#include <vcl/svapp.hxx>
-#include <tools/debug.hxx>
-#include "iconview.hxx"
-#include "iconviewimpl.hxx"
-
-IconViewImpl::IconViewImpl( SvTreeListBox* pTreeListBox, SvTreeList* pTreeList, WinBits nWinStyle )
-: SvImpLBox( pTreeListBox, pTreeList, nWinStyle )
-{
-}
-
-void IconViewImpl::CursorUp()
-{
- if (!m_pStartEntry)
- return;
-
- SvTreeListEntry* pPrevFirstToDraw = m_pStartEntry;
-
- for(short i = 0; i < m_pView->GetColumnsCount() && pPrevFirstToDraw; i++)
- pPrevFirstToDraw = m_pView->PrevVisible(pPrevFirstToDraw);
-
- if( !pPrevFirstToDraw )
- return;
-
- m_nFlags &= ~LBoxFlags::Filling;
- long nEntryHeight = m_pView->GetEntryHeight();
- ShowCursor( false );
- m_pView->Update();
- m_pStartEntry = pPrevFirstToDraw;
- tools::Rectangle aArea( GetVisibleArea() );
- aArea.AdjustBottom( -nEntryHeight );
- m_pView->Scroll( 0, nEntryHeight, aArea, ScrollFlags::NoChildren );
- m_pView->Update();
- ShowCursor( true );
- m_pView->NotifyScrolled();
-}
-
-void IconViewImpl::CursorDown()
-{
- if (!m_pStartEntry)
- return;
-
- SvTreeListEntry* pNextFirstToDraw = m_pStartEntry;
-
- for(short i = 0; i < m_pView->GetColumnsCount(); i++)
- pNextFirstToDraw = m_pView->NextVisible(pNextFirstToDraw);
-
- if( pNextFirstToDraw )
- {
- m_nFlags &= ~LBoxFlags::Filling;
- ShowCursor( false );
- m_pView->Update();
- m_pStartEntry = pNextFirstToDraw;
- tools::Rectangle aArea( GetVisibleArea() );
- m_pView->Scroll( 0, -(m_pView->GetEntryHeight()), aArea, ScrollFlags::NoChildren );
- m_pView->Update();
- ShowCursor( true );
- m_pView->NotifyScrolled();
- }
-}
-
-void IconViewImpl::PageDown( sal_uInt16 nDelta )
-{
- sal_uInt16 nRealDelta = nDelta * m_pView->GetColumnsCount();
-
- if( !nDelta )
- return;
-
- if (!m_pStartEntry)
- return;
-
- SvTreeListEntry* pNext = m_pView->NextVisible(m_pStartEntry, nRealDelta);
- if( pNext == m_pStartEntry )
- return;
-
- ShowCursor( false );
-
- m_nFlags &= ~LBoxFlags::Filling;
- m_pView->Update();
- m_pStartEntry = pNext;
-
- if( nRealDelta >= m_nVisibleCount )
- {
- m_pView->Invalidate( GetVisibleArea() );
- m_pView->Update();
- }
- else
- {
- tools::Rectangle aArea( GetVisibleArea() );
- long nScroll = m_pView->GetEntryHeight() * static_cast<long>(nRealDelta);
- nScroll = -nScroll;
- m_pView->Update();
- m_pView->Scroll( 0, nScroll, aArea, ScrollFlags::NoChildren );
- m_pView->Update();
- m_pView->NotifyScrolled();
- }
-
- ShowCursor( true );
-}
-
-void IconViewImpl::PageUp( sal_uInt16 nDelta )
-{
- sal_uInt16 nRealDelta = nDelta * m_pView->GetColumnsCount();
- if( !nDelta )
- return;
-
- if (!m_pStartEntry)
- return;
-
- SvTreeListEntry* pPrev = m_pView->PrevVisible(m_pStartEntry, nRealDelta);
- if( pPrev == m_pStartEntry )
- return;
-
- m_nFlags &= ~LBoxFlags::Filling;
- ShowCursor( false );
-
- m_pView->Update();
- m_pStartEntry = pPrev;
- if( nRealDelta >= m_nVisibleCount )
- {
- m_pView->Invalidate( GetVisibleArea() );
- m_pView->Update();
- }
- else
- {
- long nEntryHeight = m_pView->GetEntryHeight();
- tools::Rectangle aArea( GetVisibleArea() );
- m_pView->Update();
- m_pView->Scroll( 0, nEntryHeight*nRealDelta, aArea, ScrollFlags::NoChildren );
- m_pView->Update();
- m_pView->NotifyScrolled();
- }
-
- ShowCursor( true );
-}
-
-void IconViewImpl::KeyDown( bool bPageDown )
-{
- if( !m_aVerSBar->IsVisible() )
- return;
-
- long nDelta;
- if( bPageDown )
- nDelta = m_aVerSBar->GetPageSize();
- else
- nDelta = 1;
-
- long nThumbPos = m_aVerSBar->GetThumbPos();
-
- if( nDelta <= 0 )
- return;
-
- m_nFlags &= ~LBoxFlags::Filling;
- BeginScroll();
-
- m_aVerSBar->SetThumbPos( nThumbPos+nDelta );
- if( bPageDown )
- PageDown( static_cast<short>(nDelta) );
- else
- CursorDown();
-
- EndScroll();
-}
-
-void IconViewImpl::KeyUp( bool bPageUp )
-{
- if( !m_aVerSBar->IsVisible() )
- return;
-
- long nDelta;
- if( bPageUp )
- nDelta = m_aVerSBar->GetPageSize();
- else
- nDelta = 1;
-
- long nThumbPos = m_aVerSBar->GetThumbPos();
-
- if( nThumbPos < nDelta )
- nDelta = nThumbPos;
-
- if( nDelta < 0 )
- return;
-
- m_nFlags &= ~LBoxFlags::Filling;
- BeginScroll();
-
- m_aVerSBar->SetThumbPos( nThumbPos - nDelta );
- if( bPageUp )
- PageUp( static_cast<short>(nDelta) );
- else
- CursorUp();
-
- EndScroll();
-}
-
-long IconViewImpl::GetEntryLine( SvTreeListEntry* pEntry ) const
-{
- if(!m_pStartEntry )
- return -1; // invisible position
-
- long nFirstVisPos = m_pView->GetVisiblePos( m_pStartEntry );
- long nEntryVisPos = m_pView->GetVisiblePos( pEntry );
- nFirstVisPos = nEntryVisPos - nFirstVisPos;
-
- return nFirstVisPos;
-}
-
-Point IconViewImpl::GetEntryPosition( SvTreeListEntry* pEntry ) const
-{
- const int pos = m_pView->GetAbsPos( pEntry );
-
- return Point( ( pos % m_pView->GetColumnsCount() ) * m_pView->GetEntryWidth(),
- ( pos / m_pView->GetColumnsCount() ) * m_pView->GetEntryHeight() );
-}
-
-SvTreeListEntry* IconViewImpl::GetClickedEntry( const Point& rPoint ) const
-{
- DBG_ASSERT( m_pView->GetModel(), "IconViewImpl::GetClickedEntry: how can this ever happen?" );
- if ( !m_pView->GetModel() )
- return nullptr;
- if( m_pView->GetEntryCount() == 0 || !m_pStartEntry || !m_pView->GetEntryHeight() || !m_pView->GetEntryWidth())
- return nullptr;
-
- sal_uInt16 nY = static_cast<sal_uInt16>(rPoint.Y() / m_pView->GetEntryHeight() );
- sal_uInt16 nX = static_cast<sal_uInt16>(rPoint.X() / m_pView->GetEntryWidth() );
- sal_uInt16 nTemp = nY * m_pView->GetColumnsCount() + nX;
-
- SvTreeListEntry* pEntry = m_pView->NextVisible(m_pStartEntry, nTemp);
-
- return pEntry;
-}
-
-bool IconViewImpl::IsEntryInView( SvTreeListEntry* pEntry ) const
-{
- // parent collapsed
- if( !m_pView->IsEntryVisible(pEntry) )
- return false;
-
- long nY = GetEntryLine( pEntry ) / m_pView->GetColumnsCount() * m_pView->GetEntryHeight();
- if( nY < 0 )
- return false;
-
- long nMax = m_nVisibleCount / m_pView->GetColumnsCount() * m_pView->GetEntryHeight();
- if( nY >= nMax )
- return false;
-
- long nStart = GetEntryLine( pEntry ) - GetEntryLine( m_pStartEntry );
- return nStart >= 0;
-}
-
-void IconViewImpl::AdjustScrollBars( Size& rSize )
-{
- long nEntryHeight = m_pView->GetEntryHeight();
- if( !nEntryHeight )
- return;
-
- sal_uInt16 nResult = 0;
-
- Size aOSize( m_pView->Control::GetOutputSizePixel() );
-
- const WinBits nWindowStyle = m_pView->GetStyle();
- bool bVerSBar = ( nWindowStyle & WB_VSCROLL ) != 0;
-
- // number of entries that are not collapsed
- sal_uLong nTotalCount = m_pView->GetVisibleCount();
-
- // number of entries visible within the view
- m_nVisibleCount = aOSize.Height() / nEntryHeight * m_pView->GetColumnsCount();
-
- long nRows = ( nTotalCount / m_pView->GetColumnsCount() ) + 1;
-
- // do we need a vertical scrollbar?
- if( bVerSBar || nTotalCount > m_nVisibleCount )
- {
- nResult = 1;
- }
-
- PositionScrollBars( aOSize, nResult );
-
- // adapt Range, VisibleRange etc.
-
- // refresh output size, in case we have to scroll
- tools::Rectangle aRect;
- aRect.SetSize( aOSize );
- m_aSelEng.SetVisibleArea( aRect );
-
- // vertical scrollbar
- if( !m_bInVScrollHdl )
- {
- m_aVerSBar->SetPageSize( nTotalCount );
- m_aVerSBar->SetVisibleSize( nTotalCount - nRows );
- }
- else
- {
- m_nFlags |= LBoxFlags::EndScrollSetVisSize;
- }
-
- if( nResult & 0x0001 )
- m_aVerSBar->Show();
- else
- m_aVerSBar->Hide();
-
- rSize = aOSize;
-}
-
-// returns 0 if position is just past the last entry
-SvTreeListEntry* IconViewImpl::GetEntry( const Point& rPoint ) const
-{
- if( (m_pView->GetEntryCount() == 0) || !m_pStartEntry ||
- (rPoint.Y() > m_aOutputSize.Height())
- || !m_pView->GetEntryHeight()
- || !m_pView->GetEntryWidth())
- return nullptr;
-
- sal_uInt16 nClickedEntry = static_cast<sal_uInt16>(rPoint.Y() / m_pView->GetEntryHeight() * m_pView->GetColumnsCount() + rPoint.X() / m_pView->GetEntryWidth() );
- sal_uInt16 nTemp = nClickedEntry;
- SvTreeListEntry* pEntry = m_pView->NextVisible(m_pStartEntry, nTemp);
- if( nTemp != nClickedEntry )
- pEntry = nullptr;
- return pEntry;
-}
-
-void IconViewImpl::SyncVerThumb()
-{
- if( m_pStartEntry )
- {
- long nEntryPos = m_pView->GetVisiblePos( m_pStartEntry );
- m_aVerSBar->SetThumbPos( nEntryPos );
- }
- else
- m_aVerSBar->SetThumbPos( 0 );
-}
-
-void IconViewImpl::UpdateAll( bool bInvalidateCompleteView )
-{
- FindMostRight( nullptr );
- m_aVerSBar->SetRange( Range( 0, m_pView->GetVisibleCount() ) );
- SyncVerThumb();
- FillView();
- ShowVerSBar();
- if( m_bSimpleTravel && m_pCursor && m_pView->HasFocus() )
- m_pView->Select( m_pCursor );
- ShowCursor( true );
- if( bInvalidateCompleteView )
- m_pView->Invalidate();
- else
- m_pView->Invalidate( GetVisibleArea() );
-}
-
-void IconViewImpl::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect)
-{
- if (!m_pView->GetVisibleCount())
- return;
-
- m_nFlags |= LBoxFlags::InPaint;
-
- if (m_nFlags & LBoxFlags::Filling)
- {
- SvTreeListEntry* pFirst = m_pView->First();
- if (pFirst != m_pStartEntry)
- {
- ShowCursor(false);
- m_pStartEntry = m_pView->First();
- m_aVerSBar->SetThumbPos( 0 );
- StopUserEvent();
- ShowCursor(true);
- m_nCurUserEvent = Application::PostUserEvent(LINK(this, SvImpLBox, MyUserEvent),
- reinterpret_cast<void*>(1));
- return;
- }
- }
-
- if (!m_pStartEntry)
- {
- m_pStartEntry = m_pView->First();
- }
-
- long nRectHeight = rRect.GetHeight();
- long nRectWidth = rRect.GetWidth();
- long nEntryHeight = m_pView->GetEntryHeight();
- long nEntryWidth = m_pView->GetEntryWidth();
-
- // calculate area for the entries we want to draw
- sal_uInt16 nStartId = static_cast<sal_uInt16>(rRect.Top() / nEntryHeight * m_pView->GetColumnsCount() + (rRect.Left() / nEntryWidth));
- sal_uInt16 nCount = static_cast<sal_uInt16>(( nRectHeight / nEntryHeight + 1 ) * nRectWidth / nEntryWidth);
- nCount += 2; // don't miss an entry
-
- long nY = nStartId / m_pView->GetColumnsCount() * nEntryHeight;
- long nX = 0;
- SvTreeListEntry* pEntry = m_pStartEntry;
- while (nStartId && pEntry)
- {
- pEntry = m_pView->NextVisible(pEntry);
- nStartId--;
- }
-
- vcl::Region aClipRegion(GetClipRegionRect());
-
- if (!m_pCursor && !mbNoAutoCurEntry)
- {
- // do not select if multiselection or explicit set
- bool bNotSelect = (m_aSelEng.GetSelectionMode() == SelectionMode::Multiple ) || ((m_nStyle & WB_NOINITIALSELECTION) == WB_NOINITIALSELECTION);
- SetCursor(m_pStartEntry, bNotSelect);
- }
-
- for(sal_uInt16 n = 0; n< nCount && pEntry; n++)
- {
- static_cast<IconView*>(m_pView.get())->PaintEntry(*pEntry, nX, nY, rRenderContext);
- nX += nEntryWidth;
-
- if(nX + m_pView->GetEntryWidth() > nEntryWidth * m_pView->GetColumnsCount())
- {
- nY += nEntryHeight;
- nX = 0;
- }
- pEntry = m_pView->NextVisible(pEntry);
- }
-
- m_nFlags &= ~LBoxFlags::DeselectAll;
- rRenderContext.SetClipRegion();
- m_nFlags &= ~LBoxFlags::InPaint;
-}
-
-void IconViewImpl::InvalidateEntry( long nId ) const
-{
- if( m_nFlags & LBoxFlags::InPaint )
- return;
-
- tools::Rectangle aRect( GetVisibleArea() );
- long nMaxBottom = aRect.Bottom();
- aRect.SetTop( nId / m_pView->GetColumnsCount() * m_pView->GetEntryHeight() );
- aRect.SetBottom( aRect.Top() ); aRect.AdjustBottom(m_pView->GetEntryHeight() );
-
- if( aRect.Top() > nMaxBottom )
- return;
- if( aRect.Bottom() > nMaxBottom )
- aRect.SetBottom( nMaxBottom );
- m_pView->Invalidate( aRect );
-}
-
-bool IconViewImpl::KeyInput( const KeyEvent& rKEvt )
-{
- const vcl::KeyCode& rKeyCode = rKEvt.GetKeyCode();
-
- if( rKeyCode.IsMod2() )
- return false; // don't evaluate Alt key
-
- m_nFlags &= ~LBoxFlags::Filling;
-
- if( !m_pCursor )
- m_pCursor = m_pStartEntry;
- if( !m_pCursor )
- return false;
-
- sal_uInt16 aCode = rKeyCode.GetCode();
-
- bool bShift = rKeyCode.IsShift();
- bool bMod1 = rKeyCode.IsMod1();
-
- SvTreeListEntry* pNewCursor;
-
- bool bHandled = true;
-
- long i;
- long nColumns = m_pView->GetColumnsCount();
-
- switch( aCode )
- {
- case KEY_LEFT:
- if( !IsEntryInView( m_pCursor ) )
- MakeVisible( m_pCursor );
-
- pNewCursor = m_pCursor;
- do
- {
- pNewCursor = m_pView->PrevVisible(pNewCursor);
- } while( pNewCursor && !IsSelectable(pNewCursor) );
-
- // if there is no next entry, take the current one
- // this ensures that in case of _one_ entry in the list, this entry is selected when pressing
- // the cursor key
- if (!pNewCursor)
- pNewCursor = m_pCursor;
-
- m_aSelEng.CursorPosChanging( bShift, bMod1 );
- SetCursor( pNewCursor, bMod1 ); // no selection, when Ctrl is on
- if( !IsEntryInView( pNewCursor ) )
- KeyUp( false );
- break;
-
- case KEY_RIGHT:
- if( !IsEntryInView( m_pCursor ) )
- MakeVisible( m_pCursor );
-
- pNewCursor = m_pCursor;
- do
- {
- pNewCursor = m_pView->NextVisible(pNewCursor);
- } while( pNewCursor && !IsSelectable(pNewCursor) );
-
- // if there is no next entry, take the current one
- // this ensures that in case of _one_ entry in the list, this entry is selected when pressing
- // the cursor key
- if ( !pNewCursor && m_pCursor )
- pNewCursor = m_pCursor;
-
- if( pNewCursor )
- {
- m_aSelEng.CursorPosChanging( bShift, bMod1 );
- if( IsEntryInView( pNewCursor ) )
- SetCursor( pNewCursor, bMod1 ); // no selection, when Ctrl is on
- else
- {
- if( m_pCursor )
- m_pView->Select( m_pCursor, false );
- KeyDown( false );
- SetCursor( pNewCursor, bMod1 ); // no selection, when Ctrl is on
- }
- }
- else
- KeyDown( false ); // because scrollbar range might still
- // allow scrolling
- break;
-
- case KEY_UP:
- {
- if( !IsEntryInView( m_pCursor ) )
- MakeVisible( m_pCursor );
-
- pNewCursor = m_pCursor;
- for( i = 0; i < nColumns && pNewCursor; i++)
- {
- do
- {
- pNewCursor = m_pView->PrevVisible(pNewCursor);
- } while( pNewCursor && !IsSelectable(pNewCursor) );
- }
-
- // if there is no next entry, take the current one
- // this ensures that in case of _one_ entry in the list, this entry is selected when pressing
- // the cursor key
- if ( !pNewCursor && m_pCursor )
- pNewCursor = m_pCursor;
-
- if( pNewCursor )
- {
- m_aSelEng.CursorPosChanging( bShift, bMod1 );
- SetCursor( pNewCursor, bMod1 ); // no selection, when Ctrl is on
- if( !IsEntryInView( pNewCursor ) )
- KeyUp( false );
- }
- break;
- }
-
- case KEY_DOWN:
- {
- if( !IsEntryInView( m_pCursor ) )
- MakeVisible( m_pCursor );
-
- pNewCursor = m_pCursor;
- for( i = 0; i < nColumns && pNewCursor; i++)
- {
- do
- {
- pNewCursor = m_pView->NextVisible(pNewCursor);
- } while( pNewCursor && !IsSelectable(pNewCursor) );
- }
-
- // if there is no next entry, take the current one
- // this ensures that in case of _one_ entry in the list, this entry is selected when pressing
- // the cursor key
- if ( !pNewCursor && m_pCursor )
- pNewCursor = m_pCursor;
-
- if( pNewCursor )
- {
- m_aSelEng.CursorPosChanging( bShift, bMod1 );
- if( IsEntryInView( pNewCursor ) )
- SetCursor( pNewCursor, bMod1 ); // no selection, when Ctrl is on
- else
- {
- if( m_pCursor )
- m_pView->Select( m_pCursor, false );
- KeyDown( false );
- SetCursor( pNewCursor, bMod1 ); // no selection, when Ctrl is on
- }
- }
- else
- KeyDown( false ); // because scrollbar range might still
- // allow scrolling
- break;
- }
-
- case KEY_RETURN:
- {
- m_pView->aDoubleClickHdl.Call( m_pView );
- bHandled = true;
-
- break;
- }
-
- case KEY_END:
- {
- pNewCursor = m_pView->GetModel()->Last();
-
- while( pNewCursor && !IsSelectable(pNewCursor) )
- {
- pNewCursor = m_pView->PrevVisible(pNewCursor);
- }
-
- m_pStartEntry = pNewCursor;
-
- while( m_pStartEntry && m_pView->GetAbsPos( m_pStartEntry ) % m_pView->GetColumnsCount() != 0 )
- {
- m_pStartEntry = m_pView->PrevVisible(m_pStartEntry);
- }
-
- if( pNewCursor && pNewCursor != m_pCursor)
- {
-// SelAllDestrAnch( false );
- m_aSelEng.CursorPosChanging( bShift, bMod1 );
- SetCursor( pNewCursor );
- SyncVerThumb();
- }
-
- bHandled = true;
-
- break;
- }
-
- default:
- {
- bHandled = false;
- break;
- }
- }
-
- if(!bHandled)
- return SvImpLBox::KeyInput( rKEvt );
-
- return true;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/office/iconviewimpl.hxx b/fpicker/source/office/iconviewimpl.hxx
deleted file mode 100644
index df11f5952426..000000000000
--- a/fpicker/source/office/iconviewimpl.hxx
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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 INCLUDED_VCL_SOURCE_INC_ICONVIEWIMPL_HXX
-#define INCLUDED_VCL_SOURCE_INC_ICONVIEWIMPL_HXX
-
-#include <vcl/svimpbox.hxx>
-
-class SvTreeListBox;
-class Point;
-
-class IconViewImpl : public SvImpLBox
-{
-public:
- IconViewImpl( SvTreeListBox* pTreeListBox, SvTreeList* pTreeList, WinBits nWinStyle );
-
- void KeyDown( bool bPageDown ) override;
-
- void KeyUp( bool bPageUp ) override;
-
- Point GetEntryPosition( SvTreeListEntry* pEntry ) const override;
-
- SvTreeListEntry* GetClickedEntry( const Point& rPoint ) const override;
-
- bool IsEntryInView( SvTreeListEntry* pEntry ) const override;
-
- void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
-
- // returns 0 if position is just past the last entry
- SvTreeListEntry* GetEntry( const Point& rPoint ) const override;
-
- void UpdateAll( bool bInvalidateCompleteView ) override;
-
- bool KeyInput( const KeyEvent& ) override;
-
- void InvalidateEntry( long nId ) const override;
-
-protected:
- long GetEntryLine( SvTreeListEntry* pEntry ) const override;
-
- void CursorUp() override;
- void CursorDown() override;
- void PageDown( sal_uInt16 nDelta ) override;
- void PageUp( sal_uInt16 nDelta ) override;
-
- void SyncVerThumb() override;
- void AdjustScrollBars( Size& rSize ) override;
-};
-
-#endif // INCLUDED_VCL_SOURCE_INC_ICONVIEWIMPL_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/office/iodlg.cxx b/fpicker/source/office/iodlg.cxx
index de406c908780..61e5b2ce0d55 100644
--- a/fpicker/source/office/iodlg.cxx
+++ b/fpicker/source/office/iodlg.cxx
@@ -28,8 +28,8 @@
#include <fpsofficeResMgr.hxx>
#include <tools/stream.hxx>
#include <tools/urlobj.hxx>
-#include <vcl/errinf.hxx>
-#include <vcl/event.hxx>
+#include <vcl/graph.hxx>
+#include <vcl/layout.hxx>
#include <vcl/lstbox.hxx>
#include <vcl/svapp.hxx>
#include <vcl/timer.hxx>
@@ -95,20 +95,14 @@ using namespace ExtendedFilePickerElementIds;
using namespace CommonFilePickerElementIds;
using namespace InternalFilePickerElementIds;
-// Time to wait while traveling in the filterbox until
-// the browsebox gets filtered ( in ms).
-#define TRAVELFILTER_TIMEOUT 750
-
// functions -------------------------------------------------------------
namespace
{
-
-
OUString getMostCurrentFilter( std::unique_ptr<SvtExpFileDlg_Impl> const & pImpl )
{
assert( pImpl && "invalid impl pointer" );
- const SvtFileDialogFilter_Impl* pFilter = pImpl->_pUserFilter.get();
+ const SvtFileDialogFilter_Impl* pFilter = pImpl->m_xUserFilter.get();
if ( !pFilter )
pFilter = pImpl->GetCurFilter();
@@ -119,7 +113,6 @@ namespace
return pFilter->GetType();
}
-
bool restoreCurrentFilter( std::unique_ptr<SvtExpFileDlg_Impl> const & pImpl )
{
SAL_WARN_IF( !pImpl->GetCurFilter(), "fpicker.office", "restoreCurrentFilter: no current filter!" );
@@ -283,360 +276,113 @@ namespace
}
// SvtFileDialog
-
-SvtFileDialog::SvtFileDialog
-(
- vcl::Window* _pParent,
- PickerFlags nBits
-) :
- SvtFileDialog_Base( _pParent, "ExplorerFileDialog", "fps/ui/explorerfiledialog.ui" )
-
- ,_pCbReadOnly( nullptr )
- ,_pCbLinkBox( nullptr)
- ,_pCbPreviewBox( nullptr )
- ,_pCbSelection( nullptr )
- ,_pPbPlay( nullptr )
- ,_pPrevWin( nullptr )
- ,_pPrevBmp( nullptr )
- ,_pFileView( nullptr )
- ,_pFileNotifier( nullptr )
- ,pImpl( new SvtExpFileDlg_Impl )
- ,_nPickerFlags( nBits )
- ,_bIsInExecute( false )
- ,m_bInExecuteAsync( false )
- ,m_bHasFilename( false )
- ,m_context(comphelper::getProcessComponentContext())
-{
- Init_Impl( nBits );
-}
-
-
-class CustomContainer : public vcl::Window
-{
- enum FocusState
- {
- Prev = 0,
- Places,
- Add,
- Delete,
- FileView,
- Next,
- FocusCount
- };
-
- SvtExpFileDlg_Impl* pImpl;
- VclPtr<SvtFileView> _pFileView;
- VclPtr<Splitter> _pSplitter;
-
- int m_nCurrentFocus;
- VclPtr<vcl::Window> m_pFocusWidgets[FocusState::FocusCount];
-
-public:
- explicit CustomContainer(vcl::Window *pParent)
- : Window(pParent)
- , pImpl(nullptr)
- , _pFileView(nullptr)
- , _pSplitter(nullptr)
- , m_nCurrentFocus(FocusState::Prev)
- {
- }
- virtual ~CustomContainer() override { disposeOnce(); }
- virtual void dispose() override
- {
- _pFileView.clear();
- _pSplitter.clear();
- vcl::Window::dispose();
- }
-
- void init(SvtExpFileDlg_Impl* pImp,
- SvtFileView* pFileView,
- Splitter* pSplitter,
- vcl::Window* pPrev,
- vcl::Window* pNext)
- {
- pImpl = pImp;
- _pFileView = pFileView;
- _pSplitter = pSplitter;
-
- m_pFocusWidgets[FocusState::Prev] = pPrev;
- m_pFocusWidgets[FocusState::Places] = pImpl->_pPlaces->GetPlacesListBox();
- m_pFocusWidgets[FocusState::Add] = pImpl->_pPlaces->GetAddButton();
- m_pFocusWidgets[FocusState::Delete] = pImpl->_pPlaces->GetDeleteButton();
- m_pFocusWidgets[FocusState::FileView] = pFileView;
- m_pFocusWidgets[FocusState::Next] = pNext;
- }
-
- virtual void Resize() override
- {
- Window::Resize();
-
- if (!pImpl || !pImpl->_pPlaces)
- return;
-
- Size aSize = GetSizePixel();
-
- Point aBoxPos(_pFileView->GetPosPixel());
- Size aNewSize(aSize.Width() - aBoxPos.X(), aSize.Height());
- _pFileView->SetSizePixel( aNewSize );
-
- // Resize the Splitter to fit the height
- Size splitterNewSize = _pSplitter->GetSizePixel( );
- splitterNewSize.setHeight( aSize.Height() );
- _pSplitter->SetSizePixel( splitterNewSize );
- sal_Int32 nMinX = pImpl->_pPlaces->GetPosPixel( ).X( );
- sal_Int32 nMaxX = _pFileView->GetPosPixel( ).X( ) + _pFileView->GetSizePixel( ).Width() - nMinX;
- _pSplitter->SetDragRectPixel( tools::Rectangle( Point( nMinX, 0 ), Size( nMaxX, aSize.Width() ) ) );
-
- // Resize the places list box to fit the height of the FileView
- Size placesNewSize(pImpl->_pPlaces->GetSizePixel());
- placesNewSize.setHeight( aSize.Height() );
- pImpl->_pPlaces->SetSizePixel( placesNewSize );
- }
-
- void changeFocus( bool bReverse )
- {
- if( !_pFileView || !pImpl || !pImpl->_pPlaces )
- return;
-
- if( bReverse && m_nCurrentFocus > FocusState::Prev && m_nCurrentFocus <= FocusState::Next )
- {
- m_pFocusWidgets[m_nCurrentFocus]->SetFakeFocus(false);
- m_pFocusWidgets[m_nCurrentFocus]->LoseFocus();
-
- m_pFocusWidgets[--m_nCurrentFocus]->SetFakeFocus( true );
- m_pFocusWidgets[m_nCurrentFocus]->GrabFocus();
- }
- else if( !bReverse && m_nCurrentFocus >= FocusState::Prev && m_nCurrentFocus < FocusState::Next )
- {
- m_pFocusWidgets[m_nCurrentFocus]->SetFakeFocus(false);
- m_pFocusWidgets[m_nCurrentFocus]->LoseFocus();
-
- m_pFocusWidgets[++m_nCurrentFocus]->SetFakeFocus( true );
- m_pFocusWidgets[m_nCurrentFocus]->GrabFocus();
- }
- }
-
- virtual void GetFocus() override
- {
- if( !_pFileView || !pImpl || !pImpl->_pPlaces )
- return;
-
- GetFocusFlags aFlags = GetGetFocusFlags();
-
- if( aFlags & GetFocusFlags::Forward )
- m_nCurrentFocus = FocusState::Places;
- else if( aFlags & GetFocusFlags::Backward )
- m_nCurrentFocus = FocusState::FileView;
-
- if( m_nCurrentFocus >= FocusState::Prev && m_nCurrentFocus <= FocusState::Next )
- {
- m_pFocusWidgets[m_nCurrentFocus]->SetFakeFocus( true );
- m_pFocusWidgets[m_nCurrentFocus]->GrabFocus();
- }
- }
-
- virtual bool EventNotify( NotifyEvent& rNEvt ) override
- {
- if( rNEvt.GetType() == MouseNotifyEvent::GETFOCUS )
- {
- // we must also update counter when user change focus using mouse
- for(int i = FocusState::Prev; i <= FocusState::Next; i++)
- {
- if( rNEvt.GetWindow() == m_pFocusWidgets[i] )
- {
- m_nCurrentFocus = i;
- return true;
- }
- }
-
- // GETFOCUS for one of FileView's subcontrols
- m_nCurrentFocus = FocusState::FileView;
- return true;
- }
- if( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
- {
- const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent();
- const vcl::KeyCode& rCode = pKeyEvent->GetKeyCode();
- bool bShift = rCode.IsShift();
- if( rCode.GetCode() == KEY_TAB )
- {
- changeFocus( bShift );
- return true;
- }
- }
- return Window::EventNotify(rNEvt);
- }
-};
-
-SvtFileDialog::~SvtFileDialog()
-{
- disposeOnce();
-}
-
-void SvtFileDialog::dispose()
-{
- if ( !pImpl->_aIniKey.isEmpty() )
- {
- // save window state
- SvtViewOptions aDlgOpt( EViewType::Dialog, pImpl->_aIniKey );
- aDlgOpt.SetWindowState(OStringToOUString(GetWindowState(), osl_getThreadTextEncoding()));
- OUString sUserData = _pFileView->GetConfigString();
- aDlgOpt.SetUserItem( "UserData",
- makeAny( sUserData ) );
- }
-
- _pFileView->SetSelectHdl( Link<SvTreeListBox*,void>() );
-
- // Save bookmarked places
- if(pImpl->_pPlaces->IsUpdated()) {
- const std::vector<PlacePtr> aPlaces = pImpl->_pPlaces->GetPlaces();
- Sequence< OUString > placesUrlsList(pImpl->_pPlaces->GetNbEditablePlaces());
- Sequence< OUString > placesNamesList(pImpl->_pPlaces->GetNbEditablePlaces());
- int i(0);
- for (auto const& place : aPlaces)
- {
- if(place->IsEditable()) {
- placesUrlsList[i] = place->GetUrl();
- placesNamesList[i] = place->GetName();
- ++i;
- }
- }
-
- std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create(m_context));
- officecfg::Office::Common::Misc::FilePickerPlacesUrls::set(placesUrlsList, batch);
- officecfg::Office::Common::Misc::FilePickerPlacesNames::set(placesNamesList, batch);
- batch->commit();
- }
-
- _pFileView.disposeAndClear();
- pImpl.reset();
- _pSplitter.disposeAndClear();
- _pContainer.disposeAndClear();
- _pPrevBmp.disposeAndClear();
- _pCbReadOnly.clear();
- _pCbLinkBox.clear();
- _pCbPreviewBox.clear();
- _pCbSelection.clear();
- _pPbPlay.clear();
- _pPrevWin.clear();
- m_aDisabledControls.clear();
- Dialog::dispose();
-}
-
-void SvtFileDialog::Init_Impl
-(
- PickerFlags nStyle
-)
-{
- get(_pCbReadOnly, "readonly");
- get(_pCbLinkBox, "link");
- get(_pCbPreviewBox, "cb_preview");
- get(_pCbSelection, "selection");
- get(_pPrevWin, "preview");
- get(_pPbPlay, "play");
- get(pImpl->_pCbOptions, "options");
- get(pImpl->_pFtFileName, "file_name_label");
- get(pImpl->_pEdFileName, "file_name");
- pImpl->_pEdFileName->GetFocus();
- get(pImpl->_pFtFileType, "file_type_label");
- get(pImpl->_pLbFilter, "file_type");
- get(pImpl->_pEdCurrentPath, "current_path");
- get(pImpl->_pBtnFileOpen, "open");
- get(pImpl->_pBtnCancel, "cancel");
- get(pImpl->_pBtnHelp, "help");
- get(pImpl->_pBtnConnectToServer, "connect_to_server");
- get(pImpl->_pBtnNewFolder, "new_folder");
- get(pImpl->_pCbPassword, "password");
- get(pImpl->_pCbGPGEncrypt, "gpgencrypt");
- get(pImpl->_pCbAutoExtension, "extension");
- get(pImpl->_pFtFileVersion, "shared_label");
- get(pImpl->_pLbFileVersion, "shared");
- get(pImpl->_pFtTemplates, "shared_label");
- get(pImpl->_pLbTemplates, "shared");
- get(pImpl->_pFtImageTemplates, "shared_label");
- get(pImpl->_pLbImageTemplates, "shared");
- get(pImpl->_pFtImageAnchor, "shared_label");
- get(pImpl->_pLbImageAnchor, "shared");
-
- pImpl->_pLbImageTemplates->setMaxWidthChars(40);
- pImpl->_pLbFilter->setMaxWidthChars(40);
-
- vcl::Window *pUpContainer = get<vcl::Window>("up");
- pImpl->_pBtnUp = VclPtr<SvtUpButton_Impl>::Create(pUpContainer, this, 0);
- pImpl->_pBtnUp->SetHelpId( HID_FILEOPEN_LEVELUP );
- pImpl->_pBtnUp->set_vexpand(true);
- pImpl->_pBtnUp->Show();
-
- pImpl->_nStyle = nStyle;
- pImpl->_eMode = ( nStyle & PickerFlags::SaveAs ) ? FILEDLG_MODE_SAVE : FILEDLG_MODE_OPEN;
- pImpl->_eDlgType = FILEDLG_TYPE_FILEDLG;
-
- if ( nStyle & PickerFlags::PathDialog )
- pImpl->_eDlgType = FILEDLG_TYPE_PATHDLG;
+SvtFileDialog::SvtFileDialog(weld::Window* pParent, PickerFlags nStyle)
+ : SvtFileDialog_Base(pParent, "fps/ui/explorerfiledialog.ui", "ExplorerFileDialog")
+ , m_xCbReadOnly(m_xBuilder->weld_check_button("readonly"))
+ , m_xCbLinkBox(m_xBuilder->weld_check_button("link"))
+ , m_xCbPreviewBox(m_xBuilder->weld_check_button("cb_preview"))
+ , m_xCbSelection(m_xBuilder->weld_check_button("selection"))
+ , m_xPbPlay(m_xBuilder->weld_button("play"))
+ , m_xPreviewFrame(m_xBuilder->weld_widget("previewframe"))
+ , m_xPrevBmp(m_xBuilder->weld_image("preview"))
+ , m_pFileNotifier(nullptr)
+ , m_xImpl(new SvtExpFileDlg_Impl)
+ , m_nPickerFlags(nStyle)
+ , m_bIsInExecute(false)
+ , m_bInExecuteAsync(false)
+ , m_bHasFilename(false)
+ , m_xContext(comphelper::getProcessComponentContext())
+{
+ m_xImpl->m_xCbOptions = m_xBuilder->weld_check_button("options");
+ m_xImpl->m_xFtFileName = m_xBuilder->weld_label("file_name_label");
+ m_xImpl->m_xEdFileName.reset(new URLBox(m_xBuilder->weld_combo_box("file_name")));
+ m_xImpl->m_xFtFileType = m_xBuilder->weld_label("file_type_label");
+ m_xImpl->m_xLbFilter = m_xBuilder->weld_combo_box("file_type");
+ m_xImpl->m_xEdCurrentPath.reset(new URLBox(m_xBuilder->weld_combo_box("current_path")));
+ m_xImpl->m_xBtnFileOpen = m_xBuilder->weld_button("open");
+ m_xImpl->m_xBtnCancel = m_xBuilder->weld_button("cancel");
+ m_xImpl->m_xBtnHelp = m_xBuilder->weld_button("help");
+ m_xImpl->m_xBtnConnectToServer = m_xBuilder->weld_button("connect_to_server");
+ m_xImpl->m_xBtnNewFolder = m_xBuilder->weld_button("new_folder");
+ m_xImpl->m_xCbPassword = m_xBuilder->weld_check_button("password");
+ m_xImpl->m_xCbGPGEncrypt = m_xBuilder->weld_check_button("gpgencrypt");
+ m_xImpl->m_xCbAutoExtension = m_xBuilder->weld_check_button("extension");
+ m_xImpl->m_xFtFileVersion = m_xBuilder->weld_label("shared_label");
+ m_xImpl->m_xLbFileVersion = m_xBuilder->weld_combo_box("shared");
+ m_xImpl->m_xFtTemplates = m_xBuilder->weld_label("shared_label");
+ m_xImpl->m_xLbTemplates = m_xBuilder->weld_combo_box("shared");
+ m_xImpl->m_xFtImageTemplates = m_xBuilder->weld_label("shared_label");
+ m_xImpl->m_xLbImageTemplates = m_xBuilder->weld_combo_box("shared");
+ m_xImpl->m_xFtImageAnchor = m_xBuilder->weld_label("shared_label");
+ m_xImpl->m_xLbImageAnchor = m_xBuilder->weld_combo_box("shared");
+
+ // because the "<All Formats> (*.bmp,*...)" entry is too wide,
+ // we need to disable the auto width feature of the filter box
+ int nWidth = m_xImpl->m_xLbFilter->get_approximate_digit_width() * 60;
+ m_xImpl->m_xLbImageTemplates->set_size_request(nWidth, -1);
+ m_xImpl->m_xLbFilter->set_size_request(nWidth, -1);
+
+ m_xImpl->m_xBtnUp.reset(new SvtUpButton_Impl(m_xBuilder->weld_toolbar("up_bar"),
+ m_xBuilder->weld_menu("up_menu"),
+ this));
+ m_xImpl->m_xBtnUp->set_help_id(HID_FILEOPEN_LEVELUP);
+ m_xImpl->m_xBtnUp->show();
+
+ m_xImpl->m_nStyle = nStyle;
+ m_xImpl->m_eMode = ( nStyle & PickerFlags::SaveAs ) ? FILEDLG_MODE_SAVE : FILEDLG_MODE_OPEN;
+ m_xImpl->m_eDlgType = FILEDLG_TYPE_FILEDLG;
+
+ if (nStyle & PickerFlags::PathDialog)
+ m_xImpl->m_eDlgType = FILEDLG_TYPE_PATHDLG;
// Set the directory for the "back to the default dir" button
INetURLObject aStdDirObj( SvtPathOptions().GetWorkPath() );
SetStandardDir( aStdDirObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
// Create control element, the order defines the tab control.
- pImpl->_pEdFileName->SetSelectHdl( LINK( this, SvtFileDialog, EntrySelectHdl_Impl ) );
- pImpl->_pEdFileName->SetOpenHdl( LINK( this, SvtFileDialog, OpenUrlHdl_Impl ) );
+ m_xImpl->m_xEdFileName->connect_changed( LINK( this, SvtFileDialog, EntrySelectHdl_Impl ) );
+ m_xImpl->m_xEdFileName->connect_entry_activate( LINK( this, SvtFileDialog, OpenUrlHdl_Impl ) );
// in folder picker mode, only auto-complete directories (no files)
- bool bIsFolderPicker = ( pImpl->_eDlgType == FILEDLG_TYPE_PATHDLG );
- pImpl->_pEdFileName->SetOnlyDirectories( bIsFolderPicker );
+ bool bIsFolderPicker = m_xImpl->m_eDlgType == FILEDLG_TYPE_PATHDLG;
+ m_xImpl->m_xEdFileName->SetOnlyDirectories( bIsFolderPicker );
// in save mode, don't use the autocompletion as selection in the edit part
- bool bSaveMode = ( FILEDLG_MODE_SAVE == pImpl->_eMode );
- pImpl->_pEdFileName->SetNoURLSelection( bSaveMode );
+ bool bSaveMode = FILEDLG_MODE_SAVE == m_xImpl->m_eMode;
+ m_xImpl->m_xEdFileName->SetNoURLSelection( bSaveMode );
- pImpl->_pBtnUp->SetAccessibleName( pImpl->_pBtnUp->GetQuickHelpText() );
+ if (nStyle & PickerFlags::MultiSelection)
+ m_xImpl->m_bMultiSelection = true;
- if ( nStyle & PickerFlags::MultiSelection )
- pImpl->_bMultiSelection = true;
+ m_xContainer = m_xBuilder->weld_container("container");
+ m_xContainer->set_size_request(m_xContainer->get_approximate_digit_width() * 95, -1);
- _pContainer.reset(VclPtr<CustomContainer>::Create(get<vcl::Window>("container")));
- Size aSize(LogicToPixel(Size(270, 85), MapMode(MapUnit::MapAppFont)));
- _pContainer->set_height_request(aSize.Height());
- _pContainer->set_width_request(aSize.Width());
- _pContainer->set_hexpand(true);
- _pContainer->set_vexpand(true);
- _pContainer->SetStyle( _pContainer->GetStyle() | WB_TABSTOP );
-
- _pFileView = VclPtr<SvtFileView>::Create( _pContainer, WB_BORDER,
- FILEDLG_TYPE_PATHDLG == pImpl->_eDlgType,
- pImpl->_bMultiSelection );
- _pFileView->Show();
- _pFileView->EnableAutoResize();
- _pFileView->SetHelpId( HID_FILEDLG_STANDARD );
- _pFileView->SetStyle( _pFileView->GetStyle() | WB_TABSTOP );
-
- _pSplitter = VclPtr<Splitter>::Create( _pContainer, WB_HSCROLL );
- _pSplitter->SetBackground( Wallpaper( Application::GetSettings().GetStyleSettings().GetFaceColor() ));
- _pSplitter->SetSplitHdl( LINK( this, SvtFileDialog, Split_Hdl ) );
-
- Image aNewFolderImg( GetButtonImage( BMP_FILEDLG_CREATEFOLDER ) );
- pImpl->_pBtnNewFolder->SetModeImage( aNewFolderImg );
+ m_xFileView.reset(new SvtFileView(m_xDialog.get(),
+ m_xBuilder->weld_tree_view("fileview"),
+ m_xBuilder->weld_icon_view("iconview"),
+ FILEDLG_TYPE_PATHDLG == m_xImpl->m_eDlgType,
+ m_xImpl->m_bMultiSelection));
+ m_xFileView->set_help_id( HID_FILEDLG_STANDARD );
if ( nStyle & PickerFlags::ReadOnly )
{
- _pCbReadOnly->SetHelpId( HID_FILEOPEN_READONLY );
- _pCbReadOnly->SetText( FpsResId( STR_SVT_FILEPICKER_READONLY ) );
- _pCbReadOnly->SetClickHdl( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
- _pCbReadOnly->Show();
+ m_xCbReadOnly->set_help_id( HID_FILEOPEN_READONLY );
+ m_xCbReadOnly->set_label( FpsResId( STR_SVT_FILEPICKER_READONLY ) );
+ m_xCbReadOnly->connect_clicked( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
+ m_xCbReadOnly->show();
}
if ( nStyle & PickerFlags::Password )
{
- pImpl->_pCbPassword->SetText( FpsResId( STR_SVT_FILEPICKER_PASSWORD ) );
- pImpl->_pCbPassword->SetClickHdl( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
- pImpl->_pCbPassword->Show();
- pImpl->_pCbGPGEncrypt->SetClickHdl( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
- pImpl->_pCbGPGEncrypt->Show();
+ m_xImpl->m_xCbPassword->set_label( FpsResId( STR_SVT_FILEPICKER_PASSWORD ) );
+ m_xImpl->m_xCbPassword->connect_clicked( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
+ m_xImpl->m_xCbPassword->show();
+ m_xImpl->m_xCbGPGEncrypt->connect_clicked( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
+ m_xImpl->m_xCbGPGEncrypt->show();
}
// set the ini file for extracting the size
- pImpl->_aIniKey = "FileDialog";
+ m_xImpl->m_aIniKey = "FileDialog";
AddControls_Impl( );
@@ -652,70 +398,68 @@ void SvtFileDialog::Init_Impl
if ( nStyle & PickerFlags::PathDialog )
{
- pImpl->_pFtFileName->SetText( FpsResId( STR_PATHNAME ) );
+ m_xImpl->m_xFtFileName->set_label( FpsResId( STR_PATHNAME ) );
pResId = STR_PATHSELECT;
pButtonResId = STR_BUTTONSELECT;
}
- SetText( FpsResId( pResId ) );
+ m_xDialog->set_title(FpsResId(pResId));
if ( pButtonResId )
- pImpl->_pBtnFileOpen->SetText( FpsResId( pButtonResId ) );
+ m_xImpl->m_xBtnFileOpen->set_label( FpsResId( pButtonResId ) );
- if ( FILEDLG_TYPE_FILEDLG != pImpl->_eDlgType )
+ if ( FILEDLG_TYPE_FILEDLG != m_xImpl->m_eDlgType )
{
- pImpl->_pFtFileType->Hide();
- pImpl->GetFilterListControl()->Hide();
+ m_xImpl->m_xFtFileType->hide();
+ m_xImpl->GetFilterListControl()->hide();
}
// Setting preferences of the control elements.
- pImpl->_pBtnNewFolder->SetClickHdl( LINK( this, SvtFileDialog, NewFolderHdl_Impl ) );
- pImpl->_pBtnFileOpen->SetClickHdl( LINK( this, SvtFileDialog, OpenClickHdl_Impl ) );
- pImpl->_pBtnCancel->SetClickHdl( LINK( this, SvtFileDialog, CancelHdl_Impl ) );
- pImpl->SetFilterListSelectHdl( LINK( this, SvtFileDialog, FilterSelectHdl_Impl ) );
- pImpl->_pEdFileName->SetGetFocusHdl( LINK( this, SvtFileDialog, FileNameGetFocusHdl_Impl ) );
- pImpl->_pEdFileName->SetModifyHdl( LINK( this, SvtFileDialog, FileNameModifiedHdl_Impl ) );
- pImpl->_pEdCurrentPath->SetOpenHdl ( LINK( this, SvtFileDialog, URLBoxModifiedHdl_Impl ) );
- pImpl->_pBtnConnectToServer->SetClickHdl( LINK ( this, SvtFileDialog, ConnectToServerPressed_Hdl ) );
-
-
- _pFileView->SetSelectHdl( LINK( this, SvtFileDialog, SelectHdl_Impl ) );
- _pFileView->SetDoubleClickHdl( LINK( this, SvtFileDialog, DblClickHdl_Impl ) );
- _pFileView->SetOpenDoneHdl( LINK( this, SvtFileDialog, OpenDoneHdl_Impl ) );
-
+ m_xImpl->m_xBtnNewFolder->connect_clicked( LINK( this, SvtFileDialog, NewFolderHdl_Impl ) );
+ m_xImpl->m_xBtnFileOpen->connect_clicked( LINK( this, SvtFileDialog, OpenClickHdl_Impl ) );
+ m_xImpl->m_xBtnCancel->connect_clicked( LINK( this, SvtFileDialog, CancelHdl_Impl ) );
+ m_xImpl->SetFilterListSelectHdl( LINK( this, SvtFileDialog, FilterSelectHdl_Impl ) );
+ m_xImpl->m_xEdFileName->connect_focus_in( LINK( this, SvtFileDialog, FileNameGetFocusHdl_Impl ) );
+ m_xImpl->m_xEdFileName->connect_changed( LINK( this, SvtFileDialog, FileNameModifiedHdl_Impl ) );
+ m_xImpl->m_xEdCurrentPath->connect_entry_activate( LINK( this, SvtFileDialog, URLBoxModifiedHdl_Impl ) );
+ m_xImpl->m_xBtnConnectToServer->connect_clicked( LINK ( this, SvtFileDialog, ConnectToServerPressed_Hdl ) );
+
+ m_xFileView->SetSelectHdl( LINK( this, SvtFileDialog, SelectHdl_Impl ) );
+ m_xFileView->SetDoubleClickHdl( LINK( this, SvtFileDialog, DblClickHdl_Impl ) );
+ m_xFileView->SetOpenDoneHdl( LINK( this, SvtFileDialog, OpenDoneHdl_Impl ) );
// set timer for the filterbox travel
- pImpl->_aFilterTimer.SetTimeout( TRAVELFILTER_TIMEOUT );
- pImpl->_aFilterTimer.SetInvokeHandler( LINK( this, SvtFileDialog, FilterSelectTimerHdl_Impl ) );
+ m_xImpl->m_aFilterIdle.SetPriority(TaskPriority::LOWEST);
+ m_xImpl->m_aFilterIdle.SetInvokeHandler( LINK( this, SvtFileDialog, FilterSelectTimerHdl_Impl ) );
if ( PickerFlags::SaveAs & nStyle )
{
// different help ids if in save-as mode
- SetHelpId( HID_FILESAVE_DIALOG );
+ m_xDialog->set_help_id( HID_FILESAVE_DIALOG );
- pImpl->_pEdFileName->SetHelpId( HID_FILESAVE_FILEURL );
- pImpl->_pBtnFileOpen->SetHelpId( HID_FILESAVE_DOSAVE );
- pImpl->_pBtnNewFolder->SetHelpId( HID_FILESAVE_CREATEDIRECTORY );
- pImpl->_pBtnUp->SetHelpId( HID_FILESAVE_LEVELUP );
- pImpl->GetFilterListControl()->SetHelpId( HID_FILESAVE_FILETYPE );
- _pFileView->SetHelpId( HID_FILESAVE_FILEVIEW );
+ m_xImpl->m_xEdFileName->set_help_id( HID_FILESAVE_FILEURL );
+ m_xImpl->m_xBtnFileOpen->set_help_id( HID_FILESAVE_DOSAVE );
+ m_xImpl->m_xBtnNewFolder->set_help_id( HID_FILESAVE_CREATEDIRECTORY );
+ m_xImpl->m_xBtnUp->set_help_id( HID_FILESAVE_LEVELUP );
+ m_xImpl->GetFilterListControl()->set_help_id( HID_FILESAVE_FILETYPE );
+ m_xFileView->set_help_id( HID_FILESAVE_FILEVIEW );
// formerly, there was only _pLbFileVersion, which was used for 3 different
// use cases. For reasons of maintainability, I introduced extra members (_pLbTemplates, _pLbImageTemplates)
// for the extra use cases, and separated _pLbFileVersion
// I did not find out in which cases the help ID is really needed HID_FILESAVE_TEMPLATE - all
// tests I made lead to a dialog where _no_ of the three list boxes was present.
- if ( pImpl->_pLbFileVersion )
- pImpl->_pLbFileVersion->SetHelpId( HID_FILESAVE_TEMPLATE );
- if ( pImpl->_pLbTemplates )
- pImpl->_pLbTemplates->SetHelpId( HID_FILESAVE_TEMPLATE );
- if ( pImpl->_pLbImageTemplates )
- pImpl->_pLbImageTemplates->SetHelpId( HID_FILESAVE_TEMPLATE );
+ if ( m_xImpl->m_xLbFileVersion )
+ m_xImpl->m_xLbFileVersion->set_help_id( HID_FILESAVE_TEMPLATE );
+ if ( m_xImpl->m_xLbTemplates )
+ m_xImpl->m_xLbTemplates->set_help_id( HID_FILESAVE_TEMPLATE );
+ if ( m_xImpl->m_xLbImageTemplates )
+ m_xImpl->m_xLbImageTemplates->set_help_id( HID_FILESAVE_TEMPLATE );
- if ( pImpl->_pCbPassword ) pImpl->_pCbPassword->SetHelpId( HID_FILESAVE_SAVEWITHPASSWORD );
- if ( pImpl->_pCbAutoExtension ) pImpl->_pCbAutoExtension->SetHelpId( HID_FILESAVE_AUTOEXTENSION );
- if ( pImpl->_pCbOptions ) pImpl->_pCbOptions->SetHelpId( HID_FILESAVE_CUSTOMIZEFILTER );
- if ( _pCbSelection ) _pCbSelection->SetHelpId( HID_FILESAVE_SELECTION );
+ if ( m_xImpl->m_xCbPassword ) m_xImpl->m_xCbPassword->set_help_id( HID_FILESAVE_SAVEWITHPASSWORD );
+ if ( m_xImpl->m_xCbAutoExtension ) m_xImpl->m_xCbAutoExtension->set_help_id( HID_FILESAVE_AUTOEXTENSION );
+ if ( m_xImpl->m_xCbOptions ) m_xImpl->m_xCbOptions->set_help_id( HID_FILESAVE_CUSTOMIZEFILTER );
+ if ( m_xCbSelection ) m_xCbSelection->set_help_id( HID_FILESAVE_SELECTION );
}
/// read our settings from the configuration
@@ -724,20 +468,54 @@ void SvtFileDialog::Init_Impl
"/org.openoffice.Office.UI/FilePicker"
);
- _pContainer->init(pImpl.get(), _pFileView, _pSplitter, pImpl->_pBtnNewFolder, pImpl->_pEdFileName);
- _pContainer->Show();
+ m_xDialog->connect_size_allocate(LINK(this, SvtFileDialog, SizeAllocHdl));
+ SizeAllocHdl(Size());
+}
+
+SvtFileDialog::~SvtFileDialog()
+{
+ if (!m_xImpl->m_aIniKey.isEmpty())
+ {
+ // save window state
+ SvtViewOptions aDlgOpt( EViewType::Dialog, m_xImpl->m_aIniKey );
+ aDlgOpt.SetWindowState(OStringToOUString(m_xDialog->get_window_state(WindowStateMask::All), RTL_TEXTENCODING_UTF8));
+ OUString sUserData = m_xFileView->GetConfigString();
+ aDlgOpt.SetUserItem( "UserData",
+ makeAny( sUserData ) );
+ }
+
+ m_xFileView->SetSelectHdl(Link<SvtFileView*,void>());
+
+ // Save bookmarked places
+ if (m_xImpl->m_xPlaces->IsUpdated()) {
+ const std::vector<PlacePtr> aPlaces = m_xImpl->m_xPlaces->GetPlaces();
+ Sequence< OUString > placesUrlsList(m_xImpl->m_xPlaces->GetNbEditablePlaces());
+ Sequence< OUString > placesNamesList(m_xImpl->m_xPlaces->GetNbEditablePlaces());
+ int i(0);
+ for (auto const& place : aPlaces)
+ {
+ if(place->IsEditable()) {
+ placesUrlsList[i] = place->GetUrl();
+ placesNamesList[i] = place->GetName();
+ ++i;
+ }
+ }
- Resize();
+ std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create(m_xContext));
+ officecfg::Office::Common::Misc::FilePickerPlacesUrls::set(placesUrlsList, batch);
+ officecfg::Office::Common::Misc::FilePickerPlacesNames::set(placesNamesList, batch);
+ batch->commit();
+ }
}
-IMPL_LINK_NOARG( SvtFileDialog, NewFolderHdl_Impl, Button*, void)
+IMPL_LINK_NOARG(SvtFileDialog, NewFolderHdl_Impl, weld::Button&, void)
{
- _pFileView->EndInplaceEditing();
+ m_xFileView->EndInplaceEditing();
- SmartContent aContent( _pFileView->GetViewURL( ) );
+ SmartContent aContent( m_xFileView->GetViewURL( ) );
OUString aTitle;
aContent.getTitle( aTitle );
- QueryFolderNameDialog aDlg(GetFrameWeld(), aTitle, FpsResId(STR_SVT_NEW_FOLDER));
+ QueryFolderNameDialog aDlg(m_xDialog.get(), aTitle, FpsResId(STR_SVT_NEW_FOLDER));
bool bHandled = false;
while ( !bHandled )
@@ -747,7 +525,7 @@ IMPL_LINK_NOARG( SvtFileDialog, NewFolderHdl_Impl, Button*, void)
OUString aUrl = aContent.createFolder(aDlg.GetName());
if ( !aUrl.isEmpty( ) )
{
- _pFileView->CreatedFolder(aUrl, aDlg.GetName());
+ m_xFileView->CreatedFolder(aUrl, aDlg.GetName());
bHandled = true;
}
}
@@ -759,7 +537,7 @@ IMPL_LINK_NOARG( SvtFileDialog, NewFolderHdl_Impl, Button*, void)
void SvtFileDialog::createNewUserFilter( const OUString& _rNewFilter )
{
// delete the old user filter and create a new one
- pImpl->_pUserFilter.reset( new SvtFileDialogFilter_Impl( _rNewFilter, _rNewFilter ) );
+ m_xImpl->m_xUserFilter.reset( new SvtFileDialogFilter_Impl( _rNewFilter, _rNewFilter ) );
// remember the extension
bool bIsAllFiles = _rNewFilter == FILEDIALOG_FILTER_ALL;
@@ -771,18 +549,18 @@ void SvtFileDialog::createNewUserFilter( const OUString& _rNewFilter )
// is always "*.<something>". But changing this would take some more time than I have now...
// now, the default extension is set to the one of the user filter (or empty)
- if ( pImpl->GetCurFilter( ) )
- SetDefaultExt( pImpl->GetCurFilter( )->GetExtension() );
+ if ( m_xImpl->GetCurFilter( ) )
+ SetDefaultExt( m_xImpl->GetCurFilter( )->GetExtension() );
else
EraseDefaultExt();
}
-AdjustFilterFlags SvtFileDialog::adjustFilter( const OUString& _rFilter )
+AdjustFilterFlags SvtFileDialog::adjustFilter( const OUString& rFilter )
{
AdjustFilterFlags nReturn = AdjustFilterFlags::NONE;
- const bool bNonEmpty = !_rFilter.isEmpty();
+ const bool bNonEmpty = !rFilter.isEmpty();
if ( bNonEmpty )
{
nReturn |= AdjustFilterFlags::NonEmpty;
@@ -790,11 +568,11 @@ AdjustFilterFlags SvtFileDialog::adjustFilter( const OUString& _rFilter )
bool bFilterChanged = true;
// search for a corresponding filter
- SvtFileDialogFilter_Impl* pFilter = FindFilter_Impl( _rFilter, false, bFilterChanged );
+ SvtFileDialogFilter_Impl* pFilter = FindFilter_Impl( rFilter, false, bFilterChanged );
// look for multi-ext filters if necessary
if ( !pFilter )
- pFilter = FindFilter_Impl( _rFilter, true, bFilterChanged );
+ pFilter = FindFilter_Impl( rFilter, true, bFilterChanged );
if ( bFilterChanged )
nReturn |= AdjustFilterFlags::Changed;
@@ -803,15 +581,14 @@ AdjustFilterFlags SvtFileDialog::adjustFilter( const OUString& _rFilter )
{
nReturn |= AdjustFilterFlags::UserFilter;
// no filter found : use it as user defined filter
- createNewUserFilter( _rFilter );
+ createNewUserFilter( rFilter );
}
}
return nReturn;
}
-
-IMPL_LINK_NOARG(SvtFileDialog, CancelHdl_Impl, Button*, void)
+IMPL_LINK_NOARG(SvtFileDialog, CancelHdl_Impl, weld::Button&, void)
{
if ( m_pCurrentAsyncAction.is() )
{
@@ -820,22 +597,24 @@ IMPL_LINK_NOARG(SvtFileDialog, CancelHdl_Impl, Button*, void)
}
else
{
- EndDialog();
+ m_xDialog->response(RET_CANCEL);
}
}
-
-IMPL_LINK( SvtFileDialog, OpenClickHdl_Impl, Button*, pVoid, void )
+IMPL_LINK( SvtFileDialog, OpenClickHdl_Impl, weld::Button&, rVoid, void )
{
- OpenHdl_Impl(pVoid);
+ OpenHdl_Impl(&rVoid);
}
-IMPL_LINK( SvtFileDialog, OpenUrlHdl_Impl, SvtURLBox*, pVoid, void )
+
+IMPL_LINK( SvtFileDialog, OpenUrlHdl_Impl, weld::ComboBox&, rVoid, bool )
{
- OpenHdl_Impl(pVoid);
+ OpenHdl_Impl(&rVoid);
+ return true;
}
+
void SvtFileDialog::OpenHdl_Impl(void const * pVoid)
{
- if ( pImpl->_bMultiSelection && _pFileView->GetSelectionCount() > 1 )
+ if ( m_xImpl->m_bMultiSelection && m_xFileView->GetSelectionCount() > 1 )
{
// special open in case of multiselection
OpenMultiSelection_Impl();
@@ -843,30 +622,28 @@ void SvtFileDialog::OpenHdl_Impl(void const * pVoid)
}
OUString aFileName;
- OUString aOldPath( _pFileView->GetViewURL() );
- if ( pImpl->_bDoubleClick || _pFileView->HasChildPathFocus() )
+ OUString aOldPath(m_xFileView->GetViewURL());
+ if ( m_xImpl->m_bDoubleClick || m_xFileView->has_focus() )
+ {
// Selection done by doubleclicking in the view, get filename from the view
- aFileName = _pFileView->GetCurrentURL();
+ aFileName = m_xFileView->GetCurrentURL();
+ }
if ( aFileName.isEmpty() )
{
// if an entry is selected in the view...
- if ( _pFileView->GetSelectionCount() )
+ if ( m_xFileView->GetSelectionCount() )
{ // -> use this one. This will allow us to step down this folder
- aFileName = _pFileView->GetCurrentURL();
+ aFileName = m_xFileView->GetCurrentURL();
}
}
if ( aFileName.isEmpty() )
{
- if ( pImpl->_eMode == FILEDLG_MODE_OPEN && pImpl->_pEdFileName->IsTravelSelect() )
- // OpenHdl called from URLBox; travelling through the list of URLs should not cause an opening
- return; // MBA->PB: seems to be called never ?!
-
// get the URL from the edit field ( if not empty )
- if ( !pImpl->_pEdFileName->GetText().isEmpty() )
+ if ( !m_xImpl->m_xEdFileName->get_active_text().isEmpty() )
{
- OUString aText = pImpl->_pEdFileName->GetText();
+ OUString aText = m_xImpl->m_xEdFileName->get_active_text();
// did we reach the root?
if ( !INetURLObject( aOldPath ).getSegmentCount() )
@@ -881,26 +658,26 @@ void SvtFileDialog::OpenHdl_Impl(void const * pVoid)
if ( ( 1 == aText.getLength() ) && ( '~' == aText[0] ) )
{
// go to the home directory
- if ( lcl_getHomeDirectory( _pFileView->GetViewURL(), aFileName ) )
+ if ( lcl_getHomeDirectory( m_xFileView->GetViewURL(), aFileName ) )
// in case we got a home dir, reset the text of the edit
- pImpl->_pEdFileName->SetText( OUString() );
+ m_xImpl->m_xEdFileName->set_entry_text( OUString() );
}
if ( aFileName.isEmpty() )
#endif
{
// get url from autocomplete edit
- aFileName = pImpl->_pEdFileName->GetURL();
+ aFileName = m_xImpl->m_xEdFileName->GetURL();
}
}
- else if ( pVoid == pImpl->_pBtnFileOpen.get() )
+ else if ( pVoid == m_xImpl->m_xBtnFileOpen.get() )
// OpenHdl was called for the "Open" Button; if edit field is empty, use selected element in the view
- aFileName = _pFileView->GetCurrentURL();
+ aFileName = m_xFileView->GetCurrentURL();
}
// MBA->PB: ?!
- if ( aFileName.isEmpty() && pVoid == pImpl->_pEdFileName && pImpl->_pUserFilter )
+ if ( aFileName.isEmpty() && pVoid == m_xImpl->m_xEdFileName.get() && m_xImpl->m_xUserFilter )
{
- pImpl->_pUserFilter.reset();
+ m_xImpl->m_xUserFilter.reset();
return;
}
@@ -908,9 +685,9 @@ void SvtFileDialog::OpenHdl_Impl(void const * pVoid)
if ( !nLen )
{
// if the dialog was opened to select a folder, the last selected folder should be selected
- if( pImpl->_eDlgType == FILEDLG_TYPE_PATHDLG )
+ if( m_xImpl->m_eDlgType == FILEDLG_TYPE_PATHDLG )
{
- aFileName = pImpl->_pEdCurrentPath->GetText();
+ aFileName = m_xImpl->m_xEdCurrentPath->get_active_text();
nLen = aFileName.getLength();
}
else
@@ -919,7 +696,7 @@ void SvtFileDialog::OpenHdl_Impl(void const * pVoid)
}
// mark input as selected
- pImpl->_pEdFileName->SetSelection( Selection( 0, nLen ) );
+ m_xImpl->m_xEdFileName->select_entry_region(0, nLen);
// if a path with wildcards is given, divide the string into path and wildcards
OUString aFilter;
@@ -931,15 +708,15 @@ void SvtFileDialog::OpenHdl_Impl(void const * pVoid)
if ( nNewFilterFlags & AdjustFilterFlags::Changed )
{
// cut off all text before wildcard in edit and select wildcard
- pImpl->_pEdFileName->SetText( aFilter );
- pImpl->_pEdFileName->SetSelection( Selection( 0, aFilter.getLength() ) );
+ m_xImpl->m_xEdFileName->set_entry_text( aFilter );
+ m_xImpl->m_xEdFileName->select_entry_region(0, -1);
}
{
INetURLObject aFileObject( aFileName );
if ( ( aFileObject.GetProtocol() == INetProtocol::NotValid ) && !aFileName.isEmpty() )
{
- OUString sCompleted = SvtURLBox::ParseSmart( aFileName, _pFileView->GetViewURL() );
+ OUString sCompleted = SvtURLBox::ParseSmart( aFileName, m_xFileView->GetViewURL() );
if ( !sCompleted.isEmpty() )
aFileName = sCompleted;
}
@@ -980,7 +757,7 @@ void SvtFileDialog::OpenHdl_Impl(void const * pVoid)
return;
if ( m_aContent.isInvalid() &&
- ( pImpl->_eMode == FILEDLG_MODE_OPEN ) )
+ ( m_xImpl->m_eMode == FILEDLG_MODE_OPEN ) )
{
if ( !pHandler->wasUsed() )
ErrorHandler::HandleError( ERRCODE_IO_NOTEXISTS );
@@ -995,35 +772,35 @@ void SvtFileDialog::OpenHdl_Impl(void const * pVoid)
m_aContent.enableDefaultInteractionHandler();
}
- if ( !bIsFolder // no existent folder
- && pImpl->_pCbAutoExtension // auto extension is enabled in general
- && pImpl->_pCbAutoExtension->IsChecked() // auto extension is really to be used
- && !GetDefaultExt().isEmpty() // there is a default extension
+ if ( !bIsFolder // no existent folder
+ && m_xImpl->m_xCbAutoExtension // auto extension is enabled in general
+ && m_xImpl->m_xCbAutoExtension->get_active()// auto extension is really to be used
+ && !GetDefaultExt().isEmpty() // there is a default extension
&& GetDefaultExt() != "*" // the default extension is not "all"
- && !( FILEDLG_MODE_SAVE == pImpl->_eMode // we're saving a file
- && _pFileView->GetSelectionCount() // there is a selected file in the file view -> it will later on
+ && !( FILEDLG_MODE_SAVE == m_xImpl->m_eMode // we're saving a file
+ && m_xFileView->GetSelectionCount() // there is a selected file in the file view -> it will later on
) // (in SvtFileDialog::GetPathList) be taken as file to save to
- && FILEDLG_MODE_OPEN != pImpl->_eMode // #i83408# don't append extension on open
+ && FILEDLG_MODE_OPEN != m_xImpl->m_eMode // #i83408# don't append extension on open
)
{
// check extension and append the default extension if necessary
appendDefaultExtension(aFileName,
GetDefaultExt(),
- pImpl->GetCurFilter()->GetType());
+ m_xImpl->GetCurFilter()->GetType());
}
- bool bOpenFolder = ( FILEDLG_TYPE_PATHDLG == pImpl->_eDlgType ) &&
- !pImpl->_bDoubleClick && pVoid != pImpl->_pEdFileName;
+ bool bOpenFolder = ( FILEDLG_TYPE_PATHDLG == m_xImpl->m_eDlgType ) &&
+ !m_xImpl->m_bDoubleClick && pVoid != m_xImpl->m_xEdFileName.get();
if ( bIsFolder )
{
if ( bOpenFolder )
{
- _aPath = aFileName;
+ m_aPath = aFileName;
}
else
{
- if ( aFileName != _pFileView->GetViewURL() )
+ if ( aFileName != m_xFileView->GetViewURL() )
{
OpenURL_Impl( aFileName );
}
@@ -1039,7 +816,7 @@ void SvtFileDialog::OpenHdl_Impl(void const * pVoid)
else if ( !( nNewFilterFlags & AdjustFilterFlags::NonEmpty ) )
{
// if applicable save URL
- _aPath = aFileName;
+ m_aPath = aFileName;
}
else
{
@@ -1056,7 +833,7 @@ void SvtFileDialog::OpenHdl_Impl(void const * pVoid)
return;
}
- switch ( pImpl->_eMode )
+ switch (m_xImpl->m_eMode)
{
case FILEDLG_MODE_SAVE:
{
@@ -1067,7 +844,7 @@ void SvtFileDialog::OpenHdl_Impl(void const * pVoid)
"$filename$",
aFileObj.getName(INetURLObject::LAST_SEGMENT, true, INetURLObject::DecodeMechanism::WithCharset)
);
- std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetFrameWeld(),
+ std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(),
VclMessageType::Question, VclButtonsType::YesNo, aMsg));
if (xBox->run() != RET_YES)
return;
@@ -1113,7 +890,7 @@ void SvtFileDialog::OpenHdl_Impl(void const * pVoid)
}
sError = sError.replaceFirst( "$name$", sInvalidFile );
- std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetFrameWeld(),
+ std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(),
VclMessageType::Warning, VclButtonsType::Ok, sError));
xBox->run();
return;
@@ -1126,57 +903,37 @@ void SvtFileDialog::OpenHdl_Impl(void const * pVoid)
OSL_FAIL("SvtFileDialog, OpenHdl_Impl: invalid mode!");
}
- EndDialog( RET_OK );
+ m_xDialog->response(RET_OK);
}
-
-void SvtFileDialog::EnableAutocompletion( bool _bEnable )
+void SvtFileDialog::EnableAutocompletion(bool bEnable)
{
- pImpl->_pEdFileName->EnableAutocompletion( _bEnable );
+ m_xImpl->m_xEdFileName->EnableAutocomplete(bEnable);
}
-
-IMPL_LINK_NOARG( SvtFileDialog, FilterSelectHdl_Impl, ListBox&, void )
+IMPL_LINK_NOARG( SvtFileDialog, FilterSelectHdl_Impl, weld::ComboBox&, void )
{
OUString sSelectedFilterDisplayName;
- SvtFileDialogFilter_Impl* pSelectedFilter = pImpl->GetSelectedFilterEntry( sSelectedFilterDisplayName );
+ SvtFileDialogFilter_Impl* pSelectedFilter = m_xImpl->GetSelectedFilterEntry( sSelectedFilterDisplayName );
if ( !pSelectedFilter )
{ // there is no current selection. This happens if for instance the user selects a group separator using
// the keyboard, and then presses enter: When the selection happens, we immediately deselect the entry,
// so in this situation there is no current selection.
- if ( restoreCurrentFilter( pImpl ) )
+ if ( restoreCurrentFilter( m_xImpl ) )
ExecuteFilter();
}
else
{
- if ( pSelectedFilter->isGroupSeparator() )
- { // group separators can't be selected
- // return to the previously selected entry
- if ( pImpl->IsFilterListTravelSelect() )
- {
- pImpl->SetNoFilterListSelection( );
-
- // stop the timer for executing the filter
- if ( pImpl->_aFilterTimer.IsActive() )
- pImpl->m_bNeedDelayedFilterExecute = true;
- pImpl->_aFilterTimer.Stop();
- }
- else
- {
- if ( restoreCurrentFilter( pImpl ) )
- ExecuteFilter();
- }
- }
- else if ( ( pSelectedFilter != pImpl->GetCurFilter() )
- || pImpl->_pUserFilter
- )
+ if ( ( pSelectedFilter != m_xImpl->GetCurFilter() )
+ || m_xImpl->m_xUserFilter
+ )
{
// Store the old filter for the auto extension handling
- OUString sLastFilterExt = pImpl->GetCurFilter()->GetExtension();
- pImpl->_pUserFilter.reset();
+ OUString sLastFilterExt = m_xImpl->GetCurFilter()->GetExtension();
+ m_xImpl->m_xUserFilter.reset();
// if applicable remove filter of the user
- pImpl->SetCurFilter( pSelectedFilter, sSelectedFilterDisplayName );
+ m_xImpl->SetCurFilter( pSelectedFilter, sSelectedFilterDisplayName );
// if applicable show extension
SetDefaultExt( pSelectedFilter->GetExtension() );
@@ -1190,20 +947,8 @@ IMPL_LINK_NOARG( SvtFileDialog, FilterSelectHdl_Impl, ListBox&, void )
// if the user is traveling fast through the filterbox
// do not filter instantly
- if ( pImpl->IsFilterListTravelSelect() )
- {
- // FilterSelectHdl_Impl should be started again in
- // TRAVELFILTER_TIMEOUT ms
- pImpl->_aFilterTimer.Start();
- }
- else
- {
- // stop previously started timer
- pImpl->_aFilterTimer.Stop();
-
- // filter the view again
- ExecuteFilter();
- }
+ // FilterSelectHdl_Impl should be started again at idle
+ m_xImpl->m_aFilterIdle.Start();
}
}
}
@@ -1214,38 +959,35 @@ IMPL_LINK_NOARG(SvtFileDialog, FilterSelectTimerHdl_Impl, Timer*, void)
ExecuteFilter();
}
-IMPL_LINK_NOARG( SvtFileDialog, FileNameGetFocusHdl_Impl, Control&, void )
+IMPL_LINK_NOARG( SvtFileDialog, FileNameGetFocusHdl_Impl, weld::Widget&, void )
{
- _pFileView->SetNoSelection();
- _pFileView->Update();
+ m_xFileView->SetNoSelection();
}
-
-IMPL_LINK_NOARG( SvtFileDialog, FileNameModifiedHdl_Impl, Edit&, void )
+IMPL_LINK( SvtFileDialog, FileNameModifiedHdl_Impl, weld::ComboBox&, rComboBox, void )
{
- FileNameGetFocusHdl_Impl( *pImpl->_pEdFileName );
+ FileNameGetFocusHdl_Impl(rComboBox);
}
-
-IMPL_LINK_NOARG( SvtFileDialog, URLBoxModifiedHdl_Impl, SvtURLBox*, void )
+IMPL_LINK_NOARG(SvtFileDialog, URLBoxModifiedHdl_Impl, weld::ComboBox&, bool)
{
- OUString aPath = pImpl->_pEdCurrentPath->GetURL();
+ OUString aPath = m_xImpl->m_xEdCurrentPath->GetURL();
OpenURL_Impl(aPath);
+ return true;
}
-
-IMPL_LINK_NOARG( SvtFileDialog, ConnectToServerPressed_Hdl, Button*, void )
+IMPL_LINK_NOARG( SvtFileDialog, ConnectToServerPressed_Hdl, weld::Button&, void )
{
- _pFileView->EndInplaceEditing();
+ m_xFileView->EndInplaceEditing();
- PlaceEditDialog aDlg(GetFrameWeld());
+ PlaceEditDialog aDlg(m_xDialog.get());
short aRetCode = aDlg.run();
switch (aRetCode) {
case RET_OK :
{
PlacePtr newPlace = aDlg.GetPlace();
- pImpl->_pPlaces->AppendPlace(newPlace);
+ m_xImpl->m_xPlaces->AppendPlace(newPlace);
break;
}
@@ -1256,32 +998,29 @@ IMPL_LINK_NOARG( SvtFileDialog, ConnectToServerPressed_Hdl, Button*, void )
};
}
-
-IMPL_LINK_NOARG ( SvtFileDialog, AddPlacePressed_Hdl, Button*, void )
+IMPL_LINK_NOARG ( SvtFileDialog, AddPlacePressed_Hdl, weld::Button&, void )
{
// Maybe open the PlacesDialog would have been a better idea
// there is an ux choice to make we did not make...
- INetURLObject aURLObj( _pFileView->GetViewURL() );
+ INetURLObject aURLObj( m_xFileView->GetViewURL() );
PlacePtr newPlace(
new Place( aURLObj.GetLastName(INetURLObject::DecodeMechanism::WithCharset),
- _pFileView->GetViewURL(), true));
- pImpl->_pPlaces->AppendPlace(newPlace);
+ m_xFileView->GetViewURL(), true));
+ m_xImpl->m_xPlaces->AppendPlace(newPlace);
}
-
-IMPL_LINK_NOARG ( SvtFileDialog, RemovePlacePressed_Hdl, Button*, void )
+IMPL_LINK_NOARG ( SvtFileDialog, RemovePlacePressed_Hdl, weld::Button&, void )
{
- pImpl->_pPlaces->RemoveSelectedPlace();
+ m_xImpl->m_xPlaces->RemoveSelectedPlace();
}
-
SvtFileDialogFilter_Impl* SvtFileDialog::FindFilter_Impl
(
- const OUString& _rFilter,
- bool _bMultiExt,/* TRUE - regard filter with several extensions
+ const OUString& rFilter,
+ bool bMultiExt,/* TRUE - regard filter with several extensions
FALSE - do not ...
*/
- bool& _rFilterChanged
+ bool& rFilterChanged
)
/* [Description]
@@ -1291,7 +1030,7 @@ SvtFileDialogFilter_Impl* SvtFileDialog::FindFilter_Impl
{
SvtFileDialogFilter_Impl* pFoundFilter = nullptr;
- SvtFileDialogFilterList_Impl& rList = pImpl->m_aFilter;
+ SvtFileDialogFilterList_Impl& rList = m_xImpl->m_aFilter;
sal_uInt16 nFilter = rList.size();
while ( nFilter-- )
@@ -1299,33 +1038,33 @@ SvtFileDialogFilter_Impl* SvtFileDialog::FindFilter_Impl
SvtFileDialogFilter_Impl* pFilter = rList[ nFilter ].get();
const OUString& rType = pFilter->GetType();
- if ( _bMultiExt )
+ if ( bMultiExt )
{
sal_Int32 nIdx = 0;
while ( !pFoundFilter && nIdx != -1 )
{
const OUString aSingleType = rType.getToken( 0, FILEDIALOG_DEF_EXTSEP, nIdx );
#ifdef UNX
- if ( aSingleType == _rFilter )
+ if ( aSingleType == rFilter )
#else
- if ( aSingleType.equalsIgnoreAsciiCase( _rFilter ) )
+ if ( aSingleType.equalsIgnoreAsciiCase( rFilter ) )
#endif
pFoundFilter = pFilter;
}
}
#ifdef UNX
- else if ( rType == _rFilter )
+ else if ( rType == rFilter )
#else
- else if ( rType.equalsIgnoreAsciiCase( _rFilter ) )
+ else if ( rType.equalsIgnoreAsciiCase( rFilter ) )
#endif
pFoundFilter = pFilter;
if ( pFoundFilter )
{
// activate filter
- _rFilterChanged = pImpl->_pUserFilter || ( pImpl->GetCurFilter() != pFilter );
+ rFilterChanged = m_xImpl->m_xUserFilter || ( m_xImpl->GetCurFilter() != pFilter );
- createNewUserFilter( _rFilter );
+ createNewUserFilter( rFilter );
break;
}
@@ -1336,36 +1075,30 @@ SvtFileDialogFilter_Impl* SvtFileDialog::FindFilter_Impl
void SvtFileDialog::ExecuteFilter()
{
- pImpl->m_bNeedDelayedFilterExecute = false;
- executeAsync( AsyncPickerAction::eExecuteFilter, OUString(), getMostCurrentFilter( pImpl ) );
+ m_xImpl->m_bNeedDelayedFilterExecute = false;
+ executeAsync( AsyncPickerAction::eExecuteFilter, OUString(), getMostCurrentFilter(m_xImpl) );
}
-
-void SvtFileDialog::OpenMultiSelection_Impl()
-
/* [Description]
OpenHandler for MultiSelection
*/
-
+void SvtFileDialog::OpenMultiSelection_Impl()
{
- sal_uLong nCount = _pFileView->GetSelectionCount();
- SvTreeListEntry* pEntry = nCount ? _pFileView->FirstSelected() : nullptr;
+ SvtContentEntry* pEntry = m_xFileView->FirstSelected();
- if ( nCount && pEntry )
- _aPath = SvtFileView::GetURL( pEntry );
+ if (pEntry)
+ m_aPath = pEntry->maURL;
- EndDialog( RET_OK );
+ m_xDialog->response(RET_OK);
}
-
void SvtFileDialog::UpdateControls( const OUString& rURL )
{
- pImpl->_pEdFileName->SetBaseURL( rURL );
+ m_xImpl->m_xEdFileName->SetBaseURL( rURL );
INetURLObject aObj( rURL );
-
{
OUString sText;
SAL_WARN_IF( INetProtocol::NotValid == aObj.GetProtocol(), "fpicker.office", "SvtFileDialog::UpdateControls: Invalid URL!" );
@@ -1385,9 +1118,9 @@ void SvtFileDialog::UpdateControls( const OUString& rURL )
}
// path mode ?
- if ( FILEDLG_TYPE_PATHDLG == pImpl->_eDlgType )
+ if ( FILEDLG_TYPE_PATHDLG == m_xImpl->m_eDlgType )
// -> set new path in the edit field
- pImpl->_pEdFileName->SetText( sText );
+ m_xImpl->m_xEdFileName->set_entry_text( sText );
// in the "current path" field, truncate the trailing slash
if ( aObj.hasFinalSlash() )
@@ -1401,88 +1134,82 @@ void SvtFileDialog::UpdateControls( const OUString& rURL )
if ( sText.isEmpty() && !rURL.isEmpty() )
// happens, for instance, for URLs which the INetURLObject does not know to belong to a hierarchical scheme
sText = rURL;
- pImpl->_pEdCurrentPath->SetText( sText );
+ m_xImpl->m_xEdCurrentPath->set_entry_text(sText);
}
+ m_aPath = rURL;
- _aPath = rURL;
- if ( _pFileNotifier )
- _pFileNotifier->notify( DIRECTORY_CHANGED, 0 );
-}
+ m_xImpl->m_xBtnUp->FillURLMenu();
+ if (m_pFileNotifier)
+ m_pFileNotifier->notify( DIRECTORY_CHANGED, 0 );
+}
-IMPL_LINK( SvtFileDialog, SelectHdl_Impl, SvTreeListBox*, pBox, void )
+IMPL_LINK( SvtFileDialog, SelectHdl_Impl, SvtFileView*, pBox, void )
{
- SvTreeListEntry* pEntry = pBox->FirstSelected();
- assert( pEntry && "SelectHandler without selected entry" );
- SvtContentEntry* pUserData = static_cast<SvtContentEntry*>(pEntry->GetUserData());
-
- if ( pUserData )
+ SvtContentEntry* pUserData = pBox->FirstSelected();
+ if (pUserData)
{
INetURLObject aObj( pUserData->maURL );
- if ( FILEDLG_TYPE_PATHDLG == pImpl->_eDlgType )
+ if ( FILEDLG_TYPE_PATHDLG == m_xImpl->m_eDlgType )
{
if ( aObj.GetProtocol() == INetProtocol::File )
{
if ( !pUserData->mbIsFolder )
aObj.removeSegment();
OUString aName = aObj.getFSysPath( static_cast<FSysStyle>(FSysStyle::Detect & ~FSysStyle::Vos) );
- pImpl->_pEdFileName->SetText( aName );
- pImpl->_pEdFileName->SetSelection( Selection( 0, aName.getLength() ) );
- _aPath = pUserData->maURL;
+ m_xImpl->m_xEdFileName->set_entry_text( aName );
+ m_xImpl->m_xEdFileName->select_entry_region(0, -1);
+ m_aPath = pUserData->maURL;
}
else if ( !pUserData->mbIsFolder )
{
- pImpl->_pEdFileName->SetText( pUserData->maURL );
- pImpl->_pEdFileName->SetSelection( Selection( 0, pUserData->maURL.getLength() ) );
- _aPath = pUserData->maURL;
+ m_xImpl->m_xEdFileName->set_entry_text( pUserData->maURL );
+ m_xImpl->m_xEdFileName->select_entry_region(0, -1);
+ m_aPath = pUserData->maURL;
}
else
- pImpl->_pEdFileName->SetText( OUString() );
+ m_xImpl->m_xEdFileName->set_entry_text( OUString() );
}
else
{
if ( !pUserData->mbIsFolder )
{
- OUString aName = SvTabListBox::GetEntryText( pEntry, 0 );
- pImpl->_pEdFileName->SetText( aName );
- pImpl->_pEdFileName->SetSelection( Selection( 0, aName.getLength() ) );
- _aPath = pUserData->maURL;
+ OUString aName = pBox->get_selected_text();
+ m_xImpl->m_xEdFileName->set_entry_text( aName );
+ m_xImpl->m_xEdFileName->select_entry_region(0, -1);
+ m_aPath = pUserData->maURL;
}
}
}
- if ( pImpl->_bMultiSelection && _pFileView->GetSelectionCount() > 1 )
+ if ( m_xImpl->m_bMultiSelection && m_xFileView->GetSelectionCount() > 1 )
{
// clear the file edit for multiselection
- pImpl->_pEdFileName->SetText( OUString() );
+ m_xImpl->m_xEdFileName->set_entry_text( OUString() );
}
FileSelect();
}
-
-IMPL_LINK_NOARG(SvtFileDialog, DblClickHdl_Impl, SvTreeListBox*, bool)
+IMPL_LINK_NOARG(SvtFileDialog, DblClickHdl_Impl, SvtFileView*, bool)
{
- pImpl->_bDoubleClick = true;
+ m_xImpl->m_bDoubleClick = true;
OpenHdl_Impl( nullptr );
- pImpl->_bDoubleClick = false;
-
- return false;
+ m_xImpl->m_bDoubleClick = false;
+ return true;
}
-
-IMPL_LINK_NOARG(SvtFileDialog, EntrySelectHdl_Impl, ComboBox&, void)
+IMPL_LINK_NOARG(SvtFileDialog, EntrySelectHdl_Impl, weld::ComboBox&, void)
{
FileSelect();
}
-
IMPL_LINK( SvtFileDialog, OpenDoneHdl_Impl, SvtFileView*, pView, void )
{
const OUString& sCurrentFolder( pView->GetViewURL() );
// check if we can create new folders
- EnableControl( pImpl->_pBtnNewFolder, ContentCanMakeFolder( sCurrentFolder ) );
+ EnableControl( m_xImpl->m_xBtnNewFolder.get(), ContentCanMakeFolder( sCurrentFolder ) );
// check if we can travel one level up
bool bCanTravelUp = ContentHasParentFolder( pView->GetViewURL() );
@@ -1495,85 +1222,49 @@ IMPL_LINK( SvtFileDialog, OpenDoneHdl_Impl, SvtFileView*, pView, void )
aCurrentFolder.removeSegment();
}
- EnableControl( pImpl->_pBtnUp, bCanTravelUp );
+ EnableControl( m_xImpl->m_xBtnUp->getWidget(), bCanTravelUp );
}
-
-IMPL_LINK_NOARG(SvtFileDialog, AutoExtensionHdl_Impl, Button*, void)
+IMPL_LINK_NOARG(SvtFileDialog, AutoExtensionHdl_Impl, weld::Button&, void)
{
- if ( _pFileNotifier )
- _pFileNotifier->notify( CTRL_STATE_CHANGED,
- CHECKBOX_AUTOEXTENSION );
+ if (m_pFileNotifier)
+ m_pFileNotifier->notify(CTRL_STATE_CHANGED, CHECKBOX_AUTOEXTENSION);
// update the extension of the current file if necessary
- lcl_autoUpdateFileExtension( this, pImpl->GetCurFilter()->GetExtension() );
+ lcl_autoUpdateFileExtension( this, m_xImpl->GetCurFilter()->GetExtension() );
}
-
-IMPL_LINK( SvtFileDialog, ClickHdl_Impl, Button*, pCheckBox, void )
+IMPL_LINK( SvtFileDialog, ClickHdl_Impl, weld::Button&, rCheckBox, void )
{
- if ( ! _pFileNotifier )
+ if (!m_pFileNotifier)
return;
sal_Int16 nId = -1;
- if ( pCheckBox == pImpl->_pCbOptions )
+ if ( &rCheckBox == m_xImpl->m_xCbOptions.get() )
nId = CHECKBOX_FILTEROPTIONS;
- else if ( pCheckBox == _pCbSelection )
+ else if ( &rCheckBox == m_xCbSelection.get() )
nId = CHECKBOX_SELECTION;
- else if ( pCheckBox == _pCbReadOnly )
+ else if ( &rCheckBox == m_xCbReadOnly.get() )
nId = CHECKBOX_READONLY;
- else if ( pCheckBox == pImpl->_pCbPassword )
+ else if ( &rCheckBox == m_xImpl->m_xCbPassword.get() )
nId = CHECKBOX_PASSWORD;
- else if ( pCheckBox == pImpl->_pCbGPGEncrypt )
+ else if ( &rCheckBox == m_xImpl->m_xCbGPGEncrypt.get() )
nId = CHECKBOX_GPGENCRYPTION;
- else if ( pCheckBox == _pCbLinkBox )
+ else if ( &rCheckBox == m_xCbLinkBox.get() )
nId = CHECKBOX_LINK;
- else if ( pCheckBox == _pCbPreviewBox )
+ else if ( &rCheckBox == m_xCbPreviewBox.get() )
nId = CHECKBOX_PREVIEW;
if ( nId != -1 )
- _pFileNotifier->notify( CTRL_STATE_CHANGED, nId );
+ m_pFileNotifier->notify( CTRL_STATE_CHANGED, nId );
}
-IMPL_LINK_NOARG(SvtFileDialog, PlayButtonHdl_Impl, Button*, void)
-{
- if ( _pFileNotifier )
- _pFileNotifier->notify( CTRL_STATE_CHANGED,
- PUSHBUTTON_PLAY );
-}
-
-
-bool SvtFileDialog::EventNotify( NotifyEvent& rNEvt )
-
-/* [Description]
-
- This method gets called to catch <BACKSPACE>.
-*/
-
+IMPL_LINK_NOARG(SvtFileDialog, PlayButtonHdl_Impl, weld::Button&, void)
{
- MouseNotifyEvent nType = rNEvt.GetType();
- bool bRet = false;
-
- if ( MouseNotifyEvent::KEYINPUT == nType && rNEvt.GetKeyEvent() )
- {
- const vcl::KeyCode& rKeyCode = rNEvt.GetKeyEvent()->GetKeyCode();
- sal_uInt16 nCode = rKeyCode.GetCode();
-
- if ( !rKeyCode.GetModifier() &&
- KEY_BACKSPACE == nCode && !pImpl->_pEdFileName->HasChildPathFocus() )
- {
- bRet = false;
-
- if ( !bRet && pImpl->_pBtnUp->IsEnabled() )
- {
- PrevLevel_Impl();
- bRet = true;
- }
- }
- }
- return bRet || Dialog::EventNotify(rNEvt);
+ if (m_pFileNotifier)
+ m_pFileNotifier->notify(CTRL_STATE_CHANGED, PUSHBUTTON_PLAY);
}
namespace
@@ -1642,30 +1333,30 @@ OUString SvtFileDialog::implGetInitialURL( const OUString& _rPath, const OUStrin
}
-short SvtFileDialog::Execute()
+short SvtFileDialog::run()
{
if ( !PrepareExecute() )
return 0;
// start the dialog
- _bIsInExecute = true;
- short nResult = Dialog::Execute();
- _bIsInExecute = false;
+ m_bIsInExecute = true;
+ short nResult = GenericDialogController::run();
+ m_bIsInExecute = false;
- SAL_WARN_IF( m_pCurrentAsyncAction.is(), "fpicker.office", "SvtFilePicker::Execute: still running an async action!" );
+ SAL_WARN_IF( m_pCurrentAsyncAction.is(), "fpicker.office", "SvtFilePicker::run: still running an async action!" );
// the dialog should not be cancellable while an async action is running - first, the action
// needs to be cancelled
// remember last directory
if ( RET_OK == nResult )
{
- INetURLObject aURL( _aPath );
+ INetURLObject aURL( m_aPath );
if ( aURL.GetProtocol() == INetProtocol::File )
{
// remember the selected directory only for file URLs not for virtual folders
sal_Int32 nLevel = aURL.getSegmentCount();
bool bDir = m_aContent.isFolder( aURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
- if ( nLevel > 1 && ( FILEDLG_TYPE_FILEDLG == pImpl->_eDlgType || !bDir ) )
+ if ( nLevel > 1 && ( FILEDLG_TYPE_FILEDLG == m_xImpl->m_eDlgType || !bDir ) )
aURL.removeSegment();
}
}
@@ -1673,21 +1364,12 @@ short SvtFileDialog::Execute()
return nResult;
}
-bool SvtFileDialog::StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx)
-{
- if (!PrepareExecute())
- return false;
-
- // start of the dialog
- return Dialog::StartExecuteAsync(rCtx);
-}
-
void SvtFileDialog::onAsyncOperationStarted()
{
EnableUI( false );
// the cancel button must be always enabled
- pImpl->_pBtnCancel->Enable();
- pImpl->_pBtnCancel->GrabFocus();
+ m_xImpl->m_xBtnCancel->set_sensitive(true);
+ m_xImpl->m_xBtnCancel->grab_focus();
}
void SvtFileDialog::onAsyncOperationFinished()
@@ -1695,18 +1377,16 @@ void SvtFileDialog::onAsyncOperationFinished()
EnableUI( true );
m_pCurrentAsyncAction = nullptr;
if ( !m_bInExecuteAsync )
- pImpl->_pEdFileName->GrabFocus();
- // (if m_bInExecuteAsync is true, then the operation was finished within the minimum wait time,
- // and to the user, the operation appears to be synchronous)
+ m_xImpl->m_xEdFileName->grab_focus();
+ // (if m_bInExecuteAsync is true, then the operation was finished within the minimum wait time,
+ // and to the user, the operation appears to be synchronous)
}
-
void SvtFileDialog::RemovablePlaceSelected(bool enable)
{
- pImpl->_pPlaces->SetDelEnabled( enable );
+ m_xImpl->m_xPlaces->SetDelEnabled( enable );
}
-
void SvtFileDialog::displayIOException( const OUString& _rURL, IOErrorCode _eCode )
{
try
@@ -1748,42 +1428,39 @@ void SvtFileDialog::displayIOException( const OUString& _rURL, IOErrorCode _eCod
}
}
-
-void SvtFileDialog::EnableUI( bool _bEnable )
+void SvtFileDialog::EnableUI(bool bEnable)
{
- Enable( _bEnable );
+ m_xDialog->set_sensitive(bEnable);
- if ( _bEnable )
+ if (bEnable)
{
- for ( auto& rxControl : m_aDisabledControls )
+ for (auto& rxControl : m_aDisabledControls)
{
- rxControl->Enable( false );
+ rxControl->set_sensitive(false);
}
}
}
-
-void SvtFileDialog::EnableControl( Control* _pControl, bool _bEnable )
+void SvtFileDialog::EnableControl(weld::Widget* pControl, bool bEnable)
{
- if ( !_pControl )
+ if (!pControl)
{
SAL_WARN( "fpicker.office", "SvtFileDialog::EnableControl: invalid control!" );
return;
}
- _pControl->Enable( _bEnable );
+ pControl->set_sensitive(bEnable);
- if ( _bEnable )
+ if (bEnable)
{
- auto aPos = m_aDisabledControls.find( _pControl );
+ auto aPos = m_aDisabledControls.find( pControl );
if ( m_aDisabledControls.end() != aPos )
m_aDisabledControls.erase( aPos );
}
else
- m_aDisabledControls.insert( _pControl );
+ m_aDisabledControls.insert( pControl );
}
-
bool SvtFileDialog::PrepareExecute()
{
if (comphelper::LibreOfficeKit::isActive())
@@ -1807,7 +1484,7 @@ bool SvtFileDialog::PrepareExecute()
= aCnt.createCursor( aProps, ::ucbhelper::INCLUDE_FOLDERS_ONLY );
if ( xResultSet.is() && !xResultSet->next() )
{
- std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetFrameWeld(),
+ std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(),
VclMessageType::Warning, VclButtonsType::Ok,
FpsResId(STR_SVT_NOREMOVABLEDEVICE)));
xBox->run();
@@ -1822,7 +1499,7 @@ bool SvtFileDialog::PrepareExecute()
}
}
- if ( ( pImpl->_nStyle & PickerFlags::SaveAs ) && m_bHasFilename )
+ if ( ( m_xImpl->m_nStyle & PickerFlags::SaveAs ) && m_bHasFilename )
// when doing a save-as, we do not want the handler to handle "this file does not exist" messages
// - finally we're going to save that file, aren't we?
m_aContent.enableOwnInteractionHandler(::svt::OFilePickerInteractionHandler::E_DOESNOTEXIST);
@@ -1831,46 +1508,46 @@ bool SvtFileDialog::PrepareExecute()
// possibly just a filename without a path
OUString aFileNameOnly;
- if( !_aPath.isEmpty() && (pImpl->_eMode == FILEDLG_MODE_SAVE)
- && (_aPath.indexOf(':') == -1)
- && (_aPath.indexOf('\\') == -1)
- && (_aPath.indexOf('/') == -1))
+ if( !m_aPath.isEmpty() && (m_xImpl->m_eMode == FILEDLG_MODE_SAVE)
+ && (m_aPath.indexOf(':') == -1)
+ && (m_aPath.indexOf('\\') == -1)
+ && (m_aPath.indexOf('/') == -1))
{
- aFileNameOnly = _aPath;
- _aPath.clear();
+ aFileNameOnly = m_aPath;
+ m_aPath.clear();
}
// no starting path specified?
- if ( _aPath.isEmpty() )
+ if ( m_aPath.isEmpty() )
{
// then use the standard directory
- _aPath = lcl_ensureFinalSlash( pImpl->GetStandardDir() );
+ m_aPath = lcl_ensureFinalSlash( m_xImpl->GetStandardDir() );
// attach given filename to path
if ( !aFileNameOnly.isEmpty() )
- _aPath += aFileNameOnly;
+ m_aPath += aFileNameOnly;
}
- _aPath = implGetInitialURL( _aPath, GetStandardDir() );
+ m_aPath = implGetInitialURL( m_aPath, GetStandardDir() );
- if ( pImpl->_nStyle & PickerFlags::SaveAs && !m_bHasFilename )
+ if ( m_xImpl->m_nStyle & PickerFlags::SaveAs && !m_bHasFilename )
// when doing a save-as, we do not want the handler to handle "this file does not exist" messages
// - finally we're going to save that file, aren't we?
m_aContent.enableOwnInteractionHandler(::svt::OFilePickerInteractionHandler::E_DOESNOTEXIST);
// if applicable show filter
- pImpl->InitFilterList();
+ m_xImpl->InitFilterList();
// set up initial filter
sal_uInt16 nFilterCount = GetFilterCount();
OUString aAll = FpsResId( STR_FILTERNAME_ALL );
- bool bHasAll = pImpl->HasFilterListEntry( aAll );
- if ( pImpl->GetCurFilter() || nFilterCount == 1 || ( nFilterCount == 2 && bHasAll ) )
+ bool bHasAll = m_xImpl->HasFilterListEntry( aAll );
+ if ( m_xImpl->GetCurFilter() || nFilterCount == 1 || ( nFilterCount == 2 && bHasAll ) )
{
// if applicable set the only filter or the only filter that
// does not refer to all files, as the current one
- if ( !pImpl->GetCurFilter() )
+ if ( !m_xImpl->GetCurFilter() )
{
sal_uInt16 nPos = 0;
if ( 2 == nFilterCount && bHasAll )
@@ -1882,14 +1559,14 @@ bool SvtFileDialog::PrepareExecute()
break;
}
}
- SvtFileDialogFilter_Impl* pNewCurFilter = pImpl->m_aFilter[ nPos ].get();
- assert( pNewCurFilter && "SvtFileDialog::Execute: invalid filter pos!" );
- pImpl->SetCurFilter( pNewCurFilter, pNewCurFilter->GetName() );
+ SvtFileDialogFilter_Impl* pNewCurFilter = m_xImpl->m_aFilter[ nPos ].get();
+ assert( pNewCurFilter && "SvtFileDialog::run: invalid filter pos!" );
+ m_xImpl->SetCurFilter( pNewCurFilter, pNewCurFilter->GetName() );
}
// adjust view
- pImpl->SelectFilterListEntry( pImpl->GetCurFilter()->GetName() );
- SetDefaultExt( pImpl->GetCurFilter()->GetExtension() );
+ m_xImpl->SelectFilterListEntry( m_xImpl->GetCurFilter()->GetName() );
+ SetDefaultExt( m_xImpl->GetCurFilter()->GetExtension() );
sal_Int32 nSepPos = GetDefaultExt().indexOf( FILEDIALOG_DEF_EXTSEP );
if ( nSepPos != -1 )
EraseDefaultExt( nSepPos );
@@ -1900,33 +1577,33 @@ bool SvtFileDialog::PrepareExecute()
if ( !bHasAll )
{
SvtFileDialogFilter_Impl* pAllFilter = implAddFilter( aAll, FILEDIALOG_FILTER_ALL );
- pImpl->InsertFilterListEntry( pAllFilter );
- pImpl->SetCurFilter( pAllFilter, aAll );
+ m_xImpl->InsertFilterListEntry( pAllFilter );
+ m_xImpl->SetCurFilter( pAllFilter, aAll );
}
- pImpl->SelectFilterListEntry( aAll );
+ m_xImpl->SelectFilterListEntry( aAll );
}
// if applicable isolate filter
OUString aFilter;
- if ( !IsolateFilterFromPath_Impl( _aPath, aFilter ) )
+ if ( !IsolateFilterFromPath_Impl( m_aPath, aFilter ) )
return false;
AdjustFilterFlags nNewFilterFlags = adjustFilter( aFilter );
if ( nNewFilterFlags & ( AdjustFilterFlags::NonEmpty | AdjustFilterFlags::UserFilter ) )
{
- pImpl->_pEdFileName->SetText( aFilter );
+ m_xImpl->m_xEdFileName->set_entry_text( aFilter );
}
// create and show instance for set path
- INetURLObject aFolderURL( _aPath );
+ INetURLObject aFolderURL( m_aPath );
OUString aFileName( aFolderURL.getName( INetURLObject::LAST_SEGMENT, false ) );
sal_Int32 nFileNameLen = aFileName.getLength();
bool bFileToSelect = nFileNameLen != 0;
if ( bFileToSelect && aFileName[ nFileNameLen - 1 ] != '/' )
{
OUString aDecodedName = aFolderURL.getName( INetURLObject::LAST_SEGMENT, true, INetURLObject::DecodeMechanism::WithCharset );
- pImpl->_pEdFileName->SetText( aDecodedName );
+ m_xImpl->m_xEdFileName->set_entry_text( aDecodedName );
aFolderURL.removeSegment();
}
@@ -1944,22 +1621,18 @@ bool SvtFileDialog::PrepareExecute()
OpenURL_Impl( aObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
- _pFileView->Show();
- _pSplitter->Show();
-
// if applicable read and set size from ini
InitSize();
return true;
}
-
-void SvtFileDialog::executeAsync( ::svt::AsyncPickerAction::Action _eAction,
- const OUString& _rURL, const OUString& _rFilter )
+void SvtFileDialog::executeAsync( ::svt::AsyncPickerAction::Action eAction,
+ const OUString& rURL, const OUString& rFilter )
{
SAL_WARN_IF( m_pCurrentAsyncAction.is(), "fpicker.office", "SvtFileDialog::executeAsync: previous async action not yet finished!" );
- m_pCurrentAsyncAction = new AsyncPickerAction( this, _pFileView, _eAction );
+ m_pCurrentAsyncAction = new AsyncPickerAction( this, m_xFileView.get(), eAction );
bool bReallyAsync = true;
m_aConfiguration.getNodeValue( OUString( "FillAsynchronously" ) ) >>= bReallyAsync;
@@ -1970,107 +1643,100 @@ void SvtFileDialog::executeAsync( ::svt::AsyncPickerAction::Action _eAction,
m_aConfiguration.getNodeValue( OUString( "Timeout/Max" ) ) >>= nMaxTimeout;
m_bInExecuteAsync = true;
- m_pCurrentAsyncAction->execute( _rURL, _rFilter, bReallyAsync ? nMinTimeout : -1, nMaxTimeout, GetBlackList() );
+ m_pCurrentAsyncAction->execute(rURL, rFilter, bReallyAsync ? nMinTimeout : -1, nMaxTimeout, GetBlackList());
m_bInExecuteAsync = false;
}
void SvtFileDialog::FileSelect()
{
- if ( _pFileNotifier )
- _pFileNotifier->notify( FILE_SELECTION_CHANGED, 0 );
+ if (m_pFileNotifier)
+ m_pFileNotifier->notify( FILE_SELECTION_CHANGED, 0 );
}
void SvtFileDialog::FilterSelect()
{
- if ( _pFileNotifier )
- _pFileNotifier->notify( CTRL_STATE_CHANGED,
+ if (m_pFileNotifier)
+ m_pFileNotifier->notify( CTRL_STATE_CHANGED,
LISTBOX_FILTER );
}
-void SvtFileDialog::SetStandardDir( const OUString& rStdDir )
-
/* [Description]
This method sets the path for the default button.
*/
-
+void SvtFileDialog::SetStandardDir( const OUString& rStdDir )
{
INetURLObject aObj( rStdDir );
SAL_WARN_IF( aObj.GetProtocol() == INetProtocol::NotValid, "fpicker.office", "Invalid protocol!" );
aObj.setFinalSlash();
- pImpl->SetStandardDir( aObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
+ m_xImpl->SetStandardDir( aObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
}
void SvtFileDialog::SetBlackList( const css::uno::Sequence< OUString >& rBlackList )
{
- pImpl->SetBlackList( rBlackList );
+ m_xImpl->SetBlackList( rBlackList );
}
const css::uno::Sequence< OUString >& SvtFileDialog::GetBlackList() const
{
- return pImpl->GetBlackList();
+ return m_xImpl->GetBlackList();
}
-const OUString& SvtFileDialog::GetStandardDir() const
-
/* [Description]
This method returns the standard path.
*/
-
+const OUString& SvtFileDialog::GetStandardDir() const
{
- return pImpl->GetStandardDir();
+ return m_xImpl->GetStandardDir();
}
void SvtFileDialog::PrevLevel_Impl()
{
- _pFileView->EndInplaceEditing();
+ m_xFileView->EndInplaceEditing();
OUString sDummy;
executeAsync( AsyncPickerAction::ePrevLevel, sDummy, sDummy );
}
-
void SvtFileDialog::OpenURL_Impl( const OUString& _rURL )
{
- _pFileView->EndInplaceEditing();
+ m_xFileView->EndInplaceEditing();
- executeAsync( AsyncPickerAction::eOpenURL, _rURL, getMostCurrentFilter( pImpl ) );
+ executeAsync( AsyncPickerAction::eOpenURL, _rURL, getMostCurrentFilter( m_xImpl ) );
}
-
-SvtFileDialogFilter_Impl* SvtFileDialog::implAddFilter( const OUString& _rFilter, const OUString& _rType )
+SvtFileDialogFilter_Impl* SvtFileDialog::implAddFilter( const OUString& rFilter, const OUString& _rType )
{
- SvtFileDialogFilter_Impl* pNewFilter = new SvtFileDialogFilter_Impl( _rFilter, _rType );
- pImpl->m_aFilter.push_front( std::unique_ptr<SvtFileDialogFilter_Impl>( pNewFilter ) );
+ SvtFileDialogFilter_Impl* pNewFilter = new SvtFileDialogFilter_Impl( rFilter, _rType );
+ m_xImpl->m_aFilter.push_front( std::unique_ptr<SvtFileDialogFilter_Impl>( pNewFilter ) );
- if ( !pImpl->GetCurFilter() )
- pImpl->SetCurFilter( pNewFilter, _rFilter );
+ if ( !m_xImpl->GetCurFilter() )
+ m_xImpl->SetCurFilter( pNewFilter, rFilter );
return pNewFilter;
}
-
-void SvtFileDialog::AddFilter( const OUString& _rFilter, const OUString& _rType )
+void SvtFileDialog::AddFilter( const OUString& rFilter, const OUString& _rType )
{
- SAL_WARN_IF( IsInExecute(), "fpicker.office", "SvtFileDialog::AddFilter: currently executing!" );
- implAddFilter ( _rFilter, _rType );
+ SAL_WARN_IF( m_bIsInExecute, "fpicker.office", "SvtFileDialog::AddFilter: currently executing!" );
+ implAddFilter ( rFilter, _rType );
}
-void SvtFileDialog::AddFilterGroup( const OUString& _rFilter, const Sequence< StringPair >& _rFilters )
+void SvtFileDialog::AddFilterGroup( const OUString& rFilter, const Sequence< StringPair >& rFilters )
{
- SAL_WARN_IF( IsInExecute(), "fpicker.office", "SvtFileDialog::AddFilter: currently executing!" );
+ SAL_WARN_IF( m_bIsInExecute, "fpicker.office", "SvtFileDialog::AddFilter: currently executing!" );
- implAddFilter( _rFilter, OUString() );
- const StringPair* pSubFilters = _rFilters.getConstArray();
- const StringPair* pSubFiltersEnd = pSubFilters + _rFilters.getLength();
+ implAddFilter( rFilter, OUString() );
+ const StringPair* pSubFilters = rFilters.getConstArray();
+ const StringPair* pSubFiltersEnd = pSubFilters + rFilters.getLength();
for ( ; pSubFilters != pSubFiltersEnd; ++pSubFilters )
implAddFilter( pSubFilters->First, pSubFilters->Second );
}
@@ -2078,28 +1744,27 @@ void SvtFileDialog::AddFilterGroup( const OUString& _rFilter, const Sequence< St
void SvtFileDialog::SetCurFilter( const OUString& rFilter )
{
- SAL_WARN_IF( IsInExecute(), "fpicker.office", "SvtFileDialog::SetCurFilter: currently executing!" );
+ SAL_WARN_IF( m_bIsInExecute, "fpicker.office", "SvtFileDialog::SetCurFilter: currently executing!" );
// look for corresponding filter
- sal_uInt16 nPos = pImpl->m_aFilter.size();
+ sal_uInt16 nPos = m_xImpl->m_aFilter.size();
while ( nPos-- )
{
- SvtFileDialogFilter_Impl* pFilter = pImpl->m_aFilter[ nPos ].get();
+ SvtFileDialogFilter_Impl* pFilter = m_xImpl->m_aFilter[ nPos ].get();
if ( pFilter->GetName() == rFilter )
{
- pImpl->SetCurFilter( pFilter, rFilter );
+ m_xImpl->SetCurFilter( pFilter, rFilter );
break;
}
}
}
-
OUString SvtFileDialog::GetCurFilter() const
{
OUString aFilter;
- const SvtFileDialogFilter_Impl* pCurrentFilter = pImpl->GetCurFilter();
+ const SvtFileDialogFilter_Impl* pCurrentFilter = m_xImpl->GetCurFilter();
if ( pCurrentFilter )
aFilter = pCurrentFilter->GetName();
@@ -2111,66 +1776,56 @@ OUString SvtFileDialog::getCurFilter( ) const
return GetCurFilter();
}
-
sal_uInt16 SvtFileDialog::GetFilterCount() const
{
- return pImpl->m_aFilter.size();
+ return m_xImpl->m_aFilter.size();
}
-
const OUString& SvtFileDialog::GetFilterName( sal_uInt16 nPos ) const
{
assert( nPos < GetFilterCount() && "invalid index" );
- return pImpl->m_aFilter[ nPos ]->GetName();
+ return m_xImpl->m_aFilter[ nPos ]->GetName();
}
-
void SvtFileDialog::InitSize()
{
- if ( pImpl->_aIniKey.isEmpty() )
+ if (m_xImpl->m_aIniKey.isEmpty())
return;
// initialize from config
- SvtViewOptions aDlgOpt( EViewType::Dialog, pImpl->_aIniKey );
+ SvtViewOptions aDlgOpt( EViewType::Dialog, m_xImpl->m_aIniKey );
if ( aDlgOpt.Exists() )
{
- SetWindowState(OUStringToOString(aDlgOpt.GetWindowState(), osl_getThreadTextEncoding()));
+ m_xDialog->set_window_state(OUStringToOString(aDlgOpt.GetWindowState(), RTL_TEXTENCODING_UTF8));
Any aUserData = aDlgOpt.GetUserItem( "UserData");
OUString sCfgStr;
if ( aUserData >>= sCfgStr )
- _pFileView->SetConfigString( sCfgStr );
+ m_xFileView->SetConfigString( sCfgStr );
}
}
-
std::vector<OUString> SvtFileDialog::GetPathList() const
{
std::vector<OUString> aList;
- sal_uLong nCount = _pFileView->GetSelectionCount();
- SvTreeListEntry* pEntry = nCount ? _pFileView->FirstSelected() : nullptr;
- if ( ! pEntry )
+ m_xFileView->selected_foreach([this, &aList](weld::TreeIter& rCurEntry){
+ aList.push_back(m_xFileView->GetURL(rCurEntry));
+ return false;
+ });
+
+ if (aList.empty())
{
- if ( !pImpl->_pEdFileName->GetText().isEmpty() && _bIsInExecute )
- aList.push_back(pImpl->_pEdFileName->GetURL());
+ if ( !m_xImpl->m_xEdFileName->get_active_text().isEmpty() && m_bIsInExecute )
+ aList.push_back(m_xImpl->m_xEdFileName->GetURL());
else
- aList.push_back(_aPath);
- }
- else
- {
- while ( pEntry )
- {
- aList.push_back(SvtFileView::GetURL(pEntry));
- pEntry = _pFileView->NextSelected( pEntry );
- }
+ aList.push_back(m_aPath);
}
return aList;
}
-
bool SvtFileDialog::IsolateFilterFromPath_Impl( OUString& rPath, OUString& rFilter )
{
OUString aReversePath = comphelper::string::reverseString(rPath);
@@ -2240,164 +1895,138 @@ bool SvtFileDialog::IsolateFilterFromPath_Impl( OUString& rPath, OUString& rFilt
return true;
}
-
-void SvtFileDialog::implUpdateImages( )
+IMPL_LINK_NOARG(SvtFileDialog, SizeAllocHdl, const Size&, void)
{
- // set the appropriate images on the buttons
- if ( pImpl->_pBtnUp )
- pImpl->_pBtnUp->SetModeImage( GetButtonImage( BMP_FILEDLG_BTN_UP ) );
-
- if ( pImpl->_pBtnNewFolder )
- pImpl->_pBtnNewFolder->SetModeImage( GetButtonImage( BMP_FILEDLG_CREATEFOLDER ) );
+ if (m_pFileNotifier)
+ m_pFileNotifier->notify(DIALOG_SIZE_CHANGED, 0);
}
-
-void SvtFileDialog::DataChanged( const DataChangedEvent& _rDCEvt )
+weld::Widget* SvtFileDialog::getControl( sal_Int16 nControlId, bool bLabelControl ) const
{
- if ( DataChangedEventType::SETTINGS == _rDCEvt.GetType() )
- implUpdateImages( );
-
- Dialog::DataChanged( _rDCEvt );
-}
+ weld::Widget* pReturn = nullptr;
-
-void SvtFileDialog::Resize()
-{
- Dialog::Resize();
-
- if ( IsRollUp() )
- return;
-
- if ( _pFileNotifier )
- _pFileNotifier->notify( DIALOG_SIZE_CHANGED, 0 );
-}
-
-Control* SvtFileDialog::getControl( sal_Int16 _nControlId, bool _bLabelControl ) const
-{
- Control* pReturn = nullptr;
-
- switch ( _nControlId )
+ switch ( nControlId )
{
case CONTROL_FILEVIEW:
- pReturn = _bLabelControl ? nullptr : static_cast< Control* >( _pFileView );
+ pReturn = bLabelControl ? nullptr : m_xFileView->identifier();
break;
case EDIT_FILEURL:
- pReturn = _bLabelControl
- ? static_cast< Control* >( pImpl->_pFtFileName )
- : static_cast< Control* >( pImpl->_pEdFileName );
+ pReturn = bLabelControl
+ ? static_cast<weld::Widget*>(m_xImpl->m_xFtFileName.get())
+ : static_cast<weld::Widget*>(m_xImpl->m_xEdFileName->getWidget());
break;
case EDIT_FILEURL_LABEL:
- pReturn = pImpl->_pFtFileName;
+ pReturn = m_xImpl->m_xFtFileName.get();
break;
case CHECKBOX_AUTOEXTENSION:
- pReturn = pImpl->_pCbAutoExtension;
+ pReturn = m_xImpl->m_xCbAutoExtension.get();
break;
case CHECKBOX_PASSWORD:
- pReturn = pImpl->_pCbPassword;
+ pReturn = m_xImpl->m_xCbPassword.get();
break;
case CHECKBOX_GPGENCRYPTION:
- pReturn = pImpl->_pCbGPGEncrypt;
+ pReturn = m_xImpl->m_xCbGPGEncrypt.get();
break;
case CHECKBOX_FILTEROPTIONS:
- pReturn = pImpl->_pCbOptions;
+ pReturn = m_xImpl->m_xCbOptions.get();
break;
case CHECKBOX_READONLY:
- pReturn = _pCbReadOnly;
+ pReturn = m_xCbReadOnly.get();
break;
case CHECKBOX_LINK:
- pReturn = _pCbLinkBox;
+ pReturn = m_xCbLinkBox.get();
break;
case CHECKBOX_PREVIEW:
- pReturn = _pCbPreviewBox;
+ pReturn = m_xCbPreviewBox.get();
break;
case CHECKBOX_SELECTION:
- pReturn = _pCbSelection;
+ pReturn = m_xCbSelection.get();
break;
case LISTBOX_FILTER:
- pReturn = _bLabelControl ? pImpl->_pFtFileType : pImpl->GetFilterListControl();
+ pReturn = bLabelControl ? m_xImpl->m_xFtFileType.get() : m_xImpl->GetFilterListControl();
break;
case LISTBOX_FILTER_LABEL:
- pReturn = pImpl->_pFtFileType;
+ pReturn = m_xImpl->m_xFtFileType.get();
break;
case FIXEDTEXT_CURRENTFOLDER:
- pReturn = pImpl->_pEdCurrentPath;
+ pReturn = m_xImpl->m_xEdCurrentPath->getWidget();
break;
case LISTBOX_VERSION:
- pReturn = _bLabelControl
- ? static_cast< Control* >( pImpl->_pFtFileVersion )
- : static_cast< Control* >( pImpl->_pLbFileVersion );
+ pReturn = bLabelControl
+ ? static_cast<weld::Widget*>(m_xImpl->m_xFtFileVersion.get())
+ : static_cast<weld::Widget*>(m_xImpl->m_xLbFileVersion.get());
break;
case LISTBOX_TEMPLATE:
- pReturn = _bLabelControl
- ? static_cast< Control* >( pImpl->_pFtTemplates )
- : static_cast< Control* >( pImpl->_pLbTemplates );
+ pReturn = bLabelControl
+ ? static_cast<weld::Widget*>(m_xImpl->m_xFtTemplates.get())
+ : static_cast<weld::Widget*>(m_xImpl->m_xLbTemplates.get());
break;
case LISTBOX_IMAGE_TEMPLATE:
- pReturn = _bLabelControl
- ? static_cast< Control* >( pImpl->_pFtImageTemplates )
- : static_cast< Control* >( pImpl->_pLbImageTemplates );
+ pReturn = bLabelControl
+ ? static_cast<weld::Widget*>(m_xImpl->m_xFtImageTemplates.get())
+ : static_cast<weld::Widget*>(m_xImpl->m_xLbImageTemplates.get());
break;
case LISTBOX_IMAGE_ANCHOR:
- pReturn = _bLabelControl
- ? static_cast< Control* >( pImpl->_pFtImageAnchor )
- : static_cast< Control* >( pImpl->_pLbImageAnchor );
+ pReturn = bLabelControl
+ ? static_cast<weld::Widget*>(m_xImpl->m_xFtImageAnchor.get())
+ : static_cast<weld::Widget*>(m_xImpl->m_xLbImageAnchor.get());
break;
case LISTBOX_VERSION_LABEL:
- pReturn = pImpl->_pFtFileVersion;
+ pReturn = m_xImpl->m_xFtFileVersion.get();
break;
case LISTBOX_TEMPLATE_LABEL:
- pReturn = pImpl->_pFtTemplates;
+ pReturn = m_xImpl->m_xFtTemplates.get();
break;
case LISTBOX_IMAGE_TEMPLATE_LABEL:
- pReturn = pImpl->_pFtImageTemplates;
+ pReturn = m_xImpl->m_xFtImageTemplates.get();
break;
case LISTBOX_IMAGE_ANCHOR_LABEL:
- pReturn = pImpl->_pFtImageAnchor;
+ pReturn = m_xImpl->m_xFtImageAnchor.get();
break;
case PUSHBUTTON_OK:
- pReturn = pImpl->_pBtnFileOpen;
+ pReturn = m_xImpl->m_xBtnFileOpen.get();
break;
case PUSHBUTTON_CANCEL:
- pReturn = pImpl->_pBtnCancel;
+ pReturn = m_xImpl->m_xBtnCancel.get();
break;
case PUSHBUTTON_PLAY:
- pReturn = _pPbPlay;
+ pReturn = m_xPbPlay.get();
break;
case PUSHBUTTON_HELP:
- pReturn = pImpl->_pBtnHelp;
+ pReturn = m_xImpl->m_xBtnHelp.get();
break;
case TOOLBOXBUTOON_LEVEL_UP:
- pReturn = pImpl->_pBtnUp;
+ pReturn = m_xImpl->m_xBtnUp->getWidget();
break;
case TOOLBOXBUTOON_NEW_FOLDER:
- pReturn = pImpl->_pBtnNewFolder;
+ pReturn = m_xImpl->m_xBtnNewFolder.get();
break;
case LISTBOX_FILTER_SELECTOR:
@@ -2410,170 +2039,147 @@ Control* SvtFileDialog::getControl( sal_Int16 _nControlId, bool _bLabelControl )
return pReturn;
}
-
-void SvtFileDialog::enableControl( sal_Int16 _nControlId, bool _bEnable )
+void SvtFileDialog::enableControl(sal_Int16 nControlId, bool bEnable)
{
- Control* pControl = getControl( _nControlId );
- if ( pControl )
- EnableControl( pControl, _bEnable );
- Control* pLabel = getControl( _nControlId, true );
- if ( pLabel )
- EnableControl( pLabel, _bEnable );
+ weld::Widget* pControl = getControl(nControlId);
+ if (pControl)
+ EnableControl(pControl, bEnable);
+ weld::Widget* pLabel = getControl(nControlId, true);
+ if (pLabel)
+ EnableControl(pLabel, bEnable);
}
-
void SvtFileDialog::AddControls_Impl( )
{
// create the "insert as link" checkbox, if needed
- if ( _nPickerFlags & PickerFlags::InsertAsLink )
+ if ( m_nPickerFlags & PickerFlags::InsertAsLink )
{
- _pCbLinkBox ->SetText( FpsResId( STR_SVT_FILEPICKER_INSERT_AS_LINK ) );
- _pCbLinkBox ->SetHelpId( HID_FILEDLG_LINK_CB );
- _pCbLinkBox->SetClickHdl( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
- _pCbLinkBox->Show();
+ m_xCbLinkBox->set_label( FpsResId( STR_SVT_FILEPICKER_INSERT_AS_LINK ) );
+ m_xCbLinkBox->set_help_id( HID_FILEDLG_LINK_CB );
+ m_xCbLinkBox->connect_clicked( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
+ m_xCbLinkBox->show();
}
// create the "show preview" checkbox ( and the preview window, too ), if needed
- if ( _nPickerFlags & PickerFlags::ShowPreview )
+ if ( m_nPickerFlags & PickerFlags::ShowPreview )
{
- pImpl->_aIniKey = "ImportGraphicDialog";
- // because the "<All Formats> (*.bmp,*...)" entry is too wide,
- // we need to disable the auto width feature of the filter box
- pImpl->DisableFilterBoxAutoWidth();
+ m_xImpl->m_aIniKey = "ImportGraphicDialog";
// "preview"
- _pCbPreviewBox->SetText( FpsResId( STR_SVT_FILEPICKER_SHOW_PREVIEW ) );
- _pCbPreviewBox->SetHelpId( HID_FILEDLG_PREVIEW_CB );
- _pCbPreviewBox->SetClickHdl( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
- _pCbPreviewBox->Show();
+ m_xCbPreviewBox->set_label( FpsResId( STR_SVT_FILEPICKER_SHOW_PREVIEW ) );
+ m_xCbPreviewBox->set_help_id( HID_FILEDLG_PREVIEW_CB );
+ m_xCbPreviewBox->connect_clicked( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
+ m_xCbPreviewBox->show();
// generate preview window just here
- _pPrevWin->SetOutputSizePixel(Size(200, 300));
- _pPrevWin->Show();
-
- _pPrevBmp = VclPtr<FixedBitmap>::Create( _pPrevWin, WB_BORDER );
- _pPrevBmp->SetBackground( Wallpaper( COL_WHITE ) );
- _pPrevBmp->SetSizePixel(_pPrevWin->GetSizePixel());
- _pPrevBmp->Show();
- _pPrevBmp->SetAccessibleName(FpsResId(STR_PREVIEW));
+ m_aPreviewSize = Size(200, 300);
+ m_xPrevBmp->set_size_request(m_aPreviewSize.Width(), m_aPreviewSize.Height());
+ m_xPrevBmp->connect_size_allocate(LINK(this, SvtFileDialog, PreviewSizeAllocHdl));
+ m_xPreviewFrame->show();
+ m_xPrevBmp->set_accessible_name(FpsResId(STR_PREVIEW));
}
- if ( _nPickerFlags & PickerFlags::AutoExtension )
+ if ( m_nPickerFlags & PickerFlags::AutoExtension )
{
- pImpl->_pCbAutoExtension->SetText( FpsResId( STR_SVT_FILEPICKER_AUTO_EXTENSION ) );
- pImpl->_pCbAutoExtension->Check();
- pImpl->_pCbAutoExtension->SetClickHdl( LINK( this, SvtFileDialog, AutoExtensionHdl_Impl ) );
- pImpl->_pCbAutoExtension->Show();
+ m_xImpl->m_xCbAutoExtension->set_label( FpsResId( STR_SVT_FILEPICKER_AUTO_EXTENSION ) );
+ m_xImpl->m_xCbAutoExtension->set_active(true);
+ m_xImpl->m_xCbAutoExtension->connect_clicked( LINK( this, SvtFileDialog, AutoExtensionHdl_Impl ) );
+ m_xImpl->m_xCbAutoExtension->show();
}
- if ( _nPickerFlags & PickerFlags::FilterOptions )
+ if ( m_nPickerFlags & PickerFlags::FilterOptions )
{
- pImpl->_pCbOptions->SetText( FpsResId( STR_SVT_FILEPICKER_FILTER_OPTIONS ) );
- pImpl->_pCbOptions->SetClickHdl( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
- pImpl->_pCbOptions->Show();
+ m_xImpl->m_xCbOptions->set_label( FpsResId( STR_SVT_FILEPICKER_FILTER_OPTIONS ) );
+ m_xImpl->m_xCbOptions->connect_clicked( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
+ m_xImpl->m_xCbOptions->show();
}
- if ( _nPickerFlags & PickerFlags::Selection )
+ if ( m_nPickerFlags & PickerFlags::Selection )
{
- _pCbSelection->SetText( FpsResId( STR_SVT_FILEPICKER_SELECTION ) );
- _pCbSelection->SetClickHdl( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
- _pCbSelection->Show();
+ m_xCbSelection->set_label( FpsResId( STR_SVT_FILEPICKER_SELECTION ) );
+ m_xCbSelection->connect_clicked( LINK( this, SvtFileDialog, ClickHdl_Impl ) );
+ m_xCbSelection->show();
}
- if ( _nPickerFlags & PickerFlags::PlayButton )
+ if ( m_nPickerFlags & PickerFlags::PlayButton )
{
- _pPbPlay->SetText( FpsResId( STR_SVT_FILEPICKER_PLAY ) );
- _pPbPlay->SetHelpId( HID_FILESAVE_DOPLAY );
- _pPbPlay->SetClickHdl( LINK( this, SvtFileDialog, PlayButtonHdl_Impl ) );
- _pPbPlay->Show();
+ m_xPbPlay->set_label( FpsResId( STR_SVT_FILEPICKER_PLAY ) );
+ m_xPbPlay->set_help_id( HID_FILESAVE_DOPLAY );
+ m_xPbPlay->connect_clicked( LINK( this, SvtFileDialog, PlayButtonHdl_Impl ) );
+ m_xPbPlay->show();
}
- if ( _nPickerFlags & PickerFlags::ShowVersions )
+ if ( m_nPickerFlags & PickerFlags::ShowVersions )
{
- pImpl->_pFtFileVersion->SetText( FpsResId( STR_SVT_FILEPICKER_VERSION ) );
- pImpl->_pFtFileVersion->Show();
+ m_xImpl->m_xFtFileVersion->set_label( FpsResId( STR_SVT_FILEPICKER_VERSION ) );
+ m_xImpl->m_xFtFileVersion->show();
- pImpl->_pLbFileVersion->SetHelpId( HID_FILEOPEN_VERSION );
- pImpl->_pLbFileVersion->Show();
+ m_xImpl->m_xLbFileVersion->set_help_id( HID_FILEOPEN_VERSION );
+ m_xImpl->m_xLbFileVersion->show();
}
- else if ( _nPickerFlags & PickerFlags::Templates )
+ else if ( m_nPickerFlags & PickerFlags::Templates )
{
- pImpl->_pFtTemplates->SetText( FpsResId( STR_SVT_FILEPICKER_TEMPLATES ) );
- pImpl->_pFtTemplates->Show();
+ m_xImpl->m_xFtTemplates->set_label( FpsResId( STR_SVT_FILEPICKER_TEMPLATES ) );
+ m_xImpl->m_xFtTemplates->show();
- pImpl->_pLbTemplates->SetHelpId( HID_FILEOPEN_VERSION );
- pImpl->_pLbTemplates->Show();
- // This is strange. During the re-factoring during 96930, I discovered that this help id
- // is set in the "Templates mode". This was hidden in the previous implementation.
- // Shouldn't this be a more meaningful help id.
+ m_xImpl->m_xLbTemplates->set_help_id( HID_FILEOPEN_VERSION );
+ m_xImpl->m_xLbTemplates->show();
+ // This is strange. During the re-factoring during 96930, I discovered that this help id
+ // is set in the "Templates mode". This was hidden in the previous implementation.
+ // Shouldn't this be a more meaningful help id.
}
- else if ( _nPickerFlags & PickerFlags::ImageTemplate )
+ else if ( m_nPickerFlags & PickerFlags::ImageTemplate )
{
- pImpl->_pFtImageTemplates->SetText( FpsResId( STR_SVT_FILEPICKER_IMAGE_TEMPLATE ) );
- pImpl->_pFtImageTemplates->Show();
+ m_xImpl->m_xFtImageTemplates->set_label( FpsResId( STR_SVT_FILEPICKER_IMAGE_TEMPLATE ) );
+ m_xImpl->m_xFtImageTemplates->show();
- pImpl->_pLbImageTemplates->SetHelpId( HID_FILEOPEN_IMAGE_TEMPLATE );
- pImpl->_pLbImageTemplates->Show();
+ m_xImpl->m_xLbImageTemplates->set_help_id( HID_FILEOPEN_IMAGE_TEMPLATE );
+ m_xImpl->m_xLbImageTemplates->show();
}
- else if ( _nPickerFlags & PickerFlags::ImageAnchor )
+ else if ( m_nPickerFlags & PickerFlags::ImageAnchor )
{
- pImpl->_pFtImageAnchor->SetText( FpsResId( STR_SVT_FILEPICKER_IMAGE_ANCHOR ) );
- pImpl->_pFtImageAnchor->Show();
+ m_xImpl->m_xFtImageAnchor->set_label( FpsResId( STR_SVT_FILEPICKER_IMAGE_ANCHOR ) );
+ m_xImpl->m_xFtImageAnchor->show();
- pImpl->_pLbImageAnchor->SetHelpId( HID_FILEOPEN_IMAGE_ANCHOR );
- pImpl->_pLbImageAnchor->Show();
+ m_xImpl->m_xLbImageAnchor->set_help_id( HID_FILEOPEN_IMAGE_ANCHOR );
+ m_xImpl->m_xLbImageAnchor->show();
}
- pImpl->_pPlaces = VclPtr<PlacesListBox>::Create(_pContainer, this, FpsResId(STR_PLACES_TITLE), WB_BORDER);
- pImpl->_pPlaces->SetHelpId("SVT_HID_FILESAVE_PLACES_LISTBOX");
- Size aSize(LogicToPixel(Size(50, 85), MapMode(MapUnit::MapAppFont)));
- pImpl->_pPlaces->set_height_request(aSize.Height());
- pImpl->_pPlaces->set_width_request(aSize.Width());
- pImpl->_pPlaces->SetSizePixel(aSize);
- pImpl->_pPlaces->Show();
-
- sal_Int32 nPosX = pImpl->_pPlaces->GetSizePixel().Width();
- _pSplitter->SetPosPixel(Point(nPosX, 0));
- nPosX += _pSplitter->GetSizePixel().Width();
- _pFileView->SetPosPixel(Point(nPosX, 0));
-
- pImpl->_pPlaces->SetAddHdl( LINK ( this, SvtFileDialog, AddPlacePressed_Hdl ) );
- pImpl->_pPlaces->SetDelHdl( LINK ( this, SvtFileDialog, RemovePlacePressed_Hdl ) );
+ m_xImpl->m_xPlaces.reset(new PlacesListBox(m_xBuilder->weld_tree_view("places"),
+ m_xBuilder->weld_button("add"),
+ m_xBuilder->weld_button("del"),
+ this));
+ m_xImpl->m_xPlaces->set_help_id("SVT_HID_FILESAVE_PLACES_LISTBOX");
+ m_xImpl->m_xPlaces->SetAddHdl( LINK ( this, SvtFileDialog, AddPlacePressed_Hdl ) );
+ m_xImpl->m_xPlaces->SetDelHdl( LINK ( this, SvtFileDialog, RemovePlacePressed_Hdl ) );
initDefaultPlaces();
}
-
-sal_Int32 SvtFileDialog::getTargetColorDepth()
+IMPL_LINK(SvtFileDialog, PreviewSizeAllocHdl, const Size&, rSize, void)
{
- if ( _pPrevBmp )
- return _pPrevBmp->GetBitCount();
- else
- return 0;
+ m_aPreviewSize = rSize;
}
-
sal_Int32 SvtFileDialog::getAvailableWidth()
{
- if ( _pPrevBmp )
- return _pPrevBmp->GetOutputSizePixel().Width();
+ if (m_xPrevBmp)
+ return m_aPreviewSize.Width();
else
return 0;
}
-
sal_Int32 SvtFileDialog::getAvailableHeight()
{
- if ( _pPrevBmp )
- return _pPrevBmp->GetOutputSizePixel().Height();
+ if (m_xPrevBmp)
+ return m_aPreviewSize.Height();
else
return 0;
}
-
-void SvtFileDialog::setImage( const Any& rImage )
+void SvtFileDialog::setImage(const Any& rImage)
{
- if ( ! _pPrevBmp || ! _pPrevBmp->IsVisible() )
+ if (!m_xPrevBmp || !m_xPreviewFrame->get_visible())
return;
Sequence < sal_Int8 > aBmpSequence;
@@ -2586,46 +2192,41 @@ void SvtFileDialog::setImage( const Any& rImage )
StreamMode::READ );
ReadDIBBitmapEx(aBmp, aData);
- _pPrevBmp->SetBitmap( aBmp );
+ m_xPrevBmp->set_image(Graphic(aBmp).GetXGraphic());
}
else
{
- BitmapEx aEmpty;
- _pPrevBmp->SetBitmap( aEmpty );
+ m_xPrevBmp->set_image(nullptr);
}
}
-
OUString SvtFileDialog::getCurrentFileText( ) const
{
OUString sReturn;
- if ( pImpl && pImpl->_pEdFileName )
- sReturn = pImpl->_pEdFileName->GetText();
+ if (m_xImpl && m_xImpl->m_xEdFileName)
+ sReturn = m_xImpl->m_xEdFileName->get_active_text();
return sReturn;
}
-
-void SvtFileDialog::setCurrentFileText( const OUString& _rText, bool _bSelectAll )
+void SvtFileDialog::setCurrentFileText( const OUString& _rText, bool m_bSelectAll )
{
- if ( pImpl && pImpl->_pEdFileName )
+ if (m_xImpl && m_xImpl->m_xEdFileName)
{
- pImpl->_pEdFileName->SetText( _rText );
- if ( _bSelectAll )
- pImpl->_pEdFileName->SetSelection( Selection( 0, _rText.getLength() ) );
+ m_xImpl->m_xEdFileName->set_entry_text( _rText );
+ if ( m_bSelectAll )
+ m_xImpl->m_xEdFileName->select_entry_region(0, -1);
}
}
-
bool SvtFileDialog::isAutoExtensionEnabled() const
{
- return pImpl->_pCbAutoExtension && pImpl->_pCbAutoExtension->IsChecked();
+ return m_xImpl->m_xCbAutoExtension && m_xImpl->m_xCbAutoExtension->get_active();
}
-
bool SvtFileDialog::getShowState()
{
- if ( _pPrevBmp )
- return _pPrevBmp->IsVisible();
+ if (m_xPreviewFrame)
+ return m_xPreviewFrame->get_visible();
else
return false;
}
@@ -2664,15 +2265,15 @@ bool SvtFileDialog::ContentGetTitle( const OUString& rURL, OUString& rTitle )
return m_aContent.isValid();
}
-void SvtFileDialog::appendDefaultExtension(OUString& _rFileName,
- const OUString& _rFilterDefaultExtension,
- const OUString& _rFilterExtensions)
+void SvtFileDialog::appendDefaultExtension(OUString& rFileName,
+ const OUString& rFilterDefaultExtension,
+ const OUString& rFilterExtensions)
{
- const OUString aType(_rFilterExtensions.toAsciiLowerCase());
+ const OUString aType(rFilterExtensions.toAsciiLowerCase());
if ( aType != FILEDIALOG_FILTER_ALL )
{
- const OUString aTemp(_rFileName.toAsciiLowerCase());
+ const OUString aTemp(rFileName.toAsciiLowerCase());
sal_Int32 nPos = 0;
do
@@ -2687,54 +2288,27 @@ void SvtFileDialog::appendDefaultExtension(OUString& _rFileName,
}
while (nPos>=0);
- _rFileName += "." + _rFilterDefaultExtension;
+ rFileName += "." + rFilterDefaultExtension;
}
}
void SvtFileDialog::initDefaultPlaces( )
{
PlacePtr pRootPlace( new Place( FpsResId(STR_DEFAULT_DIRECTORY), GetStandardDir() ) );
- pImpl->_pPlaces->AppendPlace( pRootPlace );
+ m_xImpl->m_xPlaces->AppendPlace( pRootPlace );
// Load from user settings
- Sequence< OUString > placesUrlsList(officecfg::Office::Common::Misc::FilePickerPlacesUrls::get(m_context));
- Sequence< OUString > placesNamesList(officecfg::Office::Common::Misc::FilePickerPlacesNames::get(m_context));
+ Sequence< OUString > placesUrlsList(officecfg::Office::Common::Misc::FilePickerPlacesUrls::get(m_xContext));
+ Sequence< OUString > placesNamesList(officecfg::Office::Common::Misc::FilePickerPlacesNames::get(m_xContext));
for(sal_Int32 nPlace = 0; nPlace < placesUrlsList.getLength() && nPlace < placesNamesList.getLength(); ++nPlace)
{
PlacePtr pPlace(new Place(placesNamesList[nPlace], placesUrlsList[nPlace], true));
- pImpl->_pPlaces->AppendPlace(pPlace);
+ m_xImpl->m_xPlaces->AppendPlace(pPlace);
}
// Reset the placesList "updated" state
- pImpl->_pPlaces->IsUpdated();
-}
-
-IMPL_LINK_NOARG( SvtFileDialog, Split_Hdl, Splitter*, void )
-{
- sal_Int32 nSplitPos = _pSplitter->GetSplitPosPixel();
-
- // Resize the places list
- sal_Int32 nPlaceX = pImpl->_pPlaces->GetPosPixel( ).X();
- Size placeSize = pImpl->_pPlaces->GetSizePixel( );
- placeSize.setWidth( nSplitPos - nPlaceX );
- pImpl->_pPlaces->SetSizePixel( placeSize );
-
- // Change Pos and size of the fileview
- Point fileViewPos = _pFileView->GetPosPixel();
- sal_Int32 nOldX = fileViewPos.X();
- sal_Int32 nNewX = nSplitPos + _pSplitter->GetSizePixel().Width();
- fileViewPos.setX( nNewX );
- Size fileViewSize = _pFileView->GetSizePixel();
- fileViewSize.AdjustWidth( -( nNewX - nOldX ) );
- _pFileView->SetPosSizePixel( fileViewPos, fileViewSize );
-
- _pSplitter->SetPosPixel( Point( placeSize.Width(), _pSplitter->GetPosPixel().Y() ) );
-}
-
-Image SvtFileDialog::GetButtonImage(const OUString& rButtonId)
-{
- return Image(StockImage::Yes, rButtonId);
+ m_xImpl->m_xPlaces->IsUpdated();
}
QueryFolderNameDialog::QueryFolderNameDialog(weld::Window* _pParent,
diff --git a/fpicker/source/office/iodlg.hxx b/fpicker/source/office/iodlg.hxx
index e6adff2657c6..bd5d9225b676 100644
--- a/fpicker/source/office/iodlg.hxx
+++ b/fpicker/source/office/iodlg.hxx
@@ -44,9 +44,8 @@
class SvTabListBox;
class SvtFileView;
class SvtFileDialogFilter_Impl;
-class SvtURLBox;
class SvtExpFileDlg_Impl;
-class CustomContainer;
+class URLBox;
enum class AdjustFilterFlags {
NONE = 0x0000,
@@ -62,25 +61,24 @@ namespace o3tl {
class SvtFileDialog final : public SvtFileDialog_Base
{
private:
- VclPtr<CheckBox> _pCbReadOnly;
- VclPtr<CheckBox> _pCbLinkBox;
- VclPtr<CheckBox> _pCbPreviewBox;
- VclPtr<CheckBox> _pCbSelection;
- VclPtr<PushButton> _pPbPlay;
- VclPtr<vcl::Window> _pPrevWin;
- VclPtr<FixedBitmap> _pPrevBmp;
- VclPtr<CustomContainer> _pContainer;
- VclPtr<SvtFileView> _pFileView;
- VclPtr<Splitter> _pSplitter;
- ::svt::IFilePickerListener* _pFileNotifier;
- std::unique_ptr<SvtExpFileDlg_Impl> pImpl;
- PickerFlags _nPickerFlags;
- bool _bIsInExecute : 1;
+ std::unique_ptr<weld::CheckButton> m_xCbReadOnly;
+ std::unique_ptr<weld::CheckButton> m_xCbLinkBox;
+ std::unique_ptr<weld::CheckButton> m_xCbPreviewBox;
+ std::unique_ptr<weld::CheckButton> m_xCbSelection;
+ std::unique_ptr<weld::Button> m_xPbPlay;
+ std::unique_ptr<weld::Widget> m_xPreviewFrame;
+ std::unique_ptr<weld::Image> m_xPrevBmp;
+ std::unique_ptr<weld::Container> m_xContainer;
+ std::unique_ptr<SvtFileView> m_xFileView;
+ ::svt::IFilePickerListener* m_pFileNotifier;
+ std::unique_ptr<SvtExpFileDlg_Impl> m_xImpl;
+ Size m_aPreviewSize;
+ PickerFlags m_nPickerFlags;
+ bool m_bIsInExecute : 1;
::svt::SmartContent m_aContent;
- ::std::set< VclPtr<Control> >
- m_aDisabledControls;
+ ::std::set<weld::Widget*> m_aDisabledControls;
::utl::OConfigurationNode m_aConfiguration;
::rtl::Reference< ::svt::AsyncPickerAction >
@@ -88,26 +86,26 @@ private:
bool m_bInExecuteAsync;
bool m_bHasFilename;
css::uno::Reference < css::uno::XComponentContext >
- m_context;
+ m_xContext;
- DECL_LINK( FilterSelectHdl_Impl, ListBox&, void );
+ DECL_LINK( FilterSelectHdl_Impl, weld::ComboBox&, void );
DECL_LINK( FilterSelectTimerHdl_Impl, Timer*, void );
- DECL_LINK( NewFolderHdl_Impl, Button*, void );
- DECL_LINK( OpenUrlHdl_Impl, SvtURLBox*, void );
- DECL_LINK( OpenClickHdl_Impl, Button*, void );
- DECL_LINK( CancelHdl_Impl, Button*, void );
- DECL_LINK( FileNameGetFocusHdl_Impl, Control&, void );
- DECL_LINK( FileNameModifiedHdl_Impl, Edit&, void );
-
- DECL_LINK( URLBoxModifiedHdl_Impl, SvtURLBox*, void );
- DECL_LINK( ConnectToServerPressed_Hdl, Button*, void );
-
- DECL_LINK( AddPlacePressed_Hdl, Button*, void );
- DECL_LINK( RemovePlacePressed_Hdl, Button*, void );
- DECL_LINK( Split_Hdl, Splitter*, void );
-
- void OpenHdl_Impl(void const * pVoid);
- void Init_Impl( PickerFlags nBits );
+ DECL_LINK( NewFolderHdl_Impl, weld::Button&, void );
+ DECL_LINK( OpenUrlHdl_Impl, weld::ComboBox&, bool );
+ DECL_LINK( OpenClickHdl_Impl, weld::Button&, void );
+ DECL_LINK( CancelHdl_Impl, weld::Button&, void );
+ DECL_LINK( FileNameGetFocusHdl_Impl, weld::Widget&, void );
+ DECL_LINK( FileNameModifiedHdl_Impl, weld::ComboBox&, void );
+
+ DECL_LINK( URLBoxModifiedHdl_Impl, weld::ComboBox&, bool );
+ DECL_LINK( ConnectToServerPressed_Hdl, weld::Button&, void );
+
+ DECL_LINK( AddPlacePressed_Hdl, weld::Button&, void );
+ DECL_LINK( RemovePlacePressed_Hdl, weld::Button&, void );
+ DECL_LINK( PreviewSizeAllocHdl, const Size&, void);
+
+ void OpenHdl_Impl(void const * pVoid);
+
/** find a filter with the given wildcard
@param _rFilter
the wildcard pattern to look for in the filter list
@@ -126,24 +124,20 @@ private:
void OpenMultiSelection_Impl();
void AddControls_Impl( );
- DECL_LINK( SelectHdl_Impl, SvTreeListBox*, void );
- DECL_LINK( DblClickHdl_Impl, SvTreeListBox*, bool);
- DECL_LINK( EntrySelectHdl_Impl, ComboBox&, void);
- DECL_LINK( OpenDoneHdl_Impl, SvtFileView*, void );
- DECL_LINK( AutoExtensionHdl_Impl, Button*, void);
- DECL_LINK( ClickHdl_Impl, Button*, void );
- DECL_LINK( PlayButtonHdl_Impl, Button*, void);
-
+ DECL_LINK(SelectHdl_Impl, SvtFileView*, void);
+ DECL_LINK(DblClickHdl_Impl, SvtFileView*, bool);
+ DECL_LINK(EntrySelectHdl_Impl, weld::ComboBox&, void);
+ DECL_LINK(OpenDoneHdl_Impl, SvtFileView*, void);
+ DECL_LINK(AutoExtensionHdl_Impl, weld::Button&, void);
+ DECL_LINK(ClickHdl_Impl, weld::Button&, void);
+ DECL_LINK(PlayButtonHdl_Impl, weld::Button&, void);
+ DECL_LINK(SizeAllocHdl, const Size&, void);
// removes a filter with wildcards from the path and returns it
static bool IsolateFilterFromPath_Impl( OUString& rPath, OUString& rFilter );
- void implUpdateImages( );
-
- virtual bool EventNotify( NotifyEvent& rNEvt ) override;
-
- OUString _aPath;
- OUString _aDefExt;
+ OUString m_aPath;
+ OUString m_aDefExt;
/** enables or disables the complete UI of the file picker, with only offering a
cancel button
@@ -158,19 +152,17 @@ private:
/** enables or disables a control
- You are strongly encouraged to prefer this method over pControl->Enable( _bEnable ). See
+ You are strongly encouraged to prefer this method over pControl->Enable( bEnable ). See
<member>EnableUI</member> for details.
*/
- void EnableControl( Control* _pControl, bool _bEnable );
- bool PrepareExecute();
+ void EnableControl(weld::Widget* pControl, bool bEnable);
+ virtual bool PrepareExecute() override;
public:
- SvtFileDialog( vcl::Window* _pParent, PickerFlags nBits );
+ SvtFileDialog( weld::Window* pParent, PickerFlags nBits );
virtual ~SvtFileDialog() override;
- virtual void dispose() override;
- virtual short Execute() override;
- virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) override;
+ virtual short run() override;
void FileSelect();
void FilterSelect() override;
@@ -193,9 +185,6 @@ public:
sal_uInt16 GetFilterCount() const;
const OUString& GetFilterName( sal_uInt16 nPos ) const;
- virtual void Resize() override;
- virtual void DataChanged( const DataChangedEvent& _rDCEvt ) override;
-
void PrevLevel_Impl();
void OpenURL_Impl( const OUString& rURL );
@@ -205,9 +194,8 @@ public:
void UpdateControls( const OUString& rURL ) override;
void EnableAutocompletion( bool _bEnable = true ) override;
- void SetFileCallback( ::svt::IFilePickerListener *pNotifier ) override { _pFileNotifier = pNotifier; }
+ void SetFileCallback( ::svt::IFilePickerListener *pNotifier ) override { m_pFileNotifier = pNotifier; }
- sal_Int32 getTargetColorDepth() override;
sal_Int32 getAvailableWidth() override;
sal_Int32 getAvailableHeight() override;
void setImage( const css::uno::Any& rImage ) override;
@@ -232,8 +220,6 @@ public:
inline void EraseDefaultExt( sal_Int32 _nIndex = 0 );
inline const OUString& GetDefaultExt() const;
- static Image GetButtonImage(const OUString& rButtonId);
-
bool ContentIsFolder( const OUString& rURL ) override { return m_aContent.isFolder( rURL ) && m_aContent.isValid(); }
bool ContentHasParentFolder( const OUString& rURL );
bool ContentCanMakeFolder( const OUString& rURL );
@@ -242,7 +228,7 @@ public:
private:
SvtFileDialogFilter_Impl* implAddFilter( const OUString& _rFilter, const OUString& _rType );
- /** updates _pUserFilter with a new filter
+ /** updates m_xUserFilter with a new filter
<p>No checks for necessity are made.</p>
*/
void createNewUserFilter( const OUString& _rNewFilter );
@@ -250,7 +236,7 @@ private:
AdjustFilterFlags adjustFilter( const OUString& _rFilter );
// IFilePickerController, needed by OControlAccess
- virtual Control* getControl( sal_Int16 _nControlId, bool _bLabelControl = false ) const override;
+ virtual weld::Widget* getControl( sal_Int16 nControlId, bool bLabelControl = false ) const override;
virtual void enableControl( sal_Int16 _nControlId, bool _bEnable ) override;
virtual OUString getCurFilter( ) const override;
@@ -286,7 +272,7 @@ private:
inline void SvtFileDialog::SetPath( const OUString& rNewURL )
{
- _aPath = rNewURL;
+ m_aPath = rNewURL;
}
@@ -298,32 +284,31 @@ inline void SvtFileDialog::SetHasFilename( bool bHasFilename )
inline const OUString& SvtFileDialog::GetPath()
{
- return _aPath;
+ return m_aPath;
}
inline void SvtFileDialog::SetDefaultExt( const OUString& rExt )
{
- _aDefExt = rExt;
+ m_aDefExt = rExt;
}
inline void SvtFileDialog::EraseDefaultExt( sal_Int32 _nIndex )
{
- _aDefExt = _aDefExt.copy( 0, _nIndex );
+ m_aDefExt = m_aDefExt.copy( 0, _nIndex );
}
inline const OUString& SvtFileDialog::GetDefaultExt() const
{
- return _aDefExt;
+ return m_aDefExt;
}
inline SvtFileView* SvtFileDialog::GetView()
{
- return _pFileView;
+ return m_xFileView.get();
}
-
#endif // INCLUDED_FPICKER_SOURCE_OFFICE_IODLG_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/office/iodlgimp.cxx b/fpicker/source/office/iodlgimp.cxx
index d6e841c14c40..fef6a72513f4 100644
--- a/fpicker/source/office/iodlgimp.cxx
+++ b/fpicker/source/office/iodlgimp.cxx
@@ -34,78 +34,37 @@ using namespace ::com::sun::star::lang;
using namespace ::utl;
SvtFileDialogFilter_Impl::SvtFileDialogFilter_Impl( const OUString& rName, const OUString& rType )
- :m_aName( rName )
- ,m_aType( rType )
+ : m_aName( rName )
+ , m_aType( rType )
{
m_aType = m_aType.toAsciiLowerCase();
}
-
SvtFileDialogFilter_Impl::~SvtFileDialogFilter_Impl()
{
}
-
-// SvtFileDialogFilterList_Impl
-
-
-//= SvtFileDialogURLSelector
-SvtFileDialogURLSelector::SvtFileDialogURLSelector(vcl::Window* _pParent, SvtFileDialog* _pDlg, WinBits nBits, const OUString& rButtonId)
- :MenuButton ( _pParent, nBits )
- ,m_pDlg ( _pDlg )
- ,m_pMenu ( VclPtr<PopupMenu>::Create() )
-{
- SetStyle( GetStyle() | WB_NOPOINTERFOCUS | WB_RECTSTYLE | WB_SMALLSTYLE );
- SetModeImage(SvtFileDialog::GetButtonImage(rButtonId));
- SetDelayMenu(true);
- SetDropDown(PushButtonDropdownStyle::Toolbox);
-}
-
-
-SvtFileDialogURLSelector::~SvtFileDialogURLSelector()
-{
- disposeOnce();
-}
-
-void SvtFileDialogURLSelector::dispose()
-{
- m_pMenu.disposeAndClear();
- m_pDlg.clear();
- MenuButton::dispose();
-}
-
-
-void SvtFileDialogURLSelector::Activate()
-{
- m_pMenu->Clear();
-
- FillURLMenu( m_pMenu );
-
- SetPopupMenu( m_pMenu );
-}
-
-
//= SvtUpButton_Impl
-
-
-SvtUpButton_Impl::SvtUpButton_Impl( vcl::Window *pParent, SvtFileDialog* pDlg, WinBits nBits )
- :SvtFileDialogURLSelector( pParent, pDlg, nBits, BMP_FILEDLG_BTN_UP )
-{
-}
-
-
-SvtUpButton_Impl::~SvtUpButton_Impl()
+SvtUpButton_Impl::SvtUpButton_Impl(std::unique_ptr<weld::Toolbar> xToolbar,
+ std::unique_ptr<weld::Menu> xMenu,
+ SvtFileDialog* pDlg)
+ : m_xToolbar(std::move(xToolbar))
+ , m_xMenu(std::move(xMenu))
+ , m_pDlg(pDlg)
{
+ m_xToolbar->set_item_menu("up_btn", m_xMenu.get());
+ m_xToolbar->connect_clicked(LINK(this, SvtUpButton_Impl, ClickHdl));
+ m_xMenu->connect_activate(LINK(this, SvtUpButton_Impl, SelectHdl));
}
-
-void SvtUpButton_Impl::FillURLMenu( PopupMenu* _pMenu )
+void SvtUpButton_Impl::FillURLMenu()
{
- SvtFileView* pBox = GetDialogParent()->GetView();
+ SvtFileView* pBox = m_pDlg->GetView();
sal_uInt16 nItemId = 1;
- _aURLs.clear();
+ aURLs.clear();
+ m_xMenu->clear();
// determine parent levels
INetURLObject aObject( pBox->GetViewURL() );
@@ -114,7 +73,7 @@ void SvtUpButton_Impl::FillURLMenu( PopupMenu* _pMenu )
::svtools::VolumeInfo aVolInfo( true /* volume */, false /* remote */,
false /* removable */, false /* floppy */,
false /* compact disk */ );
- Image aVolumeImage( SvFileInformationManager::GetFolderImage( aVolInfo ) );
+ OUString aVolumeImage( SvFileInformationManager::GetFolderImageId( aVolInfo ) );
while ( nCount >= 1 )
{
@@ -122,98 +81,61 @@ void SvtUpButton_Impl::FillURLMenu( PopupMenu* _pMenu )
OUString aParentURL(aObject.GetMainURL(INetURLObject::DecodeMechanism::NONE));
OUString aTitle;
- if (!GetDialogParent()->ContentGetTitle(aParentURL, aTitle) || aTitle.isEmpty())
+
+ if (nCount == 1) // adjust the title of the top level entry (the workspace)
+ aTitle = SvlResId(STR_SVT_MIMETYPE_CNT_FSYSBOX);
+ else if (!m_pDlg->ContentGetTitle(aParentURL, aTitle) || aTitle.isEmpty())
aTitle = aObject.getName();
- Image aImage = ( nCount > 1 ) // if nCount == 1 means workplace, which detects the wrong image
- ? SvFileInformationManager::GetImage( aObject ) : aVolumeImage;
+ OUString aImage = ( nCount > 1 ) // if nCount == 1 means workplace, which detects the wrong image
+ ? SvFileInformationManager::GetImageId( aObject ) : aVolumeImage;
- _pMenu->InsertItem( nItemId++, aTitle, aImage );
- _aURLs.push_back(aParentURL);
+ m_xMenu->append(OUString::number(nItemId), aTitle, aImage);
+ aURLs.push_back(aParentURL);
- if ( nCount == 1 )
- {
- // adjust the title of the top level entry (the workspace)
- _pMenu->SetItemText(--nItemId, SvlResId(STR_SVT_MIMETYPE_CNT_FSYSBOX));
- }
+ ++nItemId;
--nCount;
}
}
-void SvtUpButton_Impl::Select()
+IMPL_LINK(SvtUpButton_Impl, SelectHdl, const OString&, rId, void)
{
- sal_uInt16 nId = GetCurItemId();
-
- if ( nId )
+ sal_uInt32 nId = rId.toUInt32();
+ if (nId)
{
--nId;
- assert( nId <= _aURLs.size() && "SvtUpButton_Impl: wrong index" );
+ assert( nId <= aURLs.size() && "SvtUpButton_Impl: wrong index" );
- GetDialogParent()->OpenURL_Impl(_aURLs[nId]);
+ m_pDlg->OpenURL_Impl(aURLs[nId]);
}
}
-void SvtUpButton_Impl::Click()
+IMPL_LINK_NOARG(SvtUpButton_Impl, ClickHdl, const OString&, void)
{
- GetDialogParent()->PrevLevel_Impl();
-}
-
-Size SvtUpButton_Impl::GetOptimalSize() const
-{
- return LogicToPixel(Size(12, 12), MapMode(MapUnit::MapAppFont));
+ m_pDlg->PrevLevel_Impl();
}
// SvtExpFileDlg_Impl
-SvtExpFileDlg_Impl::SvtExpFileDlg_Impl() :
-
- _pCurFilter ( nullptr ),
- _pFtFileName ( nullptr ),
- _pEdFileName ( nullptr ),
- _pFtFileVersion ( nullptr ),
- _pLbFileVersion ( nullptr ),
- _pFtTemplates ( nullptr ),
- _pLbTemplates ( nullptr ),
- _pFtImageTemplates ( nullptr ),
- _pLbImageTemplates ( nullptr ),
- _pFtImageAnchor ( nullptr ),
- _pLbImageAnchor ( nullptr ),
- _pFtFileType ( nullptr ),
- _pLbFilter ( nullptr ),
- _pBtnFileOpen ( nullptr ),
- _pBtnCancel ( nullptr ),
- _pBtnHelp ( nullptr ),
- _pBtnUp ( nullptr ),
- _pBtnNewFolder ( nullptr ),
- _pCbPassword ( nullptr ),
- _pCbGPGEncrypt ( nullptr ),
- _pEdCurrentPath ( nullptr ),
- _pCbAutoExtension ( nullptr ),
- _pCbOptions ( nullptr ),
- _pPlaces ( nullptr ),
- _pBtnConnectToServer( nullptr ),
- _eMode ( FILEDLG_MODE_OPEN ),
- _eDlgType ( FILEDLG_TYPE_FILEDLG ),
- _nStyle ( PickerFlags::NONE ),
- _bDoubleClick ( false ),
- m_bNeedDelayedFilterExecute ( false ),
- _bMultiSelection ( false )
+SvtExpFileDlg_Impl::SvtExpFileDlg_Impl()
+ : m_pCurFilter( nullptr )
+ , m_eMode( FILEDLG_MODE_OPEN )
+ , m_eDlgType( FILEDLG_TYPE_FILEDLG )
+ , m_nStyle( PickerFlags::NONE )
+ , m_bDoubleClick( false )
+ , m_bNeedDelayedFilterExecute ( false )
+ , m_bMultiSelection( false )
{
}
-
SvtExpFileDlg_Impl::~SvtExpFileDlg_Impl()
{
- _pBtnUp.disposeAndClear();
- _pUserFilter.reset();
- _pPlaces.disposeAndClear();
}
-
void SvtExpFileDlg_Impl::SetStandardDir( const OUString& _rDir )
{
- _aStdDir = _rDir;
- if ( _aStdDir.isEmpty() )
- _aStdDir = "file:///";
+ m_aStdDir = _rDir;
+ if (m_aStdDir.isEmpty())
+ m_aStdDir = "file:///";
}
namespace {
@@ -230,29 +152,25 @@ void SvtExpFileDlg_Impl::SetCurFilter( SvtFileDialogFilter_Impl const * pFilter,
|| ( rDisplayName == lcl_DecoratedFilter( pFilter->GetName() ) ),
"SvtExpFileDlg_Impl::SetCurFilter: arguments are inconsistent!" );
- _pCurFilter = pFilter;
+ m_pCurFilter = pFilter;
m_sCurrentFilterDisplayName = rDisplayName;
}
-
-void SvtExpFileDlg_Impl::InsertFilterListEntry( const SvtFileDialogFilter_Impl* _pFilterDesc )
+void SvtExpFileDlg_Impl::InsertFilterListEntry(const SvtFileDialogFilter_Impl* pFilterDesc)
{
- OUString sName = _pFilterDesc->GetName();
- if ( _pFilterDesc->isGroupSeparator() )
- sName = "------------------------------------------";
+ // insert and set user data
+ OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pFilterDesc)));
+ OUString sName = pFilterDesc->GetName();
+ if (pFilterDesc->isGroupSeparator())
+ m_xLbFilter->append_separator(sId);
else
- sName = _pFilterDesc->GetName();
-
- // insert an set user data
- const sal_Int32 nPos = _pLbFilter->InsertEntry( sName );
- _pLbFilter->SetEntryData( nPos, const_cast< void* >( static_cast< const void* >( _pFilterDesc ) ) );
+ m_xLbFilter->append(sId, sName);
}
-
void SvtExpFileDlg_Impl::InitFilterList( )
{
// clear the current list
- _pLbFilter->Clear();
+ m_xLbFilter->clear();
// reinit it
sal_uInt16 nPos = m_aFilter.size();
diff --git a/fpicker/source/office/iodlgimp.hxx b/fpicker/source/office/iodlgimp.hxx
index 137fd1d56ad1..68af8a3cd36a 100644
--- a/fpicker/source/office/iodlgimp.hxx
+++ b/fpicker/source/office/iodlgimp.hxx
@@ -76,179 +76,151 @@ enum SvtFileDlgType
FILEDLG_TYPE_PATHDLG
};
-class SvtFileDialogURLSelector : public MenuButton
+class SvtUpButton_Impl
{
-public:
- virtual ~SvtFileDialogURLSelector() override;
- virtual void dispose() override;
private:
- VclPtr<SvtFileDialog> m_pDlg;
- VclPtr<PopupMenu> m_pMenu;
+ std::unique_ptr<weld::Toolbar> m_xToolbar;
+ std::unique_ptr<weld::Menu> m_xMenu;
+ SvtFileDialog* m_pDlg;
-protected:
- SvtFileDialog* GetDialogParent() { return m_pDlg; }
+ std::vector<OUString> aURLs;
- virtual void FillURLMenu( PopupMenu* _pMenu ) = 0;
+public:
+ SvtUpButton_Impl(std::unique_ptr<weld::Toolbar> xToolbar,
+ std::unique_ptr<weld::Menu> xMenu,
+ SvtFileDialog* pDlg);
- SvtFileDialogURLSelector(vcl::Window* _pParent, SvtFileDialog* _pDlg, WinBits nBits, const OUString& rButtonId);
+ void set_help_id(const OString& rHelpId) { m_xToolbar->set_help_id(rHelpId); }
+ void show() { m_xToolbar->show(); }
- virtual void Activate() override;
-};
+ void FillURLMenu();
+
+ weld::Widget* getWidget() { return m_xToolbar.get(); }
-class SvtUpButton_Impl : public SvtFileDialogURLSelector
-{
private:
- std::vector<OUString> _aURLs;
-public:
- SvtUpButton_Impl( vcl::Window* pParent, SvtFileDialog* pDlg, WinBits nBits );
- virtual ~SvtUpButton_Impl() override;
-
-protected:
- virtual void FillURLMenu( PopupMenu* _pMenu ) override;
- virtual void Select() override;
- virtual void Click() override;
- virtual Size GetOptimalSize() const override;
+ DECL_LINK(SelectHdl, const OString&, void);
+ DECL_LINK(ClickHdl, const OString&, void);
};
-class SvtURLBox;
+class URLBox;
class SvtExpFileDlg_Impl
{
private:
- const SvtFileDialogFilter_Impl* _pCurFilter;
- OUString m_sCurrentFilterDisplayName; // may differ from _pCurFilter->GetName in case it is a cached entry
+ const SvtFileDialogFilter_Impl* m_pCurFilter;
+ OUString m_sCurrentFilterDisplayName; // may differ from m_pCurFilter->GetName in case it is a cached entry
- css::uno::Sequence< OUString > _aBlackList;
+ css::uno::Sequence< OUString > m_aBlackList;
public:
SvtFileDialogFilterList_Impl m_aFilter;
- std::unique_ptr<SvtFileDialogFilter_Impl> _pUserFilter;
+ std::unique_ptr<SvtFileDialogFilter_Impl> m_xUserFilter;
- VclPtr<FixedText> _pFtFileName;
- VclPtr<SvtURLBox> _pEdFileName;
+ std::unique_ptr<weld::Label> m_xFtFileName;
+ std::unique_ptr<URLBox> m_xEdFileName;
- VclPtr<FixedText> _pFtFileVersion;
- VclPtr<ListBox> _pLbFileVersion;
+ std::unique_ptr<weld::Label> m_xFtFileVersion;
+ std::unique_ptr<weld::ComboBox> m_xLbFileVersion;
- VclPtr<FixedText> _pFtTemplates;
- VclPtr<ListBox> _pLbTemplates;
+ std::unique_ptr<weld::Label> m_xFtTemplates;
+ std::unique_ptr<weld::ComboBox> m_xLbTemplates;
- VclPtr<FixedText> _pFtImageTemplates;
- VclPtr<ListBox> _pLbImageTemplates;
+ std::unique_ptr<weld::Label> m_xFtImageTemplates;
+ std::unique_ptr<weld::ComboBox> m_xLbImageTemplates;
- VclPtr<FixedText> _pFtImageAnchor;
- VclPtr<ListBox> _pLbImageAnchor;
+ std::unique_ptr<weld::Label> m_xFtImageAnchor;
+ std::unique_ptr<weld::ComboBox> m_xLbImageAnchor;
- VclPtr<FixedText> _pFtFileType;
- VclPtr<ListBox> _pLbFilter;
- VclPtr<PushButton> _pBtnFileOpen;
- VclPtr<PushButton> _pBtnCancel;
- VclPtr<HelpButton> _pBtnHelp;
- VclPtr<SvtUpButton_Impl> _pBtnUp;
- VclPtr<PushButton> _pBtnNewFolder;
- VclPtr<CheckBox> _pCbPassword;
- VclPtr<CheckBox> _pCbGPGEncrypt;
- VclPtr<SvtURLBox> _pEdCurrentPath;
- VclPtr<CheckBox> _pCbAutoExtension;
- VclPtr<CheckBox> _pCbOptions;
+ std::unique_ptr<weld::Label> m_xFtFileType;
+ std::unique_ptr<weld::ComboBox> m_xLbFilter;
+ std::unique_ptr<weld::Button> m_xBtnFileOpen;
+ std::unique_ptr<weld::Button> m_xBtnCancel;
+ std::unique_ptr<weld::Button> m_xBtnHelp;
+ std::unique_ptr<SvtUpButton_Impl> m_xBtnUp;
+ std::unique_ptr<weld::Button> m_xBtnNewFolder;
+ std::unique_ptr<weld::CheckButton> m_xCbPassword;
+ std::unique_ptr<weld::CheckButton> m_xCbGPGEncrypt;
+ std::unique_ptr<URLBox> m_xEdCurrentPath;
+ std::unique_ptr<weld::CheckButton> m_xCbAutoExtension;
+ std::unique_ptr<weld::CheckButton> m_xCbOptions;
- VclPtr<PlacesListBox> _pPlaces;
- VclPtr<PushButton> _pBtnConnectToServer;
+ std::unique_ptr<PlacesListBox> m_xPlaces;
+ std::unique_ptr<weld::Button> m_xBtnConnectToServer;
- SvtFileDlgMode _eMode;
- SvtFileDlgType _eDlgType;
- PickerFlags _nStyle;
+ SvtFileDlgMode m_eMode;
+ SvtFileDlgType m_eDlgType;
+ PickerFlags m_nStyle;
- OUString _aStdDir;
+ OUString m_aStdDir;
// delay filter when traveling the filterbox
- Timer _aFilterTimer;
+ Idle m_aFilterIdle;
// shows OpenHdl_Imp() if the open was triggered by a double click
- bool _bDoubleClick;
- bool m_bNeedDelayedFilterExecute;
+ bool m_bDoubleClick;
+ bool m_bNeedDelayedFilterExecute;
// MultiSelection?
- bool _bMultiSelection;
+ bool m_bMultiSelection;
// remember sizes
- OUString _aIniKey;
-
- explicit SvtExpFileDlg_Impl();
- ~SvtExpFileDlg_Impl();
+ OUString m_aIniKey;
+ explicit SvtExpFileDlg_Impl();
+ ~SvtExpFileDlg_Impl();
- void SetBlackList( const css::uno::Sequence< OUString >& rBlackList ) { _aBlackList = rBlackList; }
- const css::uno::Sequence< OUString >& GetBlackList() const { return _aBlackList; }
- void SetStandardDir( const OUString& _rDir );
- const OUString& GetStandardDir() const { return _aStdDir; }
- void DisableFilterBoxAutoWidth() { _pLbFilter->EnableDDAutoWidth( false ); }
+ void SetBlackList( const css::uno::Sequence< OUString >& rBlackList ) { m_aBlackList = rBlackList; }
+ const css::uno::Sequence< OUString >& GetBlackList() const { return m_aBlackList; }
+ void SetStandardDir( const OUString& rDir );
+ const OUString& GetStandardDir() const { return m_aStdDir; }
-
- // access to the filter listbox only as Control* - we want to maintain the entries/userdata ourself
- Control* GetFilterListControl() { return _pLbFilter; }
- const Control* GetFilterListControl() const { return _pLbFilter; }
- inline void SetFilterListSelectHdl( const Link<ListBox&,void>& _rHandler );
+ // access to the filter listbox only as weld::Widget* - we want to maintain the entries/userdata ourself
+ weld::Widget* GetFilterListControl() { return m_xLbFilter.get(); }
+ const weld::Widget* GetFilterListControl() const { return m_xLbFilter.get(); }
+ void SetFilterListSelectHdl(const Link<weld::ComboBox&, void>& rHandler)
+ {
+ m_xLbFilter->connect_changed(rHandler);
+ }
// inits the listbox for the filters from the filter list (_pFilter)
void InitFilterList( );
- inline bool HasFilterListEntry( const OUString& _rFilterName );
- inline void SelectFilterListEntry( const OUString& _rFilterName );
- inline void SetNoFilterListSelection( );
- void InsertFilterListEntry( const SvtFileDialogFilter_Impl* _pFilterDesc );
- // _pFilterDesc must already have been added to _pFilter
- inline SvtFileDialogFilter_Impl* GetSelectedFilterEntry( OUString& /* [out] */ _rDisplayName ) const;
- inline bool IsFilterListTravelSelect() const;
-
-
- // access to the current filter via methods only - need to care for consistency between _pCurFilter and m_sCurrentFilterDisplayName
- inline const SvtFileDialogFilter_Impl* GetCurFilter( ) const;
- inline const OUString& GetCurFilterDisplayName() const;
- void SetCurFilter( SvtFileDialogFilter_Impl const * _pFilter, const OUString& _rDisplayName );
+ bool HasFilterListEntry( const OUString& rFilterName )
+ {
+ return m_xLbFilter->find_text(rFilterName) != -1;
+ }
+
+ void SelectFilterListEntry( const OUString& rFilterName )
+ {
+ m_xLbFilter->set_active_text(rFilterName);
+ }
+
+ void SetNoFilterListSelection( )
+ {
+ m_xLbFilter->set_active(-1);
+ }
+
+ void InsertFilterListEntry( const SvtFileDialogFilter_Impl* _pFilterDesc );
+ // _pFilterDesc must already have been added to _pFilter
+ SvtFileDialogFilter_Impl* GetSelectedFilterEntry( OUString& rDisplayName ) const
+ {
+ rDisplayName = m_xLbFilter->get_active_text();
+ return reinterpret_cast<SvtFileDialogFilter_Impl*>(m_xLbFilter->get_active_id().toInt64());
+ }
+
+ // access to the current filter via methods only - need to care for consistency between m_pCurFilter and m_sCurrentFilterDisplayName
+ const SvtFileDialogFilter_Impl* GetCurFilter( ) const
+ {
+ return m_pCurFilter;
+ }
+
+ const OUString& GetCurFilterDisplayName() const
+ {
+ return m_sCurrentFilterDisplayName;
+ }
+
+ void SetCurFilter( SvtFileDialogFilter_Impl const * _pFilter, const OUString& rDisplayName );
};
-inline void SvtExpFileDlg_Impl::SetFilterListSelectHdl( const Link<ListBox&,void>& _rHandler )
-{
- _pLbFilter->SetSelectHdl( _rHandler );
-}
-
-inline bool SvtExpFileDlg_Impl::HasFilterListEntry( const OUString& _rFilterName )
-{
- return ( LISTBOX_ENTRY_NOTFOUND != _pLbFilter->GetEntryPos( _rFilterName ) );
-}
-
-inline void SvtExpFileDlg_Impl::SelectFilterListEntry( const OUString& _rFilterName )
-{
- _pLbFilter->SelectEntry( _rFilterName );
-}
-
-inline void SvtExpFileDlg_Impl::SetNoFilterListSelection( )
-{
- _pLbFilter->SetNoSelection( );
-}
-
-inline SvtFileDialogFilter_Impl* SvtExpFileDlg_Impl::GetSelectedFilterEntry( OUString& _rDisplayName ) const
-{
- _rDisplayName = _pLbFilter->GetSelectedEntry();
- return static_cast< SvtFileDialogFilter_Impl* >( _pLbFilter->GetSelectedEntryData () );
-}
-
-inline bool SvtExpFileDlg_Impl::IsFilterListTravelSelect() const
-{
- return _pLbFilter->IsTravelSelect();
-}
-
-inline const SvtFileDialogFilter_Impl* SvtExpFileDlg_Impl::GetCurFilter( ) const
-{
- return _pCurFilter;
-}
-
-inline const OUString& SvtExpFileDlg_Impl::GetCurFilterDisplayName() const
-{
- return m_sCurrentFilterDisplayName;
-}
-
#endif // INCLUDED_FPICKER_SOURCE_OFFICE_IODLGIMP_HXX
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/office/pickercallbacks.hxx b/fpicker/source/office/pickercallbacks.hxx
index 115d6fb83017..9c965f7d37f7 100644
--- a/fpicker/source/office/pickercallbacks.hxx
+++ b/fpicker/source/office/pickercallbacks.hxx
@@ -23,35 +23,29 @@
#include <sal/types.h>
#include <rtl/ustring.hxx>
-class Control;
-
+namespace weld { class Widget; }
namespace svt
{
-
-
class IFilePickerController
{
public:
- virtual Control* getControl( sal_Int16 _nControlId, bool _bLabelControl = false ) const = 0;
- virtual void enableControl( sal_Int16 _nControlId, bool _bEnable ) = 0;
+ virtual weld::Widget* getControl( sal_Int16 nControlId, bool bLabelControl = false ) const = 0;
+ virtual void enableControl( sal_Int16 nControlId, bool bEnable ) = 0;
virtual OUString getCurFilter( ) const = 0;
protected:
~IFilePickerController() {}
};
-
class IFilePickerListener
{
public:
- virtual void notify( sal_Int16 _nEventId, sal_Int16 _nControlId ) = 0;
+ virtual void notify( sal_Int16 nEventId, sal_Int16 nControlId ) = 0;
protected:
~IFilePickerListener() {}
};
-
-
} // namespace svt
diff --git a/fpicker/uiconfig/ui/breadcrumb.ui b/fpicker/uiconfig/ui/breadcrumb.ui
new file mode 100644
index 000000000000..c41dc620fdf2
--- /dev/null
+++ b/fpicker/uiconfig/ui/breadcrumb.ui
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface domain="fps">
+ <requires lib="gtk+" version="3.18"/>
+ <object class="GtkGrid" id="container">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column_spacing">6</property>
+ <child>
+ <object class="GtkLinkButton" id="link">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="relief">none</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ </object>
+</interface>
diff --git a/fpicker/uiconfig/ui/explorerfiledialog.ui b/fpicker/uiconfig/ui/explorerfiledialog.ui
index 16da6c718d6c..54fa3f52e5b0 100644
--- a/fpicker/uiconfig/ui/explorerfiledialog.ui
+++ b/fpicker/uiconfig/ui/explorerfiledialog.ui
@@ -1,8 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
+<!-- Generated with glade 3.22.1 -->
<interface domain="fps">
<requires lib="gtk+" version="3.18"/>
- <requires lib="LibreOffice" version="1.0"/>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-add</property>
+ </object>
+ <object class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-remove</property>
+ </object>
+ <object class="GtkImage" id="image4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">fpicker/res/fp014.png</property>
+ </object>
+ <object class="GtkTreeStore" id="liststore1">
+ <columns>
+ <!-- column-name expander -->
+ <column type="GdkPixbuf"/>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
+ <object class="GtkTreeStore" id="liststore2">
+ <columns>
+ <!-- column-name expander -->
+ <column type="GdkPixbuf"/>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
+ <object class="GtkTreeStore" id="liststore3">
+ <columns>
+ <!-- column-name expander -->
+ <column type="GdkPixbuf"/>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name text2 -->
+ <column type="gchararray"/>
+ <!-- column-name text3 -->
+ <column type="gchararray"/>
+ <!-- column-name text1 -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
<object class="GtkDialog" id="ExplorerFileDialog">
<property name="can_focus">False</property>
<property name="hexpand">True</property>
@@ -10,6 +60,9 @@
<property name="border_width">6</property>
<property name="modal">True</property>
<property name="type_hint">dialog</property>
+ <child>
+ <placeholder/>
+ </child>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="can_focus">False</property>
@@ -55,11 +108,17 @@
<property name="hexpand">True</property>
<property name="spacing">6</property>
<child>
- <object class="svtlo-SvtURLBox" id="current_path">
+ <object class="GtkComboBoxText" id="current_path">
<property name="visible">True</property>
- <property name="can_focus">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">center</property>
<property name="hexpand">True</property>
- <property name="max_width_chars">40</property>
+ <property name="has_entry">True</property>
+ <child internal-child="entry">
+ <object class="GtkEntry">
+ <property name="can_focus">True</property>
+ </object>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -75,6 +134,7 @@
<property name="receives_default">True</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes" context="explorerfiledialog|connect_to_server|tooltip_text">Connect To Server</property>
+ <property name="valign">center</property>
<child internal-child="accessible">
<object class="AtkObject" id="connect_to_server-atkobject">
<property name="AtkObject::accessible-name" translatable="yes" context="explorerfiledialog|connect_to_server-atkobject">Connect To Server</property>
@@ -88,12 +148,38 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="up">
+ <object class="GtkScrolledWindow">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
+ <property name="can_focus">True</property>
+ <property name="valign">center</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">never</property>
+ <property name="shadow_type">in</property>
+ <property name="propagate_natural_width">True</property>
+ <property name="propagate_natural_height">True</property>
<child>
- <placeholder/>
+ <object class="GtkViewport">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkToolbar" id="up_bar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuToolButton" id="up_btn">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="icon_name">res/fp010.png</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
</child>
</object>
<packing>
@@ -110,6 +196,9 @@
<property name="receives_default">True</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes" context="explorerfiledialog|new_folder|tooltip_text">Create New Folder</property>
+ <property name="valign">center</property>
+ <property name="image">image4</property>
+ <property name="always_show_image">True</property>
<child internal-child="accessible">
<object class="AtkObject" id="new_folder-atkobject">
<property name="AtkObject::accessible-name" translatable="yes" context="explorerfiledialog|new_folder-atkobject">Create New Folder</property>
@@ -137,7 +226,260 @@
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
- <placeholder/>
+ <object class="GtkPaned">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="places">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="model">liststore1</property>
+ <property name="headers_clickable">False</property>
+ <property name="search_column">1</property>
+ <property name="show_expanders">False</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection"/>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn5">
+ <property name="resizable">True</property>
+ <property name="spacing">6</property>
+ <property name="title" translatable="yes" context="explorerfiledialog|places">Places</property>
+ <child>
+ <object class="GtkCellRendererPixbuf" id="cellrenderertext6"/>
+ <attributes>
+ <attribute name="pixbuf">0</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderer11"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkButton" id="add">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image1</property>
+ <property name="always_show_image">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="del">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image2</property>
+ <property name="always_show_image">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">False</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="fileview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="model">liststore3</property>
+ <property name="search_column">1</property>
+ <property name="show_expanders">False</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection"/>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn3">
+ <property name="resizable">True</property>
+ <property name="spacing">6</property>
+ <property name="title" translatable="yes" context="explorerfiledialog|name">Name</property>
+ <property name="clickable">True</property>
+ <child>
+ <object class="GtkCellRendererPixbuf" id="cellrenderertext1"/>
+ <attributes>
+ <attribute name="pixbuf">0</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderer1"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn4">
+ <property name="resizable">True</property>
+ <property name="spacing">6</property>
+ <property name="title" translatable="yes" context="explorerfiledialog|type">Type</property>
+ <property name="clickable">True</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderer5"/>
+ <attributes>
+ <attribute name="text">2</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn1">
+ <property name="resizable">True</property>
+ <property name="spacing">6</property>
+ <property name="title" translatable="yes" context="explorerfiledialog|size">Size</property>
+ <property name="clickable">True</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderer2"/>
+ <attributes>
+ <attribute name="text">3</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn2">
+ <property name="resizable">True</property>
+ <property name="spacing">6</property>
+ <property name="title" translatable="yes" context="explorerfiledialog|date">Date modified</property>
+ <property name="clickable">True</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderer3"/>
+ <attributes>
+ <attribute name="text">4</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="can_focus">True</property>
+ <property name="no_show_all">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkIconView" id="iconview">
+ <property name="can_focus">True</property>
+ <property name="no_show_all">True</property>
+ <property name="margin">6</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="model">liststore2</property>
+ <child>
+ <object class="GtkCellRendererPixbuf" id="icon"/>
+ <attributes>
+ <attribute name="pixbuf">0</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererText" id="text"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
</child>
</object>
<packing>
@@ -238,7 +580,6 @@
<property name="hexpand">True</property>
<property name="row_spacing">6</property>
<property name="column_spacing">6</property>
- <property name="row_homogeneous">True</property>
<child>
<object class="GtkLabel" id="file_name_label">
<property name="visible">True</property>
@@ -258,6 +599,7 @@
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="use_underline">True</property>
+ <property name="mnemonic_widget">shared</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -279,36 +621,42 @@
</packing>
</child>
<child>
- <object class="svtlo-SvtURLBox" id="file_name">
- <property name="visible">True</property>
+ <object class="GtkComboBoxText" id="shared">
<property name="can_focus">False</property>
<property name="hexpand">True</property>
- <property name="max_width_chars">40</property>
</object>
<packing>
<property name="left_attach">1</property>
- <property name="top_attach">0</property>
+ <property name="top_attach">2</property>
</packing>
</child>
<child>
- <object class="GtkComboBox" id="shared">
+ <object class="GtkComboBoxText" id="file_type">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
</object>
<packing>
<property name="left_attach">1</property>
- <property name="top_attach">2</property>
+ <property name="top_attach">1</property>
</packing>
</child>
<child>
- <object class="GtkComboBox" id="file_type">
+ <object class="GtkComboBoxText" id="file_name">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
+ <property name="has_entry">True</property>
+ <child internal-child="entry">
+ <object class="GtkEntry">
+ <property name="can_focus">True</property>
+ <property name="activates_default">True</property>
+ </object>
+ </child>
</object>
<packing>
<property name="left_attach">1</property>
- <property name="top_attach">1</property>
+ <property name="top_attach">0</property>
</packing>
</child>
</object>
@@ -324,46 +672,6 @@
<property name="hexpand">True</property>
<property name="row_spacing">6</property>
<child>
- <object class="GtkBox" id="box1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkCheckButton" id="link">
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="cb_preview">
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
- <child>
<object class="GtkCheckButton" id="readonly">
<property name="label" translatable="yes" context="explorerfiledialog|readonly">_Read-only</property>
<property name="can_focus">True</property>
@@ -465,6 +773,46 @@
<property name="top_attach">2</property>
</packing>
</child>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkCheckButton" id="link">
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="cb_preview">
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="left_attach">0</property>
@@ -499,10 +847,30 @@
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
- <object class="GtkDrawingArea" id="preview">
- <property name="width_request">200</property>
- <property name="can_focus">False</property>
- <property name="vexpand">True</property>
+ <object class="GtkScrolledWindow" id="previewframe">
+ <property name="can_focus">True</property>
+ <property name="no_show_all">True</property>
+ <property name="valign">start</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">never</property>
+ <property name="shadow_type">in</property>
+ <property name="propagate_natural_width">True</property>
+ <property name="propagate_natural_height">True</property>
+ <child>
+ <object class="GtkViewport">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImage" id="preview">
+ <property name="width_request">200</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -527,4 +895,8 @@
</object>
</child>
</object>
+ <object class="GtkMenu" id="up_menu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
</interface>
diff --git a/fpicker/uiconfig/ui/remotefilesdialog.ui b/fpicker/uiconfig/ui/remotefilesdialog.ui
index 9136176b2eda..93c17f05ba27 100644
--- a/fpicker/uiconfig/ui/remotefilesdialog.ui
+++ b/fpicker/uiconfig/ui/remotefilesdialog.ui
@@ -12,33 +12,44 @@
<property name="can_focus">False</property>
<property name="icon_name">svx/res/gallist.png</property>
</object>
- <object class="GtkMenu" id="service_edit_menu">
+ <object class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <child>
- <object class="GtkMenuItem" id="edit_service">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes" context="remotefilesdialog|edit_service">_Edit service</property>
- <property name="use_underline">True</property>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="delete_service">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes" context="remotefilesdialog|delete_service">_Delete service</property>
- <property name="use_underline">True</property>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="change_password">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes" context="remotefilesdialog|change_password">_Change password</property>
- <property name="use_underline">True</property>
- </object>
- </child>
+ <property name="icon_name">fpicker/res/fp014.png</property>
+ </object>
+ <object class="GtkTreeStore" id="liststore1">
+ <columns>
+ <!-- column-name expander -->
+ <column type="GdkPixbuf"/>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
+ <object class="GtkTreeStore" id="liststore2">
+ <columns>
+ <!-- column-name expander -->
+ <column type="GdkPixbuf"/>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
+ <object class="GtkTreeStore" id="liststore3">
+ <columns>
+ <!-- column-name expander -->
+ <column type="GdkPixbuf"/>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name text2 -->
+ <column type="gchararray"/>
+ <!-- column-name text3 -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ </columns>
</object>
<object class="GtkDialog" id="RemoteFilesDialog">
<property name="can_focus">False</property>
@@ -151,6 +162,7 @@
<object class="GtkComboBoxText" id="services_lb">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="valign">center</property>
<accessibility>
<relation type="labelled-by" target="label1"/>
</accessibility>
@@ -162,14 +174,38 @@
</packing>
</child>
<child>
- <object class="GtkMenuButton" id="add_service_btn">
- <property name="label" translatable="yes" context="remotefilesdialog|add_service_btn">Add service</property>
+ <object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="popup">service_edit_menu</property>
+ <property name="valign">center</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">never</property>
+ <property name="shadow_type">in</property>
+ <property name="propagate_natural_width">True</property>
+ <property name="propagate_natural_height">True</property>
<child>
- <placeholder/>
+ <object class="GtkViewport">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkToolbar" id="add_service_bar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuToolButton" id="add_service_btn">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes" context="remotefilesdialog|add_service_btn">Add service</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
</child>
</object>
<packing>
@@ -207,13 +243,14 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="list_view">
+ <object class="GtkToggleButton" id="list_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes" context="remotefilesdialog|list_view|tooltip_text">List view</property>
<property name="image">image2</property>
+ <property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
@@ -222,7 +259,7 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="icon_view">
+ <object class="GtkToggleButton" id="icon_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@@ -246,6 +283,8 @@
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes" context="remotefilesdialog|new_folder|tooltip_text">Create New Folder</property>
<property name="margin_left">6</property>
+ <property name="image">image3</property>
+ <property name="always_show_image">True</property>
</object>
<packing>
<property name="expand">False</property>
@@ -262,15 +301,182 @@
</child>
<child>
<object class="GtkBox" id="container">
- <property name="width_request">555</property>
- <property name="height_request">200</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
- <placeholder/>
+ <object class="GtkPaned">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="foldertree">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="model">liststore1</property>
+ <property name="headers_visible">False</property>
+ <property name="headers_clickable">False</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="Macro Library List-selection1"/>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn5">
+ <property name="resizable">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkCellRendererPixbuf" id="cellrenderertext6"/>
+ <attributes>
+ <attribute name="pixbuf">0</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderer11"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">False</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="fileview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="model">liststore3</property>
+ <property name="show_expanders">False</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="Macro Library List-selection2"/>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn3">
+ <property name="resizable">True</property>
+ <property name="spacing">6</property>
+ <property name="title" translatable="yes" context="remotefilesdialog|name">Name</property>
+ <property name="clickable">True</property>
+ <child>
+ <object class="GtkCellRendererPixbuf" id="cellrenderertext1"/>
+ <attributes>
+ <attribute name="pixbuf">0</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderer1"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn4">
+ <property name="resizable">True</property>
+ <property name="spacing">6</property>
+ <property name="title" translatable="yes" context="remotefilesdialog|size">Size</property>
+ <property name="clickable">True</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderer2"/>
+ <attributes>
+ <attribute name="text">2</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn1">
+ <property name="resizable">True</property>
+ <property name="spacing">6</property>
+ <property name="title" translatable="yes" context="remotefilesdialog|date">Date modified</property>
+ <property name="clickable">True</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderer3"/>
+ <attributes>
+ <attribute name="text">3</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="can_focus">True</property>
+ <property name="no_show_all">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkIconView" id="iconview">
+ <property name="can_focus">True</property>
+ <property name="no_show_all">True</property>
+ <property name="margin">6</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="model">liststore2</property>
+ <property name="pixbuf_column">0</property>
+ <property name="text_column">1</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
</child>
</object>
<packing>
@@ -304,6 +510,8 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="remotefilesdialog|nameLabel">File name</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">filename</property>
<property name="xalign">0</property>
</object>
<packing>
@@ -324,13 +532,10 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="filename_container">
+ <object class="GtkEntry" id="filename">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <child>
- <placeholder/>
- </child>
+ <property name="can_focus">True</property>
+ <property name="activates_default">True</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -349,8 +554,36 @@
<action-widgets>
<action-widget response="-11">help</action-widget>
<action-widget response="-6">cancel</action-widget>
- <action-widget response="101">open</action-widget>
- <action-widget response="102">save</action-widget>
+ <action-widget response="-5">open</action-widget>
+ <action-widget response="-5">save</action-widget>
</action-widgets>
</object>
+ <object class="GtkMenu" id="service_edit_menu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuItem" id="edit_service">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes" context="remotefilesdialog|edit_service">_Edit service</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="delete_service">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes" context="remotefilesdialog|delete_service">_Delete service</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="change_password">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes" context="remotefilesdialog|change_password">_Change password</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ </object>
</interface>