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

Caolán McNamara caolan at kemper.freedesktop.org
Wed Apr 11 03:56:45 PDT 2012


 scp2/source/ooo/file_ooo.scp          |   11 ++
 scp2/source/ooo/module_hidden_ooo.scp |    1 
 vcl/inc/vcl/layout.hxx                |   20 +++--
 vcl/qa/cppunit/builder/demo.ui        |  125 +++++++++++++++++++---------------
 vcl/source/window/builder.cxx         |   15 ++++
 vcl/source/window/layout.cxx          |   91 +++++++++++++++++-------
 6 files changed, 175 insertions(+), 88 deletions(-)

New commits:
commit 0d705463411ed1a5139a1f609cd276a353d1a9de
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Apr 11 11:45:33 2012 +0100

    add a GtkFrame to the demo

diff --git a/vcl/qa/cppunit/builder/demo.ui b/vcl/qa/cppunit/builder/demo.ui
index ed75074..c8dc618 100644
--- a/vcl/qa/cppunit/builder/demo.ui
+++ b/vcl/qa/cppunit/builder/demo.ui
@@ -51,69 +51,92 @@
           </packing>
         </child>
         <child>
-          <object class="GtkBox" id="box1">
+          <object class="GtkFrame" id="frame1">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="orientation">vertical</property>
-            <property name="spacing">6</property>
-            <property name="homogeneous">True</property>
+            <property name="label_xalign">0</property>
+            <property name="shadow_type">none</property>
             <child>
-              <object class="GtkLabel" id="label1">
+              <object class="GtkAlignment" id="alignment1">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">left</property>
+                <property name="left_padding">12</property>
+                <child>
+                  <object class="GtkBox" id="box1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
+                    <property name="spacing">6</property>
+                    <property name="homogeneous">True</property>
+                    <child>
+                      <object class="GtkLabel" id="label2">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">left</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label3">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">1</property>
+                        <property name="label" translatable="yes">right</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label6">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">center</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkEntry" id="entry1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">●</property>
+                        <property name="text" translatable="yes">an edit control</property>
+                        <property name="invisible_char_set">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">3</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
             </child>
-            <child>
-              <object class="GtkLabel" id="label2">
+            <child type="label">
+              <object class="GtkLabel" id="label1">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="xalign">1</property>
-                <property name="label" translatable="yes">right</property>
+                <property name="label" translatable="yes">Frame Label</property>
+                <property name="use_markup">True</property>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label3">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes">center</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">2</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="entry1">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="invisible_char">●</property>
-                <property name="text" translatable="yes">an edit control</property>
-                <property name="invisible_char_set">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">3</property>
-              </packing>
             </child>
           </object>
           <packing>
             <property name="expand">False</property>
             <property name="fill">True</property>
-            <property name="position">2</property>
+            <property name="position">1</property>
           </packing>
         </child>
         <child>
@@ -309,12 +332,6 @@
             <child>
               <placeholder/>
             </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
           </object>
           <packing>
             <property name="expand">True</property>
commit 5c3a8d8fb299d106332cb925d462aaae08586a11
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Apr 11 11:41:54 2012 +0100

    implement a basic VclFrame
    
    factor out common VclContainer pieces

diff --git a/vcl/inc/vcl/layout.hxx b/vcl/inc/vcl/layout.hxx
index fc7e0a1..cff021f 100644
--- a/vcl/inc/vcl/layout.hxx
+++ b/vcl/inc/vcl/layout.hxx
@@ -36,6 +36,9 @@ class VCL_DLLPUBLIC VclContainer : public Window
 {
 public:
     VclContainer(Window *pParent) : Window(pParent) {}
+    virtual Size GetOptimalSize(WindowSizeType eType) const;
+    using Window::SetPosSizePixel;
+    virtual void SetPosSizePixel(const Point& rNewPos, const Size& rNewSize);
 protected:
     virtual Size calculateRequisition() const = 0;
     virtual void setAllocation(const Size &rAllocation) = 0;
@@ -60,10 +63,6 @@ public:
     {
         Show();
     }
-public:
-    virtual Size GetOptimalSize(WindowSizeType eType) const;
-    using Window::SetPosSizePixel;
-    virtual void SetPosSizePixel(const Point& rNewPos, const Size& rNewSize);
 protected:
     virtual Size calculateRequisition() const;
     virtual void setAllocation(const Size &rAllocation);
@@ -313,15 +312,20 @@ public:
     {
         return m_nColumnSpacing;
     }
-public:
-    virtual Size GetOptimalSize(WindowSizeType eType) const;
-    using Window::SetPosSizePixel;
-    virtual void SetPosSizePixel(const Point& rNewPos, const Size& rNewSize);
 };
 
 VCL_DLLPUBLIC void setGridAttach(Window &rWidget, sal_Int32 nLeft, sal_Int32 nTop,
     sal_Int32 nWidth = 1, sal_Int32 nHeight = 1);
 
