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 @@
class ListBox;
class NumericFormatter;
class PopupMenu;
class ScrollBar;
class VclMultiLineEdit;
......@@ -56,6 +57,18 @@ private:
};
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
{
OString m_sID;
......@@ -72,6 +85,7 @@ private:
typedef StringPair ButtonImageWidgetMap;
typedef StringPair TextBufferMap;
typedef StringPair WidgetAdjustmentMap;
typedef StringPair ButtonMenuMap;
struct ListStore
{
......@@ -112,6 +126,8 @@ private:
std::vector<ButtonImageWidgetMap> m_aButtonImageWidgetMaps;
StockMap m_aStockMap;
std::vector<ButtonMenuMap> m_aButtonMenuMaps;
Translations m_aTranslations;
std::map<Window*, Window*> m_aRedundantParentWidgets;
......@@ -131,6 +147,8 @@ private:
Window *get_by_name(OString sID);
void delete_by_name(OString sID);
PopupMenu *get_menu_by_name(OString sID);
class sortIntoBestTabTraversalOrder
: public std::binary_function<const Window*, const Window*, bool>
{
......@@ -168,6 +186,10 @@ public:
}
OString get_by_window(const Window *pWindow) const;
void delete_by_window(const Window *pWindow);
//Convert _ gtk markup to ~ vcl markup
static OString convertMnemonicMarkup(const OString &rIn);
private:
Window *insertObject(Window *pParent, const OString &rClass, const OString &rID,
stringmap &rProps, stringmap &rPangoAttributes);
......@@ -189,12 +211,19 @@ private:
void applyPackingProperty(Window *pCurrent, xmlreader::XmlReader &reader);
void collectProperty(xmlreader::XmlReader &reader, const OString &rID, stringmap &rVec);
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 handleRow(xmlreader::XmlReader &reader, const OString &rID, sal_Int32 nRowIndex);
void handleAdjustment(const OString &rID, stringmap &rProperties);
void handleTextBuffer(const OString &rID, stringmap &rProperties);
void handleTabChild(Window *pParent, xmlreader::XmlReader &reader);
void handleMenu(xmlreader::XmlReader &reader, const OString &rID);
PackingData get_window_packing_data(const Window *pWindow) const;
void set_window_packing_position(const Window *pWindow, sal_Int32 nPosition);
......
This diff is collapsed.
......@@ -28,7 +28,6 @@
#include <vcl/layout.hxx>
#include <vcl/timer.hxx>
#include <vcl/metric.hxx>
#include <vcl/mnemonic.hxx>
#include <vcl/virdev.hxx>
#include <vcl/window.hxx>
#include <vcl/scrbar.hxx>
......@@ -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)
{
if (rKey == "weight")
......@@ -1872,7 +1851,7 @@ bool Window::set_property(const OString &rKey, const OString &rValue)
(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")))
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