Overloads the mouse release event to apply the current changes.
        
        :param      event | <QEvent>

def mouseReleaseEvent(self, event):
        """
        Overloads the mouse release event to apply the current changes.
        
        :param      event | <QEvent>
        """
        super(XGanttViewItem, self).mouseReleaseEvent(event)
        
        if not self.flags() & self.ItemIsMovable:
            return
        
        # force the x position to snap to the nearest date
        scene = self.scene()
        
        if scene:
            gantt  = scene.ganttWidget()
            curr_x = self.pos().x() + gantt.cellWidth() / 2.0
            new_x  = curr_x - curr_x % gantt.cellWidth()
            self.setPos(new_x, self.pos().y())
        
        # look for date based times
        gantt = self.scene().ganttWidget()
        
        # determine hour/minute information
        if gantt.timescale() in (gantt.Timescale.Minute,
                                 gantt.Timescale.Hour,
                                 gantt.Timescale.Day):
            dstart = self.scene().datetimeAt(self.pos().x())
            dend = self.scene().datetimeAt(self.pos().x() + self.rect().width())
            dend.addSecs(-60)
        else:
            dstart = self.scene().dateAt(self.pos().x())
            dend   = self.scene().dateAt(self.pos().x() + self.rect().width())
            dend   = dend.addDays(-1)
        
        item = self._treeItem()
        if item:
            item.viewChanged(dstart, dend)