15 #include "EventEditor.h"
17 #include "Management.h"
18 #include "Sexp_tree.h"
27 static char THIS_FILE[] = __FILE__;
75 CDialog::DoDataExchange(pDX);
127 ON_NOTIFY(TVN_BEGINLABELEDIT, IDC_EVENT_TREE, OnBeginlabeleditEventTree)
128 ON_NOTIFY(TVN_ENDLABELEDIT, IDC_EVENT_TREE, OnEndlabeleditEventTree)
131 ON_BN_CLICKED(
ID_OK, OnOk)
133 ON_NOTIFY(TVN_SELCHANGED, IDC_EVENT_TREE, OnSelchangedEventTree)
149 ON_LBN_DBLCLK(IDC_MESSAGE_LIST, OnDblclkMessageList)
158 if (box->FindStringExact(-1, name) == CB_ERR) {
159 box->AddString(name);
171 CDialog::OnInitDialog();
195 for (i=0; i<m_num_messages; i++) {
197 m_messages.push_back(msg);
198 if (m_messages[i].avi_info.name){
199 m_messages[
i].avi_info.name = strdup(m_messages[i].avi_info.name);
201 if (m_messages[i].wave_info.name){
202 m_messages[
i].wave_info.name = strdup(m_messages[i].wave_info.name);
212 list->ResetContent();
213 for (i=0; i<m_num_messages; i++) {
214 list->AddString(m_messages[i].
name);
219 box->AddString(
"<None>");
265 box->AddString(
"<None>");
268 if (box->FindStringExact(i,
Messages[i].wave_info.name) == CB_ERR){
269 box->AddString(
Messages[i].wave_info.name);
277 box->AddString(
"<None>");
283 if ( Num_messages > Num_builtin_messages ){
302 for (i=0; i<m_num_events; i++) {
317 if (!(*m_events[i].
name)){
318 strcpy_s(m_events[i].name,
"<Unnamed>");
325 if ( m_events[i].repeat_count <= 0 ){
340 for (i=0; i<m_num_events; i++) {
344 if (m_events[i].chain_delay >= 0) {
346 if (m_events[i].objective_text) {
351 if (m_events[i].objective_text) {
374 TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
390 TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
424 for (i=0; i<m_num_events; i++) {
441 if (m_events[i].mission_log_flags !=
Mission_events[i].mission_log_flags)
456 for (i=0; i<m_num_messages; i++) {
510 for (i=0; i<m_num_events; i++)
513 strcpy_s(names[1][count], m_events[i].name);
528 Num_mission_events = m_num_events;
529 for (i=0; i<m_num_events; i++) {
550 for (i=0; i<m_num_messages; i++)
551 Messages[i + Num_builtin_messages] = m_messages[i];
555 Event_editor_dlg = NULL;
577 if (m_messages[
m_cur_msg].avi_info.name){
583 if (m_messages[m_cur_msg].wave_info.name){
590 if ( m_messages[m_cur_msg].persona_index != -1 ){
630 for (i=0; i<m_num_events; i++)
631 if (m_events[i].formula == node)
636 while (i < m_num_events - 1) {
637 m_events[
i] = m_events[i + 1];
638 m_sig[
i] = m_sig[i + 1];
651 for (i=0; i<m_num_events; i++)
652 if (m_events[i].formula == node)
670 MessageBox(
"You have reached the limit on mission events.\n"
671 "Can't add any more.");
687 MessageBox(
"You have reached the limit on mission events.\n"
688 "Can't add any more.");
697 if(cur_event < 0 || m_num_events == 0)
704 for (i=m_num_events; i>cur_event; i--) {
705 m_events[
i] = m_events[i - 1];
706 m_sig[
i] = m_sig[i - 1];
803 Event_editor_dlg = NULL;
827 Event_editor_dlg = NULL;
834 for (i=0; i<m_num_events; i++){
835 if (m_events[i].formula == old){
873 if (m_events[e].objective_text) {
874 free(m_events[e].objective_text);
884 if (m_events[e].objective_key_text) {
885 free(m_events[e].objective_key_text);
950 NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
956 h = pNMTreeView->itemNew.hItem;
967 for (i=0; i<m_num_events; i++){
968 if (m_events[i].formula == z){
980 void event_editor::update_cur_event()
1010 if (m_events[cur_event].chain_delay >= 0) {
1021 if (m_events[cur_event].objective_text){
1027 if (m_events[cur_event].objective_key_text){
1053 if (m_events[cur_event].mission_log_flags &
MLF_SEXP_TRUE) {
1131 for (index1=0; index1<m_num_events; index1++){
1132 if (m_events[index1].formula == node1){
1137 Assert(index1 < m_num_events);
1138 for (index2=0; index2<m_num_events; index2++){
1139 if (m_events[index2].formula == node2){
1144 Assert(index2 < m_num_events);
1145 m = m_events[index1];
1147 while (index1 < index2) {
1148 m_events[index1] = m_events[index1 + 1];
1149 m_sig[index1] = m_sig[index1 + 1];
1153 while (index1 > index2 + 1) {
1154 m_events[index1] = m_events[index1 - 1];
1155 m_sig[index1] = m_sig[index1 - 1];
1159 m_events[index1] =
m;
1199 static int flag = 0;
1219 int i, conflict = 0;
1232 for (i=0; i<m_num_messages; i++){
1243 list->DeleteString(num);
1249 if (m_messages[num].avi_info.name){
1250 free(m_messages[num].avi_info.name);
1255 m_messages[
num].avi_info.name = NULL;
1257 m_messages[
num].avi_info.name = strdup(ptr);
1260 if (m_messages[num].wave_info.name){
1261 free(m_messages[num].wave_info.name);
1266 m_messages[
num].wave_info.name = NULL;
1268 m_messages[
num].wave_info.name = strdup(ptr);
1276 m_messages[
num].multi_team = -1;
1301 m_messages.push_back(msg);
1313 Assertion((
m_cur_msg >= -1) && (
m_cur_msg < m_num_messages),
"Unexpected m_cur_msg value (%d); expected either -1, or between 0-%d. Get a coder!\n",
m_cur_msg, m_num_messages - 1);
1318 if (m_messages[
m_cur_msg].avi_info.name){
1319 free(m_messages[m_cur_msg].avi_info.name);
1321 if (m_messages[m_cur_msg].wave_info.name){
1322 free(m_messages[m_cur_msg].wave_info.name);
1330 m_messages.erase(m_messages.begin() +
m_cur_msg);
1333 if (m_cur_msg >= m_num_messages){
1334 m_cur_msg = m_num_messages - 1;
1352 CFileDialog dlg(
TRUE,
"ani",
m_avi_filename, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_NOCHANGEDIR,
1353 "Ani Files (*.ani)|*.ani|Eff Files (*.eff)|*.eff|Avi Files (*.avi)|*.avi|Both (*.ani, *.avi)|*.ani;*.avi||");
1355 if (dlg.DoModal() == IDOK) {
1382 CFileDialog dlg(
TRUE,
"wav",
m_wave_filename, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_NOCHANGEDIR,
1383 "Voice Files (*.ogg, *.wav)|*.ogg;*.wav|Ogg Vorbis Files (*.ogg)|*.ogg|Wave Files (*.wav)|*.wav||");
1385 if (dlg.DoModal() == IDOK) {
1397 if ( (i < 0) || (i >= m_num_messages) ){
1401 return m_messages[
i].name;
1406 return m_messages[
i].name;
1459 z = box -> GetCurSel();
1474 return CDialog::DestroyWindow();
1481 if (m_wave_id >= 0) {
1490 if (m_wave_id >= 0) {
1505 if ( cur_event < 0 ){
1544 int cur_index = list->GetCurSel();
1548 list->GetText(cur_index, buffer);
1553 if (num_messages == 0) {
1555 sprintf(message,
"No events using message '%s'", buffer);
1563 if (num_messages == 1) {
1569 for (
int i=0;
i<num_messages;
i++) {
1576 if (found_pos == -1) {
1579 }
else if (found_pos == num_messages-1) {
void record_window_data(window_data *wndd, CWnd *wnd)
#define MAX_SEARCH_MESSAGE_DEPTH
int save_message(int num)
GLfloat GLfloat GLfloat GLfloat h
void add_sub_tree(int node, HTREEITEM root)
afx_msg void OnBrowseAvi()
#define MLF_SEXP_KNOWN_FALSE
afx_msg void OnDblclkMessageList()
afx_msg void OnDeleteMsg()
afx_msg void OnUpdateRepeatCount()
void swap_handler(int node1, int node2)
#define IDC_MISSION_LOG_TRUE
char message[MESSAGE_LENGTH]
int init_window(window_data *wndd, CWnd *wnd, int adjust=0, int pre=0)
afx_msg void OnBrowseWave()
#define CF_TYPE_VOICE_SPECIAL
#define PERSONA_FLAG_LARGE
GLenum GLsizei GLenum GLenum const GLvoid * image
#define PERSONA_FLAG_COMMAND
void link_modified(int *ptr)
void update_sexp_references(const char *old_name, const char *new_name, int format, int node)
#define IDC_MISSION_LOG_ALWAYS_FALSE
#define Assertion(expr, msg,...)
#define IDC_BUTTON_NEW_EVENT
#define PERSONA_FLAG_WINGMAN
void setup(CEdit *ptr=NULL)
int edit_label(HTREEITEM h)
GLenum GLuint GLenum GLsizei const GLchar * message
int find_text(const char *text, int *find)
#define MLF_FIRST_TRIGGER_ONLY
GLenum GLuint GLenum GLsizei const GLchar * buf
void right_clicked(int mode=0)
afx_msg void OnSelchangeTeam()
SCP_vector< MMessage > Messages
int cfile_push_chdir(int type)
Push current directory onto a 'stack' and change to a new directory.
void update_help(HTREEITEM h)
GLdouble GLdouble GLdouble r
HTREEITEM get_event_handle(int num)
afx_msg void OnUpdateTriggerCount()
event_editor * Event_editor_dlg
char * current_message_name(int index)
afx_msg void OnSelchangeWaveFilename()
#define PERSONA_FLAG_SUPPORT
#define strnicmp(s1, s2, n)
int end_label_edit(TVITEMA &item)
mission_event Mission_events[MAX_MISSION_EVENTS]
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
#define IDC_MISSION_LOG_1ST_REPEAT
union MissionMessage::@254 avi_info
afx_msg void OnSelchangeMessageList()
#define OPF_MESSAGE_OR_STRING
#define IDC_MISSION_LOG_1ST_TRIGGER
#define IDC_MISSION_LOG_STATE_CHANGE
void update_cur_message()
#define CF_TYPE_INTERFACE
#define BITMAP_ROOT_DIRECTIVE
HTREEITEM insert(LPCTSTR lpszItem, int image=BITMAP_ROOT, int sel_image=BITMAP_ROOT, HTREEITEM hParent=TVI_ROOT, HTREEITEM hInsertAfter=TVI_LAST)
#define IDC_WAVE_FILENAME
virtual void DoDataExchange(CDataExchange *pDX)
virtual BOOL OnInitDialog()
afx_msg void OnSelchangeMessageTeam()
void reset_event(int num, HTREEITEM after)
afx_msg void OnBeginlabeleditEventTree(NMHDR *pNMHDR, LRESULT *pResult)
void string_copy(char *dest, const CString &src, int max_len, int modify)
bool Disable_hc_message_ani
void insert_handler(int old, int node)
#define IDC_MISSION_LOG_FALSE
void set_modified(BOOL arg)
GLuint const GLchar * name
union MissionMessage::@255 wave_info
afx_msg void OnButtonNewEvent()
#define MISSION_TYPE_TRAINING
void audiostream_close_file(int i, int fade)
virtual BOOL DestroyWindow()
int load_sub_tree(int index, bool valid, const char *text)
void add_operator(const char *op, HTREEITEM h=TVI_ROOT)
#define IDC_TRIGGER_COUNT
int save_tree(int node=-1)
#define MLF_FIRST_REPEAT_ONLY
int MessageBox(HWND h, const char *s1, const char *s2, int i)
window_data Events_wnd_data
#define BITMAP_CHAIN_DIRECTIVE
void audiostream_play(int i, float volume, int looping)
char * objective_key_text
#define MAX_MISSION_EVENTS
char * get_message_list_item(int i)
int handler(int code, int node, char *str=NULL)
afx_msg void OnEndlabeleditEventTree(NMHDR *pNMHDR, LRESULT *pResult)
void hilite_item(int node)
int audiostream_open(const char *filename, int type)
#define MLF_LAST_REPEAT_ONLY
#define MLF_LAST_TRIGGER_ONLY
afx_msg void OnRclickEventTree(NMHDR *pNMHDR, LRESULT *pResult)
#define IDC_MISSION_LOG_LAST_TRIGGER
#define SEXP_HELP_BOX_SIZE
#define CF_TYPE_VOICE_TRAINING
event_editor(CWnd *pParent=NULL)
void lcl_fred_replace_stuff(char *text, size_t max_len)
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam)
afx_msg void OnSelchangedEventTree(NMHDR *pNMHDR, LRESULT *pResult)
#define IDC_MISSION_LOG_LAST_REPEAT
event_sexp_tree m_event_tree
void clear_tree(const char *op=NULL)
int advanced_stricmp(char *one, char *two)
#define IDC_INTERVAL_TIME
void maybe_add_head(CComboBox *box, char *name)
#define MISSION_TYPE_MULTI_TEAMS
void setup_selected(HTREEITEM h=NULL)