summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--desktop/source/deployment/gui/dp_gui_dialog2.hxx2
-rw-r--r--extras/source/glade/libreoffice-catalog.xml.in3
-rw-r--r--filter/inc/strings.hrc2
-rw-r--r--filter/source/xsltdialog/xmlfilterdialogcomponent.cxx36
-rw-r--r--filter/source/xsltdialog/xmlfilterjar.cxx1
-rw-r--r--filter/source/xsltdialog/xmlfiltersettingsdialog.cxx402
-rw-r--r--filter/source/xsltdialog/xmlfiltersettingsdialog.hxx99
-rw-r--r--filter/source/xsltdialog/xmlfiltertabdialog.cxx1
-rw-r--r--filter/source/xsltdialog/xmlfiltertabpagebasic.cxx2
-rw-r--r--filter/source/xsltdialog/xmlfiltertabpagexslt.cxx1
-rw-r--r--filter/source/xsltdialog/xmlfiltertestdialog.cxx2
-rw-r--r--filter/uiconfig/ui/xmlfiltersettings.ui69
-rw-r--r--include/vcl/waitobj.hxx3
-rw-r--r--include/vcl/weld.hxx1
-rw-r--r--sfx2/source/appl/sfxhelp.cxx10
-rwxr-xr-xsolenv/bin/native-code.py1
-rw-r--r--vcl/source/app/salvtables.cxx25
-rw-r--r--vcl/source/window/dialog.cxx4
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx5
19 files changed, 253 insertions, 416 deletions
diff --git a/desktop/source/deployment/gui/dp_gui_dialog2.hxx b/desktop/source/deployment/gui/dp_gui_dialog2.hxx
index 6a1c40083c84..afb375fb16cd 100644
--- a/desktop/source/deployment/gui/dp_gui_dialog2.hxx
+++ b/desktop/source/deployment/gui/dp_gui_dialog2.hxx
@@ -93,7 +93,7 @@ public:
const char* pResID,
bool &bHadWarning );
- void incBusy() { m_aBusy.incBusy(m_xVCLWindow); }
+ void incBusy() { m_aBusy.incBusy(m_xVCLWindow->GetFrameWeld()); }
void decBusy() { m_aBusy.decBusy(); }
bool isBusy() const { return m_aBusy.isBusy(); }
bool installExtensionWarn(const OUString &rExtensionURL);
diff --git a/extras/source/glade/libreoffice-catalog.xml.in b/extras/source/glade/libreoffice-catalog.xml.in
index f89e0d3ddbcd..c80974b9b34d 100644
--- a/extras/source/glade/libreoffice-catalog.xml.in
+++ b/extras/source/glade/libreoffice-catalog.xml.in
@@ -188,9 +188,6 @@
<glade-widget-class title="Extension List With Buttons" name="deploymentgui-ExtBoxWithBtns"
generic-name="Extensions List With Buttons" parent="deploymentgui-ExtensionBox"
icon-name="widget-gtk-drawingarea"/>
- <glade-widget-class title="Path List" name="xsltdlglo-SvxPathControl"
- generic-name="Path List" parent="GtkDrawingArea"
- icon-name="widget-gtk-drawingarea"/>
<glade-widget-class title="Print Preview" name="vcllo-PrintPreviewWindow"
generic-name="Print Preview" parent="GtkDrawingArea"
icon-name="widget-gtk-drawingarea"/>
diff --git a/filter/inc/strings.hrc b/filter/inc/strings.hrc
index e864eef12142..406ff9123d32 100644
--- a/filter/inc/strings.hrc
+++ b/filter/inc/strings.hrc
@@ -22,8 +22,6 @@
#define NC_(Context, String) reinterpret_cast<char const *>(Context "\004" u8##String)
-#define STR_COLUMN_HEADER_NAME NC_("STR_COLUMN_HEADER_NAME", "Name")
-#define STR_COLUMN_HEADER_TYPE NC_("STR_COLUMN_HEADER_TYPE", "Type")
#define STR_UNKNOWN_APPLICATION NC_("STR_UNKNOWN_APPLICATION", "Unknown")
#define STR_IMPORT_ONLY NC_("STR_IMPORT_ONLY", "import filter")
#define STR_IMPORT_EXPORT NC_("STR_IMPORT_EXPORT", "import/export filter")
diff --git a/filter/source/xsltdialog/xmlfilterdialogcomponent.cxx b/filter/source/xsltdialog/xmlfilterdialogcomponent.cxx
index 2f35661d014b..730c132ffb3a 100644
--- a/filter/source/xsltdialog/xmlfilterdialogcomponent.cxx
+++ b/filter/source/xsltdialog/xmlfilterdialogcomponent.cxx
@@ -106,13 +106,12 @@ private:
css::uno::Reference<css::awt::XWindow> mxParent; /// parent window
css::uno::Reference< XComponentContext > mxContext;
- VclPtr<XMLFilterSettingsDialog> mpDialog;
+ std::shared_ptr<XMLFilterSettingsDialog> mxDialog;
};
-XMLFilterDialogComponent::XMLFilterDialogComponent( const css::uno::Reference< XComponentContext >& rxContext ) :
- OComponentHelper( maMutex ),
- mxContext( rxContext ),
- mpDialog( nullptr )
+XMLFilterDialogComponent::XMLFilterDialogComponent(const css::uno::Reference< XComponentContext >& rxContext)
+ : OComponentHelper(maMutex)
+ , mxContext(rxContext)
{
Reference< XDesktop2 > xDesktop = Desktop::create( rxContext );
Reference< XTerminateListener > xListener( this );
@@ -241,7 +240,8 @@ void SAL_CALL XMLFilterDialogComponent::disposing()
{
::SolarMutexGuard aGuard;
- mpDialog.disposeAndClear();
+ if (mxDialog)
+ mxDialog->response(RET_CLOSE);
}
@@ -249,18 +249,17 @@ void SAL_CALL XMLFilterDialogComponent::disposing()
void SAL_CALL XMLFilterDialogComponent::queryTermination( const EventObject& /* Event */ )
{
::SolarMutexGuard aGuard;
- if (!mpDialog)
+ if (!mxDialog)
return;
- mpDialog->ToTop();
+ mxDialog->present();
}
void SAL_CALL XMLFilterDialogComponent::notifyTermination( const EventObject& /* Event */ )
{
{
::SolarMutexGuard aGuard;
- if (!mpDialog)
- return;
- mpDialog->Close();
+ if (mxDialog)
+ mxDialog->response(RET_CLOSE);
}
// we are going down, so dispose us!
@@ -280,27 +279,24 @@ sal_Int16 SAL_CALL XMLFilterDialogComponent::execute()
::SolarMutexGuard aGuard;
bool bLaunch = false;
- if (!mpDialog)
+ if (!mxDialog)
{
Reference< XComponent > xComp( this );
- if (mxParent.is())
- mpDialog = VclPtr<XMLFilterSettingsDialog>::Create(VCLUnoHelper::GetWindow(mxParent), mxContext);
- else
- mpDialog = VclPtr<XMLFilterSettingsDialog>::Create(nullptr, mxContext, Dialog::InitFlag::NoParent);
+ mxDialog.reset(new XMLFilterSettingsDialog(Application::GetFrameWeld(mxParent), mxContext));
bLaunch = true;
}
- mpDialog->UpdateWindow();
+ mxDialog->UpdateWindow();
if (!bLaunch)
{
- mpDialog->ToTop();
+ mxDialog->present();
return 0;
}
- mpDialog->StartExecuteAsync([this](sal_Int32)
+ weld::DialogController::runAsync(mxDialog, [this](sal_Int32)
{
- mpDialog.reset();
+ mxDialog.reset();
});
return 0;
diff --git a/filter/source/xsltdialog/xmlfilterjar.cxx b/filter/source/xsltdialog/xmlfilterjar.cxx
index 5ab09745f583..de8b2078107c 100644
--- a/filter/source/xsltdialog/xmlfilterjar.cxx
+++ b/filter/source/xsltdialog/xmlfilterjar.cxx
@@ -25,6 +25,7 @@
#include <com/sun/star/beans/NamedValue.hpp>
#include <com/sun/star/container/XNamed.hpp>
#include <com/sun/star/container/XChild.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <com/sun/star/util/XChangesBatch.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
diff --git a/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx b/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
index 800cd20802dd..db465480e739 100644
--- a/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
+++ b/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
@@ -20,6 +20,7 @@
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/frame/Desktop.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/util/XFlushable.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
@@ -67,37 +68,37 @@ OUString XsltResId(const char* pId)
return Translate::get(pId, Translate::Create("flt"));
}
-XMLFilterSettingsDialog::XMLFilterSettingsDialog(vcl::Window* pParent,
- const css::uno::Reference<css::uno::XComponentContext>& rxContext,
- Dialog::InitFlag eFlag)
- : ModelessDialog(pParent, "XMLFilterSettingsDialog", "filter/ui/xmlfiltersettings.ui", eFlag)
+XMLFilterSettingsDialog::XMLFilterSettingsDialog(weld::Window* pParent,
+ const css::uno::Reference<css::uno::XComponentContext>& rxContext)
+ : GenericDialogController(pParent, "filter/ui/xmlfiltersettings.ui", "XMLFilterSettingsDialog")
, mxContext( rxContext )
, m_sTemplatePath("$(user)/template/")
, m_sDocTypePrefix("doctype:")
+ , m_xPBNew(m_xBuilder->weld_button("new"))
+ , m_xPBEdit(m_xBuilder->weld_button("edit"))
+ , m_xPBTest(m_xBuilder->weld_button("test"))
+ , m_xPBDelete(m_xBuilder->weld_button("delete"))
+ , m_xPBSave(m_xBuilder->weld_button("save"))
+ , m_xPBOpen(m_xBuilder->weld_button("open"))
+ , m_xPBClose(m_xBuilder->weld_button("close"))
+ , m_xFilterListBox(m_xBuilder->weld_tree_view("filterlist"))
{
- get(m_pCtrlFilterList, "filterlist");
- get(m_pPBNew, "new");
- get(m_pPBEdit, "edit");
- get(m_pPBTest, "test");
- get(m_pPBDelete, "delete");
- get(m_pPBSave, "save");
- get(m_pPBOpen, "open");
- get(m_pPBClose, "close");
-
- m_pFilterListBox = m_pCtrlFilterList->getListBox();
- m_pFilterListBox->SetSelectHdl( LINK( this, XMLFilterSettingsDialog, SelectionChangedHdl_Impl ) );
- m_pFilterListBox->SetDeselectHdl( LINK( this, XMLFilterSettingsDialog, SelectionChangedHdl_Impl ) );
- m_pFilterListBox->SetDoubleClickHdl( LINK( this, XMLFilterSettingsDialog, DoubleClickHdl_Impl ) );
- m_pFilterListBox->SetAccessibleName(XsltResId(STR_XML_FILTER_LISTBOX));
- m_pFilterListBox->SetHelpId(m_pCtrlFilterList->GetHelpId());
-
- m_pPBNew->SetClickHdl(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
- m_pPBEdit->SetClickHdl(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
- m_pPBTest->SetClickHdl(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
- m_pPBDelete->SetClickHdl(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
- m_pPBSave->SetClickHdl(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
- m_pPBOpen->SetClickHdl(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
- m_pPBClose->SetClickHdl(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
+ m_xFilterListBox->set_selection_mode(SelectionMode::Multiple);
+
+ m_xFilterListBox->set_size_request(m_xFilterListBox->get_approximate_digit_width() * 65,
+ m_xFilterListBox->get_height_rows(12));
+
+ m_xFilterListBox->connect_changed( LINK( this, XMLFilterSettingsDialog, SelectionChangedHdl_Impl ) );
+ m_xFilterListBox->connect_row_activated( LINK( this, XMLFilterSettingsDialog, DoubleClickHdl_Impl ) );
+ m_xFilterListBox->set_accessible_name(XsltResId(STR_XML_FILTER_LISTBOX));
+
+ m_xPBNew->connect_clicked(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
+ m_xPBEdit->connect_clicked(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
+ m_xPBTest->connect_clicked(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
+ m_xPBDelete->connect_clicked(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
+ m_xPBSave->connect_clicked(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
+ m_xPBOpen->connect_clicked(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
+ m_xPBClose->connect_clicked(LINK( this, XMLFilterSettingsDialog, ClickHdl_Impl ) );
try
{
@@ -116,92 +117,75 @@ XMLFilterSettingsDialog::XMLFilterSettingsDialog(vcl::Window* pParent,
XMLFilterSettingsDialog::~XMLFilterSettingsDialog()
{
- disposeOnce();
-}
-
-void XMLFilterSettingsDialog::dispose()
-{
- m_pFilterListBox.clear();
- m_pCtrlFilterList.clear();
- m_pPBNew.clear();
- m_pPBEdit.clear();
- m_pPBTest.clear();
- m_pPBDelete.clear();
- m_pPBSave.clear();
- m_pPBOpen.clear();
- m_pPBClose.clear();
- ModelessDialog::dispose();
}
-IMPL_LINK(XMLFilterSettingsDialog, ClickHdl_Impl, Button *, pButton, void )
+IMPL_LINK(XMLFilterSettingsDialog, ClickHdl_Impl, weld::Button&, rButton, void)
{
// tdf#122171 block closing libreoffice until the following dialog is dismissed
incBusy();
- if (m_pPBNew == pButton)
+ if (m_xPBNew.get() == &rButton)
{
onNew();
}
- else if (m_pPBEdit == pButton)
+ else if (m_xPBEdit.get() == &rButton)
{
onEdit();
}
- else if (m_pPBTest == pButton)
+ else if (m_xPBTest.get() == &rButton)
{
onTest();
}
- else if (m_pPBDelete == pButton)
+ else if (m_xPBDelete.get() == &rButton)
{
onDelete();
}
- else if (m_pPBSave == pButton)
+ else if (m_xPBSave.get() == &rButton)
{
onSave();
}
- else if (m_pPBOpen == pButton)
+ else if (m_xPBOpen.get() == &rButton)
{
onOpen();
}
- else if (m_pPBClose == pButton)
- {
- Close();
- }
decBusy();
+
+ if (m_xPBClose.get() == &rButton)
+ m_xDialog->response(RET_CLOSE);
}
-IMPL_LINK_NOARG(XMLFilterSettingsDialog, SelectionChangedHdl_Impl, SvTreeListBox*, void)
+IMPL_LINK_NOARG(XMLFilterSettingsDialog, SelectionChangedHdl_Impl, weld::TreeView&, void)
{
updateStates();
}
-IMPL_LINK_NOARG(XMLFilterSettingsDialog, DoubleClickHdl_Impl, SvTreeListBox*, bool)
+IMPL_LINK_NOARG(XMLFilterSettingsDialog, DoubleClickHdl_Impl, weld::TreeView&, void)
{
onEdit();
- return false;
}
void XMLFilterSettingsDialog::UpdateWindow()
{
- m_pCtrlFilterList->GrabFocus();
+ m_xFilterListBox->grab_focus();
disposeFilterList();
- m_pFilterListBox->Clear();
+ m_xFilterListBox->clear();
initFilterList();
updateStates();
}
void XMLFilterSettingsDialog::updateStates()
{
- SvTreeListEntry* pSelectedEntry = m_pFilterListBox->FirstSelected();
+ std::vector<int> aRows = m_xFilterListBox->get_selected_rows();
- bool bHasSelection = pSelectedEntry != nullptr;
+ bool bHasSelection = !aRows.empty();
- bool bMultiSelection = bHasSelection && (m_pFilterListBox->NextSelected( pSelectedEntry ) != nullptr );
+ bool bMultiSelection = aRows.size() > 1;
bool bIsReadonly = false;
bool bIsDefault = false;
- if(pSelectedEntry)
+ if (bHasSelection)
{
- filter_info_impl* pInfo = static_cast<filter_info_impl*>(pSelectedEntry->GetUserData());
+ filter_info_impl* pInfo = reinterpret_cast<filter_info_impl*>(m_xFilterListBox->get_id(aRows[0]).toInt64());
bIsReadonly = pInfo->mbReadonly;
for( auto nFact : o3tl::enumrange<SvtModuleOptions::EFactory>())
@@ -214,10 +198,10 @@ void XMLFilterSettingsDialog::updateStates()
}
}
}
- m_pPBEdit->Enable( bHasSelection && !bMultiSelection && !bIsReadonly);
- m_pPBTest->Enable( bHasSelection && !bMultiSelection );
- m_pPBDelete->Enable( bHasSelection && !bMultiSelection && !bIsReadonly && !bIsDefault);
- m_pPBSave->Enable( bHasSelection );
+ m_xPBEdit->set_sensitive( bHasSelection && !bMultiSelection && !bIsReadonly);
+ m_xPBTest->set_sensitive( bHasSelection && !bMultiSelection );
+ m_xPBDelete->set_sensitive( bHasSelection && !bMultiSelection && !bIsReadonly && !bIsDefault);
+ m_xPBSave->set_sensitive( bHasSelection );
}
/** is called when the user clicks on the "New" button */
@@ -238,7 +222,7 @@ void XMLFilterSettingsDialog::onNew()
aTempInfo.maDocumentService = "com.sun.star.text.TextDocument";
// execute XML Filter Dialog
- XMLFilterTabDialog aDlg(GetFrameWeld(), mxContext, &aTempInfo);
+ XMLFilterTabDialog aDlg(m_xDialog.get(), mxContext, &aTempInfo);
if (aDlg.run() == RET_OK)
{
// insert the new filter
@@ -249,15 +233,12 @@ void XMLFilterSettingsDialog::onNew()
/** is called when the user clicks on the "Edit" Button */
void XMLFilterSettingsDialog::onEdit()
{
- // get selected filter entry
- SvTreeListEntry* pEntry = m_pFilterListBox->FirstSelected();
- if( pEntry )
+ // get selected filter info
+ filter_info_impl* pOldInfo = reinterpret_cast<filter_info_impl*>(m_xFilterListBox->get_selected_id().toInt64());
+ if (pOldInfo)
{
- // get its filter info
- filter_info_impl* pOldInfo = static_cast<filter_info_impl*>(pEntry->GetUserData());
-
// execute XML Filter Dialog
- XMLFilterTabDialog aDlg(GetFrameWeld(), mxContext, pOldInfo);
+ XMLFilterTabDialog aDlg(m_xDialog.get(), mxContext, pOldInfo);
if (aDlg.run() == RET_OK)
{
filter_info_impl* pNewInfo = aDlg.getNewFilterInfo();
@@ -737,11 +718,11 @@ bool XMLFilterSettingsDialog::insertOrEdit( filter_info_impl* pNewInfo, const fi
{
if( pOldInfo )
{
- m_pFilterListBox->changeEntry( pFilterEntry );
+ changeEntry( pFilterEntry );
}
else
{
- m_pFilterListBox->addFilterEntry( pFilterEntry );
+ addFilterEntry( pFilterEntry );
maFilterVector.push_back( std::unique_ptr<filter_info_impl>(pFilterEntry) );
}
}
@@ -753,27 +734,26 @@ bool XMLFilterSettingsDialog::insertOrEdit( filter_info_impl* pNewInfo, const fi
void XMLFilterSettingsDialog::onTest()
{
// get the first selected filter
- SvTreeListEntry* pEntry = m_pFilterListBox->FirstSelected();
- if( pEntry )
+ filter_info_impl* pInfo = reinterpret_cast<filter_info_impl*>(m_xFilterListBox->get_selected_id().toInt64());
+ if (pInfo)
{
- filter_info_impl* pInfo = static_cast<filter_info_impl*>(pEntry->GetUserData());
-
- XMLFilterTestDialog aDlg(GetFrameWeld(), mxContext);
+ XMLFilterTestDialog aDlg(m_xDialog.get(), mxContext);
aDlg.test( *pInfo );
}
}
void XMLFilterSettingsDialog::onDelete()
{
- SvTreeListEntry* pEntry = m_pFilterListBox->FirstSelected();
- if( pEntry )
+ int nIndex = m_xFilterListBox->get_selected_index();
+ if (nIndex == -1)
+ return;
+ filter_info_impl* pInfo = reinterpret_cast<filter_info_impl*>(m_xFilterListBox->get_id(nIndex).toInt64());
+ if (pInfo)
{
- filter_info_impl* pInfo = static_cast<filter_info_impl*>(pEntry->GetUserData());
-
OUString aMessage(XsltResId(STR_WARN_DELETE));
aMessage = aMessage.replaceFirst( "%s", pInfo->maFilterName );
- std::unique_ptr<weld::MessageDialog> xWarn(Application::CreateMessageDialog(GetFrameWeld(),
+ std::unique_ptr<weld::MessageDialog> xWarn(Application::CreateMessageDialog(m_xDialog.get(),
VclMessageType::Warning, VclButtonsType::YesNo,
aMessage));
xWarn->set_default_response(RET_YES);
@@ -837,7 +817,7 @@ void XMLFilterSettingsDialog::onDelete()
xFlushable->flush();
// now remove entry from ui
- m_pFilterListBox->RemoveSelection();
+ m_xFilterListBox->remove(nIndex);
// and delete the filter entry
maFilterVector.erase(std::find_if( maFilterVector.begin(), maFilterVector.end(),
@@ -861,19 +841,17 @@ void XMLFilterSettingsDialog::onSave()
int nFilters = 0;
- SvTreeListEntry* pEntry = m_pFilterListBox->FirstSelected();
- while( pEntry )
- {
- filter_info_impl* pInfo = static_cast<filter_info_impl*>(pEntry->GetUserData());
- aFilters.push_back( pInfo );
- pEntry = m_pFilterListBox->NextSelected( pEntry );
- nFilters++;
- }
+ m_xFilterListBox->selected_foreach([&](weld::TreeIter& rEntry){
+ filter_info_impl* pInfo = reinterpret_cast<filter_info_impl*>(m_xFilterListBox->get_id(rEntry).toInt64());
+ aFilters.push_back(pInfo);
+ ++nFilters;
+ return false;
+ });
// Open Fileopen-Dialog
::sfx2::FileDialogHelper aDlg(
css::ui::dialogs::TemplateDescription::FILESAVE_AUTOEXTENSION,
- FileDialogFlags::NONE, GetFrameWeld());
+ FileDialogFlags::NONE, m_xDialog.get());
OUString aExtensions( "*.jar" );
OUString aFilterName(XsltResId(STR_FILTER_PACKAGE));
@@ -904,7 +882,7 @@ void XMLFilterSettingsDialog::onSave()
aMsg = aMsg.replaceFirst( sPlaceholder, aURL.GetName() );
}
- std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(GetFrameWeld(),
+ std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(m_xDialog.get(),
VclMessageType::Info, VclButtonsType::Ok,
aMsg));
xInfoBox->run();
@@ -918,7 +896,7 @@ void XMLFilterSettingsDialog::onOpen()
// Open Fileopen-Dialog
::sfx2::FileDialogHelper aDlg(
css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
- FileDialogFlags::NONE, GetFrameWeld());
+ FileDialogFlags::NONE, m_xDialog.get());
OUString aExtensions( "*.jar" );
OUString aFilterName(XsltResId(STR_FILTER_PACKAGE));
@@ -968,41 +946,17 @@ void XMLFilterSettingsDialog::onOpen()
aMsg = aMsg.replaceFirst( sPlaceholder, OUString::number( nFilters ) );
}
- std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(GetFrameWeld(),
+ std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(m_xDialog.get(),
VclMessageType::Info, VclButtonsType::Ok,
aMsg));
xInfoBox->run();
}
}
-bool XMLFilterSettingsDialog::EventNotify( NotifyEvent& rNEvt )
-{
- // Because of tab control first call the base class.
- bool bRet = ModelessDialog::EventNotify(rNEvt);
- if ( !bRet )
- {
- if ( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
- {
- const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
- vcl::KeyCode aKeyCode = pKEvt->GetKeyCode();
- sal_uInt16 nKeyCode = aKeyCode.GetCode();
- bool bMod1 = pKEvt->GetKeyCode().IsMod1();
-
- if( nKeyCode == KEY_ESCAPE || (bMod1 && (nKeyCode == KEY_W)))
- {
- Close();
- return true;
- }
- }
- }
-
- return bRet;
-}
-
void XMLFilterSettingsDialog::disposeFilterList()
{
maFilterVector.clear();
- m_pFilterListBox->Clear();
+ m_xFilterListBox->clear();
}
void XMLFilterSettingsDialog::initFilterList()
@@ -1161,7 +1115,7 @@ void XMLFilterSettingsDialog::initFilterList()
// add entry to internal container and to ui filter list box
maFilterVector.push_back( std::unique_ptr<filter_info_impl>(pTempFilter.get()) );
- m_pFilterListBox->addFilterEntry( pTempFilter.release() );
+ addFilterEntry( pTempFilter.release() );
pTempFilter.reset( new filter_info_impl );
@@ -1174,9 +1128,11 @@ void XMLFilterSettingsDialog::initFilterList()
}
}
- SvTreeListEntry* pEntry = m_pFilterListBox->GetEntry( 0 );
- if( pEntry )
- m_pFilterListBox->Select( pEntry );
+ if (m_xFilterListBox->n_children())
+ {
+ m_xFilterListBox->columns_autosize();
+ m_xFilterListBox->select(0);
+ }
}
application_info_impl::application_info_impl( const sal_Char * pDocumentService, const OUString& rUINameRes, const sal_Char * mpXMLImporter, const sal_Char * mpXMLExporter )
@@ -1268,193 +1224,37 @@ OUString getApplicationUIName( const OUString& rServiceName )
}
}
-SvxPathControl::SvxPathControl(vcl::Window* pParent)
- : Window(pParent, WB_HIDE | WB_CLIPCHILDREN | WB_TABSTOP | WB_DIALOGCONTROL | WB_BORDER)
- , bHasBeenShown(false)
-{
- m_pVBox = VclPtr<VclVBox>::Create(this);
-
- m_pHeaderBar = VclPtr<HeaderBar>::Create(m_pVBox, WB_BOTTOMBORDER);
- m_pHeaderBar->set_height_request(GetTextHeight() + 6);
-
- m_pFocusCtrl = VclPtr<XMLFilterListBox>::Create(m_pVBox, this);
- m_pFocusCtrl->set_fill(true);
- m_pFocusCtrl->set_expand(true);
-
- m_pVBox->set_hexpand(true);
- m_pVBox->set_vexpand(true);
- m_pVBox->set_expand(true);
- m_pVBox->set_fill(true);
- m_pVBox->Show();
-}
-
-#define ITEMID_NAME 1
-#define ITEMID_TYPE 2
-
-void SvxPathControl::Resize()
-{
- Window::Resize();
-
- if (!m_pVBox)
- return;
-
- m_pVBox->SetSizePixel(GetSizePixel());
-
- if (!bHasBeenShown)
- bHasBeenShown = IsReallyShown();
-
- if (!bHasBeenShown)
- {
- std::vector<long> aWidths;
- m_pFocusCtrl->getPreferredDimensions(aWidths);
- if (aWidths.empty())
- {
- bHasBeenShown = false;
- return;
- }
- long nFirstColumnWidth = aWidths[1];
- m_pHeaderBar->SetItemSize(ITEMID_NAME, nFirstColumnWidth);
- m_pHeaderBar->SetItemSize(ITEMID_TYPE, 0xFFFF);
- long nTabs[] = {0, nFirstColumnWidth};
- m_pFocusCtrl->SetTabs(SAL_N_ELEMENTS(nTabs), nTabs, MapUnit::MapPixel);
- }
-}
-
-Size SvxPathControl::GetOptimalSize() const
-{
- Size aDefSize(LogicToPixel(Size(150, 0), MapMode(MapUnit::MapAppFont)));
- Size aOptSize(m_pVBox->GetOptimalSize());
- long nRowHeight(GetTextHeight());
- aOptSize.setHeight( nRowHeight * 10 );
- aOptSize.setWidth( std::max(aDefSize.Width(), aOptSize.Width()) );
- return aOptSize;
-}
-
-SvxPathControl::~SvxPathControl()
-{
- disposeOnce();
-}
-
-void SvxPathControl::dispose()
-{
- m_pFocusCtrl.disposeAndClear();
- m_pHeaderBar.disposeAndClear();
- m_pVBox.disposeAndClear();
- vcl::Window::dispose();
-}
-
-VCL_BUILDER_FACTORY(SvxPathControl)
-
-bool SvxPathControl::EventNotify(NotifyEvent& rNEvt)
-{
- bool bRet = Window::EventNotify(rNEvt);
-
- if ( m_pFocusCtrl && rNEvt.GetWindow() != m_pFocusCtrl && rNEvt.GetType() == MouseNotifyEvent::GETFOCUS )
- m_pFocusCtrl->GrabFocus();
-
- return bRet;
-}
-
-XMLFilterListBox::XMLFilterListBox(Window* pParent, SvxPathControl* pPathControl)
- : SvTabListBox(pParent, WB_SORT | WB_HSCROLL | WB_CLIPCHILDREN | WB_TABSTOP)
- , m_pHeaderBar(pPathControl->getHeaderBar())
-{
- Size aBoxSize( pParent->GetOutputSizePixel() );
-
- m_pHeaderBar->SetEndDragHdl( LINK( this, XMLFilterListBox, HeaderEndDrag_Impl ) );
-
- OUString aStr1(XsltResId(STR_COLUMN_HEADER_NAME));
- OUString aStr2(XsltResId(STR_COLUMN_HEADER_TYPE));
-
- long nTabSize = aBoxSize.Width() / 2;
-
- m_pHeaderBar->InsertItem( ITEMID_NAME, aStr1, nTabSize, HeaderBarItemBits::LEFT );
- m_pHeaderBar->InsertItem( ITEMID_TYPE, aStr2, nTabSize, HeaderBarItemBits::LEFT );
-
- static long nTabs[] = {0, nTabSize };
-
- SetSelectionMode( SelectionMode::Multiple );
- SetTabs( SAL_N_ELEMENTS(nTabs), nTabs, MapUnit::MapPixel );
- SetScrolledHdl( LINK( this, XMLFilterListBox, TabBoxScrollHdl_Impl ) );
- SetHighlightRange();
- Show();
- m_pHeaderBar->Show();
-}
-
-XMLFilterListBox::~XMLFilterListBox()
-{
- disposeOnce();
-}
-
-void XMLFilterListBox::dispose()
-{
- m_pHeaderBar.clear();
- SvTabListBox::dispose();
-}
-
-IMPL_LINK_NOARG( XMLFilterListBox, TabBoxScrollHdl_Impl, SvTreeListBox*, void )
-{
- m_pHeaderBar->SetOffset( -GetXOffset() );
-}
-
-IMPL_LINK( XMLFilterListBox, HeaderEndDrag_Impl, HeaderBar*, pBar, void )
-{
- if ( pBar && !pBar->GetCurItemId() )
- return;
-
- if ( !m_pHeaderBar->IsItemMode() )
- {
- Size aSz;
- sal_uInt16 nTabs = m_pHeaderBar->GetItemCount();
- long nTmpSz = 0;
- long nWidth = m_pHeaderBar->GetItemSize(ITEMID_NAME);
- long nBarWidth = m_pHeaderBar->GetSizePixel().Width();
-
- if(nWidth < 30)
- m_pHeaderBar->SetItemSize( ITEMID_TYPE, 30);
- else if ( ( nBarWidth - nWidth ) < 30 )
- m_pHeaderBar->SetItemSize( ITEMID_TYPE, nBarWidth - 30 );
-
- for ( sal_uInt16 i = 1; i <= nTabs; ++i )
- {
- long nW = m_pHeaderBar->GetItemSize(i);
- aSz.setWidth( nW + nTmpSz );
- nTmpSz += nW;
- SetTab( i, PixelToLogic( aSz, MapMode(MapUnit::MapAppFont) ).Width() );
- }
- }
-}
-
/** adds a new filter info entry to the ui filter list */
-void XMLFilterListBox::addFilterEntry( const filter_info_impl* pInfo )
+void XMLFilterSettingsDialog::addFilterEntry( const filter_info_impl* pInfo )
{
- const OUString aEntryStr( getEntryString( pInfo ) );
- InsertEntryToColumn( aEntryStr, TREELIST_APPEND, 0xffff, const_cast<filter_info_impl *>(pInfo) );
+ int nRow = m_xFilterListBox->n_children();
+ OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pInfo)));
+ m_xFilterListBox->append(sId, pInfo->maFilterName);
+ m_xFilterListBox->set_text(nRow, getEntryString(pInfo), 1);
}
-void XMLFilterListBox::changeEntry( const filter_info_impl* pInfo )
+void XMLFilterSettingsDialog::changeEntry( const filter_info_impl* pInfo )
{
- const sal_uLong nCount = GetEntryCount();
- sal_uLong nPos;
- for( nPos = 0; nPos < nCount; nPos++ )
+ const int nCount = m_xFilterListBox->n_children();
+ for(int nPos = 0; nPos < nCount; ++nPos)
{
- SvTreeListEntry* pEntry = GetEntry( nPos );
- if( static_cast<filter_info_impl*>(pEntry->GetUserData()) == pInfo )
+ filter_info_impl* pEntry = reinterpret_cast<filter_info_impl*>(m_xFilterListBox->get_id(nPos).toInt64());
+ if (pEntry == pInfo)
{
- OUString aEntryText( getEntryString( pInfo ) );
- SetEntryText( aEntryText, pEntry );
+ m_xFilterListBox->set_text(nPos, pInfo->maFilterName, 0);
+ m_xFilterListBox->set_text(nPos, getEntryString(pInfo), 1);
break;
}
}
}
-OUString XMLFilterListBox::getEntryString( const filter_info_impl* pInfo )
+OUString XMLFilterSettingsDialog::getEntryString( const filter_info_impl* pInfo )
{
- OUString aEntryStr( pInfo->maFilterName + "\t");
+ OUString aEntryStr;
if ( !pInfo->maExportService.isEmpty() )
- aEntryStr += getApplicationUIName( pInfo->maExportService );
+ aEntryStr = getApplicationUIName( pInfo->maExportService );
else
- aEntryStr += getApplicationUIName( pInfo->maImportService );
+ aEntryStr = getApplicationUIName( pInfo->maImportService );
aEntryStr += " - ";
if( pInfo->maFlags & 1 )
diff --git a/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx b/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx
index 6c1e89c4a9bd..2db86ee394cb 100644
--- a/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx
+++ b/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx
@@ -23,78 +23,29 @@
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/container/XHierarchicalName.hpp>
#include <com/sun/star/container/XNameContainer.hpp>
-#include <vcl/button.hxx>
-#include <vcl/dialog.hxx>
-#include <vcl/layout.hxx>
-#include <vcl/svtabbx.hxx>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <vcl/weld.hxx>
#include <vcl/waitobj.hxx>
#include <svl/poolitem.hxx>
#include <unotools/moduleoptions.hxx>
#include "xmlfiltercommon.hxx"
-class HeaderBar;
-class XMLFilterListBox;
-
-class SvxPathControl : public vcl::Window
-{
-private:
- bool bHasBeenShown;
- VclPtr<VclVBox> m_pVBox;
- VclPtr<HeaderBar> m_pHeaderBar;
- VclPtr<XMLFilterListBox> m_pFocusCtrl;
-protected:
- virtual void Resize() override;
- virtual Size GetOptimalSize() const override;
-public:
- explicit SvxPathControl(vcl::Window* pParent);
- HeaderBar* getHeaderBar() { return m_pHeaderBar; }
- XMLFilterListBox* getListBox() { return m_pFocusCtrl; }
- virtual ~SvxPathControl() override;
- virtual void dispose() override;
-
- virtual bool EventNotify( NotifyEvent& rNEvt ) override;
-};
-
-class HeaderBar;
-
-class XMLFilterListBox : public SvTabListBox
-{
-private:
- VclPtr<HeaderBar> m_pHeaderBar;
-
- DECL_LINK( TabBoxScrollHdl_Impl, SvTreeListBox*, void );
- DECL_LINK( HeaderEndDrag_Impl, HeaderBar*, void );
-
- static OUString getEntryString( const filter_info_impl* pInfo );
-
-public:
- XMLFilterListBox(Window* pParent, SvxPathControl* pPathControl);
- virtual ~XMLFilterListBox() override;
- virtual void dispose() override;
-
- /** adds a new filter info entry to the ui filter list */
- void addFilterEntry( const filter_info_impl* pInfo );
-
- void changeEntry( const filter_info_impl* pInfo );
-};
-
-
-class XMLFilterSettingsDialog : public ModelessDialog
+class XMLFilterSettingsDialog : public weld::GenericDialogController
{
public:
- XMLFilterSettingsDialog(vcl::Window* pParent,
- const css::uno::Reference< css::uno::XComponentContext >& rxContext,
- Dialog::InitFlag eFlag = Dialog::InitFlag::Default);
+ XMLFilterSettingsDialog(weld::Window* pParent,
+ const css::uno::Reference< css::uno::XComponentContext >& rxContext);
virtual ~XMLFilterSettingsDialog() override;
- virtual void dispose() override;
- DECL_LINK(ClickHdl_Impl, Button *, void );
- DECL_LINK(SelectionChangedHdl_Impl, SvTreeListBox*, void );
- DECL_LINK(DoubleClickHdl_Impl, SvTreeListBox*, bool );
+ DECL_LINK(ClickHdl_Impl, weld::Button&, void );
+ DECL_LINK(SelectionChangedHdl_Impl, weld::TreeView&, void);
+ DECL_LINK(DoubleClickHdl_Impl, weld::TreeView&, void);
void UpdateWindow();
+ void present() { m_xDialog->present(); }
+
void onNew();
void onEdit();
void onTest();
@@ -103,14 +54,11 @@ public:
void onOpen();
void updateStates();
-
- virtual bool EventNotify( NotifyEvent& rNEvt ) override;
-
private:
void initFilterList();
void disposeFilterList();
- void incBusy() { maBusy.incBusy(this); }
+ void incBusy() { maBusy.incBusy(m_xDialog.get()); }
void decBusy() { maBusy.decBusy(); }
bool insertOrEdit( filter_info_impl* pNewInfo, const filter_info_impl* pOldInfo = nullptr );
@@ -119,6 +67,13 @@ private:
OUString createUniqueTypeName( const OUString& rTypeName );
OUString createUniqueInterfaceName( const OUString& rInterfaceName );
+ /** adds a new filter info entry to the ui filter list */
+ void addFilterEntry( const filter_info_impl* pInfo );
+
+ void changeEntry( const filter_info_impl* pInfo );
+
+ static OUString getEntryString( const filter_info_impl* pInfo );
+
private:
css::uno::Reference< css::uno::XComponentContext > mxContext;
css::uno::Reference< css::container::XNameContainer > mxFilterContainer;
@@ -128,20 +83,20 @@ private:
std::vector< std::unique_ptr<filter_info_impl> > maFilterVector;
TopLevelWindowLocker maBusy;
- VclPtr<XMLFilterListBox> m_pFilterListBox;
- VclPtr<SvxPathControl> m_pCtrlFilterList;
- VclPtr<PushButton> m_pPBNew;
- VclPtr<PushButton> m_pPBEdit;
- VclPtr<PushButton> m_pPBTest;
- VclPtr<PushButton> m_pPBDelete;
- VclPtr<PushButton> m_pPBSave;
- VclPtr<PushButton> m_pPBOpen;
- VclPtr<CloseButton> m_pPBClose;
OUString m_sTemplatePath;
OUString m_sDocTypePrefix;
SvtModuleOptions maModuleOpt;
+
+ std::unique_ptr<weld::Button> m_xPBNew;
+ std::unique_ptr<weld::Button> m_xPBEdit;
+ std::unique_ptr<weld::Button> m_xPBTest;
+ std::unique_ptr<weld::Button> m_xPBDelete;
+ std::unique_ptr<weld::Button> m_xPBSave;
+ std::unique_ptr<weld::Button> m_xPBOpen;
+ std::unique_ptr<weld::Button> m_xPBClose;
+ std::unique_ptr<weld::TreeView> m_xFilterListBox;
};
#endif
diff --git a/filter/source/xsltdialog/xmlfiltertabdialog.cxx b/filter/source/xsltdialog/xmlfiltertabdialog.cxx
index 3d05f25f15e3..d02b8cbcd2f9 100644
--- a/filter/source/xsltdialog/xmlfiltertabdialog.cxx
+++ b/filter/source/xsltdialog/xmlfiltertabdialog.cxx
@@ -22,6 +22,7 @@
#include <com/sun/star/uno/XComponentContext.hpp>
#include <comphelper/fileurl.hxx>
#include <unotools/resmgr.hxx>
+#include <vcl/svapp.hxx>
#include <vcl/weld.hxx>
#include <osl/file.hxx>
diff --git a/filter/source/xsltdialog/xmlfiltertabpagebasic.cxx b/filter/source/xsltdialog/xmlfiltertabpagebasic.cxx
index af2b6148d51f..abfa596c4d09 100644
--- a/filter/source/xsltdialog/xmlfiltertabpagebasic.cxx
+++ b/filter/source/xsltdialog/xmlfiltertabpagebasic.cxx
@@ -18,7 +18,7 @@
*/
#include <rtl/ustrbuf.hxx>
-
+#include <vcl/svapp.hxx>
#include <strings.hrc>
#include "xmlfiltertabpagebasic.hxx"
#include "xmlfiltersettingsdialog.hxx"
diff --git a/filter/source/xsltdialog/xmlfiltertabpagexslt.cxx b/filter/source/xsltdialog/xmlfiltertabpagexslt.cxx
index 5455ba82c738..8bd97ca2823b 100644
--- a/filter/source/xsltdialog/xmlfiltertabpagexslt.cxx
+++ b/filter/source/xsltdialog/xmlfiltertabpagexslt.cxx
@@ -23,6 +23,7 @@
#include <unotools/pathoptions.hxx>
#include <osl/file.hxx>
#include <svl/urihelper.hxx>
+#include <vcl/svapp.hxx>
#include "xmlfiltertabpagexslt.hxx"
#include "xmlfiltersettingsdialog.hxx"
diff --git a/filter/source/xsltdialog/xmlfiltertestdialog.cxx b/filter/source/xsltdialog/xmlfiltertestdialog.cxx
index cff46da8580c..684329f438a8 100644
--- a/filter/source/xsltdialog/xmlfiltertestdialog.cxx
+++ b/filter/source/xsltdialog/xmlfiltertestdialog.cxx
@@ -28,6 +28,7 @@
#include <com/sun/star/frame/Desktop.hpp>
#include <com/sun/star/frame/XStorable.hpp>
#include <com/sun/star/io/XActiveDataSource.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/system/SystemShellExecute.hpp>
#include <com/sun/star/system/SystemShellExecuteFlags.hpp>
#include <com/sun/star/task/InteractionHandler.hpp>
@@ -41,6 +42,7 @@
#include <sfx2/filedlghelper.hxx>
#include <osl/file.hxx>
#include <unotools/tempfile.hxx>
+#include <tools/debug.hxx>
#include <tools/urlobj.hxx>
#include <comphelper/processfactory.hxx>
diff --git a/filter/uiconfig/ui/xmlfiltersettings.ui b/filter/uiconfig/ui/xmlfiltersettings.ui
index 2161e87a12e7..bee858e3211b 100644
--- a/filter/uiconfig/ui/xmlfiltersettings.ui
+++ b/filter/uiconfig/ui/xmlfiltersettings.ui
@@ -1,14 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
+<!-- Generated with glade 3.22.1 -->
<interface domain="flt">
<requires lib="gtk+" version="3.18"/>
- <requires lib="LibreOffice" version="1.0"/>
+ <object class="GtkTreeStore" id="liststore3">
+ <columns>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name text2 -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
<object class="GtkDialog" id="XMLFilterSettingsDialog">
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="xmlfiltersettings|XMLFilterSettingsDialog">XML Filter Settings</property>
<property name="resizable">False</property>
+ <property name="default_width">0</property>
+ <property name="default_height">0</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>
@@ -63,13 +77,51 @@
<property name="can_focus">False</property>
<property name="spacing">12</property>
<child>
- <object class="xsltdlglo-SvxPathControl" id="filterlist">
- <property name="height_request">100</property>
+ <object class="GtkScrolledWindow">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <child internal-child="accessible">
- <object class="AtkObject" id="filterlist-atkobject">
- <property name="AtkObject::accessible-name" translatable="yes" context="xmlfiltersettings|filterlist-atkobject">XML Filter List</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="filterlist">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="model">liststore3</property>
+ <property name="search_column">0</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="xmlfiltersettings|header_name">Name</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderer1"/>
+ <attributes>
+ <attribute name="text">0</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="xmlfiltersettings|header_type">Type</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderer2"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
</object>
</child>
</object>
@@ -84,6 +136,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
+ <property name="spacing">3</property>
<property name="homogeneous">True</property>
<property name="layout_style">start</property>
<child>
diff --git a/include/vcl/waitobj.hxx b/include/vcl/waitobj.hxx
index 858f49d4ae9b..15f4bdd29738 100644
--- a/include/vcl/waitobj.hxx
+++ b/include/vcl/waitobj.hxx
@@ -22,6 +22,7 @@
#include <vcl/dllapi.h>
#include <vcl/window.hxx>
+#include <vcl/weld.hxx>
#include <stack>
#include <vector>
@@ -46,7 +47,7 @@ private:
std::stack<std::vector<VclPtr<vcl::Window>>> m_aBusyStack;
public:
// lock all toplevels, except the argument
- void incBusy(const vcl::Window* pIgnore);
+ void incBusy(const weld::Window* pIgnore);
// unlock previous lock
void decBusy();
bool isBusy() const { return !m_aBusyStack.empty(); }
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index f258b83c2cd5..83f0809ec906 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -740,6 +740,7 @@ public:
virtual void clear() = 0;
virtual int get_height_rows(int nRows) const = 0;
+ virtual void columns_autosize() = 0;
virtual void set_column_fixed_widths(const std::vector<int>& rWidths) = 0;
virtual int get_column_width(int nCol) const = 0;
virtual OUString get_column_title(int nColumn) const = 0;
diff --git a/sfx2/source/appl/sfxhelp.cxx b/sfx2/source/appl/sfxhelp.cxx
index 8567731b0b77..c75ada768e88 100644
--- a/sfx2/source/appl/sfxhelp.cxx
+++ b/sfx2/source/appl/sfxhelp.cxx
@@ -1124,8 +1124,9 @@ bool SfxHelp::Start_Impl(const OUString& rURL, const vcl::Window* pWindow, const
if(bShowOfflineHelpPopUp)
{
- aBusy.incBusy(pWindow);
- std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(pWindow ? pWindow->GetFrameWeld() : nullptr, "sfx/ui/helpmanual.ui"));
+ weld::Window* pWeldWindow = pWindow ? pWindow->GetFrameWeld() : nullptr;
+ aBusy.incBusy(pWeldWindow);
+ std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(pWeldWindow, "sfx/ui/helpmanual.ui"));
std::unique_ptr<weld::MessageDialog> xQueryBox(xBuilder->weld_message_dialog("onlinehelpmanual"));
std::unique_ptr<weld::CheckButton> m_xHideOfflineHelpCB(xBuilder->weld_check_button("hidedialog"));
LanguageTag aLangTag = Application::GetSettings().GetUILanguageTag();
@@ -1143,8 +1144,9 @@ bool SfxHelp::Start_Impl(const OUString& rURL, const vcl::Window* pWindow, const
return true;
else
{
- aBusy.incBusy(pWindow);
- NoHelpErrorBox aErrBox(pWindow ? pWindow->GetFrameWeld() : nullptr);
+ weld::Window* pWeldWindow = pWindow ? pWindow->GetFrameWeld() : nullptr;
+ aBusy.incBusy(pWeldWindow);
+ NoHelpErrorBox aErrBox(pWeldWindow);
aErrBox.run();
aBusy.decBusy();
return false;
diff --git a/solenv/bin/native-code.py b/solenv/bin/native-code.py
index 46f667532c23..ee920c14c18a 100755
--- a/solenv/bin/native-code.py
+++ b/solenv/bin/native-code.py
@@ -507,7 +507,6 @@ custom_widgets = [
'SvxLanguageComboBox',
'SvxLightCtl3D',
'SvxNoSpaceEdit',
- 'SvxPathControl',
'SvxRelativeField',
'SvxTextEncodingBox',
'SvxTextEncodingBox',
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 435a8f6f0556..b07ff29b08b4 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -2278,6 +2278,7 @@ private:
int m_nSortColumn;
DECL_LINK(SelectHdl, SvTreeListBox*, void);
+ DECL_LINK(DeSelectHdl, SvTreeListBox*, void);
DECL_LINK(DoubleClickHdl, SvTreeListBox*, bool);
DECL_LINK(ExpandingHdl, SvTreeListBox*, bool);
DECL_LINK(EndDragHdl, HeaderBar*, void);
@@ -2296,6 +2297,7 @@ public:
{
m_xTreeView->SetNodeDefaultImages();
m_xTreeView->SetSelectHdl(LINK(this, SalInstanceTreeView, SelectHdl));
+ m_xTreeView->SetDeselectHdl(LINK(this, SalInstanceTreeView, DeSelectHdl));
m_xTreeView->SetDoubleClickHdl(LINK(this, SalInstanceTreeView, DoubleClickHdl));
m_xTreeView->SetExpandingHdl(LINK(this, SalInstanceTreeView, ExpandingHdl));
const long aTabPositions[] = { 0 };
@@ -2320,6 +2322,19 @@ public:
m_aRadioButtonData.SetLink(LINK(this, SalInstanceTreeView, ToggleHdl));
}
+ virtual void columns_autosize() override
+ {
+ std::vector<long> aWidths;
+ m_xTreeView->getPreferredDimensions(aWidths);
+ if (aWidths.size() > 2)
+ {
+ std::vector<int> aColWidths;
+ for (size_t i = 1; i < aWidths.size() - 1; ++i)
+ aColWidths.push_back(aWidths[i] - aWidths[i - 1]);
+ set_column_fixed_widths(aColWidths);
+ }
+ }
+
virtual void set_column_fixed_widths(const std::vector<int>& rWidths) override
{
std::vector<long> aTabPositions;
@@ -3163,6 +3178,7 @@ public:
m_xTreeView->SetExpandingHdl(Link<SvTreeListBox*, bool>());
m_xTreeView->SetDoubleClickHdl(Link<SvTreeListBox*, bool>());
m_xTreeView->SetSelectHdl(Link<SvTreeListBox*, void>());
+ m_xTreeView->SetDeselectHdl(Link<SvTreeListBox*, void>());
m_xTreeView->SetScrolledHdl(Link<SvTreeListBox*, void>());
}
};
@@ -3249,6 +3265,15 @@ IMPL_LINK_NOARG(SalInstanceTreeView, SelectHdl, SvTreeListBox*, void)
signal_changed();
}
+IMPL_LINK_NOARG(SalInstanceTreeView, DeSelectHdl, SvTreeListBox*, void)
+{
+ if (notify_events_disabled())
+ return;
+ if (m_xTreeView->GetSelectionMode() == SelectionMode::Single)
+ return;
+ signal_changed();
+}
+
IMPL_LINK_NOARG(SalInstanceTreeView, DoubleClickHdl, SvTreeListBox*, bool)
{
if (notify_events_disabled())
diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx
index 1aeceee16f95..e34ff81f6148 100644
--- a/vcl/source/window/dialog.cxx
+++ b/vcl/source/window/dialog.cxx
@@ -1572,14 +1572,14 @@ void Dialog::Activate()
SystemWindow::Activate();
}
-void TopLevelWindowLocker::incBusy(const vcl::Window* pIgnore)
+void TopLevelWindowLocker::incBusy(const weld::Window* pIgnore)
{
// lock any toplevel windows from being closed until busy is over
std::vector<VclPtr<vcl::Window>> aTopLevels;
vcl::Window *pTopWin = Application::GetFirstTopLevelWindow();
while (pTopWin)
{
- if (pTopWin != pIgnore)
+ if (pTopWin->GetFrameWeld() != pIgnore)
aTopLevels.push_back(pTopWin);
pTopWin = Application::GetNextTopLevelWindow(pTopWin);
}
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 3a3864398f48..d02fbad31146 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -5953,6 +5953,11 @@ public:
m_nRowInsertedSignalId = g_signal_connect(pModel, "row-inserted", G_CALLBACK(signalRowInserted), this);
}
+ virtual void columns_autosize() override
+ {
+ gtk_tree_view_columns_autosize(m_pTreeView);
+ }
+
virtual void set_column_fixed_widths(const std::vector<int>& rWidths) override
{
GList* pEntry = g_list_first(m_pColumns);