Commit Graph

1642 Commits

Author SHA1 Message Date
Abdullah Tahiri
4dea0df06c App: Extension/ExtensionContainer - handle property change
==========================================================

Currently changes of name or type of properties in a property container are handled by:
void PropertyContainer::handleChangedPropertyName(Base::XMLReader &reader, const char * TypeName, const char *PropName)
void PropertyContainer::changedPropertyType(Base::XMLReader &reader, const char * TypeName, Property * prop)

There is no mechanism for handling property changes by extensions. Sometimes the solution is to explicitly call the extension
from the container. However, this is a breach of the SRP, as the container should not be in a position to decide whether the
extension needs or not handle property changes. The handling code of the container changes for two different reasons, for
adapting the container to a property change of its own, and for adapting that of a property of the extension.

Illustrating it with an example, following inheritance, it goes like this:
PropertyContainer => ExtensionContainer => TransactionalObject => ViewProvider
App::Extension => ViewProviderExtension

The extension is currently not notified by the ExtensionContainer that a property needs handling. So a change in a property of
a ViewProviderExtension needs code at the ViewProvider it was added to.

This commit provides a mechanism in ExtensionContainer to call the extensions so that they can handle property changes. This
functions:

  virtual bool extensionHandleChangedPropertyName(Base::XMLReader &reader, const char * TypeName, const char *PropName);
  virtual bool extensionHandleChangedPropertyType(Base::XMLReader &reader, const char * TypeName, Property * prop);

Containers should always call the base class for any unhandled property change. If a sub-class container of ExtensionContainer
handles property changes itself, but not the ones of the extensions, this call to the base class ultimately ensures that if the
property was not handled by the container hierarchy, any extension is given an opportunity to handle it.

Some examples:

* A container handles the extension property change or its own:

void ContainerSubClass::handleChangedPropertyType(...)
{
    if (prop == &PropertyOfExt) {

    }
    else if (prop == &PropertyOfCont) {

    }
    else {
        ContainerBaseClass::handleChangedPropertyType(...);
    }
}

* A container and the extension handle their own:

void ContainerSubClass::handleChangedPropertyType(...)
{
    if (prop == &PropertyOfCont) {

    }
    else {
        // This will call ExtensionContainer::handleChangedPropertyType
        ContainerBaseClass::handleChangedPropertyType(...);
    }
}

bool ExtensionSubClass::extensionHandleChangedPropertyType(...)
{
    if (prop == &PropertyOfCont) {

        return true;
    }
    return false;
}
2023-02-25 23:13:55 +01:00
0penBrain
09c1b9ce90 [BugFix] Expression: always add space char before unit when converting to string, fixes #8562 2023-02-24 19:44:44 +01:00
Uwe
cd88d3888c [App] License.h: fix compiler warning
- as discussed here: https://forum.freecad.org/viewtopic.php?t=76184
2023-02-20 00:57:19 +01:00
Chris Hennes
59c95496b4 Core: Add libfmt via FetchContent 2023-02-18 12:43:48 -06:00
Uwe
2690118711 [App] sort includes in PreCompiled.h
- also remove a superfluous private: statement
- also remove an unnecessary include
2023-02-18 14:53:11 +01:00
wmayer
212bbc7fa0 App: define an enum to be used as the retType argument of DocumentObject.getSubObject()
This is to avoid to use magic numbers in client code
2023-02-14 12:02:33 +01:00
Uwe
1bcaaec26c [App] License.cpp: add missing include
- does otherwise not compile on Windows
2023-02-12 21:25:08 +01:00
wmayer
38e02e6f36 App: support of method unsetupObject in Python feature classes 2023-02-12 20:01:09 +01:00
wmayer
4036613fd2 App: refactor license handling to reduce code duplication 2023-02-12 19:57:41 +01:00
0penBrain
ba25e9a82f [Core] Add possibility to set color with tuple of integers, fixes #8344 2023-02-12 18:16:59 +01:00
alexneufeld
8f06403537 Gui: Add CERN OHL to default licenses list 2023-02-12 10:31:59 +01:00
marioalexis
d8d3bb8120 App: Fix warnings -Wignored-qualifiers 2023-02-11 14:16:46 -08:00
Chris Hennes
b75c7c8388 App: Add basic test for new Metadata code 2023-02-10 12:40:55 -07:00
Chris Hennes
6db8887983 App: Cleanup Metadata 2023-02-10 12:40:55 -07:00
Chris Hennes
65513b48d0 App: Add support for in-memory Metadata creation 2023-02-10 12:40:55 -07:00
Uwe
c074fe1c95 [App] fixes for Magnetization property 2023-02-09 05:32:20 +01:00
Uwe
201b95a5b2 [Core] add quantity Magnetization
- needed for FEM and Material
2023-02-08 20:33:58 +01:00
Uwe
b41776d077 [Core] disable the the unit Oersted
- is not feasible for practical usage and (was up to now not used, thus no consequence)
  moreover, Oersted is a cgs unit while we use SI units, thus also not suitable for FEM, only makes problems for magnetization
