Kaydet (Commit) 380b7827 authored tarafından Kohei Yoshida's avatar Kohei Yoshida

fdo#32826: Finally return the real selected sheets, and use it.

This should solve the problem reported in fdo#32826, which is, when
printing from print preview window always prints all sheets regardless
of currently selected sheets.
üst 7a16f317
......@@ -89,7 +89,9 @@ public:
SCTAB GetSelectCount() const;
SCTAB GetFirstSelected() const;
SCTAB GetLastSelected() const;
void GetSelectedTabs(MarkedTabsType& rTabs) const;
const MarkedTabsType& GetSelectedTabs() const;
void SetSelectedTabs(const MarkedTabsType& rTabs);
void SetMarkNegative( bool bFlag ) { bMarkIsNeg = bFlag; }
bool IsMarkNegative() const { return bMarkIsNeg; }
......
......@@ -228,10 +228,15 @@ SCTAB ScMarkData::GetLastSelected() const
return 0;
}
void ScMarkData::GetSelectedTabs(MarkedTabsType& rTabs) const
const ScMarkData::MarkedTabsType& ScMarkData::GetSelectedTabs() const
{
MarkedTabsType aTabs(maTabMarked.begin(), maTabMarked.end());
rTabs.swap(aTabs);
return maTabMarked;
}
void ScMarkData::SetSelectedTabs(const MarkedTabsType& rTabs)
{
MarkedTabsType aTabs(rTabs.begin(), rTabs.end());
maTabMarked.swap(aTabs);
}
void ScMarkData::MarkToMulti()
......
......@@ -171,6 +171,7 @@ public:
FmFormView* GetDrawView() { return pDrawView; }
void SetSelectedTabs(const ScMarkData& rMark);
const ScMarkData::MarkedTabsType& GetSelectedTabs() const;
};
......
......@@ -54,6 +54,7 @@
#include <com/sun/star/util/Date.hpp>
#include <com/sun/star/sheet/XNamedRanges.hpp>
#include <com/sun/star/sheet/XLabelRanges.hpp>
#include <com/sun/star/sheet/XSelectedSheetsSupplier.hpp>
#include <com/sun/star/sheet/XUnnamedDatabaseRanges.hpp>
#include <com/sun/star/i18n/XForbiddenCharacters.hpp>
#include <com/sun/star/script/XLibraryContainer.hpp>
......@@ -88,7 +89,6 @@
#include "rangeutl.hxx"
#include "markdata.hxx"
#include "docoptio.hxx"
#include "scextopt.hxx"
#include "unonames.hxx"
#include "shapeuno.hxx"
#include "viewuno.hxx"
......@@ -894,31 +894,14 @@ bool ScModelObj::FillRenderMarkData( const uno::Any& aSelection,
}
// restrict to selected sheets if a view is available
if ( bSelectedSheetsOnly && xView.is() )
{
ScTabViewObj* pViewObj = ScTabViewObj::getImplementation( xView );
if (pViewObj)
{
ScTabViewShell* pViewSh = pViewObj->GetViewShell();
if (pViewSh)
{
// #i95280# when printing from the shell, the view is never activated,
// so Excel view settings must also be evaluated here.
ScExtDocOptions* pExtOpt = pDocShell->GetDocument()->GetExtDocOptions();
if ( pExtOpt && pExtOpt->IsChanged() )
{
pViewSh->GetViewData()->ReadExtOptions(*pExtOpt); // Excel view settings
pViewSh->SetTabNo( pViewSh->GetViewData()->GetTabNo(), true );
pExtOpt->SetChanged( false );
}
const ScMarkData& rViewMark = pViewSh->GetViewData()->GetMarkData();
SCTAB nTabCount = pDocShell->GetDocument()->GetTableCount();
for (SCTAB nTab = 0; nTab < nTabCount; nTab++)
if (!rViewMark.GetTableSelect(nTab))
rMark.SelectTable( nTab, false );
}
}
uno::Reference<sheet::XSelectedSheetsSupplier> xSelectedSheets(xView, uno::UNO_QUERY);
if (bSelectedSheetsOnly && xSelectedSheets.is())
{
uno::Sequence<sal_Int32> aSelected = xSelectedSheets->getSelectedSheets();
ScMarkData::MarkedTabsType aSelectedTabs;
for (sal_Int32 i = 0, n = aSelected.getLength(); i < n; ++i)
aSelectedTabs.insert(static_cast<SCTAB>(aSelected[i]));
rMark.SetSelectedTabs(aSelectedTabs);
}
ScPrintOptions aNewOptions;
......
......@@ -73,6 +73,8 @@
#include "sheetevents.hxx"
#include "markdata.hxx"
#include "AccessibilityHints.hxx"
#include "scextopt.hxx"
#include "preview.hxx"
#include <svx/sdrhittesthelper.hxx>
using namespace com::sun::star;
......@@ -2372,10 +2374,42 @@ void SAL_CALL ScTabViewObj::insertTransferable( const ::com::sun::star::uno::Ref
}
}
namespace {
uno::Sequence<sal_Int32> toSequence(const ScMarkData::MarkedTabsType& rSelected)
{
uno::Sequence<sal_Int32> aRet(rSelected.size());
ScMarkData::MarkedTabsType::const_iterator itr = rSelected.begin(), itrEnd = rSelected.end();
for (size_t i = 0; itr != itrEnd; ++itr, ++i)
aRet[i] = static_cast<sal_Int32>(*itr);
return aRet;
}
}
uno::Sequence<sal_Int32> ScTabViewObj::getSelectedSheets()
throw (uno::RuntimeException)
{
return uno::Sequence<sal_Int32>();
ScTabViewShell* pViewSh = GetViewShell();
if (!pViewSh)
return uno::Sequence<sal_Int32>();
ScViewData* pViewData = pViewSh->GetViewData();
if (!pViewData)
return uno::Sequence<sal_Int32>();
// #i95280# when printing from the shell, the view is never activated,
// so Excel view settings must also be evaluated here.
ScExtDocOptions* pExtOpt = pViewData->GetDocument()->GetExtDocOptions();
if (pExtOpt && pExtOpt->IsChanged())
{
pViewSh->GetViewData()->ReadExtOptions(*pExtOpt); // Excel view settings
pViewSh->SetTabNo(pViewSh->GetViewData()->GetTabNo(), true);
pExtOpt->SetChanged(false);
}
return toSequence(pViewData->GetMarkData().GetSelectedTabs());
}
ScPreviewObj::ScPreviewObj(ScPreviewShell* pViewSh) :
......@@ -2419,7 +2453,11 @@ void ScPreviewObj::Notify(SfxBroadcaster&, const SfxHint& rHint)
uno::Sequence<sal_Int32> ScPreviewObj::getSelectedSheets()
throw (uno::RuntimeException)
{
return uno::Sequence<sal_Int32>();
ScPreview* p = mpViewShell->GetPreview();
if (!p)
return uno::Sequence<sal_Int32>();
return toSequence(p->GetSelectedTabs());
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -1548,7 +1548,12 @@ void ScPreview::DrawInvert( long nDragPos, sal_uInt16 nFlags )
void ScPreview::SetSelectedTabs(const ScMarkData& rMark)
{
rMark.GetSelectedTabs(maSelectedTabs);
maSelectedTabs = rMark.GetSelectedTabs();
}
const ScMarkData::MarkedTabsType& ScPreview::GetSelectedTabs() const
{
return maSelectedTabs;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment