docs: def edit( parent, template, actions = None ):
          """
          Prompts the user to edit the menu template with the given actions. \
          If no actions are supplied, then the actions from the parent will \
          be used.
          
          :param      parent   | <QWidget>
                      template | <str>
                      actions  | {<str> name: <QAction>, .. } || None
          
          :return     (<str> template, <bool> accepted)
          """
          # collect the potential actions from the widget
          if ( actions is None ):
              actions = {}
              for action in parent.actions():
                  key = nativestring(action.objectName())
                  if ( not key ):
                      key = nativestring(action.text()).replace('&', '')
                  
                  if ( key ):
                      actions[key] = action
          
          if ( not actions ):
              return ('', False)
          
          dlg = QDialog(parent)
          dlg.setWindowTitle('Edit Menu')
          
          widget = XMenuTemplateWidget(dlg)
          widget.setActions(actions)
          widget.setMenuTemplate(template)
          widget.layout().setContentsMargins(0, 0, 0, 0)
          
          opts = QDialogButtonBox.Save | QDialogButtonBox.Cancel
          btns = QDialogButtonBox(opts, Qt.Horizontal, dlg)
          
          btns.accepted.connect( dlg.accept )
          btns.rejected.connect( dlg.reject )
          
          layout = QVBoxLayout()
          layout.addWidget(widget)
          layout.addWidget(btns)
          
          dlg.setLayout(layout)
          dlg.adjustSize()
          dlg.resize(650, 400)
          
          if ( dlg.exec_() ):
              return (widget.menuTemplate(), True)
          return ('', False)