QTfrontend/ui/widget/keybinder.cpp
author dag10 <gottlieb.drew@gmail.com>
Sat, 19 Jan 2013 17:33:10 -0500
changeset 8405 becac012d502
parent 8346 3443e0de2c9d
child 8434 4821897a0f10
permissions -rw-r--r--
Moved FileEngineHandler instance in main() to be a pointer released "atexit". (Fixes issue #509)
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
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
     3
 * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
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
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
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;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    41
    
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);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
    46
    
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);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   125
            
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);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   130
            
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);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   173
        
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*>();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   244
    
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;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   282
    
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
    }
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents:
diff changeset
   290
    
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
}