Skip to content

Commit

Permalink
Merge branch 'feat/package-chooser-ux' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
j4yk committed Sep 14, 2022
2 parents 2204503 + 87708b2 commit 0a763ce
Show file tree
Hide file tree
Showing 35 changed files with 265 additions and 81 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
toolbuilder
acceptColor
^ self userInterfaceTheme acceptColor
ifNil: [self userInterfaceTheme get: #okColor for: #DialogWindow]
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ buildButtons: builder
builder pluggableActionButtonSpec new
model: self;
label: '>';
enabled: #hasUntrackedSelection;
enabled: #hasUntrackedSelections;
action: #trackSelected;
help: 'Start tracking the selected package'.

builder pluggableActionButtonSpec new
model: self;
label: '<';
enabled: #hasTrackedSelection;
enabled: #hasTrackedSelections;
action: #untrackSelected;
help: 'Stop tracking the selected package'}
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
toolbuilder
buildTrackedList: builder

^ builder pluggableListSpec new
^ builder pluggableMultiSelectionListSpec new
model: self;
filterableList: true;
clearFilterAutomatically: false;
autoDeselect: true;
list: #trackedPackagesWithTitle;
menu: #trackedPackagesMenu:;
getIndex: #selectionTracked;
setIndex: #selectionTracked:;
frame: (LayoutFrame fractions: (0.5 @ 0 corner: 1 @ 1) offsets: (self buttonWidth / 2 @ 0 corner: 0 @ 0))
getSelectionList: #selectionsTrackedAt:;
setSelectionList: #selectionsTrackedAt:put:;
frame: (LayoutFrame fractions: (0.5 @ 0 corner: 1 @ 1) offsets: (self buttonWidth / 2 @ 0 corner: 0 @ 0));
yourself
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
toolbuilder
buildUntrackedList: builder

^ builder pluggableListSpec new
^ builder pluggableMultiSelectionListSpec new
model: self;
filterableList: true;
clearFilterAutomatically: false;
autoDeselect: true;
list: #untrackedPackagesWithTitle;
menu: #untrackedPackagesMenu:;
getIndex: #selectionUntracked;
setIndex: #selectionUntracked:;
frame: (LayoutFrame fractions: (0 @ 0 corner: 0.5 @ 1) offsets: (0 @ 0 corner: self buttonWidth / -2 @ 0))
getSelectionList: #selectionsUntrackedAt:;
setSelectionList: #selectionsUntrackedAt:put:;
frame: (LayoutFrame fractions: (0 @ 0 corner: 0.5 @ 1) offsets: (0 @ 0 corner: self buttonWidth / -2 @ 0));
yourself
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@ buildWith: builder
builder pluggableButtonSpec new
model: self;
label: 'Accept';
action: #accept}))
action: #accept;
color: #acceptColor;
yourself.
builder pluggableButtonSpec new
model: self;
label: 'Cancel';
action: #cancel;
color: #cancelColor;
yourself}))
addKeyboardCaptureFilter: self;
yourself
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
actions
cancel

