246 lines
5.3 KiB
C++
246 lines
5.3 KiB
C++
// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator.
|
|
// Copyright (C) 1999-2003 Forgotten
|
|
// Copyright (C) 2004 Forgotten and the VBA development team
|
|
|
|
// 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, or(at your option)
|
|
// 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.
|
|
|
|
// GBPaletteView.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "vba.h"
|
|
#include "FileDlg.h"
|
|
#include "GBPaletteView.h"
|
|
#include "WinResUtil.h"
|
|
|
|
#include "../System.h"
|
|
#include "../gb/gbGlobals.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
void GBPaletteViewControl::updatePalette()
|
|
{
|
|
if(gbRom) {
|
|
memcpy(palette, &gbPalette[paletteAddress], 64);
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// GBPaletteView dialog
|
|
|
|
|
|
GBPaletteView::GBPaletteView(CWnd* pParent /*=NULL*/)
|
|
: ResizeDlg(GBPaletteView::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(GBPaletteView)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
autoUpdate = false;
|
|
}
|
|
|
|
GBPaletteView::~GBPaletteView()
|
|
{
|
|
}
|
|
|
|
void GBPaletteView::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(GBPaletteView)
|
|
// NOTE: the ClassWizard will add DDX and DDV calls here
|
|
//}}AFX_DATA_MAP
|
|
DDX_Control(pDX, IDC_PALETTE_VIEW, paletteView);
|
|
DDX_Control(pDX, IDC_PALETTE_VIEW_OBJ, paletteViewOBJ);
|
|
DDX_Control(pDX, IDC_COLOR, colorControl);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(GBPaletteView, CDialog)
|
|
//{{AFX_MSG_MAP(GBPaletteView)
|
|
ON_BN_CLICKED(IDC_SAVE_BG, OnSaveBg)
|
|
ON_BN_CLICKED(IDC_SAVE_OBJ, OnSaveObj)
|
|
ON_BN_CLICKED(IDC_REFRESH2, OnRefresh2)
|
|
ON_BN_CLICKED(IDC_AUTO_UPDATE, OnAutoUpdate)
|
|
ON_BN_CLICKED(IDC_CLOSE, OnClose)
|
|
//}}AFX_MSG_MAP
|
|
ON_MESSAGE(WM_PALINFO, OnPalInfo)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// GBPaletteView message handlers
|
|
|
|
BOOL GBPaletteView::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
DIALOG_SIZER_START( sz )
|
|
DIALOG_SIZER_END()
|
|
SetData(sz,
|
|
FALSE,
|
|
HKEY_CURRENT_USER,
|
|
"Software\\Emulators\\VisualBoyAdvance\\Viewer\\GBPaletteView",
|
|
NULL);
|
|
|
|
paletteView.init(32, 64, 128);
|
|
paletteViewOBJ.init(32, 64, 128);
|
|
|
|
paletteView.setPaletteAddress(0);
|
|
paletteView.refresh();
|
|
|
|
paletteViewOBJ.setPaletteAddress(32);
|
|
paletteViewOBJ.refresh();
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void GBPaletteView::save(int which)
|
|
{
|
|
CString captureBuffer;
|
|
|
|
if(which == 0)
|
|
captureBuffer = "bg.pal";
|
|
else
|
|
captureBuffer = "obj.pal";
|
|
|
|
LPCTSTR exts[] = {".pal", ".pal", ".act" };
|
|
|
|
CString filter = theApp.winLoadFilter(IDS_FILTER_PAL);
|
|
CString title = winResLoadString(IDS_SELECT_PALETTE_NAME);
|
|
FileDlg dlg(this,
|
|
captureBuffer,
|
|
filter,
|
|
1,
|
|
"PAL",
|
|
exts,
|
|
"",
|
|
title,
|
|
true);
|
|
|
|
if(dlg.DoModal() == IDCANCEL) {
|
|
return;
|
|
}
|
|
|
|
captureBuffer = dlg.GetPathName();
|
|
|
|
PaletteViewControl *p = NULL;
|
|
|
|
if(which == 0)
|
|
p = &paletteView;
|
|
else
|
|
p = &paletteViewOBJ;
|
|
|
|
switch(dlg.getFilterIndex()) {
|
|
case 0:
|
|
case 1:
|
|
p->saveMSPAL(captureBuffer);
|
|
break;
|
|
case 2:
|
|
p->saveJASCPAL(captureBuffer);
|
|
break;
|
|
case 3:
|
|
p->saveAdobe(captureBuffer);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
void GBPaletteView::OnSaveBg()
|
|
{
|
|
save(0);
|
|
}
|
|
|
|
void GBPaletteView::OnSaveObj()
|
|
{
|
|
save(1);
|
|
}
|
|
|
|
void GBPaletteView::OnRefresh2()
|
|
{
|
|
paletteView.refresh();
|
|
paletteViewOBJ.refresh();
|
|
}
|
|
|
|
void GBPaletteView::update()
|
|
{
|
|
OnRefresh2();
|
|
}
|
|
|
|
|
|
void GBPaletteView::OnAutoUpdate()
|
|
{
|
|
autoUpdate = !autoUpdate;
|
|
if(autoUpdate) {
|
|
theApp.winAddUpdateListener(this);
|
|
} else {
|
|
theApp.winRemoveUpdateListener(this);
|
|
}
|
|
}
|
|
|
|
|
|
void GBPaletteView::OnClose()
|
|
{
|
|
theApp.winRemoveUpdateListener(this);
|
|
|
|
DestroyWindow();
|
|
}
|
|
|
|
LRESULT GBPaletteView::OnPalInfo(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
u16 color = (u16)wParam;
|
|
u32 address = (u32)lParam;
|
|
CString buffer;
|
|
|
|
bool isOBJ = address >= 32;
|
|
address &= 31;
|
|
|
|
buffer.Format("%d", address);
|
|
GetDlgItem(IDC_ADDRESS)->SetWindowText(buffer);
|
|
|
|
int r = (color & 0x1f);
|
|
int g = (color & 0x3e0) >> 5;
|
|
int b = (color & 0x7c00) >> 10;
|
|
|
|
buffer.Format("%d", r);
|
|
GetDlgItem(IDC_R)->SetWindowText(buffer);
|
|
|
|
buffer.Format("%d", g);
|
|
GetDlgItem(IDC_G)->SetWindowText(buffer);
|
|
|
|
buffer.Format("%d", b);
|
|
GetDlgItem(IDC_B)->SetWindowText(buffer);
|
|
|
|
|
|
buffer.Format("0x%04X", color);
|
|
GetDlgItem(IDC_VALUE)->SetWindowText(buffer);
|
|
|
|
colorControl.setColor(color);
|
|
|
|
if(isOBJ)
|
|
paletteView.setSelected(-1);
|
|
else
|
|
paletteViewOBJ.setSelected(-1);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void GBPaletteView::PostNcDestroy()
|
|
{
|
|
delete this;
|
|
}
|