#include "..\API\BBApi.h"
#include "..\Menu\MenuCommon.h"
#include "DockMenu.h"
#include "..\Plugins\PluginsMenu.h"
#include "..\Menu\MenuItem.h"
#include "..\Menu\FolderItem.h"
#include "..\Settings\ConfigMenu.h"
#include "Dock.h"
#include "..\Settings\Settings.h"
#include "..\Plugins\PluginManager.h"
extern MenuCommon *pMenuCommon;
extern Dock *pDock;
extern Settings *pSettings;
extern PluginManager *pPluginManager;
char dockBroam[] = "@xoblite Dock";
char dockPlacementBroam[] = "@xoblite Dock Placement";
char dockOrientationBroam[] = "@xoblite Dock Orientation";
#define GROUP_DOCK_PLACEMENT 1
#define GROUP_DOCK_ORIENTATION 2
DockMenu::DockMenu(char* pszTitle) : FolderItem(NULL, pszTitle, NULL)
{
}
DockMenu::~DockMenu()
{
m_pParent->RemoveChild(m_pSubMenu);
if (m_pSubMenu) delete m_pSubMenu;
m_pSubMenu = NULL;
}
bool DockMenu::Active(bool bActivate)
{
if (bActivate && !m_bActive) UpdateFolder();
return FolderItem::Active(bActivate);
}
void DockMenu::Attached(Menu* pMenu)
{
m_pParent = pMenu;
m_pSubMenu = new Menu(pMenuCommon->hInst);
m_pParent->AddChild(m_pSubMenu);
m_pSubMenu->SetParent(m_pParent);
}
void DockMenu::UpdateFolder()
{
m_pSubMenu->DeleteMenuItems();
pMenuCommon->AddHeaderItem(m_pSubMenu, m_pszTitleANSI);
MenuItem* groupItem;
char command[50];
Menu* placementSubMenu = MakeMenu("Placement");
if (pSettings->DockPlacement.placement == PLACEMENT_MANUAL)
{
char itemTitle[128];
sprintf_s(itemTitle, sizeof(itemTitle), "<%s>", pSettings->DockPlacement.rcString);
groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_EDITSTRING, dockPlacementBroam, pSettings->DockPlacement.rcString, itemTitle, true);
}
else groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_EDITSTRING, dockPlacementBroam, "Manual xC y50", "<Manual xC y50>", false);
groupItem->AddToSelectionGroup(GROUP_DOCK_PLACEMENT);
pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, dockPlacementBroam, "TopLeft", "Top Left", (pSettings->DockPlacement.placement == PLACEMENT_TOP_LEFT));
groupItem->AddToSelectionGroup(GROUP_DOCK_PLACEMENT);
groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, dockPlacementBroam, "CenterLeft", "Center Left", (pSettings->DockPlacement.placement == PLACEMENT_CENTER_LEFT));
groupItem->AddToSelectionGroup(GROUP_DOCK_PLACEMENT);
groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, dockPlacementBroam, "BottomLeft", "Bottom Left", (pSettings->DockPlacement.placement == PLACEMENT_BOTTOM_LEFT));
groupItem->AddToSelectionGroup(GROUP_DOCK_PLACEMENT);
pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, dockPlacementBroam, "TopCenter", "Top Center", (pSettings->DockPlacement.placement == PLACEMENT_TOP_CENTER));
groupItem->AddToSelectionGroup(GROUP_DOCK_PLACEMENT);
groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, dockPlacementBroam, "BottomCenter", "Bottom Center", (pSettings->DockPlacement.placement == PLACEMENT_BOTTOM_CENTER));
groupItem->AddToSelectionGroup(GROUP_DOCK_PLACEMENT);
pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, dockPlacementBroam, "TopRight", "Top Right", (pSettings->DockPlacement.placement == PLACEMENT_TOP_RIGHT));
groupItem->AddToSelectionGroup(GROUP_DOCK_PLACEMENT);
groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, dockPlacementBroam, "CenterRight", "Center Right", (pSettings->DockPlacement.placement == PLACEMENT_CENTER_RIGHT));
groupItem->AddToSelectionGroup(GROUP_DOCK_PLACEMENT);
groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, dockPlacementBroam, "BottomRight", "Bottom Right", (pSettings->DockPlacement.placement == PLACEMENT_BOTTOM_RIGHT));
groupItem->AddToSelectionGroup(GROUP_DOCK_PLACEMENT);
MakeSubmenu(m_pSubMenu, placementSubMenu, "Placement");
Menu* orientationSubMenu = MakeMenu("Orientation");
groupItem = pMenuCommon->CreateMenuItem(orientationSubMenu, MENUITEM_COMMAND, dockOrientationBroam, "Horizontal", "Horizontal", !pSettings->dockVertical);
groupItem->AddToSelectionGroup(GROUP_DOCK_ORIENTATION);
groupItem = pMenuCommon->CreateMenuItem(orientationSubMenu, MENUITEM_COMMAND, dockOrientationBroam, "Vertical", "Vertical", pSettings->dockVertical);
groupItem->AddToSelectionGroup(GROUP_DOCK_ORIENTATION);
MakeSubmenu(m_pSubMenu, orientationSubMenu, "Orientation");
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
sprintf_s(command, sizeofArray(command), "\"@xoblite Dock Transparency\" %d 1 255", pSettings->dockTransparencyAlpha);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_EDITINT, command, NULL, "Transparency:", false);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, dockBroam, "TogglePuzzlePositioning", "Puzzle positioning", pSettings->dockPuzzlePositioning);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, dockBroam, "ToggleAlwaysOnTop", "Always on top", pSettings->dockOnTop);
if (pSettings->DockPlacement.placement == PLACEMENT_MANUAL)
{
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, dockBroam, "ToggleSnapToEdges", "Snap to screen edges", pSettings->dockSnapToEdges);
}
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, dockBroam, "Toggle", "Hide Dock", pSettings->dockHidden);
int numberOfDockedPlugins = (int)pDock->DockPlugins.size();
char gripText[255];
sprintf_s(gripText, sizeofArray(gripText), "(%d plugin", numberOfDockedPlugins);
if (numberOfDockedPlugins != 1) strcat_s(gripText, sizeofArray(gripText), "s");
strcat_s(gripText, sizeofArray(gripText), " docked)");
pMenuCommon->AddFooterItem(m_pSubMenu, gripText);
m_pSubMenu->Invalidate();
m_pSubMenu->Validate();
}