vcl/inc/vcl/builder.hxx | 4 + vcl/qa/cppunit/builder/demo.ui | 39 +++++++++++++++ vcl/source/window/builder.cxx | 104 ++++++++++++++++++++++++++++++++--------- 3 files changed, 125 insertions(+), 22 deletions(-)
New commits: commit b3a68ecde53c7354cac960ebabaefb8dcb85baab Author: Caolán McNamara <caol...@redhat.com> Date: Tue Mar 27 16:32:28 2012 +0100 import expand/fill etc. diff --git a/vcl/inc/vcl/builder.hxx b/vcl/inc/vcl/builder.hxx index 9e7197a..588505a 100644 --- a/vcl/inc/vcl/builder.hxx +++ b/vcl/inc/vcl/builder.hxx @@ -48,7 +48,9 @@ private: Window *makeObject(Window *pParent, const rtl::OString &rClass, bool bVertical=false); void handleChild(Window *pParent, xmlreader::XmlReader &reader); - void handleObject(Window *pParent, xmlreader::XmlReader &reader); + Window* handleObject(Window *pParent, xmlreader::XmlReader &reader); + void handlePacking(Window *pCurrent, xmlreader::XmlReader &reader); + void applyPackingProperty(Window *pCurrent, xmlreader::XmlReader &reader); void collectProperty(xmlreader::XmlReader &reader, stringmap &rVec); }; diff --git a/vcl/qa/cppunit/builder/demo.ui b/vcl/qa/cppunit/builder/demo.ui index e77dde1..786ad76 100644 --- a/vcl/qa/cppunit/builder/demo.ui +++ b/vcl/qa/cppunit/builder/demo.ui @@ -11,6 +11,45 @@ <property name="orientation">vertical</property> <property name="spacing">2</property> <child> + <object class="GtkBox" id="box3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkButton" id="button4"> + <property name="label" translatable="yes">EXPAND</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button5"> + <property name="label" translatable="yes">FILL</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> <object class="GtkBox" id="box2"> <property name="visible">True</property> <property name="can_focus">False</property> diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index b8d1ec9..cbfc274 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -28,10 +28,12 @@ #include <vcl/builder.hxx> #include <vcl/button.hxx> +#include <vcl/combobox.hxx> #include <vcl/dialog.hxx> #include <vcl/edit.hxx> #include <vcl/fixed.hxx> #include <vcl/layout.hxx> +#include <vcl/spin.hxx> VclBuilder::VclBuilder(Window *pParent, rtl::OUString sUri) { @@ -93,6 +95,14 @@ Window *VclBuilder::makeObject(Window *pParent, const rtl::OString &name, bool b { pWindow = new CheckBox(pParent, WB_CENTER|WB_VCENTER); } + else if (name.equalsL(RTL_CONSTASCII_STRINGPARAM("GtkSpinButton"))) + { + pWindow = new SpinButton(pParent, WB_CENTER|WB_VCENTER); + } + else if (name.equalsL(RTL_CONSTASCII_STRINGPARAM("GtkComboBox"))) + { + pWindow = new ComboBox(pParent, WB_CENTER|WB_VCENTER); + } else if (name.equalsL(RTL_CONSTASCII_STRINGPARAM("GtkLabel"))) { pWindow = new FixedText(pParent, WB_CENTER|WB_VCENTER); @@ -164,15 +174,6 @@ Window *VclBuilder::insertObject(Window *pParent, const rtl::OString &rClass, st } else if (rKey.equalsL(RTL_CONSTASCII_STRINGPARAM("text"))) pCurrentChild->SetText(rtl::OStringToOUString(rValue, RTL_TEXTENCODING_UTF8)); - else if - ( - rKey.equalsL(RTL_CONSTASCII_STRINGPARAM("expand")) || - rKey.equalsL(RTL_CONSTASCII_STRINGPARAM("fill")) - ) - { - bool bTrue = (rValue[0] == 't' || rValue[0] == 'T' || rValue[0] == '1'); - pCurrentChild->setChildProperty(rKey, bTrue); - } else fprintf(stderr, "unhandled property %s\n", rKey.getStr()); } @@ -191,6 +192,8 @@ void VclBuilder::handleChild(Window *pParent, xmlreader::XmlReader &reader) { int nLevel = 1; + Window *pCurrentChild = NULL; + while(1) { xmlreader::Span name; @@ -202,7 +205,11 @@ void VclBuilder::handleChild(Window *pParent, xmlreader::XmlReader &reader) { if (name.equals(RTL_CONSTASCII_STRINGPARAM("object"))) { - handleObject(pParent, reader); + pCurrentChild = handleObject(pParent, reader); + } + else if (name.equals(RTL_CONSTASCII_STRINGPARAM("packing"))) + { + handlePacking(pCurrentChild, reader); } else ++nLevel; @@ -221,7 +228,7 @@ void VclBuilder::handleChild(Window *pParent, xmlreader::XmlReader &reader) } } -void VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader) +Window* VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader) { rtl::OString sClass; @@ -230,8 +237,6 @@ void VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader) while (reader.nextAttribute(&nsId, &name)) { - rtl::OString sFoo(name.begin, name.length); - if (name.equals(RTL_CONSTASCII_STRINGPARAM("class"))) { name = reader.getAttributeValue(false); @@ -252,10 +257,6 @@ void VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader) if (res == xmlreader::XmlReader::RESULT_DONE) break; - rtl::OString sFoo(name.begin, name.length); - - fprintf(stderr, "level tag %d %s\n", nLevel, sFoo.getStr()); - if (res == xmlreader::XmlReader::RESULT_BEGIN) { if (name.equals(RTL_CONSTASCII_STRINGPARAM("child"))) @@ -282,20 +283,81 @@ void VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader) } if (!pCurrentChild) - insertObject(pParent, sClass, aProperties); + pCurrentChild = insertObject(pParent, sClass, aProperties); - fprintf(stderr, "finished %s\n", sClass.getStr()); + return pCurrentChild; } -void VclBuilder::collectProperty(xmlreader::XmlReader &reader, stringmap &rMap) +void VclBuilder::handlePacking(Window *pCurrent, xmlreader::XmlReader &reader) +{ + xmlreader::Span name; + int nsId; + + int nLevel = 1; + + while(1) + { + xmlreader::XmlReader::Result res = reader.nextItem( + xmlreader::XmlReader::TEXT_NONE, &name, &nsId); + + if (res == xmlreader::XmlReader::RESULT_DONE) + break; + + if (res == xmlreader::XmlReader::RESULT_BEGIN) + { + ++nLevel; + if (name.equals(RTL_CONSTASCII_STRINGPARAM("property"))) + applyPackingProperty(pCurrent, reader); + } + + if (res == xmlreader::XmlReader::RESULT_END) + { + --nLevel; + } + + if (!nLevel) + break; + } +} + +void VclBuilder::applyPackingProperty(Window *pCurrent, + xmlreader::XmlReader &reader) { xmlreader::Span name; int nsId; + if (!pCurrent) + return; + while (reader.nextAttribute(&nsId, &name)) { - rtl::OString sFoo(name.begin, name.length); + if (name.equals(RTL_CONSTASCII_STRINGPARAM("name"))) + { + name = reader.getAttributeValue(false); + rtl::OString sKey(name.begin, name.length); + reader.nextItem( + xmlreader::XmlReader::TEXT_NORMALIZED, &name, &nsId); + rtl::OString sValue(name.begin, name.length); + + if ( sKey.equalsL(RTL_CONSTASCII_STRINGPARAM("expand")) || + sKey.equalsL(RTL_CONSTASCII_STRINGPARAM("fill")) ) + { + bool bTrue = (sValue[0] == 't' || sValue[0] == 'T' || sValue[0] == '1'); + pCurrent->setChildProperty(sKey, bTrue); + } + else + fprintf(stderr, "unknown packing %s\n", sKey.getStr()); + } + } +} + +void VclBuilder::collectProperty(xmlreader::XmlReader &reader, stringmap &rMap) +{ + xmlreader::Span name; + int nsId; + while (reader.nextAttribute(&nsId, &name)) + { if (name.equals(RTL_CONSTASCII_STRINGPARAM("name"))) { name = reader.getAttributeValue(false);
_______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits