5#include "Stroika/Foundation/StroikaPreComp.h" 
   11#include "LedItResources.h" 
   15#if qStroika_Foundation_Common_Platform_Windows 
   22ColorMenu::ColorMenu ()
 
   24    VERIFY (CreatePopupMenu ());
 
   25    ASSERT (GetMenuItemCount () == 0);
 
   26    for (UINT i = 0; i <= 15; ++i) {
 
   27        DISABLE_COMPILER_MSC_WARNING_START (4312)
 
   28        VERIFY (AppendMenu (MF_OWNERDRAW, kBaseFontColorCmd + i, reinterpret_cast<LPCTSTR> (kBaseFontColorCmd + i)));
 
   29        DISABLE_COMPILER_MSC_WARNING_END (4312)
 
   36COLORREF ColorMenu::GetColor (UINT 
id)
 
   38    return FontCmdToColor (
id).GetOSRep ();
 
   41Color ColorMenu::FontCmdToColor (UINT cmd)
 
   43    ASSERT (cmd >= kBaseFontColorCmd);
 
   44    ASSERT (cmd <= kLastFontNamedColorCmd);
 
   49            return Color::kMaroon;
 
   51            return Color::kDarkGreen;
 
   55            return Color::kNavyBlue;
 
   57            return Color::kPurple;
 
   63            return Color::kSilver;
 
   69            return Color::kYellow;
 
   72        case kFuchsiaColorCmd:
 
   73            return Color::kMagenta;
 
   84UINT ColorMenu::FontColorToCmd (Color color)
 
   86    for (UINT i = kBaseFontColorCmd; i <= kLastFontNamedColorCmd; ++i) {
 
   87        if (FontCmdToColor (i) == color) {
 
   91    return kFontColorOtherCmd;
 
   94void ColorMenu::DrawItem (LPDRAWITEMSTRUCT lpDIS)
 
   96    ASSERT (lpDIS->CtlType == ODT_MENU);
 
   97    UINT 
id = (UINT)(WORD)lpDIS->itemID;
 
   98    ASSERT (
id == lpDIS->itemData);
 
   99    ASSERT (
id >= kBaseFontColorCmd);
 
  100    ASSERT (
id <= kLastFontNamedColorCmd);
 
  102    dc.Attach (lpDIS->hDC);
 
  104    CRect rc (lpDIS->rcItem);
 
  105    ASSERT (rc.Width () < 500);
 
  106    if (lpDIS->itemState & ODS_FOCUS)
 
  107        dc.DrawFocusRect (&rc);
 
  109    COLORREF cr = (lpDIS->itemState & ODS_SELECTED) ? ::GetSysColor (COLOR_HIGHLIGHT) : dc.GetBkColor ();
 
  111    CBrush brushFill (cr);
 
  112    cr = dc.GetTextColor ();
 
  114    if (lpDIS->itemState & ODS_SELECTED)
 
  115        dc.SetTextColor (::GetSysColor (COLOR_HIGHLIGHTTEXT));
 
  117    int nBkMode = dc.SetBkMode (TRANSPARENT);
 
  118    dc.FillRect (&rc, &brushFill);
 
  122    strColor.LoadString (
id);
 
  123    dc.TextOut (rc.left, rc.top, strColor, strColor.GetLength ());
 
  127    rc.right = rc.left + 40;
 
  128    CBrush  brush (GetColor (
id));
 
  129    CBrush* pOldBrush = dc.SelectObject (&brush);
 
  132    dc.SelectObject (pOldBrush);
 
  133    dc.SetTextColor (cr);
 
  134    dc.SetBkMode (nBkMode);
 
  139void ColorMenu::MeasureItem (LPMEASUREITEMSTRUCT lpMIS)
 
  141    ASSERT (lpMIS->CtlType == ODT_MENU);
 
  142    UINT 
id = (UINT)(WORD)lpMIS->itemID;
 
  143    ASSERT (
id == lpMIS->itemData);
 
  144    ASSERT (
id >= kBaseFontColorCmd);
 
  145    ASSERT (
id <= kLastFontNamedColorCmd);
 
  146    class CDisplayIC : 
public CDC {
 
  150            CreateIC (_T(
"DISPLAY"), NULL, NULL, NULL);
 
  155    strColor.LoadString (
id);
 
  156    CSize sizeText = dc.GetTextExtent (strColor, strColor.GetLength ());
 
  157    ASSERT (sizeText.cx < 500);
 
  158    lpMIS->itemWidth  = sizeText.cx + 50;
 
  159    lpMIS->itemHeight = sizeText.cy;