From e87079b8132e5a2bb2eaa23d5fe135293ffc9770 Mon Sep 17 00:00:00 2001 From: Jan Bliznicenko Date: Tue, 5 Nov 2024 17:05:50 +0100 Subject: [PATCH 01/17] Model adapter preparations and experiments --- .../OPUmlAssociationController.class.st | 11 +++-- .../OPUmlAttributeController.class.st | 47 ++++++++++--------- .../OPUmlClassController.class.st | 2 +- .../OPUmlClassItemController.class.st | 13 ++--- .../OPUmlClassifierController.class.st | 2 +- .../OPUmlClassifierNameLabel.class.st | 8 ++++ .../OPUmlCompartmentableShape.class.st | 6 +++ ...OPUmlEnumerationLiteralController.class.st | 8 ++-- .../OPUmlExtensionController.class.st | 15 +++--- .../OPUmlGeneralizationController.class.st | 18 +++---- .../OPUmlOperationController.class.st | 4 +- .../OPUmlPackageController.class.st | 6 +-- .../OPUmlPackageDiagramController.class.st | 2 +- .../OPUmlPackageImportController.class.st | 14 +++--- .../OPUmlPackageShape.class.st | 19 ++++---- 15 files changed, 98 insertions(+), 77 deletions(-) diff --git a/repository/OpenPonk-ClassEditor/OPUmlAssociationController.class.st b/repository/OpenPonk-ClassEditor/OPUmlAssociationController.class.st index d41cc02b..d67866b2 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlAssociationController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlAssociationController.class.st @@ -90,7 +90,8 @@ OPUmlAssociationController >> modelClass [ { #category : 'accessing' } OPUmlAssociationController >> modelSource [ - ^ model memberEnds ifNotEmpty: [ :memberEnds | memberEnds first type ] + ^ self model memberEnds ifNotEmpty: [ :memberEnds | + memberEnds first type ] ] { #category : 'construction' } @@ -104,15 +105,15 @@ OPUmlAssociationController >> modelSource: aModel in: aParentModel [ replaceAll: Character cr with: Character space); type: source model. - model memberEnds add: property. + self model memberEnds add: property. ^ true ] { #category : 'accessing' } OPUmlAssociationController >> modelTarget [ - ^ model memberEnds size > 1 - ifTrue: [ model memberEnds second type ] + ^ self model memberEnds size > 1 + ifTrue: [ self model memberEnds second type ] ifFalse: [ nil ] ] @@ -127,7 +128,7 @@ OPUmlAssociationController >> modelTarget: aModel in: aParentModel [ replaceAll: Character cr with: Character space); type: target model. - model memberEnds add: property. + self model memberEnds add: property. ^ true ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st b/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st index afdd304b..5cea64a0 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st @@ -18,8 +18,8 @@ OPUmlAttributeController >> addDiagramElementToOwner [ { #category : 'figures' } OPUmlAttributeController >> createDiagramElement [ - (model name isNil or: [ model name trim isEmpty ]) ifTrue: [ - model name: self placeholderName ]. + (self model name isNil or: [ self model name trim isEmpty ]) ifTrue: [ + self model name: self placeholderName ]. ^ super createDiagramElement ] @@ -41,7 +41,7 @@ OPUmlAttributeController >> dependingOnElements [ ifNotNil: [ :element | Set with: element ] ]. ^ super dependingOnElements - , (asSetOrEmpty value: model owningAssociation) + , (asSetOrEmpty value: self model owningAssociation) ] { #category : 'forms' } @@ -161,9 +161,10 @@ OPUmlAttributeController >> modelClass [ { #category : 'diagram elements' } OPUmlAttributeController >> owner [ - ^ diagramController controllerForModel: (model owningClass ifNil: [ - (model owningAssociation memberEnds detect: [ :any | - any ~= model ]) type ]) + ^ diagramController controllerForModel: + (self model owningClass ifNil: [ + (self model owningAssociation memberEnds detect: [ :any | + any ~= self model ]) type ]) ] { #category : 'hooks' } @@ -186,7 +187,7 @@ OPUmlAttributeController >> placeholderName [ { #category : 'construction' } OPUmlAttributeController >> registerModelInContainer: aClass [ - aClass ownedAttributes add: model + aClass ownedAttributes add: self model ] { #category : 'removing' } @@ -202,7 +203,7 @@ OPUmlAttributeController >> removeDiagramElement [ OPUmlAttributeController >> removeModel [ "could be any of those, so just nil all of them" - model owningAssociation: nil. + self model owningAssociation: nil. super removeModel ] @@ -219,21 +220,21 @@ OPUmlAttributeController >> typeNamed: aName [ OPUmlAttributeController >> validate [ super validate. - model ifNil: [ ^ self ]. - (model owningClass isNotNil and: [ model owningAssociation isNotNil ]) - ifTrue: [ - OPModelInvalid signal: (String streamContents: [ :s | - s << 'Property "' << model name asString << '" owned by class "' - << model owningClass name asString - << '" is also owned by assoc. '. - model owningAssociation name - ifNil: [ - model owningAssociation memberEnds - do: [ :each | - each type ifNotNil: [ :type | s << '"' << type name << '"' ] ] - separatedBy: [ s << ' <-> ' ] ] - ifNotNil: [ :assName | s << '"' << assName << '"' ] ]) ]. - model owningAssociation: nil + self model ifNil: [ ^ self ]. + (self model owningClass isNotNil and: [ + self model owningAssociation isNotNil ]) ifTrue: [ + OPModelInvalid signal: (String streamContents: [ :s | + s << 'Property "' << self model name asString + << '" owned by class "' << self model owningClass name asString + << '" is also owned by assoc. '. + self model owningAssociation name + ifNil: [ + self model owningAssociation memberEnds + do: [ :each | + each type ifNotNil: [ :type | s << '"' << type name << '"' ] ] + separatedBy: [ s << ' <-> ' ] ] + ifNotNil: [ :assName | s << '"' << assName << '"' ] ]) ]. + self model owningAssociation: nil ] { #category : 'forms' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlClassController.class.st b/repository/OpenPonk-ClassEditor/OPUmlClassController.class.st index 1d3e2e99..29e43333 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlClassController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlClassController.class.st @@ -141,7 +141,7 @@ OPUmlClassController >> diagramElementClass [ { #category : 'accessing' } OPUmlClassController >> elementsToShowInside [ - ^ model ownedOperations asSet , model ownedAttributes + ^ self model ownedOperations asSet , self model ownedAttributes ] { #category : 'accessing' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlClassItemController.class.st b/repository/OpenPonk-ClassEditor/OPUmlClassItemController.class.st index 8c05ce4b..bfcbdfe1 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlClassItemController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlClassItemController.class.st @@ -14,9 +14,10 @@ OPUmlClassItemController >> dependingOnElements [ nullableElement ifNil: [ Set empty ] ifNotNil: [ :element | Set with: element ] ]. - ^ super dependingOnElements , (asSetOrEmpty value: model owningClass) - , (asSetOrEmpty value: model interface) - , (asSetOrEmpty value: model datatype) + ^ super dependingOnElements + , (asSetOrEmpty value: self model owningClass) + , (asSetOrEmpty value: self model interface) + , (asSetOrEmpty value: self model datatype) ] { #category : 'forms' } @@ -33,8 +34,8 @@ OPUmlClassItemController >> descriptionIsStatic [ OPUmlClassItemController >> removeModel [ "could be any of those, so just nil all of them" - model owningClass: nil. - model interface: nil. - model datatype: nil. + self model owningClass: nil. + self model interface: nil. + self model datatype: nil. super removeModel ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlClassifierController.class.st b/repository/OpenPonk-ClassEditor/OPUmlClassifierController.class.st index fdde8570..2556a40c 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlClassifierController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlClassifierController.class.st @@ -91,7 +91,7 @@ OPUmlClassifierController >> packageRenderChanged [ { #category : 'construction' } OPUmlClassifierController >> registerModelInContainer: aParentModel [ - aParentModel packagedElements add: model + aParentModel packagedElements add: self model ] { #category : 'construction' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlClassifierNameLabel.class.st b/repository/OpenPonk-ClassEditor/OPUmlClassifierNameLabel.class.st index 8d199053..2080d0ed 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlClassifierNameLabel.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlClassifierNameLabel.class.st @@ -9,6 +9,14 @@ Class { #tag : 'Shapes' } +{ #category : 'removing' } +OPUmlClassifierNameLabel >> attachedShapes [ + + labeled ifNil: [ ^ super attachedShapes ]. + + ^ super attachedShapes , { labeled labelShape } +] + { #category : 'as yet unclassified' } OPUmlClassifierNameLabel >> defaultFontSize [ diff --git a/repository/OpenPonk-ClassEditor/OPUmlCompartmentableShape.class.st b/repository/OpenPonk-ClassEditor/OPUmlCompartmentableShape.class.st index dfd3d8f1..e42c860d 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlCompartmentableShape.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlCompartmentableShape.class.st @@ -21,6 +21,12 @@ OPUmlCompartmentableShape >> addSeparator [ separators add: newSeparator ] +{ #category : 'removing' } +OPUmlCompartmentableShape >> attachedShapes [ + + ^ super attachedShapes , separators +] + { #category : 'accessing' } OPUmlCompartmentableShape >> compartments [ diff --git a/repository/OpenPonk-ClassEditor/OPUmlEnumerationLiteralController.class.st b/repository/OpenPonk-ClassEditor/OPUmlEnumerationLiteralController.class.st index 0f6179ae..5c58430c 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlEnumerationLiteralController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlEnumerationLiteralController.class.st @@ -26,7 +26,7 @@ OPUmlEnumerationLiteralController >> createModelIn: aParentModel [ { #category : 'construction' } OPUmlEnumerationLiteralController >> dependingOnElements [ - ^ super dependingOnElements , (Set with: model enumeration) + ^ super dependingOnElements , (Set with: self model enumeration) ] { #category : 'construction' } @@ -44,7 +44,7 @@ OPUmlEnumerationLiteralController >> modelClass [ OPUmlEnumerationLiteralController >> owner [ ^ diagramController showWithoutDependentInDiagramModel: - model enumeration + self model enumeration ] { #category : 'hooks' } @@ -56,7 +56,7 @@ OPUmlEnumerationLiteralController >> placeholderName [ { #category : 'construction' } OPUmlEnumerationLiteralController >> registerModelInContainer: aParentModel [ - aParentModel ownedLiterals add: model + aParentModel ownedLiterals add: self model ] { #category : 'removing' } @@ -71,6 +71,6 @@ OPUmlEnumerationLiteralController >> removeDiagramElement [ OPUmlEnumerationLiteralController >> removeModel [ "could be any of those, so just nil all of them" - model enumeration: nil. + self model enumeration: nil. super removeModel ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlExtensionController.class.st b/repository/OpenPonk-ClassEditor/OPUmlExtensionController.class.st index 19846536..779a9291 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlExtensionController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlExtensionController.class.st @@ -23,7 +23,8 @@ OPUmlExtensionController >> modelClass [ { #category : 'accessing' } OPUmlExtensionController >> modelSource [ - ^ model memberEnds ifNotEmpty: [ :memberEnds | memberEnds first type ] + ^ self model memberEnds ifNotEmpty: [ :memberEnds | + memberEnds first type ] ] { #category : 'construction' } @@ -32,19 +33,19 @@ OPUmlExtensionController >> modelSource: aModel in: aParentModel [ | property | self modelSource = aModel ifTrue: [ ^ false ]. (property := OPUMLExtensionEnd new) - owningAssociation: model; + owningAssociation: self model; name: 'extension_' , aModel name; type: aModel. - model memberEnds add: property. - model ownedEnd: property. + self model memberEnds add: property. + self model ownedEnd: property. ^ true ] { #category : 'accessing' } OPUmlExtensionController >> modelTarget [ - ^ model memberEnds size > 1 - ifTrue: [ model memberEnds second type ] + ^ self model memberEnds size > 1 + ifTrue: [ self model memberEnds second type ] ifFalse: [ nil ] ] @@ -57,7 +58,7 @@ OPUmlExtensionController >> modelTarget: aModel in: aParentModel [ owningClass: source model; name: 'base_' , aModel name; type: aModel. - model memberEnds add: property. + self model memberEnds add: property. ^ true ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationController.class.st b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationController.class.st index 78bcd414..5f4d1153 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationController.class.st @@ -99,7 +99,8 @@ OPUmlGeneralizationController >> modelClass [ { #category : 'forms' } OPUmlGeneralizationController >> modelSource [ - ^ model specific + + ^ self model specific ] { #category : 'figures' } @@ -107,13 +108,14 @@ OPUmlGeneralizationController >> modelSource: aModel in: aParentModel [ "answers whether model's source has been changed" self modelSource = aModel ifTrue: [ ^ false ]. - model specific: aModel. + self model specific: aModel. ^ true ] { #category : 'forms' } OPUmlGeneralizationController >> modelTarget [ - ^ model general + + ^ self model general ] { #category : 'figures' } @@ -121,7 +123,7 @@ OPUmlGeneralizationController >> modelTarget: aModel in: aParentModel [ "answers whether model's target has been changed" self modelTarget = aModel ifTrue: [ ^ false ]. - model general: aModel. + self model general: aModel. ^ true ] @@ -140,10 +142,10 @@ OPUmlGeneralizationController >> registerModelInContainer: aParentModel [ { #category : 'removing' } OPUmlGeneralizationController >> removeModel [ - model general: nil. - model specific: nil. - model generalizationSets asArray do: [ :each | - each generalizations remove: model. + self model general: nil. + self model specific: nil. + self model generalizationSets asArray do: [ :each | + each generalizations remove: self model. each generalizations ifEmpty: [ self parentPackageDo: [ :parentPackage | parentPackage packagedElements diff --git a/repository/OpenPonk-ClassEditor/OPUmlOperationController.class.st b/repository/OpenPonk-ClassEditor/OPUmlOperationController.class.st index bf79af4b..ef4ce612 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlOperationController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlOperationController.class.st @@ -47,7 +47,7 @@ OPUmlOperationController >> modelClass [ { #category : 'diagram elements' } OPUmlOperationController >> owner [ - ^ diagramController controllerForModel: model owningClass + ^ diagramController controllerForModel: self model owningClass ] { #category : 'hooks' } @@ -59,7 +59,7 @@ OPUmlOperationController >> placeholderName [ { #category : 'construction' } OPUmlOperationController >> registerModelInContainer: aParentModel [ - aParentModel ownedOperations add: model + aParentModel ownedOperations add: self model ] { #category : 'removing' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlPackageController.class.st b/repository/OpenPonk-ClassEditor/OPUmlPackageController.class.st index f7317106..9a3f5ff3 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlPackageController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlPackageController.class.st @@ -47,8 +47,8 @@ OPUmlPackageController >> canBeTargetFor: aController [ OPUmlPackageController >> createModelIn: aParentModel [ super createModelIn: aParentModel. - model name: (model oclClassifierNameFrom: model class). - ^ model + self model name: (self model oclClassifierNameFrom: self model class). + ^ self model ] { #category : 'accessing' } @@ -124,7 +124,7 @@ OPUmlPackageController >> pushBack [ { #category : 'construction' } OPUmlPackageController >> registerModelInContainer: aParentModel [ - aParentModel packagedElements add: model + aParentModel packagedElements add: self model ] { #category : 'destruction' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlPackageDiagramController.class.st b/repository/OpenPonk-ClassEditor/OPUmlPackageDiagramController.class.st index ef82510c..2d607df6 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlPackageDiagramController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlPackageDiagramController.class.st @@ -322,7 +322,7 @@ OPUmlPackageDiagramController >> initializeProfileModelingPalette: aPalette [ { #category : 'palette' } OPUmlPackageDiagramController >> initializeProfilesPalette: aPalette [ - model profileApplications do: [ :each | + self model profileApplications do: [ :each | self initializeProfile: each appliedProfile palette: aPalette ] ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlPackageImportController.class.st b/repository/OpenPonk-ClassEditor/OPUmlPackageImportController.class.st index d75a0b68..7dddaa41 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlPackageImportController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlPackageImportController.class.st @@ -95,7 +95,8 @@ OPUmlPackageImportController >> modelClass [ { #category : 'forms' } OPUmlPackageImportController >> modelSource [ - ^ model importingNamespace + + ^ self model importingNamespace ] { #category : 'figures' } @@ -103,13 +104,14 @@ OPUmlPackageImportController >> modelSource: aModel in: aParentModel [ "answers whether model's source has been changed" self modelSource = aModel ifTrue: [ ^ false ]. - model importingNamespace: aModel. + self model importingNamespace: aModel. ^ true ] { #category : 'forms' } OPUmlPackageImportController >> modelTarget [ - ^ model importedPackage + + ^ self model importedPackage ] { #category : 'figures' } @@ -117,14 +119,14 @@ OPUmlPackageImportController >> modelTarget: aModel in: aParentModel [ "answers whether model's target has been changed" self modelTarget = aModel ifTrue: [ ^ false ]. - model importedPackage: aModel. + self model importedPackage: aModel. ^ true ] { #category : 'removing' } OPUmlPackageImportController >> removeModel [ - model importedPackage: nil. - model importingNamespace: nil. + self model importedPackage: nil. + self model importingNamespace: nil. super removeModel ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlPackageShape.class.st b/repository/OpenPonk-ClassEditor/OPUmlPackageShape.class.st index 0978680e..f755ec09 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlPackageShape.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlPackageShape.class.st @@ -25,6 +25,15 @@ OPUmlPackageShape >> addSelectionDraggableInteraction [ innerRoassalShapesBlock) ] +{ #category : 'removing' } +OPUmlPackageShape >> attachedShapes [ + + ^ super attachedShapes , { + nameLabel. + stereotypeLabel. + ear } +] + { #category : 'initialization' } OPUmlPackageShape >> initialize [ @@ -115,10 +124,6 @@ OPUmlPackageShape >> renderShapeDetails [ model: self; yourself. self canvas add: ear. - self roassalShape - when: RSShapeRemovedEvent - do: [ ear remove ] - for: self. nameLabel := RSLabel new color: Color black; model: self; @@ -130,12 +135,6 @@ OPUmlPackageShape >> renderShapeDetails [ yourself. self canvas add: nameLabel. self canvas add: stereotypeLabel. - self roassalShape - when: RSShapeRemovedEvent - do: [ - nameLabel remove. - stereotypeLabel remove ] - for: self. RSLocation new insideCornerLeft; offset: 0 @ self roassalShape border width; From e04e1c201c1b317d88654fb111fda0e2f6eb67c5 Mon Sep 17 00:00:00 2001 From: Jan Bliznicenko Date: Wed, 6 Nov 2024 16:30:06 +0100 Subject: [PATCH 02/17] Simplified property validation --- .../OPUmlAttributeController.class.st | 15 +++++---------- .../OPUmlClassifierShape.class.st | 6 +++--- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st b/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st index 5cea64a0..93b7cf80 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st @@ -221,19 +221,14 @@ OPUmlAttributeController >> validate [ super validate. self model ifNil: [ ^ self ]. + (self model owningClass isNotNil and: [ self model owningAssociation isNotNil ]) ifTrue: [ OPModelInvalid signal: (String streamContents: [ :s | - s << 'Property "' << self model name asString - << '" owned by class "' << self model owningClass name asString - << '" is also owned by assoc. '. - self model owningAssociation name - ifNil: [ - self model owningAssociation memberEnds - do: [ :each | - each type ifNotNil: [ :type | s << '"' << type name << '"' ] ] - separatedBy: [ s << ' <-> ' ] ] - ifNotNil: [ :assName | s << '"' << assName << '"' ] ]) ]. + s << 'Property "' << self model name asString << '" owned by ' + << self model owningClass asString << ' is also owned by ' + << self model owningAssociation asString ]) ]. + "Remove the ownership by the association in order to load the model" self model owningAssociation: nil ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlClassifierShape.class.st b/repository/OpenPonk-ClassEditor/OPUmlClassifierShape.class.st index a67dad06..96503080 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlClassifierShape.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlClassifierShape.class.st @@ -32,9 +32,9 @@ OPUmlClassifierShape >> createLabel: aLabelShapeClass [ | labelContainer | labelContainer := OPUmlCompartmentableLabel in: self. aLabelShapeClass in: labelContainer. - self ownedElements: (self ownedElements sorted: [ :a :b | - a = labelContainer or: [ - b ~= labelContainer and: [ + self ownedElements: (self ownedElements sorted: [ :a :b | + a = labelContainer or: [ + b ~= labelContainer and: [ (self ownedElements indexOf: a) < (self ownedElements indexOf: b) ] ] ]). ^ labelContainer From 53aa7cbbb74d26393d6713fff4268bb23b827e80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Blizni=C4=8Denko?= Date: Thu, 7 Nov 2024 15:30:28 +0100 Subject: [PATCH 03/17] isHideable is now true by default --- .../OpenPonk-ClassEditor/OPUmlClassifierController.class.st | 5 ----- .../OPUmlClassifierItemController.class.st | 5 ----- .../OpenPonk-ClassEditor/OPUmlPackageController.class.st | 5 ----- .../OPUmlPackageDiagramController.class.st | 4 ++-- .../OPUmlRelationshipController.class.st | 5 ----- 5 files changed, 2 insertions(+), 22 deletions(-) diff --git a/repository/OpenPonk-ClassEditor/OPUmlClassifierController.class.st b/repository/OpenPonk-ClassEditor/OPUmlClassifierController.class.st index 2556a40c..bf2efb59 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlClassifierController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlClassifierController.class.st @@ -70,11 +70,6 @@ OPUmlClassifierController >> hookDiagramElement [ self diagramElement hiddenPackages: self hiddenPackages ] -{ #category : 'testing' } -OPUmlClassifierController >> isHideable [ - ^ true -] - { #category : 'accessing' } OPUmlClassifierController >> modelClassName [ ^ self subclassResponsibility diff --git a/repository/OpenPonk-ClassEditor/OPUmlClassifierItemController.class.st b/repository/OpenPonk-ClassEditor/OPUmlClassifierItemController.class.st index f9780ec2..737cb593 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlClassifierItemController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlClassifierItemController.class.st @@ -37,11 +37,6 @@ OPUmlClassifierItemController >> descriptionName [ ^ description ] -{ #category : 'testing' } -OPUmlClassifierItemController >> isHideable [ - ^ true -] - { #category : 'hooks' } OPUmlClassifierItemController >> placeholderName [ diff --git a/repository/OpenPonk-ClassEditor/OPUmlPackageController.class.st b/repository/OpenPonk-ClassEditor/OPUmlPackageController.class.st index 9a3f5ff3..42516f84 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlPackageController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlPackageController.class.st @@ -93,11 +93,6 @@ OPUmlPackageController >> hookDiagramElement [ self diagramElement hiddenPackages: self hiddenPackages ] -{ #category : 'testing' } -OPUmlPackageController >> isHideable [ - ^ true -] - { #category : 'accessing' } OPUmlPackageController >> modelClass [ modelClass ifNil: [ self beForPackage ]. diff --git a/repository/OpenPonk-ClassEditor/OPUmlPackageDiagramController.class.st b/repository/OpenPonk-ClassEditor/OPUmlPackageDiagramController.class.st index 2d607df6..85545997 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlPackageDiagramController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlPackageDiagramController.class.st @@ -375,12 +375,12 @@ OPUmlPackageDiagramController >> rebuildPalette [ { #category : 'as yet unclassified' } OPUmlPackageDiagramController >> typeOfModel: aModel [ ^ OPModelObjectType - named: (aModel umlClassName splitOnCapitals joinUsing: ' ') + named: (aModel umlClassName splitCamelCase joinUsing: ' ') withSubtype: (aModel appliedStereotypes ifEmpty: [ OPModelObjectType named: '(without stereotype)' ] ifNotEmpty: [ OPModelObjectType named: - (aModel appliedStereotypes first umlClassName splitOnCapitals + (aModel appliedStereotypes first umlClassName splitCamelCase joinUsing: ' ') ]) ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlRelationshipController.class.st b/repository/OpenPonk-ClassEditor/OPUmlRelationshipController.class.st index ae8d1768..d8e7bf63 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlRelationshipController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlRelationshipController.class.st @@ -11,11 +11,6 @@ Class { #tag : 'Controllers' } -{ #category : 'testing' } -OPUmlRelationshipController >> isHideable [ - ^ true -] - { #category : 'accessing' } OPUmlRelationshipController >> magritteDescription [ | container | From 1b143e302a2a2d9c12ad892b1fe601bf0b3e847c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Blizni=C4=8Denko?= Date: Sat, 9 Nov 2024 23:26:36 +0100 Subject: [PATCH 04/17] Added multiple validations, fixed validation always removing owningAssociation --- .../OPTUmlBaseController.trait.st | 16 +++++++ ...PUmlAbstractAssociationController.class.st | 42 +++++++++++++++++++ .../OPUmlAssociationController.class.st | 27 +----------- .../OPUmlAttributeController.class.st | 11 +---- .../OPUmlClassifierController.class.st | 7 ++++ .../OPUmlExtensionController.class.st | 30 +------------ 6 files changed, 68 insertions(+), 65 deletions(-) create mode 100644 repository/OpenPonk-ClassEditor/OPUmlAbstractAssociationController.class.st diff --git a/repository/OpenPonk-ClassEditor/OPTUmlBaseController.trait.st b/repository/OpenPonk-ClassEditor/OPTUmlBaseController.trait.st index e39611d7..29e922ce 100644 --- a/repository/OpenPonk-ClassEditor/OPTUmlBaseController.trait.st +++ b/repository/OpenPonk-ClassEditor/OPTUmlBaseController.trait.st @@ -83,3 +83,19 @@ OPTUmlBaseController >> descriptionVisibility [ beSorted; yourself ] + +{ #category : 'as yet unclassified' } +OPTUmlBaseController >> validateProperty: aProperty [ + + aProperty ifNil: [ ^ self ]. + aProperty owningClass ifNil: [ ^ self ]. + aProperty owningAssociation ifNil: [ ^ self ]. + + OPModelInvalid signal: (String streamContents: [ :s | + s << 'Property "' << aProperty name asString << '" owned by ' + << aProperty owningClass asString << ' is also owned by ' + << aProperty owningAssociation asString ]). + + "Remove the ownership by the association in order to load the model" + aProperty owningAssociation: nil +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlAbstractAssociationController.class.st b/repository/OpenPonk-ClassEditor/OPUmlAbstractAssociationController.class.st new file mode 100644 index 00000000..7935ab55 --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUmlAbstractAssociationController.class.st @@ -0,0 +1,42 @@ +Class { + #name : 'OPUmlAbstractAssociationController', + #superclass : 'OPUmlRelationshipController', + #category : 'OpenPonk-ClassEditor-Controllers', + #package : 'OpenPonk-ClassEditor', + #tag : 'Controllers' +} + +{ #category : 'accessing' } +OPUmlAbstractAssociationController >> modelSource [ + + ^ self model memberEnds ifNotEmpty: [ :memberEnds | + memberEnds first type ] +] + +{ #category : 'accessing' } +OPUmlAbstractAssociationController >> modelTarget [ + + ^ self model memberEnds size > 1 + ifTrue: [ self model memberEnds second type ] + ifFalse: [ nil ] +] + +{ #category : 'removing' } +OPUmlAbstractAssociationController >> removeModel [ + + [ self model memberEnds isNotEmpty ] whileTrue: [ + | end | + end := self model memberEnds anyOne. + end association: nil. + end owningClass: nil. + end owningAssociation: nil ]. + super removeModel +] + +{ #category : 'validation' } +OPUmlAbstractAssociationController >> validate [ + + super validate. + self model memberEnds do: [ :each | self validateProperty: each ]. + self model attributes do: [ :each | self validateProperty: each ] +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlAssociationController.class.st b/repository/OpenPonk-ClassEditor/OPUmlAssociationController.class.st index d67866b2..dfd4d7a1 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlAssociationController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlAssociationController.class.st @@ -3,7 +3,7 @@ I am a controller for Association " Class { #name : 'OPUmlAssociationController', - #superclass : 'OPUmlRelationshipController', + #superclass : 'OPUmlAbstractAssociationController', #category : 'OpenPonk-ClassEditor-Controllers', #package : 'OpenPonk-ClassEditor', #tag : 'Controllers' @@ -87,13 +87,6 @@ OPUmlAssociationController >> modelClass [ ^ OPUMLAssociation ] -{ #category : 'accessing' } -OPUmlAssociationController >> modelSource [ - - ^ self model memberEnds ifNotEmpty: [ :memberEnds | - memberEnds first type ] -] - { #category : 'construction' } OPUmlAssociationController >> modelSource: aModel in: aParentModel [ @@ -109,14 +102,6 @@ OPUmlAssociationController >> modelSource: aModel in: aParentModel [ ^ true ] -{ #category : 'accessing' } -OPUmlAssociationController >> modelTarget [ - - ^ self model memberEnds size > 1 - ifTrue: [ self model memberEnds second type ] - ifFalse: [ nil ] -] - { #category : 'construction' } OPUmlAssociationController >> modelTarget: aModel in: aParentModel [ @@ -132,16 +117,6 @@ OPUmlAssociationController >> modelTarget: aModel in: aParentModel [ ^ true ] -{ #category : 'removing' } -OPUmlAssociationController >> removeModel [ - - self model memberEnds - select: [ :each | each owningClass isNotNil ] - thenDo: [ :eachProperty | eachProperty owningClass: nil ]. - self model memberEnds: #( ). - super removeModel -] - { #category : 'construction' } OPUmlAssociationController >> switchSourceAndTarget [ diff --git a/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st b/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st index 93b7cf80..3bc4ac52 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st @@ -220,16 +220,7 @@ OPUmlAttributeController >> typeNamed: aName [ OPUmlAttributeController >> validate [ super validate. - self model ifNil: [ ^ self ]. - - (self model owningClass isNotNil and: [ - self model owningAssociation isNotNil ]) ifTrue: [ - OPModelInvalid signal: (String streamContents: [ :s | - s << 'Property "' << self model name asString << '" owned by ' - << self model owningClass asString << ' is also owned by ' - << self model owningAssociation asString ]) ]. - "Remove the ownership by the association in order to load the model" - self model owningAssociation: nil + self validateProperty: self model ] { #category : 'forms' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlClassifierController.class.st b/repository/OpenPonk-ClassEditor/OPUmlClassifierController.class.st index bf2efb59..d311c16a 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlClassifierController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlClassifierController.class.st @@ -104,3 +104,10 @@ OPUmlClassifierController >> updateAfterDiagramFocused [ self diagramElement hiddenPackages: self hiddenPackages. super updateAfterDiagramFocused ] + +{ #category : 'validation' } +OPUmlClassifierController >> validate [ + + super validate. + self model attributes do: [ :each | self validateProperty: each ] +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlExtensionController.class.st b/repository/OpenPonk-ClassEditor/OPUmlExtensionController.class.st index 779a9291..0686d0f4 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlExtensionController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlExtensionController.class.st @@ -3,7 +3,7 @@ I am a controller for UML Extensions " Class { #name : 'OPUmlExtensionController', - #superclass : 'OPUmlRelationshipController', + #superclass : 'OPUmlAbstractAssociationController', #category : 'OpenPonk-ClassEditor-Controllers', #package : 'OpenPonk-ClassEditor', #tag : 'Controllers' @@ -20,13 +20,6 @@ OPUmlExtensionController >> modelClass [ ^ OPUMLExtension ] -{ #category : 'accessing' } -OPUmlExtensionController >> modelSource [ - - ^ self model memberEnds ifNotEmpty: [ :memberEnds | - memberEnds first type ] -] - { #category : 'construction' } OPUmlExtensionController >> modelSource: aModel in: aParentModel [ @@ -41,14 +34,6 @@ OPUmlExtensionController >> modelSource: aModel in: aParentModel [ ^ true ] -{ #category : 'accessing' } -OPUmlExtensionController >> modelTarget [ - - ^ self model memberEnds size > 1 - ifTrue: [ self model memberEnds second type ] - ifFalse: [ nil ] -] - { #category : 'construction' } OPUmlExtensionController >> modelTarget: aModel in: aParentModel [ @@ -61,16 +46,3 @@ OPUmlExtensionController >> modelTarget: aModel in: aParentModel [ self model memberEnds add: property. ^ true ] - -{ #category : 'removing' } -OPUmlExtensionController >> removeModel [ - "extra work to trigger update of the end classes... maybe this should be automatic for edges" - - [ self model memberEnds isNotEmpty ] whileTrue: [ - | end | - end := self model memberEnds first. - end association: nil. - end owningClass: nil. - end owningAssociation: nil ]. - super removeModel -] From a7c46477a23a807560d80db8e781399989ad1b72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Blizni=C4=8Denko?= Date: Sun, 10 Nov 2024 15:07:04 +0100 Subject: [PATCH 05/17] reworked generalization set editing --- .../OPUmlAllGeneralizationSetsEditor.class.st | 37 ++++ .../OPUmlEditorWorkbenchTest.class.st | 5 +- .../OPUmlGeneralizationController.class.st | 53 +++--- ...OPUmlGeneralizationControllerTest.class.st | 31 ---- .../OPUmlGeneralizationEditor.class.st | 109 ++++++++++++ .../OPUmlGeneralizationLabel.class.st | 42 ++--- ...PUmlGeneralizationSetDescriptions.class.st | 165 ------------------ .../OPUmlGeneralizationSetsEditor.class.st | 162 +++++++++++++++++ ...eralizationSetsOfControllerEditor.class.st | 155 ++++++++++++++++ .../OPUmlPackageDiagramController.class.st | 60 ++++++- .../OPUmlPackageImportController.class.st | 39 ----- 11 files changed, 565 insertions(+), 293 deletions(-) create mode 100644 repository/OpenPonk-ClassEditor/OPUmlAllGeneralizationSetsEditor.class.st create mode 100644 repository/OpenPonk-ClassEditor/OPUmlGeneralizationEditor.class.st delete mode 100644 repository/OpenPonk-ClassEditor/OPUmlGeneralizationSetDescriptions.class.st create mode 100644 repository/OpenPonk-ClassEditor/OPUmlGeneralizationSetsEditor.class.st create mode 100644 repository/OpenPonk-ClassEditor/OPUmlGeneralizationSetsOfControllerEditor.class.st diff --git a/repository/OpenPonk-ClassEditor/OPUmlAllGeneralizationSetsEditor.class.st b/repository/OpenPonk-ClassEditor/OPUmlAllGeneralizationSetsEditor.class.st new file mode 100644 index 00000000..0fdb86b2 --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUmlAllGeneralizationSetsEditor.class.st @@ -0,0 +1,37 @@ +Class { + #name : 'OPUmlAllGeneralizationSetsEditor', + #superclass : 'OPUmlGeneralizationSetsEditor', + #category : 'OpenPonk-ClassEditor-UI', + #package : 'OpenPonk-ClassEditor', + #tag : 'UI' +} + +{ #category : 'initialize-release' } +OPUmlAllGeneralizationSetsEditor >> close [ + + self withWindowDo: [ :window | window close ] +] + +{ #category : 'layout' } +OPUmlAllGeneralizationSetsEditor >> defaultLayout [ + + ^ SpBoxLayout newVertical + add: table; + yourself +] + +{ #category : 'accessing' } +OPUmlAllGeneralizationSetsEditor >> diagramController: aController [ + + self controller: aController +] + +{ #category : 'initialization' } +OPUmlAllGeneralizationSetsEditor >> initializeWindow: aWindow [ + + aWindow + title: 'Generalization Sets Editor'; + initialExtent: 500 @ 750; + closeOnBackdropClick: true; + whenClosedDo: [ aWindow isCancelled ifFalse: [ self save ] ] +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlEditorWorkbenchTest.class.st b/repository/OpenPonk-ClassEditor/OPUmlEditorWorkbenchTest.class.st index 41ceaed2..d4a19f9a 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlEditorWorkbenchTest.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlEditorWorkbenchTest.class.st @@ -39,8 +39,9 @@ OPUmlEditorWorkbenchTest >> setUp [ { #category : 'running' } OPUmlEditorWorkbenchTest >> tearDown [ - super tearDown. - window ifNotNil: #delete + + window ifNotNil: [ window close ]. + super tearDown ] { #category : 'tests' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationController.class.st b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationController.class.st index 5f4d1153..a3dc15ec 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationController.class.st @@ -22,43 +22,24 @@ OPUmlGeneralizationController >> descriptionGeneral [ ] { #category : 'forms' } -OPUmlGeneralizationController >> descriptionGeneralizationSet [ +OPUmlGeneralizationController >> descriptionGeneralizationSets [ ^ MAToManyRelationDescription new - initializer: [ :desc | desc initializeFor: self ]; - display: [ :desc | + display: [ :set | String streamContents: [ :stream | - stream << (desc set name ifNil: [ 'unnamed' ]) << ': ' - << (desc set isCovering - ifTrue: [ 'complete' ] - ifFalse: [ 'incomplete' ]) << ', ' << (desc set isDisjoint - ifTrue: [ 'disjoint' ] - ifFalse: [ 'overlapping' ]) << ' (' - << (desc set generalizations size pluralize: 'generalization') + stream << ' - ' + << ((set name isNil or: [ set name trim isEmpty ]) + ifTrue: [ 'generalization set' ] + ifFalse: [ set name ]) << ' (' + << (set generalizations size pluralize: 'generalization') << ')' ] ]; accessor: (MAPluggableAccessor - read: [ :me | - me model generalizationSets collect: [ :each | - OPUmlGeneralizationSetDescriptions new - controller: self; - set: each ] ] + read: [ :me | me model generalizationSets ] write: [ :me :newValue | - | oldSets newSets setsToRemove setsToAdd | - oldSets := me model generalizationSets asArray. - newSets := newValue collect: #set. - oldSets do: [ :each | each generalizations remove: me model ]. - newSets do: [ :each | each generalizations add: me model ]. - setsToRemove := oldSets select: [ :each | - each generalizations isEmpty ]. - setsToAdd := newSets select: [ :each | - each generalizations size = 1 ]. - me model generalizationSets: newSets. - self parentPackageDo: [ :parentPackage | - parentPackage packagedElements: - parentPackage packagedElements \ setsToRemove , setsToAdd ]. - self diagramElement modelChanged ]); - classes: { OPUmlGeneralizationSetDescriptions }; + self error: + 'Direct manipulation only via ' + , OPUmlGeneralizationEditor name ]); label: 'Generalization Sets'; priority: 5; yourself @@ -92,6 +73,18 @@ OPUmlGeneralizationController >> diagramElementClass [ ^ OPUmlGeneralizationShape ] +{ #category : 'as yet unclassified' } +OPUmlGeneralizationController >> maEdit [ + + | editor | + editor := OPUmlGeneralizationEditor new. + editor + application: self diagramController editor application; + controller: self; + openModal. + self diagramController openInForm: self +] + { #category : 'accessing' } OPUmlGeneralizationController >> modelClass [ ^ OPUMLGeneralization diff --git a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationControllerTest.class.st b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationControllerTest.class.st index 07312f6d..160c35e1 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationControllerTest.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationControllerTest.class.st @@ -27,34 +27,3 @@ OPUmlGeneralizationControllerTest >> testDescriptionName [ self assert: controller descriptionName equals: nil ] - -{ #category : 'tests' } -OPUmlGeneralizationControllerTest >> testGeneralizationSet [ - - | set | - self showInDiagram. - self - assertCollection: diagramController model packagedElements - hasSameElements: { - sourceModel. - targetModel }. - set := OPUMLGeneralizationSet new. - controller - write: { (OPUmlGeneralizationSetDescriptions new - controller: controller; - set: set; - yourself) } - using: controller descriptionGeneralizationSet. - self - assertCollection: diagramController model packagedElements - hasSameElements: { - sourceModel. - targetModel. - set }. - controller removeModel. - self - assertCollection: diagramController model packagedElements - hasSameElements: { - sourceModel. - targetModel } -] diff --git a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationEditor.class.st b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationEditor.class.st new file mode 100644 index 00000000..3e9c792a --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationEditor.class.st @@ -0,0 +1,109 @@ +Class { + #name : 'OPUmlGeneralizationEditor', + #superclass : 'SpPresenter', + #instVars : [ + 'controller', + 'generalLabel', + 'general', + 'specificLabel', + 'specific', + 'commentLabel', + 'commentTextArea', + 'generalizationSetsEditor' + ], + #category : 'OpenPonk-ClassEditor-UI', + #package : 'OpenPonk-ClassEditor', + #tag : 'UI' +} + +{ #category : 'initialization' } +OPUmlGeneralizationEditor >> controller: aGeneralizationController [ + + controller := aGeneralizationController. + + general label: (controller model general name ifNil: [ '' ]). + specific label: (controller model specific name ifNil: [ '' ]). + commentTextArea text: (controller model ownedComments + ifEmpty: [ '' ] + ifNotEmpty: [ :comments | comments first body asString ]). + generalizationSetsEditor generalizationController: controller +] + +{ #category : 'layout' } +OPUmlGeneralizationEditor >> defaultLayout [ + + ^ SpBoxLayout newVertical + add: (SpPanedLayout newHorizontal + positionOfSlider: 0.4; + add: (SpTabLayout new + add: (SpBoxLayout newVertical + add: (SpBoxLayout newHorizontal + add: generalLabel width: 70; + add: general; + yourself) + expand: false; + add: (self instantiate: SpLabelPresenter new) + expand: false; + add: (SpBoxLayout newHorizontal + add: specificLabel width: 70; + add: specific; + yourself) + expand: false; + add: (self instantiate: SpLabelPresenter new) + expand: false; + add: (SpBoxLayout newHorizontal + add: commentLabel width: 70; + add: commentTextArea; + yourself) + height: 100; + yourself) + label: 'Generalization'; + yourself); + add: (SpTabLayout new + add: generalizationSetsEditor label: 'Generalization Sets'; + yourself); + yourself); + yourself +] + +{ #category : 'initialization' } +OPUmlGeneralizationEditor >> initializePresenters [ + + super initializePresenters. + + generalLabel := self newLabel. + generalLabel label: 'General:'. + general := self newLabel. + specificLabel := self newLabel. + specificLabel label: 'Specific:'. + specific := self newLabel. + commentLabel := self newLabel. + commentLabel label: 'Comment:'. + commentTextArea := self newText. + generalizationSetsEditor := self instantiate: + OPUmlGeneralizationSetsOfControllerEditor + new +] + +{ #category : 'initialization' } +OPUmlGeneralizationEditor >> initializeWindow: aWindow [ + + aWindow + title: 'Edit Generalization'; + initialExtent: 700 @ 500; + closeOnBackdropClick: true; + whenClosedDo: [ aWindow isCancelled ifFalse: [ self save ] ] +] + +{ #category : 'actions' } +OPUmlGeneralizationEditor >> save [ + + generalizationSetsEditor save. + commentTextArea text trim ifEmpty: [ + ^ controller model ownedComments + do: [ :each | each annotatedElements removeAll ]; + removeAll ]. + controller model ownedComments ifEmpty: [ + controller model ownedComments add: OPUMLComment new ]. + controller model ownedComments first body: commentTextArea text trim +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationLabel.class.st b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationLabel.class.st index 08685021..e7cb2e6b 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationLabel.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationLabel.class.st @@ -15,30 +15,24 @@ OPUmlGeneralizationLabel >> defaultAnchorConstraintPosition [ { #category : 'accessing' } OPUmlGeneralizationLabel >> defaultText [ - | labels | - labels := (self modelElement generalizationSets ifEmpty: [ ^ '' ]) - collect: [ :each | - String streamContents: [ :stream | - | props | - (each name isNotNil and: [ each name isNotEmpty ]) - ifTrue: [ - stream - << each name; - << ' ' ]. - props := OrderedCollection new. - each isCovering ifTrue: [ props add: 'complete' ]. - each isCovering not & self showIncomplete ifTrue: [ - props add: 'incomplete' ]. - each isDisjoint ifTrue: [ props add: 'disjoint' ]. - each isDisjoint not & self showOverlapping ifTrue: [ - props add: 'overlapping' ]. - props ifNotEmpty: [ - stream << '{'. - props - do: [ :p | stream << p ] - separatedBy: [ stream << ', ' ]. - stream << '}' ] ] ]. - ^ labels joinUsing: String cr + ^ String streamContents: [ :s | + self modelElement generalizationSets + do: [ :each | self defaultTextForSet: each on: s ] + separatedBy: [ s << '; ' ] ] +] + +{ #category : 'accessing' } +OPUmlGeneralizationLabel >> defaultTextForSet: aGeneralizationSet on: aStream [ + + | props | + aStream << (aGeneralizationSet name trim ifEmpty: [ 'set' ]). + + aStream << ' {'. + props := OrderedCollection new. + aGeneralizationSet isCovering ifTrue: [ props add: 'complete' ]. + aGeneralizationSet isDisjoint ifTrue: [ props add: 'disjoint' ]. + props do: [ :p | aStream << p ] separatedBy: [ aStream << ', ' ]. + aStream << '}' ] { #category : 'testing' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationSetDescriptions.class.st b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationSetDescriptions.class.st deleted file mode 100644 index c728ad80..00000000 --- a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationSetDescriptions.class.st +++ /dev/null @@ -1,165 +0,0 @@ -" -I am a description proxy for a generalization set and I collaborate with GeneralizationController. -" -Class { - #name : 'OPUmlGeneralizationSetDescriptions', - #superclass : 'Object', - #instVars : [ - 'set', - 'controller' - ], - #category : 'OpenPonk-ClassEditor-Forms', - #package : 'OpenPonk-ClassEditor', - #tag : 'Forms' -} - -{ #category : 'comparing' } -OPUmlGeneralizationSetDescriptions >> = aDescription [ - self species = aDescription species - ifFalse: [ ^ false ]. - ^ self set = aDescription set -] - -{ #category : 'accessing' } -OPUmlGeneralizationSetDescriptions >> controller [ - ^ controller -] - -{ #category : 'accessing' } -OPUmlGeneralizationSetDescriptions >> controller: anObject [ - controller := anObject -] - -{ #category : 'accessing' } -OPUmlGeneralizationSetDescriptions >> descriptionAccessor: aSymbol [ - - ^ MAPluggableAccessor - read: [ :me | set perform: aSymbol ] - write: [ :me :newValue | - set perform: (aSymbol , ':') asSymbol with: newValue. - { controller model } asSet , set generalizations - collect: [ :each | - controller diagramController controllerForModel: each ] - thenDo: [ :ctrl | ctrl diagramElement modelChanged ] ] -] - -{ #category : 'forms' } -OPUmlGeneralizationSetDescriptions >> descriptionIsCovering [ - - ^ MABooleanDescription new - accessor: (self descriptionAccessor: #isCovering); - label: 'Is Covering'; - priority: 10; - yourself -] - -{ #category : 'forms' } -OPUmlGeneralizationSetDescriptions >> descriptionIsDisjoint [ - - ^ MABooleanDescription new - accessor: (self descriptionAccessor: #isDisjoint); - label: 'Is Disjoint'; - priority: 11; - yourself -] - -{ #category : 'forms' } -OPUmlGeneralizationSetDescriptions >> descriptionName [ - - ^ MAStringDescription new - accessor: (self descriptionAccessor: #name); - label: 'Name'; - priority: 1; - yourself -] - -{ #category : 'forms' } -OPUmlGeneralizationSetDescriptions >> descriptionVisibility [ - - ^ MASingleOptionDescription new - optionsAndLabels: - {(OPUMLVisibilityKind public -> 'public'). - (OPUMLVisibilityKind protected -> 'protected'). - (OPUMLVisibilityKind private -> 'private'). - (OPUMLVisibilityKind new package -> 'package')}; - morphicClass: MAMorphicDropList; - reference: MAStringDescription new; - accessor: (self descriptionAccessor: #visibility); - label: 'Visibility'; - priority: 4; - beSorted; - yourself -] - -{ #category : 'comparing' } -OPUmlGeneralizationSetDescriptions >> hash [ - ^ super hash bitXor: set hash -] - -{ #category : 'forms' } -OPUmlGeneralizationSetDescriptions >> initializeFor: aGeneralizationController [ - - | dialog listPresenter allElements setsToDisplay | - self controller: aGeneralizationController. - dialog := SpVersatileDialogPresenter new. - allElements := aGeneralizationController source - parentPackageDo: [ :parentPackage | - parentPackage packagedElements ] - ifNone: [ #( ) ]. - setsToDisplay := ((allElements select: [ :each | - each oclIsKindOf: #GeneralizationSet ]) asSet - , - ((allElements select: [ :each | - each respondsTo: #generalizations ]) - flatCollectAsSet: [ :each | - each generalizations flatCollect: [ - :eachGeneralization | - eachGeneralization generalizationSets ] ])) - asArray select: [ :each | - each generalizations anySatisfy: [ :any | - any general - = aGeneralizationController model general ] ]. - setsToDisplay ifEmpty: [ - ^ self - set: OPUMLGeneralizationSet new; - yourself ]. - listPresenter := dialog newList. - listPresenter - items: setsToDisplay; - display: [ :each | - String streamContents: [ :stream | - stream - << 'GeneralizationSet {'''; - << (each name ifNil: [ '' ]); - << ''', '. - each isCovering - ifTrue: [ stream << 'complete, ' ] - ifFalse: [ stream << 'incomplete, ' ]. - each isDisjoint - ifTrue: [ stream << 'disjoint, ' ] - ifFalse: [ stream << 'overlapping, ' ]. - stream << ('(' , each generalizations size asString , ')}') ] ]. - dialog contentArea: listPresenter. - dialog - addButton: #select - text: 'Select existing from list' - value: [ listPresenter selection selectedItem ] - condition: [ listPresenter selection selectedItems size = 1 ]. - dialog - addButton: #new - text: 'Create new' - value: [ OPUMLGeneralizationSet new ]. - dialog openModal. - dialog withWindowDo: [ :w | w title: 'Select existing or new set' ]. - self set: dialog result value -] - -{ #category : 'accessing' } -OPUmlGeneralizationSetDescriptions >> set [ - ^ set -] - -{ #category : 'accessing' } -OPUmlGeneralizationSetDescriptions >> set: aGeneralizationSet [ - set := aGeneralizationSet -] diff --git a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationSetsEditor.class.st b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationSetsEditor.class.st new file mode 100644 index 00000000..d69eb65f --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationSetsEditor.class.st @@ -0,0 +1,162 @@ +Class { + #name : 'OPUmlGeneralizationSetsEditor', + #superclass : 'SpPresenter', + #instVars : [ + 'table', + 'controller' + ], + #category : 'OpenPonk-ClassEditor-UI', + #package : 'OpenPonk-ClassEditor', + #tag : 'UI' +} + +{ #category : 'accessing' } +OPUmlGeneralizationSetsEditor >> controller: aController [ + + controller := aController. + self reloadGeneralizationSets +] + +{ #category : 'private - actions' } +OPUmlGeneralizationSetsEditor >> deleteSet: aSet [ + + | otherGeneralizations | + otherGeneralizations := aSet generalizations copyWithout: + controller model. + otherGeneralizations ifNotEmpty: [ + (self confirm: 'This generalization set contains ' + , (otherGeneralizations size pluralize: 'generalization') + , + '. Those will not be removed, just no longer part of the set. Remove it?') + ifFalse: [ ^ self ] ]. + table items: (table items reject: [ :any | any uuid = aSet uuid ]) +] + +{ #category : 'initialization' } +OPUmlGeneralizationSetsEditor >> initializePresenters [ + + super initializePresenters. + table := self newTable. + self initializeTable +] + +{ #category : 'initialization' } +OPUmlGeneralizationSetsEditor >> initializeTable [ + + table + addColumn: (SpStringTableColumn new + title: 'Name (editable)'; + evaluated: #name; + beEditable; + onTextChanged: [ :gSet :text | gSet name: text ]; + yourself); + addColumn: (SpCheckBoxTableColumn new + title: 'Covering'; + beNotExpandable; + width: 60; + evaluated: [ :gSet | gSet isCovering ]; + onActivation: [ :gSet | gSet isCovering: true ]; + onDeactivation: [ :gSet | gSet isCovering: false ]); + addColumn: (SpCheckBoxTableColumn new + title: 'Disjoint'; + beNotExpandable; + width: 60; + evaluated: [ :gSet | gSet isDisjoint ]; + onActivation: [ :gSet | gSet isDisjoint: true ]; + onDeactivation: [ :gSet | gSet isDisjoint: false ]); + addColumn: (SpLinkTableColumn new + title: 'Delete'; + beNotExpandable; + width: 60; + evaluated: [ :gSet | 'Delete' ]; + action: [ :gSet | self deleteSet: gSet ]) +] + +{ #category : 'actions' } +OPUmlGeneralizationSetsEditor >> processChangesIn: originalSets basedOn: newSetCopies [ + + originalSets do: [ :eachOriginalSet | + | relevantCopy | + relevantCopy := newSetCopies detect: [ :any | + any uuid = eachOriginalSet uuid ]. + eachOriginalSet name: relevantCopy name. + eachOriginalSet isCovering: relevantCopy isCovering. + eachOriginalSet isDisjoint: relevantCopy isDisjoint ] +] + +{ #category : 'actions' } +OPUmlGeneralizationSetsEditor >> processDoRemove: setsToRemove [ + + | uuids generalizations | + uuids := setsToRemove collect: [ :each | each uuid ]. + controller diagramController allPackages do: [ :each | + each packagedElements: + (each packagedElements reject: [ :any | uuids includes: any uuid ]) ]. + setsToRemove do: [ :each | + generalizations := each generalizations asSet. + each generalizations: #( ) ] +] + +{ #category : 'actions' } +OPUmlGeneralizationSetsEditor >> processRemovalIn: originalSets basedOn: newSetCopies [ + + | setsToRemove | + setsToRemove := originalSets select: [ :each | + newSetCopies noneSatisfy: [ :any | + any uuid = each uuid ] ]. + self processDoRemove: setsToRemove. + ^ originalSets reject: [ :each | + setsToRemove anySatisfy: [ :any | any uuid = each uuid ] ] +] + +{ #category : 'initialization' } +OPUmlGeneralizationSetsEditor >> relevantGeneralizationSets [ + + | allElements packagedSets usedSets allSets | + allElements := controller diagramController allShowableElements. + packagedSets := (allElements select: [ :each | + each oclIsKindOf: #GeneralizationSet ]) asSet. + usedSets := (allElements select: [ :each | + each respondsTo: #generalizations ]) flatCollectAsSet: [ + :each | + each generalizations flatCollect: [ :eachGeneralization | + eachGeneralization generalizationSets ] ]. + allSets := packagedSets , usedSets. + allSets do: [ :each | "make sure the uuid is set before making a copy" + each uuid ]. + ^ allSets +] + +{ #category : 'initialization' } +OPUmlGeneralizationSetsEditor >> reloadGeneralizationSets [ + + table items: (self relevantGeneralizationSets + collect: [ :each | each copy ] + as: OrderedCollection) +] + +{ #category : 'actions' } +OPUmlGeneralizationSetsEditor >> save [ + + | originalSets newSetCopies affectedGeneralizations | + originalSets := self relevantGeneralizationSets. + newSetCopies := table items. + affectedGeneralizations := originalSets , newSetCopies + flatCollectAsSet: [ :each | + each generalizations ]. + originalSets := self + processRemovalIn: originalSets + basedOn: newSetCopies. + self processChangesIn: originalSets basedOn: newSetCopies. + self updateShapesOf: affectedGeneralizations +] + +{ #category : 'as yet unclassified' } +OPUmlGeneralizationSetsEditor >> updateShapesOf: generalizations [ + + generalizations do: [ :eachGeneralization | + controller diagramController + controllerForModel: eachGeneralization + ifFound: [ :generalizationController | + generalizationController modelChanged ] ] +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationSetsOfControllerEditor.class.st b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationSetsOfControllerEditor.class.st new file mode 100644 index 00000000..eba82db5 --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationSetsOfControllerEditor.class.st @@ -0,0 +1,155 @@ +Class { + #name : 'OPUmlGeneralizationSetsOfControllerEditor', + #superclass : 'OPUmlGeneralizationSetsEditor', + #instVars : [ + 'infoLabel', + 'addGeneralizationSetButton', + 'partOfSets' + ], + #category : 'OpenPonk-ClassEditor-UI', + #package : 'OpenPonk-ClassEditor', + #tag : 'UI' +} + +{ #category : 'private - actions' } +OPUmlGeneralizationSetsOfControllerEditor >> addNewSet [ + + | newSet | + newSet := OPUMLGeneralizationSet new. + newSet uuid. + self addToSet: newSet. + table items: { newSet } , table items +] + +{ #category : 'private - actions' } +OPUmlGeneralizationSetsOfControllerEditor >> addToSet: aSet [ + + partOfSets add: aSet +] + +{ #category : 'layout' } +OPUmlGeneralizationSetsOfControllerEditor >> defaultLayout [ + + ^ SpBoxLayout newVertical + add: (SpBoxLayout newHorizontal + add: infoLabel; + add: addGeneralizationSetButton expand: false; + yourself) + expand: false; + add: table; + yourself +] + +{ #category : 'private - actions' } +OPUmlGeneralizationSetsOfControllerEditor >> deleteSet: aSet [ + + self removeFromSet: aSet. + super deleteSet: aSet +] + +{ #category : 'accessing' } +OPUmlGeneralizationSetsOfControllerEditor >> generalizationController: aController [ + + self controller: aController +] + +{ #category : 'initialization' } +OPUmlGeneralizationSetsOfControllerEditor >> initializePresenters [ + + super initializePresenters. + infoLabel := self newLabel. + infoLabel label: 'Check generalization sets to be part of'. + addGeneralizationSetButton := self newButton. + addGeneralizationSetButton + label: 'New Set'; + iconName: 'add'; + action: [ self addNewSet ] +] + +{ #category : 'initialization' } +OPUmlGeneralizationSetsOfControllerEditor >> initializeTable [ + + table addColumn: (SpCheckBoxTableColumn new + title: 'Part of'; + beNotExpandable; + width: 50; + evaluated: [ :gSet | partOfSets includes: gSet ]; + onActivation: [ :gSet | self addToSet: gSet ]; + onDeactivation: [ :gSet | self removeFromSet: gSet ]). + + super initializeTable +] + +{ #category : 'actions' } +OPUmlGeneralizationSetsOfControllerEditor >> processChangesIn: originalSets basedOn: newSetCopies [ + + | updatedSets | + super processChangesIn: originalSets basedOn: newSetCopies. + updatedSets := self processNewIn: originalSets basedOn: newSetCopies. + self processInclusionsIn: updatedSets. + self processEmptyIn: updatedSets +] + +{ #category : 'actions' } +OPUmlGeneralizationSetsOfControllerEditor >> processEmptyIn: originalSets [ + + | setsToRemove | + setsToRemove := originalSets select: [ :each | + each generalizations isEmpty ]. + self processDoRemove: setsToRemove +] + +{ #category : 'actions' } +OPUmlGeneralizationSetsOfControllerEditor >> processInclusionsIn: originalSets [ + + originalSets do: [ :each | + | isPartOf | + isPartOf := partOfSets anySatisfy: [ :any | any uuid = each uuid ]. + isPartOf + ifTrue: [ each generalizations addIfNotPresent: controller model ] + ifFalse: [ + each generalizations remove: controller model ifAbsent: [ ] ] ] +] + +{ #category : 'actions' } +OPUmlGeneralizationSetsOfControllerEditor >> processNewIn: originalSets basedOn: newSetCopies [ + + | setsToCreate | + setsToCreate := newSetCopies select: [ :each | + originalSets noneSatisfy: [ :none | + none uuid = each uuid ] ]. + controller source parentPackageDo: [ :package | + package packagedElements addAll: setsToCreate ]. + ^ originalSets , setsToCreate +] + +{ #category : 'initialization' } +OPUmlGeneralizationSetsOfControllerEditor >> relevantGeneralizationSets [ + + ^ super relevantGeneralizationSets select: [ :each | + each generalizations anySatisfy: [ :any | + any general = controller model general ] ] +] + +{ #category : 'initialization' } +OPUmlGeneralizationSetsOfControllerEditor >> reloadGeneralizationSets [ + + | relevantSets | + relevantSets := self relevantGeneralizationSets collect: [ :each | + each copy ]. + partOfSets := relevantSets select: [ :each | + each generalizations includes: controller model ]. + table items: relevantSets asOrderedCollection +] + +{ #category : 'private - actions' } +OPUmlGeneralizationSetsOfControllerEditor >> removeFromSet: aSet [ + + partOfSets removeAllSuchThat: [ :each | each uuid = aSet uuid ] +] + +{ #category : 'as yet unclassified' } +OPUmlGeneralizationSetsOfControllerEditor >> updateShapesOf: generalizations [ + + super updateShapesOf: (generalizations copyWith: controller model) +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlPackageDiagramController.class.st b/repository/OpenPonk-ClassEditor/OPUmlPackageDiagramController.class.st index 85545997..a6f15f7e 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlPackageDiagramController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlPackageDiagramController.class.st @@ -11,6 +11,36 @@ Class { #tag : 'Controllers' } +{ #category : 'enumerating' } +OPUmlPackageDiagramController >> allGeneralizationSets [ + + ^ self allPackages flatCollectAsSet: [ :eachPackage | + (eachPackage packagedElements select: [ :each | + each oclIsKindOf: #GeneralizationSet ]) + , (((eachPackage packagedElements select: [ :any | + any oclIsKindOf: #Classifier ]) flatCollect: [ + :eachClassifier | eachClassifier generalizations ]) + flatCollect: [ :each | each generalizationSets ]) ] +] + +{ #category : 'as yet unclassified' } +OPUmlPackageDiagramController >> allPackages [ + + ^ (Set with: self model) , (self allPackagesIn: self model) +] + +{ #category : 'as yet unclassified' } +OPUmlPackageDiagramController >> allPackagesIn: aPackage [ + + | innerPackages | + innerPackages := aPackage packagedElements select: [ :each | + each oclIsKindOf: #Package ]. + ^ innerPackages asSet + , + (innerPackages flatCollectAsSet: [ :each | + self allPackagesIn: each ]) +] + { #category : 'as yet unclassified' } OPUmlPackageDiagramController >> allShowableElements [ "Should return all elements that could be directly hidden on diagram" @@ -113,6 +143,22 @@ OPUmlPackageDiagramController >> descriptionAppliedProfiles [ yourself ] +{ #category : 'forms' } +OPUmlPackageDiagramController >> descriptionGeneralizationSets [ + + + ^ MAToManyRelationDescription new + readOnly: true; + accessor: (MAPluggableAccessor + read: [ :me | self allGeneralizationSets ] + write: [ :me :newValue | + self error: 'Direct manipulation only via ' + , OPUmlAllGeneralizationSetsEditor name ]); + label: 'Generalization Sets'; + priority: 20; + yourself +] + { #category : 'as yet unclassified' } OPUmlPackageDiagramController >> descriptionStereotype [ @@ -326,6 +372,15 @@ OPUmlPackageDiagramController >> initializeProfilesPalette: aPalette [ self initializeProfile: each appliedProfile palette: aPalette ] ] +{ #category : 'as yet unclassified' } +OPUmlPackageDiagramController >> maEdit [ + + OPUmlAllGeneralizationSetsEditor new + application: self diagramController editor application; + controller: self; + openModal +] + { #category : 'destruction' } OPUmlPackageDiagramController >> packageRenderChanged [ @@ -368,8 +423,9 @@ OPUmlPackageDiagramController >> pushBack [ { #category : 'palette' } OPUmlPackageDiagramController >> rebuildPalette [ - self editor palette createPaletteFor: self. - self editor palette rebuildWidget + self editor palette + createPaletteFor: self; + rebuildWidget ] { #category : 'as yet unclassified' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlPackageImportController.class.st b/repository/OpenPonk-ClassEditor/OPUmlPackageImportController.class.st index 7dddaa41..4d138d93 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlPackageImportController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlPackageImportController.class.st @@ -21,45 +21,6 @@ OPUmlPackageImportController >> descriptionGeneral [ yourself" ] -{ #category : 'forms' } -OPUmlPackageImportController >> descriptionGeneralizationSet [ -" - ^ MAToManyRelationDescription new - initializer: [ :desc | - desc - controller: self; - set: OPUMLGeneralizationSet new ]; - display: [ :desc | - String - streamContents: [ :stream | - stream - << 'GeneralizationSet {'''; - << (desc set name ifNil: [ '' ]); - << ''', '. - desc set isCovering - ifTrue: [ stream << 'complete, ' ] - ifFalse: [ stream << 'incomplete, ' ]. - desc set isDisjoint - ifTrue: [ stream << 'disjoint, ' ] - ifFalse: [ stream << 'overlapping, ' ]. - stream << ('(' , desc set generalizations size asString , ')}') ] ]; - accessor: - (MAPluggableAccessor - read: [ :me | - me model generalizationSets - collect: [ :each | - OPUmlGeneralizationSetDescriptions new - controller: self; - set: each ] ] - write: [ :me :newValue | - me model generalizationSets: (newValue collect: #set). - diagramElement ifNotNil: [ self refreshFigure ] ]); - classes: {OPUmlGeneralizationSetDescriptions}; - label: 'Generalization Sets'; - priority: 5; - yourself" -] - { #category : 'forms' } OPUmlPackageImportController >> descriptionName [ ^ nil From 3b2586d8e16cbf9d15f969382e137208dac1f204 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Blizni=C4=8Denko?= Date: Sun, 10 Nov 2024 16:06:38 +0100 Subject: [PATCH 06/17] Baseline and package renaming --- repository/BaselineOfClassEditor/package.st | 1 - .../BaselineOfOpenPonkClassEditor.class.st} | 155 +++++++++--------- .../BaselineOfOpenPonkClassEditor/package.st | 1 + .../OPClassEditorPluginsMeta.class.st | 6 - repository/OPClassEditor-Plugins/package.st | 1 - .../OPClassEditorPluginsMeta.class.st | 6 + .../OpenPonk-ClassEditor-Plugins/package.st | 1 + 7 files changed, 85 insertions(+), 86 deletions(-) delete mode 100644 repository/BaselineOfClassEditor/package.st rename repository/{BaselineOfClassEditor/BaselineOfClassEditor.class.st => BaselineOfOpenPonkClassEditor/BaselineOfOpenPonkClassEditor.class.st} (58%) create mode 100644 repository/BaselineOfOpenPonkClassEditor/package.st delete mode 100644 repository/OPClassEditor-Plugins/OPClassEditorPluginsMeta.class.st delete mode 100644 repository/OPClassEditor-Plugins/package.st create mode 100644 repository/OpenPonk-ClassEditor-Plugins/OPClassEditorPluginsMeta.class.st create mode 100644 repository/OpenPonk-ClassEditor-Plugins/package.st diff --git a/repository/BaselineOfClassEditor/package.st b/repository/BaselineOfClassEditor/package.st deleted file mode 100644 index c687d42d..00000000 --- a/repository/BaselineOfClassEditor/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : 'BaselineOfClassEditor' } diff --git a/repository/BaselineOfClassEditor/BaselineOfClassEditor.class.st b/repository/BaselineOfOpenPonkClassEditor/BaselineOfOpenPonkClassEditor.class.st similarity index 58% rename from repository/BaselineOfClassEditor/BaselineOfClassEditor.class.st rename to repository/BaselineOfOpenPonkClassEditor/BaselineOfOpenPonkClassEditor.class.st index 62c85f8b..6b11ced9 100644 --- a/repository/BaselineOfClassEditor/BaselineOfClassEditor.class.st +++ b/repository/BaselineOfOpenPonkClassEditor/BaselineOfOpenPonkClassEditor.class.st @@ -1,78 +1,77 @@ -" -Baseline for https://github.com/OpenPonk/class-editor -" -Class { - #name : 'BaselineOfClassEditor', - #superclass : 'BaselineOf', - #category : 'BaselineOfClassEditor', - #package : 'BaselineOfClassEditor' -} - -{ #category : 'plugins' } -BaselineOfClassEditor class >> loadPlugins [ - self new loadPlugins -] - -{ #category : 'baselines' } -BaselineOfClassEditor >> baseline: spec [ - - - spec for: #common do: [ - spec - baseline: 'UMLMetamodel' - with: [ spec repository: 'github://openponk/uml-metamodel' ]. - spec - baseline: 'OPUMLXMI' - with: [ spec repository: 'github://openponk/uml-xmi' ]. - spec - baseline: 'UMLBootstrapGenerator' - with: [ - spec repository: 'github://openponk/uml-bootstrap-generator' ]. - spec - baseline: 'OpenPonk' - with: [ spec repository: 'github://openponk/openponk' ]. - spec - baseline: 'UMLProfiles' - with: [ spec repository: 'github://openponk/uml-profiles' ]. - spec package: 'OpenPonk-ClassEditor' with: [ - spec requires: - #( 'UMLMetamodel' 'OPUMLXMI' 'UMLBootstrapGenerator' - 'UMLProfiles' ) ]. - - spec group: 'plugin' with: #( 'OpenPonk-ClassEditor' ). - (Smalltalk globals includesKey: - #BaselineOfOntoUMLVerificationFramework) - ifTrue: [ spec group: 'complete-plugin' with: #( plugin ) ] - ifFalse: [ - self plugins: spec. - spec package: 'OPClassEditor-Plugins' with: [ - spec requires: - #( 'OntoUMLVerificationFramework' OntoUMLPatterns - OpenPonkGit OntoUMLTransformationFramework ) ]. - spec - group: 'complete-plugin' - with: #( plugin 'OPClassEditor-Plugins' ) ]. - spec group: 'complete' with: #( OpenPonk 'complete-plugin' ). - spec group: 'default' with: #( OpenPonk plugin ) ] -] - -{ #category : 'baselines' } -BaselineOfClassEditor >> plugins: spec [ - - spec baseline: 'OntoUMLVerificationFramework' with: [ - spec - repository: 'github://openponk/ontouml-verifications'; - loads: 'plugin' ]. - spec baseline: 'OntoUMLTransformationFramework' with: [ - spec - repository: - 'github://openponk/openponk-ontouml-to-uml-transformation'; - loads: 'plugin' ]. - spec - baseline: 'OpenPonkGit' - with: [ spec repository: 'github://openponk/openponk-git' ]. - spec baseline: 'OntoUMLPatterns' with: [ - spec - repository: 'github://openponk/ontouml-patterns'; - loads: 'plugin' ] -] +" +Baseline for https://github.com/OpenPonk/class-editor +" +Class { + #name : 'BaselineOfOpenPonkClassEditor', + #superclass : 'BaselineOf', + #category : 'BaselineOfOpenPonkClassEditor', + #package : 'BaselineOfOpenPonkClassEditor' +} + +{ #category : 'plugins' } +BaselineOfOpenPonkClassEditor class >> loadPlugins [ + self new loadPlugins +] + +{ #category : 'baselines' } +BaselineOfOpenPonkClassEditor >> baseline: spec [ + + + spec for: #common do: [ + spec + baseline: 'OpenPonkUMLMetamodel' + with: [ spec repository: 'github://openponk/uml-metamodel' ]. + spec + baseline: 'OpenPonkUMLXMI' + with: [ spec repository: 'github://openponk/uml-xmi' ]. + spec + baseline: 'OpenPonkUMLBootstrapGenerator' + with: [ + spec repository: 'github://openponk/uml-bootstrap-generator' ]. + spec + baseline: 'OpenPonk' + with: [ spec repository: 'github://openponk/openponk' ]. + spec + baseline: 'OpenPonkUMLProfiles' + with: [ spec repository: 'github://openponk/uml-profiles' ]. + spec package: 'OpenPonk-ClassEditor' with: [ + spec requires: + #( 'OpenPonkUMLMetamodel' 'OpenPonkUMLXMI' 'OpenPonkUMLBootstrapGenerator' + 'OpenPonkUMLProfiles' ) ]. + + spec group: 'plugin' with: #( 'OpenPonk-ClassEditor' ). + (Smalltalk globals includesKey: + #BaselineOfOpenPonkOntoUMLVerifications) + ifTrue: [ spec group: 'complete-plugin' with: #( plugin ) ] + ifFalse: [ + self plugins: spec. + spec package: 'OpenPonk-ClassEditor-Plugins' with: [ + spec requires: #( 'OpenPonkOntoUMLVerifications' OpenPonkOntoUMLPatterns + OpenPonkGit OpenPonkOntoUMLTransformations ) ]. + spec + group: 'complete-plugin' + with: #( plugin 'OpenPonk-ClassEditor-Plugins' ) ]. + spec group: 'complete' with: #( OpenPonk 'complete-plugin' ). + spec group: 'default' with: #( OpenPonk plugin ) ] +] + +{ #category : 'baselines' } +BaselineOfOpenPonkClassEditor >> plugins: spec [ + + spec baseline: 'OpenPonkOntoUMLVerifications' with: [ + spec + repository: 'github://openponk/ontouml-verifications'; + loads: 'plugin' ]. + spec baseline: 'OpenPonkOntoUMLTransformations' with: [ + spec + repository: + 'github://openponk/openponk-ontouml-to-uml-transformation'; + loads: 'plugin' ]. + spec + baseline: 'OpenPonkGit' + with: [ spec repository: 'github://openponk/openponk-git' ]. + spec baseline: 'OpenPonkOntoUMLPatterns' with: [ + spec + repository: 'github://openponk/ontouml-patterns'; + loads: 'plugin' ] +] diff --git a/repository/BaselineOfOpenPonkClassEditor/package.st b/repository/BaselineOfOpenPonkClassEditor/package.st new file mode 100644 index 00000000..28255aac --- /dev/null +++ b/repository/BaselineOfOpenPonkClassEditor/package.st @@ -0,0 +1 @@ +Package { #name : 'BaselineOfOpenPonkClassEditor' } diff --git a/repository/OPClassEditor-Plugins/OPClassEditorPluginsMeta.class.st b/repository/OPClassEditor-Plugins/OPClassEditorPluginsMeta.class.st deleted file mode 100644 index 3b5bf5e5..00000000 --- a/repository/OPClassEditor-Plugins/OPClassEditorPluginsMeta.class.st +++ /dev/null @@ -1,6 +0,0 @@ -Class { - #name : 'OPClassEditorPluginsMeta', - #superclass : 'Object', - #category : 'OPClassEditor-Plugins', - #package : 'OPClassEditor-Plugins' -} diff --git a/repository/OPClassEditor-Plugins/package.st b/repository/OPClassEditor-Plugins/package.st deleted file mode 100644 index d05fac54..00000000 --- a/repository/OPClassEditor-Plugins/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : 'OPClassEditor-Plugins' } diff --git a/repository/OpenPonk-ClassEditor-Plugins/OPClassEditorPluginsMeta.class.st b/repository/OpenPonk-ClassEditor-Plugins/OPClassEditorPluginsMeta.class.st new file mode 100644 index 00000000..2ecd9bf6 --- /dev/null +++ b/repository/OpenPonk-ClassEditor-Plugins/OPClassEditorPluginsMeta.class.st @@ -0,0 +1,6 @@ +Class { + #name : 'OPClassEditorPluginsMeta', + #superclass : 'Object', + #category : 'OpenPonk-ClassEditor-Plugins', + #package : 'OpenPonk-ClassEditor-Plugins' +} diff --git a/repository/OpenPonk-ClassEditor-Plugins/package.st b/repository/OpenPonk-ClassEditor-Plugins/package.st new file mode 100644 index 00000000..681481f2 --- /dev/null +++ b/repository/OpenPonk-ClassEditor-Plugins/package.st @@ -0,0 +1 @@ +Package { #name : 'OpenPonk-ClassEditor-Plugins' } From c0fa4ff54b326c748055e08f7df1ecf0e5792871 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Blizni=C4=8Denko?= <9571633+JanBliznicenko@users.noreply.github.com> Date: Sun, 10 Nov 2024 16:31:08 +0100 Subject: [PATCH 07/17] Update .smalltalk.ston --- .smalltalk.ston | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.smalltalk.ston b/.smalltalk.ston index b67074e8..6a4a430d 100644 --- a/.smalltalk.ston +++ b/.smalltalk.ston @@ -4,7 +4,7 @@ SmalltalkCISpec { #platforms : [ #pharo ], - #baseline : 'ClassEditor', + #baseline : 'OpenPonkClassEditor', #directory : 'repository', #onConflict : #useIncoming, #load : [ 'complete' ] @@ -13,15 +13,13 @@ SmalltalkCISpec { #preLoading : 'ci-scripts/.github/scripts/preLoad.st', #postLoading : 'ci-scripts/.github/scripts/postLoad.st', #testing : { + #packages : [ + 'OpenPonk*' + ], #coverage : { #packages : [ 'OpenPonk-ClassEditor*' ] - }, - #packages : [ - 'OpenPonk*', - 'OP-*', - 'OntoUML*' - ] + } } } From 9b4e3c2a9f691f511cdae89373c6841b39796a8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Blizni=C4=8Denko?= <9571633+JanBliznicenko@users.noreply.github.com> Date: Sun, 10 Nov 2024 16:41:41 +0100 Subject: [PATCH 08/17] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 68c627f4..fad5fd10 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ ```smalltalk Metacello new - baseline: 'ClassEditor'; + baseline: 'OpenPonkClassEditor'; repository: 'github://OpenPonk/class-editor/repository'; load: 'complete'. ``` From c3aa8c247def53a0f390124e15b94aa3ae70cab8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Blizni=C4=8Denko?= Date: Sun, 10 Nov 2024 16:49:37 +0100 Subject: [PATCH 09/17] Metamodel is already being loaded by dependencies --- .../BaselineOfOpenPonkClassEditor.class.st | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/repository/BaselineOfOpenPonkClassEditor/BaselineOfOpenPonkClassEditor.class.st b/repository/BaselineOfOpenPonkClassEditor/BaselineOfOpenPonkClassEditor.class.st index 6b11ced9..6690c078 100644 --- a/repository/BaselineOfOpenPonkClassEditor/BaselineOfOpenPonkClassEditor.class.st +++ b/repository/BaselineOfOpenPonkClassEditor/BaselineOfOpenPonkClassEditor.class.st @@ -18,9 +18,6 @@ BaselineOfOpenPonkClassEditor >> baseline: spec [ spec for: #common do: [ - spec - baseline: 'OpenPonkUMLMetamodel' - with: [ spec repository: 'github://openponk/uml-metamodel' ]. spec baseline: 'OpenPonkUMLXMI' with: [ spec repository: 'github://openponk/uml-xmi' ]. @@ -35,8 +32,7 @@ BaselineOfOpenPonkClassEditor >> baseline: spec [ baseline: 'OpenPonkUMLProfiles' with: [ spec repository: 'github://openponk/uml-profiles' ]. spec package: 'OpenPonk-ClassEditor' with: [ - spec requires: - #( 'OpenPonkUMLMetamodel' 'OpenPonkUMLXMI' 'OpenPonkUMLBootstrapGenerator' + spec requires: #( 'OpenPonkUMLXMI' 'OpenPonkUMLBootstrapGenerator' 'OpenPonkUMLProfiles' ) ]. spec group: 'plugin' with: #( 'OpenPonk-ClassEditor' ). @@ -46,7 +42,8 @@ BaselineOfOpenPonkClassEditor >> baseline: spec [ ifFalse: [ self plugins: spec. spec package: 'OpenPonk-ClassEditor-Plugins' with: [ - spec requires: #( 'OpenPonkOntoUMLVerifications' OpenPonkOntoUMLPatterns + spec requires: + #( 'OpenPonkOntoUMLVerifications' OpenPonkOntoUMLPatterns OpenPonkGit OpenPonkOntoUMLTransformations ) ]. spec group: 'complete-plugin' From 0ffc207aa18c18df9c90ea2bd0066dfb244f1f3c Mon Sep 17 00:00:00 2001 From: Jan Bliznicenko Date: Tue, 12 Nov 2024 15:41:15 +0100 Subject: [PATCH 10/17] Fixed loading generalization sets from older OP versions --- .../OpenPonk-ClassEditor/OPUmlGeneralizationLabel.class.st | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationLabel.class.st b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationLabel.class.st index e7cb2e6b..d5126104 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlGeneralizationLabel.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlGeneralizationLabel.class.st @@ -25,7 +25,8 @@ OPUmlGeneralizationLabel >> defaultText [ OPUmlGeneralizationLabel >> defaultTextForSet: aGeneralizationSet on: aStream [ | props | - aStream << (aGeneralizationSet name trim ifEmpty: [ 'set' ]). + aStream + << ((aGeneralizationSet name ifNil: [ '' ]) trim ifEmpty: [ 'set' ]). aStream << ' {'. props := OrderedCollection new. From 85652594913102b5438e3d9ac6ae1ba318f04675 Mon Sep 17 00:00:00 2001 From: Jan Bliznicenko Date: Tue, 12 Nov 2024 17:27:36 +0100 Subject: [PATCH 11/17] Fixed shapes moving after a new shape is created --- ...tractUmlCompartmentableShapeTest.class.st} | 26 +++++++++---------- ...lass.st => OPAbstractUmlEdgeTest.class.st} | 13 +++++----- .../OPAbstractUmlShapeTest.class.st | 4 +-- .../OPUmlAssociationShapeTest.class.st | 25 +++++++++--------- .../OPUmlClassShapeTest.class.st | 9 ++++++- 5 files changed, 42 insertions(+), 35 deletions(-) rename repository/OpenPonk-ClassEditor/{OPUmlCompartmentableShapeTest.class.st => OPAbstractUmlCompartmentableShapeTest.class.st} (75%) rename repository/OpenPonk-ClassEditor/{OPUmlEdgeTest.class.st => OPAbstractUmlEdgeTest.class.st} (81%) diff --git a/repository/OpenPonk-ClassEditor/OPUmlCompartmentableShapeTest.class.st b/repository/OpenPonk-ClassEditor/OPAbstractUmlCompartmentableShapeTest.class.st similarity index 75% rename from repository/OpenPonk-ClassEditor/OPUmlCompartmentableShapeTest.class.st rename to repository/OpenPonk-ClassEditor/OPAbstractUmlCompartmentableShapeTest.class.st index 62ce2a82..e496fab0 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlCompartmentableShapeTest.class.st +++ b/repository/OpenPonk-ClassEditor/OPAbstractUmlCompartmentableShapeTest.class.st @@ -1,5 +1,5 @@ Class { - #name : 'OPUmlCompartmentableShapeTest', + #name : 'OPAbstractUmlCompartmentableShapeTest', #superclass : 'OPAbstractUmlShapeTest', #category : 'OpenPonk-ClassEditor-Tests - Shapes', #package : 'OpenPonk-ClassEditor', @@ -7,12 +7,12 @@ Class { } { #category : 'hooks' } -OPUmlCompartmentableShapeTest >> shapeClass [ +OPAbstractUmlCompartmentableShapeTest >> shapeClass [ ^ OPUmlCompartmentableShape ] { #category : 'tests' } -OPUmlCompartmentableShapeTest >> testEmptyRoassalShape [ +OPAbstractUmlCompartmentableShapeTest >> testEmptyRoassalShape [ | roassalShape | shape renderIn: RSCanvas new. @@ -21,7 +21,7 @@ OPUmlCompartmentableShapeTest >> testEmptyRoassalShape [ ] { #category : 'tests' } -OPUmlCompartmentableShapeTest >> testFigures [ +OPAbstractUmlCompartmentableShapeTest >> testFigures [ shape renderIn: RSCanvas new. @@ -29,7 +29,7 @@ OPUmlCompartmentableShapeTest >> testFigures [ ] { #category : 'tests' } -OPUmlCompartmentableShapeTest >> testFigures1 [ +OPAbstractUmlCompartmentableShapeTest >> testFigures1 [ | lbl | (lbl := OPUmlLabel new) owningElement: shape. @@ -38,7 +38,7 @@ OPUmlCompartmentableShapeTest >> testFigures1 [ ] { #category : 'tests' } -OPUmlCompartmentableShapeTest >> testFigures2 [ +OPAbstractUmlCompartmentableShapeTest >> testFigures2 [ | lbl comp1 | (lbl := OPUmlLabel new) owningElement: shape. @@ -52,7 +52,7 @@ OPUmlCompartmentableShapeTest >> testFigures2 [ ] { #category : 'tests' } -OPUmlCompartmentableShapeTest >> testFigures3 [ +OPAbstractUmlCompartmentableShapeTest >> testFigures3 [ | lbl comp compLbl | (lbl := OPUmlLabel new) owningElement: shape. @@ -65,10 +65,9 @@ OPUmlCompartmentableShapeTest >> testFigures3 [ ] { #category : 'tests' } -OPUmlCompartmentableShapeTest >> testRemoveExtentChanged [ +OPAbstractUmlCompartmentableShapeTest >> testRemoveExtentChanged [ - | compartment compLbl canvas fullExtent labelContainer | - shape modelElement: OPTestEntityModel new. + | compartment compLbl fullExtent labelContainer | labelContainer := OPUmlCompartmentableLabel in: shape. OPUmlNameLabel in: labelContainer. compartment := OPUmlCompartment in: shape. @@ -76,7 +75,6 @@ OPUmlCompartmentableShapeTest >> testRemoveExtentChanged [ compLbl := (OPUmlLabel in: compartment) text: 'testx'; yourself ]. - canvas := RSCanvas new. shape renderIn: canvas. fullExtent := shape extent. compLbl remove. @@ -85,7 +83,7 @@ OPUmlCompartmentableShapeTest >> testRemoveExtentChanged [ ] { #category : 'tests' } -OPUmlCompartmentableShapeTest >> testRemoveFromOwnership [ +OPAbstractUmlCompartmentableShapeTest >> testRemoveFromOwnership [ | lbl | (lbl := OPUmlLabel new) owningElement: shape. @@ -97,7 +95,7 @@ OPUmlCompartmentableShapeTest >> testRemoveFromOwnership [ ] { #category : 'tests' } -OPUmlCompartmentableShapeTest >> testRemoveFromViewEmpty [ +OPAbstractUmlCompartmentableShapeTest >> testRemoveFromViewEmpty [ | canvas | canvas := RSCanvas new. @@ -107,7 +105,7 @@ OPUmlCompartmentableShapeTest >> testRemoveFromViewEmpty [ ] { #category : 'tests' } -OPUmlCompartmentableShapeTest >> testRemoveOwnedElement [ +OPAbstractUmlCompartmentableShapeTest >> testRemoveOwnedElement [ | lbl | (lbl := OPUmlLabel new) owningElement: shape. diff --git a/repository/OpenPonk-ClassEditor/OPUmlEdgeTest.class.st b/repository/OpenPonk-ClassEditor/OPAbstractUmlEdgeTest.class.st similarity index 81% rename from repository/OpenPonk-ClassEditor/OPUmlEdgeTest.class.st rename to repository/OpenPonk-ClassEditor/OPAbstractUmlEdgeTest.class.st index 5e04a145..0903fa96 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlEdgeTest.class.st +++ b/repository/OpenPonk-ClassEditor/OPAbstractUmlEdgeTest.class.st @@ -1,5 +1,5 @@ Class { - #name : 'OPUmlEdgeTest', + #name : 'OPAbstractUmlEdgeTest', #superclass : 'OPAbstractEdgeTest', #category : 'OpenPonk-ClassEditor-Tests - Shapes', #package : 'OpenPonk-ClassEditor', @@ -7,7 +7,7 @@ Class { } { #category : 'running' } -OPUmlEdgeTest >> setUp [ +OPAbstractUmlEdgeTest >> setUp [ | source target | super setUp. source := OPUmlLabel new. @@ -19,12 +19,12 @@ OPUmlEdgeTest >> setUp [ ] { #category : 'hooks' } -OPUmlEdgeTest >> shapeClass [ +OPAbstractUmlEdgeTest >> shapeClass [ ^ OPUmlEdge ] { #category : 'tests' } -OPUmlEdgeTest >> testRemove [ +OPAbstractUmlEdgeTest >> testRemove [ | lbl | (lbl := OPUmlLabel new) owningElement: shape. @@ -34,7 +34,7 @@ OPUmlEdgeTest >> testRemove [ ] { #category : 'tests' } -OPUmlEdgeTest >> testRemoveDetachFromEnds [ +OPAbstractUmlEdgeTest >> testRemoveDetachFromEnds [ | source target | source := OPUmlLabel new. @@ -47,9 +47,10 @@ OPUmlEdgeTest >> testRemoveDetachFromEnds [ ] { #category : 'tests' } -OPUmlEdgeTest >> testRemoveFromView [ +OPAbstractUmlEdgeTest >> testRemoveFromView [ | lbl | + shape modelElement: model. (lbl := OPUmlLabel new) text: 'x'; owningElement: shape. diff --git a/repository/OpenPonk-ClassEditor/OPAbstractUmlShapeTest.class.st b/repository/OpenPonk-ClassEditor/OPAbstractUmlShapeTest.class.st index 193cf532..545dfe46 100644 --- a/repository/OpenPonk-ClassEditor/OPAbstractUmlShapeTest.class.st +++ b/repository/OpenPonk-ClassEditor/OPAbstractUmlShapeTest.class.st @@ -1,6 +1,6 @@ Class { #name : 'OPAbstractUmlShapeTest', - #superclass : 'OPAbstractShapeTest', + #superclass : 'OPAbstractNodeTest', #category : 'OpenPonk-ClassEditor-Tests - Shapes', #package : 'OpenPonk-ClassEditor', #tag : 'Tests - Shapes' @@ -48,7 +48,7 @@ OPAbstractUmlShapeTest >> testAddSelfEdge [ { #category : 'tests' } OPAbstractUmlShapeTest >> testEmpty [ - self assert: shape modelElement isNil. + super testEmpty. self assert: shape owningElement doesNotExist. self assert: shape ownedElements isEmpty. self assert: shape sourceEdges isEmpty. diff --git a/repository/OpenPonk-ClassEditor/OPUmlAssociationShapeTest.class.st b/repository/OpenPonk-ClassEditor/OPUmlAssociationShapeTest.class.st index 098c8dce..ef0e9310 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlAssociationShapeTest.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlAssociationShapeTest.class.st @@ -1,10 +1,9 @@ Class { #name : 'OPUmlAssociationShapeTest', - #superclass : 'OPUmlEdgeTest', + #superclass : 'OPAbstractUmlEdgeTest', #instVars : [ 'element', 'comment', - 'association', 'ownedComment', 'owningElement' ], @@ -13,17 +12,19 @@ Class { #tag : 'Tests - Shapes' } -{ #category : 'running' } -OPUmlAssociationShapeTest >> setUp [ - super setUp. - self setUpAssociation +{ #category : 'instance creation' } +OPUmlAssociationShapeTest >> modelClass [ + + ^ OPUMLAssociation ] { #category : 'running' } -OPUmlAssociationShapeTest >> setUpAssociation [ +OPUmlAssociationShapeTest >> newModelInstance [ + + | association | element := OPUMLClass new name: 'Element'. comment := OPUMLClass new name: 'Comment'. - association := OPUMLAssociation new. + association := self modelClass new. (ownedComment := OPUMLProperty new) name: 'ownedComment'; owningClass: element; @@ -32,10 +33,10 @@ OPUmlAssociationShapeTest >> setUpAssociation [ name: 'owningElement'; owningAssociation: association; type: element. - association - memberEnds: - {ownedComment. - owningElement} + association memberEnds: { + ownedComment. + owningElement }. + ^ association ] { #category : 'hooks' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlClassShapeTest.class.st b/repository/OpenPonk-ClassEditor/OPUmlClassShapeTest.class.st index e3bcc93e..86094e6e 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlClassShapeTest.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlClassShapeTest.class.st @@ -1,13 +1,20 @@ Class { #name : 'OPUmlClassShapeTest', - #superclass : 'OPUmlCompartmentableShapeTest', + #superclass : 'OPAbstractUmlCompartmentableShapeTest', #category : 'OpenPonk-ClassEditor-Tests - Shapes', #package : 'OpenPonk-ClassEditor', #tag : 'Tests - Shapes' } +{ #category : 'instance creation' } +OPUmlClassShapeTest >> modelClass [ + + ^ OPUMLClass +] + { #category : 'hooks' } OPUmlClassShapeTest >> shapeClass [ + ^ OPUmlClassShape ] From 4ec356ef64395009fc6e688c75d5fa6616bac386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Blizni=C4=8Denko?= Date: Wed, 13 Nov 2024 01:26:55 +0100 Subject: [PATCH 12/17] OPNoShape is now UndefinedObject --- .../OpenPonk-ClassEditor/OPUmlAttributeController.class.st | 4 ++-- .../OPUmlEnumerationLiteralController.class.st | 4 ++-- .../OpenPonk-ClassEditor/OPUmlOperationController.class.st | 4 ++-- .../OpenPonk-ClassEditor/OPUmlPackageController.class.st | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st b/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st index 3bc4ac52..94d798d5 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlAttributeController.class.st @@ -12,7 +12,7 @@ Class { { #category : 'figures' } OPUmlAttributeController >> addDiagramElementToOwner [ - self ownerDiagramElement addAttribute: diagramElement + self ownerDiagramElement addAttribute: self diagramElement ] { #category : 'figures' } @@ -196,7 +196,7 @@ OPUmlAttributeController >> removeDiagramElement [ self diagramElement ifNotExists: [ ^ self ]. self ownerDiagramElement ifExists: [ :owner | owner removeAttribute: self diagramElement ]. - self diagramElement: OPNoShape new + self diagramElement: nil ] { #category : 'removing' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlEnumerationLiteralController.class.st b/repository/OpenPonk-ClassEditor/OPUmlEnumerationLiteralController.class.st index 5c58430c..3a8f01b6 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlEnumerationLiteralController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlEnumerationLiteralController.class.st @@ -12,7 +12,7 @@ Class { { #category : 'figures' } OPUmlEnumerationLiteralController >> addDiagramElementToOwner [ - self ownerDiagramElement addLiteral: diagramElement + self ownerDiagramElement addLiteral: self diagramElement ] { #category : 'construction' } @@ -64,7 +64,7 @@ OPUmlEnumerationLiteralController >> removeDiagramElement [ self diagramElement ifNotExists: [ ^ self ]. self ownerDiagramElement removeLiteral: self diagramElement. - self diagramElement: OPNoShape new + self diagramElement: nil ] { #category : 'removing' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlOperationController.class.st b/repository/OpenPonk-ClassEditor/OPUmlOperationController.class.st index ef4ce612..eb09f378 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlOperationController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlOperationController.class.st @@ -12,7 +12,7 @@ Class { { #category : 'figures' } OPUmlOperationController >> addDiagramElementToOwner [ - self ownerDiagramElement addOperation: diagramElement + self ownerDiagramElement addOperation: self diagramElement ] { #category : 'construction' } @@ -68,5 +68,5 @@ OPUmlOperationController >> removeDiagramElement [ self diagramElement ifNotExists: [ ^ self ]. self ownerDiagramElement ifNotNil: [ :owner | owner removeOperation: self diagramElement ]. - self diagramElement: OPNoShape new + self diagramElement: nil ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlPackageController.class.st b/repository/OpenPonk-ClassEditor/OPUmlPackageController.class.st index 42516f84..c5a35e9d 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlPackageController.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlPackageController.class.st @@ -83,7 +83,7 @@ OPUmlPackageController >> hookDiagramElement [ super hookDiagramElement. - diagramElement innerRoassalShapesBlock: [ + self diagramElement innerRoassalShapesBlock: [ Array streamContents: [ :stream | self diagramController propagateBlock: [ :eachController | From 51fa28af72f482f3d3b7891970094831a2d56448 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Blizni=C4=8Denko?= Date: Wed, 13 Nov 2024 02:32:34 +0100 Subject: [PATCH 13/17] Support for hiding association end labels --- .../OPDiagram.extension.st | 8 +++ .../OPDiagramElement.extension.st | 21 ++++++++ .../OPUmlAssociationEndLabel.class.st | 30 ++++++++++-- .../OPUmlAssociationShape.class.st | 6 +++ ...PUmlDiagramEndLabelsFigureCommand.class.st | 49 +++++++++++++++++++ ...DiagramHideEndLabelsFigureCommand.class.st | 33 +++++++++++++ ...DiagramShowEndLabelsFigureCommand.class.st | 33 +++++++++++++ .../OPUmlEdgeLabel.class.st | 2 +- 8 files changed, 178 insertions(+), 4 deletions(-) create mode 100644 repository/OpenPonk-ClassEditor/OPDiagram.extension.st create mode 100644 repository/OpenPonk-ClassEditor/OPDiagramElement.extension.st create mode 100644 repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st create mode 100644 repository/OpenPonk-ClassEditor/OPUmlDiagramHideEndLabelsFigureCommand.class.st create mode 100644 repository/OpenPonk-ClassEditor/OPUmlDiagramShowEndLabelsFigureCommand.class.st diff --git a/repository/OpenPonk-ClassEditor/OPDiagram.extension.st b/repository/OpenPonk-ClassEditor/OPDiagram.extension.st new file mode 100644 index 00000000..b22b7abb --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPDiagram.extension.st @@ -0,0 +1,8 @@ +Extension { #name : 'OPDiagram' } + +{ #category : '*OpenPonk-ClassEditor' } +OPDiagram >> supportsHidingLabelEnds [ + + ^ self modelElement isNotNil and: [ + self modelElement isKindOf: OPUMLPackage ] +] diff --git a/repository/OpenPonk-ClassEditor/OPDiagramElement.extension.st b/repository/OpenPonk-ClassEditor/OPDiagramElement.extension.st new file mode 100644 index 00000000..428f4029 --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPDiagramElement.extension.st @@ -0,0 +1,21 @@ +Extension { #name : 'OPDiagramElement' } + +{ #category : '*OpenPonk-ClassEditor' } +OPDiagramElement >> showAssociationEndLabels [ + + ^ self + stylePropertyNamed: #showAssociationEndLabels + ifAbsent: [ true ] +] + +{ #category : '*OpenPonk-ClassEditor' } +OPDiagramElement >> showAssociationEndLabels: aBoolean [ + + self stylePropertyNamed: #showAssociationEndLabels put: aBoolean +] + +{ #category : '*OpenPonk-ClassEditor' } +OPDiagramElement >> supportsHidingLabelEnds [ + + ^ false +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlAssociationEndLabel.class.st b/repository/OpenPonk-ClassEditor/OPUmlAssociationEndLabel.class.st index 0163d360..4604d20c 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlAssociationEndLabel.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlAssociationEndLabel.class.st @@ -23,7 +23,7 @@ OPUmlAssociationEndLabel >> atSource [ atSource := true ] -{ #category : 'as yet unclassified' } +{ #category : 'adding' } OPUmlAssociationEndLabel >> defaultAnchorConstraintPosition [ ^ (atSource @@ -31,7 +31,7 @@ OPUmlAssociationEndLabel >> defaultAnchorConstraintPosition [ ifFalse: [ OPRSAnchorConstraintEndDistanceReference ]) distance: 10 ] -{ #category : 'as yet unclassified' } +{ #category : 'adding' } OPUmlAssociationEndLabel >> defaultMinDistance [ ^ super defaultMinDistance negated @@ -40,7 +40,18 @@ OPUmlAssociationEndLabel >> defaultMinDistance [ { #category : 'accessing' } OPUmlAssociationEndLabel >> defaultText [ - ^ self modelElement notationStringAsRoleName + | type typeName defaultText | + defaultText := self modelElement notationStringAsRoleName. + self showAssociationEndLabels ifTrue: [ ^ defaultText ]. + type := self modelElement type. + type ifNil: [ ^ defaultText ]. + typeName := type name. + typeName ifNil: [ ^ defaultText ]. + typeName ifEmpty: [ ^ defaultText ]. + (typeName reject: [ :each | each isSeparator ]) asLowercase + = (defaultText reject: [ :each | each isSeparator ]) asLowercase + ifTrue: [ ^ '' ]. + ^ defaultText ] { #category : 'initialization' } @@ -49,3 +60,16 @@ OPUmlAssociationEndLabel >> initialize [ super initialize. atSource := false ] + +{ #category : 'testing' } +OPUmlAssociationEndLabel >> supportsHidingLabelEnds [ + + ^ true +] + +{ #category : 'initialization' } +OPUmlAssociationEndLabel >> updateRenderFromStyles [ + + super updateRenderFromStyles. + roassalShape text: self text +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlAssociationShape.class.st b/repository/OpenPonk-ClassEditor/OPUmlAssociationShape.class.st index c9640287..56b431f7 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlAssociationShape.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlAssociationShape.class.st @@ -97,6 +97,12 @@ OPUmlAssociationShape >> propertiesOfModel: aModel [ ^ props ] +{ #category : 'testing' } +OPUmlAssociationShape >> supportsHidingLabelEnds [ + + ^ true +] + { #category : 'hooks' } OPUmlAssociationShape >> tailMarker [ diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st new file mode 100644 index 00000000..8182535a --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st @@ -0,0 +1,49 @@ +Class { + #name : 'OPUmlDiagramEndLabelsFigureCommand', + #superclass : 'OPDiagramFigureCommand', + #category : 'OpenPonk-ClassEditor-Commands', + #package : 'OpenPonk-ClassEditor', + #tag : 'Commands' +} + +{ #category : 'testing' } +OPUmlDiagramEndLabelsFigureCommand class >> canBeExecutedInContext: aToolContext [ + + ^ (super canBeExecutedInContext: aToolContext) and: [ + aToolContext diagramElements anySatisfy: [ :any | + any supportsHidingLabelEnds and: [ + any showAssociationEndLabels ~= self resultingShowState ] ] ] +] + +{ #category : 'testing' } +OPUmlDiagramEndLabelsFigureCommand class >> isAbstract [ + + ^ self = OPUmlDiagramEndLabelsFigureCommand +] + +{ #category : 'hooks' } +OPUmlDiagramEndLabelsFigureCommand class >> resultingShowState [ + + ^ self subclassResponsibility +] + +{ #category : 'accessing' } +OPUmlDiagramEndLabelsFigureCommand >> defaultMenuIcon [ + + ^ self iconNamed: #smallLeftFlush +] + +{ #category : 'execution' } +OPUmlDiagramEndLabelsFigureCommand >> execute [ + + diagramElements + select: [ :each | each supportsHidingLabelEnds ] + thenDo: [ :each | + each showAssociationEndLabels: self resultingShowState ] +] + +{ #category : 'hooks' } +OPUmlDiagramEndLabelsFigureCommand >> resultingShowState [ + + ^ self class resultingShowState +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramHideEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramHideEndLabelsFigureCommand.class.st new file mode 100644 index 00000000..6f911844 --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramHideEndLabelsFigureCommand.class.st @@ -0,0 +1,33 @@ +Class { + #name : 'OPUmlDiagramHideEndLabelsFigureCommand', + #superclass : 'OPUmlDiagramEndLabelsFigureCommand', + #category : 'OpenPonk-ClassEditor-Commands', + #package : 'OpenPonk-ClassEditor', + #tag : 'Commands' +} + +{ #category : 'testing' } +OPUmlDiagramHideEndLabelsFigureCommand class >> canBeExecutedInContext: aToolContext [ + + ^ (super canBeExecutedInContext: aToolContext) and: [ + aToolContext diagramElements anySatisfy: [ :any | + any showAssociationEndLabels ] ] +] + +{ #category : 'hooks' } +OPUmlDiagramHideEndLabelsFigureCommand class >> resultingShowState [ + + ^ false +] + +{ #category : 'accessing' } +OPUmlDiagramHideEndLabelsFigureCommand >> defaultMenuItemName [ + + ^ 'Hide association end labels' +] + +{ #category : 'accessing' } +OPUmlDiagramHideEndLabelsFigureCommand >> description [ + + ^ 'Hide association end labels where the text is just name of the class' +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramShowEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramShowEndLabelsFigureCommand.class.st new file mode 100644 index 00000000..82917188 --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramShowEndLabelsFigureCommand.class.st @@ -0,0 +1,33 @@ +Class { + #name : 'OPUmlDiagramShowEndLabelsFigureCommand', + #superclass : 'OPUmlDiagramEndLabelsFigureCommand', + #category : 'OpenPonk-ClassEditor-Commands', + #package : 'OpenPonk-ClassEditor', + #tag : 'Commands' +} + +{ #category : 'testing' } +OPUmlDiagramShowEndLabelsFigureCommand class >> canBeExecutedInContext: aToolContext [ + + ^ (super canBeExecutedInContext: aToolContext) and: [ + aToolContext diagramElements anySatisfy: [ :any | + any showAssociationEndLabels not ] ] +] + +{ #category : 'hooks' } +OPUmlDiagramShowEndLabelsFigureCommand class >> resultingShowState [ + + ^ true +] + +{ #category : 'accessing' } +OPUmlDiagramShowEndLabelsFigureCommand >> defaultMenuItemName [ + + ^ 'Show association end labels' +] + +{ #category : 'accessing' } +OPUmlDiagramShowEndLabelsFigureCommand >> description [ + + ^ 'Show association end labels even where the text is just name of the class' +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlEdgeLabel.class.st b/repository/OpenPonk-ClassEditor/OPUmlEdgeLabel.class.st index c986025f..ee417b52 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlEdgeLabel.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlEdgeLabel.class.st @@ -6,7 +6,7 @@ Class { #tag : 'Shapes' } -{ #category : 'as yet unclassified' } +{ #category : 'adding' } OPUmlEdgeLabel >> defaultMinDistance [ ^ 5 From f13e172c4678648f194239e8ae116deef668fae8 Mon Sep 17 00:00:00 2001 From: Jan Bliznicenko Date: Wed, 13 Nov 2024 10:49:51 +0100 Subject: [PATCH 14/17] Fixed context menu icons --- .../OPUmlDiagramEndLabelsFigureCommand.class.st | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st index 8182535a..1b314c67 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st @@ -28,9 +28,9 @@ OPUmlDiagramEndLabelsFigureCommand class >> resultingShowState [ ] { #category : 'accessing' } -OPUmlDiagramEndLabelsFigureCommand >> defaultMenuIcon [ +OPUmlDiagramEndLabelsFigureCommand >> defaultMenuIconName [ - ^ self iconNamed: #smallLeftFlush + ^ #smallLeftFlush ] { #category : 'execution' } From c2e223514286adaa05f6a68c4df8eb375b329b6a Mon Sep 17 00:00:00 2001 From: Jan Bliznicenko Date: Wed, 13 Nov 2024 12:39:44 +0100 Subject: [PATCH 15/17] Improved association end label handling --- .../OPDiagramElement.extension.st | 28 +++++++++--- .../OPUmlAssociationEndLabel.class.st | 11 +++-- ...PUmlDiagramEndLabelsFigureCommand.class.st | 43 +++++++++++------- ...mlDiagramEndLabelsFigureMenuGroup.class.st | 13 ++++++ ...DiagramHideEndLabelsFigureCommand.class.st | 22 +++++----- ...SameAsClassEndLabelsFigureCommand.class.st | 31 +++++++++++++ ...lDiagramSetEndLabelsFigureCommand.class.st | 44 +++++++++++++++++++ ...DiagramShowEndLabelsFigureCommand.class.st | 22 +++++----- ...iagramUnsetEndLabelsFigureCommand.class.st | 37 ++++++++++++++++ 9 files changed, 203 insertions(+), 48 deletions(-) create mode 100644 repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureMenuGroup.class.st create mode 100644 repository/OpenPonk-ClassEditor/OPUmlDiagramHideSameAsClassEndLabelsFigureCommand.class.st create mode 100644 repository/OpenPonk-ClassEditor/OPUmlDiagramSetEndLabelsFigureCommand.class.st create mode 100644 repository/OpenPonk-ClassEditor/OPUmlDiagramUnsetEndLabelsFigureCommand.class.st diff --git a/repository/OpenPonk-ClassEditor/OPDiagramElement.extension.st b/repository/OpenPonk-ClassEditor/OPDiagramElement.extension.st index 428f4029..6df0c577 100644 --- a/repository/OpenPonk-ClassEditor/OPDiagramElement.extension.st +++ b/repository/OpenPonk-ClassEditor/OPDiagramElement.extension.st @@ -3,15 +3,27 @@ Extension { #name : 'OPDiagramElement' } { #category : '*OpenPonk-ClassEditor' } OPDiagramElement >> showAssociationEndLabels [ - ^ self - stylePropertyNamed: #showAssociationEndLabels - ifAbsent: [ true ] + ^ self stylePropertyNamed: self showAssociationEndLabelsKey ifAbsent: [ + OPUmlDiagramHideSameAsClassEndLabelsFigureCommand + resultingShowState ] ] { #category : '*OpenPonk-ClassEditor' } -OPDiagramElement >> showAssociationEndLabels: aBoolean [ +OPDiagramElement >> showAssociationEndLabels: aSymbol [ - self stylePropertyNamed: #showAssociationEndLabels put: aBoolean + self stylePropertyNamed: self showAssociationEndLabelsKey put: aSymbol +] + +{ #category : '*OpenPonk-ClassEditor' } +OPDiagramElement class >> showAssociationEndLabelsKey [ + + ^ #showAssociationEndLabels +] + +{ #category : '*OpenPonk-ClassEditor' } +OPDiagramElement >> showAssociationEndLabelsKey [ + + ^ self class showAssociationEndLabelsKey ] { #category : '*OpenPonk-ClassEditor' } @@ -19,3 +31,9 @@ OPDiagramElement >> supportsHidingLabelEnds [ ^ false ] + +{ #category : '*OpenPonk-ClassEditor' } +OPDiagramElement >> unsetAssociationEndLabels [ + + self removeLocalStylePropertyNamed: self showAssociationEndLabelsKey +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlAssociationEndLabel.class.st b/repository/OpenPonk-ClassEditor/OPUmlAssociationEndLabel.class.st index 4604d20c..b5742df9 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlAssociationEndLabel.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlAssociationEndLabel.class.st @@ -41,8 +41,13 @@ OPUmlAssociationEndLabel >> defaultMinDistance [ OPUmlAssociationEndLabel >> defaultText [ | type typeName defaultText | + self showAssociationEndLabels + = OPUmlDiagramHideEndLabelsFigureCommand resultingShowState ifTrue: [ + ^ '' ]. defaultText := self modelElement notationStringAsRoleName. - self showAssociationEndLabels ifTrue: [ ^ defaultText ]. + self showAssociationEndLabels + = OPUmlDiagramShowEndLabelsFigureCommand resultingShowState ifTrue: [ + ^ defaultText ]. type := self modelElement type. type ifNil: [ ^ defaultText ]. typeName := type name. @@ -50,8 +55,8 @@ OPUmlAssociationEndLabel >> defaultText [ typeName ifEmpty: [ ^ defaultText ]. (typeName reject: [ :each | each isSeparator ]) asLowercase = (defaultText reject: [ :each | each isSeparator ]) asLowercase - ifTrue: [ ^ '' ]. - ^ defaultText + ifFalse: [ ^ defaultText ]. + ^ '' ] { #category : 'initialization' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st index 1b314c67..46bd4bcb 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st @@ -11,8 +11,16 @@ OPUmlDiagramEndLabelsFigureCommand class >> canBeExecutedInContext: aToolContext ^ (super canBeExecutedInContext: aToolContext) and: [ aToolContext diagramElements anySatisfy: [ :any | - any supportsHidingLabelEnds and: [ - any showAssociationEndLabels ~= self resultingShowState ] ] ] + any supportsHidingLabelEnds ] ] +] + +{ #category : 'activation' } +OPUmlDiagramEndLabelsFigureCommand class >> contextMenuActivation [ + + + ^ CmdContextMenuActivation + byItemOf: OPUmlDiagramEndLabelsFigureMenuGroup + for: OPCanvasPresenter ] { #category : 'testing' } @@ -21,29 +29,32 @@ OPUmlDiagramEndLabelsFigureCommand class >> isAbstract [ ^ self = OPUmlDiagramEndLabelsFigureCommand ] -{ #category : 'hooks' } -OPUmlDiagramEndLabelsFigureCommand class >> resultingShowState [ +{ #category : 'accessing' } +OPUmlDiagramEndLabelsFigureCommand >> basicMenuItemName [ - ^ self subclassResponsibility + ^ '' ] { #category : 'accessing' } -OPUmlDiagramEndLabelsFigureCommand >> defaultMenuIconName [ +OPUmlDiagramEndLabelsFigureCommand >> defaultMenuItemName [ - ^ #smallLeftFlush + | basicName | + basicName := self basicMenuItemName. + + self isCurrent ifFalse: [ ^ basicName ]. + + ^ basicName , ' [current]' ] -{ #category : 'execution' } -OPUmlDiagramEndLabelsFigureCommand >> execute [ +{ #category : 'testing' } +OPUmlDiagramEndLabelsFigureCommand >> isCurrent [ - diagramElements - select: [ :each | each supportsHidingLabelEnds ] - thenDo: [ :each | - each showAssociationEndLabels: self resultingShowState ] + ^ diagramElements anySatisfy: [ :any | + self isCurrentStyle: any localStyle ] ] -{ #category : 'hooks' } -OPUmlDiagramEndLabelsFigureCommand >> resultingShowState [ +{ #category : 'testing' } +OPUmlDiagramEndLabelsFigureCommand >> isCurrentStyle: aStyle [ - ^ self class resultingShowState + ^ self subclassResponsibility ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureMenuGroup.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureMenuGroup.class.st new file mode 100644 index 00000000..537885cb --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureMenuGroup.class.st @@ -0,0 +1,13 @@ +Class { + #name : 'OPUmlDiagramEndLabelsFigureMenuGroup', + #superclass : 'CmdMenuGroup', + #category : 'OpenPonk-ClassEditor-Commands', + #package : 'OpenPonk-ClassEditor', + #tag : 'Commands' +} + +{ #category : 'accessing' } +OPUmlDiagramEndLabelsFigureMenuGroup >> name [ + + ^ 'Association end labels' +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramHideEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramHideEndLabelsFigureCommand.class.st index 6f911844..144ab310 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlDiagramHideEndLabelsFigureCommand.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramHideEndLabelsFigureCommand.class.st @@ -1,33 +1,31 @@ Class { #name : 'OPUmlDiagramHideEndLabelsFigureCommand', - #superclass : 'OPUmlDiagramEndLabelsFigureCommand', + #superclass : 'OPUmlDiagramSetEndLabelsFigureCommand', #category : 'OpenPonk-ClassEditor-Commands', #package : 'OpenPonk-ClassEditor', #tag : 'Commands' } -{ #category : 'testing' } -OPUmlDiagramHideEndLabelsFigureCommand class >> canBeExecutedInContext: aToolContext [ +{ #category : 'hooks' } +OPUmlDiagramHideEndLabelsFigureCommand class >> resultingShowState [ - ^ (super canBeExecutedInContext: aToolContext) and: [ - aToolContext diagramElements anySatisfy: [ :any | - any showAssociationEndLabels ] ] + ^ #show ] -{ #category : 'hooks' } -OPUmlDiagramHideEndLabelsFigureCommand class >> resultingShowState [ +{ #category : 'accessing' } +OPUmlDiagramHideEndLabelsFigureCommand >> basicMenuItemName [ - ^ false + ^ 'Hide all' ] { #category : 'accessing' } -OPUmlDiagramHideEndLabelsFigureCommand >> defaultMenuItemName [ +OPUmlDiagramHideEndLabelsFigureCommand >> defaultMenuIconFormSet [ - ^ 'Hide association end labels' + ^ FormSet form: OPCoreIcons opHideLabelsIcon ] { #category : 'accessing' } OPUmlDiagramHideEndLabelsFigureCommand >> description [ - ^ 'Hide association end labels where the text is just name of the class' + ^ 'Hide all association end labels' ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramHideSameAsClassEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramHideSameAsClassEndLabelsFigureCommand.class.st new file mode 100644 index 00000000..b18d7a05 --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramHideSameAsClassEndLabelsFigureCommand.class.st @@ -0,0 +1,31 @@ +Class { + #name : 'OPUmlDiagramHideSameAsClassEndLabelsFigureCommand', + #superclass : 'OPUmlDiagramSetEndLabelsFigureCommand', + #category : 'OpenPonk-ClassEditor-Commands', + #package : 'OpenPonk-ClassEditor', + #tag : 'Commands' +} + +{ #category : 'hooks' } +OPUmlDiagramHideSameAsClassEndLabelsFigureCommand class >> resultingShowState [ + + ^ #hideSame +] + +{ #category : 'accessing' } +OPUmlDiagramHideSameAsClassEndLabelsFigureCommand >> basicMenuItemName [ + + ^ 'Hide same as class name' +] + +{ #category : 'accessing' } +OPUmlDiagramHideSameAsClassEndLabelsFigureCommand >> defaultMenuIconFormSet [ + + ^ FormSet form: OPCoreIcons opHideSameLabelsIcon +] + +{ #category : 'accessing' } +OPUmlDiagramHideSameAsClassEndLabelsFigureCommand >> description [ + + ^ 'Hide association end labels where the text is the same as name of the class' +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramSetEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramSetEndLabelsFigureCommand.class.st new file mode 100644 index 00000000..8e45ec7d --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramSetEndLabelsFigureCommand.class.st @@ -0,0 +1,44 @@ +Class { + #name : 'OPUmlDiagramSetEndLabelsFigureCommand', + #superclass : 'OPUmlDiagramEndLabelsFigureCommand', + #category : 'OpenPonk-ClassEditor-Commands', + #package : 'OpenPonk-ClassEditor', + #tag : 'Commands' +} + +{ #category : 'testing' } +OPUmlDiagramSetEndLabelsFigureCommand class >> isAbstract [ + + ^ self = OPUmlDiagramSetEndLabelsFigureCommand +] + +{ #category : 'hooks' } +OPUmlDiagramSetEndLabelsFigureCommand class >> resultingShowState [ + + ^ #'' +] + +{ #category : 'execution' } +OPUmlDiagramSetEndLabelsFigureCommand >> execute [ + + diagramElements + select: [ :each | each supportsHidingLabelEnds ] + thenDo: [ :each | + each showAssociationEndLabels: self resultingShowState ] +] + +{ #category : 'testing' } +OPUmlDiagramSetEndLabelsFigureCommand >> isCurrentStyle: aStyle [ + + aStyle ifNil: [ ^ false ]. + ^ aStyle + at: OPUmlAssociationEndLabel showAssociationEndLabelsKey + ifPresent: [ :styleValue | styleValue = self resultingShowState ] + ifAbsent: [ false ] +] + +{ #category : 'hooks' } +OPUmlDiagramSetEndLabelsFigureCommand >> resultingShowState [ + + ^ self class resultingShowState +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramShowEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramShowEndLabelsFigureCommand.class.st index 82917188..40413e9d 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlDiagramShowEndLabelsFigureCommand.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramShowEndLabelsFigureCommand.class.st @@ -1,33 +1,31 @@ Class { #name : 'OPUmlDiagramShowEndLabelsFigureCommand', - #superclass : 'OPUmlDiagramEndLabelsFigureCommand', + #superclass : 'OPUmlDiagramSetEndLabelsFigureCommand', #category : 'OpenPonk-ClassEditor-Commands', #package : 'OpenPonk-ClassEditor', #tag : 'Commands' } -{ #category : 'testing' } -OPUmlDiagramShowEndLabelsFigureCommand class >> canBeExecutedInContext: aToolContext [ +{ #category : 'hooks' } +OPUmlDiagramShowEndLabelsFigureCommand class >> resultingShowState [ - ^ (super canBeExecutedInContext: aToolContext) and: [ - aToolContext diagramElements anySatisfy: [ :any | - any showAssociationEndLabels not ] ] + ^ #hide ] -{ #category : 'hooks' } -OPUmlDiagramShowEndLabelsFigureCommand class >> resultingShowState [ +{ #category : 'accessing' } +OPUmlDiagramShowEndLabelsFigureCommand >> basicMenuItemName [ - ^ true + ^ 'Show all' ] { #category : 'accessing' } -OPUmlDiagramShowEndLabelsFigureCommand >> defaultMenuItemName [ +OPUmlDiagramShowEndLabelsFigureCommand >> defaultMenuIconFormSet [ - ^ 'Show association end labels' + ^ FormSet form: OPCoreIcons opShowLabelsIcon ] { #category : 'accessing' } OPUmlDiagramShowEndLabelsFigureCommand >> description [ - ^ 'Show association end labels even where the text is just name of the class' + ^ 'Show all association end labels' ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramUnsetEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramUnsetEndLabelsFigureCommand.class.st new file mode 100644 index 00000000..2e12abdf --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramUnsetEndLabelsFigureCommand.class.st @@ -0,0 +1,37 @@ +Class { + #name : 'OPUmlDiagramUnsetEndLabelsFigureCommand', + #superclass : 'OPUmlDiagramEndLabelsFigureCommand', + #category : 'OpenPonk-ClassEditor-Commands', + #package : 'OpenPonk-ClassEditor', + #tag : 'Commands' +} + +{ #category : 'testing' } +OPUmlDiagramUnsetEndLabelsFigureCommand class >> canBeExecutedInContext: aToolContext [ + + ^ (super canBeExecutedInContext: aToolContext) and: [ + aToolContext diagramElements anySatisfy: [ :any | + any owningElement exists ] ] +] + +{ #category : 'accessing' } +OPUmlDiagramUnsetEndLabelsFigureCommand >> basicMenuItemName [ + + ^ 'Use diagram-level setting' +] + +{ #category : 'execution' } +OPUmlDiagramUnsetEndLabelsFigureCommand >> execute [ + + diagramElements + select: [ :each | each owningElement exists ] + thenDo: [ :each | each unsetAssociationEndLabels ] +] + +{ #category : 'testing' } +OPUmlDiagramUnsetEndLabelsFigureCommand >> isCurrentStyle: aStyle [ + + aStyle ifNil: [ ^ true ]. + ^ (aStyle includesKey: + OPUmlAssociationEndLabel showAssociationEndLabelsKey) not +] From 662fd1d909aad0ac63b1493f3a364e618c3ba8e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Blizni=C4=8Denko?= Date: Wed, 13 Nov 2024 21:18:23 +0100 Subject: [PATCH 16/17] Improved association end hiding --- .../OPDiagramElement.extension.st | 7 +-- .../OPUmlAssociationEndLabel.class.st | 4 +- ...PUmlDiagramEndLabelsFigureCommand.class.st | 43 ++++++++++++++++--- ...DiagramHideEndLabelsFigureCommand.class.st | 2 +- ...SameAsClassEndLabelsFigureCommand.class.st | 6 +-- ...lDiagramSetEndLabelsFigureCommand.class.st | 32 ++++++++++---- ...DiagramShowEndLabelsFigureCommand.class.st | 2 +- ...iagramUnsetEndLabelsFigureCommand.class.st | 10 ++++- 8 files changed, 79 insertions(+), 27 deletions(-) diff --git a/repository/OpenPonk-ClassEditor/OPDiagramElement.extension.st b/repository/OpenPonk-ClassEditor/OPDiagramElement.extension.st index 6df0c577..dacd306e 100644 --- a/repository/OpenPonk-ClassEditor/OPDiagramElement.extension.st +++ b/repository/OpenPonk-ClassEditor/OPDiagramElement.extension.st @@ -3,9 +3,10 @@ Extension { #name : 'OPDiagramElement' } { #category : '*OpenPonk-ClassEditor' } OPDiagramElement >> showAssociationEndLabels [ - ^ self stylePropertyNamed: self showAssociationEndLabelsKey ifAbsent: [ - OPUmlDiagramHideSameAsClassEndLabelsFigureCommand - resultingShowState ] + ^ self + stylePropertyNamed: self showAssociationEndLabelsKey + ifAbsent: [ + OPUmlDiagramEndLabelsFigureCommand defaultResultingShowState ] ] { #category : '*OpenPonk-ClassEditor' } diff --git a/repository/OpenPonk-ClassEditor/OPUmlAssociationEndLabel.class.st b/repository/OpenPonk-ClassEditor/OPUmlAssociationEndLabel.class.st index b5742df9..a1981084 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlAssociationEndLabel.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlAssociationEndLabel.class.st @@ -42,11 +42,11 @@ OPUmlAssociationEndLabel >> defaultText [ | type typeName defaultText | self showAssociationEndLabels - = OPUmlDiagramHideEndLabelsFigureCommand resultingShowState ifTrue: [ + = OPUmlDiagramHideEndLabelsFigureCommand styleState ifTrue: [ ^ '' ]. defaultText := self modelElement notationStringAsRoleName. self showAssociationEndLabels - = OPUmlDiagramShowEndLabelsFigureCommand resultingShowState ifTrue: [ + = OPUmlDiagramShowEndLabelsFigureCommand styleState ifTrue: [ ^ defaultText ]. type := self modelElement type. type ifNil: [ ^ defaultText ]. diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st index 46bd4bcb..d0730b76 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramEndLabelsFigureCommand.class.st @@ -1,6 +1,9 @@ Class { #name : 'OPUmlDiagramEndLabelsFigureCommand', #superclass : 'OPDiagramFigureCommand', + #instVars : [ + 'relevantDiagramElements' + ], #category : 'OpenPonk-ClassEditor-Commands', #package : 'OpenPonk-ClassEditor', #tag : 'Commands' @@ -23,12 +26,27 @@ OPUmlDiagramEndLabelsFigureCommand class >> contextMenuActivation [ for: OPCanvasPresenter ] +{ #category : 'as yet unclassified' } +OPUmlDiagramEndLabelsFigureCommand class >> defaultResultingShowState [ + + ^ OPUmlDiagramHideSameAsClassEndLabelsFigureCommand + styleState +] + { #category : 'testing' } OPUmlDiagramEndLabelsFigureCommand class >> isAbstract [ ^ self = OPUmlDiagramEndLabelsFigureCommand ] +{ #category : 'as yet unclassified' } +OPUmlDiagramEndLabelsFigureCommand >> applicableDiagramElements [ + + ^ relevantDiagramElements ifNil: [ + relevantDiagramElements := diagramElements select: [ :each | + each supportsHidingLabelEnds ] ] +] + { #category : 'accessing' } OPUmlDiagramEndLabelsFigureCommand >> basicMenuItemName [ @@ -41,20 +59,33 @@ OPUmlDiagramEndLabelsFigureCommand >> defaultMenuItemName [ | basicName | basicName := self basicMenuItemName. - self isCurrent ifFalse: [ ^ basicName ]. + self isCurrentlySelected ifTrue: [ ^ basicName , ' [selected]' ]. + + self isCurrentlyActive ifTrue: [ ^ basicName , ' (active)' ]. + + ^ basicName +] + +{ #category : 'as yet unclassified' } +OPUmlDiagramEndLabelsFigureCommand >> defaultResultingShowState [ + ^ self class defaultResultingShowState +] + +{ #category : 'testing' } +OPUmlDiagramEndLabelsFigureCommand >> isCurrentlyActive [ - ^ basicName , ' [current]' + ^ false ] { #category : 'testing' } -OPUmlDiagramEndLabelsFigureCommand >> isCurrent [ +OPUmlDiagramEndLabelsFigureCommand >> isCurrentlySelected [ - ^ diagramElements anySatisfy: [ :any | - self isCurrentStyle: any localStyle ] + ^ self applicableDiagramElements anySatisfy: [ :any | + self isCurrentlySelectedByStyle: any localStyle ] ] { #category : 'testing' } -OPUmlDiagramEndLabelsFigureCommand >> isCurrentStyle: aStyle [ +OPUmlDiagramEndLabelsFigureCommand >> isCurrentlySelectedByStyle: aStyle [ ^ self subclassResponsibility ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramHideEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramHideEndLabelsFigureCommand.class.st index 144ab310..7734e199 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlDiagramHideEndLabelsFigureCommand.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramHideEndLabelsFigureCommand.class.st @@ -7,7 +7,7 @@ Class { } { #category : 'hooks' } -OPUmlDiagramHideEndLabelsFigureCommand class >> resultingShowState [ +OPUmlDiagramHideEndLabelsFigureCommand class >> styleState [ ^ #show ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramHideSameAsClassEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramHideSameAsClassEndLabelsFigureCommand.class.st index b18d7a05..54b0e502 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlDiagramHideSameAsClassEndLabelsFigureCommand.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramHideSameAsClassEndLabelsFigureCommand.class.st @@ -7,7 +7,7 @@ Class { } { #category : 'hooks' } -OPUmlDiagramHideSameAsClassEndLabelsFigureCommand class >> resultingShowState [ +OPUmlDiagramHideSameAsClassEndLabelsFigureCommand class >> styleState [ ^ #hideSame ] @@ -21,11 +21,11 @@ OPUmlDiagramHideSameAsClassEndLabelsFigureCommand >> basicMenuItemName [ { #category : 'accessing' } OPUmlDiagramHideSameAsClassEndLabelsFigureCommand >> defaultMenuIconFormSet [ - ^ FormSet form: OPCoreIcons opHideSameLabelsIcon + ^ FormSet form: OPCoreIcons opHideSomeLabelsIcon ] { #category : 'accessing' } OPUmlDiagramHideSameAsClassEndLabelsFigureCommand >> description [ - ^ 'Hide association end labels where the text is the same as name of the class' + ^ 'Hide association end labels with same text as name of its connected class' ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramSetEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramSetEndLabelsFigureCommand.class.st index 8e45ec7d..36cf85b7 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlDiagramSetEndLabelsFigureCommand.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramSetEndLabelsFigureCommand.class.st @@ -13,7 +13,7 @@ OPUmlDiagramSetEndLabelsFigureCommand class >> isAbstract [ ] { #category : 'hooks' } -OPUmlDiagramSetEndLabelsFigureCommand class >> resultingShowState [ +OPUmlDiagramSetEndLabelsFigureCommand class >> styleState [ ^ #'' ] @@ -21,24 +21,38 @@ OPUmlDiagramSetEndLabelsFigureCommand class >> resultingShowState [ { #category : 'execution' } OPUmlDiagramSetEndLabelsFigureCommand >> execute [ - diagramElements - select: [ :each | each supportsHidingLabelEnds ] - thenDo: [ :each | - each showAssociationEndLabels: self resultingShowState ] + self applicableDiagramElements do: [ :each | + each showAssociationEndLabels: self styleState ] ] { #category : 'testing' } -OPUmlDiagramSetEndLabelsFigureCommand >> isCurrentStyle: aStyle [ +OPUmlDiagramSetEndLabelsFigureCommand >> isCurrentlyActive [ + + ^ self applicableDiagramElements anySatisfy: [ :any | + any showAssociationEndLabels = self styleState ] +] + +{ #category : 'testing' } +OPUmlDiagramSetEndLabelsFigureCommand >> isCurrentlySelected [ + + ^ super isCurrentlySelected or: [ + self applicableDiagramElements allSatisfy: [ :each | + each owningElement exists not and: [ + each showAssociationEndLabels = self styleState ] ] ] +] + +{ #category : 'testing' } +OPUmlDiagramSetEndLabelsFigureCommand >> isCurrentlySelectedByStyle: aStyle [ aStyle ifNil: [ ^ false ]. ^ aStyle at: OPUmlAssociationEndLabel showAssociationEndLabelsKey - ifPresent: [ :styleValue | styleValue = self resultingShowState ] + ifPresent: [ :styleValue | styleValue = self styleState ] ifAbsent: [ false ] ] { #category : 'hooks' } -OPUmlDiagramSetEndLabelsFigureCommand >> resultingShowState [ +OPUmlDiagramSetEndLabelsFigureCommand >> styleState [ - ^ self class resultingShowState + ^ self class styleState ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramShowEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramShowEndLabelsFigureCommand.class.st index 40413e9d..64205e0b 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlDiagramShowEndLabelsFigureCommand.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramShowEndLabelsFigureCommand.class.st @@ -7,7 +7,7 @@ Class { } { #category : 'hooks' } -OPUmlDiagramShowEndLabelsFigureCommand class >> resultingShowState [ +OPUmlDiagramShowEndLabelsFigureCommand class >> styleState [ ^ #hide ] diff --git a/repository/OpenPonk-ClassEditor/OPUmlDiagramUnsetEndLabelsFigureCommand.class.st b/repository/OpenPonk-ClassEditor/OPUmlDiagramUnsetEndLabelsFigureCommand.class.st index 2e12abdf..e1558ae9 100644 --- a/repository/OpenPonk-ClassEditor/OPUmlDiagramUnsetEndLabelsFigureCommand.class.st +++ b/repository/OpenPonk-ClassEditor/OPUmlDiagramUnsetEndLabelsFigureCommand.class.st @@ -20,16 +20,22 @@ OPUmlDiagramUnsetEndLabelsFigureCommand >> basicMenuItemName [ ^ 'Use diagram-level setting' ] +{ #category : 'accessing' } +OPUmlDiagramUnsetEndLabelsFigureCommand >> description [ + + ^ 'Adopt option picked for the entire diagram, instead of overriding it' +] + { #category : 'execution' } OPUmlDiagramUnsetEndLabelsFigureCommand >> execute [ - diagramElements + self applicableDiagramElements select: [ :each | each owningElement exists ] thenDo: [ :each | each unsetAssociationEndLabels ] ] { #category : 'testing' } -OPUmlDiagramUnsetEndLabelsFigureCommand >> isCurrentStyle: aStyle [ +OPUmlDiagramUnsetEndLabelsFigureCommand >> isCurrentlySelectedByStyle: aStyle [ aStyle ifNil: [ ^ true ]. ^ (aStyle includesKey: From 2ffa3d0a2695a1f888bac30ec2875765471ade39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Blizni=C4=8Denko?= Date: Thu, 14 Nov 2024 11:03:50 +0100 Subject: [PATCH 17/17] Added legacy example test generator --- .../OPUml410oppProjectLoadTest.class.st | 13 +++++++++++++ .../OPUmlLegacyProjectLoadTestGenerator.class.st | 13 +++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 repository/OpenPonk-ClassEditor/OPUml410oppProjectLoadTest.class.st create mode 100644 repository/OpenPonk-ClassEditor/OPUmlLegacyProjectLoadTestGenerator.class.st diff --git a/repository/OpenPonk-ClassEditor/OPUml410oppProjectLoadTest.class.st b/repository/OpenPonk-ClassEditor/OPUml410oppProjectLoadTest.class.st new file mode 100644 index 00000000..850fd1e9 --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUml410oppProjectLoadTest.class.st @@ -0,0 +1,13 @@ +Class { + #name : 'OPUml410oppProjectLoadTest', + #superclass : 'OPLegacyProjectLoadTest', + #category : 'OpenPonk-ClassEditor-Tests - UI', + #package : 'OpenPonk-ClassEditor', + #tag : 'Tests - UI' +} + +{ #category : 'as yet unclassified' } +OPUml410oppProjectLoadTest >> base64ProjectZip [ + +^'UEsDBBQAAAAIAHFXblkIJFS6OQAAAEMAAAAYAAAAcHJvamVjdC9leHBvcnQtaW5mby5qc29uq+biVErLL8pNLFFSsFJQSsksSk0uyS+qVNLh4lQqLk3KAnLBMgVF+WA2SLwstag4Mz8PJG7IVQsAUEsDBBQAAAAIAHFXbllQ0Ba3dAAAAI0AAAATAAAAcHJvamVjdC9tb2RlbHMuanNvbovm5eKs5uXi5FQqLc1MUVKwUlBKtEhLskwxTtU1Tk011jVIMTDQtTRJtdQ1NzexMEhLM0lKTk5W0gHrKcgpTc/MA+vyDwjNzXHOSSwudk3JLMkvCoBIIasLSy0qzsyHKDfQA0Lt0rzsvPzyPCWgolperlgAUEsDBBQAAAAIAHFXblmOfPJyiwAAALgAAAAUAAAAcHJvamVjdC9wcm9qZWN0Lmpzb25NjcEKgzAQRM8K/oPstV3YmOSQ/IQ99Ac0WcGWaEgVCsV/b5P20OPMvJl5NXUF/Ixr2qC1bZYVbHPgxzaEmC3oqFMoBAp1FWS1sVKfSFgiOBf62+ZU4D7yclmXO3yiI+cQ03pj97e+77MvrCbtDUtGySyRPBEaxQM6rUeaJjU6534fyxC4dMpuUx9vUEsDBBQAAAAIAHFXblkK85s+RQAAAE0AAABEAAAAcHJvamVjdC9tb2RlbHMvYThmYjlkM2UtM2VlMy0wZDAwLTk0ZTktNzc0ODBmZjRiY2NjL2V4cG9ydC1pbmZvLmpzb26r5uJUSssvyk0sUVKwUlBKySxKTS7JL6pU0uHiVCouTcoCcsEyufkpqTnhmSUZLpmJ6UWJucVgFWWpRcWZ+XkgFYZctQBQSwMEFAAAAAgAcVduWShkt8lYAwAAWBQAAFYAAABwcm9qZWN0L21vZGVscy9hOGZiOWQzZS0zZWUzLTBkMDAtOTRlOS03NzQ4MGZmNGJjY2MvZGlhZ3JhbXMvMS1TaW1wbGUgQXNzb2NpYXRpb24uc3RvbuVYz2+bMBQ+Z9L+h0g95BIim9/uqV3XW9dEinaaejBgEmsEEDjqoin/+4yB4IABdWu7rjuFvIfs733fe8/PLFfLlMSrJP7+meJNhnfTnx8/TC52SUCi24jsSMzy6eX0GzdOZtgNPRQYRDMIMTQQAKAhkyDNcUwXhKHp+b4/428+zIs1GM42hN0GGyJWmJbWPNlnPmlbk8eYBO39lquvu+gmwnm+3uKUCGSTHmwcXQgIQqSNztN0GxgyukmJbyJ2pfGmWoqvdAUrRwt6uYGAc53niU8xo0ksg+qHxYHZAEAUtoEFmhXawTmwE7QBcJMeZoVHyW69XJdhVVh32CPRKSxVYM2qKphIcvYCHYKqAnvm9ZJ9HBTm5eqeY/tU/m0QTy5+cCcE5lwyHbgJubLlkQZsy60Wkq1bQjfbIhBon6zH+uk472NtlSUpyRgl+fvhz2rzB4GtIhAo+QNPoW/NSEYSdkjfE3/g9fi7jYNx3ppdZgYAqNuSiBb6nttuSVJTetN8d9g2LBXbyBgtd2lvzNYCN3+DZXvSo8SXfcRoGlGfssN/r0O37/YoYT2/EH9QEpar+x0pQqg52PhXpXDaQthQpYPr/qYQIY7yZy+Jd6iD4ihVK2E/ixCdUTKv31NP1MOKzBAIFXO1r4XIdTqCNOQMDLBDarTFOOG4Quo91FNtdXlIdinOWOHFXkTaeTgyWyhCsM4UGsipwaQawi1fe2hISXaPd13go9BV4M9ybgT+SADqwpD8x+b5oTvISAqOVZAoIFOuZHGiyEKcygcCKcKmfmy9XRrH1lVKsHOyPeJDmtCWMKvCwoNEaIHMeQFgASRKWu7SWxdi+Xs8u3v2sNuXGePpPJQQilx4wcvkcO4+dZ53nJfp4p12Wak0lwi/ozmTSH+DXF8zllFvz8jfGjvdV5bnrIgGm4foHPXBK7qGVivRdAxUX76kdgGFpUoEfsxWDOdluIW19NWngTiZyu9YA4AEHA2VdJVwINTLfw2c8nLSgNF1gxvEfhc0L77VVQNwZVmTiPiMBLLV51WXYQGi+qh3U1pKHLmPo2IYAAtoQ9MwkeNYjms6llFtniY5LSZo/k7d1jRoLVzbgAYC0DAtHQF3zo3OAiLd1S0eCASOrTtCN67R8RdQSwMEFAAAAAgAcVduWbwERrw2AAAAPgAAAE0AAABwcm9qZWN0L21vZGVscy9hOGZiOWQzZS0zZWUzLTBkMDAtOTRlOS03NzQ4MGZmNGJjY2MvZGlhZ3JhbXMvZXhwb3J0LWluZm8uanNvbqvm4lRKyy/KTSxRUrBSUCouyc9T0uHiVCouTcpKTYYIpmQmphcl5oLFy1KLijOBaoDiRly1AFBLAwQUAAAACABxV25ZTD0HozMAAAA7AAAASgAAAHByb2plY3QvbW9kZWxzL2E4ZmI5ZDNlLTNlZTMtMGQwMC05NGU5LTc3NDgwZmY0YmNjYy9tb2RlbC9leHBvcnQtaW5mby5qc29uq+biVErLL8pNLFFSsFJQqsjNVNLh4lQqLk3KSk2GiOXmp6TmgEXLUouKM/PzQKKGXLUAUEsDBBQAAAAIAHFXblmucyPu1wEAAL4FAABDAAAAcHJvamVjdC9tb2RlbHMvYThmYjlkM2UtM2VlMy0wZDAwLTk0ZTktNzc0ODBmZjRiY2NjL21vZGVsL21vZGVsLnhtbJ2Ub2+bMBDGP0G/A/LLSY5NSPkTQaqq6qRK7TRpy7S3xj4zNIyRMU377eeStDDClrS8Aot7fvec7y69elKV9wimLXWdIX9BkQc116Ksiwxtv3/GMbraXKRPqlz/fLjz3N91u+5UlaFf1jZrQna73UKrYqFNQdoGONk+3JMl9X0aUR8dAlz4vwOc7hCwufDckzrC+ivjv1kB3gvbPjeQodEp6o9LkSEWyzwRAeAAIMBUUIqTFSQ4ilYxlXKVc86RVzPlBL6VqqnAu25bzUtmnecDsIc2e2lxW4GC2k7ANxVr2wErKSQJTLE5XoY0mGIPgiNWz9O7GsS1tabMO3vk0+gGjH0eiAGlSSKnRMCS5yOjrCgMFL23DHGtGt2W1pWLDZ4zFFLqH0sJfClDMUjtk0monDHKsUziaGq0d3Sj1Yzb3nGld2B+sKqbur13ORpW3dUWCjCD58t4yY8TlXgVhuEbnMyQuqb5L2lbV6Vyr+ILs537PoGUFPtiXObHF+kMfZrCU/L3rY7ai0z666Od954Leb0LcjZsPBtvyPP6RYHKwdzWZ/aqN19pH0csOJpcvjfSzs6QQ56cnvNgH56S96wDl7Nbr69LgZxskZSMFp9bxuSwjTd/AFBLAQIUAxQAAAAIAHFXblkIJFS6OQAAAEMAAAAYAAAAAAAAAAAAAAC2gQAAAABwcm9qZWN0L2V4cG9ydC1pbmZvLmpzb25QSwECFAMUAAAACABxV25ZUNAWt3QAAACNAAAAEwAAAAAAAAAAAAAAtoFvAAAAcHJvamVjdC9tb2RlbHMuanNvblBLAQIUAxQAAAAIAHFXblmOfPJyiwAAALgAAAAUAAAAAAAAAAAAAAC2gRQBAABwcm9qZWN0L3Byb2plY3QuanNvblBLAQIUAxQAAAAIAHFXblkK85s+RQAAAE0AAABEAAAAAAAAAAAAAAC2gdEBAABwcm9qZWN0L21vZGVscy9hOGZiOWQzZS0zZWUzLTBkMDAtOTRlOS03NzQ4MGZmNGJjY2MvZXhwb3J0LWluZm8uanNvblBLAQIUAxQAAAAIAHFXblkoZLfJWAMAAFgUAABWAAAAAAAAAAAAAAC2gXgCAABwcm9qZWN0L21vZGVscy9hOGZiOWQzZS0zZWUzLTBkMDAtOTRlOS03NzQ4MGZmNGJjY2MvZGlhZ3JhbXMvMS1TaW1wbGUgQXNzb2NpYXRpb24uc3RvblBLAQIUAxQAAAAIAHFXblm8BEa8NgAAAD4AAABNAAAAAAAAAAAAAAC2gUQGAABwcm9qZWN0L21vZGVscy9hOGZiOWQzZS0zZWUzLTBkMDAtOTRlOS03NzQ4MGZmNGJjY2MvZGlhZ3JhbXMvZXhwb3J0LWluZm8uanNvblBLAQIUAxQAAAAIAHFXbllMPQejMwAAADsAAABKAAAAAAAAAAAAAAC2geUGAABwcm9qZWN0L21vZGVscy9hOGZiOWQzZS0zZWUzLTBkMDAtOTRlOS03NzQ4MGZmNGJjY2MvbW9kZWwvZXhwb3J0LWluZm8uanNvblBLAQIUAxQAAAAIAHFXblmucyPu1wEAAL4FAABDAAAAAAAAAAAAAAC2gYAHAABwcm9qZWN0L21vZGVscy9hOGZiOWQzZS0zZWUzLTBkMDAtOTRlOS03NzQ4MGZmNGJjY2MvbW9kZWwvbW9kZWwueG1sUEsFBgAAAAAIAAgAIwMAALgJAAAAAA==' +] diff --git a/repository/OpenPonk-ClassEditor/OPUmlLegacyProjectLoadTestGenerator.class.st b/repository/OpenPonk-ClassEditor/OPUmlLegacyProjectLoadTestGenerator.class.st new file mode 100644 index 00000000..517e083f --- /dev/null +++ b/repository/OpenPonk-ClassEditor/OPUmlLegacyProjectLoadTestGenerator.class.st @@ -0,0 +1,13 @@ +Class { + #name : 'OPUmlLegacyProjectLoadTestGenerator', + #superclass : 'OPLegacyProjectLoadTestGenerator', + #category : 'OpenPonk-ClassEditor-Tests - UI', + #package : 'OpenPonk-ClassEditor', + #tag : 'Tests - UI' +} + +{ #category : 'hooks' } +OPUmlLegacyProjectLoadTestGenerator >> model [ + + ^ OPUmlExamples exampleSimpleAssociation +]