//--------------------------------------------------------------------------- ColumnField *Table::NewColumn(unsigned char FieldID, char *FieldName, unsigned char FieldType, BOOL indexUnique) { ColumnField *f = GetColumnById(FieldID); if (f) { int t = f->GetDataType(); if (t != FieldType) { OutputDebugString("column "); OutputDebugString(FieldName); OutputDebugString(" already exists but is of the wrong type\n"); if (CompatibleFields(t, FieldType)) { OutputDebugString("going from one equivalent type to another, converting column\n"); f->SetDataType(FieldType); goto aok; } } return NULL; } aok: if (GetColumnByName(FieldName)) return NULL; ColumnField *field = new ColumnField(FieldID, FieldName, FieldType, indexUnique, this); FieldsRecord->AddField(field); HasNewHdr=TRUE; return field; }
void MemCheckOutputView::OnMarkedErrorsToClip(wxCommandEvent& event) { wxDataViewEvent* menuEvent = dynamic_cast<wxDataViewEvent*>(event.GetEventUserData()); if(!menuEvent) return; wxString text; wxVariant variant; wxDataViewItemArray items; m_dataViewCtrlErrorsModel->GetChildren(wxDataViewItem(0), items); int supColumn = GetColumnByName(_("Suppress")); if(supColumn == wxNOT_FOUND) { return; } MemCheckErrorReferrer* errorRef; for(wxDataViewItemArray::iterator it = items.begin(); it != items.end(); ++it) { m_dataViewCtrlErrorsModel->GetValue(variant, *it, supColumn); if(variant.GetBool()) { errorRef = dynamic_cast<MemCheckErrorReferrer*>(m_dataViewCtrlErrorsModel->GetClientObject(*it)); text.Append(errorRef->Get().toString()); text.Append(wxT("\n\n")); } } text.Trim(); if(wxTheClipboard->Open()) { wxTheClipboard->SetData(new wxTextDataObject(text)); wxTheClipboard->Close(); } }
MemCheckOutputView::MemCheckOutputView(wxWindow* parent, MemCheckPlugin* plugin, IManager* mgr) : MemCheckOutputViewBase(parent) , m_plugin(plugin) , m_mgr(mgr) , pageValidator(&m_currentPage) { int col = GetColumnByName(_("Label")); if(col == wxNOT_FOUND) { return; } m_dataViewCtrlErrors->SetExpanderColumn(m_dataViewCtrlErrors->GetColumn(col)); m_listCtrlErrors->SetData(&m_filterResults); m_searchMenu = new wxMenu(); m_searchMenu->Append(XRCID("memcheck_search_string"), wxT("Search string")); m_searchCtrlFilter->SetMenu(m_searchMenu); m_searchMenu->AppendSeparator(); m_searchMenu->Append(XRCID("memcheck_search_nonworkspace"), wxT("Search 'nonworkspace'")); m_searchCtrlFilter->SetMenu(m_searchMenu); m_searchMenu->Connect(XRCID("memcheck_search_string"), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MemCheckOutputView::OnFilterErrors), NULL, this); m_searchMenu->Connect(XRCID("memcheck_search_string"), wxEVT_UPDATE_UI, wxUpdateUIEventHandler(MemCheckOutputView::OnSuppPanelUI), NULL, this); m_searchMenu->Connect(XRCID("memcheck_search_nonworkspace"), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MemCheckOutputView::OnSearchNonworkspace), NULL, this); m_searchMenu->Connect(XRCID("memcheck_search_nonworkspace"), wxEVT_UPDATE_UI, wxUpdateUIEventHandler(MemCheckOutputView::OnSuppPanelUI), NULL, this); }
//--------------------------------------------------------------------------- void Table::AddIndexByName(char *name, char *desc) { unsigned char Idx; ColumnField *header = GetColumnByName(name); if (header) { Idx = header->ID; AddIndexById(Idx, desc); } }
void MemCheckOutputView::MarkTree(const wxDataViewItem& item, bool checked) { int col = GetColumnByName(_("Suppress")); if(col == wxNOT_FOUND) { return; } m_dataViewCtrlErrorsModel->ChangeValue(wxVariant(checked), item, col); if(m_dataViewCtrlErrorsModel->IsContainer(item)) { wxDataViewItemArray subItems; m_dataViewCtrlErrorsModel->GetChildren(item, subItems); for(size_t i = 0; i < subItems.GetCount(); ++i) MarkTree(subItems.Item(i), checked); } }
void MemCheckOutputView::GetStatusOfErrors(bool& unmarked, bool& marked) { wxDataViewItemArray items; wxVariant variant; int supColumn = GetColumnByName(_("Suppress")); if(supColumn == wxNOT_FOUND) { return; } m_dataViewCtrlErrorsModel->GetChildren(wxDataViewItem(0), items); for(wxDataViewItemArray::iterator it = items.begin(); it != items.end(); ++it) { m_dataViewCtrlErrorsModel->GetValue(variant, *it, supColumn); variant.GetBool() ? (marked = true):(unmarked = true); } }
/** * @brief This callback is trigered when user click on checkbox - wants un/mark error. * @param event just wxDataViewEvent */ void MemCheckOutputView::OnValueChanged(wxDataViewEvent& event) { // CL_DEBUG1(PLUGIN_PREFIX("MemCheckOutputView::OnValueChanged()")); int col = GetColumnByName(_("Suppress")); if(col == wxNOT_FOUND) { return; } if(m_onValueChangedLocked || event.GetColumn() != col) return; m_onValueChangedLocked = true; wxVariant variant; m_dataViewCtrlErrorsModel->GetValue(variant, event.GetItem(), col); MarkTree(GetTopParent(event.GetItem()), variant.GetBool()); variant.GetBool() ? ++m_markedErrorsCount : --m_markedErrorsCount; m_onValueChangedLocked = false; }
void MemCheckOutputView::SetCurrentItem(const wxDataViewItem& item) { // CL_DEBUG1(PLUGIN_PREFIX("MemCheckOutputView::SetCurrentItem()")); wxVariant variantBitmap; int col = GetColumnByName(_("Current")); if(col == wxNOT_FOUND) { return; } if(m_currentItem.IsOk()) { variantBitmap << wxXmlResource::Get()->LoadBitmap(wxT("memcheck_transparent")); m_dataViewCtrlErrorsModel->ChangeValue(variantBitmap, m_currentItem, col); } m_dataViewCtrlErrors->SetCurrentItem(item); m_dataViewCtrlErrors->EnsureVisible(item); m_currentItem = item; variantBitmap << wxXmlResource::Get()->LoadBitmap(wxT("memcheck_current")); m_dataViewCtrlErrorsModel->ChangeValue(variantBitmap, item, col); }
//--------------------------------------------------------------------------- void Table::SetUniqueByName(char *name, BOOL tf) { ColumnField *c = GetColumnByName(name); SetUniqueById(c->ID, tf); }
void MemCheckOutputView::SuppressErrors(unsigned int mode, wxDataViewItem* dvItem) { if(m_mgr->OpenFile(m_choiceSuppFile->GetStringSelection())) { IEditor* editor = m_mgr->GetActiveEditor(); if(editor) { editor->GetCtrl()->DocumentEnd(); editor->GetCtrl()->Home(); int posStart = editor->GetCtrl()->GetCurrentPos(); editor->AppendText(wxString::Format("\n# Added %s", wxDateTime::Now().Format("%F %T"))); switch(mode) { case SUPPRESS_CLICKED: { MemCheckErrorReferrer* errorRef = dynamic_cast<MemCheckErrorReferrer*>(m_dataViewCtrlErrorsModel->GetClientObject(*dvItem)); // TODO ? print error message? if(!errorRef) break; editor->AppendText(wxString::Format("\n%s", errorRef->Get().getSuppression())); errorRef->Get().suppressed = true; } break; case SUPPRESS_CHECKED: { wxVariant variant; wxDataViewItemArray items; m_dataViewCtrlErrorsModel->GetChildren(wxDataViewItem(0), items); int supColumn = GetColumnByName(_("Suppress")); if(supColumn == wxNOT_FOUND) { return; } MemCheckErrorReferrer* errorRef; for(wxDataViewItemArray::iterator it = items.begin(); it != items.end(); ++it) { m_dataViewCtrlErrorsModel->GetValue(variant, *it, supColumn); if(variant.GetBool()) { errorRef = dynamic_cast<MemCheckErrorReferrer*>(m_dataViewCtrlErrorsModel->GetClientObject(*it)); editor->AppendText(wxString::Format("\n%s", errorRef->Get().getSuppression())); errorRef->Get().suppressed = true; } } } break; case SUPPRESS_ALL: for(size_t item = 0; item < m_filterResults.size(); ++item) { editor->AppendText(wxString::Format("\n%s", m_filterResults[item]->getSuppression())); m_filterResults[item]->suppressed = true; } break; case SUPPRESS_SELECTED: long item = -1; for(;;) { item = m_listCtrlErrors->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); if(item == -1) break; editor->AppendText(wxString::Format("\n%s", m_filterResults[item]->getSuppression())); m_filterResults[item]->suppressed = true; } break; } editor->AppendText(wxT("\n")); editor->GetCtrl()->DocumentEnd(); int textLen = editor->GetCtrl()->GetCurrentPos() - posStart; editor->SelectText(posStart, textLen); wxCommandEvent saveEvent(wxEVT_COMMAND_MENU_SELECTED, XRCID("save_file")); m_mgr->GetTheApp()->GetTopWindow()->GetEventHandler()->ProcessEvent(saveEvent); // reload pages after suppression if(m_plugin->GetSettings()->GetOmitSuppressed()) { switch(mode) { case SUPPRESS_CLICKED: case SUPPRESS_CHECKED: ResetItemsView(); ShowPageView(m_currentPage); itemsInvalidSupp = true; break; case SUPPRESS_ALL: case SUPPRESS_SELECTED: ResetItemsSupp(); ApplyFilterSupp(FILTER_STRING); itemsInvalidView = true; break; } } } } }