13 #include <string_view>
20 #include <globstr.hrc>
26 OUString lclGetFunctionMaskName(
const PivotFunc nFunctionMask)
29 switch (nFunctionMask)
53 OUString lclCreateDataItemName(
const PivotFunc nFunctionMask, std::u16string_view rName,
const sal_uInt8 nDuplicationCount)
55 OUString
aBuffer = lclGetFunctionMaskName(nFunctionMask) +
" - " + rName;
56 if(nDuplicationCount > 0)
58 aBuffer +=
" " + OUString::number(nDuplicationCount);
83 int nEntry = mxControl->get_cursor_index();
87 ScItemValue* pCurrentItemValue = weld::fromId<ScItemValue*>(mxControl->get_id(nEntry));
90 SCCOL nCurrentColumn = rCurrentFunctionData.
mnCol;
98 rCurrentLabelData, nEntry](
int nResult)
mutable {
102 rFunctionData.
mnFuncMask = mpFunctionDlg->GetFuncMask();
103 rCurrentLabelData.
mnFuncMask = mpFunctionDlg->GetFuncMask();
105 rFunctionData.
maFieldRef = mpFunctionDlg->GetFieldRef();
109 AdjustDuplicateCount(pCurrentItemValue);
111 OUString sDataItemName = lclCreateDataItemName(
116 mxControl->set_text(nEntry, sDataItemName);
119 mpFunctionDlg->disposeOnce();
136 if (rField.mnOriginalDim >= 0)
137 nColumn = rField.mnOriginalDim;
139 nColumn = rField.nCol;
161 std::unique_ptr<weld::TreeIter> xLoopEntry(
mxControl->make_iterator());
162 if (!
mxControl->get_iter_first(*xLoopEntry))
172 if (rLabelData.
maName.isEmpty())
176 if (sLayoutName.isEmpty())
178 sLayoutName = lclCreateDataItemName(
184 rDataFieldNames.emplace_back(rLabelData.
maName, sLayoutName, rLabelData.
mnDupCount);
185 }
while (
mxControl->iter_next(*xLoopEntry));
200 OUString sText =
mxControl->get_selected_text();
203 mxControl->insert(
nullptr, nTarget, &sText, &sId,
nullptr,
nullptr,
false,
nullptr);
227 OUString sDataName = lclCreateDataItemName(
233 mxControl->insert(
nullptr, nPosition, &sDataName, &sId,
nullptr,
nullptr,
false,
nullptr);
240 bool bFoundDuplicate =
false;
245 std::unique_ptr<weld::TreeIter> xEachEntry(
mxControl->make_iterator());
246 if (!
mxControl->get_iter_first(*xEachEntry))
251 if (pItemValue == pInputItemValue)
256 if (rFunctionData.
mnCol == rInputFunctionData.
mnCol &&
259 bFoundDuplicate =
true;
260 if(rFunctionData.
mnDupCount > nMaxDuplicateCount)
261 nMaxDuplicateCount = rFunctionData.
mnDupCount;
263 }
while (
mxControl->iter_next(*xEachEntry));
267 rInputFunctionData.
mnDupCount = nMaxDuplicateCount + 1;
278 int nEntry = mxControl->get_cursor_index();
280 mxControl->remove(nEntry);
#define LINK(Instance, Class, Member)
virtual int count_selected_rows() const =0
OUString ScResId(TranslateId aId)
ScDPLabelData & GetLabelData(SCCOL nColumn)
void AdjustDuplicateCount(ScItemValue *pInputItemValue)
bool IsDataElement(SCCOL nColumn)
std::vector< std::unique_ptr< ScItemValue > > maDataItemValues
sal_uInt16 GetCode() const
css::sheet::DataPilotFieldReference maFieldRef
virtual void Response(int nResponse)=0
PivotFunc mnFuncMask
Page/Column/Row subtotal function.
OUString maName
Original name of the dimension.
void InsertEntryForItem(ScItemValue *pItemValue, int nPosition)
ScItemValue * mpOriginalItemValue
void PushDataFieldNames(std::vector< ScDPName > &rDataFieldNames)
IMPL_LINK_NOARG(ScPivotLayoutTreeListData, DoubleClickHdl, weld::TreeView &, bool)
ScPivotLayoutDialog * mpParent
std::vector< ScPivotField > ScPivotFieldVector
virtual VclPtr< AbstractScDPFunctionDlg > CreateScDPFunctionDlg(weld::Widget *pParent, const ScDPLabelDataVector &rLabelVec, const ScDPLabelData &rLabelData, const ScPivotFuncData &rFuncData)=0
void FillDataField(ScPivotFieldVector &rDataFields)
IMPL_LINK(ScPivotLayoutTreeListData, KeyInputHdl, const KeyEvent &, rKeyEvent, bool)
ScPivotFuncData maFunctionData
ScPivotLayoutTreeListData(std::unique_ptr< weld::TreeView > xControl)
bool StartExecuteAsync(const std::function< void(sal_Int32)> &rEndDialogFn)
virtual void InsertEntryForSourceTarget(weld::TreeView &rSource, int nTarget) override
VclPtr< AbstractScDPFunctionDlg > mpFunctionDlg
virtual OUString get_selected_id() const =0
RegionData_Impl * mpParent
virtual ~ScPivotLayoutTreeListData() override
OUString maLayoutName
Layout name (display name)
OUString toId(const void *pValue)
ScItemValue * GetItem(SCCOL nColumn)
std::unique_ptr< char[]> aBuffer
tools::Long mnOriginalDim
static SC_DLLPUBLIC ScAbstractDialogFactory * Create()
std::unique_ptr< weld::TreeView > mxControl
constexpr sal_uInt16 KEY_DELETE