#!/usr/bin/env python
# -*- mode: python; coding: utf-8; -*-
# ---------------------------------------------------------------------------##
#
# Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer
# Copyright (C) 2003 Mt. Hood Playing Card Co.
# Copyright (C) 2005-2009 Skomoroh
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# ---------------------------------------------------------------------------##

import tkinter.ttk as ttk

from pysollib.mygettext import _, n_
from pysollib.ui.tktile.findcarddialog import connect_game_find_card_dialog
from pysollib.ui.tktile.findcarddialog import destroy_find_card_dialog
from pysollib.ui.tktile.fullpicturedialog import \
    connect_game_full_picture_dialog
from pysollib.ui.tktile.fullpicturedialog import destroy_full_picture_dialog
from pysollib.ui.tktile.menubar import MfxMenu, PysolMenubarTkCommon
from pysollib.ui.tktile.solverdialog import connect_game_solver_dialog
from pysollib.util import CARDSET

from .tkwidget import MfxMessageDialog

# ************************************************************************
# * - create menubar
# * - update menubar
# * - menu actions
# ************************************************************************


class PysolMenubarTk(PysolMenubarTkCommon):
    def __init__(self, app, top, progress=None):
        PysolMenubarTkCommon.__init__(self, app, top, progress)

    def _setOptions(self):
        PysolMenubarTkCommon._setOptions(self)
        tkopt, opt = self.tkopt, self.app.opt
        tkopt.theme.set(opt.tile_theme)

    def _connect_game_find_card_dialog(self, game):
        return connect_game_find_card_dialog(game)

    def _destroy_find_card_dialog(self):
        return destroy_find_card_dialog()

    def _connect_game_full_picture_dialog(self, game):
        return connect_game_full_picture_dialog(game)

    def _destroy_full_picture_dialog(self):
        return destroy_full_picture_dialog()

    def _connect_game_solver_dialog(self, game):
        return connect_game_solver_dialog(game)

    def _calcWizardDialog(self):
        from .wizarddialog import WizardDialog
        return WizardDialog

    def _calcSelectGameDialog(self):
        from .selectgame import SelectGameDialog
        return SelectGameDialog

    def _calcSelectGameDialogWithPreview(self):
        from .selectgame import SelectGameDialogWithPreview
        return SelectGameDialogWithPreview

    def _calcSoundOptionsDialog(self):
        from .soundoptionsdialog import SoundOptionsDialog
        return SoundOptionsDialog

    def _calcSelectTileDialogWithPreview(self):
        from .selecttile import SelectTileDialogWithPreview
        return SelectTileDialogWithPreview

    def _calc_MfxMessageDialog(self):
        return MfxMessageDialog

    #
    # create the menubar
    #

    def mSelectCardsetDialog(self, *event):
        if self._cancelDrag(break_pause=False):
            return
        key = self.app.nextgame.cardset.index
        cs = self.app.selectCardset(_("Select ")+CARDSET, key)
        if not cs:
            return
        self.app.nextgame.cardset = cs
        self._cancelDrag()
        self.game.endGame(bookmark=1)
        self.game.quitGame(bookmark=1)
        self.updateMenus()

    #
    # Tile (ttk)
    #

    def mOptTheme(self, *event):
        theme = self.tkopt.theme.get()
        self.app.opt.tile_theme = theme
        try:
            from ttkthemes import themed_style
            style = themed_style.ThemedStyle(self.top)
        except ImportError:
            style = ttk.Style(self.top)
        style.theme_use(theme)

    def createThemesMenu(self, menu):
        submenu = MfxMenu(menu, label=n_("Set t&heme"))

        try:
            from ttkthemes import themed_style
            style_path = themed_style.ThemedStyle(self.top)
        except ImportError:
            style_path = ttk.Style(self.top)
        all_themes = sorted(style_path.theme_names())

        #
        tn = {
            'alt':         n_('Alt/Revitalized'),
            'itft1':       n_('ITFT1'),
            'scidblue':    n_('Scid Blue'),
            'scidgreen':   n_('Scid Green'),
            'scidgrey':    n_('Scid Grey'),
            'scidmint':    n_('Scid Mint'),
            'scidpink':    n_('Scid Pink'),
            'scidpurple':  n_('Scid Purple'),
            'scidsand':    n_('Scid Sand'),
            'winnative':   n_('Windows Native'),
            'winxpblue':   n_('Windows XP Blue'),
            'xpnative':    n_('XP Native'),
            }
        for t in all_themes:
            try:
                n = tn[t]
            except KeyError:
                n = t.capitalize()
            submenu.add_radiobutton(label=n, variable=self.tkopt.theme,
                                    value=t, command=self.mOptTheme)
