mirror of
https://github.com/0ldsk00l/nestopia.git
synced 2025-04-02 10:31:51 -04:00
238 lines
4.8 KiB
C++
238 lines
4.8 KiB
C++
////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Nestopia - NES/Famicom emulator written in C++
|
|
//
|
|
// Copyright (C) 2003-2008 Martin Freij
|
|
//
|
|
// This file is part of Nestopia.
|
|
//
|
|
// Nestopia 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
|
|
// (at your option) any later version.
|
|
//
|
|
// Nestopia 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 Nestopia; if not, write to the Free Software
|
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef NST_MANAGER_PATHS_H
|
|
#define NST_MANAGER_PATHS_H
|
|
|
|
#pragma once
|
|
|
|
#include "language/resource.h"
|
|
#include "NstObjectHeap.hpp"
|
|
#include "NstCollectionBitSet.hpp"
|
|
#include "NstManager.hpp"
|
|
|
|
namespace Nestopia
|
|
{
|
|
namespace Io
|
|
{
|
|
class File;
|
|
class Archive;
|
|
}
|
|
|
|
namespace Window
|
|
{
|
|
class Paths;
|
|
}
|
|
|
|
namespace Managers
|
|
{
|
|
class Paths : Manager
|
|
{
|
|
public:
|
|
|
|
Paths(Emulator&,const Configuration&,Window::Menu&);
|
|
~Paths();
|
|
|
|
struct File
|
|
{
|
|
File();
|
|
~File();
|
|
|
|
typedef Collection::Buffer Data;
|
|
typedef HeapString Text;
|
|
typedef Collection::BitSet Types;
|
|
|
|
enum Type
|
|
{
|
|
NONE = 0x00000,
|
|
INES = 0x00001,
|
|
UNIF = 0x00002,
|
|
FDS = 0x00004,
|
|
NSF = 0x00008,
|
|
BATTERY = 0x00010,
|
|
TAPE = 0x00020,
|
|
STATE = 0x00040,
|
|
SLOTS = 0x00080,
|
|
IPS = 0x00100,
|
|
UPS = 0x00200,
|
|
MOVIE = 0x00400,
|
|
ROM = 0x00800,
|
|
XML = 0x01000,
|
|
PALETTE = 0x02000,
|
|
WAVE = 0x04000,
|
|
AVI = 0x08000,
|
|
ARCHIVE = 0x10000
|
|
};
|
|
|
|
enum
|
|
{
|
|
CARTRIDGE = INES|UNIF|XML,
|
|
GAME = CARTRIDGE|FDS,
|
|
IMAGE = GAME|NSF,
|
|
PATCH = IPS|UPS
|
|
};
|
|
|
|
enum
|
|
{
|
|
ID_INES = FourCC<'N','E','S',0x1A>::V,
|
|
ID_UNIF = FourCC<'U','N','I','F'>::V,
|
|
ID_FDS = FourCC<'F','D','S',0x1A>::V,
|
|
ID_NSF = FourCC<'N','E','S','M'>::V,
|
|
ID_IPS = FourCC<'P','A','T','C'>::V,
|
|
ID_UPS = FourCC<'U','P','S','1'>::V,
|
|
ID_NST = FourCC<'N','S','T',0x1A>::V,
|
|
ID_NSV = FourCC<'N','S','V',0x1A>::V,
|
|
ID_ZIP = FourCC<'P','K',0x03,0x04>::V,
|
|
ID_RAR = FourCC<'R','a','r','!'>::V,
|
|
ID_7Z = FourCC<'7','z',0xBC,0xAF>::V,
|
|
ID_FDS_RAW = FourCC<0x01,0x2A,0x4E,0x49>::V
|
|
};
|
|
|
|
Type type;
|
|
Path name;
|
|
Data data;
|
|
};
|
|
|
|
enum Method
|
|
{
|
|
DONT_SUGGEST,
|
|
SUGGEST
|
|
};
|
|
|
|
enum Checking
|
|
{
|
|
CHECK_FILE,
|
|
DONT_CHECK_FILE
|
|
};
|
|
|
|
enum Alert
|
|
{
|
|
QUIETLY,
|
|
NOISY,
|
|
STICKY
|
|
};
|
|
|
|
void Save(Configuration&) const;
|
|
|
|
void FixFile(File::Type,Path&) const;
|
|
bool FindFile(Path&) const;
|
|
bool LocateFile(Path&,File::Types) const;
|
|
|
|
Path GetCheatPath() const;
|
|
Path GetCheatPath(const Path&) const;
|
|
Path GetPatchPath(const Path&,File::Type) const;
|
|
Path GetSavePath(const Path&,File::Type) const;
|
|
Path GetScreenShotPath() const;
|
|
Path GetSamplesPath() const;
|
|
|
|
bool SaveSlotExportingEnabled() const;
|
|
bool SaveSlotImportingEnabled() const;
|
|
bool AutoLoadCheatsEnabled() const;
|
|
bool AutoSaveCheatsEnabled() const;
|
|
bool UseStateCompression() const;
|
|
bool BypassPatchValidation() const;
|
|
|
|
bool CheckFile
|
|
(
|
|
Path&,
|
|
File::Types,
|
|
Alert=QUIETLY,
|
|
uint=IDS_TITLE_ERROR
|
|
) const;
|
|
|
|
Path BrowseLoad
|
|
(
|
|
File::Types,
|
|
GenericString = GenericString(),
|
|
Checking=CHECK_FILE
|
|
) const;
|
|
|
|
Path BrowseSave
|
|
(
|
|
File::Types,
|
|
Method=DONT_SUGGEST,
|
|
GenericString = GenericString()
|
|
) const;
|
|
|
|
File::Type Load
|
|
(
|
|
File&,
|
|
File::Types,
|
|
GenericString = GenericString(),
|
|
Alert=NOISY
|
|
) const;
|
|
|
|
bool Save
|
|
(
|
|
const void*,
|
|
uint,
|
|
File::Type,
|
|
Path,
|
|
Alert=NOISY
|
|
) const;
|
|
|
|
const Path GetDefaultDirectory(File::Types) const;
|
|
|
|
private:
|
|
|
|
class Filter;
|
|
|
|
void OnMenu(uint);
|
|
void OnEmuEvent(Emulator::Event,Emulator::Data);
|
|
|
|
static wcstring GetDefaultExtension(File::Types);
|
|
|
|
void UpdateSettings();
|
|
void UpdateRecentImageDirectory(const Path&,File::Types) const;
|
|
|
|
static File::Type CheckFile
|
|
(
|
|
File::Types,
|
|
uint,
|
|
uint
|
|
);
|
|
|
|
static File::Type LoadFromFile
|
|
(
|
|
Path&,
|
|
File::Data*,
|
|
File::Types
|
|
);
|
|
|
|
static File::Type LoadFromArchive
|
|
(
|
|
const Io::Archive&,
|
|
Path&,
|
|
File::Data*,
|
|
const GenericString&,
|
|
File::Types
|
|
);
|
|
|
|
mutable Path recentImageDir;
|
|
Object::Heap<Window::Paths> dialog;
|
|
};
|
|
}
|
|
}
|
|
|
|
#endif
|