Files
easy7zip/CPP/7zip/UI/FileManager/FoldersPage.cpp
Igor Pavlov a36c48cece 23.01
2023-12-22 17:17:05 +00:00

173 lines
3.6 KiB
C++
Executable File

// FoldersPage.cpp
#include "StdAfx.h"
#include "FoldersPageRes.h"
#include "FoldersPage.h"
#include "../FileManager/BrowseDialog.h"
#include "../FileManager/HelpUtils.h"
#include "../FileManager/LangUtils.h"
using namespace NWindows;
#ifdef Z7_LANG
static const UInt32 kLangIDs[] =
{
IDT_FOLDERS_WORKING_FOLDER,
IDR_FOLDERS_WORK_SYSTEM,
IDR_FOLDERS_WORK_CURRENT,
IDR_FOLDERS_WORK_SPECIFIED,
IDX_FOLDERS_WORK_FOR_REMOVABLE
};
#endif
static const unsigned kWorkModeButtons[] =
{
IDR_FOLDERS_WORK_SYSTEM,
IDR_FOLDERS_WORK_CURRENT,
IDR_FOLDERS_WORK_SPECIFIED
};
#define kFoldersTopic "fm/options.htm#folders"
static const unsigned kNumWorkModeButtons = Z7_ARRAY_SIZE(kWorkModeButtons);
bool CFoldersPage::OnInit()
{
_initMode = true;
_needSave = false;
#ifdef Z7_LANG
LangSetDlgItems(*this, kLangIDs, Z7_ARRAY_SIZE(kLangIDs));
#endif
m_WorkDirInfo.Load();
CheckButton(IDX_FOLDERS_WORK_FOR_REMOVABLE, m_WorkDirInfo.ForRemovableOnly);
CheckRadioButton(
kWorkModeButtons[0],
kWorkModeButtons[kNumWorkModeButtons - 1],
kWorkModeButtons[m_WorkDirInfo.Mode]);
m_WorkPath.Init(*this, IDE_FOLDERS_WORK_PATH);
m_WorkPath.SetText(fs2us(m_WorkDirInfo.Path));
MyEnableControls();
_initMode = false;
return CPropertyPage::OnInit();
}
int CFoldersPage::GetWorkMode() const
{
for (unsigned i = 0; i < kNumWorkModeButtons; i++)
if (IsButtonCheckedBool(kWorkModeButtons[i]))
return (int)i;
throw 0;
}
void CFoldersPage::MyEnableControls()
{
bool enablePath = (GetWorkMode() == NWorkDir::NMode::kSpecified);
m_WorkPath.Enable(enablePath);
EnableItem(IDB_FOLDERS_WORK_PATH, enablePath);
}
void CFoldersPage::GetWorkDir(NWorkDir::CInfo &workDirInfo)
{
UString s;
m_WorkPath.GetText(s);
workDirInfo.Path = us2fs(s);
workDirInfo.ForRemovableOnly = IsButtonCheckedBool(IDX_FOLDERS_WORK_FOR_REMOVABLE);
workDirInfo.Mode = NWorkDir::NMode::EEnum(GetWorkMode());
}
/*
bool CFoldersPage::WasChanged()
{
NWorkDir::CInfo workDirInfo;
GetWorkDir(workDirInfo);
return (workDirInfo.Mode != m_WorkDirInfo.Mode ||
workDirInfo.ForRemovableOnly != m_WorkDirInfo.ForRemovableOnly ||
workDirInfo.Path.Compare(m_WorkDirInfo.Path) != 0);
}
*/
void CFoldersPage::ModifiedEvent()
{
if (!_initMode)
{
_needSave = true;
Changed();
}
/*
if (WasChanged())
Changed();
else
UnChanged();
*/
}
bool CFoldersPage::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
{
for (unsigned i = 0; i < kNumWorkModeButtons; i++)
if (buttonID == kWorkModeButtons[i])
{
MyEnableControls();
ModifiedEvent();
return true;
}
switch (buttonID)
{
case IDB_FOLDERS_WORK_PATH:
OnFoldersWorkButtonPath();
return true;
case IDX_FOLDERS_WORK_FOR_REMOVABLE:
break;
default:
return CPropertyPage::OnButtonClicked(buttonID, buttonHWND);
}
ModifiedEvent();
return true;
}
bool CFoldersPage::OnCommand(unsigned code, unsigned itemID, LPARAM lParam)
{
if (code == EN_CHANGE && itemID == IDE_FOLDERS_WORK_PATH)
{
ModifiedEvent();
return true;
}
return CPropertyPage::OnCommand(code, itemID, lParam);
}
void CFoldersPage::OnFoldersWorkButtonPath()
{
UString currentPath;
m_WorkPath.GetText(currentPath);
UString title = LangString(IDS_FOLDERS_SET_WORK_PATH_TITLE);
UString resultPath;
if (MyBrowseForFolder(*this, title, currentPath, resultPath))
m_WorkPath.SetText(resultPath);
}
LONG CFoldersPage::OnApply()
{
if (_needSave)
{
GetWorkDir(m_WorkDirInfo);
m_WorkDirInfo.Save();
_needSave = false;
}
return PSNRET_NOERROR;
}
void CFoldersPage::OnNotifyHelp()
{
ShowHelpWindow(kFoldersTopic);
}