def __init__(self, cursor, path, daemon=False):
        QtGui.QWidget.__init__(self)

        self.ui = Ui_KnownNetworks()
        self.ui.setupUi(self)

        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        self.cursor = cursor
        self.backup_path = path

        self.filename = os.path.join(
            self.backup_path,
            plugins_utils.realFileName(self.cursor,
                                       filename="com.apple.wifi.plist",
                                       domaintype="SystemPreferencesDomain"))

        if (not os.path.isfile(self.filename)):
            raise Exception("Known networks file not found: \"%s\"" %
                            self.filename)

        #self.ui.listTree.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        #QtCore.QObject.connect(self.ui.listTree, QtCore.SIGNAL('customContextMenuRequested(QPoint)'), self.ctxMenu)

        if (daemon == False):

            self.ui.networksTree.setColumnHidden(0, True)
            QtCore.QObject.connect(self.ui.networksTree,
                                   QtCore.SIGNAL("itemSelectionChanged()"),
                                   self.onTreeClick)

            self.populateUI()
	def __init__(self, cursor, path, daemon = False):
		QtGui.QWidget.__init__(self)
		
		self.ui = Ui_KnownNetworks()
		self.ui.setupUi(self)
		
		self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
		
		self.cursor = cursor
		self.backup_path = path
		
		self.filename = os.path.join(self.backup_path, plugins_utils.realFileName(self.cursor, filename="com.apple.wifi.plist", domaintype="SystemPreferencesDomain"))

		if (not os.path.isfile(self.filename)):
			raise Exception("Known networks file not found: \"%s\""%self.filename)
		
		#self.ui.listTree.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
		#QtCore.QObject.connect(self.ui.listTree, QtCore.SIGNAL('customContextMenuRequested(QPoint)'), self.ctxMenu)

		if (daemon == False):
		
			self.ui.networksTree.setColumnHidden(0,True)
			QtCore.QObject.connect(self.ui.networksTree, QtCore.SIGNAL("itemSelectionChanged()"), self.onTreeClick)
			
			self.populateUI()
class KnownNetworksWidget(QtGui.QWidget):
    def __init__(self, cursor, path, daemon=False):
        QtGui.QWidget.__init__(self)

        self.ui = Ui_KnownNetworks()
        self.ui.setupUi(self)

        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        self.cursor = cursor
        self.backup_path = path

        self.filename = os.path.join(
            self.backup_path,
            plugins_utils.realFileName(self.cursor,
                                       filename="com.apple.wifi.plist",
                                       domaintype="SystemPreferencesDomain"))

        if (not os.path.isfile(self.filename)):
            raise Exception("Known networks file not found: \"%s\"" %
                            self.filename)

        #self.ui.listTree.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        #QtCore.QObject.connect(self.ui.listTree, QtCore.SIGNAL('customContextMenuRequested(QPoint)'), self.ctxMenu)

        if (daemon == False):

            self.ui.networksTree.setColumnHidden(0, True)
            QtCore.QObject.connect(self.ui.networksTree,
                                   QtCore.SIGNAL("itemSelectionChanged()"),
                                   self.onTreeClick)

            self.populateUI()

    def populateUI(self):

        self.networks = plistutils.readPlist(
            self.filename)['List of known networks']

        index = 0
        for network in self.networks:
            element = QtGui.QTreeWidgetItem(None)
            element.setText(0, str(index))
            element.setText(1, self.getNetworkName(network))
            self.ui.networksTree.addTopLevelItem(element)

            index += 1

    def getNetworkName(self, network):
        """
		Given a DICT/Plist of "known networks", returns a descriptive name of the network.

		Typically, this will be the SSID.
		But some entries do not have SSID (possibly related to Enterprise networks?).
		If so, try other keys.
		"""
        # Observed keys with some decsriptive identifiers.
        keys = [
            'SSID', 'PayloadOrganization', 'SSID_STR', 'PayloadIdentifier',
            'BSSID'
        ]
        for k in keys:
            if k in network:
                return network[k]
        return "(Unknown Network)"

    def onTreeClick(self):

        # retrieving selected network
        currentSelectedElement = self.ui.networksTree.currentItem()
        if (currentSelectedElement): pass
        else: return

        currentSelectedID = int(currentSelectedElement.text(0))

        currentNetwork = self.networks[currentSelectedID]

        self.ui.labelSSID.clear()
        self.ui.labelBSSID.clear()
        self.ui.labelLastJoined.clear()
        self.ui.labelLastAutoJoined.clear()

        if ("SSID" in currentNetwork.keys()):
            self.ui.labelSSID.setText(str(currentNetwork['SSID']))
        if ("BSSID" in currentNetwork.keys()):
            self.ui.labelBSSID.setText(str(currentNetwork['BSSID']))
        if ("lastJoined" in currentNetwork.keys()):
            self.ui.labelLastJoined.setText(str(currentNetwork['lastJoined']))
        if ("lastAutoJoined" in currentNetwork.keys()):
            self.ui.labelLastAutoJoined.setText(
                str(currentNetwork['lastAutoJoined']))

        self.ui.networkTree.clear()
        self.parseNode(currentNetwork, None)

    def parseNode(self, newNode, parentNode):

        if (type(newNode) == type({})
                or type(newNode) == plistlib._InternalDict):

            if (parentNode):
                dictNode = QtGui.QTreeWidgetItem(parentNode)
                dictNode.setText(0, "<dict>")
                self.ui.networkTree.addTopLevelItem(dictNode)

                for element in newNode:
                    titleNode = QtGui.QTreeWidgetItem(dictNode)
                    titleNode.setText(0, str(element))
                    self.ui.networkTree.addTopLevelItem(titleNode)

                    self.parseNode(newNode[element], titleNode)

            else:
                for element in newNode:
                    titleNode = QtGui.QTreeWidgetItem(None)
                    titleNode.setText(0, str(element))
                    self.ui.networkTree.addTopLevelItem(titleNode)

                    self.parseNode(newNode[element], titleNode)

        elif (type(newNode) == type([])):

            for element in newNode:
                self.parseNode(element, parentNode)

        else:

            try:
                content = str(newNode)
            except:
                content = newNode.encode("utf8", "replace")

            titleNode = QtGui.QTreeWidgetItem(parentNode)
            titleNode.setText(0, content)
            self.ui.networkTree.addTopLevelItem(titleNode)
