convert RID_GROUPS_SORTING floating window to .ui

(recovers icons for up/down/delete in the process)

Change-Id: I85a8de2ebe1321f972000a680a9f4308c26ae4c3
diff --git a/reportdesign/UIConfig_dbreport.mk b/reportdesign/UIConfig_dbreport.mk
index 95fc0fa..ffad8f3 100644
--- a/reportdesign/UIConfig_dbreport.mk
+++ b/reportdesign/UIConfig_dbreport.mk
@@ -41,6 +41,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/dbreport,\
	reportdesign/uiconfig/dbreport/ui/conditionwin \
	reportdesign/uiconfig/dbreport/ui/datetimedialog \
	reportdesign/uiconfig/dbreport/ui/floatingnavigator \
	reportdesign/uiconfig/dbreport/ui/floatingsort \
	reportdesign/uiconfig/dbreport/ui/pagedialog \
	reportdesign/uiconfig/dbreport/ui/pagenumberdialog \
))
diff --git a/reportdesign/inc/RptResId.hrc b/reportdesign/inc/RptResId.hrc
index c60e14a..60a318a 100644
--- a/reportdesign/inc/RptResId.hrc
+++ b/reportdesign/inc/RptResId.hrc
@@ -38,7 +38,6 @@
#define RID_MISC_START                  RID_RPT_START

// Dialog Control Id's -----------------------------------------------------------
#define RID_GROUPS_SORTING              ( RID_DIALOG_START + 0 )
#define RID_DATETIME_DLG                ( RID_DIALOG_START + 2 )
#define WIN_CONDITION                   ( RID_DIALOG_START + 4 )

@@ -225,13 +224,8 @@
#define RID_MENU_NAVIGATOR                  ( RID_MENU_START + 2 )
#define RID_TB_SORTING                      ( RID_MENU_START + 3 )

// image lists -----------------------------------------------------------------------
#define IMG_CONDFORMAT_DLG_SC               (RID_IMAGELIST_START + 0)
// free
#define IMG_CONDFORMAT_DLG_LC               (RID_IMAGELIST_START + 2)
// free
#define RID_SVXIMGLIST_RPTEXPL              (RID_IMAGELIST_START + 4)
#define IMGLST_GROUPSORT_DLG_SC             (RID_IMAGELIST_START + 6)
// free
#define IMG_ADDFIELD_DLG_SC                 (RID_IMAGELIST_START + 8)
// free
@@ -252,12 +246,6 @@
#define RID_STR_VERTICAL_ALIGN_CONST        (RID_UNTYPED_START +  7)
#define RID_STR_PARAADJUST_CONST            (RID_UNTYPED_START +  8)

// toolbox lists ---------------------------------------------------------------------

#define SID_RPT_GROUPSORT_MOVE_UP                    ( RID_TOOLBOX_START + 0 )
#define SID_RPT_GROUPSORT_MOVE_DOWN                  ( RID_TOOLBOX_START + 1 )
#define SID_RPT_GROUPSORT_DELETE                     ( RID_TOOLBOX_START + 2 )

#endif          // _RPTUI_DLGRESID_HRC

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/inc/helpids.hrc b/reportdesign/inc/helpids.hrc
index 9753490..7a41d18e 100644
--- a/reportdesign/inc/helpids.hrc
+++ b/reportdesign/inc/helpids.hrc
@@ -39,8 +39,6 @@
#define HID_RPT_STARTMARKER                           "REPORTDESIGN_HID_RPT_STARTMARKER"
#define HID_RPT_FIELDEXPRESSION                       "REPORTDESIGN_HID_RPT_FIELDEXPRESSION"
#define HID_RPT_SORTORDER                             "REPORTDESIGN_HID_RPT_SORTORDER"
#define HID_RPT_GROUPSBRW                             "REPORTDESIGN_HID_RPT_GROUPSBRW"
#define HID_RPT_GROUPSSORTING_DLG                     "REPORTDESIGN_HID_RPT_GROUPSSORTING_DLG"
#define HID_RPT_POPUP_COLOR_CTRL                      "REPORTDESIGN_HID_RPT_POPUP_COLOR_CTRL"
#define HID_RPT_POPUP_COLOR                           "REPORTDESIGN_HID_RPT_POPUP_COLOR"
#define HID_RPT_FIELD_SEL                             "REPORTDESIGN_HID_RPT_FIELD_SEL"
@@ -99,10 +97,6 @@
#define HID_RPT_PROP_BACKTRANSPARENT                  "REPORTDESIGN_HID_RPT_PROP_BACKTRANSPARENT"
#define HID_RPT_PROP_CONTROLBACKGROUNDTRANSPARENT     "REPORTDESIGN_HID_RPT_PROP_CONTROLBACKGROUNDTRANSPARENT"

#define HID_RPT_GROUPSORT_MOVE_UP                     "REPORTDESIGN_HID_RPT_GROUPSORT_MOVE_UP"
#define HID_RPT_GROUPSORT_MOVE_DOWN                   "REPORTDESIGN_HID_RPT_GROUPSORT_MOVE_DOWN"
#define HID_RPT_GROUPSORT_DELETE                      "REPORTDESIGN_HID_RPT_GROUPSORT_DELETE"

#endif //RTPUI_REPORTDESIGN_HELPID_HRC

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/ui/dlg/CondFormat.src b/reportdesign/source/ui/dlg/CondFormat.src
index 5f933a8..b45a7f81 100644
--- a/reportdesign/source/ui/dlg/CondFormat.src
+++ b/reportdesign/source/ui/dlg/CondFormat.src
@@ -47,41 +47,12 @@ String STR_TRANSPARENT

#define MASKCOLOR MaskColor = Color { Red = 0xFFFF; Green = 0x0000; Blue = 0xFFFF; }

ImageList IMG_CONDFORMAT_DLG_SC
{
    MASKCOLOR;
    FileList =
    {
        < "cmd/sc_bold.png" ;              SID_ATTR_CHAR_WEIGHT ; > ;
        < "cmd/sc_italic.png" ;            SID_ATTR_CHAR_POSTURE ; > ;
        < "cmd/sc_underline.png" ;         SID_ATTR_CHAR_UNDERLINE ; > ;
        < "cmd/sc_backgroundcolor.png" ;   SID_BACKGROUND_COLOR ; > ;
        < "cmd/sc_fontcolor.png" ;         SID_ATTR_CHAR_COLOR2 ; > ;
        < "cmd/sc_fontdialog.png" ;        SID_CHAR_DLG ; > ;
    };
};

ImageList IMG_CONDFORMAT_DLG_LC
{
    MASKCOLOR;
    FileList =
    {
        < "cmd/lc_bold.png" ;              SID_ATTR_CHAR_WEIGHT ; > ;
        < "cmd/lc_italic.png" ;            SID_ATTR_CHAR_POSTURE ; > ;
        < "cmd/lc_underline.png" ;         SID_ATTR_CHAR_UNDERLINE ; > ;
        < "cmd/lc_backgroundcolor.png" ;   SID_BACKGROUND_COLOR ; > ;
        < "cmd/lc_fontcolor.png" ;         SID_ATTR_CHAR_COLOR2 ; > ;
        < "cmd/lc_fontdialog.png" ;        SID_CHAR_DLG ; > ;
    };
};

ImageList 31000
{
    MASKCOLOR;
    prefix = "sc";
    IdList = {05500;};
    IdCount = 1;

};

ToolBox RID_TB_SORTING
diff --git a/reportdesign/source/ui/dlg/Condition.cxx b/reportdesign/source/ui/dlg/Condition.cxx
index c7d64a7..016b88f 100644
--- a/reportdesign/source/ui/dlg/Condition.cxx
+++ b/reportdesign/source/ui/dlg/Condition.cxx
@@ -361,23 +361,10 @@ void Condition::ApplyCommand( sal_uInt16 _nCommandId, const ::Color& _rColor)

void Condition::setImageList(sal_Int16 /*_eBitmapSet*/)
{
#if 0
    sal_Int16 nN = IMG_CONDFORMAT_DLG_SC;
    if ( _eBitmapSet == SFX_SYMBOLS_SIZE_LARGE )
        nN = IMG_CONDFORMAT_DLG_LC;
    m_pActions->SetImageList(ImageList(ModuleRes(nN)));
#endif
}

