import gtk
from gtk import TRUE, FALSE
import kudzu
import string
import gobject

##
## I18N
## 
from rhpl.translate import _, N_
import rhpl.translate as translate
domain = 'hwbrowser'
translate.textdomain (domain)
gtk.glade.bindtextdomain(domain)


xml = None
hardware = None


def on_generic_device_select_row (selection):
    (model, iter) = selection.get_selected()
    if iter == None:
        return
    device = model.get_value (iter, 1)
    xml.get_widget("generic_manufacturer_label").show()
    xml.get_widget("manufacturer_label").show()    
    xml.get_widget("driver_label").show()
    xml.get_widget("generic_driver_label").show()
    xml.get_widget("device_label").show()
    xml.get_widget("generic_device_label").show()

    if device == None:
        return
    if string.find (device.kudzu_device.desc, "|") != -1:
        mfg, desc = string.split (device.kudzu_device.desc, "|")
    elif (device.kudzu_device.deviceclass == kudzu.CLASS_CDROM or
          device.kudzu_device.deviceclass == kudzu.CLASS_HD):

        if string.find(device.kudzu_device.desc, " ") != -1:
            mfg, desc = string.split(device.kudzu_device.desc, " ", 1)
        else:
            mfg = _("Unknown")
            desc = None

    elif device.kudzu_device.bus == kudzu.BUS_USB and device.kudzu_device.usbmfr != None:
        mfg = device.kudzu_device.usbmfr
    else:
        mfg = _("Unknown")
        desc = device.kudzu_device.desc

    xml.get_widget ('generic_manufacturer_label').set_text (mfg)
    if (device.kudzu_device.driver == "ignore"):
        driver = "none or built-in"
    else:
        driver = device.kudzu_device.driver
    xml.get_widget ('generic_driver_label').set_text (driver)
    if device.kudzu_device.device != None:
        xml.get_widget ('generic_device_label').set_text ('/dev/' + device.kudzu_device.device)
    else:
        xml.get_widget("device_label").hide()
        xml.get_widget("generic_device_label").hide()

    if device.kudzu_device.deviceclass == kudzu.CLASS_FLOPPY:
        if device.kudzu_device.detached == 1:
            #If there's no floppy drive attached, hide all the lower widgets
            xml.get_widget("generic_manufacturer_label").hide()
            xml.get_widget("manufacturer_label").hide()    
            xml.get_widget("driver_label").hide()
            xml.get_widget("generic_driver_label").hide()
            xml.get_widget("device_label").hide()
            xml.get_widget("generic_device_label").hide()

def hydrate (devices):
    tree_view = xml.get_widget ('generic_device_treeview')
    list = tree_view.get_model ()
    list.clear ()
    for device in devices:
        iter = list.append ()
        #Check to see if the device is a floppy
        if device.kudzu_device.deviceclass == kudzu.CLASS_FLOPPY:
            #Ok, we've found a floppy.  Let's see if it is detached
            if device.kudzu_device.detached == 1:
                #It's detached, let's show that there are no floppy drives
                list.set (iter, 0, (_("No floppy drives detected")), 1, device)
            else:
                #It's attached.  Continue as normal
                list.set (iter, 0, device.get_name(), 1, device)                
        else:
            list.set (iter, 0, device.get_name(), 1, device)
    tree_view.get_selection().select_path ((0,))

def initialize (global_xml, global_hardware):
    global xml, hardware
    xml = global_xml

    hardware = global_hardware
    tree_view = xml.get_widget ('generic_device_treeview')
    tree_view.get_selection ().set_mode (gtk.SELECTION_BROWSE)
    tree_view.get_selection ().connect ("changed", on_generic_device_select_row)
    model = gtk.ListStore (gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)
    model.set_sort_column_id (0, gtk.SORT_ASCENDING)
    tree_view.set_model (model)
    column = gtk.TreeViewColumn ()
    renderer = gtk.CellRendererText ()
    column.pack_start (renderer, TRUE)
    column.add_attribute (renderer, "text", 0)
    tree_view.append_column (column)
    
