示例#1
0
 def __init__(self, event, typeChangable=True, isNew=False, useSelectedDate=False, **kwargs):
     checkEventsReadOnly()
     gtk.Dialog.__init__(self, **kwargs)
     #self.set_transient_for(None)
     #self.set_type_hint(gdk.WindowTypeHint.NORMAL)
     self.isNew = isNew
     #self.connect('delete-event', lambda obj, e: self.destroy())
     #self.resize(800, 600)
     ###
     dialog_add_button(self, gtk.STOCK_CANCEL, _('_Cancel'), gtk.ResponseType.CANCEL)
     dialog_add_button(self, gtk.STOCK_OK, _('_OK'), gtk.ResponseType.OK)
     ###
     self.connect('response', lambda w, e: self.hide())
     ###
     self.activeWidget = None
     self._group = event.parent
     self.eventTypeOptions = list(self._group.acceptsEventTypes)
     ####
     if not event.name in self.eventTypeOptions:
         self.eventTypeOptions.append(event.name)
     eventTypeIndex = self.eventTypeOptions.index(event.name)
     ####
     self.event = event
     #######
     if isNew and not event.timeZone:
         event.timeZone = str(core.localTz)## why? FIXME
     #######
     hbox = gtk.HBox()
     pack(hbox, gtk.Label(
         _('Group') + ': ' + self._group.title
     ))
     hbox.show_all()
     pack(self.vbox, hbox)
     #######
     hbox = gtk.HBox()
     pack(hbox, gtk.Label(_('Event Type')))
     if typeChangable:
         combo = gtk.ComboBoxText()
         for tmpEventType in self.eventTypeOptions:
             combo.append_text(event_lib.classes.event.byName[tmpEventType].desc)
         pack(hbox, combo)
         ####
         combo.set_active(eventTypeIndex)
         ####
         #self.activeWidget = makeWidget(event)
         combo.connect('changed', self.typeChanged)
         self.comboEventType = combo
     else:
         pack(hbox, gtk.Label(':  '+event.desc))
     pack(hbox, gtk.Label(''), 1, 1)
     hbox.show_all()
     pack(self.vbox, hbox)
     #####
     if useSelectedDate:
         self.event.setJd(ui.cell.jd)
     self.activeWidget = makeWidget(event)
     if self.isNew:
         self.activeWidget.focusSummary()
     pack(self.vbox, self.activeWidget, 1, 1)
     self.vbox.show()
示例#2
0
	def __init__(self, group=None, **kwargs):
		checkEventsReadOnly()
		gtk.Dialog.__init__(self, **kwargs)
		self.isNew = (group is None)
		self.set_title(_('Add New Group') if self.isNew else _('Edit Group'))
		#self.connect('delete-event', lambda obj, e: self.destroy())
		#self.resize(800, 600)
		###
		dialog_add_button(self, gtk.STOCK_CANCEL, _('_Cancel'), gtk.ResponseType.CANCEL)
		dialog_add_button(self, gtk.STOCK_OK, _('_OK'), gtk.ResponseType.OK)
		self.connect('response', lambda w, e: self.hide())
		#######
		self.activeWidget = None
		#######
		hbox = gtk.HBox()
		combo = gtk.ComboBoxText()
		for cls in event_lib.classes.group:
			combo.append_text(cls.desc)
		pack(hbox, gtk.Label(_('Group Type')))
		pack(hbox, combo)
		pack(hbox, gtk.Label(''), 1, 1)
		pack(self.vbox, hbox)
		####
		if self.isNew:
			self._group = event_lib.classes.group[event_lib.defaultGroupTypeIndex]()
			combo.set_active(event_lib.defaultGroupTypeIndex)
		else:
			self._group = group
			combo.set_active(event_lib.classes.group.names.index(group.name))
		self.activeWidget = None
		combo.connect('changed', self.typeChanged)
		self.comboType = combo
		self.vbox.show_all()
		self.typeChanged()
