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

📄 proplist.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
IMPLEMENT_DYNAMIC_CLASS(wxColourListValidator, wxPropertyListValidator)wxColourListValidator::wxColourListValidator(long flags):  wxPropertyListValidator(flags){}wxColourListValidator::~wxColourListValidator(){}bool wxColourListValidator::OnCheckValue(wxProperty *WXUNUSED(property), wxPropertyListView *WXUNUSED(view), wxWindow *WXUNUSED(parentWindow)){  return true;}// Called when TICK is pressed or focus is lost or view wants to update// the property list.// Does the transferance from the property editing area to the property itselfbool wxColourListValidator::OnRetrieveValue(wxProperty *property, wxPropertyListView *view, wxWindow *WXUNUSED(parentWindow)){  if (!view->GetValueText())    return false;  wxString value(view->GetValueText()->GetValue());  property->GetValue() = value ;  return true;}// Called when TICK is pressed or focus is lost or view wants to update// the property list.// Does the transferance from the property editing area to the property itselfbool wxColourListValidator::OnDisplayValue(wxProperty *property, wxPropertyListView *view, wxWindow *WXUNUSED(parentWindow)){  if (!view->GetValueText())    return false;  wxString str(property->GetValue().GetStringRepresentation());  view->GetValueText()->SetValue(str);  return true;}// Called when the property is double clicked. Extra functionality can be provided,// cycling through possible values.bool wxColourListValidator::OnDoubleClick(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow){  if (!view->GetValueText())    return false;  OnEdit(property, view, parentWindow);  return true;}bool wxColourListValidator::OnPrepareControls(wxProperty *WXUNUSED(property), wxPropertyListView *view, wxWindow *WXUNUSED(parentWindow)){    if (view->GetConfirmButton())        view->GetConfirmButton()->Enable();    if (view->GetCancelButton())        view->GetCancelButton()->Enable();    if (view->GetEditButton())        view->GetEditButton()->Enable();    if (view->GetValueText())        view->GetValueText()->Enable((GetFlags() & wxPROP_ALLOW_TEXT_EDITING) == wxPROP_ALLOW_TEXT_EDITING);    return true;}void wxColourListValidator::OnEdit(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow){  if (!view->GetValueText())    return;  wxChar *s = property->GetValue().StringValue();  unsigned char r = 0;  unsigned char g = 0;  unsigned char b = 0;  if (s)  {    r = (unsigned char)wxHexToDec(s);    g = (unsigned char)wxHexToDec(s+2);    b = (unsigned char)wxHexToDec(s+4);  }  wxColour col(r,g,b);  wxColourData data;  data.SetChooseFull(true);  data.SetColour(col);  for (int i = 0; i < 16; i++)  {    wxColour colour((unsigned char)(i*16),                    (unsigned char)(i*16),                    (unsigned char)(i*16));    data.SetCustomColour(i, colour);  }  wxColourDialog dialog(parentWindow, &data);  if (dialog.ShowModal() != wxID_CANCEL)  {    wxColourData retData = dialog.GetColourData();    col = retData.GetColour();    wxChar buf[7];    wxDecToHex(col.Red(), buf);    wxDecToHex(col.Green(), buf+2);    wxDecToHex(col.Blue(), buf+4);    property->GetValue() = wxString(buf);    view->DisplayProperty(property);    view->UpdatePropertyDisplayInList(property);    view->OnPropertyChanged(property);  }}////// List of strings validator. For this we need more user interface than/// we get with a property list; so create a new dialog for editing the list.///IMPLEMENT_DYNAMIC_CLASS(wxListOfStringsListValidator, wxPropertyListValidator)wxListOfStringsListValidator::wxListOfStringsListValidator(long flags):  wxPropertyListValidator(flags){}bool wxListOfStringsListValidator::OnCheckValue(wxProperty *WXUNUSED(property), wxPropertyListView *WXUNUSED(view), wxWindow *WXUNUSED(parentWindow)){  // No constraints for an arbitrary, user-editable list of strings.  return true;}// Called when TICK is pressed or focus is lost or view wants to update// the property list.// Does the transferance from the property editing area to the property itself.// In this case, the user cannot directly edit the string list.bool wxListOfStringsListValidator::OnRetrieveValue(wxProperty *WXUNUSED(property), wxPropertyListView *WXUNUSED(view), wxWindow *WXUNUSED(parentWindow)){  return true;}bool wxListOfStringsListValidator::OnDisplayValue(wxProperty *property, wxPropertyListView *view, wxWindow *WXUNUSED(parentWindow)){  if (!view->GetValueText())    return false;  wxString str(property->GetValue().GetStringRepresentation());  view->GetValueText()->SetValue(str);  return true;}bool wxListOfStringsListValidator::OnPrepareControls(wxProperty *WXUNUSED(property), wxPropertyListView *view, wxWindow *WXUNUSED(parentWindow)){  if (view->GetEditButton())    view->GetEditButton()->Enable();  if (view->GetValueText())    view->GetValueText()->Disable();  if (view->GetConfirmButton())    view->GetConfirmButton()->Disable();  if (view->GetCancelButton())    view->GetCancelButton()->Disable();  return true;}// Called when the property is double clicked. Extra functionality can be provided,// cycling through possible values.bool wxListOfStringsListValidator::OnDoubleClick(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow){  OnEdit(property, view, parentWindow);  return true;}void wxListOfStringsListValidator::OnEdit( wxProperty *property,                                           wxPropertyListView *view,                                           wxWindow *parentWindow ){  // Convert property value to a list of strings for editing  wxStringList *stringList = new wxStringList;  wxPropertyValue *expr = property->GetValue().GetFirst();  while (expr)  {    wxChar *s = expr->StringValue();    if (s)      stringList->Add(s);    expr = expr->GetNext();  }  wxString title(wxT("Editing "));  title += property->GetName();  if (EditStringList(parentWindow, stringList, title.GetData()))  {    wxPropertyValue& oldValue = property->GetValue();    oldValue.ClearList();    wxStringList::Node  *node = stringList->GetFirst();    while (node)    {      wxChar *s = node->GetData();      oldValue.Append(new wxPropertyValue(s));      node = node->GetNext();    }    view->DisplayProperty(property);    view->UpdatePropertyDisplayInList(property);    view->OnPropertyChanged(property);  }  delete stringList;}class wxPropertyStringListEditorDialog: public wxDialog{public:    wxPropertyStringListEditorDialog(wxWindow *parent, const wxString& title,        const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,          long windowStyle = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("stringEditorDialogBox")):               wxDialog(parent, wxID_ANY, title, pos, size, windowStyle, name)    {        m_stringList = NULL;        m_stringText = NULL;        m_listBox = NULL;        sm_dialogCancelled = false;        m_currentSelection = -1;    }    ~wxPropertyStringListEditorDialog(void) {}    void OnCloseWindow(wxCloseEvent& event);    void SaveCurrentSelection(void);    void ShowCurrentSelection(void);    void OnOK(wxCommandEvent& event);    void OnCancel(wxCommandEvent& event);    void OnAdd(wxCommandEvent& event);    void OnDelete(wxCommandEvent& event);    void OnStrings(wxCommandEvent& event);    void OnText(wxCommandEvent& event);public:    wxStringList*       m_stringList;    wxListBox*          m_listBox;    wxTextCtrl*         m_stringText;    static bool         sm_dialogCancelled;    int                 m_currentSelection;DECLARE_EVENT_TABLE()};#define    wxID_PROP_SL_ADD            3000#define    wxID_PROP_SL_DELETE            3001#define    wxID_PROP_SL_STRINGS        3002#define    wxID_PROP_SL_TEXT            3003BEGIN_EVENT_TABLE(wxPropertyStringListEditorDialog, wxDialog)    EVT_BUTTON(wxID_OK,                 wxPropertyStringListEditorDialog::OnOK)    EVT_BUTTON(wxID_CANCEL,                wxPropertyStringListEditorDialog::OnCancel)    EVT_BUTTON(wxID_PROP_SL_ADD,        wxPropertyStringListEditorDialog::OnAdd)    EVT_BUTTON(wxID_PROP_SL_DELETE,        wxPropertyStringListEditorDialog::OnDelete)    EVT_LISTBOX(wxID_PROP_SL_STRINGS,    wxPropertyStringListEditorDialog::OnStrings)    EVT_TEXT_ENTER(wxID_PROP_SL_TEXT,            wxPropertyStringListEditorDialog::OnText)    EVT_CLOSE(wxPropertyStringListEditorDialog::OnCloseWindow)END_EVENT_TABLE()class wxPropertyStringListEditorText: public wxTextCtrl{ public:  wxPropertyStringListEditorText(wxWindow *parent, wxWindowID id, const wxString& val,      const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,    long windowStyle = 0, const wxString& name = wxT("text")):     wxTextCtrl(parent, id, val, pos, size, windowStyle, wxDefaultValidator, name)  {  }  void OnKillFocus()  {    wxPropertyStringListEditorDialog *dialog = (wxPropertyStringListEditorDialog *)GetParent();    dialog->SaveCurrentSelection();  }};bool wxPropertyStringListEditorDialog::sm_dialogCancelled = false;// Edit the string list.bool wxListOfStringsListValidator::EditStringList(wxWindow *parent, wxStringList *stringList, const wxChar *title){  int largeButtonWidth = 60;  int largeButtonHeight = 25;  wxBeginBusyCursor();  wxPropertyStringListEditorDialog *dialog = new wxPropertyStringListEditorDialog(parent,      title, wxPoint(10, 10), wxSize(400, 400));  dialog->m_stringList = stringList;  dialog->m_listBox = new wxListBox(dialog, wxID_PROP_SL_STRINGS,    wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE);  dialog->m_stringText = new wxPropertyStringListEditorText(dialog,       wxID_PROP_SL_TEXT, wxEmptyString, wxPoint(5, 240),       wxSize(300, wxDefaultCoord), wxTE_PROCESS_ENTER);  dialog->m_stringText->Disable();  wxButton *addButton = new wxButton(dialog, wxID_PROP_SL_ADD, wxT("Add"), wxDefaultPosition, wxSize(largeButtonWidth, largeButtonHeight));  wxButton *deleteButton = new wxButton(dialog, wxID_PROP_SL_DELETE, wxT("Delete"), wxDefaultPosition, wxSize(largeButtonWidth, largeButtonHeight));  wxButton *cancelButton = new wxButton(dialog, wxID_CANCEL, wxT("Cancel"), wxDefaultPosition, wxSize(largeButtonWidth, largeButtonHeight));  wxButton *okButton = new wxButton(dialog, wxID_OK, wxT("OK"), wxDefaultPosition, wxSize(largeButtonWidth, largeButtonHeight));#ifndef __WXGTK__  okButton->SetDefault();#endif  wxBoxSizer *m_bottom_sizer = new wxBoxSizer( wxHORIZONTAL );  m_bottom_sizer->Add(addButton, 0, wxALL | wxALIGN_LEFT, 2 );  m_bottom_sizer->Add(deleteButton, 0, wxALL | wxALIGN_LEFT, 2 );  m_bottom_sizer->Add(1, 1, 1, wxEXPAND | wxALL);  m_bottom_sizer->Add(cancelButton, 0, wxALL | wxALIGN_RIGHT, 2 );  m_bottom_sizer->Add(okButton, 0, wxALL | wxALIGN_RIGHT, 2 );  wxBoxSizer *m_sizer = new wxBoxSizer( wxVERTICAL );  m_sizer->Add(dialog->m_listBox, 1, wxEXPAND | wxALL, 2 );  m_sizer->Add(dialog->m_stringText, 0, wxEXPAND | wxALL, 2 );  m_sizer->Add(m_bottom_sizer, 0, wxEXPAND | wxALL , 0 );  dialog->SetSizer( m_sizer );  m_sizer->SetSizeHints( dialog );  wxStringList::Node    *node = stringList->GetFirst();  while (node)  {    wxChar *str = node->GetData();    // Save node as client data for each listbox item    dialog->m_listBox->Append(str, (wxChar *)node);    node = node->GetNext();  }  dialog->SetClientSize(310, 305);  dialog->Layout();  dialog->Centre(wxBOTH);  wxEndBusyCursor();  if (dialog->ShowModal() == wxID_CANCEL)    return false;  else    return true;}/* * String list editor callbacks * */void wxPropertyStringListEditorDialog::OnStrings(wxCommandEvent& WXUNUSED(event)){    int sel = m_listBox->GetSelection();    if (sel != wxNOT_FOUND)    {        m_currentSelection = sel;        ShowCurrentSelection();    }}void wxPropertyStringListEditorDialog::OnDelete(wxCommandEvent& WXUNUSED(event)){    int sel = m_listBox->GetSelection();    if (sel == wxNOT_FOUND)        return;    wxNode *node = (wxNode *)m_listBox->wxListBox::GetClientData(sel);    if (!node)        return;    m_listBox->Delete(sel);    delete[] (wxChar *)node->GetData();    delete node;    m_currentSelection = -1;    m_stringText->SetValue(wxEmptyString);}void wxPropertyStringListEditorDialog::OnAdd(wxCommandEvent& WXUNUSED(event)){  SaveCurrentSelection();  wxString initialText;  wxNode *node = m_stringList->Add(initialText);  m_listBox->Append(initialText, (void *)node);  m_currentSelection = m_stringList->GetCount() - 1;  m_listBox->SetSelection(m_currentSelection);  ShowCurrentSelection();  m_stringText->SetFocus();}void wxPropertyStringListEditorDialog::OnOK(wxCommandEvent& WXUNUSED(event)){    SaveCurrentSelection();    EndModal(wxID_OK);//  Close(true);    this->Destroy();}void wxPropertyStringListEditorDialog::OnCancel(wxCommandEvent& WXUNUSED(event)){    sm_dialogCancelled = true;    EndModal(wxID_CANCEL);//  Close(true);    this->Destroy();}void wxPropertyStringListEditorDialog::OnText(wxCommandEvent& event){    if (event.GetEventType() == wxEVT_COMMAND_TEXT_ENTER)    {        SaveCurrentSelection();    }}voidwxPropertyStringListEditorDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event)){    SaveCurrentSelection();    Destroy();}void wxPropertyStringListEditorDialog::SaveCurrentSelection(){  if (m_currentSelection == -1)    return;  wxNode *node = (wxNode *)m_listBox->wxListBox::GetClientData(m_currentSelection);  if (!node)    return;  wxString txt(m_stringText->GetValue());  if (node->GetData())    delete[] (wxChar *)node->GetData();  node->SetData((wxObject *)wxStrdup(txt));  m_listBox->SetString(m_currentSelection, (wxChar *)node->GetData());}void wxPropertyStringListEditorDialog::ShowCurrentSelection(){  if (m_currentSelection == -1)  {    m_stringText->SetValue(wxEmptyString);    return;  }  wxNode *node = (wxNode *)m_listBox->wxListBox::GetClientData(m_currentSelection);  wxChar *txt = (wxChar *)node->GetData();  m_stringText->SetValue(txt);  m_stringText->Enable();}#endif // wxUSE_PROPSHEET

⌨️ 快捷键说明

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