⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlres.cpp

📁 linux下的电骡下载程序源码 包含emule协议的应用。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                                         wxART_MAKE_CLIENT_ID_FROM_STR(scl),                                         size);            if ( stockArt.Ok() )                return stockArt;        }    }    /* ...or load the bitmap from file: */    wxString name = GetParamValue(param);    if (name.IsEmpty()) return wxNullBitmap;#if wxUSE_FILESYSTEM    wxFSFile *fsfile = GetCurFileSystem().OpenFile(name);    if (fsfile == NULL)    {        wxLogError(_("XRC resource: Cannot create bitmap from '%s'."), param.c_str());        return wxNullBitmap;    }    wxImage img(*(fsfile->GetStream()));    delete fsfile;#else    wxImage img(GetParamValue(wxT("bitmap")));#endif    if (!img.Ok())    {        wxLogError(_("XRC resource: Cannot create bitmap from '%s'."), param.c_str());        return wxNullBitmap;    }    if (!(size == wxDefaultSize)) img.Rescale(size.x, size.y);    return wxBitmap(img);}wxIcon wxXmlResourceHandler::GetIcon(const wxString& param,                                     const wxArtClient& defaultArtClient,                                     wxSize size){    wxIcon icon;    icon.CopyFromBitmap(GetBitmap(param, defaultArtClient, size));    return icon;}wxXmlNode *wxXmlResourceHandler::GetParamNode(const wxString& param){    wxCHECK_MSG(m_node, NULL, wxT("You can't access handler data before it was initialized!"));    wxXmlNode *n = m_node->GetChildren();    while (n)    {        if (n->GetType() == wxXML_ELEMENT_NODE && n->GetName() == param)            return n;        n = n->GetNext();    }    return NULL;}wxString wxXmlResourceHandler::GetNodeContent(wxXmlNode *node){    wxXmlNode *n = node;    if (n == NULL) return wxEmptyString;    n = n->GetChildren();    while (n)    {        if (n->GetType() == wxXML_TEXT_NODE ||            n->GetType() == wxXML_CDATA_SECTION_NODE)            return n->GetContent();        n = n->GetNext();    }    return wxEmptyString;}wxString wxXmlResourceHandler::GetParamValue(const wxString& param){    if (param.IsEmpty())        return GetNodeContent(m_node);    else        return GetNodeContent(GetParamNode(param));}wxSize wxXmlResourceHandler::GetSize(const wxString& param){    wxString s = GetParamValue(param);    if (s.IsEmpty()) s = wxT("-1,-1");    bool is_dlg;    long sx, sy;    is_dlg = s[s.Length()-1] == wxT('d');    if (is_dlg) s.RemoveLast();    if (!s.BeforeFirst(wxT(',')).ToLong(&sx) ||        !s.AfterLast(wxT(',')).ToLong(&sy))    {        wxLogError(_("Cannot parse coordinates from '%s'."), s.c_str());        return wxDefaultSize;    }    if (is_dlg)    {        if (m_instanceAsWindow)            return wxDLG_UNIT(m_instanceAsWindow, wxSize(sx, sy));        else if (m_parentAsWindow)            return wxDLG_UNIT(m_parentAsWindow, wxSize(sx, sy));        else        {            wxLogError(_("Cannot convert dialog units: dialog unknown."));            return wxDefaultSize;        }    }    else return wxSize(sx, sy);}wxPoint wxXmlResourceHandler::GetPosition(const wxString& param){    wxSize sz = GetSize(param);    return wxPoint(sz.x, sz.y);}wxCoord wxXmlResourceHandler::GetDimension(const wxString& param, wxCoord defaultv){    wxString s = GetParamValue(param);    if (s.IsEmpty()) return defaultv;    bool is_dlg;    long sx;    is_dlg = s[s.Length()-1] == wxT('d');    if (is_dlg) s.RemoveLast();    if (!s.ToLong(&sx))    {        wxLogError(_("Cannot parse dimension from '%s'."), s.c_str());        return defaultv;    }    if (is_dlg)    {        if (m_instanceAsWindow)            return wxDLG_UNIT(m_instanceAsWindow, wxSize(sx, 0)).x;        else if (m_parentAsWindow)            return wxDLG_UNIT(m_parentAsWindow, wxSize(sx, 0)).x;        else        {            wxLogError(_("Cannot convert dialog units: dialog unknown."));            return defaultv;        }    }    else return sx;}wxFont wxXmlResourceHandler::GetFont(const wxString& param){    wxXmlNode *font_node = GetParamNode(param);    if (font_node == NULL)    {        wxLogError(_("Cannot find font node '%s'."), param.c_str());        return wxNullFont;    }    wxXmlNode *oldnode = m_node;    m_node = font_node;    long size = GetLong(wxT("size"), 12);    wxString style = GetParamValue(wxT("style"));    wxString weight = GetParamValue(wxT("weight"));    int istyle = wxNORMAL, iweight = wxNORMAL;    if (style == wxT("italic")) istyle = wxITALIC;    else if (style == wxT("slant")) istyle = wxSLANT;    if (weight == wxT("bold")) iweight = wxBOLD;    else if (weight == wxT("light")) iweight = wxLIGHT;    wxString family = GetParamValue(wxT("family"));    int ifamily = wxDEFAULT;         if (family == wxT("decorative")) ifamily = wxDECORATIVE;    else if (family == wxT("roman")) ifamily = wxROMAN;    else if (family == wxT("script")) ifamily = wxSCRIPT;    else if (family == wxT("swiss")) ifamily = wxSWISS;    else if (family == wxT("modern")) ifamily = wxMODERN;    bool underlined = GetBool(wxT("underlined"), FALSE);    wxString encoding = GetParamValue(wxT("encoding"));    wxFontMapper mapper;    wxFontEncoding enc = wxFONTENCODING_DEFAULT;    if (!encoding.IsEmpty())        enc = mapper.CharsetToEncoding(encoding);    if (enc == wxFONTENCODING_SYSTEM)        enc = wxFONTENCODING_DEFAULT;    wxString faces = GetParamValue(wxT("face"));    wxString facename = wxEmptyString;    wxFontEnumerator enu;    enu.EnumerateFacenames();    wxStringTokenizer tk(faces, wxT(","));    while (tk.HasMoreTokens())    {        int index = enu.GetFacenames()->Index(tk.GetNextToken(), FALSE);        if (index != wxNOT_FOUND)        {            facename = (*enu.GetFacenames())[index];            break;        }    }    m_node = oldnode;    wxFont font(size, ifamily, istyle, iweight, underlined, facename, enc);    return font;}void wxXmlResourceHandler::SetupWindow(wxWindow *wnd){    //FIXME : add cursor    if (HasParam(wxT("exstyle")))        wnd->SetExtraStyle(GetStyle(wxT("exstyle")));    if (HasParam(wxT("bg")))        wnd->SetBackgroundColour(GetColour(wxT("bg")));    if (HasParam(wxT("fg")))        wnd->SetForegroundColour(GetColour(wxT("fg")));    if (GetBool(wxT("enabled"), 1) == 0)        wnd->Enable(FALSE);    if (GetBool(wxT("focused"), 0) == 1)        wnd->SetFocus();    if (GetBool(wxT("hidden"), 0) == 1)        wnd->Show(FALSE);#if wxUSE_TOOLTIPS    if (HasParam(wxT("tooltip")))        wnd->SetToolTip(GetText(wxT("tooltip")));#endif    if (HasParam(wxT("font")))        wnd->SetFont(GetFont());}void wxXmlResourceHandler::CreateChildren(wxObject *parent, bool this_hnd_only){    wxXmlNode *n = m_node->GetChildren();    while (n)    {        if (n->GetType() == wxXML_ELEMENT_NODE &&           (n->GetName() == wxT("object") || n->GetName() == wxT("object_ref")))        {            m_resource->CreateResFromNode2(n, parent, NULL,                                           this_hnd_only ? this : NULL);        }        n = n->GetNext();    }}void wxXmlResourceHandler::CreateChildrenPrivately(wxObject *parent, wxXmlNode *rootnode){    wxXmlNode *root;    if (rootnode == NULL) root = m_node; else root = rootnode;    wxXmlNode *n = root->GetChildren();    while (n)    {        if (n->GetType() == wxXML_ELEMENT_NODE && CanHandle(n))        {            CreateResource(n, parent, NULL);        }        n = n->GetNext();    }}// --------------- XRCID implementation -----------------------------#define XRCID_TABLE_SIZE     1024struct XRCID_record{    int id;    wxChar *key;    XRCID_record *next;};static XRCID_record *XRCID_Records[XRCID_TABLE_SIZE] = {NULL};static int XRCID_Lookup(const wxChar *str_id, int value_if_not_found = -2){    static int XRCID_LastID = wxID_HIGHEST;    int index = 0;    for (const wxChar *c = str_id; *c != wxT('\0'); c++) index += (int)*c;    index %= XRCID_TABLE_SIZE;    XRCID_record *oldrec = NULL;    int matchcnt = 0;    for (XRCID_record *rec = XRCID_Records[index]; rec; rec = rec->next)    {        if (wxStrcmp(rec->key, str_id) == 0)        {            return rec->id;        }        matchcnt++;        oldrec = rec;    }    XRCID_record **rec_var = (oldrec == NULL) ?                              &XRCID_Records[index] : &oldrec->next;    *rec_var = new XRCID_record;    (*rec_var)->key = wxStrdup(str_id);    (*rec_var)->next = NULL;    wxChar *end;    if (value_if_not_found != -2)        (*rec_var)->id = value_if_not_found;    else    {        int asint = wxStrtol(str_id, &end, 10);        if (*str_id && *end == 0)        {            // if str_id was integer, keep it verbosely:            (*rec_var)->id = asint;        }        else        {            (*rec_var)->id = ++XRCID_LastID;        }    }    return (*rec_var)->id;}/*static*/ int wxXmlResource::GetXRCID(const wxChar *str_id){    return XRCID_Lookup(str_id);}static void CleanXRCID_Record(XRCID_record *rec){    if (rec)    {        CleanXRCID_Record(rec->next);        free(rec->key);        delete rec;    }}static void CleanXRCID_Records(){    for (int i = 0; i < XRCID_TABLE_SIZE; i++)    {        CleanXRCID_Record(XRCID_Records[i]);        XRCID_Records[i] = NULL;    }}static void AddStdXRCID_Records(){#define stdID(id) XRCID_Lookup(wxT(#id), id)    stdID(-1);    stdID(wxID_OPEN); stdID(wxID_CLOSE); stdID(wxID_NEW);    stdID(wxID_SAVE); stdID(wxID_SAVEAS); stdID(wxID_REVERT);    stdID(wxID_EXIT); stdID(wxID_UNDO); stdID(wxID_REDO);    stdID(wxID_HELP); stdID(wxID_PRINT); stdID(wxID_PRINT_SETUP);    stdID(wxID_PREVIEW); stdID(wxID_ABOUT); stdID(wxID_HELP_CONTENTS);    stdID(wxID_HELP_COMMANDS); stdID(wxID_HELP_PROCEDURES);    stdID(wxID_CUT); stdID(wxID_COPY); stdID(wxID_PASTE);    stdID(wxID_CLEAR); stdID(wxID_FIND); stdID(wxID_DUPLICATE);    stdID(wxID_SELECTALL); stdID(wxID_OK); stdID(wxID_CANCEL);    stdID(wxID_APPLY); stdID(wxID_YES); stdID(wxID_NO);    stdID(wxID_STATIC); stdID(wxID_FORWARD); stdID(wxID_BACKWARD);    stdID(wxID_DEFAULT); stdID(wxID_MORE); stdID(wxID_SETUP);    stdID(wxID_RESET); stdID(wxID_HELP_CONTEXT);    stdID(wxID_CLOSE_ALL);#undef stdID}// --------------- module and globals -----------------------------class wxXmlResourceModule: public wxModule{DECLARE_DYNAMIC_CLASS(wxXmlResourceModule)public:    wxXmlResourceModule() {}    bool OnInit()    {        AddStdXRCID_Records();        wxXmlResource::AddSubclassFactory(new wxXmlSubclassFactoryCXX);        return TRUE;    }    void OnExit()    {        delete wxXmlResource::Set(NULL);        CleanXRCID_Records();    }};IMPLEMENT_DYNAMIC_CLASS(wxXmlResourceModule, wxModule)// When wxXml is loaded dynamically after the application is already running// then the built-in module system won't pick this one up.  Add it manually.void wxXmlInitResourceModule(){    wxModule* module = new wxXmlResourceModule;    module->Init();    wxModule::RegisterModule(module);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -