task.hpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #ifndef __TASK_HPP__
  2. #define __TASK_HPP__
  3. #include <QString>
  4. #include <memory>
  5. #include <vector>
  6. enum FileType { VIDEO = 1, IMAGE = 2 };
  7. struct KFileData {
  8. QString name;
  9. FileType type;
  10. QString path;
  11. QByteArray bytes;
  12. };
  13. namespace Scheduler {
  14. namespace Type {
  15. static constexpr const char* TEXT = "Text";
  16. static constexpr const char* FILE = "File";
  17. static constexpr const char* STRINGVECTOR = "StringVector";
  18. static constexpr const char* FILEVECTOR = "FileVector";
  19. static constexpr const char* DATETIME = "DateTime";
  20. static constexpr const char* BOOLEAN = "Boolean";
  21. } // namespace Type
  22. using ArgumentType = const char*;
  23. class TaskArgumentBase {
  24. public:
  25. virtual QString text() const = 0;
  26. };
  27. template <typename T>
  28. class TaskArgument : TaskArgumentBase {
  29. public:
  30. TaskArgument(QString n, ArgumentType t, T _value) {
  31. name = n;
  32. type = t;
  33. value = _value;
  34. }
  35. TaskArgument(TaskArgument&& a) : name(std::move(a.name)), type(std::move(a.type)), value(std::move(a.value)) {}
  36. virtual QString text() const { return name; }
  37. virtual void setValue(T new_value) { value = new_value; }
  38. QString name;
  39. ArgumentType type;
  40. T value;
  41. };
  42. using TaskIterator = std::vector<std::unique_ptr<TaskArgumentBase>>::iterator;
  43. class TaskArguments {
  44. public:
  45. TaskIterator getArgumentIterator(QString name) {
  46. return std::find_if(values.begin(), values.end(), [name](auto argument) { return argument.text() == name; });
  47. }
  48. TaskIterator begin() { return values.begin(); }
  49. TaskIterator end() { return values.end(); }
  50. bool isValidIterator(TaskIterator it) { return it != values.end(); }
  51. void setArguments(std::vector<std::unique_ptr<TaskArgumentBase>>&& new_values) { values = new_values; }
  52. private:
  53. std::vector<std::unique_ptr<TaskArgumentBase>> values;
  54. };
  55. class Task {
  56. public:
  57. virtual void defineTaskArguments() = 0;
  58. virtual bool isReady() = 0;
  59. virtual const TaskArguments getTaskArguments() = 0;
  60. template <typename T>
  61. void setArgument(QString name, T new_value){};
  62. virtual void clear() = 0;
  63. virtual ~Task(){};
  64. };
  65. } // namespace Scheduler
  66. #endif // __TASK_HPP__