void Condition::resizeControls(const Size& /*_rDiff*/)
{
#if 0
    // we use large images so we must change them
    if ( _rDiff.Width() || _rDiff.Height() )
    {
        Invalidate();
    }
#endif
}

void Condition::GetFocus()
diff --git a/reportdesign/source/ui/dlg/GroupsSorting.cxx b/reportdesign/source/ui/dlg/GroupsSorting.cxx
index 9557309..ea4ad8d 100644
--- a/reportdesign/source/ui/dlg/GroupsSorting.cxx
+++ b/reportdesign/source/ui/dlg/GroupsSorting.cxx
@@ -17,7 +17,6 @@
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */
#include "GroupsSorting.hxx"
#include "GroupsSorting.hrc"
#include <connectivity/dbtools.hxx>
#include <svtools/editbrowsebox.hxx>
#include <svtools/imgdef.hxx>
@@ -40,7 +39,6 @@

#include <cppuhelper/implbase1.hxx>
#include <comphelper/property.hxx>
#include <vcl/mnemonic.hxx>
#include <vcl/msgbox.hxx>
#include <vcl/settings.hxx>

@@ -97,7 +95,7 @@ class OFieldExpressionControl : public TContainerListenerBase
    bool SaveModified(bool _bAppend);

public:
    OFieldExpressionControl( OGroupsSortingDialog* _pParent,const ResId& _rResId);
    OFieldExpressionControl(OGroupsSortingDialog* _pParentDialog, Window *_pParent);
    virtual ~OFieldExpressionControl();

    // XEventListener
@@ -107,6 +105,8 @@ public:
    virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& rEvent) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
    virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& rEvent) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;

    virtual Size GetOptimalSize() const SAL_OVERRIDE;

    void        fillColumns(const uno::Reference< container::XNameAccess>& _xColumns);
    void        lateInit();
    bool    IsDeleteAllowed( );
@@ -164,18 +164,16 @@ public:
};

// class OFieldExpressionControl


OFieldExpressionControl::OFieldExpressionControl( OGroupsSortingDialog* _pParent,const ResId& _rResId )
    :EditBrowseBox( _pParent, _rResId,EBBF_NONE, WB_TABSTOP | BROWSER_COLUMNSELECTION | BROWSER_MULTISELECTION | BROWSER_AUTOSIZE_LASTCOL |
                                  BROWSER_KEEPSELECTION | BROWSER_HLINESFULL | BROWSER_VLINESFULL)
OFieldExpressionControl::OFieldExpressionControl(OGroupsSortingDialog* _pParentDialog, Window *_pParent)
    :EditBrowseBox( _pParent, EBBF_NONE, WB_TABSTOP | BROWSER_COLUMNSELECTION | BROWSER_MULTISELECTION | BROWSER_AUTOSIZE_LASTCOL |
                              BROWSER_KEEPSELECTION | BROWSER_HLINESFULL | BROWSER_VLINESFULL)
    ,m_aGroupPositions(GROUPS_START_LEN,-1)
    ,m_pComboCell(NULL)
    ,m_nDataPos(-1)
    ,m_nCurrentPos(-1)
    ,m_nPasteEvent(0)
    ,m_nDeleteEvent(0)
    ,m_pParent(_pParent)
    ,m_pParent(_pParentDialog)
    ,m_bIgnoreEvent(false)
{
    SetBorderStyle(WINDOW_BORDER_MONO);
@@ -909,42 +907,39 @@ void OFieldExpressionControl::InsertRows( long nRow )
    RowInserted( nRow, nSize, true );
}


Size OFieldExpressionControl::GetOptimalSize() const
{
    return LogicToPixel(Size(106, 75), MAP_APPFONT);
}

// class OGroupsSortingDialog

OGroupsSortingDialog::OGroupsSortingDialog( Window* _pParent
                                           ,bool _bReadOnly
                                           ,OReportController* _pController)
    : FloatingWindow( _pParent, ModuleRes(RID_GROUPS_SORTING) )
    ,OPropertyChangeListener(m_aMutex)
    ,m_aFL2(this, ModuleRes(FL_SEPARATOR2) )
    ,m_aMove(this, ModuleRes(FT_MOVELABEL) )
    ,m_aToolBox(this, ModuleRes(TB_TOOLBOX) )

    ,m_aFL3(this, ModuleRes(FL_SEPARATOR3) )
    ,m_aOrder(this, ModuleRes(FT_ORDER) )
    ,m_aOrderLst(this, ModuleRes(LST_ORDER) )
    ,m_aHeader(this, ModuleRes(FT_HEADER) )
    ,m_aHeaderLst(this, ModuleRes(LST_HEADERLST) )
    ,m_aFooter(this, ModuleRes(FT_FOOTER) )
    ,m_aFooterLst(this, ModuleRes(LST_FOOTERLST) )
    ,m_aGroupOn(this, ModuleRes(FT_GROUPON) )
    ,m_aGroupOnLst(this, ModuleRes(LST_GROUPONLST) )
    ,m_aGroupInterval(this, ModuleRes(FT_GROUPINTERVAL) )
    ,m_aGroupIntervalEd(this, ModuleRes(ED_GROUPINTERVALLST) )
    ,m_aKeepTogether(this, ModuleRes(FT_KEEPTOGETHER) )
    ,m_aKeepTogetherLst(this, ModuleRes(LST_KEEPTOGETHERLST) )
    ,m_aFL(this, ModuleRes(FL_SEPARATOR1) )
    ,m_aHelpWindow(this, ModuleRes(HELP_FIELD) )
    ,m_pFieldExpression( new OFieldExpressionControl(this,ModuleRes(WND_CONTROL)))
    ,m_pController(_pController)
    ,m_pCurrentGroupListener(NULL)
    ,m_xGroups(m_pController->getReportDefinition()->getGroups())
    ,m_bReadOnly(_bReadOnly)
