def highlight_problems(self, has_problems):
        """
        Outline grid buttons in red if they have validation errors
        """
        if has_problems:
            self.validation_mode = set(has_problems)
            # highlighting doesn't work with Windows
            if sys.platform in ['win32', 'win62']:
                self.message.SetLabel('The following grid(s) have incorrect or incomplete data:\n{}'.format(', '.join(self.validation_mode)))
            # highlighting does work with OSX
            else:
                for dtype in ["specimens", "samples", "sites", "locations", "ages", "measurements"]:
                    wind = self.FindWindowByName(dtype + '_btn')
                    if dtype not in has_problems:
                        wind.Unbind(wx.EVT_PAINT, handler=self.highlight_button)
                    else:
                        wind.Bind(wx.EVT_PAINT, self.highlight_button)
                self.Refresh()
                self.message.SetLabel('Highlighted grids have incorrect or incomplete data')
            self.bSizer_msg.ShowItems(True)
            # manually fire a paint event to make sure all buttons
            # are highlighted/unhighlighted appropriately
            paintEvent = wx.CommandEvent(wx.wxEVT_PAINT,
                                         self.GetId())
            self.GetEventHandler().ProcessEvent(paintEvent)

        else:
            self.message.SetLabel("Validated!")
            self.bSizer_msg.ShowItems(True)
        self.hbox.Fit(self)
Outline grid buttons in red if they have validation errors