"Professional CMake" book suggest the following:
"Targets should build successfully with or without compiler support for precompiled headers. It
should be considered an optimization, not a requirement. In particular, do not explicitly include a
precompile header (e.g. stdafx.h) in the source code, let CMake force-include an automatically
generated precompile header on the compiler command line instead. This is more portable across
the major compilers and is likely to be easier to maintain. It will also avoid warnings being
generated from certain code checking tools like iwyu (include what you use)."
Therefore, removed the "#include <PreCompiled.h>" from sources, also
there is no need for the "#ifdef _PreComp_" anymore
only 4 of these warnings are still relevant, CMake shall be used to disable them
Compiler definitions:
NOMINMAX:
* is already globally defined in SetGlobalCompilerAndLinkerSettings.cmake
WIN32_LEAN_AND_MEAN:
* use CMake target_compile_options on relevant targets
Warnings that still occur:
C4251, C4273, C4275: all related to dllimport / export
* use CMake target_compile_options on relevant targets
C4661: no suitable definition provied for explicit template instantiation request
* triggered in Mesh because of Vector3D in Base - not all functions are defined in header
* use CMake target_compile_options on relevant targets
Warnings that are Currently not triggered (fix code if they appear again):
C4005: macro redefinition
C4244: argument conversion, possible loss of data
C4267: conversion from size_t to type, possible loss of data
C4305: truncation from type1 to type2
* only occurrence disabled in Reader.cpp
C4522: multiple assignment operator specified
C5208: unnamed class in typedef name
Obsolete Compiler warnings:
C4181: not mentioned in Microsoft docs anymore
C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
* throw(optional_type_list) deprecated in C++17
C4482: nonstandard extension used: enum 'enumeration' used in qualified name
* not generated for compilers that support C++11
C4503: 'identifier': decorated name length exceeded, name was truncated
* obsolete since Visual Studio 2017
C4786: not mentioned in Microsoft docs anymore
At the very end of the startup process, check to see if we are using a
versioned directory from a previous version, or we are not versioned at
all but are using the system's default storage location (that is, not a
custom config path set on the command line, etc.). If so, offer to
migrate the old configration folders into new ones for the current
version.
This class aims to implement Design Token idea into FreeCAD themes. It
allows themes to use generic variables with generic values so we could
use one qss theme and change the style based on values from preference
packs.
Application:
* signalNewDocument, check the extra argument, isMainDoc, the decide
whether to create view of the new document. This is so that external
linked document can be opened in background without crowding the tab
list.
* slotDeleteDocument, calls Document::beforeDelete()
* slotActiveDocument, creates view if none, because external document
is now opened without view.
* onLastWindowClosed(), switch to next active document, and creates view
if none.
* send(Has)MsgToFocusView(), new API to send message to the active view
in focus. This is to solve the ambiguity of things like pressing
delete key, copy, paste handling when the active new is not in focus.
For example, when spread sheet view is active, delete/copy/paste
handling should be different when the focus on the spread sheet view
or focus on tree view.
* tryClose(), delegate to MainWindow for close confirmation
* reopen(), new API to reload a partial document in full
Document/DocumentP:
* _CoinMap, new internal map for quick access view provider from its
root node.
* slotNewObject, modified to support view provider override from
App::FeaturePython, through new API
DocumentObject::getViewProviderNameOverride().
* slotDeletedObject/slotTransactionRemove, improve handling of geo group
children rebuild
* slotSkipRecompute, add special handling of document with skip
recompute. Some command cannot work when skip recompute is active.
For example, sketcher command will check if recompute is successful
on many commands, and will undo if not. New 'PartialCompute' flag is
added to allow recompute only the editing object and all its
dependencies if 'SkipRecompute' is active.
* slotTouchedObject, new signal handling of manually touched object.
* setModified(), do nothing if already modified. This is a critical
performance improvement, because marking tab window as modified turns
out to be a relatively expensive operation, and will cause massive
slow down if calling it on every property change.
* getViewProviderByPathFromHead/getViewProvidersByPath(), new APIs to
obtain view provider(s) from coin SoPath.
* save/saveAll/saveCopy, modified to support external document saving.
* Save/RestoreDocFile(), save and restore tree item recursive expansion
status.
* slotFinishRestoreObject(), handle new signal
signalFinishRestoreObject(), unifies postprocessing in restore and
import operation.
* createView/setActiveView(), add support of delayed view creations
* canClose(), delegate to MainWindows to ask for confirmation
* undo/redo(), support grouped transaction undo/redo. Transactions may
be grouped by the same transaction ID if they are triggered by a
single operation but involves objects from multiple documents.
* toggleInSceneGraph(), new API to add or remove root node from or to
scenegraph without deleting the view object.
MainWindow:
* Update command status using a single shot timer instead of periodical
one.
* Improve message display is status bar. Give error and warning message
higher priority (using QStatusBar::showMessage()) than normal status
message (using actionLabel), reversed from original implementation.
* confirmSave(), new API to check for modification, and ask user to save
the document before closing. The confirmation dialog allows user to
apply the answer to all document for convenience.
* saveAll(), new API to save all document with correct ordering in case
of external linking.
* createMimeDataFromSelection/insertFromMimeData(), support copy paste
object with external linking. A new dialog DlgObjectSelection is used
to let user select exactly which object to export.
CommandDoc/CommandWindow:
* Related changes to object delete, document import, export, and save.