use Markus's sort page

Change-Id: I7be1c78b01258831e1a313bc57dc6e20ec4af0ed
diff --git a/sc/UI_scalc.mk b/sc/UI_scalc.mk
index 628752b..4dd79cd 100644
--- a/sc/UI_scalc.mk
+++ b/sc/UI_scalc.mk
@@ -11,6 +11,7 @@ $(eval $(call gb_UI_UI,modules/scalc))

$(eval $(call gb_UI_add_uifiles,modules/scalc,\
	sc/uiconfig/scalc/ui/printeroptions \
	sc/uiconfig/scalc/ui/sortpage \
	sc/uiconfig/scalc/ui/textimportoptions \
))

diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h
index 8695891..3913e55 100644
--- a/sc/inc/helpids.h
+++ b/sc/inc/helpids.h
@@ -81,7 +81,6 @@
#define HID_SC_INPORTOPT                                        "SC_HID_SC_INPORTOPT"
#define HID_SC_PIVOTSUBT                                        "SC_HID_SC_PIVOTSUBT"
#define HID_SCPAGE_SORT_FIELDS                                  "SC_HID_SCPAGE_SORT_FIELDS"
#define HID_SCPAGE_SORT_OPTIONS                                 "SC_HID_SCPAGE_SORT_OPTIONS"
#define HID_SCPAGE_SUBT_OPTIONS                                 "SC_HID_SCPAGE_SUBT_OPTIONS"
#define HID_SCPAGE_SUBT_GROUP                                   "SC_HID_SCPAGE_SUBT_GROUP"
#define HID_SCPAGE_PROTECTION                                   "SC_HID_SCPAGE_PROTECTION"
diff --git a/sc/inc/sc.hrc b/sc/inc/sc.hrc
index 807a023..1bb2b8c 100644
--- a/sc/inc/sc.hrc
+++ b/sc/inc/sc.hrc
@@ -787,6 +787,9 @@
#define SCSTR_GRFILTER_TOOBIG        (STR_START + 82)
#define SCSTR_UNDO_GRAFFILTER        (STR_START + 83)

#define SCSTR_COL_LABEL              (STR_START + 84)
#define SCSTR_ROW_LABEL              (STR_START + 85)

#define SCSTR_CHG_PROTECT       (STR_START + 86)
#define SCSTR_CHG_UNPROTECT     (STR_START + 87)

@@ -945,7 +948,7 @@
#define RID_SCPAGE_PROTECTION   (SC_DIALOGS_START + 3)
#define RID_SCDLG_SORT          (SC_DIALOGS_START + 5)
#define RID_SCPAGE_SORT_FIELDS  (SC_DIALOGS_START + 6)
#define RID_SCPAGE_SORT_OPTIONS (SC_DIALOGS_START + 7)

#define RID_SCDLG_FILTER        (SC_DIALOGS_START + 8)
#define RID_SCDLG_SPEC_FILTER   (SC_DIALOGS_START + 9)
#define RID_SCDLG_DELCELL       (SC_DIALOGS_START + 11)
diff --git a/sc/source/ui/dbgui/tpsort.cxx b/sc/source/ui/dbgui/tpsort.cxx
index 6c075bb..31e5b9b 100644
--- a/sc/source/ui/dbgui/tpsort.cxx
+++ b/sc/source/ui/dbgui/tpsort.cxx
@@ -491,61 +491,51 @@ IMPL_LINK( ScTabPageSortFields, SelectHdl, ListBox *, pLb )

ScTabPageSortOptions::ScTabPageSortOptions( Window*             pParent,
                                            const SfxItemSet&   rArgSet )

    :   SfxTabPage      ( pParent,
                          ScResId( RID_SCPAGE_SORT_OPTIONS ),
                          rArgSet ),
        //
        aBtnCase        ( this, ScResId( BTN_CASESENSITIVE ) ),
        aBtnHeader      ( this, ScResId( BTN_LABEL ) ),
        aBtnFormats     ( this, ScResId( BTN_FORMATS ) ),
        aBtnNaturalSort ( this, ScResId( BTN_NATURALSORT ) ),
        aBtnCopyResult  ( this, ScResId( BTN_COPYRESULT ) ),
        aLbOutPos       ( this, ScResId( LB_OUTAREA ) ),
        aEdOutPos       ( this, ScResId( ED_OUTAREA ) ),
        aBtnSortUser    ( this, ScResId( BTN_SORT_USER ) ),
        aLbSortUser     ( this, ScResId( LB_SORT_USER ) ),
        aFtLanguage     ( this, ScResId( FT_LANGUAGE ) ),
        aLbLanguage     ( this, ScResId( LB_LANGUAGE ) ),
        aFtAlgorithm    ( this, ScResId( FT_ALGORITHM ) ),
        aLbAlgorithm    ( this, ScResId( LB_ALGORITHM ) ),
        aLineDirection  ( this, ScResId( FL_DIRECTION ) ),
        aBtnTopDown     ( this, ScResId( BTN_TOP_DOWN ) ),
        aBtnLeftRight   ( this, ScResId( BTN_LEFT_RIGHT ) ),
        //
        aStrRowLabel    ( SC_RESSTR( STR_ROW_LABEL ) ),
        aStrColLabel    ( SC_RESSTR( STR_COL_LABEL ) ),
        aStrUndefined   ( SC_RESSTR( SCSTR_UNDEFINED ) ),
        //
        nWhichSort      ( rArgSet.GetPool()->GetWhich( SID_SORT ) ),
        aSortData       ( ((const ScSortItem&)
                          rArgSet.Get( nWhichSort )).GetSortData() ),
        pViewData       ( NULL ),
        pDoc            ( NULL ),
        pDlg            ( (ScSortDlg*)(GetParentDialog()) ),
        pColRes         ( NULL ),
        pColWrap        ( NULL )
    : SfxTabPage(pParent, "SortPage", "modules/scalc/ui/sortpage.ui", rArgSet)
    , aStrRowLabel(SC_RESSTR(SCSTR_ROW_LABEL))
    , aStrColLabel(SC_RESSTR(SCSTR_COL_LABEL))
    , aStrUndefined(SC_RESSTR(SCSTR_UNDEFINED))
    , nWhichSort(rArgSet.GetPool()->GetWhich(SID_SORT))
    , aSortData(((const ScSortItem&)rArgSet.Get(nWhichSort)).GetSortData())
    , pViewData(NULL)
    , pDoc(NULL)
    , pDlg((ScSortDlg*)(GetParentDialog()))
    , pColRes( NULL )
    , pColWrap( NULL )
{
    get(m_pBtnCase, "case");
    get(m_pBtnHeader, "header");
    get(m_pBtnFormats, "formats");
    get(m_pBtnNaturalSort, "naturalsort");
    get(m_pBtnCopyResult, "copyresult");
    get(m_pLbOutPos, "outarealb");
    get(m_pEdOutPos, "outareaed");
    get(m_pBtnSortUser, "sortuser");
    get(m_pLbSortUser, "sortuserlb");
    get(m_pFtAlgorithm, "algorithmft");
    get(m_pLbAlgorithm, "algorithmlb");
    get(m_pBtnTopDown, "topdown");
    get(m_pBtnLeftRight, "leftright");
    get(m_pLbLanguage, "language");
    Init();
    FreeResource();
    SetExchangeSupport();

    aLbOutPos.SetAccessibleRelationLabeledBy(&aBtnCopyResult);
    aLbOutPos.SetAccessibleName(aBtnCopyResult.GetText());
    aEdOutPos.SetAccessibleRelationLabeledBy(&aBtnCopyResult);
    aEdOutPos.SetAccessibleName(aBtnCopyResult.GetText());
    aLbSortUser.SetAccessibleRelationLabeledBy(&aBtnSortUser);
    aLbSortUser.SetAccessibleName(aBtnSortUser.GetText());
    m_pLbOutPos->SetAccessibleRelationLabeledBy(m_pBtnCopyResult);
    m_pLbOutPos->SetAccessibleName(m_pBtnCopyResult->GetText());
    m_pEdOutPos->SetAccessibleRelationLabeledBy(m_pBtnCopyResult);
    m_pEdOutPos->SetAccessibleName(m_pBtnCopyResult->GetText());
    m_pLbSortUser->SetAccessibleRelationLabeledBy(m_pBtnSortUser);
    m_pLbSortUser->SetAccessibleName(m_pBtnSortUser->GetText());
}

