]> gitweb.morketsmerke.org Git - ML.git/commitdiff
Zakończono rozwój core-owych funkcji. main
authorxf0r3m <jakubstasinski@protonmail.com>
Sun, 26 May 2024 11:20:31 +0000 (13:20 +0200)
committerxf0r3m <jakubstasinski@protonmail.com>
Sun, 26 May 2024 11:20:31 +0000 (13:20 +0200)
db.py
window.py

diff --git a/db.py b/db.py
index d6ce15fee18fe022f50a7b9f6ec1783c992da629..08ac4f630ed9bfd8acf87ae0de9000936c75ff86 100755 (executable)
--- a/db.py
+++ b/db.py
@@ -31,7 +31,7 @@ def checkData(phrase, pType, sqlTable):
   con = sqlite3.connect("ml-logs.db")
   cur = con.cursor()
   if sqlTable == 'logs':
   con = sqlite3.connect("ml-logs.db")
   cur = con.cursor()
   if sqlTable == 'logs':
-    res = cur.execute(f"SELECT * FROM logs WHERE logger = '{phrase}'")
+    res = cur.execute(f"SELECT ROWID, * FROM logs WHERE logger = '{phrase}'")
     result = res
   else:
     if pType:
     result = res
   else:
     if pType:
@@ -76,3 +76,17 @@ def saveLog(logger, sign, name, rst, dt, eq, ch):
   cur.execute(f"INSERT INTO logs VALUES ('{logger}', '{sign}', '{name}', '{rst}', '{dt}', '{eq}', '{ch}')")
   con.commit()
   con.close()
   cur.execute(f"INSERT INTO logs VALUES ('{logger}', '{sign}', '{name}', '{rst}', '{dt}', '{eq}', '{ch}')")
   con.commit()
   con.close()
+
+def editLog(rowid, logger, sign, name, rst, dt, eq, ch):
+  con = sqlite3.connect('ml-logs.db')
+  cur = con.cursor()
+  cur.execute(f"UPDATE logs SET logger = '{logger}', sign = '{sign}', name = '{name}', rst = '{rst}', dt = '{dt}', eq = '{eq}', ch = '{ch}' WHERE ROWID = {rowid}")
+  con.commit()
+  con.close()
+
+def deleteLog(rowid):
+  con = sqlite3.connect('ml-logs.db')
+  cur = con.cursor()
+  cur.execute(f"DELETE FROM logs WHERE ROWID = {rowid}")
+  con.commit()
+  con.close()
index 5aa8ebf478154a3168a1409d0a7b2a68b089d522..17fbf7cab6878a7f85e277213a27fd30092ceb84 100755 (executable)
--- a/window.py
+++ b/window.py
@@ -5,31 +5,22 @@
 from tkinter import *  
 from tkinter import ttk
 from datetime import datetime
 from tkinter import *  
 from tkinter import ttk
 from datetime import datetime
-from tkinter.messagebox import showinfo
+from tkinter.messagebox import showinfo, askyesno
 import re, db, pa_com
 
 import re, db, pa_com
 
-"""
-def csCHandler(arg1):
-  csCValue=csType.get()
-  csCLValue=StringVar()
-  if ( csCValue == 'Imię' ):
-    csCLValue.set('Imię:')
-  else:
-    csCLValue.set('(161)ML')
-  
-  if 'csTypeLabel' in locals():
-    csTypeLabel.destroy();
-  
-  csTypeLabel=ttk.Label(csFrame, text=csCLValue.get())
-  csTypeLabel.grid(column=2, row=0, padx=5)
-  """
 def logsWindow():
   logger=csValue.get()
   logs = Toplevel(root)
   logs.title('Mike Lima - Logi')
 def logsWindow():
   logger=csValue.get()
   logs = Toplevel(root)
   logs.title('Mike Lima - Logi')
-  logs.geometry('640x240')
-  columns = ('logger', 'sign', 'name', 'rst', 'dt', 'eq', 'ch')
-  tree = ttk.Treeview(logs, columns=columns, show='headings')
+  logs.geometry('640x255')
+  tvFrame=ttk.Frame(logs, width=640, height=200)
+
+  #Wykorzystanie ttk.Treeview
+  #https://www.pythontutorial.net/tkinter/tkinter-treeview/
+  columns = ('lp', 'logger', 'sign', 'name', 'rst', 'dt', 'eq', 'ch')
+  tree = ttk.Treeview(tvFrame, columns=columns, show='headings')
+  tree.heading('lp', text='Lp.')
+  tree.column('lp', minwidth=0, width=40, stretch=NO)
   tree.heading('logger', text="Logujący:")
   tree.column('logger', minwidth=0, width=75, stretch=NO)
   tree.heading('sign', text="Znak:")
   tree.heading('logger', text="Logujący:")
   tree.column('logger', minwidth=0, width=75, stretch=NO)
   tree.heading('sign', text="Znak:")
@@ -47,9 +38,62 @@ def logsWindow():
   logsRes=db.checkData(logger, db.isSignOrName(logger), 'logs')
   for row in logsRes:
     tree.insert('', END, values=row)
   logsRes=db.checkData(logger, db.isSignOrName(logger), 'logs')
   for row in logsRes:
     tree.insert('', END, values=row)
