File: RefDisplayKeys.py

package info (click to toggle)
bibus 1.5.2-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 12,328 kB
  • sloc: python: 30,792; sql: 211; makefile: 186; xml: 10; sh: 3
file content (95 lines) | stat: -rw-r--r-- 3,850 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# Copyright 2004,2005 Pierre Martineau <pmartino@users.sourceforge.net>
# This file is part of Bibus, a bibliographic database that can
# work together with OpenOffice.org to generate bibliographic indexes.
#
# Bibus 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.
#
# Bibus 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 Bibus; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA.
#
# -*- coding: ISO-8859-1 -*-
# select bibrefLink.key_id from bibrefLink left join bibrefKey on bibrefLink.key_id = bibrefKey.key_id where ref_id=1 and user='pmartino'
# select t2.key_id from bibrefLink as t1,bibrefKey as t2 where t1.key_id = t2.key_id and t1.ref_id=1 and t2.user='pmartino';

import wx
import StringIO,cPickle
import Export.html, BIB

# we use as Base the wx.html.HtmlWindow
from wx.html import HtmlWindow as RefDisplayBase
import wx.html

class RefDisplay(RefDisplayBase):
	def __init__(self, *args, **kwds):
		RefDisplayBase.__init__(self, *args, **kwds)
		# we need a file to use the filter. We use a StringIO
		self.output = StringIO.StringIO()
		self.bibframe = None	# we need the main bibus bibframe for callback and self.db
		self.ref_id = None		# id of currently displayed reference

	def resetFormat(self,format):
		return

	def Clear(self):
		self.output.truncate(0)
		self.SetPage('')

	def display(self,ref):
		"""Display the keys associated with reference ref
		in the keytree of the current db user
		If ref = '' => clear the display
		"""
		self.Clear()
		# we must test if it makes sense
		# ie, if we are not in online or import
		selectedId = self.bibframe.keytree.GetSelection()
		if selectedId.IsOk():
			id = self.bibframe.keytree.GetPyData(self.bibframe.keytree.GetSelection())[2]
			if id in (BIB.ID_ONLINE_ROOT,BIB.ID_IMPORT_ROOT): return
			#
			self.ref_id = None
			if ref:
				self.ref_id = ref[0]
				for (key_id,) in self.bibframe.db.getKeys(ref[0]):
					self.AppendToPage( """<a href="%s">%s</a><br>\n""" %(cPickle.dumps(self.bibframe.db.getKeyPath(self.bibframe.db.user,key_id)[1]),'_'.join(self.bibframe.db.getKeyPath(self.bibframe.db.user,key_id)[0])) )

	def OnLinkClicked(self,link):
		"""A link has been clicked
		We must go down the keytree of the current db user
		to find the item
		"""
		keypath = cPickle.loads( str(link.GetHref()) )
		#
		self.bibframe.keytree.SelectUserTree()	# we first display the user KeyTree (if we are in the Shared KeyTree)
		parent = self.bibframe.keytree.keyroot
		for key_id in keypath:
			parent = self.__getItem(parent,key_id)
			if not parent: return
			self.bibframe.keytree.Expand(parent)				# we expand the parent key to update the children
		# we now select the found key then the reference
		self.bibframe.keytree.SelectItem(parent)
		item = self.bibframe.reflist.FindItemData(-1, self.ref_id)
		self.bibframe.reflist.Select(item)
		self.bibframe.reflist.EnsureVisible(item)

	def __getItem(self,parentItem,key_id):
		"""Return TreeItem = child of parentItem with Pydata[0] = key_id or False if error"""
		try:
			item,cookie = self.bibframe.keytree.GetFirstChild(parentItem)	# wxPython >= 2.5
			for i in xrange(self.bibframe.keytree.GetChildrenCount(parentItem,False)):
				if self.bibframe.keytree.GetPyData(item)[0] == key_id:
					return item
				item,cookie = self.bibframe.keytree.GetNextChild(parentItem,cookie)
			return False
		except:
			return False