示例#3
0
 def __init__(self, group=None, **kwargs):
     checkEventsReadOnly()
     gtk.Dialog.__init__(self, **kwargs)
     self.isNew = (group is None)
     self.set_title(_('Add New Group') if self.isNew else _('Edit Group'))
     #self.connect('delete-event', lambda obj, e: self.destroy())
     #self.resize(800, 600)
     ###
     dialog_add_button(self, gtk.STOCK_CANCEL, _('_Cancel'), gtk.ResponseType.CANCEL)
     dialog_add_button(self, gtk.STOCK_OK, _('_OK'), gtk.ResponseType.OK)
     self.connect('response', lambda w, e: self.hide())
     #######
     self.activeWidget = None
     #######
     hbox = gtk.HBox()
     combo = gtk.ComboBoxText()
     for cls in event_lib.classes.group:
         combo.append_text(cls.desc)
     pack(hbox, gtk.Label(_('Group Type')))
     pack(hbox, combo)
     pack(hbox, gtk.Label(''), 1, 1)
     pack(self.vbox, hbox)
     ####
     if self.isNew:
         self._group = event_lib.classes.group[event_lib.defaultGroupTypeIndex]()
         combo.set_active(event_lib.defaultGroupTypeIndex)
     else:
         self._group = group
         combo.set_active(event_lib.classes.group.names.index(group.name))
     self.activeWidget = None
     combo.connect('changed', self.typeChanged)
     self.comboType = combo
     self.vbox.show_all()
     self.typeChanged()
示例#4
0
def main():
    '''
    try:
        import psyco
    except ImportError:
        print('Warning: module "psyco" not found. It could speed up execution.')
        psyco_found=False
    else:
        psyco.full()
        print('Using module "psyco" to speed up execution.')
        psyco_found=True'''
    statusIconMode = 2
    action = ''
    if ui.showMain:
        action = 'show'
    if len(sys.argv)>1:
        if sys.argv[1] in ('--no-tray-icon', '--no-status-icon'):
            statusIconMode = 0
            action = 'show'
        elif sys.argv[1]=='--hide':
            action = ''
        elif sys.argv[1]=='--show':
            action = 'show'
        #elif sys.argv[1]=='--html':#????????????
        #    action = 'html'
        #elif sys.argv[1]=='--svg':#????????????
        #    action = 'svg'
    ###############################
    ui.init()
    ###############################
    checkEventsReadOnly(False)
    ## right place? FIXME
    if core.BRANCH == 'master' and versionLessThan(event_lib.info.version, '2.3.0'):
        from scal3.ui_gtk.event.bulk_save_timezone import BulkSaveTimeZoneDialog
        BulkSaveTimeZoneDialog(parent=None).run()
    event_lib.info.updateAndSave()
    ###############################
    mainWin = MainWin(statusIconMode=statusIconMode)
    #if action=='html':
    #    mainWin.exportHtml('calendar.html') ## exportHtml(path, months, title)
    #    sys.exit(0)
    #elif action=='svg':
    #    mainWin.export.exportSvg('%s/2010-01.svg'%core.deskDir, [(2010, 1)])
    #    sys.exit(0)
    if action=='show' or not mainWin.sicon:
        mainWin.present()
    ##ud.rootWindow.set_cursor(gdk.Cursor.new(gdk.CursorType.LEFT_PTR))#???????????
    #mainWin.app.run(None)
    ex = 0
    try:
        ex = gtk.main()
    except KeyboardInterrupt:
        print('You pressed Control+C, Goodbye')
        core.stopRunningThreads()
    except Exception as e:
        core.stopRunningThreads()
        raise e
    return ex