acceptChanges := false.
self changed: #close
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
toolbuilder
cancelColor
^ self userInterfaceTheme cancelColor
ifNil: [self userInterfaceTheme get: #cancelColor for: #DialogWindow]
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ chooseFor: aWorkingCopy

| originalPackages addedPackages removedPackages subPath |
acceptChanges := false.
trackedPackages := self packagesIn: aWorkingCopy.
trackedPackages := (self packagesIn: aWorkingCopy) asSortedCollection.
selectedTrackedPackages := Set new.
selectedUntrackedPackages := Set new.
originalPackages := trackedPackages copy.
self updateUntrackedPackages.

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
hasTrackedSelections

^ selectedTrackedPackages notEmpty

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
hasUntrackedSelections

^ selectedUntrackedPackages notEmpty
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
choosing packages
packagesIn: aWorkingCopy
^ OrderedCollection streamContents:
[:packageNames |
aWorkingCopy artifacts
select: [:each | each storeInfo objectClassName = PackageInfo name]
thenDo:
[:each |
packageNames nextPut: each packageName]]
^ aWorkingCopy artifacts
select: [:each | each storeInfo objectClassName = PackageInfo name]
thenCollect: [:each | each packageName]
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
actions
selectAllTrackedPackages

self selectedTrackedPackages addAll: self trackedPackages.
self changed: #selectionsTrackedAt:.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
actions
selectAllUntrackedPackages

self selectedUntrackedPackages addAll: self untrackedPackages.
self changed: #selectionsUntrackedAt:.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
actions
selectInverseTrackedPackages

| nonSelected |
nonSelected := self trackedPackages difference: self selectedTrackedPackages.
self selectedTrackedPackages
removeAll;
addAll: nonSelected.
self changed: #selectionsTrackedAt:.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
actions
selectInverseUntrackedPackages

| nonSelected |
nonSelected := self untrackedPackages difference: self selectedUntrackedPackages.
self selectedUntrackedPackages
removeAll;
addAll: nonSelected.
self changed: #selectionsUntrackedAt:.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
actions
selectNoTrackedPackages

self selectedTrackedPackages removeAll.
self changed: #selectionsTrackedAt:.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
actions
selectNoUntrackedPackages

self selectedUntrackedPackages removeAll.
self changed: #selectionsUntrackedAt:.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
selectedTrackedPackages

^ selectedTrackedPackages
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
selectedUntrackedPackages

^ selectedUntrackedPackages
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
accessing
selectionTracked: aNumber

aNumber ~= 1 ifTrue: [
selectionTracked := aNumber.
self changed: #selectionTracked.
self changed: #hasTrackedSelection]
aNumber = 1 ifTrue: ["title" ^ self].

selectionTracked := aNumber.
self changed: #selectionTracked
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
accessing
selectionUntracked: aNumber

aNumber ~= 1 ifTrue: [
selectionUntracked := aNumber.
self changed: #selectionUntracked.
self changed: #hasUntrackedSelection]
aNumber = 1 ifTrue: ["title" ^ self].

selectionUntracked := aNumber.
self changed: #selectionUntracked
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
accessing
selectionsTrackedAt: aNumber

aNumber = 1 ifTrue: ["title" ^ false].

^ selectedTrackedPackages includes: (self trackedPackages at: aNumber - 1)
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
accessing
selectionsTrackedAt: aNumber put: aBoolean

| package |
aNumber = 1 ifTrue: ["title" ^ self].

package := self trackedPackages at: aNumber - 1.
aBoolean
ifTrue: [selectedTrackedPackages add: package]
ifFalse: [selectedTrackedPackages remove: package ifAbsent: []].

self changed: #selectionsTrackedAt:.
self changed: #hasTrackedSelections
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
accessing
selectionsUntrackedAt: aNumber

aNumber = 1 ifTrue: ["title" ^ false].
^ selectedUntrackedPackages includes: (self untrackedPackages at: aNumber - 1)
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
accessing
selectionsUntrackedAt: aNumber put: aBoolean

| package |
aNumber = 1 ifTrue: ["title" ^ self].

package := self untrackedPackages at: aNumber - 1.
aBoolean
ifTrue: [selectedUntrackedPackages add: package]
ifFalse: [selectedUntrackedPackages remove: package ifAbsent: []].

self changed: #selectionsUntrackedAt:.
self changed: #hasUntrackedSelections
33 changes: 33 additions & 0 deletions src/Squit.package/SquitPackageChooser.class/instance/track..st
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
actions
track: aPackage

| conflictingPackages packageInfo |
packageInfo := PackageInfo new packageName: aPackage; yourself.
conflictingPackages := self trackedPackages select:
[:p | packageInfo includesSystemCategory: p].

conflictingPackages ifNotEmpty: [
self selectionUntracked: (self trackedPackagesWithTitle indexOf: aPackage).
(self confirm: 'To add this package, we will first remove ',
(conflictingPackages joinSeparatedBy: ', '),
', because the new package is a prefix/super package for these.', String cr,
'(Otherwise the package contents will be duplicated)') ifFalse: [^ self]].

self trackedPackages
removeAll: conflictingPackages;
add: aPackage.

self updateUntrackedPackages.
self changed: #trackedPackagesWithTitle.
self changed: #untrackedPackagesWithTitle.
selectionUntracked ifNotNil:
[self selectionUntracked: (selectionUntracked min: trackedPackages size + 1 "title")].
selectedUntrackedPackages remove: aPackage ifAbsent: [].
selectedTrackedPackages add: aPackage.
selectedTrackedPackages removeAll: conflictingPackages.
self changed: #selectionsTrackedAt:.
self changed: #selectionsUntrackedAt:.
self changed: #hasTrackedSelections.
self changed: #hasUntrackedSelections.
"Scroll updates into view"
self selectionTracked: (trackedPackages indexOf: aPackage) + 1 "title".
Original file line number Diff line number Diff line change
@@ -1,25 +1,20 @@
actions
trackSelected

| package conflictingPackages |
package := (self untrackedPackagesWithTitle at: self selectionUntracked).
| newPackages |
newPackages := self selectedUntrackedPackages asOrderedCollection.

conflictingPackages := self trackedPackages select:
[:p | (PackageInfo new packageName: package; yourself) includesSystemCategory: p].
"Remove all conflicts from the selection by selecting all roots from the tree only."
"Naive O(n**2) implementation. Yeah, there are fancy O(n log n) algos for this, but for N < 1000 this really seems not worth the effort."
newPackages := newPackages select: [:root |
newPackages noneSatisfy: [:child |
child ~= root and: [
(PackageInfo new packageName: child; includesSystemCategory: root)]]].

conflictingPackages ifNotEmpty: [
(self confirm: 'To add this package, we will first remove ',
(conflictingPackages joinSeparatedBy: ', '),
', because the new package is a prefix/super package for these.', String cr,
'(Otherwise the package contents will be duplicated)') ifFalse: [^ self]].
"Unselect children to be tracked (roots will be unselected by #track: below)"
selectedUntrackedPackages removeAllSuchThat: [:each |
(newPackages includes: each) not].
self changed: #selectedUntrackedPackages.

self trackedPackages
removeAll: conflictingPackages;
add: package.

self updateUntrackedPackages.

self changed: #trackedPackagesWithTitle.
self changed: #untrackedPackagesWithTitle.
self changed: #hasUntrackedSelection.
self changed: #hasTrackedSelection
newPackages do: [:package |
self track: package].
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
toolbuilder
trackedPackagesMenu: menu

^ menu
add: 'Select all' action: #selectAllTrackedPackages;
add: 'Select inversion' action: #selectInverseTrackedPackages;
add: 'Select none' action: #selectNoTrackedPackages;
yourself
20 changes: 20 additions & 0 deletions src/Squit.package/SquitPackageChooser.class/instance/untrack..st
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
actions
untrack: aPackage

self trackedPackages remove: aPackage.

self updateUntrackedPackages.

self updateUntrackedPackages.
self changed: #trackedPackagesWithTitle.
self changed: #untrackedPackagesWithTitle.
selectionTracked ifNotNil:
[self selectionTracked: (selectionTracked min: trackedPackages size + 1 "title")].
selectedUntrackedPackages add: aPackage.
selectedTrackedPackages remove: aPackage ifAbsent: [].
self changed: #selectionsTrackedAt:.
self changed: #selectionsUntrackedAt:.
self changed: #hasTrackedSelections.
self changed: #hasUntrackedSelections.
"Scroll updates into view"
self selectionUntracked: (untrackedPackages indexOf: aPackage) + 1 "title".
Loading

0 comments on commit 0a763ce

Please sign in to comment.