tile_selector.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # Flexlay - A Generic 2D Game Editor
  2. # Copyright (C) 2014 Ingo Ruhnke <grumbel@gmail.com>
  3. #
  4. # This program is free software: you can redistribute it and/or modify
  5. # it under the terms of the GNU General Public License as published by
  6. # the Free Software Foundation, either version 3 of the License, or
  7. # (at your option) any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. # GNU General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU General Public License
  15. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. from PyQt5.QtCore import Qt
  17. from PyQt5.QtWidgets import (QComboBox, QScrollArea, QTabWidget, QWidget, QVBoxLayout)
  18. from flexlay.gui.smart_tile_selector_widget import SmartTileSelectorWidget
  19. from flexlay.gui.tile_selector_widget import TileSelectorWidget
  20. from flexlay.tileset import Tileset
  21. class TileSelector:
  22. def __init__(self) -> None:
  23. self.tiles: dict[str, list[int]] = {}
  24. self.combobox = QComboBox()
  25. self.scroll_area = QScrollArea()
  26. self.widget = TileSelectorWidget(self.scroll_area.viewport())
  27. self.scroll_area.setWidgetResizable(True)
  28. self.scroll_area.setWidget(self.widget)
  29. self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
  30. # self.second_tab_scroll_area = QScrollArea()
  31. self.smart_widget = SmartTileSelectorWidget(self.scroll_area.viewport())
  32. # self.second_tab_scroll_area.setWidgetResizable(True)
  33. # self.second_tab_scroll_area.setWidget(self.smart_widget)
  34. # self.second_tab_scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
  35. self.box = QTabWidget()
  36. self.layout = QVBoxLayout(self.box)
  37. self.layout.setContentsMargins(0, 0, 0, 0)
  38. self.first_tab = QWidget()
  39. self.first_tab.setLayout(QVBoxLayout(self.first_tab))
  40. self.first_tab.layout().setContentsMargins(0, 0, 0, 0)
  41. self.first_tab.layout().addWidget(self.combobox)
  42. self.first_tab.layout().addWidget(self.scroll_area)
  43. self.second_tab = QWidget()
  44. self.second_tab.setLayout(QVBoxLayout(self.second_tab))
  45. self.second_tab.layout().setContentsMargins(0, 0, 0, 0)
  46. self.second_tab.layout().addWidget(self.smart_widget)
  47. self.box.addTab(self.first_tab, "Tile Selection")
  48. # SmartTiles is a working title, feel free to change.
  49. # TM symbol clearly meant as a joke
  50. self.box.addTab(self.second_tab, "SmartTiles™")
  51. self.combobox.activated.connect(self.on_combobox_activated)
  52. def on_combobox_activated(self, idx: int) -> None:
  53. text = self.combobox.itemData(idx)
  54. tiles = self.tiles[text]
  55. self.widget.set_tiles(tiles)
  56. self.widget.repaint()
  57. self.scroll_area.update()
  58. # self.smart_widget.set_tiles(tiles)
  59. # self.smart_widget.repaint()
  60. # self.smart_widget.update()
  61. # self.second_tab_scroll_area.update()
  62. def set_tileset(self, tileset: Tileset) -> None:
  63. self.widget.set_tileset(tileset)
  64. def get_tileset(self) -> Tileset:
  65. return self.widget.tileset
  66. def set_tiles_noname(self, tiles: list[int]) -> None:
  67. self.widget.set_tiles(tiles)
  68. self.combobox.clear()
  69. self.combobox.hide()
  70. def add_tilegroup(self, name: str, tiles: list[int]) -> None:
  71. self.tiles[name] = tiles
  72. self.combobox.addItem(name, name)
  73. self.combobox.show()
  74. # It's the first tilegroup, so show it
  75. if len(self.tiles) == 1:
  76. self.on_combobox_activated(0)
  77. def clear_tilegroups(self) -> None:
  78. self.tiles = {}
  79. self.combobox.clear()
  80. def get_tiles(self) -> list[int]:
  81. return self.widget.get_tiles()
  82. def set_scale(self, scale: float) -> None:
  83. self.widget.set_scale(scale)
  84. def get_widget(self) -> QTabWidget:
  85. return self.box
  86. # EOF #