Ejemplo n.º 1
0
void ChatPanel::OnMouseEvent(OpWidget *widget, INT32 pos, INT32 x, INT32 y, MouseButton button, BOOL down, UINT8 nclicks)
{
	if (widget != m_rooms_view)
	{
		return;
	}

	if (!down && button == MOUSE_BUTTON_2)
	{
		ShowContextMenu(OpPoint(x+widget->GetRect().x,y+widget->GetRect().y),FALSE,FALSE);
		return;
	}

	OpTreeModelItem* item;

	item = m_rooms_view->GetItemByPosition(pos);

	if (item == NULL)
	{
		return;
	}

	BOOL click_state_ok = (IsSingleClick() && !down && nclicks == 1) || nclicks == 2;

	if (click_state_ok && button == MOUSE_BUTTON_1)
	{
		if (item->GetType() == OpTreeModelItem::CHATROOM_TYPE)
		{
			ChatRoom* chat_room = g_m2_engine->GetChatRoom(item->GetID());

			if (chat_room)
			{
				OpString room;
				chat_room->GetName(room);

				ChatInfo chat_info(room, OpStringC());

				g_application->GoToChat(chat_room->GetAccountID(),
					chat_info, TRUE);
			}
		}
		else if (item->GetType() == OpTreeModelItem::CHATTER_TYPE)
		{
			ChatRoom* chatter = g_m2_engine->GetChatter(item->GetID());
			if (chatter)
			{
				OpString chatter_name;
				chatter->GetName(chatter_name);

				ChatInfo chat_info(chatter_name, OpStringC());

				g_application->GoToChat(chatter->GetAccountID(),
					chat_info, FALSE);
			}
		}
	}
}
Ejemplo n.º 2
0
BOOL ChatPanel::OnInputAction(OpInputAction* action)
{
	INT32 account_id = 0;
	INT32 id = 0;
	OpString name;
	Type type = UNKNOWN_TYPE;
	BOOL is_room = FALSE;
	BOOL is_chatter = FALSE;
	BOOL is_account = FALSE;

	OpTreeModelItem* item = m_rooms_view->GetSelectedItem();

	if (item)
	{
		id = item->GetID();
		type = item->GetType();

		switch (type)
		{
			case CHATROOM_TYPE:
		{
				ChatRoom* chat_room = g_m2_engine->GetChatRoom(id);

			if (chat_room)
			{
					chat_room->GetName(name);
					account_id = chat_room->GetAccountID();
					is_room = TRUE;
			}
				break;
			}

			case CHATTER_TYPE:
			{
				ChatRoom* chatter = g_m2_engine->GetChatter(id);

				if (chatter)
				{
					chatter->GetName(name);
					account_id = chatter->GetAccountID();
					is_chatter = TRUE;
				}
				break;
		}

			case CHATROOM_SERVER_TYPE:
			{
				account_id = item->GetID();
				is_account = TRUE;
				break;
			}
		}
	}

	switch (action->GetAction())
	{
		case OpInputAction::ACTION_GET_ACTION_STATE:
		{
			OpInputAction* child_action = action->GetChildAction();

			switch (child_action->GetAction())
			{
				case OpInputAction::ACTION_JOIN_CHAT_ROOM:
				{
					if (action->GetActionDataString())
						return FALSE;

					child_action->SetEnabled(is_room);
					return TRUE;
				}

				case OpInputAction::ACTION_LEAVE_CHAT_ROOM:
				{
					if (action->GetActionDataString())
						return FALSE;

					child_action->SetEnabled(is_room && ChatDesktopWindow::FindChatRoom(account_id, name, TRUE));
					return TRUE;
				}

				case OpInputAction::ACTION_SET_CHAT_STATUS:
				{
					if (child_action->GetActionData())
						return FALSE;

					AccountTypes::ChatStatus action_chat_status = g_application->GetChatStatusFromString(child_action->GetActionDataString());

					BOOL is_connecting = FALSE;
					AccountTypes::ChatStatus chat_status = g_application->GetChatStatus(account_id, is_connecting);

					child_action->SetSelected(chat_status == action_chat_status);

					if (is_connecting)
						child_action->SetEnabled(action_chat_status == AccountTypes::OFFLINE);
					else
						child_action->SetEnabled(g_application->SetChatStatus(account_id, chat_status, TRUE));

					return TRUE;
				}
				case OpInputAction::ACTION_DELETE:
				{
					child_action->SetEnabled(is_room || is_account);
					return TRUE;
				}
				case OpInputAction::ACTION_EDIT_PROPERTIES:
				{
					child_action->SetEnabled(is_account || is_chatter || ChatDesktopWindow::FindChatRoom(account_id, name, TRUE));
					return TRUE;
				}
			}
			break;
		}

		case OpInputAction::ACTION_SET_CHAT_STATUS:
		{
			if (action->GetActionData())
				return FALSE;

			return g_application->SetChatStatus(account_id, g_application->GetChatStatusFromString(action->GetActionDataString()));
		}

		case OpInputAction::ACTION_DELETE:
		{
			if (is_room)
			{
				ChatDesktopWindow* chat_window = ChatDesktopWindow::FindChatRoom(account_id, name, TRUE);

				if (chat_window)
				{
					chat_window->LeaveChat();
					chat_window->Close();
				}

				g_m2_engine->DeleteChatRoom(id);
			}
			else if (is_account)
			{
				g_application->DeleteAccount(account_id, GetParentDesktopWindow());
			}
			return TRUE;
		}
		case OpInputAction::ACTION_LIST_CHAT_ROOMS:
		{
			if (!action->GetActionData())
			{
				// set account and let action continue
				action->SetActionData(account_id);
			}
			break;
		}
		case OpInputAction::ACTION_NEW_CHAT_ROOM:
		case OpInputAction::ACTION_JOIN_CHAT_ROOM:
		{
			if (!action->GetActionData())
			{
				// set account and let action continue
				action->SetActionData(account_id);
			}
			if (!action->GetActionDataString() && is_room)
			{
				action->SetActionDataString(name.CStr());
			}
			break;
		}

		case OpInputAction::ACTION_SHOW_CONTEXT_MENU:
			return ShowContextMenu(GetBounds().Center(),TRUE,TRUE);
			break;

		case OpInputAction::ACTION_LEAVE_CHAT_ROOM:
		{
			if (action->GetActionDataString() || !is_room)
				break;

			return g_application->LeaveChatRoom(account_id, name);
		}

		case OpInputAction::ACTION_EDIT_PROPERTIES:
		{
			if (is_account)
			{
				g_application->EditAccount(account_id, GetParentDesktopWindow());
			}
			else if (is_chatter)
			{
				HotlistModelItem* item = g_hotlist_manager->GetContactsModel()->GetByNickname(name);

				if (item)
				{
					g_hotlist_manager->EditItem(item->GetID(), GetParentDesktopWindow());
				}
			}
			else
			{
				ChatDesktopWindow* chat_window = ChatDesktopWindow::FindChatRoom(account_id, name, TRUE);
				if(chat_window)
				    chat_window->EditRoomProperties();
			}

			return TRUE;
		}
	}
	return FALSE;
}