tool_panel.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "tool_panel.h"
  2. #include <QFont>
  3. #include <QVBoxLayout>
  4. namespace MapEditor {
  5. ToolPanel::ToolPanel(QWidget *parent) : QWidget(parent) { setupUI(); }
  6. void ToolPanel::setupUI() {
  7. auto *layout = new QVBoxLayout(this);
  8. layout->setContentsMargins(4, 4, 4, 4);
  9. m_toolList = new QListWidget(this);
  10. m_toolList->setIconSize(QSize(32, 32));
  11. m_toolList->setSpacing(4);
  12. m_toolList->setDragEnabled(true);
  13. m_toolList->setDragDropMode(QAbstractItemView::DragOnly);
  14. QFont font = m_toolList->font();
  15. font.setPointSize(16);
  16. m_toolList->setFont(font);
  17. addToolItem("Select", "⬚", ToolType::Select);
  18. addToolItem("Hill", "⛰", ToolType::Hill);
  19. addToolItem("Mountain", "🏔", ToolType::Mountain);
  20. addToolItem("River", "〰", ToolType::River);
  21. addToolItem("Road", "═", ToolType::Road);
  22. addToolItem("Bridge", "🌉", ToolType::Bridge);
  23. addToolItem("Firecamp", "🔥", ToolType::Firecamp);
  24. addToolItem("Barracks", "🏛", ToolType::Barracks);
  25. addToolItem("Village", "🏘", ToolType::Village);
  26. addToolItem("Eraser", "🗑", ToolType::Eraser);
  27. connect(m_toolList, &QListWidget::itemClicked, this,
  28. &ToolPanel::onItemClicked);
  29. layout->addWidget(m_toolList);
  30. setMinimumWidth(120);
  31. setMaximumWidth(180);
  32. }
  33. void ToolPanel::addToolItem(const QString &name, const QString &iconChar,
  34. ToolType tool) {
  35. auto *item = new QListWidgetItem(iconChar + " " + name);
  36. item->setData(Qt::UserRole, static_cast<int>(tool));
  37. item->setToolTip(name);
  38. m_toolList->addItem(item);
  39. }
  40. void ToolPanel::onItemClicked(QListWidgetItem *item) {
  41. m_currentTool = static_cast<ToolType>(item->data(Qt::UserRole).toInt());
  42. emit toolSelected(m_currentTool);
  43. }
  44. void ToolPanel::clearSelection() {
  45. m_currentTool = ToolType::Select;
  46. m_toolList->setCurrentRow(0);
  47. emit toolSelected(m_currentTool);
  48. }
  49. } // namespace MapEditor