class KnownNetworksWidget(QtGui.QWidget):
	
	def __init__(self, cursor, path, daemon = False):
		QtGui.QWidget.__init__(self)
		
		self.ui = Ui_KnownNetworks()
		self.ui.setupUi(self)
		
		self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
		
		self.cursor = cursor
		self.backup_path = path
		
		self.filename = os.path.join(self.backup_path, plugins_utils.realFileName(self.cursor, filename="com.apple.wifi.plist", domaintype="SystemPreferencesDomain"))

		if (not os.path.isfile(self.filename)):
			raise Exception("Known networks file not found: \"%s\""%self.filename)
		
		#self.ui.listTree.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
		#QtCore.QObject.connect(self.ui.listTree, QtCore.SIGNAL('customContextMenuRequested(QPoint)'), self.ctxMenu)

		if (daemon == False):
		
			self.ui.networksTree.setColumnHidden(0,True)
			QtCore.QObject.connect(self.ui.networksTree, QtCore.SIGNAL("itemSelectionChanged()"), self.onTreeClick)
			
			self.populateUI()


	def populateUI(self):
	
		self.networks = plistutils.readPlist(self.filename)['List of known networks']
		
		index = 0
		for network in self.networks:
			element = QtGui.QTreeWidgetItem(None)
			element.setText(0, str(index))			
			element.setText(1, self.getNetworkName(network))
			self.ui.networksTree.addTopLevelItem(element)
			
			index += 1

	def getNetworkName(self, network):
		"""
		Given a DICT/Plist of "known networks", returns a descriptive name of the network.

		Typically, this will be the SSID.
		But some entries do not have SSID (possibly related to Enterprise networks?).
		If so, try other keys.
		"""
		# Observed keys with some decsriptive identifiers.
		keys = [ 'SSID', 'PayloadOrganization', 'SSID_STR', 'PayloadIdentifier', 'BSSID' ]
		for k in keys:
			if k in network:
				return network[k]
		return "(Unknown Network)"


	def onTreeClick(self):
		
		# retrieving selected network
		currentSelectedElement = self.ui.networksTree.currentItem()
		if (currentSelectedElement): pass
		else: return

		currentSelectedID = int(currentSelectedElement.text(0))
		
		currentNetwork = self.networks[currentSelectedID]
		
		self.ui.labelSSID.clear()
		self.ui.labelBSSID.clear()
		self.ui.labelLastJoined.clear()
		self.ui.labelLastAutoJoined.clear()
		
		if ("SSID" in currentNetwork.keys()):
			self.ui.labelSSID.setText(str(currentNetwork['SSID']))
		if ("BSSID" in currentNetwork.keys()):	
			self.ui.labelBSSID.setText(str(currentNetwork['BSSID']))
		if ("lastJoined" in currentNetwork.keys()):
			self.ui.labelLastJoined.setText(str(currentNetwork['lastJoined']))
		if ("lastAutoJoined" in currentNetwork.keys()):
			self.ui.labelLastAutoJoined.setText(str(currentNetwork['lastAutoJoined']))
		
		self.ui.networkTree.clear()
		self.parseNode(currentNetwork, None)

	def parseNode(self, newNode, parentNode):
	
		if (type(newNode) == type({}) or type(newNode) == plistlib._InternalDict):	
			
			if (parentNode):
				dictNode = QtGui.QTreeWidgetItem(parentNode)
				dictNode.setText(0, "<dict>")
				self.ui.networkTree.addTopLevelItem(dictNode)
				
				for element in newNode:
					titleNode = QtGui.QTreeWidgetItem(dictNode)
					titleNode.setText(0, str(element))
					self.ui.networkTree.addTopLevelItem(titleNode)
					
					self.parseNode(newNode[element], titleNode)
			
			else:
				for element in newNode:
					titleNode = QtGui.QTreeWidgetItem(None)
					titleNode.setText(0, str(element))
					self.ui.networkTree.addTopLevelItem(titleNode)
					
					self.parseNode(newNode[element], titleNode)			
		
		elif (type(newNode) == type([])):
			
			for element in newNode:
				self.parseNode(element, parentNode)
		
		else:
		
			try:
				content = str(newNode)
			except:
				content = newNode.encode("utf8", "replace")		
		
			titleNode = QtGui.QTreeWidgetItem(parentNode)
			titleNode.setText(0, content)
			self.ui.networkTree.addTopLevelItem(titleNode)
