From 2302b66b2fe4cdf826c2742da9dfabd32aa8e208 Mon Sep 17 00:00:00 2001 From: CrSjimo Date: Thu, 9 Jul 2026 01:54:49 +0800 Subject: [PATCH 1/9] Refactor dspxmodel --- .gitmodules | 3 + src/libs/3rdparty/CMakeLists.txt | 2 +- src/libs/3rdparty/dspxmodel | 1 + src/libs/3rdparty/opendspx | 1 - src/libs/application/CMakeLists.txt | 2 - src/libs/application/dspxmodel/CMakeLists.txt | 5 - .../application/dspxmodel/src/AnchorNode.cpp | 138 ---- .../application/dspxmodel/src/AnchorNode.h | 77 --- .../dspxmodel/src/AnchorNodeSequence.cpp | 114 ---- .../dspxmodel/src/AnchorNodeSequence.h | 74 --- .../dspxmodel/src/AnchorNodeSequence_p.h | 26 - .../application/dspxmodel/src/AnchorNode_p.h | 26 - .../application/dspxmodel/src/AudioClip.cpp | 120 ---- .../application/dspxmodel/src/AudioClip.h | 64 -- .../dspxmodel/src/BasicModelStrategy.cpp | 213 ------- .../dspxmodel/src/BasicModelStrategy.h | 39 -- .../src/BasicModelStrategyEntity_p.h | 125 ---- .../application/dspxmodel/src/BusControl.cpp | 32 - .../application/dspxmodel/src/BusControl.h | 31 - .../application/dspxmodel/src/CMakeLists.txt | 49 -- src/libs/application/dspxmodel/src/Clip.cpp | 186 ------ src/libs/application/dspxmodel/src/Clip.h | 89 --- .../dspxmodel/src/ClipSequence.cpp | 198 ------ .../application/dspxmodel/src/ClipSequence.h | 78 --- .../dspxmodel/src/ClipSequence_p.h | 22 - .../application/dspxmodel/src/ClipTime.cpp | 128 ---- src/libs/application/dspxmodel/src/ClipTime.h | 64 -- src/libs/application/dspxmodel/src/Clip_p.h | 31 - .../application/dspxmodel/src/Control.cpp | 99 --- src/libs/application/dspxmodel/src/Control.h | 54 -- .../dspxmodel/src/DataArrayData.cpp | 23 - .../dspxmodel/src/DataArrayData_p.h | 66 -- .../dspxmodel/src/DspxModelGlobal.h | 12 - .../dspxmodel/src/EntityObject.cpp | 77 --- .../application/dspxmodel/src/EntityObject.h | 56 -- .../dspxmodel/src/EntityObject_p.h | 20 - .../dspxmodel/src/FreeValueDataArray.cpp | 83 --- .../dspxmodel/src/FreeValueDataArray.h | 55 -- src/libs/application/dspxmodel/src/Global.cpp | 90 --- src/libs/application/dspxmodel/src/Global.h | 70 --- src/libs/application/dspxmodel/src/Handle.h | 38 -- .../dspxmodel/src/KeySignature.cpp | 174 ------ .../application/dspxmodel/src/KeySignature.h | 73 --- .../dspxmodel/src/KeySignatureSequence.cpp | 117 ---- .../dspxmodel/src/KeySignatureSequence.h | 69 -- .../dspxmodel/src/KeySignatureSequence_p.h | 17 - .../dspxmodel/src/KeySignature_p.h | 27 - src/libs/application/dspxmodel/src/Label.cpp | 117 ---- src/libs/application/dspxmodel/src/Label.h | 62 -- .../dspxmodel/src/LabelSequence.cpp | 105 ---- .../application/dspxmodel/src/LabelSequence.h | 70 --- .../dspxmodel/src/LabelSequence_p.h | 17 - src/libs/application/dspxmodel/src/Label_p.h | 25 - .../application/dspxmodel/src/ListData.cpp | 23 - .../application/dspxmodel/src/ListData_p.h | 116 ---- .../application/dspxmodel/src/MapData.cpp | 23 - .../application/dspxmodel/src/MapData_p.h | 105 ---- src/libs/application/dspxmodel/src/Master.cpp | 78 --- src/libs/application/dspxmodel/src/Master.h | 53 -- src/libs/application/dspxmodel/src/Model.cpp | 430 ------------- src/libs/application/dspxmodel/src/Model.h | 93 --- .../dspxmodel/src/ModelStrategy.cpp | 9 - .../application/dspxmodel/src/ModelStrategy.h | 425 ------------- src/libs/application/dspxmodel/src/Model_p.h | 80 --- src/libs/application/dspxmodel/src/Note.cpp | 256 -------- src/libs/application/dspxmodel/src/Note.h | 106 ---- .../dspxmodel/src/NoteSequence.cpp | 111 ---- .../application/dspxmodel/src/NoteSequence.h | 75 --- .../dspxmodel/src/NoteSequence_p.h | 19 - src/libs/application/dspxmodel/src/Note_p.h | 37 -- src/libs/application/dspxmodel/src/Param.cpp | 73 --- src/libs/application/dspxmodel/src/Param.h | 51 -- .../application/dspxmodel/src/ParamCurve.cpp | 122 ---- .../application/dspxmodel/src/ParamCurve.h | 68 -- .../dspxmodel/src/ParamCurveAnchor.cpp | 54 -- .../dspxmodel/src/ParamCurveAnchor.h | 43 -- .../dspxmodel/src/ParamCurveFree.cpp | 61 -- .../dspxmodel/src/ParamCurveFree.h | 45 -- .../dspxmodel/src/ParamCurveSequence.cpp | 127 ---- .../dspxmodel/src/ParamCurveSequence.h | 75 --- .../dspxmodel/src/ParamCurveSequence_p.h | 19 - .../application/dspxmodel/src/ParamCurve_p.h | 29 - .../application/dspxmodel/src/ParamMap.cpp | 112 ---- src/libs/application/dspxmodel/src/ParamMap.h | 66 -- src/libs/application/dspxmodel/src/Param_p.h | 26 - .../application/dspxmodel/src/Phoneme.cpp | 157 ----- src/libs/application/dspxmodel/src/Phoneme.h | 73 --- .../application/dspxmodel/src/PhonemeInfo.cpp | 65 -- .../application/dspxmodel/src/PhonemeInfo.h | 54 -- .../application/dspxmodel/src/PhonemeInfo_p.h | 25 - .../dspxmodel/src/PhonemeSequence.cpp | 112 ---- .../dspxmodel/src/PhonemeSequence.h | 75 --- .../dspxmodel/src/PhonemeSequence_p.h | 21 - .../application/dspxmodel/src/Phoneme_p.h | 36 -- .../dspxmodel/src/PointSequenceContainer_p.h | 97 --- .../dspxmodel/src/PointSequenceData.cpp | 23 - .../dspxmodel/src/PointSequenceData_p.h | 154 ----- .../dspxmodel/src/Pronunciation.cpp | 87 --- .../application/dspxmodel/src/Pronunciation.h | 54 -- .../dspxmodel/src/RangeSequenceContainer_p.h | 94 --- .../dspxmodel/src/RangeSequenceData_p.h | 184 ------ .../application/dspxmodel/src/SingingClip.cpp | 81 --- .../application/dspxmodel/src/SingingClip.h | 49 -- src/libs/application/dspxmodel/src/Source.cpp | 52 -- src/libs/application/dspxmodel/src/Source.h | 40 -- .../application/dspxmodel/src/SourceMap.cpp | 96 --- .../application/dspxmodel/src/SourceMap.h | 62 -- .../dspxmodel/src/SpliceHelper_p.h | 50 -- src/libs/application/dspxmodel/src/Tempo.cpp | 116 ---- src/libs/application/dspxmodel/src/Tempo.h | 62 -- .../dspxmodel/src/TempoSequence.cpp | 105 ---- .../application/dspxmodel/src/TempoSequence.h | 70 --- .../dspxmodel/src/TempoSequence_p.h | 17 - src/libs/application/dspxmodel/src/Tempo_p.h | 25 - .../dspxmodel/src/TimeSignature.cpp | 140 ----- .../application/dspxmodel/src/TimeSignature.h | 67 -- .../dspxmodel/src/TimeSignatureSequence.cpp | 105 ---- .../dspxmodel/src/TimeSignatureSequence.h | 70 --- .../dspxmodel/src/TimeSignatureSequence_p.h | 17 - .../dspxmodel/src/TimeSignature_p.h | 26 - .../application/dspxmodel/src/Timeline.cpp | 125 ---- src/libs/application/dspxmodel/src/Timeline.h | 72 --- src/libs/application/dspxmodel/src/Track.cpp | 152 ----- src/libs/application/dspxmodel/src/Track.h | 75 --- .../dspxmodel/src/TrackControl.cpp | 85 --- .../application/dspxmodel/src/TrackControl.h | 47 -- .../application/dspxmodel/src/TrackList.cpp | 96 --- .../application/dspxmodel/src/TrackList.h | 63 -- src/libs/application/dspxmodel/src/Track_p.h | 26 - .../dspxmodel/src/UndoableModelStrategy.cpp | 591 ------------------ .../dspxmodel/src/UndoableModelStrategy.h | 38 -- .../dspxmodel/src/UndoableModelStrategy_p.h | 243 ------- .../application/dspxmodel/src/Vibrato.cpp | 176 ------ src/libs/application/dspxmodel/src/Vibrato.h | 78 --- .../dspxmodel/src/VibratoPointDataArray.cpp | 79 --- .../dspxmodel/src/VibratoPointDataArray.h | 54 -- .../dspxmodel/src/VibratoPoints.cpp | 58 -- .../application/dspxmodel/src/VibratoPoints.h | 47 -- .../application/dspxmodel/src/Workspace.cpp | 96 --- .../application/dspxmodel/src/Workspace.h | 63 -- .../dspxmodel/src/WorkspaceInfo.cpp | 52 -- .../application/dspxmodel/src/WorkspaceInfo.h | 40 -- .../application/dspxmodel/src/jsonutils_p.h | 74 --- .../dspxmodel/src/qml/iterable.mjs | 107 ---- .../application/dspxmodel/src/rangehelpers.h | 121 ---- .../AnchorNodeSelectionModel.cpp | 44 -- .../selectionmodel/AnchorNodeSelectionModel.h | 54 -- .../AnchorNodeSelectionModel_p.h | 20 - .../src/selectionmodel/ClipSelectionModel.cpp | 331 ---------- .../src/selectionmodel/ClipSelectionModel.h | 57 -- .../src/selectionmodel/ClipSelectionModel_p.h | 44 -- .../GenericGlobalItemSelectionModelData_p.h | 197 ------ .../KeySignatureSelectionModel.cpp | 176 ------ .../KeySignatureSelectionModel.h | 47 -- .../KeySignatureSelectionModel_p.h | 37 -- .../selectionmodel/LabelSelectionModel.cpp | 176 ------ .../src/selectionmodel/LabelSelectionModel.h | 47 -- .../selectionmodel/LabelSelectionModel_p.h | 37 -- .../src/selectionmodel/NoteSelectionModel.cpp | 371 ----------- .../src/selectionmodel/NoteSelectionModel.h | 53 -- .../src/selectionmodel/NoteSelectionModel_p.h | 51 -- .../src/selectionmodel/SelectionModel.cpp | 245 -------- .../src/selectionmodel/SelectionModel.h | 101 --- .../src/selectionmodel/SelectionModel_p.h | 28 - .../selectionmodel/TempoSelectionModel.cpp | 176 ------ .../src/selectionmodel/TempoSelectionModel.h | 47 -- .../selectionmodel/TempoSelectionModel_p.h | 37 -- .../selectionmodel/TrackSelectionModel.cpp | 175 ------ .../src/selectionmodel/TrackSelectionModel.h | 45 -- .../selectionmodel/TrackSelectionModel_p.h | 37 -- .../dspxmodel/tests/CMakeLists.txt | 2 - .../dspxmodel/tests/dspx/CMakeLists.txt | 24 - .../application/dspxmodel/tests/dspx/main.cpp | 104 --- .../dspxmodel/tests/dspx/test.dspx | 353 ----------- src/plugins/CMakeLists.txt | 4 +- .../audiocontext/AudioClipAudioContext.cpp | 2 +- .../audio/audiocontext/TrackAudioContext.cpp | 2 +- .../audio/audioexport/AudioExporter.cpp | 23 +- .../audio/internal/addon/AudioClipAddOn.cpp | 27 +- .../audio/internal/addon/AudioClipAddOn.h | 2 +- .../audio/internal/addon/ExportAudioAddOn.cpp | 21 +- .../audio/internal/addon/PlaybackAddOn.cpp | 19 +- .../audio/internal/addon/PlaybackAddOn.h | 4 +- .../internal/addon/ProjectAudioAddOn.cpp | 78 ++- .../audio/internal/utils/AudioQmlHelper.cpp | 2 +- .../qml/actions/AudioClipAddOnActions.qml | 3 +- .../AudioThumbnailWaveformThumbnail.cpp | 23 +- .../internal/addon/AudioMipmapAddOn.cpp | 12 +- src/plugins/coreplugin/CMakeLists.txt | 9 +- .../coreplugin/core/DefaultLyricManager.cpp | 2 +- .../KeySignatureAtSpecifiedPositionHelper.cpp | 17 +- .../coreplugin/internal/PhonemeListModel.cpp | 4 +- .../internal/addon/EditActionsAddOn.cpp | 43 +- .../internal/addon/FillLyricsAddOn.cpp | 8 +- .../internal/addon/TimelineAddOn.cpp | 13 +- src/plugins/coreplugin/internal/jsonutils.h | 73 +++ .../project/clipboard/DspxClipboardData.cpp | 8 +- .../project/document/DspxDocument.cpp | 222 ++++--- .../project/document/DspxDocument.h | 7 + .../project/document/DspxDocument_p.h | 1 + .../document/ProjectDocumentContext.cpp | 6 +- .../propertymapper/ClipPropertyMapper.cpp | 353 ----------- .../propertymapper/ClipPropertyMapper.h | 84 --- .../propertymapper/ClipPropertyMapper_p.h | 144 ----- .../KeySignaturePropertyMapper.cpp | 111 ---- .../KeySignaturePropertyMapper.h | 56 -- .../KeySignaturePropertyMapper_p.h | 63 -- .../propertymapper/LabelPropertyMapper.cpp | 91 --- .../propertymapper/LabelPropertyMapper.h | 46 -- .../propertymapper/LabelPropertyMapper_p.h | 53 -- .../propertymapper/NotePropertyMapper.cpp | 159 ----- .../propertymapper/NotePropertyMapper.h | 86 --- .../propertymapper/NotePropertyMapper_p.h | 99 --- .../propertymapper/PropertyMapperData_p.h | 313 ---------- .../propertymapper/TempoPropertyMapper.cpp | 91 --- .../propertymapper/TempoPropertyMapper.h | 46 -- .../propertymapper/TempoPropertyMapper_p.h | 53 -- .../propertymapper/TrackPropertyMapper.cpp | 404 ------------ .../propertymapper/TrackPropertyMapper.h | 78 --- .../propertymapper/TrackPropertyMapper_p.h | 129 ---- .../scenarios/EditKeySignatureScenario.cpp | 28 +- .../project/scenarios/EditLoopScenario.cpp | 19 +- .../EditTempoTimeSignatureScenario.cpp | 17 +- .../project/scenarios/InsertItemScenario.cpp | 59 +- .../scenarios/PickTrackColorScenario.cpp | 4 +- .../project/timeline/ProjectTimeline.cpp | 23 +- .../qml/actions/EditActionsAddOnActions.qml | 58 +- .../qml/actions/FillLyricsAddOnActions.qml | 3 +- .../MusicPitchPropertyEditorField.qml | 2 +- .../coreplugin/qml/panels/PropertiesPanel.qml | 14 +- .../propertyeditors/ClipPropertyEditor.qml | 7 +- .../ClipTimePropertyEditor.qml | 10 +- .../KeySignaturePropertyEditor.qml | 4 +- .../propertyeditors/LabelPropertyEditor.qml | 4 +- .../propertyeditors/LoopPropertyEditor.qml | 34 +- .../MasterControlPropertyEditor.qml | 10 +- .../MetadataPropertyEditor.qml | 16 +- .../NoteLyricPropertyEditor.qml | 8 +- .../NotePhonemePropertyEditor.qml | 12 +- .../NotePitchPropertyEditor.qml | 6 +- .../propertyeditors/NotePropertyEditor.qml | 5 +- .../NoteTimePropertyEditor.qml | 4 +- .../propertyeditors/TempoPropertyEditor.qml | 4 +- .../windows/ProjectWindowInterface.cpp | 50 +- .../importexportmanager/CMakeLists.txt | 4 +- .../internal/addon/FileImportExportAddOn.cpp | 6 +- .../libresvipformatconverter/CMakeLists.txt | 2 +- src/plugins/maintenance/CMakeLists.txt | 4 +- .../internal/addons/ViewJsonAddOn.cpp | 4 +- .../midiformatconverter/CMakeLists.txt | 4 +- src/plugins/visualeditor/CMakeLists.txt | 9 +- .../core/ArrangementPanelInterface.cpp | 6 +- .../core/PianoRollPanelInterface.cpp | 20 +- .../core/ProjectViewModelContext.cpp | 14 +- .../ClipSelectionController.cpp | 15 +- .../KeySignatureSelectionController.cpp | 17 +- .../LabelSelectionController.cpp | 17 +- .../NoteSelectionController.cpp | 16 +- .../TempoSelectionController.cpp | 17 +- .../TrackSelectionController.cpp | 11 +- .../ClipViewModelContextData.cpp | 118 ++-- .../KeySignatureViewModelContextData.cpp | 102 ++- .../LabelViewModelContextData.cpp | 41 +- .../MasterTrackViewModelContextData.cpp | 49 +- .../MasterTrackViewModelContextData_p.h | 4 +- .../NoteViewModelContextData.cpp | 159 +++-- .../PlaybackViewModelContextData.cpp | 39 +- .../PlaybackViewModelContextData_p.h | 4 +- .../TempoViewModelContextData.cpp | 89 ++- .../TrackViewModelContextData.cpp | 68 +- .../internal/SingingClipListModel.cpp | 4 +- .../internal/TrackOverlaySelectorModel.cpp | 4 +- .../visualeditor/qml/PianoRollView.qml | 3 +- .../qml/TimelineContextMenuHelper.qml | 6 +- .../qml/actions/PianoRollAddOnActions.qml | 3 +- 275 files changed, 1036 insertions(+), 18217 deletions(-) create mode 160000 src/libs/3rdparty/dspxmodel delete mode 160000 src/libs/3rdparty/opendspx delete mode 100644 src/libs/application/dspxmodel/CMakeLists.txt delete mode 100644 src/libs/application/dspxmodel/src/AnchorNode.cpp delete mode 100644 src/libs/application/dspxmodel/src/AnchorNode.h delete mode 100644 src/libs/application/dspxmodel/src/AnchorNodeSequence.cpp delete mode 100644 src/libs/application/dspxmodel/src/AnchorNodeSequence.h delete mode 100644 src/libs/application/dspxmodel/src/AnchorNodeSequence_p.h delete mode 100644 src/libs/application/dspxmodel/src/AnchorNode_p.h delete mode 100644 src/libs/application/dspxmodel/src/AudioClip.cpp delete mode 100644 src/libs/application/dspxmodel/src/AudioClip.h delete mode 100644 src/libs/application/dspxmodel/src/BasicModelStrategy.cpp delete mode 100644 src/libs/application/dspxmodel/src/BasicModelStrategy.h delete mode 100644 src/libs/application/dspxmodel/src/BasicModelStrategyEntity_p.h delete mode 100644 src/libs/application/dspxmodel/src/BusControl.cpp delete mode 100644 src/libs/application/dspxmodel/src/BusControl.h delete mode 100644 src/libs/application/dspxmodel/src/CMakeLists.txt delete mode 100644 src/libs/application/dspxmodel/src/Clip.cpp delete mode 100644 src/libs/application/dspxmodel/src/Clip.h delete mode 100644 src/libs/application/dspxmodel/src/ClipSequence.cpp delete mode 100644 src/libs/application/dspxmodel/src/ClipSequence.h delete mode 100644 src/libs/application/dspxmodel/src/ClipSequence_p.h delete mode 100644 src/libs/application/dspxmodel/src/ClipTime.cpp delete mode 100644 src/libs/application/dspxmodel/src/ClipTime.h delete mode 100644 src/libs/application/dspxmodel/src/Clip_p.h delete mode 100644 src/libs/application/dspxmodel/src/Control.cpp delete mode 100644 src/libs/application/dspxmodel/src/Control.h delete mode 100644 src/libs/application/dspxmodel/src/DataArrayData.cpp delete mode 100644 src/libs/application/dspxmodel/src/DataArrayData_p.h delete mode 100644 src/libs/application/dspxmodel/src/DspxModelGlobal.h delete mode 100644 src/libs/application/dspxmodel/src/EntityObject.cpp delete mode 100644 src/libs/application/dspxmodel/src/EntityObject.h delete mode 100644 src/libs/application/dspxmodel/src/EntityObject_p.h delete mode 100644 src/libs/application/dspxmodel/src/FreeValueDataArray.cpp delete mode 100644 src/libs/application/dspxmodel/src/FreeValueDataArray.h delete mode 100644 src/libs/application/dspxmodel/src/Global.cpp delete mode 100644 src/libs/application/dspxmodel/src/Global.h delete mode 100644 src/libs/application/dspxmodel/src/Handle.h delete mode 100644 src/libs/application/dspxmodel/src/KeySignature.cpp delete mode 100644 src/libs/application/dspxmodel/src/KeySignature.h delete mode 100644 src/libs/application/dspxmodel/src/KeySignatureSequence.cpp delete mode 100644 src/libs/application/dspxmodel/src/KeySignatureSequence.h delete mode 100644 src/libs/application/dspxmodel/src/KeySignatureSequence_p.h delete mode 100644 src/libs/application/dspxmodel/src/KeySignature_p.h delete mode 100644 src/libs/application/dspxmodel/src/Label.cpp delete mode 100644 src/libs/application/dspxmodel/src/Label.h delete mode 100644 src/libs/application/dspxmodel/src/LabelSequence.cpp delete mode 100644 src/libs/application/dspxmodel/src/LabelSequence.h delete mode 100644 src/libs/application/dspxmodel/src/LabelSequence_p.h delete mode 100644 src/libs/application/dspxmodel/src/Label_p.h delete mode 100644 src/libs/application/dspxmodel/src/ListData.cpp delete mode 100644 src/libs/application/dspxmodel/src/ListData_p.h delete mode 100644 src/libs/application/dspxmodel/src/MapData.cpp delete mode 100644 src/libs/application/dspxmodel/src/MapData_p.h delete mode 100644 src/libs/application/dspxmodel/src/Master.cpp delete mode 100644 src/libs/application/dspxmodel/src/Master.h delete mode 100644 src/libs/application/dspxmodel/src/Model.cpp delete mode 100644 src/libs/application/dspxmodel/src/Model.h delete mode 100644 src/libs/application/dspxmodel/src/ModelStrategy.cpp delete mode 100644 src/libs/application/dspxmodel/src/ModelStrategy.h delete mode 100644 src/libs/application/dspxmodel/src/Model_p.h delete mode 100644 src/libs/application/dspxmodel/src/Note.cpp delete mode 100644 src/libs/application/dspxmodel/src/Note.h delete mode 100644 src/libs/application/dspxmodel/src/NoteSequence.cpp delete mode 100644 src/libs/application/dspxmodel/src/NoteSequence.h delete mode 100644 src/libs/application/dspxmodel/src/NoteSequence_p.h delete mode 100644 src/libs/application/dspxmodel/src/Note_p.h delete mode 100644 src/libs/application/dspxmodel/src/Param.cpp delete mode 100644 src/libs/application/dspxmodel/src/Param.h delete mode 100644 src/libs/application/dspxmodel/src/ParamCurve.cpp delete mode 100644 src/libs/application/dspxmodel/src/ParamCurve.h delete mode 100644 src/libs/application/dspxmodel/src/ParamCurveAnchor.cpp delete mode 100644 src/libs/application/dspxmodel/src/ParamCurveAnchor.h delete mode 100644 src/libs/application/dspxmodel/src/ParamCurveFree.cpp delete mode 100644 src/libs/application/dspxmodel/src/ParamCurveFree.h delete mode 100644 src/libs/application/dspxmodel/src/ParamCurveSequence.cpp delete mode 100644 src/libs/application/dspxmodel/src/ParamCurveSequence.h delete mode 100644 src/libs/application/dspxmodel/src/ParamCurveSequence_p.h delete mode 100644 src/libs/application/dspxmodel/src/ParamCurve_p.h delete mode 100644 src/libs/application/dspxmodel/src/ParamMap.cpp delete mode 100644 src/libs/application/dspxmodel/src/ParamMap.h delete mode 100644 src/libs/application/dspxmodel/src/Param_p.h delete mode 100644 src/libs/application/dspxmodel/src/Phoneme.cpp delete mode 100644 src/libs/application/dspxmodel/src/Phoneme.h delete mode 100644 src/libs/application/dspxmodel/src/PhonemeInfo.cpp delete mode 100644 src/libs/application/dspxmodel/src/PhonemeInfo.h delete mode 100644 src/libs/application/dspxmodel/src/PhonemeInfo_p.h delete mode 100644 src/libs/application/dspxmodel/src/PhonemeSequence.cpp delete mode 100644 src/libs/application/dspxmodel/src/PhonemeSequence.h delete mode 100644 src/libs/application/dspxmodel/src/PhonemeSequence_p.h delete mode 100644 src/libs/application/dspxmodel/src/Phoneme_p.h delete mode 100644 src/libs/application/dspxmodel/src/PointSequenceContainer_p.h delete mode 100644 src/libs/application/dspxmodel/src/PointSequenceData.cpp delete mode 100644 src/libs/application/dspxmodel/src/PointSequenceData_p.h delete mode 100644 src/libs/application/dspxmodel/src/Pronunciation.cpp delete mode 100644 src/libs/application/dspxmodel/src/Pronunciation.h delete mode 100644 src/libs/application/dspxmodel/src/RangeSequenceContainer_p.h delete mode 100644 src/libs/application/dspxmodel/src/RangeSequenceData_p.h delete mode 100644 src/libs/application/dspxmodel/src/SingingClip.cpp delete mode 100644 src/libs/application/dspxmodel/src/SingingClip.h delete mode 100644 src/libs/application/dspxmodel/src/Source.cpp delete mode 100644 src/libs/application/dspxmodel/src/Source.h delete mode 100644 src/libs/application/dspxmodel/src/SourceMap.cpp delete mode 100644 src/libs/application/dspxmodel/src/SourceMap.h delete mode 100644 src/libs/application/dspxmodel/src/SpliceHelper_p.h delete mode 100644 src/libs/application/dspxmodel/src/Tempo.cpp delete mode 100644 src/libs/application/dspxmodel/src/Tempo.h delete mode 100644 src/libs/application/dspxmodel/src/TempoSequence.cpp delete mode 100644 src/libs/application/dspxmodel/src/TempoSequence.h delete mode 100644 src/libs/application/dspxmodel/src/TempoSequence_p.h delete mode 100644 src/libs/application/dspxmodel/src/Tempo_p.h delete mode 100644 src/libs/application/dspxmodel/src/TimeSignature.cpp delete mode 100644 src/libs/application/dspxmodel/src/TimeSignature.h delete mode 100644 src/libs/application/dspxmodel/src/TimeSignatureSequence.cpp delete mode 100644 src/libs/application/dspxmodel/src/TimeSignatureSequence.h delete mode 100644 src/libs/application/dspxmodel/src/TimeSignatureSequence_p.h delete mode 100644 src/libs/application/dspxmodel/src/TimeSignature_p.h delete mode 100644 src/libs/application/dspxmodel/src/Timeline.cpp delete mode 100644 src/libs/application/dspxmodel/src/Timeline.h delete mode 100644 src/libs/application/dspxmodel/src/Track.cpp delete mode 100644 src/libs/application/dspxmodel/src/Track.h delete mode 100644 src/libs/application/dspxmodel/src/TrackControl.cpp delete mode 100644 src/libs/application/dspxmodel/src/TrackControl.h delete mode 100644 src/libs/application/dspxmodel/src/TrackList.cpp delete mode 100644 src/libs/application/dspxmodel/src/TrackList.h delete mode 100644 src/libs/application/dspxmodel/src/Track_p.h delete mode 100644 src/libs/application/dspxmodel/src/UndoableModelStrategy.cpp delete mode 100644 src/libs/application/dspxmodel/src/UndoableModelStrategy.h delete mode 100644 src/libs/application/dspxmodel/src/UndoableModelStrategy_p.h delete mode 100644 src/libs/application/dspxmodel/src/Vibrato.cpp delete mode 100644 src/libs/application/dspxmodel/src/Vibrato.h delete mode 100644 src/libs/application/dspxmodel/src/VibratoPointDataArray.cpp delete mode 100644 src/libs/application/dspxmodel/src/VibratoPointDataArray.h delete mode 100644 src/libs/application/dspxmodel/src/VibratoPoints.cpp delete mode 100644 src/libs/application/dspxmodel/src/VibratoPoints.h delete mode 100644 src/libs/application/dspxmodel/src/Workspace.cpp delete mode 100644 src/libs/application/dspxmodel/src/Workspace.h delete mode 100644 src/libs/application/dspxmodel/src/WorkspaceInfo.cpp delete mode 100644 src/libs/application/dspxmodel/src/WorkspaceInfo.h delete mode 100644 src/libs/application/dspxmodel/src/jsonutils_p.h delete mode 100644 src/libs/application/dspxmodel/src/qml/iterable.mjs delete mode 100644 src/libs/application/dspxmodel/src/rangehelpers.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/AnchorNodeSelectionModel.cpp delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/AnchorNodeSelectionModel.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/AnchorNodeSelectionModel_p.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/ClipSelectionModel.cpp delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/ClipSelectionModel.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/ClipSelectionModel_p.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/GenericGlobalItemSelectionModelData_p.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/KeySignatureSelectionModel.cpp delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/KeySignatureSelectionModel.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/KeySignatureSelectionModel_p.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/LabelSelectionModel.cpp delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/LabelSelectionModel.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/LabelSelectionModel_p.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/NoteSelectionModel.cpp delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/NoteSelectionModel.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/NoteSelectionModel_p.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/SelectionModel.cpp delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/SelectionModel.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/SelectionModel_p.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/TempoSelectionModel.cpp delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/TempoSelectionModel.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/TempoSelectionModel_p.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/TrackSelectionModel.cpp delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/TrackSelectionModel.h delete mode 100644 src/libs/application/dspxmodel/src/selectionmodel/TrackSelectionModel_p.h delete mode 100644 src/libs/application/dspxmodel/tests/CMakeLists.txt delete mode 100644 src/libs/application/dspxmodel/tests/dspx/CMakeLists.txt delete mode 100644 src/libs/application/dspxmodel/tests/dspx/main.cpp delete mode 100644 src/libs/application/dspxmodel/tests/dspx/test.dspx create mode 100644 src/plugins/coreplugin/internal/jsonutils.h delete mode 100644 src/plugins/coreplugin/project/propertymapper/ClipPropertyMapper.cpp delete mode 100644 src/plugins/coreplugin/project/propertymapper/ClipPropertyMapper.h delete mode 100644 src/plugins/coreplugin/project/propertymapper/ClipPropertyMapper_p.h delete mode 100644 src/plugins/coreplugin/project/propertymapper/KeySignaturePropertyMapper.cpp delete mode 100644 src/plugins/coreplugin/project/propertymapper/KeySignaturePropertyMapper.h delete mode 100644 src/plugins/coreplugin/project/propertymapper/KeySignaturePropertyMapper_p.h delete mode 100644 src/plugins/coreplugin/project/propertymapper/LabelPropertyMapper.cpp delete mode 100644 src/plugins/coreplugin/project/propertymapper/LabelPropertyMapper.h delete mode 100644 src/plugins/coreplugin/project/propertymapper/LabelPropertyMapper_p.h delete mode 100644 src/plugins/coreplugin/project/propertymapper/NotePropertyMapper.cpp delete mode 100644 src/plugins/coreplugin/project/propertymapper/NotePropertyMapper.h delete mode 100644 src/plugins/coreplugin/project/propertymapper/NotePropertyMapper_p.h delete mode 100644 src/plugins/coreplugin/project/propertymapper/PropertyMapperData_p.h delete mode 100644 src/plugins/coreplugin/project/propertymapper/TempoPropertyMapper.cpp delete mode 100644 src/plugins/coreplugin/project/propertymapper/TempoPropertyMapper.h delete mode 100644 src/plugins/coreplugin/project/propertymapper/TempoPropertyMapper_p.h delete mode 100644 src/plugins/coreplugin/project/propertymapper/TrackPropertyMapper.cpp delete mode 100644 src/plugins/coreplugin/project/propertymapper/TrackPropertyMapper.h delete mode 100644 src/plugins/coreplugin/project/propertymapper/TrackPropertyMapper_p.h diff --git a/.gitmodules b/.gitmodules index 848bde1c..f161356a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -29,3 +29,6 @@ [submodule "opendspx"] path = src/libs/3rdparty/opendspx url = ../../diffscope/opendspx.git +[submodule "src/libs/3rdparty/dspxmodel"] + path = src/libs/3rdparty/dspxmodel + url = git@github.com:diffscope/dspxmodel.git diff --git a/src/libs/3rdparty/CMakeLists.txt b/src/libs/3rdparty/CMakeLists.txt index 0bbdb7d2..4189e56c 100644 --- a/src/libs/3rdparty/CMakeLists.txt +++ b/src/libs/3rdparty/CMakeLists.txt @@ -31,4 +31,4 @@ include("${CMAKE_CURRENT_LIST_DIR}/qactionkit/src/QActionKitMacros.cmake") add_subdirectory(talcs) -add_subdirectory(opendspx) \ No newline at end of file +add_subdirectory(dspxmodel) \ No newline at end of file diff --git a/src/libs/3rdparty/dspxmodel b/src/libs/3rdparty/dspxmodel new file mode 160000 index 00000000..5c969ce2 --- /dev/null +++ b/src/libs/3rdparty/dspxmodel @@ -0,0 +1 @@ +Subproject commit 5c969ce2972d3342d4b8227d5fefe42e41893613 diff --git a/src/libs/3rdparty/opendspx b/src/libs/3rdparty/opendspx deleted file mode 160000 index b250ad9e..00000000 --- a/src/libs/3rdparty/opendspx +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b250ad9e60097e749610e9c5438ebb0592121f97 diff --git a/src/libs/application/CMakeLists.txt b/src/libs/application/CMakeLists.txt index 21ecdf56..90bda72b 100644 --- a/src/libs/application/CMakeLists.txt +++ b/src/libs/application/CMakeLists.txt @@ -2,6 +2,4 @@ add_subdirectory(loadapi) add_subdirectory(uishell) -add_subdirectory(dspxmodel) - add_subdirectory(transactional) \ No newline at end of file diff --git a/src/libs/application/dspxmodel/CMakeLists.txt b/src/libs/application/dspxmodel/CMakeLists.txt deleted file mode 100644 index 03719520..00000000 --- a/src/libs/application/dspxmodel/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -add_subdirectory(src) - -if(APPLICATION_BUILD_TESTS) - add_subdirectory(tests) -endif() \ No newline at end of file diff --git a/src/libs/application/dspxmodel/src/AnchorNode.cpp b/src/libs/application/dspxmodel/src/AnchorNode.cpp deleted file mode 100644 index 6e65b00d..00000000 --- a/src/libs/application/dspxmodel/src/AnchorNode.cpp +++ /dev/null @@ -1,138 +0,0 @@ -#include "AnchorNode.h" -#include "AnchorNode_p.h" - -#include - -#include - -#include -#include -#include - -namespace dspx { - - void AnchorNodePrivate::setAnchorNodeSequence(AnchorNode *item, AnchorNodeSequence *anchorNodeSequence) { - auto d = item->d_func(); - if (d->anchorNodeSequence != anchorNodeSequence) { - d->anchorNodeSequence = anchorNodeSequence; - Q_EMIT item->anchorNodeSequenceChanged(); - } - } - - void AnchorNodePrivate::setPreviousItem(AnchorNode *item, AnchorNode *previousItem) { - auto d = item->d_func(); - if (d->previousItem != previousItem) { - d->previousItem = previousItem; - Q_EMIT item->previousItemChanged(); - } - } - - void AnchorNodePrivate::setNextItem(AnchorNode *item, AnchorNode *nextItem) { - auto d = item->d_func(); - if (d->nextItem != nextItem) { - d->nextItem = nextItem; - Q_EMIT item->nextItemChanged(); - } - } - - AnchorNode::AnchorNode(Handle handle, Model *model) - : EntityObject(handle, model), d_ptr(new AnchorNodePrivate) { - Q_D(AnchorNode); - Q_ASSERT(model->strategy()->getEntityType(handle) == ModelStrategy::EI_ParamCurveAnchorNode); - d->q_ptr = this; - d->interp = model->strategy()->getEntityProperty(handle, ModelStrategy::P_Type).value(); - d->x = model->strategy()->getEntityProperty(handle, ModelStrategy::P_Position).toInt(); - d->y = model->strategy()->getEntityProperty(handle, ModelStrategy::P_Value).toInt(); - } - - AnchorNode::~AnchorNode() = default; - - AnchorNode::InterpolationMode AnchorNode::interp() const { - Q_D(const AnchorNode); - return d->interp; - } - - void AnchorNode::setInterp(InterpolationMode interp) { - Q_D(AnchorNode); - Q_ASSERT(interp == None || interp == Linear || interp == Hermite); - model()->strategy()->setEntityProperty(handle(), ModelStrategy::P_Type, QVariant::fromValue(interp)); - } - - int AnchorNode::x() const { - Q_D(const AnchorNode); - return d->x; - } - - void AnchorNode::setX(int x) { - Q_D(AnchorNode); - Q_ASSERT(x >= 0); - model()->strategy()->setEntityProperty(handle(), ModelStrategy::P_Position, x); - } - - int AnchorNode::y() const { - Q_D(const AnchorNode); - return d->y; - } - - void AnchorNode::setY(int y) { - Q_D(AnchorNode); - model()->strategy()->setEntityProperty(handle(), ModelStrategy::P_Value, y); - } - - opendspx::AnchorNode AnchorNode::toOpenDspx() const { - Q_D(const AnchorNode); - return { - .interp = static_cast(d->interp), - .x = d->x, - .y = d->y, - }; - } - - void AnchorNode::fromOpenDspx(const opendspx::AnchorNode &node) { - Q_D(AnchorNode); - setInterp(static_cast(node.interp)); - setX(node.x); - setY(node.y); - } - - AnchorNodeSequence *AnchorNode::anchorNodeSequence() const { - Q_D(const AnchorNode); - return d->anchorNodeSequence; - } - - AnchorNode *AnchorNode::previousItem() const { - Q_D(const AnchorNode); - return d->previousItem; - } - - AnchorNode *AnchorNode::nextItem() const { - Q_D(const AnchorNode); - return d->nextItem; - } - - void AnchorNode::handleSetEntityProperty(int property, const QVariant &value) { - Q_D(AnchorNode); - switch (property) { - case ModelStrategy::P_Type: { - d->interp = value.value(); - Q_EMIT interpChanged(d->interp); - break; - } - case ModelStrategy::P_Position: { - d->x = value.toInt(); - Q_EMIT xChanged(d->x); - break; - } - case ModelStrategy::P_Value: { - d->y = value.toInt(); - Q_EMIT yChanged(d->y); - break; - } - default: - Q_UNREACHABLE(); - } - } - -} - -#include "moc_AnchorNode.cpp" diff --git a/src/libs/application/dspxmodel/src/AnchorNode.h b/src/libs/application/dspxmodel/src/AnchorNode.h deleted file mode 100644 index 85dc1f85..00000000 --- a/src/libs/application/dspxmodel/src/AnchorNode.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_ANCHORNODE_H -#define DIFFSCOPE_DSPX_MODEL_ANCHORNODE_H - -#include - -#include - -namespace opendspx { - struct AnchorNode; -} - -namespace dspx { - - class AnchorNodeSequence; - - class AnchorNodeSequencePrivate; - - class AnchorNodePrivate; - - class DSPX_MODEL_EXPORT AnchorNode : public EntityObject { - Q_OBJECT - QML_ELEMENT - QML_UNCREATABLE("") - Q_DECLARE_PRIVATE(AnchorNode) - Q_PROPERTY(InterpolationMode interp READ interp WRITE setInterp NOTIFY interpChanged) - Q_PROPERTY(int x READ x WRITE setX NOTIFY xChanged) - Q_PROPERTY(int y READ y WRITE setY NOTIFY yChanged) - Q_PROPERTY(AnchorNodeSequence *anchorNodeSequence READ anchorNodeSequence NOTIFY anchorNodeSequenceChanged) - Q_PROPERTY(AnchorNode *previousItem READ previousItem NOTIFY previousItemChanged) - Q_PROPERTY(AnchorNode *nextItem READ nextItem NOTIFY nextItemChanged) - - public: - enum InterpolationMode { - None = 0, - Linear, - Hermite - }; - Q_ENUM(InterpolationMode) - - ~AnchorNode() override; - - InterpolationMode interp() const; - void setInterp(InterpolationMode interp); - - int x() const; - void setX(int x); - - int y() const; - void setY(int y); - - opendspx::AnchorNode toOpenDspx() const; - void fromOpenDspx(const opendspx::AnchorNode &node); - - AnchorNodeSequence *anchorNodeSequence() const; - AnchorNode *previousItem() const; - AnchorNode *nextItem() const; - - Q_SIGNALS: - void interpChanged(InterpolationMode interp); - void xChanged(int x); - void yChanged(int y); - void anchorNodeSequenceChanged(); - void previousItemChanged(); - void nextItemChanged(); - - protected: - void handleSetEntityProperty(int property, const QVariant &value) override; - - private: - friend class ModelPrivate; - explicit AnchorNode(Handle handle, Model *model); - QScopedPointer d_ptr; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_ANCHORNODE_H diff --git a/src/libs/application/dspxmodel/src/AnchorNodeSequence.cpp b/src/libs/application/dspxmodel/src/AnchorNodeSequence.cpp deleted file mode 100644 index 461d0688..00000000 --- a/src/libs/application/dspxmodel/src/AnchorNodeSequence.cpp +++ /dev/null @@ -1,114 +0,0 @@ -#include "AnchorNodeSequence.h" -#include "AnchorNodeSequence_p.h" - -#include -#include - -#include - -#include -#include -#include -#include -#include - -namespace dspx { - - AnchorNodeSequence::AnchorNodeSequence(ParamCurveAnchor *paramCurveAnchor, Handle handle, Model *model) : EntityObject(handle, model), d_ptr(new AnchorNodeSequencePrivate) { - Q_D(AnchorNodeSequence); - Q_ASSERT(model->strategy()->getEntityType(handle) == ModelStrategy::ES_ParamCurveAnchorNodes); - d->q_ptr = this; - d->pModel = ModelPrivate::get(model); - d->paramCurveAnchor = paramCurveAnchor; - - d->init(model->strategy()->getEntitiesFromSequenceContainer(handle)); - } - - AnchorNodeSequence::~AnchorNodeSequence() = default; - - int AnchorNodeSequence::size() const { - Q_D(const AnchorNodeSequence); - return d->container.size(); - } - - AnchorNode *AnchorNodeSequence::firstItem() const { - Q_D(const AnchorNodeSequence); - return d->firstItem; - } - - AnchorNode *AnchorNodeSequence::lastItem() const { - Q_D(const AnchorNodeSequence); - return d->lastItem; - } - - AnchorNode *AnchorNodeSequence::previousItem(AnchorNode *item) const { - Q_D(const AnchorNodeSequence); - return d->container.previousItem(item); - } - - AnchorNode *AnchorNodeSequence::nextItem(AnchorNode *item) const { - Q_D(const AnchorNodeSequence); - return d->container.nextItem(item); - } - - QList AnchorNodeSequence::slice(int position, int length) const { - Q_D(const AnchorNodeSequence); - return d->container.slice(position, length); - } - - bool AnchorNodeSequence::contains(AnchorNode *item) const { - Q_D(const AnchorNodeSequence); - return d->container.contains(item); - } - - bool AnchorNodeSequence::insertItem(AnchorNode *item) { - Q_D(AnchorNodeSequence); - return d->pModel->strategy->insertIntoSequenceContainer(handle(), item->handle()); - } - - bool AnchorNodeSequence::removeItem(AnchorNode *item) { - Q_D(AnchorNodeSequence); - return d->pModel->strategy->takeFromSequenceContainer(handle(), item->handle()); - } - - std::vector AnchorNodeSequence::toOpenDspx() const { - Q_D(const AnchorNodeSequence); - std::vector ret; - ret.reserve(d->container.size()); - for (const auto &[_, item] : d->container.m_items) { - ret.push_back(item->toOpenDspx()); - } - return ret; - } - - void AnchorNodeSequence::fromOpenDspx(const std::vector &nodes) { - while (size()) { - removeItem(firstItem()); - } - for (const auto &node : nodes) { - auto item = model()->createAnchorNode(); - item->fromOpenDspx(node); - insertItem(item); - } - } - - void AnchorNodeSequence::handleInsertIntoSequenceContainer(Handle entity) { - Q_D(AnchorNodeSequence); - d->handleInsertIntoSequenceContainer(entity); - } - - void AnchorNodeSequence::handleTakeFromSequenceContainer(Handle takenEntity, Handle entity) { - Q_D(AnchorNodeSequence); - d->handleTakeFromSequenceContainer(takenEntity, entity); - } - - ParamCurveAnchor *AnchorNodeSequence::paramCurveAnchor() const { - Q_D(const AnchorNodeSequence); - return d->paramCurveAnchor; - } - - - -} - -#include "moc_AnchorNodeSequence.cpp" diff --git a/src/libs/application/dspxmodel/src/AnchorNodeSequence.h b/src/libs/application/dspxmodel/src/AnchorNodeSequence.h deleted file mode 100644 index 4748fccc..00000000 --- a/src/libs/application/dspxmodel/src/AnchorNodeSequence.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_ANCHORNODESEQUENCE_H -#define DIFFSCOPE_DSPX_MODEL_ANCHORNODESEQUENCE_H - -#include - -#include -#include - -namespace opendspx { - struct AnchorNode; -} - -namespace dspx { - - class AnchorNode; - class ParamCurveAnchor; - - class AnchorNodeSequencePrivate; - - class DSPX_MODEL_EXPORT AnchorNodeSequence : public EntityObject { - Q_OBJECT - QML_ELEMENT - QML_UNCREATABLE("") - Q_DECLARE_PRIVATE(AnchorNodeSequence) - Q_PROPERTY(int size READ size NOTIFY sizeChanged) - Q_PROPERTY(AnchorNode *firstItem READ firstItem NOTIFY firstItemChanged) - Q_PROPERTY(AnchorNode *lastItem READ lastItem NOTIFY lastItemChanged) - Q_PROPERTY(ParamCurveAnchor *paramCurveAnchor READ paramCurveAnchor CONSTANT) - Q_PRIVATE_PROPERTY(d_func(), QJSValue iterable READ iterable CONSTANT) - public: - ~AnchorNodeSequence() override; - - int size() const; - AnchorNode *firstItem() const; - AnchorNode *lastItem() const; - Q_INVOKABLE AnchorNode *previousItem(AnchorNode *item) const; - Q_INVOKABLE AnchorNode *nextItem(AnchorNode *item) const; - Q_INVOKABLE QList slice(int position, int length) const; - Q_INVOKABLE bool contains(AnchorNode *item) const; - - Q_INVOKABLE bool insertItem(AnchorNode *item); - Q_INVOKABLE bool removeItem(AnchorNode *item); - - std::vector toOpenDspx() const; - void fromOpenDspx(const std::vector &nodes); - - ParamCurveAnchor *paramCurveAnchor() const; - - auto asRange() const { - return impl::SequenceRange(this); - } - - Q_SIGNALS: - void itemAboutToInsert(AnchorNode *item); - void itemInserted(AnchorNode *item); - void itemAboutToRemove(AnchorNode *item); - void itemRemoved(AnchorNode *item); - void sizeChanged(int size); - void firstItemChanged(AnchorNode *item); - void lastItemChanged(AnchorNode *item); - - protected: - void handleInsertIntoSequenceContainer(Handle entity) override; - void handleTakeFromSequenceContainer(Handle takenEntity, Handle entity) override; - - private: - friend class ModelPrivate; - explicit AnchorNodeSequence(ParamCurveAnchor *paramCurveAnchor, Handle handle, Model *model); - QScopedPointer d_ptr; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_ANCHORNODESEQUENCE_H diff --git a/src/libs/application/dspxmodel/src/AnchorNodeSequence_p.h b/src/libs/application/dspxmodel/src/AnchorNodeSequence_p.h deleted file mode 100644 index 24cb0f23..00000000 --- a/src/libs/application/dspxmodel/src/AnchorNodeSequence_p.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_ANCHORNODESEQUENCE_P_H -#define DIFFSCOPE_DSPX_MODEL_ANCHORNODESEQUENCE_P_H - -#include - -#include -#include - -namespace dspx { - - class AnchorNodeSequencePrivate : public PointSequenceData< - AnchorNodeSequence, - AnchorNode, - &AnchorNode::x, - &AnchorNode::xChanged, - &AnchorNodePrivate::setAnchorNodeSequence, - &AnchorNodePrivate::setPreviousItem, - &AnchorNodePrivate::setNextItem> { - Q_DECLARE_PUBLIC(AnchorNodeSequence) - public: - ParamCurveAnchor *paramCurveAnchor{}; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_ANCHORNODESEQUENCE_P_H \ No newline at end of file diff --git a/src/libs/application/dspxmodel/src/AnchorNode_p.h b/src/libs/application/dspxmodel/src/AnchorNode_p.h deleted file mode 100644 index ec8af70a..00000000 --- a/src/libs/application/dspxmodel/src/AnchorNode_p.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_ANCHORNODE_P_H -#define DIFFSCOPE_DSPX_MODEL_ANCHORNODE_P_H - -#include - -namespace dspx { - - class AnchorNodePrivate { - Q_DECLARE_PUBLIC(AnchorNode) - public: - AnchorNode *q_ptr; - AnchorNode::InterpolationMode interp; - int x; - int y; - AnchorNodeSequence *anchorNodeSequence{}; - AnchorNode *previousItem{}; - AnchorNode *nextItem{}; - - static void setAnchorNodeSequence(AnchorNode *item, AnchorNodeSequence *anchorNodeSequence); - static void setPreviousItem(AnchorNode *item, AnchorNode *previousItem); - static void setNextItem(AnchorNode *item, AnchorNode *nextItem); - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_ANCHORNODE_P_H \ No newline at end of file diff --git a/src/libs/application/dspxmodel/src/AudioClip.cpp b/src/libs/application/dspxmodel/src/AudioClip.cpp deleted file mode 100644 index d7b658d7..00000000 --- a/src/libs/application/dspxmodel/src/AudioClip.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include "AudioClip.h" - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -namespace dspx { - - class AudioClipPrivate { - Q_DECLARE_PUBLIC(AudioClip) - public: - AudioClip *q_ptr; - ModelPrivate *pModel; - AudioPathInfo path; - }; - - AudioClip::AudioClip(Handle handle, Model *model) : Clip(Audio, handle, model), d_ptr(new AudioClipPrivate) { - Q_D(AudioClip); - Q_ASSERT(model->strategy()->getEntityType(handle) == ModelStrategy::EI_AudioClip); - d->q_ptr = this; - d->pModel = ModelPrivate::get(model); - d->path = d->pModel->strategy->getEntityProperty(handle, ModelStrategy::P_Path).value(); - } - - AudioClip::~AudioClip() = default; - - AudioPathInfo AudioClip::path() const { - Q_D(const AudioClip); - return d->path; - } - - void AudioClip::setPath(const AudioPathInfo &path) { - Q_D(AudioClip); - d->pModel->strategy->setEntityProperty(handle(), ModelStrategy::P_Path, QVariant::fromValue(path)); - } - - static QByteArray encodeUserData(const QVariant &userData) { - QByteArray data; - QDataStream s(&data, QIODevice::WriteOnly); - s.setVersion(QDataStream::Qt_5_15); - s << userData; - return data.toBase64(); - } - - static QVariant decodeUserData(const QByteArray &data) { - QDataStream s(QByteArray::fromBase64(data)); - QVariant userData; - s >> userData; - return userData; - } - - opendspx::AudioClip AudioClip::toOpenDspx() const { - auto audioPathInfo = path(); - opendspx::AudioClip clip = { - name().toStdString(), - control()->toOpenDspx(), - time()->toOpenDspx(), - workspace()->toOpenDspx(), - QDir(audioPathInfo.absoluteDir).filePath(audioPathInfo.fileName).toStdString(), - }; - clip.workspace["diffscope"]["audio"] = nlohmann::json::object({ - {"relativeDir", audioPathInfo.relativeDir.toStdString()}, - {"formatEntryClassName", audioPathInfo.formatEntryClassName.toStdString()}, - {"userData", encodeUserData(audioPathInfo.userData)}, - {"sha512", audioPathInfo.sha512.toStdString()} - }); - return clip; - } - - void AudioClip::fromOpenDspx(const opendspx::AudioClip &clip) { - setName(QString::fromStdString(clip.name)); - control()->fromOpenDspx(clip.control); - time()->fromOpenDspx(clip.time); - workspace()->fromOpenDspx(clip.workspace); - auto fileInfo = QFileInfo(QString::fromStdString(clip.path)); - auto diffscopeWorkspace = clip.workspace.contains("diffscope") ? JsonUtils::toQJsonValue(clip.workspace.at("diffscope")).toObject() : QJsonObject(); - if (diffscopeWorkspace.contains("audio")) { - auto audio = diffscopeWorkspace["audio"].toObject(); - setPath({ - .absoluteDir = fileInfo.absolutePath(), - .relativeDir = audio["relativeDir"].toString(), - .fileName = fileInfo.fileName(), - .formatEntryClassName = audio["formatEntryClassName"].toString(), - .userData = decodeUserData(audio["userData"].toString().toUtf8()), - .sha512 = audio["sha512"].toString() - }); - } else { - setPath({ - .absoluteDir = fileInfo.absolutePath(), - .relativeDir = {}, - .fileName = fileInfo.fileName(), - .formatEntryClassName = {}, - .userData = {}, - .sha512 = {} - }); - } - } - - void AudioClip::handleSetEntityProperty(int property, const QVariant &value) { - Q_D(AudioClip); - switch (property) { - case ModelStrategy::P_Path: { - d->path = value.value(); - Q_EMIT pathChanged(d->path); - break; - } - default: - Clip::handleSetEntityProperty(property, value); - } - } - -} diff --git a/src/libs/application/dspxmodel/src/AudioClip.h b/src/libs/application/dspxmodel/src/AudioClip.h deleted file mode 100644 index bc664ca6..00000000 --- a/src/libs/application/dspxmodel/src/AudioClip.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_AUDIOCLIP_H -#define DIFFSCOPE_DSPX_MODEL_AUDIOCLIP_H - -#include -#include - -#include - -namespace opendspx { - struct AudioClip; -} - -namespace dspx { - - class AudioClipPrivate; - - struct DSPX_MODEL_EXPORT AudioPathInfo { - Q_GADGET - Q_PROPERTY(QString absoluteDir MEMBER absoluteDir) - Q_PROPERTY(QString relativeDir MEMBER relativeDir) - Q_PROPERTY(QString fileName MEMBER fileName) - Q_PROPERTY(QString formatEntryClassName MEMBER formatEntryClassName) - Q_PROPERTY(QVariant userData MEMBER userData) - Q_PROPERTY(QString sha512 MEMBER sha512) - public: - QString absoluteDir; - QString relativeDir; - QString fileName; - QString formatEntryClassName; - QVariant userData; - QString sha512; - }; - - class DSPX_MODEL_EXPORT AudioClip : public Clip { - Q_OBJECT - QML_ELEMENT - QML_UNCREATABLE("") - Q_DECLARE_PRIVATE(AudioClip) - Q_PROPERTY(AudioPathInfo path READ path WRITE setPath NOTIFY pathChanged) - - public: - ~AudioClip() override; - - AudioPathInfo path() const; - void setPath(const AudioPathInfo &path); - - opendspx::AudioClip toOpenDspx() const; - void fromOpenDspx(const opendspx::AudioClip &clip); - - Q_SIGNALS: - void pathChanged(const AudioPathInfo &path); - - protected: - void handleSetEntityProperty(int property, const QVariant &value) override; - - private: - friend class ModelPrivate; - explicit AudioClip(Handle handle, Model *model); - QScopedPointer d_ptr; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_AUDIOCLIP_H diff --git a/src/libs/application/dspxmodel/src/BasicModelStrategy.cpp b/src/libs/application/dspxmodel/src/BasicModelStrategy.cpp deleted file mode 100644 index a88d80df..00000000 --- a/src/libs/application/dspxmodel/src/BasicModelStrategy.cpp +++ /dev/null @@ -1,213 +0,0 @@ -#include "BasicModelStrategy.h" - -#include - -#include -#include - -namespace dspx { - - BasicModelStrategy::BasicModelStrategy(QObject *parent) : ModelStrategy(parent) { - } - - BasicModelStrategy::~BasicModelStrategy() = default; - - Handle BasicModelStrategy::createEntity(Entity entityType) { - auto object = BasicModelStrategyEntity::createByType(entityType, this); - Handle entity{reinterpret_cast(object)}; - Q_EMIT createEntityNotified(entity, entityType); - return entity; - } - - void BasicModelStrategy::destroyEntity(Handle entity) { - auto object = handleCast(entity); - delete object; - Q_EMIT destroyEntityNotified(entity); - } - - ModelStrategy::Entity BasicModelStrategy::getEntityType(Handle entity) { - return reinterpret_cast(entity.d)->type; - } - - QList BasicModelStrategy::getEntitiesFromSequenceContainer(Handle sequenceContainerEntity) { - QList a; - std::ranges::transform(handleCast(sequenceContainerEntity)->sequence, std::back_inserter(a), [](auto *obj) { - return Handle{reinterpret_cast(obj)}; - }); - return a; - } - - QList BasicModelStrategy::getEntitiesFromListContainer(Handle listContainerEntity) { - QList a; - std::ranges::transform(handleCast(listContainerEntity)->list, std::back_inserter(a), [](auto *obj) { - return Handle{reinterpret_cast(obj)}; - }); - return a; - } - - QList> BasicModelStrategy::getEntitiesFromMapContainer(Handle mapContainerEntity) { - QList> a; - for (auto [key, value] : handleCast(mapContainerEntity)->map.asKeyValueRange()) { - a.append({key, Handle{reinterpret_cast(value)}}); - } - return a; - } - - bool BasicModelStrategy::insertIntoSequenceContainer(Handle sequenceContainerEntity, Handle entity) { - auto sequenceContainerObject = handleCast(sequenceContainerEntity); - auto object = reinterpret_cast(entity.d); - if (object->parent() != this) { - return false; - } - sequenceContainerObject->sequence.insert(object); - object->setParent(sequenceContainerObject); - Q_EMIT insertIntoSequenceContainerNotified(sequenceContainerEntity, entity); - return true; - } - - bool BasicModelStrategy::insertIntoListContainer(Handle listContainerEntity, Handle entity, int index) { - auto listContainerObject = handleCast(listContainerEntity); - if (index < 0 || index > listContainerObject->list.size()) { - return false; - } - auto object = reinterpret_cast(entity.d); - if (object->parent() != this) { - return false; - } - listContainerObject->list.insert(index, object); - object->setParent(listContainerObject); - Q_EMIT insertIntoListContainerNotified(listContainerEntity, entity, index); - return true; - } - - bool BasicModelStrategy::insertIntoMapContainer(Handle mapContainerEntity, Handle entity, const QString &key) { - auto mapContainerObject = handleCast(mapContainerEntity); - auto object = reinterpret_cast(entity.d); - if (object->parent() != this) { - return false; - } - if (mapContainerObject->map.contains(key)) { - auto handle = takeFromMapContainer(mapContainerEntity, key); - destroyEntity(handle); - } - mapContainerObject->map.insert(key, object); - object->setParent(mapContainerObject); - Q_EMIT insertIntoMapContainerNotified(mapContainerEntity, entity, key); - return true; - } - - bool BasicModelStrategy::moveToAnotherSequenceContainer(Handle sequenceContainerEntity, Handle entity, Handle otherSequenceContainerEntity) { - auto sequenceContainerObject = handleCast(sequenceContainerEntity); - auto otherSequenceContainerObject = handleCast(otherSequenceContainerEntity); - auto object = reinterpret_cast(entity.d); - if (!sequenceContainerObject->sequence.contains(object)) { - return false; - } - sequenceContainerObject->sequence.remove(object); - otherSequenceContainerObject->sequence.insert(object); - object->setParent(otherSequenceContainerObject); - Q_EMIT moveToAnotherSequenceContainerNotified(sequenceContainerEntity, entity, otherSequenceContainerEntity); - return true; - } - - Handle BasicModelStrategy::takeFromSequenceContainer(Handle sequenceContainerEntity, Handle entity) { - auto sequenceContainerObject = handleCast(sequenceContainerEntity); - auto object = reinterpret_cast(entity.d); - if (sequenceContainerObject->sequence.contains(object)) { - sequenceContainerObject->sequence.remove(object); - object->setParent(this); - Q_EMIT takeFromContainerNotified(entity, sequenceContainerEntity, entity); - return entity; - } - return {}; - } - - Handle BasicModelStrategy::takeFromListContainer(Handle listContainerEntity, int index) { - auto listContainerObject = handleCast(listContainerEntity); - if (index < 0 || index >= listContainerObject->list.size()) { - return {}; - } - auto object = listContainerObject->list.takeAt(index); - object->setParent(this); - Handle entity{reinterpret_cast(object)}; - Q_EMIT takeFromListContainerNotified(entity, listContainerEntity, index); - return entity; - } - - Handle BasicModelStrategy::takeFromMapContainer(Handle mapContainerEntity, const QString &key) { - auto mapContainerObject = handleCast(mapContainerEntity); - if (mapContainerObject->map.contains(key)) { - auto object = mapContainerObject->map.take(key); - object->setParent(this); - Handle entity{reinterpret_cast(object)}; - Q_EMIT takeFromMapContainerNotified(entity, mapContainerEntity, key); - return entity; - } - return {}; - } - - bool BasicModelStrategy::rotateListContainer(Handle listContainerEntity, int leftIndex, int middleIndex, int rightIndex) { - auto listContainerObject = handleCast(listContainerEntity); - if (leftIndex < 0 || leftIndex > listContainerObject->list.size() || middleIndex < leftIndex || middleIndex > listContainerObject->list.size() || rightIndex < middleIndex || rightIndex > listContainerObject->list.size()) { - return false; - } - std::rotate(listContainerObject->list.begin() + leftIndex, listContainerObject->list.begin() + middleIndex, listContainerObject->list.begin() + rightIndex); - Q_EMIT rotateListContainerNotified(listContainerEntity, leftIndex, middleIndex, rightIndex); - return true; - } - - void BasicModelStrategy::setEntityProperty(Handle entity, Property property, const QVariant &value) { - auto object = handleCast(entity); - Q_ASSERT(isEntityTypeAndPropertyTypeCompatible(object->type, property)); - object->properties.insert(property, value); - Q_EMIT setEntityPropertyNotified(entity, property, value); - } - - QVariant BasicModelStrategy::getEntityProperty(Handle entity, Property property) { - auto object = handleCast(entity); - Q_ASSERT(isEntityTypeAndPropertyTypeCompatible(object->type, property)); - return object->properties.value(property); - } - bool BasicModelStrategy::spliceDataArray(Handle dataArrayEntity, int index, int length, const QVariantList &values) { - auto &data = handleCast(dataArrayEntity)->data; - if (index < 0 || index > data.size() || length < 0 || index + length > data.size()) { - return false; - } - SpliceHelper::splice(data, data.begin() + index, data.begin() + index + length, values.begin(), values.end()); - Q_EMIT spliceDataArrayNotified(dataArrayEntity, index, length, values); - return true; - } - QVariantList BasicModelStrategy::sliceDataArray(Handle dataArrayEntity, int index, int length) { - const auto &data = handleCast(dataArrayEntity)->data; - if (index < 0 || index >= data.size()) { - return {}; - } - return data.mid(index, length); - } - int BasicModelStrategy::getSizeOfDataArray(Handle dataArrayEntity) { - const auto &data = handleCast(dataArrayEntity)->data; - return static_cast(data.size()); - } - bool BasicModelStrategy::rotateDataArray(Handle dataArrayEntity, int leftIndex, int middleIndex, int rightIndex) { - auto &data = handleCast(dataArrayEntity)->data; - if (leftIndex < 0 || leftIndex > data.size() || middleIndex < leftIndex || middleIndex > data.size() || rightIndex < middleIndex || rightIndex > data.size()) { - return false; - } - std::rotate(data.begin() + leftIndex, data.begin() + middleIndex, data.begin() + rightIndex); - Q_EMIT rotateDataArrayNotified(dataArrayEntity, leftIndex, middleIndex, rightIndex); - return true; - } - - Handle BasicModelStrategy::getAssociatedSubEntity(Handle entity, Relationship relationship) { - auto object = handleCast(entity); - auto subObject = object->associatedSubEntities.value(relationship); - if (!subObject) { - Entity subObjectType = getAssociatedSubEntityTypeFromEntityTypeAndRelationship(object->type, relationship); - subObject = BasicModelStrategyEntity::createByType(subObjectType, object); - object->associatedSubEntities.insert(relationship, subObject); - } - Handle subEntity{reinterpret_cast(subObject)}; - return subEntity; - } - -} diff --git a/src/libs/application/dspxmodel/src/BasicModelStrategy.h b/src/libs/application/dspxmodel/src/BasicModelStrategy.h deleted file mode 100644 index 0cf44804..00000000 --- a/src/libs/application/dspxmodel/src/BasicModelStrategy.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_BASICMODELSTRATEGY_H -#define DIFFSCOPE_DSPX_MODEL_BASICMODELSTRATEGY_H - -#include - -namespace dspx { - - class DSPX_MODEL_EXPORT BasicModelStrategy : public ModelStrategy { - Q_OBJECT - public: - explicit BasicModelStrategy(QObject *parent = nullptr); - ~BasicModelStrategy() override; - - Handle createEntity(Entity entityType) override; - void destroyEntity(Handle entity) override; - Entity getEntityType(Handle entity) override; - QList getEntitiesFromSequenceContainer(Handle sequenceContainerEntity) override; - QList getEntitiesFromListContainer(Handle listContainerEntity) override; - QList> getEntitiesFromMapContainer(Handle mapContainerEntity) override; - bool insertIntoSequenceContainer(Handle sequenceContainerEntity, Handle entity) override; - bool insertIntoListContainer(Handle listContainerEntity, Handle entity, int index) override; - bool insertIntoMapContainer(Handle mapContainerEntity, Handle entity, const QString &key) override; - bool moveToAnotherSequenceContainer(Handle sequenceContainerEntity, Handle entity, Handle otherSequenceContainerEntity) override; - Handle takeFromSequenceContainer(Handle sequenceContainerEntity, Handle entity) override; - Handle takeFromListContainer(Handle listContainerEntity, int index) override; - Handle takeFromMapContainer(Handle mapContainerEntity, const QString &key) override; - bool rotateListContainer(Handle listContainerEntity, int leftIndex, int middleIndex, int rightIndex) override; - void setEntityProperty(Handle entity, Property property, const QVariant &value) override; - QVariant getEntityProperty(Handle entity, Property property) override; - bool spliceDataArray(Handle dataContainerEntity, int index, int length, const QVariantList &values) override; - QVariantList sliceDataArray(Handle dataContainerEntity, int index, int length) override; - int getSizeOfDataArray(Handle dataContainerEntity) override; - bool rotateDataArray(Handle dataContainerEntity, int leftIndex, int middleIndex, int rightIndex) override; - Handle getAssociatedSubEntity(Handle entity, Relationship relationship) override; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_BASICMODELSTRATEGY_H diff --git a/src/libs/application/dspxmodel/src/BasicModelStrategyEntity_p.h b/src/libs/application/dspxmodel/src/BasicModelStrategyEntity_p.h deleted file mode 100644 index 1dcf7555..00000000 --- a/src/libs/application/dspxmodel/src/BasicModelStrategyEntity_p.h +++ /dev/null @@ -1,125 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_BASICMODELSTRATEGYENTITY_P_H -#define DIFFSCOPE_DSPX_MODEL_BASICMODELSTRATEGYENTITY_P_H - -#include -#include -#include - -#include - -namespace dspx { - class BasicModelStrategyEntity : public QObject { - Q_OBJECT - public: - using QObject::QObject; - - ModelStrategy::Entity type{}; - - static inline BasicModelStrategyEntity *createByType(ModelStrategy::Entity type, QObject *parent); - }; - - class BasicModelStrategyItemEntity : public BasicModelStrategyEntity { - Q_OBJECT - public: - using BasicModelStrategyEntity::BasicModelStrategyEntity; - - QHash properties; - QHash associatedSubEntities; - }; - - class BasicModelStrategySequenceContainerEntity : public BasicModelStrategyEntity { - Q_OBJECT - public: - using BasicModelStrategyEntity::BasicModelStrategyEntity; - - QSet sequence; - }; - - class BasicModelStrategyListContainerEntity : public BasicModelStrategyEntity { - Q_OBJECT - public: - using BasicModelStrategyEntity::BasicModelStrategyEntity; - - QList list; - }; - - class BasicModelStrategyMapContainerEntity : public BasicModelStrategyEntity { - Q_OBJECT - public: - using BasicModelStrategyEntity::BasicModelStrategyEntity; - - QHash map; - }; - - class BasicModelStrategyDataArrayEntity : public BasicModelStrategyEntity { - Q_OBJECT - public: - using BasicModelStrategyEntity::BasicModelStrategyEntity; - - QVariantList data; - }; - - BasicModelStrategyEntity *BasicModelStrategyEntity::createByType(ModelStrategy::Entity type, QObject *parent) { - BasicModelStrategyEntity *obj; - switch (type) { - case ModelStrategy::EI_AudioClip: - case ModelStrategy::EI_Global: - case ModelStrategy::EI_KeySignature: - case ModelStrategy::EI_Label: - case ModelStrategy::EI_Note: - case ModelStrategy::EI_Param: - case ModelStrategy::EI_ParamCurveAnchor: - case ModelStrategy::EI_ParamCurveFree: - case ModelStrategy::EI_ParamCurveAnchorNode: - case ModelStrategy::EI_Phoneme: - case ModelStrategy::EI_SingingClip: - case ModelStrategy::EI_Source: - case ModelStrategy::EI_Tempo: - case ModelStrategy::EI_TimeSignature: - case ModelStrategy::EI_Track: - case ModelStrategy::EI_WorkspaceInfo: - obj = new BasicModelStrategyItemEntity(parent); - obj->type = type; - break; - case ModelStrategy::ES_Clips: - case ModelStrategy::ES_KeySignatures: - case ModelStrategy::ES_Labels: - case ModelStrategy::ES_Notes: - case ModelStrategy::ES_ParamCurveAnchorNodes: - case ModelStrategy::ES_ParamCurves: - case ModelStrategy::ES_Phonemes: - case ModelStrategy::ES_Tempos: - case ModelStrategy::ES_TimeSignatures: - obj = new BasicModelStrategySequenceContainerEntity(parent); - obj->type = type; - break; - case ModelStrategy::EL_Tracks: - obj = new BasicModelStrategyListContainerEntity(parent); - obj->type = type; - break; - case ModelStrategy::ED_ParamCurveFreeValues: - case ModelStrategy::ED_VibratoPoints: - obj = new BasicModelStrategyDataArrayEntity(parent); - obj->type = type; - break; - case ModelStrategy::EM_Params: - case ModelStrategy::EM_Sources: - case ModelStrategy::EM_Workspace: - obj = new BasicModelStrategyMapContainerEntity(parent); - obj->type = type; - break; - default: - Q_UNREACHABLE(); - } - return obj; - } - - template - T *handleCast(Handle entity) { - auto obj = qobject_cast(reinterpret_cast(entity.d)); - Q_ASSERT(obj); - return obj; - } -} - -#endif //DIFFSCOPE_DSPX_MODEL_BASICMODELSTRATEGYENTITY_P_H diff --git a/src/libs/application/dspxmodel/src/BusControl.cpp b/src/libs/application/dspxmodel/src/BusControl.cpp deleted file mode 100644 index e46599ee..00000000 --- a/src/libs/application/dspxmodel/src/BusControl.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "BusControl.h" - -#include - -#include - -namespace dspx { - - BusControl::BusControl(Handle handle, Model *model) : Control(handle, model) { - } - - BusControl::~BusControl() = default; - - opendspx::BusControl BusControl::toOpenDspx() const { - return { - .gain = SVS::DecibelLinearizer::gainToDecibels(gain()), - .pan = pan(), - .mute = mute() - }; - } - - void BusControl::fromOpenDspx(const opendspx::BusControl &control) { - setGain(SVS::DecibelLinearizer::decibelsToGain(control.gain)); - setPan(control.pan); - setMute(control.mute); - } - - void BusControl::handleProxySetEntityProperty(int property, const QVariant &value) { - Control::handleProxySetEntityProperty(property, value); - } - -} diff --git a/src/libs/application/dspxmodel/src/BusControl.h b/src/libs/application/dspxmodel/src/BusControl.h deleted file mode 100644 index 1a670911..00000000 --- a/src/libs/application/dspxmodel/src/BusControl.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_BUSCONTROL_H -#define DIFFSCOPE_DSPX_MODEL_BUSCONTROL_H - -#include - -namespace opendspx { - struct BusControl; -} - -namespace dspx { - - class BusControl : public Control { - Q_OBJECT - QML_ELEMENT - QML_UNCREATABLE("") - - public: - ~BusControl() override; - - opendspx::BusControl toOpenDspx() const; - void fromOpenDspx(const opendspx::BusControl &control); - - private: - friend class ModelPrivate; - explicit BusControl(Handle handle, Model *model); - void handleProxySetEntityProperty(int property, const QVariant &value); - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_BUSCONTROL_H diff --git a/src/libs/application/dspxmodel/src/CMakeLists.txt b/src/libs/application/dspxmodel/src/CMakeLists.txt deleted file mode 100644 index 6bececcf..00000000 --- a/src/libs/application/dspxmodel/src/CMakeLists.txt +++ /dev/null @@ -1,49 +0,0 @@ -project(dspxmodel VERSION ${APPLICATION_VERSION}) - -qm_import(Qml) - -file(GLOB_RECURSE _src *.h *.cpp) - -ck_add_library(${PROJECT_NAME} SHARED AUTOGEN) - -find_path(INTERVAL_TREE_INCLUDE_DIRS "interval-tree/interval_tree.hpp" REQUIRED) - -target_include_directories(${PROJECT_NAME} PUBLIC - "$" -) - -qm_configure_target(${PROJECT_NAME} - SOURCES ${_src} - LINKS opendspx::model - LINKS_PRIVATE svscraft::Core - QT_LINKS Core Gui Qml - QT_INCLUDE_PRIVATE Core Gui Qml - INCLUDE_PRIVATE * - PREFIX DSPX_MODEL -) - -if(QT_KNOWN_POLICY_QTP0001) - qt_policy(SET QTP0001 NEW) -endif() -if(QT_KNOWN_POLICY_QTP0004) - qt_policy(SET QTP0004 NEW) -endif() - -file(GLOB_RECURSE _qml_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.qml *.js *.mjs) - -qt_add_qml_module(${PROJECT_NAME} - URI DiffScope.DspxModel - QML_FILES ${_qml_files} - NAMESPACE dspx - OUTPUT_DIRECTORY ${QMSETUP_BUILD_DIR}/qml/DiffScope/DspxModel -) - -qm_install_qml_modules(${PROJECT_NAME}) - -ck_sync_include(${PROJECT_NAME} FORCE) - -set_target_properties(${PROJECT_NAME} PROPERTIES - CXX_STANDARD 20 - CXX_STANDARD_REQUIRED TRUE -) - diff --git a/src/libs/application/dspxmodel/src/Clip.cpp b/src/libs/application/dspxmodel/src/Clip.cpp deleted file mode 100644 index 90279b25..00000000 --- a/src/libs/application/dspxmodel/src/Clip.cpp +++ /dev/null @@ -1,186 +0,0 @@ -#include "Clip.h" -#include "Clip_p.h" - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace dspx { - - void ClipPrivate::setOverlapped(Clip *item, bool overlapped) { - auto d = item->d_func(); - if (d->overlapped != overlapped) { - d->overlapped = overlapped; - Q_EMIT item->overlappedChanged(overlapped); - } - } - - void ClipPrivate::setClipSequence(Clip *item, ClipSequence *clipSequence) { - auto d = item->d_func(); - if (d->clipSequence != clipSequence) { - d->clipSequence = clipSequence; - Q_EMIT item->clipSequenceChanged(); - } - } - - void ClipPrivate::setPreviousItem(Clip *item, Clip *previousItem) { - auto d = item->d_func(); - if (d->previousItem != previousItem) { - d->previousItem = previousItem; - Q_EMIT item->previousItemChanged(); - } - } - - void ClipPrivate::setNextItem(Clip *item, Clip *nextItem) { - auto d = item->d_func(); - if (d->nextItem != nextItem) { - d->nextItem = nextItem; - Q_EMIT item->nextItemChanged(); - } - } - - Clip::Clip(ClipType type, Handle handle, Model *model) : EntityObject(handle, model), d_ptr(new ClipPrivate) { - Q_D(Clip); - d->q_ptr = this; - d->pModel = ModelPrivate::get(model); - d->name = d->pModel->strategy->getEntityProperty(handle, ModelStrategy::P_Name).toString(); - d->control = d->pModel->createObject(handle); - d->time = d->pModel->createObject(handle); - d->type = type; - d->workspace = d->pModel->createObject(d->pModel->strategy->getAssociatedSubEntity(handle, ModelStrategy::R_Workspace)); - - connect(d->time, &ClipTime::startChanged, this, [this] { - Q_EMIT positionChanged(position()); - }); - connect(d->time, &ClipTime::clipStartChanged, this, [this] { - Q_EMIT positionChanged(position()); - }); - connect(d->time, &ClipTime::clipLenChanged, this, [this] { - Q_EMIT lengthChanged(length()); - }); - } - - Clip::~Clip() = default; - - QString Clip::name() const { - Q_D(const Clip); - return d->name; - } - - void Clip::setName(const QString &name) { - Q_D(Clip); - d->pModel->strategy->setEntityProperty(handle(), ModelStrategy::P_Name, name); - } - - BusControl *Clip::control() const { - Q_D(const Clip); - return d->control; - } - - ClipTime *Clip::time() const { - Q_D(const Clip); - return d->time; - } - - Clip::ClipType Clip::type() const { - Q_D(const Clip); - return d->type; - } - - Workspace *Clip::workspace() const { - Q_D(const Clip); - return d->workspace; - } - - opendspx::ClipRef Clip::toOpenDspx() const { - Q_D(const Clip); - switch (d->type) { - case Audio: - return std::make_shared(static_cast(this)->toOpenDspx()); - case Singing: - return std::make_shared(static_cast(this)->toOpenDspx()); - default: - Q_UNREACHABLE(); - } - } - - void Clip::fromOpenDspx(const opendspx::ClipRef &clip) { - switch (clip->type) { - case opendspx::Clip::Type::Audio: - static_cast(this)->fromOpenDspx(*std::static_pointer_cast(clip)); - break; - case opendspx::Clip::Type::Singing: - static_cast(this)->fromOpenDspx(*std::static_pointer_cast(clip)); - break; - default: - Q_UNREACHABLE(); - } - } - - ClipSequence *Clip::clipSequence() const { - Q_D(const Clip); - return d->clipSequence; - } - - Clip *Clip::previousItem() const { - Q_D(const Clip); - return d->previousItem; - } - - Clip *Clip::nextItem() const { - Q_D(const Clip); - return d->nextItem; - } - - int Clip::position() const { - Q_D(const Clip); - return d->time->start() + d->time->clipStart(); - } - - int Clip::length() const { - Q_D(const Clip); - return d->time->clipLen(); - } - - bool Clip::isOverlapped() const { - Q_D(const Clip); - return d->overlapped; - } - - void Clip::handleSetEntityProperty(int property, const QVariant &value) { - Q_D(Clip); - switch (property) { - case ModelStrategy::P_Name: { - d->name = value.toString(); - Q_EMIT nameChanged(d->name); - break; - } - case ModelStrategy::P_ControlGain: - case ModelStrategy::P_ControlPan: - case ModelStrategy::P_ControlMute: { - ModelPrivate::proxySetEntityPropertyNotify(d->control, property, value); - break; - } - case ModelStrategy::P_Position: - case ModelStrategy::P_Length: - case ModelStrategy::P_ClipStart: - case ModelStrategy::P_ClipLength: { - ModelPrivate::proxySetEntityPropertyNotify(d->time, property, value); - break; - } - default: - Q_UNREACHABLE(); - } - } -} - -#include "moc_Clip.cpp" diff --git a/src/libs/application/dspxmodel/src/Clip.h b/src/libs/application/dspxmodel/src/Clip.h deleted file mode 100644 index 3756e51c..00000000 --- a/src/libs/application/dspxmodel/src/Clip.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_CLIP_H -#define DIFFSCOPE_DSPX_MODEL_CLIP_H - -#include - -#include - -namespace opendspx { - struct Clip; - using ClipRef = std::shared_ptr; -} - -namespace dspx { - - class BusControl; - class ClipTime; - class Workspace; - class ClipSequence; - - class ClipPrivate; - - class DSPX_MODEL_EXPORT Clip : public EntityObject { - Q_OBJECT - QML_ELEMENT - QML_UNCREATABLE("") - Q_DECLARE_PRIVATE(Clip) - Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) - Q_PROPERTY(BusControl *control READ control CONSTANT) - Q_PROPERTY(ClipTime *time READ time CONSTANT) - Q_PROPERTY(ClipType type READ type CONSTANT) - Q_PROPERTY(Workspace *workspace READ workspace CONSTANT) - Q_PROPERTY(ClipSequence *clipSequence READ clipSequence NOTIFY clipSequenceChanged) - Q_PROPERTY(Clip *previousItem READ previousItem NOTIFY previousItemChanged) - Q_PROPERTY(Clip *nextItem READ nextItem NOTIFY nextItemChanged) - Q_PROPERTY(bool overlapped READ isOverlapped NOTIFY overlappedChanged) - public: - enum ClipType { - Audio, - Singing, - }; - Q_ENUM(ClipType) - - ~Clip() override; - - QString name() const; - void setName(const QString &name); - - BusControl *control() const; - - ClipTime *time() const; - - ClipType type() const; - - Workspace *workspace() const; - - opendspx::ClipRef toOpenDspx() const; - void fromOpenDspx(const opendspx::ClipRef &clip); - - ClipSequence *clipSequence() const; - - Clip *previousItem() const; - Clip *nextItem() const; - - int position() const; - - int length() const; - - bool isOverlapped() const; - - Q_SIGNALS: - void nameChanged(const QString &name); - void clipSequenceChanged(); - void previousItemChanged(); - void nextItemChanged(); - void positionChanged(int position); - void lengthChanged(int length); - void overlappedChanged(bool overlapped); - - protected: - explicit Clip(ClipType type, Handle handle, Model *model); - void handleSetEntityProperty(int property, const QVariant &value) override; - - private: - QScopedPointer d_ptr; - }; - -} // dspx - -#endif //DIFFSCOPE_DSPX_MODEL_CLIP_H diff --git a/src/libs/application/dspxmodel/src/ClipSequence.cpp b/src/libs/application/dspxmodel/src/ClipSequence.cpp deleted file mode 100644 index 36a0907b..00000000 --- a/src/libs/application/dspxmodel/src/ClipSequence.cpp +++ /dev/null @@ -1,198 +0,0 @@ -#include "ClipSequence.h" -#include "ClipSequence_p.h" - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace dspx { - - void ClipSequencePrivate::handleMoveFromAnotherSequenceContainer(Handle entity, Handle otherSequenceContainerEntity) { - auto q = q_ptr; - auto item = getItem(entity, true); - if (!pointContainer.contains(item)) { - QObject::connect(item, &Clip::positionChanged, q, [=](int pos) { - int length = item->length(); - insertItem(item, pos, length); - }); - QObject::connect(item, &Clip::lengthChanged, q, [=](int len) { - int position = item->position(); - insertItem(item, position, len); - }); - QObject::connect(item, &QObject::destroyed, q, [=] { - removeItem(item); - }); - } - auto otherClipSequence = qobject_cast(pModel->mapToObject(otherSequenceContainerEntity)); - bool containsItem = pointContainer.contains(item); - if (!containsItem) { - Q_EMIT q->itemAboutToInsert(item, otherClipSequence); - } - - pointContainer.insertItem(item, item->position()); - ClipPrivate::setClipSequence(item, q); - auto affectedItems = rangeContainer.insertItem(item, item->position(), item->length()); - - for (auto affectedItem : affectedItems) { - bool isOverlapped = rangeContainer.isOverlapped(affectedItem); - ClipPrivate::setOverlapped(affectedItem, isOverlapped); - } - - if (!containsItem) { - updateFirstAndLastItem(); - Q_EMIT q->itemInserted(item, otherClipSequence); - Q_EMIT q->sizeChanged(pointContainer.size()); - } - } - - void ClipSequencePrivate::handleMoveToAnotherSequenceContainer(Handle entity, Handle otherSequenceContainerEntity) { - auto q = q_ptr; - auto item = getItem(entity, false); - if (item) { - QObject::disconnect(item, nullptr, q, nullptr); - auto otherClipSequence = qobject_cast(pModel->mapToObject(otherSequenceContainerEntity)); - Q_EMIT q->itemAboutToRemove(item, otherClipSequence); - - pointContainer.removeItem(item); - ClipPrivate::setClipSequence(item, otherClipSequence); - auto affectedItems = rangeContainer.removeItem(item); - - for (auto affectedItem : affectedItems) { - bool isOverlapped = rangeContainer.isOverlapped(affectedItem); - ClipPrivate::setOverlapped(affectedItem, isOverlapped); - } - - updateFirstAndLastItem(); - Q_EMIT q->itemRemoved(item, otherClipSequence); - Q_EMIT q->sizeChanged(pointContainer.size()); - } - } - - ClipSequence::ClipSequence(Track *track, Handle handle, Model *model) : EntityObject(handle, model), d_ptr(new ClipSequencePrivate) { - Q_D(ClipSequence); - Q_ASSERT(model->strategy()->getEntityType(handle) == ModelStrategy::ES_Clips); - d->q_ptr = this; - d->pModel = ModelPrivate::get(model); - d->track = track; - - d->init(model->strategy()->getEntitiesFromSequenceContainer(handle)); - } - - ClipSequence::~ClipSequence() = default; - - int ClipSequence::size() const { - Q_D(const ClipSequence); - return d->pointContainer.size(); - } - - Clip *ClipSequence::firstItem() const { - Q_D(const ClipSequence); - return d->firstItem; - } - - Clip *ClipSequence::lastItem() const { - Q_D(const ClipSequence); - return d->lastItem; - } - - Track *ClipSequence::track() const { - Q_D(const ClipSequence); - return d->track; - } - - Clip *ClipSequence::previousItem(Clip *item) const { - Q_D(const ClipSequence); - return d->pointContainer.previousItem(item); - } - - Clip *ClipSequence::nextItem(Clip *item) const { - Q_D(const ClipSequence); - return d->pointContainer.nextItem(item); - } - - QList ClipSequence::slice(int position, int length) const { - Q_D(const ClipSequence); - return d->rangeContainer.slice(position, length); - } - - bool ClipSequence::contains(Clip *item) const { - Q_D(const ClipSequence); - return d->pointContainer.contains(item); - } - - bool ClipSequence::insertItem(Clip *item) { - Q_D(ClipSequence); - return d->pModel->strategy->insertIntoSequenceContainer(handle(), item->handle()); - } - - bool ClipSequence::removeItem(Clip *item) { - Q_D(ClipSequence); - return d->pModel->strategy->takeFromSequenceContainer(handle(), item->handle()); - } - - bool ClipSequence::moveToAnotherClipSequence(Clip *item, ClipSequence *sequence) { - Q_D(ClipSequence); - return d->pModel->strategy->moveToAnotherSequenceContainer(handle(), item->handle(), sequence->handle()); - } - - std::vector ClipSequence::toOpenDspx() const { - Q_D(const ClipSequence); - std::vector ret; - ret.reserve(d->pointContainer.size()); - for (const auto &[_, item] : d->pointContainer.m_items) { - ret.push_back(item->toOpenDspx()); - } - return ret; - } - - void ClipSequence::fromOpenDspx(const std::vector &clips) { - while (size()) { - removeItem(firstItem()); - } - for (const auto &clip : clips) { - Clip *item = nullptr; - switch (clip->type) { - case opendspx::Clip::Type::Audio: - item = model()->createAudioClip(); - break; - case opendspx::Clip::Type::Singing: - item = model()->createSingingClip(); - break; - default: - Q_UNREACHABLE(); - } - item->fromOpenDspx(clip); - insertItem(item); - } - } - - void ClipSequence::handleInsertIntoSequenceContainer(Handle entity) { - Q_D(ClipSequence); - d->handleInsertIntoSequenceContainer(entity); - } - - void ClipSequence::handleTakeFromSequenceContainer(Handle takenEntity, Handle entity) { - Q_D(ClipSequence); - d->handleTakeFromSequenceContainer(takenEntity, entity); - } - void ClipSequence::handleMoveFromAnotherSequenceContainer(Handle entity, Handle otherSequenceContainerEntity) { - Q_D(ClipSequence); - d->handleMoveFromAnotherSequenceContainer(entity, otherSequenceContainerEntity); - } - void ClipSequence::handleMoveToAnotherSequenceContainer(Handle entity, Handle otherSequenceContainerEntity) { - Q_D(ClipSequence); - d->handleMoveToAnotherSequenceContainer(entity, otherSequenceContainerEntity); - } - -} - -#include "moc_ClipSequence.cpp" diff --git a/src/libs/application/dspxmodel/src/ClipSequence.h b/src/libs/application/dspxmodel/src/ClipSequence.h deleted file mode 100644 index 3df51ae0..00000000 --- a/src/libs/application/dspxmodel/src/ClipSequence.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_CLIPSEQUENCE_H -#define DIFFSCOPE_DSPX_MODEL_CLIPSEQUENCE_H - -#include - -#include -#include - -namespace opendspx { - struct Clip; - using ClipRef = std::shared_ptr; -} - -namespace dspx { - - class Clip; - class Track; - - class ClipSequencePrivate; - - class DSPX_MODEL_EXPORT ClipSequence : public EntityObject { - Q_OBJECT - QML_ELEMENT - QML_UNCREATABLE("") - Q_DECLARE_PRIVATE(ClipSequence) - Q_PROPERTY(int size READ size NOTIFY sizeChanged) - Q_PROPERTY(Clip *firstItem READ firstItem NOTIFY firstItemChanged) - Q_PROPERTY(Clip *lastItem READ lastItem NOTIFY lastItemChanged) - Q_PROPERTY(Track *track READ track CONSTANT) - Q_PRIVATE_PROPERTY(d_func(), QJSValue iterable READ iterable CONSTANT) - public: - ~ClipSequence() override; - - int size() const; - Clip *firstItem() const; - Clip *lastItem() const; - Q_INVOKABLE Clip *previousItem(Clip *item) const; - Q_INVOKABLE Clip *nextItem(Clip *item) const; - Q_INVOKABLE QList slice(int position, int length) const; - Q_INVOKABLE bool contains(Clip *item) const; - - Q_INVOKABLE bool insertItem(Clip *item); - Q_INVOKABLE bool removeItem(Clip *item); - Q_INVOKABLE bool moveToAnotherClipSequence(Clip *item, ClipSequence *sequence); - - std::vector toOpenDspx() const; - void fromOpenDspx(const std::vector &clips); - - Track *track() const; - - auto asRange() const { - return impl::SequenceRange(this); - } - - Q_SIGNALS: - void itemAboutToInsert(Clip *item, ClipSequence *clipSequenceFromWhichMoved = nullptr); - void itemInserted(Clip *item, ClipSequence *clipSequenceFromWhichMoved = nullptr); - void itemAboutToRemove(Clip *item, ClipSequence *clipSequenceToWhichMoved = nullptr); - void itemRemoved(Clip *item, ClipSequence *clipSequenceToWhichMoved = nullptr); - void sizeChanged(int size); - void firstItemChanged(Clip *item); - void lastItemChanged(Clip *item); - - protected: - void handleInsertIntoSequenceContainer(Handle entity) override; - void handleTakeFromSequenceContainer(Handle takenEntity, Handle entity) override; - void handleMoveFromAnotherSequenceContainer(Handle entity, Handle otherSequenceContainerEntity) override; - void handleMoveToAnotherSequenceContainer(Handle entity, Handle otherSequenceContainerEntity) override; - - private: - friend class ModelPrivate; - explicit ClipSequence(Track *track, Handle handle, Model *model); - QScopedPointer d_ptr; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_CLIPSEQUENCE_H diff --git a/src/libs/application/dspxmodel/src/ClipSequence_p.h b/src/libs/application/dspxmodel/src/ClipSequence_p.h deleted file mode 100644 index 78f7d8cd..00000000 --- a/src/libs/application/dspxmodel/src/ClipSequence_p.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_CLIPSEQUENCE_P_H -#define DIFFSCOPE_DSPX_MODEL_CLIPSEQUENCE_P_H - -#include - -#include -#include - -namespace dspx { - - class ClipSequencePrivate : public RangeSequenceData { - Q_DECLARE_PUBLIC(ClipSequence) - public: - Track *track{}; - - void handleMoveFromAnotherSequenceContainer(Handle entity, Handle otherSequenceContainerEntity); - void handleMoveToAnotherSequenceContainer(Handle entity, Handle otherSequenceContainerEntity); - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_CLIPSEQUENCE_P_H diff --git a/src/libs/application/dspxmodel/src/ClipTime.cpp b/src/libs/application/dspxmodel/src/ClipTime.cpp deleted file mode 100644 index 0a786bbb..00000000 --- a/src/libs/application/dspxmodel/src/ClipTime.cpp +++ /dev/null @@ -1,128 +0,0 @@ -#include "ClipTime.h" -#include - -#include - -#include -#include - -namespace dspx { - - class ClipTimePrivate { - Q_DECLARE_PUBLIC(ClipTime) - public: - ClipTime *q_ptr; - ModelPrivate *pModel; - Handle handle; - - int start; - int length; - int clipStart; - int clipLen; - }; - - - - ClipTime::ClipTime(Handle handle, Model *model) : QObject(model), d_ptr(new ClipTimePrivate) { - Q_D(ClipTime); - d->q_ptr = this; - d->pModel = ModelPrivate::get(model); - d->handle = handle; - d->start = d->pModel->strategy->getEntityProperty(handle, ModelStrategy::P_Position).toInt(); - d->length = d->pModel->strategy->getEntityProperty(handle, ModelStrategy::P_Length).toInt(); - d->clipStart = d->pModel->strategy->getEntityProperty(handle, ModelStrategy::P_ClipStart).toInt(); - d->clipLen = d->pModel->strategy->getEntityProperty(handle, ModelStrategy::P_ClipLength).toInt(); - } - - ClipTime::~ClipTime() = default; - - int ClipTime::start() const { - Q_D(const ClipTime); - return d->start; - } - - void ClipTime::setStart(int start) { - Q_D(ClipTime); - d->pModel->strategy->setEntityProperty(d->handle, ModelStrategy::P_Position, start); - } - - int ClipTime::length() const { - Q_D(const ClipTime); - return d->length; - } - - void ClipTime::setLength(int length) { - Q_D(ClipTime); - Q_ASSERT(length >= 0); - d->pModel->strategy->setEntityProperty(d->handle, ModelStrategy::P_Length, length); - } - - int ClipTime::clipStart() const { - Q_D(const ClipTime); - return d->clipStart; - } - - void ClipTime::setClipStart(int clipStart) { - Q_D(ClipTime); - Q_ASSERT(clipStart >= 0); - d->pModel->strategy->setEntityProperty(d->handle, ModelStrategy::P_ClipStart, clipStart); - } - - int ClipTime::clipLen() const { - Q_D(const ClipTime); - return d->clipLen; - } - - void ClipTime::setClipLen(int clipLen) { - Q_D(ClipTime); - Q_ASSERT(clipLen >= 0); - d->pModel->strategy->setEntityProperty(d->handle, ModelStrategy::P_ClipLength, clipLen); - } - - opendspx::ClipTime ClipTime::toOpenDspx() const { - return { - .pos = start() + clipStart(), - .length = length(), - .clipStart = clipStart(), - .clipLen = clipLen() - }; - } - - void ClipTime::fromOpenDspx(const opendspx::ClipTime &clipTime) { - setStart(clipTime.pos - clipTime.clipStart); - setLength(clipTime.length); - setClipStart(clipTime.clipStart); - setClipLen(clipTime.clipLen); - } - - void ClipTime::handleProxySetEntityProperty(int property, const QVariant &value) { - Q_D(ClipTime); - switch (property) { - case ModelStrategy::P_Position: { - d->start = value.toInt(); - Q_EMIT startChanged(d->start); - break; - } - case ModelStrategy::P_Length: { - d->length = value.toInt(); - Q_EMIT lengthChanged(d->length); - break; - } - case ModelStrategy::P_ClipStart: { - d->clipStart = value.toInt(); - Q_EMIT clipStartChanged(d->clipStart); - break; - } - case ModelStrategy::P_ClipLength: { - d->clipLen = value.toInt(); - Q_EMIT clipLenChanged(d->clipLen); - break; - } - default: - Q_UNREACHABLE(); - } - } - -} - -#include "moc_ClipTime.cpp" diff --git a/src/libs/application/dspxmodel/src/ClipTime.h b/src/libs/application/dspxmodel/src/ClipTime.h deleted file mode 100644 index 12e0dcf5..00000000 --- a/src/libs/application/dspxmodel/src/ClipTime.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_CLIPTIME_H -#define DIFFSCOPE_DSPX_MODEL_CLIPTIME_H - -#include - -#include - -#include - -namespace opendspx { - struct ClipTime; -} - -namespace dspx { - - class Model; - class ModelPrivate; - - class ClipTimePrivate; - - class DSPX_MODEL_EXPORT ClipTime : public QObject { - Q_OBJECT - QML_ELEMENT - QML_UNCREATABLE("") - Q_DECLARE_PRIVATE(ClipTime) - Q_PROPERTY(int start READ start WRITE setStart NOTIFY startChanged) - Q_PROPERTY(int length READ length WRITE setLength NOTIFY lengthChanged) - Q_PROPERTY(int clipStart READ clipStart WRITE setClipStart NOTIFY clipStartChanged) - Q_PROPERTY(int clipLen READ clipLen WRITE setClipLen NOTIFY clipLenChanged) - - public: - ~ClipTime() override; - - int start() const; - void setStart(int start); - - int length() const; - void setLength(int length); - - int clipStart() const; - void setClipStart(int clipStart); - - int clipLen() const; - void setClipLen(int clipLen); - - opendspx::ClipTime toOpenDspx() const; - void fromOpenDspx(const opendspx::ClipTime &clipTime); - - Q_SIGNALS: - void startChanged(int start); - void lengthChanged(int length); - void clipStartChanged(int clipStart); - void clipLenChanged(int clipLen); - - private: - friend class ModelPrivate; - explicit ClipTime(Handle handle, Model *model); - void handleProxySetEntityProperty(int property, const QVariant &value); - QScopedPointer d_ptr; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_CLIPTIME_H diff --git a/src/libs/application/dspxmodel/src/Clip_p.h b/src/libs/application/dspxmodel/src/Clip_p.h deleted file mode 100644 index a2e8cba5..00000000 --- a/src/libs/application/dspxmodel/src/Clip_p.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_CLIP_P_H -#define DIFFSCOPE_DSPX_MODEL_CLIP_P_H - -#include - -namespace dspx { - - class ClipPrivate { - Q_DECLARE_PUBLIC(Clip) - public: - Clip *q_ptr; - ModelPrivate *pModel; - QString name; - BusControl *control; - ClipTime *time; - Clip::ClipType type; - ClipSequence *clipSequence{}; - Clip *previousItem{}; - Clip *nextItem{}; - Workspace *workspace; - bool overlapped{}; - - static void setOverlapped(Clip *item, bool overlapped); - static void setClipSequence(Clip *item, ClipSequence *clipSequence); - static void setPreviousItem(Clip *item, Clip *previousItem); - static void setNextItem(Clip *item, Clip *nextItem); - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_CLIP_P_H diff --git a/src/libs/application/dspxmodel/src/Control.cpp b/src/libs/application/dspxmodel/src/Control.cpp deleted file mode 100644 index 4d8beb45..00000000 --- a/src/libs/application/dspxmodel/src/Control.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include "Control.h" -#include - -#include -#include - -namespace dspx { - - class ControlPrivate { - Q_DECLARE_PUBLIC(Control) - public: - Control *q_ptr; - ModelPrivate *pModel; - Handle handle; - - double gain; - double pan; - bool mute; - - - }; - - - - Control::Control(Handle handle, Model *model) : QObject(model), d_ptr(new ControlPrivate) { - Q_D(Control); - d->q_ptr = this; - d->pModel = ModelPrivate::get(model); - d->handle = handle; - d->gain = d->pModel->strategy->getEntityProperty(handle, ModelStrategy::P_ControlGain).toDouble(); - d->pan = d->pModel->strategy->getEntityProperty(handle, ModelStrategy::P_ControlPan).toDouble(); - d->mute = d->pModel->strategy->getEntityProperty(handle, ModelStrategy::P_ControlMute).toBool(); - } - - Control::~Control() = default; - - double Control::gain() const { - Q_D(const Control); - return d->gain; - } - - void Control::setGain(double gain) { - Q_D(Control); - Q_ASSERT(gain >= 0.0); - d->pModel->strategy->setEntityProperty(d->handle, ModelStrategy::P_ControlGain, gain); - } - - double Control::pan() const { - Q_D(const Control); - return d->pan; - } - - void Control::setPan(double pan) { - Q_D(Control); - Q_ASSERT(pan >= -1.0 && pan <= 1.0); - d->pModel->strategy->setEntityProperty(d->handle, ModelStrategy::P_ControlPan, pan); - } - - bool Control::mute() const { - Q_D(const Control); - return d->mute; - } - - void Control::setMute(bool mute) { - Q_D(Control); - d->pModel->strategy->setEntityProperty(d->handle, ModelStrategy::P_ControlMute, mute); - } - - void Control::handleProxySetEntityProperty(int property, const QVariant &value) { - Q_D(Control); - switch (property) { - case ModelStrategy::P_ControlGain: { - d->gain = value.toDouble(); - Q_EMIT gainChanged(d->gain); - break; - } - case ModelStrategy::P_ControlPan: { - d->pan = value.toDouble(); - Q_EMIT panChanged(d->pan); - break; - } - case ModelStrategy::P_ControlMute: { - d->mute = value.toBool(); - Q_EMIT muteChanged(d->mute); - break; - } - default: - Q_UNREACHABLE(); - } - } - - Handle Control::handle() const { - Q_D(const Control); - return d->handle; - } - -} - -#include "moc_Control.cpp" diff --git a/src/libs/application/dspxmodel/src/Control.h b/src/libs/application/dspxmodel/src/Control.h deleted file mode 100644 index d0330ec7..00000000 --- a/src/libs/application/dspxmodel/src/Control.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_CONTROL_H -#define DIFFSCOPE_DSPX_MODEL_CONTROL_H - -#include - -#include - -#include - -namespace dspx { - - class Model; - class ModelPrivate; - - class ControlPrivate; - - class DSPX_MODEL_EXPORT Control : public QObject { - Q_OBJECT - QML_ELEMENT - QML_UNCREATABLE("") - Q_DECLARE_PRIVATE(Control) - Q_PROPERTY(double gain READ gain WRITE setGain NOTIFY gainChanged) - Q_PROPERTY(double pan READ pan WRITE setPan NOTIFY panChanged) - Q_PROPERTY(bool mute READ mute WRITE setMute NOTIFY muteChanged) - - public: - ~Control() override; - - double gain() const; - void setGain(double gain); - - double pan() const; - void setPan(double pan); - - bool mute() const; - void setMute(bool mute); - - Q_SIGNALS: - void gainChanged(double gain); - void panChanged(double pan); - void muteChanged(bool mute); - - protected: - explicit Control(Handle handle, Model *model); - void handleProxySetEntityProperty(int property, const QVariant &value); - Handle handle() const; - - private: - QScopedPointer d_ptr; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_CONTROL_H diff --git a/src/libs/application/dspxmodel/src/DataArrayData.cpp b/src/libs/application/dspxmodel/src/DataArrayData.cpp deleted file mode 100644 index 06a7f4df..00000000 --- a/src/libs/application/dspxmodel/src/DataArrayData.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include "DataArrayData_p.h" - -#include - -namespace dspx { - - QJSValue DataArrayJSIterable::create(QObject *o) { - auto engine = qjsEngine(o); - if (!engine) { - qFatal() << "iterable() can only be called from QML"; - return {}; - } - auto listIterableConstructor = engine->importModule(":/qt/qml/DiffScope/DspxModel/qml/iterable.mjs").property("DataArrayIterable"); - Q_ASSERT(listIterableConstructor.isCallable()); - auto iterable = listIterableConstructor.callAsConstructor({engine->fromVariant(QVariant::fromValue(o))}); - if (iterable.isError()) { - qFatal() << iterable.property("message").toString(); - return {}; - } - return iterable; - } - -} diff --git a/src/libs/application/dspxmodel/src/DataArrayData_p.h b/src/libs/application/dspxmodel/src/DataArrayData_p.h deleted file mode 100644 index 0d7c261e..00000000 --- a/src/libs/application/dspxmodel/src/DataArrayData_p.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_DATAARRAYDATA_P_H -#define DIFFSCOPE_DSPX_MODEL_DATAARRAYDATA_P_H - -#include - -#include -#include - -#include -#include - -namespace dspx { - - class DataArrayJSIterable { - public: - static QJSValue create(QObject *o); - }; - - template - class DataArrayData { - public: - DataArrayType *q_ptr; - ModelPrivate *pModel; - QList data; - QJSValue iterable_; - - void init(const QVariantList &values) { - for (auto v : values) { - data.append(v.value()); - } - } - - int size() const { - return data.size(); - } - - void handleSpliceDataArray(int index, int length, const QList &values) { - auto q = q_ptr; - Q_EMIT q->aboutToSplice(index, length, values); - SpliceHelper::splice(data, data.begin() + index, data.begin() + index + length, values.begin(), values.end()); - Q_EMIT q->spliced(index, length, values); - if (values.size() != length) { - Q_EMIT q->sizeChanged(size()); - } - } - - void handleRotateDataArray(int leftIndex, int middleIndex, int rightIndex) { - auto q = q_ptr; - Q_EMIT q->aboutToRotate(leftIndex, middleIndex, rightIndex); - std::rotate(data.begin() + leftIndex, data.begin() + middleIndex, data.begin() + rightIndex); - Q_EMIT q->rotated(leftIndex, middleIndex, rightIndex); - } - - QJSValue iterable() { - if (!iterable_.isUndefined()) { - return iterable_; - } - auto q = q_ptr; - iterable_ = DataArrayJSIterable::create(q); - return iterable_; - } - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_DATAARRAYDATA_P_H diff --git a/src/libs/application/dspxmodel/src/DspxModelGlobal.h b/src/libs/application/dspxmodel/src/DspxModelGlobal.h deleted file mode 100644 index b61a80f8..00000000 --- a/src/libs/application/dspxmodel/src/DspxModelGlobal.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_DSPXMODELGLOBAL_H -#define DIFFSCOPE_DSPX_MODEL_DSPXMODELGLOBAL_H - -#include - -#if defined(DSPXMODEL_LIBRARY) -# define DSPX_MODEL_EXPORT Q_DECL_EXPORT -#else -# define DSPX_MODEL_EXPORT Q_DECL_IMPORT -#endif - -#endif //DIFFSCOPE_DSPX_MODEL_DSPXMODELGLOBAL_H diff --git a/src/libs/application/dspxmodel/src/EntityObject.cpp b/src/libs/application/dspxmodel/src/EntityObject.cpp deleted file mode 100644 index 75019821..00000000 --- a/src/libs/application/dspxmodel/src/EntityObject.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include "EntityObject.h" -#include "EntityObject_p.h" - -#include -#include -#include - -namespace dspx { - - EntityObject::EntityObject(Handle handle, Model *model) : EntityObject(model) { - Q_D(EntityObject); - d->handle = handle; - d->model = model; - auto pModel = ModelPrivate::get(model); - pModel->objectMap.insert(handle, this); - pModel->handleMap.insert(this, handle); - } - EntityObject::EntityObject(QObject *parent) : QObject(parent), d_ptr(new EntityObjectPrivate) { - Q_D(EntityObject); - d->q_ptr = this; - } - EntityObject::~EntityObject() { - Q_D(EntityObject); - if (d->model && d->handle) { - Q_ASSERT(false && "EntityObject::~EntityObject: handle is not null. You should call Model::destroyItem() to delete EntityObject."); - } - } - - Model *EntityObject::model() const { - Q_D(const EntityObject); - return d->model; - } - - Handle EntityObject::handle() const { - Q_D(const EntityObject); - return d->handle; - } - - void EntityObject::handleInsertIntoSequenceContainer(Handle entity) { - Q_UNREACHABLE(); - } - void EntityObject::handleInsertIntoListContainer(Handle entity, int index) { - Q_UNREACHABLE(); - } - void EntityObject::handleInsertIntoMapContainer(Handle entity, const QString &key) { - Q_UNREACHABLE(); - } - void EntityObject::handleMoveToAnotherSequenceContainer(Handle entity, Handle otherSequenceContainerEntity) { - Q_UNREACHABLE(); - } - void EntityObject::handleMoveFromAnotherSequenceContainer(Handle entity, Handle otherSequenceContainerEntity) { - Q_UNREACHABLE(); - } - void EntityObject::handleTakeFromSequenceContainer(Handle takenEntity, Handle entity) { - Q_UNREACHABLE(); - } - void EntityObject::handleTakeFromListContainer(Handle takenEntity, int index) { - Q_UNREACHABLE(); - } - void EntityObject::handleTakeFromMapContainer(Handle takenEntity, const QString &key) { - Q_UNREACHABLE(); - } - void EntityObject::handleRotateListContainer(int leftIndex, int middleIndex, int rightIndex) { - Q_UNREACHABLE(); - } - void EntityObject::handleSetEntityProperty(int property, const QVariant &value) { - Q_UNREACHABLE(); - } - void EntityObject::handleSpliceDataArray(int index, int length, const QVariantList &values) { - Q_UNREACHABLE(); - } - void EntityObject::handleRotateDataArray(int leftIndex, int middleIndex, int rightIndex) { - Q_UNREACHABLE(); - } -} - -#include "moc_EntityObject.cpp" diff --git a/src/libs/application/dspxmodel/src/EntityObject.h b/src/libs/application/dspxmodel/src/EntityObject.h deleted file mode 100644 index c4cb85a8..00000000 --- a/src/libs/application/dspxmodel/src/EntityObject.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_ENTITYOBJECT_H -#define DIFFSCOPE_DSPX_MODEL_ENTITYOBJECT_H - -#include - -#include -#include - -namespace dspx { - - class Model; - class ModelPrivate; - - class EntityObjectPrivate; - - class DSPX_MODEL_EXPORT EntityObject : public QObject { - Q_OBJECT - Q_DECLARE_PRIVATE(EntityObject); - Q_PROPERTY(Model *model READ model CONSTANT) - public: - ~EntityObject() override; - - Handle handle() const; - - Model *model() const; - - protected: - virtual void handleInsertIntoSequenceContainer(Handle entity); - virtual void handleInsertIntoListContainer(Handle entities, int index); - virtual void handleInsertIntoMapContainer(Handle entity, const QString &key); - - virtual void handleMoveToAnotherSequenceContainer(Handle entity, Handle otherSequenceContainerEntity); - virtual void handleMoveFromAnotherSequenceContainer(Handle entity, Handle otherSequenceContainerEntity); - - virtual void handleTakeFromSequenceContainer(Handle takenEntity, Handle entity); - virtual void handleTakeFromListContainer(Handle takenEntities, int index); - virtual void handleTakeFromMapContainer(Handle takenEntity, const QString &key); - virtual void handleRotateListContainer(int leftIndex, int middleIndex, int rightIndex); - - virtual void handleSetEntityProperty(int property, const QVariant &value); - - virtual void handleSpliceDataArray(int index, int length, const QVariantList &values); - virtual void handleRotateDataArray(int leftIndex, int middleIndex, int rightIndex); - - explicit EntityObject(Handle handle, Model *model); - - private: - friend class Model; - friend class ModelPrivate; - explicit EntityObject(QObject *parent = nullptr); - QScopedPointer d_ptr; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_ENTITYOBJECT_H diff --git a/src/libs/application/dspxmodel/src/EntityObject_p.h b/src/libs/application/dspxmodel/src/EntityObject_p.h deleted file mode 100644 index dd2c4783..00000000 --- a/src/libs/application/dspxmodel/src/EntityObject_p.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_ENTITYOBJECT_P_H -#define DIFFSCOPE_DSPX_MODEL_ENTITYOBJECT_P_H - -#include - -#include - -namespace dspx { - - class EntityObjectPrivate { - Q_DECLARE_PUBLIC(EntityObject) - public: - EntityObject *q_ptr; - QPointer model{}; - Handle handle; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_ENTITYOBJECT_P_H diff --git a/src/libs/application/dspxmodel/src/FreeValueDataArray.cpp b/src/libs/application/dspxmodel/src/FreeValueDataArray.cpp deleted file mode 100644 index 26cc8353..00000000 --- a/src/libs/application/dspxmodel/src/FreeValueDataArray.cpp +++ /dev/null @@ -1,83 +0,0 @@ -#include "FreeValueDataArray.h" - -#include -#include -#include - -namespace dspx { - - class FreeValueDataArrayPrivate : public DataArrayData { - Q_DECLARE_PUBLIC(FreeValueDataArray) - public: - ParamCurveFree *paramCurveFree{}; - }; - - FreeValueDataArray::FreeValueDataArray(ParamCurveFree *paramCurveFree, Handle handle, Model *model) : EntityObject(handle, model), d_ptr(new FreeValueDataArrayPrivate) { - Q_D(FreeValueDataArray); - Q_ASSERT(model->strategy()->getEntityType(handle) == ModelStrategy::ED_ParamCurveFreeValues); - d->q_ptr = this; - d->pModel = ModelPrivate::get(model); - d->paramCurveFree = paramCurveFree; - - d->init(model->strategy()->sliceDataArray(handle, 0, model->strategy()->getSizeOfDataArray(handle))); - } - - FreeValueDataArray::~FreeValueDataArray() = default; - - int FreeValueDataArray::size() const { - Q_D(const FreeValueDataArray); - return d->size(); - } - - bool FreeValueDataArray::splice(int index, int length, const QList &values) { - Q_D(FreeValueDataArray); - QVariantList a; - a.resize(values.size()); - std::ranges::transform(values, a.begin(), [](int v) { return QVariant(v); }); - return d->pModel->strategy->spliceDataArray(handle(), index, length, a); - } - - QList FreeValueDataArray::slice(int index, int length) const { - Q_D(const FreeValueDataArray); - if (index < 0 || index >= size()) - return {}; - return d->data.mid(index, length); - } - - bool FreeValueDataArray::rotate(int leftIndex, int middleIndex, int rightIndex) { - Q_D(FreeValueDataArray); - return d->pModel->strategy->rotateDataArray(handle(), leftIndex, middleIndex, rightIndex); - } - - std::vector FreeValueDataArray::toOpenDspx() const { - Q_D(const FreeValueDataArray); - return std::vector(d->data.cbegin(), d->data.cend()); - } - - void FreeValueDataArray::fromOpenDspx(const std::vector &values) { - splice(0, size(), QList(values.begin(), values.end())); - } - - void FreeValueDataArray::handleSpliceDataArray(int index, int length, const QVariantList &values) { - Q_D(FreeValueDataArray); - QList a; - a.resize(values.size()); - std::ranges::transform(values, a.begin(), [](const QVariant &v) { return v.toInt(); }); - d->handleSpliceDataArray(index, length, a); - } - - void FreeValueDataArray::handleRotateDataArray(int leftIndex, int middleIndex, int rightIndex) { - Q_D(FreeValueDataArray); - d->handleRotateDataArray(leftIndex, middleIndex, rightIndex); - } - - ParamCurveFree *FreeValueDataArray::paramCurveFree() const { - Q_D(const FreeValueDataArray); - return d->paramCurveFree; - } - - - -} - -#include "moc_FreeValueDataArray.cpp" diff --git a/src/libs/application/dspxmodel/src/FreeValueDataArray.h b/src/libs/application/dspxmodel/src/FreeValueDataArray.h deleted file mode 100644 index c3c5c819..00000000 --- a/src/libs/application/dspxmodel/src/FreeValueDataArray.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_FREEVALUEDATAARRAY_H -#define DIFFSCOPE_DSPX_MODEL_FREEVALUEDATAARRAY_H - -#include - -#include - -namespace dspx { - - class ParamCurveFree; - - class FreeValueDataArrayPrivate; - - class DSPX_MODEL_EXPORT FreeValueDataArray : public EntityObject { - Q_OBJECT - QML_ELEMENT - QML_UNCREATABLE("") - Q_DECLARE_PRIVATE(FreeValueDataArray) - Q_PROPERTY(int size READ size NOTIFY sizeChanged) - Q_PROPERTY(ParamCurveFree *paramCurveFree READ paramCurveFree CONSTANT) - Q_PRIVATE_PROPERTY(d_func(), QJSValue iterable READ iterable CONSTANT) - - public: - ~FreeValueDataArray() override; - - int size() const; - Q_INVOKABLE bool splice(int index, int length, const QList &values); - Q_INVOKABLE QList slice(int index, int length) const; - Q_INVOKABLE bool rotate(int leftIndex, int middleIndex, int rightIndex); - - std::vector toOpenDspx() const; - void fromOpenDspx(const std::vector &values); - - ParamCurveFree *paramCurveFree() const; - - Q_SIGNALS: - void sizeChanged(int size); - void aboutToSplice(int index, int length, const QList &values); - void spliced(int index, int length, const QList &values); - void aboutToRotate(int leftIndex, int middleIndex, int rightIndex); - void rotated(int leftIndex, int middleIndex, int rightIndex); - - protected: - void handleSpliceDataArray(int index, int length, const QVariantList &values) override; - void handleRotateDataArray(int leftIndex, int middleIndex, int rightIndex) override; - - private: - friend class ModelPrivate; - explicit FreeValueDataArray(ParamCurveFree *paramCurveFree, Handle handle, Model *model); - QScopedPointer d_ptr; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_FREEVALUEDATAARRAY_H diff --git a/src/libs/application/dspxmodel/src/Global.cpp b/src/libs/application/dspxmodel/src/Global.cpp deleted file mode 100644 index 463526d1..00000000 --- a/src/libs/application/dspxmodel/src/Global.cpp +++ /dev/null @@ -1,90 +0,0 @@ -#include "Global.h" -#include - -#include - -#include -#include -#include - -namespace dspx { - - class GlobalPrivate { - Q_DECLARE_PUBLIC(Global) - public: - Global *q_ptr; - ModelPrivate *pModel; - Handle handle; - }; - - Global::Global(Model *model) : QObject(model), d_ptr(new GlobalPrivate) { - Q_D(Global); - d->q_ptr = this; - d->pModel = ModelPrivate::get(model); - d->handle = model->handle(); - } - Global::~Global() = default; - - QString Global::name() const { - Q_D(const Global); - return d->pModel->name; - } - void Global::setName(const QString &name) { - Q_D(Global); - d->pModel->strategy->setEntityProperty(d->handle, ModelStrategy::P_Name, name); - } - QString Global::author() const { - Q_D(const Global); - return d->pModel->author; - } - void Global::setAuthor(const QString &author) { - Q_D(Global); - d->pModel->strategy->setEntityProperty(d->handle, ModelStrategy::P_Author, author); - } - int Global::centShift() const { - Q_D(const Global); - return d->pModel->centShift; - } - void Global::setCentShift(int centShift) { - Q_D(Global); - Q_ASSERT(centShift >= -50 && centShift <= 50); - d->pModel->strategy->setEntityProperty(d->handle, ModelStrategy::P_CentShift, centShift); - } - QString Global::editorId() const { - Q_D(const Global); - return d->pModel->editorId; - } - void Global::setEditorId(const QString &editorId) { - Q_D(Global); - d->pModel->strategy->setEntityProperty(d->handle, ModelStrategy::P_EditorId, editorId); - } - QString Global::editorName() const { - Q_D(const Global); - return d->pModel->editorName; - } - void Global::setEditorName(const QString &editorName) { - Q_D(Global); - d->pModel->strategy->setEntityProperty(d->handle, ModelStrategy::P_EditorName, editorName); - } - - opendspx::Global Global::toOpenDspx() const { - return { - .author = author().toStdString(), - .name = name().toStdString(), - .centShift = centShift(), - .editorId = editorId().toStdString(), - .editorName = editorName().toStdString() - }; - } - - void Global::fromOpenDspx(const opendspx::Global &global) { - setAuthor(QString::fromStdString(global.author)); - setName(QString::fromStdString(global.name)); - setCentShift(global.centShift); - setEditorId(QString::fromStdString(global.editorId)); - setEditorName(QString::fromStdString(global.editorName)); - } - -} - -#include "moc_Global.cpp" diff --git a/src/libs/application/dspxmodel/src/Global.h b/src/libs/application/dspxmodel/src/Global.h deleted file mode 100644 index 6aa09687..00000000 --- a/src/libs/application/dspxmodel/src/Global.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_GLOBAL_H -#define DIFFSCOPE_DSPX_MODEL_GLOBAL_H - -#include - -#include - -#include - -namespace opendspx { - struct Global; -} - -namespace dspx { - - class Model; - - class ModelPrivate; - - class GlobalPrivate; - - class DSPX_MODEL_EXPORT Global : public QObject { - Q_OBJECT - QML_ELEMENT - QML_UNCREATABLE("") - Q_DECLARE_PRIVATE(Global) - Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) - Q_PROPERTY(QString author READ author WRITE setAuthor NOTIFY authorChanged) - Q_PROPERTY(int centShift READ centShift WRITE setCentShift NOTIFY centShiftChanged) - Q_PROPERTY(QString editorId READ editorId WRITE setEditorId NOTIFY editorIdChanged) - Q_PROPERTY(QString editorName READ editorName WRITE setEditorName NOTIFY editorNameChanged) - - public: - ~Global() override; - - QString name() const; - void setName(const QString &name); - - QString author() const; - void setAuthor(const QString &author); - - int centShift() const; - void setCentShift(int centShift); - - QString editorId() const; - void setEditorId(const QString &editorId); - - QString editorName() const; - void setEditorName(const QString &editorName); - - opendspx::Global toOpenDspx() const; - void fromOpenDspx(const opendspx::Global &global); - - Q_SIGNALS: - void nameChanged(const QString &name); - void authorChanged(const QString &author); - void centShiftChanged(int centShift); - void editorIdChanged(const QString &editorId); - void editorNameChanged(const QString &editorName); - - private: - friend class ModelPrivate; - explicit Global(Model *model); - - QScopedPointer d_ptr; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_GLOBAL_H diff --git a/src/libs/application/dspxmodel/src/Handle.h b/src/libs/application/dspxmodel/src/Handle.h deleted file mode 100644 index 6aeb83f5..00000000 --- a/src/libs/application/dspxmodel/src/Handle.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_HANDLE_H -#define DIFFSCOPE_DSPX_MODEL_HANDLE_H - -#include - -namespace dspx { - - struct Handle { - quintptr d; - - auto operator<=>(const Handle &) const = default; - bool operator==(const Handle &) const = default; - bool operator!=(const Handle &) const = default; - - friend size_t qHash(const Handle &handle, size_t seed = 0) { - return qHash(handle.d, seed); - } - - constexpr bool isNull() const { - return !d; - } - constexpr operator bool() const { - return d; - } - }; - -} - -namespace std { - template <> - struct hash { - size_t operator()(const dspx::Handle &handle) const noexcept { - return std::hash{}(handle.d); - } - }; -} - -#endif //DIFFSCOPE_DSPX_MODEL_HANDLE_H diff --git a/src/libs/application/dspxmodel/src/KeySignature.cpp b/src/libs/application/dspxmodel/src/KeySignature.cpp deleted file mode 100644 index 1ff268cf..00000000 --- a/src/libs/application/dspxmodel/src/KeySignature.cpp +++ /dev/null @@ -1,174 +0,0 @@ -#include "KeySignature.h" -#include "KeySignature_p.h" - -#include -#include - -#include - -#include -#include -#include - -namespace dspx { - - void KeySignaturePrivate::setKeySignatureSequence(KeySignature *item, KeySignatureSequence *keySignatureSequence) { - auto d = item->d_func(); - if (d->keySignatureSequence != keySignatureSequence) { - d->keySignatureSequence = keySignatureSequence; - Q_EMIT item->keySignatureSequenceChanged(); - } - } - - void KeySignaturePrivate::setPreviousItem(KeySignature *item, KeySignature *previousItem) { - auto d = item->d_func(); - if (d->previousItem != previousItem) { - d->previousItem = previousItem; - Q_EMIT item->previousItemChanged(); - } - } - - void KeySignaturePrivate::setNextItem(KeySignature *item, KeySignature *nextItem) { - auto d = item->d_func(); - if (d->nextItem != nextItem) { - d->nextItem = nextItem; - Q_EMIT item->nextItemChanged(); - } - } - - KeySignature::KeySignature(Handle handle, Model *model) : EntityObject(handle, model), d_ptr(new KeySignaturePrivate) { - Q_D(KeySignature); - Q_ASSERT(model->strategy()->getEntityType(handle) == ModelStrategy::EI_KeySignature); - d->q_ptr = this; - d->pos = model->strategy()->getEntityProperty(handle, ModelStrategy::P_Position).toInt(); - d->mode = model->strategy()->getEntityProperty(handle, ModelStrategy::P_Mode).toInt(); - d->tonality = model->strategy()->getEntityProperty(handle, ModelStrategy::P_Tonality).toInt(); - d->accidentalType = static_cast(model->strategy()->getEntityProperty(handle, ModelStrategy::P_AccidentalType).toInt()); - } - - KeySignature::~KeySignature() = default; - - int KeySignature::pos() const { - Q_D(const KeySignature); - return d->pos; - } - - void KeySignature::setPos(int pos) { - Q_D(KeySignature); - Q_ASSERT(pos >= 0); - model()->strategy()->setEntityProperty(handle(), ModelStrategy::P_Position, pos); - } - - int KeySignature::mode() const { - Q_D(const KeySignature); - return d->mode; - } - - void KeySignature::setMode(int mode) { - Q_D(KeySignature); - Q_ASSERT(mode >= 0 && mode <= 4095); - model()->strategy()->setEntityProperty(handle(), ModelStrategy::P_Mode, mode); - } - - int KeySignature::tonality() const { - Q_D(const KeySignature); - return d->tonality; - } - - void KeySignature::setTonality(int tonality) { - Q_D(KeySignature); - Q_ASSERT(tonality >= 0 && tonality <= 11); - model()->strategy()->setEntityProperty(handle(), ModelStrategy::P_Tonality, tonality); - } - - KeySignature::AccidentalType KeySignature::accidentalType() const { - Q_D(const KeySignature); - return d->accidentalType; - } - - void KeySignature::setAccidentalType(AccidentalType accidentalType) { - Q_D(KeySignature); - Q_ASSERT(accidentalType == Flat || accidentalType == Sharp); - model()->strategy()->setEntityProperty(handle(), ModelStrategy::P_AccidentalType, static_cast(accidentalType)); - } - - KeySignatureSequence *KeySignature::keySignatureSequence() const { - Q_D(const KeySignature); - return d->keySignatureSequence; - } - - KeySignature *KeySignature::previousItem() const { - Q_D(const KeySignature); - return d->previousItem; - } - - KeySignature *KeySignature::nextItem() const { - Q_D(const KeySignature); - return d->nextItem; - } - - nlohmann::json KeySignature::toOpenDspx() const { - return nlohmann::json::object({ - {"pos", pos()}, - {"mode", mode()}, - {"tonality", tonality()}, - {"accidentalType", accidentalType()} - }); - } - - void KeySignature::fromOpenDspx(const nlohmann::json &keySignature) { - try { - auto pos = keySignature.at("pos").get(); - pos = qMax(0, pos); - setPos(pos); - auto mode = keySignature.at("mode").get(); - if (mode < 0 || mode > 4095) { - mode = 0; - } - setMode(mode); - auto tonality = keySignature.at("tonality").get(); - if (tonality < 0 || tonality > 11) { - tonality = 0; - } - setTonality(tonality); - auto accidentalType = keySignature.at("accidentalType").get(); - if (accidentalType != Flat && accidentalType != Sharp) { - accidentalType = Flat; - } - setAccidentalType(static_cast(accidentalType)); - } catch (const nlohmann::json::exception &) { - // ignore - } - } - - void KeySignature::handleSetEntityProperty(int property, const QVariant &value) { - Q_D(KeySignature); - switch (property) { - case ModelStrategy::P_Position: { - d->pos = value.toInt(); - Q_EMIT posChanged(d->pos); - break; - } - case ModelStrategy::P_Mode: { - d->mode = value.toInt(); - Q_EMIT modeChanged(d->mode); - break; - } - case ModelStrategy::P_Tonality: { - d->tonality = value.toInt(); - Q_EMIT tonalityChanged(d->tonality); - break; - } - case ModelStrategy::P_AccidentalType: { - d->accidentalType = static_cast(value.toInt()); - Q_EMIT accidentalTypeChanged(d->accidentalType); - break; - } - default: - Q_UNREACHABLE(); - } - } - -} - -#include "moc_KeySignature.cpp" diff --git a/src/libs/application/dspxmodel/src/KeySignature.h b/src/libs/application/dspxmodel/src/KeySignature.h deleted file mode 100644 index ca297db1..00000000 --- a/src/libs/application/dspxmodel/src/KeySignature.h +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_KEYSIGNATURE_H -#define DIFFSCOPE_DSPX_MODEL_KEYSIGNATURE_H - -#include - -#include - -#include - -namespace dspx { - - class KeySignatureSequence; - class KeySignaturePrivate; - - class DSPX_MODEL_EXPORT KeySignature : public EntityObject { - Q_OBJECT - QML_ELEMENT - QML_UNCREATABLE("") - Q_DECLARE_PRIVATE(KeySignature); - Q_PROPERTY(int pos READ pos WRITE setPos NOTIFY posChanged) - Q_PROPERTY(int mode READ mode WRITE setMode NOTIFY modeChanged) - Q_PROPERTY(int tonality READ tonality WRITE setTonality NOTIFY tonalityChanged) - Q_PROPERTY(AccidentalType accidentalType READ accidentalType WRITE setAccidentalType NOTIFY accidentalTypeChanged) - public: - enum AccidentalType { - Flat = 0, - Sharp = 1 - }; - Q_ENUM(AccidentalType) - - ~KeySignature() override; - - int pos() const; - void setPos(int pos); - - int mode() const; - void setMode(int mode); - - int tonality() const; - void setTonality(int tonality); - - AccidentalType accidentalType() const; - void setAccidentalType(AccidentalType accidentalType); - - KeySignatureSequence *keySignatureSequence() const; - - KeySignature *previousItem() const; - KeySignature *nextItem() const; - - nlohmann::json toOpenDspx() const; - void fromOpenDspx(const nlohmann::json &keySignature); - - Q_SIGNALS: - void posChanged(int pos); - void modeChanged(int mode); - void tonalityChanged(int tonality); - void accidentalTypeChanged(AccidentalType accidentalType); - void keySignatureSequenceChanged(); - void previousItemChanged(); - void nextItemChanged(); - - protected: - void handleSetEntityProperty(int property, const QVariant &value) override; - - private: - friend class ModelPrivate; - explicit KeySignature(Handle handle, Model *model); - QScopedPointer d_ptr; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_KEYSIGNATURE_H diff --git a/src/libs/application/dspxmodel/src/KeySignatureSequence.cpp b/src/libs/application/dspxmodel/src/KeySignatureSequence.cpp deleted file mode 100644 index 41797737..00000000 --- a/src/libs/application/dspxmodel/src/KeySignatureSequence.cpp +++ /dev/null @@ -1,117 +0,0 @@ -#include "KeySignatureSequence.h" -#include "KeySignatureSequence_p.h" - -#include -#include -#include - -#include - -#include -#include -#include -#include - -namespace dspx { - - KeySignatureSequence::KeySignatureSequence(Handle handle, Model *model) : EntityObject(handle, model), d_ptr(new KeySignatureSequencePrivate) { - Q_D(KeySignatureSequence); - Q_ASSERT(model->strategy()->getEntityType(handle) == ModelStrategy::ES_KeySignatures); - d->q_ptr = this; - d->pModel = ModelPrivate::get(model); - - d->init(model->strategy()->getEntitiesFromSequenceContainer(handle)); - } - - KeySignatureSequence::~KeySignatureSequence() = default; - - int KeySignatureSequence::size() const { - Q_D(const KeySignatureSequence); - return d->container.size(); - } - - KeySignature *KeySignatureSequence::firstItem() const { - Q_D(const KeySignatureSequence); - return d->firstItem; - } - - KeySignature *KeySignatureSequence::lastItem() const { - Q_D(const KeySignatureSequence); - return d->lastItem; - } - - KeySignature *KeySignatureSequence::previousItem(KeySignature *item) const { - Q_D(const KeySignatureSequence); - return d->container.previousItem(item); - } - - KeySignature *KeySignatureSequence::nextItem(KeySignature *item) const { - Q_D(const KeySignatureSequence); - return d->container.nextItem(item); - } - - QList KeySignatureSequence::slice(int position, int length) const { - Q_D(const KeySignatureSequence); - return d->container.slice(position, length); - } - - KeySignature *KeySignatureSequence::itemAt(int position) const { - Q_D(const KeySignatureSequence); - auto it = d->container.m_items.upper_bound(position); - if (it != d->container.m_items.begin()) { - --it; - return it->second; - } - return nullptr; - } - - bool KeySignatureSequence::contains(KeySignature *item) const { - Q_D(const KeySignatureSequence); - return d->container.contains(item); - } - - bool KeySignatureSequence::insertItem(KeySignature *item) { - Q_D(KeySignatureSequence); - return d->pModel->strategy->insertIntoSequenceContainer(handle(), item->handle()); - } - - bool KeySignatureSequence::removeItem(KeySignature *item) { - Q_D(KeySignatureSequence); - return d->pModel->strategy->takeFromSequenceContainer(handle(), item->handle()); - } - - nlohmann::json KeySignatureSequence::toOpenDspx() const { - Q_D(const KeySignatureSequence); - nlohmann::json ret = nlohmann::json::array(); - for (const auto &[_, item] : d->container.m_items) { - ret.push_back(item->toOpenDspx()); - } - return ret; - } - - void KeySignatureSequence::fromOpenDspx(const nlohmann::json &keySignatures) { - while (size()) { - removeItem(firstItem()); - } - if (!keySignatures.is_array()) - return; - for (const auto &value : keySignatures) { - auto item = model()->createKeySignature(); - item->fromOpenDspx(value); - insertItem(item); - } - } - - void KeySignatureSequence::handleInsertIntoSequenceContainer(Handle entity) { - Q_D(KeySignatureSequence); - d->handleInsertIntoSequenceContainer(entity); - } - - void KeySignatureSequence::handleTakeFromSequenceContainer(Handle takenEntity, Handle entity) { - Q_D(KeySignatureSequence); - d->handleTakeFromSequenceContainer(takenEntity, entity); - } - -} - -#include "moc_KeySignatureSequence.cpp" diff --git a/src/libs/application/dspxmodel/src/KeySignatureSequence.h b/src/libs/application/dspxmodel/src/KeySignatureSequence.h deleted file mode 100644 index 219092bd..00000000 --- a/src/libs/application/dspxmodel/src/KeySignatureSequence.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_KEYSIGNATURESEQUENCE_H -#define DIFFSCOPE_DSPX_MODEL_KEYSIGNATURESEQUENCE_H - -#include - -#include - -#include -#include - -namespace dspx { - - class KeySignature; - - class KeySignatureSequencePrivate; - - class DSPX_MODEL_EXPORT KeySignatureSequence : public EntityObject { - Q_OBJECT - QML_ELEMENT - QML_UNCREATABLE("") - Q_DECLARE_PRIVATE(KeySignatureSequence) - Q_PROPERTY(int size READ size NOTIFY sizeChanged) - Q_PROPERTY(KeySignature *firstItem READ firstItem NOTIFY firstItemChanged) - Q_PROPERTY(KeySignature *lastItem READ lastItem NOTIFY lastItemChanged) - Q_PRIVATE_PROPERTY(d_func(), QJSValue iterable READ iterable CONSTANT) - public: - ~KeySignatureSequence() override; - - int size() const; - KeySignature *firstItem() const; - KeySignature *lastItem() const; - Q_INVOKABLE KeySignature *previousItem(KeySignature *item) const; - Q_INVOKABLE KeySignature *nextItem(KeySignature *item) const; - Q_INVOKABLE QList slice(int position, int length) const; - Q_INVOKABLE KeySignature *itemAt(int position) const; - Q_INVOKABLE bool contains(KeySignature *item) const; - - Q_INVOKABLE bool insertItem(KeySignature *item); - Q_INVOKABLE bool removeItem(KeySignature *item); - - nlohmann::json toOpenDspx() const; - void fromOpenDspx(const nlohmann::json &keySignatures); - - auto asRange() const { - return impl::SequenceRange(this); - } - - Q_SIGNALS: - void itemAboutToInsert(KeySignature *item); - void itemInserted(KeySignature *item); - void itemAboutToRemove(KeySignature *item); - void itemRemoved(KeySignature *item); - void sizeChanged(int size); - void firstItemChanged(KeySignature *item); - void lastItemChanged(KeySignature *item); - - protected: - void handleInsertIntoSequenceContainer(Handle entity) override; - void handleTakeFromSequenceContainer(Handle takenEntity, Handle entity) override; - - private: - friend class ModelPrivate; - explicit KeySignatureSequence(Handle handle, Model *model); - QScopedPointer d_ptr; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_KEYSIGNATURESEQUENCE_H diff --git a/src/libs/application/dspxmodel/src/KeySignatureSequence_p.h b/src/libs/application/dspxmodel/src/KeySignatureSequence_p.h deleted file mode 100644 index 7c7e6cb7..00000000 --- a/src/libs/application/dspxmodel/src/KeySignatureSequence_p.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_KEYSIGNATURESEQUENCE_P_H -#define DIFFSCOPE_DSPX_MODEL_KEYSIGNATURESEQUENCE_P_H - -#include - -#include -#include - -namespace dspx { - - class KeySignatureSequencePrivate : public PointSequenceData { - Q_DECLARE_PUBLIC(KeySignatureSequence) - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_KEYSIGNATURESEQUENCE_P_H diff --git a/src/libs/application/dspxmodel/src/KeySignature_p.h b/src/libs/application/dspxmodel/src/KeySignature_p.h deleted file mode 100644 index d7627875..00000000 --- a/src/libs/application/dspxmodel/src/KeySignature_p.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_KEYSIGNATURE_P_H -#define DIFFSCOPE_DSPX_MODEL_KEYSIGNATURE_P_H - -#include - -namespace dspx { - - class KeySignaturePrivate { - Q_DECLARE_PUBLIC(KeySignature) - public: - KeySignature *q_ptr; - int pos; - int mode; - int tonality; - KeySignature::AccidentalType accidentalType; - KeySignatureSequence *keySignatureSequence{}; - KeySignature *previousItem{}; - KeySignature *nextItem{}; - - static void setKeySignatureSequence(KeySignature *item, KeySignatureSequence *keySignatureSequence); - static void setPreviousItem(KeySignature *item, KeySignature *previousItem); - static void setNextItem(KeySignature *item, KeySignature *nextItem); - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_KEYSIGNATURE_P_H diff --git a/src/libs/application/dspxmodel/src/Label.cpp b/src/libs/application/dspxmodel/src/Label.cpp deleted file mode 100644 index 127ad1ec..00000000 --- a/src/libs/application/dspxmodel/src/Label.cpp +++ /dev/null @@ -1,117 +0,0 @@ -#include "Label.h" -#include "Label_p.h" -#include - -#include - -#include -#include -#include - -namespace dspx { - - - - void LabelPrivate::setLabelSequence(Label *item, LabelSequence *labelSequence) { - auto d = item->d_func(); - if (d->labelSequence != labelSequence) { - d->labelSequence = labelSequence; - Q_EMIT item->labelSequenceChanged(); - } - } - - void LabelPrivate::setPreviousItem(Label *item, Label *previousItem) { - auto d = item->d_func(); - if (d->previousItem != previousItem) { - d->previousItem = previousItem; - Q_EMIT item->previousItemChanged(); - } - } - - void LabelPrivate::setNextItem(Label *item, Label *nextItem) { - auto d = item->d_func(); - if (d->nextItem != nextItem) { - d->nextItem = nextItem; - Q_EMIT item->nextItemChanged(); - } - } - - Label::Label(Handle handle, Model *model) : EntityObject(handle, model), d_ptr(new LabelPrivate) { - Q_D(Label); - Q_ASSERT(model->strategy()->getEntityType(handle) == ModelStrategy::EI_Label); - d->q_ptr = this; - d->pos = model->strategy()->getEntityProperty(handle, ModelStrategy::P_Position).toInt(); - d->text = model->strategy()->getEntityProperty(handle, ModelStrategy::P_Text).toString(); - } - - Label::~Label() = default; - - int Label::pos() const { - Q_D(const Label); - return d->pos; - } - - void Label::setPos(int pos) { - Q_D(Label); - Q_ASSERT(pos >= 0); - model()->strategy()->setEntityProperty(handle(), ModelStrategy::P_Position, pos); - } - - QString Label::text() const { - Q_D(const Label); - return d->text; - } - - void Label::setText(const QString &text) { - Q_D(Label); - model()->strategy()->setEntityProperty(handle(), ModelStrategy::P_Text, text); - } - - LabelSequence *Label::labelSequence() const { - Q_D(const Label); - return d->labelSequence; - } - - Label *Label::previousItem() const { - Q_D(const Label); - return d->previousItem; - } - - Label *Label::nextItem() const { - Q_D(const Label); - return d->nextItem; - } - - opendspx::Label Label::toOpenDspx() const { - return { - .pos = pos(), - .text = text().toStdString(), - }; - } - - void Label::fromOpenDspx(const opendspx::Label &label) { - setPos(label.pos); - setText(QString::fromStdString(label.text)); - } - - void Label::handleSetEntityProperty(int property, const QVariant &value) { - Q_D(Label); - switch (property) { - case ModelStrategy::P_Position: { - d->pos = value.toInt(); - Q_EMIT posChanged(d->pos); - break; - } - case ModelStrategy::P_Text: { - d->text = value.toString(); - Q_EMIT textChanged(d->text); - break; - } - default: - Q_UNREACHABLE(); - } - } - -} - -#include "moc_Label.cpp" diff --git a/src/libs/application/dspxmodel/src/Label.h b/src/libs/application/dspxmodel/src/Label.h deleted file mode 100644 index f11e5e34..00000000 --- a/src/libs/application/dspxmodel/src/Label.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef DIFFSCOPE_DSPX_MODEL_LABEL_H -#define DIFFSCOPE_DSPX_MODEL_LABEL_H - -#include - -#include - -namespace opendspx { - struct Label; -} - -namespace dspx { - - class LabelSequence; - class LabelPrivate; - - class DSPX_MODEL_EXPORT Label : public EntityObject { - Q_OBJECT - QML_ELEMENT - QML_UNCREATABLE("") - Q_DECLARE_PRIVATE(Label); - Q_PROPERTY(int pos READ pos WRITE setPos NOTIFY posChanged) - Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged) - Q_PROPERTY(LabelSequence *labelSequence READ labelSequence NOTIFY labelSequenceChanged) - Q_PROPERTY(Label *previousItem READ previousItem NOTIFY previousItemChanged) - Q_PROPERTY(Label *nextItem READ nextItem NOTIFY nextItemChanged) - public: - ~Label() override; - - int pos() const; - void setPos(int pos); - - QString text() const; - void setText(const QString &text); - - LabelSequence *labelSequence() const; - - Label *previousItem() const; - Label *nextItem() const; - - opendspx::Label toOpenDspx() const; - void fromOpenDspx(const opendspx::Label &label); - - Q_SIGNALS: - void posChanged(int pos); - void textChanged(const QString &text); - void labelSequenceChanged(); - void previousItemChanged(); - void nextItemChanged(); - - protected: - void handleSetEntityProperty(int property, const QVariant &value) override; - - private: - friend class ModelPrivate; - explicit Label(Handle handle, Model *model); - QScopedPointer d_ptr; - }; - -} - -#endif //DIFFSCOPE_DSPX_MODEL_LABEL_H diff --git a/src/libs/application/dspxmodel/src/LabelSequence.cpp b/src/libs/application/dspxmodel/src/LabelSequence.cpp deleted file mode 100644 index b7dfbe5b..00000000 --- a/src/libs/application/dspxmodel/src/LabelSequence.cpp +++ /dev/null @@ -1,105 +0,0 @@ -#include "LabelSequence.h" -#include "LabelSequence_p.h" - -#include -#include - -#include - -#include -#include -#include -#include - -namespace dspx { - - LabelSequence::LabelSequence(Handle handle, Model *model) : EntityObject(handle, model), d_ptr(new LabelSequencePrivate) { - Q_D(LabelSequence); - Q_ASSERT(model->strategy()->getEntityType(handle) == ModelStrategy::ES_Labels); - d->q_ptr = this; - d->pModel = ModelPrivate::get(model); - - d->init(model->strategy()->getEntitiesFromSequenceContainer(handle)); - } - - LabelSequence::~LabelSequence() = default; - - int LabelSequence::size() const { - Q_D(const LabelSequence); - return d->container.size(); - } - - Label *LabelSequence::firstItem() const { - Q_D(const LabelSequence); - return d->firstItem; - } - - Label *LabelSequence::lastItem() const { - Q_D(const LabelSequence); - return d->lastItem; - } - - Label *LabelSequence::previousItem(Label *item) const { - Q_D(const LabelSequence); - return d->container.previousItem(item); - } - - Label *LabelSequence::nextItem(Label *item) const { - Q_D(const LabelSequence); - return d->container.nextItem(item); - } - - QList