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

add popup menu support to .ui loader

and hack up a mechanism to support menubuttons and map
the popups to the menubuttons

Change-Id: I6f3bd0e83b2c55f71aa85924fdc32d3a73ce0197
üst 89d3780b
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
class ListBox; class ListBox;
class NumericFormatter; class NumericFormatter;
class PopupMenu;
class ScrollBar; class ScrollBar;
class VclMultiLineEdit; class VclMultiLineEdit;
...@@ -56,6 +57,18 @@ private: ...@@ -56,6 +57,18 @@ private:
}; };
std::vector<WinAndId> m_aChildren; std::vector<WinAndId> m_aChildren;
struct MenuAndId
{
OString m_sID;
PopupMenu *m_pMenu;
MenuAndId(const OString &rId, PopupMenu *pMenu)
: m_sID(rId)
, m_pMenu(pMenu)
{
}
};
std::vector<MenuAndId> m_aMenus;
struct StringPair struct StringPair
{ {
OString m_sID; OString m_sID;
...@@ -72,6 +85,7 @@ private: ...@@ -72,6 +85,7 @@ private:
typedef StringPair ButtonImageWidgetMap; typedef StringPair ButtonImageWidgetMap;
typedef StringPair TextBufferMap; typedef StringPair TextBufferMap;
typedef StringPair WidgetAdjustmentMap; typedef StringPair WidgetAdjustmentMap;
typedef StringPair ButtonMenuMap;
struct ListStore struct ListStore
{ {
...@@ -112,6 +126,8 @@ private: ...@@ -112,6 +126,8 @@ private:
std::vector<ButtonImageWidgetMap> m_aButtonImageWidgetMaps; std::vector<ButtonImageWidgetMap> m_aButtonImageWidgetMaps;
StockMap m_aStockMap; StockMap m_aStockMap;
std::vector<ButtonMenuMap> m_aButtonMenuMaps;
Translations m_aTranslations; Translations m_aTranslations;
std::map<Window*, Window*> m_aRedundantParentWidgets; std::map<Window*, Window*> m_aRedundantParentWidgets;
...@@ -131,6 +147,8 @@ private: ...@@ -131,6 +147,8 @@ private:
Window *get_by_name(OString sID); Window *get_by_name(OString sID);
void delete_by_name(OString sID); void delete_by_name(OString sID);
PopupMenu *get_menu_by_name(OString sID);
class sortIntoBestTabTraversalOrder class sortIntoBestTabTraversalOrder
: public std::binary_function<const Window*, const Window*, bool> : public std::binary_function<const Window*, const Window*, bool>
{ {
...@@ -168,6 +186,10 @@ public: ...@@ -168,6 +186,10 @@ public:
} }
OString get_by_window(const Window *pWindow) const; OString get_by_window(const Window *pWindow) const;
void delete_by_window(const Window *pWindow); void delete_by_window(const Window *pWindow);
//Convert _ gtk markup to ~ vcl markup
static OString convertMnemonicMarkup(const OString &rIn);
private: private:
Window *insertObject(Window *pParent, const OString &rClass, const OString &rID, Window *insertObject(Window *pParent, const OString &rClass, const OString &rID,
stringmap &rProps, stringmap &rPangoAttributes); stringmap &rProps, stringmap &rPangoAttributes);
...@@ -189,12 +211,19 @@ private: ...@@ -189,12 +211,19 @@ private:
void applyPackingProperty(Window *pCurrent, xmlreader::XmlReader &reader); void applyPackingProperty(Window *pCurrent, xmlreader::XmlReader &reader);
void collectProperty(xmlreader::XmlReader &reader, const OString &rID, stringmap &rVec); void collectProperty(xmlreader::XmlReader &reader, const OString &rID, stringmap &rVec);
void collectPangoAttribute(xmlreader::XmlReader &reader, stringmap &rMap); void collectPangoAttribute(xmlreader::XmlReader &reader, stringmap &rMap);
void collectAccelerator(xmlreader::XmlReader &reader, stringmap &rMap);
void insertMenuObject(PopupMenu *pParent, const OString &rClass, const OString &rID,
stringmap &rProps, stringmap &rAccels);
void handleMenuChild(PopupMenu *pParent, xmlreader::XmlReader &reader);
void handleMenuObject(PopupMenu *pParent, xmlreader::XmlReader &reader);
void handleListStore(xmlreader::XmlReader &reader, const OString &rID); void handleListStore(xmlreader::XmlReader &reader, const OString &rID);
void handleRow(xmlreader::XmlReader &reader, const OString &rID, sal_Int32 nRowIndex); void handleRow(xmlreader::XmlReader &reader, const OString &rID, sal_Int32 nRowIndex);
void handleAdjustment(const OString &rID, stringmap &rProperties); void handleAdjustment(const OString &rID, stringmap &rProperties);
void handleTextBuffer(const OString &rID, stringmap &rProperties); void handleTextBuffer(const OString &rID, stringmap &rProperties);
void handleTabChild(Window *pParent, xmlreader::XmlReader &reader); void handleTabChild(Window *pParent, xmlreader::XmlReader &reader);
void handleMenu(xmlreader::XmlReader &reader, const OString &rID);
PackingData get_window_packing_data(const Window *pWindow) const; PackingData get_window_packing_data(const Window *pWindow) const;
void set_window_packing_position(const Window *pWindow, sal_Int32 nPosition); void set_window_packing_position(const Window *pWindow, sal_Int32 nPosition);
......
This diff is collapsed.
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
#include <vcl/layout.hxx> #include <vcl/layout.hxx>
#include <vcl/timer.hxx> #include <vcl/timer.hxx>
#include <vcl/metric.hxx> #include <vcl/metric.hxx>
#include <vcl/mnemonic.hxx>
#include <vcl/virdev.hxx> #include <vcl/virdev.hxx>
#include <vcl/window.hxx> #include <vcl/window.hxx>
#include <vcl/scrbar.hxx> #include <vcl/scrbar.hxx>
...@@ -1797,26 +1796,6 @@ namespace ...@@ -1797,26 +1796,6 @@ namespace
} }
} }
namespace
{
OString convertMnemonicMarkup(const OString &rIn)
{
OStringBuffer aRet(rIn);
for (sal_Int32 nI = 0; nI < aRet.getLength(); ++nI)
{
if (aRet[nI] == '_')
{
if (aRet[nI+1] != '_')
aRet[nI] = MNEMONIC_CHAR;
else
aRet.remove(nI, 1);
++nI;
}
}
return aRet.makeStringAndClear();
}
}
bool Window::set_font_attribute(const OString &rKey, const OString &rValue) bool Window::set_font_attribute(const OString &rKey, const OString &rValue)
{ {
if (rKey == "weight") if (rKey == "weight")
...@@ -1872,7 +1851,7 @@ bool Window::set_property(const OString &rKey, const OString &rValue) ...@@ -1872,7 +1851,7 @@ bool Window::set_property(const OString &rKey, const OString &rValue)
(rKey.equalsL(RTL_CONSTASCII_STRINGPARAM("text"))) (rKey.equalsL(RTL_CONSTASCII_STRINGPARAM("text")))
) )
{ {
SetText(OStringToOUString(convertMnemonicMarkup(rValue), RTL_TEXTENCODING_UTF8)); SetText(OStringToOUString(VclBuilder::convertMnemonicMarkup(rValue), RTL_TEXTENCODING_UTF8));
} }
else if (rKey.equalsL(RTL_CONSTASCII_STRINGPARAM("visible"))) else if (rKey.equalsL(RTL_CONSTASCII_STRINGPARAM("visible")))
Show(toBool(rValue)); Show(toBool(rValue));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment