﻿Ext.ux.TransfersGridPanel = Ext.extend(Ext.ux.DeviceGridPanelBase, {

    // internal fields
    m_gridType: null,


    // standard initializer
    initComponent: function() {
        Ext.ux.TransfersGridPanel.superclass.initComponent.apply(this, arguments);

        // args have to go here as base class initComponent doesn't get called for some reason
        var config = {
            view: new Ext.ux.ContentPanelGridView({ scrollOffset: g_gridScrollOffset })
        };

        Ext.apply(this, config);
        Ext.apply(this.initialConfig, config);

        this.on('rowcontextmenu', this.onRowContextMenu, this);
    },

    onRowContextMenu: function(grid, rowIndex, e) {

        if (!this.getSelectionModel().isSelected(rowIndex)) {
            this.getSelectionModel().selectRow(rowIndex);
        }

        // create the context menu appropriate to the grid display
        if (this.getGridType() == g_extJsGrid_gridTypeUpload) {
            this.contextMenu = this.createUploadActionsContextMenu(grid);
        }
        else {
            this.contextMenu = this.createDownloadActionsContextMenu(grid);
        }

        Ext.ux.TransfersGridPanel.superclass.onRowContextMenu.call(this, grid, rowIndex, e);
    },

    setGridType: function(gridType) {
        this.m_gridType = gridType;
    },

    getGridType: function() {
        return this.m_gridType;
    },

    // ------ context menu creation helper functions ------ //

    // create a context menu for a record on a device
    createUploadActionsContextMenu: function(grid) {
        var contextMenu = this.createEmptyActionsContextMenu();

        var selectAllClickedWrapper = function() {
            grid.getSelectionModel().selectAll();
        };
        
        var handleRemoveFromUploadQueueClickedWrapper = function() {
            transfersGrid_handleRemoveFromUploadQueueClicked();
        };

        // add actions to actions context menu (shown by listener in parent class)
        contextMenu.add(new Ext.menu.Item({
            text: g_resourceStrings['Js_Grid_PopupMenu_SelectAll'],
            handler: selectAllClickedWrapper
        }));
        
        contextMenu.add(new Ext.menu.Item({
            text: g_resourceStrings['Js_TransfersGrid_PopupMenu_RemoveFromUploads'],
            handler: handleRemoveFromUploadQueueClickedWrapper
        }));

        return contextMenu;
    },

    // create a context menu for a record on a device
    createDownloadActionsContextMenu: function(grid) {
        var contextMenu = this.createEmptyActionsContextMenu();

        var selectAllClickedWrapper = function() {
            grid.getSelectionModel().selectAll();
        };
        
        var handleRemoveFromDownloadQueueClickedWrapper = function() {
            transfersGrid_handleRemoveFromDownloadQueueClicked();
        };

        // add actions to actions context menu (shown by listener in parent class)
        contextMenu.add(new Ext.menu.Item({
            text: g_resourceStrings['Js_Grid_PopupMenu_SelectAll'],
            handler: selectAllClickedWrapper
        }));
        
        contextMenu.add(new Ext.menu.Item({
            text: g_resourceStrings['Js_TransfersGrid_PopupMenu_RemoveFromDownloads'],
            handler: handleRemoveFromDownloadQueueClickedWrapper
        }));

        return contextMenu;
    }
});

Ext.ux.TransfersGridView = Ext.extend(Ext.ux.DeviceGridViewBase, {
});

// configure drag & drop
Ext.ux.TransfersGridDragZone = Ext.extend(Ext.ux.DeviceGridDragZoneBase, {
});