[EXPLORER] start reworking some code for loading/saving settings implementation CORE...
[reactos.git] / reactos / base / shell / explorer / trayntfy.cpp
index 73a35ae..00015fa 100644 (file)
@@ -26,7 +26,7 @@
 /*
  * SysPagerWnd
  */
-static const WCHAR szSysPagerWndClass [] = TEXT("SysPager");
+static const WCHAR szSysPagerWndClass [] = L"SysPager";
 
 // Data comes from shell32/systray.cpp -> TrayNotifyCDS_Dummy
 typedef struct _SYS_PAGER_COPY_DATA
@@ -86,7 +86,7 @@ public:
     {
         TBBUTTON tbBtn;
         NOTIFYICONDATA * notifyItem;
-        WCHAR text [] = TEXT("");
+        WCHAR text[] = L"";
 
         int index = FindItemByIconData(iconData, &notifyItem);
         if (index >= 0)
@@ -164,7 +164,7 @@ public:
         if (iconData->uFlags & NIF_ICON)
         {
             tbbi.dwMask |= TBIF_IMAGE;
-            tbbi.iImage = ImageList_AddIcon(m_ImageList, iconData->hIcon);
+            tbbi.iImage = ImageList_ReplaceIcon(m_ImageList, index, iconData->hIcon);
         }
 
         if (iconData->uFlags & NIF_TIP)
@@ -209,8 +209,6 @@ public:
         if (index < 0)
             return FALSE;
 
-        DeleteButton(index);
-
         if (!(notifyItem->dwState & NIS_HIDDEN))
         {
             m_VisibleButtonCount--;
@@ -218,6 +216,22 @@ public:
 
         delete notifyItem;
 
+        ImageList_Remove(m_ImageList, index);
+
+        int count = GetButtonCount();
+
+        /* shift all buttons one index to the left -- starting one index right
+           from item to delete -- to preserve their correct icon and tip */
+        for (int i = index; i < count - 1; i++)
+        {
+            notifyItem = GetItemData(i + 1);
+            SetItemData(i, notifyItem);
+            UpdateButton(notifyItem);
+        }
+
+        /* Delete the right-most, now obsolete button */
+        DeleteButton(count - 1);
+
         return TRUE;
     }
 
@@ -308,7 +322,7 @@ private:
     LRESULT OnMouseEvent(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
     {
         POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };
-        
+
         INT iBtn = HitTest(&pt);
 
         if (iBtn >= 0)
@@ -345,7 +359,7 @@ private:
 
             POINT ptItem = { rcItem.left, rcItem.top };
             SIZE szItem = { rcItem.right - rcItem.left, rcItem.bottom - rcItem.top };
-            ::ClientToScreen(m_hWnd, &ptItem);
+            ClientToScreen(&ptItem);
 
             ptItem.x += szItem.cx / 2;
             ptItem.y -= szTip.cy;
@@ -436,10 +450,9 @@ public:
         Toolbar.Initialize(m_hWnd);
 
         // Explicitly request running applications to re-register their systray icons
-        ::SendNotifyMessage(HWND_BROADCAST,
-                            RegisterWindowMessage(TEXT("TaskbarCreated")),
-                            0,
-                            0);
+        ::SendNotifyMessageW(HWND_BROADCAST,
+                             RegisterWindowMessageW(L"TaskbarCreated"),
+                             0, 0);
 
         return TRUE;
     }
@@ -612,7 +625,7 @@ public:
  * TrayClockWnd
  */
 
-static const WCHAR szTrayClockWndClass [] = TEXT("TrayClockWClass");
+static const WCHAR szTrayClockWndClass[] = L"TrayClockWClass";
 
 #define ID_TRAYCLOCK_TIMER  0
 #define ID_TRAYCLOCK_TIMER_INIT 1
@@ -621,14 +634,14 @@ static const struct
 {
     BOOL IsTime;
     DWORD dwFormatFlags;
-    LPCTSTR lpFormat;
+    LPCWSTR lpFormat;
 } ClockWndFormats [] = {
-        { TRUE, 0, NULL },
-        { FALSE, 0, TEXT("dddd") },
-        { FALSE, DATE_SHORTDATE, NULL }
+    { TRUE, 0, NULL },
+    { FALSE, 0, L"dddd" },
+    { FALSE, DATE_SHORTDATE, NULL }
 };
 
-#define CLOCKWND_FORMAT_COUNT (sizeof(ClockWndFormats) / sizeof(ClockWndFormats[0]))
+#define CLOCKWND_FORMAT_COUNT (_ARRAYSIZE(ClockWndFormats))
 
 #define TRAY_CLOCK_WND_SPACING_X    0
 #define TRAY_CLOCK_WND_SPACING_Y    0
@@ -673,7 +686,7 @@ public:
         ZeroMemory(&LocalTime, sizeof(LocalTime));
         ZeroMemory(&CurrentSize, sizeof(CurrentSize));
         ZeroMemory(LineSizes, sizeof(LineSizes));
-        ZeroMemory(szLines, sizeof(LineSizes));
+        ZeroMemory(szLines, sizeof(szLines));
     }
     virtual ~CTrayClockWnd() { }
 