+class VCL_DLLPUBLIC VclFrame : public VclContainer
+{
+public:
+    VclFrame(Window *pParent) : VclContainer(pParent) {}
+protected:
+    virtual Size calculateRequisition() const;
+    virtual void setAllocation(const Size &rAllocation);
+};
+
 // retro-fitting utilities //
 
 //Get a Size which is large enough to contain all children with
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 98581bc..40ba994 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -71,6 +71,11 @@ Window *VclBuilder::makeObject(Window *pParent, const rtl::OString &name, bool b
     }
     else if (name.equalsL(RTL_CONSTASCII_STRINGPARAM("GtkBox")))
     {
+        //    <property name="visible">True</property>
+        //    <property name="can_focus">False</property>
+        //    <property name="orientation">vertical</property>
+        //    <property name="spacing">6</property>
+        //    <property name="homogeneous">True</property>
         if (bVertical)
             pWindow = new VclVBox(pParent);
         else
@@ -85,8 +90,18 @@ Window *VclBuilder::makeObject(Window *pParent, const rtl::OString &name, bool b
     }
     else if (name.equalsL(RTL_CONSTASCII_STRINGPARAM("GtkGrid")))
     {
+        //    <property name="row_spacing">4</property>
+        //    <property name="column_spacing">2</property>
+        //    <property name="row_homogeneous">True</property>
+        //    <property name="column_homogeneous">True</property>
         pWindow = new VclGrid(pParent);
     }
+    else if (name.equalsL(RTL_CONSTASCII_STRINGPARAM("GtkFrame")))
+    {
+        //    <property name="label_xalign">0</property>
+        //    <property name="shadow_type">none</property>
+        pWindow = new VclFrame(pParent);
+    }
     else if (name.equalsL(RTL_CONSTASCII_STRINGPARAM("GtkButton")))
     {
         pWindow = new PushButton(pParent, WB_CENTER|WB_VCENTER|WB_3DLOOK);
diff --git a/vcl/source/window/layout.cxx b/vcl/source/window/layout.cxx
index 9d2f2be..0764a8c 100644
--- a/vcl/source/window/layout.cxx
+++ b/vcl/source/window/layout.cxx
@@ -27,6 +27,20 @@
  */
 
 #include <vcl/layout.hxx>
+#include "window.h"
+
+Size VclContainer::GetOptimalSize(WindowSizeType eType) const
+{
+    if (eType == WINDOWSIZE_MAXIMUM)
+        return Window::GetOptimalSize(eType);
+    return calculateRequisition();
+}
+
+void VclContainer::SetPosSizePixel(const Point& rAllocPos, const Size& rAllocation)
+{
+    Window::SetPosSizePixel(rAllocPos, rAllocation);
+    setAllocation(rAllocation);
+}
 
 Size VclBox::calculateRequisition() const
 {
@@ -76,13 +90,6 @@ Size VclBox::calculateRequisition() const
     return aSize;
 }
 
-Size VclBox::GetOptimalSize(WindowSizeType eType) const
-{
-    if (eType == WINDOWSIZE_MAXIMUM)
-        return Window::GetOptimalSize(eType);
-    return calculateRequisition();
-}
-
 void VclBox::setAllocation(const Size &rAllocation)
 {
     sal_uInt16 nChildren = GetChildCount();
@@ -205,12 +212,6 @@ void VclBox::setAllocation(const Size &rAllocation)
     }
 }
 
-void VclBox::SetPosSizePixel(const Point& rAllocPos, const Size& rAllocation)
-{
-    Window::SetPosSizePixel(rAllocPos, rAllocation);
-    setAllocation(rAllocation);
-}
-
 #define DEFAULT_CHILD_INTERNAL_PAD_X 4
 #define DEFAULT_CHILD_INTERNAL_PAD_Y 0
 #define DEFAULT_CHILD_MIN_WIDTH 85
@@ -397,13 +398,6 @@ void VclGrid::calcMaxs(const array_type &A, std::vector<long> &rWidths, std::vec
     }
 }
 
-Size VclGrid::GetOptimalSize(WindowSizeType eType) const
-{
-    if (eType == WINDOWSIZE_MAXIMUM)
-        return Window::GetOptimalSize(eType);
-    return calculateRequisition();
-}
-
 Size VclGrid::calculateRequisition() const
 {
     array_type A = assembleGrid();
@@ -444,12 +438,6 @@ Size VclGrid::calculateRequisition() const
     return Size(nTotalWidth, nTotalHeight);
 }
 
