[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