20#include <com/sun/star/io/XMarkableStream.hpp>
21#include <com/sun/star/uno/XComponentContext.hpp>
30#define UNOCONTROL_STREAMVERSION short(2)
51 UnoControlModelEntryListBase::iterator it =
maList.begin();
52 ::std::advance( it, nEntry );
57 delete (*it)->pxControl;
77 UnoControlModelEntryListBase::iterator it =
maList.begin();
78 ::std::advance( it,
i );
99 size_t nEntries = rList.
size();
100 for (
size_t n = 0;
n < nEntries;
n++ )
113 size_t nEntries = rList.
size();
114 for (
size_t n = 0;
n < nEntries;
n++ )
129 for (
const css::uno::Reference< css::awt::XControlModel >& rRef :
Controls )
132 pNewEntry->
bGroup =
false;
133 pNewEntry->
pxControl =
new css::uno::Reference< css::awt::XControlModel > ;
141 for (
size_t n = rList.
size();
n; )
150static void ImplWriteControls(
const css::uno::Reference< css::io::XObjectOutputStream > & OutStream,
const css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > >& rCtrls )
152 css::uno::Reference< css::io::XMarkableStream > xMark( OutStream, css::uno::UNO_QUERY );
153 DBG_ASSERT( xMark.is(),
"write: no XMarkableStream!" );
155 sal_uInt32 nStoredControls = 0;
156 sal_Int32 nDataBeginMark = xMark->createMark();
158 OutStream->writeLong( 0 );
159 OutStream->writeLong( 0 );
161 for (
const css::uno::Reference< css::awt::XControlModel >& xI : rCtrls )
163 css::uno::Reference< css::io::XPersistObject > xPO( xI, css::uno::UNO_QUERY );
164 DBG_ASSERT( xPO.is(),
"write: Control doesn't support XPersistObject" );
167 OutStream->writeObject( xPO );
171 sal_Int32 nDataLen = xMark->offsetToMark( nDataBeginMark );
172 xMark->jumpToMark( nDataBeginMark );
173 OutStream->writeLong( nDataLen );
174 OutStream->writeLong( nStoredControls );
175 xMark->jumpToFurthest();
176 xMark->deleteMark(nDataBeginMark);
179static css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > >
ImplReadControls(
const css::uno::Reference< css::io::XObjectInputStream > & InStream )
181 css::uno::Reference< css::io::XMarkableStream > xMark( InStream, css::uno::UNO_QUERY );
182 DBG_ASSERT( xMark.is(),
"write: no XMarkableStream!" );
184 sal_Int32 nDataBeginMark = xMark->createMark();
186 sal_Int32 nDataLen = InStream->readLong();
187 sal_uInt32 nCtrls = InStream->readLong();
189 css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > >
aSeq( nCtrls );
190 for ( sal_uInt32
n = 0;
n < nCtrls;
n++ )
192 css::uno::Reference< css::io::XPersistObject > xObj = InStream->readObject();
193 css::uno::Reference< css::awt::XControlModel > xI( xObj, css::uno::UNO_QUERY );
194 aSeq.getArray()[
n] = xI;
198 xMark->jumpToMark( nDataBeginMark );
199 InStream->skipBytes( nDataLen );
200 xMark->deleteMark(nDataBeginMark);
208 css::uno::Any aRet = ::cppu::queryInterface( rType,
209 static_cast< css::awt::XTabControllerModel*
>(
this),
210 static_cast< css::lang::XServiceInfo*
>(
this),
211 static_cast< css::io::XPersistObject*
>(
this),
212 static_cast< css::lang::XTypeProvider*
>(
this) );
213 return (aRet.hasValue() ? aRet : OWeakAggObject::queryAggregation( rType ));
221 static const css::uno::Sequence< css::uno::Type > aTypeList {
232 ::osl::Guard< ::osl::Mutex > aGuard(
GetMutex() );
239 ::osl::Guard< ::osl::Mutex > aGuard(
GetMutex() );
246 ::osl::Guard< ::osl::Mutex > aGuard(
GetMutex() );
254 ::osl::Guard< ::osl::Mutex > aGuard(
GetMutex() );
257 css::uno::Reference< css::awt::XControlModel > * pRefs =
aSeq.getArray();
264 ::osl::Guard< ::osl::Mutex > aGuard(
GetMutex() );
275 bool bInserted =
false;
302 ::osl::Guard< ::osl::Mutex > aGuard(
GetMutex() );
307 sal_Int32 nGroups = 0;
309 for (
size_t n = 0;
n < nEntries;
n++ )
320 ::osl::Guard< ::osl::Mutex > aGuard(
GetMutex() );
322 css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > >
aSeq;
325 for (
size_t n = 0;
n < nEntries;
n++ )
330 if ( nG ==
static_cast<sal_uInt32
>(nGroup) )
333 aSeq = css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > >(
nCount );
334 css::uno::Reference< css::awt::XControlModel > * pRefs =
aSeq.getArray();
347 ::osl::Guard< ::osl::Mutex > aGuard(
GetMutex() );
349 sal_uInt32 nGroup = 0;
351 for (
size_t n = 0;
n < nEntries;
n++ )
371 return "stardiv.vcl.controlmodel.TabController";
376 ::osl::Guard< ::osl::Mutex > aGuard(
GetMutex() );
378 css::uno::Reference< css::io::XMarkableStream > xMark( OutStream, css::uno::UNO_QUERY );
379 DBG_ASSERT( xMark.is(),
"write: no XMarkableStream!" );
383 css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > > aCtrls =
getControlModels();
387 OutStream->writeLong( nGroups );
388 for ( sal_uInt32
n = 0;
n < nGroups;
n++ )
390 css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > > aGroupCtrls;
393 OutStream->writeUTF( aGroupName );
400 ::osl::Guard< ::osl::Mutex > aGuard(
GetMutex() );
402 css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > >
aSeq =
ImplReadControls( InStream );
405 sal_uInt32 nGroups = InStream->readLong();
406 for ( sal_uInt32
n = 0;
n < nGroups;
n++ )
408 OUString aGroupName = InStream->readUTF();
409 css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > > aCtrlSeq =
ImplReadControls( InStream );
416 return "stardiv.Toolkit.StdTabControllerModel";
426 return css::uno::Sequence<OUString>{
427 "com.sun.star.awt.TabControllerModel",
428 "stardiv.vcl.controlmodel.TabController"};
431extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
433 css::uno::XComponentContext *,
434 css::uno::Sequence<css::uno::Any>
const &)
OUString SAL_CALL getImplementationName() override
void SAL_CALL read(const css::uno::Reference< css::io::XObjectInputStream > &InStream) override
void SAL_CALL getGroupByName(const OUString &Name, css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > > &Group) override
css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
OUString SAL_CALL getServiceName() override
sal_Int32 SAL_CALL getGroupCount() override
void SAL_CALL write(const css::uno::Reference< css::io::XObjectOutputStream > &OutStream) override
void SAL_CALL getGroup(sal_Int32 nGroup, css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > > &Group, OUString &Name) override
sal_Bool SAL_CALL getGroupControl() override
static sal_uInt32 ImplGetControlPos(const css::uno::Reference< css::awt::XControlModel > &rCtrl, const UnoControlModelEntryList &rList)
void ImplGetControlModels(css::uno::Reference< css::awt::XControlModel > **pRefs, const UnoControlModelEntryList &rList) const
css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > > SAL_CALL getControlModels() override
void SAL_CALL setGroupControl(sal_Bool GroupControl) override
sal_uInt32 ImplGetControlCount(const UnoControlModelEntryList &rList) const
::osl::Mutex & GetMutex()
css::uno::Any SAL_CALL queryAggregation(const css::uno::Type &rType) override
void SAL_CALL setGroup(const css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > > &Group, const OUString &GroupName) override
UnoControlModelEntryList maControls
static void ImplSetControlModels(UnoControlModelEntryList &rList, const css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > > &Controls)
void SAL_CALL setControlModels(const css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > > &Controls) override
sal_Bool SAL_CALL supportsService(OUString const &ServiceName) override
virtual ~StdTabControllerModel() override
void DestroyEntry(size_t nEntry)
UnoControlModelEntry * operator[](size_t i) const
const OUString & GetName() const
void push_back(UnoControlModelEntry *item)
~UnoControlModelEntryList()
UnoControlModelEntryList()
UnoControlModelEntryListBase maList
void SetName(const OUString &rName)
void insert(size_t i, UnoControlModelEntry *item)
css::uno::Type const & get()
#define DBG_ASSERT(sCon, aError)
Sequence< sal_Int8 > aSeq
#define IMPL_IMPLEMENTATION_ID(ClassName)
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
static css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > > ImplReadControls(const css::uno::Reference< css::io::XObjectInputStream > &InStream)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * stardiv_Toolkit_StdTabControllerModel_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
#define UNOCONTROL_STREAMVERSION
static void ImplWriteControls(const css::uno::Reference< css::io::XObjectOutputStream > &OutStream, const css::uno::Sequence< css::uno::Reference< css::awt::XControlModel > > &rCtrls)
#define CONTROLPOS_NOTFOUND
UnoControlModelEntryList * pGroup
css::uno::Reference< css::awt::XControlModel > * pxControl