void Textual::remove(const Index& index) { DOM::HTMLDocument document = htmlDocument(); if(index.atVariationStart()) { DOM::Element vc = document.getElementById("vc_"+index); if(!vc.isNull()) { /* remove a number? */ DOM::Element comm(vc.previousSibling()); DOM::Element mvnum(vc.nextSibling()); if(!mvnum.isNull() && mvnum.getAttribute("id").string().startsWith("nm_") && !comm.isNull() && comm.getAttribute("id").string().startsWith("cm_")) { DOM::Element move(mvnum.nextSibling()); int mv_num = move.getAttribute("mvnum").string().toInt(); int sub_mv_num = move.getAttribute("submvnum").string().toInt(); if(!(mv_num>0 && (sub_mv_num==0 && (mv_num%2 || m_layout_style)))) mvnum.parentNode().removeChild(mvnum); } vc.parentNode().removeChild(vc); } } else { DOM::Element rm = document.getElementById("nm_"+index); if(rm.isNull()) rm = document.getElementById("mv_"+index); if(!rm.isNull()) clear_from(rm); } if(m_curr_selected >= index) m_curr_selected = Index(-1); }
void Textual::select(const Index& index) { if(index == m_curr_selected) return; DOM::HTMLDocument document = htmlDocument(); DOM::Element currs = document.getElementById("mv_"+m_curr_selected); DOM::Element news = document.getElementById("mv_"+index); if(!currs.isNull()) currs.style().removeProperty("background-color"); if(!news.isNull()) news.style().setProperty("background-color", "#C0E0FF", "important"); m_curr_selected = index; }
void MetabarFunctions::toggle(DOM::DOMString item) { DOM::HTMLDocument doc = m_html->htmlDocument(); DOM::HTMLElement node = static_cast<DOM::HTMLElement>(doc.getElementById(item)); if(!node.isNull()) { DOM::NodeList children = node.childNodes(); DOM::CSSStyleDeclaration style = node.style(); DOM::DOMString expanded = node.getAttribute("expanded"); bool isExpanded = expanded == "true"; int height = 0; if(!isExpanded) { height = getHeight(node); } DOM::DOMString att = isExpanded ? "false" : "true"; node.setAttribute("expanded", att); KConfig config("metabarrc"); config.setGroup("General"); if(config.readBoolEntry("AnimateResize", false)) { resizeMap[item.string()] = height; if(!timer->isActive()) { timer->start(RESIZE_SPEED); } } else { style.setProperty("height", QString("%1px").arg(height), CSS_PRIORITY); } } }
void MetabarFunctions::hide(DOM::DOMString item) { DOM::HTMLDocument doc = m_html->htmlDocument(); DOM::HTMLElement node = static_cast<DOM::HTMLElement>(doc.getElementById(item)); if(!node.isNull()) { DOM::HTMLElement parent = static_cast<DOM::HTMLElement>(node.parentNode()); DOM::CSSStyleDeclaration style = parent.style(); style.setProperty("display", "none", CSS_PRIORITY); } }
void Textual::setComment(const Index& index, const QString& comment) { DOM::HTMLDocument document = htmlDocument(); DOM::Element this_cm = document.getElementById("cm_"+index); if(this_cm.isNull()) { kDebug() << " --> Error in Textual::setComment, invalid index!"; return; } clear_node(this_cm); if(!comment.isEmpty()) { this_cm.appendChild(document.createTextNode(comment)); this_cm.appendChild(document.createTextNode(QString(" "))); } }
void MetabarFunctions::animate() { QMap<QString, int>::Iterator it; for(it = resizeMap.begin(); it != resizeMap.end(); ++it ) { QString id = it.key(); int height = it.data(); int currentHeight = 0; DOM::HTMLDocument doc = m_html->htmlDocument(); DOM::HTMLElement node = static_cast<DOM::HTMLElement>(doc.getElementById(id)); DOM::CSSStyleDeclaration style = node.style(); QString currentHeightString = style.getPropertyValue("height").string(); if(currentHeightString.endsWith("px")) { currentHeight = currentHeightString.left(currentHeightString.length() - 2).toInt(); } if(currentHeight == height) { resizeMap.remove(id); if(resizeMap.isEmpty()) { timer->stop(); } } else { int diff = kAbs(currentHeight - height); int changeValue = RESIZE_STEP; if(diff < RESIZE_STEP) { changeValue = diff; } int change = currentHeight < height ? changeValue : -changeValue; style.setProperty("height", QString("%1px").arg(currentHeight + change), CSS_PRIORITY); doc.updateRendering(); } } }
void Textual::setMove(const Index& index, int turn, const DecoratedMove& move, const QString& comment) { //kDebug() << "i= " << index; DOM::HTMLDocument document = htmlDocument(); QString istr = (QString)index; DOM::Element this_mv = document.getElementById("mv_"+istr); DOM::Element this_cm = document.getElementById("cm_"+istr); if(!this_mv.isNull() && !this_cm.isNull()) { clear_node(this_mv); for(int i=0;i<move.size();i++) { DOM::Text t = document.createTextNode(move[i].m_string); this_mv.appendChild(t); } clear_node(this_cm); if(!comment.isEmpty()) { this_cm.appendChild(document.createTextNode(comment)); this_cm.appendChild(document.createTextNode(QString(" "))); } return; } DOM::Element parent; DOM::Element prev_mv; DOM::Element prev_cm; if(index != Index(0)) { prev_cm = document.getElementById("cm_"+index.prev()); prev_mv = document.getElementById("mv_"+index.prev()); if(prev_cm.isNull() || prev_mv.isNull()) { kDebug() << " --> Error in Textual::setMove, no previous move!"; return; } } int mv_num = 0; int sub_mv_num = 0; if(!prev_mv.isNull()) { int prev_turn = prev_mv.getAttribute("turn").string().toInt(); int prev_mv_num = prev_mv.getAttribute("mvnum").string().toInt(); int prev_sub_mv_num = prev_mv.getAttribute("submvnum").string().toInt(); if(prev_turn != turn) mv_num = prev_mv_num+1; else { mv_num = prev_mv_num; sub_mv_num = prev_sub_mv_num+1; } } if(!index.nested.size()) { parent = document.body(); if(parent.isNull()) { kDebug() << "QUEEEEEEEEE!!!!!!!"; return; } } else if(index.atVariationStart()) { QString var_id = "vc_" + istr; DOM::Element add_before = prev_cm.nextSibling(); while(!add_before.isNull()) { QString id = add_before.getAttribute("id").string(); if(id.startsWith("vc_") && id < var_id) add_before = add_before.nextSibling(); else break; } DOM::Element var_el = document.createElement("span"); var_el.setAttribute("id", var_id); var_el.setAttribute("class", "variation"); var_el.appendChild(document.createTextNode("[ ")); parent = document.createElement("span"); parent.setAttribute("id", "vr_" + istr); DOM::Element vk_el = document.createElement("span"); vk_el.setAttribute("id", "vk_" + istr); vk_el.setAttribute("class", "comment"); //vk_el.setContentEditable(true); parent.appendChild(vk_el); var_el.appendChild(parent); var_el.appendChild(document.createTextNode("] ")); prev_cm.parentNode().insertBefore(var_el, add_before); if(!add_before.isNull() && add_before.getAttribute("id").string().startsWith("mv_")) { int mv_num = add_before.getAttribute("mvnum").string().toInt(); int sub_mv_num = add_before.getAttribute("submvnum").string().toInt(); QString num_str; if(m_layout_style == 0) { if(mv_num%2) num_str = QString("%1. ").arg((mv_num+1)/2); else num_str = QString("%1. ... ").arg((mv_num+2)/2); } else { if(sub_mv_num==0) num_str = QString("%1. ").arg(mv_num); else num_str = QString("%1+%2. ").arg(mv_num).arg(sub_mv_num); } DOM::Element num_el = document.createElement("a"); num_el.setAttribute("class", "mvnum"); num_el.setAttribute("id", "nm_"+istr); num_el.appendChild(document.createTextNode(num_str)); prev_cm.parentNode().insertBefore(num_el, add_before); } } else { Index pi = index.prev(index.nested.back().num_moves); parent = document.getElementById("vr_"+pi); if(parent.isNull()) { kDebug() << " --> Error in Textual::setMove, no variation?!?!?"; return; } } if(mv_num>0 && ((sub_mv_num==0 && (mv_num%2 || m_layout_style)) || parent.lastChild() != prev_cm) ) { QString num_str; if(m_layout_style == 0) { if(mv_num%2) num_str = QString("%1. ").arg((mv_num+1)/2); else num_str = QString("%1. ... ").arg((mv_num+2)/2); } else { if(sub_mv_num==0) num_str = QString("%1. ").arg(mv_num); else num_str = QString("%1+%2. ").arg(mv_num).arg(sub_mv_num); } DOM::Element num_el = document.createElement("a"); num_el.setAttribute("class", "mvnum"); num_el.setAttribute("id", "nm_"+istr); num_el.appendChild(document.createTextNode(num_str)); parent.appendChild(num_el); } DOM::Element mv_el = document.createElement("a"); mv_el.setAttribute("id", "mv_"+istr); mv_el.setAttribute("href", "index://"+istr); mv_el.setAttribute("class", "move"); mv_el.setAttribute("turn", QString::number(turn)); mv_el.setAttribute("mvnum", QString::number(mv_num)); mv_el.setAttribute("submvnum", QString::number(sub_mv_num)); for(int i=0;i<move.size();i++) { if(move[i].m_type == MovePart::Figurine) { ::Loader::Glyph g = m_loader.getValue< ::Loader::Glyph>(move[i].m_string); DOM::Element el = document.createElement("span"); #if 1 kDebug() << "size = " << QString("%1%").arg(g.m_font.pointSize()*100/12); el.style().setProperty("font-size", QString("%1%").arg(g.m_font.pointSize()*100/12), "important"); el.style().setProperty("line-height", QString("%1%").arg(g.m_font.pointSize()*100/12), "important"); #endif kDebug() << "familiy = " << g.m_font.family(); el.style().setProperty("font-weight", "normal", "important"); el.style().setProperty("font-family", g.m_font.family(), "important"); DOM::Text t = document.createTextNode(QString(g.m_char)); el.appendChild(t); mv_el.appendChild(el); } else { DOM::Text t = document.createTextNode(move[i].m_string); mv_el.appendChild(t); } } parent.appendChild(mv_el); parent.appendChild(document.createTextNode(QString(" "))); DOM::Element cm_el = document.createElement("span"); cm_el.setAttribute("id", "cm_"+istr); cm_el.setAttribute("class", "comment"); if(!comment.isEmpty()) { cm_el.appendChild(document.createTextNode(comment)); cm_el.appendChild(document.createTextNode(QString(" "))); } //cm_el.setContentEditable(true); parent.appendChild(cm_el); }