'Setup ArrayEditor:
return False if data is not supported, True otherwise'

def setup_and_check(self, data, title='', readonly=False, xlabels=None, ylabels=None):

    self.data = data
    self.data.flags.writeable = True
    is_record_array = (data.dtype.names is not None)
    is_masked_array = isinstance(data, np.ma.MaskedArray)
    if (data.ndim > 3):
        self.error(_('Arrays    with    more    than    3    dimensions    are    not    supported'))
        return False
    if ((xlabels is not None) and (len(xlabels) != self.data.shape[1])):
        self.error(_("The    'xlabels'    argument    length    do    no    match    array    column    number"))
        return False
    if ((ylabels is not None) and (len(ylabels) != self.data.shape[0])):
        self.error(_("The    'ylabels'    argument    length    do    no    match    array    row    number"))
        return False
    if (not is_record_array):
        dtn = data.dtype.name
        if ((dtn not in SUPPORTED_FORMATS) and (not dtn.startswith('str')) and (not dtn.startswith('unicode'))):
            arr = (_('%s    arrays') % data.dtype.name)
            self.error((_('%s    are    currently    not    supported') % arr))
            return False
    self.layout = QGridLayout()
    self.setLayout(self.layout)
    self.setWindowIcon(ima.icon('arredit'))
    if title:
        title = ((to_text_string(title) + '    -    ') + _('NumPy    array'))
    else:
        title = _('Array    editor')
    if readonly:
        title += (('    (' + _('read    only')) + ')')
    self.setWindowTitle(title)
    self.resize(600, 500)
    self.stack = QStackedWidget(self)
    if is_record_array:
        for name in data.dtype.names:
            self.stack.addWidget(ArrayEditorWidget(self, data[name], readonly, xlabels, ylabels))
    elif is_masked_array:
        self.stack.addWidget(ArrayEditorWidget(self, data, readonly, xlabels, ylabels))
        self.stack.addWidget(ArrayEditorWidget(self, data.data, readonly, xlabels, ylabels))
        self.stack.addWidget(ArrayEditorWidget(self, data.mask, readonly, xlabels, ylabels))
    elif (data.ndim == 3):
        pass
    else:
        self.stack.addWidget(ArrayEditorWidget(self, data, readonly, xlabels, ylabels))
    self.arraywidget = self.stack.currentWidget()
    self.stack.currentChanged.connect(self.current_widget_changed)
    self.layout.addWidget(self.stack, 1, 0)
    btn_layout = QHBoxLayout()
    if (is_record_array or is_masked_array or (data.ndim == 3)):
        if is_record_array:
            btn_layout.addWidget(QLabel(_('Record    array    fields:')))
            names = []
            for name in data.dtype.names:
                field = data.dtype.fields[name]
                text = name
                if (len(field) >= 3):
                    title = field[2]
                    if (not is_text_string(title)):
                        title = repr(title)
                    text += ('    -    ' + title)
                names.append(text)
        else:
            names = [_('Masked    data'), _('Data'), _('Mask')]
        if (data.ndim == 3):
            self.index_spin = QSpinBox(self, keyboardTracking=False)
            self.index_spin.valueChanged.connect(self.change_active_widget)
            names = [str(i) for i in range(3)]
            ra_combo = QComboBox(self)
            ra_combo.addItems(names)
            ra_combo.currentIndexChanged.connect(self.current_dim_changed)
            label = QLabel(_('Axis:'))
            btn_layout.addWidget(label)
            btn_layout.addWidget(ra_combo)
            self.shape_label = QLabel()
            btn_layout.addWidget(self.shape_label)
            label = QLabel(_('Index:'))
            btn_layout.addWidget(label)
            btn_layout.addWidget(self.index_spin)
            self.slicing_label = QLabel()
            btn_layout.addWidget(self.slicing_label)
            self.current_dim_changed(self.last_dim)
        else:
            ra_combo = QComboBox(self)
            ra_combo.currentIndexChanged.connect(self.stack.setCurrentIndex)
            ra_combo.addItems(names)
            btn_layout.addWidget(ra_combo)
        if is_masked_array:
            label = QLabel(_('<u>Warning</u>:    changes    are    applied    separately'))
            label.setToolTip(_("For    performance    reasons,    changes    applied    to    masked    array    won't    be    reflected    in    array's    data    (and    vice-versa)."))
            btn_layout.addWidget(label)
        btn_layout.addStretch()
    bbox = QDialogButtonBox((QDialogButtonBox.Ok | QDialogButtonBox.Cancel))
    bbox.accepted.connect(self.accept)
    bbox.rejected.connect(self.reject)
    btn_layout.addWidget(bbox)
    self.layout.addLayout(btn_layout, 2, 0)
    self.setMinimumSize(400, 300)
    self.setWindowFlags(Qt.Window)
    return True
