[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