+  
+  record=""
+  def logSelected(event):
+    item=tree.item(tree.selection())
+    nonlocal record
+    record=item['values']
+    if len(record) > 0:
+      logRowId.set(record[0])
+
+  def editLog():
+    cleanLoginSection()
+    loginLoggerEntry.insert(0, record[1])
+    loginSignEntry.insert(0, record[2])
+    loginNameEntry.insert(0, record[3])
+    loginRstEntry.insert(0, record[4])
+    loginDtEntry.insert(0, record[5])
+    loginEqEntry.insert(0, record[6])
+    loginChEntry.insert(0, record[7])
+    #Zmiana atrybutów wyświetlonych już widgetów:
+    #https://stackoverflow.com/questions/3998742/how-can-i-dynamically-change-the-color-of-a-button-in-tkinter
+    loginButton.configure(text="Zapisz", command=saveEditLogs)
+    loginFrame.configure(text="Edytuj:")
+    logs.destroy()
+
+  def deleteLog():
+    if askyesno(title="Mike Lima", message=f"Usunąć łączność do {record[3]} z {record[5]}?"):
+      rowid = logRowId.get()
+      db.deleteLog(rowid)
+      #Wyczyszcenie treeview przed pobraniem danych na nowo:
+      #https://stackoverflow.com/questions/22812134/how-to-clear-an-entire-treeview-with-tkinter
+      tree.delete(*tree.get_children())
+      logsRes=db.checkData(logger, db.isSignOrName(logger), 'logs')
+      for row in logsRes:
+        tree.insert('', END, values=row)
+      #Przywrócenie okna logów po zatwierdzeniu usunięcia wpisu:
+      #https://stackoverflow.com/questions/22751100/tkinter-main-window-focus 
+      logs.focus_force()
+      logs.lift()
+      root.update()
+      #logs.destroy()
+    
+    
+  tree.bind('<<TreeviewSelect>>', logSelected)
+  
+  tvFrame.grid(column=0, row=0) 
   tree.grid(column=0, row=0, sticky="nsew")
   tree.grid(column=0, row=0, sticky="nsew")
-  scrollbar = ttk.Scrollbar(logs, orient=VERTICAL, command=tree.yview)
+  scrollbar = ttk.Scrollbar(tvFrame, orient=VERTICAL, command=tree.yview)
   scrollbar.grid(column=1, row=0, sticky="ns")
   scrollbar.grid(column=1, row=0, sticky="ns")
+
+  buttonFrame=ttk.Frame(logs, width=640, height=32)
+  editButton=ttk.Button(buttonFrame, text="Edytuj", command=editLog)
+  editButton.grid(column=0, row=0, padx=5, pady=5)
+  deleteButton=ttk.Button(buttonFrame, text="Usuń", command=deleteLog)
+  deleteButton.grid(column=1, row=0, padx=5, pady=5)
+  buttonFrame.grid(column=0, row=1, sticky="w")
+
   root.wait_window(logs)
 
 def fillLoggerData(sign, name, lat, lon):
   root.wait_window(logs)
 
 def fillLoggerData(sign, name, lat, lon):
@@ -183,6 +227,8 @@ def cleanLoginSection():
   loginRstEntry.delete(0, END)
   loginEqEntry.delete(0, END)
   loginChEntry.delete(0, END)
   loginRstEntry.delete(0, END)
   loginEqEntry.delete(0, END)
   loginChEntry.delete(0, END)
+  loginButton.configure(text="Zaloguj", command=saveLogs)
+  loginFrame.configure(text="Zaloguj:")
 
 def cleanLoggerSection():
   csValueEntry.delete(0, END)
 
 def cleanLoggerSection():
   csValueEntry.delete(0, END)
@@ -204,6 +250,18 @@ def saveLogs():
   db.saveLog(logger, sign, name, rst, dt, radio, channel)
   showinfo(title='Mike Lima', message='Łączność zapisana.')
 
   db.saveLog(logger, sign, name, rst, dt, radio, channel)
   showinfo(title='Mike Lima', message='Łączność zapisana.')
 
+def saveEditLogs():
+  rowid=logRowId.get()
+  logger=loginLogger.get()
+  sign=loginSign.get()
+  name=loginName.get()
+  rst=loginRst.get()
+  dt=loginDt.get()
+  eq=loginEq.get()
+  ch=loginCh.get()
+  db.editLog(rowid, logger, sign, name, rst, dt, eq, ch)
+  showinfo(title='Mike Lima', message='Zmiany zostały zapisane.')
+
 
 root = Tk()
 root.title('Mike Lima')
 
 root = Tk()
 root.title('Mike Lima')
@@ -271,7 +329,7 @@ loggerEqCombo.grid(column=1, row=2, padx=5, pady=5)
 loggerLogsButton.grid(column=4, row=2, padx=5, pady=5)
 
 #Frame: Szukaj
 loggerLogsButton.grid(column=4, row=2, padx=5, pady=5)
 
 #Frame: Szukaj
-searchFrame=ttk.LabelFrame(content, text="Szukaj: ", borderwidth=1, relief='groove', width=640, height=32)
+searchFrame=ttk.LabelFrame(content, text="Szukaj:", borderwidth=1, relief='groove', width=640, height=32)
 searchQuery=StringVar()
 
 searchEntryLabel=ttk.Label(searchFrame, text="Imię/(161)ML: ")
 searchQuery=StringVar()
 
 searchEntryLabel=ttk.Label(searchFrame, text="Imię/(161)ML: ")
@@ -293,6 +351,7 @@ loginRst=StringVar()
 loginDt=StringVar()
 loginEq=StringVar()
 loginCh=StringVar()
 loginDt=StringVar()
 loginEq=StringVar()
 loginCh=StringVar()
+logRowId=IntVar()
 
 loginLoggerLabel=ttk.Label(loginFrame, text="Logujący: ")
 loginLoggerEntry=ttk.Entry(loginFrame, textvariable=loginLogger)
 
 loginLoggerLabel=ttk.Label(loginFrame, text="Logujący: ")
 loginLoggerEntry=ttk.Entry(loginFrame, textvariable=loginLogger)