time_recorder_gui_main.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import time
  2. from threading import Thread
  3. import PySimpleGUI
  4. from sqlalchemy.orm import sessionmaker
  5. from time_recoder.time_recoder_gui.time_recorder_gui_config import PAUSE_BUTTON_TEXT, START_BUTTON_TEXT, \
  6. STOP_BUTTON_TEXT, \
  7. STOP_BUTTON_INTRODUCTION_TEXT, PAUSE_BUTTON_INTRODUCTION_TEXT, WINDOW_SIZE, SELECT_TASK_INTRODUCTION_TEXT, \
  8. ADD_TASK_INTRODUCTION_TEXT, ADD_TASK_BUTTON_TEXT, NEW_TASK_TEXT_KEY, TASK_TREE_COMBO_NAME, TIMER_KEY
  9. from time_recoder import save_recorded_time_in_table
  10. from time_recoder.time_recoder_gui.time_recorder_task_handler import TaskHandler
  11. from time_recoder.time_recoder_gui.time_recorder_timer import Timer
  12. from time_recoder.time_recorder_database.create_db import ENGINE
  13. Session = sessionmaker(bind=ENGINE)
  14. taskHandler = TaskHandler()
  15. timer = Timer()
  16. def create_layout():
  17. return [
  18. [PySimpleGUI.Text(PAUSE_BUTTON_INTRODUCTION_TEXT)],
  19. [PySimpleGUI.Text(STOP_BUTTON_INTRODUCTION_TEXT)],
  20. [PySimpleGUI.Button(START_BUTTON_TEXT),
  21. PySimpleGUI.Button(PAUSE_BUTTON_TEXT),
  22. PySimpleGUI.Button(STOP_BUTTON_TEXT)],
  23. [PySimpleGUI.Text('', size=(8, 1), font=('Helvetica', 20), justification='center', key=TIMER_KEY)],
  24. [PySimpleGUI.Text(SELECT_TASK_INTRODUCTION_TEXT),
  25. PySimpleGUI.Combo(taskHandler.get_task_tree_name_strings(taskHandler.root_task),
  26. size=(30, 1),
  27. default_value='root',
  28. key=TASK_TREE_COMBO_NAME)],
  29. [PySimpleGUI.Text(ADD_TASK_INTRODUCTION_TEXT),
  30. PySimpleGUI.InputText(size=(15, 1), key=NEW_TASK_TEXT_KEY),
  31. PySimpleGUI.Button(ADD_TASK_BUTTON_TEXT)]
  32. ]
  33. def create_window(layout):
  34. return PySimpleGUI.Window('END_TR300 Arbeitserfassungstool ', layout=layout, size=WINDOW_SIZE)
  35. def window_is_closed(event):
  36. return event == PySimpleGUI.WIN_CLOSED
  37. def stop_button_is_pushed(event):
  38. return event == STOP_BUTTON_TEXT
  39. def start_button_is_pushed(event):
  40. return event == START_BUTTON_TEXT
  41. def pause_button_is_pushed(event):
  42. return event == PAUSE_BUTTON_TEXT
  43. def add_sub_task_button_is_pushed(event):
  44. return event == ADD_TASK_BUTTON_TEXT
  45. def event_loop(window):
  46. while True:
  47. event, values = window.read(timeout=10)
  48. window[TIMER_KEY].update(timer.get_value_string())
  49. if window_is_closed(event):
  50. break
  51. if start_button_is_pushed(event):
  52. print('Start Time')
  53. timer.start()
  54. if pause_button_is_pushed(event):
  55. print('Pause Timer Activated')
  56. timer.pause()
  57. if stop_button_is_pushed(event):
  58. worked_time_in_minutes = timer.get_passed_time() / 60
  59. selected_task_name = window.Element(TASK_TREE_COMBO_NAME).get()
  60. current_task = taskHandler.get_task_by_id(taskHandler.get_task_id(selected_task_name))
  61. current_branch = taskHandler.get_task_branch_as_string(current_task)
  62. try:
  63. save_recorded_time_in_table.save_recorded_time_in_table(worked_time_in_minutes, current_branch)
  64. timer.stop()
  65. print('Timer stopped recording for task: ' + selected_task_name.strip())
  66. except PermissionError:
  67. print("Error: couldn't write into table file. Please close any program that uses the table" +
  68. " and press 'Stop Timer' again")
  69. if add_sub_task_button_is_pushed(event):
  70. sub_task_name = window.Element(NEW_TASK_TEXT_KEY).get()
  71. sub_task_name_already_in_use = sub_task_name in taskHandler.get_task_tree_name_strings(
  72. taskHandler.root_task)
  73. if sub_task_name_already_in_use:
  74. print('Error: Task name ' + sub_task_name + ' already used, please enter another one')
  75. elif sub_task_name:
  76. parent_task_name = window.Element(TASK_TREE_COMBO_NAME).get()
  77. parent_task_id = taskHandler.get_task_id(parent_task_name)
  78. print('Adding new Sub-Task: ' + sub_task_name + ' to ' + parent_task_name.strip())
  79. taskHandler.add_task(parent_task_id, sub_task_name)
  80. window.Element(TASK_TREE_COMBO_NAME).update(
  81. values=taskHandler.get_task_tree_name_strings(taskHandler.root_task))
  82. def gui_main():
  83. layout = create_layout()
  84. window = create_window(layout)
  85. event_loop(window)
  86. window.close()
  87. if __name__ == '__main__':
  88. gui_main()
  89. taskHandler.close_session()