Imported MenuWorld beos sample code into the repository.
Wrote a jamfile and did some build fix (but doesn't build yet). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37109 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// BitmapMenuItem.cpp
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#include "BitmapMenuItem.h"
|
||||
#include "constants.h"
|
||||
|
||||
//====================================================================
|
||||
// BitmapMenuItem Implementation
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// BitmapMenuItem constructors, destructors, operators
|
||||
|
||||
BitmapMenuItem::BitmapMenuItem(const char* name, const BBitmap& bitmap,
|
||||
BMessage* message, char shortcut, uint32 modifiers)
|
||||
: BMenuItem(name, message, shortcut, modifiers),
|
||||
m_bitmap(bitmap.Bounds(), bitmap.ColorSpace())
|
||||
{
|
||||
// Sadly, operator= for bitmaps is not yet implemented.
|
||||
// Half of m_bitmap's initialization is above; now we copy
|
||||
// the bits.
|
||||
m_bitmap.SetBits(bitmap.Bits(), bitmap.BitsLength(),
|
||||
0, bitmap.ColorSpace());
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// BitmapMenuItem constructors, destructors, operators
|
||||
|
||||
void BitmapMenuItem::Draw(void)
|
||||
{
|
||||
BMenu* menu = Menu();
|
||||
if (menu) {
|
||||
BRect itemFrame = Frame();
|
||||
BRect bitmapFrame = itemFrame;
|
||||
bitmapFrame.InsetBy(2, 2); // account for 2-pixel margin
|
||||
|
||||
menu->SetDrawingMode(B_OP_COPY);
|
||||
menu->SetHighColor(BKG_GREY);
|
||||
menu->FillRect(itemFrame);
|
||||
menu->DrawBitmap(&m_bitmap, bitmapFrame);
|
||||
|
||||
if (IsSelected()) {
|
||||
// a nonstandard but simple way to draw highlights
|
||||
menu->SetDrawingMode(B_OP_INVERT);
|
||||
menu->SetHighColor(0,0,0);
|
||||
menu->FillRect(itemFrame);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BitmapMenuItem::GetContentSize(float* width, float* height)
|
||||
{
|
||||
GetBitmapSize(width, height);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// BitmapMenuItem accessors
|
||||
|
||||
void BitmapMenuItem::GetBitmapSize(float* width, float* height)
|
||||
{
|
||||
BRect r = m_bitmap.Bounds();
|
||||
*width = r.Width() + 4; // 2-pixel boundary on either side
|
||||
*height = r.Height() + 4; // 2-pixel boundary on top/bottom
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// BitmapMenuItem.h
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#ifndef _BitmapMenuItem_h
|
||||
#define _BitmapMenuItem_h
|
||||
|
||||
#include <Bitmap.h>
|
||||
#include <MenuItem.h>
|
||||
|
||||
//====================================================================
|
||||
// CLASS: BitmapMenuItem
|
||||
|
||||
class BitmapMenuItem : public BMenuItem
|
||||
{
|
||||
//----------------------------------------------------------------
|
||||
// Constructors, destructors, operators
|
||||
|
||||
public:
|
||||
BitmapMenuItem(const char* name, const BBitmap& bitmap,
|
||||
BMessage* message, char shortcut = 0,
|
||||
uint32 modifiers = 0);
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Virtual member function overrides
|
||||
|
||||
protected:
|
||||
void Draw(void);
|
||||
void GetContentSize(float* width, float* height);
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Accessors
|
||||
|
||||
public:
|
||||
void GetBitmapSize(float* width, float* height);
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Member variables
|
||||
|
||||
private:
|
||||
BBitmap m_bitmap;
|
||||
};
|
||||
|
||||
#endif /* _BitmapMenuItem_h */
|
||||
@@ -0,0 +1,15 @@
|
||||
SubDir HAIKU_TOP src tests kits interface menu menuworld ;
|
||||
|
||||
Application MenuWorld :
|
||||
BitmapMenuItem.cpp
|
||||
constants.cpp
|
||||
main.cpp
|
||||
MenuApp.cpp
|
||||
MenuView.cpp
|
||||
MenuWindow.cpp
|
||||
PostDispatchInvoker.cpp
|
||||
stddlg.cpp
|
||||
TestMenuBuilder.cpp
|
||||
ViewLayoutFactory.cpp
|
||||
: be $(TARGET_LIBSUPC++)
|
||||
;
|
||||
@@ -0,0 +1,31 @@
|
||||
----------------------
|
||||
Be Sample Code License
|
||||
----------------------
|
||||
|
||||
Copyright 1991-1999, Be Incorporated.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions, and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions, and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
3. The name of the author may not be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -0,0 +1,50 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// MenuApp.cpp
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#include <Alert.h>
|
||||
|
||||
#include "constants.h"
|
||||
#include "MenuApp.h"
|
||||
#include "MenuWindow.h"
|
||||
|
||||
//====================================================================
|
||||
// MenuApp Implementation
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// MenuApp constructors, destructors, operators
|
||||
|
||||
MenuApp::MenuApp()
|
||||
: BApplication(STR_APP_SIG)
|
||||
{
|
||||
// empty
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// MenuApp virtual function overrides
|
||||
|
||||
void MenuApp::AboutRequested(void)
|
||||
{
|
||||
BAlert* aboutBox = new BAlert(STR_ABOUT_TITLE,
|
||||
STR_ABOUT_DESC, STR_ABOUT_BUTTON);
|
||||
aboutBox->Go();
|
||||
}
|
||||
|
||||
void MenuApp::ReadyToRun(void)
|
||||
{
|
||||
MenuWindow* pWin = new MenuWindow(STR_APP_NAME);
|
||||
pWin->Show();
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// MenuApp.h
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#ifndef _MenuApp_h
|
||||
#define _MenuApp_h
|
||||
|
||||
#include <Application.h>
|
||||
|
||||
//====================================================================
|
||||
// CLASS: MenuApp
|
||||
|
||||
class MenuApp : public BApplication
|
||||
{
|
||||
//----------------------------------------------------------------
|
||||
// Constructors, destructors, operators
|
||||
|
||||
public:
|
||||
MenuApp();
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Virtual function overrides
|
||||
|
||||
public:
|
||||
void AboutRequested(void);
|
||||
void ReadyToRun(void);
|
||||
|
||||
};
|
||||
|
||||
#endif /* _MenuApp_h */
|
||||
@@ -0,0 +1,563 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// MenuView.cpp
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#include <Alert.h>
|
||||
#include <Button.h>
|
||||
#include <CheckBox.h>
|
||||
#include <Menu.h>
|
||||
#include <MenuItem.h>
|
||||
#include <OutlineListView.h>
|
||||
#include <ScrollView.h>
|
||||
#include <TextControl.h>
|
||||
#include <List.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "constants.h"
|
||||
#include "MenuView.h"
|
||||
#include "MenuWindow.h"
|
||||
#include "PostDispatchInvoker.h"
|
||||
#include "stddlg.h"
|
||||
#include "ViewLayoutFactory.h"
|
||||
|
||||
|
||||
//====================================================================
|
||||
// MenuView Implementation
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// MenuView constructors, destructors, operators
|
||||
|
||||
MenuView::MenuView(uint32 resizingMode)
|
||||
: BView(BRect(0, 0, 0, 0), "Menu View", resizingMode,
|
||||
B_WILL_DRAW)
|
||||
{
|
||||
ViewLayoutFactory aFactory; // for semi-intelligent layout
|
||||
|
||||
SetViewColor(BKG_GREY);
|
||||
|
||||
// "hide user menus" check box
|
||||
float fCheck_x = 20.0f;
|
||||
float fCheck_y = 100.0f;
|
||||
m_pHideUserCheck = aFactory.MakeCheckBox("Hide User Menus",
|
||||
STR_HIDE_USER_MENUS, MSG_WIN_HIDE_USER_MENUS,
|
||||
BPoint(fCheck_x, fCheck_y));
|
||||
m_pHideUserCheck->SetValue(B_CONTROL_OFF);
|
||||
AddChild(m_pHideUserCheck);
|
||||
|
||||
// "large test icons" check box
|
||||
fCheck_y = m_pHideUserCheck->Frame().bottom + 10;
|
||||
m_pLargeTestIconCheck = aFactory.MakeCheckBox("Large Test Icons",
|
||||
STR_LARGE_TEST_ICONS, MSG_WIN_LARGE_TEST_ICONS,
|
||||
BPoint(fCheck_x, fCheck_y));
|
||||
m_pLargeTestIconCheck->SetValue(B_CONTROL_OFF);
|
||||
AddChild(m_pLargeTestIconCheck);
|
||||
|
||||
// "add menu", "add item", "delete" buttons
|
||||
BList buttons;
|
||||
float fButton_x = m_pHideUserCheck->Frame().right + 15;
|
||||
float fButton_y = m_pHideUserCheck->Frame().top;
|
||||
|
||||
m_pAddMenuButton = aFactory.MakeButton("Add Menu Bar", STR_ADD_MENU,
|
||||
MSG_VIEW_ADD_MENU, BPoint(fButton_x, fButton_y));
|
||||
AddChild(m_pAddMenuButton);
|
||||
buttons.AddItem(m_pAddMenuButton);
|
||||
|
||||
// for purposes of size calculation, use the longest piece
|
||||
// of text we're going to stuff into the button
|
||||
const char* addItemText;
|
||||
float itemLen, sepLen;
|
||||
itemLen = be_plain_font->StringWidth(STR_ADD_ITEM);
|
||||
sepLen = be_plain_font->StringWidth(STR_ADD_SEP);
|
||||
addItemText = (itemLen > sepLen) ? STR_ADD_ITEM : STR_ADD_SEP;
|
||||
m_pAddItemButton = aFactory.MakeButton("Add Item To Menu",
|
||||
addItemText, MSG_VIEW_ADD_ITEM,
|
||||
BPoint(fButton_x, fButton_y));
|
||||
m_pAddItemButton->SetEnabled(false);
|
||||
AddChild(m_pAddItemButton);
|
||||
buttons.AddItem(m_pAddItemButton);
|
||||
|
||||
m_pDelButton = aFactory.MakeButton("Delete Menu Bar", STR_DELETE_MENU,
|
||||
MSG_VIEW_DELETE_MENU, BPoint(fButton_x, fButton_y));
|
||||
m_pDelButton->SetEnabled(false);
|
||||
AddChild(m_pDelButton);
|
||||
buttons.AddItem(m_pDelButton);
|
||||
|
||||
// now resize list of buttons to max width
|
||||
aFactory.ResizeToListMax(buttons, RECT_WIDTH);
|
||||
|
||||
// now align buttons along left side
|
||||
aFactory.Align(buttons, ALIGN_LEFT,
|
||||
m_pAddItemButton->Frame().Height() + 15);
|
||||
|
||||
// now make add menu the default, AFTER we've
|
||||
// laid out the buttons, since the button bloats
|
||||
// when it's the default
|
||||
m_pAddMenuButton->MakeDefault(true);
|
||||
|
||||
// item "label" control
|
||||
float fEdit_left = 20.0f, fEdit_bottom = m_pHideUserCheck->Frame().top - 20;
|
||||
float fEdit_right = m_pAddItemButton->Frame().right;
|
||||
|
||||
m_pLabelCtrl = aFactory.MakeTextControl("Menu Bar Control",
|
||||
STR_LABEL_CTRL, NULL, BPoint(fEdit_left, fEdit_bottom),
|
||||
fEdit_right - fEdit_left, CORNER_BOTTOMLEFT);
|
||||
AddChild(m_pLabelCtrl);
|
||||
|
||||
// menu outline view
|
||||
BRect r;
|
||||
r.left = m_pAddItemButton->Frame().right + 30;
|
||||
r.top = 20.0f;
|
||||
r.right = r.left + 200 - B_V_SCROLL_BAR_WIDTH;
|
||||
// API quirk here: <= 12 (hscroll height - 2) height
|
||||
// results in scrollbar drawing error
|
||||
r.bottom = r.top + 100 - B_H_SCROLL_BAR_HEIGHT;
|
||||
|
||||
m_pMenuOutlineView = new BOutlineListView(r, "Menu Outline",
|
||||
B_SINGLE_SELECTION_LIST, B_FOLLOW_ALL);
|
||||
m_pMenuOutlineView->SetSelectionMessage(
|
||||
new BMessage(MSG_MENU_OUTLINE_SEL));
|
||||
|
||||
// wrap outline view in scroller
|
||||
m_pScrollView = new BScrollView("Menu Outline Scroller",
|
||||
m_pMenuOutlineView, B_FOLLOW_LEFT | B_FOLLOW_TOP, 0,
|
||||
true, true);
|
||||
m_pScrollView->SetViewColor(BKG_GREY);
|
||||
AddChild(m_pScrollView);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// MenuView virtual function overrides
|
||||
|
||||
void MenuView::MessageReceived(BMessage* message)
|
||||
{
|
||||
switch (message->what) {
|
||||
case MSG_VIEW_ADD_MENU:
|
||||
AddMenu(message);
|
||||
break;
|
||||
case MSG_VIEW_DELETE_MENU:
|
||||
DeleteMenu(message);
|
||||
break;
|
||||
case MSG_VIEW_ADD_ITEM:
|
||||
AddMenuItem(message);
|
||||
break;
|
||||
case MSG_MENU_OUTLINE_SEL:
|
||||
MenuSelectionChanged(message);
|
||||
break;
|
||||
case MSG_LABEL_EDIT:
|
||||
SetButtonState();
|
||||
break;
|
||||
default:
|
||||
BView::MessageReceived(message);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MenuView::AllAttached(void)
|
||||
{
|
||||
if (! Valid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Set button and view targets (now that window looper is available).
|
||||
m_pAddMenuButton->SetTarget(this);
|
||||
m_pDelButton->SetTarget(this);
|
||||
m_pAddItemButton->SetTarget(this);
|
||||
m_pMenuOutlineView->SetTarget(this);
|
||||
|
||||
// Set button's initial state
|
||||
SetButtonState();
|
||||
|
||||
// Wrap a message filter/invoker around the label control's text field
|
||||
// that will post us B_LABEL_EDIT msg after the text field processes a
|
||||
// B_KEY_DOWN message.
|
||||
m_pLabelCtrl->TextView()->AddFilter(
|
||||
new PostDispatchInvoker(B_KEY_DOWN, new BMessage(MSG_LABEL_EDIT), this));
|
||||
|
||||
// Get one item's height by adding a dummy item to
|
||||
// the BOutlineListView and calculating its height.
|
||||
m_pMenuOutlineView->AddItem(new BStringItem("Dummy"));
|
||||
float itemHeight = m_pMenuOutlineView->ItemFrame(0).Height();
|
||||
itemHeight++; // account for 1-pixel offset between items
|
||||
// which eliminates overlap
|
||||
delete m_pMenuOutlineView->RemoveItem((int32)0);
|
||||
|
||||
// Resize outline list view to integral item height.
|
||||
// fudge factor of 4 comes from 2-pixel space between
|
||||
// scrollview and outline list view on top & bottom
|
||||
float viewHeight = 16*itemHeight;
|
||||
m_pScrollView->ResizeTo(m_pScrollView->Frame().Width(),
|
||||
viewHeight + B_H_SCROLL_BAR_HEIGHT + 4);
|
||||
BScrollBar *pBar = m_pScrollView->ScrollBar(B_HORIZONTAL);
|
||||
if (pBar) {
|
||||
pBar->SetRange(0, 300);
|
||||
}
|
||||
|
||||
// Resize view to surround contents.
|
||||
ViewLayoutFactory aFactory;
|
||||
aFactory.ResizeAroundChildren(*this, BPoint(20,20));
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// MenuView operations
|
||||
|
||||
void MenuView::PopulateUserMenu(BMenu* pMenu, int32 index)
|
||||
{
|
||||
if ((! pMenu) || (! Valid())) {
|
||||
return;
|
||||
}
|
||||
|
||||
// blow away all menu items
|
||||
BMenuItem* pMenuItem = pMenu->RemoveItem((int32)0);
|
||||
while(pMenuItem) {
|
||||
delete pMenuItem;
|
||||
pMenuItem = pMenu->RemoveItem((int32)0);
|
||||
}
|
||||
|
||||
// build menu up from outline list view
|
||||
BListItem* pListItem = m_pMenuOutlineView->ItemUnderAt(NULL, true, index);
|
||||
|
||||
// recursive buildup of menu items
|
||||
BuildMenuItems(pMenu, pListItem, m_pMenuOutlineView);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// MenuView message handlers
|
||||
|
||||
void MenuView::AddMenu(BMessage* message)
|
||||
{
|
||||
if (! Valid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const char* menuName = m_pLabelCtrl->Text();
|
||||
if ((! menuName) || (! *menuName)) {
|
||||
BAlert* pAlert = new BAlert("Add menu alert",
|
||||
"Please specify the menu name first.", "OK");
|
||||
pAlert->Go();
|
||||
return;
|
||||
}
|
||||
|
||||
m_pMenuOutlineView->AddItem(new BStringItem(menuName));
|
||||
|
||||
// add some info and pass to window
|
||||
BMessage newMsg(MSG_WIN_ADD_MENU);
|
||||
newMsg.AddString("Menu Name", menuName);
|
||||
BWindow* pWin = Window();
|
||||
if (pWin) {
|
||||
pWin->PostMessage(&newMsg);
|
||||
}
|
||||
|
||||
// Reset the label control and buttons
|
||||
m_pLabelCtrl->SetText("");
|
||||
SetButtonState();
|
||||
}
|
||||
|
||||
void MenuView::DeleteMenu(BMessage* message)
|
||||
{
|
||||
if (! Valid())
|
||||
return;
|
||||
|
||||
int32 itemCount;
|
||||
int32 selected = m_pMenuOutlineView->CurrentSelection();
|
||||
if (selected < 0)
|
||||
return;
|
||||
|
||||
BStringItem* pSelItem = dynamic_cast<BStringItem*>
|
||||
(m_pMenuOutlineView->ItemAt(selected));
|
||||
if (! pSelItem)
|
||||
return;
|
||||
|
||||
if (pSelItem->OutlineLevel() == 0) {
|
||||
// get index of item among items in 0 level
|
||||
itemCount = m_pMenuOutlineView->CountItemsUnder(NULL, true);
|
||||
int32 i;
|
||||
for (i=0; i<itemCount; i++) {
|
||||
BListItem* pItem = m_pMenuOutlineView->ItemUnderAt(NULL, true, i);
|
||||
if (pItem == pSelItem) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Stuff the index into the message and pass along to
|
||||
// the window.
|
||||
BMessage newMsg(MSG_WIN_DELETE_MENU);
|
||||
newMsg.AddInt32("Menu Index", i);
|
||||
BWindow* pWin = Window();
|
||||
if (pWin) {
|
||||
pWin->PostMessage(&newMsg);
|
||||
}
|
||||
}
|
||||
|
||||
// Find & record all subitems of selection, because we'll
|
||||
// have to delete them after they're removed from the list.
|
||||
BList subItems;
|
||||
int32 j;
|
||||
itemCount = m_pMenuOutlineView->CountItemsUnder(pSelItem, false);
|
||||
for (j=0; j<itemCount; j++) {
|
||||
BListItem* pItem = m_pMenuOutlineView->ItemUnderAt(pSelItem, false, j);
|
||||
subItems.AddItem(pItem);
|
||||
}
|
||||
|
||||
// Note the superitem for reference just below
|
||||
BStringItem* pSuperitem = dynamic_cast<BStringItem*>
|
||||
(m_pMenuOutlineView->Superitem(pSelItem));
|
||||
|
||||
// Remove selected item and all subitems from
|
||||
// the outline list view.
|
||||
m_pMenuOutlineView->RemoveItem(pSelItem); // removes super- and subitems
|
||||
|
||||
// Update window status
|
||||
MenuWindow* pWin = dynamic_cast<MenuWindow*>(Window());
|
||||
if (pWin) {
|
||||
const char* itemName = pSelItem->Text();
|
||||
if (strcmp(itemName, STR_SEPARATOR)) {
|
||||
pWin->UpdateStatus(STR_STATUS_DELETE_ITEM, itemName);
|
||||
} else {
|
||||
pWin->UpdateStatus(STR_STATUS_DELETE_SEPARATOR);
|
||||
}
|
||||
}
|
||||
|
||||
// Delete the selected item and all subitems
|
||||
for (j=0; j<itemCount; j++) {
|
||||
BListItem* pItem = reinterpret_cast<BListItem*>(subItems.ItemAt(j));
|
||||
delete pItem; // deletes subitems
|
||||
}
|
||||
delete pSelItem; // deletes superitem
|
||||
|
||||
if (pSuperitem) {
|
||||
// There's a bug in outline list view which does not
|
||||
// update the superitem correctly. The only way to do so
|
||||
// is to remove and add a brand-new superitem afresh.
|
||||
if (! m_pMenuOutlineView->CountItemsUnder(pSuperitem, true))
|
||||
{
|
||||
int32 index = m_pMenuOutlineView->FullListIndexOf(pSuperitem);
|
||||
m_pMenuOutlineView->RemoveItem(pSuperitem);
|
||||
BStringItem* pCloneItem = new BStringItem(
|
||||
pSuperitem->Text(), pSuperitem->OutlineLevel());
|
||||
m_pMenuOutlineView->AddItem(pCloneItem, index);
|
||||
delete pSuperitem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MenuView::AddMenuItem(BMessage* message)
|
||||
{
|
||||
if (! Valid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add item to outline list view but DON'T update the
|
||||
// window right away; the actual menu items will be
|
||||
// created dynamically later on.
|
||||
int32 selected = m_pMenuOutlineView->CurrentSelection();
|
||||
if (selected >= 0) {
|
||||
BListItem* pSelItem = m_pMenuOutlineView->ItemAt(selected);
|
||||
if (pSelItem) {
|
||||
|
||||
int32 level = pSelItem->OutlineLevel() + 1;
|
||||
int32 index = m_pMenuOutlineView->FullListIndexOf(pSelItem)
|
||||
+ m_pMenuOutlineView->CountItemsUnder(pSelItem, false) + 1;
|
||||
const char* itemName = m_pLabelCtrl->Text();
|
||||
bool bIsSeparator = IsSeparator(itemName);
|
||||
|
||||
if (bIsSeparator) {
|
||||
m_pMenuOutlineView->AddItem(new BStringItem(STR_SEPARATOR, level),
|
||||
index);
|
||||
} else {
|
||||
m_pMenuOutlineView->AddItem(new BStringItem(itemName, level),
|
||||
index);
|
||||
}
|
||||
|
||||
MenuWindow* pWin = dynamic_cast<MenuWindow*>(Window());
|
||||
if (pWin) {
|
||||
if (! bIsSeparator) {
|
||||
pWin->UpdateStatus(STR_STATUS_ADD_ITEM, itemName);
|
||||
} else {
|
||||
pWin->UpdateStatus(STR_STATUS_ADD_SEPARATOR);
|
||||
}
|
||||
}
|
||||
|
||||
m_pMenuOutlineView->Invalidate(); // outline view doesn't
|
||||
// invalidate correctly
|
||||
|
||||
// Reset the label control the buttons
|
||||
m_pLabelCtrl->SetText("");
|
||||
SetButtonState();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MenuView::MenuSelectionChanged(BMessage* message)
|
||||
{
|
||||
SetButtonState();
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// MenuView implementation member functions
|
||||
|
||||
void MenuView::BuildMenuItems(BMenu* pMenu, BListItem* pSuperitem,
|
||||
BOutlineListView* pView)
|
||||
{
|
||||
if ((! pMenu) || (! pSuperitem) || (! pView)) {
|
||||
return;
|
||||
}
|
||||
|
||||
int32 len = pView->CountItemsUnder(pSuperitem, true);
|
||||
if (len == 0) {
|
||||
BMenuItem* pEmptyItem = new BMenuItem(STR_MNU_EMPTY_ITEM, NULL);
|
||||
pEmptyItem->SetEnabled(false);
|
||||
pMenu->AddItem(pEmptyItem);
|
||||
}
|
||||
|
||||
for (int32 i=0; i<len; i++) {
|
||||
BStringItem* pItem = dynamic_cast<BStringItem*>
|
||||
(pView->ItemUnderAt(pSuperitem, true, i));
|
||||
if (pItem) {
|
||||
if (pView->CountItemsUnder(pItem, true) > 0) {
|
||||
// add a submenu & fill it
|
||||
BMenu* pNewMenu = new BMenu(pItem->Text());
|
||||
BuildMenuItems(pNewMenu, pItem, pView);
|
||||
pMenu->AddItem(pNewMenu);
|
||||
} else {
|
||||
if (strcmp(pItem->Text(), STR_SEPARATOR)) {
|
||||
// add a string item
|
||||
BMessage* pMsg = new BMessage(MSG_USER_ITEM);
|
||||
pMsg->AddString("Item Name", pItem->Text());
|
||||
pMenu->AddItem(new BMenuItem(pItem->Text(), pMsg));
|
||||
} else {
|
||||
// add a separator item
|
||||
pMenu->AddItem(new BSeparatorItem());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool MenuView::IsSeparator(const char* text) const
|
||||
{
|
||||
if (! text) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (! *text) {
|
||||
return true;
|
||||
}
|
||||
|
||||
int32 len = strlen(text);
|
||||
for (int32 i = 0; i < len; i++) {
|
||||
char ch = text[i];
|
||||
if ((ch != ' ') && (ch != '-')) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void MenuView::SetButtonState(void)
|
||||
{
|
||||
if (! Valid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// See if an item in the outline list is selected
|
||||
int32 index = m_pMenuOutlineView->CurrentSelection();
|
||||
bool bIsSelected = (index >= 0);
|
||||
|
||||
// If an item is selected, see if the selected
|
||||
// item is a separator
|
||||
bool bSeparatorSelected = false;
|
||||
if (bIsSelected) {
|
||||
BStringItem* pItem = dynamic_cast<BStringItem*>
|
||||
(m_pMenuOutlineView->ItemAt(index));
|
||||
if (pItem) {
|
||||
bSeparatorSelected = (! strcmp(pItem->Text(), STR_SEPARATOR));
|
||||
}
|
||||
}
|
||||
|
||||
// Delete: enable if anything is selected
|
||||
m_pDelButton->SetEnabled(bIsSelected);
|
||||
|
||||
// Add Item: enable if anything but a separator is selected
|
||||
bool bEnableAddItem = bIsSelected && (! bSeparatorSelected);
|
||||
m_pAddItemButton->SetEnabled(bEnableAddItem);
|
||||
|
||||
// Add Menu: enable if there's any text in the label field
|
||||
const char* labelText = m_pLabelCtrl->Text();
|
||||
m_pAddMenuButton->SetEnabled(labelText && (*labelText));
|
||||
|
||||
// Add Item: text says Add Separator if button is enabled
|
||||
// and the label field contains separator text,
|
||||
// Add Item otherwise
|
||||
const char* itemText;
|
||||
if (bEnableAddItem && IsSeparator(labelText)) {
|
||||
itemText = STR_ADD_SEP;
|
||||
} else {
|
||||
itemText = STR_ADD_ITEM;
|
||||
}
|
||||
m_pAddItemButton->SetLabel(itemText);
|
||||
|
||||
// If add item button is enabled, it should be the default
|
||||
if (bEnableAddItem) {
|
||||
m_pAddItemButton->MakeDefault(true);
|
||||
} else {
|
||||
m_pAddMenuButton->MakeDefault(true);
|
||||
}
|
||||
}
|
||||
|
||||
bool MenuView::Valid(void)
|
||||
{
|
||||
if (! m_pLabelCtrl) {
|
||||
ierror(STR_NO_LABEL_CTRL);
|
||||
return false;
|
||||
}
|
||||
if (! m_pHideUserCheck) {
|
||||
ierror(STR_NO_HIDE_USER_CHECK);
|
||||
return false;
|
||||
}
|
||||
if (! m_pLargeTestIconCheck) {
|
||||
ierror(STR_NO_LARGE_ICON_CHECK);
|
||||
return false;
|
||||
}
|
||||
if (! m_pAddMenuButton) {
|
||||
ierror(STR_NO_ADDMENU_BUTTON);
|
||||
return false;
|
||||
}
|
||||
if (! m_pAddItemButton) {
|
||||
ierror(STR_NO_ADDITEM_BUTTON);
|
||||
return false;
|
||||
}
|
||||
if (! m_pDelButton) {
|
||||
ierror(STR_NO_DELETE_BUTTON);
|
||||
return false;
|
||||
}
|
||||
if (! m_pMenuOutlineView) {
|
||||
ierror(STR_NO_MENU_OUTLINE);
|
||||
return false;
|
||||
}
|
||||
if (! m_pScrollView) {
|
||||
ierror(STR_NO_MENU_SCROLL_VIEW);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// MenuView.h
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#ifndef _MenuView_h
|
||||
#define _MenuView_h
|
||||
|
||||
|
||||
#include <View.h>
|
||||
|
||||
class BButton;
|
||||
class BListItem;
|
||||
class BOutlineListView;
|
||||
class BStringView;
|
||||
class BTextControl;
|
||||
//====================================================================
|
||||
// CLASS: MenuView
|
||||
|
||||
class MenuView : public BView
|
||||
{
|
||||
//----------------------------------------------------------------
|
||||
// Constructors, destructors, operators
|
||||
|
||||
public:
|
||||
MenuView(uint32 resizingMode);
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Virtual member function overrides
|
||||
|
||||
public:
|
||||
void MessageReceived(BMessage* message);
|
||||
void AllAttached(void);
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Operations
|
||||
public:
|
||||
void PopulateUserMenu(BMenu* pMenu, int32 index);
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Message handlers
|
||||
|
||||
private:
|
||||
void AddMenu(BMessage* message);
|
||||
void DeleteMenu(BMessage* message);
|
||||
void AddMenuItem(BMessage* message);
|
||||
void MenuSelectionChanged(BMessage* message);
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Implementation member functions
|
||||
|
||||
private:
|
||||
void BuildMenuItems(BMenu* pMenu, BListItem* superitem,
|
||||
BOutlineListView* pView);
|
||||
bool IsSeparator(const char* text) const;
|
||||
void SetButtonState(void);
|
||||
bool Valid(void);
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Member variables
|
||||
|
||||
private:
|
||||
BTextControl* m_pLabelCtrl;
|
||||
BCheckBox* m_pHideUserCheck;
|
||||
BCheckBox* m_pLargeTestIconCheck;
|
||||
BButton* m_pAddMenuButton;
|
||||
BButton* m_pDelButton;
|
||||
BButton* m_pAddItemButton;
|
||||
BOutlineListView* m_pMenuOutlineView;
|
||||
BScrollView* m_pScrollView;
|
||||
};
|
||||
|
||||
#endif /* _MenuView_h */
|
||||
@@ -0,0 +1,358 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// MenuWindow.cpp
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#include <Application.h>
|
||||
#include <Box.h>
|
||||
#include <CheckBox.h>
|
||||
#include <Menu.h>
|
||||
#include <MenuBar.h>
|
||||
#include <MenuItem.h>
|
||||
#include <StringView.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "constants.h"
|
||||
#include "MenuView.h"
|
||||
#include "MenuWindow.h"
|
||||
#include "stddlg.h"
|
||||
|
||||
//====================================================================
|
||||
// MenuWindow Implementation
|
||||
|
||||
#define MAX_TEST_STATUS_CHARS 25
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// MenuWindow constructors, destructors, operators
|
||||
|
||||
MenuWindow::MenuWindow(const char* name)
|
||||
: BWindow(BRect(60,60,60,60), name, B_TITLED_WINDOW,
|
||||
B_NOT_RESIZABLE | B_NOT_ZOOMABLE)
|
||||
{
|
||||
m_bUsingFullMenuBar = true;
|
||||
|
||||
// menu bars
|
||||
BRect dummyFrame(0, 0, 0, 0);
|
||||
m_pFullMenuBar = new BMenuBar(dummyFrame, "Full Menu Bar");
|
||||
m_pHiddenMenuBar = new BMenuBar(dummyFrame, "Menu Bar w. Hidden User Menus");
|
||||
|
||||
// File menu
|
||||
BMenu* pMenu = BuildFileMenu();
|
||||
if (pMenu) {
|
||||
m_pFullMenuBar->AddItem(pMenu);
|
||||
}
|
||||
pMenu = BuildFileMenu();
|
||||
if (pMenu) {
|
||||
m_pHiddenMenuBar->AddItem(pMenu);
|
||||
}
|
||||
|
||||
// Test menu
|
||||
pMenu = m_testMenuBuilder.BuildTestMenu(B_MINI_ICON);
|
||||
if (pMenu) {
|
||||
m_pFullMenuBar->AddItem(pMenu);
|
||||
}
|
||||
pMenu = m_testMenuBuilder.BuildTestMenu(B_MINI_ICON);
|
||||
if (pMenu) {
|
||||
m_pHiddenMenuBar->AddItem(pMenu);
|
||||
}
|
||||
|
||||
// add child after menus are added so its initially
|
||||
// calculated app_server bounds take added menus into
|
||||
// account
|
||||
AddChild(m_pFullMenuBar);
|
||||
|
||||
float menuHeight = m_pFullMenuBar->Bounds().Height();
|
||||
|
||||
// Menu view
|
||||
m_pMenuView = new MenuView(B_FOLLOW_NONE); // don't follow window just yet!
|
||||
m_pMenuView->MoveBy(0, menuHeight + 1);
|
||||
AddChild(m_pMenuView);
|
||||
|
||||
// Status view
|
||||
BRect menuViewRect = m_pMenuView->Frame();
|
||||
float top = menuViewRect.bottom + 1;
|
||||
font_height plainHeight;
|
||||
be_plain_font->GetHeight(&plainHeight);
|
||||
|
||||
// Simulate a vertical divider by making a BBox where only the top side
|
||||
// can be seen in the window.
|
||||
BRect boxFrame;
|
||||
boxFrame.Set(menuViewRect.left - 2,
|
||||
top,
|
||||
menuViewRect.right + 2,
|
||||
top + plainHeight.ascent + plainHeight.descent + plainHeight.leading + 4);
|
||||
|
||||
BBox* pStatusBox = new BBox(boxFrame);
|
||||
AddChild(pStatusBox);
|
||||
|
||||
BRect statusFrame = pStatusBox->Bounds();
|
||||
statusFrame.InsetBy(2,2);
|
||||
m_pStatusView = new BStringView(statusFrame, "Status View", STR_STATUS_DEFAULT,
|
||||
B_FOLLOW_ALL); // don't follow window just yet!
|
||||
m_pStatusView->SetViewColor(BKG_GREY);
|
||||
pStatusBox->AddChild(m_pStatusView);
|
||||
|
||||
// Resize window dynamically to fit MenuView (and Status View)
|
||||
float windowWidth = m_pMenuView->Frame().right;
|
||||
float windowHeight = boxFrame.bottom - 4;
|
||||
ResizeTo(windowWidth, windowHeight);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// MenuWindow virtual function overrides
|
||||
|
||||
void MenuWindow::MenusBeginning(void)
|
||||
{
|
||||
if ((! Valid()) || (! m_bUsingFullMenuBar)) {
|
||||
return;
|
||||
}
|
||||
|
||||
int32 len = m_pFullMenuBar->CountItems();
|
||||
for (int32 i = 2; i < len; i++) // skipping File and Test menus
|
||||
{
|
||||
BMenu* pMenu = m_pFullMenuBar->SubmenuAt(i);
|
||||
if (pMenu) {
|
||||
m_pMenuView->PopulateUserMenu(pMenu, i - 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MenuWindow::MessageReceived(BMessage* message)
|
||||
{
|
||||
switch (message->what) {
|
||||
case MSG_WIN_ADD_MENU:
|
||||
AddMenu(message);
|
||||
break;
|
||||
case MSG_WIN_DELETE_MENU:
|
||||
DeleteMenu(message);
|
||||
break;
|
||||
case MSG_TEST_ITEM:
|
||||
TestMenu(message);
|
||||
break;
|
||||
case MSG_USER_ITEM:
|
||||
UserMenu(message);
|
||||
break;
|
||||
case MSG_WIN_HIDE_USER_MENUS:
|
||||
ToggleUserMenus(message);
|
||||
break;
|
||||
case MSG_WIN_LARGE_TEST_ICONS:
|
||||
ToggleTestIcons(message);
|
||||
break;
|
||||
default:
|
||||
BWindow::MessageReceived(message);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool MenuWindow::QuitRequested(void)
|
||||
{
|
||||
be_app->PostMessage(B_QUIT_REQUESTED);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// MenuWindow operations
|
||||
|
||||
void MenuWindow::UpdateStatus(const char* str1, const char* str2)
|
||||
{
|
||||
uint32 lenTotal = 0, len1 = 0, len2 = 0;
|
||||
|
||||
if (str1)
|
||||
len1 = strlen(str1);
|
||||
if (str2)
|
||||
len2 = strlen(str2);
|
||||
|
||||
lenTotal = len1 + len2;
|
||||
char* updateText = new char[lenTotal+1];
|
||||
updateText[0] = '\0'; // in case str1 and str2 are both NULL
|
||||
|
||||
if (str1)
|
||||
strcpy(updateText, str1);
|
||||
if (str2)
|
||||
strcpy(updateText + len1, str2);
|
||||
|
||||
if (Lock() && Valid()) {
|
||||
m_pStatusView->SetText(updateText);
|
||||
Unlock();
|
||||
}
|
||||
|
||||
delete [] updateText;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// MenuWindow message handlers
|
||||
|
||||
void MenuWindow::AddMenu(BMessage* message)
|
||||
{
|
||||
if (! Valid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const char* menuName;
|
||||
if (message->FindString("Menu Name", &menuName) == B_OK) {
|
||||
m_pFullMenuBar->AddItem(new BMenu(menuName));
|
||||
UpdateStatus(STR_STATUS_ADD_MENU, menuName);
|
||||
}
|
||||
}
|
||||
|
||||
void MenuWindow::DeleteMenu(BMessage* message)
|
||||
{
|
||||
if (! Valid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
int32 i;
|
||||
if (message->FindInt32("Menu Index", &i) == B_OK) {
|
||||
BMenuItem* pItem = m_pFullMenuBar->ItemAt(i+2);
|
||||
if (pItem) {
|
||||
// menu index is the above index + 2 (for File and Test menus)
|
||||
m_pFullMenuBar->RemoveItem(pItem);
|
||||
UpdateStatus(STR_STATUS_DELETE_MENU, pItem->Label());
|
||||
delete pItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MenuWindow::TestMenu(BMessage* message)
|
||||
{
|
||||
if (! Valid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
int32 i;
|
||||
if (message->FindInt32("Item Index", &i) == B_OK) {
|
||||
char numText[3];
|
||||
sprintf(numText, "%ld", i);
|
||||
UpdateStatus(STR_STATUS_TEST, numText);
|
||||
}
|
||||
}
|
||||
|
||||
void MenuWindow::UserMenu(BMessage* message)
|
||||
{
|
||||
if (! Valid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const char* itemName;
|
||||
if (message->FindString("Item Name", &itemName) == B_OK) {
|
||||
UpdateStatus(STR_STATUS_USER, itemName);
|
||||
}
|
||||
}
|
||||
|
||||
void MenuWindow::ToggleUserMenus(BMessage* message)
|
||||
{
|
||||
if (! Valid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
void* pSrc;
|
||||
bool useFullMenus = false;
|
||||
|
||||
if (message->FindPointer("source", &pSrc) == B_OK) {
|
||||
BCheckBox* pCheckBox = reinterpret_cast<BCheckBox*>(pSrc);
|
||||
useFullMenus = (pCheckBox->Value() == B_CONTROL_OFF);
|
||||
}
|
||||
|
||||
if ((! useFullMenus) && m_bUsingFullMenuBar) {
|
||||
RemoveChild(m_pFullMenuBar);
|
||||
AddChild(m_pHiddenMenuBar);
|
||||
m_bUsingFullMenuBar = false;
|
||||
} else if (useFullMenus && (! m_bUsingFullMenuBar)) {
|
||||
RemoveChild(m_pHiddenMenuBar);
|
||||
AddChild(m_pFullMenuBar);
|
||||
m_bUsingFullMenuBar = true;
|
||||
}
|
||||
}
|
||||
|
||||
void MenuWindow::ToggleTestIcons(BMessage* message)
|
||||
{
|
||||
if (! Valid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
void* pSrc;
|
||||
icon_size size = B_MINI_ICON;
|
||||
|
||||
if (message->FindPointer("source", &pSrc) == B_OK) {
|
||||
BCheckBox* pCheckBox = reinterpret_cast<BCheckBox*>(pSrc);
|
||||
size = (pCheckBox->Value() == B_CONTROL_ON) ? B_LARGE_ICON : B_MINI_ICON;
|
||||
}
|
||||
|
||||
ReplaceTestMenu(m_pFullMenuBar, size);
|
||||
ReplaceTestMenu(m_pHiddenMenuBar, size);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// MenuWindow implementation member functions
|
||||
|
||||
bool MenuWindow::Valid(void) const
|
||||
{
|
||||
if (! m_pFullMenuBar) {
|
||||
ierror(STR_NO_FULL_MENU_BAR);
|
||||
return false;
|
||||
}
|
||||
if (! m_pHiddenMenuBar) {
|
||||
ierror(STR_NO_HIDDEN_MENU_BAR);
|
||||
return false;
|
||||
}
|
||||
if (! m_pMenuView) {
|
||||
ierror(STR_NO_MENU_VIEW);
|
||||
return false;
|
||||
}
|
||||
if (! m_pStatusView) {
|
||||
ierror(STR_NO_STATUS_VIEW);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
BMenu* MenuWindow::BuildFileMenu(void) const
|
||||
{
|
||||
BMenu* pMenu = new BMenu(STR_MNU_FILE);
|
||||
|
||||
BMenuItem* pAboutItem = new BMenuItem(STR_MNU_FILE_ABOUT,
|
||||
new BMessage(B_ABOUT_REQUESTED));
|
||||
pAboutItem->SetTarget(NULL, be_app);
|
||||
pMenu->AddItem(pAboutItem);
|
||||
|
||||
pMenu->AddSeparatorItem();
|
||||
|
||||
pMenu->AddItem(new BMenuItem(STR_MNU_FILE_CLOSE,
|
||||
new BMessage(B_QUIT_REQUESTED), CMD_FILE_CLOSE));
|
||||
|
||||
return pMenu;
|
||||
}
|
||||
|
||||
void MenuWindow::ReplaceTestMenu(BMenuBar* pMenuBar, icon_size size)
|
||||
{
|
||||
if (! pMenuBar) {
|
||||
return;
|
||||
}
|
||||
|
||||
BMenu* pTestMenu = m_testMenuBuilder.BuildTestMenu(size);
|
||||
if (pTestMenu) {
|
||||
BMenuItem* pPrevItem = pMenuBar->RemoveItem(1);
|
||||
if (pPrevItem) {
|
||||
delete pPrevItem;
|
||||
}
|
||||
pMenuBar->AddItem(pTestMenu, 1);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// MenuWindow.h
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#ifndef _MenuWindow_h
|
||||
#define _MenuWindow_h
|
||||
|
||||
#include <Message.h>
|
||||
|
||||
#include <Window.h>
|
||||
#include "TestMenuBuilder.h"
|
||||
|
||||
class MenuView;
|
||||
class BButton;
|
||||
class BListItem;
|
||||
class BOutlineListView;
|
||||
class BStringView;
|
||||
class BTextControl;
|
||||
|
||||
//====================================================================
|
||||
// CLASS: MenuWindow
|
||||
|
||||
class MenuWindow : public BWindow
|
||||
{
|
||||
//----------------------------------------------------------------
|
||||
// Constructors, destructors, operators
|
||||
|
||||
public:
|
||||
MenuWindow(const char* name);
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Virtual member function overrides
|
||||
|
||||
public:
|
||||
void MenusBeginning(void);
|
||||
void MessageReceived(BMessage* message);
|
||||
bool QuitRequested(void);
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Operations
|
||||
|
||||
public:
|
||||
void UpdateStatus(const char* str1 = NULL,
|
||||
const char* str2 = NULL);
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Message handlers
|
||||
|
||||
private:
|
||||
void AddMenu(BMessage* message);
|
||||
void DeleteMenu(BMessage* message);
|
||||
void TestMenu(BMessage* message);
|
||||
void UserMenu(BMessage* message);
|
||||
void ToggleUserMenus(BMessage* message);
|
||||
void ToggleTestIcons(BMessage* message);
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Implementation member functions
|
||||
|
||||
private:
|
||||
bool Valid(void) const;
|
||||
BMenu* BuildFileMenu(void) const;
|
||||
void ReplaceTestMenu(BMenuBar* pMenuBar, icon_size size);
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Member variables
|
||||
|
||||
private:
|
||||
BMenuBar* m_pFullMenuBar;
|
||||
BMenuBar* m_pHiddenMenuBar;
|
||||
bool m_bUsingFullMenuBar;
|
||||
BStringView* m_pStatusView;
|
||||
MenuView* m_pMenuView;
|
||||
TestMenuBuilder m_testMenuBuilder;
|
||||
};
|
||||
|
||||
#endif /* _MenuWindow_h */
|
||||
Binary file not shown.
@@ -0,0 +1,45 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// PostDispatchInvoker.cpp
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#include "PostDispatchInvoker.h"
|
||||
#include <Looper.h>
|
||||
|
||||
//====================================================================
|
||||
// PostDispatchInvoker Implementation
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// PostDispatchInvoker constructors, destructors, operators
|
||||
|
||||
PostDispatchInvoker::PostDispatchInvoker(uint32 cmdFilter,
|
||||
BMessage* invokeMsg, BHandler* invokeHandler,
|
||||
BLooper* invokeLooper)
|
||||
: BMessageFilter(cmdFilter, NULL),
|
||||
BInvoker(invokeMsg, invokeHandler, invokeLooper)
|
||||
{ }
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// PostDispatchInvoker virtual function overrides
|
||||
|
||||
filter_result PostDispatchInvoker::Filter(BMessage* message,
|
||||
BHandler** target)
|
||||
{
|
||||
Looper()->DispatchMessage(message, *target);
|
||||
BMessage* pInvMsg = Message();
|
||||
pInvMsg->AddMessage("Dispatched Message", message);
|
||||
pInvMsg->AddPointer("Dispatch Target", *target);
|
||||
Invoke();
|
||||
return B_SKIP_MESSAGE;
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// PostDispatchInvoker.h
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#ifndef _PostDispatchInvoker_h
|
||||
#define _PostDispatchInvoker_h
|
||||
|
||||
#include <MessageFilter.h>
|
||||
#include <Invoker.h>
|
||||
|
||||
//====================================================================
|
||||
// CLASS: PostDispatchInvoker
|
||||
// ---------------------------
|
||||
// A simple kind of message filter which, when it receives a
|
||||
// message of the target type, dispatches it directly to the
|
||||
// looper, then posts a message to a specified handler when
|
||||
// the dispatch is completed. Two fields are appended to the
|
||||
// message before it is delivered:
|
||||
// Dispatched Message B_MESSAGE_TYPE
|
||||
// Dispatch Target B_POINTER_TYPE (BHandler*)
|
||||
//
|
||||
// Most message filters are designed to intercept messages
|
||||
// before they're delievered; this one allows you to do some
|
||||
// handling after they've been delivered.
|
||||
|
||||
class PostDispatchInvoker : public BMessageFilter, public BInvoker
|
||||
{
|
||||
//----------------------------------------------------------------
|
||||
// Constructors, destructors, operators
|
||||
|
||||
public:
|
||||
PostDispatchInvoker(uint32 cmdFilter,
|
||||
BMessage* invokeMsg, BHandler* invokeHandler,
|
||||
BLooper* invokeLooper = NULL);
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Virtual member function overrides
|
||||
|
||||
public:
|
||||
filter_result Filter(BMessage* message, BHandler** target);
|
||||
};
|
||||
|
||||
#endif /* _PostDispatchInvoker_h */
|
||||
@@ -0,0 +1,584 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// TestIcons.h
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#ifndef _TestIcons_h
|
||||
#define _TestIcons_h
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// These icons were generated with the help of the File Types
|
||||
// preference panel. I created these icons by editing the
|
||||
// resource file icons, using the File Types preference panel
|
||||
// and Icon-O-Matic. Then, I selected the menu command
|
||||
// File>Dump Icons in Icon-O-Matic. Finally, I copied and
|
||||
// pasted the icon data from the newly generated ~/Bitmaps.h.
|
||||
|
||||
#define NUM_TEST_ITEMS_ACROSS 3
|
||||
#define NUM_TEST_ITEMS_DOWN 2
|
||||
|
||||
#define LARGE_ICON_BYTES 1024
|
||||
|
||||
const uint8 kLargeIconWidth = 32;
|
||||
const uint8 kLargeIconHeight = 32;
|
||||
const color_space kLargeIconColorSpace = B_COLOR_8_BIT;
|
||||
|
||||
#define MINI_ICON_BYTES 256
|
||||
|
||||
const uint8 kMiniIconWidth = 16;
|
||||
const uint8 kMiniIconHeight = 16;
|
||||
const color_space kMiniIconColorSpace = B_COLOR_8_BIT;
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Large Test Icons
|
||||
|
||||
extern const uint8
|
||||
kLargeTestIcons[NUM_TEST_ITEMS_DOWN][NUM_TEST_ITEMS_ACROSS][LARGE_ICON_BYTES] =
|
||||
{
|
||||
{ /* 1st row */
|
||||
|
||||
{ /* Icon 1 */
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x31,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
|
||||
0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,
|
||||
0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x31,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
|
||||
0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x1b,0x1b,0x1b,0x1b,0x1b
|
||||
},
|
||||
|
||||
{ /* Icon 2 */
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,
|
||||
0x20,0x20,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x26,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x26,0x1b,0x1b,
|
||||
0x26,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,0x1b,
|
||||
0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x1b,0x1b,0x1b,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x26,0x26,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x26,0x26,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x26,0x26,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x26,0x28,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,
|
||||
0x28,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,
|
||||
0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x28,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
|
||||
0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x1b,0x1b,0x1b,0x1b,0x1b
|
||||
},
|
||||
|
||||
{ /* Icon 3 */
|
||||
0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x39,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x39,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x39,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3b,0x39,0x39,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3b,0x3b,0x39,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3b,0x39,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3b,0x39,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3b,0x39,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x1b,0x1b,0x1b,0x1b,0x3b,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x1b,0x1b,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x39,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x39,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x3b,0x39,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x3b,0x39,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3b,0x39,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
|
||||
0x35,0x35,0x35,0x35,0x35,0x39,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3b,0x39,0x39,0x39,0x39,0x35,0x35,0x35,0x35,
|
||||
0x35,0x39,0x39,0x39,0x39,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3b,0x3b,0x3b,0x3b,0x39,0x39,0x39,0x39,
|
||||
0x39,0x39,0x3b,0x3b,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3b,0x3b,0x3b,0x3b,
|
||||
0x3b,0x3b,0x3b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b
|
||||
}
|
||||
|
||||
}, /* end of 1st row */
|
||||
|
||||
{ /* Row 2 */
|
||||
|
||||
{ /* Icon 4 */
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0x92,0x92,0x92,0x92,0x92,0xd2,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,
|
||||
0x52,0x52,0x52,0x52,0x52,0x52,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x92,0x92,0x92,0x92,0x92,0x92,0x92,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b
|
||||
},
|
||||
|
||||
{ /* Icon 5 */
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0xf8,0xf8,0xf8,0xf8,
|
||||
0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x98,0x98,0x98,
|
||||
0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0xf8,0xf8,
|
||||
0xf8,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x98,0x98,
|
||||
0x98,0xf8,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x1b,
|
||||
0x1b,0x98,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x1b,0x1b,0x1b,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0xf8,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xf8,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x98,0xf8,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x98,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x98,0xf8,0xf8,0xf8,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xfa,0xfa,0xfa,0xf8,0xf8,0x98,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x98,0x98,0x98,0xf8,0xf8,0xf8,0xfa,0xfa,0xfa,0xfa,
|
||||
0xfa,0xf8,0xf8,0xf8,0xf8,0x98,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x98,0x98,0x98,0xf8,0xf8,0xf8,0xf8,
|
||||
0xf8,0xf8,0x98,0x98,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x98,0x98,0x98,0x98,
|
||||
0x98,0x98,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b
|
||||
},
|
||||
|
||||
{ /* Icon 6 */
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xe9,0xe9,
|
||||
0xe9,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0xef,0xef,
|
||||
0xef,0xef,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0xef,0x1b,0x1b,
|
||||
0x1b,0x1b,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0xef,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xe9,0xe9,
|
||||
0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xe9,0xef,0xef,0xef,
|
||||
0xef,0xe9,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0xef,0x1b,0x1b,
|
||||
0x1b,0xef,0xef,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,
|
||||
0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xef,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0xef,0xe9,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xef,0xef,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xef,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xef,0xe9,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,
|
||||
0xe0,0xe0,0xe0,0xe0,0xe9,0xe9,0xe9,0xef,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xef,0xef,0xe9,0xe9,0xe9,0xe9,0xe9,
|
||||
0xe9,0xe9,0xe9,0xe9,0xe9,0xef,0xef,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xef,0xef,0xef,0xef,0xef,
|
||||
0xef,0xef,0xef,0xef,0xef,0xef,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b
|
||||
}
|
||||
|
||||
}};
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Mini Test Icons
|
||||
|
||||
extern const uint8
|
||||
kMiniTestIcons[NUM_TEST_ITEMS_DOWN][NUM_TEST_ITEMS_ACROSS][MINI_ICON_BYTES] =
|
||||
{
|
||||
{ /* 1st row */
|
||||
|
||||
{ /* Icon 1 */
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x2a,0x2a,0x2f,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x2a,0x2f,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,
|
||||
0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,
|
||||
0x1b,0x1b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2f,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x1b,0x1b
|
||||
},
|
||||
|
||||
{ /* Icon 2 */
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x26,0x26,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,
|
||||
0x1b,0x1b,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x26,0x26,0x26,0x26,0x1b,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x26,0x26,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,
|
||||
0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,
|
||||
0x1b,0x1b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x26,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x1b,0x1b
|
||||
},
|
||||
|
||||
{ /* Icon 3 */
|
||||
0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x1b,0x1b,
|
||||
0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x1b,0x1b,
|
||||
0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x39,0x39,0x39,0x39,0x35,0x35,0x35,0x35,0x35,0x39,0x39,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x39,0x39,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x39,0x39,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x39,0x39,0x35,0x35,0x35,0x35,0x35,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x39,0x35,0x35,0x35,0x35,0x35,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x35,0x35,0x35,0x35,0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x39,0x1b,0x1b,
|
||||
0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x1b,0x1b,
|
||||
0x1b,0x1b,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x39,0x1b,0x1b,
|
||||
0x1b,0x1b,0x39,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x39,0x39,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x39,0x39,0x35,0x35,0x35,0x35,0x39,0x39,0x39,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x39,0x39,0x39,0x39,0x39,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b
|
||||
}
|
||||
|
||||
}, /* end of 1st row */
|
||||
|
||||
{ /* 2nd row */
|
||||
|
||||
{ /* Icon 4 */
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x52,0x52,0x52,0x52,0x52,0x92,0x52,0x52,0x52,0x52,0x92,0x1b,0x1b,0x1b,
|
||||
0x1b,0x52,0x52,0x52,0x52,0x52,0x92,0x1b,0x52,0x52,0x52,0x52,0x92,0x1b,0x1b,0x1b,
|
||||
0x1b,0x52,0x52,0x52,0x52,0x92,0x1b,0x1b,0x52,0x52,0x52,0x52,0x92,0x1b,0x1b,0x1b,
|
||||
0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x1b,0x1b,
|
||||
0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0x1b,
|
||||
0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0x1b,
|
||||
0x1b,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x92,0x1b,
|
||||
0x1b,0x1b,0x92,0x92,0x92,0x92,0x92,0x92,0x52,0x52,0x52,0x52,0x92,0x92,0x92,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x92,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x92,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x52,0x52,0x52,0x52,0x92,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x92,0x92,0x92,0x92,0x1b,0x1b,0x1b
|
||||
},
|
||||
|
||||
{ /* Icon 5 */
|
||||
0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x1b,0x1b,
|
||||
0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x1b,0x1b,
|
||||
0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x1b,0x1b,
|
||||
0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xf8,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xf8,0x1b,0x1b,
|
||||
0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0x1b,0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xf8,0x1b,0x1b,
|
||||
0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xf8,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0x1b,0x1b,
|
||||
0x1b,0x1b,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0xf8,0x1b,0x1b,
|
||||
0x1b,0x1b,0xf8,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0xf8,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0xf8,0xfa,0xfa,0xfa,0xfa,0xfa,0xf8,0xf8,0xf8,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b
|
||||
},
|
||||
|
||||
{ /* Icon 6 */
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xe9,0xe0,0xe0,0xe0,0xe0,0xe9,0x1b,0x1b,
|
||||
0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe9,0xe9,0x1b,0xe9,0xe0,0xe0,0xe0,0xe9,0x1b,0x1b,
|
||||
0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe9,0x1b,0x1b,0x1b,0xe9,0xe9,0xe9,0xe9,0x1b,0x1b,
|
||||
0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe9,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xe9,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe9,0xe9,0x1b,0xe9,0xe0,0xe0,0xe0,0xe9,0x1b,0x1b,
|
||||
0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe0,0x1b,0x1b,0xe0,0xe0,0xe0,0xe0,0xe9,0x1b,0x1b,
|
||||
0x1b,0x1b,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xe9,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0xe9,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe9,0xe9,0x1b,0x1b,0x1b,
|
||||
0x1b,0x1b,0x1b,0x1b,0x1b,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0x1b,0x1b,0x1b,0x1b
|
||||
}
|
||||
|
||||
}};
|
||||
|
||||
#endif /* _TestIcons_h */
|
||||
@@ -0,0 +1,137 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// TestMenuBuilder.cpp
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#include <Font.h>
|
||||
#include <Menu.h>
|
||||
#include <MenuItem.h>
|
||||
#include <Message.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "constants.h"
|
||||
#include "TestIcons.h"
|
||||
#include "TestMenuBuilder.h"
|
||||
#include "BitmapMenuItem.h"
|
||||
|
||||
//====================================================================
|
||||
// TestMenuBuilder Implementation
|
||||
|
||||
#define TEST_NAME_LENGTH 20
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// TestMenuBuilder entry point
|
||||
|
||||
BMenu* TestMenuBuilder::BuildTestMenu(icon_size size)
|
||||
{
|
||||
BitmapMenuItem *pItemArray[NUM_TEST_ITEMS_DOWN][NUM_TEST_ITEMS_ACROSS];
|
||||
BitmapMenuItem *pTypicalItem = NULL;
|
||||
|
||||
// fill the array of bitmap menu items
|
||||
for (int32 i=0; i<NUM_TEST_ITEMS_DOWN; i++) {
|
||||
for (int32 j=0; j<NUM_TEST_ITEMS_ACROSS; j++) {
|
||||
BBitmap *pBitmap = LoadTestBitmap(i, j, size);
|
||||
if (! pBitmap) {
|
||||
pItemArray[i][j] = NULL;
|
||||
} else {
|
||||
int32 itemIndex = NUM_TEST_ITEMS_ACROSS*i + j + 1;
|
||||
char name[TEST_NAME_LENGTH];
|
||||
sprintf(name, "%s %ld", STR_MNU_TEST_ITEM, itemIndex);
|
||||
BMessage* pTestMsg = new BMessage(MSG_TEST_ITEM);
|
||||
pTestMsg->AddInt32("Item Index", itemIndex);
|
||||
char shortcut = '0' + itemIndex; // the item's number
|
||||
BitmapMenuItem *pItem = new BitmapMenuItem(name, *pBitmap,
|
||||
pTestMsg, shortcut, 0);
|
||||
pItemArray[i][j] = pItem;
|
||||
pTypicalItem = pItem;
|
||||
}
|
||||
delete pBitmap;
|
||||
}
|
||||
}
|
||||
|
||||
float menuHeight, menuWidth;
|
||||
|
||||
// Simplifying assumption: All test items have same width and height.
|
||||
// Use pTypicalItem to calculate frames.
|
||||
if (! pTypicalItem) {
|
||||
// no items to put in a menu
|
||||
return NULL;
|
||||
}
|
||||
float itemHeight, itemWidth;
|
||||
pTypicalItem->GetBitmapSize(&itemWidth, &itemHeight);
|
||||
itemWidth++; // take space between items into account
|
||||
itemHeight++;
|
||||
|
||||
menuWidth = NUM_TEST_ITEMS_ACROSS*itemWidth;
|
||||
menuHeight = NUM_TEST_ITEMS_DOWN*itemHeight;
|
||||
|
||||
// create menu
|
||||
float left, top;
|
||||
BRect frame;
|
||||
BMenu* pMenu = new BMenu(STR_MNU_TEST, menuWidth, menuHeight);
|
||||
for (int32 i=0; i<NUM_TEST_ITEMS_DOWN; i++) {
|
||||
for (int32 j=0; j<NUM_TEST_ITEMS_ACROSS; j++) {
|
||||
BitmapMenuItem* pItem = pItemArray[i][j];
|
||||
if (pItem) {
|
||||
left = j*itemWidth;
|
||||
top = i*itemHeight;
|
||||
frame.Set(left, top, left + itemWidth - 1,
|
||||
top + itemHeight - 1);
|
||||
pMenu->AddItem(pItem, frame);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return pMenu;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// TestMenuBuilder implementation member functions
|
||||
|
||||
BBitmap* TestMenuBuilder::LoadTestBitmap(int32 i, int32 j, icon_size size)
|
||||
{
|
||||
BBitmap* pBitmap;
|
||||
const uint8* bits;
|
||||
uint32 byteLen;
|
||||
color_space iconColorSpace;
|
||||
BRect iconBounds(0,0,0,0);
|
||||
|
||||
if ((i < 0) || (j < 0)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((i >= NUM_TEST_ITEMS_DOWN) || (j >= NUM_TEST_ITEMS_ACROSS)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (size == B_LARGE_ICON) {
|
||||
bits = kLargeTestIcons[i][j];
|
||||
byteLen = LARGE_ICON_BYTES;
|
||||
iconBounds.right = kLargeIconWidth - 1; // 0 counts as a pixel!
|
||||
iconBounds.bottom = kLargeIconHeight - 1;
|
||||
iconColorSpace = kLargeIconColorSpace;
|
||||
} else {
|
||||
bits = kMiniTestIcons[i][j];
|
||||
byteLen = MINI_ICON_BYTES;
|
||||
iconBounds.right = kMiniIconWidth - 1;
|
||||
iconBounds.bottom = kMiniIconHeight - 1;
|
||||
iconColorSpace = kMiniIconColorSpace;
|
||||
}
|
||||
|
||||
pBitmap = new BBitmap(iconBounds, iconColorSpace);
|
||||
uint8* destBits = (uint8*)pBitmap->Bits();
|
||||
memcpy(destBits, bits, byteLen);
|
||||
|
||||
return pBitmap;
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// TestMenuBuilder.h
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#ifndef _TestMenuBuilder_h
|
||||
#define _TestMenuBuilder_h
|
||||
|
||||
#include <Menu.h>
|
||||
#include <Mime.h> /* for icon_size */
|
||||
|
||||
//====================================================================
|
||||
// CLASS: TestMenuBuilder
|
||||
|
||||
class TestMenuBuilder
|
||||
{
|
||||
//----------------------------------------------------------------
|
||||
// Entry point
|
||||
|
||||
public:
|
||||
BMenu* BuildTestMenu(icon_size size);
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Implementation member functions
|
||||
|
||||
private:
|
||||
BBitmap* LoadTestBitmap(int32 i, int32 j, icon_size size);
|
||||
};
|
||||
|
||||
#endif /* _TestMenuBuilder_h */
|
||||
@@ -0,0 +1,261 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// ViewLayoutFactory.cpp
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#include "ViewLayoutFactory.h"
|
||||
|
||||
#include <Button.h>
|
||||
#include <CheckBox.h>
|
||||
#include <TextControl.h>
|
||||
#include <View.h>
|
||||
#include <List.h>
|
||||
#include <algobase.h>
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
|
||||
template <class T>
|
||||
inline T average(const T& x, const T& y)
|
||||
{
|
||||
return (x + y) / 2;
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// ViewLayoutFactory factory generators
|
||||
|
||||
BButton* ViewLayoutFactory::MakeButton(const char* name, const char* label,
|
||||
uint32 msgID, BPoint pos, corner posRef)
|
||||
{
|
||||
BRect dummyFrame(0,0,0,0);
|
||||
BButton* pButton = new BButton(dummyFrame, name, label,
|
||||
new BMessage(msgID));
|
||||
pButton->ResizeToPreferred();
|
||||
MoveViewCorner(*pButton, pos, posRef);
|
||||
return pButton;
|
||||
}
|
||||
|
||||
BCheckBox* ViewLayoutFactory::MakeCheckBox(const char* name,
|
||||
const char* label, uint32 msgID, BPoint pos, corner posRef)
|
||||
{
|
||||
BRect dummyFrame(0,0,0,0);
|
||||
BCheckBox* pCheckBox = new BCheckBox(dummyFrame, name, label,
|
||||
new BMessage(msgID));
|
||||
pCheckBox->ResizeToPreferred();
|
||||
MoveViewCorner(*pCheckBox, pos, posRef);
|
||||
return pCheckBox;
|
||||
}
|
||||
|
||||
BTextControl* ViewLayoutFactory::MakeTextControl(const char* name,
|
||||
const char* label, const char* text, BPoint pos, float controlWidth,
|
||||
corner posRef)
|
||||
{
|
||||
// Note: this function is almost identical to the regular
|
||||
// BTextControl constructor, but it minimizes the label
|
||||
// width and maximizes the field width, instead of divvying
|
||||
// them up half-&-half or 2 : 3, and gives the standard
|
||||
// flexibility of corner positioning.
|
||||
BRect dummyFrame(0,0,0,0);
|
||||
BTextControl* pCtrl = new BTextControl(dummyFrame, name, label,
|
||||
text, NULL);
|
||||
LayoutTextControl(*pCtrl, pos, controlWidth, posRef);
|
||||
return pCtrl;
|
||||
}
|
||||
|
||||
void ViewLayoutFactory::LayoutTextControl(BTextControl& control,
|
||||
BPoint pos, float controlWidth, corner posRef)
|
||||
{
|
||||
control.ResizeToPreferred();
|
||||
BTextView* pTextView = control.TextView();
|
||||
float widthExpand = controlWidth;
|
||||
widthExpand -= control.Bounds().Width();
|
||||
if (widthExpand > 0) {
|
||||
control.ResizeBy(widthExpand, 0);
|
||||
pTextView->ResizeBy(widthExpand, 0);
|
||||
}
|
||||
MoveViewCorner(control, pos, posRef);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// ViewLayoutFactory implementation member functions
|
||||
|
||||
void ViewLayoutFactory::MoveViewCorner(BView& view, BPoint pos, corner posRef)
|
||||
{
|
||||
BRect frame = view.Frame();
|
||||
BPoint topLeft;
|
||||
switch (posRef) {
|
||||
case CORNER_TOPLEFT:
|
||||
topLeft = pos;
|
||||
break;
|
||||
case CORNER_BOTTOMLEFT:
|
||||
topLeft.x = pos.x;
|
||||
topLeft.y = pos.y - frame.Height();
|
||||
break;
|
||||
case CORNER_TOPRIGHT:
|
||||
topLeft.x = pos.x - frame.Width();
|
||||
topLeft.y = pos.y;
|
||||
break;
|
||||
case CORNER_BOTTOMRIGHT:
|
||||
topLeft.x = pos.x - frame.Width();
|
||||
topLeft.y = pos.y - frame.Height();
|
||||
break;
|
||||
}
|
||||
|
||||
view.MoveTo(topLeft);
|
||||
}
|
||||
|
||||
void ViewLayoutFactory::Align(BList& viewList, align_side side,
|
||||
float alignLen)
|
||||
{
|
||||
int32 i, len = viewList.CountItems();
|
||||
if (len <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
// make sure alignment is recognized
|
||||
if ((side != ALIGN_LEFT) && (side != ALIGN_TOP)
|
||||
&& (side != ALIGN_RIGHT) && (side != ALIGN_BOTTOM)
|
||||
&& (side != ALIGN_HCENTER) && (side != ALIGN_VCENTER))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// find initial location for placement, based on head item
|
||||
BPoint viewLoc;
|
||||
BView* pView = reinterpret_cast<BView*>(viewList.ItemAt(0));
|
||||
if (! pView) {
|
||||
return;
|
||||
}
|
||||
|
||||
BRect frame = pView->Frame();
|
||||
switch (side) {
|
||||
case ALIGN_LEFT:
|
||||
case ALIGN_TOP:
|
||||
viewLoc.Set(frame.left, frame.top);
|
||||
break;
|
||||
case ALIGN_RIGHT:
|
||||
viewLoc.Set(frame.right, frame.top);
|
||||
break;
|
||||
case ALIGN_BOTTOM:
|
||||
viewLoc.Set(frame.left, frame.bottom);
|
||||
break;
|
||||
case ALIGN_HCENTER:
|
||||
viewLoc.Set(frame.left, average(frame.top, frame.bottom));
|
||||
break;
|
||||
case ALIGN_VCENTER:
|
||||
viewLoc.Set(average(frame.left, frame.right), frame.top);
|
||||
printf("Aligning along vcenter\nInitial position: ");
|
||||
viewLoc.PrintToStream();
|
||||
break;
|
||||
}
|
||||
|
||||
// align items relative to head item
|
||||
for (i=1; i<len; i++) {
|
||||
BView* pView = reinterpret_cast<BView*>(viewList.ItemAt(i));
|
||||
if (pView) {
|
||||
switch (side) {
|
||||
case ALIGN_LEFT:
|
||||
viewLoc.y += alignLen;
|
||||
MoveViewCorner(*pView, viewLoc, CORNER_TOPLEFT);
|
||||
break;
|
||||
case ALIGN_TOP:
|
||||
viewLoc.x += alignLen;
|
||||
MoveViewCorner(*pView, viewLoc, CORNER_TOPLEFT);
|
||||
break;
|
||||
case ALIGN_RIGHT:
|
||||
viewLoc.y += alignLen;
|
||||
MoveViewCorner(*pView, viewLoc, CORNER_TOPRIGHT);
|
||||
break;
|
||||
case ALIGN_BOTTOM:
|
||||
viewLoc.x += alignLen;
|
||||
MoveViewCorner(*pView, viewLoc, CORNER_BOTTOMLEFT);
|
||||
break;
|
||||
case ALIGN_HCENTER:
|
||||
{
|
||||
viewLoc.x += alignLen;
|
||||
BPoint moveLoc = viewLoc;
|
||||
BRect r = pView->Frame();
|
||||
moveLoc.y -= (r.bottom - r.top) / 2;
|
||||
MoveViewCorner(*pView, moveLoc, CORNER_TOPLEFT);
|
||||
break;
|
||||
}
|
||||
case ALIGN_VCENTER:
|
||||
{
|
||||
viewLoc.y += alignLen;
|
||||
BPoint moveLoc = viewLoc;
|
||||
BRect r = pView->Frame();
|
||||
moveLoc.x -= (r.right - r.left) / 2;
|
||||
MoveViewCorner(*pView, moveLoc, CORNER_TOPLEFT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ViewLayoutFactory::ResizeToListMax(BList& viewList, rect_dim resizeDim,
|
||||
corner anchor)
|
||||
{
|
||||
int32 i, len = viewList.CountItems();
|
||||
float maxWidth = 0.0f, maxHeight = 0.0f;
|
||||
float curWidth = 0.0f, curHeight = 0.0f;
|
||||
|
||||
// find maximum dimensions
|
||||
for (i=0; i<len; i++) {
|
||||
BView* pView = reinterpret_cast<BView*>(viewList.ItemAt(i));
|
||||
if (pView) {
|
||||
BRect frame = pView->Frame();
|
||||
curWidth = frame.Width();
|
||||
curHeight = frame.Height();
|
||||
if (curWidth > maxWidth) {
|
||||
maxWidth = curWidth;
|
||||
}
|
||||
if (curHeight > maxHeight) {
|
||||
maxHeight = curHeight;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// now resize everything in the list based on selected dimension
|
||||
for (i=0; i<len; i++) {
|
||||
BView* pView = reinterpret_cast<BView*>(viewList.ItemAt(i));
|
||||
if (pView) {
|
||||
float newWidth, newHeight;
|
||||
BRect frame = pView->Frame();
|
||||
newWidth = (resizeDim & RECT_WIDTH)
|
||||
? maxWidth : frame.Width();
|
||||
newHeight = (resizeDim & RECT_HEIGHT)
|
||||
? maxHeight : frame.Height();
|
||||
pView->ResizeTo(newWidth, newHeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ViewLayoutFactory::ResizeAroundChildren(BView& view, BPoint margin)
|
||||
{
|
||||
float fMax_x = 0.0f, fMax_y = 0.0f;
|
||||
int32 numChild = view.CountChildren();
|
||||
for (int32 i = 0; i < numChild; i++)
|
||||
{
|
||||
BView* childView = view.ChildAt(i);
|
||||
if (childView) {
|
||||
BRect r = childView->Frame();
|
||||
fMax_x = max(fMax_x, r.right);
|
||||
fMax_y = max(fMax_y, r.bottom);
|
||||
}
|
||||
}
|
||||
|
||||
fMax_x += margin.x;
|
||||
fMax_y += margin.y;
|
||||
view.ResizeTo(fMax_x, fMax_y);
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// ViewLayoutFactory.h
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#ifndef _ViewLayoutFactory_h
|
||||
#define _ViewLayoutFactory_h
|
||||
|
||||
#include <SupportDefs.h>
|
||||
|
||||
typedef enum { CORNER_TOPLEFT, CORNER_BOTTOMLEFT,
|
||||
CORNER_TOPRIGHT, CORNER_BOTTOMRIGHT } corner;
|
||||
|
||||
// bit flags
|
||||
typedef enum { RECT_WIDTH = 1, RECT_HEIGHT,
|
||||
RECT_WIDTH_AND_HEIGHT } rect_dim;
|
||||
|
||||
typedef enum { ALIGN_LEFT, ALIGN_TOP, ALIGN_RIGHT,
|
||||
ALIGN_BOTTOM, ALIGN_HCENTER, ALIGN_VCENTER } align_side;
|
||||
|
||||
//====================================================================
|
||||
// CLASS: ViewLayoutFactory
|
||||
// ---------------------------
|
||||
// A class, still under construction, that handles some
|
||||
// simple view layout problems. Primarily, it creates
|
||||
// standard Interface Kit views that are automatically
|
||||
// set to their preferred size. In addition, it provides:
|
||||
//
|
||||
// * Positioning of views using any one of the corners of
|
||||
// the view's rectangle
|
||||
// * Alignment of a group of views along one edge or center,
|
||||
// to a specified distance between views.
|
||||
// * Adjustment of the width or height of a group of views
|
||||
// to the maximum value represented by the group.
|
||||
// * Resizing of a view to surround all of its children,
|
||||
// plus a specified margin on the right and bottom sides.
|
||||
|
||||
class ViewLayoutFactory
|
||||
{
|
||||
//----------------------------------------------------------------
|
||||
// Factory generators
|
||||
|
||||
public:
|
||||
BButton* MakeButton(const char* name, const char* label,
|
||||
uint32 msgID, BPoint pos,
|
||||
corner posRef = CORNER_TOPLEFT);
|
||||
BCheckBox* MakeCheckBox(const char* name, const char* label,
|
||||
uint32 msgID, BPoint pos,
|
||||
corner posRef = CORNER_TOPLEFT);
|
||||
BTextControl* MakeTextControl(const char* name, const char* label,
|
||||
const char* text, BPoint pos, float controlWidth,
|
||||
corner posRef = CORNER_TOPLEFT);
|
||||
|
||||
void LayoutTextControl(BTextControl& control,
|
||||
BPoint pos, float controlWidth,
|
||||
corner posRef = CORNER_TOPLEFT);
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Other operations
|
||||
|
||||
public:
|
||||
void MoveViewCorner(BView& view, BPoint pos,
|
||||
corner posRef = CORNER_TOPLEFT);
|
||||
void Align(BList& viewList, align_side side,
|
||||
float alignLen);
|
||||
void ResizeToListMax(BList& viewList, rect_dim resizeDim,
|
||||
corner anchor = CORNER_TOPLEFT);
|
||||
void ResizeAroundChildren(BView& view, BPoint margin);
|
||||
};
|
||||
|
||||
#endif /* _ViewLayoutFactory_h */
|
||||
@@ -0,0 +1,9 @@
|
||||
MenuWorld
|
||||
|
||||
This is an application which demostrates customizing menus in the Interface Kit. It ties in with the newsletter article "Mucking With Menus," located at:
|
||||
|
||||
http://www.be.com/aboutbe/benewsletter/volume_II/Issue30.html#Workshop
|
||||
|
||||
See the About box... for directions on using MenuWorld, and the newsletter article for other salient points.
|
||||
|
||||
-- Owen Smith, 29-Jul-98
|
||||
@@ -0,0 +1,177 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// constants.cpp
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#include "constants.h"
|
||||
|
||||
extern const char* STR_APP_SIG
|
||||
= "application/x-vnd.BeDTS.MenuWorld";
|
||||
|
||||
#if defined(LOCALE_USA)
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// American English Strings
|
||||
|
||||
|
||||
extern const char* STR_APP_NAME
|
||||
= "MenuWorld";
|
||||
|
||||
extern const char* STR_IERROR
|
||||
= "Internal Error:\n";
|
||||
|
||||
extern const char* STR_SEPARATOR
|
||||
= "--------------------";
|
||||
|
||||
extern const char* STR_NO_FULL_MENU_BAR
|
||||
= "Couldn't find the window's menu bar.";
|
||||
|
||||
extern const char* STR_NO_HIDDEN_MENU_BAR
|
||||
= "Couldn't find the window's hidden menu bar.";
|
||||
|
||||
extern const char* STR_NO_MENU_VIEW
|
||||
= "Couldn't find the window's menu view";
|
||||
|
||||
extern const char* STR_NO_STATUS_VIEW
|
||||
= "Couldn't find the window's status view";
|
||||
|
||||
extern const char* STR_NO_LABEL_CTRL
|
||||
= "Couldn't find the label edit field.";
|
||||
|
||||
extern const char* STR_NO_HIDE_USER_CHECK
|
||||
= "Couldn't find the hide user menus check box.";
|
||||
|
||||
extern const char* STR_NO_LARGE_ICON_CHECK
|
||||
= "Couldn't find the large test icons check box.";
|
||||
|
||||
extern const char* STR_NO_ADDMENU_BUTTON
|
||||
= "Couldn't find the add menu button.";
|
||||
|
||||
extern const char* STR_NO_ADDITEM_BUTTON
|
||||
= "Couldn't find the add menu item button.";
|
||||
|
||||
extern const char* STR_NO_DELETE_BUTTON
|
||||
= "Couldn't find the delete button.";
|
||||
|
||||
extern const char* STR_NO_MENU_OUTLINE
|
||||
= "Couldn't find the menu outline list.";
|
||||
|
||||
extern const char* STR_NO_MENU_SCROLL_VIEW
|
||||
= "Couldn't find the menu outline list scroll view.";
|
||||
|
||||
extern const char* STR_MNU_FILE
|
||||
= "File";
|
||||
|
||||
extern const char* STR_MNU_FILE_ABOUT
|
||||
= "About...";
|
||||
|
||||
extern const char* STR_MNU_FILE_CLOSE
|
||||
= "Close";
|
||||
|
||||
extern const char* STR_MNU_TEST
|
||||
= "Test";
|
||||
|
||||
extern const char* STR_MNU_TEST_ITEM
|
||||
= "Test Item";
|
||||
|
||||
extern const char* STR_MNU_EMPTY_ITEM
|
||||
= "(Empty menu)";
|
||||
|
||||
extern const char* STR_LABEL_CTRL
|
||||
= "Label:";
|
||||
|
||||
extern const char* STR_HIDE_USER_MENUS
|
||||
= "Hide User Menus";
|
||||
|
||||
extern const char* STR_LARGE_TEST_ICONS
|
||||
= "Large Test Icons";
|
||||
|
||||
extern const char* STR_ADD_MENU
|
||||
= "Add Menu";
|
||||
|
||||
extern const char* STR_ADD_ITEM
|
||||
= "Add Item";
|
||||
|
||||
extern const char* STR_ADD_SEP
|
||||
= "Add Separator";
|
||||
|
||||
extern const char* STR_DELETE_MENU
|
||||
= "Delete";
|
||||
|
||||
extern const char* STR_STATUS_DEFAULT
|
||||
= "";
|
||||
|
||||
extern const char* STR_STATUS_TEST
|
||||
= "Test item selected: ";
|
||||
|
||||
extern const char* STR_STATUS_USER
|
||||
= "Menu item selected: ";
|
||||
|
||||
extern const char* STR_STATUS_ADD_MENU
|
||||
= "Added menu: ";
|
||||
|
||||
extern const char* STR_STATUS_ADD_ITEM
|
||||
= "Added menu item: ";
|
||||
|
||||
extern const char* STR_STATUS_ADD_SEPARATOR
|
||||
= "Added separator menu item";
|
||||
|
||||
extern const char* STR_STATUS_DELETE_MENU
|
||||
= "Deleted menu: ";
|
||||
|
||||
extern const char* STR_STATUS_DELETE_ITEM
|
||||
= "Deleted menu item: ";
|
||||
|
||||
extern const char* STR_STATUS_DELETE_SEPARATOR
|
||||
= "Deleted separator menu item";
|
||||
|
||||
extern const char* STR_ABOUT_TITLE
|
||||
= "About MenuWorld";
|
||||
|
||||
extern const char* STR_ABOUT_BUTTON
|
||||
= "Struth!";
|
||||
|
||||
extern const char* STR_ABOUT_DESC
|
||||
= "MenuWorld: a menu editing example\n\n"
|
||||
"How to use:\n"
|
||||
" Type some text into the label field, and "
|
||||
"press \"Add Menu\" to add a menu.\n"
|
||||
" Select an item in the outline list, and "
|
||||
"press \"Delete\" to remove it.\n"
|
||||
" Select an item in the outline list, type "
|
||||
"some text into the label field, and press "
|
||||
"\"Add Item\" to add an item under the selected "
|
||||
"item. If nothing besides spaces or dashes is "
|
||||
"typed in, a separator item will be created.\n"
|
||||
" \"Hide User Menus\" hides the menus you've "
|
||||
"generated.\n"
|
||||
" \"Large Test Icons\" changes the size of "
|
||||
"the numbers in the Test menu.";
|
||||
|
||||
#endif /* LOCALE_USA */
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Shortcuts
|
||||
|
||||
extern const char CMD_FILE_CLOSE
|
||||
= 'W';
|
||||
|
||||
extern const char CMD_TEST_ICON_SIZE
|
||||
= 'I';
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Colors
|
||||
|
||||
extern const rgb_color BKG_GREY = { 216, 216, 216, 0 };
|
||||
@@ -0,0 +1,97 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// constants.h
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#ifndef _constants_h
|
||||
#define _constants_h
|
||||
|
||||
#include <GraphicsDefs.h>
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Message IDs
|
||||
|
||||
const int32 MSG_WIN_ADD_MENU = 'oWAM';
|
||||
const int32 MSG_WIN_DELETE_MENU = 'oWDM';
|
||||
const int32 MSG_VIEW_ADD_MENU = 'oVAM';
|
||||
const int32 MSG_VIEW_DELETE_MENU = 'oVDM';
|
||||
const int32 MSG_VIEW_ADD_ITEM = 'oVAI';
|
||||
const int32 MSG_WIN_HIDE_USER_MENUS = 'oWHU';
|
||||
const int32 MSG_WIN_LARGE_TEST_ICONS = 'oWFM';
|
||||
const int32 MSG_MENU_OUTLINE_SEL = 'oSMU';
|
||||
const int32 MSG_TEST_ITEM = 'oWTM';
|
||||
const int32 MSG_USER_ITEM = 'oWUM';
|
||||
const int32 MSG_LABEL_EDIT = 'oLED';
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Strings
|
||||
|
||||
extern const char* STR_APP_SIG;
|
||||
|
||||
// Simple localization scheme
|
||||
#define LOCALE_USA
|
||||
|
||||
extern const char* STR_APP_NAME;
|
||||
extern const char* STR_IERROR;
|
||||
extern const char* STR_SEPARATOR;
|
||||
extern const char* STR_NO_FULL_MENU_BAR;
|
||||
extern const char* STR_NO_HIDDEN_MENU_BAR;
|
||||
extern const char* STR_NO_MENU_VIEW;
|
||||
extern const char* STR_NO_STATUS_VIEW;
|
||||
extern const char* STR_NO_LABEL_CTRL;
|
||||
extern const char* STR_NO_HIDE_USER_CHECK;
|
||||
extern const char* STR_NO_LARGE_ICON_CHECK;
|
||||
extern const char* STR_NO_ADDMENU_BUTTON;
|
||||
extern const char* STR_NO_ADDITEM_BUTTON;
|
||||
extern const char* STR_NO_DELETE_BUTTON;
|
||||
extern const char* STR_NO_MENU_OUTLINE;
|
||||
extern const char* STR_NO_MENU_SCROLL_VIEW;
|
||||
extern const char* STR_MNU_FILE;
|
||||
extern const char* STR_MNU_FILE_ABOUT;
|
||||
extern const char* STR_MNU_FILE_CLOSE;
|
||||
extern const char* STR_MNU_TEST;
|
||||
extern const char* STR_MNU_TEST_ITEM;
|
||||
extern const char* STR_MNU_EMPTY_ITEM;
|
||||
extern const char* STR_LABEL_CTRL;
|
||||
extern const char* STR_HIDE_USER_MENUS;
|
||||
extern const char* STR_LARGE_TEST_ICONS;
|
||||
extern const char* STR_ADD_MENU;
|
||||
extern const char* STR_ADD_ITEM;
|
||||
extern const char* STR_ADD_SEP;
|
||||
extern const char* STR_DELETE_MENU;
|
||||
extern const char* STR_STATUS_DEFAULT;
|
||||
extern const char* STR_STATUS_TEST;
|
||||
extern const char* STR_STATUS_USER;
|
||||
extern const char* STR_STATUS_ADD_MENU;
|
||||
extern const char* STR_STATUS_ADD_ITEM;
|
||||
extern const char* STR_STATUS_ADD_SEPARATOR;
|
||||
extern const char* STR_STATUS_DELETE_SEPARATOR;
|
||||
extern const char* STR_STATUS_DELETE_MENU;
|
||||
extern const char* STR_STATUS_DELETE_ITEM;
|
||||
extern const char* STR_ABOUT_TITLE;
|
||||
extern const char* STR_ABOUT_BUTTON;
|
||||
extern const char* STR_ABOUT_DESC;
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Shortcuts
|
||||
|
||||
extern const char CMD_FILE_CLOSE;
|
||||
extern const char CMD_TEST_ICON_SIZE;
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Colors
|
||||
|
||||
extern const rgb_color BKG_GREY;
|
||||
|
||||
#endif /* _constants_h */
|
||||
@@ -0,0 +1,23 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// main.cpp
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#include "MenuApp.h"
|
||||
|
||||
int main(void)
|
||||
{
|
||||
MenuApp app;
|
||||
app.Run();
|
||||
return B_NO_ERROR;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// stddlg.cpp
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#include <Alert.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "constants.h"
|
||||
#include "stddlg.h"
|
||||
|
||||
void ierror(const char* msg)
|
||||
{
|
||||
char* fullMsg = new char[strlen(STR_IERROR) + strlen(msg) + 1];
|
||||
strcpy(fullMsg, STR_IERROR);
|
||||
strcpy(fullMsg, msg);
|
||||
BAlert alert("Internal Error", fullMsg, "OK", NULL, NULL,
|
||||
B_WIDTH_AS_USUAL, B_STOP_ALERT);
|
||||
alert.Go();
|
||||
delete [] fullMsg;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// stddlg.h
|
||||
//
|
||||
// Written by: Owen Smith
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
*/
|
||||
|
||||
#ifndef _stddlg_h
|
||||
#define _stddlg_h
|
||||
|
||||
void ierror(const char* msg);
|
||||
|
||||
#endif /* _stddlg_h */
|
||||
Reference in New Issue
Block a user