mirror of
https://github.com/Open-Shell/Open-Shell-Menu.git
synced 2026-04-12 01:47:24 +10:00
Items can be pinned to directories that require administative privileges (such as Open-Shell's default installation directory), so long as users take ownership of the pinned folder. Also adds a command to Open-Shell's context menu that opens the current pinned folder. Adds general support for directory-based settings by creating a new setting type called TYPE_DIRECTORY which uses a new bool added to BrowseLinkHelper, called bFoldersOnly. START_MENU_PINNED_ROOT has been removed, and all instances of both it and BrowseLinkHelper have been adjusted accordingly. To create your own directory-based settings, use CSetting::TYPE_DIRECTORY. Empty directory paths are reset to their default value as they can cause unexpected behavior.
766 lines
35 KiB
C++
766 lines
35 KiB
C++
// Classic Shell (c) 2009-2017, Ivo Beltchev
|
|
// Open-Shell (c) 2017-2018, The Open-Shell Team
|
|
// Confidential information of Ivo Beltchev. Not for disclosure or distribution without prior written consent from the author
|
|
|
|
#include "stdafx.h"
|
|
#include "ExplorerBand.h"
|
|
#include "ExplorerBHO.h"
|
|
#include "SettingsUI.h"
|
|
#include "Settings.h"
|
|
#include "SettingsUIHelper.h"
|
|
#include "LanguageSettingsHelper.h"
|
|
#include "ResourceHelper.h"
|
|
#include "Translations.h"
|
|
#include "resource.h"
|
|
#include "dllmain.h"
|
|
#include <dwmapi.h>
|
|
|
|
enum
|
|
{
|
|
SETTINGS_STYLE_WIN7=1,
|
|
SETTINGS_STYLE_WIN8=2,
|
|
SETTINGS_STYLE_MASK=SETTINGS_STYLE_WIN7|SETTINGS_STYLE_WIN8,
|
|
};
|
|
|
|
static const CStdCommand g_StdCommands[]={
|
|
{L"SEPARATOR",IDS_SEPARATOR_ITEM,IDS_SEPARATOR_TIP},
|
|
{L"up",IDS_UP_ITEM,IDS_UP_TIP,L"UpItem",NULL,L"$Toolbar.GoUp",L",2",NULL,0,L",3"},
|
|
{L"cut",IDS_CUT_ITEM,IDS_CUT_TIP,L"CutItem",NULL,L"$Toolbar.Cut",L"shell32.dll,16762"},
|
|
{L"copy",IDS_COPY_ITEM,IDS_COPY_TIP,L"CopyItem",NULL,L"$Toolbar.Copy",L"shell32.dll,243"},
|
|
{L"paste",IDS_PASTE_ITEM,IDS_PASTE_TIP,L"PasteItem",NULL,L"$Toolbar.Paste",L"shell32.dll,16763"},
|
|
{L"paste_shortcut",IDS_PASTE_LNK_ITEM,IDS_PASTE_SHORTCUT_TIP,L"PasteShortcutItem",NULL,L"$Toolbar.PasteShortcut",L"shell32.dll,16763",NULL,SETTINGS_STYLE_WIN7},
|
|
{L"paste_shortcut",IDS_PASTE_LNK_ITEM,IDS_PASTE_SHORTCUT_TIP,L"PasteShortcutItem",NULL,L"$Toolbar.PasteShortcut",L"imageres.dll,5301",NULL,SETTINGS_STYLE_WIN8},
|
|
{L"delete",IDS_DELETE_ITEM,IDS_DELETE_TIP,L"DeleteItem",NULL,L"$Toolbar.Delete",L"shell32.dll,240"},
|
|
{L"properties",IDS_PROPERTIES_ITEM,IDS_PROPERTIES_TIP,L"PropertiesItem",NULL,L"$Toolbar.Properties",L"shell32.dll,253"},
|
|
{L"email",IDS_EMAIL_ITEM,IDS_EMAIL_TIP,L"EmailItem",NULL,L"$Toolbar.Email",L"shell32.dll,265"},
|
|
{L"settings",IDS_SETTINGS_ITEM,IDS_SETTINGS_TIP,L"SettingsItem",NULL,L"$Toolbar.Settings",L",1"},
|
|
{L"refresh",IDS_REFRESH_ITEM,IDS_REFRESH_TIP,L"RefreshItem",NULL,L"$Toolbar.Refresh",L"shell32.dll,16739"},
|
|
{L"stop",IDS_STOP_ITEM,IDS_STOP_TIP,L"StopItem",NULL,L"$Toolbar.Stop",L"imageres.dll,98"},
|
|
{L"rename",IDS_RENAME_ITEM,IDS_RENAME_TIP,L"RenameItem",NULL,L"$Toolbar.Rename",L"shell32.dll,242"},
|
|
{L"customizefolder",IDS_CUSTOMIZE_ITEM,IDS_CUSTOMIZEFOLDER_TIP,L"CustomizeFolderItem",NULL,L"$Toolbar.CustomizeFolder",L"shell32.dll,274"},
|
|
{L"folderoptions",IDS_FOLDEROPTIONS,IDS_FOLDEROPTIONS_TIP,L"FolderOptionsItem",NULL,L"$Toolbar.FolderOptions",L"imageres.dll,166"},
|
|
{L"newfolder",IDS_NEWFOLDER_ITEM,IDS_NEWFOLDER_TIP,L"NewFolderItem",NULL,L"$Toolbar.NewFolder",L"shell32.dll,319"},
|
|
{L"zipfolder",IDS_ZIP_ITEM,IDS_ZIP_TIP,L"ZipItem",NULL,L"$Toolbar.ZipFolder",L"imageres.dll,174"},
|
|
{L"nav_pane",IDS_NAVPANE_ITEM,IDS_NAVPANE_TIP,L"NavPaneItem",NULL,L"$Toolbar.NavigationPane",L"shell32.dll,16755"},
|
|
{L"details_pane",IDS_DETAILSPANE_ITEM,IDS_DETAILSPANE_TIP,L"DetailsPaneItem",NULL,L"$Toolbar.DetailsPane",L"shell32.dll,16759",NULL,SETTINGS_STYLE_WIN7},
|
|
{L"details_pane",IDS_DETAILSPANE_ITEM,IDS_DETAILSPANE_TIP,L"DetailsPaneItem",NULL,L"$Toolbar.DetailsPane",L"shell32.dll,16814",NULL,SETTINGS_STYLE_WIN8},
|
|
{L"preview_pane",IDS_PREVIEWPANE_ITEM,IDS_PREVIEWPANE_TIP,L"PreviewPaneItem",NULL,L"$Toolbar.PreviewPane",L"shell32.dll,16757"},
|
|
{L"mapdrive",IDS_MAP_DRIVE_ITEM,IDS_MAP_DRIVE_TIP,L"MapDriveItem",NULL,L"$Toolbar.MapDrive",L"shell32.dll,16779"},
|
|
{L"disconnect",IDS_DISCONNECT_ITEM,IDS_DISCONNECT_DRIVE_TIP,L"DisconnectItem",NULL,L"$Toolbar.DisconnectDrive",L"shell32.dll,11"},
|
|
{L"viewtiles",IDS_VIEWTILES_ITEM,IDS_VIEWTILES_TIP,L"TilesItem",NULL,L"$Toolbar.Tiles",L"shell32.dll,62999"},
|
|
{L"viewdetails",IDS_VIEWDETAILS_ITEM,IDS_VIEWDEATAILS_TIP,L"DetailsItem",NULL,L"$Toolbar.Details",L"shell32.dll,62998"},
|
|
{L"viewlist",IDS_VIEWLIST_ITEM,IDS_VIEWLIST_TIP,L"ListItem",NULL,L"$Toolbar.List",L"shell32.dll,63000"},
|
|
{L"viewcontent",IDS_VIEWCONTENT_ITEM,IDS_VIEWCONTENT_TIP,L"ContentItem",NULL,L"$Toolbar.Content",L"shell32.dll,63011"},
|
|
{L"viewicons_small",IDS_VIEWICONS1_ITEM,IDS_VIEWICONS1_TIP,L"Icons1Item",NULL,L"$Toolbar.Small",L"shell32.dll,63010"},
|
|
{L"viewicons_medium",IDS_VIEWICONS2_ITEM,IDS_VIEWICONS2_TIP,L"Icons2Item",NULL,L"$Toolbar.Medium",L"shell32.dll,63009"},
|
|
{L"viewicons_large",IDS_VIEWICONS3_ITEM,IDS_VIEWICONS3_TIP,L"Icons3Item",NULL,L"$Toolbar.Large",L"shell32.dll,63008"},
|
|
{L"viewicons_extralarge",IDS_VIEWICONS4_ITEM,IDS_VIEWICONS4_TIP,L"Icons4Item",NULL,L"$Toolbar.ExtraLarge",L"shell32.dll,63001"},
|
|
{L"moveto",IDS_MOVETO_ITEM,IDS_MOVETO_TIP,L"MoveToItem",NULL,L"$Toolbar.MoveTo",L"",NULL,SETTINGS_STYLE_WIN7},
|
|
{L"moveto",IDS_MOVETO_ITEM,IDS_MOVETO_TIP,L"MoveToItem",NULL,L"$Toolbar.MoveTo",L"imageres.dll,5303",NULL,SETTINGS_STYLE_WIN8},
|
|
{L"copyto",IDS_COPYTO_ITEM,IDS_COPYTO_TIP,L"CopyToItem",NULL,L"$Toolbar.CopyTo",L"",NULL,SETTINGS_STYLE_WIN7},
|
|
{L"copyto",IDS_COPYTO_ITEM,IDS_COPYTO_TIP,L"CopyToItem",NULL,L"$Toolbar.CopyTo",L"imageres.dll,5304",NULL,SETTINGS_STYLE_WIN8},
|
|
{L"undo",IDS_UNDO_ITEM,IDS_UNDO_TIP,L"UndoItem",NULL,L"$Toolbar.Undo",L"",NULL,SETTINGS_STYLE_WIN7},
|
|
{L"undo",IDS_UNDO_ITEM,IDS_UNDO_TIP,L"UndoItem",NULL,L"$Toolbar.Undo",L"imageres.dll,5315",NULL,SETTINGS_STYLE_WIN8},
|
|
{L"redo",IDS_REDO_ITEM,IDS_REDO_TIP,L"RedoItem",NULL,L"$Toolbar.Redo",L"",NULL,SETTINGS_STYLE_WIN7},
|
|
{L"redo",IDS_REDO_ITEM,IDS_REDO_TIP,L"RedoItem",NULL,L"$Toolbar.Redo",L"imageres.dll,5311",NULL,SETTINGS_STYLE_WIN8},
|
|
{L"selectall",IDS_SELECTALL_ITEM,IDS_SELECTALL_TIP,L"SelectAllItem",NULL,L"$Toolbar.SelectAll",L"",NULL,SETTINGS_STYLE_WIN7},
|
|
{L"selectall",IDS_SELECTALL_ITEM,IDS_SELECTALL_TIP,L"SelectAllItem",NULL,L"$Toolbar.SelectAll",L"imageres.dll,5308",NULL,SETTINGS_STYLE_WIN8},
|
|
{L"deselect",IDS_DESELECT_ITEM,IDS_DESELECT_TIP,L"DeselectItem",NULL,L"$Toolbar.Deselect",L"",NULL,SETTINGS_STYLE_WIN7},
|
|
{L"deselect",IDS_DESELECT_ITEM,IDS_DESELECT_TIP,L"DeselectItem",NULL,L"$Toolbar.Deselect",L"imageres.dll,5309",NULL,SETTINGS_STYLE_WIN8},
|
|
{L"invertselection",IDS_INVERT_ITEM,IDS_INVERT_TIP,L"InvertItem",NULL,L"$Toolbar.InvertSelection",L"",NULL,SETTINGS_STYLE_WIN7},
|
|
{L"invertselection",IDS_INVERT_ITEM,IDS_INVERT_TIP,L"InvertItem",NULL,L"$Toolbar.InvertSelection",L"imageres.dll,5310",NULL,SETTINGS_STYLE_WIN8},
|
|
{L"back",IDS_BACK_ITEM,IDS_BACK_TIP,L"BackItem",NULL,L"$Toolbar.Back",L""},
|
|
{L"forward",IDS_FORWARD_ITEM,IDS_FORWARD_TIP,L"ForwardItem",NULL,L"$Toolbar.Forward",L""},
|
|
{L"show_extensions",IDS_SHOW_EXTENSIONS,IDS_SHOW_EXTENSIONS_TIP,L"ShowExtensionsItem",NULL,L"$Toolbar.ShowExtensions"},
|
|
{L"hidden_files",IDS_HIDDEN_FILES,IDS_HIDDEN_FILES_TIP,L"HiddenFilesItem",NULL,L"$Toolbar.ShowHiddenFiles"},
|
|
{L"system_files",IDS_SYSTEM_FILES,IDS_SYSTEM_FILES_TIP,L"SystemFilesItem",NULL,L"$Toolbar.ShowSystemFiles"},
|
|
{L"open <folder name>",IDS_OPEN_ITEM,IDS_OPEN_TIP,L"OpenFolderItem",NULL,NULL,L""},
|
|
{L"sortby <property>",IDS_SORYBY_ITEM,IDS_SORT_TIP,L"SortFolderItem",NULL,NULL,L""},
|
|
{L"groupby <property>",IDS_GROUPBY_ITEM,IDS_GROUP_TIP,L"GroupFolderItem",NULL,NULL,L""},
|
|
{L"",IDS_CUSTOM_ITEM,IDS_CUSTOM_TIP,L"CustomItem",NULL,NULL,L""},
|
|
{NULL},
|
|
};
|
|
|
|
static const KNOWNFOLDERID *g_CommonLinks[]=
|
|
{
|
|
&FOLDERID_ComputerFolder,
|
|
&FOLDERID_DesktopRoot,
|
|
&FOLDERID_Desktop,
|
|
&FOLDERID_Documents,
|
|
&FOLDERID_Downloads,
|
|
&FOLDERID_Favorites,
|
|
&FOLDERID_Games,
|
|
&FOLDERID_Links,
|
|
&FOLDERID_Music,
|
|
&FOLDERID_Pictures,
|
|
&FOLDERID_Videos,
|
|
&FOLDERID_Profile,
|
|
&FOLDERID_HomeGroup,
|
|
&FOLDERID_Libraries,
|
|
&FOLDERID_DocumentsLibrary,
|
|
&FOLDERID_MusicLibrary,
|
|
&FOLDERID_PicturesLibrary,
|
|
&FOLDERID_VideosLibrary,
|
|
&FOLDERID_NetworkFolder,
|
|
NULL,
|
|
};
|
|
|
|
const wchar_t *g_DefaultToolbar=
|
|
L"Items=UpItem, NavPaneItem, FolderOptionsItem, CutItem, CopyItem, PasteItem, DeleteItem, PropertiesItem, EmailItem, SEPARATOR, SettingsItem\n"
|
|
L"UpItem.Command=up\n"
|
|
L"UpItem.Tip=$Toolbar.GoUp\n"
|
|
L"UpItem.Icon=,2\n"
|
|
L"UpItem.IconDisabled=,3\n"
|
|
L"NavPaneItem.Command=nav_pane\n"
|
|
L"NavPaneItem.Tip=$Toolbar.NavigationPane\n"
|
|
L"NavPaneItem.Icon=shell32.dll,16755\n"
|
|
L"FolderOptionsItem.Command=folderoptions\n"
|
|
L"FolderOptionsItem.Tip=$Toolbar.FolderOptions\n"
|
|
L"FolderOptionsItem.Icon=imageres.dll,166\n"
|
|
L"FolderOptionsItem.Items=ShowExtensionsItem, HiddenFilesItem, SystemFilesItem\n"
|
|
L"ShowExtensionsItem.Command=show_extensions\n"
|
|
L"ShowExtensionsItem.Label=$Toolbar.ShowExtensions\n"
|
|
L"ShowExtensionsItem.Icon=none\n"
|
|
L"HiddenFilesItem.Command=hidden_files\n"
|
|
L"HiddenFilesItem.Label=$Toolbar.ShowHiddenFiles\n"
|
|
L"HiddenFilesItem.Icon=none\n"
|
|
L"SystemFilesItem.Command=system_files\n"
|
|
L"SystemFilesItem.Label=$Toolbar.ShowSystemFiles\n"
|
|
L"SystemFilesItem.Icon=none\n"
|
|
L"CutItem.Command=cut\n"
|
|
L"CutItem.Tip=$Toolbar.Cut\n"
|
|
L"CutItem.Icon=shell32.dll,16762\n"
|
|
L"CopyItem.Command=copy\n"
|
|
L"CopyItem.Tip=$Toolbar.Copy\n"
|
|
L"CopyItem.Icon=shell32.dll,243\n"
|
|
L"PasteItem.Command=paste\n"
|
|
L"PasteItem.Tip=$Toolbar.Paste\n"
|
|
L"PasteItem.Icon=shell32.dll,16763\n"
|
|
L"DeleteItem.Command=delete\n"
|
|
L"DeleteItem.Tip=$Toolbar.Delete\n"
|
|
L"DeleteItem.Icon=shell32.dll,240\n"
|
|
L"PropertiesItem.Command=properties\n"
|
|
L"PropertiesItem.Tip=$Toolbar.Properties\n"
|
|
L"PropertiesItem.Icon=shell32.dll,253\n"
|
|
L"EmailItem.Command=email\n"
|
|
L"EmailItem.Tip=$Toolbar.Email\n"
|
|
L"EmailItem.Icon=shell32.dll,265\n"
|
|
L"SettingsItem.Command=settings\n"
|
|
L"SettingsItem.Tip=$Toolbar.Settings\n"
|
|
L"SettingsItem.Icon=,1\n";
|
|
|
|
const wchar_t *g_DefaultToolbar2=
|
|
L"Items=NavPaneItem, FolderOptionsItem, CutItem, CopyItem, PasteItem, DeleteItem, PropertiesItem, EmailItem, SEPARATOR, SettingsItem\n"
|
|
L"NavPaneItem.Command=nav_pane\n"
|
|
L"NavPaneItem.Tip=$Toolbar.NavigationPane\n"
|
|
L"NavPaneItem.Icon=shell32.dll,16755\n"
|
|
L"FolderOptionsItem.Command=folderoptions\n"
|
|
L"FolderOptionsItem.Tip=$Toolbar.FolderOptions\n"
|
|
L"FolderOptionsItem.Icon=imageres.dll,166\n"
|
|
L"FolderOptionsItem.Items=ShowExtensionsItem, HiddenFilesItem, SystemFilesItem\n"
|
|
L"ShowExtensionsItem.Command=show_extensions\n"
|
|
L"ShowExtensionsItem.Label=$Toolbar.ShowExtensions\n"
|
|
L"ShowExtensionsItem.Icon=none\n"
|
|
L"HiddenFilesItem.Command=hidden_files\n"
|
|
L"HiddenFilesItem.Label=$Toolbar.ShowHiddenFiles\n"
|
|
L"HiddenFilesItem.Icon=none\n"
|
|
L"SystemFilesItem.Command=system_files\n"
|
|
L"SystemFilesItem.Label=$Toolbar.ShowSystemFiles\n"
|
|
L"SystemFilesItem.Icon=none\n"
|
|
L"CutItem.Command=cut\n"
|
|
L"CutItem.Tip=$Toolbar.Cut\n"
|
|
L"CutItem.Icon=shell32.dll,16762\n"
|
|
L"CopyItem.Command=copy\n"
|
|
L"CopyItem.Tip=$Toolbar.Copy\n"
|
|
L"CopyItem.Icon=shell32.dll,243\n"
|
|
L"PasteItem.Command=paste\n"
|
|
L"PasteItem.Tip=$Toolbar.Paste\n"
|
|
L"PasteItem.Icon=shell32.dll,16763\n"
|
|
L"DeleteItem.Command=delete\n"
|
|
L"DeleteItem.Tip=$Toolbar.Delete\n"
|
|
L"DeleteItem.Icon=shell32.dll,240\n"
|
|
L"PropertiesItem.Command=properties\n"
|
|
L"PropertiesItem.Tip=$Toolbar.Properties\n"
|
|
L"PropertiesItem.Icon=shell32.dll,253\n"
|
|
L"EmailItem.Command=email\n"
|
|
L"EmailItem.Tip=$Toolbar.Email\n"
|
|
L"EmailItem.Icon=shell32.dll,265\n"
|
|
L"SettingsItem.Command=settings\n"
|
|
L"SettingsItem.Tip=$Toolbar.Settings\n"
|
|
L"SettingsItem.Icon=,1\n";
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CEditToolbarDlg: public CEditCustomItemDlg
|
|
{
|
|
public:
|
|
CEditToolbarDlg( CTreeItem *pItem, bool bNoLinks, std::vector<HMODULE> &modules ): CEditCustomItemDlg(pItem,modules) { m_bNoLinks=bNoLinks; }
|
|
|
|
BEGIN_MSG_MAP( CEditToolbarDlg )
|
|
MESSAGE_HANDLER( WM_INITDIALOG, OnInitDialog )
|
|
COMMAND_ID_HANDLER( IDOK, OnOK )
|
|
COMMAND_ID_HANDLER( IDCANCEL, OnCancel )
|
|
COMMAND_HANDLER( IDC_COMBOCOMMAND, CBN_KILLFOCUS, OnCommandChanged )
|
|
COMMAND_HANDLER( IDC_COMBOCOMMAND, CBN_SELENDOK, OnCommandChanged )
|
|
COMMAND_HANDLER( IDC_BUTTONCOMMAND, BN_CLICKED, OnBrowseCommand )
|
|
COMMAND_HANDLER( IDC_BUTTONLINK, BN_CLICKED, OnBrowseLink )
|
|
COMMAND_HANDLER( IDC_BUTTONICON, BN_CLICKED, OnBrowseIcon )
|
|
COMMAND_HANDLER( IDC_BUTTONICOND, BN_CLICKED, OnBrowseIcon )
|
|
COMMAND_HANDLER( IDC_COMBOLINK, CBN_KILLFOCUS, OnLinkChanged )
|
|
COMMAND_HANDLER( IDC_COMBOLINK, CBN_SELENDOK, OnLinkChanged )
|
|
COMMAND_HANDLER( IDC_EDITICON, EN_KILLFOCUS, OnIconChanged )
|
|
COMMAND_HANDLER( IDC_EDITICOND, EN_KILLFOCUS, OnIconDChanged )
|
|
COMMAND_HANDLER( IDC_BUTTONRESET, BN_CLICKED, OnReset )
|
|
CHAIN_MSG_MAP( CEditCustomItemDlg )
|
|
END_MSG_MAP()
|
|
|
|
virtual BEGIN_RESIZE_MAP
|
|
RESIZE_CONTROL(IDC_COMBOCOMMAND,MOVE_SIZE_X)
|
|
RESIZE_CONTROL(IDC_COMBOLINK,MOVE_SIZE_X)
|
|
RESIZE_CONTROL(IDC_BUTTONCOMMAND,MOVE_MOVE_X)
|
|
RESIZE_CONTROL(IDC_BUTTONLINK,MOVE_MOVE_X)
|
|
RESIZE_CONTROL(IDC_EDITLABEL,MOVE_SIZE_X)
|
|
RESIZE_CONTROL(IDC_EDITTIP,MOVE_SIZE_X)
|
|
RESIZE_CONTROL(IDC_EDITICON,MOVE_SIZE_X)
|
|
RESIZE_CONTROL(IDC_BUTTONICON,MOVE_MOVE_X)
|
|
RESIZE_CONTROL(IDC_EDITICOND,MOVE_SIZE_X)
|
|
RESIZE_CONTROL(IDC_BUTTONICOND,MOVE_MOVE_X)
|
|
RESIZE_CONTROL(IDOK,MOVE_MOVE_X)
|
|
RESIZE_CONTROL(IDCANCEL,MOVE_MOVE_X)
|
|
END_RESIZE_MAP
|
|
|
|
protected:
|
|
// Handler prototypes:
|
|
// LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
|
// LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
|
|
// LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
|
|
LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
|
|
LRESULT OnOK( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
|
|
LRESULT OnCommandChanged( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
|
|
LRESULT OnLinkChanged( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
|
|
LRESULT OnIconChanged( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
|
|
LRESULT OnIconDChanged( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
|
|
LRESULT OnBrowseCommand( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
|
|
LRESULT OnBrowseLink( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
|
|
LRESULT OnBrowseIcon( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
|
|
LRESULT OnReset( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
|
|
|
|
private:
|
|
bool m_bNoLinks;
|
|
int m_Style;
|
|
};
|
|
|
|
LRESULT CEditToolbarDlg::OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled )
|
|
{
|
|
m_Style=GetWinVersion()>=WIN_VER_WIN8?SETTINGS_STYLE_WIN8:SETTINGS_STYLE_WIN7;
|
|
CWindow commands=GetDlgItem(IDC_COMBOCOMMAND);
|
|
CWindow links=GetDlgItem(IDC_COMBOLINK);
|
|
InitDialog(commands,g_StdCommands,m_Style,SETTINGS_STYLE_MASK,links,g_CommonLinks);
|
|
SetDlgItemText(IDC_EDITLABEL,m_pItem->label);
|
|
SetDlgItemText(IDC_EDITTIP,m_pItem->tip);
|
|
SetDlgItemText(IDC_EDITICON,m_pItem->icon);
|
|
SetDlgItemText(IDC_EDITICOND,m_pItem->iconD);
|
|
|
|
GetDlgItem(IDC_BUTTONRESET).EnableWindow(m_pItem->pStdCommand && *m_pItem->pStdCommand->name);
|
|
|
|
UpdateIcons(IDC_ICONN,IDC_ICOND);
|
|
|
|
CWindow tooltip=CreateWindowEx(WS_EX_TOPMOST|WS_EX_TOOLWINDOW|WS_EX_TRANSPARENT,TOOLTIPS_CLASS,NULL,WS_POPUP|TTS_NOPREFIX|TTS_ALWAYSTIP,0,0,0,0,m_hWnd,NULL,g_Instance,NULL);
|
|
tooltip.SendMessage(TTM_SETMAXTIPWIDTH,0,GetSystemMetrics(SM_CXSCREEN)/2);
|
|
|
|
TOOLINFO tool={sizeof(tool),TTF_SUBCLASS|TTF_IDISHWND,m_hWnd,(UINT_PTR)(HWND)commands};
|
|
CString str=LoadStringEx(IDS_COMMAND_TIP);
|
|
tool.lpszText=(LPWSTR)(LPCWSTR)str;
|
|
tooltip.SendMessage(TTM_ADDTOOL,0,(LPARAM)&tool);
|
|
tool.uId=(UINT_PTR)(HWND)commands.GetWindow(GW_CHILD);
|
|
tooltip.SendMessage(TTM_ADDTOOL,0,(LPARAM)&tool);
|
|
|
|
str=LoadStringEx(IDS_LINK_TIP);
|
|
tool.lpszText=(LPWSTR)(LPCWSTR)str;
|
|
tool.uId=(UINT_PTR)(HWND)links;
|
|
tooltip.SendMessage(TTM_ADDTOOL,0,(LPARAM)&tool);
|
|
tool.uId=(UINT_PTR)(HWND)links.GetWindow(GW_CHILD);
|
|
tooltip.SendMessage(TTM_ADDTOOL,0,(LPARAM)&tool);
|
|
|
|
str=LoadStringEx(IDS_TEXT_TIP);
|
|
tool.lpszText=(LPWSTR)(LPCWSTR)str;
|
|
tool.uId=(UINT_PTR)(HWND)GetDlgItem(IDC_EDITLABEL);
|
|
tooltip.SendMessage(TTM_ADDTOOL,0,(LPARAM)&tool);
|
|
|
|
str=LoadStringEx(IDS_TIP_TIP);
|
|
tool.lpszText=(LPWSTR)(LPCWSTR)str;
|
|
tool.uId=(UINT_PTR)(HWND)GetDlgItem(IDC_EDITTIP);
|
|
tooltip.SendMessage(TTM_ADDTOOL,0,(LPARAM)&tool);
|
|
|
|
str=LoadStringEx(IDS_ICON_TIP);
|
|
tool.lpszText=(LPWSTR)(LPCWSTR)str;
|
|
tool.uId=(UINT_PTR)(HWND)GetDlgItem(IDC_EDITICON);
|
|
tooltip.SendMessage(TTM_ADDTOOL,0,(LPARAM)&tool);
|
|
|
|
str=LoadStringEx(IDS_ICOND_TIP);
|
|
tool.lpszText=(LPWSTR)(LPCWSTR)str;
|
|
tool.uId=(UINT_PTR)(HWND)GetDlgItem(IDC_EDITICOND);
|
|
tooltip.SendMessage(TTM_ADDTOOL,0,(LPARAM)&tool);
|
|
|
|
str=LoadStringEx(IDS_RESTORE_TIP);
|
|
tool.lpszText=(LPWSTR)(LPCWSTR)str;
|
|
tool.uId=(UINT_PTR)(HWND)GetDlgItem(IDC_BUTTONRESET);
|
|
tooltip.SendMessage(TTM_ADDTOOL,0,(LPARAM)&tool);
|
|
return TRUE;
|
|
}
|
|
|
|
LRESULT CEditToolbarDlg::OnOK( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled )
|
|
{
|
|
GetDlgItemText(IDC_EDITLABEL,m_pItem->label);
|
|
m_pItem->label.TrimLeft();
|
|
m_pItem->label.TrimRight();
|
|
GetDlgItemText(IDC_EDITTIP,m_pItem->tip);
|
|
m_pItem->tip.TrimLeft();
|
|
m_pItem->tip.TrimRight();
|
|
|
|
return CEditCustomItemDlg::OnOK(wNotifyCode,wID,hWndCtl,bHandled);
|
|
}
|
|
|
|
LRESULT CEditToolbarDlg::OnCommandChanged( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled )
|
|
{
|
|
CString text=GetComboText(wNotifyCode,wID);
|
|
if (text==m_pItem->command) return 0;
|
|
m_pItem->SetCommand(text,g_StdCommands,m_Style,SETTINGS_STYLE_MASK);
|
|
GetDlgItem(IDC_BUTTONRESET).EnableWindow(m_pItem->pStdCommand && *m_pItem->pStdCommand->name);
|
|
UpdateIcons(IDC_ICONN,IDC_ICOND);
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CEditToolbarDlg::OnLinkChanged( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled )
|
|
{
|
|
CString text=GetComboText(wNotifyCode,wID);
|
|
if (text==m_pItem->link) return 0;
|
|
m_pItem->link=text;
|
|
UpdateIcons(IDC_ICONN,IDC_ICOND);
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CEditToolbarDlg::OnIconChanged( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled )
|
|
{
|
|
CString text;
|
|
GetDlgItemText(IDC_EDITICON,text);
|
|
text.TrimLeft();
|
|
text.TrimRight();
|
|
if (text==m_pItem->icon) return 0;
|
|
m_pItem->icon=text;
|
|
UpdateIcons(IDC_ICONN,IDC_ICOND);
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CEditToolbarDlg::OnIconDChanged( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled )
|
|
{
|
|
CString text;
|
|
GetDlgItemText(IDC_EDITICOND,text);
|
|
text.TrimLeft();
|
|
text.TrimRight();
|
|
if (text==m_pItem->iconD) return 0;
|
|
m_pItem->iconD=text;
|
|
UpdateIcons(IDC_ICONN,IDC_ICOND);
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CEditToolbarDlg::OnBrowseCommand( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled )
|
|
{
|
|
wchar_t text[_MAX_PATH];
|
|
GetDlgItemText(IDC_COMBOCOMMAND,text,_countof(text));
|
|
if (BrowseCommandHelper(m_hWnd,text))
|
|
{
|
|
SetDlgItemText(IDC_COMBOCOMMAND,text);
|
|
SendMessage(WM_COMMAND,MAKEWPARAM(IDC_COMBOCOMMAND,CBN_KILLFOCUS));
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CEditToolbarDlg::OnBrowseLink( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled )
|
|
{
|
|
wchar_t text[_MAX_PATH];
|
|
GetDlgItemText(IDC_COMBOLINK,text,_countof(text));
|
|
if (BrowseLinkHelper(m_hWnd,text,false))
|
|
{
|
|
SetDlgItemText(IDC_COMBOLINK,text);
|
|
SendMessage(WM_COMMAND,MAKEWPARAM(IDC_COMBOLINK,CBN_KILLFOCUS));
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CEditToolbarDlg::OnBrowseIcon( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled )
|
|
{
|
|
wchar_t text[_MAX_PATH];
|
|
if (wID==IDC_BUTTONICON) wID=IDC_EDITICON;
|
|
if (wID==IDC_BUTTONICOND) wID=IDC_EDITICOND;
|
|
GetDlgItemText(wID,text,_countof(text));
|
|
if (wID==IDC_EDITICOND && !*text)
|
|
GetDlgItemText(IDC_EDITICON,text,_countof(text));
|
|
if (BrowseIconHelper(m_hWnd,text))
|
|
{
|
|
SetDlgItemText(wID,text);
|
|
SendMessage(WM_COMMAND,MAKEWPARAM(wID,EN_KILLFOCUS));
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CEditToolbarDlg::OnReset( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled )
|
|
{
|
|
if (!m_pItem->pStdCommand || !*m_pItem->pStdCommand->name)
|
|
return 0;
|
|
m_pItem->link.Empty();
|
|
m_pItem->label=m_pItem->pStdCommand->label;
|
|
m_pItem->tip=m_pItem->pStdCommand->tip;
|
|
m_pItem->icon=m_pItem->pStdCommand->icon;
|
|
m_pItem->iconD=m_pItem->pStdCommand->iconD;
|
|
SendDlgItemMessage(IDC_COMBOLINK,CB_SETCURSEL,-1);
|
|
SetDlgItemText(IDC_EDITLABEL,m_pItem->label);
|
|
SetDlgItemText(IDC_EDITTIP,m_pItem->tip);
|
|
SetDlgItemText(IDC_EDITICON,m_pItem->icon);
|
|
SetDlgItemText(IDC_EDITICOND,m_pItem->iconD);
|
|
|
|
UpdateIcons(IDC_ICONN,IDC_ICOND);
|
|
return 0;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CCustomToolbarDlg: public CCustomTreeDlg
|
|
{
|
|
public:
|
|
CCustomToolbarDlg( void ): CCustomTreeDlg(false,g_StdCommands,GetWinVersion()>=WIN_VER_WIN8?SETTINGS_STYLE_WIN8:SETTINGS_STYLE_WIN7,SETTINGS_STYLE_MASK) {}
|
|
|
|
protected:
|
|
virtual void ParseTreeItemExtra( CTreeItem *pItem, CSettingsParser &parser );
|
|
virtual void SerializeItemExtra( CTreeItem *pItem, std::vector<wchar_t> &stringBuilder );
|
|
virtual bool EditItem( CTreeItem *pItem, HWND tree, HTREEITEM hItem, std::vector<HMODULE> &modules );
|
|
};
|
|
|
|
void CCustomToolbarDlg::ParseTreeItemExtra( CTreeItem *pItem, CSettingsParser &parser )
|
|
{
|
|
wchar_t text[256];
|
|
Sprintf(text,_countof(text),L"%s.IconDisabled",pItem->name);
|
|
pItem->iconD=parser.FindSetting(text,L"");
|
|
}
|
|
|
|
void CCustomToolbarDlg::SerializeItemExtra( CTreeItem *pItem, std::vector<wchar_t> &stringBuilder )
|
|
{
|
|
if (!pItem->iconD.IsEmpty())
|
|
{
|
|
wchar_t text[2048];
|
|
Sprintf(text,_countof(text),L"%s.IconDisabled=%s\n",pItem->name,pItem->iconD);
|
|
AppendString(stringBuilder,text);
|
|
}
|
|
}
|
|
|
|
bool CCustomToolbarDlg::EditItem( CTreeItem *pItem, HWND tree, HTREEITEM hItem, std::vector<HMODULE> &modules )
|
|
{
|
|
bool bNoLinks=(TreeView_GetParent(tree,hItem) || TreeView_GetChild(tree,hItem));
|
|
return CEditToolbarDlg(pItem,bNoLinks,modules).Run(m_hWnd,IDD_CUSTOMTOOLBAR);
|
|
}
|
|
|
|
class CCustomToolbarPanel: public ISettingsPanel
|
|
{
|
|
public:
|
|
virtual HWND Create( HWND parent );
|
|
virtual HWND Activate( CSetting *pGroup, const RECT &rect, bool bReset );
|
|
virtual bool Validate( HWND parent ) { return true; }
|
|
|
|
private:
|
|
static CCustomToolbarDlg s_Dialog;
|
|
};
|
|
|
|
CCustomToolbarDlg CCustomToolbarPanel::s_Dialog;
|
|
|
|
HWND CCustomToolbarPanel::Create( HWND parent )
|
|
{
|
|
if (!s_Dialog.m_hWnd)
|
|
s_Dialog.Create(parent,LoadDialogEx(IDD_CUSTOMTREE));
|
|
return s_Dialog.m_hWnd;
|
|
}
|
|
|
|
HWND CCustomToolbarPanel::Activate( CSetting *pGroup, const RECT &rect, bool bReset )
|
|
{
|
|
s_Dialog.SetGroup(pGroup,bReset);
|
|
s_Dialog.SetWindowPos(HWND_TOP,&rect,SWP_SHOWWINDOW);
|
|
return s_Dialog.m_hWnd;
|
|
}
|
|
|
|
static CCustomToolbarPanel g_CustomToolbarPanel;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
static CSetting g_Settings[]={
|
|
{L"Basic",CSetting::TYPE_GROUP,IDS_BASIC_SETTINGS},
|
|
{L"EnableSettings",CSetting::TYPE_BOOL,0,0,1,CSetting::FLAG_HIDDEN|CSetting::FLAG_NOSAVE},
|
|
{L"ProcessWhiteList",CSetting::TYPE_STRING,0,0,L"",CSetting::FLAG_HIDDEN|CSetting::FLAG_NOSAVE},
|
|
{L"ProcessBlackList",CSetting::TYPE_STRING,0,0,L"",CSetting::FLAG_HIDDEN|CSetting::FLAG_NOSAVE},
|
|
{L"NoInitialToolbar",CSetting::TYPE_BOOL,0,0,0,CSetting::FLAG_HIDDEN|CSetting::FLAG_NOSAVE},
|
|
|
|
{L"NavigationPane",CSetting::TYPE_GROUP,IDS_NAVIGATION_SETTINGS},
|
|
{L"TreeStyle",CSetting::TYPE_INT,IDS_TREE_STYLE,IDS_TREE_STYLE_TIP,2,CSetting::FLAG_WARM|CSetting::FLAG_BASIC},
|
|
{L"XPClassic",CSetting::TYPE_RADIO,IDS_XPCLASSIC,IDS_XPCLASSIC_TIP},
|
|
{L"XPSimple",CSetting::TYPE_RADIO,IDS_XPSIMPLE,IDS_XPSIMPLE_TIP},
|
|
{L"Vista",CSetting::TYPE_RADIO,IDS_VISTA,IDS_VISTA_TIP},
|
|
{L"HScrollbar",CSetting::TYPE_INT,IDS_SCROLLBAR,IDS_SCROLLBAR_TIP,0,CSetting::FLAG_WARM},
|
|
{L"Default",CSetting::TYPE_RADIO,IDS_SCROLLBAR_DEFAULT,IDS_SCROLLBAR_DEFAULT_TIP},
|
|
{L"Off",CSetting::TYPE_RADIO,IDS_SCROLLBAR_OFF,IDS_SCROLLBAR_OFF_TIP},
|
|
{L"On",CSetting::TYPE_RADIO,IDS_SCROLLBAR_ON,IDS_SCROLLBAR_ON_TIP},
|
|
{L"NoFadeButtons",CSetting::TYPE_BOOL,IDS_NO_FADE,IDS_NO_FADE_TIP,0,CSetting::FLAG_WARM,L"TreeStyle"},
|
|
{L"TreeItemSpacing",CSetting::TYPE_INT,IDS_TREE_SPACING,IDS_TREE_SPACING_TIP,0,CSetting::FLAG_WARM},
|
|
{L"FullIndent",CSetting::TYPE_BOOL,IDS_FULL_INDENT,IDS_FULL_INDENT_TIP,0,CSetting::FLAG_WARM,L"TreeStyle"},
|
|
{L"AutoNavigate",CSetting::TYPE_INT,IDS_NAVIGATE,IDS_NAVIGATE_TIP,0,CSetting::FLAG_WARM|CSetting::FLAG_BASIC},
|
|
{L"Default",CSetting::TYPE_RADIO,IDS_NAV_DEFAULT,IDS_NAV_DEFAULT_TIP},
|
|
{L"KeyboardOnly",CSetting::TYPE_RADIO,IDS_NAV_KBD,IDS_NAV_KBD_TIP},
|
|
{L"Always",CSetting::TYPE_RADIO,IDS_NAV_ALWAYS,IDS_NAV_ALWAYS_TIP},
|
|
{L"AutoNavDelay",CSetting::TYPE_INT,IDS_NAV_DELAY,IDS_NAV_DELAY_TIP,100,CSetting::FLAG_WARM,L"AutoNavigate"},
|
|
{L"AltEnter",CSetting::TYPE_BOOL,IDS_ALT_ENTER,IDS_ALT_ENTER_TIP,1,CSetting::FLAG_WARM|CSetting::FLAG_BASIC},
|
|
{L"FixFolderScroll",CSetting::TYPE_BOOL,IDS_FIX_SCROLL,IDS_FIX_SCROLL_TIP,1,CSetting::FLAG_WARM},
|
|
|
|
{L"TitleBar",CSetting::TYPE_GROUP,IDS_TITLE_SETTINGS},
|
|
{L"ShowCaption",CSetting::TYPE_BOOL,IDS_SHOW_CAPTION,IDS_SHOW_CAPTION_TIP,0,CSetting::FLAG_WARM},
|
|
{L"ShowIcon",CSetting::TYPE_BOOL,IDS_SHOW_ICON,IDS_SHOW_ICON_TIP,0,CSetting::FLAG_WARM},
|
|
{L"DisableBreadcrumbs",CSetting::TYPE_BOOL,IDS_NO_BREADCRUMBS,IDS_NO_BREADCRUMBS_TIP,0,CSetting::FLAG_WARM|CSetting::FLAG_BASIC},
|
|
{L"AddressBarHistory",CSetting::TYPE_INT,IDS_ADDRESS_HISTORY,IDS_ADDRESS_HISTORY_TIP,0,CSetting::FLAG_WARM},
|
|
{L"NormalHistory",CSetting::TYPE_RADIO,IDS_NORMAL_HISTORY,IDS_NORMAL_HISTORY_TIP},
|
|
{L"SimplePath",CSetting::TYPE_RADIO,IDS_SIMPLE_PATH,IDS_SIMPLE_PATH_TIP},
|
|
{L"ExtendedPath",CSetting::TYPE_RADIO,IDS_EXTENDED_PATH,IDS_EXTENDED_PATH_TIP},
|
|
{L"HideSearch",CSetting::TYPE_BOOL,IDS_HIDE_SEARCH,IDS_HIDE_SEARCH_TIP,0,CSetting::FLAG_WARM},
|
|
{L"AddressAltD",CSetting::TYPE_STRING,IDS_ALT_D,IDS_ALT_D_TIP,L"",CSetting::FLAG_WARM},
|
|
{L"UpHotkey2",CSetting::TYPE_HOTKEY_ANY,IDS_UP_HOTKEY,IDS_UP_HOTKEY_TIP,0,CSetting::FLAG_WARM},
|
|
|
|
{L"UpButton",CSetting::TYPE_GROUP,IDS_UP_SETTINGS},
|
|
{L"ShowUpButton",CSetting::TYPE_INT,IDS_SHOW_UP,IDS_SHOW_UP_TIP,2,CSetting::FLAG_WARM|CSetting::FLAG_BASIC},
|
|
{L"DontShow",CSetting::TYPE_RADIO,IDS_DONT_SHOW,IDS_DONT_SHOW_TIP},
|
|
{L"BeforeBack",CSetting::TYPE_RADIO,IDS_BEFORE_BACK,IDS_BEFORE_BACK_TIP},
|
|
{L"AfterBack",CSetting::TYPE_RADIO,IDS_AFTER_BACK,IDS_AFTER_BACK_TIP},
|
|
{L"UpIconNormal",CSetting::TYPE_ICON,IDS_UP_NORMAL,IDS_UP_NORMAL_TIP,L",4",CSetting::FLAG_WARM,L"ShowUpButton"},
|
|
{L"UpIconPressed",CSetting::TYPE_ICON,IDS_UP_PRESSED,IDS_UP_PRESSED_TIP,L",5",CSetting::FLAG_WARM,L"ShowUpButton"},
|
|
{L"UpIconHot",CSetting::TYPE_ICON,IDS_UP_HOT,IDS_UP_HOT_TIP,L",6",CSetting::FLAG_WARM,L"ShowUpButton"},
|
|
{L"UpIconDisabled",CSetting::TYPE_ICON,IDS_UP_DISABLED,IDS_UP_DISABLED_TIP,L",7",CSetting::FLAG_WARM,L"ShowUpButton"},
|
|
{L"UpIconSize",CSetting::TYPE_INT,IDS_UP_SIZE,IDS_UP_SIZE_TIP,0,CSetting::FLAG_WARM,L"ShowUpButton"}, // 30 for DPI<120 and 36 for DPI>=120
|
|
{L"UpHotkey",CSetting::TYPE_HOTKEY_ANY,IDS_UP_HOTKEY,IDS_UP_HOTKEY_TIP,0,CSetting::FLAG_WARM},
|
|
|
|
{L"Toolbar",CSetting::TYPE_GROUP,IDS_TOOLBAR_SETTINGS},
|
|
{L"UseBigButtons",CSetting::TYPE_BOOL,IDS_BIG_BUTTONS,IDS_BIG_BUTTONS_TIP,1,CSetting::FLAG_WARM},
|
|
{L"SmallIconSize",CSetting::TYPE_INT,IDS_SMALL_SIZE,IDS_SMALL_SIZE_TIP,-1,CSetting::FLAG_WARM}, // 16 for DPI<120 and 24 for DPI>=120
|
|
{L"LargeIconSize",CSetting::TYPE_INT,IDS_LARGE_SIZE,IDS_LARGE_SIZE_TIP,-1,CSetting::FLAG_WARM}, // 24 for DPI<120 and 32 for DPI>=120
|
|
{L"MenuIconSize",CSetting::TYPE_INT,IDS_MENU_SIZE,IDS_MENU_SIZE_TIP,16,CSetting::FLAG_WARM},
|
|
{L"ToolbarListMode",CSetting::TYPE_BOOL,IDS_LIST_MODE,IDS_LIST_MODE_TIP,0,CSetting::FLAG_WARM},
|
|
{L"SameSizeButtons",CSetting::TYPE_BOOL,IDS_SAME_SIZE,IDS_SAME_SIZE_TIP,0,CSetting::FLAG_WARM,L"ToolbarListMode=0"},
|
|
{L"ResizeableToolbar",CSetting::TYPE_BOOL,IDS_RESIZEABLE,IDS_RESIZEABLE_TIP,0,CSetting::FLAG_WARM},
|
|
|
|
{L"CustomToolbar",CSetting::TYPE_GROUP,IDS_BUTTONS_SETTINGS,0,0,0,NULL,NULL,&g_CustomToolbarPanel},
|
|
{L"ToolbarItems",CSetting::TYPE_MULTISTRING,0,0,g_DefaultToolbar,CSetting::FLAG_WARM},
|
|
|
|
{L"StatusBar",CSetting::TYPE_GROUP,IDS_STATUS_SETTINGS},
|
|
{L"ShowFreeSpace",CSetting::TYPE_BOOL,IDS_FREE_SPACE,IDS_FREE_SPACE_TIP,1,CSetting::FLAG_WARM|CSetting::FLAG_BASIC},
|
|
{L"ShowInfoTip",CSetting::TYPE_BOOL,IDS_INFO_TIP,IDS_INFO_TIP_TIP,1,CSetting::FLAG_WARM,L"ShowFreeSpace"},
|
|
{L"ForceRefreshWin7",CSetting::TYPE_BOOL,IDS_FORCE_REFRESH,IDS_FORCE_REFRESH_TIP,1,CSetting::FLAG_WARM,L"ShowFreeSpace"},
|
|
|
|
{L"StatusBar8",CSetting::TYPE_GROUP,IDS_STATUS_SETTINGS},
|
|
{L"ShowStatusBar",CSetting::TYPE_BOOL,IDS_SHOWSTATUSBAR,IDS_SHOWSTATUSBAR_TIP,1,CSetting::FLAG_WARM|CSetting::FLAG_BASIC},
|
|
{L"ShowFreeSpace2",CSetting::TYPE_BOOL,IDS_FREE_SPACE,IDS_FREE_SPACE_TIP,1,CSetting::FLAG_WARM,L"ShowStatusBar",L"ShowStatusBar"},
|
|
{L"ShowZone",CSetting::TYPE_BOOL,IDS_SHOW_ZONE,IDS_SHOW_ZONE_TIP,1,CSetting::FLAG_WARM,L"ShowStatusBar",L"ShowStatusBar"},
|
|
{L"ShowInfoTip2",CSetting::TYPE_BOOL,IDS_INFO_TIP,IDS_INFO_TIP_TIP,1,CSetting::FLAG_WARM,L"ShowStatusBar",L"ShowStatusBar"},
|
|
{L"StatusBarFont",CSetting::TYPE_FONT,IDS_STATUS_FONT,IDS_STATUS_FONT_TIP,L"Segoe UI, normal, 9",CSetting::FLAG_WARM,L"ShowStatusBar",L"ShowStatusBar"},
|
|
|
|
{L"FilePane",CSetting::TYPE_GROUP,IDS_FILEPANE_SETTINGS},
|
|
{L"ShareOverlay",CSetting::TYPE_BOOL,IDS_SHARE,IDS_SHARE_TIP,0,CSetting::FLAG_COLD|CSetting::FLAG_BASIC},
|
|
{L"ShareOverlayIcon",CSetting::TYPE_ICON,IDS_SHARE_ICON,IDS_SHARE_ICON_TIP,L"%windir%\\system32\\imageres.dll,164",CSetting::FLAG_COLD,L"ShareOverlay",L"ShareOverlay"},
|
|
{L"ShareOverlayHidden",CSetting::TYPE_BOOL,IDS_SHARE_HIDDEN,IDS_SHARE_HIDDEN_TIP,0,CSetting::FLAG_COLD,L"ShareOverlay",L"ShareOverlay"},
|
|
{L"ShareExplorer",CSetting::TYPE_BOOL,IDS_SHARE_EXPLORER,IDS_SHARE_EXPLORER_TIP,1,CSetting::FLAG_COLD,L"ShareOverlay",L"ShareOverlay"},
|
|
{L"ShowHeaders",CSetting::TYPE_BOOL,IDS_HEADERS,IDS_HEADERS_TIP,0,CSetting::FLAG_WARM},
|
|
{L"HideScrollTip",CSetting::TYPE_BOOL,IDS_SCROLLTIP,IDS_SCROLLTIP_TIP,0,CSetting::FLAG_WARM},
|
|
|
|
{L"FileOperation",CSetting::TYPE_GROUP,IDS_FILE_SETTINGS},
|
|
{L"ReplaceFileUI",CSetting::TYPE_BOOL,IDS_FILE_UI,IDS_FILE_UI_TIP,1,CSetting::FLAG_WARM|CSetting::FLAG_BASIC},
|
|
{L"ReplaceFolderUI",CSetting::TYPE_BOOL,IDS_FOLDER_UI,IDS_FOLDER_UI_TIP,1,CSetting::FLAG_WARM|CSetting::FLAG_BASIC},
|
|
{L"OverwriteAlertLevel",CSetting::TYPE_INT,IDS_ALERT_LEVEL,IDS_ALERT_LEVEL_TIP,0,CSetting::FLAG_WARM,L"ReplaceFileUI",L"ReplaceFileUI"},
|
|
{L"NoAlert",CSetting::TYPE_RADIO,IDS_NO_ALERT,IDS_NO_ALERT_TIP},
|
|
{L"SystemFiles",CSetting::TYPE_RADIO,IDS_SYS_FILES,IDS_SYS_FILES_TIP},
|
|
{L"ReadOnlyFiles",CSetting::TYPE_RADIO,IDS_RO_FILES,IDS_RO_FILES_TIP},
|
|
{L"EnableMore",CSetting::TYPE_BOOL,IDS_MORE,IDS_MORE_TIP,0,CSetting::FLAG_WARM},
|
|
{L"MoreProgressDelay",CSetting::TYPE_INT,IDS_MORE_DELAY,IDS_MORE_DELAY_TIP,-1,CSetting::FLAG_WARM,L"EnableMore",L"EnableMore"}, // 500 for Windows 7 Aero, and 0 otherwise
|
|
{L"FileExplorer",CSetting::TYPE_BOOL,IDS_FILE_EXPLORER,IDS_FILE_EXPLORER_TIP,1,CSetting::FLAG_COLD},
|
|
|
|
{L"Language",CSetting::TYPE_GROUP,IDS_LANGUAGE_SETTINGS,0,0,0,NULL,NULL,GetLanguageSettings(COMPONENT_EXPLORER)},
|
|
{L"Language",CSetting::TYPE_STRING,0,0,L"",CSetting::FLAG_COLD|CSetting::FLAG_SHARED},
|
|
|
|
{NULL}
|
|
};
|
|
|
|
void UpgradeSettings( bool bShared )
|
|
{
|
|
}
|
|
|
|
void UpdateSettings( void )
|
|
{
|
|
HDC hdc=GetDC(NULL);
|
|
int dpi=GetDeviceCaps(hdc,LOGPIXELSY);
|
|
ReleaseDC(NULL,hdc);
|
|
UpdateSetting(L"SmallIconSize",CComVariant((dpi>=120)?24:16),false);
|
|
UpdateSetting(L"LargeIconSize",CComVariant((dpi>=120)?32:24),false);
|
|
UpdateSetting(L"UpIconSize",CComVariant((dpi>=120)?36:30),false);
|
|
FindSetting(L"UpHotkey2")->pLinkTo=FindSetting(L"UpHotkey");
|
|
|
|
if (GetWinVersion()>=WIN_VER_WIN8)
|
|
{
|
|
// Windows 8
|
|
HideSettingGroup(L"StatusBar",true);
|
|
HideSetting(L"ShowFreeSpace",true);
|
|
FindSetting(L"ShowFreeSpace2")->pLinkTo=FindSetting(L"ShowFreeSpace");
|
|
FindSetting(L"ShowInfoTip2")->pLinkTo=FindSetting(L"ShowInfoTip");
|
|
|
|
HideSettingGroup(L"UpButton",true);
|
|
UpdateSetting(L"ShowUpButton",CComVariant(0),false); HideSetting(L"ShowUpButton",true);
|
|
|
|
HideSettingGroup(L"FileOperation",true);
|
|
UpdateSetting(L"ReplaceFileUI",CComVariant(0),false); HideSetting(L"ReplaceFileUI",true);
|
|
UpdateSetting(L"ReplaceFolderUI",CComVariant(0),false); HideSetting(L"ReplaceFolderUI",true);
|
|
|
|
UpdateSetting(L"ShowCaption",CComVariant(0),false); HideSetting(L"ShowCaption",true);
|
|
UpdateSetting(L"ShowIcon",CComVariant(0),false); HideSetting(L"ShowIcon",true);
|
|
UpdateSetting(L"FixFolderScroll",CComVariant(0),false); HideSetting(L"FixFolderScroll",true);
|
|
UpdateSetting(L"ToolbarItems",CComVariant(g_DefaultToolbar2),false);
|
|
|
|
if (GetWinVersion()>=WIN_VER_WIN10)
|
|
{
|
|
FindSetting(L"TreeStyle")[1].flags|=CSetting::FLAG_HIDDEN;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Windows 7
|
|
int delay=0;
|
|
BOOL comp;
|
|
if (SUCCEEDED(DwmIsCompositionEnabled(&comp)) && comp)
|
|
delay=500;
|
|
UpdateSetting(L"MoreProgressDelay",CComVariant(delay),false);
|
|
HideSetting(L"UpHotkey2",true);
|
|
HideSettingGroup(L"StatusBar8",true);
|
|
}
|
|
|
|
CRegKey regKey;
|
|
wchar_t language[100]=L"";
|
|
if (regKey.Open(HKEY_LOCAL_MACHINE,L"Software\\OpenShell\\OpenShell",KEY_READ|KEY_WOW64_64KEY)==ERROR_SUCCESS)
|
|
{
|
|
ULONG size=_countof(language);
|
|
if (regKey.QueryStringValue(L"DefaultLanguage",language,&size)!=ERROR_SUCCESS)
|
|
language[0]=0;
|
|
}
|
|
UpdateSetting(L"Language",language,false);
|
|
}
|
|
|
|
static bool g_bCopyHook0; // initial state of the copy hook before the settings are edited
|
|
|
|
void InitSettings( void )
|
|
{
|
|
InitSettings(g_Settings,COMPONENT_EXPLORER,NULL);
|
|
g_bCopyHook0=GetWinVersion()<WIN_VER_WIN8 && (GetSettingBool(L"ReplaceFileUI") || GetSettingBool(L"ReplaceFolderUI") || GetSettingBool(L"EnableMore"));
|
|
}
|
|
|
|
void ClosingSettings( HWND hWnd, int flags, int command )
|
|
{
|
|
if (command==IDOK)
|
|
{
|
|
bool bCopyHook=GetWinVersion()<WIN_VER_WIN8 && (GetSettingBool(L"ReplaceFileUI") || GetSettingBool(L"ReplaceFolderUI") || GetSettingBool(L"EnableMore"));
|
|
|
|
if ((flags&CSetting::FLAG_COLD) || (bCopyHook && !g_bCopyHook0))
|
|
MessageBox(hWnd,LoadStringEx(IDS_NEW_SETTINGS2),LoadStringEx(IDS_APP_TITLE),MB_OK|MB_ICONWARNING);
|
|
else if (flags&CSetting::FLAG_WARM)
|
|
MessageBox(hWnd,LoadStringEx(IDS_NEW_SETTINGS1),LoadStringEx(IDS_APP_TITLE),MB_OK|MB_ICONINFORMATION);
|
|
}
|
|
}
|
|
|
|
void SettingChangedCallback( const CSetting *pSetting )
|
|
{
|
|
}
|
|
|
|
void EditSettings( void )
|
|
{
|
|
STARTUPINFO startupInfo={sizeof(startupInfo)};
|
|
PROCESS_INFORMATION processInfo;
|
|
memset(&processInfo,0,sizeof(processInfo));
|
|
wchar_t path[_MAX_PATH];
|
|
GetModuleFileName(g_Instance,path,_countof(path));
|
|
wchar_t *end=PathFindFileName(path);
|
|
*end=0;
|
|
Strcpy(end,(int)(path+_countof(path)-end),L"ClassicExplorerSettings.exe");
|
|
if (CreateProcess(NULL,path,NULL,NULL,TRUE,0,NULL,NULL,&startupInfo,&processInfo))
|
|
{
|
|
CloseHandle(processInfo.hProcess);
|
|
CloseHandle(processInfo.hThread);
|
|
}
|
|
}
|
|
|
|
void ShowSettingsMenu( HWND parent, int x, int y )
|
|
{
|
|
HMENU menu=CreatePopupMenu();
|
|
AppendMenu(menu,MF_STRING,CBandWindow::ID_SETTINGS,FindTranslation(L"Toolbar.Settings",L"Classic Explorer Settings"));
|
|
int size=16;
|
|
HBITMAP shellBmp=NULL;
|
|
HICON icon=(HICON)LoadImage(g_Instance,MAKEINTRESOURCE(IDI_APPICON),IMAGE_ICON,size,size,LR_DEFAULTCOLOR);
|
|
if (icon)
|
|
{
|
|
shellBmp=BitmapFromIcon(icon,size,NULL,true);
|
|
MENUITEMINFO mii={sizeof(mii)};
|
|
mii.fMask=MIIM_BITMAP;
|
|
mii.hbmpItem=shellBmp;
|
|
SetMenuItemInfo(menu,CBandWindow::ID_SETTINGS,FALSE,&mii);
|
|
}
|
|
MENUINFO info={sizeof(info),MIM_STYLE,MNS_CHECKORBMP};
|
|
SetMenuInfo(menu,&info);
|
|
|
|
DWORD pos=GetMessagePos();
|
|
if (!GetSettingBool(L"EnableSettings"))
|
|
EnableMenuItem(menu,0,MF_BYPOSITION|MF_GRAYED);
|
|
int res=TrackPopupMenu(menu,TPM_RIGHTBUTTON|TPM_RETURNCMD,x,y,0,parent,NULL);
|
|
DestroyMenu(menu);
|
|
if (shellBmp) DeleteObject(shellBmp);
|
|
if (res==CBandWindow::ID_SETTINGS)
|
|
EditSettings();
|
|
}
|
|
|
|
void ShowExplorerSettings( void )
|
|
{
|
|
WaitDllInitThread();
|
|
if (!GetSettingBool(L"EnableSettings"))
|
|
return;
|
|
wchar_t title[100];
|
|
DWORD ver=GetVersionEx(g_Instance);
|
|
if (ver)
|
|
Sprintf(title,_countof(title),LoadStringEx(IDS_SETTINGS_TITLE_VER),ver>>24,(ver>>16)&0xFF,ver&0xFFFF);
|
|
else
|
|
Sprintf(title,_countof(title),LoadStringEx(IDS_SETTINGS_TITLE));
|
|
EditSettings(title,true,0);
|
|
}
|
|
|
|
bool DllImportSettingsXml( const wchar_t *fname )
|
|
{
|
|
return ImportSettingsXml(fname);
|
|
}
|
|
|
|
bool DllExportSettingsXml( const wchar_t *fname )
|
|
{
|
|
return ExportSettingsXml(fname);
|
|
}
|
|
|
|
#ifndef _WIN64
|
|
bool DllSaveAdmx( const char *admxFile, const char *admlFile, const char *docFile, const wchar_t *language )
|
|
{
|
|
WaitDllInitThread();
|
|
HMODULE dll=NULL;
|
|
if (language[0])
|
|
{
|
|
wchar_t path[_MAX_PATH];
|
|
GetCurrentDirectory(_countof(path),path);
|
|
PathAppend(path,language);
|
|
PathAddExtension(path,L".dll");
|
|
dll=LoadLibraryEx(path,NULL,LOAD_LIBRARY_AS_DATAFILE|LOAD_LIBRARY_AS_IMAGE_RESOURCE);
|
|
}
|
|
LoadTranslationResources(dll,NULL);
|
|
return SaveAdmx(COMPONENT_EXPLORER,admxFile,admlFile,docFile);
|
|
}
|
|
#endif
|