예제 #1
0
PushButton* Menu::_addButton( int startPic, bool pushBtn, int yMul,
                              int id, bool haveSubmenu, int midPic,
                              const std::string& ident, const Rect& rect )
{
    Point offset( 1, 32 );
    int dy = 35;

    MenuButton* ret = new MenuButton( this, Point( 0, 0 ), -1, -1, startPic, pushBtn );
    ret->setID( id | ( haveSubmenu ? BuildMenu::subMenuCreateIdHigh : 0 ) );
    Point temp = offset + Point( 0, dy * yMul );
    if( _d->koeff != 1 )
    {
        temp.setX( ceil( temp.x() * _d->koeff) );
        temp.setY( temp.y() * _d->koeff );
        ret->setWidth( ceil( ret->width() * _d->koeff ) );
        ret->setHeight( ceil( ret->height() * _d->koeff ) );
    }
    ret->setPosition( temp );
    ret->setTooltipText( _( "##extm_"+ident+"_tlp##" ) );
    ret->setSound( "extm_" + ident );
    ret->setMidPicId( midPic );

    if( rect.width() > 0 )
        _setChildGeometry( ret, rect );

    return ret;
}
void BubbleMenuButtonGeometry::updateGeometry()
{
    MenuButton * button = dynamic_cast<MenuButton*>(_item);
    if(!button)
    {
        return;
    }

    if(_geode->getNumDrawables())
    {
        osgText::Text * text = dynamic_cast<osgText::Text*>(_geode->getDrawable(
                0));
        if(text)
        {
            if(text->getText().createUTF8EncodedString() != button->getText())
            {
                text->setText(button->getText());
                osg::BoundingBox bb = text->getBound();
                _width = bb.xMax() - bb.xMin() + _iconHeight + _border;
                text = dynamic_cast<osgText::Text*>(_geodeSelected->getDrawable(
                        0));
                if(text)
                {
                    text->setText(button->getText());
                }
            }
        }

    }
}
예제 #3
0
//-----------------------------------------------------------------------------
// Purpose: Message map
//-----------------------------------------------------------------------------
void MenuBar::OnCursorEnteredMenuButton(int VPanel)
{
	VPANEL menuButton = (VPANEL)VPanel;
	// see if we had a menu open
	for ( int i = 0; i < m_pMenuButtons.Count(); i++)
	{
		// one of our buttons was pressed.
		if (m_pMenuButtons[i]->IsDepressed())
		{
			int oldbutton = i;
			// now see if menuButton is one of ours.
			for ( int j = 0; j < m_pMenuButtons.Count(); j++)
			{
				MenuButton *button = static_cast<MenuButton *>(ipanel()->GetPanel(menuButton, GetModuleName()));
				// it is one of ours.
				if ( button == m_pMenuButtons[j])
				{
					// if its a different button than the one we already had open,
					if (j != oldbutton)
					{
						// close this menu and open the one we just entered 
						m_pMenuButtons[oldbutton]->DoClick();
						button->DoClick();
					}
				}
			}
		}
	}
}
예제 #4
0
void Screen_Base::CreateMenuItems(int numitems, MenuItemDefinition* menuitems)
{
    for( int i=0; i<numitems; i++ )
    {
        switch( menuitems[i].type )
        {
        case MIT_Sprite:
            {
                MenuSprite* pMenuSprite = CreateMenuSprite( i );

                pMenuSprite->SetName( menuitems[i].name );

                MySprite* pSprite = g_pGame->m_pResources->m_pSprites[menuitems[i].spriteindex];
                pMenuSprite->SetSprites( pSprite, pSprite );

                pMenuSprite->m_BGColor = menuitems[i].BGColor;
            }
            break;

        case MIT_Text:
            {
                MenuText* pText = CreateMenuText( i, menuitems[i].maxletters );

                pText->SetName( menuitems[i].name );

                pText->m_pFont = menuitems[i].font;
                if( menuitems[i].string1 )
                    pText->SetString( menuitems[i].string1 );
            }
            break;

        case MIT_Button:
            {
                MenuButton* pButton = CreateMenuButton( i, menuitems[i].maxletters );

                pButton->SetName( menuitems[i].name );

                MySprite* pSprite = g_pGame->m_pResources->m_pSprites[menuitems[i].spriteindex];
                pButton->SetSprites( pSprite, pSprite, pSprite, 0, pSprite );

                pButton->m_BGColor = menuitems[i].BGColor;

                pButton->m_pFont = menuitems[i].font;
                if( menuitems[i].string1 || menuitems[i].string2 || menuitems[i].string3 )
                    pButton->SetString( menuitems[i].string1, menuitems[i].string2, menuitems[i].string3 );

                pButton->m_ButtonAction = menuitems[i].buttonaction;
            }
            break;

        case MIT_Base:
        case MIT_InputBox:
        case MIT_ScrollingText:
        case MIT_ScrollBox:
        case MIT_CheckBox:
        case MIT_NumMenuItemTypes:
            break;
        }
    }
}
예제 #5
0
파일: menu.cpp 프로젝트: GustavoMOG/edelib
int main(int argc, char **argv) {
    AppWindow* win = new AppWindow(215, 144);
    win->begin();
    MenuBar* o = new MenuBar(0, 0, 215, 25);
    o->menu(menu_);

    Fl_Image* img1 = (Fl_Image*)IconLoader::get("document-new", ICON_SIZE_TINY);
    Fl_Image* img2 = (Fl_Image*)IconLoader::get("document-save", ICON_SIZE_SMALL);
    Fl_Image* img3 = (Fl_Image*)IconLoader::get("system-log-out", ICON_SIZE_TINY);

    menu_[1].image(img1);
    menu_[1].tooltip("Tooltip for First Item");
    menu_[2].image(img2);
    menu_[8].image(img3);

    MenuButton* b = new MenuButton(65, 80, 90, 25, "menu");
    b->menu(menu_menu);

    Fl_Image* img4 = (Fl_Image*)IconLoader::get("folder", ICON_SIZE_TINY);
    menu_menu[0].image(img4);
    menu_menu[0].tooltip("This should be some folder");
    win->end();
    win->show(argc, argv);
    return Fl::run();
}
예제 #6
0
void GameOverState::setCallbacks(const std::vector<Callback>& callbacks) {
	for (int i = 0; i < m_gameObjects.size(); i++) {
		if (dynamic_cast<MenuButton*>(m_gameObjects[i])) {
			MenuButton* pButton = dynamic_cast<MenuButton*>(m_gameObjects[i]);
			pButton->setCallback(callbacks[pButton->getCallbackID()]);
		}
	}
}
예제 #7
0
TileSetEditor::TileSetEditor(EditorNode *p_editor) {

	Panel *panel = memnew(Panel);
	panel->set_area_as_parent_rect();
	add_child(panel);
	MenuButton *options = memnew(MenuButton);
	panel->add_child(options);
	options->set_position(Point2(1, 1));
	options->set_text("Theme");
	options->get_popup()->add_item(TTR("Add Item"), MENU_OPTION_ADD_ITEM);
	options->get_popup()->add_item(TTR("Remove Item"), MENU_OPTION_REMOVE_ITEM);
	options->get_popup()->add_separator();
	options->get_popup()->add_item(TTR("Create from Scene"), MENU_OPTION_CREATE_FROM_SCENE);
	options->get_popup()->add_item(TTR("Merge from Scene"), MENU_OPTION_MERGE_FROM_SCENE);
	options->get_popup()->connect("id_pressed", this, "_menu_cbk");
	editor = p_editor;
	cd = memnew(ConfirmationDialog);
	add_child(cd);
	cd->get_ok()->connect("pressed", this, "_menu_confirm");

	nd = memnew(EditorNameDialog);
	add_child(nd);
	nd->set_hide_on_ok(true);
	nd->get_line_edit()->set_margin(MARGIN_TOP, 28);
	nd->connect("name_confirmed", this, "_name_dialog_confirm");

	err_dialog = memnew(AcceptDialog);
	add_child(err_dialog);
	err_dialog->set_title(TTR("Error"));
}
예제 #8
0
MenuButton* MenuButton::create(const char *normalImage, const char *selectedImage, cocos2d::CCObject *target, SEL_MenuHandler selector, const char* textOnButton, float fontSize){
    
    MenuButton * button = new MenuButton();
    if (button && button->init(normalImage,selectedImage,target,selector,textOnButton, fontSize)) {
        button->autorelease();
        return button;
    }
    CC_SAFE_DELETE(button);
    return NULL;
    
}
예제 #9
0
void PlayState::setCallbacks()
{
	for (int i = 0; i < m_gObjects.size(); i++)
	{
		if (dynamic_cast<MenuButton*>(m_gObjects[i]))
		{
			MenuButton* pButton = dynamic_cast<MenuButton*>(m_gObjects[i]);
			pButton->setCallbacks(m_callbacksID[pButton->getCallbackID()]);
		}
	}

}
예제 #10
0
void MenuState::setCallbacks(const std::vector<Callback>&callbacks){
	// go through the game objects
	for (int i = 0; i < m_gameObjectsMenuState.size(); i++)
	{
		// if they are of type MenuButton then assign a callback based on the id passed in from the file
			if (dynamic_cast<MenuButton*>(m_gameObjectsMenuState[i]))
			{
				MenuButton* pButton = dynamic_cast<MenuButton*>(m_gameObjectsMenuState[i]);
				pButton->setCallback(callbacks[pButton->getCallbackID()]);
			}
	}
}
예제 #11
0
bool OsgMovie::init()
{
    std::cerr << "OsgMovie init\n";
    //osg::setNotifyLevel( osg::INFO );

    _loadMenu = new SubMenu("OsgMovie");
    _loadMenu->setCallback(this);
    MenuSystem::instance()->addMenuItem(_loadMenu);

    string configBase = "Plugin.OsgMovie";
    std::vector<std::string> list;

    ConfigManager::getChildren(configBase, list);

    for(int i = 0; i < list.size(); i++)
    {
        MenuButton * button = new MenuButton(list[i]);
        button->setCallback(this);
        _loadMenu->addItem(button);
        _loadButtons.push_back(button);
    }


    configPath = ConfigManager::getEntry("Plugin.OsgMovie.ConfigDir");

    ifstream cfile;
    cfile.open((configPath + "/Init.cfg").c_str(), ios::in);

    if(!cfile.fail())
    {
        string line;
        while(!cfile.eof())
        {
            Matrix m;
            char name[150];
            int stereo;
            cfile >> name;
            if(cfile.eof())
            {
                break;
            }
            cfile >> stereo;
            for(int i = 0; i < 4; i++)
            {
                for(int j = 0; j < 4; j++)
                {
                    cfile >> m(i, j);
                }
            }
            _configMap[string(name)] = std::pair<int, osg::Matrix> (stereo,m);
        }
    }
예제 #12
0
void PopUpMenu::add_check_item(BitmapID p_icon, String p_text, const Method1<bool>& p_method, bool p_checked) {
	
	MenuButton *mb  = vbc->add( GUI_NEW(MenuButton(p_text,p_icon,true)), 0 );
	
	mb->set_id( id_count++ );
	mb->toggled_signal.connect( p_method );
	mb->set_checked(p_checked);
	
	vbc->adjust_minimum_size();
	
	mb->menubutton_toggled_signal.connect( this,  &PopUpMenu::menu_button_toggled );
	
}
예제 #13
0
void PopUpMenu::add_check_item(String p_text, bool p_checked,void *p_userdata) {
	
	MenuButton *mb  = vbc->add( GUI_NEW(MenuButton(p_text,-1,true)), 0 );
	
	mb->set_id( id_count++ );
	mb->set_userdata( p_userdata );
	mb->set_checked(p_checked);
	
	vbc->adjust_minimum_size();
	
	mb->menubutton_toggled_signal.connect( this,  &PopUpMenu::menu_button_toggled );
	
}
예제 #14
0
void PopUpMenu::add_item(String p_text, const Method& p_method,int p_shortcut,bool p_shortcut_active) {
	
	MenuButton *mb  = vbc->add( GUI_NEW(MenuButton(p_text)), 0 );
	
	mb->set_id( id_count++ );
	mb->pressed_signal.connect( p_method );
	mb->set_shurtcut( p_shortcut, p_shortcut_active );
	
	vbc->adjust_minimum_size();
	
	mb->menubutton_pressed_signal.connect( this,  &PopUpMenu::menu_button_selected );
	
}
예제 #15
0
void PopUpMenu::add_item(String p_text, int p_ID, void *p_userdata,int p_shortcut,bool p_shortcut_active) {
	
	MenuButton *mb  = vbc->add( GUI_NEW(MenuButton(p_text)), 0 );
	
	mb->set_id( p_ID );
	mb->set_userdata( p_userdata );
	mb->set_shurtcut( p_shortcut, p_shortcut_active );
	id_count=p_ID+1;
	
	vbc->adjust_minimum_size();
	
	mb->menubutton_pressed_signal.connect( this,  &PopUpMenu::menu_button_selected );
}
예제 #16
0
void OrionCallbacks::saveLoadCancelFn(DialogView *view, MenuObject *item) {
	OrionMenuView *vw = (OrionMenuView *) view;

	if (view->_selectedSlot != -1) {
		// Pressed cancel with a save selected, so revert back to no selection

		// Re-enable all the other slots

		for (int index = 0; index < SL_NUM_VISIBLE_SLOTS; ++index) {
			if (index != view->_selectedSlot) {
				MenuSaveLoadText *currentItem = (MenuSaveLoadText *) view->getItem(SLTAG_SLOTS_START + index);
				currentItem->setState(OS_NORMAL);
			}
		}

		// Show the previously hidden slot again
		MenuSaveLoadText *slot = (MenuSaveLoadText *) view->getItem(SLTAG_SLOTS_START + view->_selectedSlot);
		slot->setVisible(true);
		slot->setState(OS_NORMAL);

		// Remove the text selection
		MenuTextField *textField = (MenuTextField *) view->getItem(SLTAG_TEXTFIELD);
		delete textField;
		vw->items().remove(textField);

		// Set button enablement
		MenuButton *btn = (MenuButton *) view->getItem(SLTAG_SAVELOAD);
		btn->setState(OS_GREYED);
		btn = (MenuButton *) view->getItem(SLTAG_CANCEL);
		btn->setState(OS_NORMAL);

		// Re-enable the slider

		MenuVertSlider *slider = (MenuVertSlider *) view->getItem(SLTAG_VSLIDER);
		slider->setState(OS_NORMAL);

		view->_selectedSlot = -1;

	} else {
		// Close the dialog
		if (vw->_loadSaveFromHotkey)
			// Since dialog was called from hotkey, return directly to the game
			closeMenuFn(view, item);
		else {
			// Return to the game menu
			view->vm()->loadMenu(GAME_MENU);
			view->close();
		}
	}
}
예제 #17
0
bool ExtentMenu::onEvent(const NEvent& event)
{
    if( event.EventType == sEventGui && event.gui.type == guiButtonClicked )
    {
        MenuButton* btn = safety_cast< MenuButton* >( event.gui.caller );
        if( btn )
        {
            int picId = btn->midPicId() > 0 ? btn->midPicId() : ResourceMenu::emptyMidPicId;
            _d->middleLabel->setPicture( Picture( ResourceGroup::menuMiddleIcons, picId ) );
        }
    }

    return Menu::onEvent( event );
}
예제 #18
0
void PopUpMenu::add_check_item(BitmapID p_icon, String p_text, int p_ID, bool p_checked,void *p_userdata) {
	
	
	MenuButton *mb  = vbc->add( GUI_NEW(MenuButton(p_text,p_icon,true)), 0 );
	
	mb->set_id( p_ID );
	mb->set_userdata( p_userdata );
	mb->set_checked(p_checked);
	id_count=p_ID+1;
	
	vbc->adjust_minimum_size();
	
	mb->menubutton_toggled_signal.connect( this,  &PopUpMenu::menu_button_toggled );
	
}
void BoardMenuButtonGeometry::createGeometry(MenuItem * item)
{
    _node = new osg::MatrixTransform();
    _geode = new osg::Geode();
    _geodeSelected = new osg::Geode();
    _intersect = new osg::Geode();
    _node->addChild(_intersect);
    _node->addChild(_geode);
    _item = item;

    MenuButton * mb = dynamic_cast<MenuButton*>(item);

    osgText::Text * textNode = makeText(mb->getText(),_textSize,
            osg::Vec3(_iconHeight + _border,-2,-_iconHeight / 2.0),_textColor);
    /*osgText::Text * textNode = new osgText::Text();
     textNode->setCharacterSize(_textSize);
     textNode->setAlignment(osgText::Text::LEFT_CENTER);
     textNode->setPosition(osg::Vec3(_iconHeight + _border, -2, -_iconHeight
     / 2.0));
     textNode->setColor(_textColor);
     textNode->setBackdropColor(osg::Vec4(0, 0, 0, 0));
     textNode->setAxisAlignment(osgText::Text::XZ_PLANE);
     textNode->setText(mb->getText());*/

    osg::BoundingBox bb = textNode->getBound();
    _width = bb.xMax() - bb.xMin() + _iconHeight + _border;
    //mg->height = bb.zMax() - bb.zMin();
    _height = _iconHeight;

    _geode->addDrawable(textNode);

    textNode = makeText(mb->getText(),_textSize,
            osg::Vec3(_iconHeight + _border,-2,-_iconHeight / 2.0),
            _textColorSelected);
    /*textNode = new osgText::Text();
     textNode->setCharacterSize(_textSize);
     textNode->setAlignment(osgText::Text::LEFT_CENTER);
     textNode->setPosition(osg::Vec3(_iconHeight + _border, -2, -_iconHeight
     / 2.0));
     textNode->setColor(_textColorSelected);
     textNode->setBackdropColor(osg::Vec4(0, 0, 0, 0));
     textNode->setAxisAlignment(osgText::Text::XZ_PLANE);
     textNode->setText(mb->getText());*/

    _geodeSelected->addDrawable(textNode);
}
예제 #20
0
void State_Menu::Update()
{
	if (CurrentMenu)
	{
		MenuButton *clickedButton = nullptr;
		for (auto &button : CurrentMenu->buttons)
		{
			button->Update();
			if (button->WasClicked()) clickedButton = button;
		}

		if (clickedButton)
		{
			clickedButton->SetWasClickedToFalse();
			clickedButton->UseFunction();
		}
	}
}
예제 #21
0
bool MainMenuLayer::init()
{
  bool ret = false;
  MenuButton * button;

  do 
  {
    CC_BREAK_IF( ! PARENT( MainMenuLayer )::init() );

    BackGroundLayer * layer_bg = BackGroundLayer::create();
    CC_BREAK_IF( ! layer_bg );
    
    this->addChild( layer_bg );

    auto menu = CCMenu::create();
    CC_BREAK_IF( ! menu );

    auto size = CCDirector::sharedDirector()->getWinSize();

    menu->setAnchorPoint( ccp( 0.5, 0.5 ) );
    menu->setPosition( ccp( size.width / 2, size.height / 2 ) );

    addChild( menu );

    button = MenuButton::create( "New game", this, menu_selector( MainMenuLayer::menuNewGameCallback ) );
    CC_BREAK_IF( button == NULL );
    button->setPositionY( 80.0 );
    menu->addChild( button );

    button = MenuButton::create( "Settings", this, menu_selector( MainMenuLayer::menuSettingsCallback ) );
    CC_BREAK_IF( button == NULL );
    button->setPositionY( 0.0 );
    menu->addChild( button );

    button = MenuButton::create( "Exit", this, menu_selector( MainMenuLayer::menuExitCallback ) );
    CC_BREAK_IF( button == NULL );
    button->setPositionY( -80.0 );
    menu->addChild( button );

    ret = true;
  } while ( false );

  return ret;
}
예제 #22
0
//-----------------------------------------------------------------------------
// Purpose: Handle key presses, Activate shortcuts
//-----------------------------------------------------------------------------
void MenuBar::OnKeyCodeTyped(KeyCode code)
{
	switch(code)
	{
	case KEY_RIGHT:
		{
			// iterate the menu items looking for one that is open
			// if we find one open, open the one to the right
			for (int i = 0; i < m_pMenuButtons.Count() - 1; i++)
			{
				MenuButton *panel = m_pMenuButtons[i];
				if (panel->IsDepressed())
				{
					m_pMenuButtons[i]->DoClick();
					m_pMenuButtons[i+1]->DoClick();
					break;
				}
			}
			break;
		}
	case KEY_LEFT:
		{
			// iterate the menu items looking for one that is open
			// if we find one open, open the one to the left
			for (int i = 1; i < m_pMenuButtons.Count(); i++)
			{
				MenuButton *panel = m_pMenuButtons[i];
				if (panel->IsDepressed())
				{
					m_pMenuButtons[i]->DoClick();
					m_pMenuButtons[i-1]->DoClick();
					break;
				}
			}
			break;
		}
	default:
		{
			break;
		}
	}
	
	// don't chain back
}
예제 #23
0
void OrionCallbacks::saveLoadSlotFn(DialogView *view, MenuObject *item) {
	OrionMenuView *vw = (OrionMenuView *) view;
	MenuSaveLoadText *button = (MenuSaveLoadText *) item;

	view->_selectedSlot = button->getIndex();
	view->_deleteSaveDesc = true;

	// Disable all the slots except the selected one
	for (int index = 0; index < SL_NUM_VISIBLE_SLOTS; ++index) {
		MenuSaveLoadText *currentItem = (MenuSaveLoadText *) view->getItem(SLTAG_SLOTS_START + index);
		if (currentItem->getIndex() != button->getIndex()) {
			currentItem->setState(OS_GREYED);
		}
	}

	// Get a copy of the slot bounds
	Common::Rect slotBounds = button->getBounds();

	if (view->getMenuType() == SAVE_MENU) {
		// Add in a text field for entry of the savegame name
		vw->items().push_back(new MenuTextField(view, SLTAG_TEXTFIELD,
			slotBounds.left, slotBounds.top, slotBounds.width(), slotBounds.height(), false,
			saveLoadSaveFn, (button->getText() == EmptySaveString) ? NULL : button->getText(),
			button->getIndex() + 1));

	} else {
		vw->items().push_back(new MenuTextField(view, SLTAG_TEXTFIELD,
			slotBounds.left, slotBounds.top, slotBounds.width(), slotBounds.height(), true,
			saveLoadLoadFn, button->getText(), button->getIndex() + 1));
	}

	// Hide the existing slot
	button->setVisible(false);

	// Disable the slider

	MenuVertSlider *slider = (MenuVertSlider *) view->getItem(SLTAG_VSLIDER);
	slider->setState(OS_GREYED);

	// Enable the save/load button
	MenuButton *btn = (MenuButton *) view->getItem(SLTAG_SAVELOAD);
	btn->setState(OS_NORMAL);
}
예제 #24
0
bool ImageSequence::init()
{
    _isMenu = new SubMenu("ImageSequence");
    PluginHelper::addRootMenuItem(_isMenu);

    _loadMenu = new SubMenu("Load");
    _isMenu->addItem(_loadMenu);

    std::vector<std::string> tags;
    ConfigManager::getChildren("Plugin.ImageSequence.Files",tags);

    for(int i = 0; i < tags.size(); ++i)
    {
	MenuButton * button = new MenuButton(tags[i]);
	button->setCallback(this);
	_loadMenu->addItem(button);
	_loadButtons.push_back(button);

	SequenceSet * ss = new SequenceSet;
	ss->path = ConfigManager::getEntry("path",std::string("Plugin.ImageSequence.Files.") + tags[i],"");
	ss->start = ConfigManager::getInt("start",std::string("Plugin.ImageSequence.Files.") + tags[i],0);
	ss->frames = ConfigManager::getInt("frames",std::string("Plugin.ImageSequence.Files.") + tags[i],0);
	_sets.push_back(ss);
    }

    int index = ConfigManager::getInt("value","Plugin.ImageSequence.AutoStart",-1);
    if(index >=0 && index < _sets.size())
    {
	_autoStart = true;
	_autoStartIndex = index;
    }
    else
    {
	_autoStart = false;
    }

    _removeButton = new MenuButton("Remove");
    _removeButton->setCallback(this);
    _isMenu->addItem(_removeButton);

    return true;
}
예제 #25
0
void TextInputPanel::addCustomRow(std::vector<std::string> & row)
{
    MenuItemGroup * mig = new MenuItemGroup(MenuItemGroup::ROW_LAYOUT);

    for(int i = 0; i < row.size(); ++i)
    {
	MenuButton * mb = new MenuButton(row[i],false);
	mb->setCallback(this);
	mig->addItem(mb);
    }

    int pos = _rootMenu->getItemPosition(_rowGroup);
    if(pos >= 0)
    {
	_rootMenu->addItem(mig,pos+1);
    }
    else
    {
	_rootMenu->addItem(mig);
    }
}
예제 #26
0
//-----------------------------------------------------------------------------
// Purpose: Handle key presses, Activate shortcuts
// Input  : code - 
//-----------------------------------------------------------------------------
void MenuBar::OnKeyTyped(wchar_t unichar)
{
	if (unichar)
	{
		// iterate the menu items looking for one with the matching hotkey
		for (int i = 0; i < m_pMenuButtons.Count(); i++)
		{
			MenuButton *panel = m_pMenuButtons[i];
			if (panel->IsVisible())
			{
				Panel *hot = panel->HasHotkey(unichar);
				if (hot)
				{
					// post a message to the menuitem telling it it's hotkey was pressed
					PostMessage(hot, new KeyValues("Hotkey"));
					return;
				}
			}
		}
	}
	
	// don't chain back
}
MeshLibraryEditor::MeshLibraryEditor(EditorNode *p_editor) {

	file = memnew( EditorFileDialog );
	file->set_mode(EditorFileDialog::MODE_OPEN_FILE);
	//not for now?
	List<String> extensions;
	ResourceLoader::get_recognized_extensions_for_type("PackedScene",&extensions);
	file->clear_filters();
	file->set_title("Import Scene");
	for(int i=0;i<extensions.size();i++) {

		file->add_filter("*."+extensions[i]+" ; "+extensions[i].to_upper());
	}
	add_child(file);
	file->connect("file_selected",this,"_import_scene_cbk");

	Panel *panel = memnew( Panel );
	panel->set_area_as_parent_rect();
	add_child(panel);
	MenuButton * options = memnew( MenuButton );
	panel->add_child(options);
	options->set_pos(Point2(1,1));
	options->set_text("Theme");
	options->get_popup()->add_item("Add Item",MENU_OPTION_ADD_ITEM);
	options->get_popup()->add_item("Remove Selected Item",MENU_OPTION_REMOVE_ITEM);
	options->get_popup()->add_separator();
	options->get_popup()->add_item("Import from Scene",MENU_OPTION_IMPORT_FROM_SCENE);
	options->get_popup()->add_item("Update from Scene",MENU_OPTION_UPDATE_FROM_SCENE);
	options->get_popup()->set_item_disabled(options->get_popup()->get_item_index(MENU_OPTION_UPDATE_FROM_SCENE),true);
	options->get_popup()->connect("item_pressed", this,"_menu_cbk");
	menu=options;
	editor=p_editor;
	cd = memnew(ConfirmationDialog);
	add_child(cd);
	cd->get_ok()->connect("pressed", this,"_menu_confirm");

}
예제 #28
0
TileSetEditor::TileSetEditor(EditorNode *p_editor) {

	Panel *panel = memnew( Panel );
	panel->set_area_as_parent_rect();
	add_child(panel);
	MenuButton * options = memnew( MenuButton );
	panel->add_child(options);
	options->set_pos(Point2(1,1));
	options->set_text("Theme");
	options->get_popup()->add_item("Add Item",MENU_OPTION_ADD_ITEM);
	options->get_popup()->add_item("Remove Selected Item",MENU_OPTION_REMOVE_ITEM);
	options->get_popup()->add_separator();
	options->get_popup()->add_item("Create from Scene",MENU_OPTION_CREATE_FROM_SCENE);
	options->get_popup()->add_item("Merge from Scene",MENU_OPTION_MERGE_FROM_SCENE);
	options->get_popup()->connect("item_pressed", this,"_menu_cbk");
	editor=p_editor;
	cd = memnew(ConfirmationDialog);
	add_child(cd);
	cd->get_ok()->connect("pressed", this,"_menu_confirm");

}
bool PauseState::onEnter() {
	if (!TheTextureManager::Instance()->load("assets/resume.png", "resume",
			TheGame::instance()->getRenderer())) {
		return false;
	}
	if (!TheTextureManager::Instance()->load("assets/main.png", "main",
			TheGame::instance()->getRenderer())) {
		return false;
	}

	MenuButton *resumeButton = new MenuButton();
	resumeButton->load(new LoaderParams(100, 100, 200, 100, "resume"));
	resumeButton->setCallBack(s_pauseToMain);
	MenuButton *mainButton = new MenuButton();
	mainButton->load(new LoaderParams(100, 200, 200, 100, "main"));
	mainButton->setCallBack(s_resumeToPlay);

	m_gameObjects.push_back(resumeButton);
	m_gameObjects.push_back(mainButton);
	return true;

}
예제 #30
0
파일: du_menu.c 프로젝트: DavidPH/DUHeresy
//
// DU_MenuRun
//
void DU_MenuRun(Menu *menu)
{
   int msgid = BASE_MSGID;

   // Read buttons.
   int buttons    = ACS_GetPlayerInput(-1, INPUT_BUTTONS);
   int buttonsOld = ACS_GetPlayerInput(-1, INPUT_OLDBUTTONS);
   int buttonsNew = buttons & ~buttonsOld;

   // Poll and cap cursor movement.
   accum inputX = ACS_GetPlayerInputFixed(-1, INPUT_YAW);
   accum inputY = ACS_GetPlayerInputFixed(-1, INPUT_PITCH);

   if(ACS_GetCVar(s"invertmouse"))
      inputY = -inputY;

   menu->x -= inputX * menu->w * 2;
   menu->y -= inputY * menu->h * 2;

   if(menu->x < 0)       menu->x = 0;
   if(menu->x > menu->w) menu->x = menu->w;

   if(menu->y < 0)       menu->y = 0;
   if(menu->y > menu->h) menu->y = menu->h;

   if(menu->run)
      menu->run(menu);

   // Draw cursor.
   DU_MenuHudImage(menu, msgid++, s"CURSOR", (int)menu->x+0.1k, (int)menu->y+0.1k);

   // Draw buttons.
   for(MenuButton *button = menu->buttons; button; button = button->next)
   {
      if(button->run)
         button->run(button);

      int x = button->x + button->w/2;
      int y = button->y + button->h/2;

      DU_MenuHudText(menu, msgid++, button->txt, button->color, x, y);

      if(button->img[0])
         DU_MenuHudImage(menu, msgid++, button->img, x, y);
      else
         DU_MenuHudClear(menu, msgid++);
   }

   // Draw labels.
   for(MenuLabel *label = menu->labels; label; label = label->next)
   {
      if(label->run)
         label->run(label);

      int x = label->x + label->w/2;
      int y = label->y + label->h/2;

      DU_MenuHudText(menu, msgid++, label->txt, label->color, x, y);

      if(label->img[0])
         DU_MenuHudImage(menu, msgid++, label->img, x, y);
      else
         DU_MenuHudClear(menu, msgid++);
   }

   // Draw texts.
   for(MenuText *text = menu->texts; text; text = text->next)
   {
      if(text->run)
         text->run(text);

      accum x = (int)text->x + 0.1;
      accum y = (int)text->y + 0.1;

      DU_MenuHudText(menu, msgid++, text->txt, text->color, x, y);
   }

   // Mouse-over events.
   for(MenuButton *button = menu->buttons; button; button = button->next)
   {
      if(button->hover &&
         menu->x >= button->x && menu->x < button->x + button->w &&
         menu->y >= button->y && menu->y < button->y + button->h)
      {
         button->hover(button);
      }
   }

   // Click events.
   if(buttonsNew & BT_ATTACK)
   {
      for(MenuButton *button = menu->buttons; button; button = button->next)
      {
         if(button->click &&
            menu->x >= button->x && menu->x < button->x + button->w &&
            menu->y >= button->y && menu->y < button->y + button->h)
         {
            button->click(button);
         }
      }
   }
}