31 #include <document.hxx>
32 #include <globstr.hrc>
52 VclMessageType::Warning, VclButtonsType::Ok,
101 void DBSaveData::Save()
104 aStr = rEdAssign.GetText();
105 bHeader = rBtnHeader.get_active();
106 bTotals = rBtnTotals.get_active();
107 bSize = rBtnSize.get_active();
108 bFormat = rBtnFormat.get_active();
109 bStrip = rBtnStrip.get_active();
113 void DBSaveData::Restore()
118 rEdAssign.SetText( aStr );
119 rBtnHeader.set_active ( bHeader );
120 rBtnTotals.set_active ( bTotals );
121 rBtnSize.set_active ( bSize );
122 rBtnFormat.set_active ( bFormat );
123 rBtnStrip.set_active ( bStrip );
132 "modules/scalc/ui/definedatabaserangedialog.ui",
"DefineDatabaseRangeDialog")
133 , m_rViewData(rViewData)
134 , rDoc(rViewData.GetDocument())
135 , bRefInputMode(false)
136 , aAddrDetails(rDoc.GetAddressConvention(), 0, 0)
137 , aLocalDbCol(*(rDoc.GetDBCollection()))
138 , m_xEdName(m_xBuilder->weld_entry_tree_view(
"entrygrid",
"entry",
"entry-list"))
139 , m_xAssignFrame(m_xBuilder->weld_frame(
"RangeFrame"))
140 , m_xEdAssign(new
formula::RefEdit(m_xBuilder->weld_entry(
"assign")))
141 , m_xRbAssign(new
formula::RefButton(m_xBuilder->weld_button(
"assignrb")))
142 , m_xOptions(m_xBuilder->weld_widget(
"Options"))
143 , m_xBtnHeader(m_xBuilder->weld_check_button(
"ContainsColumnLabels"))
144 , m_xBtnTotals(m_xBuilder->weld_check_button(
"ContainsTotalsRow"))
145 , m_xBtnDoSize(m_xBuilder->weld_check_button(
"InsertOrDeleteCells"))
146 , m_xBtnKeepFmt(m_xBuilder->weld_check_button(
"KeepFormatting"))
147 , m_xBtnStripData(m_xBuilder->weld_check_button(
"DontSaveImportedData"))
148 , m_xFTSource(m_xBuilder->weld_label(
"Source"))
149 , m_xFTOperations(m_xBuilder->weld_label(
"Operations"))
150 , m_xBtnOk(m_xBuilder->weld_button(
"ok"))
151 , m_xBtnCancel(m_xBuilder->weld_button(
"cancel"))
152 , m_xBtnAdd(m_xBuilder->weld_button(
"add"))
153 , m_xBtnRemove(m_xBuilder->weld_button(
"delete"))
154 , m_xModifyPB(m_xBuilder->weld_button(
"modify"))
155 , m_xInvalidFT(m_xBuilder->weld_label(
"invalid"))
156 , m_xFrameLabel(m_xAssignFrame->weld_label_widget())
157 , m_xExpander(m_xBuilder->weld_expander(
"more"))
159 m_xEdName->set_height_request_by_rows(4);
207 nEndCol, nEndRow, nEndTab );
209 theCurArea =
ScRange( nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab);
227 pDBData->
GetArea( nTab, nCol1, nRow1, nCol2, nRow2 );
229 if ( (rStart.
Tab() == nTab)
230 && (rStart.
Col() == nCol1) && (rStart.
Row() == nRow1)
231 && (rEnd.
Col() == nCol2) && (rEnd.
Row() == nRow2 ) )
233 OUString aDBName = pDBData->
GetName();
297 DoClose( ScDbNameDlgWrapper::GetChildWindowId() );
324 for (
const auto& rxDB : rDBs)
350 pData->
GetArea( nTab, nColStart, nRowStart, nColEnd, nRowEnd );
379 AddBtnHdl(*m_xBtnAdd);
400 OUString aNewArea = m_xEdAssign->GetText();
402 if ( aNewName.isEmpty() || aNewArea.isEmpty() )
409 OUString aText = m_xEdAssign->GetText();
412 theCurArea = aTmpRange;
424 pOldEntry->
SetHeader( m_xBtnHeader->get_active() );
425 pOldEntry->
SetTotals( m_xBtnTotals->get_active() );
426 pOldEntry->
SetDoSize( m_xBtnDoSize->get_active() );
427 pOldEntry->
SetKeepFmt( m_xBtnKeepFmt->get_active() );
428 pOldEntry->
SetStripData( m_xBtnStripData->get_active() );
434 std::unique_ptr<ScDBData> pNewEntry(
new ScDBData( aNewName, aStart.
Tab(),
435 aStart.
Col(), aStart.
Row(),
437 true, m_xBtnHeader->get_active(),
438 m_xBtnTotals->get_active() ));
439 pNewEntry->SetDoSize( m_xBtnDoSize->get_active() );
440 pNewEntry->SetKeepFmt( m_xBtnKeepFmt->get_active() );
441 pNewEntry->SetStripData( m_xBtnStripData->get_active() );
443 bool ins = aLocalDbCol.getNamedDBs().insert(std::move(pNewEntry));
450 m_xEdName->grab_focus();
451 m_xBtnAdd->set_label( aStrAdd );
452 m_xBtnAdd->set_sensitive(
false);
453 m_xBtnRemove->set_sensitive(
false);
455 m_xBtnHeader->set_active(
true);
456 m_xBtnTotals->set_active(
false );
457 m_xBtnDoSize->set_active(
false );
458 m_xBtnKeepFmt->set_active(
false );
459 m_xBtnStripData->set_active(
false );
460 SetInfoStrings(
nullptr );
464 NameModifyHdl( *m_xEdName );
469 m_xEdAssign->SelectAll();
470 m_xEdAssign->GrabFocus();
476 m_xEdName->select_entry_region(0, -1);
477 m_xEdName->grab_focus();
485 const OUString& mrName;
487 explicit FindByName(
const OUString& rName) : mrName(rName) {}
488 bool operator() (std::unique_ptr<ScDBData>
const& p)
const
490 return p->GetName() == mrName;
498 OUString aStrEntry = m_xEdName->get_active_text();
501 ::std::find_if(rDBs.
begin(), rDBs.
end(), FindByName(aStrEntry));
503 if (itr == rDBs.
end())
506 OUString aStrDelMsg =
ScResId( STR_QUERY_DELENTRY );
507 OUString sMsg{ aStrDelMsg.getToken(0,
'#') + aStrEntry + aStrDelMsg.getToken(1,
'#') };
509 VclMessageType::Question, VclButtonsType::YesNo,
511 xQueryBox->set_default_response(
RET_YES);
512 if (
RET_YES != xQueryBox->run())
516 SCCOL nColStart, nColEnd;
517 SCROW nRowStart, nRowEnd;
518 (*itr)->GetArea( nTab, nColStart, nRowStart, nColEnd, nRowEnd );
519 aRemoveList.emplace_back(
ScAddress( nColStart, nRowStart, nTab ),
527 m_xEdName->grab_focus();
528 m_xBtnAdd->set_label( aStrAdd );
529 m_xBtnAdd->set_sensitive(
false);
530 m_xBtnRemove->set_sensitive(
false);
533 m_xBtnHeader->set_active(
true);
534 m_xBtnTotals->set_active(
false );
535 m_xBtnDoSize->set_active(
false );
536 m_xBtnKeepFmt->set_active(
false );
537 m_xBtnStripData->set_active(
false );
538 SetInfoStrings(
nullptr );
541 NameModifyHdl( *m_xEdName );
546 OUString theName = m_xEdName->get_active_text();
547 bool bNameFound = m_xEdName->find_text(theName) != -1;
549 if ( theName.isEmpty() )
551 if (m_xBtnAdd->get_label() != aStrAdd)
552 m_xBtnAdd->set_label( aStrAdd );
553 m_xBtnAdd->set_sensitive(
false);
554 m_xBtnRemove->set_sensitive(
false);
555 m_xAssignFrame->set_sensitive(
false);
556 m_xOptions->set_sensitive(
false);
561 bRefInputMode =
false;
567 if (m_xBtnAdd->get_label() != aStrModify)
568 m_xBtnAdd->set_label( aStrModify );
575 UpdateDBData( theName );
579 if (m_xBtnAdd->get_label() != aStrAdd)
580 m_xBtnAdd->set_label( aStrAdd );
585 if ( !m_xEdAssign->GetText().isEmpty() )
587 m_xBtnAdd->set_sensitive(
true);
588 m_xOptions->set_sensitive(
true);
592 m_xBtnAdd->set_sensitive(
false);
593 m_xOptions->set_sensitive(
false);
595 m_xBtnRemove->set_sensitive(
false);
598 m_xAssignFrame->set_sensitive(
true);
602 bRefInputMode =
true;
611 OUString aText = m_xEdAssign->GetText();
613 theCurArea = aTmpRange;
615 if (!aText.isEmpty() && !m_xEdName->get_active_text().isEmpty())
617 m_xBtnAdd->set_sensitive(
true);
618 m_xBtnHeader->set_sensitive(
true);
619 m_xBtnTotals->set_sensitive(
true);
620 m_xBtnDoSize->set_sensitive(
true);
621 m_xBtnKeepFmt->set_sensitive(
true);
622 m_xBtnStripData->set_sensitive(
true);
623 m_xFTSource->set_sensitive(
true);
624 m_xFTOperations->set_sensitive(
true);
628 m_xBtnAdd->set_sensitive(
false);
629 m_xBtnHeader->set_sensitive(
false);
630 m_xBtnTotals->set_sensitive(
false);
631 m_xBtnDoSize->set_sensitive(
false);
632 m_xBtnKeepFmt->set_sensitive(
false);
633 m_xBtnStripData->set_sensitive(
false);
634 m_xFTSource->set_sensitive(
false);
635 m_xFTOperations->set_sensitive(
false);
SC_DLLPUBLIC 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
virtual void Close() override
virtual bool IsRefInputMode() const override
std::unique_ptr< ContentProperties > pData
OUString GetSourceString() const
static std::unique_ptr< DBSaveData > xSaveObj
void SetInfoStrings(const ScDBData *pDBData)
#define STR_DB_LOCAL_NONAME
std::unique_ptr< weld::CheckButton > m_xBtnTotals
void SetDoSize(bool bSet)
ScAddress::Details aAddrDetails
std::unique_ptr< formula::RefEdit > m_xEdAssign
void SetKeepFmt(bool bSet)
std::unique_ptr< weld::Button > m_xBtnRemove
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
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
SC_DLLPUBLIC 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)
OUString ScResId(const char *pId)
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
OUString GetOperations() const
void MoveTo(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2)
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.
void erase(const iterator &itr)
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
static SC_DLLPUBLIC const CharClass * getCharClassPtr()
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