示例#5
0
文件: starcal.py 项目: ilius/starcal
def main():
	"""
	try:
		import psyco
	except ImportError:
		print("Warning: module "psyco" not found. It could speed up execution.")
		psyco_found=False
	else:
		psyco.full()
		print("Using module "psyco" to speed up execution.")
		psyco_found=True"""
	statusIconMode = 2
	action = ""
	if ui.showMain:
		action = "show"
	if len(sys.argv) > 1:
		if sys.argv[1] in ("--no-tray-icon", "--no-status-icon"):
			statusIconMode = 0
			action = "show"
		elif sys.argv[1] == "--hide":
			action = ""
		elif sys.argv[1] == "--show":
			action = "show"
		#elif sys.argv[1] == "--html":#????????????
		#	action = "html"
		#elif sys.argv[1] == "--svg":#????????????
		#	action = "svg"
	###############################
	ui.init()
	###############################
	listener.dateChange.add(hijri_gtk.HijriMonthsExpirationListener())
	hijri_gtk.checkHijriMonthsExpiration()
	###############################
	checkEventsReadOnly(False)
	## right place? FIXME
	event_lib.info.updateAndSave()
	###############################
	mainWin = MainWin(statusIconMode=statusIconMode)
	#if action == "html":
	#	mainWin.exportHtml("calendar.html") ## exportHtml(path, months, title)
	#	sys.exit(0)
	#elif action == "svg":
	#	mainWin.export.exportSvg("%s/2010-01.svg"%core.deskDir, [(2010, 1)])
	#	sys.exit(0)
	if action == "show" or not mainWin.sicon:
		mainWin.present()
	#ud.rootWindow.set_cursor(gdk.Cursor.new(gdk.CursorType.LEFT_PTR))
	# ^ FIXME
	#mainWin.app.run(None)
	signal.signal(signal.SIGINT, mainWin.quit)
	return gtk.main()
示例#6
0
文件: starcal.py 项目: ilius/starcal
def main():
	"""
	try:
		import psyco
	except ImportError:
		print("Warning: module "psyco" not found. It could speed up execution.")
		psyco_found=False
	else:
		psyco.full()
		print("Using module "psyco" to speed up execution.")
		psyco_found=True"""
	statusIconMode = 2
	action = ""
	if ui.showMain:
		action = "show"
	if len(sys.argv) > 1:
		if sys.argv[1] in ("--no-tray-icon", "--no-status-icon"):
			statusIconMode = 0
			action = "show"
		elif sys.argv[1] == "--hide":
			action = ""
		elif sys.argv[1] == "--show":
			action = "show"
		#elif sys.argv[1] == "--html":#????????????
		#	action = "html"
		#elif sys.argv[1] == "--svg":#????????????
		#	action = "svg"
	###############################
	ui.init()
	###############################
	listener.dateChange.add(hijri_gtk.HijriMonthsExpirationListener())
	hijri_gtk.checkHijriMonthsExpiration()
	###############################
	checkEventsReadOnly(False)
	## right place? FIXME
	event_lib.info.updateAndSave()
	###############################
	mainWin = MainWin(statusIconMode=statusIconMode)
	#if action == "html":
	#	mainWin.exportHtml("calendar.html") ## exportHtml(path, months, title)
	#	sys.exit(0)
	#elif action == "svg":
	#	mainWin.export.exportSvg("%s/2010-01.svg"%core.deskDir, [(2010, 1)])
	#	sys.exit(0)
	if action == "show" or not mainWin.sicon:
		mainWin.present()
	#ud.rootWindow.set_cursor(gdk.Cursor.new(gdk.CursorType.LEFT_PTR))
	# ^ FIXME
	#mainWin.app.run(None)
	signal.signal(signal.SIGINT, mainWin.quit)
	return gtk.main()
