2011-11-24 00:53:35 -06:00
|
|
|
#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;
|
|
|
|
|
2012-04-06 13:27:40 -05:00
|
|
|
SetWindowText(hWnd, L"FARDive");
|
|
|
|
SendMessage(statusbar, SB_SETTEXT, 0, (LPARAM) L"");
|
2011-11-24 00:53:35 -06:00
|
|
|
|
|
|
|
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";
|
2012-04-06 13:27:40 -05:00
|
|
|
SendMessage(hList, LVM_SETITEMCOUNT, EntryCount, LVSICF_NOSCROLL);
|
2011-11-24 00:53:35 -06:00
|
|
|
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);
|
2012-04-06 13:27:40 -05:00
|
|
|
hList = CreateWindowEx(WS_EX_CLIENTEDGE | LVS_EX_DOUBLEBUFFER | WS_EX_COMPOSITED, WC_LISTVIEW, NULL, LVS_LIST | LVS_SHOWSELALWAYS | WS_CHILD | WS_VISIBLE,
|
2011-11-24 00:53:35 -06:00
|
|
|
5, 5, 192, ClientRect.bottom-statusbarheight-10, hWnd, NULL, NULL, NULL);
|
|
|
|
SetWindowTheme(hList, L"Explorer", NULL);
|
|
|
|
|
|
|
|
PopulateEntries();
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|