[Libreoffice-commits] .: Branch 'feature/cmclayout' - vcl/inc vcl/qa vcl/source

Caolán McNamara caolan at kemper.freedesktop.org
Tue Mar 27 08:32:33 PDT 2012


 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 <caolanm at 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);


More information about the Libreoffice-commits mailing list