privileges operator~() const { return privileges(~m_value); }
ctlSecurityPanel::ctlSecurityPanel(wxNotebook *nb, const wxString &privList, const char *privChars, wxImageList *imgList) : wxPanel(nb, -1, wxDefaultPosition, wxDefaultSize) { nbNotebook = nb; nbNotebook->AddPage(this, _("Privileges")); connection = 0; privilegeChars=privChars; allPrivileges=0; privCheckboxes=0; wxStringTokenizer privileges(privList, wxT(",")); privilegeCount=privileges.CountTokens(); wxFlexGridSizer *item0 = new wxFlexGridSizer(3, 1, 5, 5); item0->AddGrowableCol(0); item0->AddGrowableRow(0); if (privilegeCount) { bool needAll=(privilegeCount > 1); privCheckboxes = new wxCheckBox*[privilegeCount*2]; int i=0; wxFlexGridSizer *itemSizer1 = new wxFlexGridSizer(1, 1, 5, 5); itemSizer1->AddGrowableCol(0); itemSizer1->AddGrowableRow(0); lbPrivileges = new ctlListView(this, CTL_LBPRIV, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxLC_REPORT); lbPrivileges->SetImageList(imgList, wxIMAGE_LIST_SMALL); lbPrivileges->AddColumn(_("User/Group"), 70, wxLIST_FORMAT_LEFT); lbPrivileges->AddColumn(_("Privileges"), 70, wxLIST_FORMAT_LEFT); itemSizer1->Add(lbPrivileges, 0, wxEXPAND|wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT, 4); item0->Add(itemSizer1, 0, wxEXPAND|wxALL, 5); wxBoxSizer* itemSizer2 = new wxBoxSizer(wxHORIZONTAL); btnAddPriv = new wxButton(this, CTL_ADDPRIV, _("Add/Change")); itemSizer2->Add(btnAddPriv, 0, wxEXPAND|wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT, 4); btnDelPriv = new wxButton(this, CTL_DELPRIV, _("Remove")); itemSizer2->Add(btnDelPriv, 0, wxEXPAND|wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT, 4); item0->Add(itemSizer2, 0, wxEXPAND|wxALL, 0); wxStaticBox* sb = new wxStaticBox(this, -1, _("Privileges")); wxBoxSizer* itemSizer3 = new wxStaticBoxSizer( sb, wxVERTICAL ); item0->Add(itemSizer3, 0, wxEXPAND|wxALL, 5); wxBoxSizer* itemSizer4 = new wxBoxSizer(wxHORIZONTAL); stGroup = new wxStaticText(this, CTL_STATICGROUP, _("Group")); itemSizer4->Add(stGroup, 0, wxEXPAND|wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT, 4); cbGroups = new ctlComboBox(this, CTL_CBGROUP, wxDefaultPosition, wxDefaultSize); cbGroups->Append(wxT("public")); cbGroups->SetSelection(0); itemSizer4->Add(cbGroups, wxEXPAND|wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT); itemSizer3->Add(itemSizer4, 0, wxEXPAND|wxALL, 0); /* border size depends on the plateform */ #ifdef __WXMSW__ int bordersize = 4; #endif #ifdef __WXMAC__ int bordersize = 3; #endif #ifdef __WXGTK__ int bordersize = 0; #endif if (needAll) { wxBoxSizer* itemSizer5 = new wxBoxSizer(wxHORIZONTAL); allPrivileges = new wxCheckBox(this, CTL_ALLPRIV, wxT("ALL")); itemSizer5->Add(allPrivileges, wxEXPAND|wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT); allPrivilegesGrant = new wxCheckBox(this, CTL_ALLPRIVGRANT, wxT("WITH GRANT OPTION")); itemSizer5->Add(allPrivilegesGrant, wxEXPAND|wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT); allPrivilegesGrant->Disable(); itemSizer3->Add(itemSizer5, 0, wxALL, bordersize); } while (privileges.HasMoreTokens()) { wxString priv=privileges.GetNextToken(); wxCheckBox *cb; wxBoxSizer* itemSizer6 = new wxBoxSizer(wxHORIZONTAL); cb=new wxCheckBox(this, CTL_PRIVCB+i, priv); itemSizer6->Add(cb, wxEXPAND|wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT); privCheckboxes[i++] = cb; cb=new wxCheckBox(this, CTL_PRIVCB+i, wxT("WITH GRANT OPTION")); itemSizer6->Add(cb, wxEXPAND|wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT); cb->Disable(); privCheckboxes[i++] = cb; itemSizer3->Add(itemSizer6, 0, wxALL, bordersize); } } this->SetSizer(item0); item0->Fit(this); }
privileges operator^(privileges other) const { return privileges(m_value ^ other.m_value); }