// this function deals with the left click on an event in the tree view. We get into this // function so that we may update the other data on the screen (i.e repeat count and interval // count) void event_editor::OnSelchangedEventTree(NMHDR* pNMHDR, LRESULT* pResult) { int i, z; NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; HTREEITEM h, h2; // before we do anything, we must check and save off any data from the current event (i.e. // the repeat count and interval count) save(); h = pNMTreeView->itemNew.hItem; if (!h){ return; } m_event_tree.update_help(h); while ((h2 = m_event_tree.GetParentItem(h))>0){ h = h2; } z = m_event_tree.GetItemData(h); for (i=0; i<m_num_events; i++){ if (m_events[i].formula == z){ break; } } Assert(i < m_num_events); cur_event = i; update_cur_event(); *pResult = 0; }
void event_editor::reset_event(int num, HTREEITEM after) { int index; HTREEITEM h; strcpy_s(m_events[num].name, "Event name"); h = m_event_tree.insert(m_events[num].name, BITMAP_ROOT, BITMAP_ROOT, TVI_ROOT, after); m_events[num].repeat_count = 1; m_events[num].trigger_count = 1; m_events[num].interval = 1; m_events[num].score = 0; m_events[num].chain_delay = -1; m_events[num].objective_text = NULL; m_events[num].objective_key_text = NULL; m_events[num].team = -1; m_events[num].mission_log_flags = 0; m_sig[num] = -1; m_event_tree.item_index = -1; m_event_tree.add_operator("when", h); index = m_events[num].formula = m_event_tree.item_index; m_event_tree.SetItemData(h, index); m_event_tree.add_operator("true"); m_event_tree.item_index = index; m_event_tree.add_operator("do-nothing"); update_cur_event(); m_event_tree.SelectItem(h); // GetDlgItem(IDC_CHAIN_DELAY) -> EnableWindow(FALSE); if (num >= MAX_MISSION_EVENTS){ GetDlgItem(IDC_BUTTON_NEW_EVENT)->EnableWindow(FALSE); } }
void event_editor::OnDelete() { HTREEITEM h; // call update_cur_event to clean up local class variables so that we can correctly // set up the newly selected item. cur_event = -1; update_cur_event(); h = m_event_tree.GetSelectedItem(); if (h) { while (m_event_tree.GetParentItem(h)) h = m_event_tree.GetParentItem(h); m_event_tree.setup_selected(h); m_event_tree.OnCommand(ID_DELETE, 0); } }
int event_editor::handler(int code, int node, char *str) { int i, index; switch (code) { case ROOT_DELETED: for (i=0; i<m_num_events; i++) if (m_events[i].formula == node) break; Assert(i < m_num_events); index = i; while (i < m_num_events - 1) { m_events[i] = m_events[i + 1]; m_sig[i] = m_sig[i + 1]; i++; } m_num_events--; GetDlgItem(IDC_BUTTON_NEW_EVENT)->EnableWindow(TRUE); cur_event = index; update_cur_event(); return node; case ROOT_RENAMED: for (i=0; i<m_num_events; i++) if (m_events[i].formula == node) break; Assert(i < m_num_events); Assert(strlen(str) < NAME_LENGTH); strcpy_s(m_events[i].name, str); return node; default: Int3(); } return -1; }
void event_editor::swap_handler(int node1, int node2) { int index1, index2; mission_event m; save(); for (index1=0; index1<m_num_events; index1++){ if (m_events[index1].formula == node1){ break; } } Assert(index1 < m_num_events); for (index2=0; index2<m_num_events; index2++){ if (m_events[index2].formula == node2){ break; } } Assert(index2 < m_num_events); m = m_events[index1]; // m_events[index1] = m_events[index2]; while (index1 < index2) { m_events[index1] = m_events[index1 + 1]; m_sig[index1] = m_sig[index1 + 1]; index1++; } while (index1 > index2 + 1) { m_events[index1] = m_events[index1 - 1]; m_sig[index1] = m_sig[index1 - 1]; index1--; } m_events[index1] = m; cur_event = index1; update_cur_event(); }
BOOL event_editor::OnInitDialog() { int i, adjust = 0; BOOL r = TRUE; CListBox *list; CComboBox *box; MMessage msg; CDialog::OnInitDialog(); // let the base class do the default work m_play_bm.LoadBitmap(IDB_PLAY); ((CButton *) GetDlgItem(IDC_PLAY)) -> SetBitmap(m_play_bm); if (!Show_sexp_help) adjust = -SEXP_HELP_BOX_SIZE; theApp.init_window(&Events_wnd_data, this, adjust); m_event_tree.setup((CEdit *) GetDlgItem(IDC_HELP_BOX)); load_tree(); create_tree(); if (m_num_events >= MAX_MISSION_EVENTS){ GetDlgItem(IDC_BUTTON_NEW_EVENT)->EnableWindow(FALSE); } update_cur_event(); i = m_event_tree.select_sexp_node; if (i != -1) { GetDlgItem(IDC_EVENT_TREE) -> SetFocus(); m_event_tree.hilite_item(i); r = FALSE; } m_num_messages = Num_messages - Num_builtin_messages; for (i=0; i<m_num_messages; i++) { msg = Messages[i + Num_builtin_messages]; m_messages.push_back(msg); if (m_messages[i].avi_info.name){ m_messages[i].avi_info.name = strdup(m_messages[i].avi_info.name); } if (m_messages[i].wave_info.name){ m_messages[i].wave_info.name = strdup(m_messages[i].wave_info.name); } } ((CEdit *) GetDlgItem(IDC_MESSAGE_NAME))->LimitText(NAME_LENGTH - 1); ((CEdit *) GetDlgItem(IDC_MESSAGE_TEXT))->LimitText(MESSAGE_LENGTH - 1); ((CComboBox *) GetDlgItem(IDC_AVI_FILENAME))->LimitText(MAX_FILENAME_LEN - 1); ((CComboBox *) GetDlgItem(IDC_WAVE_FILENAME))->LimitText(MAX_FILENAME_LEN - 1); list = (CListBox *) GetDlgItem(IDC_MESSAGE_LIST); list->ResetContent(); for (i=0; i<m_num_messages; i++) { list->AddString(m_messages[i].name); } box = (CComboBox *) GetDlgItem(IDC_AVI_FILENAME); box->ResetContent(); box->AddString("<None>"); for (i=0; i<Num_messages; i++) { if (Messages[i].avi_info.name) { maybe_add_head(box, Messages[i].avi_info.name); } } // add new heads, if not already in maybe_add_head(box, "Head-TP2"); maybe_add_head(box, "Head-VC2"); maybe_add_head(box, "Head-TP4"); maybe_add_head(box, "Head-TP5"); maybe_add_head(box, "Head-TP6"); maybe_add_head(box, "Head-TP7"); maybe_add_head(box, "Head-TP8"); maybe_add_head(box, "Head-VP2"); maybe_add_head(box, "Head-VP2"); maybe_add_head(box, "Head-CM2"); maybe_add_head(box, "Head-CM3"); maybe_add_head(box, "Head-CM4"); maybe_add_head(box, "Head-CM5"); maybe_add_head(box, "Head-BSH"); /* box->AddString("Head-VC"); // force it in, since Sandeep wants it and it's not used in built-in messages box->AddString("Head-VC2"); // add terran pilot heads box->AddString("Head-TP4"); box->AddString("Head-TP5"); box->AddString("Head-TP6"); box->AddString("Head-TP7"); box->AddString("Head-TP8"); // add vasudan pilot heads box->AddString("Head-VP2"); // BSH and CM2 box->AddString("Head-CM2"); box->AddString("Head-BSH"); */ box = (CComboBox *) GetDlgItem(IDC_WAVE_FILENAME); box->ResetContent(); box->AddString("<None>"); for (i=0; i<Num_messages; i++){ if (Messages[i].wave_info.name){ if (box->FindStringExact(i, Messages[i].wave_info.name) == CB_ERR){ box->AddString(Messages[i].wave_info.name); } } } // add the persona names into the combo box box = (CComboBox *) GetDlgItem(IDC_PERSONA_NAME); box->ResetContent(); box->AddString("<None>"); for (i = 0; i < Num_personas; i++ ){ box->AddString( Personas[i].name ); } // set the first message to be the first non-builtin message (if it exists) if ( Num_messages > Num_builtin_messages ){ m_cur_msg = 0; } else { m_cur_msg = -1; } update_cur_message(); return r; }