2023-02-08 19:59:36 +01:00
Uwe
0a4b860d66 [App] [skip ci] add info for expression lexer generation 2023-02-08 06:34:59 +01:00
Uwe
82b6e03625 [FEM] add current density constraint
- also add corresponding App::PropertyCurrentDensity

- also fix a typo in test_object.py
2023-02-05 21:10:15 +01:00
Uwe
2880a5ca2a [Core] add current density
- necessary to implement electromagnetic features to the FEM WB
2023-02-04 03:22:24 -06:00
Adrian Popescu
b75142850d Build graph fix (#8311) - Fixed Constraints' value not being updated 2023-01-31 11:00:33 -06:00
berniev
9a05a04dad Improve unit testing directory structure
Separate Qt tests and gtest tests
Add a basic shadow of the project structure
Add a few simple tests to demonstrate usage
2023-01-30 07:15:09 -07:00
luzpaz
23af228b87 Fix various indentation issues (tabs->spaces) 2023-01-23 16:59:28 +01:00
wmayer
5995556b08 [skip ci] fix typos 2023-01-06 18:16:50 +01:00
Zheng, Lei
7164674cb4 Base/App/Gui: force using Base::Handle for ParameterManager
For reference counting
2023-01-06 09:14:41 -06:00
wmayer
9498691ea8 App: fix failure to detect cyclic dependencies on expressions
See also forum thread: https://forum.freecadweb.org/viewtopic.php?f=3&t=74331
2023-01-02 16:36:10 +01:00
wmayer
0566ba0a9e Core: fixes #8119: Make axis values in Property view persistent 2023-01-02 12:48:40 +01:00
wmayer
1e49c84f6c App: [skip ci] reduce code duplication 2022-12-23 18:39:59 +01:00
wmayer
aff217b214 App: remove dead code and simplify code 2022-12-23 17:02:04 +01:00
Abdullah Tahiri
8b36a2780b App: New signal to notify user messages
=======================================

Document provides a new functionality, to signal subscribed user code of messages intended for the user.

The main motivation is critical messages of broken forward compatibility during restoring a document into a new version of FreeCAD.
However, the framework may be used in many other ways.
2022-12-21 16:01:23 +01:00
Yorik van Havre
a95b7dc4b5 Updated ts files 2022-12-20 09:31:25 +01:00
wmayer
8897cb2f79 App: [skip ci] improve error message 2022-12-19 17:08:26 +01:00
wmayer
ae39b31813 App: when using Yaw, Pitch or Roll angle in expressions make sure that they are in range 2022-12-19 14:48:30 +01:00
wmayer
9e702c016b App: handle sub-components in PropertyRotation 2022-12-14 21:21:02 +01:00
wmayer
7948181a4d App: handle sub-components in PropertyPlacement 2022-12-14 15:41:49 +01:00
luz paz
7637d58df0 Add missing brackets + change indentation to spaces 2022-12-12 11:38:06 +01:00
luz paz
80efe8191e Cleanup: move return statement to new line + trailing
Follow-up to #6497
2022-12-12 11:38:06 +01:00
wmayer
302d3f5b95 Core: allow to set file filter from PropertyFileIncluded 2022-12-07 12:58:07 +01:00
wmayer
313525a012 Core: [skip ci] ignore some code spell checks and filter all '_rc_.py' files 2022-12-05 10:12:49 +01:00
Uwe
9869a2c3d7 [Build] output point release version
- to Splashscreen, About, MainWindow and Console
2022-12-05 00:26:43 +01:00
Zheng, Lei
d3c063f88c Base/App: add new signal interface to Parameter
Added new signal interface using boost::signals2 signalParamChanged.

Exposed to Python as ParameterGrpPy.AttachManager() to monitor changes
to all parameters, sub groups under the referring group.

Added new attribute for ParameterGrp(Py) to query the Parent and Manager
of the referring group.
2022-12-03 17:08:17 -06:00
luz paz
0e08b51a58 App: fix trailing whitespace 2022-12-02 19:19:17 -06:00
luz paz
fa98553775 Fix various typos and grammatical issues 2022-11-30 12:45:29 +01:00
wmayer
ad1cccdd27 Gui/Mod: handle several compiler warnings:
* ignore -Wfree-nonheap-object for generated code
* replace 0 with Qt::NoModifier when creating a QKeyEvent
* in Qt 5.14 QCombobox::activated(QString) is deprecated, use textActivated
* don't mix QCheckBox::setChecked() with tristate API
2022-11-29 10:36:02 +01:00
wmayer
2252696828 Base: move class ProgressIndicatorPy to its own files 2022-11-22 15:07:33 +01:00
berniev
d2e5a12190 change ALL_UPPER_CASE constexpr definitions to camelCase 2022-11-19 16:00:36 +01:00
wmayer
c3b38bda08 App: [skip ci] fix warnings reported by GH actions 2022-11-17 23:50:34 +01:00
wmayer
2614a1cec6 App: [skip ci] fix typo 2022-11-17 20:00:00 +01:00
wmayer
1f83094b44 App: fix endless-loop in DocumentObject::getParents 2022-11-17 19:05:32 +01:00