-void VclGrid::SetPosSizePixel(const Point& rAllocPos, const Size& rAllocation)
-{
-    Window::SetPosSizePixel(rAllocPos, rAllocation);
-    setAllocation(rAllocation);
-}
-
 void VclGrid::setAllocation(const Size& rAllocation)
 {
     array_type A = assembleGrid();
@@ -523,6 +511,57 @@ void setGridAttach(Window &rWidget, sal_Int32 nLeft, sal_Int32 nTop, sal_Int32 n
     rWidget.setChildProperty<sal_Int32>(sHeight, nHeight);
 }
 
+//To-Do, hook a DecorationView into VclFrame ?
+
+Size VclFrame::calculateRequisition() const
+{
+    Size aRet(0, 0);
+
+    WindowImpl* pWindowImpl = ImplGetWindowImpl();
+
+    Window *pChild = pWindowImpl->mpLastChild;
+    Window *pLabel = pChild != pWindowImpl->mpFirstChild ? pWindowImpl->mpFirstChild : NULL;
+
+    if (pChild && pChild->IsVisible())
+        aRet = pChild->GetOptimalSize(WINDOWSIZE_PREFERRED);
+
+    //To-Do, padding, borders, from style/theme
+    if (pLabel && pLabel->IsVisible())
+    {
+        Size aLabelSize = pLabel->GetOptimalSize(WINDOWSIZE_PREFERRED);
+        aRet.Height() += aLabelSize.Height();
+        aRet.Width() = std::max(aLabelSize.Width(), aRet.Width());
+    }
+
+    return aRet;
+}
+
+void VclFrame::setAllocation(const Size &rAllocation)
+{
+    Size aAllocation(rAllocation);
+    Point aChildPos(0, 0);
+
+    WindowImpl* pWindowImpl = ImplGetWindowImpl();
+
+    //The label widget is the last (of two) children
+    Window *pChild = pWindowImpl->mpLastChild;
+    Window *pLabel = pChild != pWindowImpl->mpFirstChild ? pWindowImpl->mpFirstChild : NULL;
+
+    if (pLabel && pLabel->IsVisible())
+    {
+        //To-Do, borders etc.
+        Size aLabelSize = pLabel->GetOptimalSize(WINDOWSIZE_PREFERRED);
+        aLabelSize.Height() = std::min(aLabelSize.Height(), aAllocation.Height());
+        aLabelSize.Width() = std::min(aLabelSize.Width(), aAllocation.Width());
+        pLabel->SetPosSizePixel(aChildPos, aLabelSize);
+        aAllocation.Height() -= aLabelSize.Height();
+        aChildPos.Y() += aLabelSize.Height();
+    }
+
+    if (pChild && pChild->IsVisible())
+        pChild->SetPosSizePixel(aChildPos, aAllocation);
+}
+
 Size getLegacyBestSizeForChildren(const Window &rWindow)
 {
     Rectangle aBounds;
commit 6a2ed30cb3369520f69be9ec2fb0a70b2ba477e2
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Apr 11 11:33:09 2012 +0100

    install ui-previewer

diff --git a/scp2/source/ooo/file_ooo.scp b/scp2/source/ooo/file_ooo.scp
index 3327978..13cc69d 100644
--- a/scp2/source/ooo/file_ooo.scp
+++ b/scp2/source/ooo/file_ooo.scp
@@ -135,6 +135,17 @@ File gid_File_Bin_Gengal
   #endif
 End
 
+File gid_File_Bin_UIPreviewer
+    BIN_FILE_BODY;
+    Dir = gid_Brand_Dir_Program;
+    Styles = (PACKED);
+  #ifdef UNX
+    Name = "ui-previewer";
+  #else
+    Name = "ui-previewer.exe";
+  #endif
+End
+
 #ifdef UNX
 
 File gid_File_Script_Gengal
diff --git a/scp2/source/ooo/module_hidden_ooo.scp b/scp2/source/ooo/module_hidden_ooo.scp
index 438dcde..62a8808 100644
--- a/scp2/source/ooo/module_hidden_ooo.scp
+++ b/scp2/source/ooo/module_hidden_ooo.scp
@@ -93,6 +93,7 @@ Module gid_Module_Root_Files_2
  	gid_File_Profile_Gengal,
 	gid_File_Bin_Spadmin_Bin,
 	gid_File_Bin_Uri_Encode,
+	gid_File_Bin_UIPreviewer,
 	gid_File_Exe_Nsplugin,
 	gid_File_Lib_Npsoplugin,
         gid_File_Lib_Soffice,


More information about the Libreoffice-commits mailing list