// Grid column plugin that does the complete/active button in the left-most column
CompleteColumn = function(){
    var grid;

    function getRecord(t){
        var index = grid.getView().findRowIndex(t);
        return grid.store.getAt(index);
    }

    function onMouseDown(e, t){
        if(Ext.fly(t).hasClass('task-check')){
            e.stopEvent();
            var record = getRecord(t);
            record.set('completed', !record.data.completed);
            grid.store.applyFilter();
        }
    }

    function onMouseOver(e, t){
        if(Ext.fly(t).hasClass('task-check')){
            Ext.fly(t.parentNode).addClass('task-check-over');
        }
    }

    function onMouseOut(e, t){
        if(Ext.fly(t).hasClass('task-check')){
            Ext.fly(t.parentNode).removeClass('task-check-over');
        }
    }

    Ext.apply(this, {
        width: 22,
        header: '
', fixed: true, menuDisabled: true, id: 'task-col', renderer: function(){ return '
'; }, init : function(xg){ grid = xg; grid.on('render', function(){ var view = grid.getView(); view.mainBody.on('mousedown', onMouseDown); view.mainBody.on('mouseover', onMouseOver); view.mainBody.on('mouseout', onMouseOut); }); } }); }; ReminderColumn = function(){ var grid, menu, record; function getRecord(t){ var index = grid.getView().findRowIndex(t); return grid.store.getAt(index); } function onMenuCheck(item){ if(item.reminder === false){ record.set('reminder', ''); }else{ var s = record.data.dueDate ? record.data.dueDate.clearTime(true) : new Date().clearTime(); s = s.add('mi', Ext.state.Manager.get('defaultReminder')); s = s.add('mi', item.reminder*-1); record.set('reminder', s); } } function getMenu(){ if(!menu){ menu = new Ext.menu.Menu({ plain: true, items: [{ text: 'No Reminder', reminder: false, handler: onMenuCheck },'-',{ text: 'On the Due Date', reminder: 0, handler: onMenuCheck },'-',{ text: '1 day before', reminder: 24*60, handler: onMenuCheck },{ text: '2 days before', reminder: 48*60, handler: onMenuCheck },{ text: '3 days before', reminder: 72*60, handler: onMenuCheck },{ text: '1 week before', reminder: 7*24*60, handler: onMenuCheck },{ text: '2 weeks before', reminder: 14*24*60, handler: onMenuCheck },'-',{ text: 'Set Default Time...', handler: function(){ Ext.air.NativeWindowManager.getPrefWindow(); } }] }); } return menu; } function onMouseDown(e, t){ if(Ext.fly(t).hasClass('reminder')){ e.stopEvent(); record = getRecord(t); if (!record.data.completed) { var rmenu = getMenu(); rmenu.show(t, 'tr-br?'); } } } function onMouseOver(e, t){ if(Ext.fly(t).hasClass('reminder')){ Ext.fly(t.parentNode).addClass('reminder-over'); } } function onMouseOut(e, t){ if(Ext.fly(t).hasClass('reminder')){ Ext.fly(t.parentNode).removeClass('reminder-over'); } } Ext.apply(this, { width: 26, header: '
', fixed: true, id: 'reminder-col', menuDisabled: true, dataIndex:'reminder', renderer: function(v){ return '
'; }, init : function(xg){ grid = xg; grid.on('render', function(){ var view = grid.getView(); view.mainBody.on('contextmenu', onMouseDown); view.mainBody.on('mousedown', onMouseDown); view.mainBody.on('mouseover', onMouseOver); view.mainBody.on('mouseout', onMouseOut); }); } }); };