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

📄 preferences_dialog.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        if (!radio) throw "Can't get wxRadioBox*"; \        newValue = radio->GetStringSelection().c_str(); \        if (newValue != oldValue) { \            if (!RegistrySetString((section), (name), newValue)) \                throw "RegistrySetString() failed"; \            if (changedPtr) *((bool*) changedPtr) = true; \        } \    } while (0)#define SET_STRING_REGISTRY_VALUE_IF_DIFFERENT(section, name, textCtrl) \    do { \        string oldValue, newValue; \        if (!RegistryGetString((section), (name), &oldValue)) throw "RegistryGetString() failed"; \        newValue = (textCtrl)->GetValue().c_str(); \        if (newValue != oldValue) { \            if (!RegistrySetString((section), (name), newValue)) \                throw "RegistrySetString() failed"; \        } \    } while (0)// same as hitting done buttonvoid PreferencesDialog::OnCloseWindow(wxCloseEvent& event){    bool okay = true, qualityChanged = false;    // set values if changed    try {        SET_INTEGER_REGISTRY_VALUE_IF_DIFFERENT(REG_QUALITY_SECTION,            REG_QUALITY_ATOM_SLICES, iAtomSlices, &qualityChanged);        SET_INTEGER_REGISTRY_VALUE_IF_DIFFERENT(REG_QUALITY_SECTION,            REG_QUALITY_ATOM_STACKS, iAtomStacks, &qualityChanged);        SET_INTEGER_REGISTRY_VALUE_IF_DIFFERENT(REG_QUALITY_SECTION,            REG_QUALITY_BOND_SIDES, iBondSides, &qualityChanged);        SET_INTEGER_REGISTRY_VALUE_IF_DIFFERENT(REG_QUALITY_SECTION,            REG_QUALITY_WORM_SIDES, iWormSides, &qualityChanged);        SET_INTEGER_REGISTRY_VALUE_IF_DIFFERENT(REG_QUALITY_SECTION,            REG_QUALITY_WORM_SEGMENTS, iWormSegments, &qualityChanged);        SET_INTEGER_REGISTRY_VALUE_IF_DIFFERENT(REG_QUALITY_SECTION,            REG_QUALITY_HELIX_SIDES, iHelixSides, &qualityChanged);        SET_BOOL_REGISTRY_VALUE_IF_DIFFERENT(REG_QUALITY_SECTION,            REG_HIGHLIGHTS_ON, ID_C_HIGHLIGHT, &qualityChanged);        SET_RADIO_REGISTRY_VALUE_IF_DIFFERENT(REG_QUALITY_SECTION,            REG_PROJECTION_TYPE, ID_RADIOBOX, &qualityChanged);        SET_BOOL_REGISTRY_VALUE_IF_DIFFERENT(REG_CACHE_SECTION, REG_CACHE_ENABLED, ID_C_CACHE_ON, NULL);        DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(tCache, ID_T_CACHE_FOLDER, wxTextCtrl)        SET_STRING_REGISTRY_VALUE_IF_DIFFERENT(REG_CACHE_SECTION, REG_CACHE_FOLDER, tCache);        SET_INTEGER_REGISTRY_VALUE_IF_DIFFERENT(REG_CACHE_SECTION, REG_CACHE_MAX_SIZE, iCacheSize, NULL);        SET_BOOL_REGISTRY_VALUE_IF_DIFFERENT(REG_ADVANCED_SECTION, REG_CDD_ANNOT_READONLY, ID_C_ANNOT_RO, NULL);#ifdef __WXGTK__        DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(tLaunch, ID_T_LAUNCH, wxTextCtrl)        SET_STRING_REGISTRY_VALUE_IF_DIFFERENT(REG_ADVANCED_SECTION, REG_BROWSER_LAUNCH, tLaunch);#endif        SET_INTEGER_REGISTRY_VALUE_IF_DIFFERENT(REG_ADVANCED_SECTION, REG_MAX_N_STRUCTS, iMaxStructs, NULL);        SET_INTEGER_REGISTRY_VALUE_IF_DIFFERENT(REG_ADVANCED_SECTION, REG_FOOTPRINT_RES, iFootRes, NULL);        SET_DOUBLE_REGISTRY_VALUE_IF_DIFFERENT(REG_ADVANCED_SECTION, REG_STEREO_SEPARATION, fSeparation, NULL);        SET_BOOL_REGISTRY_VALUE_IF_DIFFERENT(REG_ADVANCED_SECTION, REG_PROXIMAL_STEREO, ID_C_PROXIMAL, NULL);        // Limit cache size to current value now        int size;        if (iCacheSize->GetInteger(&size)) TruncateCache(size);    } catch (const char *err) {        ERRORMSG("Error setting registry values - " << err);        okay = false;    }    // close dialog only if all user values are legit    if (okay) {        if (qualityChanged) GlobalMessenger()->PostRedrawAllStructures();        EndModal(wxOK);    } else {        if (event.CanVeto())            event.Veto();    }}void PreferencesDialog::OnButton(wxCommandEvent& event){    switch (event.GetId()) {        case ID_B_DONE: {            wxCloseEvent fake;            OnCloseWindow(fake); // handle on-exit stuff there            break;        }        case ID_B_CANCEL:            EndModal(wxCANCEL);            break;        // quality page stuff        case ID_B_Q_LOW:            iWormSegments->SetInteger(2);            iWormSides->SetInteger(4);            iBondSides->SetInteger(4);            iHelixSides->SetInteger(8);            iAtomSlices->SetInteger(5);            iAtomStacks->SetInteger(3);            break;        case ID_B_Q_MED:            iWormSegments->SetInteger(6);            iWormSides->SetInteger(6);            iBondSides->SetInteger(6);            iHelixSides->SetInteger(12);            iAtomSlices->SetInteger(10);            iAtomStacks->SetInteger(8);            break;        case ID_B_Q_HIGH:            iWormSegments->SetInteger(10);            iWormSides->SetInteger(20);            iBondSides->SetInteger(16);            iHelixSides->SetInteger(30);            iAtomSlices->SetInteger(20);            iAtomStacks->SetInteger(14);            break;        // cache page stuff        case ID_B_CACHE_BROWSE: {            DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(tCache, ID_T_CACHE_FOLDER, wxTextCtrl)            wxString path;            path = wxDirSelector("Select a cache folder:", tCache->GetValue());            if (path.size() > 0 && wxDirExists(path.c_str()))                tCache->SetValue(path);            break;        }        case ID_B_CACHE_CLEAR:            TruncateCache(0);            break;        default:            event.Skip();    }}void PreferencesDialog::OnCheckbox(wxCommandEvent& event){    if (event.GetId() == ID_C_CACHE_ON) {        DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(c, ID_C_CACHE_ON, wxCheckBox)        DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(st1, ID_T_CACHE_1, wxStaticText)        DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(b1, ID_B_CACHE_BROWSE, wxButton)        DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(t, ID_T_CACHE_FOLDER, wxTextCtrl)        DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(st2, ID_T_CACHE_2, wxStaticText)        DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(b2, ID_B_CACHE_CLEAR, wxButton)        st1->Enable(c->GetValue());        b1->Enable(c->GetValue());        t->Enable(c->GetValue());        st2->Enable(c->GetValue());        b2->Enable(c->GetValue());        iCacheSize->GetTextCtrl()->Enable(c->GetValue());        iCacheSize->GetSpinButton()->Enable(c->GetValue());    }}END_SCOPE(Cn3D)USING_SCOPE(Cn3D);////////////////////////////////////////////////////////////////////////////////////////////////// The following is taken *unmodified* from wxDesigner's C++ code from preferences_dialog.wdr////////////////////////////////////////////////////////////////////////////////////////////////wxSizer *SetupPreferencesNotebook( wxWindow *parent, bool call_fit, bool set_sizer ){    wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );    wxNotebook *item2 = new wxNotebook( parent, ID_NOTEBOOK, wxDefaultPosition, wxDefaultSize, 0 );    wxNotebookSizer *item1 = new wxNotebookSizer( item2 );    wxPanel *item3 = new wxPanel( item2, -1 );    SetupQualityPage( item3, FALSE );    item2->AddPage( item3, "Quality" );    wxPanel *item4 = new wxPanel( item2, -1 );    SetupCachePage( item4, FALSE );    item2->AddPage( item4, "Cache" );    wxPanel *item5 = new wxPanel( item2, -1 );    SetupAdvancedPage( item5, FALSE );    item2->AddPage( item5, "Advanced" );    item0->Add( item1, 0, wxALIGN_CENTRE|wxALL, 5 );    wxBoxSizer *item6 = new wxBoxSizer( wxHORIZONTAL );    wxButton *item7 = new wxButton( parent, ID_B_DONE, "Done", wxDefaultPosition, wxDefaultSize, 0 );    item7->SetDefault();    item6->Add( item7, 0, wxALIGN_CENTRE|wxALL, 5 );    item6->Add( 20, 20, 0, wxALIGN_CENTRE|wxALL, 5 );    wxButton *item8 = new wxButton( parent, ID_B_CANCEL, "Cancel", wxDefaultPosition, wxDefaultSize, 0 );    item6->Add( item8, 0, wxALIGN_CENTRE|wxALL, 5 );    item0->Add( item6, 0, wxALIGN_CENTRE|wxALL, 5 );    if (set_sizer)    {        parent->SetAutoLayout( TRUE );        parent->SetSizer( item0 );        if (call_fit)        {            item0->Fit( parent );            item0->SetSizeHints( parent );        }    }    return item0;}////////////////////////////////////////////////////////////////////////////////////////////////// The following is modified from wxDesigner's C++ code from preferences_dialog.wdr////////////////////////////////////////////////////////////////////////////////////////////////wxSizer *SetupAdvancedPage( wxWindow *parent, bool call_fit, bool set_sizer ){    wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );    wxStaticBox *item2 = new wxStaticBox( parent, -1, "Advanced" );    wxStaticBoxSizer *item1 = new wxStaticBoxSizer( item2, wxVERTICAL );    wxCheckBox *item3 = new wxCheckBox( parent, ID_C_ANNOT_RO, "CDD annotations are read-only", wxDefaultPosition, wxDefaultSize, 0 );    item3->SetValue( TRUE );    item1->Add( item3, 0, wxALIGN_CENTRE|wxALL, 5 );#ifdef __WXGTK__    wxFlexGridSizer *item4 = new wxFlexGridSizer( 1, 0, 0, 0 );    item4->AddGrowableCol( 0 );    wxTextCtrl *item5 = new wxTextCtrl( parent, ID_T_LAUNCH, "", wxDefaultPosition, wxSize(80,-1), 0 );    item4->Add( item5, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );    wxStaticText *item6 = new wxStaticText( parent, ID_TEXT, "Browser launch", wxDefaultPosition, wxDefaultSize, 0 );    item4->Add( item6, 0, wxALIGN_CENTRE|wxALL, 5 );    item1->Add( item4, 0, wxGROW|wxALIGN_CENTER_VERTICAL, 5 );#endif    wxFlexGridSizer *item7 = new wxFlexGridSizer( 2, 0, 0, 0 );    item7->AddGrowableCol( 0 );    wxStaticText *item8 = new wxStaticText( parent, ID_TEXT, "Max structures to load:", wxDefaultPosition, wxDefaultSize, 0 );    item7->Add( item8, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );    giMaxStructs = new IntegerSpinCtrl(parent,        0, 100, 1, 10,        wxDefaultPosition, wxSize(80,SPIN_CTRL_HEIGHT), 0,        wxDefaultPosition, wxSize(-1,SPIN_CTRL_HEIGHT));    item7->Add(giMaxStructs->GetTextCtrl(), 0, wxALIGN_CENTRE|wxLEFT|wxTOP|wxBOTTOM, 5);    item7->Add(giMaxStructs->GetSpinButton(), 0, wxALIGN_CENTRE|wxRIGHT|wxTOP|wxBOTTOM, 5);    wxStaticText *item11 = new wxStaticText( parent, ID_TEXT, "Footprint excess residues:", wxDefaultPosition, wxDefaultSize, 0 );    item7->Add( item11, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );    giFootRes = new IntegerSpinCtrl(parent,        0, 1000, 5, 15,        wxDefaultPosition, wxSize(80,SPIN_CTRL_HEIGHT), 0,        wxDefaultPosition, wxSize(-1,SPIN_CTRL_HEIGHT));    item7->Add(giFootRes->GetTextCtrl(), 0, wxALIGN_CENTRE|wxLEFT|wxTOP|wxBOTTOM, 5);    item7->Add(giFootRes->GetSpinButton(), 0, wxALIGN_CENTRE|wxRIGHT|wxTOP|wxBOTTOM, 5);    item1->Add( item7, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );    item0->Add( item1, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );    wxStaticBox *item15 = new wxStaticBox( parent, -1, wxT("Stereo Settings") );    wxStaticBoxSizer *item14 = new wxStaticBoxSizer( item15, wxVERTICAL );    wxFlexGridSizer *item16 = new wxFlexGridSizer( 3, 0, 0 );    item16->AddGrowableCol( 0 );    wxStaticText *item17 = new wxStaticText( parent, ID_TEXT, wxT("Eye separation (degrees):"), wxDefaultPosition, wxDefaultSize, 0 );    item16->Add( item17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );    gfSeparation = new FloatingPointSpinCtrl(parent,        0.0, 15.0, 0.1, 5.0,        wxDefaultPosition, wxSize(80,SPIN_CTRL_HEIGHT), 0,        wxDefaultPosition, wxSize(-1,SPIN_CTRL_HEIGHT));    item16->Add(gfSeparation->GetTextCtrl(), 0, wxALIGN_CENTRE|wxLEFT|wxTOP|wxBOTTOM, 5);    item16->Add(gfSeparation->GetSpinButton(), 0, wxALIGN_CENTRE|wxRIGHT|wxTOP|wxBOTTOM, 5);    wxStaticText *item20 = new wxStaticText( parent, ID_TEXT, wxT("Proximal (cross-eyed):"), wxDefaultPosition, wxDefaultSize, 0 );    item16->Add( item20, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );    wxCheckBox *item21 = new wxCheckBox( parent, ID_C_PROXIMAL, wxT(""), wxDefaultPosition, wxDefaultSize, 0 );    item16->Add( item21, 0, wxALIGN_CENTRE|wxALL, 5 );

⌨️ 快捷键说明

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