Added actual layout switch

This commit is contained in:
Robbi Blechdose
2023-03-10 20:09:50 +01:00
parent 84249daf5b
commit 57ce214e14
6 changed files with 28 additions and 13 deletions

View File

@ -19,7 +19,7 @@ bool Button::read( QTextStream &stream ) {
// at this point, toDefault() has just been called.
//read in a line of text and break it into words
QString input = stream.readLine().toLower();
QString input = stream.readLine();
QRegExp regex("[\\s,]+");
QStringList words = input.split(regex);
@ -30,7 +30,7 @@ bool Button::read( QTextStream &stream ) {
//go through every word on the line describing this button.
for ( QStringList::Iterator it = words.begin(); it != words.end(); ++it ) {
if (*it == "mouse") {
if ((*it).toLower() == "mouse") {
++it;
if (it == words.end()) return false;
val = (*it).toInt(&ok);
@ -40,7 +40,7 @@ bool Button::read( QTextStream &stream ) {
}
else return false;
}
else if (*it == "key") {
else if ((*it).toLower() == "key") {
++it;
if (it == words.end()) return false;
val = (*it).toInt(&ok);
@ -51,15 +51,15 @@ bool Button::read( QTextStream &stream ) {
else return false;
}
else if (*it == "layout") {
//TODO: handle spaces in filenames
++it;
if (it == words.end()) return false;
layout = *it;
layout = (*it).replace("\\s", " ");
hasLayout = true;
}
else if (*it == "rapidfire") {
else if ((*it).toLower() == "rapidfire") {
rapidfire = true;
}
else if (*it == "sticky") {
else if ((*it).toLower() == "sticky") {
sticky = true;
}
}
@ -71,7 +71,8 @@ void Button::write( QTextStream &stream ) {
if (rapidfire) stream << "rapidfire, ";
if (sticky) stream << "sticky, ";
stream << (useMouse ? "mouse " : "key ") << keycode;
if (hasLayout) stream << "layout \"" << layout + "\"\n";
if (hasLayout) stream << " layout " << layout.replace(" ", "\\s");
stream << "\n";
}
void Button::release() {
@ -86,7 +87,10 @@ void Button::jsevent( int value ) {
if (value == 1 && !isButtonPressed) {
isButtonPressed = 1;
//Change layout
//TODO
emit loadLayout(layout);
}
else if (value == 0) {
isButtonPressed = 0;
}
return;
}

View File

@ -58,6 +58,8 @@ class Button : public QObject {
QString layout;
public slots:
void timerCalled();
signals:
void loadLayout(QString name);
};
#endif

View File

@ -30,13 +30,12 @@ ButtonEdit::ButtonEdit(Button* butt, const QStringList *layoutNames)
cmbLayout = new QComboBox(this);
cmbLayout->addItem(tr("[UNSET]"), QVariant(QString()));
cmbLayout->addItem(tr("[NO LAYOUT]"), QVariant(QString()));
foreach (const QString& layout, *layoutNames) {
cmbLayout->addItem(layout, layout);
}
//Keep selected layout (if any)
if (button->hasLayout) {
cmbLayout->setCurrentIndex(layoutNames->indexOf(button->layout) + 2);
cmbLayout->setCurrentIndex(layoutNames->indexOf(button->layout) + 1);
}
else {
cmbLayout->setCurrentIndex(0);

View File

@ -58,13 +58,14 @@ class JoyPad : public QObject {
JoyPadWidget* widget(QWidget* parent, int i);
//called when the joypad is no longer being edited.
void releaseWidget();
protected:
//lookup axes and buttons. These are dictionaries to support
//layouts with different numbers of axes/buttons than the current
//devices. Note that with the current layout settings, the defined
//buttons that don't actually exist on the device may not be contiguous.
QList<Axis*> axes;
QList<Button*> buttons;
protected:
QList<Axis*> axes;
//the index of this device (devicenum)
int index;

View File

@ -161,6 +161,10 @@ QString LayoutManager::getFileName(const QString& layoutname ) {
return QString("%1%2.lyt").arg(settingsDir, layoutname);
}
void LayoutManager::loadLayoutFromButton(QString name) {
load(name);
}
bool LayoutManager::load(const QString& name) {
//it's VERY easy to load NL :)
if (name.isNull()) {
@ -707,6 +711,9 @@ void LayoutManager::addJoyPad(int index, const QString& devpath) {
//if we've never seen this device before, make a new one!
if (joypad == 0) {
joypad = new JoyPad( index, joydev, this );
foreach (Button *button, joypad->buttons) {
connect(button, &Button::loadLayout, this, &LayoutManager::loadLayoutFromButton);
}
joypads.insert(index,joypad);
}
else {

View File

@ -43,6 +43,8 @@ class LayoutManager : public QObject {
//produces a list of the names of all the available layout.
QStringList getLayoutNames() const;
public slots:
//This is necessary to prevent issues with the overloaded load() function
void loadLayoutFromButton(QString name);
//load a layout with a given name
bool load(const QString& name);
//look for the last loaded layout and try to load that.