protected void open() {

        if (!m_enabled) {
            return;
        }

        m_openClose.setDown(true);
        if (m_maxCellWidth == 0) {
            initMaxCellWidth();
        }
        int selectorWidth = m_maxCellWidth;
        // should not be any wider than the actual window
        int windowWidth = Window.getClientWidth();
        if (m_maxCellWidth > windowWidth) {
            selectorWidth = windowWidth - 10;
        }
        m_popup.setWidth(selectorWidth + "px");
        m_popup.show();
        int panelTop = m_panel.getElement().getAbsoluteTop();
        int openerHeight = DomUtil.getCurrentStyleInt(m_opener.getElement(), DomUtil.Style.height);
        int popupHeight = m_popup.getOffsetHeight();
        int dx = 0;
        if (selectorWidth > (m_opener.getOffsetWidth() - 2)) {
            int spaceOnTheRight = (Window.getClientWidth() + Window.getScrollLeft())
                - m_opener.getAbsoluteLeft()
                - selectorWidth
                - 2;
            dx = spaceOnTheRight < 0 ? spaceOnTheRight : 0;
        }
        if (((Window.getClientHeight() - (panelTop + openerHeight)) < popupHeight) && (panelTop > popupHeight)) {
            DomUtil.positionElement(m_popup.getElement(), m_panel.getElement(), dx, -(popupHeight - 2));
            m_selectBoxState.setValue(I_LayoutBundle.INSTANCE.generalCss().cornerBottom());
            m_selectorState.setValue(I_LayoutBundle.INSTANCE.generalCss().cornerTop());
        } else {
            DomUtil.positionElement(m_popup.getElement(), m_panel.getElement(), dx, openerHeight);
            m_selectBoxState.setValue(I_LayoutBundle.INSTANCE.generalCss().cornerTop());
            m_selectorState.setValue(I_LayoutBundle.INSTANCE.generalCss().cornerBottom());
        }
        // m_selectBoxState.setValue(CSS.selectBoxOpen());
    }