示例#7
0
def main():
	'''
	try:
		import psyco
	except ImportError:
		print('Warning: module "psyco" not found. It could speed up execution.')
		psyco_found=False
	else:
		psyco.full()
		print('Using module "psyco" to speed up execution.')
		psyco_found=True'''
	statusIconMode = 2
	action = ''
	if ui.showMain:
		action = 'show'
	if len(sys.argv)>1:
		if sys.argv[1] in ('--no-tray-icon', '--no-status-icon'):
			statusIconMode = 0
			action = 'show'
		elif sys.argv[1]=='--hide':
			action = ''
		elif sys.argv[1]=='--show':
			action = 'show'
		#elif sys.argv[1]=='--html':#????????????
		#	action = 'html'
		#elif sys.argv[1]=='--svg':#????????????
		#	action = 'svg'
	###############################
	ui.init()
	###############################
	checkEventsReadOnly(False)
	## right place? FIXME
	event_lib.info.updateAndSave()
	###############################
	mainWin = MainWin(statusIconMode=statusIconMode)
	#if action=='html':
	#	mainWin.exportHtml('calendar.html') ## exportHtml(path, months, title)
	#	sys.exit(0)
	#elif action=='svg':
	#	mainWin.export.exportSvg('%s/2010-01.svg'%core.deskDir, [(2010, 1)])
	#	sys.exit(0)
	if action=='show' or not mainWin.sicon:
		mainWin.present()
	##ud.rootWindow.set_cursor(gdk.Cursor.new(gdk.CursorType.LEFT_PTR))#???????????
	#mainWin.app.run(None)
	signal.signal(signal.SIGINT, mainWin.quit)
	return gtk.main()
示例#8
0
文件: trash.py 项目: ilius/starcal
 def __init__(self, **kwargs):
     checkEventsReadOnly()
     gtk.Dialog.__init__(self, **kwargs)
     self.set_title(_("Edit Trash"))
     #self.connect("delete-event", lambda obj, e: self.destroy())
     #self.resize(800, 600)
     ###
     dialog_add_button(
         self,
         gtk.STOCK_CANCEL,
         _("_Cancel"),
         gtk.ResponseType.CANCEL,
     )
     dialog_add_button(
         self,
         gtk.STOCK_OK,
         _("_OK"),
         gtk.ResponseType.OK,
     )
     ##
     self.connect("response", lambda w, e: self.hide())
     #######
     self.trash = ui.eventTrash
     ##
     sizeGroup = gtk.SizeGroup(gtk.SizeGroupMode.HORIZONTAL)
     #######
     hbox = gtk.HBox()
     label = gtk.Label(_("Title"))
     label.set_alignment(0, 0.5)
     pack(hbox, label)
     sizeGroup.add_widget(label)
     self.titleEntry = gtk.Entry()
     pack(hbox, self.titleEntry, 1, 1)
     pack(self.vbox, hbox)
     ####
     hbox = gtk.HBox()
     label = gtk.Label(_("Icon"))
     label.set_alignment(0, 0.5)
     pack(hbox, label)
     sizeGroup.add_widget(label)
     self.iconSelect = IconSelectButton()
     pack(hbox, self.iconSelect)
     pack(hbox, gtk.Label(""), 1, 1)
     pack(self.vbox, hbox)
     ####
     self.vbox.show_all()
     self.updateWidget()
示例#9
0
文件: trash.py 项目: greyzero/starcal
 def __init__(self, **kwargs):
     checkEventsReadOnly()
     gtk.Dialog.__init__(self, **kwargs)
     self.set_title(_('Edit Trash'))
     #self.connect('delete-event', lambda obj, e: self.destroy())
     #self.resize(800, 600)
     ###
     dialog_add_button(self, gtk.STOCK_CANCEL, _('_Cancel'), gtk.ResponseType.CANCEL)
     dialog_add_button(self, gtk.STOCK_OK, _('_OK'), gtk.ResponseType.OK)
     ##
     self.connect('response', lambda w, e: self.hide())
     #######
     self.trash = ui.eventTrash
     ##
     sizeGroup = gtk.SizeGroup(gtk.SizeGroupMode.HORIZONTAL)
     #######
     hbox = gtk.HBox()
     label = gtk.Label(_('Title'))
     label.set_alignment(0, 0.5)
     pack(hbox, label)
     sizeGroup.add_widget(label)
     self.titleEntry = gtk.Entry()
     pack(hbox, self.titleEntry, 1, 1)
     pack(self.vbox, hbox)
     ####
     hbox = gtk.HBox()
     label = gtk.Label(_('Icon'))
     label.set_alignment(0, 0.5)
     pack(hbox, label)
     sizeGroup.add_widget(label)
     self.iconSelect = IconSelectButton()
     pack(hbox, self.iconSelect)
     pack(hbox, gtk.Label(''), 1, 1)
     pack(self.vbox, hbox)
     ####
     self.vbox.show_all()
     self.updateWidget()
