This moves all export test code to where it belongs: in LLPermissions. Added LLPermissions::allowExportBy, next to allowModifyBy, allowCopyBy and allowMoveBy. Then changed all code to use this call. Because LLPermissions is part of llinventory, I had to add a proxy for LFSimFeatureHandler. Added a new class LFSimFeatureHandlerInterface that can be used by LLPermissions to check simulator features by accessing the LFSimFeatureHandler singleton. Several parts of the code ignored the PERM_EXPORT but and still did demand that things are full perm next to being a creator. This has now changed the export rules are the same for everything as they were for mesh: you need to be the owner and the creator for every element that is exported (not just the root prim, of course). Export rules can now be easily made a function on simulator features. If different rules apply for different types (wearables, objects, mesh etc) then an extra variable indicating the type will have to be passed though.
72 lines
1.9 KiB
C++
72 lines
1.9 KiB
C++
/* Copyright (C) 2013 Liru Færs
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General
|
|
* Public License along with this library; if not, write to the
|
|
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301 USA */
|
|
|
|
#ifndef LFSIMFEATUREHANDLER_H
|
|
#define LFSIMFEATUREHANDLER_H
|
|
|
|
#include "llsingleton.h"
|
|
#include "llpermissions.h"
|
|
|
|
template<typename Type>
|
|
class SignaledType
|
|
{
|
|
public:
|
|
SignaledType(Type b) : mValue(b) {}
|
|
|
|
template<typename Slot>
|
|
boost::signals2::connection connect(Slot slot) { return mSignal.connect(slot); }
|
|
|
|
SignaledType& operator =(Type val)
|
|
{
|
|
if (val != mValue)
|
|
{
|
|
mValue = val;
|
|
mSignal();
|
|
}
|
|
return *this;
|
|
}
|
|
operator Type() const { return mValue; }
|
|
|
|
private:
|
|
boost::signals2::signal<void()> mSignal;
|
|
Type mValue;
|
|
};
|
|
|
|
class LFSimFeatureHandler : public LFSimFeatureHandlerInterface, public LLSingleton<LFSimFeatureHandler>
|
|
{
|
|
protected:
|
|
friend class LLSingleton<LFSimFeatureHandler>;
|
|
LFSimFeatureHandler();
|
|
|
|
public:
|
|
void handleRegionChange();
|
|
void setSupportedFeatures();
|
|
|
|
// Connection setters
|
|
boost::signals2::connection setSupportsExportCallback(const boost::signals2::signal<void()>::slot_type& slot);
|
|
|
|
// Accessors
|
|
/*virtual*/ bool simSupportsExport() const { return mSupportsExport; }
|
|
|
|
private:
|
|
// SignaledTypes
|
|
SignaledType<bool> mSupportsExport;
|
|
};
|
|
|
|
#endif //LFSIMFEATUREHANDLER_H
|
|
|