You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdegames/libksirtet/lib/keys.cpp

105 lines
3.0 KiB

#include "keys.h"
#include "keys.moc"
#include <tqsignal.h>
#include <kkeydialog.h>
#include <klocale.h>
KeyData::KeyData(uint maxNb, uint nbActions, const ActionData *data,
TQObject *parent)
: TQObject(parent), _maxNb(maxNb)
{
_data.duplicate(data, nbActions);
for (uint n=0; n<maxNb; n++)
for (uint i=0; i<=n; i++)
_keycodes[n][i].fill(0, nbActions);
}
void KeyData::setKeycodes(uint nb, uint index, const int *keycodes)
{
Q_ASSERT( nb!=0 && nb-1<_maxNb && index<nb );
for (uint n=nb-1; n<_maxNb; n++)
for (uint k=0; k<_data.size(); k++)
if ( n==nb-1 || _keycodes[n][index][k]==0 )
_keycodes[n][index][k] = keycodes[k];
}
void KeyData::setCurrentNb(uint nb)
{
Q_ASSERT( nb<_maxNb );
clear();
_cols.fill(0, nb);
}
void KeyData::clear()
{
for (uint i=0; i<_cols.size(); i++)
delete _cols[i];
_cols.resize(0);
}
void KeyData::createActionCollection(uint index, TQWidget *receiver)
{
Q_ASSERT( index<_cols.size() );
_cols[index] = new KActionCollection(receiver, this);
for (uint k=0; k<_data.size(); k++) {
TQString label = i18n(_data[k].label);
TQString name = TQString("%2 %3").tqarg(index+1).tqarg(_data[k].name);
const char *slot = (_data[k].slotRelease ? 0 : _data[k].slot);
KAction *a = new KAction(label, _keycodes[_cols.size()-1][index][k],
TQT_TQOBJECT(receiver), slot, _cols[index], name.utf8());
a->setEnabled(false);
if ( slot==0 ) {
SpecialData data;
data.enabled = false;
data.pressed = new TQSignal(this);
data.pressed->connect(receiver, _data[k].slot);
data.released = new TQSignal(this);
data.released->connect(receiver, _data[k].slotRelease);
_specActions[a] = data;
}
}
_cols[index]->readShortcutSettings(group());
}
void KeyData::setEnabled(uint index, bool enabled)
{
for (uint k=0; k<_cols[index]->count(); k++) {
TQMap<KAction *, SpecialData>::Iterator it =
_specActions.find(_cols[index]->action(k));
if ( it==_specActions.end() )
_cols[index]->action(k)->setEnabled(enabled);
else (*it).enabled = enabled;
}
}
void KeyData::addKeys(KKeyDialog &d)
{
for (uint i=0; i<_cols.size(); i++)
d.insert(_cols[i], i18n("Shortcuts for player #%1/%2").tqarg(i+1)
.tqarg(_cols.size()));
}
void KeyData::save()
{
for (uint i=0; i<_cols.size(); i++)
_cols[i]->writeShortcutSettings(group());
}
void KeyData::keyEvent(TQKeyEvent *e, bool pressed)
{
if ( e->isAutoRepeat() ) return;
KKey key(e);
TQMap<KAction *, SpecialData>::Iterator it = _specActions.begin();
for(; it!=_specActions.end(); ++it) {
if ( !it.data().enabled ) continue;
if ( !it.key()->shortcut().contains(key) ) continue;
if (pressed) it.data().pressed->activate();
else it.data().released->activate();
}
e->ignore();
}