示例#10
0
 def eventManCreate(self):
     checkEventsReadOnly() ## FIXME
     if not ui.eventManDialog:
         from scal3.ui_gtk.event.manager import EventManagerDialog
         ui.eventManDialog = EventManagerDialog(parent=self)
示例#11
0
	def eventManCreate(self):
		checkEventsReadOnly() ## FIXME
		if not ui.eventManDialog:
			from scal3.ui_gtk.event.manager import EventManagerDialog
			ui.eventManDialog = EventManagerDialog(parent=self)
示例#12
0
文件: history.py 项目: ilius/starcal
	def __init__(
		self,
		event,
		**kwargs
	):
		checkEventsReadOnly()
		gtk.Dialog.__init__(self, **kwargs)
		self.set_title(_("History") + ": " + event.summary)
		self.event = event
		self.objectCache = {} # hash(str) -> data(dict)

		dialog_add_button(
			self,
			gtk.STOCK_CLOSE,
			_("_Close"),
			gtk.ResponseType.OK,
		)

		self.connect("response", self.onResponse)

		treev = gtk.TreeView()
		treev.set_headers_clickable(True)
		trees = gtk.ListStore(
			str, # hashBefore (hidden)
			str, # hashAfter (hidden)
			str, # formatted date & time
			str, # change msg (names or the number of changed params)
		)
		treev.set_model(trees)
		treev.connect("cursor-changed", self.treeviewCursorChanged)
		# treev.connect("button-press-event", self.treeviewCursorChanged)
		# FIXME: what is the signal for deselecting / unselecting a row?
		self.trees = trees
		self.treev = treev

		treevSwin = gtk.ScrolledWindow()
		treevSwin.add(treev)
		treevSwin.set_policy(
			gtk.PolicyType.AUTOMATIC,
			gtk.PolicyType.AUTOMATIC,
		)

		hpan = gtk.HPaned()
		hpan.add1(treevSwin)
		leftVbox = gtk.VBox()
		hpan.add2(leftVbox)
		hpan.set_position(600)
		pack(self.vbox, hpan, expand=True, fill=True)

		actionBox = gtk.VBox(spacing=5)
		pack(leftVbox, actionBox, padding=30)

		# revertButton = gtk.Button()
		# revertButton.set_label(_("Revert this vhange"))
		# revertButton.set_image(gtk.Image.new_from_stock(
		# 	gtk.STOCK_UNDO,
		# 	gtk.IconSize.BUTTON,
		# ))
		# revertButton.connect("clicked", self.revertClicked)
		# pack(actionBox, revertButton, padding=1)
		# self.revertButton = revertButton

		checkoutAfterButton = gtk.Button()
		checkoutAfterButton.set_label(_("Select revision after this change"))
		checkoutAfterButton.set_image(gtk.Image.new_from_stock(
			gtk.STOCK_UNDO,
			gtk.IconSize.BUTTON,
		))
		checkoutAfterButton.connect("clicked", self.checkoutAfterClicked)
		pack(actionBox, checkoutAfterButton, padding=1)
		self.checkoutAfterButton = checkoutAfterButton

		checkoutBeforeButton = gtk.Button()
		checkoutBeforeButton.set_label(_("Select revision before this change"))
		checkoutBeforeButton.set_image(gtk.Image.new_from_stock(
			gtk.STOCK_UNDO,
			gtk.IconSize.BUTTON,
		))
		checkoutBeforeButton.connect("clicked", self.checkoutBeforeClicked)
		pack(actionBox, checkoutBeforeButton, padding=1)
		self.checkoutBeforeButton = checkoutBeforeButton

		self.setButtonsSensitive(False)

		combo = gtk.ComboBoxText()
		for text in self.textViewTypes:
			combo.append_text(_(text))
		combo.set_active(1)
		combo.connect("changed", self.viewTypeComboChanged)
		self.viewTypeCombo = combo

		textTypeHbox = gtk.HBox()
		pack(textTypeHbox, gtk.Label(_("View type")+": "))
		pack(textTypeHbox, self.viewTypeCombo)
		pack(leftVbox, textTypeHbox)

		self.textview = ReadOnlyTextView()
		self.textview.set_wrap_mode(gtk.WrapMode.NONE)
		self.textview.set_justification(gtk.Justification.LEFT)
		self.textbuff = self.textview.get_buffer()

		cmpTreev = gtk.TreeView()
		cmpTreev.set_headers_clickable(True)
		cmpTrees = gtk.ListStore(
			str, # change symbol ("M", "+", "-", "")
			str, # key
			str, # old value
			str, # new value
		)
		cmpTreev.set_model(cmpTrees)
		# cmpTreev.connect("cursor-changed", self.cmpTreeviewCursorChanged)
		self.cmpTrees = cmpTrees
		self.cmpTreev = cmpTreev

		cell = gtk.CellRendererText()
		col = gtk.TreeViewColumn("", cell, text=0)
		col.set_resizable(True)
		cmpTreev.append_column(col)

		cell = gtk.CellRendererText()
		col = gtk.TreeViewColumn(_("Key"), cell, text=1)
		col.set_resizable(True)
		cmpTreev.append_column(col)

		cell = gtk.CellRendererText()
		col = gtk.TreeViewColumn(_("Old Value"), cell, text=2)
		col.set_resizable(True)
		cmpTreev.append_column(col)

		cell = gtk.CellRendererText()
		col = gtk.TreeViewColumn(_("New Value"), cell, text=3)
		col.set_resizable(True)
		cmpTreev.append_column(col)

		leftSwin = gtk.ScrolledWindow()
		leftSwin.set_policy(
			gtk.PolicyType.AUTOMATIC,
			gtk.PolicyType.AUTOMATIC,
		)
		pack(leftVbox, leftSwin, expand=True, fill=True)
		self.leftSwin = leftSwin

		cell = gtk.CellRendererText()
		col = gtk.TreeViewColumn(_("Time"), cell, text=2)
		treev.append_column(col)

		cell = gtk.CellRendererText()
		col = gtk.TreeViewColumn(_("Change Summary"), cell, text=3)
		treev.append_column(col)
		col.set_property("expand", True)

		self.load()
		self.vbox.show_all()
		self.resize(ud.screenW, ud.screenH*0.9) # FIXME
