BOOL CChannelsDlg::OnInitDialog() { CDialog::OnInitDialog(); m_pAvailableTree = (CTreeCtrl*)GetDlgItem(IDC_AVAILABLE_TREE); m_pAddedChannels = (CListCtrl*)GetDlgItem(IDC_ADDED_LIST); int RootItems = sizeof(ROOT_ITEMS) / sizeof(TCHAR); // m_pAddedChannels->GetWIndowLon m_pAddedChannels->InsertColumn(0, _T("Name"), 0, 150); for (int i = 0; i < ROOT_ITEM_COUNT; ++i) { HTREEITEM hItem = m_pAvailableTree->InsertItem(ROOT_ITEMS[i]); m_hRootItems[i] = hItem; for (int j = 0; CHILD_ITEMS[i][j] != NULL; ++j) { CString str; str.Format(_T("%i: %s"), j + 1, CHILD_ITEMS[i][j]); HTREEITEM hChild = m_pAvailableTree->InsertItem(str, hItem); m_pAvailableTree->SetItemData(hChild, CHILD_ITEMS_ID[i][j]); } m_pAvailableTree->SortChildren(hItem); } CChannelMap *map = theApp.GetChannelMap(); CFamiTrackerDoc *pDoc = CFamiTrackerDoc::GetDoc(); for (unsigned i = 0; i < pDoc->GetAvailableChannels(); ++i) { CTrackerChannel *pChannel = pDoc->GetChannel(i); AddChannel(pChannel->GetID()); } /* AddChannel(CHANID_SQUARE1); AddChannel(CHANID_SQUARE2); AddChannel(CHANID_TRIANGLE); AddChannel(CHANID_NOISE); AddChannel(CHANID_DPCM); */ return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
void CFrameAction::Redo(CMainFrame *pMainFrm) { // Redo action CFamiTrackerView *pView = (CFamiTrackerView*)pMainFrm->GetActiveView(); CFamiTrackerDoc *pDocument = pView->GetDocument(); switch (m_iAction) { case ACT_ADD: pDocument->InsertFrame(m_iUndoFramePos + 1); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_REMOVE: pDocument->RemoveFrame(m_iUndoFramePos); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_DUPLICATE: pDocument->DuplicateFrame(m_iUndoFramePos); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_DUPLICATE_PATTERNS: pDocument->DuplicatePatterns(m_iUndoFramePos + 1); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_CHANGE_COUNT: pDocument->SetFrameCount(m_iNewFrameCount); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_SET_PATTERN: pDocument->SetPatternAtFrame(m_iUndoFramePos, m_iUndoChannelPos, m_iNewPattern); pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); pMainFrm->UpdateControls(); break; case ACT_SET_PATTERN_ALL: { int Channels = pDocument->GetAvailableChannels(); for (int i = 0; i < Channels; ++i) { pDocument->SetPatternAtFrame(m_iUndoFramePos, i, m_iNewPattern); } pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); } break; case ACT_CHANGE_PATTERN: pDocument->SetPatternAtFrame(m_iUndoFramePos, m_iUndoChannelPos, m_iOldPattern + m_iPatternDelta); pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); break; case ACT_CHANGE_PATTERN_ALL: { int Channels = pDocument->GetAvailableChannels(); for (int i = 0; i < Channels; ++i) { pDocument->SetPatternAtFrame(m_iUndoFramePos, i, m_iPatterns[i] + m_iPatternDelta); } pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); } break; case ACT_MOVE_DOWN: pDocument->MoveFrameDown(m_iUndoFramePos); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_MOVE_UP: pDocument->MoveFrameUp(m_iUndoFramePos); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_PASTE: { int Channels = pDocument->GetAvailableChannels(); for (int i = 0; i < Channels; ++i) pDocument->SetPatternAtFrame(m_iUndoFramePos, i, m_iPasteData[i]); } pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); break; } pView->SelectFrame(m_iRedoFramePos); pView->SelectChannel(m_iRedoChannelPos); }
bool CFrameAction::SaveState(CMainFrame *pMainFrm) { // Perform action CFrameEditor *pFrameEditor = pMainFrm->GetFrameEditor(); CFamiTrackerView *pView = (CFamiTrackerView*)pMainFrm->GetActiveView(); CFamiTrackerDoc *pDocument = pView->GetDocument(); m_iUndoFramePos = pView->GetSelectedFrame(); m_iUndoChannelPos = pView->GetSelectedChannel(); switch (m_iAction) { case ACT_ADD: if (!pDocument->InsertFrame(m_iUndoFramePos + 1)) return false; pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_REMOVE: SaveFrame(pDocument); if (!pDocument->RemoveFrame(m_iUndoFramePos)) return false; pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_DUPLICATE: if (!pDocument->DuplicateFrame(m_iUndoFramePos)) return false; pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_DUPLICATE_PATTERNS: if (!pDocument->DuplicatePatterns(m_iUndoFramePos + 1)) return false; pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_CHANGE_COUNT: m_iUndoFrameCount = pDocument->GetFrameCount(); pDocument->SetFrameCount(m_iNewFrameCount); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_SET_PATTERN: m_iOldPattern = pDocument->GetPatternAtFrame(m_iUndoFramePos, m_iUndoChannelPos); pDocument->SetPatternAtFrame(m_iUndoFramePos, m_iUndoChannelPos, m_iNewPattern); pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); break; case ACT_SET_PATTERN_ALL: { int Channels = pDocument->GetAvailableChannels(); for (int i = 0; i < Channels; ++i) { m_iPatterns[i] = pDocument->GetPatternAtFrame(m_iUndoFramePos, i); pDocument->SetPatternAtFrame(m_iUndoFramePos, i, m_iNewPattern); } pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); } break; case ACT_CHANGE_PATTERN: { m_iOldPattern = pDocument->GetPatternAtFrame(m_iUndoFramePos, m_iUndoChannelPos); int NewPattern = m_iOldPattern + m_iPatternDelta; if (NewPattern < 0) NewPattern = 0; if (NewPattern >= MAX_FRAMES) NewPattern = MAX_FRAMES - 1; if (NewPattern == m_iOldPattern) return false; pDocument->SetPatternAtFrame(m_iUndoFramePos, m_iUndoChannelPos, NewPattern); pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); } break; case ACT_CHANGE_PATTERN_ALL: { int Channels = pDocument->GetAvailableChannels(); for (int i = 0; i < Channels; ++i) { m_iPatterns[i] = pDocument->GetPatternAtFrame(m_iUndoFramePos, i); if (m_iPatterns[i] + m_iPatternDelta < 0 || m_iPatterns[i] + m_iPatternDelta >= MAX_FRAMES) return false; } for (int i = 0; i < Channels; ++i) pDocument->SetPatternAtFrame(m_iUndoFramePos, i, m_iPatterns[i] + m_iPatternDelta); pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); } break; case ACT_MOVE_DOWN: if (!pDocument->MoveFrameDown(m_iUndoFramePos)) return false; pView->SelectFrame(m_iUndoFramePos + 1); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_MOVE_UP: if (!pDocument->MoveFrameUp(m_iUndoFramePos)) return false; pView->SelectFrame(m_iUndoFramePos - 1); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_PASTE: SaveFrame(pDocument); { int Channels = pDocument->GetAvailableChannels(); for (int i = 0; i < Channels; ++i) pDocument->SetPatternAtFrame(m_iUndoFramePos, i, m_iPasteData[i]); } pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); break; } return true; }
void CFrameAction::Undo(CMainFrame *pMainFrm) { // Undo action CFrameEditor *pFrameEditor = pMainFrm->GetFrameEditor(); CFamiTrackerView *pView = (CFamiTrackerView*)pMainFrm->GetActiveView(); CFamiTrackerDoc *pDocument = pView->GetDocument(); m_iRedoFramePos = pView->GetSelectedFrame(); m_iRedoChannelPos = pView->GetSelectedChannel(); pView->SelectFrame(m_iUndoFramePos); pView->SelectChannel(m_iUndoChannelPos); switch (m_iAction) { case ACT_ADD: pDocument->RemoveFrame(m_iUndoFramePos + 1); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_REMOVE: pDocument->InsertFrame(m_iUndoFramePos); RestoreFrame(pDocument); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_DUPLICATE: pDocument->RemoveFrame(m_iUndoFramePos); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_DUPLICATE_PATTERNS: for (unsigned int i = 0; i < pDocument->GetAvailableChannels(); ++i) { pDocument->ClearPattern(m_iUndoFramePos + 1, i); } pDocument->RemoveFrame(m_iUndoFramePos + 1); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_CHANGE_COUNT: pDocument->SetFrameCount(m_iUndoFrameCount); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_SET_PATTERN: pDocument->SetPatternAtFrame(m_iUndoFramePos, m_iUndoChannelPos, m_iOldPattern); pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); pMainFrm->UpdateControls(); break; case ACT_SET_PATTERN_ALL: for (unsigned int i = 0; i < pDocument->GetAvailableChannels(); ++i) { pDocument->SetPatternAtFrame(m_iUndoFramePos, i, m_iPatterns[i]); } pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); break; case ACT_CHANGE_PATTERN: pDocument->SetPatternAtFrame(m_iUndoFramePos, m_iUndoChannelPos, m_iOldPattern); pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); break; case ACT_CHANGE_PATTERN_ALL: for (unsigned int i = 0; i < pDocument->GetAvailableChannels(); ++i) { pDocument->SetPatternAtFrame(m_iUndoFramePos, i, m_iPatterns[i]); } pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); break; case ACT_MOVE_DOWN: pDocument->MoveFrameUp(m_iUndoFramePos + 1); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_MOVE_UP: pDocument->MoveFrameDown(m_iUndoFramePos - 1); pDocument->UpdateAllViews(NULL, CHANGED_FRAMES); break; case ACT_PASTE: RestoreFrame(pDocument); pDocument->UpdateAllViews(NULL, CHANGED_PATTERN); break; } pView->SelectFrame(m_iUndoFramePos); pView->SelectChannel(m_iUndoChannelPos); }