mirror of
https://github.com/simtactics/mysimulation.git
synced 2025-07-07 07:00:33 -04:00
Somewhat of a start
This commit is contained in:
commit
8a16e52bf6
66 changed files with 1872 additions and 0 deletions
174
Tools/FARDive/windows/Interaction.cpp
Normal file
174
Tools/FARDive/windows/Interaction.cpp
Normal file
|
@ -0,0 +1,174 @@
|
|||
#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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue