32 #include <document.hxx>
33 #include <globstr.hrc>
53 VclMessageType::Warning, VclButtonsType::Ok,
102 void DBSaveData::Save()
105 aStr = rEdAssign.GetText();
106 bHeader = rBtnHeader.get_active();
107 bTotals = rBtnTotals.get_active();
108 bSize = rBtnSize.get_active();
109 bFormat = rBtnFormat.get_active();
110 bStrip = rBtnStrip.get_active();
114 void DBSaveData::Restore()
119 rEdAssign.SetText( aStr );
120 rBtnHeader.set_active ( bHeader );
121 rBtnTotals.set_active ( bTotals );
122 rBtnSize.set_active ( bSize );
123 rBtnFormat.set_active ( bFormat );
124 rBtnStrip.set_active ( bStrip );
133 "modules/scalc/ui/definedatabaserangedialog.ui",
"DefineDatabaseRangeDialog")
134 , m_rViewData(rViewData)
135 , rDoc(rViewData.GetDocument())
136 , bRefInputMode(
false)
137 , aAddrDetails(rDoc.GetAddressConvention(), 0, 0)
138 , aLocalDbCol(*(rDoc.GetDBCollection()))
139 , m_xEdName(m_xBuilder->weld_entry_tree_view(
"entrygrid",
"entry",
"entry-list"))
140 , m_xAssignFrame(m_xBuilder->weld_frame(
"RangeFrame"))
141 , m_xEdAssign(new
formula::RefEdit(m_xBuilder->weld_entry(
"assign")))
142 , m_xRbAssign(new
formula::RefButton(m_xBuilder->weld_button(
"assignrb")))
143 , m_xOptions(m_xBuilder->weld_widget(
"Options"))
144 , m_xBtnHeader(m_xBuilder->weld_check_button(
"ContainsColumnLabels"))
145 , m_xBtnTotals(m_xBuilder->weld_check_button(
"ContainsTotalsRow"))
146 , m_xBtnDoSize(m_xBuilder->weld_check_button(
"InsertOrDeleteCells"))
147 , m_xBtnKeepFmt(m_xBuilder->weld_check_button(
"KeepFormatting"))
148 , m_xBtnStripData(m_xBuilder->weld_check_button(
"DontSaveImportedData"))
149 , m_xFTSource(m_xBuilder->weld_label(
"Source"))
150 , m_xFTOperations(m_xBuilder->weld_label(
"Operations"))
151 , m_xBtnOk(m_xBuilder->weld_button(
"ok"))
152 , m_xBtnCancel(m_xBuilder->weld_button(
"cancel"))
153 , m_xBtnAdd(m_xBuilder->weld_button(
"add"))
154 , m_xBtnRemove(m_xBuilder->weld_button(
"delete"))
155 , m_xModifyPB(m_xBuilder->weld_button(
"modify"))
156 , m_xInvalidFT(m_xBuilder->weld_label(
"invalid"))
157 , m_xFrameLabel(m_xAssignFrame->weld_label_widget())
158 , m_xExpander(m_xBuilder->weld_expander(
"more"))
160 m_xEdName->set_height_request_by_rows(4);
208 nEndCol, nEndRow, nEndTab );
210 theCurArea =
ScRange( nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab);
228 pDBData->
GetArea( nTab, nCol1, nRow1, nCol2, nRow2 );
230 if ( (rStart.
Tab() == nTab)
231 && (rStart.
Col() == nCol1) && (rStart.
Row() == nRow1)
232 && (rEnd.
Col() == nCol2) && (rEnd.
Row() == nRow2 ) )
234 OUString aDBName = pDBData->
GetName();
299 DoClose( ScDbNameDlgWrapper::GetChildWindowId() );
326 for (
const auto& rxDB : rDBs)
352 pData->
GetArea( nTab, nColStart, nRowStart, nColEnd, nRowEnd );
382 AddBtnHdl(*m_xBtnAdd);
403 OUString aNewArea = m_xEdAssign->GetText();
405 if ( aNewName.isEmpty() || aNewArea.isEmpty() )
413 OUString aText = m_xEdAssign->GetText();
416 theCurArea = aTmpRange;
428 pOldEntry->
SetHeader( m_xBtnHeader->get_active() );
429 pOldEntry->
SetTotals( m_xBtnTotals->get_active() );
430 pOldEntry->
SetDoSize( m_xBtnDoSize->get_active() );
431 pOldEntry->
SetKeepFmt( m_xBtnKeepFmt->get_active() );
432 pOldEntry->
SetStripData( m_xBtnStripData->get_active() );
438 std::unique_ptr<ScDBData> pNewEntry(
new ScDBData( aNewName, aStart.
Tab(),
439 aStart.
Col(), aStart.
Row(),
441 true, m_xBtnHeader->get_active(),
442 m_xBtnTotals->get_active() ));
443 pNewEntry->SetDoSize( m_xBtnDoSize->get_active() );
444 pNewEntry->SetKeepFmt( m_xBtnKeepFmt->get_active() );
445 pNewEntry->SetStripData( m_xBtnStripData->get_active() );
447 bool ins = aLocalDbCol.getNamedDBs().insert(std::move(pNewEntry));
448 assert(ins); (
void)ins;
453 m_xEdName->set_entry_text( OUString() );
454 m_xEdName->grab_focus();
455 m_xBtnAdd->set_label( aStrAdd );
456 m_xBtnAdd->set_sensitive(
false);
457 m_xBtnRemove->set_sensitive(
false);
458 m_xEdAssign->SetText( OUString() );
459 m_xBtnHeader->set_active(
true);
460 m_xBtnTotals->set_active(
false );
461 m_xBtnDoSize->set_active(
false );
462 m_xBtnKeepFmt->set_active(
false );
463 m_xBtnStripData->set_active(
false );
464 SetInfoStrings(
nullptr );
468 NameModifyHdl( *m_xEdName );
473 m_xEdAssign->SelectAll();
474 m_xEdAssign->GrabFocus();
481 m_xEdName->select_entry_region(0, -1);
482 m_xEdName->grab_focus();
491 const OUString& mrName;
493 explicit FindByName(
const OUString& rName) : mrName(rName) {}
494 bool operator() (std::unique_ptr<ScDBData>
const& p)
const
496 return p->GetName() == mrName;
504 OUString aStrEntry = m_xEdName->get_active_text();
507 ::std::find_if(rDBs.
begin(), rDBs.
end(), FindByName(aStrEntry));
509 if (itr == rDBs.
end())
512 OUString aStrDelMsg =
ScResId( STR_QUERY_DELENTRY );
515 VclMessageType::Question, VclButtonsType::YesNo,
517 xQueryBox->set_default_response(
RET_YES);
518 if (
RET_YES != xQueryBox->run())
522 SCCOL nColStart, nColEnd;
523 SCROW nRowStart, nRowEnd;
524 (*itr)->GetArea( nTab, nColStart, nRowStart, nColEnd, nRowEnd );
525 aRemoveList.emplace_back(
ScAddress( nColStart, nRowStart, nTab ),
532 m_xEdName->set_entry_text( OUString() );
533 m_xEdName->grab_focus();
534 m_xBtnAdd->set_label( aStrAdd );
535 m_xBtnAdd->set_sensitive(
false);
536 m_xBtnRemove->set_sensitive(
false);
537 m_xEdAssign->SetText( OUString() );
539 m_xBtnHeader->set_active(
true);
540 m_xBtnTotals->set_active(
false );
541 m_xBtnDoSize->set_active(
false );
542 m_xBtnKeepFmt->set_active(
false );
543 m_xBtnStripData->set_active(
false );
544 SetInfoStrings(
nullptr );
547 NameModifyHdl( *m_xEdName );
552 OUString theName = m_xEdName->get_active_text();
553 bool bNameFound = m_xEdName->find_text(theName) != -1;
555 if ( theName.isEmpty() )
557 if (m_xBtnAdd->get_label() != aStrAdd)
558 m_xBtnAdd->set_label( aStrAdd );
559 m_xBtnAdd->set_sensitive(
false);
560 m_xBtnRemove->set_sensitive(
false);
561 m_xAssignFrame->set_sensitive(
false);
562 m_xOptions->set_sensitive(
false);
567 bRefInputMode =
false;
573 if (m_xBtnAdd->get_label() != aStrModify)
574 m_xBtnAdd->set_label( aStrModify );
581 UpdateDBData( theName );
585 if (m_xBtnAdd->get_label() != aStrAdd)
586 m_xBtnAdd->set_label( aStrAdd );
591 if ( !m_xEdAssign->GetText().isEmpty() )
593 m_xBtnAdd->set_sensitive(
true);
594 m_xOptions->set_sensitive(
true);
598 m_xBtnAdd->set_sensitive(
false);
599 m_xOptions->set_sensitive(
false);
601 m_xBtnRemove->set_sensitive(
false);
604 m_xAssignFrame->set_sensitive(
true);
608 bRefInputMode =
true;
617 OUString aText = m_xEdAssign->GetText();
619 theCurArea = aTmpRange;
621 if (!aText.isEmpty() && !m_xEdName->get_active_text().isEmpty())
623 m_xBtnAdd->set_sensitive(
true);
624 m_xBtnHeader->set_sensitive(
true);
625 m_xBtnTotals->set_sensitive(
true);
626 m_xBtnDoSize->set_sensitive(
true);
627 m_xBtnKeepFmt->set_sensitive(
true);
628 m_xBtnStripData->set_sensitive(
true);
629 m_xFTSource->set_sensitive(
true);
630 m_xFTOperations->set_sensitive(
true);
634 m_xBtnAdd->set_sensitive(
false);
635 m_xBtnHeader->set_sensitive(
false);
636 m_xBtnTotals->set_sensitive(
false);
637 m_xBtnDoSize->set_sensitive(
false);
638 m_xBtnKeepFmt->set_sensitive(
false);
639 m_xBtnStripData->set_sensitive(
false);
640 m_xFTSource->set_sensitive(
false);
641 m_xFTOperations->set_sensitive(
false);
ScRefFlags ParseAny(const OUString &, const ScDocument &, const ScAddress::Details &rDetails=ScAddress::detailsOOOa1)
#define LINK(Instance, Class, Member)
std::unique_ptr< weld::CheckButton > m_xBtnKeepFmt
std::unique_ptr< weld::Button > m_xBtnAdd
SC_DLLPUBLIC ScDBCollection * GetDBCollection() const
std::unique_ptr< weld::Widget > m_xOptions
OUString ScResId(TranslateId aId)
virtual void Close() override
virtual bool IsRefInputMode() const override
std::unique_ptr< sal_Int32[]> pData
OUString GetSourceString() const
static std::unique_ptr< DBSaveData > xSaveObj
void SetInfoStrings(const ScDBData *pDBData)
std::unique_ptr< weld::CheckButton > m_xBtnTotals
void SetDoSize(bool bSet)
ScAddress::Details aAddrDetails
std::basic_string_view< charT, traits > getToken(std::basic_string_view< charT, traits > sv, charT delimiter, std::size_t &position)
std::unique_ptr< formula::RefEdit > m_xEdAssign
void SetKeepFmt(bool bSet)
std::unique_ptr< weld::Button > m_xBtnRemove
void MoveTo(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, SCCOL nUpdateCol=-1)
iterator erase(const iterator &itr)
std::unique_ptr< weld::CheckButton > m_xBtnHeader
std::unique_ptr< weld::Button > m_xBtnCancel
void UpdateDBData(const OUString &rStrName)
std::unique_ptr< weld::Label > m_xFTOperations
static SC_DLLPUBLIC const CharClass & getCharClass()
OUString Format(const ScDocument &rDocument, ScRefFlags nFlags=ScRefFlags::ZERO, const ScAddress::Details &rDetails=ScAddress::detailsOOOa1, bool bFullAddressNotation=false) const
Returns string with formatted cell range from aStart to aEnd, according to provided address conventio...
DBsType::iterator iterator
static SC_DLLPUBLIC IsNameValidType IsNameValid(const OUString &rName, const ScDocument &rDoc)
ScMarkType GetSimpleArea(SCCOL &rStartCol, SCROW &rStartRow, SCTAB &rStartTab, SCCOL &rEndCol, SCROW &rEndRow, SCTAB &rEndTab) const
const OUString & GetName() const
virtual void RefInputDone(bool bForced=false) override
constexpr OUStringLiteral STR_DB_LOCAL_NONAME
OUString GetOperations() const
void GetArea(SCTAB &rTab, SCCOL &rCol1, SCROW &rRow1, SCCOL &rCol2, SCROW &rRow2) const
void SetHeader(bool bHasH)
std::unique_ptr< formula::RefButton > m_xRbAssign
std::unique_ptr< weld::Button > m_xModifyPB
ScDBData * findByUpperName(const OUString &rName)
void SetStripData(bool bSet)
ScDBCollection aLocalDbCol
Stores global named database ranges.
std::unique_ptr< weld::Label > m_xFTSource
virtual void SetActive() override
std::unique_ptr< weld::Label > m_xInvalidFT
ScDbNameDlg(SfxBindings *pB, SfxChildWindow *pCW, weld::Window *pParent, ScViewData &rViewData)
OString strip(const OString &rIn, char c)
std::unique_ptr< weld::CheckButton > m_xBtnStripData
void ModifyAllDBData(const ScDBCollection &rNewColl, const std::vector< ScRange > &rDelAreaList)
Reference< XExecutableDialog > m_xDialog
const ScDBData * GetDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, ScDBDataPortion ePortion) const
void SetTotals(bool bTotals)
virtual ~ScDbNameDlg() override
std::unique_ptr< weld::EntryTreeView > m_xEdName
std::unique_ptr< weld::Label > m_xFrameLabel
IMPL_LINK_NOARG(ScDbNameDlg, OkBtnHdl, weld::Button &, void)
std::unique_ptr< weld::Button > m_xBtnOk
std::unique_ptr< weld::CheckButton > m_xBtnDoSize
bool DoClose(sal_uInt16 nId)
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage, bool bMobile=false)
virtual void SetReference(const ScRange &rRef, ScDocument &rDoc) override
virtual void RefInputStart(formula::RefEdit *pEdit, formula::RefButton *pButton=nullptr) override
bool m_bDetectedRangeSegmentation false