You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
854 lines
22 KiB
854 lines
22 KiB
//
|
|
// intlmenu.cpp
|
|
//
|
|
|
|
#include "private.h"
|
|
#include "regstr.h"
|
|
#include "resource.h"
|
|
#include "globals.h"
|
|
#include "tipbar.h"
|
|
#include "cuimenu.h"
|
|
#include "intlmenu.h"
|
|
#include "balloon.h"
|
|
#include "xstring.h"
|
|
#include "helpers.h"
|
|
#include "cmydc.h"
|
|
#include "cresstr.h"
|
|
#include "cregkey.h"
|
|
#include "iconlib.h"
|
|
#include "delay.h"
|
|
#include "utbdlgs.h"
|
|
|
|
|
|
extern HINSTANCE g_hInst;
|
|
|
|
|
|
const TCHAR c_szCTFMon[] = TEXT("CTFMON.EXE");
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// misc func
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// GetBitmapFromItem
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
BOOL GetBitmapFromItem(CTipbarItem *pItem, HBITMAP *phbmp, HBITMAP *phbmpMask)
|
|
{
|
|
CTipbarButtonItem *plbiButton = NULL;
|
|
CTipbarBitmapButtonItem *plbiBitmapButton = NULL;
|
|
CTipbarBitmapItem *plbiBitmap = NULL;
|
|
CTipbarBalloonItem *plbiBalloon = NULL;
|
|
HBITMAP hbmp = NULL;
|
|
HBITMAP hbmpMask = NULL;
|
|
BOOL bRet = FALSE;
|
|
|
|
*phbmp = NULL;
|
|
*phbmpMask = NULL;
|
|
|
|
if (FAILED(pItem->QueryInterface(IID_PRIV_BUTTONITEM,
|
|
(void **)&plbiButton)) &&
|
|
FAILED(pItem->QueryInterface(IID_PRIV_BITMAPBUTTONITEM,
|
|
(void **)&plbiBitmapButton)) &&
|
|
FAILED(pItem->QueryInterface(IID_PRIV_BITMAPITEM,
|
|
(void **)&plbiBitmap)) &&
|
|
FAILED(pItem->QueryInterface(IID_PRIV_BALLOONITEM,
|
|
(void **)&plbiBalloon)))
|
|
{
|
|
goto Exit;
|
|
}
|
|
|
|
if (plbiButton)
|
|
{
|
|
HICON hIcon;
|
|
int cxSmIcon;
|
|
int cySmIcon;
|
|
#ifdef SCALE_ICON
|
|
cxSmIcon = cySmIcon = GetMenuIconHeight(NULL);
|
|
#else
|
|
cxSmIcon = 16;
|
|
cySmIcon = 16;
|
|
#endif
|
|
|
|
SIZE size = {cxSmIcon, cySmIcon};
|
|
if (SUCCEEDED(plbiButton->GetLangBarItem()->GetIcon(&hIcon)))
|
|
{
|
|
if (hIcon)
|
|
{
|
|
HICON hSmIcon = (HICON)CopyImage(hIcon,
|
|
IMAGE_ICON,
|
|
cxSmIcon, cySmIcon,
|
|
LR_COPYFROMRESOURCE);
|
|
|
|
GetIconBitmaps(hSmIcon ? hSmIcon : hIcon, &hbmp, &hbmpMask, &size);
|
|
if (hSmIcon)
|
|
DestroyIcon(hSmIcon);
|
|
DestroyIcon(hIcon);
|
|
}
|
|
}
|
|
}
|
|
else if (plbiBitmapButton)
|
|
{
|
|
SIZE sizeDef = {32,16};
|
|
SIZE size;
|
|
plbiBitmapButton->GetLangBarItem()->GetPreferredSize(&sizeDef, &size);
|
|
plbiBitmapButton->GetLangBarItem()->DrawBitmap(size.cx, size.cy, 0, &hbmp, &hbmpMask);
|
|
}
|
|
else if (plbiBitmap)
|
|
{
|
|
SIZE sizeDef = {32,16};
|
|
SIZE size;
|
|
plbiBitmap->GetLangBarItem()->GetPreferredSize(&sizeDef, &size);
|
|
plbiBitmap->GetLangBarItem()->DrawBitmap(size.cx, size.cy, 0, &hbmp, &hbmpMask);
|
|
}
|
|
else if (plbiBalloon)
|
|
{
|
|
goto Exit;
|
|
}
|
|
|
|
if (hbmp)
|
|
{
|
|
bRet = TRUE;
|
|
*phbmp = hbmp;
|
|
*phbmpMask = hbmpMask;
|
|
}
|
|
else
|
|
{
|
|
if (hbmpMask)
|
|
DeleteObject(hbmpMask);
|
|
}
|
|
|
|
Exit:
|
|
SafeRelease(plbiButton);
|
|
SafeRelease(plbiBitmapButton);
|
|
SafeRelease(plbiBitmap);
|
|
SafeRelease(plbiBalloon);
|
|
return bRet;
|
|
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// IsFELangId
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
BOOL IsFELangId(LANGID langid)
|
|
{
|
|
if ((langid == 0x411) ||
|
|
(langid == 0x404) ||
|
|
(langid == 0x412) ||
|
|
(langid == 0x804))
|
|
{
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// CheckCloseMenuAvailable
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
BOOL CheckCloseMenuAvailable()
|
|
{
|
|
ITfInputProcessorProfiles *ppip = NULL;
|
|
BOOL bRet = FALSE;
|
|
LANGID *plangid = NULL;
|
|
ULONG ulCnt;
|
|
ULONG ul;
|
|
|
|
//
|
|
// If g_bShowCloseMenu is on, show "Close" menu item anyway....
|
|
//
|
|
if (g_bShowCloseMenu)
|
|
{
|
|
bRet = TRUE;
|
|
goto Exit;
|
|
}
|
|
|
|
if (FAILED(TF_CreateInputProcessorProfiles(&ppip)))
|
|
goto Exit;
|
|
|
|
if (FAILED(ppip->GetLanguageList(&plangid, &ulCnt)))
|
|
goto Exit;
|
|
|
|
//
|
|
// If two or more languages are registered, don't show "Close" menu item.
|
|
//
|
|
for (ul = 0; ul < ulCnt; ul++)
|
|
{
|
|
//
|
|
// If the languages is FE, don't show "Close" menu item.
|
|
//
|
|
if (IsFELangId(plangid[ul]))
|
|
goto Exit;
|
|
}
|
|
|
|
bRet = TRUE;
|
|
Exit:
|
|
|
|
if (plangid)
|
|
CoTaskMemFree(plangid);
|
|
SafeRelease(ppip);
|
|
return bRet;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CUTBIntelliMenu
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// ctor
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
CUTBIntelliMenu::CUTBIntelliMenu(CTipbarWnd *ptw)
|
|
{
|
|
_ptw = ptw;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// dtor
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
CUTBIntelliMenu::~CUTBIntelliMenu()
|
|
{
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Init
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
BOOL CUTBIntelliMenu::Init()
|
|
{
|
|
int nCnt;
|
|
int i;
|
|
BOOL bRet = FALSE;
|
|
DWORD dwThreadId;
|
|
|
|
_rgItem.Clear();
|
|
|
|
_ptt = _ptw->GetFocusThread();
|
|
if (!_ptt)
|
|
goto Exit;
|
|
|
|
dwThreadId = _ptt->_dwThreadId;
|
|
|
|
// _ptt->UpdateItems();
|
|
|
|
nCnt = _ptt->_rgItem.Count();
|
|
for (i = 0; i < nCnt; i++)
|
|
{
|
|
CTipbarItem *pItem = _ptt->_rgItem.Get(i);
|
|
if (!pItem->IsHiddenStatusControl())
|
|
{
|
|
CTipbarItem **ppItem = _rgItem.Append(1);
|
|
if (ppItem)
|
|
*ppItem = pItem;
|
|
}
|
|
}
|
|
|
|
bRet = TRUE;
|
|
Exit:
|
|
return bRet;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// ShowUI
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
UINT CUTBIntelliMenu::ShowPopup(CUIFWindow *pcuiWndParent, const POINT pt, const RECT *prcArea)
|
|
{
|
|
if (_pCuiMenu)
|
|
return 0;
|
|
|
|
_pCuiMenu = CreateMenuUI();
|
|
if (!_pCuiMenu)
|
|
return 0;
|
|
|
|
UINT uRet = _pCuiMenu->ShowModalPopup(pcuiWndParent, prcArea, TRUE);
|
|
|
|
delete _pCuiMenu;
|
|
_pCuiMenu = NULL;
|
|
return uRet;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// CreateMenuUI
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
CUTBMenuWnd *CUTBIntelliMenu::CreateMenuUI()
|
|
{
|
|
CUTBMenuWnd *pCuiMenu;
|
|
CUTBMenuItem *pCuiItem;
|
|
int i;
|
|
BOOL fInsertedItem = FALSE;
|
|
DWORD dwCat = -1;
|
|
|
|
if (!_ptw)
|
|
{
|
|
Assert(0);
|
|
return NULL;
|
|
}
|
|
|
|
pCuiMenu = new CUTBMenuWnd(g_hInst, g_dwMenuStyle, 0);
|
|
if (!pCuiMenu)
|
|
return NULL;
|
|
|
|
pCuiMenu->Initialize();
|
|
|
|
if (!_ptw->IsInDeskBand() || !_ptw->IsSFNoExtraIcon())
|
|
{
|
|
for (i = 0; i < _rgItem.Count(); i++)
|
|
{
|
|
CTipbarItem *pItem = _rgItem.Get(i);
|
|
HBITMAP hbmp = NULL;
|
|
HBITMAP hbmpMask = NULL;
|
|
CItemSortScore *pscore = pItem->GetItemSortScore();
|
|
|
|
if (!GetBitmapFromItem(pItem, &hbmp, &hbmpMask))
|
|
continue;
|
|
|
|
pCuiItem = new CUTBMenuItem(pCuiMenu);
|
|
|
|
if (!pCuiItem)
|
|
break;
|
|
|
|
if (dwCat != pscore->GetCat())
|
|
{
|
|
if (dwCat != -1)
|
|
{
|
|
pCuiMenu->InsertSeparator();
|
|
}
|
|
}
|
|
|
|
dwCat = pscore->GetCat();
|
|
|
|
pCuiItem->Initialize();
|
|
pCuiItem->Init(i, pItem->GetDescriptionRef());
|
|
if (pItem->IsVisibleInToolbar())
|
|
pCuiItem->Check(TRUE);
|
|
|
|
if (hbmp)
|
|
pCuiItem->SetBitmap(hbmp);
|
|
|
|
if (hbmpMask)
|
|
pCuiItem->SetBitmapMask(hbmpMask);
|
|
|
|
pCuiMenu->InsertItem(pCuiItem);
|
|
fInsertedItem = TRUE;
|
|
}
|
|
|
|
if (fInsertedItem)
|
|
pCuiMenu->InsertSeparator();
|
|
}
|
|
|
|
if (_ptw->IsInDeskBand())
|
|
{
|
|
if (!_ptw->IsSFNoExtraIcon())
|
|
{
|
|
pCuiItem = InsertItem(pCuiMenu,
|
|
IDM_NONOTIFICATIONICONS,
|
|
IDS_NOTIFICATIONICONS);
|
|
|
|
if (pCuiItem)
|
|
pCuiItem->Check(TRUE);
|
|
}
|
|
else
|
|
{
|
|
pCuiItem = InsertItem(pCuiMenu, IDM_NOTIFICATIONICONS, IDS_NOTIFICATIONICONS);
|
|
}
|
|
|
|
//
|
|
// Always show the extra additional icons in case of single keyboard
|
|
// layout.
|
|
//
|
|
if (_ptw->IsSingleKeyboardLayout())
|
|
{
|
|
if (pCuiItem)
|
|
{
|
|
pCuiItem->Check(TRUE);
|
|
pCuiItem->Gray(TRUE);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (pCuiItem)
|
|
pCuiItem->Gray(FALSE);
|
|
}
|
|
InsertItem(pCuiMenu, IDM_ADJUSTLANGBAND, IDS_ADJUSTLANGBAND);
|
|
}
|
|
|
|
if (pCuiItem = new CUTBMenuItem(pCuiMenu))
|
|
{
|
|
pCuiItem->Initialize();
|
|
pCuiItem->Init(IDM_SHOWINPUTCPL, CRStr(IDS_SHOWINPUTCPL));
|
|
pCuiMenu->InsertItem(pCuiItem);
|
|
}
|
|
|
|
if (pCuiItem = new CUTBMenuItem(pCuiMenu))
|
|
{
|
|
pCuiItem->Initialize();
|
|
pCuiItem->Init(IDM_RESTOREDEFAULTS, CRStr(IDS_RESTOREDEFAULTS));
|
|
pCuiMenu->InsertItem(pCuiItem);
|
|
}
|
|
|
|
|
|
return pCuiMenu;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// SelectMenuItem
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
BOOL CUTBIntelliMenu::SelectMenuItem(UINT uId)
|
|
{
|
|
UINT uCnt = _rgItem.Count();
|
|
CTipbarItem *pItem = NULL;
|
|
|
|
if (uId == IDM_SHOWINPUTCPL)
|
|
{
|
|
TF_RunInputCPL();
|
|
}
|
|
else if (uId == IDM_RESTOREDEFAULTS)
|
|
{
|
|
if (_ptw)
|
|
_ptw->ClearLBItemList();
|
|
}
|
|
else if (uId == IDM_NOTIFICATIONICONS)
|
|
{
|
|
if (_ptw)
|
|
{
|
|
_ptw->ClearDeskbandSizeAdjusted();
|
|
_ptw->GetLangBarMgr()->ShowFloating(TF_SFT_EXTRAICONSONMINIMIZED);
|
|
}
|
|
}
|
|
else if (uId == IDM_NONOTIFICATIONICONS)
|
|
{
|
|
if (_ptw)
|
|
{
|
|
_ptw->ClearDeskbandSizeAdjusted();
|
|
_ptw->GetLangBarMgr()->ShowFloating(TF_SFT_NOEXTRAICONSONMINIMIZED);
|
|
}
|
|
}
|
|
else if (uId == IDM_ADJUSTLANGBAND)
|
|
{
|
|
if (_ptw)
|
|
_ptw->AdjustDeskBandSize(TRUE);
|
|
}
|
|
else if (IDM_ADDREMOVESTART <= uId)
|
|
{
|
|
pItem = _ptt->_rgItem.Get(uId - IDM_ADDREMOVESTART);
|
|
}
|
|
else if (uCnt > uId)
|
|
{
|
|
pItem = _rgItem.Get(uId);
|
|
}
|
|
|
|
if (pItem)
|
|
{
|
|
LBDemoteLevel lbdl = pItem->IsVisibleInToolbar() ? DL_HIDDENLEVEL2 : DL_SHOWN;
|
|
if (lbdl != DL_SHOWN)
|
|
{
|
|
BOOL fFound = FALSE;
|
|
int i;
|
|
CMyRegKey key;
|
|
|
|
for (i = 0; i < _ptt->_rgItem.Count(); i++)
|
|
{
|
|
CTipbarItem *pItemTmp = _ptt->_rgItem.Get(i);
|
|
if (pItemTmp)
|
|
{
|
|
if (pItemTmp == pItem)
|
|
continue;
|
|
|
|
if (pItemTmp->IsHideOnNoOtherItems())
|
|
continue;
|
|
|
|
if (!pItemTmp->IsVisibleInToolbar())
|
|
continue;
|
|
|
|
fFound = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!fFound)
|
|
{
|
|
int nRet = MessageBox(_ptt->_ptw->GetWnd(),
|
|
CRStr2(IDS_NOMOREITEM),
|
|
CRStr(IDS_LANGBAR),
|
|
MB_YESNO);
|
|
if (nRet != IDYES)
|
|
return TRUE;
|
|
|
|
//
|
|
// we close language bar instead of hiding the item.
|
|
//
|
|
_ptt->_ptw->GetLangBarMgr()->ShowFloating(TF_SFT_HIDDEN);
|
|
if (key.Open(HKEY_CURRENT_USER, REGSTR_PATH_RUN, KEY_ALL_ACCESS) == S_OK)
|
|
key.DeleteValue(c_szCTFMon);
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
_ptw->_itemList.SetDemoteLevel(*pItem->GetGUID(), lbdl);
|
|
|
|
if (lbdl == DL_SHOWN)
|
|
_ptw->_itemList.StartDemotingTimer(*pItem->GetGUID(), TRUE);
|
|
|
|
//
|
|
// we adjust the deskband if Item is added or removed by
|
|
// the end user. But we don't want to adjust if there is a room
|
|
// to draw all items.
|
|
//
|
|
_ptw->ClearDeskbandSizeAdjusted();
|
|
_ptw->SetAdjustDeskbandIfNoRoom();
|
|
|
|
pItem->AddRemoveMeToUI(lbdl == DL_SHOWN);
|
|
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CUTBContextMenu
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// ctor
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
CUTBContextMenu::CUTBContextMenu(CTipbarWnd *ptw)
|
|
{
|
|
_ptw = ptw;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// dtor
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
CUTBContextMenu::~CUTBContextMenu()
|
|
{
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Init
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
BOOL CUTBContextMenu::Init()
|
|
{
|
|
BOOL bRet = FALSE;
|
|
DWORD dwThreadId;
|
|
|
|
_ptt = _ptw->GetFocusThread();
|
|
if (!_ptt)
|
|
return FALSE;
|
|
|
|
dwThreadId = _ptt->_dwThreadId;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// ShowUI
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
UINT CUTBContextMenu::ShowPopup(CUIFWindow *pcuiWndParent, const POINT pt, const RECT *prcArea, BOOL fExtendMenuItems)
|
|
{
|
|
if (g_bWinLogon)
|
|
return 0;
|
|
|
|
if (_pCuiMenu)
|
|
return CUI_MENU_UNSELECTED;
|
|
|
|
if (!(_pCuiMenu = CreateMenuUI(fExtendMenuItems)))
|
|
return 0;
|
|
|
|
UINT uRet = _pCuiMenu->ShowModalPopup(pcuiWndParent, prcArea, TRUE);
|
|
|
|
delete _pCuiMenu;
|
|
_pCuiMenu = NULL;
|
|
return uRet;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// IsTransparecyAvailable
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
BOOL IsTransparecyAvailable()
|
|
{
|
|
HDC hdc;
|
|
BOOL bRet;
|
|
|
|
if (!IsOnNT5())
|
|
return FALSE;
|
|
|
|
hdc = GetDC(NULL);
|
|
if (!hdc)
|
|
return FALSE;
|
|
|
|
bRet = (GetDeviceCaps(hdc, BITSPIXEL ) > 8) ? TRUE : FALSE;
|
|
|
|
ReleaseDC(NULL, hdc);
|
|
return bRet;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// CreateMenuUI
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
CUTBMenuWnd *CUTBContextMenu::CreateMenuUI(BOOL fExtendMenuItems)
|
|
{
|
|
CUTBMenuWnd *pCuiMenu;
|
|
BOOL fInsertedItem = FALSE;
|
|
DWORD dwCat = -1;
|
|
DWORD dwStatus;
|
|
CUTBMenuItem *pMenuItem;
|
|
|
|
if (FAILED(_ptw->GetLangBarMgr()->GetShowFloatingStatus(&dwStatus)))
|
|
return NULL;
|
|
|
|
pCuiMenu = new CUTBMenuWnd(g_hInst, g_dwMenuStyle, 0);
|
|
if (!pCuiMenu)
|
|
return NULL;
|
|
|
|
pCuiMenu->Initialize();
|
|
|
|
if (dwStatus & (TF_SFT_MINIMIZED | TF_SFT_DESKBAND))
|
|
{
|
|
pMenuItem = InsertItem(pCuiMenu, IDM_RESTORE, IDS_RESTORE);
|
|
if (pMenuItem && !_ptw->_fIsItemShownInFloatingToolbar)
|
|
pMenuItem->Gray(TRUE);
|
|
}
|
|
else
|
|
{
|
|
InsertItem(pCuiMenu, IDM_MINIMIZE, IDS_MINIMIZE);
|
|
|
|
if (fExtendMenuItems)
|
|
{
|
|
if (IsTransparecyAvailable())
|
|
{
|
|
if (dwStatus & TF_SFT_NOTRANSPARENCY)
|
|
{
|
|
InsertItem(pCuiMenu, IDM_TRANSPARENCYON, IDS_TRANSPARENCY);
|
|
}
|
|
else
|
|
{
|
|
pMenuItem = InsertItem(pCuiMenu, IDM_TRANSPARENCYOFF, IDS_TRANSPARENCY);
|
|
if (pMenuItem)
|
|
pMenuItem->Check(TRUE);
|
|
}
|
|
}
|
|
|
|
if (dwStatus & TF_SFT_LABELS)
|
|
{
|
|
pMenuItem = InsertItem(pCuiMenu, IDM_HIDELABEL, IDS_TEXTLABEL);
|
|
if (pMenuItem)
|
|
pMenuItem->Check(TRUE);
|
|
}
|
|
else
|
|
{
|
|
InsertItem(pCuiMenu, IDM_SHOWLABEL, IDS_TEXTLABEL);
|
|
}
|
|
|
|
pMenuItem = InsertItem(pCuiMenu, IDM_VERTICAL, IDS_VERTICAL);
|
|
if (pMenuItem)
|
|
pMenuItem->Check(_ptw->IsVertical());
|
|
}
|
|
}
|
|
|
|
if (fExtendMenuItems)
|
|
{
|
|
if (dwStatus & TF_SFT_EXTRAICONSONMINIMIZED)
|
|
{
|
|
pMenuItem = InsertItem(pCuiMenu,
|
|
IDM_NONOTIFICATIONICONS,
|
|
IDS_NOTIFICATIONICONS);
|
|
|
|
if (pMenuItem)
|
|
pMenuItem->Check(TRUE);
|
|
}
|
|
else
|
|
{
|
|
pMenuItem = InsertItem(pCuiMenu, IDM_NOTIFICATIONICONS, IDS_NOTIFICATIONICONS);
|
|
}
|
|
|
|
//
|
|
// Always show the extra additional icons in case of single keyboard
|
|
// layout.
|
|
//
|
|
if (_ptw->IsSingleKeyboardLayout())
|
|
{
|
|
if (pMenuItem)
|
|
{
|
|
pMenuItem->Check(TRUE);
|
|
pMenuItem->Gray(TRUE);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (pMenuItem)
|
|
pMenuItem->Gray(FALSE);
|
|
}
|
|
|
|
if (dwStatus & TF_SFT_DESKBAND)
|
|
InsertItem(pCuiMenu, IDM_ADJUSTLANGBAND, IDS_ADJUSTLANGBAND);
|
|
|
|
InsertItem(pCuiMenu, IDM_SHOWINPUTCPL, IDS_SHOWINPUTCPL);
|
|
|
|
if (CheckCloseMenuAvailable())
|
|
InsertItem(pCuiMenu, IDM_CLOSE, IDS_CLOSE);
|
|
}
|
|
|
|
return pCuiMenu;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// SelectMenuItem
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
BOOL CUTBContextMenu::SelectMenuItem(UINT uId)
|
|
{
|
|
CUTBCloseLangBarDlg *pDlg;
|
|
CUTBMinimizeLangBarDlg *pMinimizeDlg;
|
|
CMyRegKey key;
|
|
|
|
switch (uId)
|
|
{
|
|
case IDM_MINIMIZE:
|
|
//
|
|
// Use Deskband object instead of system tray icon on NT51
|
|
//
|
|
if (IsOnNT51())
|
|
{
|
|
DWORD dwStatus;
|
|
|
|
_ptw->GetLangBarMgr()->GetShowFloatingStatus(&dwStatus);
|
|
|
|
if (!(dwStatus & TF_SFT_DESKBAND))
|
|
{
|
|
_ptw->GetLangBarMgr()->ShowFloating(TF_SFT_DESKBAND);
|
|
|
|
if (pMinimizeDlg = new CUTBMinimizeLangBarDlg)
|
|
{
|
|
pMinimizeDlg->DoModal(_ptw->GetWnd());
|
|
pMinimizeDlg->_Release();
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
_ptw->GetLangBarMgr()->ShowFloating(TF_SFT_MINIMIZED);
|
|
|
|
if (pMinimizeDlg = new CUTBMinimizeLangBarDlg)
|
|
{
|
|
pMinimizeDlg->DoModal(_ptw->GetWnd());
|
|
pMinimizeDlg->_Release();
|
|
}
|
|
break;
|
|
}
|
|
|
|
case IDM_RESTORE:
|
|
_ptw->GetLangBarMgr()->ShowFloating(TF_SFT_SHOWNORMAL);
|
|
break;
|
|
|
|
case IDM_VERTICAL:
|
|
_ptw->SetVertical(!_ptw->IsVertical());
|
|
break;
|
|
|
|
case IDM_CLOSE:
|
|
if (pDlg = new CUTBCloseLangBarDlg)
|
|
{
|
|
int nRet = pDlg->DoModal(_ptw->GetWnd());
|
|
pDlg->_Release();
|
|
|
|
if (!nRet)
|
|
{
|
|
//
|
|
// if we don't show the dialog box,
|
|
// we close the language bar now.
|
|
//
|
|
DoCloseLangbar();
|
|
}
|
|
}
|
|
break;
|
|
|
|
case IDM_TRANSPARENCYON:
|
|
_ptw->GetLangBarMgr()->ShowFloating(TF_SFT_LOWTRANSPARENCY);
|
|
break;
|
|
|
|
case IDM_TRANSPARENCYOFF:
|
|
_ptw->GetLangBarMgr()->ShowFloating(TF_SFT_NOTRANSPARENCY);
|
|
break;
|
|
|
|
case IDM_SHOWLABEL:
|
|
_ptw->GetLangBarMgr()->ShowFloating(TF_SFT_LABELS);
|
|
break;
|
|
|
|
case IDM_HIDELABEL:
|
|
_ptw->GetLangBarMgr()->ShowFloating(TF_SFT_NOLABELS);
|
|
break;
|
|
|
|
case IDM_SHOWINPUTCPL:
|
|
TF_RunInputCPL();
|
|
break;
|
|
|
|
case IDM_NOTIFICATIONICONS:
|
|
_ptw->ClearDeskbandSizeAdjusted();
|
|
_ptw->GetLangBarMgr()->ShowFloating(TF_SFT_EXTRAICONSONMINIMIZED);
|
|
break;
|
|
|
|
case IDM_NONOTIFICATIONICONS:
|
|
_ptw->ClearDeskbandSizeAdjusted();
|
|
_ptw->GetLangBarMgr()->ShowFloating(TF_SFT_NOEXTRAICONSONMINIMIZED);
|
|
break;
|
|
|
|
case IDM_ADJUSTLANGBAND:
|
|
_ptw->AdjustDeskBandSize(TRUE);
|
|
break;
|
|
}
|
|
|
|
|
|
return TRUE;
|
|
}
|