generate.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import os
  2. import shutil
  3. from pathlib import Path
  4. HOME = Path.home()
  5. RESOURCES_PATH = os.path.join(HOME, '.qt_material')
  6. ########################################################################
  7. class ResourseGenerator:
  8. """"""
  9. # ----------------------------------------------------------------------
  10. def __init__(self, primary, secondary, disabled, source, parent='theme'):
  11. """Constructor"""
  12. if parent.startswith('/'):
  13. self.index = parent
  14. if parent.startswith('.'):
  15. self.index = parent[1:]
  16. else:
  17. self.index = os.path.join(RESOURCES_PATH, parent)
  18. self.contex = [
  19. (os.path.join(self.index, 'disabled'), disabled),
  20. (os.path.join(self.index, 'primary'), primary),
  21. ]
  22. self.source = source
  23. self.secondary = secondary
  24. for folder, _ in self.contex:
  25. shutil.rmtree(folder, ignore_errors=True)
  26. os.makedirs(folder, exist_ok=True)
  27. # ----------------------------------------------------------------------
  28. def generate(self):
  29. """"""
  30. for icon in os.listdir(self.source):
  31. if not icon.endswith('.svg'):
  32. continue
  33. with open(os.path.join(self.source, icon), 'r') as file_input:
  34. content_original = file_input.read()
  35. for folder, color in self.contex:
  36. new_content = self.replace_color(content_original, color)
  37. new_content = self.replace_color(
  38. new_content, self.secondary, '#ff0000')
  39. file_to_write = os.path.join(folder, icon)
  40. with open(file_to_write, 'w') as file_output:
  41. file_output.write(new_content)
  42. # ----------------------------------------------------------------------
  43. def replace_color(self, content, replace, color='#0000ff'):
  44. """"""
  45. colors = [color] + [''.join(list(color)[:i] +
  46. ['\\\n'] + list(color)[i:]) for i in range(1, 7)]
  47. for c in colors:
  48. content = content.replace(c, replace)
  49. replace = '#ffffff00'
  50. color = '#000000'
  51. colors = [color] + [''.join(list(color)[:i] +
  52. ['\\\n'] + list(color)[i:]) for i in range(1, 7)]
  53. for c in colors:
  54. content = content.replace(c, replace)
  55. return content