QTfrontend/ui/widget/keybinder.cpp
author nemo
Sat, 01 Mar 2014 14:52:36 -0500
changeset 10171 00f41ff0bf2d
parent 10108 c68cf030eded
child 11046 47a8c19ecb60
permissions -rw-r--r--
Script might well override a static map, but can't risk it not doing it, and preview completely failing. Better to just not try it for static maps. Some script cfg might help. Could also avoid unnnecessary preview regenerations even if the script was doing nothing at all.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
     1
/*
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
     2
 * Hedgewars, a free turn based strategy game
9998
736015b847e3 update copyright to 2014
sheepluva
parents: 9080
diff changeset
     3
 * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
     4
 *
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
     8
 *
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    12
 * GNU General Public License for more details.
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    13
 *
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
10108
c68cf030eded update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents: 9998
diff changeset
    16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    17
 */
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    18
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    19
#include "keybinder.h"
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    20
#include "HWApplication.h"
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    21
#include "DataManager.h"
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    22
#include <QHBoxLayout>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    23
#include <QScrollArea>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    24
#include <QTableWidget>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    25
#include <QTableWidgetItem>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    26
#include <QStandardItemModel>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    27
#include <QAbstractItemModel>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    28
#include <QListWidget>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    29
#include <QListWidgetItem>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    30
#include <QPushButton>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    31
#include <QHeaderView>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    32
#include <QComboBox>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    33
#include <QLabel>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    34
#include <QFrame>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    35
#include <QDebug>
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    36
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    37
KeyBinder::KeyBinder(QWidget * parent, const QString & helpText, const QString & defaultText, const QString & resetButtonText) : QWidget(parent)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    38
{
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    39
    this->defaultText = defaultText;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    40
    enableSignal = false;
8434
4821897a0f10 big indentation/whitespaces cleanup
sheepluva
parents: 8346
diff changeset
    41
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    42
    // Two-column tab layout
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    43
    QHBoxLayout * pageKeysLayout = new QHBoxLayout(this);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    44
    pageKeysLayout->setSpacing(0);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    45
    pageKeysLayout->setContentsMargins(0, 0, 0, 0);
8434
4821897a0f10 big indentation/whitespaces cleanup
sheepluva
parents: 8346
diff changeset
    46
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    47
    // Table for category list
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    48
    QVBoxLayout * catListContainer = new QVBoxLayout();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    49
    catListContainer->setContentsMargins(10, 10, 10, 10);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    50
    catList = new QListWidget();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    51
    catList->setFixedWidth(180);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    52
    catList->setStyleSheet("QListWidget::item { font-size: 14px; } QListWidget:hover { border-color: #F6CB1C; } QListWidget::item:selected { background: #150A61; color: yellow; }");
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    53
    catList->setFocusPolicy(Qt::NoFocus);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    54
    connect(catList, SIGNAL(currentRowChanged(int)), this, SLOT(changeBindingsPage(int)));
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    55
    catListContainer->addWidget(catList);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    56
    pageKeysLayout->addLayout(catListContainer);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    57
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    58
    // Reset all binds button
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    59
    if (!resetButtonText.isEmpty())
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    60
    {
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    61
        QPushButton * btnResetAll = new QPushButton(resetButtonText);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    62
        catListContainer->addWidget(btnResetAll);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    63
        btnResetAll->setFixedHeight(40);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    64
        catListContainer->setStretch(1, 0);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    65
        catListContainer->setSpacing(10);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    66
        connect(btnResetAll, SIGNAL(clicked()), this, SIGNAL(resetAllBinds()));
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    67
    }
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    68
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    69
    // Container for pages of key bindings
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    70
    QWidget * bindingsPagesContainer = new QWidget();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    71
    QVBoxLayout * rightLayout = new QVBoxLayout(bindingsPagesContainer);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    72
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    73
    // Scroll area for key bindings
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    74
    QScrollArea * scrollArea = new QScrollArea();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    75
    scrollArea->setContentsMargins(0, 0, 0, 0);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    76
    scrollArea->setWidget(bindingsPagesContainer);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    77
    scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    78
    scrollArea->setWidgetResizable(true);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    79
    scrollArea->setFrameShape(QFrame::NoFrame);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    80
    scrollArea->setStyleSheet("background: #130F2A;");
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    81
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    82
    // Add key binding pages to bindings tab
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    83
    pageKeysLayout->addWidget(scrollArea);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    84
    pageKeysLayout->setStretch(1, 1);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    85
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    86
    // Custom help text
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    87
    QLabel * helpLabel = new QLabel();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    88
    helpLabel->setText(helpText);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    89
    helpLabel->setStyleSheet("color: #130F2A; background: #F6CB1C; border: solid 4px #F6CB1C; border-radius: 10px; padding: auto 20px;");
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    90
    helpLabel->setFixedHeight(24);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    91
    rightLayout->addWidget(helpLabel, 0, Qt::AlignCenter);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    92
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    93
    // Category list and bind table row heights
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    94
    const int rowHeight = 20;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    95
    QSize catSize, headerSize;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    96
    catSize.setHeight(36);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    97
    headerSize.setHeight(24);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    98
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    99
    // Category list header
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   100
    QListWidgetItem * catListHeader = new QListWidgetItem(tr("Category"));
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   101
    catListHeader->setSizeHint(headerSize);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   102
    catListHeader->setFlags(Qt::NoItemFlags);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   103
    catListHeader->setForeground(QBrush(QColor("#130F2A")));
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   104
    catListHeader->setBackground(QBrush(QColor("#F6CB1C")));
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   105
    catListHeader->setTextAlignment(Qt::AlignCenter);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   106
    catList->addItem(catListHeader);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   107
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   108
    // Populate
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   109
    bindingsPages = new QHBoxLayout();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   110
    bindingsPages->setContentsMargins(0, 0, 0, 0);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   111
    rightLayout->addLayout(bindingsPages);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   112
    QWidget * curPage = NULL;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   113
    QVBoxLayout * curLayout = NULL;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   114
    QTableWidget * curTable = NULL;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   115
    bool bFirstPage = true;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   116
    selectedBindTable = NULL;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   117
    bindComboBoxCellMappings = new QHash<QObject *, QTableWidgetItem *>();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   118
    bindCellComboBoxMappings = new QHash<QTableWidgetItem *, QComboBox *>();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   119
    for (int i = 0; i < BINDS_NUMBER; i++)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   120
    {
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   121
        if (cbinds[i].category != NULL)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   122
        {
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   123
            // Add stretch at end of previous layout
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   124
            if (curLayout != NULL) curLayout->insertStretch(-1, 1);
8434
4821897a0f10 big indentation/whitespaces cleanup
sheepluva
parents: 8346
diff changeset
   125
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   126
            // Category list item
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   127
            QListWidgetItem * catItem = new QListWidgetItem(HWApplication::translate("binds (categories)", cbinds[i].category));
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   128
            catItem->setSizeHint(catSize);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   129
            catList->addItem(catItem);
8434
4821897a0f10 big indentation/whitespaces cleanup
sheepluva
parents: 8346
diff changeset
   130
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   131
            // Create new page
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   132
            curPage = new QWidget();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   133
            curLayout = new QVBoxLayout(curPage);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   134
            curLayout->setSpacing(2);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   135
            bindingsPages->addWidget(curPage);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   136
            if (!bFirstPage) curPage->setVisible(false);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   137
        }
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   138
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   139
        // Description
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   140
        if (cbinds[i].description != NULL)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   141
        {
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   142
            QLabel * desc = new QLabel(HWApplication::translate("binds (descriptions)", cbinds[i].description));
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   143
            curLayout->addWidget(desc, 0);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   144
            QFrame * divider = new QFrame();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   145
            divider->setFrameShape(QFrame::HLine);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   146
            divider->setFrameShadow(QFrame::Plain);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   147
            curLayout->addWidget(divider, 0);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   148
        }
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   149
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   150
        // New table
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   151
        if (cbinds[i].category != NULL || cbinds[i].description != NULL)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   152
        {
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   153
            curTable = new QTableWidget(0, 2);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   154
            curTable->verticalHeader()->setVisible(false);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   155
            curTable->horizontalHeader()->setVisible(false);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   156
            curTable->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   157
            curTable->verticalHeader()->setDefaultSectionSize(rowHeight);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   158
            curTable->setShowGrid(false);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   159
            curTable->setStyleSheet("QTableWidget { border: none; } ");
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   160
            curTable->setSelectionBehavior(QAbstractItemView::SelectRows);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   161
            curTable->setSelectionMode(QAbstractItemView::SingleSelection);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   162
            curTable->setFocusPolicy(Qt::NoFocus);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   163
            connect(curTable, SIGNAL(itemSelectionChanged()), this, SLOT(bindSelectionChanged()));
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   164
            connect(curTable, SIGNAL(itemClicked(QTableWidgetItem *)), this, SLOT(bindCellClicked(QTableWidgetItem *)));
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   165
            curLayout->addWidget(curTable, 0);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   166
        }
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   167
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   168
        // Hidden combo box
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   169
        QComboBox * comboBox = CBBind[i] = new QComboBox(curTable);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   170
        comboBox->setModel((QAbstractItemModel*)DataManager::instance().bindsModel());
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   171
        comboBox->setVisible(false);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   172
        comboBox->setFixedWidth(200);
8434
4821897a0f10 big indentation/whitespaces cleanup
sheepluva
parents: 8346
diff changeset
   173
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   174
        // Table row
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   175
        int row = curTable->rowCount();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   176
        QTableWidgetItem * nameCell = new QTableWidgetItem(HWApplication::translate("binds", cbinds[i].name));
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   177
        nameCell->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   178
        curTable->insertRow(row);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   179
        curTable->setItem(row, 0, nameCell);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   180
        QTableWidgetItem * bindCell = new QTableWidgetItem(comboBox->currentText());
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   181
        bindCell->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   182
        curTable->setItem(row, 1, bindCell);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   183
        curTable->resizeColumnsToContents();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   184
        curTable->setFixedHeight(curTable->verticalHeader()->length() + 10);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   185
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   186
        // Updates the text in the table cell
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   187
        connect(comboBox, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(bindChanged(const QString &)));
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   188
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   189
        // Map combo box and that row's cells to each other
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   190
        bindComboBoxCellMappings->insert(comboBox, bindCell);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   191
        bindCellComboBoxMappings->insert(nameCell, comboBox);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   192
        bindCellComboBoxMappings->insert(bindCell, comboBox);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   193
    }
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   194
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   195
    // Add stretch at end of last layout
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   196
    if (curLayout != NULL) curLayout->insertStretch(-1, 1);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   197
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   198
    // Go to first page
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   199
    catList->setCurrentItem(catList->item(1));
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   200
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   201
    enableSignal = true;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   202
}
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   203
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   204
KeyBinder::~KeyBinder()
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   205
{
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   206
    delete bindComboBoxCellMappings;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   207
    delete bindCellComboBoxMappings;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   208
}
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   209
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   210
// Switches between different pages of key binds
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   211
void KeyBinder::changeBindingsPage(int page)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   212
{
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   213
    page--; // Disregard first item (the list header)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   214
    int pages = bindingsPages->count();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   215
    for (int i = 0; i < pages; i++)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   216
        bindingsPages->itemAt(i)->widget()->setVisible(false);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   217
    bindingsPages->itemAt(page)->widget()->setVisible(true);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   218
}
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   219
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   220
// When a key bind combobox value is changed, updates the table cell text
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   221
void KeyBinder::bindChanged(const QString & text)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   222
{
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   223
    bindComboBoxCellMappings->value(sender())->setText(text);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   224
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   225
    if (enableSignal)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   226
    {
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   227
        for (int i = 0; i < BINDS_NUMBER; i++)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   228
        {
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   229
            if (CBBind[i] == sender())
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   230
            {
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   231
                emit bindUpdate(i);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   232
                break;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   233
            }
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   234
        }
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   235
    }
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   236
}
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   237
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   238
// When a row in a key bind table is clicked, this shows the popup
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   239
void KeyBinder::bindCellClicked(QTableWidgetItem * item)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   240
{
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   241
    QComboBox * box = bindCellComboBoxMappings->value(item);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   242
    QTableWidget * table = item->tableWidget();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   243
    QFrame * frame = box->findChild<QFrame*>();
8434
4821897a0f10 big indentation/whitespaces cleanup
sheepluva
parents: 8346
diff changeset
   244
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   245
    box->showPopup();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   246
    frame->move(
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   247
        frame->x() + table->horizontalHeader()->sectionSize(0),
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   248
        frame->y() + (table->verticalHeader()->defaultSectionSize() * item->row())
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   249
    );
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   250
}
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   251
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   252
// When a new row in a bind table is *selected*, this clears selection in any other table
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   253
void KeyBinder::bindSelectionChanged()
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   254
{
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   255
    QTableWidget * theSender = (QTableWidget*)sender();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   256
    if (theSender != selectedBindTable)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   257
    {
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   258
        if (selectedBindTable != NULL)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   259
            selectedBindTable->clearSelection();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   260
        selectedBindTable = theSender;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   261
    }
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   262
}
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   263
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   264
// Set a combobox's index
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   265
void KeyBinder::setBindIndex(int keyIndex, int bindIndex)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   266
{
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   267
    enableSignal = false;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   268
    CBBind[keyIndex]->setCurrentIndex(bindIndex);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   269
    enableSignal = true;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   270
}
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   271
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   272
// Return a combobox's selected index
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   273
int KeyBinder::bindIndex(int keyIndex)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   274
{
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   275
    return CBBind[keyIndex]->currentIndex();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   276
}
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   277
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   278
// Clears selection and goes to first category
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   279
void KeyBinder::resetInterface()
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   280
{
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   281
    enableSignal = false;
8434
4821897a0f10 big indentation/whitespaces cleanup
sheepluva
parents: 8346
diff changeset
   282
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   283
    catList->setCurrentItem(catList->item(1));
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   284
    changeBindingsPage(1);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   285
    if (selectedBindTable != NULL)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   286
    {
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   287
        selectedBindTable->clearSelection();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   288
        selectedBindTable = NULL;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   289
    }
8434
4821897a0f10 big indentation/whitespaces cleanup
sheepluva
parents: 8346
diff changeset
   290
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   291
    // Default bind text
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   292
    DataManager::instance().bindsModel()->item(0)->setData(defaultText, Qt::DisplayRole);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   293
    for (int i = 0; i < BINDS_NUMBER; i++)
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   294
    {
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   295
        CBBind[i]->setModel(DataManager::instance().bindsModel());
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   296
        CBBind[i]->setCurrentIndex(0);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   297
        bindComboBoxCellMappings->value(CBBind[i])->setText(defaultText);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   298
    }
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   299
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   300
    enableSignal = true;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   301
}