[Libreoffice-commits] .: 2 commits - padmin/Module_padmin.mk padmin/source padmin/uiconfig padmin/UI_spa.mk solenv/bin vcl/inc vcl/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Dec 14 07:44:33 PST 2012


 padmin/Module_padmin.mk                 |    1 
 padmin/UI_spa.mk                        |   16 +
 padmin/source/prtsetup.cxx              |  113 +++++++-----
 padmin/source/prtsetup.hxx              |   27 ---
 padmin/source/rtsetup.hrc               |   12 -
 padmin/source/rtsetup.src               |  101 -----------
 padmin/uiconfig/ui/printerdevicepage.ui |  208 +++++++++++++++++++++++
 padmin/uiconfig/ui/printerproperties.ui |  286 ++++++++------------------------
 solenv/bin/uilangfilter.xslt            |   15 +
 vcl/inc/vcl/builder.hxx                 |    7 
 vcl/source/control/tabctrl.cxx          |    3 
 vcl/source/window/builder.cxx           |   89 +++++++++
 12 files changed, 473 insertions(+), 405 deletions(-)

New commits:
commit 00427faebbe66dde8bd2253e67b19e96f982fe27
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri Dec 14 14:54:24 2012 +0000

    split out printer device page and adapt code to .ui
    
    Change-Id: I7eacd837aacba452ab55ce707c3c032b2efadfb3

diff --git a/padmin/Module_padmin.mk b/padmin/Module_padmin.mk
index 53c54b4..c8d024d 100644
--- a/padmin/Module_padmin.mk
+++ b/padmin/Module_padmin.mk
@@ -27,6 +27,7 @@ $(eval $(call gb_Module_add_targets,padmin,\
     Library_spa \
     AllLangResTarget_spa \
     Package_inc \
+    UI_spa \
 ))
 endif
 
