[PATCH] Keep selection when switching environments
Vratislav Podzimek
vpodzime at redhat.com
Fri Mar 7 08:27:13 UTC 2014
On Thu, 2014-03-06 at 17:28 +0100, Martin Kolman wrote:
> When user selects an addon for an environment,
> keep it selected if user switches to another
> environment that also has the addon available.
>
> Also if users deselects a default addon for an
^ extra 's'
> environment, it will also be deselected when
> switching to any other environment that has
> the addon selected by default.
>
> Related: rhbz#1043655
> Signed-off-by: Martin Kolman <mkolman at redhat.com>
> ---
> pyanaconda/ui/gui/spokes/software.py | 43 +++++++++++++-----------------------
> 1 file changed, 15 insertions(+), 28 deletions(-)
>
> diff --git a/pyanaconda/ui/gui/spokes/software.py b/pyanaconda/ui/gui/spokes/software.py
> index b21866b..6a0a23a 100644
> --- a/pyanaconda/ui/gui/spokes/software.py
> +++ b/pyanaconda/ui/gui/spokes/software.py
> @@ -56,8 +56,7 @@ class SoftwareSelectionSpoke(NormalSpoke):
> self._tx_id = None
> self._selectFlag = False
>
> - self.selectedGroups = []
> - self.excludedGroups = []
> + self.selectedGroups = {}
>
> self.environment = None
>
> # Used for detecting whether anything's changed in the spoke.
> @@ -67,24 +66,25 @@ class SoftwareSelectionSpoke(NormalSpoke):
> # We need to tell the addon view whether something is a separator or not.
> self.builder.get_object("addonView").set_row_separator_func(self._addon_row_is_separator, None)
>
> + # track what addons were selected by the user so we can can check them again if user
^which double 'can'^
> + # switches between environments
> + self._user_selected_addons = {}
You are not using this dict. What about naming it
'self._user_decided_addons' and using it instead of self.selectedGroups?
> +
> def _apply(self):
> row = self._get_selected_environment()
> if not row:
> return
>
> - addons = self._get_selected_addons()
> - for group in addons:
> - if group not in self.selectedGroups:
> - self.selectedGroups.append(group)
> -
> self._selectFlag = False
> self.payload.data.packages.groupList = []
> self.payload.selectEnvironment(row[2])
> self.environment = row[2]
> - for group in self.selectedGroups:
> +
> + addons = self._get_selected_addons()
> + for group in self._get_selected_addons():
You can use 'addons' on the second line.
> self.payload.selectGroup(group)
>
> - # And then save these values so we can check next time.
> + # save these values so we can check next time.
> self._origAddons = addons
> self._origEnvironment = self.environment
>
> @@ -280,11 +280,12 @@ class SoftwareSelectionSpoke(NormalSpoke):
>
> def _addAddon(self, grp):
> (name, desc) = self.payload.groupDescription(grp)
> - # If no groups are selected, select the default groups
> - if not self._origEnvironment:
> - selected = self.payload.environmentOptionIsDefault(self.environment, grp)
> + # Check if the group has been selected or explicitly unselected
explicitly selected or unselected
> + if grp in self.selectedGroups:
> + selected = self.selectedGroups[grp]
> else:
> - selected = grp in self.selectedGroups
> + # check if the group should be selected by default
> + selected = self.payload.environmentOptionIsDefault(self.environment, grp)
>
> self._addonStore.append([selected, "<b>%s</b>\n%s" % (name, desc), grp, False])
>
> @@ -349,12 +350,6 @@ class SoftwareSelectionSpoke(NormalSpoke):
> for row in self._environmentStore:
> row[0] = False
>
> - # Then, remove all the groups that were selected by the previously
> - # selected environment.
> - for groupid in self.payload.environmentGroups(self.environment):
> - if groupid in self.selectedGroups:
> - self.selectedGroups.remove(groupid)
> -
> # Then mark the clicked environment as selected and update the screen.
> self._environmentStore[path][0] = True
> self.environment = self._environmentStore[path][2]
> @@ -373,15 +368,7 @@ class SoftwareSelectionSpoke(NormalSpoke):
> selected = not self._addonStore[path][0]
> group = self._addonStore[path][2]
> self._addonStore[path][0] = selected
> - if selected:
> - if group not in self.selectedGroups:
> - self.selectedGroups.append(group)
> -
> - if group in self.excludedGroups:
> - self.excludedGroups.remove(group)
> -
> - elif not selected and group in self.selectedGroups:
> - self.selectedGroups.remove(group)
> + self.selectedGroups[group] = selected
>
> def on_addon_view_clicked(self, view, event, *args):
> if event and not event.type in [Gdk.EventType.BUTTON_RELEASE, Gdk.EventType.KEY_RELEASE]:
--
Vratislav Podzimek
Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic
More information about the anaconda-patches
mailing list