Example #1
0
	void Cube::init() {

		std::vector<Vertex> vertexList(8);
		vertexList[0] = Vertex(-1.0, 1.0, 1.0, 1.0);
		vertexList[1] = Vertex(-1.0, -1.0, 1.0, 1.0);
		vertexList[2] = Vertex(1.0, -1.0, 1.0, 1.0);
		vertexList[3] = Vertex(1.0, 1.0, 1.0, 1.0);
		vertexList[4] = Vertex(-1.0, 1.0, -1.0, 1.0);
		vertexList[5] = Vertex(-1.0, -1.0, -1.0, 1.0);
		vertexList[6] = Vertex(1.0, -1.0, -1.0, 1.0);
		vertexList[7] = Vertex(1.0, 1.0, -1.0, 1.0);
		
		setVertexList(vertexList);

		std::vector<GLuint> indexList(24);
		indexList[0] = 0;   indexList[1] = 1;   indexList[2] = 2; 	indexList[3] = 3;
		indexList[4] = 3;   indexList[5] = 2;   indexList[6] = 6; 	indexList[7] = 7;   
		indexList[8] = 7;  indexList[9] = 6;  indexList[10] = 5; 	indexList[11] = 4;  
		indexList[12] = 4;  indexList[13] = 5;  indexList[14] = 1; 	indexList[15] = 0;  
		indexList[16] = 0;  indexList[17] = 3;  indexList[18] = 7; 	indexList[19] = 4; 
		indexList[20] = 1;  indexList[21] = 2;  indexList[22] = 6; 	indexList[23] = 5;  

		setIndexList(indexList);
	}
void ToolBarActionProvider::handleGeneralAction(ActionType type, QAction *action)
{
    setIndexList(_currentBuffer);
    NetworkModelController::handleGeneralAction(type, action);
}
// add a list of actions sensible for the current item(s)
void ContextMenuActionProvider::addActions(QMenu *menu,
    const QList<QModelIndex> &indexList_,
    MessageFilter *filter_,
    const QString &contextItem_,
    QObject *receiver_,
    const char *method_,
    bool isCustomBufferView)
{
    if (!indexList_.count())
        return;

    setIndexList(indexList_);
    setMessageFilter(filter_);
    setContextItem(contextItem_);
    setSlot(receiver_, method_);

    if (!messageFilter()) {
        // this means we are in a BufferView (or NickView) rather than a ChatView

        // first index in list determines the menu type (just in case we have both buffers and networks selected, for example)
        QModelIndex index = indexList().at(0);
        NetworkModel::ItemType itemType = static_cast<NetworkModel::ItemType>(index.data(NetworkModel::ItemTypeRole).toInt());

        switch (itemType) {
        case NetworkModel::NetworkItemType:
            addNetworkItemActions(menu, index);
            break;
        case NetworkModel::BufferItemType:
            addBufferItemActions(menu, index, isCustomBufferView);
            break;
        case NetworkModel::IrcUserItemType:
            addIrcUserActions(menu, index);
            break;
        default:
            return;
        }
    }
    else {
        // ChatView actions
        if (contextItem().isEmpty()) {
            // a) query buffer: handle like ircuser
            // b) general chatview: handle like channel iff it displays a single buffer
            // NOTE stuff breaks probably with merged buffers, need to rework a lot around here then
            if (messageFilter()->containedBuffers().count() == 1) {
                // we can handle this like a single bufferItem
                QModelIndex index = Client::networkModel()->bufferIndex(messageFilter()->containedBuffers().values().at(0));
                setIndexList(index);
                addBufferItemActions(menu, index);
                return;
            }
            else {
                // TODO: actions for merged buffers... _indexList contains the index of the message we clicked on
            }
        }
        else {
            // context item = chan or nick, _indexList = buf where the msg clicked on originated
            if (isChannelName(contextItem())) {
                QModelIndex msgIdx = indexList().at(0);
                if (!msgIdx.isValid())
                    return;
                NetworkId networkId = msgIdx.data(NetworkModel::NetworkIdRole).value<NetworkId>();
                BufferId bufId = Client::networkModel()->bufferId(networkId, contextItem());
                if (bufId.isValid()) {
                    QModelIndex targetIdx = Client::networkModel()->bufferIndex(bufId);
                    setIndexList(targetIdx);
                    addAction(BufferJoin, menu, targetIdx, InactiveState);
                    addAction(BufferSwitchTo, menu, targetIdx, ActiveState);
                }
                else
                    addAction(JoinChannel, menu);
            }
            else {
                // TODO: actions for a nick
            }
        }
    }
}
void ToolBarActionProvider::handleNickAction(ActionType type, QAction *action)
{
    setIndexList(_selectedNicks);
    NetworkModelController::handleNickAction(type, action);
}