Beispiel #1
0
	UISoftkey::UISoftkey(Callback c)
		: callback(c) {

		nl::node src = nl::nx::ui["Login.img"]["Common"]["SoftKey"];

		sprites.emplace_back(src["backgrnd"]);
		sprites.emplace_back(src["backgrnd2"]);
		sprites.emplace_back(src["backgrnd3"]);

		buttons[BT_NEXT] = std::make_unique<MapleButton>(src["BtNext"]);
		buttons[BT_BACK] = std::make_unique<MapleButton>(src["BtDel"]);
		buttons[BT_OK] = std::make_unique<MapleButton>(src["BtOK"], Point<int16_t>(72, 235));
		buttons[BT_CANCEL] = std::make_unique<MapleButton>(src["BtCancel"], Point<int16_t>(13, 235));

		nl::node keys = src["BtNum"];

		buttons[BT_0] = std::make_unique<MapleButton>(keys["0"]);
		buttons[BT_1] = std::make_unique<MapleButton>(keys["1"]);
		buttons[BT_2] = std::make_unique<MapleButton>(keys["2"]);
		buttons[BT_3] = std::make_unique<MapleButton>(keys["3"]);
		buttons[BT_4] = std::make_unique<MapleButton>(keys["4"]);
		buttons[BT_5] = std::make_unique<MapleButton>(keys["5"]);
		buttons[BT_6] = std::make_unique<MapleButton>(keys["6"]);
		buttons[BT_7] = std::make_unique<MapleButton>(keys["7"]);
		buttons[BT_8] = std::make_unique<MapleButton>(keys["8"]);
		buttons[BT_9] = std::make_unique<MapleButton>(keys["9"]);

		buttons[BT_OK]->set_state(Button::DISABLED);

		entry = { Text::A11M, Text::LEFT, Text::BLACK };

		shufflekeys();

		position = { 330, 160 };
		dimension = { 140, 280 };
		active = true;
	}
Beispiel #2
0
	Button::State UISoftkey::button_pressed(uint16_t id)
	{
		std::string entered = entry.get_text();

		switch (id)
		{
		case BT_0:
		case BT_1:
		case BT_2:
		case BT_3:
		case BT_4:
		case BT_5:
		case BT_6:
		case BT_7:
		case BT_8:
		case BT_9:
			if (entered.size() <= MAX_SIZE)
			{
				entered.append(std::to_string(id));
				shufflekeys();
			}
			buttons[id]->set_state(Button::NORMAL);
			break;
		case BT_BACK:
			if (entered.size() > 0)
			{
				entered.pop_back();
			}
			buttons[id]->set_state(Button::NORMAL);
			break;
		case BT_CANCEL:
			active = false;
			break;
		case BT_OK:
			if (entered.size() >= MIN_SIZE && callback)
			{
				callback(entered);
				active = false;
			}
			break;
		}

		switch (entered.size())
		{
		case MIN_SIZE - 1:
			buttons[BT_OK]->set_state(Button::DISABLED);
			break;
		case MIN_SIZE:
			buttons[BT_OK]->set_state(Button::NORMAL);
			break;
		case MAX_SIZE - 1:
			for (uint8_t i = 0; i < NUM_KEYS; i++)
			{
				buttons[i]->set_state(Button::NORMAL);
			}
			break;
		case MAX_SIZE:
			for (uint8_t i = 0; i < NUM_KEYS; i++)
			{
				buttons[i]->set_state(Button::DISABLED);
			}
			break;
		}

		entry.change_text(entered);

		return Button::IDENTITY;
	}
Beispiel #3
0
	void UISoftkey::buttonpressed(uint16_t id)
	{
		std::string entered = entry.gettext();

		switch (id)
		{
		case BT_0:
		case BT_1:
		case BT_2:
		case BT_3:
		case BT_4:
		case BT_5:
		case BT_6:
		case BT_7:
		case BT_8:
		case BT_9:
			if (entered.size() < 8)
			{
				entered.append(std::to_string(id));
				shufflekeys();
			}
			buttons[id]->setstate(Button::NORMAL);
			break;
		case BT_BACK:
			if (entered.size() > 0)
			{
				entered.pop_back();
			}
			buttons[id]->setstate(Button::NORMAL);
			break;
		case BT_CANCEL:
			active = false;
			break;
		case BT_OK:
			if (entered.size() > 5)
			{
				UI::get().disable();

				int32_t cid = Session::get().getlogin()
					.getcharid();
				switch (type)
				{
				case CHARSELECT:
					SelectCharPicPacket(entered, cid)
						.dispatch();
					break;
				case REGISTER:
					RegisterPicPacket(cid, entered)
						.dispatch();
					break;
				}
				active = false;
			}
			break;
		}

		switch (entered.size())
		{
		case 5:
			buttons[BT_OK]->setstate(Button::DISABLED);
			break;
		case 6:
			buttons[BT_OK]->setstate(Button::NORMAL);
			break;
		case 7:
			if (entry.length() == 8)
			{
				for (uint8_t i = 0; i < NUM_KEYS; i++)
				{
					buttons[i]->setstate(Button::NORMAL);
				}
			}
			break;
		case 8:
			for (uint8_t i = 0; i < NUM_KEYS; i++)
			{
				buttons[i]->setstate(Button::DISABLED);
			}
			break;
		}

		entry.settext(entered, 0);
	}