@@ -706,7 +719,7 @@ public:
         {
             NONCLIENTMETRICS ncm = { 0 };
             ncm.cbSize = sizeof(ncm);
-            SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, FALSE);
+            SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, FALSE);
 
             hFont = CreateFontIndirectW(&ncm.lfMessageFont);
 
@@ -729,20 +742,20 @@ public:
     {
         HDC hDC;
         HFONT hPrevFont;
-        INT c, i;
+        UINT c, i;
         BOOL bRet = TRUE;
 
-        hDC = ::GetDC(m_hWnd);
+        hDC = GetDC();
         if (hDC != NULL)
         {
             if (hFont)
                 hPrevFont = (HFONT) SelectObject(hDC, hFont);
 
-            for (i = 0; i != CLOCKWND_FORMAT_COUNT && bRet; i++)
+            for (i = 0; i < CLOCKWND_FORMAT_COUNT && bRet; i++)
             {
-                if (szLines[i][0] != TEXT('\0') &&
-                    !GetTextExtentPoint(hDC, szLines[i], _tcslen(szLines[i]),
-                    &LineSizes[i]))
+                if (szLines[i][0] != L'\0' &&
+                    !GetTextExtentPointW(hDC, szLines[i], wcslen(szLines[i]),
+                                         &LineSizes[i]))
                 {
                     bRet = FALSE;
                     break;
@@ -752,14 +765,14 @@ public:
             if (hFont)
                 SelectObject(hDC, hPrevFont);
 
-            ::ReleaseDC(m_hWnd, hDC);
+            ReleaseDC(hDC);
 
             if (bRet)
             {
                 LineSpacing = 0;
 
                 /* calculate the line spacing */
-                for (i = 0, c = 0; i != CLOCKWND_FORMAT_COUNT; i++)
+                for (i = 0, c = 0; i < CLOCKWND_FORMAT_COUNT; i++)
                 {
                     if (LineSizes[i].cx > 0)
                     {
@@ -770,7 +783,7 @@ public:
 
                 if (c > 0)
                 {
-                    /* We want a spaceing of 1/2 line */
+                    /* We want a spacing of 1/2 line */
                     LineSpacing = (LineSpacing / c) / 2;
                 }
 
@@ -784,7 +797,7 @@ public:
     WORD GetMinimumSize(IN BOOL Horizontal, IN OUT PSIZE pSize)
     {
         WORD iLinesVisible = 0;
-        INT i;
+        UINT i;
         SIZE szMax = { 0, 0 };
 
         if (!LinesMeasured)
@@ -793,9 +806,7 @@ public:
         if (!LinesMeasured)
             return 0;
 
-        for (i = 0;
-            i != CLOCKWND_FORMAT_COUNT;
-            i++)
+        for (i = 0; i < CLOCKWND_FORMAT_COUNT; i++)
         {
             if (LineSizes[i].cx != 0)
             {
@@ -837,28 +848,26 @@ public:
     }
 
 
-    VOID        UpdateWnd()
+    VOID UpdateWnd()
     {
         SIZE szPrevCurrent;
-        INT BufSize, iRet, i;
+        UINT BufSize, i;
+        INT iRet;
         RECT rcClient;
 
-        ZeroMemory(LineSizes,
-            sizeof(LineSizes));
+        ZeroMemory(LineSizes, sizeof(LineSizes));
 
         szPrevCurrent = CurrentSize;
 
-        for (i = 0;
-            i != CLOCKWND_FORMAT_COUNT;
-            i++)
+        for (i = 0; i < CLOCKWND_FORMAT_COUNT; i++)
         {
-            szLines[i][0] = TEXT('\0');
-            BufSize = sizeof(szLines[0]) / sizeof(szLines[0][0]);
+            szLines[i][0] = L'\0';
+            BufSize = _countof(szLines[0]);
 
             if (ClockWndFormats[i].IsTime)
             {
                 iRet = GetTimeFormat(LOCALE_USER_DEFAULT,
-                    AdvancedSettings.bShowSeconds ? ClockWndFormats[i].dwFormatFlags : TIME_NOSECONDS,
+                    TaskBarSettings.bShowSeconds ? ClockWndFormats[i].dwFormatFlags : TIME_NOSECONDS,
                     &LocalTime,
                     ClockWndFormats[i].lpFormat,
                     szLines[i],
@@ -895,7 +904,7 @@ public:
             CurrentSize = szWnd;
         }
 
-        if (::IsWindowVisible(m_hWnd))
+        if (IsWindowVisible())
         {
             InvalidateRect(NULL, TRUE);
 
@@ -906,7 +915,7 @@ public:
                 NMHDR nmh;
 
                 nmh.hwndFrom = m_hWnd;
-                nmh.idFrom = ::GetWindowLongPtr(m_hWnd, GWLP_ID);
+                nmh.idFrom = GetWindowLongPtr(GWLP_ID);
                 nmh.code = NTNWM_REALIGN;
 
                 SendMessage(hWndNotify,
@@ -917,20 +926,20 @@ public:
         }
     }
 
-    VOID        Update()
+    VOID Update()
     {
         GetLocalTime(&LocalTime);
         UpdateWnd();
     }
 
-    UINT        CalculateDueTime()
+    UINT CalculateDueTime()
     {
         UINT uiDueTime;
 
         /* Calculate the due time */
         GetLocalTime(&LocalTime);
         uiDueTime = 1000 - (UINT) LocalTime.wMilliseconds;
-        if (AdvancedSettings.bShowSeconds)
+        if (TaskBarSettings.bShowSeconds)
             uiDueTime += (UINT) LocalTime.wSecond * 100;
         else
             uiDueTime += (59 - (UINT) LocalTime.wSecond) * 1000;
@@ -947,7 +956,7 @@ public:
         return uiDueTime;
     }
 
-    BOOL        ResetTime()
+    BOOL ResetTime()
     {
         UINT uiDueTime;
         BOOL Ret;
@@ -976,7 +985,7 @@ public:
         return Ret;
     }
 
-    VOID        CalibrateTimer()
+    VOID CalibrateTimer()
     {
         UINT uiDueTime;
         BOOL Ret;
@@ -988,7 +997,7 @@ public:
 
         uiDueTime = CalculateDueTime();
 
-        if (AdvancedSettings.bShowSeconds)
+        if (TaskBarSettings.bShowSeconds)
         {
             uiWait1 = 1000 - 200;
             uiWait2 = 1000;
@@ -1038,7 +1047,8 @@ public:
     {
         RECT rcClient;
         HFONT hPrevFont;
-        int iPrevBkMode, i, line;
+        INT iPrevBkMode;
+        UINT i, line;
 
         PAINTSTRUCT ps;
         HDC hDC = (HDC) wParam;
@@ -1066,8 +1076,8 @@ public:
             rcClient.bottom = rcClient.top + CurrentSize.cy;
 
             for (i = 0, line = 0;
-                i != CLOCKWND_FORMAT_COUNT && line < VisibleLines;
-                i++)
+                 i < CLOCKWND_FORMAT_COUNT && line < VisibleLines;
+                 i++)
             {
                 if (LineSizes[i].cx != 0)
                 {
@@ -1076,7 +1086,7 @@ public:
                         TRAY_CLOCK_WND_SPACING_X,
                         rcClient.top + TRAY_CLOCK_WND_SPACING_Y,
                         szLines[i],
-                        _tcslen(szLines[i]));
+                        wcslen(szLines[i]));
 
                     rcClient.top += LineSizes[i].cy + LineSpacing;
                     line++;
@@ -1196,8 +1206,10 @@ public:
         MESSAGE_HANDLER(WM_SIZE, OnSize)
         MESSAGE_HANDLER(WM_PAINT, OnPaint)
         MESSAGE_HANDLER(WM_PRINTCLIENT, OnPaint)
+        MESSAGE_HANDLER(WM_THEMECHANGED, OnThemeChanged)
         MESSAGE_HANDLER(WM_TIMER, OnTimer)
         MESSAGE_HANDLER(WM_NCHITTEST, OnNcHitTest)
+        MESSAGE_HANDLER(WM_SETFONT, OnSetFont)
         MESSAGE_HANDLER(TCWM_GETMINIMUMSIZE, OnGetMinimumSize)
         MESSAGE_HANDLER(TCWM_UPDATETIME, OnUpdateTime)
 
@@ -1218,10 +1230,7 @@ public:
         Create(hWndParent, 0, NULL, dwStyle);
 
         if (m_hWnd != NULL)
-        {
             SetWindowTheme(m_hWnd, L"TrayNotify", NULL);
-            OnThemeChanged();
-        }
 
         return m_hWnd;
 
@@ -1497,10 +1506,10 @@ public:
 
     BOOL GetClockRect(OUT PRECT rcClock)
     {
-        if (!::IsWindowVisible(m_clock->m_hWnd))
+        if (!m_clock->IsWindowVisible())
             return FALSE;
 
-        return ::GetWindowRect(m_clock->m_hWnd, rcClock);
+        return m_clock->GetWindowRect(rcClock);
     }
 
     LRESULT OnGetMinimumSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)