Back to index

lightning-sunbird  0.9+nobinonly
Functions
utils.cpp File Reference
#include <windows.h>
#include <windowsx.h>
#include "plugin.h"

Go to the source code of this file.

Functions

HKEY openRegistry ()
BOOL IsNewMimeType (LPSTR mime)
static int getWindowStringLength (HWND hWnd, LPSTR lpsz)
void SetDlgItemTextWrapped (HWND hWnd, int iID, LPSTR szText)

Function Documentation

static int getWindowStringLength ( HWND  hWnd,
LPSTR  lpsz 
) [static]

Definition at line 76 of file utils.cpp.

{
  SIZE sz;
  HDC hDC = GetDC(hWnd);
  HFONT hWindowFont = GetWindowFont(hWnd);
  HFONT hFontOld = SelectFont(hDC, hWindowFont);
  GetTextExtentPoint32(hDC, lpsz, lstrlen(lpsz), &sz);
  POINT pt;
  pt.x = sz.cx;
  pt.y = sz.cy;
  LPtoDP(hDC, &pt, 1);
  SelectFont(hDC, hFontOld);
  ReleaseDC(hWnd, hDC);
  return (int)pt.x;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 55 of file utils.cpp.

{
  HKEY hkey = openRegistry();
  DWORD dwType, keysize = 512;
  char keybuf[512];

  if(RegQueryValueEx(hkey, mime, 0, &dwType, (LPBYTE) &keybuf, &keysize) == ERROR_SUCCESS)
  {
    // key exists, must have already been here...
    return FALSE;
  }
  else 
  {
    if(RegSetValueEx(hkey, mime, 0,  REG_SZ, (LPBYTE) "(none)", 7) != ERROR_SUCCESS)
      MessageBox(0, "Error adding MIME type value", "Default Plugin", MB_OK);

    return TRUE;
  }
}

Here is the call graph for this function:

Definition at line 44 of file utils.cpp.

{
  HKEY phkResult;

  if(RegCreateKey(HKEY_CURRENT_USER, REGISTRY_PLACE, &phkResult) != ERROR_SUCCESS)
    MessageBox(0, "Error creating Default Plugin registry key", "Default Plugin", MB_OK);

  return phkResult;
}

Here is the caller graph for this function:

void SetDlgItemTextWrapped ( HWND  hWnd,
int  iID,
LPSTR  szText 
)

Definition at line 100 of file utils.cpp.

{
  HWND hWndStatic = GetDlgItem(hWnd, iID);
  if((szText == NULL) || (lstrlen(szText) == 0))
  {
    SetDlgItemText(hWnd, iID, "");
    return;
  }

  RECT rc;
  GetClientRect(hWndStatic, &rc);

  int iStaticLength = rc.right - rc.left;
  int iStringLength = getWindowStringLength(hWndStatic, szText);

  if(iStringLength <= iStaticLength)
  {
    SetDlgItemText(hWnd, iID, szText);
    return;
  }

  int iBreaks = iStringLength/iStaticLength;
  if(iBreaks <= 0)
    return;

  char * pBuf = new char[iStringLength + iBreaks + 1];
  if(pBuf == NULL)
    return;

  lstrcpy(pBuf, "");

  int iStart = 0;
  int iLines = 0;
  for(int i = 0; i < iStringLength; i++)
  {
    char * sz = &szText[iStart];
    int iIndex = i - iStart;
    char ch = sz[iIndex + 1];

    sz[iIndex + 1] = '\0';

    int iLength = getWindowStringLength(hWndStatic, sz);

    if(iLength < iStaticLength)
    {
      sz[iIndex + 1] = ch;
      if(iLines == iBreaks)
      {
        lstrcat(pBuf, sz);
        break;
      }
      continue;
    }

    sz[iIndex + 1] = ch;  // restore zeroed element
    i--;                  // go one step back

    ch = sz[iIndex];
    sz[iIndex] = '\0';    // terminate string one char shorter

    lstrcat(pBuf, sz);    // append the string
    lstrcat(pBuf, " ");   // append space character for successful wrapping

    iStart += lstrlen(sz);// shift new start position
    sz[iIndex] = ch;      // restore zeroed element
    iLines++;             // count lines
  }

  SetDlgItemText(hWnd, iID, pBuf);

  delete [] pBuf;
}

Here is the call graph for this function: