toolbar.js 6.48 KB
/*
 * Copyright 2015 Open Networking Laboratory
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 ONOS GUI -- Widget -- Toolbar Service
 */
(function () {
    'use strict';

    var $log, fs, ps, bns;

    var toolBtnIds = {},
        toolbarPanel,
        toolbarDiv;

    var ids = [],
        tbarId,
        tbarPanel,
        tbarDiv;

    function init() {
        toolBtnIds = {};
        ids = [];
    }

    function addButton(btn) {
        // pass in button object and pass separate the pieces in this function,
        // to be passed to ButtonService
        var btndiv = toolbarDiv.append('div').attr('class', 'btn');
        // use ButtonService to create btn with other arguments and btndiv
    }

    function addToggle(tog) {
        var togdiv = toolbarDiv.append('div').attr('class', 'tog');
        // use ButtonService to create btn with other arguments and togdiv
    }

    function addRadio(rad) {
        var raddiv = toolbarDiv.append('div').attr('class', 'rad');
        // use ButtonService to create btn with other arguments and raddiv
    }

    function addSeparator() {
        toolbarDiv.append('div')
            .attr('class', 'sep')
            .style({'width': '2px',
                    'border-width': '1px',
                    'border-style': 'solid'});
    }

    function makeButton(id, gid, cb) {
        return {
            t: 'btn',
            id: id,
            gid: gid,
            cb: cb
        };
    }

    function makeToggle(id, gid, cb) {
        return {
            t: 'tog',
            id: id,
            gid: gid,
            cb: cb
        };
    }

    function makeRadio(id, gid, cb) {
        (id in toolBtnIds) ? toolBtnIds[id] += 1 : toolBtnIds[id] = 0;
        return {
            t: 'rad',
            id: id + '-' + toolBtnIds[id],
            rid: toolBtnIds[id] + '',
            gid: gid,
            cb: cb
        };
    }

    function separator() {
        return {
            t: 'sep'
        };
    }

    function validId(id, caller) {
        if (fs.inArray(id, ids) !== -1) {
            $log.warn(caller + ': ID already exists');
            return false;
        }
        return true;
    }

    function addButton1(id, gid, cb, tooltip) {
        var btnId = tbarId + '-' + id;
        if (!validId(btnId, 'addButton')) {
            return null;
        }
        ids.push(btnId);
        return bns.button(tbarDiv, btnId, gid, cb, tooltip);
    }

    function addToggle1(id, gid, initState, cb, tooltip) {
        var togId = tbarId + '-' + id;
        if (!validId(togId, 'addToggle')) {
            return null;
        }
        ids.push(togId);
        return bns.toggle(tbarDiv, togId, gid, initState, cb, tooltip);
    }

    function addRadioSet(id, rset) {
        var radId = tbarId + '-' + id;
        if (!validId(radId, 'addRadioSet')) {
            return null;
        }
        ids.push(radId);
        return bns.radioSet(tbarDiv, radId, rset);
    }

    // TODO: finish this and remove unneeded code
    function addSeparator1() {

    }

    function createToolbar1(id, settings) {
        if (!id) {
            $log.warn('createToolbar: no ID given');
            return null;
        }
        tbarId = 'tbar-' + id;
        var opts = fs.isO(settings) || {}; // default settings should be put here

        if (!validId(tbarId, 'createToolbar')) {
            return null;
        }
        ids.push(tbarId);

        tbarPanel = ps.createPanel(tbarId, opts);
        tbarDiv = tbarPanel.classed('toolbar', true);

        // TODO: change names of functions
        return {
            addButton1: addButton1,
            addToggle1: addToggle1,
            addRadioSet: addRadioSet,
            addSeparator1: addSeparator1
        }
    }

    // function currently not working
    function destroyToolbar(id) {
        ps.destroyPanel(id);
    }

    function createToolbar(tbarId, tools) {
        var api;

        if (!tbarId) {
            $log.warn('createToolbar: no ID given');
            return null;
        }
        if (!tools || tools.constructor !== Array || !tools.length) {
            $log.warn('createToolbar: no tools given');
            return null;
        }

        for (var i = 0; i < tools.length; i += 1) {
            if (tools[i].t === 'rad' || tools[i].t === 'sep') {
                continue;
            } else {
                if (tools[i].id in toolBtnIds) {
                    $log.warn('createToolbar: item with id '
                            + tools[i].id + ' already exists');
                    return null;
                }
                toolBtnIds[tools[i].id] = 1;
            }
        }

        // need to pass in an object with settings for where the toolbar will go
        toolbarPanel = ps.createPanel(tbarId, {});
        toolbarPanel.classed('toolbar', true);
        toolbarDiv = toolbarPanel.el();

        tools.forEach(function (tool) {
            switch (tool['t']) {
                case 'btn': addButton(tool); break;
                case 'tog': addToggle(tool); break;
                case 'rad': addRadio(tool); break;
                default: addSeparator(); break;
            }
        });

        // api functions to be returned defined here

        function size(arr) {
            return arr.length;
        }

        api = {
            size: size
        };

        return api;
    }

    angular.module('onosWidget')
        .factory('ToolbarService', ['$log', 'FnService',
            'PanelService', 'ButtonService',
            function (_$log_, _fs_, _ps_, _bns_) {
                $log = _$log_;
                fs = _fs_;
                ps = _ps_;
                bns = _bns_;

                return {
                    init: init,
                    makeButton: makeButton,
                    makeToggle: makeToggle,
                    makeRadio: makeRadio,
                    separator: separator,
                    createToolbar: createToolbar,
                    createToolbar1: createToolbar1,
                    destroyToolbar: destroyToolbar
                };
            }]);

}());