// -----------------------------------------------------------------------

ScTabPageSortOptions::~ScTabPageSortOptions()
{
    sal_uInt16 nEntries = aLbOutPos.GetEntryCount();
    sal_uInt16 nEntries = m_pLbOutPos->GetEntryCount();

    for ( sal_uInt16 i=1; i<nEntries; i++ )
        delete (rtl::OUString*)aLbOutPos.GetEntryData( i );
        delete (rtl::OUString*)m_pLbOutPos->GetEntryData( i );

    delete pColRes;
    delete pColWrap;        //! not if from document
@@ -564,12 +554,12 @@ void ScTabPageSortOptions::Init()
    const ScSortItem&   rSortItem = (const ScSortItem&)
                                    GetItemSet().Get( nWhichSort );

    aLbOutPos.SetSelectHdl    ( LINK( this, ScTabPageSortOptions, SelOutPosHdl ) );
    aBtnCopyResult.SetClickHdl( LINK( this, ScTabPageSortOptions, EnableHdl ) );
    aBtnSortUser.SetClickHdl  ( LINK( this, ScTabPageSortOptions, EnableHdl ) );
    aBtnTopDown.SetClickHdl   ( LINK( this, ScTabPageSortOptions, SortDirHdl ) );
    aBtnLeftRight.SetClickHdl ( LINK( this, ScTabPageSortOptions, SortDirHdl ) );
    aLbLanguage.SetSelectHdl  ( LINK( this, ScTabPageSortOptions, FillAlgorHdl ) );
    m_pLbOutPos->SetSelectHdl    ( LINK( this, ScTabPageSortOptions, SelOutPosHdl ) );
    m_pBtnCopyResult->SetClickHdl( LINK( this, ScTabPageSortOptions, EnableHdl ) );
    m_pBtnSortUser->SetClickHdl  ( LINK( this, ScTabPageSortOptions, EnableHdl ) );
    m_pBtnTopDown->SetClickHdl   ( LINK( this, ScTabPageSortOptions, SortDirHdl ) );
    m_pBtnLeftRight->SetClickHdl ( LINK( this, ScTabPageSortOptions, SortDirHdl ) );
    m_pLbLanguage->SetSelectHdl  ( LINK( this, ScTabPageSortOptions, FillAlgorHdl ) );

    pViewData = rSortItem.GetViewData();
    pDoc      = pViewData ? pViewData->GetDocument() : NULL;
@@ -586,9 +576,9 @@ void ScTabPageSortOptions::Init()
        rtl::OUString          theDbName   = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(STR_DB_LOCAL_NONAME));
        const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention();

        aLbOutPos.Clear();
        aLbOutPos.InsertEntry( aStrUndefined, 0 );
        aLbOutPos.Disable();
        m_pLbOutPos->Clear();
        m_pLbOutPos->InsertEntry( aStrUndefined, 0 );
        m_pLbOutPos->Disable();

        ScAreaNameIterator aIter( pDoc );
        rtl::OUString aName;
@@ -596,14 +586,14 @@ void ScTabPageSortOptions::Init()
        rtl::OUString aRefStr;
        while ( aIter.Next( aName, aRange ) )
        {
            sal_uInt16 nInsert = aLbOutPos.InsertEntry( aName );
            sal_uInt16 nInsert = m_pLbOutPos->InsertEntry( aName );

            aRange.aStart.Format( aRefStr, SCA_ABS_3D, pDoc, eConv );
            aLbOutPos.SetEntryData( nInsert, new rtl::OUString( aRefStr ) );
            m_pLbOutPos->SetEntryData( nInsert, new rtl::OUString( aRefStr ) );
        }

        aLbOutPos.SelectEntryPos( 0 );
        aEdOutPos.SetText( EMPTY_STRING );
        m_pLbOutPos->SelectEntryPos( 0 );
        m_pEdOutPos->SetText( EMPTY_STRING );

        // Check whether the field that is passed on is a database field:

@@ -621,7 +611,7 @@ void ScTabPageSortOptions::Init()
            if ( pDBData )
            {
                theDbName = pDBData->GetName();
                aBtnHeader.Check( pDBData->HasHeader() );
                m_pBtnHeader->Check( pDBData->HasHeader() );
            }
        }

