20 #undef SC_DLLIMPLEMENTATION
28 #include <osl/diagnose.h>
31 #include <uiitems.hxx>
33 #include <document.hxx>
40 #include <strings.hrc>
41 #include <globstr.hrc>
72 :
SfxTabPage(pPage, pController,
"modules/scalc/ui/sortcriteriapage.ui",
"SortCriteriaPage", &rArgSet)
75 aStrUndefined (
ScResId( SCSTR_UNDEFINED ) ),
76 aStrColumn (
ScResId( SCSTR_COLUMN ) ),
77 aStrRow (
ScResId( SCSTR_ROW ) ),
79 nWhichSort ( rArgSet.GetPool()->
GetWhich( SID_SORT ) ),
80 pViewData ( nullptr ),
82 rArgSet.
Get( nWhichSort )).
89 , m_xScrolledWindow(m_xBuilder->weld_scrolled_window(
"SortCriteriaPage"))
90 , m_xBox(m_xBuilder->weld_container(
"SortKeyWindow"))
91 , m_aSortWin(m_xBox.
get())
114 OSL_ENSURE(
pViewData,
"ViewData not found!" );
128 return std::make_unique<ScTabPageSortFields>(pPage, pController, *pArgSet);
224 aNewSortData = aTempData;
227 std::vector<sal_Int32> nSortPos;
232 if (nSortPos[
i] == -1) nSortPos[
i] = 0;
236 aNewSortData.
maKeyState.resize(nSortKeyCount);
238 if ( nSortPos[0] > 0 )
286 std::vector<sal_uInt16> nCurSel;
312 return DeactivateRC::LeavePage;
344 aFieldName = rDoc.
GetString(col, nFirstSortRow, nTab);
365 aFieldName = rDoc.
GetString(nFirstSortCol, row, nTab);
389 sal_uInt16 nFieldPos = 0;
427 OUString aSelEntry = rLb.get_active_text();
428 ScSortKeyItems::iterator pIter;
431 if (m_aSortWin.m_aSortKeyItems.back()->m_xLbSort.get() == &rLb)
433 if ( aSelEntry != aStrUndefined )
435 SetLastSortKey( nSortKeyCount );
441 pIter = std::find_if(m_aSortWin.m_aSortKeyItems.begin(), m_aSortWin.m_aSortKeyItems.end(),
442 [&rLb](
const ScSortKeyItems::value_type& rItem) {
return rItem->m_xLbSort.get() == &rLb; });
444 if (pIter == m_aSortWin.m_aSortKeyItems.end())
449 if ( std::distance(m_aSortWin.m_aSortKeyItems.begin(), pIter) >= nSortKeyCount )
452 if ( aSelEntry == aStrUndefined )
454 for ( ; pIter != m_aSortWin.m_aSortKeyItems.end(); ++pIter )
456 (*pIter)->m_xLbSort->set_active(0);
458 (*pIter)->DisableField();
463 (*pIter)->EnableField();
469 m_xScrolledWindow->vadjustment_set_value(m_xScrolledWindow->vadjustment_get_upper());
481 :
SfxTabPage(pPage, pController,
"modules/scalc/ui/sortoptionspage.ui",
"SortOptionsPage", &rArgSet)
482 , aStrRowLabel(
ScResId(SCSTR_ROW_LABEL))
483 , aStrColLabel(
ScResId(SCSTR_COL_LABEL))
484 , aStrUndefined(
ScResId(SCSTR_UNDEFINED))
485 , nWhichSort(rArgSet.GetPool()->
GetWhich(SID_SORT))
486 , aSortData(static_cast<const
ScSortItem&>(rArgSet.
Get(nWhichSort)).GetSortData())
489 , m_xBtnCase(m_xBuilder->weld_check_button(
"case"))
490 , m_xBtnHeader(m_xBuilder->weld_check_button(
"header"))
491 , m_xBtnFormats(m_xBuilder->weld_check_button(
"formats"))
492 , m_xBtnNaturalSort(m_xBuilder->weld_check_button(
"naturalsort"))
493 , m_xBtnCopyResult(m_xBuilder->weld_check_button(
"copyresult"))
494 , m_xLbOutPos(m_xBuilder->weld_combo_box(
"outarealb"))
495 , m_xEdOutPos(m_xBuilder->weld_entry(
"outareaed"))
496 , m_xBtnSortUser(m_xBuilder->weld_check_button(
"sortuser"))
497 , m_xLbSortUser(m_xBuilder->weld_combo_box(
"sortuserlb"))
498 , m_xLbLanguage(new
SvxLanguageBox(m_xBuilder->weld_combo_box(
"language")))
499 , m_xFtAlgorithm(m_xBuilder->weld_label(
"algorithmft"))
500 , m_xLbAlgorithm(m_xBuilder->weld_combo_box(
"algorithmlb"))
501 , m_xBtnTopDown(m_xBuilder->weld_radio_button(
"topdown"))
502 , m_xBtnLeftRight(m_xBuilder->weld_radio_button(
"leftright"))
503 , m_xBtnIncComments(m_xBuilder->weld_check_button(
"includenotes"))
504 , m_xBtnIncImages(m_xBuilder->weld_check_button(
"includeimages"))
532 OSL_ENSURE(
pViewData,
"ViewData not found! :-/" );
547 while ( aIter.
Next( aName, aRange ) )
577 m_xLbLanguage->SetLanguageList( SvxLanguageListFlags::ALL | SvxLanguageListFlags::ONLY_KNOWN,
false );
583 return std::make_unique<ScTabPageSortOptions>(pPage, pController, *rArgSet);
665 aNewSortData = static_cast<const ScSortItem*>(pItem)->GetSortData();
691 uno::Sequence<OUString> aAlgos =
m_xColWrap->listCollatorAlgorithms(
694 if ( nSel < aAlgos.getLength() )
731 bool bPosInputOk =
true;
737 sal_Int32 nColonPos = thePosStr.indexOf(
':' );
739 if ( -1 != nColonPos )
740 thePosStr = thePosStr.copy( 0, nColonPos );
756 VclMessageType::Warning, VclButtonsType::Ok,
771 if (pDlg && bPosInputOk)
777 if ( pSetP && bPosInputOk )
780 return bPosInputOk ? DeactivateRC::LeavePage : DeactivateRC::KeepPage;
791 for (
size_t i=0;
i<nCount; ++
i)
800 if (&rButton == m_xBtnCopyResult.get())
802 if (rButton.get_active())
804 m_xLbOutPos->set_sensitive(
true);
805 m_xEdOutPos->set_sensitive(
true);
806 m_xEdOutPos->grab_focus();
810 m_xLbOutPos->set_sensitive(
false);
811 m_xEdOutPos->set_sensitive(
false);
814 else if (&rButton == m_xBtnSortUser.get())
816 if (rButton.get_active())
818 m_xLbSortUser->set_sensitive(
true);
819 m_xLbSortUser->grab_focus();
822 m_xLbSortUser->set_sensitive(
false);
828 if (&rLb == m_xLbOutPos.get())
831 const int nSelPos = m_xLbOutPos->get_active();
834 aString = m_xLbOutPos->get_id(nSelPos);
836 m_xEdOutPos->set_text(aString);
842 if (m_xBtnTopDown->get_active())
843 m_xBtnHeader->set_label(aStrColLabel);
845 m_xBtnHeader->set_label(aStrRowLabel);
860 for ( i=2; i<nCount && !bFound; i++ )
863 bFound = (theCurPosStr == aStr);
889 const uno::Sequence<OUString> aAlgos =
m_xColWrap->listCollatorAlgorithms( aLocale );
892 for (
const OUString& sAlg : aAlgos)
894 OUString sUser =
m_xColRes->GetTranslation( sAlg );
bool Next(OUString &rName, ScRange &rRange)
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
::std::vector< ScSortKeyState > maKeyState
#define LINK(Instance, Class, Member)
SC_DLLPUBLIC void Format(OStringBuffer &r, ScRefFlags nFlags, const ScDocument *pDocument=nullptr, const Details &rDetails=detailsOOOa1) const
Collection of user-defined sort lists.
static SC_DLLPUBLIC OUString ReplaceOrAppend(const OUString &rString, std::u16string_view rPlaceholder, const OUString &rReplacement)
Replaces the first occurrence of rPlaceholder in rString with rReplacement, or if rPlaceholder is not...
SC_DLLPUBLIC ScDBCollection * GetDBCollection() const
std::unique_ptr< weld::ComboBox > m_xLbAlgorithm
ScViewData * GetViewData() const
IMPL_LINK(ScTabPageSortFields, SelectHdl, weld::ComboBox &, rLb, void)
std::unique_ptr< weld::CheckButton > m_xBtnSortUser
std::unique_ptr< SvxLanguageBox > m_xLbLanguage
std::unique_ptr< weld::Entry > m_xEdOutPos
virtual bool FillItemSet(SfxItemSet *rArgSet) override
css::lang::Locale aCollatorLocale
std::unique_ptr< weld::ComboBox > m_xLbOutPos
ScTabPageSortOptions(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rArgSet)
static LanguageType convertToLanguageType(const css::lang::Locale &rLocale, bool bResolveSystem=true)
void ScColToAlpha(OUStringBuffer &rBuf, SCCOL nCol)
append alpha representation of column to buffer
sal_uInt16 GetFieldSelPos(SCCOLROW nField)
virtual void ActivatePage(const SfxItemSet &rSet) override
ScDocument & GetDocument() const
std::unique_ptr< weld::RadioButton > m_xBtnLeftRight
virtual DeactivateRC DeactivatePage(SfxItemSet *pSet) override
SC_DLLPUBLIC formula::FormulaGrammar::AddressConvention GetAddressConvention() const
std::unique_ptr< weld::CheckButton > m_xBtnHeader
std::unique_ptr< weld::CheckButton > m_xBtnNaturalSort
void SetLastSortKey(sal_uInt16 nItem)
sal_Int32 SCCOLROW
a type capable of holding either SCCOL or SCROW
void SetExchangeSupport()
SC_DLLPUBLIC OUString GetString(SCCOL nCol, SCROW nRow, SCTAB nTab, const ScInterpreterContext *pContext=nullptr) const
virtual void Start() override
std::unique_ptr< weld::CheckButton > m_xBtnCopyResult
bool bIncludeGraphicObjects
std::unique_ptr< weld::CheckButton > m_xBtnIncComments
const ScDBData * GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const
const SfxItemSet & GetItemSet() const
void SetDebugName(const char *pDebugName)
virtual DeactivateRC DeactivatePage(SfxItemSet *pSet) override
virtual ~ScTabPageSortFields() override
std::unique_ptr< weld::ComboBox > m_xLbSortUser
std::unique_ptr< weld::ScrolledWindow > m_xScrolledWindow
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
void Set(SCCOL nCol, SCROW nRow, SCTAB nTab)
std::unique_ptr< weld::Container > m_xBox
ScSortKeyWindow m_aSortWin
ScSheetLimits & GetSheetLimits() const
void FillUserSortListBox()
SC_DLLPUBLIC SCCOL ClampToAllocatedColumns(SCTAB nTab, SCCOL nCol) const
OUString ScResId(const char *pId)
static SC_DLLPUBLIC ScUserList * GetUserList()
#define LANGUAGE_DONTKNOW
virtual bool FillItemSet(SfxItemSet *rArgSet) override
void FillFieldLists(sal_uInt16 nStartField)
const sal_uInt16 nWhichSort
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *rArgSet)
void AddSortKey(sal_uInt16 nItem)
ScSortKeyItems m_aSortKeyItems
std::unique_ptr< weld::RadioButton > m_xBtnTopDown
const SfxItemSet * GetDialogExampleSet() const
std::unique_ptr< CollatorWrapper > m_xColWrap
virtual void ActivatePage(const SfxItemSet &rSet) override
void AddSortKey(sal_uInt16 nItem)
std::unique_ptr< weld::CheckButton > m_xBtnIncImages
std::unique_ptr< weld::CheckButton > m_xBtnFormats
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
std::unique_ptr< CollatorResource > m_xColRes
weld::Window * GetFrameWeld() const
virtual void Reset(const SfxItemSet *rArgSet) override
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
std::unique_ptr< weld::Label > m_xFtAlgorithm
IMPL_LINK_NOARG(ScTabPageSortFields, ScrollToEndHdl, Timer *, void)
virtual void Reset(const SfxItemSet *rArgSet) override
sal_uInt16 GetSortKeyCount() const
void SetByRows(bool bByRows)
Reference< XComponentContext > getProcessComponentContext()
SfxOkDialogController * GetDialogController() const
void SetInvokeHandler(const Link< Timer *, void > &rLink)
const sal_uInt16 nWhichSort
OUString aCollatorAlgorithm
std::vector< SCCOLROW > nFieldArr
SCCOL SC_MAXFIELDS(const ScSheetLimits &rLimits)
ScTabPageSortFields(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rArgSet)
void SetHeaders(bool bHeaders)
SVXCORE_DLLPUBLIC MSO_SPT Get(const OUString &)
SC_DLLPUBLIC ScRefFlags Parse(const OUString &, const ScDocument &, const Details &rDetails=detailsOOOa1, ExternalInfo *pExtInfo=nullptr, const css::uno::Sequence< css::sheet::ExternalLinkInfo > *pExternalLinks=nullptr, sal_Int32 *pSheetEndPos=nullptr, const OUString *pErrRef=nullptr)
std::unique_ptr< weld::CheckButton > m_xBtnCase
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage, bool bMobile=false)
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *pArgSet)
static css::lang::Locale convertToLocale(LanguageType nLangID, bool bResolveSystem=true)