OGroupsSortingDialog::OGroupsSortingDialog(Window* _pParent, bool _bReadOnly,
                                           OReportController* _pController)
    : FloatingWindow(_pParent, "FloatingSort", "modules/dbreport/ui/floatingsort.ui")
    , OPropertyChangeListener(m_aMutex)
    , m_pController(_pController)
    , m_pCurrentGroupListener(NULL)
    , m_xGroups(m_pController->getReportDefinition()->getGroups())
    , m_bReadOnly(_bReadOnly)
{
    get(m_pToolBox, "toolbox");
    m_nMoveUpId = m_pToolBox->GetItemId(0);
    m_nMoveDownId = m_pToolBox->GetItemId(1);
    m_nDeleteId = m_pToolBox->GetItemId(2);
    get(m_pOrderLst, "sorting");
    get(m_pHeaderLst, "header");
    get(m_pFooterLst, "footer");
    get(m_pGroupOnLst, "group");
    get(m_pGroupIntervalEd, "interval");
    get(m_pKeepTogetherLst, "keep");
    get(m_pHelpWindow, "helptext");
    m_pHelpWindow->set_height_request(GetTextHeight() * 4);
    get(m_pProperties, "properties");
    m_pFieldExpression = new OFieldExpressionControl(this, get<Window>("box"));
    m_pFieldExpression->set_hexpand(true);
    m_pFieldExpression->set_vexpand(true);

    Control* pControlsLst[] = { &m_aHeaderLst, &m_aFooterLst, &m_aGroupOnLst, &m_aKeepTogetherLst, &m_aOrderLst, &m_aGroupIntervalEd};
    Control* pControlsLst[] = { m_pHeaderLst, m_pFooterLst, m_pGroupOnLst, m_pKeepTogetherLst, m_pOrderLst, m_pGroupIntervalEd};
    for (size_t i = 0; i < sizeof (pControlsLst) / sizeof (pControlsLst[0]); ++i)
    {
        pControlsLst[i]->SetGetFocusHdl(LINK(this, OGroupsSortingDialog, OnControlFocusGot));
@@ -955,30 +950,6 @@ OGroupsSortingDialog::OGroupsSortingDialog( Window* _pParent
    for (size_t i = 0; i < (sizeof (pControlsLst) / sizeof (pControlsLst[0])) - 1; ++i)
        static_cast<ListBox*>(pControlsLst[i])->SetSelectHdl(LINK(this,OGroupsSortingDialog,LBChangeHdl));

    Control* pControls[]    = { &m_aHeader, &m_aFooter, &m_aGroupOn, &m_aGroupInterval, &m_aKeepTogether, &m_aOrder
                                , &m_aMove,&m_aFL2};
    sal_Int32 nMaxTextWidth = 0;
    MnemonicGenerator aMnemonicGenerator;
    for (size_t i = 0; i < sizeof (pControlsLst) / sizeof (pControlsLst[0]); ++i)
        aMnemonicGenerator.RegisterMnemonic( pControls[i]->GetText() );

    for (size_t i = 0; i < sizeof (pControlsLst) / sizeof (pControlsLst[0]); ++i)
    {
        pControls[i]->Show(true);
        OUString sText = pControls[i]->GetText();
        OUString sNewText = aMnemonicGenerator.CreateMnemonic(sText);
        if ( sText != sNewText )
            pControls[i]->SetText(sNewText);
        sal_Int32 nTextWidth = GetTextWidth(sNewText);
        nMaxTextWidth = ::std::max<sal_Int32>(nTextWidth,nMaxTextWidth);
    }

    Size aSize(UNRELATED_CONTROLS, PAGE_HEIGHT);
    Size aSpace = LogicToPixel( aSize, MAP_APPFONT );
    Size aOutSize(nMaxTextWidth + m_aHeader.GetSizePixel().Width() + 3*aSpace.Width(),aSpace.Height());
    SetMinOutputSizePixel(aOutSize);
    SetOutputSizePixel(aOutSize);

    m_pReportListener = new OPropertyChangeMultiplexer(this,m_pController->getReportDefinition().get());
    m_pReportListener->addProperty(PROPERTY_COMMAND);
    m_pReportListener->addProperty(PROPERTY_COMMANDTYPE);
@@ -987,23 +958,16 @@ OGroupsSortingDialog::OGroupsSortingDialog( Window* _pParent
    fillColumns();
    m_pFieldExpression->Show();

    m_aHelpWindow.SetControlBackground( GetSettings().GetStyleSettings().GetFaceColor() );
    m_pHelpWindow->SetControlBackground( GetSettings().GetStyleSettings().GetFaceColor() );

    m_pFieldExpression->SetZOrder(&m_aFL2, WINDOW_ZORDER_BEHIND);

    m_aMove.SetZOrder(m_pFieldExpression, WINDOW_ZORDER_BEHIND);
    m_aToolBox.SetStyle(m_aToolBox.GetStyle()|WB_LINESPACING);
    m_aToolBox.SetSelectHdl(LINK(this, OGroupsSortingDialog, OnFormatAction));
    m_aToolBox.SetImageListProvider(this);
    setToolBox(&m_aToolBox);
    m_pToolBox->SetStyle(m_pToolBox->GetStyle()|WB_LINESPACING);
    m_pToolBox->SetSelectHdl(LINK(this, OGroupsSortingDialog, OnFormatAction));

    checkButtons(0);
    Resize();

    FreeResource();
    Show();
}


OGroupsSortingDialog::~OGroupsSortingDialog()
{
    delete m_pFieldExpression;
@@ -1013,7 +977,6 @@ OGroupsSortingDialog::~OGroupsSortingDialog()
        m_pCurrentGroupListener->dispose();
}


void OGroupsSortingDialog::UpdateData( )
{
    m_pFieldExpression->Invalidate();
@@ -1027,20 +990,7 @@ void OGroupsSortingDialog::DisplayData( sal_Int32 _nRow )
{
    sal_Int32 nGroupPos = m_pFieldExpression->getGroupPosition(_nRow);
    bool bEmpty = nGroupPos == NO_GROUP;
    m_aHeaderLst.Enable(!bEmpty);
    m_aFooterLst.Enable(!bEmpty);
    m_aGroupOnLst.Enable(!bEmpty);
    m_aGroupIntervalEd.Enable(!bEmpty);
    m_aKeepTogetherLst.Enable(!bEmpty);
    m_aOrderLst.Enable(!bEmpty);

    m_aFL3.Enable(!bEmpty);
    m_aHeader.Enable(!bEmpty);
    m_aFooter.Enable(!bEmpty);
    m_aGroupOn.Enable(!bEmpty);
    m_aGroupInterval.Enable(!bEmpty);
    m_aKeepTogether.Enable(!bEmpty);
    m_aOrder.Enable(!bEmpty);
    m_pProperties->Enable(!bEmpty);

    checkButtons(_nRow);

@@ -1066,26 +1016,26 @@ void OGroupsSortingDialog::SaveData( sal_Int32 _nRow)
        return;

    uno::Reference< report::XGroup> xGroup = getGroup(nGroupPos);
    if ( m_aHeaderLst.IsValueChangedFromSaved() )
        xGroup->setHeaderOn( m_aHeaderLst.GetSelectEntryPos() == 0 );
    if ( m_aFooterLst.IsValueChangedFromSaved() )
        xGroup->setFooterOn( m_aFooterLst.GetSelectEntryPos() == 0 );
    if ( m_aKeepTogetherLst.IsValueChangedFromSaved() )
        xGroup->setKeepTogether( m_aKeepTogetherLst.GetSelectEntryPos() );
    if ( m_aGroupOnLst.IsValueChangedFromSaved() )
    if ( m_pHeaderLst->IsValueChangedFromSaved() )
        xGroup->setHeaderOn( m_pHeaderLst->GetSelectEntryPos() == 0 );
    if ( m_pFooterLst->IsValueChangedFromSaved() )
        xGroup->setFooterOn( m_pFooterLst->GetSelectEntryPos() == 0 );
    if ( m_pKeepTogetherLst->IsValueChangedFromSaved() )
        xGroup->setKeepTogether( m_pKeepTogetherLst->GetSelectEntryPos() );
    if ( m_pGroupOnLst->IsValueChangedFromSaved() )
    {
        sal_Int16 nGroupOn = static_cast<sal_Int16>(reinterpret_cast<sal_IntPtr>(m_aGroupOnLst.GetEntryData(m_aGroupOnLst.GetSelectEntryPos())));
        sal_Int16 nGroupOn = static_cast<sal_Int16>(reinterpret_cast<sal_IntPtr>(m_pGroupOnLst->GetEntryData(m_pGroupOnLst->GetSelectEntryPos())));
        xGroup->setGroupOn( nGroupOn );
    }
    if ( m_aGroupIntervalEd.IsValueChangedFromSaved() )
    if ( m_pGroupIntervalEd->IsValueChangedFromSaved() )
    {
        xGroup->setGroupInterval( static_cast<sal_Int32>(m_aGroupIntervalEd.GetValue()) );
        m_aGroupIntervalEd.SaveValue();
        xGroup->setGroupInterval( static_cast<sal_Int32>(m_pGroupIntervalEd->GetValue()) );
        m_pGroupIntervalEd->SaveValue();
    }
    if ( m_aOrderLst.IsValueChangedFromSaved() )
        xGroup->setSortAscending( m_aOrderLst.GetSelectEntryPos() == 0 );
    if ( m_pOrderLst->IsValueChangedFromSaved() )
        xGroup->setSortAscending( m_pOrderLst->GetSelectEntryPos() == 0 );

    ListBox* pControls[] = { &m_aHeaderLst,&m_aFooterLst,&m_aGroupOnLst,&m_aKeepTogetherLst,&m_aOrderLst};
    ListBox* pControls[] = { m_pHeaderLst, m_pFooterLst, m_pGroupOnLst, m_pKeepTogetherLst, m_pOrderLst};
    for (size_t i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
        pControls[i]->SaveValue();
}
@@ -1117,7 +1067,7 @@ IMPL_LINK(OGroupsSortingDialog, OnControlFocusGot, Control*, pControl )
{
    if ( m_pFieldExpression && m_pFieldExpression->getExpressionControl() )
    {
        Control* pControls[] = { m_pFieldExpression->getExpressionControl(),&m_aHeaderLst,&m_aFooterLst,&m_aGroupOnLst,&m_aGroupIntervalEd,&m_aKeepTogetherLst,&m_aOrderLst};
        Control* pControls[] = { m_pFieldExpression->getExpressionControl(), m_pHeaderLst, m_pFooterLst, m_pGroupOnLst, m_pGroupIntervalEd, m_pKeepTogetherLst, m_pOrderLst};
        for (size_t i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
        {
            if ( pControl == pControls[i] )
@@ -1138,9 +1088,9 @@ IMPL_LINK(OGroupsSortingDialog, OnControlFocusGot, Control*, pControl )

IMPL_LINK(OGroupsSortingDialog, OnControlFocusLost, Control*, pControl )
{
    if ( m_pFieldExpression && pControl == &m_aGroupIntervalEd )
    if (m_pFieldExpression && pControl == m_pGroupIntervalEd)
    {
        if ( m_aGroupIntervalEd.IsModified() )
        if ( m_pGroupIntervalEd->IsModified() )
            SaveData(m_pFieldExpression->GetCurRow());
    }
    return 0L;
@@ -1149,7 +1099,7 @@ IMPL_LINK(OGroupsSortingDialog, OnControlFocusLost, Control*, pControl )
IMPL_LINK( OGroupsSortingDialog, OnFormatAction, ToolBox*, /*NOTINTERESTEDIN*/ )
{

    sal_uInt16 nCommand = m_aToolBox.GetCurItemId();
    sal_uInt16 nCommand = m_pToolBox->GetCurItemId();

    if ( m_pFieldExpression )
    {
@@ -1161,15 +1111,15 @@ IMPL_LINK( OGroupsSortingDialog, OnFormatAction, ToolBox*, /*NOTINTERESTEDIN*/ )
            aClipboardList.realloc(1);
            aClipboardList[0] = m_xGroups->getByIndex(nGroupPos);
        }
        if ( nCommand == SID_RPT_GROUPSORT_MOVE_UP )
        if ( nCommand == m_nMoveUpId )
        {
            --nIndex;
        }
        if ( nCommand == SID_RPT_GROUPSORT_MOVE_DOWN )
        if ( nCommand == m_nMoveDownId )
        {
            ++nIndex;
        }
        if ( nCommand == SID_RPT_GROUPSORT_DELETE )
        if ( nCommand == m_nDeleteId )
        {
            Application::PostUserEvent( LINK(m_pFieldExpression, OFieldExpressionControl, DelayedDelete) );
        }
@@ -1195,12 +1145,12 @@ IMPL_LINK( OGroupsSortingDialog, LBChangeHdl, ListBox*, pListBox )
    {
        sal_Int32 nRow = m_pFieldExpression->GetCurRow();
        sal_Int32 nGroupPos = m_pFieldExpression->getGroupPosition(nRow);
        if ( pListBox != &m_aHeaderLst && pListBox != &m_aFooterLst)
        if (pListBox != m_pHeaderLst && pListBox != m_pFooterLst)
        {
            if ( pListBox->IsValueChangedFromSaved() )
                SaveData(nRow);
            if ( pListBox == &m_aGroupOnLst )
                m_aGroupIntervalEd.Enable( pListBox->GetSelectEntryPos() != 0 );
            if ( pListBox == m_pGroupOnLst )
                m_pGroupIntervalEd->Enable( pListBox->GetSelectEntryPos() != 0 );
        }
        else if ( nGroupPos != NO_GROUP )
        {
@@ -1209,13 +1159,13 @@ IMPL_LINK( OGroupsSortingDialog, LBChangeHdl, ListBox*, pListBox )
            aArgs[1].Name = PROPERTY_GROUP;
            aArgs[1].Value <<= xGroup;

            if ( &m_aHeaderLst  == pListBox )
            if ( m_pHeaderLst  == pListBox )
                aArgs[0].Name = PROPERTY_HEADERON;
            else
                aArgs[0].Name = PROPERTY_FOOTERON;

            aArgs[0].Value <<= pListBox->GetSelectEntryPos() == 0;
            m_pController->executeChecked(&m_aHeaderLst  == pListBox ? SID_GROUPHEADER : SID_GROUPFOOTER,aArgs);
            m_pController->executeChecked(m_pHeaderLst  == pListBox ? SID_GROUPHEADER : SID_GROUPFOOTER,aArgs);
            m_pFieldExpression->InvalidateHandleColumn();
        }
    }
@@ -1224,7 +1174,7 @@ IMPL_LINK( OGroupsSortingDialog, LBChangeHdl, ListBox*, pListBox )

void OGroupsSortingDialog::showHelpText(sal_uInt16 _nResId)
{
    m_aHelpWindow.SetText(OUString(ModuleRes(_nResId)));
    m_pHelpWindow->SetText(OUString(ModuleRes(_nResId)));
}

void OGroupsSortingDialog::_propertyChanged(const beans::PropertyChangeEvent& _rEvent) throw( uno::RuntimeException)
@@ -1244,14 +1194,14 @@ void OGroupsSortingDialog::fillColumns()

void OGroupsSortingDialog::displayGroup(const uno::Reference<report::XGroup>& _xGroup)
{
    m_aHeaderLst.SelectEntryPos(_xGroup->getHeaderOn() ? 0 : 1 );
    m_aFooterLst.SelectEntryPos(_xGroup->getFooterOn() ? 0 : 1 );
    m_pHeaderLst->SelectEntryPos(_xGroup->getHeaderOn() ? 0 : 1 );
    m_pFooterLst->SelectEntryPos(_xGroup->getFooterOn() ? 0 : 1 );
    sal_Int32 nDataType = getColumnDataType(_xGroup->getExpression());

    // first clear whole group on list
    while(m_aGroupOnLst.GetEntryCount() > 1 )
    while(m_pGroupOnLst->GetEntryCount() > 1 )
    {
        m_aGroupOnLst.RemoveEntry(1);
        m_pGroupOnLst->RemoveEntry(1);
    }

    switch(nDataType)
@@ -1259,8 +1209,8 @@ void OGroupsSortingDialog::displayGroup(const uno::Reference<report::XGroup>& _x
        case sdbc::DataType::LONGVARCHAR:
        case sdbc::DataType::VARCHAR:
        case sdbc::DataType::CHAR:
            m_aGroupOnLst.InsertEntry(OUString(ModuleRes(STR_RPT_PREFIXCHARS)));
            m_aGroupOnLst.SetEntryData(1,reinterpret_cast<void*>(report::GroupOn::PREFIX_CHARACTERS));
            m_pGroupOnLst->InsertEntry(OUString(ModuleRes(STR_RPT_PREFIXCHARS)));
            m_pGroupOnLst->SetEntryData(1,reinterpret_cast<void*>(report::GroupOn::PREFIX_CHARACTERS));
            break;
        case sdbc::DataType::DATE:
        case sdbc::DataType::TIME:
@@ -1269,14 +1219,14 @@ void OGroupsSortingDialog::displayGroup(const uno::Reference<report::XGroup>& _x
                sal_uInt16 nIds[] = { STR_RPT_YEAR, STR_RPT_QUARTER,STR_RPT_MONTH,STR_RPT_WEEK,STR_RPT_DAY,STR_RPT_HOUR,STR_RPT_MINUTE };
                for (sal_uInt16 i = 0; i < sizeof (nIds) / sizeof (nIds[0]); ++i)
                {
                    m_aGroupOnLst.InsertEntry(OUString(ModuleRes(nIds[i])));
                    m_aGroupOnLst.SetEntryData(i+1,reinterpret_cast<void*>(i+2));
                    m_pGroupOnLst->InsertEntry(OUString(ModuleRes(nIds[i])));
                    m_pGroupOnLst->SetEntryData(i+1,reinterpret_cast<void*>(i+2));
                }
            }
            break;
        default:
            m_aGroupOnLst.InsertEntry(OUString(ModuleRes(STR_RPT_INTERVAL)));
            m_aGroupOnLst.SetEntryData(1,reinterpret_cast<void*>(report::GroupOn::INTERVAL));
            m_pGroupOnLst->InsertEntry(OUString(ModuleRes(STR_RPT_INTERVAL)));
            m_pGroupOnLst->SetEntryData(1,reinterpret_cast<void*>(report::GroupOn::INTERVAL));
            break;
    }
    sal_Int32 nPos = 0;
@@ -1315,57 +1265,22 @@ void OGroupsSortingDialog::displayGroup(const uno::Reference<report::XGroup>& _x
        default:
            nPos = 0;
    }
    m_aGroupOnLst.SelectEntryPos(nPos);
    m_aGroupIntervalEd.SetText(OUString::number(_xGroup->getGroupInterval()));
    m_aGroupIntervalEd.SaveValue();
    m_aGroupIntervalEd.Enable( nPos != 0 );
    m_aKeepTogetherLst.SelectEntryPos(_xGroup->getKeepTogether());
    m_aOrderLst.SelectEntryPos(_xGroup->getSortAscending() ? 0 : 1);
    m_pGroupOnLst->SelectEntryPos(nPos);
    m_pGroupIntervalEd->SetText(OUString::number(_xGroup->getGroupInterval()));
    m_pGroupIntervalEd->SaveValue();
    m_pGroupIntervalEd->Enable( nPos != 0 );
    m_pKeepTogetherLst->SelectEntryPos(_xGroup->getKeepTogether());
    m_pOrderLst->SelectEntryPos(_xGroup->getSortAscending() ? 0 : 1);

    ListBox* pControls[] = { &m_aHeaderLst,&m_aFooterLst,&m_aGroupOnLst,&m_aKeepTogetherLst,&m_aOrderLst};
    ListBox* pControls[] = { m_pHeaderLst, m_pFooterLst, m_pGroupOnLst, m_pKeepTogetherLst, m_pOrderLst};
    for (size_t i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
        pControls[i]->SaveValue();

    ListBox* pControlsLst2[] = { &m_aHeaderLst, &m_aFooterLst,  &m_aGroupOnLst, &m_aKeepTogetherLst,&m_aOrderLst};
    ListBox* pControlsLst2[] = { m_pHeaderLst, m_pFooterLst, m_pGroupOnLst, m_pKeepTogetherLst, m_pOrderLst};
    bool bReadOnly = !m_pController->isEditable();
    for (size_t i = 0; i < sizeof(pControlsLst2)/sizeof(pControlsLst2[0]); ++i)
        pControlsLst2[i]->SetReadOnly(bReadOnly);
    m_aGroupIntervalEd.SetReadOnly(bReadOnly);
}

void OGroupsSortingDialog::Resize()
{
    Window::Resize();
    Size aTotalOutputSize = GetOutputSizePixel();
    Size aSpace = LogicToPixel( Size( UNRELATED_CONTROLS, UNRELATED_CONTROLS ), MAP_APPFONT );
    m_pFieldExpression->SetSizePixel(Size(aTotalOutputSize.Width() - 2*aSpace.Width(),m_pFieldExpression->GetSizePixel().Height()));

    Control* pControlsLst[] = { &m_aHeaderLst,  &m_aFooterLst,  &m_aGroupOnLst, &m_aGroupIntervalEd,&m_aKeepTogetherLst,&m_aOrderLst};
    Control* pControls[]    = { &m_aHeader,     &m_aFooter,     &m_aGroupOn,    &m_aGroupInterval,  &m_aKeepTogether,   &m_aOrder};
    sal_Int32 nMaxTextWidth = 0;
    for (size_t i = 0; i < sizeof (pControlsLst) / sizeof (pControlsLst[0]); ++i)
    {
        nMaxTextWidth = ::std::max<sal_Int32>(static_cast<sal_Int32>(GetTextWidth(pControls[i]->GetText())),nMaxTextWidth);
    }

    for (size_t i = 0; i < sizeof (pControlsLst) / sizeof (pControlsLst[0]); ++i)
    {
        pControls[i]->SetSizePixel(Size(nMaxTextWidth,pControls[i]->GetSizePixel().Height()));
        Point aPos = pControls[i]->GetPosPixel();
        aPos.X() += nMaxTextWidth + aSpace.Width();
        aPos.Y() = pControlsLst[i]->GetPosPixel().Y();

        pControlsLst[i]->SetPosSizePixel(aPos,Size(aTotalOutputSize.Width() - aPos.X() - aSpace.Width(),pControlsLst[i]->GetSizePixel().Height()));
    }

    m_aFL.SetSizePixel(Size(aTotalOutputSize.Width() - aSpace.Width(),m_aFL.GetSizePixel().Height()));
    m_aFL2.SetSizePixel(Size(aTotalOutputSize.Width() - aSpace.Width(),m_aFL2.GetSizePixel().Height()));
    m_aFL3.SetSizePixel(Size(aTotalOutputSize.Width() - aSpace.Width(),m_aFL3.GetSizePixel().Height()));
    sal_Int32 nPos = aTotalOutputSize.Width() - aSpace.Width() - m_aToolBox.GetSizePixel().Width();
    m_aToolBox.SetPosPixel(Point(nPos,m_aToolBox.GetPosPixel().Y()));

    Point aHelpPos = m_aHelpWindow.GetPosPixel();
    m_aHelpWindow.SetSizePixel(Size(aTotalOutputSize.Width() - aHelpPos.X(),aTotalOutputSize.Height() - aHelpPos.Y()));
    m_pGroupIntervalEd->SetReadOnly(bReadOnly);
}

void OGroupsSortingDialog::checkButtons(sal_Int32 _nRow)
@@ -1376,59 +1291,33 @@ void OGroupsSortingDialog::checkButtons(sal_Int32 _nRow)

    if (bEnabled && _nRow > 0 )
    {
        m_aToolBox.EnableItem(SID_RPT_GROUPSORT_MOVE_UP, true);
        m_pToolBox->EnableItem(m_nMoveUpId, true);
    }
    else
    {
        m_aToolBox.EnableItem(SID_RPT_GROUPSORT_MOVE_UP, false);
        m_pToolBox->EnableItem(m_nMoveUpId, false);
    }
    if (bEnabled && _nRow < (nRowCount - 1) )
    {
        m_aToolBox.EnableItem(SID_RPT_GROUPSORT_MOVE_DOWN, true);
        m_pToolBox->EnableItem(m_nMoveDownId, true);
    }
    else
    {
        m_aToolBox.EnableItem(SID_RPT_GROUPSORT_MOVE_DOWN, false);
        m_pToolBox->EnableItem(m_nMoveDownId, false);
    }

    sal_Int32 nGroupPos = m_pFieldExpression->getGroupPosition(_nRow);
    if ( nGroupPos != NO_GROUP )
    {
        bool bEnableDelete = nGroupCount > 0;
        m_aToolBox.EnableItem(SID_RPT_GROUPSORT_DELETE, bEnableDelete);
        m_pToolBox->EnableItem(m_nDeleteId, bEnableDelete);
    }
    else
    {
        m_aToolBox.EnableItem(SID_RPT_GROUPSORT_DELETE, false);
        m_pToolBox->EnableItem(m_nDeleteId, false);
    }
}

void OGroupsSortingDialog::setImageList(sal_Int16 _eBitmapSet)
{
    sal_Int16 nN = IMG_CONDFORMAT_DLG_SC;
    if ( _eBitmapSet == SFX_SYMBOLS_SIZE_LARGE )
        nN = IMG_CONDFORMAT_DLG_LC;
    m_aToolBox.SetImageList(ImageList(ModuleRes(nN)));
}

void OGroupsSortingDialog::resizeControls(const Size& _rDiff)
{
    // we use large images so we must change them
    if ( _rDiff.Width() || _rDiff.Height() )
    {
        Invalidate();
    }
}


// load the images
ImageList OGroupsSortingDialog::getImageList(vcl::ImageListType)
{
    return ImageList(ModuleRes(IMGLST_GROUPSORT_DLG_SC));
}


} // rptui


/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/ui/dlg/GroupsSorting.hrc b/reportdesign/source/ui/dlg/GroupsSorting.hrc
deleted file mode 100644
index 296ff61..0000000
--- a/reportdesign/source/ui/dlg/GroupsSorting.hrc
+++ /dev/null
@@ -1,56 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * 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/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */
#ifndef RPTUI_GROUPSSORTING_HRC
#define RPTUI_GROUPSSORTING_HRC

#define FT_HEADER           (1)
#define LST_HEADERLST       (2)
#define FT_FOOTER           (3)
#define LST_FOOTERLST       (4)
#define FT_GROUPON          (5)
#define LST_GROUPONLST      (6)
#define FT_GROUPINTERVAL    (7)
#define ED_GROUPINTERVALLST (8)
#define FT_KEEPTOGETHER     (9)
#define LST_KEEPTOGETHERLST (10)
#define WND_CONTROL         (14)
#define HELP_FIELD          (15)
#define FT_ORDER            (16)
#define LST_ORDER           (17)
#define FL_SEPARATOR1       (18)
#define FT_MOVELABEL        (19)
#define FL_SEPARATOR2       (22)
#define FL_SEPARATOR3       (23)
#define TB_TOOLBOX                      (27)

#define FIXEDTEXT_HEIGHT     8
#define FIXEDTEXT_WIDTH     60
#define RELATED_CONTROLS     4
#define UNRELATED_CONTROLS   7
#define EDIT_HEIGHT         12
#define BUTTON_HEIGHT       14
#define BUTTON_WIDTH        50
#define BROWSER_HEIGHT      75
#define PAGE_WIDTH          120
#define PAGE_HEIGHT         ( 13*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + 11*FIXEDTEXT_HEIGHT )
#define LISTBOX_WIDTH       PAGE_WIDTH - 4*UNRELATED_CONTROLS - FIXEDTEXT_WIDTH

#endif // RPTUI_GROUPSSORTING_HRC

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/ui/dlg/GroupsSorting.src b/reportdesign/source/ui/dlg/GroupsSorting.src
index 63f4086..25ead95 100644
--- a/reportdesign/source/ui/dlg/GroupsSorting.src
+++ b/reportdesign/source/ui/dlg/GroupsSorting.src
@@ -16,246 +16,11 @@
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */
#include "GroupsSorting.hrc"
#include "RptResId.hrc"
#include "helpids.hrc"
#include <svx/globlmn.hrc>
#include <svx/svxids.hrc>

FloatingWindow RID_GROUPS_SORTING
{
    OutputSize = TRUE ;
    SVLook = TRUE ;
    Size = MAP_APPFONT ( PAGE_WIDTH , PAGE_HEIGHT ) ;
    Text [ en-US ] = "Sorting and Grouping" ;
    HelpId = HID_RPT_GROUPSSORTING_DLG;
    Moveable = TRUE ;
    Closeable = TRUE ;
    Sizeable = TRUE;

    FixedLine FL_SEPARATOR2
    {
        Pos = MAP_APPFONT ( RELATED_CONTROLS , RELATED_CONTROLS ) ;
        Size = MAP_APPFONT ( PAGE_WIDTH - 2*RELATED_CONTROLS , FIXEDTEXT_HEIGHT ) ;
        Text [ en-US ] = "Groups";
    };

    Control WND_CONTROL
    {
        Pos = MAP_APPFONT( UNRELATED_CONTROLS, 2*UNRELATED_CONTROLS );
        Size = MAP_APPFONT( PAGE_WIDTH - 2*UNRELATED_CONTROLS, BROWSER_HEIGHT );
        HelpId = HID_RPT_GROUPSBRW ;
        Border = TRUE;
        TabStop = TRUE;
    };

    FixedText FT_MOVELABEL
    {
        Pos = MAP_APPFONT ( UNRELATED_CONTROLS , 3*UNRELATED_CONTROLS + BROWSER_HEIGHT ) ;
        Size = MAP_APPFONT ( FIXEDTEXT_WIDTH , FIXEDTEXT_HEIGHT ) ;
        Text [ en-US ] = "Group actions" ;
    };

    ToolBox TB_TOOLBOX
    {
        Pos = MAP_APPFONT ( PAGE_WIDTH - 4*14 - UNRELATED_CONTROLS, 3*UNRELATED_CONTROLS + BROWSER_HEIGHT - 1 ) ;
        ButtonType = BUTTON_SYMBOL;
        Customize = FALSE;
        ItemList =
        {
            ToolBoxItem
            {
                Identifier = SID_RPT_GROUPSORT_MOVE_UP ;
                HelpID = HID_RPT_GROUPSORT_MOVE_UP ;
                Text [ en-US ] = "Move up" ;
                Checkable = TRUE;
            };
            ToolBoxItem
            {
                Identifier = SID_RPT_GROUPSORT_MOVE_DOWN ;
                HelpID = HID_RPT_GROUPSORT_MOVE_DOWN ;
                Text [ en-US ] = "Move down" ;
                Checkable = TRUE;
            };
            ToolBoxItem
            {
                Identifier = SID_RPT_GROUPSORT_DELETE ;
                HelpID = HID_RPT_GROUPSORT_DELETE ;
                Text [ en-US ] = "~Delete" ;
                Checkable = TRUE;
            };
        };
    };

    FixedLine FL_SEPARATOR3
    {
        Pos = MAP_APPFONT ( RELATED_CONTROLS , 3*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT) ;
        Size = MAP_APPFONT ( PAGE_WIDTH - 2*RELATED_CONTROLS , FIXEDTEXT_HEIGHT ) ;
        Text [ en-US ] = "Properties";
    };

    FixedText FT_ORDER
    {
        Pos = MAP_APPFONT ( UNRELATED_CONTROLS , 4*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + FIXEDTEXT_HEIGHT ) ;
        Size = MAP_APPFONT ( FIXEDTEXT_WIDTH , FIXEDTEXT_HEIGHT ) ;
        Hide = TRUE;
        Text [ en-US ] = "Sorting" ;
    };

    ListBox LST_ORDER
    {
        HelpID = "reportdesign:ListBox:RID_GROUPS_SORTING:LST_ORDER";
        Border = TRUE;
        Pos = MAP_APPFONT(2*UNRELATED_CONTROLS + FIXEDTEXT_WIDTH, 4*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + FIXEDTEXT_HEIGHT - 1 );
        Size = MAP_APPFONT( LISTBOX_WIDTH, 60 );
        DropDown = TRUE;
        TabStop = TRUE;
        Hide = TRUE;
        CurPos = 0 ;
        StringList [ en-US ] =
        {
            < "Ascending" ; 0 ; > ;
            < "Descending" ; 1 ; > ;
        };

    };

    FixedText FT_HEADER
    {
        Pos = MAP_APPFONT ( UNRELATED_CONTROLS , 5*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + 2*FIXEDTEXT_HEIGHT) ;
        Size = MAP_APPFONT ( FIXEDTEXT_WIDTH , FIXEDTEXT_HEIGHT ) ;
        Hide = TRUE;
        Text [ en-US ] = "Group Header" ;

    };

    ListBox LST_HEADERLST
    {
        HelpID = "reportdesign:ListBox:RID_GROUPS_SORTING:LST_HEADERLST";
        Border = TRUE;
        Hide = TRUE;
        Pos = MAP_APPFONT( 2*UNRELATED_CONTROLS + FIXEDTEXT_WIDTH, 5*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + 2*FIXEDTEXT_HEIGHT -1);
        Size = MAP_APPFONT( LISTBOX_WIDTH, 60 );
        DropDown = TRUE;
        TabStop = TRUE;
        CurPos = 1 ;
        StringList [ en-US ] =
        {
            < "Present" ; Default ; > ;
            < "Not present" ; Default ; > ;
        };
    };

    FixedText FT_FOOTER
    {
        Pos = MAP_APPFONT (  UNRELATED_CONTROLS, 6*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + 3*FIXEDTEXT_HEIGHT) ;
        Size = MAP_APPFONT ( FIXEDTEXT_WIDTH , FIXEDTEXT_HEIGHT ) ;
        Hide = TRUE;
        Text [ en-US ] = "Group Footer" ;

    };

    ListBox LST_FOOTERLST
    {
        HelpID = "reportdesign:ListBox:RID_GROUPS_SORTING:LST_FOOTERLST";
        Border = TRUE;
        Hide = TRUE;
        Pos = MAP_APPFONT( 2*UNRELATED_CONTROLS + FIXEDTEXT_WIDTH, 6*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + 3*FIXEDTEXT_HEIGHT -1);
        Size = MAP_APPFONT( LISTBOX_WIDTH, 60 );
        DropDown = TRUE;
        TabStop = TRUE;
        CurPos = 1 ;
        StringList [ en-US ] =
        {
            < "Present" ; Default ; > ;
            < "Not present" ; Default ; > ;
        };
    };

    FixedText FT_GROUPON
    {
        Pos = MAP_APPFONT (  UNRELATED_CONTROLS, 7*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + 4*FIXEDTEXT_HEIGHT) ;
        Size = MAP_APPFONT ( FIXEDTEXT_WIDTH , FIXEDTEXT_HEIGHT ) ;
        Hide = TRUE;
        Text [ en-US ] = "Group On" ;

    };

    ListBox LST_GROUPONLST
    {
        HelpID = "reportdesign:ListBox:RID_GROUPS_SORTING:LST_GROUPONLST";
        Border = TRUE;
        Hide = TRUE;
        Pos = MAP_APPFONT( 2*UNRELATED_CONTROLS + FIXEDTEXT_WIDTH, 7*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + 4*FIXEDTEXT_HEIGHT -1);
        Size = MAP_APPFONT( LISTBOX_WIDTH, 60 );
        DropDown = TRUE;
        TabStop = TRUE;
        CurPos = 0 ;
        StringList [ en-US ] =
        {
            < "Each Value" ; Default ; > ;
        };
    };

    FixedText FT_GROUPINTERVAL
    {
        Pos = MAP_APPFONT ( UNRELATED_CONTROLS , 8*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + 5*FIXEDTEXT_HEIGHT) ;
        Size = MAP_APPFONT ( FIXEDTEXT_WIDTH , FIXEDTEXT_HEIGHT ) ;
        Hide = TRUE;
        Text [ en-US ] = "Group Interval" ;
    };

    NumericField ED_GROUPINTERVALLST
    {
        HelpID = "reportdesign:NumericField:RID_GROUPS_SORTING:ED_GROUPINTERVALLST";
        Border = TRUE;
        Hide = TRUE;
        Pos = MAP_APPFONT(2*UNRELATED_CONTROLS + FIXEDTEXT_WIDTH , 8*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + 5*FIXEDTEXT_HEIGHT -1);
        Size = MAP_APPFONT( LISTBOX_WIDTH, EDIT_HEIGHT );
        TabStop = TRUE;
    };

    FixedText FT_KEEPTOGETHER
    {
        Pos = MAP_APPFONT ( UNRELATED_CONTROLS , 9*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + 6*FIXEDTEXT_HEIGHT) ;
        Size = MAP_APPFONT ( FIXEDTEXT_WIDTH , FIXEDTEXT_HEIGHT ) ;
        Hide = TRUE;
        Text [ en-US ] = "Keep Together" ;
    };
    ListBox LST_KEEPTOGETHERLST
    {
        HelpID = "reportdesign:ListBox:RID_GROUPS_SORTING:LST_KEEPTOGETHERLST";
        Border = TRUE;
        Hide = TRUE;
        Pos = MAP_APPFONT(2*UNRELATED_CONTROLS + FIXEDTEXT_WIDTH , 9*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + 6*FIXEDTEXT_HEIGHT -1);
        Size = MAP_APPFONT( LISTBOX_WIDTH, 60 );
        DropDown = TRUE;
        TabStop = TRUE;
        CurPos = 0 ;
        StringList [ en-US ] =
        {
            < "No" ; 0 ; > ;
            < "Whole Group" ; 1 ; > ;
            < "With First Detail" ; 2 ; > ;
        };
    };

    FixedLine FL_SEPARATOR1
    {
        Pos = MAP_APPFONT ( RELATED_CONTROLS , 10*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + 7*FIXEDTEXT_HEIGHT) ;
        Size = MAP_APPFONT ( PAGE_WIDTH - 2*RELATED_CONTROLS , FIXEDTEXT_HEIGHT ) ;
        Text [ en-US ] = "Help";
    };

    FixedText HELP_FIELD
    {
        Pos = MAP_APPFONT ( UNRELATED_CONTROLS , 12*UNRELATED_CONTROLS + BROWSER_HEIGHT + BUTTON_HEIGHT + 7*FIXEDTEXT_HEIGHT) ;
        Size = MAP_APPFONT( PAGE_WIDTH - 2*UNRELATED_CONTROLS, 4*FIXEDTEXT_HEIGHT);
        WordBreak = TRUE;
    };

};

String STR_RPT_EXPRESSION
{
    Text [ en-US ] = "Field/Expression" ;
@@ -357,24 +122,4 @@ Menu RID_GROUPSROWPOPUPMENU
    };
};

#define DEF_MASKCOLOR MaskColor = Color { Red = 0xFFFF; Green = 0x0000; Blue = 0xFFFF; }

#define DEF_IL_GROUPSORT \
\
    IdList = {\
        SID_RPT_GROUPSORT_MOVE_UP;\
        SID_RPT_GROUPSORT_MOVE_DOWN;\
        SID_RPT_GROUPSORT_DELETE;\
        };\
    IdCount = {\
    3;\
    }

ImageList IMGLST_GROUPSORT_DLG_SC
{
    DEF_MASKCOLOR;
    prefix = "sc";
    DEF_IL_GROUPSORT ;
};

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/ui/inc/GroupsSorting.hxx b/reportdesign/source/ui/inc/GroupsSorting.hxx
index feb4d4d..4b9be4c 100644
--- a/reportdesign/source/ui/inc/GroupsSorting.hxx
+++ b/reportdesign/source/ui/inc/GroupsSorting.hxx
@@ -21,6 +21,7 @@

#include <vcl/floatwin.hxx>
#include <vcl/fixed.hxx>
#include <vcl/layout.hxx>
#include <vcl/lstbox.hxx>
#include <vcl/edit.hxx>
#include <vcl/field.hxx>
@@ -58,30 +59,22 @@ class OReportController;
class OGroupsSortingDialog :    public FloatingWindow
                           ,    public ::cppu::BaseMutex
                           ,    public ::comphelper::OPropertyChangeListener
                           ,    public dbaui::OToolBoxHelper
                           ,    public vcl::IImageListProvider
{
    friend class OFieldExpressionControl;

    FixedLine                               m_aFL2;
    FixedText                               m_aMove;
    ToolBox                                 m_aToolBox;
    ToolBox*                                m_pToolBox;
    sal_uInt16                              m_nMoveUpId;
    sal_uInt16                              m_nMoveDownId;
    sal_uInt16                              m_nDeleteId;

    FixedLine                               m_aFL3;
    FixedText                               m_aOrder;
    ListBox                                 m_aOrderLst;
    FixedText                               m_aHeader;
    ListBox                                 m_aHeaderLst;
    FixedText                               m_aFooter;
    ListBox                                 m_aFooterLst;
    FixedText                               m_aGroupOn;
    ListBox                                 m_aGroupOnLst;
    FixedText                               m_aGroupInterval;
    NumericField                            m_aGroupIntervalEd;
    FixedText                               m_aKeepTogether;
    ListBox                                 m_aKeepTogetherLst;
    FixedLine                               m_aFL;
    FixedText                               m_aHelpWindow;
    VclContainer*                           m_pProperties;
    ListBox*                                m_pOrderLst;
    ListBox*                                m_pHeaderLst;
    ListBox*                                m_pFooterLst;
    ListBox*                                m_pGroupOnLst;
    NumericField*                           m_pGroupIntervalEd;
    ListBox*                                m_pKeepTogetherLst;
    FixedText*                              m_pHelpWindow;

    OFieldExpressionControl*                m_pFieldExpression;
    ::rptui::OReportController*             m_pController;
@@ -147,8 +140,6 @@ private:
    OGroupsSortingDialog(OGroupsSortingDialog&);
    void operator =(OGroupsSortingDialog&);
protected:
    // window
    virtual void    Resize() SAL_OVERRIDE;
    // OPropertyChangeListener
    virtual void    _propertyChanged(const ::com::sun::star::beans::PropertyChangeEvent& _rEvent) throw( ::com::sun::star::uno::RuntimeException) SAL_OVERRIDE;
public:
@@ -165,22 +156,6 @@ public:
    /* updates the current view
    */
    void UpdateData( );

        /** will be called when the controls need to be resized.
            @param  _rDiff
                Contains the difference of the old and new toolbox size.
        */
        virtual void resizeControls(const Size& _rDiff) SAL_OVERRIDE;

        /** will be called when the image list needs to change
            @param  _eSymbolsSize
                <svtools/imgdef.hxx>
        */
    virtual void setImageList(sal_Int16 _eSymbolsSize) SAL_OVERRIDE;

    // ImageListProvider interface
    virtual ImageList getImageList(vcl::ImageListType) SAL_OVERRIDE;

};

} // namespace rptui
diff --git a/reportdesign/source/ui/report/ReportController.cxx b/reportdesign/source/ui/report/ReportController.cxx
index c442fd8..51b031f 100644
--- a/reportdesign/source/ui/report/ReportController.cxx
+++ b/reportdesign/source/ui/report/ReportController.cxx
@@ -327,7 +327,7 @@ void OReportController::disposing()
    }
    if ( m_pGroupsFloater )
    {
        SvtViewOptions aDlgOpt( E_WINDOW, OUString::number( RID_GROUPS_SORTING ) );
        SvtViewOptions aDlgOpt(E_WINDOW, OStringToOUString(m_pGroupsFloater->GetHelpId(), RTL_TEXTENCODING_UTF8));
        aDlgOpt.SetWindowState(OStringToOUString(m_pGroupsFloater->GetWindowState(WINDOWSTATE_MASK_ALL), RTL_TEXTENCODING_ASCII_US));
        SAL_WNODEPRECATED_DECLARATIONS_PUSH
        ::std::auto_ptr<FloatingWindow> aTemp(m_pGroupsFloater);
@@ -2539,7 +2539,7 @@ void OReportController::openSortingAndGroupingDialog()
    if ( !m_pGroupsFloater )
    {
        m_pGroupsFloater = new OGroupsSortingDialog(getView(),!isEditable(),this);
        SvtViewOptions aDlgOpt( E_WINDOW, OUString::number( RID_GROUPS_SORTING) );
        SvtViewOptions aDlgOpt(E_WINDOW, OStringToOUString(m_pGroupsFloater->GetHelpId(), RTL_TEXTENCODING_UTF8));
        if ( aDlgOpt.Exists() )
            m_pGroupsFloater->SetWindowState(OUStringToOString(aDlgOpt.GetWindowState(), RTL_TEXTENCODING_ASCII_US));
        m_pGroupsFloater->AddEventListener(LINK(this,OReportController,EventLstHdl));
diff --git a/reportdesign/uiconfig/dbreport/ui/floatingsort.ui b/reportdesign/uiconfig/dbreport/ui/floatingsort.ui
new file mode 100644
index 0000000..d29f7b1
--- /dev/null
+++ b/reportdesign/uiconfig/dbreport/ui/floatingsort.ui
@@ -0,0 +1,453 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<interface>
  <requires lib="gtk+" version="3.0"/>
  <object class="GtkWindow" id="FloatingSort">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="hexpand">True</property>
    <property name="vexpand">True</property>
    <property name="border_width">6</property>
    <property name="title" translatable="yes">Sorting and Grouping</property>
    <property name="type_hint">utility</property>
    <child>
      <object class="GtkGrid" id="grid1">
        <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">12</property>
        <child>
          <object class="GtkFrame" id="frame1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="hexpand">True</property>
            <property name="vexpand">True</property>
            <property name="label_xalign">0</property>
            <property name="shadow_type">none</property>
            <child>
              <object class="GtkAlignment" id="alignment1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="hexpand">True</property>
                <property name="vexpand">True</property>
                <property name="top_padding">6</property>
                <property name="left_padding">12</property>
                <child>
                  <object class="GtkGrid" id="grid2">
                    <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>
                    <child>
                      <object class="GtkGrid" id="grid3">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="column_spacing">12</property>
                        <child>
                          <object class="GtkLabel" id="label5">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="xalign">0</property>
                            <property name="label" translatable="yes">Group actions</property>
                            <property name="use_underline">True</property>
                            <property name="mnemonic_widget">toolbox</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="GtkToolbar" id="toolbox">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="halign">end</property>
                            <property name="hexpand">True</property>
                            <property name="toolbar_style">icons</property>
                            <child>
                              <object class="GtkToolButton" id="up">
                                <property name="visible">True</property>
                                <property name="can_focus">False</property>
                                <property name="label" translatable="yes">Move up</property>
                                <property name="use_underline">True</property>
                                <property name="icon_name">cmd/sc_moveup.png</property>
                              </object>
                              <packing>
                                <property name="expand">False</property>
                                <property name="homogeneous">True</property>
                              </packing>
                            </child>
                            <child>
                              <object class="GtkToolButton" id="down">
                                <property name="visible">True</property>
                                <property name="can_focus">False</property>
                                <property name="label" translatable="yes">Move down</property>
                                <property name="use_underline">True</property>
                                <property name="icon_name">cmd/sc_movedown.png</property>
                              </object>
                              <packing>
                                <property name="expand">False</property>
                                <property name="homogeneous">True</property>
                              </packing>
                            </child>
                            <child>
                              <object class="GtkToolButton" id="delete">
                                <property name="visible">True</property>
                                <property name="can_focus">False</property>
                                <property name="label" translatable="yes">Delete</property>
                                <property name="use_underline">True</property>
                                <property name="icon_name">cmd/sc_deleterows.png</property>
                              </object>
                              <packing>
                                <property name="expand">False</property>
                                <property name="homogeneous">True</property>
                              </packing>
                            </child>
                          </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>
                      </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="GtkBox" id="box">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="hexpand">True</property>
                        <property name="vexpand">True</property>
                        <property name="orientation">vertical</property>
                        <child>
                          <placeholder/>
                        </child>
                      </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>
                  </object>
                </child>
              </object>
            </child>
            <child type="label">
              <object class="GtkLabel" id="label1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">Groups</property>
                <attributes>
                  <attribute name="weight" value="bold"/>
                </attributes>
              </object>
            </child>
          </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="GtkFrame" id="properties">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="hexpand">True</property>
            <property name="label_xalign">0</property>
            <property name="shadow_type">none</property>
            <child>
              <object class="GtkAlignment" id="alignment2">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="hexpand">True</property>
                <property name="top_padding">6</property>
                <property name="left_padding">12</property>
                <child>
                  <object class="GtkGrid" id="grid4">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="hexpand">True</property>
                    <property name="row_spacing">6</property>
                    <property name="column_spacing">12</property>
                    <child>
                      <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">Sorting</property>
                        <property name="use_underline">True</property>
                        <property name="mnemonic_widget">sorting</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="label7">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes">Group Header</property>
                        <property name="use_underline">True</property>
                        <property name="mnemonic_widget">header</property>
                      </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="GtkLabel" id="label8">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes">Group Footer</property>
                        <property name="use_underline">True</property>
                        <property name="mnemonic_widget">footer</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="label9">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes">Group On</property>
                        <property name="use_underline">True</property>
                        <property name="mnemonic_widget">group</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="label10">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes">Group Interval</property>
                        <property name="use_underline">True</property>
                        <property name="mnemonic_widget">interval</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="GtkLabel" id="label11">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes">Keep Together</property>
                        <property name="use_underline">True</property>
                        <property name="mnemonic_widget">keep</property>
                      </object>
                      <packing>
                        <property name="left_attach">0</property>
                        <property name="top_attach">5</property>
                        <property name="width">1</property>
                        <property name="height">1</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="sorting">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="hexpand">True</property>
                        <property name="active">0</property>
                        <items>
                          <item translatable="yes">Ascending</item>
                          <item translatable="yes">Descending</item>
                        </items>
                      </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="GtkComboBoxText" id="header">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="hexpand">True</property>
                        <property name="active">0</property>
                        <items>
                          <item translatable="yes">Present</item>
                          <item translatable="yes">Not present</item>
                        </items>
                      </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="GtkComboBoxText" id="keep">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="hexpand">True</property>
                        <property name="active">0</property>
                        <items>
                          <item translatable="yes">No</item>
                          <item translatable="yes">Whole Group</item>
                          <item translatable="yes">With First Detail</item>
                        </items>
                      </object>
                      <packing>
                        <property name="left_attach">1</property>
                        <property name="top_attach">5</property>
                        <property name="width">1</property>
                        <property name="height">1</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="footer">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="hexpand">True</property>
                        <property name="active">1</property>
                        <items>
                          <item translatable="yes">Present</item>
                          <item translatable="yes">Not present</item>
                        </items>
                      </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="group">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="hexpand">True</property>
                        <property name="active">0</property>
                        <items>
                          <item translatable="yes">Each Value</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="GtkSpinButton" id="interval">
                        <property name="visible">True</property>
                        <property name="can_focus">True</property>
                        <property name="hexpand">True</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>
                </child>
              </object>
            </child>
            <child type="label">
              <object class="GtkLabel" id="label2">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">Properties</property>
                <attributes>
                  <attribute name="weight" value="bold"/>
                </attributes>
              </object>
            </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="GtkFrame" id="frame3">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label_xalign">0</property>
            <property name="shadow_type">none</property>
            <child>
              <object class="GtkAlignment" id="alignment3">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="top_padding">6</property>
                <property name="left_padding">12</property>
                <child>
                  <object class="GtkLabel" id="helptext">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="xalign">0</property>
                    <property name="yalign">0</property>
                    <property name="wrap">True</property>
                    <property name="max_width_chars">52</property>
                  </object>
                </child>
              </object>
            </child>
            <child type="label">
              <object class="GtkLabel" id="label3">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">Help</property>
                <attributes>
                  <attribute name="weight" value="bold"/>
                </attributes>
              </object>
            </child>
          </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>
      </object>
    </child>
  </object>
</interface>