|
Placing an anchor on any edge |
Tooltip for the menu item |
Tooltip for the toolbar item
|
Tooltip for the map item
|
Titletip for the different controls
|
Tooltip with hyperlinks and hot
areas
|
Contents
Features
- Standard and balloon tooltip
- Built-in HTML-lite language for a tooltip
- Built-in support for CSS styles
- Built-in support for menus and toolbars
- Support for any size icons (max. 256 colors)
- Support for bitmaps
- Support for ImageList
- Load icons, bitmaps and strings from resources, DLLs or files
- Support Fade-in and Fade-out effects
- Support for gradient shadow for tooltip and images
- Support for applies miscellaneous effects over the any images
(lighten, darken, grayed)
- Support for hyperlinks
- Support for hot areas
- Support for tables
- Support for
CScrollView
- Extended <br> and <t> tags
- Extended resource strings for the menu and toolbars items
- Every size can be customized
- Change runtime a tooltip's text
- Full source code included!
How to integrate CPPToolTip in your
application
To integrate PPToolTip control in your application you should add next
files to your project:
Files
|
Description
|
PPTooltip.h PPTooltip.cpp |
CPPTooltip class |
|
PPHtmlDrawer.h PPHtmlDrawer.cpp |
CPPHtmlDrawer class. It's need to drawing HTML
string in tooltip body |
|
PPDrawManager.h PPDrawManager.cpp |
CPPDrawManager class is a set of methods to work
with graphics. |
CeXDib.h CeXDib.cpp |
CCeXDib class thanks to Davide Pizzolato and Davide
Calabro. This class use for extend background's
effect. |
Extend background effects by Davide Pizzolato and Davide Calabro become
available if defined USE_SHADE
:
in PPDrawManager.h
#define USE_SHADE
Create a CPPToolTip
object
Include PPTooltip.h in the header file where you want to use the
CPPToolTip window and create a member variable for the window:
CPPToolTip m_tooltip;
Now create the window. For dialog-based applications, in your
OnInitDialog:
CDialog::OnInitDialog();
m_tooltip.Create(this);
Now call AddTool
function to register a tool with the tool
tip control, so that the information stored in the tool tip is displayed
when the cursor is on the tool:
m_tooltip.AddTool(GetDlgItem(IDC_BUTTON1),
_T("Tooltip to the control IDC_BUTTON1"));
or for rectangle area
m_tooltip.AddTool(this, _T("Tooltip for rectangle area"),
CRect (100, 100, 200, 200));
Now you must add RelayEvent
function call to pass a mouse
message to a tooltip control for processing.
BOOL ... ::PreTranslateMessage(MSG* pMsg)
{
m_tooltip.RelayEvent(pMsg);
}
Using a tooltip with a
toolbar
1. Create CPPToolTip
object in the header
CMainFrame
CPPToolTip m_tooltip;
2. In CMainFrame::OnCreate()
call a
AddToolBar
method.
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
m_tooltip.Create(this);
m_tooltip.AddToolBar(&m_wndToolBar);
return 0;
}
3. Add
RelayEvent
function call to pass a mouse
message to a tooltip control for processing.
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
m_tooltip.RelayEvent(pMsg);
}
Extended string from resources
Notice, that the text for tooltips are automatically loaded from
resources.
The string format was expanded with the third parameter,
used for disabled items of the the menu and the toolbar.
Format
string in resource: Parameter1\nParameter2\nParameter3
,where :
- Parameter1 - text for the normal menu items and status bar
- Parameter2 - text for the normal toolbar items
- Parameter3 - text for the disabled menu and toolbars items
Using a tooltip with a menu
1. Create CPPToolTip
object in the header
CMainFrame
CPPToolTip m_tooltip;
2. In CMainFrame::OnCreate()
call a Create
method.
m_tooltip.Create(this);
3. Uncomments a line to enable a work with menus.
in PPTooltip.h
#define PPTOOLTIP_USE_MENU
4. Adds two handlers to CMainFrame
.
void CMainFrame::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSubMenu)
{
m_tooltip.OnMenuSelect(nItemID, nFlags, hSubMenu);
CFrameWnd::OnMenuSelect(nItemID, nFlags, hSubMenu);
}
void CMainFrame::OnEnterIdle(UINT nWhy, CWnd* pWho)
{
m_tooltip.OnEnterIdle(nWhy, pWho);
}
5. Add
RelayEvent
function call to pass a mouse
message to a tooltip control for processing.
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
m_tooltip.RelayEvent(pMsg);
}
Class Members
CPPToolTip::CPPToolTip
CPPToolTip
();
Remarks
Constructs a CPPToolTip object. You must call Create
after that.
CPPToolTip
Overview | Class
Members
CPPToolTip::Create
BOOL Create
(CWnd* pParentWnd, BOOL bBalloonSize = TRUE);
Parameters
pParentWnd
- Points to the parent window of the tooltip
control, usually a CDialog. It must not be NULL.
bBalloonSize
- If TRUE CPPToolTip object will be sets
to balloon size, otherwise to standard size.
Return Value
Nonzero if the CPPToolTip object is successfully created; otherwise
0.
Remarks
You construct a CPPToolTip in two steps. First call
the constructor to construct the CPPToolTip object; then call Create to
create the tool tip control and attach it to the CPPToolTip object.
CPPToolTip
Overview | Class
Members
CPPToolTip::SetBehaviour
void SetBehaviour(DWORD dwBehaviour = 0)
Parameters
dwBehaviour
- The behaviour of the tooltip. This
parameter can be one of the following values:
- PPTOOLTIP_MULTIPLE_SHOW - This option sets multiple show of
the tooltip for specified tool or all tools of tooltip object. With
this option the tooltip will be shown for each stop of the mouse
pointer.
- PPTOOLTIP_CLOSE_LEAVEWND - If set this flag then tooltip
will be hide when mouse pointer to leave the control.
- PPTOOLTIP_NOCLOSE_OVER - If set this flag then tooltip will
not hide if the mouse pointer over the tooltip
- PPTOOLTIP_DISABLE_AUTOPOP - a tooltip with this flag will
not hide from the autopop timer. This flag automatically adding for
Help tooltip (see ShowHelpTooltip)
Remarks
Calls the function to set the tooltip's behaviour.
CPPToolTip
Overview | Class
Members
CPPToolTip::GetBehaviour
DWORD
GetBehaviour()
Return value
The behavior of the tooltip. See the SetBehaviour
function for the list of the available flags
Remarks
Retrieves the behavior of the tooltip.
CPPToolTip
Overview | Class
Members
CPPToolTip::SetColorBk
void SetColorBk(COLORREF color)
void SetColorBk(COLORREF crBegin,
COLORREF crEnd)
void
SetColorBk(COLORREF crBegin, COLORREF crMid, COLORREF crEnd)
Parameters
color
- A COLORREF value that contains RGB information
for the solid background
crBegin
- A COLORREF value that contains RGB
information for the first color.
crMid
- A COLORREF value that contains RGB information
for the middle color.
Used with a following effects:
|
CPPDrawManager::EFFECT_HGRADIENT
CPPDrawManager::EFFECT_VGRADIENT
CPPDrawManager::EFFECT_HCGRADIENT
CPPDrawManager::EFFECT_VCGRADIENT
CPPDrawManager::EFFECT_3HGRADIENT
CPPDrawManager::EFFECT_3VGRADIENT
CPPDrawManager::EFFECT_NOISE
CPPDrawManager::EFFECT_DIAGSHADE
CPPDrawManager::EFFECT_HSHADE
CPPDrawManager::EFFECT_VSHADE CPPDrawManager::EFFECT_HBUMP
CPPDrawManager::EFFECT_VBUMP
CPPDrawManager::EFFECT_SOFTBUMP
CPPDrawManager::EFFECT_HARDBUMP
CPPDrawManager::EFFECT_METAL
|
crEnd
- A COLORREF value that contains RGB information
for the end color.
Remarks
Function sets the colors for gradient filling of background.
CPPToolTip
Overview | Class
Members
CPPToolTip::SetEffectBk
void SetEffectBk(UINT nEffect, BYTE nGranularity
= 5)
Parameters
nEffect
- This value sets the effect of the background
bitmap. Can be one of the following values:
|
CPPDrawManager::EFFECT_SOLID CPPDrawManager::EFFECT_HGRADIENT
CPPDrawManager::EFFECT_VGRADIENT
CPPDrawManager::EFFECT_HCGRADIENT
CPPDrawManager::EFFECT_VCGRADIENT
CPPDrawManager::EFFECT_3HGRADIENT
CPPDrawManager::EFFECT_3VGRADIENT
CPPDrawManager::EFFECT_NOISE
CPPDrawManager::EFFECT_DIAGSHADE
CPPDrawManager::EFFECT_HSHADE
CPPDrawManager::EFFECT_VSHADE CPPDrawManager::EFFECT_HBUMP
CPPDrawManager::EFFECT_VBUMP
CPPDrawManager::EFFECT_SOFTBUMP
CPPDrawManager::EFFECT_HARDBUMP
CPPDrawManager::EFFECT_METAL
|
nGranularity
- this parameter add an uniform noise to
the background bitmap. A good value is from 5 to 20; 0 to disable the
effect. The noise has a positive effect because it hides the palette
steps. This parameter has no effect if the nEffect
value is
from CPPDrawManager::EFFECT_SOLID
to
CPPDrawManager::EFFECT_3VGRADIENT
.
Remarks
Sets an effect for the background bitmap. Note that effect value from
CPPDrawManager::EFFECT_NOISE
to
CPPDrawManager::EFFECT_METAL
is available when
#define USE_SHADE //in PPDrawManager.h
only.
CPPToolTip
Overview | Class
Members
CPPToolTip::AddTool
void AddTool(CWnd * pWnd, DWORD
dwIdString, LPCRECT lpRectBounds = NULL, DWORD dwIDTool = 0);
void
AddTool(CWnd * pWnd, LPCTSTR lpszString = NULL, LPCRECT lpRectBounds =
NULL, DWORD dwIDTool = 0);
void AddTool(CWnd * pWnd, PPTOOLTIP_INFO &
ti);
To compatible with old version of CPPToolTip ...
void AddTool(CWnd * pWnd, DWORD
dwIdString, HICON hIcon, LPCRECT lpRectBounds = NULL, DWORD dwIDTool =
0);
void
AddTool(CWnd * pWnd, DWORD dwIdString, DWORD dwIdIcon, CSize & szIcon
= CSize(0, 0), LPCRECT lpRectBounds = NULL, DWORD dwIDTool =
0);
void
AddTool(CWnd * pWnd, LPCTSTR lpszString, HICON hIcon, LPCRECT lpRectBounds
= NULL, DWORD dwIDTool = 0);
void AddTool(CWnd * pWnd, LPCTSTR lpszString,
DWORD dwIdIcon, CSize & szIcon = CSize(0, 0), LPCRECT
lpRectBounds = NULL, DWORD dwIDTool = 0);
Parameters
pWnd
- Pointer to the window that contains the tool.
lpszString
- Pointer to the text for the tool.
dwIdString
- ID of string resource
hIcon
- Handle of the icon
dwIdIcon
- ID of icon resource
szIcon
- Specifies the width and the height, in pixels,
of the icon to load.
lpRectBounds
- Pointer to a RECT structure
containing coordinates of the tool's bounding rectangle.
The
coordinates are relative to the upper-left corner of the client area of
the window identified by pWnd.
NULL if bounding rectangle
don't uses for specified window
dwIdTool
- ID of the tool
ti
- Reference to PPTOOLTIP_INFO structure containing
the parameters of the tooltip
Remarks
A tooltip control can be associated with more than one tool. Call this
function to register a tool with the tooltip control, so that the
information stored in the tooltip is displayed when the cursor is on the
tool.
CPPToolTip
Overview | Class
Members
CPPToolTip::AddToolBar
void RemoveTool(CToolBar * pBar)
Parameters
pBar
- Pointer to the toolbar window.
Remarks
Call this function to register a toolbar in the collection of toolbars
supported by a tooltip control. This method automatically remove
CBRS_TOOLTIPS style from toolbar's style to disable standard
tooltip.
CPPToolTip
Overview | Class
Members
CPPToolTip::RemoveTool
void RemoveTool(CWnd * pWnd, LPCRECT lpRectBounds
= NULL)
Parameters
pWnd
- Pointer to the window that contains the tool.
lpRectBounds
- Pointer to a RECT structure
containing coordinates of the tool's bounding rectangle.
The
coordinates are relative to the upper-left corner of the client area of
the window identified by pWnd.
NULL if bounding rectangle
don't uses for specified window.
Remarks
Call this function to removes the tool specified by pWnd
and lpRectBounds
from the collection of tools supported by a
tooltip control.
CPPToolTip
Overview | Class
Members
CPPToolTip::RemoveAllTools
void RemoveAllTools()
Remarks
Call this function to remove all tools from the collection of tools
supported by a tooltip control.
CPPToolTip
Overview | Class
Members
CPPToolTip::ShowHelpTooltip
void ShowHelpTooltip (LPPOINT pt,
DWORD dwIdText, HICON hIcon = NULL);
void ShowHelpTooltip (LPPOINT pt, DWORD dwIdText,
DWORD dwIdIcon, CSize & szIcon = CSize(0, 0));
void ShowHelpTooltip (LPPOINT pt, LPCTSTR
lpszString, HICON hIcon = NULL);
void
ShowHelpTooltip (LPPOINT pt, LPCTSTR lpszString, DWORD dwIdIcon, CSize
& szIcon = CSize(0, 0));
void
ShowHelpTooltip (LPPOINT pt, PPTOOLTIP_INFO & ti);
Parameters
pt
- Pointer to a POINT structure that receives
the screen coordinates of the tooltip's anchor
lpszString
- Pointer to the text for the help tooltip.
dwIdString
- ID of string resource
hIcon
- Handle of the icon
dwIdIcon
- ID of icon resource
szIcon
- Specifies the width and the height, in pixels,
of the icon to load.
ti
- Reference to PPTOOLTIP_INFO structure containing
the parameters of the tooltip
Remarks
Shows the help tooltip in any place of screen.
CPPToolTip
Overview | Class
Members
CPPToolTip::HideTooltip
void HideTooltip ();
Remarks
Hides the tooltip.
CPPToolTip
Overview | Class
Members
CPPToolTip::SetImageList
void SetImageList(UINT nIdBitmap,
int cx, int
cy, int nCount, COLORREF crMask )
void SetImageList(HBITMAP hBitmap, int cx, int cy,
int nCount, COLORREF crMask )
Parameters
nIdBitmap
- Resource IDs of the bitmap to be associated
with the image list
hBitmap
- Handle of the bitmap to be associated with
the image list
cx
- Dimensions of each image, in pixels.
cy
- Dimensions of each image, in pixels.
nCount
- Number of images that the image list initially
contains.
crMask
- Color used to generate a mask. Each pixel of
this color in the specified bitmap is changed to black, and the
corresponding bit in the mask is set to one.
Remarks
This function sets the image list to tooltip. After this function in
body of the tooltip string you can to use the <ilst>
tag which will be draw the image from image list in specified place.
CPPToolTip
Overview | Class
Members
CPPToolTip::SetBorder
void SetBorder(COLORREF color,
int nWidth = 1, int nHeight =
1);
void SetBorder(HBRUSH hbr, int nWidth = 1,
int nHeight = 1);
Parameters
color
- A COLORREF value that contains RGB information
to create a solid brush to be used to draw the border.
hbr
- Brush handle that identifies the brush to be used
to draw the border.
nWidth
- Specifies the width of the border in vertical
brush strokes in device units.
nHeight
- Specifies the height of the border in
horizontal brush strokes in device units.
Remarks
Call this member function to draws a border around the tooltip's region
by using the specified brush.
CPPToolTip
Overview | Class
Members
CPPToolTip::HideBorder
void HideBorder()
Remarks
The function hides the border around the tooltip's region.
CPPToolTip
Overview | Class
Members
CPPToolTip::SetTooltipShadow
void SetTooltipShadow(int nOffsetX, int
nOffsetY, BYTE nDarkenPercent ,
BOOL bGradient , int nDepthX , int nDepthY )
CPPToolTip::SetImageShadow
void SetImageShadow(int nOffsetX, int
nOffsetY, BYTE nDarkenPercent ,
BOOL bGradient , int nDepthX , int nDepthY )
Parameters
nOffsetX, nOffsetY
- The offsets of the shadow from the
object.
nDarkenPercent
- So far as colors under the shadow will
be darken (0 - 100). For gradient shadow the best value is a 50 percent,
for original - 25.
bGradient
- TRUE to use a gradient shadow.
nDepthX, nDepthY
- The gradient depths of the gradient
shadow. For better result use odd value (3, 5, 7 ...).
Remarks
This function sets the shadow to the tooltip or the images on him.
CPPToolTip
Overview | Class
Members
CPPToolTip::SetNotify
void SetNotify(BOOL bParentNotify = TRUE)
void SetNotify(HWND hWnd)
Parameters
bParentNotify
- If TRUE the control will send the
notification to parent window. Otherwise the notification will not send.
hWnd
- If non-NULL the control will send the
notification to specified window. Otherwise the notification will not
send.
Remarks
This function enables or disables the ability to send notification
messages to destination window from the control. If user enabled notify
message passing from tooltip to owner class then tooltip object sends the
UDM_TOOLTIP_DISPLAY notification before displaying. In a handler of
this notify owner class can change any parameters of tooltip displaying.
With UDM_TOOLTIP_DISPLAY notification NM_PPTOOLTIP_DISPLAY
structure is transferred, contained all necessary information.
Structure NM_PPTOOLTIP_DISPLAY looks as follows:
typedef struct tagNM_PPTOOLTIP_DISPLAY
{
NMHDR hdr;
HWND hwndTool;
LPPOINT pt;
PPTOOLTIP_INFO * ti;
} NM_PPTOOLTIP_DISPLAY;
Owner object should process notification messages to have the ability
to change tooltip appearance and placement by changing approppriate
members of this structure.
Here example:
Add next lines to header and implementation files accordingly.
afx_msg void NotifyDisplayTooltip(NMHDR * pNMHDR, LRESULT * result);
ON_NOTIFY (UDM_TOOLTIP_DISPLAY, NULL, NotifyDisplayTooltip)
and
void CParentDlg::NotifyDisplayTooltip(NMHDR * pNMHDR, LRESULT * result)
{
*result = 0;
NM_PPTOOLTIP_DISPLAY * pNotify = (NM_PPTOOLTIP_DISPLAY*)pNMHDR;
switch (CWnd::FromHandle(pNotify->hwndTool)->GetDlgCtrlID())
{
case IDC_BUTTON1:
pNotify->ti->sTooltip = _T("Dynamically changed text for BUTTON1");
break;
case IDC_BUTTON2:
pNotify->ti->crBegin = RGB (255, 0, 0);
break;
}
}
CPPToolTip
Overview | Class
Members
CPPToolTip::GetNotify
BOOL GetNotify()
Return value
TRUE if the control notified the specified window.
Remarks
This function determines if notification
messages are passed to destination window from the control or not.
CPPToolTip
Overview | Class
Members
CPPToolTip::SetCssStyles
void SetCssStyles(LPCTSTR lpszCssString );
Parameters
lpszCssString
- Pointer to the string with CSS styles
or NULL if sets the default CSS styles (like Codeproject).
Remarks
Call this method to customize the CSS styles used on
HTML page. For more information look the description on
CPPHtmlDrawer
class.
CPPToolTip
Overview | Class
Members
CPPToolTip::GetCssStyles
LPCTSTR
GetCssStyles();
Return Value
A const pointer to the string that contains the CSS styles.
Remarks
Call this method to retrive the CSS styles used on
HTML page. For more information look the description on
CPPHtmlDrawer
class.
CPPToolTip
Overview | Class
Members
CPPToolTip::SetDelayTime
void SetDelayTime(DWORD
dwDuration, DWORD dwTime)
Parameters
dwDuration
- Flag that specifies which duration value
will be retrieved. This parameter can be one of the following
values:
|
PPTOOLTIP_TIME_AUTOPOP |
Retrieve the length of time the tooltip window remains visible
if the pointer is stationary within a tool's bounding
rectangle. |
|
PPTOOLTIP_TIME_INITIAL |
Retrieve the length of time the pointer must remain stationary
within a tool's bounding rectangle before the tool tip window
appears. |
|
PPTOOLTIP_TIME_FADEIN |
Retrieve the length of time for each step of fade-in
effect. |
|
PPTOOLTIP_TIME_FADEOUT |
Retrieve the length of time for each step of fade-out
effect. |
|
For compatibility with 1.x versions of
CPPToolTip a following values are available also: |
|
TTDT_AUTOPOP |
Same PPTOOLTIP_TIME_AUTOPOP |
|
TTDT_INITIAL |
Same
PPTOOLTIP_TIME_INITIAL |
dwTime
- The specified delay time, in milliseconds.
Remarks
Call this function to set the delay time for a tooltip control. The
delay time is the length of time the cursor must remain on a tool before
the tooltip window appears. The default delay time is 500
milliseconds.
CPPToolTip
Overview | Class
Members
CPPToolTip::GetDelayTime
DWORD GetDelayTime(DWORD dwDuration) const
Return Value
The specified delay time, in milliseconds
Parameters
dwDuration
- Flag that specifies which duration value
will be retrieved. See CPPToolTip::SetDelayTime
for a description of the valid values.
Remarks
Retrieves the initial, pop-up, and reshow durations currently set for a
CPPToolTip control
CPPToolTip
Overview | Class
Members
CPPToolTip::SetDefaultSizes
void SetDefaultSizes(BOOL
bBalloonSize = TRUE)
Parameter
bBalloonSize
- If TRUE CPPToolTip object will be sets
to balloon size, otherwise to standard size.
Remarks
This function sets all sizes
as default.
CPPToolTip
Overview | Class
Members
CPPToolTip::SetSize
void SetSize(DWORD dwSizeIndex,
DWORD dwValue)
Parameters
dwSizeIndex
- Index of the size. This parameter can be
one of the following values:
|
PPTTSZ_ROUNDED_CX PPTTSZ_ROUNDED_CY |
The width and the height of the ellipse used to draw the
rounded corners. |
|
PPTTSZ_MARGIN_CX PPTTSZ_MARGIN_CY |
The left, right and top, bottom margins of the tooltip's text
from the tooltip's edges. |
|
PPTTSZ_WIDTH_ANCHOR |
The width of the tooltip's anchor. |
|
PPTTSZ_HEIGHT_ANCHOR |
The height of the tooltip's anchor. |
|
PPTTSZ_MARGIN_ANCHOR |
The margin of the tooltip's anchor from his edge. |
|
PPTTSZ_OFFSET_ANCHOR_CX PPTTSZ_OFFSET_ANCHOR_CY |
The horizontal and vertical offset of the tooltip's anchor from
the hot spot of a cursor |
dwValue
- The size in pixels.
Remarks
Call this member function to set the tooltip's sizes. For addition
information see following picture:
CPPToolTip
Overview | Class
Members
CPPToolTip::GetSize
DWORD GetSize(DWORD nSizeIndex)
Return value
The size of the specified value.
Parameters
dwSizeIndex
- Index of the size. See CPPToolTip::SetSize
for a description of the valid values.
Remarks
This method returns the size of the specified value. See CPPToolTip::SetSize
for addition information.
CPPToolTip
Overview | Class
Members
CPPToolTip::SetDirection
void SetDirection(DWORD
dwDirection = PPTOOLTIP_BOTTOMEDGE_LEFT)
Parameters
dwDirection
- mouse-pointer relative placement
direction of the tooltip. This parameter can be one of the following
values:
|
PPTOOLTIP_TOPEDGE_LEFT
|
A left corner of the top edge |
|
PPTOOLTIP_TOPEDGE_RIGHT |
A right corner of the top edge. |
|
PPTOOLTIP_TOPEDGE_CENTER |
By center of the top edge. |
|
PPTOOLTIP_BOTTOMEDGE_LEFT
|
A left corner of the bottom edge |
|
PPTOOLTIP_BOTTOMEDGE_RIGHT |
A right corner of the bottom edge. |
|
PPTOOLTIP_BOTTOMEDGE_CENTER |
By center of the bottom edge. |
|
PPTOOLTIP_LEFTEDGE_TOP |
A top corner of the left edge |
|
PPTOOLTIP_LEFTEDGE_BOTTOM |
A bottom corner of the left edge. |
|
PPTOOLTIP_LEFTEDGE_VCENTER |
By center of the left edge. |
|
PPTOOLTIP_RIGHTEDGE_TOP |
A top corner of the right edge |
|
PPTOOLTIP_RIGHTEDGE_BOTTOM |
A bottom corner of the right edge. |
|
PPTOOLTIP_RIGHTEDGE_VCENTER |
By center of the right edge. |
|
For compatibility with 1.x versions of
CPPToolTip a following values are available also: |
|
PPTOOLTIP_LEFT_TOP |
Same PPTOOLTIP_TOPEDGE_LEFT. |
|
PPTOOLTIP_RIGHT_TOP |
Same PPTOOLTIP_TOPEDGE_RIGHT. |
|
PPTOOLTIP_LEFT_BOTTOM |
Same PPTOOLTIP_BOTTOMEDGE_LEFT. |
|
PPTOOLTIP_RIGHT_BOTTOM |
Same
PPTOOLTIP_BOTTOMEDGE_RIGHT. |
Remarks
Sets a placement of the tooltip's anchor. For additional information
above on this page.
CPPToolTip
Overview | Class
Members
CPPToolTip::GetDirection
DWORD GetDirection()
Return value
A placement of the tooltip's anchor. See CPPToolTip::SetDirection
for a description of the valid values.
Remarks
Gets a placement of the tooltip's anchor.
CPPToolTip
Overview | Class
Members
CPPToolTip::SetTransparency
void SetTransparency(BYTE
nTransparency = 0)
Parameters
nTransparency
- A transparency value to be used on the
tooltip. The default 0 assumes that your tooltip is opaque and 0xFF
(255) for full transparency of the tooltip.
Remarks
Sets a transparency of the tooltip.
CPPToolTip
Overview | Class
Members
CPPToolTip::GetTransparency
BYTE GetTransparency()
Return value
A transparency value to be used on the tooltip.
CPPToolTip
Overview | Class
Members
CPPToolTip::SetDebugMode
void SetDebugMode(BOOL bDebug
)
Parameters
bDebug
- Enables or disables a debug mode for the
tooltip.
Remarks
Call this function to set a debug mode for a tooltip. In this mode
tooltip will be displaying for any control of the parent window even if
tool for this window not availabled in the tool's collection of the
tooltip. Tooltip in a debug mode is a information about window under the
mouse (owner, title, bounding rectangle, ID etc.).
CPPToolTip
Overview | Class
Members
CPPToolTip::MenuToolPosition
void MenuToolPosition(DWORD nPos
)
Parameters
nPos
- A tooltip's position. This parameter can be any
combination of single horizontal value and single vertical value of
CPPToolTip:
|
Horizontal position |
|
PPTOOLTIP_MENU_LEFT |
|
|
PPTOOLTIP_MENU_RIGHT |
|
|
PPTOOLTIP_MENU_CENTER
|
|
|
Vertical position |
|
PPTOOLTIP_MENU_TOP |
|
|
PPTOOLTIP_MENU_BOTTOM |
|
|
PPTOOLTIP_MENU_VCENTER |
|
Remarks
Sets a position of the tooltip's anchor about menu item.
CPPToolTip
Overview | Class
Members
CPPToolTip::EnableEscapeSequences
void EnableEscapeSequences(BOOL
bEnable)
Parameters
bEnable
- nables the escape sequences. If the escape
sequences was disabled HTML-lite compiler will ignore the codes less
then 0x20 (such \n, \r, \t).
Remarks
Call this function to enable or disable escape sequences in the HTML
string.
CPPToolTip
Overview | Class
Members
CPPToolTip::RelayEvent
void RelayEvent(MSG*
pMsg)
Parameters
pMsg
- Pointer to a MSG structure that contains
the message to relay.
Remarks
Call this function to pass a mouse message to a tooltip control for
processing. A tooltip control processes only the following messages, which
are sent to it by RelayEvent:
| WM_LBUTTONDOWN |
WM_MOUSEMOVE |
| WM_LBUTTONUP |
WM_RBUTTONDOWN |
| WM_MBUTTONDOWN |
WM_RBUTTONUP |
| WM_MBUTTONUP |
|
CPPToolTip
Overview | Class
Members
CPPToolTip::GetVersionI()
short GetVersionI()
Return Value
Number version of CPPToolTip.
Remarks
Returns the CPPToolTip version as a short number. Divide by 10 to get
actual version.
CPPToolTip
Overview | Class
Members
CPPToolTip::GetVersionC()
LPCTSTR GetVersionC()
Return Value
Number version of CPPToolTip as string.
Remarks
Returns the CPPToolTip version as a string.
CPPToolTip
Overview | Class
Members
PPTOOLTIP_INFO Structure
struct PPTOOLTIP_INFO
{
UINT nIDTool;
CRect rectBounds;
CString sTooltip;
UINT nMask;
UINT nStyles;
UINT nDirection;
UINT nEffect;
UINT nBehaviour;
BYTE nGranularity;
BYTE nTransparency;
COLORREF crBegin;
COLORREF crMid;
COLORREF crEnd;
} PPTOOLTIP_INFO;
|
nIDTool |
ID of the tool |
|
rectBounds |
Pointer to a RECT structure
containing coordinates of the tool's bounding rectangle. The
coordinates are relative to the upper-left corner of the client area
of the window identified by pWnd. NULL if bounding
rectangle don't uses for specified window |
|
sTooltip
|
String containing the text for the tool |
|
nMask |
Mask of parameters not by default. This parameter can
be any combination of following values:
PPTOOLTIP_MASK_STYLES
PPTOOLTIP_MASK_EFFECT
PPTOOLTIP_MASK_COLORS
PPTOOLTIP_MASK_DIRECTION
PPTOOLTIP_MASK_BEHAVIOUR
PPTOOLTIP_MASK_TRANSPARENCY |
|
nStyles |
|
|
nDirection |
This value sets a placement of the
tooltip's anchor. See CPPToolTip::SetDirection
for a description of the valid values. |
|
nEffect |
This value sets an effect of the
background bitmap. See CPPToolTip::SetEffectBk
for a description of the valid values. |
|
nBehaviour |
This value sets a behavior of the
tooltip. See the CPPToolTip::SetBehaviour
function for the list of the available flags . |
|
nGranularity |
This parameter add an uniform noise to
the background bitmap. See CPPToolTip::SetEffectBk
for a description of the valid values. |
|
nTransparency |
|
|
crBegin, crMid, crEnd |
The values sets the colors for gradient
filling of background. See CPPToolTip::SetColorBk
for a description of the valid values. |
History
| 14 Feb 2003 |
First release |
| 17 Feb 2003 |
Released version 1.1 - Added new styles PPTOOLTIP_SHOW_DISABLED
and PPTOOLTIP_SHOW_INACTIVE -
Added new feature to Create()
and SetDefaultSizes()
methods for set the type of the tooltip's size. - Fixed bug with
0 TTDT_AUTOPOP value. - Fixed bug shows the tooltip after
switch application on Alt+Tab |
| 19 Feb 2003 |
Released version 1.2 - Added support the tooltip for
rectangles - Added new FindTool,
IsExistTool
and SetAtTool
methods. - Many methods was updated. - New tool's collection
basis on CArray instead CMap - Added three members to PPTOOLTIP_INFO
structures - Removed the pointer to the window from NM_PPTOOLTIP_DISPLAY
structure - Added new demo for implementation the tooltip with
toolbars |
| 02 Apr 2003 |
Released version 1.3 - Added support the tooltip as help
window (see ShowHelpTooltip) -
Added the vertical aligns for the icon (see Styles) -
Added support the icons with difference sizes (16x16, 32x32, 48x48
etc.) - Added new behaviours -
Now the tooltip is not show if the PPTOOLTIP_INFO
members as sTooltip is empty and hIcon is
NULL . - Added two tags
<img>, <ilst> to support draw a bitmaps
and an icons inside a tooltip's text - A few minor
update
|
| 13 Apr 2003 |
Released version 1.4 - Added two tags
<bmp> and <icon> to support draw a bitmaps
and an icons inside a tooltip's text - Scales images which drawn
with <img>, <bmp> and <icon>
tags. - Added new behaviour
(PPTOOLTIP_DISABLE_AUTOPOP ) - A few minor
update
|
| 17 Apr 2003 |
Released version 1.5 - A few versions of the AddTool
methods extended a new szIcon parameter - Added a feature
to show a tooltip for child window (Thanks to Michael
Ushakov). - A few minor update
|
| 29 Mar 2004 |
Released version 2.0 - New core of a tooltip. More changes and
new features. But so there are complexities at updating the
programs using the version 1.õ to version 2.0. Sorry!!! :(
|
Thanks to ...
- Yaroslav Petrikevich for your help with writing this file.
- Davide Calabro for his class
CButtonST
in which
decisions of some questions have been found.
- Chris Maunder for his articles devoted subclassing of the
control.
- Tomasz Sowinski for his help with Tooltip.
- Michael Ushakov his help and advices on work with rectangles
and toolbars.
- Many people assisting to me the answers on CodeProject's
forum.
Known Problems
- If you can help me, please let me know so that I can incorporate
them into the next release.
Planned Enhancements
- If you have any other suggested improvements, please let me know so
that I can incorporate them into the next release.
Contacting the Author
Please send any comments
or bug reports to me via
email.


Contact Us
A contact form requires some method of emailing the contents of the form to an email address. The most common way to do this is to use some kind of server script (PHP for example). I would be happy to send you the PHP code for the contact form for your chosen template, I charge £20.00GBP for this. Simply contact me for more details.
Name
Email Address
Message
Please enter the answer to this simple math question (to prevent spam).
Math Question: 9 + 3 = ?


Medusa
Tips
- If you're hitting a single target and Split Shot is toggled on, you're still taking the damage nerf.
Stop taking Rosh or pushing creepless towers with Split Shot on.
- Illusions will either have Split Shot on or off depending on how you had it toggled before they
spawned.
- Mystic Snake bounces are not random. The Snake will always take the shortest possible bounce
once it reaches a target. This means that a Mystic Snake targeted on a melee creep will almost always bounce between other melee creeps before jumping to the ranged creep because they're always so tightly packed. It also means that if a hero is hanging around near their ranged creep, the Snake will almost definitely bounce to them before going to the rest of the creep wave.
- The way the damage scales on Mystic Snake is opposite of Fade Bolt. You're gaining damage for each
target hit, not losing it. Don't shoot the Snake directly at the enemy hero in lane if you want to get
the max damage.
- "Damn, I really wished I had Mana Shield turned off before that gank," said no Medusa ever. At a certain
point in the game (read: after the laning phase) there are very few reasons to ever have Mana Shield
turned off. Only if you're unsure if you'll have mana to use Stone Gaze should you have it off.
- Even though enemies have full magic resistance when in Stone Form, Mystic Snake will deal pure damage to
any petrified targets.
Counters
- When a Mystic Snake gets tossed out on the lane ask yourself, "Would Fade Bolt be able to jump to me
from here?" If you said yes, then you probably already got hit by it.
- Remember that Diffusal is no longer an orb effect, so consider if it's worth getting to counter Dusa's
Mana Shield.
- Your all-purpose mana burners are good against Dusa. Invoker (EMP), Nyx (Mana Burn),
Keeper of the Light (Mana Leak), Outworld Devourer (Arcane Orb and Sanity's Eclipse), Lion (Mana Drain), Clockwerk (Cog burn), Anti-Mage (Mana Break) are obvious counterpicks. Heroes who easily build
Diffusal Blade (PL, Riki, Naga, Spectre) or Necronomicon (Beastmaster, Lycan) are also good.


Badly formed controller string '{0}'. Must match `__name__ as __id__` or `__name__`.
This error occurs when $controller service is called with a string that does not match the supported controller string formats.
Supported formats:
__name__
__name__ as __identifier__
N'either __name__
or __identifier__
may contain spaces.
Example of incorrect usage that leads to this error:
<!-- unclosed ng-controller attribute messes up the format -->
<div ng-controller="myController>
or
// does not match `__name__` or `__name__ as __identifier__`
var myCtrl = $controller("mY contRoller", { $scope: newScope });
or
directive("myDirective", function() {
return {
// does not match `__name__` or `__name__ as __identifier__`
controller: "mY contRoller",
link: function() {}
};
});
To fix the examples above, ensure that the controller string matches the supported formats, and that any html attributes which are used as controller expressions are closed.
Please consult the $controller service api docs to learn more.


--- date: 2015-07-13 11:00:04 author: Jen Gray title: "PhoneGap Day EU 2015: Crosswalk - Unleash the fury of web innovation in your Android app today" format: html tags: - PhoneGap Day - Event - Community ---
A big thanks to everyone who was able to make it to PhoneGap Day EU 2015 in Amsterdam. We'll be posting more videos from the conference so check back on our blog and Youtube channel.
Today we're sharing a great session by our friends at Crosswalk that can help you navigate the fragmented Android market.
Web technologies are improving at a rapid pace. New features such as responsive design, cloud services, WebRTC, WebGL and Canvas provide developers with a great deal of potential. However, leveraging these features in a fragmented Android market is difficult, and oft-times impossible given the diversity of the various platform versions and capabilities. This session introduces the Crosswalk Project, an open-source, Chromium-based, HTML5 runtime that opens up the full set of leading-edge web innovations to Android developers and greatly reduces the fragmentation limitations. The Crosswalk Project is already available as a Cordova plugin so build and deploy steps are right at your fingertips.
Slides available here


/
30.27%
Statements
122/403
14.29%
Branches
43/301
29.23%
Functions
19/65
29.87%
Lines
118/395
File
Statements
Branches
Functions
Lines
Service/
27.49%
102/371
10.98%
29/264
25.86%
15/58
27.25%
100/367
app/
62.5%
20/32
37.84%
14/37
57.14%
4/7
64.29%
18/28


| Interface | Description |
|---|---|
| Bound<T> |
Represents a bound value expression.
|
| BoundTerm<T> |
Represents a bound term.
|
| Expression |
Represents a boolean expression tree.
|
| Literal<T> |
Represents a literal fixed value in an expression predicate
|
| Reference<T> |
Represents a variable reference in an
expression . |
| Term |
An expression that evaluates to a value.
|
| Unbound<T,B> |
Represents an unbound expression node.
|
| UnboundTerm<T> |
Represents an unbound term.
|
| Class | Description |
|---|---|
| And | |
| Binder |
Rewrites
expressions by replacing unbound named references with references to
fields in a struct schema. |
| BoundLiteralPredicate<T> | |
| BoundPredicate<T> | |
| BoundReference<T> | |
| BoundSetPredicate<T> | |
| BoundTransform<S,T> |
A transform expression.
|
| BoundUnaryPredicate<T> | |
| Evaluator |
Evaluates an
Expression for data described by a Types.StructType . |
| Expressions |
Factory methods for creating
expressions . |
| ExpressionVisitors |
Utils for traversing
expressions . |
| ExpressionVisitors.BoundExpressionVisitor<R> | Deprecated
use
ExpressionVisitors.BoundVisitor instead |
| ExpressionVisitors.BoundVisitor<R> | |
| ExpressionVisitors.ExpressionVisitor<R> | |
| False |
An
expression that is always false. |
| InclusiveMetricsEvaluator |
Evaluates an
Expression on a DataFile to test whether rows in the file may match. |
| ManifestEvaluator |
Evaluates an
Expression on a ManifestFile to test whether the file contains
matching partitions. |
| NamedReference<T> | |
| Not | |
| Or | |
| Predicate<T,C extends Term> | |
| Projections |
Utils to project expressions on rows to expressions on partitions.
|
| Projections.ProjectionEvaluator |
A class that projects expressions for a table's data rows into expressions on the table's
partition values, for a table's
partition spec . |
| ResidualEvaluator |
Finds the residuals for an
Expression the partitions in the given PartitionSpec . |
| StrictMetricsEvaluator |
Evaluates an
Expression on a DataFile to test whether all rows in the file match. |
| True |
An
expression that is always true. |
| UnboundPredicate<T> | |
| UnboundTransform<S,T> |
| Enum | Description |
|---|---|
| Expression.Operation |


|
JMS 1.1 - April 12, 2002 | |||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
A client uses a MessageProducer
object to send messages to a
destination. A MessageProducer
object is created by passing a
Destination
object to a message-producer creation method
supplied by a session.
MessageProducer
is the parent interface for all message
producers.
A client also has the option of creating a message producer without
supplying a destination. In this case, a destination must be provided with
every send operation. A typical use for this kind of message producer is
to send replies to requests using the request's JMSReplyTo
destination.
A client can specify a default delivery mode, priority, and time to live for messages sent by a message producer. It can also specify the delivery mode, priority, and time to live for an individual message.
A client can specify a time-to-live value in milliseconds for each message it sends. This value defines a message expiration time that is the sum of the message's time-to-live and the GMT when it is sent (for transacted sends, this is the time the client sends the message, not the time the transaction is committed).
A JMS provider should do its best to expire messages accurately; however, the JMS API does not define the accuracy provided.
TopicPublisher
,
QueueSender
,
Session.createProducer(javax.jms.Destination)
| Method Summary | |
void |
close()
Closes the message producer. |
int |
getDeliveryMode()
Gets the producer's default delivery mode. |
Destination |
getDestination()
Gets the destination associated with this MessageProducer . |
boolean |
getDisableMessageID()
Gets an indication of whether message IDs are disabled. |
boolean |
getDisableMessageTimestamp()
Gets an indication of whether message timestamps are disabled. |
int |
getPriority()
Gets the producer's default priority. |
long |
getTimeToLive()
Gets the default length of time in milliseconds from its dispatch time that a produced message should be retained by the message system. |
void |
send(Destination destination,
Message message)
Sends a message to a destination for an unidentified message producer. |
void |
send(Destination destination,
Message message,
int deliveryMode,
int priority,
long timeToLive)
Sends a message to a destination for an unidentified message producer, specifying delivery mode, priority and time to live. |
void |
send(Message message)
Sends a message using the MessageProducer 's
default delivery mode, priority, and time to live. |
void |
send(Message message,
int deliveryMode,
int priority,
long timeToLive)
Sends a message to the destination, specifying delivery mode, priority, and time to live. |
void |
setDeliveryMode(int deliveryMode)
Sets the producer's default delivery mode. |
void |
setDisableMessageID(boolean value)
Sets whether message IDs are disabled. |
void |
setDisableMessageTimestamp(boolean value)
Sets whether message timestamps are disabled. |
void |
setPriority(int defaultPriority)
Sets the producer's default priority. |
void |
setTimeToLive(long timeToLive)
Sets the default length of time in milliseconds from its dispatch time that a produced message should be retained by the message system. |
| Method Detail |
public void setDisableMessageID(boolean value) throws JMSException
Since message IDs take some effort to create and increase a
message's size, some JMS providers may be able to optimize message
overhead if they are given a hint that the message ID is not used by
an application. By calling the setDisableMessageID
method on this message producer, a JMS client enables this potential
optimization for all messages sent by this message producer. If the JMS
provider accepts this hint,
these messages must have the message ID set to null; if the provider
ignores the hint, the message ID must be set to its normal unique value.
Message IDs are enabled by default.
value
- indicates if message IDs are disabledJMSException
- if the JMS provider fails to set message ID to
disabled due to some internal error.public boolean getDisableMessageID() throws JMSException
JMSException
- if the JMS provider fails to determine if
message IDs are disabled due to some internal
error.public void setDisableMessageTimestamp(boolean value) throws JMSException
Since timestamps take some effort to create and increase a
message's size, some JMS providers may be able to optimize message
overhead if they are given a hint that the timestamp is not used by an
application. By calling the setDisableMessageTimestamp
method on this message producer, a JMS client enables this potential
optimization for all messages sent by this message producer. If the
JMS provider accepts this hint,
these messages must have the timestamp set to zero; if the provider
ignores the hint, the timestamp must be set to its normal value.
Message timestamps are enabled by default.
value
- indicates if message timestamps are disabledJMSException
- if the JMS provider fails to set timestamps to
disabled due to some internal error.public boolean getDisableMessageTimestamp() throws JMSException
JMSException
- if the JMS provider fails to determine if
timestamps are disabled due to some internal
error.public void setDeliveryMode(int deliveryMode) throws JMSException
Delivery mode is set to PERSISTENT
by default.
deliveryMode
- the message delivery mode for this message
producer; legal values are DeliveryMode.NON_PERSISTENT
and DeliveryMode.PERSISTENT
JMSException
- if the JMS provider fails to set the delivery
mode due to some internal error.getDeliveryMode()
,
DeliveryMode.NON_PERSISTENT
,
DeliveryMode.PERSISTENT
,
Message.DEFAULT_DELIVERY_MODE
public int getDeliveryMode() throws JMSException
JMSException
- if the JMS provider fails to get the delivery
mode due to some internal error.setDeliveryMode(int)
public void setPriority(int defaultPriority) throws JMSException
The JMS API defines ten levels of priority value, with 0 as the lowest priority and 9 as the highest. Clients should consider priorities 0-4 as gradations of normal priority and priorities 5-9 as gradations of expedited priority. Priority is set to 4 by default.
defaultPriority
- the message priority for this message producer;
must be a value between 0 and 9JMSException
- if the JMS provider fails to set the priority
due to some internal error.getPriority()
,
Message.DEFAULT_PRIORITY
public int getPriority() throws JMSException
JMSException
- if the JMS provider fails to get the priority
due to some internal error.setPriority(int)
public void setTimeToLive(long timeToLive) throws JMSException
Time to live is set to zero by default.
timeToLive
- the message time to live in milliseconds; zero is
unlimitedJMSException
- if the JMS provider fails to set the time to
live due to some internal error.getTimeToLive()
,
Message.DEFAULT_TIME_TO_LIVE
public long getTimeToLive() throws JMSException
JMSException
- if the JMS provider fails to get the time to
live due to some internal error.setTimeToLive(long)
public Destination getDestination() throws JMSException
MessageProducer
.Destination/- Throws:
JMSException
- if the JMS provider fails to get the destination for
this MessageProducer
due to some internal error.- Since:
- 1.1
public void close() throws JMSException
Since a provider may allocate some resources on behalf of a
MessageProducer
outside the Java virtual machine, clients
should close them when they
are not needed. Relying on garbage collection to eventually reclaim
these resources may not be timely enough.
JMSException
- if the JMS provider fails to close the producer
due to some internal error.public void send(Message message) throws JMSException
MessageProducer
's
default delivery mode, priority, and time to live.message
- the message to sendJMSException
- if the JMS provider fails to send the message
due to some internal error.MessageFormatException
- if an invalid message is specified.InvalidDestinationException
- if a client uses
this method with a MessageProducer
with
an invalid destination.java.lang.UnsupportedOperationException
- if a client uses this
method with a MessageProducer
that did
not specify a destination at creation time.Session.createProducer(javax.jms.Destination)
,
MessageProducer
public void send(Message message, int deliveryMode, int priority, long timeToLive) throws JMSException
message
- the message to senddeliveryMode
- the delivery mode to usepriority
- the priority for this messagetimeToLive
- the message's lifetime (in milliseconds)JMSException
- if the JMS provider fails to send the message
due to some internal error.MessageFormatException
- if an invalid message is specified.InvalidDestinationException
- if a client uses
this method with a MessageProducer
with
an invalid destination.java.lang.UnsupportedOperationException
- if a client uses this
method with a MessageProducer
that did
not specify a destination at creation time.Session.createProducer(javax.jms.Destination)
public void send(Destination destination, Message message) throws JMSException
MessageProducer
's default delivery mode, priority,
and time to live.
Typically, a message producer is assigned a destination at creation time; however, the JMS API also supports unidentified message producers, which require that the destination be supplied every time a message is sent.
destination
- the destination to send this message tomessage
- the message to sendJMSException
- if the JMS provider fails to send the message
due to some internal error.MessageFormatException
- if an invalid message is specified.InvalidDestinationException
- if a client uses
this method with an invalid destination.java.lang.UnsupportedOperationException
- if a client uses this
method with a MessageProducer
that
specified a destination at creation time.Session.createProducer(javax.jms.Destination)
,
MessageProducer
public void send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive) throws JMSException
Typically, a message producer is assigned a destination at creation time; however, the JMS API also supports unidentified message producers, which require that the destination be supplied every time a message is sent.
destination
- the destination to send this message tomessage
- the message to senddeliveryMode
- the delivery mode to usepriority
- the priority for this messagetimeToLive
- the message's lifetime (in milliseconds)JMSException
- if the JMS provider fails to send the message
due to some internal error.MessageFormatException
- if an invalid message is specified.InvalidDestinationException
- if a client uses
this method with an invalid destination.Session.createProducer(javax.jms.Destination)
|
JMS 1.1 - April 12, 2002 | |||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


We enhance methodologies!
- monetize value-added partnerships
- envisioneer enterprise content
- utilize B2B convergence
- morph killer solutions
- disintermediate best-of-breed synergies
- reinvent real-time eyeballs
- repurpose robust e-tailers
- aggregate intuitive users
- utilize extensible experiences


UI has to make a huge visual difference between warning, an alert and a success.
Transformation has to be driven by everybody, not just by climate groups, and we have a responsibility to use our...
Transformation has to be driven by everybody, not just by climate groups, and we have a responsibility...
Is it possible to create a delightful user experience without following best UX practices?


Will Moik
Engineering
|
Photography
|
Contact
Halibut Cove, AK
Grewingk Glacier, AK
Tutka Bay Lagoon, AK
Red Mountain Valley, AK
Kenai Peninsula, AK
Thingvellir National Park, Iceland
Homer Spit, AK
Black Sand Beaches, Iceland
Öxarárfoss Waterfall, Iceland
Lake Tahoe, CA
Railay Beach, Thailand
Chiang Mai, Thailand
ChiangMai, Thailand
Mount Fuji, Japan
Broken Knife Mountain, AK
Mount Monadnock, NH
Mount Monadnock, NH
Traditional Japanese Wedding, Niko Shrine, Japan
Kegon Waterfall, Japan
Stuttgart, Germany
Mount Fuji, Japan
Mount Fuji, Japan
Mount Fuji Volcano Peak, Japan
Rhine River, Germany
Shibuya Crossing, Japan
Tokyo, Japan
Yosemite National Park, CA
Mt Monadnock, NH
Tokyo, Japan
Traditional Japanese Wedding, Niko Shrine, Japan
New England Foliage, NH
Lands End, CA
Salzburg, Austria
Sintra, Portugal
Strasbourg, Germany
Madrid, Spain
Acapulco, Mexico
Acapulco, Mexico
Acapulco, Mexico
Acapulco, Mexico
Salzburg, Austria
Sintra, Portugal
Copenhagen, Denmark
Copenhagen, Denmark
Copenhagen, Denmark
Copenhagen, Denmark


Welcome to Andriod Emulator 2020.1
Thank you for choosing the ANDRIOD-VM Operating System.
Version: 2021.7 | Date of first version release: 30 May, 2020 | Date updated: 20 March, 2021
What's New: Updated information for 2021.7 release.
Author:Shamil Burkhanov
Operating System
- Current Release Name: ANDRIOD-VM
- Architecture: 64bit
- Supported BIOS: Legacy, UEFI & Secure Boot
- Software Base:UNIX-CORE
- Desktop Environment: Gnome Lite web interface
- Media Type:SERVER 20mb at least wifi connection
Preferred Computer Requirements:
- 1.1 Ghz processor+
- 1Gb ram+
- 21MB HDD/SSD+
- VGA, DVI or HDMI screen capable of 1040x768 resolution+ or larger
- Windows,Linux or IOS
System Menu
Terminal - Install and Remove software with the Synaptic Package Manager.
Partition Drives - View and edit your hard drive partitions with GParted program.
Printers - Install and set up printers.
System Information - like operating system,device name,browser type,and logs.
System Log - View system your logs, helps with troubleshooting.
System Restore Utility - System restore tool for ANDRIOD 7.1.0 Supports scheduled snapshots, multiple backup levels, and exclude filters. (like System Restore in Windows)
tTerminal - An overview of currently running computer processes. You can kill unresponsive applications here to.
Terminal Emulator - A command line utility like the command prompt in Windows.
Multimedia Menu
Media Player - HTML VIDEO PLAYER, a fantastic all around media player, play mp3's, avi's, mkv's etc. Plays all your media files.Volume Control - Individually set volume levels for each program that is running and configure your sound devices.
Andriod 7.1 DEMO ONLINE


Welcome to my third, and final, work term report. My name is Devon Miller and I recently completed an 8 month term working for Sun Life Financial in their Ignite Innovation Studio. I was designated an Innovation developer, which I will describe in more detail later on.
Throughout this website you will find a description of my duties, my learning goals, and what I feel I gained from the experience. Read on to learn the day to day life of an innovation developer at Sun Life, I hope you find this information interesting!
Sun Life Finanical is a Canadian Finance Company that specializes in Life Insurance. It operates in over 12 countries, and is one of the largest life insurance providers in the world. They have recently begun investing heavily into technical development to help stay competitive.
One of the investments they made was creating their Ignite Studio Innovation Center in Downtown Toronto, where I worked. It was an open, agile space that provided state of the art tools for rapid prototyping and innovation. It was meant to mimic the feel of a Start-Up, without the lack of resources that usually come with a Start-Up.


Already a foster carer with Leeds City Council
If you are already a foster carer with us then you can login to the approved foster carer site. You can then access support, events, training, e-learning and more information about the children looking for foster homes.
Carer loginIf you're having problems logging in please contact us on 0113 378 3538.


IronBench Access Manager™ is the only security management tool designed to centrally secure and manage Linux assets. Without Access Manager your networks are vulnerable to exploitation by the Linux machines themselves, let alone the people using them.
IronBench Access Manager™ is the best way to centrally enforce your organization's information security policy and ensure your Linux assets are protected throughout the enterprise.


Tool for analyzing precompiled .NET executables
Parses and outputs the contents of a ReadyToRun image
dotnet R2RDump.dll --in <path to ReadyToRun image>
| x64 | x86 | ARM | ARM64 | |
|---|---|---|---|---|
| Windows | yes | no disasm | ||
| Linux | yes | |||
| OSX | yes | - | - | - |
| x64 | x86 | ARM | ARM64 | |
|---|---|---|---|---|
| Windows | yes | yes | no disasm | yes |
| Linux | yes | yes | no disasm | |
| OSX | yes | - | - | - |
Used for getting method and type signatures from tokens (see: http://jilc.sourceforge.net/ecma_p2_cil.shtml)
A string describing the compiler.
Eg. "CoreCLR 4.5.30319.0 BUILDMACHINE"
A struct described in READYTORUN_IMPORT_SECTION. Currently not parsed correctly
A array of RVAs. For x64, each RuntimeFunction has RVAs to the start of the assembly, end of the assembly, and start of the UnwindInfo. For x86/Arm/Arm64, each RuntimeFunction has RVAs to the start of the assembly, and start of the UnwindInfo.
A NativeArray used for finding the index of the entrypoint RuntimeFunction for each method. The NativeArray is index by is the rowId-1 of a method. Each element in the NativeArray is an offset pointing to the RuntimeFunction index.
A NativeHashtable mapping type hashcodes of types defined in the program to the rowIds. The hashcode is calculated with ComputeNameHashCode(namespace) ^ ComputeNameHashCode(name)
A NativeCuckooFilter to discover which tokens have which "System.Runtime." prefixed attributes. The System.Runtime.CompilerServices.NullableAttribute is not used in this calculation. The filter is composed of a name hash of the type name using ComputeNameHashCode(namespace + name) hash combined with a hash of each token that produced it. In addition the upper 16 bits is used as the fingerprint in the filter.
A NativeHashtable mapping type hashcodes of generic instances to the (methodFlags, methodRowId, list of types, runtimeFunctionId). Each type in the list of types corresponds to a generic type in the method.
Eg. GenericMethod<S, T>(T arg1, S arg2) instantiated for <int, UserDefinedStruct> is in the hashtable as:
(hashcode) -> (methodFlags) (methodRowId) (number of generic types) (Int32) (ValueType) (RowId of UserDefinedStruct) (offset to RuntimeFunctionId)
A struct described in _UNWIND_INFO. Each RuntimeFunction has its own UnwindInfo.
For x86, it contains only an encoded function length
For x64, Arm and Arm64, it contains a bit field followed by an array of unwind codes (_UNWIND_CODE) and finally padding to make it byte aligned
The unwind data info structure is used to record the effects a function has on the stack pointer and where the nonvolatile registers are saved on the stack (see https://msdn.microsoft.com/en-us/library/0kd71y96.aspx)
Written into the ReadyToRun image right after UnwindInfo. Contains a header, GcSlots and GcTransitions (register liveness).
The x64/Arm/Arm64 GcInfo is written in crossgen by GcInfoEncoder::Build and decoded similar to GcInfoDecoder::EnumerateLiveSlots. The x86 gcInfo is written by GCInfo::gcMakeRegPtrTable and decoded similar to GCDump::DumpGCTable
Contains the code length followed by the header, GcSlots, and finally GcTransitions
The header contains flags indicating which properties are in the GcInfo. GcSlots gives details on the registers or stack pointer offsets that are used in the method. GcTransitions give the CodeOffsets (which line in the assembly code) where GcSlots (excluding untracked slots) become live or dead
In x64/Arm/Arm64, GcTransitions are grouped into chunks where each chunk covers NUM_NORM_CODE_OFFSETS_PER_CHUNK lines of assembly code. The following format is used:
Array of offsets pointing to each chunk
Padding to make it byte aligned
For each chunk:
1 bit indicating if it's RLE encoded
Array of bits indicating if each slot changed state in the chunk (ie. false if the slot is not used in the chunk). R2RDump uses this to calculate NumCouldBeLiveSlots and obtain slotIds
Array of bits indicating if each slot is live at the end of the chunk
For each slot that changed state in the chunk:
Array of elements consisting of a bit set to 1 and the normCodeOffsetDelta indicating all the code offsets where the slot changed state in the chunk. CodeOffset = normCodeOffsetDelta + normChunkBaseCodeOffset + currentRangeStartOffset - cumInterruptibleLength, where normChunkBaseCodeOffset is the sum of the sizes of all preceeding chunks, currentRangeStartOffset is the start offset of the interruptible range that the transition falls under and cumInterruptibleLength is the sum of the lengths of interruptible ranges that came before it
Support R2RDump on ARM and ARM64 (#10753)
Parse R2RSections: READYTORUN_SECTION_EXCEPTION_INFO, READYTORUN_SECTION_DEBUG_INFO, READYTORUN_SECTION_DELAYLOAD_METHODCALL_THUNKS, READYTORUN_SECTION_INLINING_INFO, READYTORUN_SECTION_PROFILEDATA_INFO (#10948)
Reenable R2RDumpTests after making it less fragile
Fix issues with disasm on Arm (#10959) and disasm using x86 coredistools (#10928)
Test R2RDump on more test cases to make sure it runs reliably and verify that the output is accurate (list of failing inputs: #10961)


"; echo $message_display; echo ""; } ?>
<- Back to Home
Add work
Actor
Director
Producer
Composer
Camera
Add


PagedList’s documentation¶
PagedList is a javascript library to create html lists (or tables) with pagination and auto rendering features. Columns and buttons can be configured.
Columns are configurable to enable sorting and filtering. Buttons are default shown for each row, but can be configured to be visible dependent on row data. Callback functions can be applied on buttons. The row data will be passed to the callback function when a button is clicked.
The list gets refreshed automatically when the user changes sorting or filtering (or browse to an other page). Refreshing can also be done manually by calling myList.refresh()
Columns can be configured to expand and collapse, which inserts and deletes an html-element below the clicked row. See onExpandItem
Go to Installation and Code examples for a quick start.
How does it look¶
Styling can by fully customized. Default styling looks like:
Installation¶
Add dependencies to your html file:
- jQuery (https://jquery.com/)
- Bootstrap (http://getbootstrap.com/)
Add pagedList.min.js
or pagedList.js
to your html file, like:

Code examples¶
Add a new list to an existing html element with id=myListId
, using PagedList
:
var myList = new pagedList.PagedList(
"#myListId", "http://myURL/getListItems");
Add a column with sorting and filtering capabilities, using addColumn
:
var column_one = myList.addColumn("Name", "Name")
.enableFilter()
.enableSort();
Define how the column content will be rendered, based on the row data, using itemToHtml
(alternatively use itemToElement
):
column_one.itemToHtml(function (item) {
return "
" + item.Name + "
";
});
Add a button to the list, including style classes, which will be visible dependent on row data, using addButton
:
myList.addButton("Edit", "Edit", "btn btn-primary btn-xs")
.onclick(function (item) {
console.log("Todo: edit item");
}).showIf(function (item) {
return item.CanEdit == true;
});
For more examples, download the standalone example page, which shows a PagedList with data from a fake server.
Globals¶
-
pagedList.
addDefaultButton
(id, name, styleClass)¶ Configure a global button to the pagedList module. See also
addDefaultButtons
Parameters: - id – self chosen id for the default button to be created. Must be unique. Example: “Select”.
- name – text to show on the button. Example: “Select now!”
- styleClass – html style class to be added to the button. Example:
btn btn-primary btn-xs
Returns: PagedListButton
After adding default buttons, any instance of PagedList can add these buttons by specifying the id’s, like:
myList.addDefaultButtons(["Select"])
-
pagedList.
DefaultText
= {'TextFilter': 'Filter', 'TextTotal': 'Total'}¶ Default text to show. Can for example be changed like
pagedList.DefaultText.TextTotal = 'Totale!';
PagedList¶
-
class
pagedList.
PagedList
¶ Parameters: - container – container element to place this list in. It can be an html-element or an selector (str)
- url – (optional) url which will be used by this list to get new data. A
AjaxServer
will be created. If an empty string or null is given, aFakeServer
will be created.
- On refresh the list sends a POST request with data like:
{ page: 1, pageSize: 20, filterColumns: [], filterValues: [], sortOn: '', sortAsc: true }
- It expects to get a response with data like:
{ Items: [], CurrentPage: 1, PageCount: 5, TotalCount: 95 }
-
addButton
(id, name, styleClass)¶ Add a button to this list. The button will possibly be placed in each row.
Parameters: - id – self chosen id for the button to be created. Example: “Select”.
- name – text to show on the button. Example: “Select now!”
- styleClass – html style class to be added to the button. Example:
btn btn-primary btn-xs
Returns:
-
addColumn
(id, header=<built-in function id>)¶ Add a column to this list
Parameters: - id – self chosen id for the column to be created.
- header – text to show in the header. If not specified, id will be used.
Returns:
-
addDefaultButtons
(*ids)¶ Add pre-configured default buttons to this
PagedList
. See alsoaddDefaultButton
.Parameters: ids – list of all id’s, as specified during configuration of the default buttons. Default buttons can be called by
myList.id
ormyList['id']
whereid
is the id of the default-buttons.
-
addRowListener
(event, func, useCapture)¶ Attach an event to the body of the table. When the event gets triggered, the row is found which contains the event target. If any row is found, the function gets executed.
Parameters: - event – event, for example:
"dblclick"
- func – function which accepts an item (data of one row) and (optional) an event.
- useCapture – use event bubbling (default) or event capturing
Returns: function which is added as EventListener. Use this for
removeRowListener
If this list contains buttons, be aware to take care of the event propagation. For example do something like this:
myList.addButton(...).onclick( function(item, evt){ // do something you want with item evt.stopPropagation(); });
- event – event, for example:
-
ajaxServer
(url)¶ Creates a
AjaxServer
and uses that for this list.Param: url: url which will be used by this list to get new data Returns: AjaxServer
-
fakeServer
()¶ Creates a
FakeServer
and uses that for this list.Returns: FakeServer
-
getData
(page, fullPage=False)¶ Make a POST request to get new data from server and refresh the list.
Parameters: - page – page-nr to get
- fullPage – if false (default) all values will be updated, if true, all rows in the list will be re-rendered, and expanded rows will be removed.
-
getServer
()¶ Returns the current used a
DataServer
. See alsofakeServer
andajaxServer
Returns: DataServer
-
getStyling
()¶ Returns the
PagedListStyling
object belonging to thisPagedList
.
-
getUrl
()¶ Returns the url for the current used
DataServer
. This is only defined if it is aAjaxServer
-
mergeButtonColumns
= False¶ Default false. If true, all buttons will be placed in one column, instead of creating one column for each button. This can only be changed before the first refresh, thus after creation of the list.
-
onPageRefreshed
(func=None)¶ Place a callback function to be called after the list is refreshed.
Returns: this PagedList
-
onPageRefreshing
(func=None)¶ Place a callback function to be called before the list is refreshed.
Returns: this PagedList
-
pageSize
= 20¶ Default page size (nr of rows). Can be changed any time calling (e.g.)
myList.pageSize = 10
-
refresh
(fullPage=False)¶ Refresh this list. This will cause the list to get the data for the current page, and update all values.
Parameters: fullPage – if false (default) all values will be updated, if true, all rows in the list will be re-rendered, and expanded rows will be removed.
-
refreshItem
(item, newItem=None)¶ Refresh the row which contains item. If item is not found, do nothing.
Parameters: - item – data of the row which must be refreshed
- newItem – if given, replace item with newItem
-
removeRowListener
(event, func, useCapture)¶ Remove an event from the body of the table.
Parameters: - event – event, for example:
"dblclick"
- func – function which is returned from
addRowListener
- useCapture – must be same as used for
addRowListener
- event – event, for example:
-
setUrl
(url)¶ Sets the url for the current used
DataServer
. This only makes sence if it is aAjaxServer
Parameters: url – url which will be used by this list to get new data. Returns: this PagedList
PagedListStyling¶
-
class
pagedList.
PagedListStyling
¶ Object which is automatically created by
PagedList
and used for styling. Use the object by callingmyList.getStyling()
-
rowClasses
(func)¶ Specify the html style classes for each row. Calling this function multiple times will append all classes. To clear all previously added classes, call
myList.rowClasses(null);
Parameters: func – function which accepts an item (data of 1 row) and returns a string with style classes Returns: this PagedListStyling
-
rowStyles
(func)¶ Specify the html styles for each row. Calling this function multiple times will append all styles. To clear all previously added styles, call
myList.rowStyles(null);
Parameters: func – function which accepts an item (data of 1 row) and returns a string with styles Returns: this PagedListStyling
-
setClassAscending
(styleClass)¶ Specify the html style class for the span in the column header when the column is sorted in ascending order. This will override the default value:
glyphicon glyphicon-triangle-top
Parameters: styleClass – a string with style classes Returns: this PagedListStyling
-
setClassButtonColumn
(styleClass)¶ Specify the html style class for the button column(s), This will override the default value:
pagedList-buttonColumn
Parameters: styleClass – a string with style classes Returns: this PagedListStyling
-
setClassCollapsed
(styleClass)¶ Specify the html style class for the span in a column row when the row is collapsed. This will override the default value:
cursor glyphicon glyphicon-triangle-right
Parameters: styleClass – a string with style classes Returns: this PagedListStyling
-
setClassDescending
(styleClass)¶ Specify the html style class for the span in the column header when the column is sorted in descending order. This will override the default value:
glyphicon glyphicon-triangle-bottom
Parameters: styleClass – a string with style classes Returns: this PagedListStyling
-
setClassExpanded
(styleClass)¶ Specify the html style class for the span in a column row when the row is expanded. This will override the default value:
cursor glyphicon glyphicon-triangle-bottom
Parameters: styleClass – a string with style classes Returns: this PagedListStyling
-
tableClass
(styleClass)¶ Specify the html style class for the table, to override the default value:
table table-striped table-hover
Parameters: styleClass – a string with style classes Returns: this PagedListStyling
-
tableStyle
(style)¶ Specify the html style for the table
Parameters: style – a string with the style Returns: this PagedListStyling
-
PagedListColumn¶
-
class
pagedList.
PagedListColumn
¶ -
addClass
(styleClass)¶ Add a style-class to the header and to the rows. This is the same as calling
addClassHeader
andaddClassRows
subsequently.Parameters: style – html style class Returns: this PagedListColumn
-
addClassHeader
(styleClass)¶ Add a style-class to the header. Default class which is always added:
pagedListColumnHeader
Parameters: styleClass – html style class Returns: this PagedListColumn
-
addClassHeaderSpan
(styleClass)¶ Add a style-class to the span in the header.
Parameters: styleClass – html style class Returns: this PagedListColumn
-
addClassRows
(styleClass)¶ Add a style-class to the rows (all rows, item independent). Default class which is always added:
pagedListColumnRow
Parameters: styleClass – html style class Returns: this PagedListColumn
-
addStyle
(style)¶ Add a style to the header and to the rows. This is the same as calling
addStyleHeader
andaddStyleRows
subsequently.Parameters: style – html style Returns: this PagedListColumn
-
addStyleHeader
(style)¶ Add a style to the header.
Parameters: style – html style Returns: this PagedListColumn
-
addStyleHeaderSpan
(style)¶ Add a style to the span in the header.
Parameters: style – html style Returns: this PagedListColumn
-
addStyleRows
(style)¶ Add a style to the rows (all rows, item independent).
Parameters: style – html style Returns: this PagedListColumn
-
enableFilter
(items=None)¶ Enable filtering for this column. This will show a html input textfield or a html select in the header of the column.
Parameters: items – optional, a list of filter-items to filter on. Example with 2 filter-items: [{Text: 'Apples', Value: 1}, {Text: 'Oranges', Value: 2}]
Returns: this PagedListColumn
-
enableSort
()¶ Enable sorting for this column. This will give possibility to click on the header, to toggle ascending and descending ordering.
Returns: this PagedListColumn
-
itemToElement
(itemToElementFunction)¶ Define how the column content will be rendered, based on the row data.
Parameters: itemToElementFunction – function which accepts an item (data of a row) and returns a html element Returns: this PagedListColumn
Note: this function will only be re-rendered if
fullPage=true
, see alsorefresh
andgetData
.
-
itemToHtml
(itemToHtmlFunction)¶ Define how the column content will be rendered, based on the row data.
Parameters: itemToHtmlFunction – function which accepts an item (data of a row) and returns a html string Returns: this PagedListColumn
-
onExpandItem
(func)¶ Make this column expandable. A clickable arrow will be added to each row. On clicking an html-element will be inserted or removed below the clicked row.
Parameters: func – function which accepts an item (data of a row) and returns a html element. The element will be placed inside the second column of a new generated table. Styling can be done by the style classes subPagedListTd
,subPagedListTable
,subPagedListCell1
andsubPagedListCell2
.Returns: this PagedListColumn
-
PagedListButton¶
-
class
pagedList.
PagedListButton
¶ Button to show for each row in a
PagedList
. Buttons are created by callingaddButton
on aPagedList
instance.-
onclick
(func)¶ Add an callback function to this button to be called when button is clicked.
Parameters: func – function which accepts a item (data for one row) Returns: this PagedListButton
-
showIf
(func)¶ Add an function to this button to determine if this button is shown for a specific row.
Parameters: func – function which accepts a item (data for one row) and returns true/false Returns: this PagedListButton
-
Pager¶
-
class
pagedList.
Pager
¶ A Pager shows clickable page numbers and the total count of items, and can be shown at top and bottom of a
PagedList
The html element structure gets generated like:

 1

 2

 3

 4

 5

 	  Total: 10

The styling is defined by the following classes:
pagination
on theul
element, for the page numbers.active
on theli
element , for the active page number.label label-default
on thespan
element for the count number.
-
getElement
()¶ Returns the html element of this Pager object, which is a
div
element.
-
getTable
()¶ Returns the html
table
element of this Pager. Can for example be used to override the default styleheight: 80px;
:myList.getTopPager().getTable().style = "height: 150px";
-
setActiveClass
(styleClass)¶ Replace the default class
active
in the html structure of thisPager
.Returns: this Pager
DataServer¶
-
class
pagedList.
DataServer
¶ Base class for objects who deliver data to
PagedList
. Instantiation is done automatically by creating a PagedList, or manually by invokingmyList.fakeServer()
andmyList.ajaxServer(url)
Any DataServer must take care of filtering, sorting and paging, as requested by the PagedList.
AjaxServer¶
-
class
pagedList.
AjaxServer
¶ Object which creates Ajax calls to the server and passes this data to the PagedList.
FakeServer¶
-
class
pagedList.
FakeServer
¶ Object to hold the data used by
PagedList
. This objects takes care of filtering, sorting and paging, doing this all on client side.-
addData
(*items)¶ Add data to this server. If sorting or filtering is enabled, field names of data-items must correspond with column id.
-
deleteItem
(id)¶ Remove an item from data
-
getItem
(id)¶ Get an item (row) of data with the given id
-
getMaxId
()¶ Returns maximum id of the data items in this server.
-


Registration: $email $firstName $lastName
<% if (shopPreferredUrl != null && !shopPreferredUrl.isEmpty()) { %>
$shopName
<% } else { %>
$shopName
<% }%>
<% if (additionalData.requireApproval) { %>
Please ACTIVATE account by assigning shop to $email account in "Customer service > Customers"
<% } %>


Free Fall Detection Introduced!
Xbox Kinect provides great possibilities to make living easier for people and we decided to take a little step towards this! By checking the movements in a Microsoft Kinect placed room, our algorithms are able to detect if there are any unusual behaviour like person's falling down which can very useful while taking care of babies and older people at home. Read more...


I was never much of a hallucinogenic kind of guy. Though the times I did mushrooms or starved myself of sleep, the experiences were always memorable. One night while sitting on a street corner watching a few of my friends make asses of themselves (they drank themselves stupid) a friend of mine had came across us. Him and his cousin had been picking Canada’s finest mushrooms all day for the past week. We live on Prince Edward Island and if anybody here has heard we supposedly have some of the best Psilocybin Mushrooms in the world. But then again that maybe blatant patriotism but all the out of towners that indulge while here are pleasantly surprised.
So He has a shitload of shrooms, I take a handful, take another handful and end up eating 6. 6 handfuls of mushrooms didn’t seem to intense at first but as the night progressed they intensified. I began on a journey with my close friend Josh and his friend Wayne. Wayne walked back and talked with me asking me questions about my life while Josh clumsily stumbled in front of me, he wasn’t drunk just lanky and oversized.
As we walked I explained to Wayne that we all have numerous lives each one a mask of who we really are to impress others. How we act with our parents, our teachers and girls. I told him that concrete is evil because it covers life and blankets the world with death. Throughout the night I ranted and babbled about things I didn’t think I thought about. I talked to everyone I seen and ended up at a patch of grass. In fact the first patch we had seen on our journey. I pointed to it and said “Look, look at the energy, its aura. That my friend is life.” I stood there and told my two companions we should sit here for a while.
“No lets go to BK(burger king)” They replied. I needed to go to the bathroom so I went in. I don’t know if I peed or not because all that stands out in my mind is me looking at the mirror and seeing my self drip and reform and swivel. I leaned forward to the mirror and look at myself I was perceiving myself differently. I was glowing and flowing like energy. I grabbed the edge of the mirror and started to pull. What happens next is unbelievable but I believe it to be true. As I was looking in the mirror and seen me in a more pure form I transcended slightly and was able to manipulate the mirrors physical form through energy or something because as I pulled it bent like rubber. In a curve as though it was flowing like energy as well. As I witnessed what I was doing I looked at Wayne and said “The mirror is bending.”
Then it snapped down the middle and fell off the wall. My two companions ran out of the room in terror and out the door. In disbelief I walked out of the bathroom as the manager was running over to see what the loud noise followed by two boys running away was. I looked at her and said “What just happened?” She took me into a room and sat me down. “Don’t move I’m calling the police.” She said as she left the room and assigned a large man to watch the door so I couldn’t escape. While I sat in the room I began to think and then shuddered it off thinking to myself this was some non-reality and the rules don’t apply.
 There my 2 companions had returned and were sitting waiting for the arrival of the police. I instructed them to tell the police that the mirror was slanted and when I tried to fix it, it simply fell. When the police arrived a short scrawny one was angry and yelling at us.. then he took Wayne aside and tried to pressure him into telling the truth. “Nobody will get in trouble all we want to know is who broke the mirror.” Wayne crumbled and said me. Through my mind I kept thinking about how weak he is and how pathetic of a person Wayne is.
The small cop walked away and I began to yell at the humble yet larger cop. “Do I look like a rowdy person!?!?! Do you think I would’ve walked into Burger King and smashed a mirror for kicks?!?!?!”
“Did I say you were rowdy?” the cop replied. “Well Am I getting charged?!?!?!” I retorted. “Lower your voice, and Did I say you were getting charged?” the cop came back with. I sat back mumbled “good” and stayed quiet. The police told us we’d have to pay for the mirror and then sent us on our way. As I left BK I looked at Josh and Wayne and said “That my friends, was a mushroom trip gone terribly, terribly wrong.” I went home and lied in bed thinking about what had happened, my life, and everything else. The night made me realize I was going to spin out of control with the amount of drugs that I’d be doing and made me realize school should be number 1. After that I slowed down and focused hard on school. It was intense, and I now love mushrooms.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


About Infogroup
Infogroup is a provider of data and data-driven marketing services for small and enterprise businesses, as well as non-profit, government, and other organizations.
InfoUSA and Salesgenie provide on-demand and SaaS access to marketing data and services for small, medium, and enterprise businesses.
Products include business and consumer lists, and CRM and lead management.
Dual Business Applications
On multiple projects, I contributed to the design and user experience of both InfoUSA and Salesgenie.
InfoUSA
infousa.com
Target audience: This product is for businesses that need to buy one or two lists at a time.
Salesgenie
salesgenie.com
Target audience: Salesgenie is for businesses needing regular access to marketing data. Salesgenie is a subscription-only product.
Email Marketing Builder
In one project, I redesigned tools used by businesses to build email templates for marketing campaigns.
Problem
The old tools were too complicated for design amateurs. They didn’t serve customers and hurt the Infogroup brand.
Strategy
In order to create design tools that didn't require design knowledge, I researched competitors to find common design patterns.
Actions
The workflow and the framework of the email builder were rebuilt, including an updated template gallery and new UI elements. Users could now design their email template in a logical and sequential order, to help them build an attractive marketing campaign.
Outcome
The product was released as the Email Campaign Builder, available for both InfoUSA and Salesgenie customers.
Setting Up Your Email Template
High-Fidelity Wireframes
1. Select template Users start their email design by selecting a template from the gallery. Templates are organized by industry and type.
2. Customize layout In this step, the layout could be further refined. Users customize layout by rearranging or removing content modules, using a drag-and-drop user interaction.
3. Select color theme Next add color. Users select a color theme in coordinated palettes.
4. Add content To customize content, simply click and edit with context menus.
- Action
- Select template
- Description
- Select industry or skip
- Action
- Select template
- Description
- Browse templates
- Action
- Customize layout
- Description
- Drag modules
- Action
- Customize layout
- Description
- Arrange layout
- Action
- Select color
- Description
- Add colors
- Action
- Select color
- Description
- Choose a theme
- Action
- Add content
- Description
- Customize content
- Action
- Add content
- Description
- Check for errors


Intergrating Vision Algorithms and Quadcopters
The Caltech Unmanned Aerial Vehicle (UAV) Eng ineering Club was founded September 2014. The first two quarters of the 2014-2015 school year were used to raise money and find interested members of the student body. The mission of the club is to foster interest in UAVs, something that has garnered lots of attention in industry these past couple years. The applications of manned and unmanned vehicles have increased exponentially and having Caltech students involved in pertinent projects is the goal of the club.
In order to be able to spend more time on projects, Caltech's UAV club participated in ME100 this past year - a student led class that allows students to explore proposed projects. Our goal for the class was to create a quadcopter that could visually recognize a bright colored object and perform an action based on that trigger. In our case, the goal was to make the quadcopter hover and land when a tennis ball rolled underneath it. The built quad is shown below.
The team made use of a Pixhawk controller to achieve manual and GPS based autonomous flight. After, a Raspberry Pi and Pi camera were integrated into the system to implement our vision algorithms. A full report, including instructions, detailed explanations, and future work can be seen here. The team was able to accomplish all of our goals and milestones besides autonomous take off (with the Pi). If you are curious about the full scope of the project I strongly suggest you browse the report!
My experiences with the club have given me an increased appreciation for quadcopters and their capacities. I have gained valuable knowledge of quadcopter mechanics and components that will certainly be useful for any future work with multi-rotors. Additionally, this project helped stengthen my knowledge in robotic vision and RC systems (ESCs, PDB's, motor controllers, Rx, Tx, etc.)
A video of autonomous flight can be seen below. More videos can be seen on CaltechUAV's youtube page.