mirror of
https://github.com/simtactics/niotso.git
synced 2025-03-15 08:11:22 +00:00
Added BMP (24-bit uncompressed, 8-bit uncompressed, and RLE8) and PNG support to File::ReadImageFile(). So far everything in FileHandler is presumed to be safe with any input file except UTK decompression. Also started making use of the static keyword in various places to aid the compiler in optimization.
174 lines
No EOL
5 KiB
C++
174 lines
No EOL
5 KiB
C++
#include "Windows.hpp"
|
|
#include <uxtheme.h>
|
|
#include "GUI.hpp"
|
|
|
|
namespace Archive {
|
|
|
|
wchar_t Path[1024], Filename[1024];
|
|
|
|
bool IsOpen = false;
|
|
bool IsModified;
|
|
|
|
bool Add(const wchar_t * Path){
|
|
return true;
|
|
}
|
|
|
|
bool Close(){
|
|
if(!Archive::IsOpen) return true;
|
|
|
|
if(Archive::IsModified){
|
|
//Ask for consent
|
|
int result = MessageBox(hWnd, L"Save changes?", L"Save changes?", MB_YESNOCANCEL);
|
|
if(result == IDYES){
|
|
if(!Archive::Save())
|
|
return false;
|
|
}else if(result != IDNO)
|
|
return false;
|
|
}
|
|
|
|
//Close the workspace
|
|
|
|
Archive::IsOpen = false;
|
|
|
|
SetWindowText(hWnd, L"FARDive");
|
|
SendMessage(statusbar, SB_SETTEXT, 0, (LPARAM) L"");
|
|
|
|
MENUITEMINFO mii;
|
|
mii.cbSize = sizeof(MENUITEMINFO);
|
|
mii.fMask = MIIM_STATE;
|
|
mii.fState = MFS_DISABLED;
|
|
|
|
int DisableItems[] = {
|
|
ID_FILE_SAVE,
|
|
ID_FILE_SAVEAS,
|
|
ID_FILE_ADD,
|
|
ID_FILE_EXPORTALL,
|
|
ID_FILE_EXPORTSELECTED,
|
|
ID_FILE_CHANGETYPE,
|
|
ID_FILE_CLOSE,
|
|
ID_EDIT_DUPLICATE,
|
|
ID_EDIT_REMOVE,
|
|
ID_EDIT_RENAME,
|
|
ID_EDIT_PROPERTIES,
|
|
ID_EDIT_CONTENTS,
|
|
ID_EDIT_FIND,
|
|
ID_EDIT_FINDNEXT,
|
|
ID_EDIT_FINDPREVIOUS,
|
|
ID_EDIT_MATCHES,
|
|
ID_EDIT_GOTO,
|
|
ID_TOOLS_RECOMPRESS,
|
|
ID_TOOLS_RESORT,
|
|
ID_TOOLS_REMOVETRASH,
|
|
0};
|
|
for(int i=0; DisableItems[i]; i++)
|
|
SetMenuItemInfo(hMenu, DisableItems[i], FALSE, &mii);
|
|
|
|
DestroyWindow(hList);
|
|
|
|
return true;
|
|
}
|
|
|
|
bool Open(){
|
|
if(!Archive::Close()) return false;
|
|
|
|
GetFileTitle(Archive::Path, Archive::Filename, 1024);
|
|
|
|
Archive::IsOpen = true;
|
|
Archive::IsModified = false;
|
|
|
|
SetWorkspace();
|
|
}
|
|
|
|
bool PopulateEntries(){
|
|
unsigned EntryCount = 1;
|
|
LVITEM item;
|
|
memset(&item, 0x00, sizeof(LVITEM));
|
|
item.mask = LVIF_TEXT;
|
|
item.iItem = 0;
|
|
item.pszText = (LPTSTR) L"Test";
|
|
SendMessage(hList, LVM_SETITEMCOUNT, EntryCount, LVSICF_NOSCROLL);
|
|
SendMessage(hList, LVM_INSERTITEM, 0, (LPARAM) &item);
|
|
|
|
wchar_t buffer[17];
|
|
wsprintf(buffer, L"%u file%s", EntryCount, (EntryCount == 1) ? L"" : L"s");
|
|
SendMessage(statusbar, SB_SETTEXT, 0, (LPARAM) buffer);
|
|
|
|
MENUITEMINFO mii;
|
|
mii.cbSize = sizeof(MENUITEMINFO);
|
|
mii.fMask = MIIM_STATE;
|
|
mii.fState = (EntryCount > 0) ? MFS_ENABLED : MFS_DISABLED;
|
|
SetMenuItemInfo(hMenu, ID_FILE_EXPORTALL, FALSE, &mii);
|
|
SetMenuItemInfo(hMenu, ID_EDIT_FIND, FALSE, &mii);
|
|
SetMenuItemInfo(hMenu, ID_EDIT_FINDNEXT, FALSE, &mii);
|
|
SetMenuItemInfo(hMenu, ID_EDIT_FINDPREVIOUS, FALSE, &mii);
|
|
SetMenuItemInfo(hMenu, ID_EDIT_MATCHES, FALSE, &mii);
|
|
SetMenuItemInfo(hMenu, ID_EDIT_GOTO, FALSE, &mii);
|
|
SetMenuItemInfo(hMenu, ID_TOOLS_RECOMPRESS, FALSE, &mii);
|
|
SetMenuItemInfo(hMenu, ID_TOOLS_RESORT, FALSE, &mii);
|
|
SetMenuItemInfo(hMenu, ID_TOOLS_REMOVETRASH, FALSE, &mii);
|
|
|
|
return true;
|
|
}
|
|
|
|
bool Save(){
|
|
if(!Archive::IsModified) return true;
|
|
if(Path[0] == '\0'){ //No path because we're dealing with a newly created archive
|
|
return SaveAs();
|
|
}
|
|
|
|
Archive::IsModified = false;
|
|
wchar_t WindowTitle[1024+10];
|
|
wsprintf(WindowTitle, L"%s%s - FARDive", Archive::Filename, L"");
|
|
SetWindowText(hWnd, WindowTitle);
|
|
return true;
|
|
}
|
|
|
|
bool SaveAs(){
|
|
wchar_t OldPath[1024], OldFilename[1024];
|
|
//Backup old settings
|
|
wcscpy(OldPath, Archive::Path);
|
|
wcscpy(OldFilename, Archive::Filename);
|
|
|
|
ofn.hwndOwner = hWnd;
|
|
ofn.lpstrFilter = FILTER_ARCHIVES_ONLY;
|
|
ofn.lpstrCustomFilter = ArchiveSaveFilter;
|
|
ofn.lpstrFile = Path;
|
|
ofn.lpstrFileTitle = Filename;
|
|
ofn.Flags = OFN_DONTADDTORECENT | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
|
|
if(GetSaveFileName(&ofn) && Save())
|
|
return true;
|
|
|
|
//Restore old settings
|
|
wcscpy(Archive::Path, OldPath);
|
|
wcscpy(Archive::Filename, OldFilename);
|
|
return false;
|
|
}
|
|
|
|
bool SetWorkspace(){
|
|
wchar_t WindowTitle[1024+11];
|
|
wsprintf(WindowTitle, L"%s%s - FARDive", Archive::Filename, Archive::IsModified ? L"*" : L"");
|
|
SetWindowText(hWnd, WindowTitle);
|
|
|
|
MENUITEMINFO mii;
|
|
mii.cbSize = sizeof(MENUITEMINFO);
|
|
mii.fMask = MIIM_STATE;
|
|
mii.fState = MFS_ENABLED;
|
|
|
|
SetMenuItemInfo(hMenu, ID_FILE_SAVE, FALSE, &mii);
|
|
SetMenuItemInfo(hMenu, ID_FILE_SAVEAS, FALSE, &mii);
|
|
SetMenuItemInfo(hMenu, ID_FILE_ADD, FALSE, &mii);
|
|
SetMenuItemInfo(hMenu, ID_FILE_CHANGETYPE, FALSE, &mii);
|
|
SetMenuItemInfo(hMenu, ID_FILE_CLOSE, FALSE, &mii);
|
|
|
|
RECT ClientRect;
|
|
GetClientRect(hWnd, &ClientRect);
|
|
hList = CreateWindowEx(WS_EX_CLIENTEDGE | LVS_EX_DOUBLEBUFFER | WS_EX_COMPOSITED, WC_LISTVIEW, NULL, LVS_LIST | LVS_SHOWSELALWAYS | WS_CHILD | WS_VISIBLE,
|
|
5, 5, 192, ClientRect.bottom-statusbarheight-10, hWnd, NULL, NULL, NULL);
|
|
SetWindowTheme(hList, L"Explorer", NULL);
|
|
|
|
PopulateEntries();
|
|
|
|
return true;
|
|
}
|
|
|
|
} |