time_recorder_gui_main.py 5.4 KB

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