def test_get_slide_name(self):
     db = DBConnection("../data_base/test_base.db")
     db.insert_slide("1","1.jpg")
     db.insert_object("1","LOL")
     disp = InfoDisplayer(db, "TestImages/")
     name = disp.get_slide_name(1)
     self.assertTrue(name == "1.jpg")
     db.clear()
 def test_delete_object(self):
     db = DBConnection("../data_base/test_base.db")
     self.assertTrue(db.get_object_count() == 0)
     db.insert_object(1, "1")
     self.assertTrue(db.get_object_count() == 1)
     self.assertTrue(db.get_object_name(1) == "1")
     db.delete_object(1)
     self.assertTrue(db.get_object_count() == 0)
     db.clear()
 def test_insert_object(self):
     db = DBConnection("../data_base/test_base.db")
     db.clear()
     self.assertRaises(DBConnection("RANDOM_BASE"))
     self.assertTrue(db.get_object_count() == 0)
     db.insert_object(1, "1")
     self.assertTrue(db.get_object_count() == 1)
     self.assertTrue(db.get_object_name(1) == "1")
     db.clear()
     self.assertTrue(db.get_object_count() == 0)
 def test_display(self):
     db = DBConnection("../data_base/test_base.db")
     db.insert_slide("1","1.jpg")
     db.insert_object("1","LOL")
     disp = InfoDisplayer(db, "TestImages/")
     im = cv2.imread("TestImages/1.jpg")
     im2 = cv2.imread("TestImages/2.jpg")
     im2 = disp.display(1,im2)
     db.clear()
     self.assertTrue(len(im) == len(im2))
     for x in range(im.shape[0]):
         for y in range(im.shape[1]):
             self.assertTrue(im[x][y][0]==im2[x][y][0])
    def test_get_first(self):
        db = DBConnection("../data_base/test_base.db")
        db.insert_slide("1","1.jpg")
        db.insert_slide("2","2.jpg")
        db.insert_object("1","LOL")
        db.insert_object("2","LOL")

        ob1 = (1,"LOL")
        ob2 = (2,"LOL")
        ob3 = (3,"LOL")
        disp = InfoDisplayer(db, "TestImages/")
        out = disp.get_first(ob1)
        self.assertTrue(out == "1.jpg")
        out = disp.get_first(ob2)
        self.assertTrue(out == "2.jpg")
        out = disp.get_first(ob3)
        self.assertTrue(out == "")
        db.clear()
 def test_get_object_list(self):
     db = DBConnection("../data_base/test_base.db")
     self.assertTrue(db.get_object_count() == 0)
     db.insert_object(1, "1")
     db.insert_object(2, "2")
     db.insert_object(3, "3")
     db.insert_object(4, "4")
     db.insert_object(5, "5")
     db.insert_object(6, "6")
     self.assertTrue(db.get_object_count() == 6)
     test_list = db.get_object_list()
     self.assertTrue(test_list[0][1] == "1")
     self.assertTrue(test_list[1][1] == "2")
     self.assertTrue(test_list[2][1] == "3")
     self.assertTrue(test_list[3][1] == "4")
     self.assertTrue(test_list[4][1] == "5")
     self.assertTrue(test_list[5][1] == "6")
     db.clear()
     self.assertTrue(db.get_object_count() == 0)
