Fetch the value from the table and prepare the edit control
        to begin editing.  Set the focus to the edit control.
        *Must Override*

def BeginEdit(self, row, col, grid):
        """
        Fetch the value from the table and prepare the edit control
        to begin editing.  Set the focus to the edit control.
        *Must Override*

        """

        # Disable if cell is locked, enable if cell is not locked
        grid = self.main_window.grid
        key = grid.actions.cursor

        locked = grid.code_array.cell_attributes[key]["locked"]or \
            grid.code_array.cell_attributes[key]["button_cell"]
        self._tc.Enable(not locked)
        self._tc.Show(not locked)

        if locked:
            grid.code_array.result_cache.clear()
            self._execute_cell_code(row, col, grid)

        # Mirror our changes onto the main_window's code bar
        self._tc.Bind(wx.EVT_CHAR, self.OnChar)
        self._tc.Bind(wx.EVT_KEY_UP, self.OnKeyUp)

        # Save cell and grid info
        self._row = row
        self._col = [col, ]  # List of columns we are occupying
        self._grid = grid

        start_value = grid.GetTable().GetValue(*key)

        try:
            start_value_list = [start_value[i:i+self.max_char_width]
                                for i in xrange(0, len(start_value),
                                                self.max_char_width)]
            startValue = "\n".join(start_value_list)
            self.startValue = startValue

        except TypeError:
            self.startValue = u""

        # Set up the textcontrol to look like this cell (TODO: Does not work)
        try:
            self._tc.SetValue(unicode(startValue))
        except (TypeError, AttributeError, UnboundLocalError):
            self._tc.SetValue(u"")

        self._tc.SetFont(grid.GetCellFont(row, col))
        self._tc.SetBackgroundColour(grid.GetCellBackgroundColour(row, col))
        self._update_control_length()

        self._tc.SetInsertionPointEnd()

        h_scroll_pos = grid.GetScrollPos(wx.SB_HORIZONTAL)
        v_scroll_pos = grid.GetScrollPos(wx.SB_VERTICAL)

        self._tc.SetFocus()

        # GTK Bugfix for jumping grid when focusing the textctrl
        if grid.GetScrollPos(wx.SB_HORIZONTAL) != h_scroll_pos or \
           grid.GetScrollPos(wx.SB_VERTICAL) != v_scroll_pos:
            wx.ScrolledWindow.Scroll(grid, (h_scroll_pos, v_scroll_pos))

        # Select the text
        self._tc.SetSelection(0, self._tc.GetLastPosition())