class KnownNetworksWidget(QtGui.QWidget):
	
	def __init__(self, cursor, path, daemon = False):
		QtGui.QWidget.__init__(self)
		
		self.ui = Ui_KnownNetworks()
		self.ui.setupUi(self)
		
		self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
		
		self.cursor = cursor
		self.backup_path = path
		
		self.filename = os.path.join(self.backup_path, plugins_utils.realFileName(self.cursor, filename="com.apple.wifi.plist", domaintype="SystemPreferencesDomain"))

		if (not os.path.isfile(self.filename)):
			raise Exception("Known networks file not found: \"%s\""%self.filename)
		
		#self.ui.listTree.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
		#QtCore.QObject.connect(self.ui.listTree, QtCore.SIGNAL('customContextMenuRequested(QPoint)'), self.ctxMenu)
		
		if (daemon == False):
		
			self.ui.networksTree.setColumnHidden(0,True)
			QtCore.QObject.connect(self.ui.networksTree, QtCore.SIGNAL("itemSelectionChanged()"), self.onTreeClick)
			
			self.populateUI()


	def populateUI(self):
	
		self.networks = plistutils.readPlist(self.filename)['List of known networks']
		
		index = 0
		for network in self.networks:
		
			element = QtGui.QTreeWidgetItem(None)
			element.setText(0, str(index))			
			element.setText(1, network['SSID'])			
			self.ui.networksTree.addTopLevelItem(element)
			
			index += 1


	def onTreeClick(self):
		
		# retrieving selected network
		currentSelectedElement = self.ui.networksTree.currentItem()
		if (currentSelectedElement): pass
		else: return

		currentSelectedID = int(currentSelectedElement.text(0))
		
		currentNetwork = self.networks[currentSelectedID]
		
		self.ui.labelSSID.clear()
		self.ui.labelBSSID.clear()
		self.ui.labelLastJoined.clear()
		self.ui.labelLastAutoJoined.clear()
		
		if ("SSID" in currentNetwork.keys()):
			self.ui.labelSSID.setText(str(currentNetwork['SSID']))
		if ("BSSID" in currentNetwork.keys()):	
			self.ui.labelBSSID.setText(str(currentNetwork['BSSID']))
		if ("lastJoined" in currentNetwork.keys()):
			self.ui.labelLastJoined.setText(str(currentNetwork['lastJoined']))
		if ("lastAutoJoined" in currentNetwork.keys()):
			self.ui.labelLastAutoJoined.setText(str(currentNetwork['lastAutoJoined']))
		
		self.ui.networkTree.clear()
		self.parseNode(currentNetwork, None)

	def parseNode(self, newNode, parentNode):
	
		if (type(newNode) == type({}) or type(newNode) == plistlib._InternalDict):	
			
			if (parentNode):
				dictNode = QtGui.QTreeWidgetItem(parentNode)
				dictNode.setText(0, "<dict>")
				self.ui.networkTree.addTopLevelItem(dictNode)
				
				for element in newNode:
					titleNode = QtGui.QTreeWidgetItem(dictNode)
					titleNode.setText(0, str(element))
					self.ui.networkTree.addTopLevelItem(titleNode)
					
					self.parseNode(newNode[element], titleNode)
			
			else:
				for element in newNode:
					titleNode = QtGui.QTreeWidgetItem(None)
					titleNode.setText(0, str(element))
					self.ui.networkTree.addTopLevelItem(titleNode)
					
					self.parseNode(newNode[element], titleNode)			
		
		elif (type(newNode) == type([])):
			
			for element in newNode:
				self.parseNode(element, parentNode)
		
		else:
		
			try:
				content = str(newNode)
			except:
				content = newNode.encode("utf8", "replace")		
		
			titleNode = QtGui.QTreeWidgetItem(parentNode)
			titleNode.setText(0, content)
			self.ui.networkTree.addTopLevelItem(titleNode)