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")); }
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(); }