"""
@package gmodeler.toolbars

@brief wxGUI Graphical Modeler toolbars classes

Classes:
 - toolbars::ModelerToolbar

(C) 2010-2011 by the GRASS Development Team

This program is free software under the GNU General Public License
(>=v2). Read the file COPYING that comes with GRASS for details.

@author Martin Landa <landa.martin gmail.com>
"""

import os
import sys

import wx

from core import globalvar
from core.utils import _
from gui_core.toolbars import BaseToolbar, BaseIcons

from icons.icon import MetaIcon


class ModelerToolbar(BaseToolbar):
    """Graphical modeler toolbaro (see gmodeler.py)
    """

    def __init__(self, parent):
        BaseToolbar.__init__(self, parent)

        # workaround for http://trac.wxwidgets.org/ticket/13888
        if sys.platform == 'darwin':
            parent.SetToolBar(self)

        self.InitToolbar(self._toolbarData())

        # realize the toolbar
        self.Realize()

    def _toolbarData(self):
        """Toolbar data"""
        icons = {
            'new': MetaIcon(img='create',
                            label=_('Create new model (Ctrl+N)')),
            'open': MetaIcon(img='open',
                             label=_('Load model from file (Ctrl+O)')),
            'save': MetaIcon(img='save',
                             label=_('Save current model to file (Ctrl+S)')),
            'toImage': MetaIcon(img='image-export',
                                label=_('Export model to image')),
            'toPython': MetaIcon(img='python-export',
                                 label=_('Export model to Python script')),
            'actionAdd': MetaIcon(img='module-add',
                                  label=_('Add command (GRASS module) to model')),
            'dataAdd': MetaIcon(img='data-add',
                                label=_('Add data to model')),
            'relation': MetaIcon(img='relation-create',
                                 label=_('Manually define relation between data and commands')),
            'loop': MetaIcon(img='loop-add',
                             label=_('Add loop/series to model')),
            'comment': MetaIcon(img='label-add',
                                label=_('Add comment to model')),
            'run': MetaIcon(img='execute',
                            label=_('Run model')),
            'validate': MetaIcon(img='check',
                                 label=_('Validate model')),
            'settings': BaseIcons['settings'].SetLabel(_('Modeler settings')),
            'properties': MetaIcon(img='options',
                                   label=_('Show model properties')),
            'variables': MetaIcon(img='modeler-variables',
                                  label=_('Manage model variables')),
            'redraw': MetaIcon(img='redraw',
                               label=_('Redraw model canvas')),
            'quit': BaseIcons['quit'].SetLabel(_('Quit Graphical Modeler')),
        }

        return self._getToolbarData((('new', icons['new'],
                                      self.parent.OnModelNew),
                                     ('open', icons['open'],
                                      self.parent.OnModelOpen),
                                     ('save', icons['save'],
                                      self.parent.OnModelSave),
                                     ('image', icons['toImage'],
                                      self.parent.OnExportImage),
                                     ('python', icons['toPython'],
                                      self.parent.OnExportPython),
                                     (None, ),
                                     ('action', icons['actionAdd'],
                                      self.parent.OnAddAction),
                                     ('data', icons['dataAdd'],
                                      self.parent.OnAddData),
                                     ('relation', icons['relation'],
                                      self.parent.OnDefineRelation),
                                     ('loop', icons['loop'],
                                      self.parent.OnDefineLoop),
                                     ('comment', icons['comment'],
                                      self.parent.OnAddComment),
                                     (None, ),
                                     ('redraw', icons['redraw'],
                                      self.parent.OnCanvasRefresh),
                                     ('validate', icons['validate'],
                                      self.parent.OnValidateModel),
                                     ('run', icons['run'],
                                      self.parent.OnRunModel),
                                     (None, ),
                                     ("variables", icons['variables'],
                                      self.parent.OnVariables),
                                     ("settings", icons['settings'],
                                      self.parent.OnPreferences),
                                     ("help", BaseIcons['help'],
                                      self.parent.OnHelp),
                                     (None, ),
                                     ('quit', icons['quit'],
                                      self.parent.OnCloseWindow))
                                    )