@@ -629,15 +619,15 @@ void ScTabPageSortOptions::Init()
        theArea += theDbName;
        theArea += ')';

        aBtnHeader.SetText( aStrColLabel );
        m_pBtnHeader->SetText( aStrColLabel );
    }

    FillUserSortListBox();

    //  get available languages

    aLbLanguage.SetLanguageList( LANG_LIST_ALL | LANG_LIST_ONLY_KNOWN, false );
    aLbLanguage.InsertLanguage( LANGUAGE_SYSTEM );
    m_pLbLanguage->SetLanguageList( LANG_LIST_ALL | LANG_LIST_ONLY_KNOWN, false );
    m_pLbLanguage->InsertLanguage( LANGUAGE_SYSTEM );
}

// -----------------------------------------------------------------------
@@ -655,40 +645,40 @@ void ScTabPageSortOptions::Reset( const SfxItemSet& /* rArgSet */ )
{
    if ( aSortData.bUserDef )
    {
        aBtnSortUser.Check( sal_True );
        aLbSortUser.Enable();
        aLbSortUser.SelectEntryPos( aSortData.nUserIndex );
        m_pBtnSortUser->Check( sal_True );
        m_pLbSortUser->Enable();
        m_pLbSortUser->SelectEntryPos( aSortData.nUserIndex );
    }
    else
    {
        aBtnSortUser.Check( false );
        aLbSortUser.Disable();
        aLbSortUser.SelectEntryPos( 0 );
        m_pBtnSortUser->Check( false );
        m_pLbSortUser->Disable();
        m_pLbSortUser->SelectEntryPos( 0 );
    }

    aBtnCase.Check          ( aSortData.bCaseSens );
    aBtnFormats.Check       ( aSortData.bIncludePattern );
    aBtnHeader.Check        ( aSortData.bHasHeader );
    aBtnNaturalSort.Check   ( aSortData.bNaturalSort );
    m_pBtnCase->Check          ( aSortData.bCaseSens );
    m_pBtnFormats->Check       ( aSortData.bIncludePattern );
    m_pBtnHeader->Check        ( aSortData.bHasHeader );
    m_pBtnNaturalSort->Check   ( aSortData.bNaturalSort );

    if ( aSortData.bByRow )
    {
        aBtnTopDown.Check();
        aBtnHeader.SetText( aStrColLabel );
        m_pBtnTopDown->Check();
        m_pBtnHeader->SetText( aStrColLabel );
    }
    else
    {
        aBtnLeftRight.Check();
        aBtnHeader.SetText( aStrRowLabel );
        m_pBtnLeftRight->Check();
        m_pBtnHeader->SetText( aStrRowLabel );
    }

    LanguageType eLang = LanguageTag( aSortData.aCollatorLocale ).getLanguageType( false);
    if ( eLang == LANGUAGE_DONTKNOW )
        eLang = LANGUAGE_SYSTEM;
    aLbLanguage.SelectLanguage( eLang );
    FillAlgorHdl( &aLbLanguage );               // get algorithms, select default
    m_pLbLanguage->SelectLanguage( eLang );
    FillAlgorHdl(m_pLbLanguage);               // get algorithms, select default
    if ( !aSortData.aCollatorAlgorithm.isEmpty() )
        aLbAlgorithm.SelectEntry( pColRes->GetTranslation( aSortData.aCollatorAlgorithm ) );
        m_pLbAlgorithm->SelectEntry( pColRes->GetTranslation( aSortData.aCollatorAlgorithm ) );

    if ( pDoc && !aSortData.bInplace )
    {
@@ -702,20 +692,20 @@ void ScTabPageSortOptions::Reset( const SfxItemSet& /* rArgSet */ )
                       aSortData.nDestTab );

        theOutPos.Format( aStr, nFormat, pDoc, pDoc->GetAddressConvention() );
        aBtnCopyResult.Check();
        aLbOutPos.Enable();
        aEdOutPos.Enable();
        aEdOutPos.SetText( aStr );
        EdOutPosModHdl( &aEdOutPos );
        aEdOutPos.GrabFocus();
        aEdOutPos.SetSelection( Selection( 0, SELECTION_MAX ) );
        m_pBtnCopyResult->Check();
        m_pLbOutPos->Enable();
        m_pEdOutPos->Enable();
        m_pEdOutPos->SetText( aStr );
        EdOutPosModHdl(m_pEdOutPos);
        m_pEdOutPos->GrabFocus();
        m_pEdOutPos->SetSelection( Selection( 0, SELECTION_MAX ) );
    }
    else
    {
        aBtnCopyResult.Check( false );
        aLbOutPos.Disable();
        aEdOutPos.Disable();
        aEdOutPos.SetText( EMPTY_STRING );
        m_pBtnCopyResult->Check( false );
        m_pLbOutPos->Disable();
        m_pEdOutPos->Disable();
        m_pEdOutPos->SetText( EMPTY_STRING );
    }
}

@@ -733,22 +723,22 @@ sal_Bool ScTabPageSortOptions::FillItemSet( SfxItemSet& rArgSet )
        if ( pExample && pExample->GetItemState( nWhichSort, sal_True, &pItem ) == SFX_ITEM_SET )
            aNewSortData = static_cast<const ScSortItem*>(pItem)->GetSortData();
    }
    aNewSortData.bByRow          = aBtnTopDown.IsChecked();
    aNewSortData.bHasHeader      = aBtnHeader.IsChecked();
    aNewSortData.bCaseSens       = aBtnCase.IsChecked();
    aNewSortData.bNaturalSort    = aBtnNaturalSort.IsChecked();
    aNewSortData.bIncludePattern = aBtnFormats.IsChecked();
    aNewSortData.bInplace        = !aBtnCopyResult.IsChecked();
    aNewSortData.bByRow          = m_pBtnTopDown->IsChecked();
    aNewSortData.bHasHeader      = m_pBtnHeader->IsChecked();
    aNewSortData.bCaseSens       = m_pBtnCase->IsChecked();
    aNewSortData.bNaturalSort    = m_pBtnNaturalSort->IsChecked();
    aNewSortData.bIncludePattern = m_pBtnFormats->IsChecked();
    aNewSortData.bInplace        = !m_pBtnCopyResult->IsChecked();
    aNewSortData.nDestCol        = theOutPos.Col();
    aNewSortData.nDestRow        = theOutPos.Row();
    aNewSortData.nDestTab        = theOutPos.Tab();
    aNewSortData.bUserDef        = aBtnSortUser.IsChecked();
    aNewSortData.nUserIndex      = (aBtnSortUser.IsChecked())
                                   ? aLbSortUser.GetSelectEntryPos()
    aNewSortData.bUserDef        = m_pBtnSortUser->IsChecked();
    aNewSortData.nUserIndex      = (m_pBtnSortUser->IsChecked())
                                   ? m_pLbSortUser->GetSelectEntryPos()
                                   : 0;

    // get locale
    LanguageType eLang = aLbLanguage.GetSelectLanguage();
    LanguageType eLang = m_pLbLanguage->GetSelectLanguage();
    aNewSortData.aCollatorLocale = LanguageTag( eLang ).getLocale( false );

    // get algorithm
