summaryrefslogtreecommitdiff
path: root/portato/gui/gtk/wrapper.py
blob: cadec6ac0e455d9d985f6d586e60c76bdd288f4d (plain)
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# -*- coding: utf-8 -*-
#
# File: portato/gui/gtk/wrapper.py
# This file is part of the Portato-Project, a graphical portage-frontend.
#
# Copyright (C) 2006 René 'Necoro' Neumann
# This is free software.  You may redistribute copies of it under the terms of
# the GNU General Public License version 2.
# There is NO WARRANTY, to the extent permitted by law.
#
# Written by René 'Necoro' Neumann <necoro@necoro.net>

from __future__ import absolute_import

from gettext import lgettext as _
from ..wrapper import Tree, Console
import vte

class GtkTree (Tree):
	"""The implementation of the abstract tree."""

	def __init__ (self, tree, col = 0):
		"""Constructor.

		@param tree: original tree
		@type tree: gtk.TreeStore
		@param col: the column where the cpv is stored
		@type col: int"""

		self.tree = tree
		self.cpv_col = col
		self.emergeIt = None
		self.unmergeIt = None
		self.updateIt = None

	def build_append_value (self, cpv, oneshot = False, update = False, downgrade = False, version = None, useChange = []):
		string = ""

		if oneshot:
			string += "<i>%s</i>" % _("oneshot")

		if update:
			if oneshot: string += "; "
			if version is not None:
				string += "<i>%s</i>" % (_("updating from version %s") % version)
			else:
				string += "<i>%s</i>" % _("updating")

		elif downgrade:
			if oneshot: string += "; "
			if version is not None:
				string += "<i>%s</i>" % (_("downgrading from version %s") % version)
			else:
				string += "<i>%s</i>" % _("downgrading")

		if useChange:
			if update or downgrade or oneshot: string += "; "
			string += "<i><b>%s </b></i>" % _("IUSE changes:")
			useChange.sort()
			string += "<i>%s</i>" % " ".join(useChange)

		return [cpv, string]

	def set_in_progress (self, it):
		iter = self.tree.get_iter_from_string(self.tree.get_string_from_iter(it).split(":")[0])
		self.tree.set_value(iter, 1, "<b>%s</b>" % _("(In Progress)"))

	def get_emerge_it (self):
		if self.emergeIt is None:
			self.emergeIt = self.append(None, ["<b>%s</b>" % _("Install"), ""])
		return self.emergeIt

	def get_unmerge_it (self):
		if self.unmergeIt is None:
			self.unmergeIt = self.append(None, ["<b>%s</b>" % _("Uninstall"), ""])

		return self.unmergeIt

	def get_update_it (self):
		if self.updateIt is None:
			self.updateIt = self.append(None, ["<b>%s</b>" % _("Update"), ""])

		return self.updateIt

	def is_in (self, it, in_it):
		return in_it and self.tree.get_string_from_iter(it).split(":")[0] == self.tree.get_string_from_iter(in_it)

	def is_in_emerge (self, it):
		return self.is_in(it, self.emergeIt)

	def is_in_unmerge (self, it):
		return self.is_in(it, self.unmergeIt)

	def is_in_update (self, it):
		return self.is_in(it, self.updateIt)
	
	def iter_has_parent (self, it):
		return (self.tree.iter_parent(it) != None)

	def parent_iter (self, it):
		return self.tree.iter_parent(it)

	def first_child_iter (self, it):
		return self.tree.iter_children(it)

	def iter_has_children (self, it):
		return self.tree.iter_has_child(it)

	def next_iter (self, it):
		return self.tree.iter_next(it)

	def get_value (self, it, column):
		return self.tree.get_value(it, column)

	def iter_equal (self, it, other_it):
		return self.tree.get_string_from_iter(it) == self.tree.get_string_from_iter(other_it)

	def append (self, parent = None, values = None):
		return self.tree.append(parent, values)

	def remove (self, it):
		
		if self.emergeIt and self.iter_equal(it, self.emergeIt) : self.emergeIt = None
		elif self.unmergeIt and self.iter_equal(it, self.unmergeIt) : self.unmergeIt = None
		elif self.updateIt and self.iter_equal(it, self.updateIt) : self.updateIt = None
		
		self.tree.remove(it)

	def get_original (self):
		return self.tree

	def get_cpv_column (self):
		return self.cpv_col

class GtkConsole (vte.Terminal, Console):
	"""The implementation of the abstract Console for GTK."""
	
	def reset (self):
		vte.Terminal.reset(self, True, True)