#include "ConfigMenu.h"
#include "..\Menu\MenuCommon.h"
#include "..\Settings\Settings.h"
#include "..\Console\ConsoleMenu.h"
#include "..\Desktop\DesktopMenu.h"
#include "..\Dock\DockMenu.h"
#include "..\Hotkeys\HotkeysMenu.h"
#include "..\Plugins\PluginsMenu.h"
#include "..\Toolbar\ToolbarMenu.h"
#include "..\Workspaces\WorkspacesMenu.h"
extern MenuCommon *pMenuCommon;
extern Settings *pSettings;
#define GROUP_DESKTOP_CLOCK 1
ConfigMenu::ConfigMenu(LPCSTR pszTitle) : Menu(pMenuCommon->hInst)
{
m_pszTitle = pszTitle ? _strdup(pszTitle) : _strdup("");
UpdateFolder();
}
ConfigMenu::~ConfigMenu()
{
if (m_pszTitle) free(m_pszTitle);
m_pszTitle = NULL;
}
void ConfigMenu::OnShow(bool fShow)
{
if (fShow) UpdateFolder();
}
void ConfigMenu::UpdateFolder()
{
DeleteMenuItems();
pMenuCommon->AddHeaderItem(this, m_pszTitle);
MenuItem* pMenuItem;
Menu* designSubMenu = MakeMenu("Design");
pMenuItem = new SpecialFolder("Themes", NULL, pSettings->themesFolder, FOLDER_THEMES);
pMenuItem->SetHeight(pMenuCommon->m_nSubmenuHeight);
designSubMenu->AddMenuItem(pMenuItem);
pMenuItem = new SpecialFolder("Styles", NULL, pSettings->stylesFolder, FOLDER_STYLES);
pMenuItem->SetHeight(pMenuCommon->m_nSubmenuHeight);
designSubMenu->AddMenuItem(pMenuItem);
pMenuItem = new SpecialFolder("Wallpapers", NULL, pSettings->wallpapersFolder, FOLDER_PATH);
pMenuItem->SetHeight(pMenuCommon->m_nSubmenuHeight);
designSubMenu->AddMenuItem(pMenuItem);
pMenuCommon->CreateMenuItem(designSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(designSubMenu, MENUITEM_COMMAND, "@xoblite Random Style", NULL, "Random style...", false);
pMenuCommon->CreateMenuItem(designSubMenu, MENUITEM_COMMAND, "@xoblite Random Wallpaper", NULL, "Random wallpaper...", false);
pMenuCommon->CreateMenuItem(designSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(designSubMenu, MENUITEM_COMMAND, "@xoblite Edit", pSettings->styleFile, "Edit current style", false);
pMenuCommon->CreateMenuItem(designSubMenu, MENUITEM_COMMAND, "@xoblite About Style", NULL, "About current style...", false);
pMenuCommon->CreateMenuItem(designSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuItem = new SpecialFolder("Current theme folder", NULL, pSettings->SF_currentThemePath, FOLDER_PATH);
pMenuItem->SetHeight(pMenuCommon->m_nSubmenuHeight);
designSubMenu->AddMenuItem(pMenuItem);
pMenuItem = new SpecialFolder("Default theme folder", NULL, pSettings->SF_blackboxPath, FOLDER_PATH);
pMenuItem->SetHeight(pMenuCommon->m_nSubmenuHeight);
designSubMenu->AddMenuItem(pMenuItem);
MakeSubmenu(this, designSubMenu, "Design");
pMenuCommon->CreateMenuItem(this, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuItem = new MenuConfig("Menu");
pMenuItem->SetHeight(pMenuCommon->m_nSubmenuHeight);
AddMenuItem(pMenuItem);
pMenuItem = new ToolbarMenu("Toolbar");
pMenuItem->SetHeight(pMenuCommon->m_nSubmenuHeight);
AddMenuItem(pMenuItem);
pMenuItem = new DockMenu("Dock");
pMenuItem->SetHeight(pMenuCommon->m_nSubmenuHeight);
AddMenuItem(pMenuItem);
pMenuItem = new ConsoleMenu("Console");
pMenuItem->SetHeight(pMenuCommon->m_nSubmenuHeight);
AddMenuItem(pMenuItem);
pMenuItem = new DesktopMenu("Desktop");
pMenuItem->SetHeight(pMenuCommon->m_nSubmenuHeight);
AddMenuItem(pMenuItem);
pMenuCommon->CreateMenuItem(this, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuItem = new HotkeysMenu("Hotkeys");
pMenuItem->SetHeight(pMenuCommon->m_nSubmenuHeight);
AddMenuItem(pMenuItem);
pMenuItem = new FolderItem(new WorkspacesMenu("Workspaces"), "Workspaces", NULL);
pMenuItem->SetHeight(pMenuCommon->m_nSubmenuHeight);
AddMenuItem(pMenuItem);
PluginMenu *PlugMenu = new PluginMenu("Plugins");
PlugMenu->SetHeight(pMenuCommon->m_nSubmenuHeight);
AddMenuItem(PlugMenu);
pMenuCommon->CreateMenuItem(this, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuItem = new GlobalConfig("Global");
pMenuItem->SetHeight(pMenuCommon->m_nSubmenuHeight);
AddMenuItem(pMenuItem);
pMenuCommon->CreateMenuItem(this, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(this, MENUITEM_COMMAND, "@xoblite Reconfigure", NULL, "Reconfigure", false);
pMenuCommon->CreateMenuItem(this, MENUITEM_COMMAND, "@xoblite Restart", NULL, "Restart", false);
pMenuCommon->CreateMenuItem(this, MENUITEM_COMMAND, "@xoblite Quit", NULL, "Quit", false);
pMenuCommon->CreateMenuItem(this, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
Menu* shutdownSubMenu = MakeMenu("Session");
pMenuCommon->CreateMenuItem(shutdownSubMenu, MENUITEM_COMMAND, "[lockworkstation]", NULL, "Lock workstation", false);
pMenuCommon->CreateMenuItem(shutdownSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(shutdownSubMenu, MENUITEM_COMMAND, "[standby]", NULL, "Standby [sleep]", false);
pMenuCommon->CreateMenuItem(shutdownSubMenu, MENUITEM_COMMAND, "[hibernate]", NULL, "Hibernate [suspend]", false);
pMenuCommon->CreateMenuItem(shutdownSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(shutdownSubMenu, MENUITEM_COMMAND, "[logoff]", NULL, "Log off", false);
pMenuCommon->CreateMenuItem(shutdownSubMenu, MENUITEM_COMMAND, "[reboot]", NULL, "Restart [reboot]", false);
pMenuCommon->CreateMenuItem(shutdownSubMenu, MENUITEM_COMMAND, "[shutdown]", NULL, "Shutdown", false);
MakeSubmenu(this, shutdownSubMenu, "Session");
pMenuCommon->CreateMenuItem(this, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(this, MENUITEM_COMMAND, "@xoblite Edit", pSettings->xobrcFile, "Edit xoblite.rc", false);
pMenuCommon->CreateMenuItem(this, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(this, MENUITEM_COMMAND, "@xoblite About", NULL, "About xoblite...", false);
char version[255];
strcpy_s(version, sizeofArray(version), "xoblite ");
strcat_s(version, sizeofArray(version), (LPSTR)GetBBVersion());
pMenuCommon->AddFooterItem(this, version);
Invalidate();
Validate();
}
MenuConfig::MenuConfig(char* pszTitle) : FolderItem(NULL, pszTitle, NULL)
{
}
MenuConfig::~MenuConfig()
{
m_pParent->RemoveChild(m_pSubMenu);
if (m_pSubMenu) delete m_pSubMenu;
m_pSubMenu = NULL;
}
bool MenuConfig::Active(bool bActivate)
{
if (bActivate && !m_bActive) UpdateFolder();
return FolderItem::Active(bActivate);
}
void MenuConfig::Attached(Menu* pMenu)
{
m_pParent = pMenu;
m_pSubMenu = new Menu(pMenuCommon->hInst);
m_pParent->AddChild(m_pSubMenu);
m_pSubMenu->SetParent(m_pParent);
}
void MenuConfig::UpdateFolder()
{
m_pSubMenu->DeleteMenuItems();
pMenuCommon->AddHeaderItem(m_pSubMenu, m_pszTitleANSI);
Menu* transparencySubMenu = MakeMenu("Transparency");
char command[128];
sprintf_s(command, sizeofArray(command), "\"@xoblite Menu Transparency\" %d 1 255", pSettings->menuTransparencyAlpha);
pMenuCommon->CreateMenuItem(transparencySubMenu, MENUITEM_EDITINT, command, NULL, "Menu:", false);
sprintf_s(command, sizeofArray(command), "\"@xoblite Menu Transparency Title\" %d 1 255", pSettings->menuTitleTransparencyAlpha);
pMenuCommon->CreateMenuItem(transparencySubMenu, MENUITEM_EDITINT, command, NULL, "Title:", false);
sprintf_s(command, sizeofArray(command), "\"@xoblite Menu Transparency Frame\" %d 1 255", pSettings->menuFrameTransparencyAlpha);
pMenuCommon->CreateMenuItem(transparencySubMenu, MENUITEM_EDITINT, command, NULL, "Frame:", false);
sprintf_s(command, sizeofArray(command), "\"@xoblite Menu Transparency Active\" %d 1 255", pSettings->menuActiveTransparencyAlpha);
pMenuCommon->CreateMenuItem(transparencySubMenu, MENUITEM_EDITINT, command, NULL, "Active:", false);
sprintf_s(command, sizeofArray(command), "\"@xoblite Menu Transparency Grip\" %d 1 255", pSettings->menuGripTransparencyAlpha);
pMenuCommon->CreateMenuItem(transparencySubMenu, MENUITEM_EDITINT, command, NULL, "Grip:", false);
MakeSubmenu(m_pSubMenu, transparencySubMenu, "Transparency");
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite Menu ToggleRoundedCorners", NULL, "Rounded corners", pSettings->menuRoundedCorners);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite Menu ToggleSeparators", NULL, "Hide separators", !pSettings->menuSeparators);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_COMMAND, "@xoblite Edit", pSettings->menuFile, "Edit menu.rc", false);
pMenuCommon->AddFooterItem(m_pSubMenu, "");
m_pSubMenu->Invalidate();
m_pSubMenu->Validate();
}
GlobalConfig::GlobalConfig(char* pszTitle) : FolderItem(NULL, pszTitle, NULL)
{
}
GlobalConfig::~GlobalConfig()
{
m_pParent->RemoveChild(m_pSubMenu);
if (m_pSubMenu) delete m_pSubMenu;
m_pSubMenu = NULL;
}
bool GlobalConfig::Active(bool bActivate)
{
if (bActivate && !m_bActive) UpdateFolder();
return FolderItem::Active(bActivate);
}
void GlobalConfig::Attached(Menu* pMenu)
{
m_pParent = pMenu;
m_pSubMenu = new Menu(pMenuCommon->hInst);
m_pParent->AddChild(m_pSubMenu);
m_pSubMenu->SetParent(m_pParent);
}
void GlobalConfig::UpdateFolder()
{
m_pSubMenu->DeleteMenuItems();
pMenuCommon->AddHeaderItem(m_pSubMenu, m_pszTitleANSI);
char command[128];
sprintf_s(command, sizeofArray(command), "\"@xoblite Global HiDPI\" %d 1 4", pSettings->scalingFactorHiDPI);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_EDITINT, command, NULL, "HiDPI scaling factor:", false);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite Global ToggleMultiMonitorPlacements", NULL, "Multi-monitor placements", pSettings->multimonPlacements);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite Global ToggleFullscreenDetection", NULL, "Fullscreen detection", pSettings->fullscreenDetection);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite Global ToggleSoundFX", NULL, "Enable sound effects", pSettings->enableSoundFX);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite Global ToggleDesignerMode", NULL, "Enable Designer mode", pSettings->designerModeEnabled);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite ToggleWriteProtection", NULL, "Write protection", pSettings->writeProtection);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite Global ToggleRootCommands", NULL, "Disable rootCommands", pSettings->disableRootCommands);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite Global ToggleThemeFonts", NULL, "Disable theme fonts", pSettings->disableThemeFonts);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite Global ToggleScriptSupport", NULL, "Disable @Script support", pSettings->disableScriptSupport);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
Menu* editorSubMenu = MakeMenu("Preferred editor");
pMenuCommon->CreateMenuItem(editorSubMenu, MENUITEM_EDITSTRING, "@xoblite Global SetEditor", pSettings->preferredEditor, pSettings->preferredEditor, false);
MakeSubmenu(m_pSubMenu, editorSubMenu, "Preferred editor");
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_COMMAND, "@xoblite Run", NULL, "@xoblite Run...", false);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_COMMAND, "@xoblite CheckForUpdates", NULL, "Check for updates...", false);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_COMMAND, "[exec]", "http://xoblite.net/shell/", "Online documentation...", false);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_COMMAND, "@xoblite Edit", "$Blackbox$\\xoblite.log", "Open xoblite.log", false);
if (pSettings->underExplorer)
{
{
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite EmptyRecycleBin", NULL, "Empty Recycle Bin...", false);
}
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite ToggleExplorer", NULL, "Hide Explorer taskbar", pSettings->explorerHidden);
}
pMenuCommon->AddFooterItem(m_pSubMenu, "");
m_pSubMenu->Invalidate();
m_pSubMenu->Validate();
}