/* * 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:27 1999 * */ /* * File: TrainEd.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... :-) * */ // TrainEd.cpp : implementation file // #include "stdafx.h" #include "arcaed.h" #include "TrainEd.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTrainEd dialog CTrainEd::CTrainEd(CWnd* pParent /*=NULL*/) : CDialog(CTrainEd::IDD, pParent) { //{{AFX_DATA_INIT(CTrainEd) m_Msg = _T(""); m_MsgPart = _T(""); m_Room = 0; m_Time = 0; //}}AFX_DATA_INIT m_seltrain = -1; m_doc = NULL; m_imagelist.Create( 16, 16, ILC_COLOR, 2, 1 ); m_imagelist.SetBkColor( RGB( 255, 255, 255 ) ); m_imagelist.Add( AfxGetApp()->LoadIcon( IDI_OFF ) ); m_imagelist.Add( AfxGetApp()->LoadIcon( IDI_ON ) ); } void CTrainEd::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTrainEd) DDX_Control(pDX, IDC_TRAINED_TIME_SPIN, m_TimeSpin); DDX_Control(pDX, IDC_TRAINED_ROOM_SPIN, m_RoomSpin); DDX_Control(pDX, IDC_TRAINED_FLAGS, m_Flags); DDX_Control(pDX, IDC_TRAINED_DOWN, m_Down); DDX_Control(pDX, IDC_TRAINED_UP, m_Up); DDX_Control(pDX, IDC_TRAINED_LIST, m_List); DDX_Text(pDX, IDC_TRAINED_MSG, m_Msg); DDX_Text(pDX, IDC_TRAINED_MSGPART, m_MsgPart); DDX_Text(pDX, IDC_TRAINED_ROOM, m_Room); DDV_MinMaxInt(pDX, m_Room, 0, 32767); DDX_Text(pDX, IDC_TRAINED_TIME, m_Time); DDV_MinMaxInt(pDX, m_Time, 0, 32767); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CTrainEd, CDialog) //{{AFX_MSG_MAP(CTrainEd) ON_BN_CLICKED(IDC_TRAINED_NUEVO, OnTrainedNuevo) ON_LBN_SELCHANGE(IDC_TRAINED_LIST, OnSelchangeTrainedList) ON_EN_CHANGE(IDC_TRAINED_ROOM, OnChangeTrainedRoom) ON_EN_CHANGE(IDC_TRAINED_TIME, OnChangeTrainedTime) ON_EN_CHANGE(IDC_TRAINED_MSG, OnChangeTrainedMsg) ON_EN_CHANGE(IDC_TRAINED_MSGPART, OnChangeTrainedMsgpart) ON_NOTIFY(NM_CLICK, IDC_TRAINED_FLAGS, OnClickTrainedFlags) ON_BN_CLICKED(IDC_TRAINED_BORRAR, OnTrainedBorrar) ON_BN_CLICKED(IDC_TRAINED_INSERTAR, OnTrainedInsertar) ON_BN_CLICKED(IDC_TRAINED_UP, OnTrainedUp) ON_BN_CLICKED(IDC_TRAINED_DOWN, OnTrainedDown) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTrainEd message handlers BOOL CTrainEd::OnInitDialog() { CDialog::OnInitDialog(); m_Up.SetIcon( AfxGetApp()->LoadIcon( IDI_UP ) ); m_Down.SetIcon( AfxGetApp()->LoadIcon( IDI_DOWN ) ); m_RoomSpin.SetBuddy( GetDlgItem( IDC_TRAINED_ROOM ) ); m_TimeSpin.SetBuddy( GetDlgItem( IDC_TRAINED_TIME ) ); m_RoomSpin.SetRange( 0, 32767 ); m_TimeSpin.SetRange( 0, 32767 ); m_Flags.SetImageList( &m_imagelist, LVSIL_SMALL ); MakeList(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CTrainEd::MakeList() { int i; char buf[500]; for ( i = 0; i < m_traindata.GetSize(); i++ ) { sprintf( buf, "%d\t%d %s", i, m_traindata[i]->m_room, m_doc->FindRoom( m_traindata[i]->m_room ) != -1 ? m_doc->m_rooms[m_doc->FindRoom( m_traindata[i]->m_room )]->m_name : "" ); m_List.AddString( buf ); } m_List.SetCurSel( 0 ); OnSelchangeTrainedList(); } void CTrainEd::OnSelchangeTrainedList() { m_Flags.DeleteAllItems(); if ( ( m_seltrain = m_List.GetCurSel() ) == LB_ERR ) { m_seltrain = -1; GetDlgItem( IDC_TRAINED_INSERTAR )->EnableWindow( FALSE ); GetDlgItem( IDC_TRAINED_BORRAR )->EnableWindow( FALSE ); GetDlgItem( IDC_TRAINED_UP )->EnableWindow( FALSE ); GetDlgItem( IDC_TRAINED_DOWN )->EnableWindow( FALSE ); m_Flags.EnableWindow( FALSE ); GetDlgItem( IDC_TRAINED_MSG )->EnableWindow( FALSE ); GetDlgItem( IDC_TRAINED_MSGPART )->EnableWindow( FALSE ); GetDlgItem( IDC_TRAINED_ROOM )->EnableWindow( FALSE ); GetDlgItem( IDC_TRAINED_TIME )->EnableWindow( FALSE ); GetDlgItem( IDC_TRAINED_MSG )->SetWindowText( "" ); GetDlgItem( IDC_TRAINED_MSGPART )->SetWindowText( "" ); GetDlgItem( IDC_TRAINED_ROOM )->SetWindowText( "0" ); GetDlgItem( IDC_TRAINED_TIME )->SetWindowText( "0" ); return; } GetDlgItem( IDC_TRAINED_INSERTAR )->EnableWindow(); GetDlgItem( IDC_TRAINED_BORRAR )->EnableWindow(); GetDlgItem( IDC_TRAINED_UP )->EnableWindow( FALSE ); GetDlgItem( IDC_TRAINED_DOWN )->EnableWindow( FALSE ); if ( m_seltrain > 0 ) GetDlgItem( IDC_TRAINED_UP )->EnableWindow(); if ( m_seltrain < m_traindata.GetSize() - 1 ) GetDlgItem( IDC_TRAINED_DOWN )->EnableWindow(); m_Flags.EnableWindow(); GetDlgItem( IDC_TRAINED_MSG )->EnableWindow(); GetDlgItem( IDC_TRAINED_MSGPART )->EnableWindow(); GetDlgItem( IDC_TRAINED_ROOM )->EnableWindow(); GetDlgItem( IDC_TRAINED_TIME )->EnableWindow(); UpdateData( TRUE ); SetFlags(); m_Msg = m_traindata[m_seltrain]->m_msg; m_MsgPart = m_traindata[m_seltrain]->m_msgpart; m_Room = m_traindata[m_seltrain]->m_room; m_Time = m_traindata[m_seltrain]->m_time; UpdateData( FALSE ); } void CTrainEd::SetFlags() { int i; LV_ITEM itemdata; for ( i = 0; i < tables.m_train_flags.GetSize(); i++ ) { itemdata.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; itemdata.iItem = i; itemdata.iSubItem = 0; itemdata.pszText = tables.m_train_flags[i]->m_text.GetBuffer(0); itemdata.lParam = tables.m_train_flags[i]->m_num; itemdata.iImage = m_traindata[m_seltrain]->m_flags & itemdata.lParam ? 1 : 0; m_Flags.InsertItem( &itemdata ); } } void CTrainEd::OnTrainedNuevo() { CTrainData *train; int index, i; char buf[500]; train = new CTrainData(); i = m_traindata.Add( train ); sprintf( buf, "%d\t%d %s", i, m_traindata[i]->m_room, m_doc->FindRoom( m_traindata[i]->m_room ) != -1 ? m_doc->m_rooms[m_doc->FindRoom( m_traindata[i]->m_room )]->m_name : "" ); index = m_List.AddString( buf ); ASSERT( index != LB_ERR && index != LB_ERRSPACE ); m_List.SetCurSel( index ); OnSelchangeTrainedList(); } void CTrainEd::OnChangeTrainedRoom() { char buf[500]; if ( m_seltrain == -1 ) return; UpdateData( TRUE ); m_traindata[m_seltrain]->m_room = m_RoomSpin.GetPos(); sprintf( buf, "%d\t%d %s", m_seltrain, m_traindata[m_seltrain]->m_room, m_doc->FindRoom( m_traindata[m_seltrain]->m_room ) != -1 ? m_doc->m_rooms[m_doc->FindRoom( m_traindata[m_seltrain]->m_room )]->m_name : "" ); m_List.DeleteString( m_seltrain ); m_List.InsertString( m_seltrain, buf ); m_List.SetItemData( m_seltrain, m_seltrain ); m_List.SetCurSel( m_seltrain ); } void CTrainEd::OnChangeTrainedTime() { if ( m_seltrain == -1 ) return; UpdateData( TRUE ); m_traindata[m_seltrain]->m_time = m_TimeSpin.GetPos(); } void CTrainEd::OnChangeTrainedMsg() { if ( m_seltrain == -1 ) return; UpdateData( TRUE ); m_traindata[m_seltrain]->m_msg = m_Msg; } void CTrainEd::OnChangeTrainedMsgpart() { if ( m_seltrain == -1 ) return; UpdateData( TRUE ); m_traindata[m_seltrain]->m_msgpart = m_MsgPart; } void CTrainEd::OnClickTrainedFlags(NMHDR* pNMHDR, LRESULT* pResult) { int i; if ( m_seltrain == -1 ) return; for ( i = 0; i < m_Flags.GetItemCount(); i++ ) { if ( m_Flags.GetItemState( i, LVIS_SELECTED ) ) { m_traindata[m_seltrain]->m_flags ^= m_Flags.GetItemData( i ); LV_ITEM itemdata; itemdata.mask = LVIF_IMAGE; itemdata.iItem = i; itemdata.iSubItem = 0; itemdata.iImage = m_traindata[m_seltrain]->m_flags & m_Flags.GetItemData( i ) ? 1 : 0; m_Flags.SetItem( &itemdata ); } } *pResult = 0; } void CTrainEd::OnTrainedBorrar() { if ( m_seltrain == -1 ) return; m_traindata.RemoveAt( m_seltrain ); m_List.DeleteString( m_seltrain ); if ( m_List.SetCurSel( m_seltrain ) == LB_ERR ) m_List.SetCurSel( m_seltrain - 1 ); OnSelchangeTrainedList(); } void CTrainEd::OnTrainedInsertar() { CTrainData *train; char buf[500]; int i; if ( m_seltrain == -1 ) return; train = new CTrainData(); m_traindata.InsertAt( m_seltrain, train ); for ( i = m_seltrain; i < m_traindata.GetSize(); i++ ) { sprintf( buf, "%d\t%d %s", i, m_traindata[i]->m_room, m_doc->FindRoom( m_traindata[i]->m_room ) != -1 ? m_doc->m_rooms[m_doc->FindRoom( m_traindata[i]->m_room )]->m_name : "" ); m_List.DeleteString( i ); m_List.InsertString( i, buf ); } m_List.SetCurSel( m_seltrain ); OnSelchangeTrainedList(); } void CTrainEd::OnTrainedUp() { int i; CTrainData *train; char buf[500]; if ( m_seltrain < 1 ) return; train = m_traindata[m_seltrain]; m_traindata[m_seltrain] = m_traindata[m_seltrain-1]; m_traindata[m_seltrain-1] = train; m_seltrain--; for ( i = m_seltrain; i < m_seltrain+2; i++ ) { sprintf( buf, "%d\t%d %s", i, m_traindata[i]->m_room, m_doc->FindRoom( m_traindata[i]->m_room ) != -1 ? m_doc->m_rooms[m_doc->FindRoom( m_traindata[i]->m_room )]->m_name : "" ); m_List.DeleteString( i ); m_List.InsertString( i, buf ); } m_List.SetCurSel( m_seltrain ); OnSelchangeTrainedList(); } void CTrainEd::OnTrainedDown() { int i; CTrainData *train; char buf[500]; if ( m_seltrain > m_traindata.GetSize() - 2 ) return; train = m_traindata[m_seltrain]; m_traindata[m_seltrain] = m_traindata[m_seltrain+1]; m_traindata[m_seltrain+1] = train; for ( i = m_seltrain; i < m_seltrain+2; i++ ) { sprintf( buf, "%d\t%d %s", i, m_traindata[i]->m_room, m_doc->FindRoom( m_traindata[i]->m_room ) != -1 ? m_doc->m_rooms[m_doc->FindRoom( m_traindata[i]->m_room )]->m_name : "" ); m_List.DeleteString( i ); m_List.InsertString( i, buf ); } m_seltrain++; m_List.SetCurSel( m_seltrain ); OnSelchangeTrainedList(); }