/* * Descent 3 * Copyright (C) 2024 Parallax Software * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ // BriefButtonEdit.cpp : implementation file // #include "stdafx.h" #include "editor.h" #include "BriefButtonEdit.h" #include "CFile.h" #include "BriefMissionFlagsDlg.h" #include "briefedit.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CBriefButtonEdit dialog CBriefButtonEdit::CBriefButtonEdit(TCBUTTONDESC* d,int id,CWnd* pParent /*=NULL*/) : CDialog(CBriefButtonEdit::IDD, pParent) { //{{AFX_DATA_INIT(CBriefButtonEdit) m_sFilename = _T(""); m_sFlashFilename = _T(""); m_bFlasher = FALSE; m_fFlashStart = 0.0f; m_bGlow = FALSE; m_iID = 0; m_iPID = 0; m_iSID = 0; m_iClickType = -1; m_iButtonType = -1; m_sDesc = _T(""); m_sFilenameFocus = _T(""); m_sFlashFilenameFocus = _T(""); m_iX = 0; m_iY = 0; m_ScreenToJump = 0; //}}AFX_DATA_INIT m_iID = id; memset(&desc,0,sizeof(TCBUTTONDESC)); desc.mission_mask_set = 0; desc.mission_mask_unset = 0; if(d){ //initialize to what was passed in strcpy(desc.filename,d->filename); strcpy(desc.filename_focus,d->filename_focus); if(d->flasher){ desc.flasher = true; desc.flash_time = d->flash_time; strcpy(desc.flash_filename,d->flash_filename); strcpy(desc.flash_filename_focus,d->flash_filename_focus); } desc.sibling_id = d->sibling_id; desc.parent_id = d->parent_id; desc.x = d->x; desc.y = d->y; desc.w = d->w; desc.h = d->h; desc.osflags = d->osflags; desc.button_type = d->button_type; desc.click_type = d->click_type; desc.mission_mask_set = d->mission_mask_set; desc.mission_mask_unset = d->mission_mask_unset; desc.jump_page = d->jump_page; }else{ //set all defaults desc.button_type = BUTT_NEXTPAGE; desc.click_type = CLICKTYPE_CLICKDOWN; } m_ScreenToJump = 0; switch(desc.button_type){ case BUTT_UPARROW: m_iButtonType = 0; break; case BUTT_DOWNARROW: m_iButtonType = 1; break; case BUTT_NEXTPAGE: m_iButtonType = 2; break; case BUTT_PREVPAGE: m_iButtonType = 3; break; case BUTT_QUIT: m_iButtonType = 4; break; case BUTT_JUMP: m_iButtonType = 5; m_ScreenToJump = desc.jump_page; break; default: m_iButtonType = 0; break; } switch(desc.click_type){ case CLICKTYPE_CLICKUP: m_iClickType = 0; break; case CLICKTYPE_CLICKDOWN: m_iClickType = 1; break; case CLICKTYPE_DOWN: m_iClickType = 2; break; default: m_iClickType = 0; break; } m_sFilename = desc.filename; m_sFilenameFocus = desc.filename_focus; if(desc.flasher){ m_sFlashFilename = desc.flash_filename; m_sFlashFilenameFocus = desc.flash_filename_focus; } if(desc.osflags&OBF_GLOW) m_bGlow = true; else m_bGlow = false; if(desc.osflags&OBF_FLASH){ m_bFlasher = true; m_fFlashStart = desc.flash_time; }else{ m_bFlasher = false; m_fFlashStart = 0; } m_iPID = desc.parent_id; m_iSID = desc.sibling_id; m_iX = desc.x; m_iY = desc.y; } void CBriefButtonEdit::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CBriefButtonEdit) DDX_Text(pDX, IDC_BRIEF_BT_FILENAME, m_sFilename); DDX_Text(pDX, IDC_BRIEF_BT_FLASH_FILENAME, m_sFlashFilename); DDX_Check(pDX, IDC_BRIEF_BT_FLASHER, m_bFlasher); DDX_Text(pDX, IDC_BRIEF_BT_FLASHSTART, m_fFlashStart); DDV_MinMaxFloat(pDX, m_fFlashStart, 0.f, 99999.f); DDX_Check(pDX, IDC_BRIEF_BT_GLOW, m_bGlow); DDX_Text(pDX, IDC_BRIEF_BT_ID, m_iID); DDX_Text(pDX, IDC_BRIEF_BT_PID, m_iPID); DDX_Text(pDX, IDC_BRIEF_BT_SID, m_iSID); DDX_Radio(pDX, IDC_BRIEF_BT_MOUSEUP, m_iClickType); DDX_Radio(pDX, IDC_BRIEF_BT_SCROLLUP, m_iButtonType); DDX_Text(pDX, IDC_BRIEF_BT_DESC, m_sDesc); DDX_Text(pDX, IDC_BRIEF_BT_FILENAME_FOCUS, m_sFilenameFocus); DDX_Text(pDX, IDC_BRIEF_BT_FLASH_FILENAME_FOCUS, m_sFlashFilenameFocus); DDX_Text(pDX, IDC_BRIEF_BT_X, m_iX); DDX_Text(pDX, IDC_BRIEF_BT_Y, m_iY); DDX_Text(pDX, IDC_BRIEF_BT_JUMP_SCREEN, m_ScreenToJump); DDV_MinMaxInt(pDX, m_ScreenToJump, 0, 64); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CBriefButtonEdit, CDialog) //{{AFX_MSG_MAP(CBriefButtonEdit) ON_BN_CLICKED(IDC_BRIEF_BT_CHOOSE, OnBriefBtChoose) ON_BN_CLICKED(IDC_BRIEF_BT_FLASH_CHOOSE, OnBriefBtFlashChoose) ON_BN_CLICKED(IDC_BRIEF_BT_FLASHER, OnBriefBtFlasher) ON_BN_CLICKED(IDC_BRIEF_BT_GLOW, OnBriefBtGlow) ON_BN_CLICKED(IDC_BRIEF_BT_CHOOSE_FOCUS, OnBriefBtChooseFocus) ON_BN_CLICKED(IDC_BRIEF_BT_FLASH_CHOOSE_FOCUS, OnBriefBtFlashChooseFocus) ON_BN_CLICKED(IDC_MISSIONFLAGS, OnMissionflags) ON_BN_CLICKED(IDC_BRIEF_BT_JUMP, OnBriefBtJump) ON_BN_CLICKED(IDC_BRIEF_BT_NEXTSCREEN, OnBriefBtNextscreen) ON_BN_CLICKED(IDC_BRIEF_BT_PREVSCREEN, OnBriefBtPrevscreen) ON_BN_CLICKED(IDC_BRIEF_BT_QUIT, OnBriefBtQuit) ON_BN_CLICKED(IDC_BRIEF_BT_SCROLLDOWN, OnBriefBtScrolldown) ON_BN_CLICKED(IDC_BRIEF_BT_SCROLLUP, OnBriefBtScrollup) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBriefButtonEdit message handlers void CBriefButtonEdit::OnBriefBtChoose() { UpdateData(true); char szFilter[] = "Outrage Graphic Files (*.ogf)|*.ogf|32bit Uncompressed Targa (*.tga)|*.tga|PCX (*.pcx)|*.pcx|All Files (*.*)|*.*||"; CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,szFilter); if(dlg.DoModal()==IDOK){ //handle m_sFilename = dlg.GetFileName(); UpdateData(false); } } void CBriefButtonEdit::OnBriefBtFlashChoose() { UpdateData(true); char szFilter[] = "Outrage Graphic Files (*.ogf)|*.ogf|32bit Uncompressed Targa (*.tga)|*.tga|PCX (*.pcx)|*.pcx|All Files (*.*)|*.*||"; CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,szFilter); if(dlg.DoModal()==IDOK){ //handle m_sFlashFilename = dlg.GetFileName(); UpdateData(false); } } void CBriefButtonEdit::OnOK() { if(!VerifyData()) return; desc.osflags = 0; if(m_bFlasher || m_bGlow){ desc.flasher = true; if(m_bFlasher) desc.osflags |= OBF_FLASH; if(m_bGlow) desc.osflags |= OBF_GLOW; }else{ desc.flasher = false; } //If we got here then fill in all the data if(desc.flasher){ //we need to get flash information strcpy(desc.flash_filename,m_sFlashFilename.GetBuffer(0)); strcpy(desc.flash_filename_focus,m_sFlashFilenameFocus.GetBuffer(0)); if(desc.osflags&OBF_FLASH){ //get flash start time desc.flash_time = m_fFlashStart; } }else{ desc.flash_filename[0] = '\0'; desc.flash_filename_focus[0] = '\0'; } desc.parent_id = m_iPID; desc.sibling_id = m_iSID; desc.x = m_iX; desc.y = m_iY; desc.jump_page = m_ScreenToJump; switch(m_iButtonType){ case 0: desc.button_type = BUTT_UPARROW; break; case 1: desc.button_type = BUTT_DOWNARROW; break; case 2: desc.button_type = BUTT_NEXTPAGE; break; case 3: desc.button_type = BUTT_PREVPAGE; break; case 4: desc.button_type = BUTT_QUIT; break; case 5: desc.button_type = BUTT_JUMP; break; } switch(m_iClickType){ case 0: desc.click_type = CLICKTYPE_CLICKUP; break; case 1: desc.click_type = CLICKTYPE_CLICKDOWN; break; case 2: desc.click_type = CLICKTYPE_DOWN; break; } strcpy(desc.filename,m_sFilename.GetBuffer(0)); strcpy(desc.filename_focus,m_sFilenameFocus.GetBuffer(0)); CDialog::OnOK(); } BOOL CBriefButtonEdit::OnInitDialog() { CDialog::OnInitDialog(); UpdateData(false); UpdateDialog(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CBriefButtonEdit::UpdateDialog(void) { CEdit *edit; CButton *but; edit = (CEdit *)GetDlgItem(IDC_BRIEF_BT_FLASH_FILENAME); but = (CButton *)GetDlgItem(IDC_BRIEF_BT_FLASH_CHOOSE); if( (desc.osflags&OBF_FLASH) || (desc.osflags&OBF_GLOW) ){ //Enable the flash filename window edit->EnableWindow(true); but->EnableWindow(true); edit = (CEdit *)GetDlgItem(IDC_BRIEF_BT_FLASHSTART); if(desc.osflags&OBF_FLASH) edit->EnableWindow(true); else edit->EnableWindow(false); edit = (CEdit *)GetDlgItem(IDC_BRIEF_BT_FLASH_FILENAME_FOCUS); edit->EnableWindow(true); }else{ edit->EnableWindow(false); but->EnableWindow(false); edit = (CEdit *)GetDlgItem(IDC_BRIEF_BT_FLASHSTART); edit->EnableWindow(false); edit = (CEdit *)GetDlgItem(IDC_BRIEF_BT_FLASH_FILENAME_FOCUS); edit->EnableWindow(false); } OnBriefBtJump(); } void CBriefButtonEdit::OnBriefBtFlasher() { UpdateData(true); if(m_bFlasher) desc.osflags |= OBF_FLASH; else desc.osflags &= ~OBF_FLASH; if(m_bFlasher||m_bGlow) desc.flasher = true; else desc.flasher = false; UpdateDialog(); } void CBriefButtonEdit::OnBriefBtGlow() { UpdateData(true); if(m_bGlow) desc.osflags |= OBF_GLOW; else desc.osflags &= ~OBF_GLOW; if(m_bFlasher||m_bGlow) desc.flasher = true; else desc.flasher = false; UpdateDialog(); } extern int Briefing_root_screen; extern tBriefScreen Briefing_screens[MAX_TELCOM_SCREENS]; bool CBriefButtonEdit::VerifyData(void) { UpdateData(true); bool ret = true; if(desc.flasher){ //flash filename should be specified if(!cfexist(m_sFlashFilename.GetBuffer(0))){ //file doesn't exist MessageBox("Flash Filename Does Not Exist","Error"); ret = false; } //flash focus filename should be specified if(!cfexist(m_sFlashFilenameFocus.GetBuffer(0))){ //file doesn't exist MessageBox("Flash Focus Filename Does Not Exist","Error"); ret = false; } } //filename should be specified if(!cfexist(m_sFilename.GetBuffer(0))){ //file doesn't exist MessageBox("Filename Does Not Exist","Error"); ret = false; } //focus filename should be specified if(!cfexist(m_sFilenameFocus.GetBuffer(0))){ //file doesn't exist MessageBox("Focus Filename Does Not Exist","Error"); ret = false; } if(desc.button_type==BUTT_JUMP) { //verify the jump screen exists int num_screens = 0; int curr = Briefing_root_screen; while(curr!=-1) { num_screens++; curr = Briefing_screens[curr].next; } if(m_ScreenToJump<0 || m_ScreenToJump>=num_screens) { //invalid screen MessageBox("The Jump-To Screen Does Not Exist","Error"); ret = false; } } return ret; } void CBriefButtonEdit::OnBriefBtChooseFocus() { UpdateData(true); char szFilter[] = "Outrage Graphic Files (*.ogf)|*.ogf|32bit Uncompressed Targa (*.tga)|*.tga|PCX (*.pcx)|*.pcx|All Files (*.*)|*.*||"; CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,szFilter); if(dlg.DoModal()==IDOK){ //handle m_sFilenameFocus = dlg.GetFileName(); UpdateData(false); } } void CBriefButtonEdit::OnBriefBtFlashChooseFocus() { UpdateData(true); char szFilter[] = "Outrage Graphic Files (*.ogf)|*.ogf|32bit Uncompressed Targa (*.tga)|*.tga|PCX (*.pcx)|*.pcx|All Files (*.*)|*.*||"; CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,szFilter); if(dlg.DoModal()==IDOK){ //handle m_sFlashFilenameFocus = dlg.GetFileName(); UpdateData(false); } } void CBriefButtonEdit::OnMissionflags() { CBriefMissionFlagsDlg dlg(desc.mission_mask_set,desc.mission_mask_unset); if(dlg.DoModal()){ desc.mission_mask_set = dlg.m_Set; desc.mission_mask_unset = dlg.m_UnSet; } } void CBriefButtonEdit::OnBriefBtJump() { CButton *button = (CButton *)GetDlgItem(IDC_BRIEF_BT_JUMP); CEdit *edit = (CEdit *)GetDlgItem(IDC_BRIEF_BT_JUMP_SCREEN); if((button->GetState()&0x03)!=0) edit->EnableWindow(true); else edit->EnableWindow(false); } void CBriefButtonEdit::OnBriefBtNextscreen() { OnBriefBtJump(); } void CBriefButtonEdit::OnBriefBtPrevscreen() { OnBriefBtJump(); } void CBriefButtonEdit::OnBriefBtQuit() { OnBriefBtJump();} void CBriefButtonEdit::OnBriefBtScrolldown() { OnBriefBtJump(); } void CBriefButtonEdit::OnBriefBtScrollup() { OnBriefBtJump(); }