void QSanSkillButton::setSkill(const Skill *skill) { Q_ASSERT(skill != NULL); _m_skill = skill; // This is a nasty trick because the server side decides to choose a nasty design // such that sometimes the actual viewas skill is nested inside a trigger skill. // Since the trigger skill is not relevant, we flatten it before we create the button. _m_viewAsSkill = ViewAsSkill::parseViewAsSkill(_m_skill); if (skill == NULL) skill = _m_skill; Q_ASSERT(skill != NULL); Skill::Frequency freq = skill->getFrequency(Self); if (freq == Skill::Frequent || (freq == Skill::NotFrequent && skill->inherits("TriggerSkill") && !skill->inherits("WeaponSkill") && !skill->inherits("ArmorSkill") && _m_viewAsSkill == NULL)) { setStyle(QSanButton::S_STYLE_TOGGLE); setState(freq == Skill::Frequent ? QSanButton::S_STATE_DOWN : QSanButton::S_STATE_UP); _setSkillType(QSanInvokeSkillButton::S_SKILL_FREQUENT); _m_emitActivateSignal = false; _m_emitDeactivateSignal = false; _m_canEnable = true; _m_canDisable = false; } else if (freq == Skill::Limited || freq == Skill::NotFrequent) { setState(QSanButton::S_STATE_DISABLED); if (skill->isAttachedLordSkill()) _setSkillType(QSanInvokeSkillButton::S_SKILL_ATTACHEDLORD); else if (freq == Skill::Limited) _setSkillType(QSanInvokeSkillButton::S_SKILL_ONEOFF_SPELL); else _setSkillType(QSanInvokeSkillButton::S_SKILL_PROACTIVE); setStyle(QSanButton::S_STYLE_TOGGLE); _m_emitDeactivateSignal = true; _m_emitActivateSignal = true; _m_canEnable = true; _m_canDisable = true; } else if (freq == Skill::Wake) { setState(QSanButton::S_STATE_DISABLED); setStyle(QSanButton::S_STYLE_PUSH); _setSkillType(QSanInvokeSkillButton::S_SKILL_AWAKEN); _m_emitActivateSignal = false; _m_emitDeactivateSignal = false; _m_canEnable = true; _m_canDisable = true; } else if (freq == Skill::Compulsory || freq == Skill::NotCompulsory) { // we have to set it in such way for WeiDi setState(QSanButton::S_STATE_UP); setStyle(QSanButton::S_STYLE_PUSH); _setSkillType(QSanInvokeSkillButton::S_SKILL_COMPULSORY); _m_emitActivateSignal = false; _m_emitDeactivateSignal = false; _m_canEnable = true; _m_canDisable = true; } else Q_ASSERT(false); setToolTip(skill->getDescription()); Q_ASSERT((int)_m_skillType <= 5 && _m_state <= 3); _repaint(); }
void CardContainer::fillCards(const QList<int> &card_ids, const QList<int> &disabled_ids) { QList<CardItem *> card_items; if (card_ids.isEmpty() && items.isEmpty()) return; else if (card_ids.isEmpty() && !items.isEmpty()) { card_items = items; items.clear(); } else if (!items.isEmpty()) { retained_stack.push(retained()); items_stack.push(items); foreach (CardItem *item, items) item->hide(); items.clear(); } close_button->hide(); if (card_items.isEmpty()) card_items = _createCards(card_ids); items.append(card_items); _repaint(); int n = items.length(); const int blank = 3; int card_width = G_COMMON_LAYOUT.m_cardNormalWidth; int card_height = G_COMMON_LAYOUT.m_cardNormalHeight; bool one_row = true; int width = (card_width + blank) * items.length() - blank + 50; if (width * 1.5 > RoomSceneInstance->sceneRect().width()) { width = (card_width + blank) * ((items.length() + 1) / 2) - blank + 50; one_row = false; } int first_row = one_row ? items.length() : (items.length() + 1) / 2; for (int i = 0; i < n; i++) { QPointF pos; if (i < first_row) { pos.setX(25 + (card_width + blank) * i); pos.setY(45); } else { if (n % 2 == 1) pos.setX(25 + card_width / 2 + blank / 2 + (card_width + blank) * (i - first_row)); else pos.setX(25 + (card_width + blank) * (i - first_row)); pos.setY(45 + card_height + blank); } CardItem *item = items[i]; item->resetTransform(); item->setPos(pos); item->setHomePos(pos); item->setOpacity(1.0); item->setHomeOpacity(1.0); item->setFlag(QGraphicsItem::ItemIsFocusable); if (disabled_ids.contains(item->getCard()->getEffectiveId())) item->setEnabled(false); item->show(); } }
void QSanSkillButton::setSkill(const Skill* skill) { Q_ASSERT(skill != NULL); _m_skill = skill; // This is a nasty trick because the server side decides to choose a nasty design // such that sometimes the actual viewas skill is nested inside a trigger skill. // Since the trigger skill is not relevant, we flatten it before we create the button. _m_viewAsSkill = _parseViewAsSkill(); if (skill == NULL) skill = _m_skill; Skill::Frequency freq = skill->getFrequency(); if (freq == Skill::Frequent) { setStyle(QSanButton::S_STYLE_TOGGLE); setState(QSanButton::S_STATE_DOWN); _setSkillType(QSanInvokeSkillButton::S_SKILL_FREQUENT); _m_emitActivateSignal = false; _m_emitDeactivateSignal = false; _m_canEnable = true; _m_canDisable = false; } else if (freq == Skill::Limited || freq == Skill::NotFrequent) { setState(QSanButton::S_STATE_DISABLED); if (freq == Skill::Limited) _setSkillType(QSanInvokeSkillButton::S_SKILL_ONEOFF_SPELL); else _setSkillType(QSanInvokeSkillButton::S_SKILL_PROACTIVE); setStyle(QSanButton::S_STYLE_TOGGLE); _m_emitDeactivateSignal = true; _m_emitActivateSignal = true; _m_canEnable = true; _m_canDisable = true; } else if (freq == Skill::Wake) { setState(QSanButton::S_STATE_DISABLED); setStyle(QSanButton::S_STYLE_PUSH); _setSkillType(QSanInvokeSkillButton::S_SKILL_AWAKEN); _m_emitActivateSignal = false; _m_emitDeactivateSignal = false; _m_canEnable = true; _m_canDisable = true; } else if (freq == Skill::Compulsory) { setState(QSanButton::S_STATE_DISABLED); setStyle(QSanButton::S_STYLE_PUSH); _setSkillType(QSanInvokeSkillButton::S_SKILL_COMPULSORY); _m_emitActivateSignal = false; _m_emitDeactivateSignal = false; _m_canEnable = false; _m_canDisable = true; } else Q_ASSERT(false); setToolTip(skill->getDescription()); Q_ASSERT((int)_m_skillType <= 5 && _m_state <= 3); _repaint(); // @todo: add an icon for lord // if(skill->isLordSkill()) // button->setIcon(QIcon("image/system/roles/lord.png")); }