#-------------------------------------------------------------------------------
# Name:        robowidgets
# Purpose:
#
# Author:      dccharacter
#
# Created:     10.03.2012
# Copyright:   (c) dccharacter 2012
# Licence:     <your licence>
#-------------------------------------------------------------------------------
#!/usr/bin/env python

import serial
from serial.tools.list_ports_windows import comports
from tkinter import *
from tkinter.ttk import *
import re

class comPortWidget(LabelFrame, serial.Serial):

    def __init__(self, master=None, cnf={}, **kw):

        self.master = master
        LabelFrame.__init__(self, master, text="Serial settings", *cnf, **kw)
        serial.Serial.__init__(self)
        self.parent = master
        self.draw()

    def draw(self):
        self.strVarComPort = StringVar()
        self.labelComportName = Label(self, text="Com port:", textvariable=self.strVarComPort)
        self.labelComportName.grid(row=0, column=0)

        self.buttonRefreshPorts = Button(self, text="Re", width=3, command=self.refreshComPortsCombo)
        self.buttonRefreshPorts.grid(row=0, column=1)

        self.refreshComPortsCombo()

    def refreshComPortsCombo(self):
        listComs = self.enumerateComPorts()
        if not listComs:
            listComs.append("No com ports found")
        self.strVarComPort.set(listComs[0])

        ##self.after(500, func=self.refreshComPortsCombo)

    def enumerateComPorts(self):
        """
        Returns the list ofcom port names in the system or an empty list if
        no ports found
        """
        listComs = []
        for port, desc, hwid in sorted(comports()):
            if re.search("Arduino", desc):
                listComs.append(port+": "+desc)
        return listComs

def main():
    root = Tk()
    app = Frame(root)
    app.pack()
    comPortApp = comPortWidget(app)
    comPortApp.pack()
    root.mainloop()

if __name__ == '__main__':
    main()
