"""
@package gcp.toolbars

@brief Georectification module - toolbars

Classes:
 - toolbars::GCPMapToolbar
 - toolbars::GCPDisplayToolbar

(C) 2007-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 Markus Metz
"""

import os
import sys

import wx

from core import globalvar
from gui_core.toolbars import BaseToolbar, BaseIcons
from icons.icon import MetaIcon


class GCPManToolbar(BaseToolbar):
    """Toolbar for managing ground control points

    :param parent: reference to GCP widget
    """

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

        self.InitToolbar(self._toolbarData())

        # realize the toolbar
        self.Realize()

    def _toolbarData(self):
        icons = {
            'gcpAdd': MetaIcon(img='gcp-add',
                               label=_('Add new GCP to the list')),
            'gcpDelete': MetaIcon(img='gcp-delete',
                                  label=_('Delete selected GCP')),
            'gcpClear': MetaIcon(img='gcp-remove',
                                 label=_('Clear selected GCP')),
            'gcpRms': MetaIcon(img='gcp-rms',
                               label=_('Recalculate RMS error')),
            'georectify': MetaIcon(img='georectify',
                                   label=_('Georectify')),
            'gcpSave': MetaIcon(img='gcp-save',
                                label=_('Save GCPs to POINTS file')),
            'gcpReload': MetaIcon(img='reload',
                                  label=_('Reload GCPs from POINTS file')),
        }

        return self._getToolbarData((('gcpAdd', icons["gcpAdd"],
                                      self.parent.AddGCP),
                                     ('gcpDelete', icons["gcpDelete"],
                                      self.parent.DeleteGCP),
                                     ('gcpClear', icons["gcpClear"],
                                      self.parent.ClearGCP),
                                     (None, ),
                                     ('rms', icons["gcpRms"],
                                      self.parent.OnRMS),
                                     ('georect', icons["georectify"],
                                      self.parent.OnGeorect),
                                     (None, ),
                                     ('gcpSave', icons["gcpSave"],
                                      self.parent.SaveGCPs),
                                     ('gcpReload', icons["gcpReload"],
                                      self.parent.ReloadGCPs))
                                    )


class GCPDisplayToolbar(BaseToolbar):
    """GCP Display toolbar
    """

    def __init__(self, parent, toolSwitcher):
        """GCP Display toolbar constructor
        """
        BaseToolbar.__init__(self, parent, toolSwitcher)

        self.InitToolbar(self._toolbarData())
        self._default = self.gcpset

        # add tool to toggle active map window
        self.togglemapid = wx.NewId()
        self.togglemap = wx.Choice(parent=self, id=self.togglemapid,
                                   choices=[_('source'), _('target')])

        self.InsertControl(10, self.togglemap)

        self.SetToolShortHelp(
            self.togglemapid, '%s %s %s' %
            (_('Set map canvas for '),
             BaseIcons["zoomBack"].GetLabel(),
             _(' / Zoom to map')))

        for tool in (self.gcpset, self.pan, self.zoomin, self.zoomout):
            self.toolSwitcher.AddToolToGroup(
                group='mouseUse', toolbar=self, tool=tool)

        # realize the toolbar
        self.Realize()

        self.EnableTool(self.zoomback, False)

    def _toolbarData(self):
        """Toolbar data"""
        icons = {
            'gcpSet': MetaIcon(
                img='gcp-create',
                label=_('Update GCP coordinates'),
                desc=_('Update GCP coordinates)')),
            'quit': BaseIcons['quit'].SetLabel(
                _('Quit georectification tool')),
            'settings': BaseIcons['settings'].SetLabel(
                _('Georectifier settings')),
            'help': BaseIcons['help'].SetLabel(
                _('Georectifier manual')),
        }

        return self._getToolbarData((("displaymap", BaseIcons["display"],
                                      self.parent.OnDraw),
                                     ("rendermap", BaseIcons["render"],
                                      self.parent.OnRender),
                                     ("erase", BaseIcons["erase"],
                                      self.parent.OnErase),
                                     (None, ),
                                     ("gcpset", icons["gcpSet"],
                                      self.parent.OnPointer,
                                      wx.ITEM_CHECK),
                                     ("pan", BaseIcons["pan"],
                                      self.parent.OnPan,
                                      wx.ITEM_CHECK),
                                     ("zoomin", BaseIcons["zoomIn"],
                                      self.parent.OnZoomIn,
                                      wx.ITEM_CHECK),
                                     ("zoomout", BaseIcons["zoomOut"],
                                      self.parent.OnZoomOut,
                                      wx.ITEM_CHECK),
                                     ("zoommenu", BaseIcons["zoomMenu"],
                                      self.parent.OnZoomMenuGCP),
                                     (None, ),
                                     ("zoomback", BaseIcons["zoomBack"],
                                      self.parent.OnZoomBack),
                                     ("zoomtomap", BaseIcons["zoomExtent"],
                                      self.parent.OnZoomToMap),
                                     (None, ),
                                     ('settings', icons["settings"],
                                      self.parent.OnSettings),
                                     ('help', icons["help"],
                                      self.parent.OnHelp),
                                     (None, ),
                                     ('quit', icons["quit"],
                                      self.parent.OnQuit))
                                    )
