File: calcdateeditor.cpp

package info (click to toggle)
portabase 2.0%2Bgit20110117-1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 6,692 kB
  • sloc: cpp: 32,047; sh: 2,675; ansic: 2,320; makefile: 343; xml: 20; python: 16; asm: 10
file content (142 lines) | stat: -rw-r--r-- 3,887 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
 * calcdateeditor.cpp
 *
 * (c) 2003-2004,2008 by Jeremy Bowman <jmbowman@alum.mit.edu>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 */

/** @file calcdateeditor.cpp
 * Source file for CalcDateEditor
 */

#include <QButtonGroup>
#include <QComboBox>
#include <QDateTime>
#include <QLayout>
#include <QRadioButton>
#include "calcdateeditor.h"
#include "calcnode.h"
#include "../datatypes.h"
#include "../datewidget.h"
#include "../factory.h"

/**
 * Constructor.
 *
 * @param colNames The names of all columns in the database
 * @param colTypes The type IDs of all columns in the database
 * @param parent This dialog's parent widget
 */
CalcDateEditor::CalcDateEditor(const QStringList &colNames, int *colTypes, QWidget *parent)
  : PBDialog(tr("Calculation Node Editor"), parent)
{
    group = new QButtonGroup(this);
    QGridLayout *grid = Factory::gridLayout(vbox);
    QRadioButton *colButton = new QRadioButton(tr("Column"), this);
    grid->addWidget(colButton, 0, 0);
    group->addButton(colButton, 0);
    columnList = new QComboBox(this);
    columnList->setEditable(false);
    int count = colNames.count();
    int i;
    for (i = 0; i < count; i++) {
        int type = colTypes[i];
        if (type == DATE) {
            columnList->addItem(colNames[i]);
        }
    }
    grid->addWidget(columnList, 0, 1);

    QRadioButton *constantButton = new QRadioButton(tr("Constant"), this);
    grid->addWidget(constantButton, 1, 0);
    group->addButton(constantButton, 1);
    dateWidget = new DateWidget(this);
    grid->addWidget(dateWidget, 1, 1);

    if (columnList->count() > 0) {
        group->button(0)->setChecked(true);
    }
    else {
        // no date columns, so can't select one
        group->button(1)->setChecked(true);
        colButton->setEnabled(false);
    }

    finishLayout();
}

/**
 * Reset the dialog widgets to their default values.  Used when relaunching
 * it for a different node.
 */
void CalcDateEditor::reset()
{
    group->button(0)->setChecked(true);
    if (columnList->count() > 0) {
        columnList->setCurrentIndex(0);
    }
    QDate today = QDate::currentDate();
    dateWidget->setDate(today);
}

/**
 * Create a calculation node based on this dialog's current settings.
 *
 * @return The newly-created calculation node
 */
CalcNode *CalcDateEditor::createNode()
{
    CalcNode *node = new CalcNode(CalcNode::DateConstant, "");
    updateNode(node);
    return node;
}

/**
 * Update the specified node with the values currently specified in this
 * dialog.
 *
 * @param node The node to be updated
 */
void CalcDateEditor::updateNode(CalcNode *node)
{
    int selection = group->checkedId();
    if (selection == 0) {
        node->setType(CalcNode::DateColumn);
        node->setValue(columnList->currentText());
    }
    else {
        node->setType(CalcNode::DateConstant);
        node->setValue(QString::number(dateWidget->getDate()));
    }
}

/**
 * Populate this dialog's widgets with the values corresponding to the
 * provided calculation node.
 *
 * @param node The node whose settings are to be displayed
 */
void CalcDateEditor::setNode(CalcNode *node)
{
    reset();
    int type = node->type();
    QString value = node->value();
    if (type == CalcNode::DateConstant) {
        group->button(1)->setChecked(true);
        dateWidget->setDate(value.toInt());
    }
    else if (type == CalcNode::DateColumn) {
        group->button(0)->setChecked(true);
        int count = columnList->count();
        for (int i = 0; i < count; i++) {
            if (columnList->itemText(i) == value) {
                columnList->setCurrentIndex(i);
                break;
            }
        }
    }
}