
--------------------------- SLADE - stuff.txt ---------------------------
              Big list of unimplemented features, requests,
            TODOs, ideas, and other general development notes
-------------------------------------------------------------------------


TODO List ---------------------------------------------------------------

--- Before 3.0.2 ---
- Fix bugs

--- Bugs ---

--- Minor Problems/Annoyances ---
- Long calltips can extend off the edge of the screen
- Incorrect ctrl+tab behaviour with tabs

--- Editor Features ---
- Map editor (!)
- Generic entry data view (for VERTEXES, LINEDEFS, SIDEDEFS, SECTORS, THINGS, DEMO*, TEXTUREX/PNAMES, ...)
- ANSI screen editor
- Proper font viewer
- 'Cleanup' stuff (unused patches, textures, flats, unneeded entries...)
- Compilation of other language scripts
- Archive merging
- Archive conversion
- 'Export As' for archives (or just ability to select a different type/extension on save as)
- 'Export As' for entries - does conversion+export

--- Formats ---
- 7z
- Lzma/bz2 for zip

--- Text Editor ---
- 'Tabs as Spaces' option

--- Gfx Editor ---
- Basic pixel-drawing tools

--- Audio ---
- Mp3
- Module formats (DUMB, maybe?)

--- General ---
- Preferences Dialog:
	- List of entry types, ability to enable/disable detection of certain types
	- Program-wide colour configuration (including general modified/new/error/locked colours)
- Finish entry data format (EDF_*) system:
	- Simple user-definable data formats:
		- Minimum/maximum size
		- Byte pattern to look for at a certain offset in the file (ideally allow multiple of these), something like:
		  pattern = 10, 255, 255, 255, 0; = look for 255,255,255,0 at offset 10 in file
		- Call inbuilt tests for more complex detection algorithms (wad files, doom gfx, etc)
- General optimisation:
	- Entry type detection (maybe move the initial detection to a background thread)
	- Gfx conversion
- *Resources system:
	- opened archives are either used as resources or not
	- when searching for patches etc, resource archives are searched, then base resource archive
	- archive list on archive manager panel could have 'resource' checkboxes for each list item
- Undo/Redo system
	- Should be general enough to be used by the map editor also
- Dynamic toolbars
- Different icon sets
- Better backup system
- More drag-and-drop support
- Rewrite VirtualListView with item filtering/sorting in mind


--- Internal / Dev ---
- SFont class
- Ability to set an archive never to read entry data into memory (read data from the file every time)
- MemChunk subclass that deals with a file rather than a memory block
- Some lump (sub)formats can only be identified properly from the presence of other lumps; e.g. GL nodes and THINGS/LINEDEFS
- Needs some kind of proper archive type system, handled by ArchiveManager (similar to SIFormat)
- Need to do something about keeping ArchiveEntry.data.size and ArchiveEntry.size in sync
  (Still need the size member for entries that don't have their data loaded into memory yet)
  (could make ArchiveEntry a subclass of MemChunk?)
- Better way to get the currently selected entries would be nice
- Should probably write my own lexer for TextEditor since the default cpp/cppnocase ones are somewhat limited
- Implement custom replacement for wxFileName that allows fast matching against name/extension etc
- Multithreaded entry type detection?



Unimplemented Feature Requests ------------------------------------------

--- General / User Interface ---
- Ability to toggle toolbars, access all toolbar functions from menus
- Fully customisable toolbars
- Sorting by column (I.E. Name or Type)
- Map browser

--- Archive / Entry Management ---
- mass export to format (XWE)

--- Entry Editing ---
- SBARINFO viewer/editor

--- Gfx ---
- Keep existing gfx offsets on import

--- Text Editor ---

--- TEXTUREx Editor ---
- list textures and patches in alphabetical order (with non-iwad ones at the bottom of the list)
- find/replace for patches
- Ability to convert composite texture to single image
- Ability to search for a texture containing a specific patch

--- General ---
- in-editor generation and editing of boom's binary animated/switches lumps. ("generation" in this case just meaning "stick the default one in there as a new lump", with the standard switches and animations from boom's default one, sort of like how a new texture1 lump gets the iwad stuff as a base)
- Support for LZMA, Bzip2 and zip formats other than store and deflate
- Mass research & replace of map elements (thing numbers, texture or flat names) across a map or all the maps of an archive
- option to preserve sprite offsets when replacing a sprite from a file



Ideas / Possible Features -----------------------------------------------

- Tree view for entry list (optional)
- Ability to perform all archive/entry management functions via the console (possibly allow scripts too?)
- 'Animation viewer' (select a bunch of sprites to test an animation or whatever)
- Hex editor
- Font editor
- *Project system:
	- Hide/abstract underlying archive/entry stuff
	- Will need to specify a 'game' for the project to enable/disable certain features:
		- Changes the way certain things are handled (ie vanilla will have separate textures/flats where zdoom will have just textures)
		- Limits resource formats to what is supported (PNG in zdoom but not vanilla)
	- Work with 'resources' rather than entries
	- Resources imported from archives
	- Resource types:
		- Graphics:
			- Textures
			- Flats (for games that don't support mixing of flats/textures only)
			- Sprites
		- Maps
		- Audio:
			- Sounds
			- Music
		- etc...
		- Data (anything that doesn't fit into the above categories)
	- Resources can either be internal or external:
		- Internal means the resource is imported into the project and exported with it
		- External means the resource exists in an external archive and will not be exported with the project
		  (for resources in an IWAD, texture pack, etc)
	- Ability to export project to archive(s):
		- Can export all resources to a single archive
		- Can 'split' resources to separate archives (ie one for textures, another for maps, etc)
	- A system of cascading configurations will be needed to handle all the game/port/format combinations
- Archive/Entry information database:
	- Store within the archive or in a separate file (optional)
	- Menu item 'Archive->Write Metadata'
	- Keeps information about archive entries:
		- CRC (will be used to determine if the info is up-to-date)
		- Extra properties
		- Entry type
- Model viewer


Other / Notes -----------------------------------------------------------
