0000535: request for python editible Properties panels

git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5273 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
This commit is contained in:
wmayer 2011-12-12 12:40:08 +00:00
parent 3556a43e99
commit 05b6123bb2
7 changed files with 17 additions and 39 deletions

View File

@ -107,6 +107,8 @@ public:
* The bits and their meaning are listed below:
* 0 - object is marked as 'touched'
* 1 - object is marked as 'immutable'
* 2 - object is marked as 'read-ony' (for property editor)
* 3 - object is marked as 'hidden' (for property editor)
*/
std::bitset<32> StatusBits;

View File

@ -103,16 +103,6 @@ short PropertyContainer::getPropertyType(const char *name) const
return getPropertyData().getType(this,name);
}
void PropertyContainer::setPropertyType(const Property* prop, short attr)
{
getPropertyData().setType(this,prop,attr);
}
void PropertyContainer::setPropertyType(const char *name, short attr)
{
getPropertyData().setType(this,name,attr);
}
const char* PropertyContainer::getPropertyGroup(const Property* prop) const
{
return getPropertyData().getGroup(this,prop);
@ -369,22 +359,6 @@ short PropertyData::getType(const PropertyContainer *container,const char* name)
return 0;
}
void PropertyData::setType(const PropertyContainer *container,const Property* prop, short attr) const
{
const PropertyData::PropertySpec* Spec = findProperty(container,prop);
if (Spec)
const_cast< PropertyData::PropertySpec*>(Spec)->Type = attr;
}
void PropertyData::setType(const PropertyContainer *container,const char* name, short attr) const
{
const PropertyData::PropertySpec* Spec = findProperty(container,name);
if (Spec)
const_cast< PropertyData::PropertySpec*>(Spec)->Type = attr;
}
const char* PropertyData::getGroup(const PropertyContainer *container,const Property* prop) const
{
const PropertyData::PropertySpec* Spec = findProperty(container,prop);

View File

@ -70,8 +70,6 @@ struct AppExport PropertyData
short getType (const PropertyContainer *container,const char* name) const;
const char* getGroup (const PropertyContainer *container,const char* name) const;
const char* getGroup (const PropertyContainer *container,const Property* prop) const;
void setType (const PropertyContainer *container,const Property* prop, short) const;
void setType (const PropertyContainer *container,const char* name, short) const;
const char* getDocumentation(const PropertyContainer *container,const char* name) const;
const char* getDocumentation(const PropertyContainer *container,const Property* prop) const;
@ -118,10 +116,6 @@ public:
virtual short getPropertyType(const Property* prop) const;
/// get the Type of a named Property
virtual short getPropertyType(const char *name) const;
/// set the Type of a Property
virtual void setPropertyType(const Property* prop, short);
/// set the Type of a named Property
virtual void setPropertyType(const char *name, short);
/// get the Group of a Property
virtual const char* getPropertyGroup(const Property* prop) const;
/// get the Group of a named Property

View File

@ -23,9 +23,13 @@
<UserDocu>Return the type of a named property. This can be (Hidden,ReadOnly,Output) or any combination. </UserDocu>
</Documentation>
</Methode>
<Methode Name="setTypeOfProperty">
<Methode Name="setEditorMode">
<Documentation>
<UserDocu>Set the type of a named property. This can be (Hidden,ReadOnly,Output) or any combination. </UserDocu>
<UserDocu>Set the behaviour of the property in the property editor.
0 - default behaviour
1 - item is ready-only
2 - item is hidden
</UserDocu>
</Documentation>
</Methode>
<Methode Name="getGroupOfProperty">

View File

@ -78,14 +78,18 @@ PyObject* PropertyContainerPy::getTypeOfProperty(PyObject *args)
return Py::new_reference_to(ret);
}
PyObject* PropertyContainerPy::setTypeOfProperty(PyObject *args)
PyObject* PropertyContainerPy::setEditorMode(PyObject *args)
{
char* name;
short type;
if (!PyArg_ParseTuple(args, "sh", &name, &type)) // convert args: Python->C
return NULL; // NULL triggers exception
getPropertyContainerPtr()->setPropertyType(name, type);
App::Property* prop = getPropertyContainerPtr()->getPropertyByName(name);
if (prop) {
prop->StatusBits.set(2,(type & 1) > 0);
prop->StatusBits.set(3,(type & 2) > 0);
}
Py_Return;
}

View File

@ -112,7 +112,7 @@ void PropertyView::onSelectionChanged(const SelectionChanges& msg)
for (pt = dataMap.begin(); pt != dataMap.end(); ++pt) {
std::pair<std::string, int> nameType = std::make_pair
<std::string, int>(pt->first, pt->second->getTypeId().getKey());
if (!ob->isHidden(pt->second))
if (!ob->isHidden(pt->second) && !pt->second->StatusBits.test(3))
propDataMap[nameType].push_back(pt->second);
}
}

View File

@ -78,7 +78,7 @@ void PropertyItem::setPropertyData(const std::vector<App::Property*>& items)
it != items.end(); ++it) {
App::PropertyContainer* parent = (*it)->getContainer();
if (parent)
ro &= parent->isReadOnly(*it);
ro &= (parent->isReadOnly(*it) || (*it)->StatusBits.test(2));
}
this->setReadOnly(ro);
}
@ -226,7 +226,7 @@ void PropertyItem::setPropertyValue(const QString& value)
for (std::vector<App::Property*>::const_iterator it = propertyItems.begin();
it != propertyItems.end(); ++it) {
App::PropertyContainer* parent = (*it)->getContainer();
if (parent && !parent->isReadOnly(*it)) {
if (parent && !parent->isReadOnly(*it) && !(*it)->StatusBits.test(2)) {
QString cmd = QString::fromAscii("%1 = %2").arg(pythonIdentifier(*it)).arg(value);
Gui::Application::Instance->runPythonCode((const char*)cmd.toUtf8());
}