// ProbStatDlg.cpp : implementation file // #include "stdafx.h" #include "sp.h" #include "ProbStatDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CProbStatDlg dialog CProbStatDlg::CProbStatDlg(CWnd* pParent /*=NULL*/) : CDialog(CProbStatDlg::IDD, pParent) { //{{AFX_DATA_INIT(CProbStatDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_pApp= (CSpApp*)AfxGetApp(); /* rs=new GZRset("Problem status dialog"); rs->SetConnect(m_pApp->strConnectString); */ //Initialize recordset pointer rs=m_pApp->rsPool->GetRS("CProbStatDlg"); m_bAddMode=false; } void CProbStatDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CProbStatDlg) DDX_Control(pDX, IDC_BTNCOLOR, m_btnColor); DDX_Control(pDX, IDC_LBLSAMPLE, m_lblSample); DDX_Control(pDX, IDC_LBLSTATUSLIST, m_lblStatusList); DDX_Control(pDX, IDC_EDSTATUSITEM, m_edStatusItem); DDX_Control(pDX, IDC_CBSTATUSITEMLIST, m_cbStatusItemsList); DDX_Control(pDX, IDC_BTNDONE, m_BtnDone); DDX_Control(pDX, IDC_BTNDELETE, m_BtnDelete); DDX_Control(pDX, IDC_BTNADD, m_BtnAdd); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CProbStatDlg, CDialog) //{{AFX_MSG_MAP(CProbStatDlg) ON_BN_CLICKED(IDC_BTNADD, OnBtnadd) ON_BN_CLICKED(IDC_BTNDELETE, OnBtndelete) ON_BN_CLICKED(IDC_BTNDONE, OnBtndone) ON_CBN_CLOSEUP(IDC_CBSTATUSITEMLIST, OnCloseupCbstatusitemlist) ON_BN_CLICKED(IDC_BTNCOLOR, OnBtncolor) ON_EN_KILLFOCUS(IDC_EDSTATUSITEM, OnKillfocusEdstatusitem) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CProbStatDlg message handlers void CProbStatDlg::OnBtnadd() { CString q,text; if(m_bAddMode) {//save m_edStatusItem.GetWindowText(text); if(text.IsEmpty()) { AfxMessageBox("You haven't entered any text, click on Cancel if don't want to add an item"); m_edStatusItem.SetFocus(); return; } q.Format("SELECT probstat.notes " "FROM probstat WHERE (((probstat.notes)=\"%s\"));",text); rs->Query(q); if(!rs->IsEmpty()) { AfxMessageBox("There is already an item with this name"); m_edStatusItem.SetFocus(); return; } else { q.Format("INSERT INTO probstat ( notes, red, green, blue ) " "SELECT \"%s\", %u, %u, %u;",text,m_lRed,m_lGreen,m_lBlue); rs->Ex(q); rs->Close(); } m_cbStatusItemsList.ShowWindow(TRUE); m_lblStatusList.ShowWindow(TRUE); m_btnColor.ShowWindow(TRUE); m_lblSample.ShowWindow(TRUE); m_BtnDelete.SetWindowText("Delete"); m_BtnAdd.SetWindowText("Add"); m_BtnDone.ShowWindow(TRUE); m_edStatusItem.SetFocus(); FillList(); m_bAddMode=false; } else {//go to add mode m_edStatusItem.SetWindowText(""); m_btnColor.ShowWindow(FALSE); m_lblSample.ShowWindow(FALSE); m_cbStatusItemsList.ShowWindow(FALSE); m_lblStatusList.ShowWindow(FALSE); m_BtnDelete.SetWindowText("Cancel"); m_BtnAdd.SetWindowText("Save"); m_BtnDone.ShowWindow(FALSE); m_edStatusItem.SetFocus(); m_bAddMode=true; } } void CProbStatDlg::OnBtndelete() { CString q; long count; if(m_bAddMode) { m_cbStatusItemsList.ShowWindow(TRUE); m_lblStatusList.ShowWindow(TRUE); m_BtnDelete.SetWindowText("Delete"); m_BtnAdd.SetWindowText("Add"); m_BtnDone.ShowWindow(TRUE); m_edStatusItem.SetFocus(); FillList(); m_bAddMode=false; } else { if(m_cbStatusItemsList.GetCurrentRowID()=="1") { AfxMessageBox("You can't delete this item"); return; } q.Format("SELECT Count(probs.id) AS itemcount " "FROM probs INNER JOIN probstat ON probs.status = probstat.id " "GROUP BY probstat.id " "HAVING (((probstat.id)=%s));",m_cbStatusItemsList.GetCurrentRowID()); //m_pApp->ShowStuff(q); rs->Query(q); if(!rs->IsEmpty()) { rs->FetchField("itemcount",&count); //v1.9.4.5 changed %s below to %u was causing a crash q.Format("You can't delete this item.\r\n" "It's in use on %u workorders in the system.",count); AfxMessageBox(q); return; } else { if(AfxMessageBox("Delete this status item?",MB_YESNO)==IDYES) { q.Format("DELETE probstat.id, probstat.* " "FROM probstat WHERE (((probstat.id)=%s));",m_cbStatusItemsList.GetCurrentRowID()); rs->Ex(q); FillList(); } } } } void CProbStatDlg::OnBtndone() { // TODO: Add your control notification handler code here CDialog::OnOK(); } void CProbStatDlg::OnOK() { // TODO: Add extra validation here } CProbStatDlg::~CProbStatDlg() { m_pApp->rsPool->ReleaseRS(&rs->m_nID); } void CProbStatDlg::FillList() { CString q,strData,strIndex; long lData; //FILL STATUS LIST m_cbStatusItemsList.Clear(); rs->Query("SELECT probstat.id, probstat.notes FROM probstat ORDER BY probstat.id;"); if(!rs->IsEmpty()) { do { rs->FetchField("notes",&strData); rs->FetchField("id",&lData); strIndex.Format("%u",lData); m_cbStatusItemsList.AddRow(strData,strIndex); }while(rs->MoveForward()); m_cbStatusItemsList.SetCurSel(0); OnCloseupCbstatusitemlist(); } } BOOL CProbStatDlg::OnInitDialog() { CDialog::OnInitDialog(); m_lblSample.SetFontName("Arial"); m_lblSample.SetTextColor(RGB(0,0,0)); m_lblSample.SetBkColor(RGB(255,255,255)); m_lblSample.SetFontSize(22); m_lblSample.SetFontBold(TRUE); FillList(); // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CProbStatDlg::OnCloseupCbstatusitemlist() { CString q; m_edStatusItem.SetWindowText(m_cbStatusItemsList.GetCurrentRowText()); q.Format("SELECT probstat.* FROM probstat " "WHERE (((probstat.id)=%s));",m_cbStatusItemsList.GetCurrentRowID()); rs->QueryReadOnly(q); if(!rs->IsEmpty()) { rs->FetchField("red",&m_lRed); rs->FetchField("green",&m_lGreen); rs->FetchField("blue",&m_lBlue); } else { m_lRed=0; m_lGreen=0; m_lBlue=0; } m_lblSample.SetTextColor(RGB(m_lRed,m_lGreen,m_lBlue)); //CString id; //id=m_cbStatusItemsList.GetCurrentRowID(); } //COLOR CHANGE? void CProbStatDlg::OnBtncolor() { CString q; CColorDialog dlg(RGB(255,0,0),CC_SOLIDCOLOR/*|CC_PREVENTFULLOPEN*/); if (dlg.DoModal() == IDOK) { COLORREF color = dlg.GetColor(); m_lRed=GetRValue(color); m_lGreen=GetGValue(color); m_lBlue=GetBValue(color); q.Format("UPDATE probstat SET probstat.red = %u, probstat.green = %u, probstat.blue = %u " "WHERE (((probstat.id)=%s));", m_lRed, m_lGreen, m_lBlue, m_cbStatusItemsList.GetCurrentRowID()); rs->Ex(q); m_lblSample.SetTextColor(RGB(m_lRed,m_lGreen,m_lBlue)); } } void CProbStatDlg::OnKillfocusEdstatusitem() { CString text,q; if(m_bAddMode || m_edStatusItem.GetModify()==FALSE) return; m_edStatusItem.GetWindowText(text); if(text.IsEmpty()) { AfxMessageBox("You haven't entered any text, this field can not be blank"); m_edStatusItem.Undo(); m_edStatusItem.SetFocus(); return; } q.Format("SELECT probstat.notes " "FROM probstat WHERE (((probstat.notes)=\"%s\"));",text); rs->Query(q); if(!rs->IsEmpty()) { AfxMessageBox("There is already an item with this name"); m_edStatusItem.SetFocus(); return; } else { q.Format("UPDATE probstat SET probstat.notes = \"%s\" " "WHERE (((probstat.id)=%s));", text, m_cbStatusItemsList.GetCurrentRowID()); rs->Ex(q); rs->Close(); } m_edStatusItem.SetModify(FALSE); FillList(); }