@@ -757,7 +747,7 @@ sal_Bool ScTabPageSortOptions::FillItemSet( SfxItemSet& rArgSet )
    {
        uno::Sequence<rtl::OUString> aAlgos = pColWrap->listCollatorAlgorithms(
                aNewSortData.aCollatorLocale );
        sal_uInt16 nSel = aLbAlgorithm.GetSelectEntryPos();
        sal_uInt16 nSel = m_pLbAlgorithm->GetSelectEntryPos();
        if ( nSel < aAlgos.getLength() )
            sAlg = aAlgos[nSel];
    }
@@ -777,18 +767,18 @@ void ScTabPageSortOptions::ActivatePage( const SfxItemSet& rSet )
    aSortData = static_cast<const ScSortItem&>(rSet.Get( SCITEM_SORTDATA )).GetSortData();
    if ( pDlg )
    {
        if ( aBtnHeader.IsChecked() != pDlg->GetHeaders() )
        if ( m_pBtnHeader->IsChecked() != pDlg->GetHeaders() )
        {
            aBtnHeader.Check( pDlg->GetHeaders() );
            m_pBtnHeader->Check( pDlg->GetHeaders() );
        }

        if ( aBtnTopDown.IsChecked() != pDlg->GetByRows() )
        if ( m_pBtnTopDown->IsChecked() != pDlg->GetByRows() )
        {
            aBtnTopDown.Check( pDlg->GetByRows() );
            aBtnLeftRight.Check( !pDlg->GetByRows() );
            m_pBtnTopDown->Check( pDlg->GetByRows() );
            m_pBtnLeftRight->Check( !pDlg->GetByRows() );
        }

        aBtnHeader.SetText( (pDlg->GetByRows())
        m_pBtnHeader->SetText( (pDlg->GetByRows())
                            ? aStrColLabel
                            : aStrRowLabel );
    }
@@ -800,9 +790,9 @@ int ScTabPageSortOptions::DeactivatePage( SfxItemSet* pSetP )
{
    sal_Bool bPosInputOk = sal_True;

    if ( aBtnCopyResult.IsChecked() )
    if ( m_pBtnCopyResult->IsChecked() )
    {
        String      thePosStr = aEdOutPos.GetText();
        String      thePosStr = m_pEdOutPos->GetText();
        ScAddress   thePos;
        xub_StrLen  nColonPos = thePosStr.Search( ':' );

@@ -825,21 +815,21 @@ int ScTabPageSortOptions::DeactivatePage( SfxItemSet* pSetP )
            ErrorBox( this, WinBits( WB_OK | WB_DEF_OK ),
                     ScGlobal::GetRscString( STR_INVALID_TABREF )
                    ).Execute();
            aEdOutPos.GrabFocus();
            aEdOutPos.SetSelection( Selection( 0, SELECTION_MAX ) );
            m_pEdOutPos->GrabFocus();
            m_pEdOutPos->SetSelection( Selection( 0, SELECTION_MAX ) );
            theOutPos.Set(0,0,0);
        }
        else
        {
            aEdOutPos.SetText( thePosStr );
            m_pEdOutPos->SetText( thePosStr );
            theOutPos = thePos;
        }
    }

    if ( pDlg && bPosInputOk )
    {
        pDlg->SetHeaders( aBtnHeader.IsChecked() );
        pDlg->SetByRows ( aBtnTopDown.IsChecked() );
        pDlg->SetHeaders( m_pBtnHeader->IsChecked() );
        pDlg->SetByRows ( m_pBtnTopDown->IsChecked() );
    }

    if ( pSetP && bPosInputOk )
@@ -854,13 +844,13 @@ void ScTabPageSortOptions::FillUserSortListBox()
{
    ScUserList* pUserLists = ScGlobal::GetUserList();

    aLbSortUser.Clear();
    m_pLbSortUser->Clear();
    if ( pUserLists )
    {
        size_t nCount = pUserLists->size();
        if ( nCount > 0 )
            for ( size_t i=0; i<nCount; ++i )
                aLbSortUser.InsertEntry( (*pUserLists)[i]->GetString() );
                m_pLbSortUser->InsertEntry( (*pUserLists)[i]->GetString() );
    }
}

@@ -869,29 +859,29 @@ void ScTabPageSortOptions::FillUserSortListBox()

IMPL_LINK( ScTabPageSortOptions, EnableHdl, CheckBox *, pBox )
{
    if ( pBox == &aBtnCopyResult )
    if (pBox == m_pBtnCopyResult)
    {
        if ( pBox->IsChecked() )
        {
            aLbOutPos.Enable();
            aEdOutPos.Enable();
            aEdOutPos.GrabFocus();
            m_pLbOutPos->Enable();
            m_pEdOutPos->Enable();
            m_pEdOutPos->GrabFocus();
        }
        else
        {
            aLbOutPos.Disable();
            aEdOutPos.Disable();
            m_pLbOutPos->Disable();
            m_pEdOutPos->Disable();
        }
    }
    else if ( pBox == &aBtnSortUser )
    else if (pBox == m_pBtnSortUser)
    {
        if ( pBox->IsChecked() )
        {
            aLbSortUser.Enable();
            aLbSortUser.GrabFocus();
            m_pLbSortUser->Enable();
            m_pLbSortUser->GrabFocus();
        }
        else
            aLbSortUser.Disable();
            m_pLbSortUser->Disable();
    }
    return 0;
}
@@ -900,15 +890,15 @@ IMPL_LINK( ScTabPageSortOptions, EnableHdl, CheckBox *, pBox )

IMPL_LINK( ScTabPageSortOptions, SelOutPosHdl, ListBox *, pLb )
{
    if ( pLb == &aLbOutPos )
    if (pLb == m_pLbOutPos)
    {
        rtl::OUString  aString;
        sal_uInt16  nSelPos = aLbOutPos.GetSelectEntryPos();
        sal_uInt16  nSelPos = m_pLbOutPos->GetSelectEntryPos();

        if ( nSelPos > 0 )
            aString = *(String*)aLbOutPos.GetEntryData( nSelPos );
            aString = *(String*)m_pLbOutPos->GetEntryData( nSelPos );

        aEdOutPos.SetText( aString );
        m_pEdOutPos->SetText( aString );
    }
    return 0;
}
@@ -917,13 +907,13 @@ IMPL_LINK( ScTabPageSortOptions, SelOutPosHdl, ListBox *, pLb )

IMPL_LINK( ScTabPageSortOptions, SortDirHdl, RadioButton *, pBtn )
{
    if ( pBtn == &aBtnTopDown )
    if (pBtn == m_pBtnTopDown)
    {
        aBtnHeader.SetText( aStrColLabel );
        m_pBtnHeader->SetText( aStrColLabel );
    }
    else if ( pBtn == &aBtnLeftRight )
    else if (pBtn == m_pBtnLeftRight)
    {
        aBtnHeader.SetText( aStrRowLabel );
        m_pBtnHeader->SetText( aStrRowLabel );
    }
    return 0;
}
@@ -932,9 +922,9 @@ IMPL_LINK( ScTabPageSortOptions, SortDirHdl, RadioButton *, pBtn )

void ScTabPageSortOptions::EdOutPosModHdl( Edit* pEd )
{
    if ( pEd == &aEdOutPos )
    if (pEd == m_pEdOutPos)
    {
       String  theCurPosStr = aEdOutPos.GetText();
       String  theCurPosStr = m_pEdOutPos->GetText();
        sal_uInt16  nResult = ScAddress().Parse( theCurPosStr, pDoc, pDoc->GetAddressConvention() );

        if ( SCA_VALID == (nResult & SCA_VALID) )
@@ -942,18 +932,18 @@ void ScTabPageSortOptions::EdOutPosModHdl( Edit* pEd )
            String* pStr    = NULL;
            sal_Bool    bFound  = false;
            sal_uInt16  i       = 0;
            sal_uInt16  nCount  = aLbOutPos.GetEntryCount();
            sal_uInt16  nCount  = m_pLbOutPos->GetEntryCount();

            for ( i=2; i<nCount && !bFound; i++ )
            {
                pStr = (String*)aLbOutPos.GetEntryData( i );
                pStr = (String*)m_pLbOutPos->GetEntryData( i );
                bFound = (theCurPosStr == *pStr);
            }

            if ( bFound )
                aLbOutPos.SelectEntryPos( --i );
                m_pLbOutPos->SelectEntryPos( --i );
            else
                aLbOutPos.SelectEntryPos( 0 );
                m_pLbOutPos->SelectEntryPos( 0 );
        }
    }
}
@@ -962,17 +952,17 @@ void ScTabPageSortOptions::EdOutPosModHdl( Edit* pEd )