class InteractiveDisplay(tk.Frame):
    def __init__(self, master=None):
        self.db = DBConnection("data_base/base.db")
        tk.Frame.__init__(self, master)
        self.pack()
        self.run_detector = tk.Button(self, text="Run detector", command=self.run)
        self.object_listbox = tk.Listbox(self)
        self.slide_listbox = tk.Listbox(self)
        self.object_id_label = tk.Label(self, text="Id:")
        self.object_name_label = tk.Label(self, text="Name:")
        self.object_id_entry = tk.Entry(self)
        self.object_name_entry = tk.Entry(self)
        self.file_name_label = tk.Label(self, text="File name:")
        self.object_name_label2 = tk.Label(self, text="Object name:")
        self.file_name_entry = tk.Entry(self)
        self.variable = tk.StringVar(self)
        self.object_name_optionmenu = tk.OptionMenu(self, self.variable, '')
        self.add_object_button = tk.Button(self, text="Add object", command=self.add_object)
        self.delete_object_button = tk.Button(self, text="Delete object", command=self.delete_object)
        self.delete_slide_button = tk.Button(self, text="Delete slide", command=self.delete_slide)
        self.add_slide_button = tk.Button(self, text="Add slide", command=self.add_slide)
        self.quit = tk.Button(self, text="Quit", fg="red", command=root.destroy)
        self.dict = None
        self.place_widgets()
        self.set_widgets()

    def set_widgets(self):
        """
        Function set widgets parametrs.
        """
        self.set_optionmenu()
        self.set_object_listbox()
        self.set_slide_listbox()
        self.object_listbox.bind('<<ListboxSelect>>', self.onselect_object)
        self.slide_listbox.bind('<<ListboxSelect>>', self.onselect_slide)

    def place_widgets(self):
        """
        Function place widgets on window.
        """
        self.run_detector.grid(row=0, columnspan=8)
        self.object_listbox.grid(row=1, column=0, columnspan=4)
        self.slide_listbox.grid(row=1, column=4, columnspan=4)
        self.object_id_label.grid(row=3, column=0)
        self.object_name_label.grid(row=3, column=2)
        self.object_id_entry.grid(row=3, column=1)
        self.object_name_entry.grid(row=3, column=3)
        self.file_name_label.grid(row=3, column=4)
        self.object_name_label2.grid(row=3, column=6)
        self.file_name_entry.grid(row=3, column=5)
        self.object_name_optionmenu.grid(row=3, column=7)
        self.add_object_button.grid(row=4, column=0, columnspan=2)
        self.delete_object_button.grid(row=4, column=2, columnspan=2)
        self.delete_slide_button.grid(row=4, column=6, columnspan=2)
        self.add_slide_button.grid(row=4, column=4, columnspan=2)
        self.quit.grid(row=5, columnspan=8)

    def onselect_object(self, evt):
        """
        Function handle oncelect event.
        """
        w = evt.widget
        index = int(w.curselection()[0])
        item = w.get(index)
        element = item.split(' - ')
        self.object_id_entry.delete(0, tk.END)
        self.object_id_entry.insert(0, element[0])
        self.object_name_entry.delete(0, tk.END)
        self.object_name_entry.insert(0, element[1])

    def onselect_slide(self, evt):
        """
        Function handle oncelect event.
        """
        w = evt.widget
        index = int(w.curselection()[0])
        item = w.get(index)
        slide = item.split(' - ')
        self.file_name_entry.delete(0, tk.END)
        self.file_name_entry.insert(0, slide[1])
        # self.variable.set(next((object for object, id in self.dict.items() if id == slide[0]), None))

    def add_object(self):
        """
        Function handle add_object_button and insert data to data base.
        """
        self.db.insert_object(self.object_id_entry.get(), self.object_name_entry.get())
        DataMatrixCreator.create_data_matrix(600, self.object_id_entry.get(), 6)
        self.object_id_entry.delete(0, tk.END)
        self.object_name_entry.delete(0, tk.END)
        self.set_object_listbox()
        self.set_optionmenu()

    def delete_object(self):
        """
        Function handle delete_object_button and delete data from data base.
        """
        self.db.delete_object(self.object_id_entry.get())
        DataMatrixCreator.remove_data_matrix(self.object_id_entry.get())
        self.set_object_listbox()
        self.set_optionmenu()

    def add_slide(self):
        """
        Function handle add_slide_button and insert data to data base.
        """
        self.db.insert_slide(self.dict[self.variable.get()], self.file_name_entry.get())
        self.file_name_entry.delete(0, tk.END)
        self.set_slide_listbox()

    def delete_slide(self):
        """
        Function handle delete_slide_button and delete data from data base.
        """
        self.db.delete_slide(self.file_name_entry.get())
        self.set_slide_listbox()

    def set_optionmenu(self):
        """
        Function set optionmenu.
        """
        temp_list = self.db.get_object_list()
        self.dict = {row[1]: row[0] for row in temp_list}
        self.variable.set(list(self.dict.keys())[0])
        self.object_name_optionmenu = tk.OptionMenu(self, self.variable, *self.dict.keys())
        self.object_name_optionmenu.grid(row=3, column=7)

    def set_object_listbox(self):
        """
        Function set object_listbox.
        """
        self.object_listbox.delete(0, tk.END)
        temp_list = self.db.get_object_list()
        element = ["" + str(record[0]) + " - " + record[1] for record in temp_list]
        self.object_listbox.insert(tk.END, *element)
        self.object_name_optionmenu.grid(row=3, column=7)

    def set_slide_listbox(self):
        """
        Function set slide_listbox.
        """
        self.slide_listbox.delete(0, tk.END)
        temp_list = self.db.get_slide_list()
        slide = ["" + str(record[1]) + " - " + record[2] for record in temp_list]
        self.slide_listbox.insert(tk.END, *slide)

    def run(self):
        """
        Function handle run_detector_button.
        """
        detector = DataMatrixDetector(self.db)
        detector.set_template("data_matrixes/template.jpg")
        camera = Camera()
        camera.OnCapture += detector.detect_matrix
        camera.run()