📄 rimshotdoc.cpp
字号:
/* -*- Mode: C; c-basic-offset:4 ; -*- *//* $Id: rimshotDoc.cpp,v 1.5 2002/09/27 21:11:15 toonen Exp $ * * (C) 2001 by Argonne National Laboratory. * See COPYRIGHT in top-level directory. */// rimshotDoc.cpp : implementation of the CRimshotDoc class//#include "stdafx.h"#include "rimshot.h"#include "rimshotDoc.h"#include "RimshotView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CRimshotDocIMPLEMENT_DYNCREATE(CRimshotDoc, CDocument)BEGIN_MESSAGE_MAP(CRimshotDoc, CDocument) //{{AFX_MSG_MAP(CRimshotDoc) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CRimshotDoc construction/destructionCRimshotDoc::CRimshotDoc(){ m_pInput = NULL; m_dLeft = 0.0; m_dRight = 0.0; m_dFirst = 0.0; m_dLast = 0.0; m_pStateList = NULL;}CRimshotDoc::~CRimshotDoc(){ if (m_pInput != NULL) RLOG_CloseInputStruct(&m_pInput); if (m_pStateList) { StateNode *pNode = m_pStateList; m_pStateList = m_pStateList->pNext; delete pNode; }}BOOL CRimshotDoc::OnNewDocument(){ if (!CDocument::OnNewDocument()) return FALSE; return TRUE;}/////////////////////////////////////////////////////////////////////////////// CRimshotDoc serializationvoid CRimshotDoc::Serialize(CArchive& ar){ if (ar.IsStoring()) { } else { }}/////////////////////////////////////////////////////////////////////////////// CRimshotDoc diagnostics#ifdef _DEBUGvoid CRimshotDoc::AssertValid() const{ CDocument::AssertValid();}void CRimshotDoc::Dump(CDumpContext& dc) const{ CDocument::Dump(dc);}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CRimshotDoc commandsCOLORREF StringToCOLORREF(const char *color_str){ int r,g,b; CString str = color_str; str.TrimLeft(); r = atoi(str); str.Delete(0, str.Find(" ")); str.TrimLeft(); g = atoi(str); str.Delete(0, str.Find(" ")); str.TrimLeft(); b = atoi(str); return RGB(r,g,b);}BOOL CRimshotDoc::OnOpenDocument(LPCTSTR lpszPathName) { int i; RLOG_EVENT event; RLOG_STATE state; if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE; if (m_pInput != NULL) RLOG_CloseInputStruct(&m_pInput); while (m_pStateList) { StateNode *pNode = m_pStateList; m_pStateList = m_pStateList->pNext; delete pNode; } m_dFirst = m_dLast = 0.0; m_dLeft = m_dRight = 0.0; m_pInput = RLOG_CreateInputStruct(lpszPathName); if (m_pInput == NULL) { MessageBox(NULL, "Failed to open input file", "Error", MB_OK); } else { m_dFirst = RLOG_MAX_DOUBLE; m_dLast = 0; for (i=0; i<m_pInput->nNumRanks; i++) { if (m_pInput->pNumEventRecursions[i] > 0) { RLOG_GetNextEvent(m_pInput, i, 0, &event); if (event.start_time < m_dFirst) m_dFirst = event.start_time; RLOG_GetEvent(m_pInput, i, 0, m_pInput->ppNumEvents[i][0]-1, &event); if (event.end_time > m_dLast) m_dLast = event.end_time; } } m_dLeft = m_dFirst - ((m_dLast - m_dFirst) / 2.0); m_dRight = m_dFirst + ((m_dLast - m_dFirst) / 2.0); } while (RLOG_GetNextState(m_pInput, &state) == 0) { StateNode *pState = new StateNode; pState->state = state; pState->id = state.event; pState->color = StringToCOLORREF(state.color); pState->brush.CreateSolidBrush(pState->color); pState->pNext = m_pStateList; m_pStateList = pState; } return TRUE;}COLORREF CRimshotDoc::GetEventColor(int event){ StateNode *pIter; pIter = m_pStateList; while (pIter) { if (pIter->id == event) return pIter->color; pIter = pIter->pNext; } return RGB(0,0,255);}CBrush* CRimshotDoc::GetEventBrush(int event){ StateNode *pIter; pIter = m_pStateList; while (pIter) { if (pIter->id == event) return &pIter->brush; pIter = pIter->pNext; } //return (CBrush*)GetStockObject(BLACK_BRUSH); return NULL;}void CRimshotDoc::OnFileOpen() { int i,j; CFileDialog f(TRUE, "rlog", NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST, "RLog Files (*.rlog)|*.rlog|All Files (*.*)|*.*||", NULL); if (f.DoModal() == IDOK) { if (OnOpenDocument(f.GetPathName())) { CRimshotView *pView; POSITION pos; pos = GetFirstViewPosition(); pView = (CRimshotView*)GetNextView(pos); pView->StopDrawing(); pView->m_Draw.pDoc = this; if (pView->m_Draw.pCursorRanks) delete [] pView->m_Draw.pCursorRanks; pView->m_Draw.pCursorRanks = new CursorRank[m_pInput->nNumRanks]; for (i=0; i<m_pInput->nNumRanks; i++) { pView->m_Draw.pCursorRanks[i].active = true; pView->m_Draw.pCursorRanks[i].rank = i; pView->m_Draw.pCursorRanks[i].rect.SetRect(0,0,0,0); } // delete the old if (pView->m_Draw.ppUniRecursionColor) { for (i=0; i<pView->m_Draw.nUniNumRanks; i++) { delete pView->m_Draw.ppUniRecursionColor[i]; } delete pView->m_Draw.ppUniRecursionColor; } // allocate the new pView->m_Draw.nUniNumRanks = m_pInput->nNumRanks; pView->m_Draw.ppUniRecursionColor = new COLORREF*[m_pInput->nNumRanks]; for (i=0; i<m_pInput->nNumRanks; i++) { pView->m_Draw.ppUniRecursionColor[i] = new COLORREF[m_pInput->pNumEventRecursions[i]]; for (j=0; j<m_pInput->pNumEventRecursions[i]; j++) pView->m_Draw.ppUniRecursionColor[i][j] = RGB(0,0,0); } pView->Invalidate(FALSE); SetTitle(f.GetPathName()); pView->StartDrawing(); } }}CString CRimshotDoc::GetEventDescription(int event){ StateNode *pIter; pIter = m_pStateList; while (pIter) { if (pIter->id == event) { return CString(pIter->state.description); } pIter = pIter->pNext; } return CString("unknown");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -