ConsoleWidget::ConsoleWidget(MainWindow *main) : QPlainTextEdit((QWidget *)main)
{
    m_main = main;
    m_suppress = false;
    m_histIndex = -1;
    // a block is a line, so this is the maximum number of lines to buffer
    setMaximumBlockCount(CW_SCROLLHEIGHT);
    acceptInput(false);
    connect(&m_timer, SIGNAL(timeout()), this, SLOT(handleTimer()));
}
Beispiel #2
0
void MainMenu::update(float deltaTime)
{

	gameObject->setActive(mayUpdate);
	MainMenuElement::update();
	if (!mayUpdate)
	{
		return;
	}

	maxIndex = MainMenuStructure::Instance().menuObjs.size();

	
	if (InputManager::Instance().keyPressed(sf::Keyboard::Up))
	{
		//std::cout << " up " << std::endl;
		if (MainMenuStructure::Instance().selectedIndex > 0)
		{
			MainMenuStructure::Instance().selectedIndex--;
		}
	}
	else if (InputManager::Instance().keyPressed(sf::Keyboard::Down))
	{
		if (MainMenuStructure::Instance().selectedIndex < maxIndex - 1)
		{
			MainMenuStructure::Instance().selectedIndex++;
		}
		//std::cout << " down " << std::endl;
		
	}

	for (int i = 0; i < maxIndex; i++)
	{
		MainMenuStructure::Instance().menuObjs[i]->setActive(true);

	}

	if (MainMenuStructure::Instance().menuObjs.size() > 0)
	{
		MainMenuStructure::Instance().menuObjs[MainMenuStructure::Instance().selectedIndex]->setActive(false);
		p_mmo = MainMenuStructure::Instance().menuObjs[MainMenuStructure::Instance().selectedIndex];
	}


	if (InputManager::Instance().keyPressed(sf::Keyboard::Return))
	{

		if (p_mmo != NULL)
		{
			acceptInput(p_mmo);
		}
	}


}
Beispiel #3
0
Connector* FPNode::createInputConnector( Node * startNode )
{
	if( (!acceptInput()) || !startNode )
		return 0l;
	
	// FIXME dynamic_cast used
	Connector *connector = new FlowConnector( dynamic_cast<FPNode*>(startNode), dynamic_cast<FPNode*>(this), p_icnDocument );
	addInputConnector(connector);
	
	return connector;
}
Beispiel #4
0
void VideoWidget::mouseReleaseEvent(QMouseEvent *event)
{
    int x, y, width, height;

    if (m_selection)
    {

        x = (m_x0-m_xOffset)/m_scale+.5;
        y = (m_y0-m_yOffset)/m_scale+.5;

        width = m_sbWidth/m_scale+.5;
        height = m_sbHeight/m_scale+.5;

        // deal with box inversion
        if (width<0)
        {
            x += width;
            width = -width;
        }
        if (height<0)
        {
            y += height;
            height = -height;
        }
        emit selection(x, y, width, height);
        acceptInput(NONE);
        //qDebug() << x << " " << y << " " << width << " " << height;
        m_selection = false;
    }
    else if (m_inputMode==POINT)
    {
        x = (event->x()-m_xOffset)/m_scale+.5;
        y = (event->y()-m_yOffset)/m_scale+.5;
        emit selection(x, y, 0, 0);
        acceptInput(NONE);
    }
    QWidget::mouseReleaseEvent(event);
}
Beispiel #5
0
void GUIMainMenu::deleteWorld(const std::vector<std::string> &paths)
{
	// Delete files
	bool did = fs::DeletePaths(paths);
	if(!did){
		GUIMessageMenu *menu = new GUIMessageMenu(env, parent,
				-1, menumgr, wgettext("Failed to delete all world files"));
		menu->drop();
	}
	// Quit menu to refresh it
	acceptInput();
	m_data->only_refresh = true;
	quitMenu();
}
bool GUIFileSelectMenu::OnEvent(const SEvent &event)
{
	if (event.EventType == irr::EET_GUI_EVENT) {
		switch (event.GUIEvent.EventType) {
		case gui::EGET_ELEMENT_CLOSED:
		case gui::EGET_FILE_CHOOSE_DIALOG_CANCELLED:
			m_accepted = false;
			acceptInput();
			return true;
		case gui::EGET_DIRECTORY_SELECTED:
			m_accepted = !m_file_select_dialog;
			acceptInput();
			return true;
		case gui::EGET_FILE_SELECTED:
			m_accepted = m_file_select_dialog;
			acceptInput();
			return true;
		default:
			// ignore this event
			break;
		}
	}
	return Parent ? Parent->OnEvent(event) : false;
}
Beispiel #7
0
/** Create main window */
MainWindow::MainWindow()
{
    QVBoxLayout *layout = new QVBoxLayout(this);

    m_label = new QLabel(this);
    m_input = new QReadLine(this);

    layout->addWidget(m_label);
    layout->addWidget(m_input);
    setLayout(layout);

    setWindowTitle(tr("Simple QReadLine Example"));

    /* we accept input when RETURN or ENTER is pressed */
    connect(m_input, SIGNAL(returnPressed()), SLOT(acceptInput()));
}
Beispiel #8
0
bool GUISettingsMenu::OnEvent(const SEvent& event)
{
	if (event.EventType == EET_KEY_INPUT_EVENT && activeKey >= 0 && event.KeyInput.PressedDown) {
		KeyPress kp(event.KeyInput);
		gui::IGUIElement *e = getElementFromId(activeKey);
		if (e != NULL && e->getType() == gui::EGUIET_BUTTON) {
			e->setEnabled(true);
			e->setText(kp.guiName().c_str());
			keys[activeKey-GUI_ID_KEYSETTINGS_BASE] = kp;
		}
		activeKey = -1;
		return true;
	}
	if (event.EventType == EET_GUI_EVENT) {
		if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST && isVisible()) {
			if (!canTakeFocus(event.GUIEvent.Element)) {
				dstream << "GUIMainMenu: Not allowing focus change."
						<< std::endl;
				// Returning true disables focus change
				return true;
			}
		}
		if (event.GUIEvent.EventType==gui::EGET_CHECKBOX_CHANGED) {
			acceptInput();
			m_accepted = false;
			regenerateGui(m_screensize);
		}
		if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) {
			s32 id = event.GUIEvent.Caller->getID();
			if (id >= GUI_ID_KEYSETTINGS_BASE) {
				resetMenu();
				activeKey = id;
				gui::IGUIElement *e = getElementFromId(id);
				if (e != NULL && e->getType() == gui::EGUIET_BUTTON) {
					e->setText(wgettext("press Key"));
					e->setEnabled(false);
					return true;
				}
			}else{
				switch (event.GUIEvent.Caller->getID()) {
				case GUI_ID_TAB_SETTINGS_CONTROLS:
					acceptInput();
					m_accepted = false;
					m_data.selected_tab = TAB_SETTINGS_CONTROLS;
					regenerateGui(m_screensize);
					return true;
				case GUI_ID_TAB_SETTINGS_GRAPHICS:
					acceptInput();
					m_accepted = false;
					m_data.selected_tab = TAB_SETTINGS_GRAPHICS;
					regenerateGui(m_screensize);
					return true;
				case GUI_ID_TAB_SETTINGS_VIDEO:
					acceptInput();
					m_accepted = false;
					m_data.selected_tab = TAB_SETTINGS_VIDEO;
					regenerateGui(m_screensize);
					return true;
				case GUI_ID_TAB_SETTINGS_SOUND:
					acceptInput();
					m_accepted = false;
					m_data.selected_tab = TAB_SETTINGS_SOUND;
					regenerateGui(m_screensize);
					return true;
				case GUI_ID_TAB_MAINMENU: //back
					acceptInput();
					save();
					quitMenu();
					return true;
				}
			}
		}
		if (event.GUIEvent.EventType == gui::EGET_SCROLL_BAR_CHANGED) {
			switch (event.GUIEvent.Caller->getID()) {
			case GUI_ID_VOLUME_SB:
				gui::IGUIElement *vsb = getElementFromId(GUI_ID_VOLUME_SB);
				if(vsb != NULL && vsb->getType() == gui::EGUIET_SCROLL_BAR) {
					m_data.volume = (float)((gui::IGUIScrollBar*)vsb)->getPos();
					if (g_sound)
						g_sound->setListenerGain(m_data.volume/100.0);
				}
				return true;
			}
		}
	}
	return Parent ? Parent->OnEvent(event) : false;
}
bool GUIMultiplayerMenu::OnEvent(const SEvent& event)
{
	if (event.EventType==EET_KEY_INPUT_EVENT) {
		if (
			event.KeyInput.PressedDown
			&& (
				event.KeyInput.Key == KEY_ESCAPE
				|| event.KeyInput.Key == KEY_RETURN
			)
		) {
			acceptInput();
			quitMenu();
			return true;
		}
	}
	if (event.EventType == EET_GUI_EVENT) {
		if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST && isVisible()) {
			if (!canTakeFocus(event.GUIEvent.Element)) {
				dstream << "GUIMainMenu: Not allowing focus change."
						<< std::endl;
				// Returning true disables focus change
				return true;
			}
		}
		if (event.GUIEvent.EventType==gui::EGET_CHECKBOX_CHANGED) {
			acceptInput();
			m_accepted = false;
			regenerateGui(m_screensize);
		}
		if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) {
			switch (event.GUIEvent.Caller->getID()) {
			case GUI_ID_START_BUTTON: // Start game
				acceptInput();
				m_accepted = false;
				m_gamecallback->startGame();
				quitMenu();
				return true;
			case GUI_ID_CONNECT_BUTTON:
				acceptInput();
				m_data.selected_tab = TAB_MP_CONNECT;
				regenerateGui(m_screensize);
				return true;
			case GUI_ID_REMFAV_BUTTON:
				acceptInput();
				if (m_data.selected_row > -1) {
					if (m_data.selected_tab == TAB_MP_LIST) {
						ServerInfo &info = m_data.servers.at(m_data.selected_row);
						if (info.is_favourite) {
							info.is_favourite = false;
							for (
								std::vector<ServerInfo>::iterator i = m_data.favourites.begin();
								i != m_data.favourites.end();
								i++
							) {
								if (
									i->name == info.name
									&& i->addr == info.addr
									&& i->mode == info.mode
								) {
									m_data.favourites.erase(i);
									break;
								}
							}
							saveFavourites();
						}
					}else if (m_data.selected_tab == TAB_MP_FAVOURITES) {
						ServerInfo &info = m_data.favourites.at(m_data.selected_row);
						if (info.is_favourite) {
							m_data.favourites.erase(m_data.favourites.begin()+m_data.selected_row);
							for (
								std::vector<ServerInfo>::iterator i = m_data.servers.begin();
								i != m_data.servers.end();
								i++
							) {
								if (
									i->name == info.name
									&& i->addr == info.addr
									&& i->mode == info.mode
								) {
									i->is_favourite = false;
									break;
								}
							}
							saveFavourites();
							m_data.selected_row = -1;
						}
					}
				}
				regenerateGui(m_screensize);
				return true;
			case GUI_ID_ADDFAV_BUTTON:
				acceptInput();
				if (m_data.selected_tab == TAB_MP_LIST && m_data.selected_row > -1) {
					ServerInfo &info = m_data.servers.at(m_data.selected_row);
					if (info.name != L"" && !info.is_favourite) {
						info.is_favourite = true;
						m_data.favourites.push_back(info);
						saveFavourites();
					}
				}else if (m_data.selected_tab == TAB_MP_CUSTOM) {
					ServerInfo info;
					info.name = m_data.mmdata->address+L":"+m_data.mmdata->port;
					info.addr = m_data.mmdata->address+L":"+m_data.mmdata->port;
					info.mode = L"custom";
					info.is_favourite = true;
					m_data.servers.push_back(info);
					m_data.favourites.push_back(info);
					m_data.selected_tab = TAB_MP_FAVOURITES;
					m_data.selected_row = m_data.favourites.size()-1;
				}
				regenerateGui(m_screensize);
				return true;
			case GUI_ID_REFRESH_BUTTON:
				acceptInput();
				fetchServers();
				if (
					(
						m_data.selected_tab == TAB_MP_LIST
						&& m_data.selected_row >= (int)m_data.servers.size()
					) || (
						m_data.selected_tab == TAB_MP_FAVOURITES
						&& m_data.selected_row >= (int)m_data.favourites.size()
					)
				) {
					m_data.selected_row = -1;
				}
				regenerateGui(m_screensize);
				return true;
			case GUI_ID_TAB_MP_LIST:
				acceptInput();
				m_accepted = false;
				if (m_data.selected_tab != TAB_MP_LIST) {
					m_data.selected_tab = TAB_MP_LIST;
					m_data.selected_row = -1;
				}
				regenerateGui(m_screensize);
				return true;
			case GUI_ID_TAB_MP_FAVOURITES:
				acceptInput();
				m_accepted = false;
				if (m_data.selected_tab != TAB_MP_FAVOURITES) {
					m_data.selected_tab = TAB_MP_FAVOURITES;
					m_data.selected_row = -1;
				}
				regenerateGui(m_screensize);
				return true;
			case GUI_ID_TAB_MP_CUSTOM:
				acceptInput();
				m_accepted = false;
				m_data.selected_tab = TAB_MP_CUSTOM;
				regenerateGui(m_screensize);
				return true;
			case GUI_ID_TAB_MP_MAINMENU: //back
				acceptInput();
				quitMenu();
				return true;
			}
		}
		if (event.GUIEvent.EventType == gui::EGET_EDITBOX_ENTER) {
			switch (event.GUIEvent.Caller->getID()) {
			case GUI_ID_ADDRESS_INPUT:
			case GUI_ID_PORT_INPUT:
			case GUI_ID_NAME_INPUT:
			case GUI_ID_PW_INPUT:
				m_gamecallback->startGame();
				acceptInput();
				quitMenu();
				return true;
			}
		}
		if (
			event.GUIEvent.EventType == gui::EGET_LISTBOX_CHANGED
			|| event.GUIEvent.EventType == gui::EGET_LISTBOX_SELECTED_AGAIN
		) {
			if (event.GUIEvent.Caller->getID() == GUI_ID_SERVER_LIST) {
				acceptInput();
				regenerateGui(m_screensize);
				return true;
			}
		}
	}
	return Parent ? Parent->OnEvent(event) : false;
}
Beispiel #10
0
bool GUIMainMenu::OnEvent(const SEvent& event)
{
	if(event.EventType==EET_KEY_INPUT_EVENT)
	{
		if(event.KeyInput.Key==KEY_ESCAPE && event.KeyInput.PressedDown)
		{
			m_gamecallback->exitToOS();
			quitMenu();
			return true;
		}
		if(event.KeyInput.Key==KEY_RETURN && event.KeyInput.PressedDown)
		{
			acceptInput();
			quitMenu();
			return true;
		}
	}
	if(event.EventType==EET_GUI_EVENT)
	{
		if(event.GUIEvent.EventType==gui::EGET_ELEMENT_FOCUS_LOST
				&& isVisible())
		{
			if(!canTakeFocus(event.GUIEvent.Element))
			{
				dstream<<"GUIMainMenu: Not allowing focus change."
						<<std::endl;
				// Returning true disables focus change
				return true;
			}
		}
		if(event.GUIEvent.EventType==gui::EGET_BUTTON_CLICKED)
		{
			switch(event.GUIEvent.Caller->getID())
			{
			case GUI_ID_JOIN_GAME_BUTTON: // Start game
				acceptInput();
				quitMenu();
				return true;
			case GUI_ID_CHANGE_KEYS_BUTTON: {
				GUIKeyChangeMenu *kmenu = new GUIKeyChangeMenu(env, parent, -1,menumgr);
				kmenu->drop();
				return true;
			}
			case GUI_ID_DELETE_MAP_BUTTON: // Delete map
				// Don't accept input data, just set deletion request
				m_data->delete_map = true;
				m_accepted = true;
				quitMenu();
				return true;
			}
		}
		if(event.GUIEvent.EventType==gui::EGET_EDITBOX_ENTER)
		{
			switch(event.GUIEvent.Caller->getID())
			{
				case GUI_ID_ADDRESS_INPUT: case GUI_ID_PORT_INPUT: case GUI_ID_NAME_INPUT: case 264:
				acceptInput();
				quitMenu();
				return true;
			}
		}
	}

	return Parent ? Parent->OnEvent(event) : false;
}
Beispiel #11
0
bool GUIMainMenu::OnEvent(const SEvent& event)
{
	if(event.EventType==EET_KEY_INPUT_EVENT)
	{
		if(event.KeyInput.Key==KEY_ESCAPE && event.KeyInput.PressedDown)
		{
			m_gamecallback->exitToOS();
			quitMenu();
			return true;
		}
		if(event.KeyInput.Key==KEY_RETURN && event.KeyInput.PressedDown)
		{
			acceptInput();
			quitMenu();
			return true;
		}
	}
	if(event.EventType==EET_GUI_EVENT)
	{
		if(event.GUIEvent.EventType==gui::EGET_ELEMENT_FOCUS_LOST
				&& isVisible())
		{
			if(!canTakeFocus(event.GUIEvent.Element))
			{
				dstream<<"GUIMainMenu: Not allowing focus change."
						<<std::endl;
				// Returning true disables focus change
				return true;
			}
		}
		if(event.GUIEvent.EventType==gui::EGET_TAB_CHANGED)
		{
			if(!m_is_regenerating)
				regenerateGui(m_screensize_old);
			return true;
		}
		if(event.GUIEvent.EventType==gui::EGET_BUTTON_CLICKED)
		{
			switch(event.GUIEvent.Caller->getID())
			{
			case GUI_ID_JOIN_GAME_BUTTON: {
				MainMenuData cur;
				readInput(&cur);
				if(cur.address == L"" && getTab() == TAB_MULTIPLAYER){
					(new GUIMessageMenu(env, parent, -1, menumgr,
							wgettext("Address required."))
							)->drop();
					return true;
				}
				acceptInput();
				quitMenu();
				return true;
			}
			case GUI_ID_CHANGE_KEYS_BUTTON: {
				GUIKeyChangeMenu *kmenu = new GUIKeyChangeMenu(env, parent, -1,menumgr);
				kmenu->drop();
				return true;
			}
			case GUI_ID_DELETE_WORLD_BUTTON: {
				MainMenuData cur;
				readInput(&cur);
				if(cur.selected_world == -1){
					(new GUIMessageMenu(env, parent, -1, menumgr,
							wgettext("Cannot delete world: Nothing selected"))
							)->drop();
				} else {
					WorldSpec spec = m_data->worlds[cur.selected_world];
					ConfirmDestDeleteWorld *dest = new
							ConfirmDestDeleteWorld(spec, this);
					(new GUIConfirmMenu(env, parent, -1, menumgr, dest,
							(std::wstring(wgettext("Delete world "))
							+L"\""+narrow_to_wide(spec.name)+L"\"?").c_str()
							))->drop();
				}
				return true;
			}
			case GUI_ID_CREATE_WORLD_BUTTON: {
				std::vector<SubgameSpec> games = getAvailableGames();
				if(games.size() == 0){
					GUIMessageMenu *menu = new GUIMessageMenu(env, parent,
							-1, menumgr,
							wgettext("Cannot create world: No games found"));
					menu->drop();
				} else {
					CreateWorldDest *dest = new CreateWorldDestMainMenu(this);
					GUICreateWorld *menu = new GUICreateWorld(env, parent, -1,
							menumgr, dest, games);
					menu->drop();
				}
				return true;
			}
			case GUI_ID_CONFIGURE_WORLD_BUTTON: {
				GUIMessageMenu *menu = new GUIMessageMenu(env, parent,
						-1, menumgr,
						wgettext("Nothing here"));
				menu->drop();
				return true;
			}
			}
		}
		if(event.GUIEvent.EventType==gui::EGET_EDITBOX_ENTER)
		{
			switch(event.GUIEvent.Caller->getID())
			{
				case GUI_ID_ADDRESS_INPUT: case GUI_ID_PORT_INPUT: case GUI_ID_NAME_INPUT: case 264:
				acceptInput();
				quitMenu();
				return true;
			}
		}
		if(event.GUIEvent.EventType==gui::EGET_LISTBOX_SELECTED_AGAIN)
		{
			switch(event.GUIEvent.Caller->getID())
			{
			case GUI_ID_WORLD_LISTBOX:
				acceptInput();
				if(getTab() != TAB_SINGLEPLAYER)
					m_data->address = L""; // Force local game
				quitMenu();
				return true;
			}
		}
	}

	return Parent ? Parent->OnEvent(event) : false;
}
bool GUIFormSpecMenu::OnEvent(const SEvent& event)
{
	if(event.EventType==EET_KEY_INPUT_EVENT)
	{
		KeyPress kp(event.KeyInput);
		if (event.KeyInput.PressedDown && (kp == EscapeKey ||
			kp == getKeySetting("keymap_inventory")))
		{
			quitMenu();
			return true;
		}
		if(event.KeyInput.Key==KEY_RETURN && event.KeyInput.PressedDown)
		{
			acceptInput();
			quitMenu();
			return true;
		}
	}
	if(event.EventType==EET_MOUSE_INPUT_EVENT
			&& event.MouseInput.Event == EMIE_MOUSE_MOVED)
	{
		// Mouse moved
		m_pointer = v2s32(event.MouseInput.X, event.MouseInput.Y);
	}
	if(event.EventType==EET_MOUSE_INPUT_EVENT
			&& event.MouseInput.Event != EMIE_MOUSE_MOVED)
	{
		// Mouse event other than movement

		v2s32 p(event.MouseInput.X, event.MouseInput.Y);
		m_pointer = p;

		// Get selected item and hovered/clicked item (s)

		updateSelectedItem();
		ItemSpec s = getItemAtPos(p);

		Inventory *inv_selected = NULL;
		Inventory *inv_s = NULL;

		if(m_selected_item)
		{
			inv_selected = m_invmgr->getInventory(m_selected_item->inventoryloc);
			assert(inv_selected);
			assert(inv_selected->getList(m_selected_item->listname) != NULL);
		}

		u32 s_count = 0;

		if(s.isValid())
		do{ // breakable
			inv_s = m_invmgr->getInventory(s.inventoryloc);

			if(!inv_s){
				errorstream<<"InventoryMenu: The selected inventory location "
						<<"\""<<s.inventoryloc.dump()<<"\" doesn't exist"
						<<std::endl;
				s.i = -1;  // make it invalid again
				break;
			}

			InventoryList *list = inv_s->getList(s.listname);
			if(list == NULL){
				verbosestream<<"InventoryMenu: The selected inventory list \""
						<<s.listname<<"\" does not exist"<<std::endl;
				s.i = -1;  // make it invalid again
				break;
			}

			if((u32)s.i >= list->getSize()){
				infostream<<"InventoryMenu: The selected inventory list \""
						<<s.listname<<"\" is too small (i="<<s.i<<", size="
						<<list->getSize()<<")"<<std::endl;
				s.i = -1;  // make it invalid again
				break;
			}

			s_count = list->getItem(s.i).count;
		}while(0);

		bool identical = (m_selected_item != NULL) && s.isValid() &&
			(inv_selected == inv_s) &&
			(m_selected_item->listname == s.listname) &&
			(m_selected_item->i == s.i);

		// buttons: 0 = left, 1 = right, 2 = middle
		// up/down: 0 = down (press), 1 = up (release), 2 = unknown event
		int button = 0;
		int updown = 2;
		if(event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)
			{ button = 0; updown = 0; }
		else if(event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN)
			{ button = 1; updown = 0; }
		else if(event.MouseInput.Event == EMIE_MMOUSE_PRESSED_DOWN)
			{ button = 2; updown = 0; }
		else if(event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP)
			{ button = 0; updown = 1; }
		else if(event.MouseInput.Event == EMIE_RMOUSE_LEFT_UP)
			{ button = 1; updown = 1; }
		else if(event.MouseInput.Event == EMIE_MMOUSE_LEFT_UP)
			{ button = 2; updown = 1; }

		// Set this number to a positive value to generate a move action
		// from m_selected_item to s.
		u32 move_amount = 0;

		// Set this number to a positive value to generate a drop action
		// from m_selected_item.
		u32 drop_amount = 0;

		// Set this number to a positive value to generate a craft action at s.
		u32 craft_amount = 0;

		if(updown == 0)
		{
			// Some mouse button has been pressed

			//infostream<<"Mouse button "<<button<<" pressed at p=("
			//	<<p.X<<","<<p.Y<<")"<<std::endl;

			m_selected_dragging = false;

			if(s.isValid() && s.listname == "craftpreview")
			{
				// Craft preview has been clicked: craft
				craft_amount = (button == 2 ? 10 : 1);
			}
			else if(m_selected_item == NULL)
			{
				if(s_count != 0)
				{
					// Non-empty stack has been clicked: select it
					m_selected_item = new ItemSpec(s);

					if(button == 1)  // right
						m_selected_amount = (s_count + 1) / 2;
					else if(button == 2)  // middle
						m_selected_amount = MYMIN(s_count, 10);
					else  // left
						m_selected_amount = s_count;

					m_selected_dragging = true;
				}
			}
			else  // m_selected_item != NULL
			{
				assert(m_selected_amount >= 1);

				if(s.isValid())
				{
					// Clicked a slot: move
					if(button == 1)  // right
						move_amount = 1;
					else if(button == 2)  // middle
						move_amount = MYMIN(m_selected_amount, 10);
					else  // left
						move_amount = m_selected_amount;

					if(identical)
					{
						if(move_amount >= m_selected_amount)
							m_selected_amount = 0;
						else
							m_selected_amount -= move_amount;
						move_amount = 0;
					}
				}
				else if(getAbsoluteClippingRect().isPointInside(m_pointer))
				{
					// Clicked somewhere else: deselect
					m_selected_amount = 0;
				}
				else
				{
					// Clicked outside of the window: drop
					if(button == 1)  // right
						drop_amount = 1;
					else if(button == 2)  // middle
						drop_amount = MYMIN(m_selected_amount, 10);
					else  // left
						drop_amount = m_selected_amount;
				}
			}
		}
		else if(updown == 1)
		{
			// Some mouse button has been released

			//infostream<<"Mouse button "<<button<<" released at p=("
			//	<<p.X<<","<<p.Y<<")"<<std::endl;

			if(m_selected_item != NULL && m_selected_dragging && s.isValid())
			{
				if(!identical)
				{
					// Dragged to different slot: move all selected
					move_amount = m_selected_amount;
				}
			}
			else if(m_selected_item != NULL && m_selected_dragging &&
				!(getAbsoluteClippingRect().isPointInside(m_pointer)))
			{
				// Dragged outside of window: drop all selected
				drop_amount = m_selected_amount;
			}

			m_selected_dragging = false;
		}

		// Possibly send inventory action to server
		if(move_amount > 0)
		{
			// Send IACTION_MOVE

			assert(m_selected_item && m_selected_item->isValid());
			assert(s.isValid());

			assert(inv_selected && inv_s);
			InventoryList *list_from = inv_selected->getList(m_selected_item->listname);
			InventoryList *list_to = inv_s->getList(s.listname);
			assert(list_from && list_to);
			ItemStack stack_from = list_from->getItem(m_selected_item->i);
			ItemStack stack_to = list_to->getItem(s.i);

			// Check how many items can be moved
			move_amount = stack_from.count = MYMIN(move_amount, stack_from.count);
			ItemStack leftover = stack_to.addItem(stack_from, m_gamedef->idef());
			// If source stack cannot be added to destination stack at all,
			// they are swapped
			if(leftover.count == stack_from.count && leftover.name == stack_from.name)
			{
				m_selected_amount = stack_to.count;
				// In case the server doesn't directly swap them but instead
				// moves stack_to somewhere else, set this
				m_selected_content_guess = stack_to;
				m_selected_content_guess_inventory = s.inventoryloc;
			}
			// Source stack goes fully into destination stack
			else if(leftover.empty())
			{
				m_selected_amount -= move_amount;
				m_selected_content_guess = ItemStack(); // Clear
			}
			// Source stack goes partly into destination stack
			else
			{
				move_amount -= leftover.count;
				m_selected_amount -= move_amount;
				m_selected_content_guess = ItemStack(); // Clear
			}

			infostream<<"Handing IACTION_MOVE to manager"<<std::endl;
			IMoveAction *a = new IMoveAction();
			a->count = move_amount;
			a->from_inv = m_selected_item->inventoryloc;
			a->from_list = m_selected_item->listname;
			a->from_i = m_selected_item->i;
			a->to_inv = s.inventoryloc;
			a->to_list = s.listname;
			a->to_i = s.i;
			m_invmgr->inventoryAction(a);
		}
		else if(drop_amount > 0)
		{
			m_selected_content_guess = ItemStack(); // Clear

			// Send IACTION_DROP

			assert(m_selected_item && m_selected_item->isValid());
			assert(inv_selected);
			InventoryList *list_from = inv_selected->getList(m_selected_item->listname);
			assert(list_from);
			ItemStack stack_from = list_from->getItem(m_selected_item->i);

			// Check how many items can be dropped
			drop_amount = stack_from.count = MYMIN(drop_amount, stack_from.count);
			assert(drop_amount > 0 && drop_amount <= m_selected_amount);
			m_selected_amount -= drop_amount;

			infostream<<"Handing IACTION_DROP to manager"<<std::endl;
			IDropAction *a = new IDropAction();
			a->count = drop_amount;
			a->from_inv = m_selected_item->inventoryloc;
			a->from_list = m_selected_item->listname;
			a->from_i = m_selected_item->i;
			m_invmgr->inventoryAction(a);
		}
		else if(craft_amount > 0)
		{
			m_selected_content_guess = ItemStack(); // Clear

			// Send IACTION_CRAFT

			assert(s.isValid());
			assert(inv_s);

			infostream<<"Handing IACTION_CRAFT to manager"<<std::endl;
			ICraftAction *a = new ICraftAction();
			a->count = craft_amount;
			a->craft_inv = s.inventoryloc;
			m_invmgr->inventoryAction(a);
		}

		// If m_selected_amount has been decreased to zero, deselect
		if(m_selected_amount == 0)
		{
			delete m_selected_item;
			m_selected_item = NULL;
			m_selected_amount = 0;
			m_selected_dragging = false;
			m_selected_content_guess = ItemStack();
		}
	}
	if(event.EventType==EET_GUI_EVENT)
	{
		if(event.GUIEvent.EventType==gui::EGET_ELEMENT_FOCUS_LOST
				&& isVisible())
		{
			if(!canTakeFocus(event.GUIEvent.Element))
			{
				infostream<<"GUIFormSpecMenu: Not allowing focus change."
						<<std::endl;
				// Returning true disables focus change
				return true;
			}
		}
		if(event.GUIEvent.EventType==gui::EGET_BUTTON_CLICKED)
		{
			switch(event.GUIEvent.Caller->getID())
			{
			case 257:
				acceptInput();
				quitMenu();
				// quitMenu deallocates menu
				return true;
			}
			// find the element that was clicked
			for(u32 i=0; i<m_fields.size(); i++)
			{
				FieldSpec &s = m_fields[i];
				// if its a button, set the send field so 
				// lua knows which button was pressed
				if (s.is_button && s.fid == event.GUIEvent.Caller->getID())
				{
					s.send = true;
					acceptInput();
					if(s.is_exit){
						quitMenu();
						return true;
					}else{
						s.send = false;
						// Restore focus to the full form
						Environment->setFocus(this);
						return true;
					}
				}
			}
		}
		if(event.GUIEvent.EventType==gui::EGET_EDITBOX_ENTER)
		{
			if(event.GUIEvent.Caller->getID() > 257)
			{
				acceptInput();
				quitMenu();
				// quitMenu deallocates menu
				return true;
			}
		}
	}

	return Parent ? Parent->OnEvent(event) : false;
}
Beispiel #13
0
bool GUIKeyChangeMenu::OnEvent(const SEvent& event)
{
	if (event.EventType == EET_KEY_INPUT_EVENT && activeKey >= 0
		&& event.KeyInput.PressedDown)
	{
		
		bool prefer_character = shift_down;
		KeyPress kp(event.KeyInput, prefer_character);
		
		bool shift_went_down = false;
		if(!shift_down &&
				(event.KeyInput.Key == irr::KEY_SHIFT ||
				event.KeyInput.Key == irr::KEY_LSHIFT ||
				event.KeyInput.Key == irr::KEY_RSHIFT))
			shift_went_down = true;

		// Remove Key already in use message
		if(this->key_used_text)
		{
			this->key_used_text->remove();
			this->key_used_text = NULL;
		}
		// Display Key already in use message
		if (std::find(this->key_used.begin(), this->key_used.end(), kp) != this->key_used.end())
		{
			core::rect < s32 > rect(0, 0, 600, 40);
			rect += v2s32(0, 0) + v2s32(25, 30);
			const wchar_t *text = wgettext("Key already in use");
			this->key_used_text = Environment->addStaticText(text,
					rect, false, true, this, -1);
			delete[] text;
			//infostream << "Key already in use" << std::endl;
		}

		// But go on
		{
			key_setting *k = NULL;
			for(size_t i = 0; i < key_settings.size(); i++)
			{
				if(key_settings.at(i)->id == activeKey)
				{
					k = key_settings.at(i);
					break;
				}
			}
			FATAL_ERROR_IF(k == NULL, "Key setting not found");
			k->key = kp;
			const wchar_t *text = wgettext(k->key.name());
			k->button->setText(text);
			delete[] text;

			this->key_used.push_back(kp);

			// Allow characters made with shift
			if(shift_went_down){
				shift_down = true;
				return false;
			}else{
				activeKey = -1;
				return true;
			}
		}
	}
	if (event.EventType == EET_GUI_EVENT)
	{
		if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST
			&& isVisible())
		{
			if (!canTakeFocus(event.GUIEvent.Element))
			{
				dstream << "GUIMainMenu: Not allowing focus change."
				<< std::endl;
				// Returning true disables focus change
				return true;
			}
		}
		if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED)
		{
			switch (event.GUIEvent.Caller->getID())
			{
				case GUI_ID_BACK_BUTTON: //back
					acceptInput();
					quitMenu();
					return true;
				case GUI_ID_ABORT_BUTTON: //abort
					quitMenu();
					return true;
				default:
					key_setting *k = NULL;
					for(size_t i = 0; i < key_settings.size(); i++)
					{
						if(key_settings.at(i)->id == event.GUIEvent.Caller->getID())
						{
							k = key_settings.at(i);
							break;
						}
					}
					FATAL_ERROR_IF(k == NULL, "Key setting not found");

					resetMenu();
					shift_down = false;
					activeKey = event.GUIEvent.Caller->getID();
					const wchar_t *text = wgettext("press key");
					k->button->setText(text);
					delete[] text;
					this->key_used.erase(std::remove(this->key_used.begin(),
							this->key_used.end(), k->key), this->key_used.end());
					break;
			}
			Environment->setFocus(this);
		}
	}
	return Parent ? Parent->OnEvent(event) : false;
}
Beispiel #14
0
bool GUICharDefMenu::OnEvent(const SEvent& event)
{
	if (event.EventType==EET_KEY_INPUT_EVENT) {
		if (event.KeyInput.Key==KEY_ESCAPE && event.KeyInput.PressedDown) {
			acceptInput();
			quitMenu();
			return true;
		}
	}
	if (event.EventType==EET_GUI_EVENT) {
		if (event.GUIEvent.EventType==gui::EGET_ELEMENT_FOCUS_LOST && isVisible()) {
			if (!canTakeFocus(event.GUIEvent.Element)) {
				dstream<<"GUIMainMenu: Not allowing focus change."<<std::endl;
				// Returning true disables focus change
				return true;
			}
		}
		if (event.GUIEvent.EventType==gui::EGET_BUTTON_CLICKED) {
			switch (event.GUIEvent.Caller->getID()) {
			case GUI_ID_CD_MALE_BUTTON:
			{
				m_parts["gender"] = "M";
				m_parts["Yscale"] = "10";
				m_parts["XZscale"] = "10";
				m_y_scale = 1.0;
				m_xz_scale = 1.0;
				m_model->setMaterialTexture(0, getPlayerTexture());
				m_model->setScale(v3f(m_xz_scale,m_y_scale,m_xz_scale));
				printCharDef();
				return true;
			}
			case GUI_ID_CD_FEMALE_BUTTON:
			{
				m_parts["gender"] = "F";
				m_parts["Yscale"] = "10";
				m_parts["XZscale"] = "9";
				m_y_scale = 1.0;
				m_xz_scale = 0.9;
				m_model->setMaterialTexture(0, getPlayerTexture());
				m_model->setScale(v3f(m_xz_scale,m_y_scale,m_xz_scale));
				printCharDef();
				return true;
			}
			case GUI_ID_CD_TALLER_BUTTON:
			{
				if (m_y_scale >= 1.1)
					return true;
				m_y_scale += 0.1;
				m_parts["Yscale"] = ftos(m_y_scale*10.);
				m_model->setScale(v3f(m_xz_scale,m_y_scale,m_xz_scale));
				printCharDef();
				return true;
			}
			case GUI_ID_CD_SHORTER_BUTTON:
			{
				if (m_y_scale <= 0.8)
					return true;
				m_y_scale -= 0.1;
				m_parts["Yscale"] = ftos(m_y_scale*10.);
				m_model->setScale(v3f(m_xz_scale,m_y_scale,m_xz_scale));
				printCharDef();
				return true;
			}
			case GUI_ID_CD_WIDER_BUTTON:
			{
				if (m_xz_scale >= 1.1)
					return true;
				m_xz_scale += 0.1;
				m_parts["XZscale"] = ftos(m_xz_scale*10.);
				m_model->setScale(v3f(m_xz_scale,m_y_scale,m_xz_scale));
				printCharDef();
				return true;
			}
			case GUI_ID_CD_THINNER_BUTTON:
			{
				if (m_xz_scale <= 0.8)
					return true;
				m_xz_scale -= 0.1;
				m_parts["XZscale"] = ftos(m_xz_scale*10.);
				m_model->setScale(v3f(m_xz_scale,m_y_scale,m_xz_scale));
				printCharDef();
				return true;
			}
			case GUI_ID_CD_SKINTONE_PREV_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_skintone_types.find(m_parts["skintone"]);
				if (i == m_skintone_types.begin())
					i = m_skintone_types.end();
				--i;
				m_parts["skintone"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_SKINTONE_NEXT_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_skintone_types.find(m_parts["skintone"]);
				++i;
				if (i == m_skintone_types.end())
					i = m_skintone_types.begin();
				m_parts["skintone"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_FACE_PREV_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_face_types.find(m_parts["face"]);
				if (i == m_face_types.begin())
					i = m_face_types.end();
				--i;
				m_parts["face"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_FACE_NEXT_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_face_types.find(m_parts["face"]);
				++i;
				if (i == m_face_types.end())
					i = m_face_types.begin();
				m_parts["face"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_HAIRTONE_PREV_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_hairtone_types.find(m_parts["hairtone"]);
				if (i == m_hairtone_types.begin())
					i = m_hairtone_types.end();
				--i;
				m_parts["hairtone"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_HAIRTONE_NEXT_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_hairtone_types.find(m_parts["hairtone"]);
				++i;
				if (i == m_hairtone_types.end())
					i = m_hairtone_types.begin();
				m_parts["hairtone"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_HAIR_PREV_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_hair_types.find(m_parts["hair"]);
				if (i == m_hair_types.begin())
					i = m_hair_types.end();
				--i;
				m_parts["hair"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_HAIR_NEXT_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_hair_types.find(m_parts["hair"]);
				++i;
				if (i == m_hair_types.end())
					i = m_hair_types.begin();
				m_parts["hair"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_EYES_PREV_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_eyes_types.find(m_parts["eyes"]);
				if (i == m_eyes_types.begin())
					i = m_eyes_types.end();
				--i;
				m_parts["eyes"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_EYES_NEXT_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_eyes_types.find(m_parts["eyes"]);
				++i;
				if (i == m_eyes_types.end())
					i = m_eyes_types.begin();
				m_parts["eyes"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_SHIRT_PREV_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_shirt_types.find(m_parts["shirt"]);
				if (i == m_shirt_types.begin())
					i = m_shirt_types.end();
				--i;
				m_parts["shirt"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_SHIRT_NEXT_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_shirt_types.find(m_parts["shirt"]);
				++i;
				if (i == m_shirt_types.end())
					i = m_shirt_types.begin();
				m_parts["shirt"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_PANTS_PREV_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_pants_types.find(m_parts["pants"]);
				if (i == m_pants_types.begin())
					i = m_pants_types.end();
				--i;
				m_parts["pants"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_PANTS_NEXT_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_pants_types.find(m_parts["pants"]);
				++i;
				if (i == m_pants_types.end())
					i = m_pants_types.begin();
				m_parts["pants"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_SHOES_PREV_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_shoes_types.find(m_parts["shoes"]);
				if (i == m_shoes_types.begin())
					i = m_shoes_types.end();
				--i;
				m_parts["shoes"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_SHOES_NEXT_BUTTON:
			{
				std::map<std::string,std::wstring>::iterator i = m_shoes_types.find(m_parts["shoes"]);
				++i;
				if (i == m_shoes_types.end())
					i = m_shoes_types.begin();
				m_parts["shoes"] = i->first;
				m_model->setMaterialTexture(0, getPlayerTexture());
				regenerateGui(m_screensize);
				printCharDef();
				return true;
			}
			case GUI_ID_CD_SAVE_BUTTON:
			{
				savePlayerSkin();
				acceptInput();
				quitMenu();
				return true;
			}
			case GUI_ID_CD_QUIT_BUTTON:
			{
				acceptInput();
				quitMenu();
				return true;
			}
			}
		}
	}

	return Parent ? Parent->OnEvent(event) : false;
}
Beispiel #15
0
void 
QLuaApplication::Private::ttyInput(QByteArray ba)
{
  // are we in a pause?
  if (ttyPauseReceived)
    {
      ttyPauseReceived = false;
      theEngine->resume(false);
      return;
    }
  // are we quitting?
  if (ttyEofReceived)
    {
      ttyEofReceived = false;
      if ((ba[0]=='y' || ba[0]=='Y'))
        {
          if (! theApp->close())
            acceptInput(true);
        }
      else if (ba.size()==0 || ba[0]=='n' || ba[0]=='N') 
        {
          ttyEofCount = 0;
          acceptInput(true);
        }
      else
        ttyEndOfFile();
      return;
    }
  // append to the current input
  if (! luaInput.size())
    {
      luaInput = ba;
      if (ba.size() > 0 && ba[0] == '=')
        luaInput = QByteArray("return ") + (ba.constData() + 1);
    }
  else
    {
      luaInput += '\n';
      luaInput += ba;
    }
  // determine if line is complete
  QtLuaLocker lua(theEngine, 1000);
  struct lua_State *L = lua;
  const char *data = luaInput.constData();
  int status = (L) ? 0 : 1;
  if (! status)
    {
      status = luaL_loadbuffer(L, data, luaInput.size(), "=stdin");
      if (status == LUA_ERRSYNTAX) 
        {
          size_t lmsg;
          const char *msg = lua_tolstring(L, -1, &lmsg);
          const char *tp = msg + lmsg - (sizeof(LUA_QL("<eof>")) - 1);
          status = (strstr(msg, LUA_QL("<eof>")) == tp);
        }
      lua_pop(L, 1);
    }
  // action
  if (status)
    {
      theConsole->readLine(luaPrompt2.constData());
    }
  else
    {
      QByteArray cmd = luaInput;
      luaInput.clear();
      theConsole->addToHistory(cmd);
      if (cmd.simplified().isEmpty())
        acceptInput(true);
      else
        runCommand(cmd, false);
    }
}
Beispiel #16
0
void 
QLuaApplication::Private::stateChanged(int state)
{
  // safeguard
  if (closingDown || !theEngine)
    return;
  // timing
  if (state == QtLuaEngine::Running)
    {
      if (ttyPauseReceived)
        {
          ttyPauseReceived = false;
          theConsole->abortReadLine();
        }
      startTime = QDateTime::currentDateTime();
    }
  else
    {
      QDateTime now = QDateTime::currentDateTime();
      int secs = startTime.secsTo(now);
      int msecs = startTime.time().msecsTo(now.time()) % 1000;
      elapsed += secs + (msecs * 0.001);
    }
  // dealing with pauses
  if (state == QtLuaEngine::Paused)
    {
      if (theEngine->isPaused())
        {
          if (! interactionStarted)
            {
              theEngine->resume(false);
            }
          else if (ttyConsole)
            {
              QByteArray prompt = "[Pause -- press enter to continue] ";
              ttyPauseReceived = true;
              theConsole->readLine(prompt);
            }
        }
    }
  // accepting new commands
  if (state == QtLuaEngine::Ready)
    {
      while (! savedNamedObjects.isEmpty())
        {
          QObjectPointer ptr = savedNamedObjects.takeFirst();
          if (ptr) theEngine->nameObject(ptr);
        }
      if (! argumentsDone)
        {
          argumentsDone = true;
          theEngine->setPrintResults(false);
          theApp->setQuitOnLastWindowClosed(false);
          int status = processArguments(savedArgc, savedArgv);
          if (status && !interactive)
            { theApp->exit(status = EXIT_FAILURE); return; }
          else if (!interactive)
            { theApp->exit(status = EXIT_SUCCESS); return; }
        }
      // go in interactive mode
      if (!interactionStarted)  
        {
          interactionStarted = true;
          theApp->setupConsoleOutput();
          theApp->setQuitOnLastWindowClosed(!ttyConsole);
          bool capture = theConsole->captureOutput();
          theEngine->setPrintResults(ttyConsole || capture);
          if (forceVersion || theEngine->printResults())
            printLuaVersion();
        }
      // accept fresh commands
      if (theEngine->isReady())
        acceptInput(false);
    }
}
Beispiel #17
0
void startClient() {
	connectToServer();
	sendCredentials();
	acceptInput();
}
Beispiel #18
0
bool GUIKeyChangeMenu::OnEvent(const SEvent& event)
{
	if (event.EventType == EET_KEY_INPUT_EVENT && activeKey >= 0
			&& event.KeyInput.PressedDown)
	{
		changeCtype("");
		KeyPress kp(event.KeyInput);

		if (activeKey == GUI_ID_KEY_FORWARD_BUTTON)
		{
			this->forward->setText(wgettext(kp.name()));
			this->key_forward = kp;
		}
		else if (activeKey == GUI_ID_KEY_BACKWARD_BUTTON)
		{
			this->backward->setText(wgettext(kp.name()));
			this->key_backward = kp;
		}
		else if (activeKey == GUI_ID_KEY_LEFT_BUTTON)
		{
			this->left->setText(wgettext(kp.name()));
			this->key_left = kp;
		}
		else if (activeKey == GUI_ID_KEY_RIGHT_BUTTON)
		{
			this->right->setText(wgettext(kp.name()));
			this->key_right = kp;
		}
		else if (activeKey == GUI_ID_KEY_JUMP_BUTTON)
		{
			this->jump->setText(wgettext(kp.name()));
			this->key_jump = kp;
		}
		else if (activeKey == GUI_ID_KEY_SNEAK_BUTTON)
		{
			this->sneak->setText(wgettext(kp.name()));
			this->key_sneak = kp;
		}
		else if (activeKey == GUI_ID_KEY_DROP_BUTTON)
		{
			this->dropbtn->setText(wgettext(kp.name()));
			this->key_drop = kp;
		}
		else if (activeKey == GUI_ID_KEY_INVENTORY_BUTTON)
		{
			this->inventory->setText(wgettext(kp.name()));
			this->key_inventory = kp;
		}
		else if (activeKey == GUI_ID_KEY_CHAT_BUTTON)
		{
			this->chat->setText(wgettext(kp.name()));
			this->key_chat = kp;
		}
		else if (activeKey == GUI_ID_KEY_CMD_BUTTON)
		{
			this->cmd->setText(wgettext(kp.name()));
			this->key_cmd = kp;
		}
		else if (activeKey == GUI_ID_KEY_CONSOLE_BUTTON)
		{
			this->console->setText(wgettext(kp.name()));
			this->key_console = kp;
		}
		else if (activeKey == GUI_ID_KEY_RANGE_BUTTON)
		{
			this->range->setText(wgettext(kp.name()));
			this->key_range = kp;
		}
		else if (activeKey == GUI_ID_KEY_FLY_BUTTON)
		{
			this->fly->setText(wgettext(kp.name()));
			this->key_fly = kp;
		}
		else if (activeKey == GUI_ID_KEY_FAST_BUTTON)
		{
			this->fast->setText(wgettext(kp.name()));
			this->key_fast = kp;
		}
		else if (activeKey == GUI_ID_KEY_USE_BUTTON)
		{
			this->use->setText(wgettext(kp.name()));
			this->key_use = kp;
		}
		else if (activeKey == GUI_ID_KEY_DUMP_BUTTON)
		{
			this->dump->setText(wgettext(kp.name()));
			this->key_dump = kp;
		}
		changeCtype("C");
		activeKey = -1;
		return true;
	}
	if (event.EventType == EET_GUI_EVENT)
	{
		if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST
				&& isVisible())
		{
			if (!canTakeFocus(event.GUIEvent.Element))
			{
				dstream << "GUIMainMenu: Not allowing focus change."
						<< std::endl;
				// Returning true disables focus change
				return true;
			}
		}
		if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED)
		{
			if(event.GUIEvent.Caller->getID() != GUI_ID_BACK_BUTTON &&
				event.GUIEvent.Caller->getID() != GUI_ID_ABORT_BUTTON)
			{
				changeCtype("");
			}

			switch (event.GUIEvent.Caller->getID())
			{
			case GUI_ID_BACK_BUTTON: //back
				acceptInput();
				quitMenu();
				return true;
			case GUI_ID_ABORT_BUTTON: //abort
				quitMenu();
				return true;
			case GUI_ID_KEY_FORWARD_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->forward->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_BACKWARD_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->backward->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_LEFT_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->left->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_RIGHT_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->right->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_USE_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->use->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_FLY_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->fly->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_FAST_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->fast->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_JUMP_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->jump->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_DROP_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->dropbtn->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_CHAT_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->chat->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_CMD_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->cmd->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_CONSOLE_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->console->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_SNEAK_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->sneak->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_INVENTORY_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->inventory->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_DUMP_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->dump->setText(wgettext("press Key"));
				break;
			case GUI_ID_KEY_RANGE_BUTTON:
				resetMenu();
				activeKey = event.GUIEvent.Caller->getID();
				this->range->setText(wgettext("press Key"));
				break;
			}
			//Buttons
			changeCtype("C");

		}
	}
	return Parent ? Parent->OnEvent(event) : false;
}
void GUIConfirmRegistration::regenerateGui(v2u32 screensize)
{
	acceptInput();
	removeChildren();

	/*
		Calculate new sizes and positions
	*/
	core::rect<s32> rect(screensize.X / 2 - 600 / 2, screensize.Y / 2 - 360 / 2,
			screensize.X / 2 + 600 / 2, screensize.Y / 2 + 360 / 2);

	DesiredRect = rect;
	recalculateAbsolutePosition(false);

	v2s32 size = rect.getSize();
	v2s32 topleft_client(0, 0);

	const wchar_t *text;

	/*
		Add stuff
	*/
	s32 ypos = 30;
	{
		std::string address = m_address;
		if (address.empty())
			address = "localhost";
		core::rect<s32> rect2(0, 0, 540, 180);
		rect2 += topleft_client + v2s32(30, ypos);
		static const std::string info_text_template = strgettext(
				"You are about to join the server at %1$s with the "
				"name \"%2$s\" for the first time. If you proceed, a "
				"new account using your credentials will be created "
				"on this server.\n"
				"Please retype your password and click Register and "
				"Join to confirm account creation or click Cancel to "
				"abort.");
		char info_text_buf[1024];
		porting::mt_snprintf(info_text_buf, sizeof(info_text_buf),
				info_text_template.c_str(), address.c_str(),
				m_playername.c_str());

		wchar_t *info_text_buf_wide = utf8_to_wide_c(info_text_buf);
		gui::IGUIEditBox *e = new gui::intlGUIEditBox(info_text_buf_wide, true,
				Environment, this, ID_message, rect2, false, true);
		delete[] info_text_buf_wide;
		e->drop();
		e->setMultiLine(true);
		e->setWordWrap(true);
		e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_CENTER);
	}

	ypos += 210;
	{
		core::rect<s32> rect2(0, 0, 540, 30);
		rect2 += topleft_client + v2s32(30, ypos);
		gui::IGUIEditBox *e = Environment->addEditBox(m_pass_confirm.c_str(),
				rect2, true, this, ID_confirmPassword);
		e->setPasswordBox(true);
	}

	ypos += 60;
	{
		core::rect<s32> rect2(0, 0, 230, 35);
		rect2 = rect2 + v2s32(size.X / 2 - 220, ypos);
		text = wgettext("Register and Join");
		Environment->addButton(rect2, this, ID_confirm, text);
		delete[] text;
	}
	{
		core::rect<s32> rect2(0, 0, 120, 35);
		rect2 = rect2 + v2s32(size.X / 2 + 70, ypos);
		text = wgettext("Cancel");
		Environment->addButton(rect2, this, ID_cancel, text);
		delete[] text;
	}
	{
		core::rect<s32> rect2(0, 0, 200, 20);
		rect2 += topleft_client + v2s32(30, ypos - 40);
		text = wgettext("Passwords do not match!");
		IGUIElement *e = Environment->addStaticText(
				text, rect2, false, true, this, ID_message);
		e->setVisible(false);
		delete[] text;
	}
}
Beispiel #20
0
bool GUIMainMenu::OnEvent(const SEvent& event)
{
	if(event.EventType==EET_KEY_INPUT_EVENT)
	{
		if(event.KeyInput.Key==KEY_ESCAPE && event.KeyInput.PressedDown)
		{
			m_gamecallback->exitToOS();
			quitMenu();
			return true;
		}
		if(event.KeyInput.Key==KEY_RETURN && event.KeyInput.PressedDown)
		{
			acceptInput();
			quitMenu();
			return true;
		}
	}
	if(event.EventType==EET_GUI_EVENT)
	{
		if(event.GUIEvent.EventType==gui::EGET_ELEMENT_FOCUS_LOST
				&& isVisible())
		{
			if(!canTakeFocus(event.GUIEvent.Element))
			{
				dstream<<"GUIMainMenu: Not allowing focus change."
						<<std::endl;
				// Returning true disables focus change
				return true;
			}
		}
		if(event.GUIEvent.EventType==gui::EGET_TAB_CHANGED)
		{
			if(!m_is_regenerating)
				regenerateGui(m_screensize_old);
			return true;
		}
		if(event.GUIEvent.EventType==gui::EGET_LISTBOX_CHANGED && event.GUIEvent.Caller->getID() == GUI_ID_SERVERLIST)
		{
			serverListOnSelected();
			return true;
		}
		if(event.GUIEvent.EventType==gui::EGET_BUTTON_CLICKED)
		{
			switch(event.GUIEvent.Caller->getID())
			{
			case GUI_ID_JOIN_GAME_BUTTON: {
				MainMenuData cur;
				readInput(&cur);
				if (getTab() == TAB_MULTIPLAYER && cur.address == L"")
				{
					wchar_t* text = wgettext("Address required.");
					(new GUIMessageMenu(env, parent, -1, menumgr,
							text)
							)->drop();
					delete[] text;
					return true;
				}
				acceptInput();
				quitMenu();
				return true;
			}
			case GUI_ID_CHANGE_KEYS_BUTTON: {
				GUIKeyChangeMenu *kmenu = new GUIKeyChangeMenu(env, parent, -1,menumgr);
				kmenu->drop();
				return true;
			}
			case GUI_ID_DELETE_WORLD_BUTTON: {
				MainMenuData cur;
				readInput(&cur);
				if(cur.selected_world == -1){
					wchar_t* text = wgettext("Cannot delete world: Nothing selected");
					(new GUIMessageMenu(env, parent, -1, menumgr,
							text)
							)->drop();
					delete[] text;
				} else {
					WorldSpec spec = m_data->worlds[cur.selected_world];
					// Get files and directories involved
					std::vector<std::string> paths;
					paths.push_back(spec.path);
					fs::GetRecursiveSubPaths(spec.path, paths);
					// Launch confirmation dialog
					ConfirmDestDeleteWorld *dest = new
							ConfirmDestDeleteWorld(spec, this, paths);
					wchar_t* text1 = wgettext("Delete world");
					wchar_t* text2 = wgettext("Files to be deleted");
					std::wstring text = text1;
					text += L" \"";
					text += narrow_to_wide(spec.name);
					text += L"\"?\n\n";
					text += text2;
					text += L":\n";
					delete[] text1;
					delete[] text2;
					for(u32 i=0; i<paths.size(); i++){
						if(i == 3){ text += L"..."; break; }
						text += narrow_to_wide(paths[i]) + L"\n";
					}
					(new GUIConfirmMenu(env, parent, -1, menumgr, dest,
							text.c_str()))->drop();
				}
				return true;
			}
			case GUI_ID_CREATE_WORLD_BUTTON: {
				const std::vector<SubgameSpec> &games = m_data->games;
				if(games.size() == 0){
					wchar_t* text = wgettext("Cannot create world: No games found");
					GUIMessageMenu *menu = new GUIMessageMenu(env, parent,
							-1, menumgr,
							text);
					menu->drop();
					delete[] text;
				} else {
					CreateWorldDest *dest = new CreateWorldDestMainMenu(this);
					GUICreateWorld *menu = new GUICreateWorld(env, parent, -1,
							menumgr, dest, games, m_data->selected_game);
					menu->drop();
				}
				return true;
			}
			case GUI_ID_CONFIGURE_WORLD_BUTTON: {
				MainMenuData cur;
				readInput(&cur);
				if(cur.selected_world == -1)
				{
					wchar_t* text = wgettext("Cannot configure world: Nothing selected");
					(new GUIMessageMenu(env, parent, -1, menumgr,
							text)
							)->drop();
					delete[] text;
				} 
				else 
				{
					WorldSpec wspec = m_data->worlds[cur.selected_world];
					GUIConfigureWorld *menu = new GUIConfigureWorld(env, parent,
										-1, menumgr, wspec);
					menu->drop();
				}
				return true;
			}
			case GUI_ID_SERVERLIST_DELETE: {
				gui::IGUIListBox *serverlist = (gui::IGUIListBox*)getElementFromId(GUI_ID_SERVERLIST);
				s32 selected = ((gui::IGUIListBox*)serverlist)->getSelected();
				if (selected == -1) return true;
				ServerList::deleteEntry(m_data->servers[selected]);
				m_data->servers = ServerList::getLocal();
				updateGuiServerList();
				if (selected > 0)
					selected -= 1;
				serverlist->setSelected(selected);
				serverListOnSelected();
				return true;
			}
			#if USE_CURL
			case GUI_ID_SERVERLIST_TOGGLE: {
				gui::IGUIElement *togglebutton = getElementFromId(GUI_ID_SERVERLIST_TOGGLE);
				gui::IGUIElement *deletebutton = getElementFromId(GUI_ID_SERVERLIST_DELETE);
				gui::IGUIListBox *serverlist = (gui::IGUIListBox*)getElementFromId(GUI_ID_SERVERLIST);
				gui::IGUIElement *title = getElementFromId(GUI_ID_SERVERLIST_TITLE);
				if (m_data->selected_serverlist == SERVERLIST_PUBLIC) // switch to favorite list
				{
					m_data->servers = ServerList::getLocal();
					wchar_t* text1 = wgettext("Show Public");
					wchar_t* text2 = wgettext("Favorites:");
					togglebutton->setText(text1);
					title->setText(text2);
					delete[] text1;
					delete[] text2;
					deletebutton->setVisible(true);
					updateGuiServerList();
					serverlist->setSelected(0);
					m_data->selected_serverlist = SERVERLIST_FAVORITES;
				}
				else // switch to online list
				{
					m_data->servers = ServerList::getOnline();
					wchar_t* text1 = wgettext("Show Favorites");
					wchar_t* text2 = wgettext("Public Server List:");
					togglebutton->setText(text1);
					title->setText(text2);
					delete[] text1;
					delete[] text2;
					deletebutton->setVisible(false);
					updateGuiServerList();
					serverlist->setSelected(0);
					m_data->selected_serverlist = SERVERLIST_PUBLIC;
				}
				serverListOnSelected();
			}
			#endif
			}
			/* Game buttons */
			int eid = event.GUIEvent.Caller->getID();
			if(eid >= GUI_ID_GAME_BUTTON_FIRST &&
					eid <= GUI_ID_GAME_BUTTON_MAX){
				m_data->selected_game =
						m_data->games[eid - GUI_ID_GAME_BUTTON_FIRST].id;
				m_data->selected_game_name =
						m_data->games[eid - GUI_ID_GAME_BUTTON_FIRST].name;
				regenerateGui(m_screensize_old);
			}
		}
		if(event.GUIEvent.EventType==gui::EGET_EDITBOX_ENTER)
		{
			switch(event.GUIEvent.Caller->getID())
			{
				case GUI_ID_ADDRESS_INPUT: case GUI_ID_PORT_INPUT: case GUI_ID_NAME_INPUT: case 264:
				MainMenuData cur;
				readInput(&cur);
				if (getTab() == TAB_MULTIPLAYER && cur.address == L"")
				{
					wchar_t* text = wgettext("Address required.");
					(new GUIMessageMenu(env, parent, -1, menumgr,
							text)
							)->drop();
					delete[] text;
					return true;
				}
				acceptInput();
				quitMenu();
				return true;
			}
		}
		if(event.GUIEvent.EventType==gui::EGET_LISTBOX_CHANGED)
		{
			readInput(m_data);
		}
		if(event.GUIEvent.EventType==gui::EGET_LISTBOX_SELECTED_AGAIN)
		{
			switch(event.GUIEvent.Caller->getID())
			{
			case GUI_ID_WORLD_LISTBOX:
				acceptInput();
				if(getTab() != TAB_SINGLEPLAYER)
					m_data->address = L""; // Force local game
				quitMenu();
				return true;
			case GUI_ID_SERVERLIST:
				gui::IGUIListBox *serverlist = (gui::IGUIListBox*)getElementFromId(GUI_ID_SERVERLIST);
				if (serverlist->getSelected() > -1)
				{
					acceptInput();
					quitMenu();
					return true;
				}
			}
		}
	}

	return Parent ? Parent->OnEvent(event) : false;
}