diff -uNr old/sc/inc/sc.hrc new/sc/inc/sc.hrc --- old/sc/inc/sc.hrc 2008-10-30 16:44:02.000000000 +0800 +++ new/sc/inc/sc.hrc 2008-10-30 16:45:04.000000000 +0800 @@ -1627,6 +1627,7 @@ #define RID_SCDLG_CONFLICTS (SC_DIALOGS_START + 145) #define RID_SCDLG_SHAREDOCUMENT (SC_DIALOGS_START + 146) +#define RID_SCDLG_SORT_WARNING (SC_DIALOGS_START + 147) #define SC_DIALOGS_END (SC_DIALOGS_START + 150) diff -uNr old/sc/inc/scabstdlg.hxx new/sc/inc/scabstdlg.hxx --- old/sc/inc/scabstdlg.hxx 2008-02-15 16:55:50.000000000 +0800 +++ new/sc/inc/scabstdlg.hxx 2008-10-28 16:40:06.000000000 +0800 @@ -105,6 +105,12 @@ virtual BOOL IsExternal() const = 0; }; +class AbstractScSortWarningDlg : public VclAbstractDialog //add for ScSortWarningDlg +{ +public: + virtual BOOL IsExternal() const = 0; +}; + class AbstractScDataPilotServiceDlg : public VclAbstractDialog //add for ScDataPilotServiceDlg { public: @@ -441,6 +447,8 @@ BOOL bOnlyDbtoolsEncodings = FALSE, BOOL bImport = TRUE ) = 0; + virtual AbstractScSortWarningDlg * CreateScSortWarningDlg ( Window* pParent,int nId ) = 0; //add for ScSortWarningDlg + virtual SfxAbstractTabDialog * CreateScAttrDlg( SfxViewFrame* pFrame, //add for ScAttrDlg Window* pParent, const SfxItemSet* pCellAttrs, diff -uNr old/sc/source/ui/attrdlg/scdlgfact.cxx new/sc/source/ui/attrdlg/scdlgfact.cxx --- old/sc/source/ui/attrdlg/scdlgfact.cxx 2008-02-15 16:55:56.000000000 +0800 +++ new/sc/source/ui/attrdlg/scdlgfact.cxx 2008-10-28 16:42:50.000000000 +0800 @@ -116,6 +116,7 @@ IMPL_ABSTDLG_BASE(AbstractScStringInputDlg_Impl); //add for ScStringInputDlg IMPL_ABSTDLG_BASE(AbstractScImportOptionsDlg_Impl); //add for ScImportOptionsDlg IMPL_ABSTDLG_BASE(AbstractTabDialog_Impl); //add for ScAttrDlg, ScHFEditDlg, ScStyleDlg, ScSubTotalDlg,ScCharDlg, ScParagraphDlg, ScValidationDlg, ScSortDlg +IMPL_ABSTDLG_BASE(AbstractScSortWarningDlg_Impl); //add for ScSortWarningDlg // AbstractTabDialog_Impl begin @@ -214,7 +215,13 @@ //AbstractScDataPilotSourceTypeDlg_Impl end +//AbstractScSortWarningDlg_Impl begin +BOOL AbstractScSortWarningDlg_Impl::IsExternal() const +{ + return pDlg->IsExternal(); +} +//AbstractScSortWarningDlg_Impl end // AbstractScDataPilotServiceDlg_Impl begin String AbstractScDataPilotServiceDlg_Impl::GetServiceName() const { @@ -1232,6 +1239,24 @@ } //add for ScImportOptionsDlg end +//add for ScSortWarningDlg begin +AbstractScSortWarningDlg * ScAbstractDialogFactory_Impl::CreateScSortWarningDlg ( Window* pParent, int nId ) +{ + ScSortWarningDlg * pDlg = NULL; + switch ( nId ) + { + case RID_SCDLG_SORT_WARNING: + pDlg = new ScSortWarningDlg( pParent ); + break; + default: + break; + } + if( pDlg ) + return new AbstractScSortWarningDlg_Impl( pDlg ); + return 0; +} +//add for ScSortWarningDlg end + //add for ScAttrDlg begin SfxAbstractTabDialog * ScAbstractDialogFactory_Impl::CreateScAttrDlg( SfxViewFrame* pFrame, Window* pParent, diff -uNr old/sc/source/ui/attrdlg/scdlgfact.hxx new/sc/source/ui/attrdlg/scdlgfact.hxx --- old/sc/source/ui/attrdlg/scdlgfact.hxx 2008-02-15 16:55:56.000000000 +0800 +++ new/sc/source/ui/attrdlg/scdlgfact.hxx 2008-10-28 16:43:46.000000000 +0800 @@ -68,6 +68,7 @@ class ScStringInputDlg; class ScImportOptionsDlg; class SfxTabDialog; +class ScSortWarningDlg; #define DECL_ABSTDLG_BASE(Class,DialogClass) \ DialogClass* pDlg; \ @@ -152,6 +153,12 @@ virtual BOOL IsExternal() const; }; +class AbstractScSortWarningDlg_Impl :public AbstractScSortWarningDlg //add for ScSortWarningDlg +{ + DECL_ABSTDLG_BASE( AbstractScSortWarningDlg_Impl, ScSortWarningDlg ) + virtual BOOL IsExternal() const; +}; + class AbstractScDataPilotServiceDlg_Impl : public AbstractScDataPilotServiceDlg //add for ScDataPilotServiceDlg { DECL_ABSTDLG_BASE(AbstractScDataPilotServiceDlg_Impl, ScDataPilotServiceDlg) @@ -503,6 +510,7 @@ BOOL bMultiByte = FALSE, BOOL bOnlyDbtoolsEncodings = FALSE, BOOL bImport = TRUE ); + virtual AbstractScSortWarningDlg * CreateScSortWarningDlg ( Window* pParent,int nId ); //add for ScSortWarningDlg virtual SfxAbstractTabDialog * CreateScAttrDlg( SfxViewFrame* pFrame, //add for ScAttrDlg Window* pParent, const SfxItemSet* pCellAttrs, diff -uNr old/sc/source/ui/dbgui/sortdlg.cxx new/sc/source/ui/dbgui/sortdlg.cxx --- old/sc/source/ui/dbgui/sortdlg.cxx 2008-02-15 16:55:56.000000000 +0800 +++ new/sc/source/ui/dbgui/sortdlg.cxx 2008-10-28 16:44:52.000000000 +0800 @@ -66,3 +66,26 @@ { } +//================================================================== +ScSortWarningDlg::ScSortWarningDlg( Window* pParent ): + ModalDialog ( pParent, ScResId( RID_SCDLG_SORT_WARNING ) ), + aFtText ( this, ScResId( FT_TEXT ) ), + aFlFrame ( this, ScResId( FL_FRAME ) ), + aBtnExternal ( this, ScResId( BTN_EXTERNAL ) ), + aBtnSelection ( this, ScResId( BTN_SELECTION ) ), + aBtnSort ( this, ScResId( BTN_SORT ) ), + aBtnCancel ( this, ScResId( BTN_CANCEL ) ) +{ + aBtnExternal.Check(); + + FreeResource(); +} + +ScSortWarningDlg::~ScSortWarningDlg() +{ +} + +BOOL ScSortWarningDlg::IsExternal() const +{ + return aBtnExternal.IsChecked(); +} diff -uNr old/sc/source/ui/inc/sortdlg.hrc new/sc/source/ui/inc/sortdlg.hrc --- old/sc/source/ui/inc/sortdlg.hrc 2008-02-15 16:55:58.000000000 +0800 +++ new/sc/source/ui/inc/sortdlg.hrc 2008-10-28 16:45:18.000000000 +0800 @@ -37,6 +37,7 @@ #include "sc.hrc" // -> RID_SCDLG_SORT // -> RID_SCPAGE_SORT_FIELDS // -> RID_SCPAGE_SORT_OPTIONS + // -> RID_SCDLG_SORT_WARNING // -> SCSTR_NONAME // -> SCSTR_UNDEFINED // -> SCSTR_FIELD @@ -45,6 +46,7 @@ #define RID_SCDLG_SORT 256 #define RID_SCPAGE_SORT_FIELDS 257 #define RID_SCPAGE_SORT_OPTIONS 258 +#define RID_SCDLG_SORT_WARNING */ #define TP_FIELDS 1 @@ -85,6 +87,13 @@ #define FT_ALGORITHM 18 #define LB_ALGORITHM 19 +//#define RID_SCDLG_SORT_WARNING +#define BTN_SORT 1 +#define BTN_CANCEL 2 +#define BTN_EXTERNAL 3 +#define BTN_SELECTION 4 +#define FT_TEXT 5 +#define FL_FRAME 6 diff -uNr old/sc/source/ui/inc/sortdlg.hxx new/sc/source/ui/inc/sortdlg.hxx --- old/sc/source/ui/inc/sortdlg.hxx 2008-02-15 16:55:58.000000000 +0800 +++ new/sc/source/ui/inc/sortdlg.hxx 2008-10-28 16:45:32.000000000 +0800 @@ -39,7 +39,15 @@ #ifndef _SFXTABDLG_HXX //autogen #include #endif - +#ifndef _SV_BUTTON_HXX +#include +#endif +#ifndef _SV_DIALOG_HXX +#include +#endif +#ifndef _SV_FIXED_HXX +#include +#endif #ifndef _SFX_HXX #endif @@ -68,6 +76,20 @@ inline BOOL ScSortDlg::GetHeaders() const { return bIsHeaders; } inline BOOL ScSortDlg::GetByRows () const { return bIsByRows; } +class ScSortWarningDlg : public ModalDialog +{ +public: + ScSortWarningDlg( Window* pParent ); + ~ScSortWarningDlg(); + BOOL IsExternal() const; +private: + FixedText aFtText; + FixedLine aFlFrame; + RadioButton aBtnExternal; + RadioButton aBtnSelection; + OKButton aBtnSort; + CancelButton aBtnCancel; +}; #endif // SC_SORTDLG_HXX diff -uNr old/sc/source/ui/src/sortdlg.src new/sc/source/ui/src/sortdlg.src --- old/sc/source/ui/src/sortdlg.src 2008-02-15 16:55:58.000000000 +0800 +++ new/sc/source/ui/src/sortdlg.src 2008-10-30 11:07:08.000000000 +0800 @@ -309,4 +309,54 @@ }; }; +ModalDialog RID_SCDLG_SORT_WARNING +{ + OutputSize = TRUE ; + SVLook = TRUE ; + Size = MAP_APPFONT ( 155 , 80 ) ; + Text [ en-US ] = "Sort Warning" ; + Moveable = TRUE ; + Closeable = FALSE ; + OKButton BTN_SORT + { + Pos = MAP_APPFONT ( 55 , 60 ) ; + Size = MAP_APPFONT ( 40 , 14 ) ; + TabStop = TRUE ; + DefButton = TRUE ; + Text [ en-US ] = "~Sort"; + }; + CancelButton BTN_CANCEL + { + Pos = MAP_APPFONT ( 105 , 60 ) ; + Size = MAP_APPFONT ( 40 , 14 ) ; + TabStop = TRUE ; + }; + RadioButton BTN_EXTERNAL + { + Pos = MAP_APPFONT ( 10 , 35 ) ; + Size = MAP_APPFONT ( 80 , 10 ) ; + TabStop = TRUE ; + Text [ en-US ] = "~External Range"; + }; + RadioButton BTN_SELECTION + { + Pos = MAP_APPFONT ( 10, 46 ) ; + Size = MAP_APPFONT ( 80 , 10 ) ; + TabStop = TRUE ; + Text [ en-US ] = "~Current Range"; + }; + FixedText FT_TEXT + { + Pos = MAP_APPFONT ( 4 , 3 ) ; + Size = MAP_APPFONT ( 150 , 20 ) ; + WordBreak = TRUE ; + Text [ en-US ] = "OpenOffice.org Calc find some data in selection range,these data will not be joined sorting."; + }; + FixedLine FL_FRAME + { + Pos = MAP_APPFONT ( 4 , 23 ) ; + Size = MAP_APPFONT ( 145 , 8 ) ; + Text [ en-US ] = "Sort ~by"; + }; +}; diff -uNr old/sc/source/ui/view/cellsh2.cxx new/sc/source/ui/view/cellsh2.cxx --- old/sc/source/ui/view/cellsh2.cxx 2008-10-13 16:58:38.000000000 +0800 +++ new/sc/source/ui/view/cellsh2.cxx 2008-10-30 11:18:08.000000000 +0800 @@ -343,34 +343,68 @@ SCCOL nCol = GetViewData()->GetCurX(); SCCOL nTab = GetViewData()->GetTabNo(); ScDocument* pDoc = GetViewData()->GetDocument(); + ScDocShell* pDocSh = GetViewData()->GetDocShell(); BOOL bHasHeader = FALSE; + BOOL bSort = TRUE; - pDBData->GetSortParam( aSortParam ); + ScRange aCurrentRange; + pDBData->GetArea( aCurrentRange ); - bHasHeader = pDoc->HasColHeader( aSortParam.nCol1, aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, nTab ); - - if( nCol < aSortParam.nCol1 ) - nCol = aSortParam.nCol1; - else if( nCol > aSortParam.nCol2 ) - nCol = aSortParam.nCol2; - - aSortParam.bHasHeader = bHasHeader; - aSortParam.bByRow = TRUE; - aSortParam.bCaseSens = FALSE; - aSortParam.bIncludePattern = FALSE; - aSortParam.bInplace = TRUE; - aSortParam.bDoSort[0] = TRUE; - aSortParam.nField[0] = nCol; - aSortParam.bAscending[0] = (nSlotId == SID_SORT_ASCENDING); + ScRange aExternalRange( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() ); + pDBData = pDocSh->GetDBData( aExternalRange, SC_DB_MAKE, FALSE ); + pDBData->GetArea( aExternalRange ); + + if( aCurrentRange.aStart.Col() == aCurrentRange.aEnd.Col() && aExternalRange.aStart.Col() != aExternalRange.aEnd.Col() ) + { + ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); + DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 + + AbstractScSortWarningDlg* pWarningDlg = pFact->CreateScSortWarningDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_SORT_WARNING ); + DBG_ASSERT(pTypeDlg, "Dialog create fail!");//CHINA001 + if ( pWarningDlg->Execute() == RET_OK ) + { + if ( pWarningDlg->IsExternal() ) + pTabViewShell->MarkRange( aExternalRange, FALSE ); + else + pDBData->SetArea( nTab, aCurrentRange.aStart.Col(), aCurrentRange.aStart.Row(), aCurrentRange.aEnd.Col(), aCurrentRange.aEnd.Row() ); + } + else + bSort = FALSE; + + delete pWarningDlg; + } + else + pDBData->SetArea( nTab, aCurrentRange.aStart.Col(), aCurrentRange.aStart.Row(), aCurrentRange.aEnd.Col(), aCurrentRange.aEnd.Row() ); + + if( bSort ) + { + pDBData->GetSortParam( aSortParam ); + bHasHeader = pDoc->HasColHeader( aSortParam.nCol1, aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, nTab ); + + if( nCol < aSortParam.nCol1 ) + nCol = aSortParam.nCol1; + else if( nCol > aSortParam.nCol2 ) + nCol = aSortParam.nCol2; + + aSortParam.bHasHeader = bHasHeader; + aSortParam.bByRow = TRUE; + aSortParam.bCaseSens = FALSE; + aSortParam.bIncludePattern = FALSE; + aSortParam.bInplace = TRUE; + aSortParam.bDoSort[0] = TRUE; + aSortParam.nField[0] = nCol; + aSortParam.bAscending[0] = (nSlotId == SID_SORT_ASCENDING); - for ( USHORT i=1; iUISort( aSortParam ); // Teilergebnisse bei Bedarf neu + pTabViewShell->UISort( aSortParam ); // Teilergebnisse bei Bedarf neu + + rReq.Done(); + } - rReq.Done(); } break; @@ -382,136 +416,195 @@ { ScSortParam aSortParam; ScDBData* pDBData = pTabViewShell->GetDBData(); - pDBData->GetSortParam( aSortParam ); - aSortParam.bInplace = TRUE; // von Basic immer - const SfxPoolItem* pItem; - if ( pArgs->GetItemState( SID_SORT_BYROW, TRUE, &pItem ) == SFX_ITEM_SET ) - aSortParam.bByRow = ((const SfxBoolItem*)pItem)->GetValue(); - if ( pArgs->GetItemState( SID_SORT_HASHEADER, TRUE, &pItem ) == SFX_ITEM_SET ) - aSortParam.bHasHeader = ((const SfxBoolItem*)pItem)->GetValue(); - if ( pArgs->GetItemState( SID_SORT_CASESENS, TRUE, &pItem ) == SFX_ITEM_SET ) - aSortParam.bCaseSens = ((const SfxBoolItem*)pItem)->GetValue(); - if ( pArgs->GetItemState( SID_SORT_ATTRIBS, TRUE, &pItem ) == SFX_ITEM_SET ) - aSortParam.bIncludePattern = ((const SfxBoolItem*)pItem)->GetValue(); - if ( pArgs->GetItemState( SID_SORT_USERDEF, TRUE, &pItem ) == SFX_ITEM_SET ) - { - USHORT nUserIndex = ((const SfxUInt16Item*)pItem)->GetValue(); - aSortParam.bUserDef = ( nUserIndex != 0 ); - if ( nUserIndex ) - aSortParam.nUserIndex = nUserIndex - 1; // Basic: 1-basiert - } - - SCCOLROW nField0 = 0; - if ( pArgs->GetItemState( FN_PARAM_1, TRUE, &pItem ) == SFX_ITEM_SET ) - nField0 = ((const SfxInt32Item*)pItem)->GetValue(); - aSortParam.bDoSort[0] = ( nField0 != 0 ); - aSortParam.nField[0] = nField0 > 0 ? (nField0-1) : 0; - if ( pArgs->GetItemState( FN_PARAM_2, TRUE, &pItem ) == SFX_ITEM_SET ) - aSortParam.bAscending[0] = ((const SfxBoolItem*)pItem)->GetValue(); - SCCOLROW nField1 = 0; - if ( pArgs->GetItemState( FN_PARAM_3, TRUE, &pItem ) == SFX_ITEM_SET ) - nField1 = ((const SfxInt32Item*)pItem)->GetValue(); - aSortParam.bDoSort[1] = ( nField1 != 0 ); - aSortParam.nField[1] = nField1 > 0 ? (nField1-1) : 0; - if ( pArgs->GetItemState( FN_PARAM_4, TRUE, &pItem ) == SFX_ITEM_SET ) - aSortParam.bAscending[1] = ((const SfxBoolItem*)pItem)->GetValue(); - SCCOLROW nField2 = 0; - if ( pArgs->GetItemState( FN_PARAM_5, TRUE, &pItem ) == SFX_ITEM_SET ) - nField2 = ((const SfxInt32Item*)pItem)->GetValue(); - aSortParam.bDoSort[2] = ( nField2 != 0 ); - aSortParam.nField[2] = nField2 > 0 ? (nField2-1) : 0; - if ( pArgs->GetItemState( FN_PARAM_6, TRUE, &pItem ) == SFX_ITEM_SET ) - aSortParam.bAscending[2] = ((const SfxBoolItem*)pItem)->GetValue(); + SCCOL nTab = GetViewData()->GetTabNo(); + ScDocShell* pDocSh = GetViewData()->GetDocShell(); + BOOL bSort = TRUE; + + ScRange aCurrentRange; + pDBData->GetArea( aCurrentRange ); + + ScRange aExternalRange( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() ); + pDBData = pDocSh->GetDBData( aExternalRange, SC_DB_MAKE, FALSE ); + pDBData->GetArea( aExternalRange ); - // Teilergebnisse bei Bedarf neu - pTabViewShell->UISort( aSortParam ); - rReq.Done(); + if( aCurrentRange.aStart.Col() == aCurrentRange.aEnd.Col() && aExternalRange.aStart.Col() != aExternalRange.aEnd.Col() ) + { + ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); + DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 + + AbstractScSortWarningDlg* pWarningDlg = pFact->CreateScSortWarningDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_SORT_WARNING ); + DBG_ASSERT(pTypeDlg, "Dialog create fail!");//CHINA001 + if ( pWarningDlg->Execute() == RET_OK ) + { + if ( pWarningDlg->IsExternal() ) + pTabViewShell->MarkRange( aExternalRange, FALSE ); + else + pDBData->SetArea( nTab, aCurrentRange.aStart.Col(), aCurrentRange.aStart.Row(), aCurrentRange.aEnd.Col(), aCurrentRange.aEnd.Row() ); + } + else + bSort = FALSE; + + delete pWarningDlg; + } + else + pDBData->SetArea( nTab, aCurrentRange.aStart.Col(), aCurrentRange.aStart.Row(), aCurrentRange.aEnd.Col(), aCurrentRange.aEnd.Row() ); + + if( bSort ) + { + pDBData->GetSortParam( aSortParam ); + aSortParam.bInplace = TRUE; // von Basic immer + + const SfxPoolItem* pItem; + if ( pArgs->GetItemState( SID_SORT_BYROW, TRUE, &pItem ) == SFX_ITEM_SET ) + aSortParam.bByRow = ((const SfxBoolItem*)pItem)->GetValue(); + if ( pArgs->GetItemState( SID_SORT_HASHEADER, TRUE, &pItem ) == SFX_ITEM_SET ) + aSortParam.bHasHeader = ((const SfxBoolItem*)pItem)->GetValue(); + if ( pArgs->GetItemState( SID_SORT_CASESENS, TRUE, &pItem ) == SFX_ITEM_SET ) + aSortParam.bCaseSens = ((const SfxBoolItem*)pItem)->GetValue(); + if ( pArgs->GetItemState( SID_SORT_ATTRIBS, TRUE, &pItem ) == SFX_ITEM_SET ) + aSortParam.bIncludePattern = ((const SfxBoolItem*)pItem)->GetValue(); + if ( pArgs->GetItemState( SID_SORT_USERDEF, TRUE, &pItem ) == SFX_ITEM_SET ) + { + USHORT nUserIndex = ((const SfxUInt16Item*)pItem)->GetValue(); + aSortParam.bUserDef = ( nUserIndex != 0 ); + if ( nUserIndex ) + aSortParam.nUserIndex = nUserIndex - 1; // Basic: 1-basiert + } + + SCCOLROW nField0 = 0; + if ( pArgs->GetItemState( FN_PARAM_1, TRUE, &pItem ) == SFX_ITEM_SET ) + nField0 = ((const SfxInt32Item*)pItem)->GetValue(); + aSortParam.bDoSort[0] = ( nField0 != 0 ); + aSortParam.nField[0] = nField0 > 0 ? (nField0-1) : 0; + if ( pArgs->GetItemState( FN_PARAM_2, TRUE, &pItem ) == SFX_ITEM_SET ) + aSortParam.bAscending[0] = ((const SfxBoolItem*)pItem)->GetValue(); + SCCOLROW nField1 = 0; + if ( pArgs->GetItemState( FN_PARAM_3, TRUE, &pItem ) == SFX_ITEM_SET ) + nField1 = ((const SfxInt32Item*)pItem)->GetValue(); + aSortParam.bDoSort[1] = ( nField1 != 0 ); + aSortParam.nField[1] = nField1 > 0 ? (nField1-1) : 0; + if ( pArgs->GetItemState( FN_PARAM_4, TRUE, &pItem ) == SFX_ITEM_SET ) + aSortParam.bAscending[1] = ((const SfxBoolItem*)pItem)->GetValue(); + SCCOLROW nField2 = 0; + if ( pArgs->GetItemState( FN_PARAM_5, TRUE, &pItem ) == SFX_ITEM_SET ) + nField2 = ((const SfxInt32Item*)pItem)->GetValue(); + aSortParam.bDoSort[2] = ( nField2 != 0 ); + aSortParam.nField[2] = nField2 > 0 ? (nField2-1) : 0; + if ( pArgs->GetItemState( FN_PARAM_6, TRUE, &pItem ) == SFX_ITEM_SET ) + aSortParam.bAscending[2] = ((const SfxBoolItem*)pItem)->GetValue(); + + // Teilergebnisse bei Bedarf neu + pTabViewShell->UISort( aSortParam ); + rReq.Done(); + } } else { - //CHINA001 ScSortDlg* pDlg = NULL; SfxAbstractTabDialog* pDlg = NULL; ScSortParam aSortParam; SfxItemSet aArgSet( GetPool(), SCITEM_SORTDATA, SCITEM_SORTDATA ); - ScDBData* pDBData = pTabViewShell->GetDBData(); - pDBData->GetSortParam( aSortParam ); + ScDBData* pDBData = pTabViewShell->GetDBData(); + SCCOL nTab = GetViewData()->GetTabNo(); + ScDocShell* pDocSh = GetViewData()->GetDocShell(); + BOOL bSort = TRUE; + + ScRange aCurrentRange; + pDBData->GetArea( aCurrentRange ); + + ScRange aExternalRange( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() ); + pDBData = pDocSh->GetDBData( aExternalRange, SC_DB_MAKE, FALSE ); + pDBData->GetArea( aExternalRange ); - aArgSet.Put( ScSortItem( SCITEM_SORTDATA, GetViewData(), &aSortParam ) ); - //CHINA001 pDlg = new ScSortDlg( pTabViewShell->GetDialogParent(), &aArgSet ); - ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); - DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 - - pDlg = pFact->CreateScSortDlg( pTabViewShell->GetDialogParent(), &aArgSet, RID_SCDLG_SORT ); - DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001 - pDlg->SetCurPageId(1); - - if ( pDlg->Execute() == RET_OK ) - { - const SfxItemSet* pOutSet = pDlg->GetOutputItemSet(); - const ScSortParam& rOutParam = ((const ScSortItem&) - pOutSet->Get( SCITEM_SORTDATA )).GetSortData(); - - // Teilergebnisse bei Bedarf neu - pTabViewShell->UISort( rOutParam ); + if( aCurrentRange.aStart.Col() == aCurrentRange.aEnd.Col() && aExternalRange.aStart.Col() != aExternalRange.aEnd.Col() ) + { + ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); + DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 - if ( rOutParam.bInplace ) - { - rReq.AppendItem( SfxBoolItem( SID_SORT_BYROW, - rOutParam.bByRow ) ); - rReq.AppendItem( SfxBoolItem( SID_SORT_HASHEADER, - rOutParam.bHasHeader ) ); - rReq.AppendItem( SfxBoolItem( SID_SORT_CASESENS, - rOutParam.bCaseSens ) ); - rReq.AppendItem( SfxBoolItem( SID_SORT_ATTRIBS, - rOutParam.bIncludePattern ) ); - USHORT nUser = rOutParam.bUserDef ? ( rOutParam.nUserIndex + 1 ) : 0; - rReq.AppendItem( SfxUInt16Item( SID_SORT_USERDEF, nUser ) ); - if ( rOutParam.bDoSort[0] ) - { - rReq.AppendItem( SfxInt32Item( FN_PARAM_1, - rOutParam.nField[0] + 1 ) ); - rReq.AppendItem( SfxBoolItem( FN_PARAM_2, - rOutParam.bAscending[0] ) ); - } - if ( rOutParam.bDoSort[1] ) - { - rReq.AppendItem( SfxInt32Item( FN_PARAM_3, - rOutParam.nField[1] + 1 ) ); - rReq.AppendItem( SfxBoolItem( FN_PARAM_4, - rOutParam.bAscending[1] ) ); - } - if ( rOutParam.bDoSort[2] ) - { - rReq.AppendItem( SfxInt32Item( FN_PARAM_5, - rOutParam.nField[2] + 1 ) ); - rReq.AppendItem( SfxBoolItem( FN_PARAM_6, - rOutParam.bAscending[2] ) ); - } - } + AbstractScSortWarningDlg* pWarningDlg = pFact->CreateScSortWarningDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_SORT_WARNING ); + DBG_ASSERT(pTypeDlg, "Dialog create fail!");//CHINA001 + if ( pWarningDlg->Execute() == RET_OK ) + { + if ( pWarningDlg->IsExternal() ) + pTabViewShell->MarkRange( aExternalRange, FALSE ); + else + pDBData->SetArea( nTab, aCurrentRange.aStart.Col(), aCurrentRange.aStart.Row(), aCurrentRange.aEnd.Col(), aCurrentRange.aEnd.Row() ); + } + else + bSort = FALSE; - rReq.Done(); - } + delete pWarningDlg; + } else - GetViewData()->GetDocShell()->CancelAutoDBRange(); + pDBData->SetArea( nTab, aCurrentRange.aStart.Col(), aCurrentRange.aStart.Row(), aCurrentRange.aEnd.Col(), aCurrentRange.aEnd.Row() ); - delete pDlg; - } - } - break; - -/* - { + if( bSort ) + { + pDBData->GetSortParam( aSortParam ); + aArgSet.Put( ScSortItem( SCITEM_SORTDATA, GetViewData(), &aSortParam ) ); - USHORT nId = ScPivotLayoutWrapper::GetChildWindowId(); - SfxChildWindow* pWnd = pSfxApp->GetChildWindow( nId ); + ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); + DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 - pScMod->SetRefDialog( nId, pWnd ? FALSE : TRUE ); + pDlg = pFact->CreateScSortDlg( pTabViewShell->GetDialogParent(), &aArgSet, RID_SCDLG_SORT ); + DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001 + pDlg->SetCurPageId(1); + + if ( pDlg->Execute() == RET_OK ) + { + const SfxItemSet* pOutSet = pDlg->GetOutputItemSet(); + const ScSortParam& rOutParam = ((const ScSortItem&) + pOutSet->Get( SCITEM_SORTDATA )).GetSortData(); + + // Teilergebnisse bei Bedarf neu + pTabViewShell->UISort( rOutParam ); + + if ( rOutParam.bInplace ) + { + rReq.AppendItem( SfxBoolItem( SID_SORT_BYROW, + rOutParam.bByRow ) ); + rReq.AppendItem( SfxBoolItem( SID_SORT_HASHEADER, + rOutParam.bHasHeader ) ); + rReq.AppendItem( SfxBoolItem( SID_SORT_CASESENS, + rOutParam.bCaseSens ) ); + rReq.AppendItem( SfxBoolItem( SID_SORT_ATTRIBS, + rOutParam.bIncludePattern ) ); + USHORT nUser = rOutParam.bUserDef ? ( rOutParam.nUserIndex + 1 ) : 0; + rReq.AppendItem( SfxUInt16Item( SID_SORT_USERDEF, nUser ) ); + if ( rOutParam.bDoSort[0] ) + { + rReq.AppendItem( SfxInt32Item( FN_PARAM_1, + rOutParam.nField[0] + 1 ) ); + rReq.AppendItem( SfxBoolItem( FN_PARAM_2, + rOutParam.bAscending[0] ) ); + } + if ( rOutParam.bDoSort[1] ) + { + rReq.AppendItem( SfxInt32Item( FN_PARAM_3, + rOutParam.nField[1] + 1 ) ); + rReq.AppendItem( SfxBoolItem( FN_PARAM_4, + rOutParam.bAscending[1] ) ); + } + if ( rOutParam.bDoSort[2] ) + { + rReq.AppendItem( SfxInt32Item( FN_PARAM_5, + rOutParam.nField[2] + 1 ) ); + rReq.AppendItem( SfxBoolItem( FN_PARAM_6, + rOutParam.bAscending[2] ) ); + } + } + + rReq.Done(); + } + else + GetViewData()->GetDocShell()->CancelAutoDBRange(); + delete pDlg; + } + } } break; -*/ case SID_FILTER: {