123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529 |
- /*
- ===========================================================================
- Doom 3 GPL Source Code
- Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
- This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).
- Doom 3 Source Code 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.
- Doom 3 Source Code 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 Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
- In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
- If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
- ===========================================================================
- */
- #include "../../idlib/precompiled.h"
- #pragma hdrstop
- #include "../../game/game.h"
- #include "../../sys/win32/win_local.h"
- #include "../../sys/win32/rc/common_resource.h"
- #include "../../sys/win32/rc/PDAEditor_resource.h"
- #include "../comafx/DialogName.h"
- #include "DialogPDAEditor.h"
- #ifdef ID_DEBUG_MEMORY
- #undef new
- #undef DEBUG_NEW
- #define DEBUG_NEW new
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CCDialogPDAEditor dialog
- CDialogPDAEditor *g_PDAEditorDialog = NULL;
- CDialogPDAEditor::CDialogPDAEditor(CWnd* pParent /*=NULL*/)
- : CDialog(CDialogPDAEditor::IDD, pParent)
- {
- //{{AFX_DATA_INIT(CDialogPDAEditor)
- //}}AFX_DATA_INIT
- }
- void CDialogPDAEditor::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CDialogPDAEditor)
- DDX_Control( pDX, IDC_LIST_PDAS, pdaList );
- DDX_Control( pDX, IDC_LIST_EMAIL, emailList );
- DDX_Control( pDX, IDC_LIST_AUDIO, audioList );
- DDX_Control( pDX, IDC_LIST_VIDEO, videoList );
- DDX_Text( pDX, IDC_EDIT_FULLNAME, fullName );
- DDX_Text( pDX, IDC_EDIT_SHORTNAME, shortName );
- DDX_Text( pDX, IDC_EDIT_POST, post );
- DDX_Text( pDX, IDC_EDIT_TITLE, title );
- DDX_Text( pDX, IDC_EDIT_SECURITY, security );
- DDX_Text( pDX, IDC_EDIT_IDNUM, idnum );
- DDX_Control( pDX, IDC_BUTTON_SAVE, saveButton );
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CDialogPDAEditor, CDialog)
- //{{AFX_MSG_MAP(CDialogPDAEditor)
- ON_LBN_SELCHANGE( IDC_LIST_PDAS, OnSelChangePDA )
- ON_BN_CLICKED( IDC_BUTTON_SAVE, OnBtnClickedSave )
- ON_BN_CLICKED( IDC_BUTTON_RANDOMID, OnBtnClickedRandom )
- ON_BN_CLICKED( IDC_BUTTON_PDA_ADD, OnBtnClickedPDAAdd )
- ON_BN_CLICKED( IDC_BUTTON_PDA_DEL, OnBtnClickedPDADel )
- ON_BN_CLICKED( IDC_BUTTON_EMAIL_ADD, OnBtnClickedEmailAdd )
- ON_BN_CLICKED( IDC_BUTTON_EMAIL_EDIT, OnBtnClickedEmailEdit )
- ON_BN_CLICKED( IDC_BUTTON_EMAIL_DELETE, OnBtnClickedEmailDel )
- ON_BN_CLICKED( IDC_BUTTON_AUDIO_ADD, OnBtnClickedAudioAdd )
- ON_BN_CLICKED( IDC_BUTTON_AUDIO_EDIT, OnBtnClickedAudioEdit )
- ON_BN_CLICKED( IDC_BUTTON_AUDIO_DELETE, OnBtnClickedAudioDel )
- ON_BN_CLICKED( IDC_BUTTON_VIDEO_ADD, OnBtnClickedVideoAdd )
- ON_BN_CLICKED( IDC_BUTTON_VIDEO_EDIT, OnBtnClickedVideoEdit )
- ON_BN_CLICKED( IDC_BUTTON_VIDEO_DELETE, OnBtnClickedVideoDel )
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CDialogPDAEditor message handlers
- void PDAEditorInit( const idDict *spawnArgs ) {
- if ( renderSystem->IsFullScreen() ) {
- common->Printf( "Cannot run the PDA editor in fullscreen mode.\n"
- "Set r_fullscreen to 0 and vid_restart.\n" );
- return;
- }
- if ( g_PDAEditorDialog == NULL ) {
- InitAfx();
- g_PDAEditorDialog = new CDialogPDAEditor();
- }
- if ( g_PDAEditorDialog->GetSafeHwnd() == NULL ) {
- g_PDAEditorDialog->Create(IDD_DIALOG_PDA_EDITOR);
- /*
- // FIXME: restore position
- CRect rct;
- g_PDAEditorDialog->SetWindowPos( NULL, rct.left, rct.top, 0,0, SWP_NOSIZE );
- */
- }
- idKeyInput::ClearStates();
- g_PDAEditorDialog->ShowWindow( SW_SHOW );
- g_PDAEditorDialog->SetFocus();
- if ( spawnArgs ) {
- // select PDA based on spawn args
- const char *name = spawnArgs->GetString( "pda" );
- idDeclPDA *decl = static_cast<idDeclPDA *>( const_cast<idDecl *>( declManager->FindType( DECL_PDA, name ) ) );
- // FIXME: select this PDA
- }
- }
- void PDAEditorRun( void ) {
- #if _MSC_VER >= 1300
- MSG *msg = AfxGetCurrentMessage(); // TODO Robert fix me!!
- #else
- MSG *msg = &m_msgCur;
- #endif
- while( ::PeekMessage(msg, NULL, NULL, NULL, PM_NOREMOVE) ) {
- // pump message
- if ( !AfxGetApp()->PumpMessage() ) {
- }
- }
- }
- void PDAEditorShutdown( void ) {
- delete g_PDAEditorDialog;
- g_PDAEditorDialog = NULL;
- }
- void CDialogPDAEditor::OnActivate( UINT nState, CWnd *pWndOther, BOOL bMinimized ) {
- CDialog::OnActivate( nState, pWndOther, bMinimized );
- if ( nState != WA_INACTIVE ) {
- }
- }
- void CDialogPDAEditor::OnMove( int x, int y ) {
- if ( GetSafeHwnd() ) {
- CRect rct;
- GetWindowRect( rct );
- // FIXME: save position
- }
- CDialog::OnMove( x, y );
- }
- void CDialogPDAEditor::OnDestroy() {
- com_editors &= ~EDITOR_PDA;
- return CDialog::OnDestroy();
- }
- BOOL CDialogPDAEditor::OnInitDialog()
- {
- CDialog::OnInitDialog();
-
- // Indicate the PDA dialog is opened
- com_editors |= EDITOR_PDA;
- PopulatePDAList();
- return TRUE; // return TRUE unless you set the focus to a control
- // EXCEPTION: OCX Property Pages should return FALSE
- }
- BOOL CDialogPDAEditor::PreTranslateMessage(MSG* pMsg)
- {
- return CDialog::PreTranslateMessage(pMsg);
- }
- void CDialogPDAEditor::PopulatePDAList()
- {
- pdaList.ResetContent();
- int i;
- int num = declManager->GetNumDecls(DECL_PDA);
- for ( i=0; i < num; i++ ) {
- const idDeclPDA *pda = dynamic_cast<const idDeclPDA *>( declManager->DeclByIndex(DECL_PDA, i) );
- pdaList.AddString( pda->GetName() );
- }
- }
- void CDialogPDAEditor::OnSelChangePDA()
- {
- int i, num;
- int index = pdaList.GetCurSel();
- if ( index < 0 ) {
- return;
- }
- const idDeclPDA *pda = dynamic_cast<const idDeclPDA *>( declManager->DeclByIndex(DECL_PDA, index) );
- if ( !pda ) {
- return;
- }
- CString windowTitle;
- windowTitle.Format("PDA Editor - %s", pda->GetName());
- idFile *file = fileSystem->OpenFileAppend( pda->GetFileName() );
- if ( file ) {
- fileSystem->CloseFile(file);
- saveButton.EnableWindow( true );
- } else {
- windowTitle += " [Read Only]";
- saveButton.EnableWindow( false );
- }
- SetWindowText( windowTitle );
- emailList.ResetContent();
- num = pda->GetNumEmails();
- for ( i=0; i < num; i++ ) {
- emailList.AddString( pda->GetEmailByIndex( i )->GetSubject() );
- }
- audioList.ResetContent();
- num = pda->GetNumAudios();
- for ( i=0; i < num; i++ ) {
- audioList.AddString( pda->GetAudioByIndex( i )->GetAudioName() );
- }
- videoList.ResetContent();
- num = pda->GetNumVideos();
- for ( i=0; i < num; i++ ) {
- videoList.AddString( pda->GetVideoByIndex( i )->GetVideoName() );
- }
- fullName = pda->GetFullName();
- shortName = pda->GetPdaName();
- post = pda->GetPost();
- title = pda->GetTitle();
- security = pda->GetSecurity();
- idnum = pda->GetID();
- UpdateData( FALSE );
- }
- void CDialogPDAEditor::OnBtnClickedSave()
- {
- UpdateData();
- int index = pdaList.GetCurSel();
- if ( index < 0 ) {
- return;
- }
- const idDeclPDA *pdaConst = dynamic_cast<const idDeclPDA *>( declManager->DeclByIndex(DECL_PDA, index) );
- if ( pdaConst ) {
- idDeclPDA *pda = const_cast<idDeclPDA *>(pdaConst);
- CString declText = "\n";
- declText += "pda ";
- declText += pda->GetName();
- declText += " {\n";
-
- declText += "\tname \t\t\"" + shortName + "\"\n";
- declText += "\tfullname\t\t\"" + fullName + "\"\n";
- declText += "\ticon \t\t\"\"\n";
- declText += "\tid \t\t\"" + idnum + "\"\n";
- declText += "\tpost \t\t\"" + post + "\"\n";
- declText += "\ttitle \t\t\"" + title + "\"\n";
- declText += "\tsecurity\t\t\"" + security + "\"\n";
- for ( int i = 0; i < pda->GetNumEmails(); i++ ) {
- declText += "\tpda_email\t\t\"";
- declText += pda->GetEmailByIndex(i)->GetName();
- declText += "\"\n";
- }
- for ( int i = 0; i < pda->GetNumAudios(); i++ ) {
- declText += "\tpda_audio\t\t\"";
- declText += pda->GetAudioByIndex(i)->GetName();
- declText += "\"\n";
- }
- for ( int i = 0; i < pda->GetNumVideos(); i++ ) {
- declText += "\tpda_video\t\t\"";
- declText += pda->GetVideoByIndex(i)->GetName();
- declText += "\"\n";
- }
- declText += "}";
- pda->SetText( declText );
- pda->ReplaceSourceFileText();
- pda->Invalidate();
- }
- }
- void CDialogPDAEditor::OnBtnClickedRandom()
- {
- idnum.Format("%d-%02X", 1000+(rand()%8999), (rand()%255));
- UpdateData( FALSE );
- }
- class CDialogPDAAdd : public CDialog
- {
- public:
- CDialogPDAAdd() : CDialog(IDD_DIALOG_PDA_ADD) {}
- CString name;
- void OnOK() { GetDlgItemText( IDC_EDIT1, name ); CDialog::OnOK(); }
- };
- void CDialogPDAEditor::OnBtnClickedPDAAdd()
- {
- CDialogPDAAdd dlg;
- if ( dlg.DoModal() == IDOK ) {
- dlg.name.MakeLower();
- idDecl *decl = declManager->CreateNewDecl( DECL_PDA, dlg.name, "newpdas/" + dlg.name + ".pda" );
- decl->ReplaceSourceFileText();
- decl->Invalidate();
- PopulatePDAList();
- pdaList.SelectString( 0, dlg.name );
- OnSelChangePDA();
- }
- }
- void CDialogPDAEditor::OnBtnClickedPDADel()
- {
- }
- void CDialogPDAEditor::OnBtnClickedEmailAdd()
- {
- int index = pdaList.GetCurSel();
- if ( index < 0 ) {
- return;
- }
- const idDeclPDA *pda = dynamic_cast<const idDeclPDA *>( declManager->DeclByIndex(DECL_PDA, index) );
- if ( pda ) {
- CString name;
- // Search for an unused name
- int newIndex = pda->GetNumEmails();
- do {
- name.Format("%s_email_%d", pda->GetName(), newIndex++);
- } while ( declManager->FindType(DECL_EMAIL, name, false) != NULL );
- CDialogPDAEditEmail addDlg;
- addDlg.SetName(name);
- if ( addDlg.DoModal() == IDOK ) {
- idDeclEmail *email = static_cast<idDeclEmail *>(declManager->CreateNewDecl(DECL_EMAIL, name, pda->GetFileName()));
- email->SetText( addDlg.GetDeclText() );
- email->ReplaceSourceFileText();
- email->Invalidate();
- pda->AddEmail( name );
- // Get it again to reparse
- const idDeclEmail *emailConst = static_cast<const idDeclEmail *>( declManager->FindType( DECL_EMAIL, name) );
- emailList.AddString( emailConst->GetSubject() );
- // Save the pda to include this email in the list
- // This has a side-effect of saving any other changes, but I don't really care right now
- OnBtnClickedSave();
- }
- }
- }
- void CDialogPDAEditor::OnBtnClickedEmailEdit()
- {
- int index = pdaList.GetCurSel();
- if ( index < 0 ) {
- return;
- }
- const idDeclPDA *pda = dynamic_cast<const idDeclPDA *>( declManager->DeclByIndex(DECL_PDA, index) );
- if ( pda ) {
- index = emailList.GetCurSel();
- if ( index < 0 ) {
- return;
- }
- CDialogPDAEditEmail editDlg;
- editDlg.SetEmail( pda->GetEmailByIndex( index ) );
- if ( editDlg.DoModal() == IDOK ) {
- idDeclEmail *email = const_cast<idDeclEmail *>( pda->GetEmailByIndex( index ) );
- email->SetText( editDlg.GetDeclText() );
- email->ReplaceSourceFileText();
- email->Invalidate();
- // Get it again to reparse
- email = const_cast<idDeclEmail *>( pda->GetEmailByIndex( index ) );
- emailList.DeleteString( index );
- emailList.InsertString( index, email->GetSubject() );
- }
- }
- }
- void CDialogPDAEditor::OnBtnClickedEmailDel()
- {
- }
- void CDialogPDAEditor::OnBtnClickedAudioAdd()
- {
- }
- void CDialogPDAEditor::OnBtnClickedAudioEdit()
- {
- }
- void CDialogPDAEditor::OnBtnClickedAudioDel()
- {
- }
- void CDialogPDAEditor::OnBtnClickedVideoAdd()
- {
- }
- void CDialogPDAEditor::OnBtnClickedVideoEdit()
- {
- }
- void CDialogPDAEditor::OnBtnClickedVideoDel()
- {
- }
- CDialogPDAEditEmail::CDialogPDAEditEmail(CWnd* pParent /*=NULL*/)
- : CDialog(CDialogPDAEditEmail::IDD, pParent)
- {
- //{{AFX_DATA_INIT(CDialogPDAEditEmail)
- //}}AFX_DATA_INIT
- }
- void CDialogPDAEditEmail::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CDialogPDAEditEmail)
- DDX_Text( pDX, IDC_EDIT_TO, to );
- DDX_Text( pDX, IDC_EDIT_FROM, from );
- DDX_Text( pDX, IDC_EDIT_DATE, date );
- DDX_Text( pDX, IDC_EDIT_SUBJECT, subject );
- DDX_Text( pDX, IDC_EDIT_BODY, body );
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CDialogPDAEditEmail, CDialog)
- //{{AFX_MSG_MAP(CDialogPDAEditEmail)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CDialogPDAEditor message handlers
- BOOL CDialogPDAEditEmail::OnInitDialog()
- {
- CDialog::OnInitDialog();
- SetWindowText( "Editing Email: " + name );
- return TRUE; // return TRUE unless you set the focus to a control
- // EXCEPTION: OCX Property Pages should return FALSE
- }
- void CDialogPDAEditEmail::SetName( CString &_name )
- {
- name = _name;
- }
- void CDialogPDAEditEmail::SetEmail( const idDeclEmail *email )
- {
- to = email->GetTo();
- from = email->GetFrom();
- date = email->GetDate();
- subject = email->GetSubject();
- body = email->GetBody();
- body.Replace("\n", "\r\n");
- name = email->GetName();
- if ( IsWindow( m_hWnd ) ) {
- UpdateData(FALSE);
- }
- }
- CString CDialogPDAEditEmail::GetDeclText()
- {
- CString mungedBody = body;
- mungedBody.Replace("\r\n\r\n", "\\n\\n\"\n\n\"");
- mungedBody.Replace("\r\n", "\\n\"\n\"");
- CString declText;
- declText += "\n";
- declText += "email " + name + " {\n";
- declText += "\tto \t\t\"" + to + "\"\n";
- declText += "\tfrom \t\t\"" + from + "\"\n";
- declText += "\tdate \t\t\"" + date + "\"\n";
- declText += "\tsubject\t\t\"" + subject + "\"\n";
- declText += "\ttext {\n";
- declText += "\"" + mungedBody + "\"\n";
- declText += "\t}\n";
- declText += "}";
- return declText;
- }
|