コード例 #1
0
ファイル: toolbar.cpp プロジェクト: Sneedd/penv
//----------------------------------------------------------------
bool ToolBar::ReadNode(wxXmlNode* node)
/**
 * \brief Read out a 'toolbar' xml element node.
 * See class description for structure of such an xml node.
 * \param node The 'toolbar' xml element node.
 * \return True on success; false otherwise.
 **/
{
    // Fehler überprüfen
    if (unlikely(node == NULL)) {
        wxLogError(_T("[penv::ToolBar::ReadNode] Cannot load xml node, because parameter argument is NULL."));
        return (false);
    }
    if (unlikely(node->GetType() != wxXML_ELEMENT_NODE)) {
        wxLogError(_T("[penv::ToolBar::ReadNode] Cannot load, xml node must be an element node."));
        return (false);
    }
    if (unlikely(node->GetName() != _T("toolbar"))) {
        wxLogError(_T("[penv::ToolBar::ReadNode] Cannot load, xml element node must have the name \"toolbar\". This element node has the name \"%s\"."), node->GetName().c_str());
        return (false);
    }

    // Einlesen der Attribute der Toolbar
    if (unlikely(!node->HasProp(_T("id")))) {
        wxLogError(_T("[penv::ToolBar::ReadNode] Cannot load, xml element node must have the attribute \"id\". This element node has the name \"%s\"."), node->GetName().c_str());
        return (false);
    }
    m_id = node->GetPropVal(_T("id"), wxEmptyString);
    CorrectToolbarId();
    m_name = node->GetPropVal(_T("name"), wxEmptyString);
    m_visible = PenvHelper::ParseBoolean(node->GetPropVal(_T("visible"), _T("true")));

    // Einlesen der Position und der ToolBar Items
    Environment* env = Environment::Get();
    wxXmlNode* child = node->GetChildren();
    while (child != NULL)
    {
        // Nicht Elemente überspringen
        if (unlikely(child->GetType() != wxXML_ELEMENT_NODE)) {
            child = child->GetNext();
            continue;
        }
        if (child->GetName() == _T("position")) {
            wxString strg = child->GetNodeContent();
            env->GetFrame()->GetManager()->LoadPaneInfo(strg, m_paneinfo);
        }
        if (child->GetName() == _T("toolitem")) {
            ToolBarItem* item = new ToolBarItem();
            if (!item->ReadNode(child)) {
                wxLogWarning(_T("[penv::ToolBar::ReadNode] Toolbar item in toolbar \"%s\" could not be readed. Skipping..."), m_name.c_str());
                delete item;
            } else {
                Add(item);
            }
        }
        child = child->GetNext();
    }
    return (true);
}