
import gtk
import os

from gtk import TRUE
from gtk import FALSE
import rpm
from config import *
from rhpl.translate import _, N_

class UnresolvableDependenciesDialog:
    def __init__ (self, unresolvable_dependencies, parent=None):
        def formatRequire (req):
            print req
            if len(req) == 2:
                (name, version) = req
                flags = None
            else:
                (name, version, flags) = req
            string = name
            
            if flags:
                if flags & (rpm.RPMSENSE_LESS | rpm.RPMSENSE_GREATER | 
                            rpm.RPMSENSE_EQUAL):
                    string = string + " "
                    if flags & rpm.RPMSENSE_LESS:
                        string = string + "<"
                    if flags & rpm.RPMSENSE_GREATER:
                        string = string + ">"
                    if flags & rpm.RPMSENSE_EQUAL:
                        string = string + "="
                    string = string + " %s" % version
            return string
    
        glade_file = "UnresolvableDependenciesDialog.glade"
        if not os.path.isfile(glade_file):
            glade_file = GLADEDIR + glade_file
        xml = gtk.glade.XML (glade_file, domain=PROGNAME)

        self.dialog = xml.get_widget ('unresolvable_dependencies_dialog')
        if parent:
            self.dialog.set_transient_for (parent)
        # Warn.
        label = '<span weight="bold" size="larger">'
        if len (unresolvable_dependencies) == 1:
            label += _("Package Not Found") + '</span>\n\n'
            label += _("The following package could not be found on your system.  Installation cannot continue until it is installed.")
        else:
            label += _("Packages Not Found") + '</span>\n\n'
            label += _("The following packages could not be found on your system.  Installation cannot continue until they are installed.")
        xml.get_widget ('info_label').set_markup (label)

        # Setup the list
        tree_view = xml.get_widget ('details_tree_view')
        column = gtk.TreeViewColumn (_("Unlocatable package"), gtk.CellRendererText(), text=0)
        tree_view.append_column (column)
        column = gtk.TreeViewColumn (_("Required by"), gtk.CellRendererText(), text=1)
        tree_view.append_column (column)
        tree_view.get_selection().set_mode (gtk.SELECTION_NONE)

        model = gtk.ListStore (str, str)
        for dep in unresolvable_dependencies:
            iter = model.append ()
            model.set_value (iter, 0, formatRequire(dep[1]))
            model.set_value (iter, 1, dep[0])

        tree_view.set_model (model)

    def run(self):
        ret = self.dialog.run ()
        self.dialog.destroy()
        return ret
