📄 controlunit.cpp
字号:
if(m_plUnitList.GetCount() <= 0)
return NULL;
POSITION pos = m_plUnitList.GetHeadPosition();
CControlUnit* pCtrlUnit = NULL;
while(pos != NULL)
{
pCtrlUnit = (CControlUnit*)m_plUnitList.GetNext(pos);
if(pCtrlUnit != NULL)
{
if(pCtrlUnit->GetUnitID() == wUnitID)
return pCtrlUnit;
}
}
return NULL;
}
BOOL CControlSegment::AddUnit(CControlUnit* pUnit)
{
if(m_plUnitList.Find(pUnit) != NULL)
return FALSE;
if(GetUnit(pUnit->GetUnitName()) != NULL)
return FALSE;
if(GetUnit(pUnit->GetUnitID()) != NULL)
return FALSE;
CDaoRecordset m_Recordset(&m_pModule->m_Database);
m_Recordset.Open(dbOpenDynaset,
"Select * from "+this->GetUnitTableName());
m_Recordset.AddNew();
CString strTemp;
strTemp=pUnit->GetUnitName();
m_Recordset.SetFieldValue("UnitName",(char*)(LPCTSTR)strTemp);
m_Recordset.Update();
CString strSQL="Select * From "+this->GetUnitTableName();
strSQL=strSQL+" Where UnitName = ";
strSQL=strSQL+"'"+pUnit->GetUnitName()+"'";
m_Recordset.Close();
m_Recordset.Open(dbOpenDynaset,strSQL);
if (m_Recordset.IsBOF() && m_Recordset.IsEOF())
{
delete pUnit;
return FALSE;
}
else
{
m_Recordset.MoveFirst();
COleVariant varValue;
varValue=m_Recordset.GetFieldValue("UnitID");
pUnit->m_wUnitID=atoi(OleVariantToString(varValue));
}
m_plUnitList.AddTail(pUnit);
pUnit->SetControlSegment(this);
pUnit->BuildMemTree();
CDataManagerDoc* m_pDoc=(CDataManagerDoc*)((CMainFrame*)
AfxGetApp()->m_pMainWnd)->GetActiveDocument();
POSITION pos=m_pDoc->GetFirstViewPosition();
CLeftView* p_TreeView;
CDataManagerView* p_ListView;
while (pos != NULL)
{
CView* pView = m_pDoc->GetNextView(pos);
if(pView->IsKindOf(RUNTIME_CLASS(CLeftView)))
{
p_TreeView=(CLeftView*)pView;
}
else if(pView->IsKindOf(RUNTIME_CLASS(CDataManagerView)))
{
p_ListView=(CDataManagerView*)pView;
}
}
CListCtrl& m_list=p_ListView->GetListCtrl();
CTreeCtrl& m_tree=p_TreeView->GetTreeCtrl();
HTREEITEM hItem=this->hItem;
hItem=m_tree.InsertItem(pUnit->GetUnitName(),hItem,TVI_LAST);
m_tree.SetItemData(hItem,1);
if (this->hItem==m_tree.GetSelectedItem())
m_list.InsertItem(m_list.GetItemCount(),pUnit->GetUnitName());
return TRUE;
}
BOOL CControlSegment::AddUnit(CString strUnitName)
{
CControlUnit* pCtrlUnit = new CControlUnit;
pCtrlUnit->m_strUnitName=strUnitName;
return AddUnit(pCtrlUnit);
}
BOOL CControlSegment::DeleteUnit(CControlUnit* pUnit)
{
POSITION pos = m_plUnitList.Find(pUnit);
if(pos != NULL)
{
CString strSQL;
strSQL="Drop Table "+pUnit->GetPointTableName();
this->m_pModule->m_Database.Execute(strSQL);
strSQL="Delete From "+this->GetUnitTableName();
strSQL=strSQL+" Where UnitName = ";
strSQL=strSQL+"'"+pUnit->m_strUnitName+"'";
this->m_pModule->m_Database.Execute(strSQL);
for (int i=0;i<pUnit->GetPointCount();i++)
{
CControlPoint* TempControlPoint;
TempControlPoint=pUnit->GetPoint(i);
strSQL="Delete From "+this->GetHisTableName();
strSQL=strSQL+" Where PointID = ";
CString strID;
strID.Format("%d",TempControlPoint->GetPointLongID());
strSQL=strSQL+strID;
this->m_pModule->m_Database.Execute(strSQL);
}
CDataManagerDoc* m_pDoc=(CDataManagerDoc*)((CMainFrame*)
AfxGetApp()->m_pMainWnd)->GetActiveDocument();
POSITION viewpos=m_pDoc->GetFirstViewPosition();
CLeftView* p_TreeView;
CDataManagerView* p_ListView;
while (viewpos != NULL)
{
CView* pView = m_pDoc->GetNextView(viewpos);
if(pView->IsKindOf(RUNTIME_CLASS(CLeftView)))
{
p_TreeView=(CLeftView*)pView;
}
else if(pView->IsKindOf(RUNTIME_CLASS(CDataManagerView)))
{
p_ListView=(CDataManagerView*)pView;
}
}
CListCtrl& m_list=p_ListView->GetListCtrl();
CTreeCtrl& m_tree=p_TreeView->GetTreeCtrl();
HTREEITEM hItem=m_tree.GetSelectedItem();
HTREEITEM hSubItem=m_tree.GetChildItem(hItem);
while(hSubItem)
{
if(m_tree.GetItemText(hSubItem)==pUnit->GetUnitName())
break;
hSubItem=m_tree.GetNextSiblingItem(hSubItem);
}
m_tree.DeleteItem(hSubItem);
POSITION itempos=m_list.GetFirstSelectedItemPosition();
m_list.DeleteItem(m_list.GetNextSelectedItem(itempos));
m_plUnitList.RemoveAt(pos);
pUnit->SetControlSegment(NULL);
delete pUnit;
return TRUE;
}
else
return FALSE;
}
BOOL CControlSegment::DeleteUnit(int nIndex)
{
POSITION pos = m_plUnitList.FindIndex(nIndex);
CControlUnit* pCtrlUnit = NULL;
if(pos != NULL)
{
pCtrlUnit = (CControlUnit*)m_plUnitList.GetAt(pos);
return DeleteUnit(pCtrlUnit);
}
else
return FALSE;
}
CControlModule* CControlSegment::GetControlModule()
{
return m_pModule;
}
void CControlSegment::SetControlModule(CControlModule* pModule)
{
m_pModule = pModule;
}
void CControlSegment::BuildMemTree()
{
if (!(GetControlModule()->CheckTable(this->GetHisTableName())))
{
CString strSQL;
strSQL="Create Table "+this->GetHisTableName();
strSQL=strSQL + "( PointID Integer not Null,";
strSQL=strSQL + "PointTime DateTime not Null,";
strSQL=strSQL+"PointValue VarChar(30) not Null)";
m_pModule->m_Database.Execute(strSQL);
}
if (!this->m_pModule->CheckTable(this->GetPointNameID()))
{
CString strSQL;
strSQL="Create Table "+this->GetPointNameID();
strSQL=strSQL+"( PointID Integer not Null,";
strSQL=strSQL+"PointName VarChar(255) not Null)";
m_pModule->m_Database.Execute(strSQL);
}
if (!this->m_pModule->CheckTable(this->GetUnitTableName()))
{
CString strSQL;
strSQL="Create Table "+this->GetUnitTableName();
strSQL=strSQL+"( UnitName VarChar(30) not Null,";
strSQL=strSQL+"UnitID AUTOINCREMENT,";
strSQL=strSQL+"UnitMemo VarChar(255) Null)";
m_pModule->m_Database.Execute(strSQL);
}
CDaoRecordset m_Recordset(&m_pModule->m_Database);
m_Recordset.Open(dbOpenDynaset,"Select * from "+
this->GetUnitTableName());
if (!(m_Recordset.IsBOF() && m_Recordset.IsEOF()))
{
m_Recordset.MoveFirst();
while(!m_Recordset.IsEOF())
{
CControlUnit* TempCtrlUnit;
TempCtrlUnit=new CControlUnit;
COleVariant varValue=m_Recordset.GetFieldValue("UnitName");
TempCtrlUnit->m_strUnitName=OleVariantToString(varValue);
varValue=m_Recordset.GetFieldValue("UnitID");
TempCtrlUnit->m_wUnitID=atoi(OleVariantToString(varValue));
TempCtrlUnit->m_pSegment=this;
this->m_plUnitList.AddTail(TempCtrlUnit);
m_Recordset.MoveNext();
}
}
for (int i=0;i<GetUnitCount();i++)
{
CControlUnit* TempCtrlUnit;
TempCtrlUnit=this->GetUnit(i);
TempCtrlUnit->BuildMemTree();
}
}
CString CControlSegment::GetHisTableName()
{
CString strID;
strID.Format("%d",GetSegmentID());
return "S"+ strID+"_HisData";
}
CString CControlSegment::GetPointNameID()
{
CString strID;
strID.Format("%d",GetSegmentID());
return "S"+ strID+"_NameIDData";
}
CString CControlSegment::GetUnitTableName()
{
CString strID;
strID.Format("%d",GetSegmentID());
return "S"+ strID+"_UnitData";
}
//////////////////////////////////////////////////////////////////////
// CControlUnit Class
CControlUnit::CControlUnit()
{
m_strUnitName.Empty();
}
CControlUnit::~CControlUnit()
{
CControlPoint* pCtrlPoint = NULL;
while(m_plPointList.GetCount() > 0)
{
pCtrlPoint = (CControlPoint*)m_plPointList.RemoveHead();
delete pCtrlPoint;
}
}
CString CControlUnit::GetUnitName()
{
return m_strUnitName;
}
CString CControlUnit::GetUnitLongName()
{
if (m_pSegment==NULL)
return this->m_strUnitName;
else
return m_pSegment->GetSegmentName()+"."+GetUnitName();
}
BOOL CControlUnit::SetUnitName(CString strUnitName)
{
if(strUnitName.IsEmpty())
return FALSE;
if(m_strUnitName == strUnitName)
return FALSE;
m_strUnitName = strUnitName;
return TRUE;
}
CControlSegment* CControlUnit::GetControlSegment()
{
return m_pSegment;
}
void CControlUnit::SetControlSegment(CControlSegment* pSegment)
{
m_pSegment = pSegment;
}
WORD CControlUnit::GetUnitID()
{
return m_wUnitID;
}
BOOL CControlUnit::SetUnitID(WORD wUnitID)
{
if(m_wUnitID == wUnitID)
return FALSE;
m_wUnitID = wUnitID;
return TRUE;
}
int CControlUnit::GetPointCount()
{
return m_plPointList.GetCount();
}
CControlPoint* CControlUnit::GetPoint(int nIndex)
{
POSITION pos = m_plPointList.FindIndex(nIndex);
if(pos != NULL)
return (CControlPoint*) m_plPointList.GetAt(pos);
return NULL;
}
CControlPoint* CControlUnit::GetPoint(CString strPointName)
{
POSITION pos = m_plPointList.GetHeadPosition();
CControlPoint* pCtrlPoint = NULL;
while(pos != NULL)
{
pCtrlPoint = (CControlPoint*) m_plPointList.GetNext(pos);
if(pCtrlPoint != NULL)
{
if(pCtrlPoint->GetPointName() == strPointName)
return pCtrlPoint;
}
}
return NULL;
}
CControlPoint* CControlUnit::GetPoint(WORD wPointID)
{
POSITION pos = m_plPointList.GetHeadPosition();
CControlPoint* pCtrlPoint = NULL;
while(pos != NULL)
{
pCtrlPoint = (CControlPoint*) m_plPointList.GetNext(pos);
if(pCtrlPoint != NULL)
{
if(pCtrlPoint->GetPointID() == wPointID)
return pCtrlPoint;
}
}
return NULL;
}
CString CControlUnit::GetPointTableName()
{
CString strUnitID,strSegmentID;
strUnitID.Format("%d",this->m_wUnitID);
strSegmentID.Format("%d",this->m_pSegment->GetSegmentID());
if (this->m_pSegment==NULL)
{
return "U"+strUnitID+"_PointData";
}
else
{
return "S"+strSegmentID+"_U"+strUnitID+"_PointData";
}
}
BOOL CControlUnit::AddPoint(CControlPoint* pPoint)
{
if(m_plPointList.Find(pPoint) != NULL)
return FALSE;
if(GetPoint(pPoint->GetPointName()) != NULL)
return FALSE;
if(GetPoint(pPoint->GetPointID()) != NULL)
return FALSE;
pPoint->SetControlUnit(this);
CDaoRecordset m_Recordset(&this->m_pSegment->m_pModule->m_Database);
m_Recordset.Open(dbOpenDynaset,"Select * from "+
this->GetPointTableName());
m_Recordset.AddNew();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -