summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vcl/inc/vcl/builder.hxx4
-rw-r--r--vcl/source/uipreviewer/previewer.cxx2
-rw-r--r--vcl/source/window/builder.cxx13
-rw-r--r--vcl/source/window/dialog.cxx17
-rw-r--r--vcl/source/window/window2.cxx4
5 files changed, 27 insertions, 13 deletions
diff --git a/vcl/inc/vcl/builder.hxx b/vcl/inc/vcl/builder.hxx
index 7b9823feff1d..ff346dd8e2f4 100644
--- a/vcl/inc/vcl/builder.hxx
+++ b/vcl/inc/vcl/builder.hxx
@@ -43,7 +43,6 @@ class VCL_DLLPUBLIC VclBuilder
public:
typedef std::map<rtl::OString, rtl::OString> stringmap;
private:
- //todo merge into Windows UniqueID/HelpID ?
struct WinAndId
{
rtl::OString m_sID;
@@ -122,9 +121,10 @@ private:
rtl::OString getTranslation(const rtl::OString &rId, const rtl::OString &rProperty) const;
rtl::OString m_sID;
+ rtl::OString m_sHelpRoot;
Window *m_pParent;
public:
- VclBuilder(Window *pParent, rtl::OUString sUIFile, rtl::OString sID = rtl::OString());
+ VclBuilder(Window *pParent, rtl::OUString sUIRootDir, rtl::OUString sUIFile, rtl::OString sID = rtl::OString());
~VclBuilder();
Window *get_widget_root();
Window *get_by_name(rtl::OString sID);
diff --git a/vcl/source/uipreviewer/previewer.cxx b/vcl/source/uipreviewer/previewer.cxx
index e18730bc3156..42c035333575 100644
--- a/vcl/source/uipreviewer/previewer.cxx
+++ b/vcl/source/uipreviewer/previewer.cxx
@@ -85,7 +85,7 @@ int UIPreviewApp::Main()
Dialog *pDialog = new Dialog(NULL, WB_STDDIALOG);
{
- VclBuilder aBuilder(pDialog, uifiles[0]);
+ VclBuilder aBuilder(pDialog, rtl::OUString(), uifiles[0]);
Dialog *pRealDialog = dynamic_cast<Dialog*>(aBuilder.get_widget_root());
if (!pRealDialog)
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 0176bfadfe23..a9e56010832f 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -39,10 +39,18 @@
#include <vcl/tabpage.hxx>
#include <window.h>
-VclBuilder::VclBuilder(Window *pParent, rtl::OUString sUri, rtl::OString sID)
+VclBuilder::VclBuilder(Window *pParent, rtl::OUString sUIDir, rtl::OUString sUIFile, rtl::OString sID)
: m_sID(sID)
+ , m_sHelpRoot(rtl::OUStringToOString(sUIFile, RTL_TEXTENCODING_UTF8))
, m_pParent(pParent)
{
+ sal_Int32 nIdx = m_sHelpRoot.lastIndexOf('.');
+ if (nIdx != -1)
+ m_sHelpRoot = m_sHelpRoot.copy(0, nIdx);
+ m_sHelpRoot = m_sHelpRoot + rtl::OString('/');
+
+ rtl::OUString sUri = sUIDir + sUIFile;
+
::com::sun::star::lang::Locale aLocale = Application::GetSettings().GetUILocale();
for (int i = aLocale.Country.isEmpty() ? 1 : 0; i < 2; ++i)
{
@@ -375,7 +383,8 @@ Window *VclBuilder::makeObject(Window *pParent, const rtl::OString &name, const
fprintf(stderr, "TO-DO, implement %s\n", name.getStr());
if (pWindow)
{
- fprintf(stderr, "for %s, created %p child of %p (%p/%p/%p)\n", name.getStr(), pWindow, pParent, pWindow->mpWindowImpl->mpParent, pWindow->mpWindowImpl->mpRealParent, pWindow->mpWindowImpl->mpBorderWindow);
+ pWindow->SetHelpId(m_sHelpRoot + id);
+ fprintf(stderr, "for %s, created %p child of %p (%p/%p/%p) with helpid %s\n", name.getStr(), pWindow, pParent, pWindow->mpWindowImpl->mpParent, pWindow->mpWindowImpl->mpRealParent, pWindow->mpWindowImpl->mpBorderWindow, pWindow->GetHelpId().getStr());
m_aChildren.push_back(WinAndId(id, pWindow));
}
return pWindow;
diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx
index 12d7feab0517..7b7be589f81f 100644
--- a/vcl/source/window/dialog.cxx
+++ b/vcl/source/window/dialog.cxx
@@ -510,7 +510,7 @@ Dialog::Dialog(Window* pParent, const rtl::OString& rID, const rtl::OUString& rU
{
ImplInitDialogData();
ImplInit(pParent, WB_SIZEMOVE|WB_3DLOOK|WB_CLOSEABLE);
- m_pUIBuilder = new VclBuilder(this, getUIRootDir() + rUIXMLDescription, rID);
+ m_pUIBuilder = new VclBuilder(this, getUIRootDir(), rUIXMLDescription, rID);
}
Dialog::Dialog(Window* pParent, const rtl::OString& rID, const rtl::OUString& rUIXMLDescription, WindowType nType)
@@ -518,7 +518,7 @@ Dialog::Dialog(Window* pParent, const rtl::OString& rID, const rtl::OUString& rU
{
ImplInitDialogData();
ImplInit(pParent, WB_SIZEMOVE|WB_3DLOOK|WB_CLOSEABLE);
- m_pUIBuilder = new VclBuilder(this, getUIRootDir() + rUIXMLDescription, rID);
+ m_pUIBuilder = new VclBuilder(this, getUIRootDir(), rUIXMLDescription, rID);
}
@@ -544,19 +544,22 @@ Dialog::Dialog( Window* pParent, const ResId& rResId ) :
VclBuilder* VclBuilderContainer::overrideResourceWithUIXML(Window *pWindow, const ResId& rResId)
{
sal_Int32 nUIid = static_cast<sal_Int32>(rResId.GetId());
- rtl::OUString sPath = rtl::OUStringBuffer(getUIRootDir()).
- append(rResId.GetResMgr()->getPrefixName()).
+
+ rtl::OUString sRoot = getUIRootDir();
+ rtl::OUString sPath = rtl::OUStringBuffer(
+ 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);
+ fprintf(stderr, "path %s id %d\n", rtl::OUStringToOString(sRoot+sPath, RTL_TEXTENCODING_UTF8).getStr(), nUIid);
+
+ osl::File aUIFile(sRoot + sPath);
osl::File::RC error = aUIFile.open(osl_File_OpenFlag_Read);
//good, use the preferred GtkBuilder xml
if (error == osl::File::E_None)
- return new VclBuilder(pWindow, sPath, rtl::OString::valueOf(nUIid));
+ return new VclBuilder(pWindow, sRoot, sPath, rtl::OString::valueOf(nUIid));
return NULL;
}
diff --git a/vcl/source/window/window2.cxx b/vcl/source/window/window2.cxx
index f760f130f423..9b51446260dd 100644
--- a/vcl/source/window/window2.cxx
+++ b/vcl/source/window/window2.cxx
@@ -1761,6 +1761,9 @@ void Window::queue_resize()
pParent->Resize();
}
+//We deliberately do not overwrite our maHelpId here
+//so that the .res loaded id is not overwritten
+//by the .ui loaded one
void Window::take_properties(Window &rOther)
{
if (!mpWindowImpl)
@@ -1791,7 +1794,6 @@ void Window::take_properties(Window &rOther)
mpWindowImpl->mnY = pWindowImpl->mnY;
mpWindowImpl->mnAbsScreenX = pWindowImpl->mnAbsScreenX;
mpWindowImpl->maPos = pWindowImpl->maPos;
- mpWindowImpl->maHelpId = pWindowImpl->maHelpId;
mpWindowImpl->maUniqId = pWindowImpl->maUniqId;
mpWindowImpl->maHelpText = pWindowImpl->maHelpText;
mpWindowImpl->maQuickHelpText = pWindowImpl->maQuickHelpText;