Exemplo n.º 1
0
TestWidget::TestWidget
(
    const JBoolean		isMaster,
    const JBoolean		isImage,
    const JBoolean		allocDynamicColors,
    JXMenuBar*			menuBar,
    JXScrollbarSet*		scrollbarSet,
    JXContainer*		enclosure,
    const HSizingOption	hSizing,
    const VSizingOption	vSizing,
    const JCoordinate	x,
    const JCoordinate	y,
    const JCoordinate	w,
    const JCoordinate	h
)
    :
    JXScrollableWidget(scrollbarSet, enclosure, hSizing, vSizing, x,y, w,h),
    itsRNG()
{
    JIndex i;

    itsFillFlag       = kJFalse;
    itsNextAnimColor  = (GetColormap())->GetGreenColor();
    itsRandPointCount = 10;
    itsResizeDialog   = NULL;

    // cursors

    JXDisplay* display = GetDisplay();
    itsTrekCursor      = display->CreateBuiltInCursor("XC_trek",     XC_trek);
    itsGumbyCursor     = display->CreateBuiltInCursor("XC_gumby",    XC_gumby);
    itsBogosityCursor  = display->CreateBuiltInCursor("XC_bogosity", XC_bogosity);
    itsFleurCursor     = display->CreateBuiltInCursor("XC_fleur",    XC_fleur);
    SetDefaultCursor(itsTrekCursor);

    // dynamic colors

    itsAnimColorList = new JArray<JColorIndex>(kAnimColorCount);
    assert( itsAnimColorList != NULL );

    JArray<JDynamicColorInfo>* colorList =
        new JArray<JDynamicColorInfo>(kAnimColorCount);
    assert( colorList != NULL );

    JXColormap* colormap = GetColormap();
    if (allocDynamicColors)
    {
        for (i=1; i<=kAnimColorCount; i++)
        {
            JDynamicColorInfo info;
            if (colormap->AllocateDynamicColor(0,0,0, &(info.index)))
            {
                colorList->AppendElement(info);
                itsAnimColorList->AppendElement(info.index);
            }
            else
            {
                cerr << "Unable to allocate dynamic color " << i << endl;
                break;
            }
        }
    }

    if (!colorList->IsEmpty())
    {
        itsAnimColorTask = new AnimateColorTask(colormap, colorList);
        assert( itsAnimColorTask != NULL );
    }
    else
    {
        delete colorList;
        itsAnimColorTask = NULL;
    }

    ListenTo(GetWindow());		// remove AnimateColorTask when iconified

    // menus

    itsActionsMenu = menuBar->AppendTextMenu(kActionsMenuTitleStr);
    itsActionsMenu->SetTitleFontStyle((GetColormap())->GetWhiteColor());
    itsActionsMenu->SetShortcuts(kActionsMenuShortcutStr);
    itsActionsMenu->SetMenuItems(kActionsMenuStr);
    itsActionsMenu->SetUpdateAction(JXMenu::kDisableNone);
    ListenTo(itsActionsMenu);

    itsPointMenu = new JXTextMenu(itsActionsMenu, kPointMenuCmd, menuBar);
    assert( itsPointMenu != NULL );
    itsPointMenu->SetMenuItems(kPointMenuStr);
    itsPointMenu->SetUpdateAction(JXMenu::kDisableNone);
    ListenTo(itsPointMenu);

    // This tests the JX response to an empty menu.
    JXTextMenu* emptyMenu = new JXTextMenu(itsActionsMenu, kEmptyMenuCmd, menuBar);
    assert( emptyMenu != NULL );

    JXMenu* prevMenu     = itsActionsMenu;
    JIndex prevMenuIndex = kAdviceMenuCmd;
    for (i=1; i<=kAdviceMenuCount; i++)
    {
        JXTextMenu* adviceMenu = new JXTextMenu(prevMenu, prevMenuIndex, menuBar);
        assert( adviceMenu != NULL );
        adviceMenu->SetMenuItems(kAdviceMenuStr[i-1]);
        adviceMenu->SetUpdateAction(JXMenu::kDisableNone);

        if (i == kAdviceBoldMenuIndex)
        {
            adviceMenu->SetItemFontStyle(2,
                                         JFontStyle(kJTrue, kJFalse, 0, kJFalse, (GetColormap())->GetBlackColor()));
        }

        prevMenu      = adviceMenu;
        prevMenuIndex = 2;
    }

    BuildXlsfontsMenu(itsActionsMenu, menuBar);

    // secret menus are a bad idea because the user can't find them!

    itsSecretMenu = new JXTextMenu("", this, kFixedLeft, kFixedTop, 0,0, 10,10);
    assert( itsSecretMenu != NULL );
    itsSecretMenu->SetMenuItems(kSecretMenuStr);
    itsSecretMenu->SetUpdateAction(JXMenu::kDisableNone);
    itsSecretMenu->SetToHiddenPopupMenu(kJTrue);		// will assert() otherwise
    itsSecretMenu->Hide();
    ListenTo(itsSecretMenu);

    itsSecretSubmenu = new JXTextMenu(itsSecretMenu, kSecretSubmenuIndex, this);
    assert( itsSecretSubmenu != NULL );
    itsSecretSubmenu->SetMenuItems(kSecretSubmenuStr);
    itsSecretSubmenu->SetUpdateAction(JXMenu::kDisableNone);
    // we don't ListenTo() it because it's only there for show

    // image from xpm

    itsXPMImage = new JXImage(GetDisplay(), GetColormap(), JXPM(macapp_xpm));
    assert( itsXPMImage != NULL );

    // partial image from image

    itsPartialXPMImage = new JXImage(*itsXPMImage, JRect(5,5,14,16));
    assert( itsPartialXPMImage != NULL );

    // home symbol

    itsHomeImage = new JXImage(GetDisplay(), GetColormap(), JXPM(home_xpm));
    assert( itsHomeImage != NULL );

    itsHomeRect = itsHomeImage->GetBounds();
    itsHomeRect.Shift(120, 10);

    // buffer contents of Widget in JXImage

    itsImageBuffer = NULL;
    if (isImage)
    {
        CreateImageBuffer();
    }

    // initial size

    SetBounds(400,400);

    // enclosed objects

    itsAnimButton =
        new JXTextButton("Start", this, JXWidget::kFixedLeft, JXWidget::kFixedTop,
                         37,175, 50,30);
    assert( itsAnimButton != NULL );
    itsAnimButton->SetShortcuts("#A");
    ListenTo(itsAnimButton);

    if (isMaster)
    {
        itsQuitButton =
            new JXTextButton("Quit", this, JXWidget::kFixedRight, JXWidget::kFixedBottom,
                             x,y, 50,30);
        assert( itsQuitButton != NULL );

        JXColormap* colormap = GetColormap();
        itsQuitButton->CenterWithinEnclosure(kJTrue, kJTrue);
        itsQuitButton->SetFontStyle(JFontStyle(kJTrue, kJFalse, 0, kJFalse, colormap->GetRedColor()));
        itsQuitButton->SetNormalColor(colormap->GetCyanColor());
        itsQuitButton->SetPushedColor(colormap->GetBlueColor());

        ListenTo(itsQuitButton);
    }
    else
    {
        itsQuitButton = NULL;
    }

    // drops on iconfied window

    JXWindowIcon* windowIcon;
    const JBoolean hasIconWindow = (GetWindow())->GetIconWidget(&windowIcon);
    assert( hasIconWindow );
    ListenTo(windowIcon);
}