diff --git a/padmin/UI_spa.mk b/padmin/UI_spa.mk
new file mode 100644
index 0000000..70008c2
--- /dev/null
+++ b/padmin/UI_spa.mk
@@ -0,0 +1,16 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_UI_UI,spa))
+
+$(eval $(call gb_UI_add_uifiles,spa,\
+	padmin/uiconfig/ui/printerdevicepage \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/padmin/source/prtsetup.cxx b/padmin/source/prtsetup.cxx
index 3862cde..6b398f1 100644
--- a/padmin/source/prtsetup.cxx
+++ b/padmin/source/prtsetup.cxx
@@ -94,8 +94,7 @@ RTSDialog::RTSDialog( const PrinterInfo& rJobData, const String& rPrinter, bool
         m_pOtherPage( NULL ),
         m_pFontSubstPage( NULL ),
         m_pCommandPage( NULL ),
-        m_aInvalidString( PaResId( RID_RTS_RTSDIALOG_INVALID_TXT ) ),
-        m_aFromDriverString( PaResId( RID_RTS_RTSDIALOG_FROMDRIVER_TXT ) )
+        m_aInvalidString( PaResId( RID_RTS_RTSDIALOG_INVALID_TXT ) )
 {
     FreeResource();
 
@@ -350,37 +349,28 @@ IMPL_LINK( RTSPaperPage, SelectHdl, ListBox*, pBox )
  * RTSDevicePage
  */
 
-RTSDevicePage::RTSDevicePage( RTSDialog* pParent ) :
-        TabPage( & pParent->m_aTabControl, PaResId( RID_RTS_DEVICEPAGE ) ),
+RTSDevicePage::RTSDevicePage( RTSDialog* pParent )
+    : TabPage(&pParent->m_aTabControl, "PrinterDevicePage", "spa/ui/printerdevicepage.ui" )
+    , m_pParent( pParent )
+{
+    get(m_pPPDKeyBox, "options");
+    get(m_pPPDValueBox, "values");
 
-        m_pParent( pParent ),
+    m_pPPDKeyBox->SetDropDownLineCount(12);
+    m_pPPDValueBox->SetDropDownLineCount(12);
 
-        m_aSpaceColor( PaResId( RID_RTS_DEVICE_COLOR_TXT ) ),
-        m_aSpaceGray( PaResId( RID_RTS_DEVICE_GRAY_TXT ) ),
-        m_aPPDKeyText( this, PaResId( RID_RTS_DEVICE_PPDKEY_TXT ) ),
-        m_aPPDKeyBox( this, PaResId( RID_RTS_DEVICE_PPDKEY_BOX ) ),
-        m_aPPDValueText( this, PaResId( RID_RTS_DEVICE_PPDVALUE_TXT ) ),
-        m_aPPDValueBox( this, PaResId( RID_RTS_DEVICE_PPDVALUE_BOX ) ),
-        m_aLevelText( this, PaResId( RID_RTS_DEVICE_PRINTLANG_TXT ) ),
-        m_aLevelBox( this, PaResId( RID_RTS_DEVICE_PRINTLANG_BOX ) ),
-        m_aSpaceText( this, PaResId( RID_RTS_DEVICE_SPACE_TXT ) ),
-        m_aSpaceBox( this, PaResId( RID_RTS_DEVICE_SPACE_BOX ) ),
-        m_aDepthText( this, PaResId( RID_RTS_DEVICE_DEPTH_TXT ) ),
-        m_aDepthBox( this, PaResId( RID_RTS_DEVICE_DEPTH_BOX ) )
-{
-    FreeResource();
+    get(m_pLevelBox, "level");
+    get(m_pSpaceBox, "colorspace");
+    get(m_pDepthBox, "colordepth");
 
-    m_aPPDKeyBox.SetSelectHdl( LINK( this, RTSDevicePage, SelectHdl ) );
-    m_aPPDValueBox.SetSelectHdl( LINK( this, RTSDevicePage, SelectHdl ) );
+    m_pPPDKeyBox->SetSelectHdl( LINK( this, RTSDevicePage, SelectHdl ) );
+    m_pPPDValueBox->SetSelectHdl( LINK( this, RTSDevicePage, SelectHdl ) );
 
-    m_aSpaceBox.InsertEntry( m_pParent->m_aFromDriverString );
-    m_aSpaceBox.InsertEntry( m_aSpaceColor );
-    m_aSpaceBox.InsertEntry( m_aSpaceGray );
     switch( m_pParent->m_aJobData.m_nColorDevice )
     {
-        case -1: m_aSpaceBox.SelectEntry( m_aSpaceGray );break;
-        case  0: m_aSpaceBox.SelectEntry( m_pParent->m_aFromDriverString );break;
-        case  1: m_aSpaceBox.SelectEntry( m_aSpaceColor );break;
+        case  0: m_pSpaceBox->SelectEntryPos(0);break;
+        case  1: m_pSpaceBox->SelectEntryPos(1);break;
+        case -1: m_pSpaceBox->SelectEntryPos(2);break;
     }
 
     sal_uLong nLevelEntryData = 0; //automatic
@@ -397,21 +387,24 @@ RTSDevicePage::RTSDevicePage( RTSDialog* pParent ) :
 
     assert(nLevelEntryData != 0 || bAutoIsPDF == m_pParent->m_aJobData.m_nPDFDevice);
 
-    OUString sStr = m_aLevelBox.GetEntry(0);
-    m_aLevelBox.InsertEntry(sStr.replaceAll("%s", bAutoIsPDF ? m_aLevelBox.GetEntry(5) : m_aLevelBox.GetEntry(1)), 0);
-    m_aLevelBox.SetEntryData(0, m_aLevelBox.GetEntryData(1));
-    m_aLevelBox.RemoveEntry(1);
+    OUString sStr = m_pLevelBox->GetEntry(0);
+    m_pLevelBox->InsertEntry(sStr.replaceAll("%s", bAutoIsPDF ? m_pLevelBox->GetEntry(5) : m_pLevelBox->GetEntry(1)), 0);
+    m_pLevelBox->SetEntryData(0, m_pLevelBox->GetEntryData(1));
+    m_pLevelBox->RemoveEntry(1);
 
-    for( sal_uInt16 i = 0; i < m_aLevelBox.GetEntryCount(); i++ )
+    for( sal_uInt16 i = 0; i < m_pLevelBox->GetEntryCount(); i++ )
     {
-        if( (sal_uLong)m_aLevelBox.GetEntryData( i ) == nLevelEntryData )
+        if( (sal_uLong)m_pLevelBox->GetEntryData( i ) == nLevelEntryData )
         {
-            m_aLevelBox.SelectEntryPos( i );
+            m_pLevelBox->SelectEntryPos( i );
             break;
         }
     }
 
-    m_aDepthBox.SelectEntry( String::CreateFromInt32( m_pParent->m_aJobData.m_nColorDepth ).AppendAscii( " Bit" ) );
+    if (m_pParent->m_aJobData.m_nColorDepth == 8)
+        m_pDepthBox->SelectEntryPos(0);
+    else if (m_pParent->m_aJobData.m_nColorDepth == 24)
+        m_pDepthBox->SelectEntryPos(1);
 
     // fill ppd boxes
     if( m_pParent->m_aJobData.m_pParser )
@@ -427,8 +420,8 @@ RTSDevicePage::RTSDevicePage( RTSDialog* pParent ) :
                 )
             {
                 String aEntry( m_pParent->m_aJobData.m_pParser->translateKey( pKey->getKey() ) );
-                sal_uInt16 nPos = m_aPPDKeyBox.InsertEntry( aEntry );
-                m_aPPDKeyBox.SetEntryData( nPos, (void*)pKey );
+                sal_uInt16 nPos = m_pPPDKeyBox->InsertEntry( aEntry );
+                m_pPPDKeyBox->SetEntryData( nPos, (void*)pKey );
             }
         }
     }
@@ -446,11 +439,35 @@ void RTSDevicePage::update()
 {
 }
 
+sal_uLong RTSDevicePage::getDepth()
+{
+    sal_uInt16 nSelectPos = m_pDepthBox->GetSelectEntryPos();
+    if (nSelectPos == 0)
+        return 8;
+    else
+        return 24;
+}
+
+sal_uLong RTSDevicePage::getColorDevice()
+{
+    sal_uInt16 nSelectPos = m_pSpaceBox->GetSelectEntryPos();
+    switch (nSelectPos)
+    {
+        case 0:
+            return 0;
+        case 1:
+            return 1;
+        case 2:
+            return -1;
+    }
+    return 0;
+}
+
 // ------------------------------------------------------------------
 
 sal_uLong RTSDevicePage::getLevel()
 {
-    sal_uLong nLevel = (sal_uLong)m_aLevelBox.GetEntryData( m_aLevelBox.GetSelectEntryPos() );
+    sal_uLong nLevel = (sal_uLong)m_pLevelBox->GetEntryData( m_pLevelBox->GetSelectEntryPos() );
     if (nLevel == 0)
         return 0;   //automatic
     return nLevel < 10 ? nLevel-1 : 0;
@@ -460,7 +477,7 @@ sal_uLong RTSDevicePage::getLevel()
 
 sal_uLong RTSDevicePage::getPDFDevice()
 {
-    sal_uLong nLevel = (sal_uLong)m_aLevelBox.GetEntryData( m_aLevelBox.GetSelectEntryPos() );
+    sal_uLong nLevel = (sal_uLong)m_pLevelBox->GetEntryData( m_pLevelBox->GetSelectEntryPos() );
     if (nLevel > 9)
         return 2;   //explictly PDF
     else if (nLevel == 0)
@@ -472,15 +489,15 @@ sal_uLong RTSDevicePage::getPDFDevice()
 
 IMPL_LINK( RTSDevicePage, SelectHdl, ListBox*, pBox )
 {
-    if( pBox == &m_aPPDKeyBox )
+    if( pBox == m_pPPDKeyBox )
     {
-        const PPDKey* pKey = (PPDKey*)m_aPPDKeyBox.GetEntryData( m_aPPDKeyBox.GetSelectEntryPos() );
+        const PPDKey* pKey = (PPDKey*)m_pPPDKeyBox->GetEntryData( m_pPPDKeyBox->GetSelectEntryPos() );
         FillValueBox( pKey );
     }
-    else if( pBox == &m_aPPDValueBox )
+    else if( pBox == m_pPPDValueBox )
     {
-        const PPDKey* pKey = (PPDKey*)m_aPPDKeyBox.GetEntryData( m_aPPDKeyBox.GetSelectEntryPos() );
-        const PPDValue* pValue = (PPDValue*)m_aPPDValueBox.GetEntryData( m_aPPDValueBox.GetSelectEntryPos() );
+        const PPDKey* pKey = (PPDKey*)m_pPPDKeyBox->GetEntryData( m_pPPDKeyBox->GetSelectEntryPos() );
+        const PPDValue* pValue = (PPDValue*)m_pPPDValueBox->GetEntryData( m_pPPDValueBox->GetSelectEntryPos() );
         if( pKey && pValue )
         {
             m_pParent->m_aJobData.m_aContext.setValue( pKey, pValue );
@@ -494,7 +511,7 @@ IMPL_LINK( RTSDevicePage, SelectHdl, ListBox*, pBox )
 
 void RTSDevicePage::FillValueBox( const PPDKey* pKey )
 {
-    m_aPPDValueBox.Clear();
+    m_pPPDValueBox->Clear();
 
     if( ! pKey )
         return;
@@ -507,12 +524,12 @@ void RTSDevicePage::FillValueBox( const PPDKey* pKey )
             m_pParent->m_aJobData.m_pParser )
         {
             String aEntry( m_pParent->m_aJobData.m_pParser->translateOption( pKey->getKey(), pValue->m_aOption ) );
-            sal_uInt16 nPos = m_aPPDValueBox.InsertEntry( aEntry );
-            m_aPPDValueBox.SetEntryData( nPos, (void*)pValue );
+            sal_uInt16 nPos = m_pPPDValueBox->InsertEntry( aEntry );
+            m_pPPDValueBox->SetEntryData( nPos, (void*)pValue );
         }
     }
     pValue = m_pParent->m_aJobData.m_aContext.getValue( pKey );
-    m_aPPDValueBox.SelectEntryPos( m_aPPDValueBox.GetEntryPos( (void*)pValue ) );
+    m_pPPDValueBox->SelectEntryPos( m_pPPDValueBox->GetEntryPos( (void*)pValue ) );
 }
 
 // --------------------------------------------------------------------------
diff --git a/padmin/source/prtsetup.hxx b/padmin/source/prtsetup.hxx
index feaea88..9e8d098 100644
--- a/padmin/source/prtsetup.hxx
+++ b/padmin/source/prtsetup.hxx
@@ -68,7 +68,6 @@ class RTSDialog : public TabDialog
 
     // some resources
     String                  m_aInvalidString;
-    String                  m_aFromDriverString;
 
     DECL_LINK( ActivatePage, TabControl* );
     DECL_LINK( ClickButton, Button* );
@@ -115,20 +114,12 @@ class RTSDevicePage : public TabPage
     String              m_aSpaceColor;
     String              m_aSpaceGray;
 
-    FixedText           m_aPPDKeyText;
-    ListBox             m_aPPDKeyBox;
+    ListBox*            m_pPPDKeyBox;
+    ListBox*            m_pPPDValueBox;
 
-    FixedText           m_aPPDValueText;
-    ListBox             m_aPPDValueBox;
-
-    FixedText           m_aLevelText;
-    ListBox             m_aLevelBox;
-
-    FixedText           m_aSpaceText;
-    ListBox             m_aSpaceBox;
-
-    FixedText           m_aDepthText;
-    ListBox             m_aDepthBox;
+    ListBox*            m_pLevelBox;
+    ListBox*            m_pSpaceBox;
+    ListBox*            m_pDepthBox;
 
     void FillValueBox( const ::psp::PPDKey* );
 
@@ -141,12 +132,8 @@ public:
 
     sal_uLong getLevel();
     sal_uLong getPDFDevice();
-    sal_uLong getDepth() { return m_aDepthBox.GetSelectEntry().ToInt32(); }
-    sal_uLong getColorDevice()
-    {
-        String aSpace( m_aSpaceBox.GetSelectEntry() );
-        return aSpace == m_aSpaceColor ? 1 : ( aSpace == m_aSpaceGray ? -1 : 0 );
-    }
+    sal_uLong getDepth();
+    sal_uLong getColorDevice();
 };
 
 class RTSOtherPage : public TabPage
diff --git a/padmin/source/rtsetup.hrc b/padmin/source/rtsetup.hrc
index ffb26dd..75bf2f9 100644
--- a/padmin/source/rtsetup.hrc
+++ b/padmin/source/rtsetup.hrc
@@ -38,18 +38,6 @@
 #define RID_RTS_OTHER_DEFAULT_BTN           11
 
 #define RID_RTS_DEVICEPAGE                  4003
-#define RID_RTS_DEVICE_COLOR_TXT            1
-#define RID_RTS_DEVICE_GRAY_TXT             2
-#define RID_RTS_DEVICE_PPDKEY_TXT           3
-#define RID_RTS_DEVICE_PPDKEY_BOX           4
-#define RID_RTS_DEVICE_PPDVALUE_TXT         5
-#define RID_RTS_DEVICE_PPDVALUE_BOX         6
-#define RID_RTS_DEVICE_PRINTLANG_TXT        7
-#define RID_RTS_DEVICE_PRINTLANG_BOX        8
-#define RID_RTS_DEVICE_SPACE_TXT            9
-#define RID_RTS_DEVICE_SPACE_BOX            10
-#define RID_RTS_DEVICE_DEPTH_TXT            11
-#define RID_RTS_DEVICE_DEPTH_BOX            12
 
 #define RID_RTS_PAPERPAGE                   4004
 #define RID_RTS_PAPER_PAPER_TXT         1
diff --git a/padmin/source/rtsetup.src b/padmin/source/rtsetup.src
index 9449cfd..9005c09 100644
--- a/padmin/source/rtsetup.src
+++ b/padmin/source/rtsetup.src
@@ -56,10 +56,6 @@ TabDialog RID_RTS_RTSDIALOG
             };
         };
     };
-    String RID_RTS_RTSDIALOG_FROMDRIVER_TXT
-    {
-        Text [ en-US ] = "from driver";
-    };
     String RID_RTS_RTSDIALOG_INVALID_TXT
     {
         Text [ en-US ] = "<ignore>";
@@ -130,103 +126,6 @@ TabPage RID_RTS_PAPERPAGE
     };
 };
 
-TabPage RID_RTS_DEVICEPAGE
-{
-    HelpID = "padmin:TabPage:RID_RTS_DEVICEPAGE";
-    Hide = TRUE;
-    Size = MAP_APPFONT( 230, 175 );
-
-    String RID_RTS_DEVICE_COLOR_TXT
-    {
-        Text [ en-US ] = "Color";
-    };
-    String RID_RTS_DEVICE_GRAY_TXT
-    {
-        Text [ en-US ] = "Grayscale";
-    };
-
-    FixedText RID_RTS_DEVICE_PPDKEY_TXT
-    {
-        Pos = MAP_APPFONT( 5, 5 );
-        Size = MAP_APPFONT( 85, 8 );
-        Text [ en-US ] = "~Option";
-    };
-    ListBox RID_RTS_DEVICE_PPDKEY_BOX
-    {
-        HelpID = "padmin:ListBox:RID_RTS_DEVICEPAGE:RID_RTS_DEVICE_PPDKEY_BOX";
-        Border = TRUE;
-        Pos = MAP_APPFONT( 5, 14 );
-        Size = MAP_APPFONT( 105, 111 );
-    };
-    FixedText RID_RTS_DEVICE_PPDVALUE_TXT
-    {
-        Pos = MAP_APPFONT( 120, 5 );
-        Size = MAP_APPFONT( 105, 8 );
-        Text [ en-US ] = "Current ~value";
-    };
-    ListBox RID_RTS_DEVICE_PPDVALUE_BOX
-    {
-        HelpID = "padmin:ListBox:RID_RTS_DEVICEPAGE:RID_RTS_DEVICE_PPDVALUE_BOX";
-        Border = TRUE;
-        Pos = MAP_APPFONT( 120, 14 );
-        Size = MAP_APPFONT( 105, 111 );
-    };
-
-    FixedText RID_RTS_DEVICE_PRINTLANG_TXT
-    {
-        Pos = MAP_APPFONT( 5, 130 );
-        Size = MAP_APPFONT( 100, 8 );
-        Text [ en-US ] = "Printer ~Language type";
-    };
-    ListBox RID_RTS_DEVICE_PRINTLANG_BOX
-    {
-        HelpID = "padmin:ListBox:RID_RTS_DEVICEPAGE:RID_RTS_DEVICE_LEVEL_BOX";
-        DropDown = TRUE;
-        Pos = MAP_APPFONT( 120, 130 );
-        Size = MAP_APPFONT( 105, 200 );
-        StringList [en-US] =
-        {
-            < "Automatic : %s" ; 0; > ;
-            < "PostScript (Level from driver)" ; 1; > ;
-            < "PostScript Level 1" ; 2; > ;
-            < "PostScript Level 2"; 3; > ;
-            < "PostScript Level 3"; 4; > ;
-            < "PDF"; 10; > ;
-        };
-    };
-    FixedText RID_RTS_DEVICE_SPACE_TXT
-    {
-        Pos = MAP_APPFONT( 5, 145 );
-        Size = MAP_APPFONT( 100, 8 );
-        Text [ en-US ] = "~Color";
-    };
-    ListBox RID_RTS_DEVICE_SPACE_BOX
-    {
-        HelpID = "padmin:ListBox:RID_RTS_DEVICEPAGE:RID_RTS_DEVICE_SPACE_BOX";
-        DropDown = TRUE;
-        Pos = MAP_APPFONT( 120,  145 );
-        Size = MAP_APPFONT( 105, 200 );
-    };
-    FixedText RID_RTS_DEVICE_DEPTH_TXT
-    {
-        Pos = MAP_APPFONT( 5, 160 );
-        Size = MAP_APPFONT( 80, 8 );
-        Text [ en-US ] = "Color ~depth";
-    };
-    ListBox RID_RTS_DEVICE_DEPTH_BOX
-    {
-        HelpID = "padmin:ListBox:RID_RTS_DEVICEPAGE:RID_RTS_DEVICE_DEPTH_BOX";
-        DropDown = TRUE;
-        Pos = MAP_APPFONT( 120, 160 );
-        Size = MAP_APPFONT( 105, 200 );
-        StringList =
-        {
-            "8 Bit";
-            "24 Bit";
-        };
-    };
-};
-
 TabPage RID_RTS_FONTSUBSTPAGE
 {
     HelpID = "padmin:TabPage:RID_RTS_FONTSUBSTPAGE";
diff --git a/padmin/uiconfig/ui/printerdevicepage.ui b/padmin/uiconfig/ui/printerdevicepage.ui
new file mode 100644
index 0000000..dbd3c3f
--- /dev/null
+++ b/padmin/uiconfig/ui/printerdevicepage.ui
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkGrid" id="PrinterDevicePage">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="hexpand">True</property>
+    <property name="vexpand">True</property>
+    <property name="row_spacing">6</property>
+    <property name="column_spacing">12</property>
+    <property name="column_homogeneous">True</property>
+    <child>
+      <object class="GtkLabel" id="label7">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="xalign">0</property>
+        <property name="label" translatable="yes">_Option</property>
+        <property name="use_underline">True</property>
+        <attributes>
+          <attribute name="weight" value="bold"/>
+        </attributes>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">0</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkLabel" id="label8">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="xalign">0</property>
+        <property name="label" translatable="yes">Current _value</property>
+        <property name="use_underline">True</property>
+        <attributes>
+          <attribute name="weight" value="bold"/>
+        </attributes>
+      </object>
+      <packing>
+        <property name="left_attach">1</property>
+        <property name="top_attach">0</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkLabel" id="label9">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="xalign">0</property>
+        <property name="label" translatable="yes">Printer _Language type</property>
+        <property name="use_underline">True</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">2</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkLabel" id="label10">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="xalign">0</property>
+        <property name="label" translatable="yes">_Color</property>
+        <property name="use_underline">True</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">3</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkLabel" id="label11">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="xalign">0</property>
+        <property name="label" translatable="yes">Color _depth</property>
+        <property name="use_underline">True</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">4</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkComboBoxText" id="colorspace">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="entry_text_column">0</property>
+        <property name="id_column">1</property>
+        <items>
+          <item translatable="yes">From driver</item>
+          <item translatable="yes">Color</item>
+          <item translatable="yes">Grayscale</item>
+        </items>
+      </object>
+      <packing>
+        <property name="left_attach">1</property>
+        <property name="top_attach">3</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkComboBoxText" id="colordepth">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="entry_text_column">0</property>
+        <property name="id_column">1</property>
+        <items>
+          <item translatable="yes">8 Bit</item>
+          <item translatable="yes">24 Bit</item>
+        </items>
+      </object>
+      <packing>
+        <property name="left_attach">1</property>
+        <property name="top_attach">4</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkComboBox" id="level">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="model">liststore1</property>
+      </object>
+      <packing>
+        <property name="left_attach">1</property>
+        <property name="top_attach">2</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkTreeView" id="options">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <child internal-child="selection">
+          <object class="GtkTreeSelection" id="treeview-selection1"/>
+        </child>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">1</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkTreeView" id="values">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <child internal-child="selection">
+          <object class="GtkTreeSelection" id="treeview-selection2"/>
+        </child>
+      </object>
+      <packing>
+        <property name="left_attach">1</property>
+        <property name="top_attach">1</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+  </object>
+  <object class="GtkListStore" id="liststore1">
+    <columns>
+      <!-- column-name gchararray1 -->
+      <column type="gchararray"/>
+      <!-- column-name gint1 -->
+      <column type="gint"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes">Automatic : %s</col>
+        <col id="1">0</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">PostScript (Level from driver)</col>
+        <col id="1">1</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">PostScript Level 1</col>
+        <col id="1">2</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">PostScript Level 2</col>
+        <col id="1">3</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">PostScript Level 3</col>
+        <col id="1">4</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">PDF</col>
+        <col id="1">10</col>
+      </row>
+    </data>
+  </object>
+</interface>
diff --git a/padmin/uiconfig/ui/printerproperties.ui b/padmin/uiconfig/ui/printerproperties.ui
index 47c71a8..f78d12c 100644
--- a/padmin/uiconfig/ui/printerproperties.ui
+++ b/padmin/uiconfig/ui/printerproperties.ui
@@ -1,13 +1,59 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="printer property">
+  <object class="GtkDialog" id="dialog1">
     <property name="can_focus">False</property>
-    <child>
-      <object class="GtkBox" id="box1">
-        <property name="visible">True</property>
+    <property name="border_width">5</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox1">
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area1">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="ok">
+                <property name="label">gtk-ok</property>
+                <property name="use_action_appearance">False</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>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="cancel">
+                <property name="label">gtk-cancel</property>
+                <property name="use_action_appearance">False</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>
+                <property name="use_stock">True</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="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkNotebook" id="notebook1">
             <property name="visible">True</property>
@@ -16,13 +62,18 @@
               <object class="GtkGrid" id="grid1">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="row_spacing">10</property>
-                <property name="column_spacing">25</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
+                <property name="row_spacing">6</property>
+                <property name="column_spacing">12</property>
+                <property name="column_homogeneous">True</property>
                 <child>
                   <object class="GtkLabel" id="label3">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Paper Size</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">_Paper size</property>
+                    <property name="use_underline">True</property>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
@@ -35,7 +86,9 @@
                   <object class="GtkLabel" id="label4">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Orientataion </property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">_Orientataion</property>
+                    <property name="use_underline">True</property>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
@@ -48,7 +101,9 @@
                   <object class="GtkLabel" id="label5">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Duplex</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">_Duplex</property>
+                    <property name="use_underline">True</property>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
@@ -61,7 +116,9 @@
                   <object class="GtkLabel" id="label6">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
+                    <property name="xalign">0</property>
                     <property name="label" translatable="yes">Paper tray</property>
+                    <property name="use_underline">True</property>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
@@ -139,213 +196,10 @@
               </packing>
             </child>
             <child>
-              <object class="GtkGrid" id="grid2">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="row_spacing">10</property>
-                <property name="column_spacing">30</property>
-                <child>
-                  <object class="GtkLabel" id="label7">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Option </property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">0</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label8">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Current value</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">0</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkScrolledWindow" id="scrolledwindow1">
-                    <property name="width_request">100</property>
-                    <property name="height_request">150</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="shadow_type">in</property>
-                    <child>
-                      <placeholder/>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">1</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkScrolledWindow" id="scrolledwindow2">
-                    <property name="width_request">140</property>
-                    <property name="height_request">150</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="shadow_type">in</property>
-                    <child>
-                      <placeholder/>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">1</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label9">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Printer Language type  </property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">2</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label10">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Color</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">3</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label11">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Color depth</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">4</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkComboBoxText" id="comboboxtext5">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="entry_text_column">0</property>
-                    <property name="id_column">1</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">2</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkComboBoxText" id="comboboxtext6">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="entry_text_column">0</property>
-                    <property name="id_column">1</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">3</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkComboBoxText" id="comboboxtext7">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="entry_text_column">0</property>
-                    <property name="id_column">1</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">4</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="position">1</property>
-              </packing>
+              <placeholder/>
             </child>
             <child type="tab">
-              <object class="GtkLabel" id="label2">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes">Device</property>
-              </object>
-              <packing>
-                <property name="position">1</property>
-                <property name="tab_fill">False</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="GtkButtonBox" id="buttonbox1">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="button1">
-                <property name="label">gtk-ok</property>
-                <property name="use_action_appearance">False</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>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="button2">
-                <property name="label">gtk-cancel</property>
-                <property name="use_action_appearance">False</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>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
-              </packing>
+              <placeholder/>
             </child>
           </object>
           <packing>
@@ -356,5 +210,9 @@
         </child>
       </object>
     </child>
+    <action-widgets>
+      <action-widget response="0">ok</action-widget>
+      <action-widget response="0">cancel</action-widget>
+    </action-widgets>
   </object>
 </interface>
commit c60ef32a644a707bf7d8a1f0e8408771c48b0c46
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri Dec 14 14:25:29 2012 +0000

    add support for loading comboboxtext item strings from .ui
    
    Change-Id: Ic7a43fceb455a119d5b5b17ae79357d92d9ccb3d

diff --git a/solenv/bin/uilangfilter.xslt b/solenv/bin/uilangfilter.xslt
index 90abf11..6d48974 100644
--- a/solenv/bin/uilangfilter.xslt
+++ b/solenv/bin/uilangfilter.xslt
@@ -20,7 +20,7 @@
   <xsl:apply-templates select="//*[not(self::col)][@translatable='yes']" />
   <!--
       What I want to do here is to extract just the list and tree store
-      columns that that are translatable
+      columns that that are translatable (the first one only)
   -->
   <xsl:apply-templates select="interface/object[data/row/col[@id='0'][@translatable='yes']]" />
   </l>
@@ -29,7 +29,7 @@
 <!--
     Normal nodes
 -->
-<xsl:template match="*/*[not(self::col)][@translatable='yes']">
+<xsl:template match="*/*[not(self::col|self::item)][@translatable='yes']">
   <xsl:text> </xsl:text>
   <t r="string" g="{str:tokenize(../@id,':')[1]}" l="{@name}">
   <xsl:copy-of select="text()" />
@@ -37,6 +37,17 @@
 </xsl:template>
 
 <!--
+    Item nodes
+-->
+<xsl:template match="*/*[self::item][@translatable='yes']">
+  <xsl:text> </xsl:text>
+  <xsl:variable name="groupid" select="../../@id"/>
+  <t r="stringlist" g="{str:tokenize(../../@id,':')[1]}" l="{count(preceding::item[../../@id=$groupid])}">
+  <xsl:copy-of select="text()" />
+  </t><xsl:text>
</xsl:text>
+</xsl:template>
+
+<!--
     Column nodes
 -->
 <xsl:template match="col[@id='0'][@translatable='yes']">
diff --git a/vcl/inc/vcl/builder.hxx b/vcl/inc/vcl/builder.hxx
index e34da3a..3273f17 100644
--- a/vcl/inc/vcl/builder.hxx
+++ b/vcl/inc/vcl/builder.hxx
@@ -204,9 +204,11 @@ public:
 
 private:
     Window *insertObject(Window *pParent, const OString &rClass, const OString &rID,
-        stringmap &rProps, stringmap &rPangoAttributes);
+        stringmap &rProps, stringmap &rPangoAttributes, std::vector<OString> &rItems);
+
+    Window *makeObject(Window *pParent, const OString &rClass, const OString &rID,
+        stringmap &rVec, const std::vector<OString> &rItems);
 
-    Window *makeObject(Window *pParent, const OString &rClass, const OString &rID, stringmap &rVec);
     bool extractGroup(const OString &id, stringmap &rVec);
     bool extractModel(const OString &id, stringmap &rVec);
     bool extractBuffer(const OString &id, stringmap &rVec);
@@ -236,6 +238,7 @@ private:
     void handleTextBuffer(const OString &rID, stringmap &rProperties);
     void handleTabChild(Window *pParent, xmlreader::XmlReader &reader);
     void handleMenu(xmlreader::XmlReader &reader, const OString &rID);
+    std::vector<OString> handleItems(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);
diff --git a/vcl/source/control/tabctrl.cxx b/vcl/source/control/tabctrl.cxx
index 7efd292..44bb424 100644
--- a/vcl/source/control/tabctrl.cxx
+++ b/vcl/source/control/tabctrl.cxx
@@ -1938,7 +1938,8 @@ void TabControl::SetTabPage( sal_uInt16 nPageId, TabPage* pTabPage )
     {
         if ( pTabPage )
         {
-            DBG_ASSERT( !pTabPage->IsVisible(), "TabControl::SetTabPage() - Page is visible" );
+            DBG_ASSERT( !pTabPage->IsVisible() || pTabPage->isLayoutEnabled(),
+                "TabControl::SetTabPage() - Non-Layout Enabled Page is visible" );
 
             if ( IsDefaultSize() )
                 SetTabPageSizePixel( pTabPage->GetSizePixel() );
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 6f39548..a328bb3 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -682,7 +682,8 @@ bool VclBuilder::extractImage(const OString &id, stringmap &rMap)
 extern "C" { static void SAL_CALL thisModule() {} }
 #endif
 
-Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OString &id, stringmap &rMap)
+Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OString &id,
+    stringmap &rMap, const std::vector<OString> &rItems)
 {
     bool bIsPlaceHolder = name.isEmpty();
     bool bVertical = false;
@@ -843,12 +844,28 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri
         {
             ComboBox* pComboBox = new ComboBox(pParent, WB_LEFT|WB_DROPDOWN|WB_VCENTER|WB_3DLOOK);
             pComboBox->EnableAutoSize(true);
+            if (!rItems.empty())
+            {
+                sal_uInt16 nActiveId = extractActive(rMap);
+                for (std::vector<OString>::const_iterator aI = rItems.begin(), aEnd = rItems.end(); aI != aEnd; ++aI)
+                    pComboBox->InsertEntry(OStringToOUString(*aI, RTL_TEXTENCODING_UTF8));
+                if (nActiveId < rItems.size())
+                    pComboBox->SelectEntryPos(nActiveId);
+            }
             pWindow = pComboBox;
         }
         else
         {
             ListBox *pListBox = new ListBox(pParent, WB_LEFT|WB_DROPDOWN|WB_VCENTER|WB_3DLOOK);
             pListBox->EnableAutoSize(true);
+            if (!rItems.empty())
+            {
+                sal_uInt16 nActiveId = extractActive(rMap);
+                for (std::vector<OString>::const_iterator aI = rItems.begin(), aEnd = rItems.end(); aI != aEnd; ++aI)
+                    pListBox->InsertEntry(OStringToOUString(*aI, RTL_TEXTENCODING_UTF8));
+                if (nActiveId < rItems.size())
+                    pListBox->SelectEntryPos(nActiveId);
+            }
             pWindow = pListBox;
         }
     }
@@ -994,7 +1011,7 @@ namespace
 }
 
 Window *VclBuilder::insertObject(Window *pParent, const OString &rClass,
-    const OString &rID, stringmap &rProps, stringmap &rPango)
+    const OString &rID, stringmap &rProps, stringmap &rPango, std::vector<OString> &rItems)
 {
     Window *pCurrentChild = NULL;
 
@@ -1024,7 +1041,7 @@ Window *VclBuilder::insertObject(Window *pParent, const OString &rClass,
         //been seen yet, then make unattached widgets parent-less toplevels
         if (pParent == m_pParent && m_bToplevelHasDeferredInit)
             pParent = NULL;
-        pCurrentChild = makeObject(pParent, rClass, rID, rProps);
+        pCurrentChild = makeObject(pParent, rClass, rID, rProps, rItems);
     }
 
     if (pCurrentChild)
@@ -1046,6 +1063,7 @@ Window *VclBuilder::insertObject(Window *pParent, const OString &rClass,
 
     rProps.clear();
     rPango.clear();
+    rItems.clear();
 
     if (!pCurrentChild)
         pCurrentChild = m_aChildren.empty() ? pParent : m_aChildren.back().m_pWindow;
@@ -1402,6 +1420,64 @@ void VclBuilder::handleListStore(xmlreader::XmlReader &reader, const OString &rI
     }
 }
 
+std::vector<OString> VclBuilder::handleItems(xmlreader::XmlReader &reader, const OString &rID)
+{
+    int nLevel = 1;
+
+    std::vector<OString> aItems;
+    sal_Int32 nItemIndex = 0;
+
+    while(1)
+    {
+        xmlreader::Span name;
+        int nsId;
+
+        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("item")))
+            {
+                bool bTranslated = false;
+                OString sValue;
+
+                while (reader.nextAttribute(&nsId, &name))
+                {
+                    if (name.equals(RTL_CONSTASCII_STRINGPARAM("translatable")) && reader.getAttributeValue(false).equals(RTL_CONSTASCII_STRINGPARAM("yes")))
+                    {
+                        sValue = getTranslation(rID, OString::valueOf(nItemIndex));
+                        bTranslated = !sValue.isEmpty();
+                    }
+                }
+
+                reader.nextItem(
+                    xmlreader::XmlReader::TEXT_RAW, &name, &nsId);
+
+                if (!bTranslated)
+                    sValue = OString(name.begin, name.length);
+
+                aItems.push_back(sValue);
+                ++nItemIndex;
+            }
+        }
+
+        if (res == xmlreader::XmlReader::RESULT_END)
+        {
+            --nLevel;
+        }
+
+        if (!nLevel)
+            break;
+    }
+
+    return aItems;
+}
+
 void VclBuilder::handleMenu(xmlreader::XmlReader &reader, const OString &rID)
 {
     PopupMenu *pCurrentMenu = new PopupMenu;
@@ -1682,6 +1758,7 @@ Window* VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader)
     int nLevel = 1;
 
     stringmap aProperties, aPangoAttributes;
+    std::vector<OString> aItems;
 
     if (!sCustomProperty.isEmpty())
         aProperties[OString("customproperty")] = sCustomProperty;
@@ -1702,10 +1779,12 @@ Window* VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader)
                 if (!pCurrentChild)
                 {
                     pCurrentChild = insertObject(pParent, sClass, sID,
-                        aProperties, aPangoAttributes);
+                        aProperties, aPangoAttributes, aItems);
                 }
                 handleChild(pCurrentChild, reader);
             }
+            else if (name.equals(RTL_CONSTASCII_STRINGPARAM("items")))
+                aItems = handleItems(reader, sID);
             else
             {
                 ++nLevel;
@@ -1737,7 +1816,7 @@ Window* VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader)
     }
 
     if (!pCurrentChild)
-        pCurrentChild = insertObject(pParent, sClass, sID, aProperties, aPangoAttributes);
+        pCurrentChild = insertObject(pParent, sClass, sID, aProperties, aPangoAttributes, aItems);
 
     return pCurrentChild;
 }


More information about the Libreoffice-commits mailing list