@@ -884,6 +884,50 @@ ViennaRefactoringBrowser >> cherrypick [
884884 self updateModuleList ]
885885]
886886
887+ { #category : ' user interface' }
888+ ViennaRefactoringBrowser >> chooseDirectory: aString path: aFileReference [
889+
890+ | reference |
891+ reference := nil .
892+ StOpenDirectoryPresenter new
893+ openFolder:
894+ (aFileReference ifNil: [ FileLocator viennaTalkDocumentDirectory ]);
895+ title: aString;
896+ okAction: [ :directoryReference | reference := directoryReference ];
897+ openModal.
898+ ^ reference
899+ ]
900+
901+ { #category : ' user interface' }
902+ ViennaRefactoringBrowser >> chooseExistingFileReference: aString extensions: anArrayOfString path: aFileReference [
903+
904+ | reference |
905+ reference := nil .
906+ StOpenFilePresenter new
907+ openFolder:
908+ (aFileReference ifNil: [ FileLocator viennaTalkDocumentDirectory ]);
909+ extensions: anArrayOfString;
910+ title: aString;
911+ okAction: [ :directoryReference | reference := directoryReference ];
912+ openModal.
913+ ^ reference
914+ ]
915+
916+ { #category : ' user interface' }
917+ ViennaRefactoringBrowser >> chooseForSaveFileReference: aString extensions: anArrayOfString path: aFileReference [
918+
919+ | reference |
920+ reference := nil .
921+ StSaveFilePresenter new
922+ filter: (StCustomExtensionsFilter extensions: anArrayOfString);
923+ defaultFolder:
924+ (aFileReference ifNil: [ FileLocator viennaTalkDocumentDirectory ]);
925+ title: aString;
926+ okAction: [ :ref | reference := ref ];
927+ openModal.
928+ ^ reference
929+ ]
930+
887931{ #category : ' private' }
888932ViennaRefactoringBrowser >> clearDirty [
889933
@@ -2377,7 +2421,7 @@ ViennaRefactoringBrowser >> load: aFileReference [
23772421{ #category : ' operations' }
23782422ViennaRefactoringBrowser >> loadFromDirectory [
23792423
2380- (UIManager default
2424+ (self
23812425 chooseDirectory: ' Directory to open'
23822426 path: FileLocator viennaTalkDocumentDirectory) ifNotNil: [ :dir |
23832427 self load: dir ]
@@ -2386,7 +2430,7 @@ ViennaRefactoringBrowser >> loadFromDirectory [
23862430{ #category : ' operations' }
23872431ViennaRefactoringBrowser >> loadFromFile [
23882432
2389- (UIManager default
2433+ (self
23902434 chooseExistingFileReference: ' File to open'
23912435 extensions: #( 'vdmsl' )
23922436 path: FileLocator viennaTalkDocumentDirectory) ifNotNil: [ :file |
@@ -2481,43 +2525,43 @@ ViennaRefactoringBrowser >> menuBar [
24812525ViennaRefactoringBrowser >> mergeAnnotationsIntoFRAM [
24822526
24832527 | fram |
2484- (UIManager default
2528+ (self
24852529 chooseExistingFileReference: ' Import directory'
24862530 extensions: #( 'xfmv' )
2487- path: FileLocator viennaTalkDocumentDirectory) ifNotNil: [ :ref |
2531+ path: FileLocator viennaTalkDocumentDirectory) ifNotNil: [ :ref |
24882532 fram := ViennaFRAMModel fromFile: ref ].
24892533 fram ifNil: [ ^ nil ].
24902534 fram loadSpec: self specification.
2491- (UIManager default
2535+ (self
24922536 chooseForSaveFileReference: ' Export file'
24932537 extensions: #( 'xfmv' )
2494- path: FileLocator home asFileReference) ifNotNil: [ :ref |
2538+ path: FileLocator home asFileReference) ifNotNil: [ :ref |
24952539 fram writeXMLFile: ref ]
24962540]
24972541
24982542{ #category : ' operations' }
24992543ViennaRefactoringBrowser >> mergeOperationsFromFRAM [
25002544
25012545 | fram copyMap newAst |
2502- (UIManager default
2546+ (self
25032547 chooseExistingFileReference: ' Import directory'
25042548 extensions: #( 'xfmv' )
25052549 path: FileLocator viennaTalkDocumentDirectory) ifNotNil: [ :ref |
25062550 fram := ViennaFRAMModel fromFile: ref ].
25072551 ^ fram ifNotNil: [
2508- | module category definition |
2509- module := self module.
2510- category := self category.
2511- definition := self definition.
2512- copyMap := IdentityDictionary new .
2513- newAst := self specification copyWhole: copyMap.
2514- fram appendToSpec: newAst.
2515- self epiLogMergeFRAM: newAst.
2516- moduleList selectItem: (copyMap at: module ifAbsent: [ nil ]).
2517- categoryList selectItem: (copyMap at: category ifAbsent: [ nil ]).
2518- definitionList selectItem:
2519- (copyMap at: definition ifAbsent: [ nil ]).
2520- newAst ]
2552+ | module category definition |
2553+ module := self module.
2554+ category := self category.
2555+ definition := self definition.
2556+ copyMap := IdentityDictionary new .
2557+ newAst := self specification copyWhole: copyMap.
2558+ fram appendToSpec: newAst.
2559+ self epiLogMergeFRAM: newAst.
2560+ moduleList selectItem: (copyMap at: module ifAbsent: [ nil ]).
2561+ categoryList selectItem: (copyMap at: category ifAbsent: [ nil ]).
2562+ definitionList selectItem:
2563+ (copyMap at: definition ifAbsent: [ nil ]).
2564+ newAst ]
25212565]
25222566
25232567{ #category : ' accessing' }
@@ -2973,37 +3017,36 @@ ViennaRefactoringBrowser >> saveAs [
29733017{ #category : ' operations' }
29743018ViennaRefactoringBrowser >> saveAsDirectory [
29753019
2976- (UIManager default
3020+ (self
29773021 chooseDirectory: ' Directory to save'
2978- from : FileLocator viennaTalkDocumentDirectory) ifNotNil: [ :dir |
2979- (dir filesMatching: ' *.vdmsl' ) do: [ :file | file ensureDeleteAll ].
2980- self specification modulesDo: [ :moduleNode |
2981- | file |
2982- file := dir / moduleNode identifier withExtension: ' vdmsl' .
2983- file
2984- ensureDeleteAll;
2985- writeStreamDo: [ :stream |
2986- stream nextPutAll:
2987- ((ViennaVDMFormatter format: moduleNode) withLineEndings:
2988- OSPlatform current lineEnding) ] ].
2989- UIManager default message: ' Save to ' , dir basename , ' /.' .
2990- self fileReference: dir.
2991- self clearDirty ]
3022+ path : FileLocator viennaTalkDocumentDirectory) ifNotNil: [ :dir |
3023+ (dir filesMatching: ' *.vdmsl' ) do: [ :file | file ensureDeleteAll ].
3024+ self specification modulesDo: [ :moduleNode |
3025+ | file |
3026+ file := dir / moduleNode identifier withExtension: ' vdmsl' .
3027+ file
3028+ ensureDeleteAll;
3029+ writeStreamDo: [ :stream |
3030+ stream nextPutAll:
3031+ ((ViennaVDMFormatter format: moduleNode) withLineEndings:
3032+ OSPlatform current lineEnding) ] ].
3033+ UIManager default message: ' Save to ' , dir basename , ' /.' .
3034+ self fileReference: dir.
3035+ self clearDirty ]
29923036]
29933037
29943038{ #category : ' operations' }
29953039ViennaRefactoringBrowser >> saveAsFile [
29963040
2997- (UIManager default
3041+ (self
29983042 chooseForSaveFileReference: ' File to save'
29993043 extensions: #( 'vdmsl' )
3000- path: FileLocator viennaTalkDocumentDirectory asFileReference)
3001- ifNotNil: [ :file |
3044+ path: FileLocator viennaTalkDocumentDirectory) ifNotNil: [ :file |
30023045 file
30033046 ensureDeleteAll;
30043047 writeStreamDo: [ :stream |
3005- stream nextPutAll:
3006- (self source withLineEndings: OSPlatform current lineEnding) ].
3048+ stream nextPutAll:
3049+ (self source withLineEndings: OSPlatform current lineEnding) ].
30073050 UIManager default message: ' Save to ' , file basename , ' .' .
30083051 self fileReference: file.
30093052 self clearDirty ]
0 commit comments