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

📄 dynamicpreferencesctrl.cpp

📁 linux下的电骡下载程序源码 包含emule协议的应用。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                {                    if (GetNodeSize(node) == wxDefaultSize)                    {                        sizer_v3->Add(add_item(parent, node, panel), 1, wxGROW | wxALIGN_RIGHT | wxLEFT, 5);                    }                    else                    {                        sizer_v3->Add(add_item(parent, node, panel), 0, wxALIGN_RIGHT | wxLEFT, 5);                    }                }            }            if (orient == 1)            {                sizer->Add(sizer_v1, 0);                sizer->Add(sizer_v3, 1, wxGROW | wxALIGN_RIGHT);            }            else            {                sizer_v2->Add(sizer_v3, 1, wxALIGN_RIGHT);                sizer->Add(sizer_v1, 1);                sizer->Add(sizer_v2, 1, wxGROW | wxALIGN_RIGHT);            }            node = parent_node2;            panel->SetSizer(sizer);            panel->SetAutoLayout(true);            parent->AppendWindow(current_item, panel, 340);        }        else if (node->GetName() == wxT("group"))        {            current_item = parent->AppendNode(current_item, node->GetPropVal(wxT("name"), wxT("")));            parse_xml(parent, node->GetChildren(), current_item);            current_item = parent->GetItemParent(current_item);        }    } while (node = node->GetNext());}wxSize GetNodeSize(wxXmlNode* node){    long width, height;    wxString size = node->GetPropVal(wxT("size"), wxEmptyString);    if (size.IsEmpty() == true)    {        return wxSize(120, -1);    }    if ((size.BeforeFirst(wxT(',')).ToLong(&width) == false) || (size.AfterLast(wxT(',')).ToLong(&height) == false))    {        wxLogError(wxT("Invalid size coordinates:") + size);        return wxSize(120, -1);    }    return wxSize(width, height);}void RegisterControl(const wxString& preference, const short int type){    controls.push_front(std::make_pair(preference, type));}inline wxString ControlName(const wxString& in){    wxString name(in);    name.Remove(0, 1);    return name;}};wxWindow* add_item(wxTreeMultiCtrl* parent, wxXmlNode* node, wxPanel* panel){    wxString type(node->GetPropVal(wxT("type"), wxT("")));    if (panel == NULL)    {        panel = parent;    }    wxString name(node->GetPropVal(wxT("name"), wxT("")));    if (type == wxT("label"))    {        return new wxStaticText(panel, -1, GetNodeText(node), wxDefaultPosition, GetNodeSize(node));    }    else if (type == wxT("text"))    {                RegisterControl(name, DynamicPreferences::T_TEXT);        return new wxTextCtrl(panel, -1, wxEmptyString, wxDefaultPosition, GetNodeSize(node), 0, wxDefaultValidator, wxT("s") + name);    }    else if (type == wxT("select"))    {        wxXmlNode* tmp_node = node->GetChildren();        wxComboBox* combobox = new wxComboBox(panel, -1, wxEmptyString, wxDefaultPosition, GetNodeSize(node), 0, NULL, wxCB_READONLY);        combobox->SetName(wxT("c") + name);        while (tmp_node != NULL)        {            if (tmp_node->GetName() == wxT("option"))            {                combobox->Append(GetNodeText(tmp_node));            }            tmp_node = tmp_node->GetNext();        }        combobox->SetAutoLayout(true);        RegisterControl(name, DynamicPreferences::T_SELECT);        return combobox;    }    else if (type == wxT("bool"))    {        long value;        node->GetPropVal(wxT("value"), wxT("0")).ToLong(&value);        RegisterControl(name, DynamicPreferences::T_CHECK);        wxCheckBox* checkbox = new wxCheckBox(panel, -1, GetNodeText(node), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("b") + name);        if (value == 1)        {            cout << "Setting value of " << name << " to true." << endl;            checkbox->SetValue(true);            static_cast<DynamicPreferencesCtrl *>(parent)->dynprefs->Add(name, true);        }        return checkbox;    }    else if (type == wxT("float"))    {        RegisterControl(name, DynamicPreferences::T_DTEXT);        return new wxTextCtrl(panel, -1, "", wxDefaultPosition, GetNodeSize(node), 0, wxTextValidator(wxFILTER_NUMERIC, new wxString), wxT("f") + name);    }    else if (type == wxT("long"))    {        RegisterControl(name, DynamicPreferences::T_LTEXT);        return new wxTextCtrl(panel, -1, "", wxDefaultPosition, GetNodeSize(node), 0, wxTextValidator(wxFILTER_NUMERIC, new wxString), wxT("l") + name);    }    else if (type == wxT("separator"))    {        return new wxStaticLine(panel, -1, wxDefaultPosition, wxSize(200, -1));    }    else if (type == wxT("browse1"))    {        RegisterControl(name, DynamicPreferences::T_DIR);        wxPanel* panel2 = new wxPanel(panel, -1, wxDefaultPosition, wxSize(250, 20));        wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);        sizer->Add(new wxTextCtrl(panel2, -1, wxEmptyString, wxDefaultPosition, GetNodeSize(node), 0, wxDefaultValidator, wxT("d") + name), 1, wxEXPAND | wxALIGN_RIGHT | wxRIGHT, 5);        sizer->Add(new wxButton(panel2, E_BROWSE1, _("Browse"), wxDefaultPosition, wxSize(45, 20), 0, wxDefaultValidator, wxT("b") + name), 0, wxALIGN_RIGHT);        parent->Connect(E_BROWSE1, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) &DynamicPreferencesCtrl::OnBrowse1);        ++E_BROWSE1;        panel2->SetSizer(sizer);        return panel2;    }    else if (type == wxT("slider"))    {        RegisterControl(name, DynamicPreferences::T_SLIDER);        wxPanel* panel2 = new wxPanel(panel, -1, wxDefaultPosition, wxSize(250, 30));        wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);        long min, max;        node->GetPropVal(wxT("min"), wxT("0")).ToLong(&min);        node->GetPropVal(wxT("max"), wxT("0")).ToLong(&max);#warning The "z" needs a rename.        SmartSlider* slider = new SmartSlider(panel2, E_BROWSE1, 0, min, max, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL, wxDefaultValidator, wxT("z") + name);        slider->m_string = GetNodeText(node);        sizer->Add(new wxStaticText(panel2, -1, wxString::Format(slider->m_string, 0), wxDefaultPosition, GetNodeSize(node), wxADJUST_MINSIZE, wxT("z") + name + wxT("_2")), 0);        sizer->Add(slider, 1, wxEXPAND | wxALIGN_RIGHT);        parent->Connect(E_BROWSE1, wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)(wxScrollEventFunction) &DynamicPreferencesCtrl::OnSlider);        ++E_BROWSE1;        panel2->SetSizer(sizer);        return panel2;    }    else if (type == wxT("colorlist"))    {        RegisterControl(name, DynamicPreferences::T_LLONG);        wxPanel* panel2 = new wxPanel(panel, -1, wxDefaultPosition, wxSize(250, 20));        wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);        wxComboBox* combobox = new wxComboBox(panel2, E_BROWSE1, wxEmptyString, wxDefaultPosition, GetNodeSize(node), 0, NULL, wxCB_READONLY, wxDefaultValidator, wxT("1") + name);        sizer->Add(combobox, 1, wxEXPAND);        sizer->Add(new wxButton(panel2, E_BROWSE2, wxT("Color"), wxDefaultPosition, wxSize(-1, 20), 0, wxDefaultValidator, wxT("2") + name), 0);                parent->Connect(E_BROWSE1, wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction) &DynamicPreferencesCtrl::OnCombo);        ++E_BROWSE1;        ++E_BROWSE2;        wxXmlNode* tmp_node = node->GetChildren();        while (tmp_node != NULL)        {            if (tmp_node->GetName() == wxT("option"))            {                combobox->Append(GetNodeText(tmp_node));            }            tmp_node = tmp_node->GetNext();        }        delete tmp_node;        panel2->SetSizer(sizer);#warning This entire colorlist thing needs to be re-implemented :-/        return panel2;    }    else    {        return new wxWindow(panel, -1);    }}void DynamicPreferencesCtrl::OnChangedPrefs(const wxEvent& event){    list< std::pair<const wxString, const short int > >::iterator it;        for (it = controls.begin(); it != controls.end(); ++it)    {        wxString name((*it).first);        const short int id((*it).second);        if (id == DynamicPreferences::T_CHECK)        {            dynamic_cast<wxCheckBox*>(FindWindow(wxT("b") + name))->SetValue(dynprefs->Get<bool>(name));        }        else if (id == DynamicPreferences::T_TEXT)        {            dynamic_cast<wxTextCtrl*>(FindWindow(wxT("s") + name))->SetValue(dynprefs->Get<wxString>(name));        }        else if (id == DynamicPreferences::T_DTEXT)        {            dynamic_cast<wxTextCtrl*>(FindWindow(wxT("f") + name))->SetValue(wxString::Format("%f", dynprefs->Get<double>(name)));        }        else if (id == DynamicPreferences::T_LTEXT)        {            dynamic_cast<wxTextCtrl*>(FindWindow(wxT("l") + name))->SetValue(wxString::Format("%ld", dynprefs->Get<long>(name)));        }        else if (id == DynamicPreferences::T_SELECT)        {            dynamic_cast<wxComboBox*>(FindWindow(wxT("c") + name))->SetSelection(dynprefs->Get<long>(name));        }        else if (id == DynamicPreferences::T_DIR)        {            dynamic_cast<wxTextCtrl*>(FindWindow(wxT("d") + name))->SetValue(dynprefs->Get<wxString>(name));        }        else if (id == DynamicPreferences::T_SLIDER)        {            SmartSlider* tmp = (SmartSlider *)FindWindow(wxT("z") + name);            dynamic_cast<wxStaticText *>(FindWindow(wxT("z") + name + wxT("_2")))->SetLabel(wxString::Format(tmp->m_string, dynprefs->Get<long>(name)));            tmp->SetValue(dynprefs->Get<long>(name));        }    }}void DynamicPreferencesCtrl::OnBrowse1(wxCommandEvent& event){    cout << "2. Name: " << this->FindWindowById(event.GetId())->GetName() << endl;    wxString name(this->FindWindowById(event.GetId())->GetName());    wxDirDialog dirbox(this, "Choose a Folder that you wan't to share.", "~");    if (dirbox.ShowModal() == wxID_OK)    {        dynamic_cast<wxTextCtrl*>(FindWindow(wxT("d") + ControlName(name)))->SetValue(dirbox.GetPath() + wxT("/"));    }    }void DynamicPreferencesCtrl::OnCombo(wxCommandEvent& event){    static int old_id, old_value;    int id, value;    id = event.GetId();    value = event.GetInt();        if (id != old_id || value != old_value)    {        old_id = id;        old_value = value;        dynprefs->Add(ControlName(this->FindWindowById(event.GetId())->GetName()), static_cast<long>(value));    }}void DynamicPreferencesCtrl::OnSlider(wxScrollEvent& event){    long pos(static_cast<long>(event.GetPosition()));    wxString name(this->FindWindowById(event.GetId())->GetName());    SmartSlider* tmp = dynamic_cast<SmartSlider *>(event.GetEventObject());    if (pos > 0)    {        dynamic_cast<wxStaticText *>(FindWindow(name + wxT("_2")))->SetLabel(wxString::Format(tmp->m_string, pos));    }    else    {        wxString sTemp;        sTemp = tmp->m_string.Left(tmp->m_string.Find(wxT(":")) + 2) + _("disabled");        dynamic_cast<wxStaticText *>(FindWindow(name + wxT("_2")))->SetLabel(sTemp);    }    dynprefs->Add(ControlName(name), pos);}

⌨️ 快捷键说明

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