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

📄 resource.cpp

📁 Wxpython Implemented on Windows CE, Source code
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    }
    else if (itemType == wxString(wxT("wxText")) || itemType == wxString(wxT("wxTextCtrl")) || itemType == wxString(wxT("wxMultiText")))
    {
        control = new wxTextCtrl(parent, id, childResource->GetValue4(), pos, size,
            childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
    }
    else if (itemType == wxString(wxT("wxCheckBox")))
    {
        control = new wxCheckBox(parent, id, childResource->GetTitle(), pos, size,
            childResource->GetStyle(), wxDefaultValidator, childResource->GetName());

        ((wxCheckBox *)control)->SetValue((childResource->GetValue1() != 0));
    }
#if wxUSE_GAUGE
    else if (itemType == wxString(wxT("wxGauge")))
    {
        control = new wxGauge(parent, id, (int)childResource->GetValue2(), pos, size,
            childResource->GetStyle(), wxDefaultValidator, childResource->GetName());

        ((wxGauge *)control)->SetValue((int)childResource->GetValue1());
    }
#endif
#if wxUSE_RADIOBTN
    else if (itemType == wxString(wxT("wxRadioButton")))
    {
        control = new wxRadioButton(parent, id, childResource->GetTitle(), // (int)childResource->GetValue1(),
            pos, size,
            childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
    }
#endif
#if wxUSE_SCROLLBAR
    else if (itemType == wxString(wxT("wxScrollBar")))
    {
        control = new wxScrollBar(parent, id, pos, size,
            childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
            /*
            ((wxScrollBar *)control)->SetValue((int)childResource->GetValue1());
            ((wxScrollBar *)control)->SetPageSize((int)childResource->GetValue2());
            ((wxScrollBar *)control)->SetObjectLength((int)childResource->GetValue3());
            ((wxScrollBar *)control)->SetViewLength((int)(long)childResource->GetValue5());
        */
        ((wxScrollBar *)control)->SetScrollbar((int)childResource->GetValue1(),(int)childResource->GetValue2(),
            (int)childResource->GetValue3(),(int)(long)childResource->GetValue5(),false);

    }
#endif
    else if (itemType == wxString(wxT("wxSlider")))
    {
        control = new wxSlider(parent, id, (int)childResource->GetValue1(),
            (int)childResource->GetValue2(), (int)childResource->GetValue3(), pos, size,
            childResource->GetStyle(), wxDefaultValidator, childResource->GetName());
    }
    else if (itemType == wxString(wxT("wxGroupBox")) || itemType == wxString(wxT("wxStaticBox")))
    {
        control = new wxStaticBox(parent, id, childResource->GetTitle(), pos, size,
            childResource->GetStyle(), childResource->GetName());
    }
    else if (itemType == wxString(wxT("wxListBox")))
    {
        wxStringList& stringList = childResource->GetStringValues();
        wxString *strings = (wxString *) NULL;
        int noStrings = 0;
        if (stringList.GetCount() > 0)
        {
            noStrings = stringList.GetCount();
            strings = new wxString[noStrings];
            wxStringListNode *node = stringList.GetFirst();
            int i = 0;
            while (node)
            {
                strings[i] = (wxChar *)node->GetData();
                i ++;
                node = node->GetNext();
            }
        }
        control = new wxListBox(parent, id, pos, size,
            noStrings, strings, childResource->GetStyle(), wxDefaultValidator, childResource->GetName());

        if (strings)
            delete[] strings;
    }
    else if (itemType == wxString(wxT("wxChoice")))
    {
        wxStringList& stringList = childResource->GetStringValues();
        wxString *strings = (wxString *) NULL;
        int noStrings = 0;
        if (stringList.GetCount() > 0)
        {
            noStrings = stringList.GetCount();
            strings = new wxString[noStrings];
            wxStringListNode *node = stringList.GetFirst();
            int i = 0;
            while (node)
            {
                strings[i] = (wxChar *)node->GetData();
                i ++;
                node = node->GetNext();
            }
        }
        control = new wxChoice(parent, id, pos, size,
            noStrings, strings, childResource->GetStyle(), wxDefaultValidator, childResource->GetName());

        if (strings)
            delete[] strings;
    }
#if wxUSE_COMBOBOX
    else if (itemType == wxString(wxT("wxComboBox")))
    {
        wxStringList& stringList = childResource->GetStringValues();
        wxString *strings = (wxString *) NULL;
        int noStrings = 0;
        if (stringList.GetCount() > 0)
        {
            noStrings = stringList.GetCount();
            strings = new wxString[noStrings];
            wxStringListNode *node = stringList.GetFirst();
            int i = 0;
            while (node)
            {
                strings[i] = (wxChar *)node->GetData();
                i ++;
                node = node->GetNext();
            }
        }
        control = new wxComboBox(parent, id, childResource->GetValue4(), pos, size,
            noStrings, strings, childResource->GetStyle(), wxDefaultValidator, childResource->GetName());

        if (strings)
            delete[] strings;
    }
#endif
    else if (itemType == wxString(wxT("wxRadioBox")))
    {
        wxStringList& stringList = childResource->GetStringValues();
        wxString *strings = (wxString *) NULL;
        int noStrings = 0;
        if (stringList.GetCount() > 0)
        {
            noStrings = stringList.GetCount();
            strings = new wxString[noStrings];
            wxStringListNode *node = stringList.GetFirst();
            int i = 0;
            while (node)
            {
                strings[i] = (wxChar *)node->GetData();
                i ++;
                node = node->GetNext();
            }
        }
        control = new wxRadioBox(parent, (wxWindowID) id, wxString(childResource->GetTitle()), pos, size,
            noStrings, strings, (int)childResource->GetValue1(), childResource->GetStyle(), wxDefaultValidator,
            childResource->GetName());

        if (strings)
            delete[] strings;
    }

    if ((parentResource->GetResourceStyle() & wxRESOURCE_USE_DEFAULTS) != 0)
    {
        // Don't set font; will be inherited from parent.
    }
    else
    {
        if (control && childResource->GetFont().Ok())
        {
            control->SetFont(childResource->GetFont());

#ifdef __WXMSW__
            // Force the layout algorithm since the size changes the layout
            if (control->IsKindOf(CLASSINFO(wxRadioBox)))
            {
                control->SetSize(wxDefaultCoord, wxDefaultCoord, wxDefaultCoord, wxDefaultCoord, wxSIZE_AUTO_WIDTH|wxSIZE_AUTO_HEIGHT);
            }
#endif
        }
    }
    return control;
}

/*
* Interpret database as a series of resources
*/

bool wxResourceInterpretResources(wxResourceTable& table, wxExprDatabase& db)
{
    wxNode *node = db.GetFirst();
    while (node)
    {
        wxExpr *clause = (wxExpr *)node->GetData();
        wxString functor(clause->Functor());

        wxItemResource *item = (wxItemResource *) NULL;
        if (functor == wxT("dialog"))
            item = wxResourceInterpretDialog(table, clause);
        else if (functor == wxT("panel"))
            item = wxResourceInterpretDialog(table, clause, true);
        else if (functor == wxT("menubar"))
            item = wxResourceInterpretMenuBar(table, clause);
        else if (functor == wxT("menu"))
            item = wxResourceInterpretMenu(table, clause);
        else if (functor == wxT("string"))
            item = wxResourceInterpretString(table, clause);
        else if (functor == wxT("bitmap"))
            item = wxResourceInterpretBitmap(table, clause);
        else if (functor == wxT("icon"))
            item = wxResourceInterpretIcon(table, clause);

        if (item)
        {
            // Remove any existing resource of same name
            if (!item->GetName().empty())
                table.DeleteResource(item->GetName());
            table.AddResource(item);
        }
        node = node->GetNext();
    }
    return true;
}

static const wxChar *g_ValidControlClasses[] =
{
    wxT("wxButton"),
        wxT("wxBitmapButton"),
        wxT("wxMessage"),
        wxT("wxStaticText"),
        wxT("wxStaticBitmap"),
        wxT("wxText"),
        wxT("wxTextCtrl"),
        wxT("wxMultiText"),
        wxT("wxListBox"),
        wxT("wxRadioBox"),
        wxT("wxRadioButton"),
        wxT("wxCheckBox"),
        wxT("wxBitmapCheckBox"),
        wxT("wxGroupBox"),
        wxT("wxStaticBox"),
        wxT("wxSlider"),
        wxT("wxGauge"),
        wxT("wxScrollBar"),
        wxT("wxChoice"),
        wxT("wxComboBox")
};

static bool wxIsValidControlClass(const wxString& c)
{
    for ( size_t i = 0; i < WXSIZEOF(g_ValidControlClasses); i++ )
    {
        if ( c == g_ValidControlClasses[i] )
            return true;
    }
    return false;
}

wxItemResource *wxResourceInterpretDialog(wxResourceTable& table, wxExpr *expr, bool isPanel)
{
    wxItemResource *dialogItem = new wxItemResource;
    if (isPanel)
        dialogItem->SetType(wxT("wxPanel"));
    else
        dialogItem->SetType(wxT("wxDialog"));
    wxString style = wxEmptyString;
    wxString title = wxEmptyString;
    wxString name = wxEmptyString;
    wxString backColourHex = wxEmptyString;
    wxString labelColourHex = wxEmptyString;
    wxString buttonColourHex = wxEmptyString;

    long windowStyle = wxDEFAULT_DIALOG_STYLE;
    if (isPanel)
        windowStyle = 0;

    int x = 0; int y = 0; int width = wxDefaultCoord; int height = wxDefaultCoord;
    int isModal = 0;
    wxExpr *labelFontExpr = (wxExpr *) NULL;
    wxExpr *buttonFontExpr = (wxExpr *) NULL;
    wxExpr *fontExpr = (wxExpr *) NULL;
    expr->GetAttributeValue(wxT("style"), style);
    expr->GetAttributeValue(wxT("name"), name);
    expr->GetAttributeValue(wxT("title"), title);
    expr->GetAttributeValue(wxT("x"), x);
    expr->GetAttributeValue(wxT("y"), y);
    expr->GetAttributeValue(wxT("width"), width);
    expr->GetAttributeValue(wxT("height"), height);
    expr->GetAttributeValue(wxT("modal"), isModal);
    expr->GetAttributeValue(wxT("label_font"), &labelFontExpr);
    expr->GetAttributeValue(wxT("button_font"), &buttonFontExpr);
    expr->GetAttributeValue(wxT("font"), &fontExpr);
    expr->GetAttributeValue(wxT("background_colour"), backColourHex);
    expr->GetAttributeValue(wxT("label_colour"), labelColourHex);
    expr->GetAttributeValue(wxT("button_colour"), buttonColourHex);

    int useDialogUnits = 0;
    expr->GetAttributeValue(wxT("use_dialog_units"), useDialogUnits);
    if (useDialogUnits != 0)
        dialogItem->SetResourceStyle(dialogItem->GetResourceStyle() | wxRESOURCE_DIALOG_UNITS);

    int useDefaults = 0;
    expr->GetAttributeValue(wxT("use_system_defaults"), useDefaults);
    if (useDefaults != 0)
        dialogItem->SetResourceStyle(dialogItem->GetResourceStyle() | wxRESOURCE_USE_DEFAULTS);

    int id = 0;
    expr->GetAttributeValue(wxT("id"), id);
    dialogItem->SetId(id);

    if (!style.empty())
    {
        windowStyle = wxParseWindowStyle(style);
    }
    dialogItem->SetStyle(windowStyle);
    dialogItem->SetValue1(isModal);

#if WXWIN_COMPATIBILITY_2_6

#ifdef __VMS
#pragma message disable CODCAUUNR
#endif
   if (windowStyle & wxDIALOG_MODAL) // Uses style in wxWin 2
        dialogItem->SetValue1(true);
#ifdef __VMS
#pragma message enable CODCAUUNR
#endif

#endif // WXWIN_COMPATIBILITY_2_6

    dialogItem->SetName(name);
    dialogItem->SetTitle(title);
    dialogItem->SetSize(x, y, width, height);

    // Check for wxWin 1.68-style specifications
    if (style.Find(wxT("VERTICAL_LABEL")) != wxNOT_FOUND)
        dialogItem->SetResourceStyle(dialogItem->GetResourceStyle() | wxRESOURCE_VERTICAL_LABEL);
    else if (style.Find(wxT("HORIZONTAL_LABEL")) != wxNOT_FOUND)
        dialogItem->SetResourceStyle(dialogItem->GetResourceStyle() | wxRESOURCE_HORIZONTAL_LABEL);

    if (!backColourHex.empty())
    {
        int r = 0;
        int g = 0;
        int b = 0;
        r = wxHexToDec(backColourHex.Mid(0, 2));
        g = wxHexToDec(backColourHex.Mid(2, 2));
        b = wxHexToDec(backColourHex.Mid(4, 2));
        dialogItem->SetBackgroundColour(wxColour((unsigned char)r,(unsigned char)g,(unsigned char)b));
    }
    if (!labelColourHex.empty())
    {
        int r = 0;
        int g = 0;
        int b = 0;
        r = wxHexToDec(labelColourHex.Mid(0, 2));
        g = wxHexToDec(labelColourHex.Mid(2, 2));
        b = wxHexToDec(labelColourHex.Mid(4, 2));
        dialogItem->SetLabelColour(wxColour((unsigned char)r,(unsigned char)g,(unsigned char)b));
    }
    if (!buttonColourHex.empty())
    {
        int r = 0;
        int g = 0;
        int b = 0;
        r = wxHexToDec(buttonColourHex.Mid(0, 2));
        g = wxHexToDec(buttonColourHex.Mid(2, 2));
        b = wxHexToDec(buttonColourHex.Mid(4, 2));
        dialogItem->SetButtonColour(wxColour((unsigned char)r,(unsigned char)g,(unsigned char)b));
    }

    if (fontExpr)
        dialogItem->SetFont(wxResourceInterpretFontSpec(fontExpr));
    else if (buttonFontExpr)
        dialogItem->SetFont(wxResourceInterpretFontSpec(buttonFontExpr));
    else if (labelFontExpr)
        dialogItem->SetFont(wxResourceInterpretFontSpec(labelFontExpr));

    // Now parse all controls
    wxExpr *controlExpr = expr->GetFirst();
    while (controlExpr)
    {
        if (controlExpr->Number() == 3)
        {
            wxString controlKeyword(controlExpr->Nth(1)->StringValue());
            if (!controlKeyword.empty() && controlKeyword == wxT("control"))
            {
                // The value part: always a list.
                wxExpr *listExpr = controlExpr->Nth(2);
                if (listExpr->Type() == PrologList)
                {
                    wxItemResource *controlItem = wxResourceInterpretControl(table, listExpr);
                    if (controlItem)
                    {
                        dialogItem->GetChildren().Append(controlItem);
                    }
                }
            }
        }
        controlExpr = controlExpr->GetNext();
    }
    return dialogItem;

⌨️ 快捷键说明

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