Changeset 70461


Ignore:
Timestamp:
Jan 30, 2017, 3:46:38 PM (8 years ago)
Author:
wenzeslaus
Message:

wxGUI/toolboxes: store warning/error messages for later (see #3253)

GError and other message boxes during startup prevent
its completion unless OK is clicked quickly.
Messages are now stored and retrived later by the menu builder object.
lmgr stores them again and then shows them at the end of
init when everything is ready.

Messages (which are non-critical errors or warnings) are written as errors
to the Console output window. Console may flash during startup
but then Layers tab is shown anyway which seems like okay behavior
(careful user sees something happen but can ignore it).

Details of the exception are included into the message.

Location:
grass/trunk/gui/wxpython
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • grass/trunk/gui/wxpython/core/menutree.py

    r68374 r70461  
    4747from core.settings import UserSettings
    4848from core.toolboxes import expandAddons as expAddons
     49from core.toolboxes import getMessages as getToolboxMessages
     50from core.toolboxes import clearMessages as clearToolboxMessages
     51from core.gcmd import GError
    4952from core.utils import _
    5053
     
    5760    """Abstract menu data class"""
    5861
    59     def __init__(self, filename, expandAddons=True):
     62    # TODO: message_handler=GError is just for backwards compatibility
     63    # message_handler=GError should be replaced by None
     64    def __init__(self, filename, expandAddons=True, message_handler=GError):
    6065
    6166        self.menustyle = UserSettings.Get(group='appearance',
     
    6671        if expandAddons:
    6772            expAddons(xmlTree)
     73            for message in getToolboxMessages():
     74                message_handler(message)
     75            clearToolboxMessages()
    6876
    6977        self.model = TreeModel(ModuleNode)
  • grass/trunk/gui/wxpython/core/toolboxes.py

    r68374 r70461  
    101101_.translate = None
    102102
     103# TODO: this should be part of some reader object
     104_MESSAGES = []
     105
    103106
    104107def _warning(message):
    105108    """Show warning"""
    106     # TODO: enable choice between GUI and script behavior
    107     # import only when really needed
    108     from core.gcmd import GError
    109     GError(message)
     109    _MESSAGES.append("WARNING: %s" % message)
     110
     111
     112def getMessages():
     113    return _MESSAGES
     114
     115
     116def clearMessages():
     117    del _MESSAGES[:]
    110118
    111119
     
    506514    try:
    507515        output = gcore.read_command('g.extension', quiet=True, flags='ag')
    508     except CalledModuleError:
     516    except CalledModuleError as error:
    509517        _warning(_("List of addons cannot be obtained"
    510                    " because g.extension failed."))
     518                   " because g.extension failed."
     519                   " Details: %s") % error)
    511520        return []
    512521
  • grass/trunk/gui/wxpython/lmgr/frame.py

    r70450 r70461  
    114114        self._giface = LayerManagerGrassInterface(self)
    115115
     116        menu_errors = []
     117        def add_menu_error(message):
     118            menu_errors.append(message)
     119        def show_menu_errors(messages):
     120            if messages:
     121                self._gconsole.WriteError(
     122                    _("There were some issues when loading menu"
     123                      " or Modules tab:"))
     124                for message in messages:
     125                    self._gconsole.WriteError(message)
     126
    116127        # the main menu bar
    117         self._menuTreeBuilder = LayerManagerMenuData()
     128        self._menuTreeBuilder = LayerManagerMenuData(message_handler=add_menu_error)
    118129        # the search tree and command console
    119         self._moduleTreeBuilder = LayerManagerModuleTree()
     130        self._moduleTreeBuilder = LayerManagerModuleTree(message_handler=add_menu_error)
    120131        self._auimgr = wx.aui.AuiManager(self)
    121132
     
    236247
    237248        self.workspaceChanged = False
     249
     250        show_menu_errors(menu_errors)
    238251
    239252        # start with layer manager on top
  • grass/trunk/gui/wxpython/lmgr/menudata.py

    r68374 r70461  
    1919
    2020from core.menutree import MenuTreeModelBuilder
    21 from core.toolboxes import getMenudataFile
     21from core.toolboxes import getMenudataFile, getMessages, clearMessages
    2222from core.globalvar import WXGUIDIR
    2323from core.gcmd import GError
     
    2727class LayerManagerMenuData(MenuTreeModelBuilder):
    2828
    29     def __init__(self, filename=None):
     29    def __init__(self, filename=None, message_handler=GError):
    3030        if filename:
    3131            expandAddons = False
     
    4040        try:
    4141            MenuTreeModelBuilder.__init__(
    42                 self, filename, expandAddons=expandAddons)
     42                self, filename, expandAddons=expandAddons,
     43                message_handler=message_handler)
    4344        except (ValueError, AttributeError, TypeError):
    44             GError(_("Unable to parse user toolboxes XML files. "
    45                      "Default main menu will be loaded."))
     45            message_handler(_("Unable to parse user toolboxes XML files. "
     46                              "Default main menu will be loaded."))
    4647            fallback = os.path.join(WXGUIDIR, 'xml', 'menudata.xml')
    47             MenuTreeModelBuilder.__init__(self, fallback)
     48            MenuTreeModelBuilder.__init__(
     49                self, fallback,  message_handler=message_handler)
    4850
    4951
    5052class LayerManagerModuleTree(MenuTreeModelBuilder):
    5153
    52     def __init__(self, filename=None):
     54    def __init__(self, filename=None, message_handler=GError):
    5355        if filename:
    5456            expandAddons = False
     
    6466        try:
    6567            MenuTreeModelBuilder.__init__(
    66                 self, filename, expandAddons=expandAddons)
     68                self, filename, expandAddons=expandAddons,
     69                message_handler=message_handler)
    6770        except (ValueError, AttributeError, TypeError):
    68             GError(_("Unable to parse user toolboxes XML files. "
    69                      "Default module tree will be loaded."))
    70             MenuTreeModelBuilder.__init__(self, fallback)
     71            error_handler(_("Unable to parse user toolboxes XML files. "
     72                            "Default module tree will be loaded."))
     73            MenuTreeModelBuilder.__init__(
     74                self, fallback, message_handler=message_handler)
Note: See TracChangeset for help on using the changeset viewer.