IMPL_LINK_NOARG(ScTabPageSortOptions, FillAlgorHdl)
{
    aLbAlgorithm.SetUpdateMode( false );
    aLbAlgorithm.Clear();
    m_pLbAlgorithm->SetUpdateMode( false );
    m_pLbAlgorithm->Clear();

    LanguageType eLang = aLbLanguage.GetSelectLanguage();
    LanguageType eLang = m_pLbLanguage->GetSelectLanguage();
    if ( eLang == LANGUAGE_SYSTEM )
    {
        //  for LANGUAGE_SYSTEM no algorithm can be selected because
        //  it wouldn't necessarily exist for other languages
        //  -> leave list box empty if LANGUAGE_SYSTEM is selected
        aFtAlgorithm.Enable( false );           // nothing to select
        aLbAlgorithm.Enable( false );           // nothing to select
        m_pFtAlgorithm->Enable( false );           // nothing to select
        m_pLbAlgorithm->Enable( false );           // nothing to select
    }
    else
    {
@@ -985,14 +975,14 @@ IMPL_LINK_NOARG(ScTabPageSortOptions, FillAlgorHdl)
        {
            String sAlg = pArray[i];
            String sUser = pColRes->GetTranslation( sAlg );
            aLbAlgorithm.InsertEntry( sUser, LISTBOX_APPEND );
            m_pLbAlgorithm->InsertEntry( sUser, LISTBOX_APPEND );
        }
        aLbAlgorithm.SelectEntryPos( 0 );       // first entry is default
        aFtAlgorithm.Enable( nCount > 1 );      // enable only if there is a choice
        aLbAlgorithm.Enable( nCount > 1 );      // enable only if there is a choice
        m_pLbAlgorithm->SelectEntryPos( 0 );       // first entry is default
        m_pFtAlgorithm->Enable( nCount > 1 );      // enable only if there is a choice
        m_pLbAlgorithm->Enable( nCount > 1 );      // enable only if there is a choice
    }

    aLbAlgorithm.SetUpdateMode( sal_True );
    m_pLbAlgorithm->SetUpdateMode( sal_True );
    return 0;
}

diff --git a/sc/source/ui/inc/sortdlg.hrc b/sc/source/ui/inc/sortdlg.hrc
index 6885a8f..09409be 100644
--- a/sc/source/ui/inc/sortdlg.hrc
+++ b/sc/source/ui/inc/sortdlg.hrc
@@ -19,7 +19,6 @@

#include "sc.hrc"   // -> RID_SCDLG_SORT
                    // -> RID_SCPAGE_SORT_FIELDS
                    // -> RID_SCPAGE_SORT_OPTIONS
                    // -> RID_SCDLG_SORT_WARNING
                    // -> SCSTR_NONAME
                    // -> SCSTR_UNDEFINED
@@ -39,26 +38,6 @@
#define BTN_UP              280
#define BTN_DOWN            281

// TP_SORT_OPTIONS:
#define FL_DIRECTION        1
#define LB_SORT_USER        2
#define LB_OUTAREA          3
#define ED_OUTAREA          4
#define BTN_SORT_USER       7
#define BTN_CASESENSITIVE   8
#define BTN_LABEL           9
#define BTN_FORMATS         10
#define BTN_COPYRESULT      11
#define BTN_TOP_DOWN        12
#define BTN_LEFT_RIGHT      13
#define STR_COL_LABEL       14
#define STR_ROW_LABEL       15
#define FT_LANGUAGE         16
#define LB_LANGUAGE         17
#define FT_ALGORITHM        18
#define LB_ALGORITHM        19
#define BTN_NATURALSORT     20

