# __init__.py			

# Copyright (C) 2007,2008 Steven Brown

# 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 2 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 rhythmdb, rb
import gobject, gtk
import gconf
from ConfigureDialog import ConfigureDialog

toolbar_button_key = 'toolbar_button'
context_menu_key = 'context_menu'

gconf_keys = {	'toolbar_button' : '/apps/rhythmbox/plugins/jump-to-playing/show_in_toolbar_button',
		'context_menu': '/apps/rhythmbox/plugins/jump-to-playing/show_in_context_menu'
	     }

ui_toolbar_button = """
<ui>
  <toolbar name="ToolBar">
    <placeholder name="PluginPlaceholder">
      <toolitem name="ToolBarJumpToPlaying" action="ViewJumpToPlaying"/>
    </placeholder>
  </toolbar>
</ui>

"""


ui_context_menu = """
<ui>

  <popup name="BrowserSourceViewPopup">
	 <placeholder name="PluginPlaceholder">
         <menuitem name="BrowserPopupJumpToPlaying" action="ViewJumpToPlaying"/>
     </placeholder>
  </popup>

  <popup name="PlaylistViewPopup">
	 <placeholder name="PluginPlaceholder">
         <menuitem name="BrowserPopupJumpToPlaying" action="ViewJumpToPlaying"/>
     </placeholder>
  </popup>


  <popup name="QueuePlaylistViewPopup">
     <placeholder name="PluginPlaceholder">
	     <menuitem name="BrowserPopupJumpToPlaying" action="ViewJumpToPlaying"/>
     </placeholder>
  </popup>

  <popup name="PodcastViewPopup">
     <placeholder name="PluginPlaceholder">
	     <menuitem name="BrowserPopupJumpToPlaying" action="ViewJumpToPlaying"/>
     </placeholder>
  </popup>

</ui>

"""



class JumpToPlaying (rb.Plugin):

	def __init__ (self):
		
		rb.Plugin.__init__(self)

		
	def update_ui (self):

		uim = self.shell.get_ui_manager()
		tb = self.get_gconf_key(toolbar_button_key)
		cm = self.get_gconf_key(context_menu_key)

		if (("1" == tb) and (None == self.ui_tb)):
			self.ui_tb = uim.add_ui_from_string(ui_toolbar_button)
			
		elif (("0" == tb) and (self.ui_tb != None)):
			uim.remove_ui(self.ui_tb)
			self.ui_tb = None
		

		if (("1" == cm) and (None == self.ui_cm)):
			self.ui_cm = uim.add_ui_from_string(ui_context_menu)
			
		elif (("0" == cm) and (self.ui_cm != None)):
			uim.remove_ui(self.ui_cm)
			self.ui_cm = None
		
		uim.ensure_update()


	def activate (self, shell):
		
		uim = shell.get_ui_manager()
		self.shell = shell

		# initialize self.toolbar_button and self.context_menu
		self.check_gconf_keys_initialised()

		# connect to action toggled signal for small display
		

		self.ui_tb = None
		self.ui_cm = None
		self.update_ui()

		# hide the button in Small Display mode
		small_display_toggle = uim.get_widget ("/MenuBar/ViewMenu/ViewSmallDisplayMenu")
		tb_widget = uim.get_widget ("/ToolBar/PluginPlaceholder/ToolBarJumpToPlaying")

		self.tb_conn_id = small_display_toggle.connect ('toggled', self.hide_if_active, tb_widget)

		br_widget = uim.get_widget ("/ToolBar/Browse")
		self.br_conn_id = small_display_toggle.connect ('toggled', self.hide_if_active, br_widget)

		# start hidden if in small_display
		is_small = gconf.client_get_default().get_bool("/apps/rhythmbox/ui/small_display")
		if (is_small):
			tb_widget.hide()
			br_widget.hide()

	
	def deactivate (self, shell):
		
		uim = shell.get_ui_manager()
		
		if (self.ui_tb != None):
			uim.remove_ui(self.ui_tb)
			del self.ui_tb
		if (self.ui_cm != None):
			uim.remove_ui(self.ui_cm)
			del self.ui_cm

		small_display_toggle = uim.get_widget ("/MenuBar/ViewMenu/ViewSmallDisplayMenu")
		small_display_toggle.disconnect (self.br_conn_id)
		small_display_toggle.disconnect (self.tb_conn_id)

		uim.ensure_update()

		
	def create_configure_dialog (self, dialog = None):
		
		if not dialog:
			glade_file = self.find_file("jump-to-playing-prefs.glade")
			dialog = ConfigureDialog (glade_file, gconf_keys, self).get_dialog()
			
		dialog.present()
		
		return dialog

	
	#check if keys exist in gconf, if not create default configuration
	def check_gconf_keys_initialised (self):

		self.toolbar_button, self.context_menu = self.get_prefs()
		
		if (self.toolbar_button is None):
			self.set_gconf_key('toolbar_button', "1")
			
		if (self.context_menu is None):
			self.set_gconf_key('context_menu', "1")
			
		self.toolbar_button, self.context_menu = self.get_prefs()


	def get_prefs (self):
		
		toolbar_button = self.get_gconf_key('toolbar_button')
		context_menu = self.get_gconf_key('context_menu')
		
		return (toolbar_button, context_menu)

	def set_gconf_key (self, key, val):
		
		if (key not in (toolbar_button_key, context_menu_key) or val not in ("0","1")):
			raise Exception, ('Unknown key or value -> ' + key + ":" + val)
		
		else:
			gconf.client_get_default().set_string(gconf_keys[key], val)

	def get_gconf_key (self, key):
		
		if (key not in (toolbar_button_key, context_menu_key)):
			raise Exception, ('Unknown key -> ' + key)
		
		else:
			return (gconf.client_get_default().get_string(gconf_keys[key]))


	def hide_if_active (self, toggle_widget, ui_element):
		"Hides ui_element if toggle_widget is active."
		
		if (toggle_widget.get_active()):
			ui_element.hide()
			
		else:
			ui_element.show()