示例#13
0
文件: history.py 项目: ilius/starcal
    def __init__(self, event, **kwargs):
        checkEventsReadOnly()
        gtk.Dialog.__init__(self, **kwargs)
        self.set_title(_("History") + ": " + event.summary)
        self.event = event
        self.objectCache = {}  # hash(str) -> data(dict)

        dialog_add_button(
            self,
            gtk.STOCK_CLOSE,
            _("_Close"),
            gtk.ResponseType.OK,
        )

        self.connect("response", self.onResponse)

        treev = gtk.TreeView()
        treev.set_headers_clickable(True)
        trees = gtk.ListStore(
            str,  # hashBefore (hidden)
            str,  # hashAfter (hidden)
            str,  # formatted date & time
            str,  # change msg (names or the number of changed params)
        )
        treev.set_model(trees)
        treev.connect("cursor-changed", self.treeviewCursorChanged)
        # treev.connect("button-press-event", self.treeviewCursorChanged)
        # FIXME: what is the signal for deselecting / unselecting a row?
        self.trees = trees
        self.treev = treev

        treevSwin = gtk.ScrolledWindow()
        treevSwin.add(treev)
        treevSwin.set_policy(
            gtk.PolicyType.AUTOMATIC,
            gtk.PolicyType.AUTOMATIC,
        )

        hpan = gtk.HPaned()
        hpan.add1(treevSwin)
        leftVbox = gtk.VBox()
        hpan.add2(leftVbox)
        hpan.set_position(600)
        pack(self.vbox, hpan, expand=True, fill=True)

        actionBox = gtk.VBox(spacing=5)
        pack(leftVbox, actionBox, padding=30)

        # revertButton = gtk.Button()
        # revertButton.set_label(_("Revert this vhange"))
        # revertButton.set_image(gtk.Image.new_from_stock(
        # 	gtk.STOCK_UNDO,
        # 	gtk.IconSize.BUTTON,
        # ))
        # revertButton.connect("clicked", self.revertClicked)
        # pack(actionBox, revertButton, padding=1)
        # self.revertButton = revertButton

        checkoutAfterButton = gtk.Button()
        checkoutAfterButton.set_label(_("Select revision after this change"))
        checkoutAfterButton.set_image(
            gtk.Image.new_from_stock(
                gtk.STOCK_UNDO,
                gtk.IconSize.BUTTON,
            ))
        checkoutAfterButton.connect("clicked", self.checkoutAfterClicked)
        pack(actionBox, checkoutAfterButton, padding=1)
        self.checkoutAfterButton = checkoutAfterButton

        checkoutBeforeButton = gtk.Button()
        checkoutBeforeButton.set_label(_("Select revision before this change"))
        checkoutBeforeButton.set_image(
            gtk.Image.new_from_stock(
                gtk.STOCK_UNDO,
                gtk.IconSize.BUTTON,
            ))
        checkoutBeforeButton.connect("clicked", self.checkoutBeforeClicked)
        pack(actionBox, checkoutBeforeButton, padding=1)
        self.checkoutBeforeButton = checkoutBeforeButton

        self.setButtonsSensitive(False)

        combo = gtk.ComboBoxText()
        for text in self.textViewTypes:
            combo.append_text(_(text))
        combo.set_active(1)
        combo.connect("changed", self.viewTypeComboChanged)
        self.viewTypeCombo = combo

        textTypeHbox = gtk.HBox()
        pack(textTypeHbox, gtk.Label(_("View type") + ": "))
        pack(textTypeHbox, self.viewTypeCombo)
        pack(leftVbox, textTypeHbox)

        self.textview = ReadOnlyTextView()
        self.textview.set_wrap_mode(gtk.WrapMode.NONE)
        self.textview.set_justification(gtk.Justification.LEFT)
        self.textbuff = self.textview.get_buffer()

        cmpTreev = gtk.TreeView()
        cmpTreev.set_headers_clickable(True)
        cmpTrees = gtk.ListStore(
            str,  # change symbol ("M", "+", "-", "")
            str,  # key
            str,  # old value
            str,  # new value
        )
        cmpTreev.set_model(cmpTrees)
        # cmpTreev.connect("cursor-changed", self.cmpTreeviewCursorChanged)
        self.cmpTrees = cmpTrees
        self.cmpTreev = cmpTreev

        cell = gtk.CellRendererText()
        col = gtk.TreeViewColumn("", cell, text=0)
        col.set_resizable(True)
        cmpTreev.append_column(col)

        cell = gtk.CellRendererText()
        col = gtk.TreeViewColumn(_("Key"), cell, text=1)
        col.set_resizable(True)
        cmpTreev.append_column(col)

        cell = gtk.CellRendererText()
        col = gtk.TreeViewColumn(_("Old Value"), cell, text=2)
        col.set_resizable(True)
        cmpTreev.append_column(col)

        cell = gtk.CellRendererText()
        col = gtk.TreeViewColumn(_("New Value"), cell, text=3)
        col.set_resizable(True)
        cmpTreev.append_column(col)

        leftSwin = gtk.ScrolledWindow()
        leftSwin.set_policy(
            gtk.PolicyType.AUTOMATIC,
            gtk.PolicyType.AUTOMATIC,
        )
        pack(leftVbox, leftSwin, expand=True, fill=True)
        self.leftSwin = leftSwin

        cell = gtk.CellRendererText()
        col = gtk.TreeViewColumn(_("Time"), cell, text=2)
        treev.append_column(col)

        cell = gtk.CellRendererText()
        col = gtk.TreeViewColumn(_("Change Summary"), cell, text=3)
        treev.append_column(col)
        col.set_property("expand", True)

        self.load()
        self.vbox.show_all()
        self.resize(ud.screenW, ud.screenH * 0.9)  # FIXME