#define FT_TEXT             1
#define FT_TIP              2
#define BTN_EXTSORT         3
diff --git a/sc/source/ui/inc/tpsort.hxx b/sc/source/ui/inc/tpsort.hxx
index b6fb493..2183ec2 100644
--- a/sc/source/ui/inc/tpsort.hxx
+++ b/sc/source/ui/inc/tpsort.hxx
@@ -75,9 +75,9 @@ protected:
    virtual int         DeactivatePage  ( SfxItemSet* pSet = 0);

private:
    rtl::OUString          aStrUndefined;
    rtl::OUString          aStrColumn;
    rtl::OUString          aStrRow;
    OUString            aStrUndefined;
    OUString            aStrColumn;
    OUString            aStrRow;

    const sal_uInt16    nWhichSort;
    ScSortDlg*          pDlg;
@@ -135,31 +135,29 @@ protected:

private:

    CheckBox            aBtnCase;
    CheckBox            aBtnHeader;
    CheckBox            aBtnFormats;
    CheckBox            aBtnNaturalSort;
    CheckBox*           m_pBtnCase;
    CheckBox*           m_pBtnHeader;
    CheckBox*           m_pBtnFormats;
    CheckBox*           m_pBtnNaturalSort;

    CheckBox            aBtnCopyResult;
    ListBox             aLbOutPos;
    Edit                aEdOutPos;
    CheckBox*           m_pBtnCopyResult;
    ListBox*            m_pLbOutPos;
    Edit*               m_pEdOutPos;

    CheckBox            aBtnSortUser;
    ListBox             aLbSortUser;
    CheckBox*           m_pBtnSortUser;
    ListBox*            m_pLbSortUser;

    FixedText           aFtLanguage;
    SvxLanguageBox      aLbLanguage;
    FixedText           aFtAlgorithm;
    ListBox             aLbAlgorithm;
    SvxLanguageBox*     m_pLbLanguage;
    FixedText*          m_pFtAlgorithm;
    ListBox*            m_pLbAlgorithm;

    FixedLine           aLineDirection;
    RadioButton         aBtnTopDown;
    RadioButton         aBtnLeftRight;
    RadioButton*        m_pBtnTopDown;
    RadioButton*        m_pBtnLeftRight;

    rtl::OUString              aStrRowLabel;
    rtl::OUString              aStrColLabel;
    rtl::OUString              aStrUndefined;
    rtl::OUString              aStrAreaLabel;
    OUString            aStrRowLabel;
    OUString            aStrColLabel;
    OUString            aStrUndefined;
    OUString            aStrAreaLabel;

    const sal_uInt16    nWhichSort;
    ScSortParam         aSortData;
diff --git a/sc/source/ui/src/scstring.src b/sc/source/ui/src/scstring.src
index 59c8a83..140bafb 100644
--- a/sc/source/ui/src/scstring.src
+++ b/sc/source/ui/src/scstring.src
@@ -841,3 +841,13 @@ String SCSTR_FORMULA_SYNTAX_XL_R1C1
{
    Text [ en-US ] = "Excel R1C1";
};

String SCSTR_COL_LABEL
{
    Text [ en-US ] = "Range contains column la~bels" ;
};

String SCSTR_ROW_LABEL
{
    Text [ en-US ] = "Range contains ~row labels" ;
};
diff --git a/sc/source/ui/src/sortdlg.src b/sc/source/ui/src/sortdlg.src
index 0134da8..cbedeb1 100644
--- a/sc/source/ui/src/sortdlg.src
+++ b/sc/source/ui/src/sortdlg.src
@@ -83,150 +83,6 @@ FixedLine FL_SORT
    Text [ en-US ] = "Sort ~key " ;
};

