/* * 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 . */ // BriefManage.cpp : implementation file // #include "stdafx.h" #include "BriefManage.h" #include "editor.h" #include "ddio.h" #include "manage.h" #include "pserror.h" #include "pstypes.h" #include "gamefile.h" #include "soundpage.h" #include "editlinedialog.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CBriefManage dialog CBriefManage::CBriefManage(CWnd* pParent /*=NULL*/) : CDialog(CBriefManage::IDD, pParent) { //{{AFX_DATA_INIT(CBriefManage) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CBriefManage::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CBriefManage) DDX_Control(pDX, IDC_LIST, m_List); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CBriefManage, CDialog) //{{AFX_MSG_MAP(CBriefManage) ON_BN_CLICKED(IDC_ADD, OnAdd) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBriefManage message handlers bool AddNewGameFile(char *fullpath,char *directory); bool CheckInGamefile(char *tempbuffer,bool show_ok_confirmation); void CBriefManage::OnAdd() { if(!Network_up){ MessageBox("You need to say YES on the data update when starting the editor"); return; } int sel = m_List.GetCurSel(); if(sel==LB_ERR){ MessageBox("Please select the file you want to add"); return; } char full_buffer[_MAX_PATH+100]; m_List.GetText(sel,full_buffer); int page_type = -1; char *ptr; //break it down ptr = full_buffer + strlen(full_buffer); while( ptr>full_buffer && (*ptr)!='|') ptr--; if(*ptr!='|'){ MessageBox("Internal Error"); Int3();//get jeff; return; } *ptr = '\0'; ptr++; if(page_type==-1 && strstr(ptr,"[sound]")) page_type=PAGETYPE_SOUND; if(page_type==-1 && strstr(ptr,"[file]")) page_type=PAGETYPE_GAMEFILE; if(page_type==-1){ MessageBox("Internal Error"); Int3(); //get Jeff return; } if(page_type==PAGETYPE_SOUND){ MessageBox("You must add sounds in the sound dialog"); return; } switch(page_type) { case PAGETYPE_GAMEFILE: { char filename[255]; char real_filename[_MAX_PATH]; strcpy(filename,full_buffer); // Get the filename of the representing image CString filter = ""; if (!OpenFileDialog(this, (LPCTSTR)filter, filename, Current_files_dir, sizeof(Current_files_dir))) return; char directory[32],ext[32]; bool know_dir = false; ddio_SplitPath(filename,NULL,real_filename,ext); strcat(real_filename,ext); if(!know_dir && !stricmp(ext,".ogf")){ know_dir = true; strcpy(directory,"graphics"); } if(!know_dir && !stricmp(ext,".tga")){ know_dir = true; strcpy(directory,"graphics"); } if(!know_dir && !stricmp(ext,".pcx")){ know_dir = true; strcpy(directory,"graphics"); } if(!know_dir && !stricmp(ext,".oof")){ know_dir = true; strcpy(directory,"models"); } if(!know_dir){ CEditLineDialog dlg("What directory does this belong in?","Directory", "graphics", false, this); if(dlg.DoModal()!=IDOK) return; strcpy(directory,dlg.GetText()); bool is_ok = false; if(!is_ok && !stricmp(directory,"briefings") ) is_ok = true; if(!is_ok && !stricmp(directory,"graphics") ) is_ok = true; if(!is_ok && !stricmp(directory,"levels") ) is_ok = true; if(!is_ok && !stricmp(directory,"misc") ) is_ok = true; if(!is_ok && !stricmp(directory,"models") ) is_ok = true; if(!is_ok && !stricmp(directory,"music") ) is_ok = true; if(!is_ok && !stricmp(directory,"scripts") ) is_ok = true; if(!is_ok && !stricmp(directory,"sounds") ) is_ok = true; if(!is_ok){ MessageBox("Invalid directory"); return; } } if(!AddNewGameFile(filename,directory)){ char buffer[_MAX_PATH*2]; sprintf(buffer,"Unable to add:\r\n%s\r\nto %s",filename,directory); MessageBox(buffer); return; } //auto checkin if (!mng_MakeLocker()){ return; } if(!CheckInGamefile(real_filename,true)){ MessageBox("Unable to auto-checkin"); } mng_EraseLocker(); }break; } UpdateDialog(); } BOOL CBriefManage::OnInitDialog() { CDialog::OnInitDialog(); UpdateDialog(); return TRUE; } void CBriefManage::AddString(char *filename,int pagetype) { char buffer[_MAX_PATH+100]; char real_filename[_MAX_PATH]; char page_type[100]; char *pagename = filename; switch(pagetype) { case PAGETYPE_SOUND: { //look for the page in the manage system bool found; found = false; mngs_sound_page page; if(mng_FindSpecificSoundPage(filename,&page )>0) { found = true; } if(!found){ //ok there wasn't one in the gamefiles make sure there isn't a tracklocked if(mng_FindTrackLock(filename,PAGETYPE_SOUND)!=-1){ //there isn't one in the track lock...this is our first compile! found = true; } } if(found){ //we already have this in the manage system return; } strcpy(page_type,"[sound]"); }break; case PAGETYPE_GAMEFILE: { //look for the page in the manage system bool found; int i; char ext[32]; ddio_SplitPath(filename,NULL,real_filename,ext); strcat(real_filename,ext); pagename = real_filename; found = false; for (i=0;iused); if(screen->layout[0]!='\0'){ //add the layout screen AddString(screen->layout); } //go through all the effects for this screen curr_effect = screen->root_effect; while(curr_effect!=-1) { effect = &screen->effects[curr_effect]; ASSERT(effect->used); switch(effect->type){ case BE_MOVIE: case BE_TEXT: case BE_BKG: break; //no files in here case BE_BMP: if(*effect->bmp_desc.filename) { AddString(effect->bmp_desc.filename); } break; case BE_POLY: if(*effect->poly_desc.polyname) { AddString(effect->poly_desc.polyname); } break; case BE_SND: if(*effect->snd_desc.filename) { AddString(effect->snd_desc.filename,PAGETYPE_SOUND); } break; case BE_BUTTON: if(*effect->button_desc.filename) { AddString(effect->button_desc.filename); } if(*effect->button_desc.filename_focus) { AddString(effect->button_desc.filename_focus); } if(*effect->button_desc.flash_filename) { AddString(effect->button_desc.flash_filename); } if(*effect->button_desc.flash_filename_focus) { AddString(effect->button_desc.flash_filename_focus); } break; default: break; } curr_effect = effect->next; } curr_screen = screen->next; } m_List.SetCurSel(0); }