time_recorder_gui_main.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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 = 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. if sub_task_name_already_in_use:
  82. print('Error: Task name ' + sub_task_name + ' already used, please enter another one')
  83. elif sub_task_name:
  84. parent_task_name = window.Element(TASK_TREE_COMBO_NAME).get()
  85. if parent_task_name:
  86. parent_task_id = taskHandler.get_task_id(parent_task_name)
  87. print('Adding new Sub-Task: ' + sub_task_name + ' to ' + parent_task_name.strip())
  88. taskHandler.add_task(parent_task_id, sub_task_name)
  89. window.Element(TASK_TREE_COMBO_NAME).update(
  90. values=taskHandler.get_task_tree_name_strings(taskHandler.root_task))
  91. else:
  92. print('Please select a Task before adding a subtask')
  93. def gui_main():
  94. layout = create_layout()
  95. window = create_window(layout)
  96. event_loop(window)
  97. window.close()
  98. if __name__ == '__main__':
  99. gui_main()
  100. taskHandler.close_session()