sw: Simplifying the "Insert Table" dialog
The table creation dialog currently contains some confusing code related to converting a style index in the tree to a style index in the table. A magic number of 255 has been introduced, which has no connection to the objective limitations of the style list and requires separate processing when defining a style. This change merges the "- None -" style and the document's table styles into a single list. The "- None -" style is placed before all others, preserving the current behavior. This also removes the artificial limitation of 255 styles, expanding it to the maximum of size_t. Change-Id: Iac3be58d4473b184742fe5cb32ca4f1240f3d805 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196203 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
This commit is contained in:
committed by
Mike Kaganski
parent
582c032aaa
commit
2f16debb36
@@ -134,80 +134,37 @@ void SwInsTableDlg::InitAutoTableFormat()
|
||||
m_xTableTable.reset(new SwTableAutoFormatTable(SwModule::get()->GetAutoFormatTable()));
|
||||
|
||||
// Add "- none -" style autoformat table.
|
||||
m_xLbFormat->append_text(SwViewShell::GetShellRes()->aStrNone); // Insert to listbox
|
||||
std::unique_ptr<SwTableAutoFormat> pNoneStyle(
|
||||
new SwTableAutoFormat(TableStyleName(SwViewShell::GetShellRes()->aStrNone)));
|
||||
pNoneStyle->DisableAll();
|
||||
m_xTableTable->InsertAutoFormat(0, std::move(pNoneStyle));
|
||||
|
||||
// Add other styles of autoformat tables.
|
||||
for (sal_uInt8 i = 0, nCount = static_cast<sal_uInt8>(m_xTableTable->size());
|
||||
i < nCount; i++)
|
||||
for (size_t i = 0; i < m_xTableTable->size(); i++)
|
||||
{
|
||||
SwTableAutoFormat const& rFormat = (*m_xTableTable)[ i ];
|
||||
m_xLbFormat->append_text(rFormat.GetName().toString());
|
||||
if (m_xTAutoFormat && rFormat.GetName() == m_xTAutoFormat->GetName())
|
||||
m_lbIndex = i;
|
||||
m_xLbFormat->append_text((*m_xTableTable)[i].GetName().toString());
|
||||
}
|
||||
|
||||
// Change this min variable if you add autotable manually.
|
||||
minTableIndexInLb = 1;
|
||||
maxTableIndexInLb = minTableIndexInLb + static_cast<sal_uInt8>(m_xTableTable->size());
|
||||
// 1 means default table style
|
||||
// unfortunately when the table has a style sw/qa/uitest/writer_tests4/tdf115573.py fails
|
||||
// because tables that have pre-applied style resets the style of the elements in their cells
|
||||
// when a new row is inserted and the ui test above relies on that.
|
||||
m_lbIndex = 0;
|
||||
m_xLbFormat->select(m_lbIndex);
|
||||
m_tbIndex = lbIndexToTableIndex(m_lbIndex);
|
||||
m_xLbFormat->select(0);
|
||||
|
||||
SelFormatHdl( *m_xLbFormat );
|
||||
}
|
||||
|
||||
sal_uInt8 SwInsTableDlg::lbIndexToTableIndex( const sal_uInt8 listboxIndex )
|
||||
{
|
||||
if( minTableIndexInLb != maxTableIndexInLb &&
|
||||
minTableIndexInLb <= listboxIndex &&
|
||||
listboxIndex < maxTableIndexInLb )
|
||||
{
|
||||
return listboxIndex - minTableIndexInLb;
|
||||
}
|
||||
|
||||
return 255;
|
||||
}
|
||||
|
||||
IMPL_LINK_NOARG(SwInsTableDlg, SelFormatHdl, weld::TreeView&, void)
|
||||
{
|
||||
// Get index of selected item from the listbox
|
||||
m_lbIndex = static_cast<sal_uInt8>(m_xLbFormat->get_selected_index());
|
||||
m_tbIndex = lbIndexToTableIndex( m_lbIndex );
|
||||
|
||||
// To understand this index mapping, look InitAutoTableFormat function to
|
||||
// see how listbox item is implemented.
|
||||
if( m_tbIndex < 255 )
|
||||
m_aWndPreview.NotifyChange( (*m_xTableTable)[m_tbIndex] );
|
||||
else
|
||||
{
|
||||
SwTableAutoFormat aTmp( TableStyleName(SwViewShell::GetShellRes()->aStrNone) );
|
||||
aTmp.DisableAll();
|
||||
|
||||
m_aWndPreview.NotifyChange( aTmp );
|
||||
}
|
||||
size_t styleIdx = m_xLbFormat->get_selected_index();
|
||||
m_aWndPreview.NotifyChange((*m_xTableTable)[styleIdx]);
|
||||
}
|
||||
|
||||
IMPL_LINK_NOARG(SwInsTableDlg, OKHdl, weld::Button&, void)
|
||||
{
|
||||
if( m_tbIndex < 255 )
|
||||
m_pShell->SetTableStyle((*m_xTableTable)[m_tbIndex]);
|
||||
size_t styleIdx = m_xLbFormat->get_selected_index();
|
||||
m_pShell->SetTableStyle((*m_xTableTable)[styleIdx]);
|
||||
|
||||
if( m_tbIndex < 255 )
|
||||
{
|
||||
if( m_xTAutoFormat )
|
||||
*m_xTAutoFormat = (*m_xTableTable)[ m_tbIndex ];
|
||||
else
|
||||
m_xTAutoFormat.reset(new SwTableAutoFormat( (*m_xTableTable)[ m_tbIndex ] ));
|
||||
}
|
||||
if( m_xTAutoFormat )
|
||||
*m_xTAutoFormat = (*m_xTableTable)[styleIdx];
|
||||
else
|
||||
{
|
||||
m_xTAutoFormat.reset(new SwTableAutoFormat( TableStyleName(SwViewShell::GetShellRes()->aStrNone) ));
|
||||
m_xTAutoFormat->DisableAll();
|
||||
}
|
||||
m_xTAutoFormat.reset(new SwTableAutoFormat((*m_xTableTable)[styleIdx]));
|
||||
|
||||
m_xDialog->response(RET_OK);
|
||||
}
|
||||
|
||||
@@ -41,10 +41,6 @@ class SwInsTableDlg final : public SfxDialogController
|
||||
std::unique_ptr<SwTableAutoFormatTable> m_xTableTable;
|
||||
std::unique_ptr<SwTableAutoFormat> m_xTAutoFormat;
|
||||
|
||||
sal_uInt8 m_lbIndex;
|
||||
sal_uInt8 m_tbIndex;
|
||||
sal_uInt8 minTableIndexInLb;
|
||||
sal_uInt8 maxTableIndexInLb;
|
||||
sal_Int64 m_nEnteredValRepeatHeaderNF;
|
||||
|
||||
AutoFormatPreview m_aWndPreview;
|
||||
@@ -63,9 +59,6 @@ class SwInsTableDlg final : public SfxDialogController
|
||||
std::unique_ptr<weld::CustomWeld> m_xWndPreview;
|
||||
std::unique_ptr<weld::Frame> m_xStyleFrame;
|
||||
|
||||
// Returns 255 if mapping is not possible.
|
||||
// This means there cannot be more than 255 autotable style.
|
||||
sal_uInt8 lbIndexToTableIndex(const sal_uInt8 listboxIndex);
|
||||
void InitAutoTableFormat();
|
||||
|
||||
DECL_LINK(TextFilterHdl, OUString&, bool);
|
||||
|
||||
Reference in New Issue
Block a user