/**************************************************************************** * * * Project 64 - A Nintendo 64 emulator. * * http://www.pj64-emu.com/ * * Copyright (C) 2012 Project64. All rights reserved. * * * * License: * * GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html * * * ****************************************************************************/ #include "stdafx.h" #ifdef WINDOWS_UI #include "Settings Page.h" COptionsGameBrowserPage::COptionsGameBrowserPage (HWND hParent, const RECT & rcDispay ) : m_OrderChanged(false), m_OrderReset(false) { if (!Create(hParent,rcDispay)) { return; } SetDlgItemTextW(m_hWnd, IDC_ROMSEL_TEXT2,GS(RB_ROMS)); SetDlgItemTextW(m_hWnd, IDC_ROMSEL_TEXT4,GS(RB_DIRS)); SetDlgItemTextW(m_hWnd, IDC_USE_ROMBROWSER,GS(RB_USE)); SetDlgItemTextW(m_hWnd, IDC_RECURSION,GS(RB_DIR_RECURSION)); SetDlgItemTextW(m_hWnd, IDC_ROMSEL_TEXT5,GS(RB_AVALIABLE_FIELDS)); SetDlgItemTextW(m_hWnd, IDC_ROMSEL_TEXT6,GS(RB_SHOW_FIELDS)); SetDlgItemTextW(m_hWnd, IDC_ADD,GS(RB_ADD)); SetDlgItemTextW(m_hWnd, IDC_REMOVE,GS(RB_REMOVE)); SetDlgItemTextW(m_hWnd, IDC_UP,GS(RB_UP)); SetDlgItemTextW(m_hWnd, IDC_DOWN,GS(RB_DOWN)); AddModCheckBox(GetDlgItem(IDC_USE_ROMBROWSER),RomBrowser_Enabled); AddModCheckBox(GetDlgItem(IDC_RECURSION),RomBrowser_Recursive); m_Avaliable.Attach(GetDlgItem(IDC_AVALIABLE)); m_Using.Attach(GetDlgItem(IDC_USING)); CRomBrowser::GetFieldInfo(m_Fields); UpdatePageSettings(); } void COptionsGameBrowserPage::UpdateFieldList ( const ROMBROWSER_FIELDS_LIST & Fields ) { m_Avaliable.ResetContent(); m_Using.ResetContent(); m_OrderChanged = false; for (int i = 0, n = Fields.size(); i < n; i++) { if (Fields[i].PosChanged()) { m_OrderChanged = true; } int Pos = Fields[i].Pos(); if (Pos < 0) { m_Avaliable.SetItemData(m_Avaliable.AddStringW(GS(Fields[i].LangID())),i); continue; } int listCount = m_Using.GetCount(); if (Pos > listCount) { Pos = listCount; } m_Using.SetItemData(m_Using.InsertStringW(Pos,GS(Fields[i].LangID())),i); } } void COptionsGameBrowserPage::UpdatePageSettings ( void ) { UpdateFieldList(m_Fields); CSettingsPageImpl::UpdatePageSettings(); FixCtrlState(); } void COptionsGameBrowserPage::UseRomBrowserChanged ( UINT Code, int id, HWND ctl ) { CheckBoxChanged(Code,id,ctl); FixCtrlState(); } void COptionsGameBrowserPage::FixCtrlState ( void ) { bool bEnabled = (SendDlgItemMessage(IDC_USE_ROMBROWSER,BM_GETCHECK,0,0) == BST_CHECKED); ::EnableWindow(GetDlgItem(IDC_ROMSEL_TEXT5),bEnabled); ::EnableWindow(GetDlgItem(IDC_ROMSEL_TEXT6),bEnabled); ::EnableWindow(GetDlgItem(IDC_AVALIABLE),bEnabled); ::EnableWindow(GetDlgItem(IDC_ADD),bEnabled); ::EnableWindow(GetDlgItem(IDC_REMOVE),bEnabled); ::EnableWindow(GetDlgItem(IDC_USING),bEnabled); ::EnableWindow(GetDlgItem(IDC_UP),bEnabled); ::EnableWindow(GetDlgItem(IDC_DOWN),bEnabled); ::EnableWindow(GetDlgItem(IDC_RECURSION),bEnabled); } void COptionsGameBrowserPage::AddFieldClicked ( UINT /*Code*/, int /*id*/, HWND /*ctl*/ ) { int index = m_Avaliable.GetCurSel(); if (index < 0) { return; } //remove from list int i = m_Avaliable.GetItemData(index); m_Avaliable.DeleteString(index); //select next in list int listCount = m_Avaliable.GetCount(); if (index >= listCount) { index -= 1;} m_Avaliable.SetCurSel(index); //Add to list index = m_Using.AddStringW(GS(m_Fields[i].LangID())); m_Using.SetItemData(index,i); m_Using.SetCurSel(index); m_OrderChanged = true; m_OrderReset = false; SendMessage(GetParent(),PSM_CHANGED ,(WPARAM)m_hWnd,0); } void COptionsGameBrowserPage::RemoveFieldClicked ( UINT /*Code*/, int /*id*/, HWND /*ctl*/ ) { int index = m_Using.GetCurSel(); if (index < 0) { return; } //remove from list int i = m_Using.GetItemData(index); m_Using.DeleteString(index); //select next in list int listCount = m_Using.GetCount(); if (index >= listCount) { index -= 1; } m_Using.SetCurSel(index); //Add to list index = m_Avaliable.AddStringW(GS(m_Fields[i].LangID())); m_Avaliable.SetItemData(index, i); m_Avaliable.SetCurSel(index); m_OrderChanged = true; m_OrderReset = false; SendMessage(GetParent(), PSM_CHANGED, (WPARAM)m_hWnd, 0); } void COptionsGameBrowserPage::MoveFieldUpClicked ( UINT /*Code*/, int /*id*/, HWND /*ctl*/ ) { int index = m_Using.GetCurSel(); if (index <= 0) { return; } int i = m_Using.GetItemData(index); m_Using.DeleteString(index); index = m_Using.InsertStringW(index - 1,GS(m_Fields[i].LangID())); m_Using.SetItemData(index,i); m_Using.SetCurSel(index); m_OrderChanged = true; m_OrderReset = false; SendMessage(GetParent(),PSM_CHANGED ,(WPARAM)m_hWnd,0); } void COptionsGameBrowserPage::MoveFieldDownClicked ( UINT /*Code*/, int /*id*/, HWND /*ctl*/ ) { int index = m_Using.GetCurSel(); if (index < 0 || index >= (m_Using.GetCount() - 1)) { return; } int i = m_Using.GetItemData(index); m_Using.DeleteString(index); index = m_Using.InsertStringW(index + 1,GS(m_Fields[i].LangID())); m_Using.SetItemData(index,i); m_Using.SetCurSel(index); m_OrderChanged = true; m_OrderReset = false; SendMessage(GetParent(),PSM_CHANGED ,(WPARAM)m_hWnd,0); } void COptionsGameBrowserPage::HidePage() { ShowWindow(SW_HIDE); } void COptionsGameBrowserPage::ShowPage() { ShowWindow(SW_SHOW); } void COptionsGameBrowserPage::ApplySettings( bool UpdateScreen ) { bool bColChanged = false; if (m_OrderReset) { for (size_t i = 0; i < m_Fields.size(); i++ ) { m_Fields[i].ResetPos(); } bColChanged = true; } else { size_t Item, listCount = m_Using.GetCount(); for (Item = 0; Item < listCount; Item ++ ) { int Pos = m_Using.GetItemData(Item); if (m_OrderReset || m_Fields[Pos].Pos() != Item) { m_Fields[Pos].SetColPos(Item); bColChanged = true; } } listCount = m_Avaliable.GetCount(); for (Item = 0; Item < listCount; Item ++ ) { int Pos = m_Avaliable.GetItemData(Item); if (m_OrderReset || m_Fields[Pos].Pos() != -1) { m_Fields[Pos].SetColPos(-1); bColChanged = true; } } } if (bColChanged) { g_Settings->SaveBool(RomBrowser_ColoumnsChanged,!g_Settings->LoadBool(RomBrowser_ColoumnsChanged)); } CSettingsPageImpl::ApplySettings(UpdateScreen); } bool COptionsGameBrowserPage::EnableReset ( void ) { if (m_OrderChanged) { return true; } return CSettingsPageImpl::EnableReset(); } void COptionsGameBrowserPage::ResetPage() { if (m_OrderChanged) { ROMBROWSER_FIELDS_LIST Fields; CRomBrowser::GetFieldInfo(Fields,true); UpdateFieldList(Fields); m_OrderReset = true; SendMessage(GetParent(),PSM_CHANGED,(WPARAM)m_hWnd,0); } CSettingsPageImpl::ResetPage(); } #endif