docs: def getDialog(cls, name, parent=None):
          """
          Generates a dialog for this class widget and returns it.
          
          :param      parent | <QtGui.QWidget> || None
          
          :return     <QtGui.QDialog>
          """
          key = '_{0}__{1}_dialog'.format(cls.__name__, name)
          dlgref = getattr(cls, key, None)
          
          if dlgref is not None:
              dlg = dlgref()
              if dlg:
                  return dlg
              
          if parent is None:
              parent = QApplication.activeWindow()
          
          dlg = QDialog(parent)
          
          # create widget
          widget = cls(dlg)
          dlg.__dict__['_mainwidget'] = widget
          widget.layout().setContentsMargins(0, 0, 0, 0)
          
          # create buttons
          opts    = QDialogButtonBox.Save | QDialogButtonBox.Cancel
          buttons = QDialogButtonBox(opts, Qt.Horizontal, dlg)
          
          # create layout
          layout = QVBoxLayout()
          layout.addWidget(widget)
          layout.addWidget(buttons)
          dlg.setLayout(layout)
          dlg.resize(widget.minimumSize() + QSize(15, 15))
          widget.resizeRequested.connect(dlg.adjustSize)
          
          # create connections
          buttons.accepted.connect(widget.save)
          buttons.rejected.connect(dlg.reject)
          widget.saved.connect(dlg.accept)
          widget.setFocus()
          
          dlg.adjustSize()
          if parent and parent.window():
              center = parent.window().geometry().center()
              dlg.move(center.x() - dlg.width() / 2.0,
                       center.y() - dlg.height() / 2.0)
          
          setattr(cls, key, weakref.ref(dlg))
          return dlg