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;
}
}
}
}
|