TabPage RID_SCPAGE_SORT_OPTIONS
{
    Hide = TRUE ;
    SVLook = TRUE ;
    HelpId = HID_SCPAGE_SORT_OPTIONS ;
    Pos = MAP_APPFONT ( 0 , 0 ) ;
    Size = MAP_APPFONT ( TP_WIDTH , TP_HEIGHT ) ;
    CheckBox BTN_CASESENSITIVE
    {
        HelpID = "sc:CheckBox:RID_SCPAGE_SORT_OPTIONS:BTN_CASESENSITIVE";
        Pos = MAP_APPFONT ( 12 , 6 ) ;
        Size = MAP_APPFONT ( 242 , 10 ) ;
        Text [ en-US ] = "Case ~sensitive" ;
        TabStop = TRUE ;
    };
    CheckBox BTN_LABEL
    {
        HelpID = "sc:CheckBox:RID_SCPAGE_SORT_OPTIONS:BTN_LABEL";
        Pos = MAP_APPFONT ( 12 , 20 ) ;
        Size = MAP_APPFONT ( 242 , 10 ) ;
        TabStop = TRUE ;
    };
    String STR_COL_LABEL
    {
        Text [ en-US ] = "Range contains column la~bels" ;
    };
    String STR_ROW_LABEL
    {
        Text [ en-US ] = "Range contains ~row labels" ;
    };
    CheckBox BTN_FORMATS
    {
        HelpID = "sc:CheckBox:RID_SCPAGE_SORT_OPTIONS:BTN_FORMATS";
        Pos = MAP_APPFONT ( 12 , 34 ) ;
        Size = MAP_APPFONT ( 242 , 10 ) ;
        Text [ en-US ] = "Include ~formats" ;
        TabStop = TRUE ;
    };
    CheckBox BTN_NATURALSORT
    {
        HelpID = "sc:CheckBox:RID_SCPAGE_SORT_OPTIONS:BTN_COPYRESULT";
        Pos = MAP_APPFONT ( 12 , 48 ) ;
        Size = MAP_APPFONT ( 242 , 10 ) ;
        Text [ en-US ] = "Enable ~natural sort" ;
        TabStop = TRUE ;
    };
    CheckBox BTN_COPYRESULT
    {
        Pos = MAP_APPFONT ( 12 , 62 ) ;
        Size = MAP_APPFONT ( 242 , 10 ) ;
        Text [ en-US ] = "~Copy sort results to:" ;
        TabStop = TRUE ;
    };
    ListBox LB_OUTAREA
    {
        HelpID = "sc:ListBox:RID_SCPAGE_SORT_OPTIONS:LB_OUTAREA";
        Border = TRUE ;
        Pos = MAP_APPFONT ( 20 , 73 ) ;
        Size = MAP_APPFONT ( 93 , 90 ) ;
        TabStop = TRUE ;
        DropDown = TRUE ;
    };
    Edit ED_OUTAREA
    {
        HelpID = "sc:Edit:RID_SCPAGE_SORT_OPTIONS:ED_OUTAREA";
        Disable = TRUE ;
        Border = TRUE ;
        Pos = MAP_APPFONT ( 119 , 73 ) ;
        Size = MAP_APPFONT ( 132 , 12 ) ;
        TabStop = TRUE ;
    };
    CheckBox BTN_SORT_USER
    {
        HelpID = "sc:CheckBox:RID_SCPAGE_SORT_OPTIONS:BTN_SORT_USER";
        Pos = MAP_APPFONT ( 12 , 89 ) ;
        Size = MAP_APPFONT ( 242 , 10 ) ;
        Text [ en-US ] = "Custom sort ~order" ;
        TabStop = TRUE ;
    };
    ListBox LB_SORT_USER
    {
        HelpID = "sc:ListBox:RID_SCPAGE_SORT_OPTIONS:LB_SORT_USER";
        Disable = TRUE ;
        Border = TRUE ;
        Pos = MAP_APPFONT ( 20 , 100 ) ;
        Size = MAP_APPFONT ( 231 , 90 ) ;
        TabStop = TRUE ;
        DropDown = TRUE ;
    };
    FixedText FT_LANGUAGE
    {
        Pos = MAP_APPFONT ( 12 , 118 ) ;
        Size = MAP_APPFONT ( 101 , 8 ) ;
        Text [ en-US ] = "~Language";
    };
    ListBox LB_LANGUAGE
    {
        HelpID = "sc:ListBox:RID_SCPAGE_SORT_OPTIONS:LB_LANGUAGE";
        Border = TRUE ;
        Pos = MAP_APPFONT ( 12 , 129 ) ;
        Size = MAP_APPFONT ( 101 , 90 ) ;
        TabStop = TRUE ;
        DropDown = TRUE ;
        Sort = TRUE ;
    };
    FixedText FT_ALGORITHM
    {
        Pos = MAP_APPFONT ( 119 , 118 ) ;
        Size = MAP_APPFONT ( 132 , 8 ) ;
        Text [ en-US ] = "O~ptions";
    };
    ListBox LB_ALGORITHM
    {
        HelpID = "sc:ListBox:RID_SCPAGE_SORT_OPTIONS:LB_ALGORITHM";
        Border = TRUE ;
        Pos = MAP_APPFONT ( 119 , 129 ) ;
        Size = MAP_APPFONT ( 132 , 90 ) ;
        TabStop = TRUE ;
        DropDown = TRUE ;
    };
    FixedLine FL_DIRECTION
    {
        Pos = MAP_APPFONT ( 6 , 147 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
        Text [ en-US ] = "Direction" ;
    };
    RadioButton BTN_TOP_DOWN
    {
        HelpID = "sc:RadioButton:RID_SCPAGE_SORT_OPTIONS:BTN_TOP_DOWN";
        Pos = MAP_APPFONT ( 12 , 158 ) ;
        Size = MAP_APPFONT ( 242 , 10 ) ;
        Text [ en-US ] = "~Top to bottom (sort rows)" ;
        TabStop = TRUE ;
    };
    RadioButton BTN_LEFT_RIGHT
    {
        HelpID = "sc:RadioButton:RID_SCPAGE_SORT_OPTIONS:BTN_LEFT_RIGHT";
        Pos = MAP_APPFONT ( 12 , 172 ) ;
        Size = MAP_APPFONT ( 242 , 10 ) ;
        Text [ en-US ] = "L~eft to right (sort columns)" ;
        TabStop = TRUE ;
    };
};

TabDialog RID_SCDLG_SORT
{
    OutputSize = TRUE ;
diff --git a/sc/uiconfig/scalc/ui/sortpage.ui b/sc/uiconfig/scalc/ui/sortpage.ui
index 972c693..84daedd 100644
--- a/sc/uiconfig/scalc/ui/sortpage.ui
+++ b/sc/uiconfig/scalc/ui/sortpage.ui
@@ -5,17 +5,240 @@
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="orientation">vertical</property>
    <property name="spacing">6</property>
    <child>
      <object class="GtkCheckButton" id="checkbutton1">
        <property name="label" translatable="yes">Case _sensitive</property>
        <property name="use_action_appearance">False</property>
      <object class="GtkAlignment" id="alignment2">
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">False</property>
        <property name="use_action_appearance">False</property>
        <property name="use_underline">True</property>
        <property name="xalign">0</property>
        <property name="draw_indicator">True</property>
        <property name="can_focus">False</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="row_spacing">6</property>
            <property name="column_spacing">6</property>
            <child>
              <object class="GtkCheckButton" id="case">
                <property name="label" translatable="yes">Case _sensitive</property>
                <property name="use_action_appearance">False</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">False</property>
                <property name="use_action_appearance">False</property>
                <property name="use_underline">True</property>
                <property name="xalign">0</property>
                <property name="draw_indicator">True</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="GtkCheckButton" id="header">
                <property name="label">Range contains...</property>
                <property name="use_action_appearance">False</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">False</property>
                <property name="use_action_appearance">False</property>
                <property name="xalign">0</property>
                <property name="draw_indicator">True</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="GtkCheckButton" id="formats">
                <property name="label" translatable="yes">Include formats</property>
                <property name="use_action_appearance">False</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">False</property>
                <property name="use_action_appearance">False</property>
                <property name="xalign">0</property>
                <property name="draw_indicator">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="GtkCheckButton" id="naturalsort">
                <property name="label" translatable="yes">Enable natural sort</property>
                <property name="use_action_appearance">False</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">False</property>
                <property name="use_action_appearance">False</property>
                <property name="xalign">0</property>
                <property name="draw_indicator">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="GtkCheckButton" id="copyresult">
                <property name="label" translatable="yes">Copy sort results to:</property>
                <property name="use_action_appearance">False</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">False</property>
                <property name="use_action_appearance">False</property>
                <property name="xalign">0</property>
                <property name="draw_indicator">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="GtkComboBox" id="outarealb">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="margin_left">20</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="GtkEntry" id="outareaed">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="hexpand">True</property>
                <property name="invisible_char">•</property>
                <property name="invisible_char_set">True</property>
              </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="GtkCheckButton" id="sortuser">
                <property name="label" translatable="yes">Custom sort order</property>
                <property name="use_action_appearance">False</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">False</property>
                <property name="use_action_appearance">False</property>
                <property name="xalign">0</property>
                <property name="draw_indicator">True</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
                <property name="top_attach">6</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkComboBox" id="sortuserlb">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="margin_left">20</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
                <property name="top_attach">7</property>
                <property name="width">2</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkLabel" id="label6">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="halign">start</property>
                <property name="label" translatable="yes">Language</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
                <property name="top_attach">8</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkLabel" id="algorithmft">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="halign">start</property>
                <property name="label" translatable="yes">Options</property>
              </object>
              <packing>
                <property name="left_attach">1</property>
                <property name="top_attach">8</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="svxcorelo:SvxLanguageBox" id="language">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
                <property name="top_attach">9</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkComboBox" id="algorithmlb">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
              </object>
              <packing>
                <property name="left_attach">1</property>
                <property name="top_attach">9</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <placeholder/>
            </child>
            <child>
              <placeholder/>
            </child>
            <child>
              <placeholder/>
            </child>
            <child>
              <placeholder/>
            </child>
            <child>
              <placeholder/>
            </child>
            <child>
              <placeholder/>
            </child>
          </object>
        </child>
      </object>
      <packing>
        <property name="expand">False</property>
@@ -24,220 +247,75 @@
      </packing>
    </child>
    <child>
      <object class="GtkCheckButton" id="checkbutton2">
        <property name="label" translatable="yes">Range contains culumn labels</property>
        <property name="use_action_appearance">False</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">False</property>
        <property name="use_action_appearance">False</property>
        <property name="xalign">0</property>
        <property name="draw_indicator">True</property>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">1</property>
      </packing>
    </child>
    <child>
      <object class="GtkCheckButton" id="checkbutton3">
        <property name="label" translatable="yes">Include formats</property>
        <property name="use_action_appearance">False</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">False</property>
        <property name="use_action_appearance">False</property>
        <property name="xalign">0</property>
        <property name="draw_indicator">True</property>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">2</property>
      </packing>
    </child>
    <child>
      <object class="GtkCheckButton" id="checkbutton4">
        <property name="label" translatable="yes">Enable natural sort</property>
        <property name="use_action_appearance">False</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">False</property>
        <property name="use_action_appearance">False</property>
        <property name="xalign">0</property>
        <property name="draw_indicator">True</property>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">3</property>
      </packing>
    </child>
    <child>
      <object class="GtkCheckButton" id="checkbutton5">
        <property name="label" translatable="yes">Copy sort results to:</property>
        <property name="use_action_appearance">False</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">False</property>
        <property name="use_action_appearance">False</property>
        <property name="xalign">0</property>
        <property name="draw_indicator">True</property>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">4</property>
      </packing>
    </child>
    <child>
      <object class="GtkBox" id="box3">
      <object class="GtkFrame" id="frame1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="homogeneous">True</property>
        <property name="label_xalign">0</property>
        <property name="shadow_type">none</property>
        <child>
          <object class="GtkComboBox" id="combobox4">
          <object class="GtkAlignment" id="alignment1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="margin_left">20</property>
            <property name="left_padding">12</property>
            <child>
              <object class="GtkGrid" id="grid1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <child>
                  <object class="GtkRadioButton" id="topdown">
                    <property name="label" translatable="yes">_Top to bottom (sort rows)</property>
                    <property name="use_action_appearance">False</property>
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="use_action_appearance">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
                    <property name="active">True</property>
                    <property name="draw_indicator">True</property>
                    <property name="group">leftright</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="GtkRadioButton" id="leftright">
                    <property name="label" translatable="yes">L_eft to right (sort columns)</property>
                    <property name="use_action_appearance">False</property>
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="use_action_appearance">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
                    <property name="draw_indicator">True</property>
                    <property name="group">topdown</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>
              </object>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkEntry" id="entry1">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="margin_left">20</property>
            <property name="invisible_char">•</property>
            <property name="invisible_char_set">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="position">5</property>
      </packing>
    </child>
    <child>
      <object class="GtkCheckButton" id="checkbutton6">
        <property name="label" translatable="yes">Custom sort order</property>
        <property name="use_action_appearance">False</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">False</property>
        <property name="use_action_appearance">False</property>
        <property name="xalign">0</property>
        <property name="draw_indicator">True</property>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">6</property>
      </packing>
    </child>
    <child>
      <object class="GtkComboBox" id="combobox5">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="margin_left">20</property>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">False</property>
        <property name="position">7</property>
      </packing>
    </child>
    <child>
      <object class="GtkBox" id="box4">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="homogeneous">True</property>
        <child>
          <object class="GtkLabel" id="label6">
        <child type="label">
          <object class="GtkLabel" id="label1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="halign">start</property>
            <property name="label" translatable="yes">Language</property>
            <property name="label" translatable="yes">Direction</property>
            <attributes>
              <attribute name="weight" value="bold"/>
            </attributes>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel" id="label7">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="halign">start</property>
            <property name="margin_left">20</property>
            <property name="label" translatable="yes">Options</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">8</property>
      </packing>
    </child>
    <child>
      <object class="GtkBox" id="box16">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="homogeneous">True</property>
        <child>
          <object class="GtkComboBox" id="combobox6">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkComboBox" id="combobox7">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="margin_left">20</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">9</property>
      </packing>
    </child>
    <child>
      <object class="GtkLabel" id="label8">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="halign">start</property>
        <property name="label" translatable="yes">Direction</property>
      </object>
      <packing>
        <property name="expand">False</property>
@@ -245,43 +323,5 @@
        <property name="position">10</property>
      </packing>
    </child>
    <child>
      <object class="GtkRadioButton" id="radiobutton7">
        <property name="label" translatable="yes">_Top to bottom (sort rows)</property>
        <property name="use_action_appearance">False</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">False</property>
        <property name="use_action_appearance">False</property>
        <property name="use_underline">True</property>
        <property name="xalign">0</property>
        <property name="draw_indicator">True</property>
        <property name="group">radiobutton8</property>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">11</property>
      </packing>
    </child>
    <child>
      <object class="GtkRadioButton" id="radiobutton8">
        <property name="label" translatable="yes">L_eft to right (sort columns)</property>
        <property name="use_action_appearance">False</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">False</property>
        <property name="use_action_appearance">False</property>
        <property name="use_underline">True</property>
        <property name="xalign">0</property>
        <property name="draw_indicator">True</property>
        <property name="group">radiobutton7</property>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">12</property>
      </packing>
    </child>
  </object>
</interface>