summaryrefslogtreecommitdiff
path: root/vcl/source/window/dialog.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2012-06-11 21:25:34 +0100
committerCaolán McNamara <caolanm@redhat.com>2012-09-28 08:48:27 +0100
commit328bada54e99141f443c19e2bc9c418f2627ed6f (patch)
tree539a2ca2605ee1eda4c98ade59aa6da643ca4ffc /vcl/source/window/dialog.cxx
parent839acd1be4d158e285d98527ed48c64628fdc2d7 (diff)
move dialog-contained widget builder into dialog baseclass
Diffstat (limited to 'vcl/source/window/dialog.cxx')
-rw-r--r--vcl/source/window/dialog.cxx112
1 files changed, 107 insertions, 5 deletions
diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx
index d95d52b0166f..9ff9abee42d0 100644
--- a/vcl/source/window/dialog.cxx
+++ b/vcl/source/window/dialog.cxx
@@ -26,6 +26,10 @@
*
************************************************************************/
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <comphelper/processfactory.hxx>
+#include <osl/file.hxx>
+
#include <tools/debug.hxx>
#include <tools/rc.h>
@@ -470,6 +474,55 @@ Dialog::Dialog( WindowType nType ) :
ImplInitDialogData();
}
+#define BASEPATH_SHARE_LAYER rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UIConfig"))
+#define RELPATH_SHARE_LAYER rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("soffice.cfg"))
+#define SERVICENAME_PATHSETTINGS rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.util.PathSettings"))
+
+rtl::OUString getUIRootDir()
+{
+ namespace css = ::com::sun::star;
+
+ /*to-do, check if user config has an override before using shared one, etc*/
+ css::uno::Reference< css::beans::XPropertySet > xPathSettings(
+ ::comphelper::getProcessServiceFactory()->createInstance(SERVICENAME_PATHSETTINGS),
+ css::uno::UNO_QUERY_THROW);
+
+ ::rtl::OUString sShareLayer;
+ xPathSettings->getPropertyValue(BASEPATH_SHARE_LAYER) >>= sShareLayer;
+
+ // "UIConfig" is a "multi path" ... use first part only here!
+ sal_Int32 nPos = sShareLayer.indexOf(';');
+ if (nPos > 0)
+ sShareLayer = sShareLayer.copy(0, nPos);
+
+ // Note: May be an user uses URLs without a final slash! Check it ...
+ nPos = sShareLayer.lastIndexOf('/');
+ if (nPos != sShareLayer.getLength()-1)
+ sShareLayer += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/"));
+
+ sShareLayer += RELPATH_SHARE_LAYER; // folder
+ sShareLayer += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/"));
+ /*to-do, can we merge all this foo with existing soffice.cfg finding code, etc*/
+ return sShareLayer;
+}
+
+Dialog::Dialog(Window* pParent, const rtl::OString& rID, const rtl::OUString& rUIXMLDescription)
+ : SystemWindow( WINDOW_DIALOG )
+{
+ ImplInitDialogData();
+ ImplInit(pParent, WB_SIZEMOVE|WB_3DLOOK|WB_CLOSEABLE);
+ m_pUIBuilder = new VclBuilder(this, getUIRootDir() + rUIXMLDescription, rID);
+}
+
+Dialog::Dialog(Window* pParent, const rtl::OString& rID, const rtl::OUString& rUIXMLDescription, WindowType nType)
+ : SystemWindow( nType )
+{
+ ImplInitDialogData();
+ ImplInit(pParent, WB_SIZEMOVE|WB_3DLOOK|WB_CLOSEABLE);
+ m_pUIBuilder = new VclBuilder(this, getUIRootDir() + rUIXMLDescription, rID);
+}
+
+
// -----------------------------------------------------------------------
Dialog::Dialog( Window* pParent, WinBits nStyle ) :
@@ -481,6 +534,47 @@ Dialog::Dialog( Window* pParent, WinBits nStyle ) :
// -----------------------------------------------------------------------
+Dialog::Dialog( Window* pParent, const ResId& rResId ) :
+ SystemWindow( WINDOW_DIALOG )
+{
+ ImplInitDialogData();
+ rResId.SetRT( RSC_DIALOG );
+ init(pParent, rResId);
+}
+
+WinBits Dialog::init(Window *pParent, const ResId& rResId)
+{
+ WinBits nStyle = ImplInitRes( rResId );
+
+ ImplInit( pParent, nStyle );
+
+ sal_Int32 nUIid = static_cast<sal_Int32>(rResId.GetId());
+ rtl::OUString sPath = rtl::OUStringBuffer(getUIRootDir()).
+ append(rResId.GetResMgr()->getPrefixName()).
+ append("/ui/").
+ append(nUIid).
+ appendAscii(".ui").
+ makeStringAndClear();
+ fprintf(stderr, "path %s id %d\n", rtl::OUStringToOString(sPath, RTL_TEXTENCODING_UTF8).getStr(), nUIid);
+
+ osl::File aUIFile(sPath);
+ osl::File::RC error = aUIFile.open(osl_File_OpenFlag_Read);
+ if (error == osl::File::E_None)
+ {
+ //good, use the preferred GtkBuilder xml
+ m_pUIBuilder = new VclBuilder(this, sPath, rtl::OString::valueOf(nUIid));
+ }
+ else
+ {
+ //fallback to using the binary resource file
+ ImplLoadRes( rResId );
+ }
+
+ return nStyle;
+}
+
+// -----------------------------------------------------------------------
+
Dialog::~Dialog()
{
delete mpDialogImpl;
@@ -1187,14 +1281,18 @@ ModelessDialog::ModelessDialog( Window* pParent, const ResId& rResId ) :
Dialog( WINDOW_MODELESSDIALOG )
{
rResId.SetRT( RSC_MODELESSDIALOG );
- WinBits nStyle = ImplInitRes( rResId );
- ImplInit( pParent, nStyle );
- ImplLoadRes( rResId );
+
+ WinBits nStyle = init( pParent, rResId );
if ( !(nStyle & WB_HIDE) )
Show();
}
+ModelessDialog::ModelessDialog( Window* pParent, const rtl::OString& rID, const rtl::OUString& rUIXMLDescription ) :
+ Dialog(pParent, rID, rUIXMLDescription, WINDOW_MODELESSDIALOG)
+{
+}
+
// =======================================================================
ModalDialog::ModalDialog( Window* pParent, WinBits nStyle ) :
@@ -1209,8 +1307,12 @@ ModalDialog::ModalDialog( Window* pParent, const ResId& rResId ) :
Dialog( WINDOW_MODALDIALOG )
{
rResId.SetRT( RSC_MODALDIALOG );
- ImplInit( pParent, ImplInitRes( rResId ) );
- ImplLoadRes( rResId );
+ init( pParent, rResId );
+}
+
+ModalDialog::ModalDialog( Window* pParent, const rtl::OString& rID, const rtl::OUString& rUIXMLDescription ) :
+ Dialog(pParent, rID, rUIXMLDescription, WINDOW_MODALDIALOG)
+{
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */