/* * Arcanum Editor - ROM area editor * Copyright (C) 1999 Lucas Wall <kthulhu@usa.net> * * 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 2 of the License, or * 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * * If you make changes to the source and want to make the public you can * mail the diferences to me <kthulhu@usa.net> and I'll add them to the * main distribution. Of course your name will be added to the program with * information about the changes you made. * * * Packed on Thu Aug 19 03:02:24 1999 * */ /* * File: ResetEd.cpp * * Changes: * * 19/08/99 Lucas Wall <kthulhu@usa.net> * First source release. Its quite messy and has no * comments. I never planed to release the source code... :-) * */ // ResetEd.cpp : implementation file // #include "stdafx.h" #include "arcaed.h" #include "ResetEd.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CResetEd dialog CResetEd::CResetEd(CWnd* pParent /*=NULL*/) : CDialog(CResetEd::IDD, pParent) { //{{AFX_DATA_INIT(CResetEd) m_Arg1 = 0; m_Arg2 = 0; m_Max = 1; m_Min = 1; //}}AFX_DATA_INIT m_type = 0; for ( int i = 0; i < 4; i++ ) m_num[i] = 0; m_vnum = 0; m_listnum2 = 0; m_listnum = 0; m_firstsel = TRUE; m_doc = NULL; } void CResetEd::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CResetEd) DDX_Control(pDX, IDC_RESETED_LIST2, m_List2); DDX_Control(pDX, IDC_RESETED_ARG2_LIST, m_Arg2List); DDX_Control(pDX, IDC_RESETED_ARG1_LIST, m_Arg1List); DDX_Control(pDX, IDC_RESETED_LIST, m_List); DDX_Control(pDX, IDC_RESETED_TEXT_LIST, m_TextList); DDX_Control(pDX, IDC_RESETED_TEXT_ARG2, m_TextArg2); DDX_Control(pDX, IDC_RESETED_TEXT_ARG1, m_TextArg1); DDX_Control(pDX, IDC_RESETED_TYPE, m_Type); DDX_Control(pDX, IDC_RESETED_MIN_SPIN, m_MinSpin); DDX_Control(pDX, IDC_RESETED_MAX_SPIN, m_MaxSpin); DDX_Control(pDX, IDC_RESETED_ARG2_SPIN, m_Arg2Spin); DDX_Control(pDX, IDC_RESETED_ARG1_SPIN, m_Arg1Spin); DDX_Text(pDX, IDC_RESETED_ARG1, m_Arg1); DDV_MinMaxInt(pDX, m_Arg1, 0, 32767); DDX_Text(pDX, IDC_RESETED_ARG2, m_Arg2); DDV_MinMaxInt(pDX, m_Arg2, 0, 32767); DDX_Text(pDX, IDC_RESETED_MAX, m_Max); DDV_MinMaxInt(pDX, m_Max, 0, 32767); DDX_Text(pDX, IDC_RESETED_MIN, m_Min); DDV_MinMaxInt(pDX, m_Min, 0, 32767); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CResetEd, CDialog) //{{AFX_MSG_MAP(CResetEd) ON_CBN_SELCHANGE(IDC_RESETED_TYPE, OnSelchangeResetedType) ON_CBN_SELCHANGE(IDC_RESETED_LIST, OnSelchangeResetedList) ON_CBN_SELCHANGE(IDC_RESETED_LIST2, OnSelchangeResetedList2) ON_CBN_SELCHANGE(IDC_RESETED_ARG1_LIST, OnSelchangeResetedArg1List) ON_CBN_SELCHANGE(IDC_RESETED_ARG2_LIST, OnSelchangeResetedArg2List) ON_EN_CHANGE(IDC_RESETED_ARG1, OnChangeResetedArg1) ON_EN_CHANGE(IDC_RESETED_ARG2, OnChangeResetedArg2) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CResetEd message handlers BOOL CResetEd::OnInitDialog() { CDialog::OnInitDialog(); CString text; int index; m_Arg1Spin.SetBuddy( GetDlgItem( IDC_RESETED_ARG1 ) ); m_Arg1Spin.SetRange( 0, 32767 ); m_Arg2Spin.SetBuddy( GetDlgItem( IDC_RESETED_ARG2 ) ); m_Arg2Spin.SetRange( 0, 32767 ); m_MaxSpin.SetBuddy( GetDlgItem( IDC_RESETED_MAX ) ); m_MaxSpin.SetRange( 0, 32767 ); m_MinSpin.SetBuddy( GetDlgItem( IDC_RESETED_MIN ) ); m_MinSpin.SetRange( 0, 32767 ); text.LoadString( IDS_RESETM ); index = m_Type.AddString( text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Type.SetItemData( index, 'M' ); text.LoadString( IDS_RESETO ); index = m_Type.AddString( text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Type.SetItemData( index, 'O' ); text.LoadString( IDS_RESETP ); index = m_Type.AddString( text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Type.SetItemData( index, 'P' ); text.LoadString( IDS_RESETG ); index = m_Type.AddString( text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Type.SetItemData( index, 'G' ); text.LoadString( IDS_RESETE ); index = m_Type.AddString( text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Type.SetItemData( index, 'E' ); text.LoadString( IDS_RESETD ); index = m_Type.AddString( text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Type.SetItemData( index, 'D' ); text.LoadString( IDS_RESETR ); index = m_Type.AddString( text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Type.SetItemData( index, 'R' ); for ( index = 0; index < 7; index ++ ) { if ( (DWORD) m_type == m_Type.GetItemData( index ) ) { m_Type.SetCurSel( index ); break; } } m_firstsel = TRUE; OnSelchangeResetedType(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CResetEd::OnSelchangeResetedType() { int sel, i, index; CString text; UpdateData( TRUE ); text.LoadString( IDS_NOTHING ); m_TextArg1.SetWindowText( text ); m_Arg1 = 0; GetDlgItem( IDC_RESETED_ARG1 )->EnableWindow( FALSE ); m_Arg1List.ResetContent(); m_Arg1List.EnableWindow( FALSE ); m_TextArg2.SetWindowText( text ); m_Arg2 = 0; GetDlgItem( IDC_RESETED_ARG2 )->EnableWindow( FALSE ); m_Arg2List.ResetContent(); m_Arg2List.EnableWindow( FALSE ); m_Max = 0; GetDlgItem( IDC_RESETED_MAX )->EnableWindow( FALSE ); m_Min = 0; GetDlgItem( IDC_RESETED_MIN )->EnableWindow( FALSE ); m_TextList.SetWindowText( text ); m_List.ResetContent(); m_List.EnableWindow( FALSE ); m_List2.ResetContent(); m_List2.EnableWindow( FALSE ); GetDlgItem( IDOK )->EnableWindow( FALSE ); UpdateData( FALSE ); if ( ( sel = m_Type.GetCurSel() ) == CB_ERR ) { m_firstsel = FALSE; return; } m_type = (char) m_Type.GetItemData( sel ); GetDlgItem( IDOK )->EnableWindow(); if ( m_firstsel ) m_firstsel = FALSE; else { for ( i = 0; i < 4; i++ ) m_num[i] = 0; if ( m_type == 'M' || m_type == 'P' || m_type == 'G' || m_type == 'E' ) { m_num[1] = 1; m_num[3] = 1; } } switch ( m_type ) { case 'M': text.LoadString( IDS_MOB ); m_TextArg1.SetWindowText( text ); GetDlgItem( IDC_RESETED_ARG1 )->EnableWindow(); m_Arg1 = m_num[0]; m_Arg1List.EnableWindow(); MakeMobList( m_Arg1List, m_num[0] ); GetDlgItem( IDC_RESETED_MAX )->EnableWindow(); m_Max = m_num[1]; GetDlgItem( IDC_RESETED_MIN )->EnableWindow(); m_Min = m_num[3]; break; case 'O': text.LoadString( IDS_OBJECT ); m_TextArg1.SetWindowText( text ); GetDlgItem( IDC_RESETED_ARG1 )->EnableWindow(); m_Arg1 = m_num[0]; m_Arg1List.EnableWindow(); MakeObjList( m_Arg1List, m_num[0] ); break; case 'P': text.LoadString( IDS_OBJECT ); m_TextArg1.SetWindowText( text ); GetDlgItem( IDC_RESETED_ARG1 )->EnableWindow(); m_Arg1 = m_num[0]; m_Arg1List.EnableWindow(); MakeObjList( m_Arg1List, m_num[0] ); text.LoadString( IDS_TOOBJ ); m_TextArg2.SetWindowText( text ); GetDlgItem( IDC_RESETED_ARG2 )->EnableWindow(); m_Arg2 = m_num[2]; m_Arg2List.EnableWindow(); MakeObjList( m_Arg2List, m_num[0] ); GetDlgItem( IDC_RESETED_MAX )->EnableWindow(); m_Max = m_num[1]; GetDlgItem( IDC_RESETED_MIN )->EnableWindow(); m_Min = m_num[3]; break; case 'G': text.LoadString( IDS_OBJECT ); m_TextArg1.SetWindowText( text ); GetDlgItem( IDC_RESETED_ARG1 )->EnableWindow(); m_Arg1 = m_num[0]; m_Arg1List.EnableWindow(); MakeObjList( m_Arg1List, m_num[0] ); GetDlgItem( IDC_RESETED_MAX )->EnableWindow(); m_Max = m_num[1]; GetDlgItem( IDC_RESETED_MIN )->EnableWindow(); m_Min = m_num[3]; break; case 'E': text.LoadString( IDS_OBJECT ); m_TextArg1.SetWindowText( text ); GetDlgItem( IDC_RESETED_ARG1 )->EnableWindow(); m_Arg1 = m_num[0]; m_Arg1List.EnableWindow(); MakeObjList( m_Arg1List, m_num[0] ); GetDlgItem( IDC_RESETED_MAX )->EnableWindow(); m_Max = m_num[1]; GetDlgItem( IDC_RESETED_MIN )->EnableWindow(); m_Min = m_num[3]; m_List.EnableWindow(); text.LoadString( IDS_POSITION ); m_TextList.SetWindowText( text ); m_listnum = m_num[2]; for ( i = 0; i < tables.m_wearpos.GetSize(); i++ ) { index = m_List.AddString( tables.m_wearpos[i]->m_text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_List.SetItemData( index, tables.m_wearpos[i]->m_num ); if ( m_listnum == tables.m_wearpos[i]->m_num ) m_List.SetCurSel( index ); } break; case 'D': m_List.EnableWindow(); text.LoadString( IDS_DIRECTION ); m_TextList.SetWindowText( text ); m_listnum = m_num[1]; for ( i = 0; i < tables.m_dirname.GetSize(); i++ ) { index = m_List.AddString( tables.m_dirname[i]->m_text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_List.SetItemData( index, tables.m_dirname[i]->m_num ); if ( m_listnum == tables.m_dirname[i]->m_num ) m_List.SetCurSel( index ); } m_List2.EnableWindow(); m_listnum2 = m_num[2]; text.LoadString( IDS_NOTHING ); index = m_List2.AddString( text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_List2.SetItemData( index, 0 ); if ( m_listnum2 == 0 ) m_List2.SetCurSel( index ); text.LoadString( IDS_CLOSED ); index = m_List2.AddString( text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_List2.SetItemData( index, 1 ); if ( m_listnum2 == 1 ) m_List2.SetCurSel( index ); text.LoadString( IDS_LOCKED ); index = m_List2.AddString( text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_List2.SetItemData( index, 2 ); if ( m_listnum2 == 2 ) m_List2.SetCurSel( index ); break; case 'R': break; } UpdateData( FALSE ); } void CResetEd::OnOK() { switch ( m_type ) { case 'M': m_num[0] = m_Arg1Spin.GetPos(); m_num[1] = m_MaxSpin.GetPos(); m_num[2] = m_vnum; m_num[3] = m_MinSpin.GetPos(); break; case 'O': m_num[0] = m_Arg1Spin.GetPos(); m_num[1] = 0; m_num[2] = m_vnum; m_num[3] = 0; break; case 'P': m_num[0] = m_Arg1Spin.GetPos(); m_num[1] = m_MaxSpin.GetPos(); m_num[2] = m_Arg2Spin.GetPos(); m_num[3] = m_MinSpin.GetPos(); break; case 'G': m_num[0] = m_Arg1Spin.GetPos(); m_num[1] = m_MaxSpin.GetPos(); m_num[2] = 0; m_num[3] = m_MinSpin.GetPos(); break; case 'E': m_num[0] = m_Arg1Spin.GetPos(); m_num[1] = m_MaxSpin.GetPos(); m_num[2] = m_listnum; m_num[3] = m_MinSpin.GetPos(); break; case 'D': m_num[0] = m_vnum; m_num[1] = m_listnum; m_num[2] = m_listnum2; m_num[3] = 0; break; case 'R': m_num[0] = m_vnum; m_num[1] = 0; m_num[2] = 0; m_num[3] = 0; break; } CDialog::OnOK(); } void CResetEd::OnSelchangeResetedList() { int sel = m_List.GetCurSel(); if ( sel == CB_ERR ) return; m_listnum = m_List.GetItemData( sel ); } void CResetEd::OnSelchangeResetedList2() { int sel = m_List2.GetCurSel(); if ( sel == CB_ERR ) return; m_listnum2 = m_List2.GetItemData( sel ); } void CResetEd::MakeMobList(CComboBox & list, int vnum) { int i, index; char buf[500]; for ( i = 0; i < m_doc->m_mobs.GetSize(); i++ ) { sprintf( buf, "%s (%i)", m_doc->m_mobs[i]->m_short_descr, m_doc->m_mobs[i]->m_vnum ); index = list.AddString( buf ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); list.SetItemData( index, m_doc->m_mobs[i]->m_vnum ); if ( vnum == m_doc->m_mobs[i]->m_vnum ) list.SetCurSel( index ); } } void CResetEd::MakeObjList(CComboBox & list, int vnum) { int i, index; char buf[500]; for ( i = 0; i < m_doc->m_objs.GetSize(); i++ ) { sprintf( buf, "%s (%i)", m_doc->m_objs[i]->m_short_descr, m_doc->m_objs[i]->m_vnum ); index = list.AddString( buf ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); list.SetItemData( index, m_doc->m_objs[i]->m_vnum ); if ( vnum == m_doc->m_objs[i]->m_vnum ) list.SetCurSel( index ); } } void CResetEd::OnSelchangeResetedArg1List() { int sel = m_Arg1List.GetCurSel(); if ( sel == CB_ERR ) return; UpdateData( TRUE ); m_Arg1 = m_Arg1List.GetItemData( sel ); UpdateData( FALSE ); } void CResetEd::OnSelchangeResetedArg2List() { int sel = m_Arg2List.GetCurSel(); if ( sel == CB_ERR ) return; UpdateData( TRUE ); m_Arg2 = m_Arg2List.GetItemData( sel ); UpdateData( FALSE ); } void CResetEd::OnChangeResetedArg1() { int i, num; num = m_Arg1Spin.GetPos(); for ( i = 0; i < m_Arg1List.GetCount(); i++ ) if ( (DWORD) num == m_Arg1List.GetItemData( i ) ) break; if ( i >= m_Arg1List.GetCount() ) i = -1; m_Arg1List.SetCurSel( i ); } void CResetEd::OnChangeResetedArg2() { int i, num; num = m_Arg2Spin.GetPos(); for ( i = 0; i < m_Arg2List.GetCount(); i++ ) if ( (DWORD) num == m_Arg2List.GetItemData( i ) ) break; if ( i >= m_Arg2List.GetCount() ) i = -1; m_Arg2List.SetCurSel( i ); }