1: /*
     2:  ============================================================================
     3:  xoblite™ -> an advanced "extended shell" for Microsoft® Windows® 11
     4:  Copyright © 2002-2026 Karl Henrik Henriksson [qwilk/@xoblite]
     5:  Copyright © 2001-2004 The Blackbox for Windows Development Team
     6:  http://xoblite.net/ + https://github.com/xoblite/
     7:  ============================================================================
     8: 
     9:   Blackbox for Windows is free software, released under the
    10:   GNU General Public License (GPL version 2 or later), with an extension
    11:   that allows linking of proprietary modules under a controlled interface.
    12:   What this means is that plugins etc. are allowed to be released
    13:   under any license the author wishes. Please note, however, that the
    14:   original Blackbox gradient math code used in Blackbox for Windows
    15:   is available under the BSD license.
    16: 
    17:   http://www.fsf.org/licenses/gpl.html
    18:   http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface
    19:   http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5
    20: 
    21:   This program is distributed in the hope that it will be useful,
    22:   but WITHOUT ANY WARRANTY; without even the implied warranty of
    23:   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    24:   GNU General Public License for more details.
    25: 
    26:   For additional license information, please read the included license.html.
    27: 
    28:  ============================================================================
    29: */
    30: 
    31: #include "ConsoleMenu.h" 
    32: #include "..\Menu\MenuCommon.h" 
    33: 
    34: extern MenuCommon *pMenuCommon;
    35: extern Settings *pSettings;
    36: 
    37: char consoleBroam[] = "@xoblite Console";
    38: char consolePlacementBroam[] = "@xoblite Console Placement";
    39: 
    40: #define GROUP_CONSOLE_PLACEMENT 1 
    41: #define GROUP_CONSOLE_TRANSPARENCY_MODE 2 
    42: 
    43: //===========================================================================
    44: 
    45: ConsoleMenu::ConsoleMenu(char* pszTitle) : FolderItem(NULL, pszTitle, NULL)
    46: {
    47: }
    48: 
    49: ConsoleMenu::~ConsoleMenu()
    50: {
    51:     m_pParent->RemoveChild(m_pSubMenu);
    52:     if (m_pSubMenu) delete m_pSubMenu;
    53:     m_pSubMenu = NULL;
    54: }
    55: 
    56: //===========================================================================
    57: 
    58: bool ConsoleMenu::Active(bool bActivate)
    59: {
    60:     if (bActivate && !m_bActive) UpdateFolder();
    61:     return FolderItem::Active(bActivate);
    62: }
    63: 
    64: void ConsoleMenu::Attached(Menu* pMenu)
    65: {
    66:     m_pParent = pMenu;
    67:     m_pSubMenu = new Menu(pMenuCommon->hInst);
    68:     m_pParent->AddChild(m_pSubMenu);
    69:     m_pSubMenu->SetParent(m_pParent);
    70: }
    71: 
    72: //===========================================================================
    73: 
    74: void ConsoleMenu::UpdateFolder()
    75: {
    76:     m_pSubMenu->DeleteMenuItems();
    77:     pMenuCommon->AddHeaderItem(m_pSubMenu, m_pszTitleANSI);
    78: 
    79:     MenuItem* groupItem;
    80:     char command[50];
    81: 
    82:     //====================
    83: 
    84:     Menu* placementSubMenu = MakeMenu("Placement");
    85: 
    86:     if (pSettings->ConsolePlacement.placement == PLACEMENT_MANUAL)
    87:     {
    88:         char itemTitle[128];
    89:         sprintf_s(itemTitle, sizeof(itemTitle), "<%s>", pSettings->ConsolePlacement.rcString);
    90:         groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_EDITSTRING, consolePlacementBroam, pSettings->ConsolePlacement.rcString, itemTitle, true);
    91:     }
    92:     else groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_EDITSTRING, consolePlacementBroam, "Manual xC yC", "<Manual xC yC>", false);
    93:     groupItem->AddToSelectionGroup(GROUP_CONSOLE_PLACEMENT);
    94:     pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
    95:     groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, consolePlacementBroam, "TopLeft", "Top Left", (pSettings->ConsolePlacement.placement == PLACEMENT_TOP_LEFT));
    96:     groupItem->AddToSelectionGroup(GROUP_CONSOLE_PLACEMENT);
    97:     groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, consolePlacementBroam, "CenterLeft", "Center Left", (pSettings->ConsolePlacement.placement == PLACEMENT_CENTER_LEFT));
    98:     groupItem->AddToSelectionGroup(GROUP_CONSOLE_PLACEMENT);
    99:     groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, consolePlacementBroam, "BottomLeft", "Bottom Left", (pSettings->ConsolePlacement.placement == PLACEMENT_BOTTOM_LEFT));
   100:     groupItem->AddToSelectionGroup(GROUP_CONSOLE_PLACEMENT);
   101:     pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
   102:     groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, consolePlacementBroam, "TopCenter", "Top Center", (pSettings->ConsolePlacement.placement == PLACEMENT_TOP_CENTER));
   103:     groupItem->AddToSelectionGroup(GROUP_CONSOLE_PLACEMENT);
   104:     groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, consolePlacementBroam, "CenterCenter", "Center Center", (pSettings->ConsolePlacement.placement == PLACEMENT_CENTER_CENTER));
   105:     groupItem->AddToSelectionGroup(GROUP_CONSOLE_PLACEMENT);
   106:     groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, consolePlacementBroam, "BottomCenter", "Bottom Center", (pSettings->ConsolePlacement.placement == PLACEMENT_BOTTOM_CENTER));
   107:     groupItem->AddToSelectionGroup(GROUP_CONSOLE_PLACEMENT);
   108:     pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
   109:     groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, consolePlacementBroam, "TopRight", "Top Right", (pSettings->ConsolePlacement.placement == PLACEMENT_TOP_RIGHT));
   110:     groupItem->AddToSelectionGroup(GROUP_CONSOLE_PLACEMENT);
   111:     groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, consolePlacementBroam, "CenterRight", "Center Right", (pSettings->ConsolePlacement.placement == PLACEMENT_CENTER_RIGHT));
   112:     groupItem->AddToSelectionGroup(GROUP_CONSOLE_PLACEMENT);
   113:     groupItem = pMenuCommon->CreateMenuItem(placementSubMenu, MENUITEM_COMMAND, consolePlacementBroam, "BottomRight", "Bottom Right", (pSettings->ConsolePlacement.placement == PLACEMENT_BOTTOM_RIGHT));
   114:     groupItem->AddToSelectionGroup(GROUP_CONSOLE_PLACEMENT);
   115: 
   116:     MakeSubmenu(m_pSubMenu, placementSubMenu, "Placement");
   117: 
   118:     //====================
   119: 
   120:     Menu* messagesSubMenu = MakeMenu("Number of messages");
   121: 
   122:     sprintf_s(command, sizeofArray(command), "\"@xoblite Console Messages Maximized\" %d 1 255", pSettings->consoleMaximizedMessages);
   123:     pMenuCommon->CreateMenuItem(messagesSubMenu, MENUITEM_EDITINT, command, NULL, "Maximized:", false);
   124:     sprintf_s(command, sizeofArray(command), "\"@xoblite Console Messages Restored\" %d 1 255", pSettings->consoleRestoredMessages);
   125:     pMenuCommon->CreateMenuItem(messagesSubMenu, MENUITEM_EDITINT, command, NULL, "Restored:", false);
   126: 
   127:     MakeSubmenu(m_pSubMenu, messagesSubMenu, "Number of messages");
   128: 
   129:     //====================
   130: 
   131:     pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
   132: 
   133:     sprintf_s(command, sizeofArray(command), "\"@xoblite Console Transparency\" %d 1 255", pSettings->consoleTransparencyAlpha);
   134:     pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_EDITINT, command, NULL, "Transparency:", false);
   135: 
   136:     pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite Console ToggleDesktopMode", NULL, "Desktop mode", pSettings->consoleDesktopMode);
   137:     pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite Console ToggleRoundedCorners", NULL, "Rounded corners", pSettings->consoleRoundedCorners);
   138: 
   139:     pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
   140: 
   141:     pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_COMMAND, "@xoblite Console ClearHistory", NULL, "Clear history...", false);
   142: 
   143:     pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_SEPARATOR, NULL, NULL, NULL, false);
   144: 
   145:     pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_BOOLEAN, "@xoblite Console Toggle", NULL, "Hide Console", pSettings->consoleHidden);
   146: 
   147:     //====================
   148: 
   149:     pMenuCommon->AddFooterItem(m_pSubMenu, "");
   150: 
   151:     m_pSubMenu->Invalidate();
   152:     m_pSubMenu->Validate();
   153: }
   154: 
   155: //===========================================================================
   156: