/* * 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:26 1999 * */ /* * File: SkillTrEdit.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... :-) * */ // SkillTrEdit.cpp : implementation file // #include "stdafx.h" #include "arcaed.h" #include "SkillTrEdit.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSkillTrEdit dialog CSkillTrEdit::CSkillTrEdit(CWnd* pParent /*=NULL*/) : CDialog(CSkillTrEdit::IDD, pParent) { //{{AFX_DATA_INIT(CSkillTrEdit) m_Gold = 0; m_MaxLevel = 0; m_Mult = 0; //}}AFX_DATA_INIT } void CSkillTrEdit::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSkillTrEdit) DDX_Control(pDX, IDC_SKILLPR_CLASS, m_Class); DDX_Control(pDX, IDC_SKILLPR_MULT_SPIN, m_MultSpin); DDX_Control(pDX, IDC_SKILLPR_LEVEL_SPIN, m_MaxLevelSpin); DDX_Control(pDX, IDC_SKILLPR_GOLD_SPIN, m_GoldSpin); DDX_Control(pDX, IDC_SKILLPR_TEACH, m_Teach); DDX_Control(pDX, IDC_SKILLPR_SKILL, m_Skill); DDX_Control(pDX, IDC_SKILLPR_LIST, m_List); DDX_Text(pDX, IDC_SKILLPR_GOLD, m_Gold); DDV_MinMaxInt(pDX, m_Gold, 0, 30000); DDX_Text(pDX, IDC_SKILLPR_LEVEL, m_MaxLevel); DDV_MinMaxInt(pDX, m_MaxLevel, 0, 30000); DDX_Text(pDX, IDC_SKILLPR_MULT, m_Mult); DDV_MinMaxInt(pDX, m_Mult, 0, 30000); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSkillTrEdit, CDialog) //{{AFX_MSG_MAP(CSkillTrEdit) ON_CBN_SELCHANGE(IDC_SKILLPR_CLASS, OnSelchangeSkillprClass) ON_BN_CLICKED(IDC_SKILLPR_ADD, OnSkillprAdd) ON_BN_CLICKED(IDC_SKILLPR_DEL, OnSkillprDel) ON_EN_CHANGE(IDC_SKILLPR_GOLD, OnChangeSkillprGold) ON_EN_CHANGE(IDC_SKILLPR_LEVEL, OnChangeSkillprLevel) ON_EN_CHANGE(IDC_SKILLPR_MULT, OnChangeSkillprMult) ON_CBN_SELCHANGE(IDC_SKILLPR_SKILL, OnSelchangeSkillprSkill) ON_CBN_SELCHANGE(IDC_SKILLPR_TEACH, OnSelchangeSkillprTeach) ON_LBN_SELCHANGE(IDC_SKILLPR_LIST, OnSelchangeSkillprList) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSkillTrEdit message handlers BOOL CSkillTrEdit::OnInitDialog() { CDialog::OnInitDialog(); int index, i; CString temp; m_GoldSpin.SetBuddy( GetDlgItem( IDC_SKILLPR_GOLD ) ); m_MultSpin.SetBuddy( GetDlgItem( IDC_SKILLPR_MULT ) ); m_MaxLevelSpin.SetBuddy( GetDlgItem( IDC_SKILLPR_LEVEL ) ); m_GoldSpin.SetRange( 0, 30000 ); m_MultSpin.SetRange( 0, 30000 ); m_MaxLevelSpin.SetRange( 0, 30000 ); temp.LoadString( IDS_NO ); tch_no = m_Teach.AddString( temp ); ASSERT( tch_no != CB_ERR && tch_no != CB_ERRSPACE ); m_Teach.SetItemData( tch_no, FALSE ); temp.LoadString( IDS_YES ); tch_yes = m_Teach.AddString( temp ); ASSERT( tch_yes != CB_ERR && tch_yes != CB_ERRSPACE ); m_Teach.SetItemData( tch_yes, TRUE ); for ( i = 0; i < tables.m_skills.GetSize(); i++ ) { index = m_Skill.AddString( tables.m_skills[i]->m_text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Skill.SetItemData( index, i ); } index = m_Class.AddString( "" ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Class.SetItemData( index, -1 ); for ( i = 0; i < tables.m_classes.GetSize(); i++ ) { index = m_Class.AddString( tables.m_classes[i]->m_text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Class.SetItemData( index, i ); if ( m_class == tables.m_classes[i]->m_text ) m_Class.SetCurSel( i ); } for ( i = 0; i < m_trskill.GetSize(); i++ ) { index = m_List.AddString( m_trskill[i]->m_skill ); ASSERT( index != LB_ERR && index != LB_ERRSPACE ); m_List.SetItemData( index, i ); } SetSelData(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CSkillTrEdit::SetSelData() { GetDlgItem( IDC_SKILLPR_SKILL )->EnableWindow( FALSE ); GetDlgItem( IDC_SKILLPR_GOLD )->EnableWindow( FALSE ); GetDlgItem( IDC_SKILLPR_LEVEL )->EnableWindow( FALSE ); GetDlgItem( IDC_SKILLPR_MULT )->EnableWindow( FALSE ); GetDlgItem( IDC_SKILLPR_TEACH )->EnableWindow( FALSE ); int sel = m_List.GetCurSel(); if ( sel == LB_ERR ) return; GetDlgItem( IDC_SKILLPR_SKILL )->EnableWindow(); GetDlgItem( IDC_SKILLPR_GOLD )->EnableWindow(); GetDlgItem( IDC_SKILLPR_LEVEL )->EnableWindow(); GetDlgItem( IDC_SKILLPR_MULT )->EnableWindow(); GetDlgItem( IDC_SKILLPR_TEACH )->EnableWindow(); int data = m_List.GetItemData( sel ); UpdateData( TRUE ); m_Gold = m_trskill[data]->m_gold; m_MaxLevel = m_trskill[data]->m_maxlevel; m_Mult = m_trskill[data]->m_mult; if ( m_trskill[data]->m_teach ) m_Teach.SetCurSel( tch_yes ); else m_Teach.SetCurSel( tch_no ); m_Skill.SetCurSel( m_Skill.FindStringExact( -1, m_trskill[data]->m_skill ) ); UpdateData( FALSE ); } void CSkillTrEdit::OnSelchangeSkillprClass() { int sel = m_Class.GetCurSel(); if ( sel == CB_ERR ) return; int data = m_Class.GetItemData( sel ); if ( data == -1 ) { m_class = ""; return; } m_class = tables.m_classes[data]->m_text; } void CSkillTrEdit::OnSkillprAdd() { CSkillPrac *prskill; prskill = new CSkillPrac(); int pos = m_trskill.Add( prskill ); int index = m_List.AddString( prskill->m_skill ); ASSERT( index != LB_ERR && index != LB_ERRSPACE ); m_List.SetItemData( index, pos ); m_List.SetCurSel( index ); SetSelData(); } void CSkillTrEdit::OnSkillprDel() { int sel = m_List.GetCurSel(); if ( sel == LB_ERR ) return; int data = m_List.GetItemData( sel ); m_trskill.RemoveAt( data ); m_List.DeleteString( sel ); for ( int i = data; i < m_trskill.GetSize(); i++ ) { sel = m_List.FindStringExact( -1, m_trskill[i]->m_skill ); m_List.SetItemData( sel, i ); } SetSelData(); } void CSkillTrEdit::OnChangeSkillprGold() { int sel = m_List.GetCurSel(); if ( sel == LB_ERR ) return; UpdateData( TRUE ); int data = m_List.GetItemData( sel ); m_trskill[data]->m_gold = m_Gold; } void CSkillTrEdit::OnChangeSkillprLevel() { int sel = m_List.GetCurSel(); if ( sel == LB_ERR ) return; UpdateData( TRUE ); int data = m_List.GetItemData( sel ); m_trskill[data]->m_maxlevel = m_MaxLevel; } void CSkillTrEdit::OnChangeSkillprMult() { int sel = m_List.GetCurSel(); if ( sel == LB_ERR ) return; UpdateData( TRUE ); int data = m_List.GetItemData( sel ); m_trskill[data]->m_mult = m_Mult; } void CSkillTrEdit::OnSelchangeSkillprSkill() { int selsk = m_Skill.GetCurSel(); if ( selsk == CB_ERR ) return; int selli = m_List.GetCurSel(); if ( selli == LB_ERR ) return; int datask = m_Skill.GetItemData( selsk ); int datali = m_List.GetItemData( selli ); m_trskill[datali]->m_skill = tables.m_skills[datask]->m_text; m_List.DeleteString( selli ); selli = m_List.AddString( m_trskill[datali]->m_skill ); ASSERT( selli != LB_ERR && selli != LB_ERRSPACE ); m_List.SetItemData( selli, datali ); m_List.SetCurSel( selli ); SetSelData(); } void CSkillTrEdit::OnSelchangeSkillprTeach() { int sel = m_Teach.GetCurSel(); if ( sel == CB_ERR ) return; int selli = m_List.GetCurSel(); if ( selli == LB_ERR ) return; int datali = m_List.GetItemData( selli ); m_trskill[datali]->m_teach = m_Teach.GetItemData( sel ); } void CSkillTrEdit::OnSelchangeSkillprList() { SetSelData(); }