Exemplo n.º 1
0
void
JXToolBar::Receive
	(
	JBroadcaster*	sender,
	const Message&	message
	)
{
	JBoolean propagate = kJTrue;

	JPrefsManager* prefsMgr;
	JIndex prefID;
	const JBoolean hasPrefs = GetPrefInfo(&prefsMgr, &prefID);

	if (message.Is(JXButton::kPushed))
		{
		const JSize count = itsButtons->GetElementCount();
		for (JIndex i=1; i<=count; i++)
			{
			JXToolBarButton* button = itsButtons->NthElement(i);
			if (sender == button)
				{
				JXTextMenu* menu = button->GetMenu();
				menu->PrepareToOpenMenu();
				JIndex itemIndex;
				if (button->GetMenuItemIndex(&itemIndex) &&
					menu->itsBaseItemData->IsEnabled(itemIndex))
					{
					JXDisplay* display = GetDisplay();	// need local copy, since we might be deleted
					Display* xDisplay  = *display;
					Window xWindow     = (GetWindow())->GetXWindow();

					menu->BroadcastSelection(itemIndex, kJFalse);

					if (!JXDisplay::WindowExists(display, xDisplay, xWindow))
						{
						// we have been deleted
						return;
						}

					UpdateButtons();
					}
				propagate = kJFalse;
				break;
				}
			}
		}

	else if (sender == itsTimerTask && message.Is(JXTimerTask::kTimerWentOff))
		{
		UpdateButtons();
		propagate = kJFalse;
		}

	else if (sender == itsEditDialog && message.Is(JXDialogDirector::kDeactivated))
		{
		const JXDialogDirector::Deactivated* info =
			dynamic_cast(const JXDialogDirector::Deactivated*, &message);
		assert(info != NULL);
		if (info->Successful())
			{
			ExtractChanges();
			}
		delete itsMenuTree;
		itsMenuTree = NULL;
		itsEditDialog = NULL;
		propagate = kJFalse;
		}
	else if (hasPrefs &&