mirror of
https://github.com/fralx/LimeReport.git
synced 2024-12-24 16:44:39 +03:00
Merge branch '1.4_ChartItem' into develop
This commit is contained in:
commit
e5e873eb40
BIN
limereport/items/images/pie_chart2.png
Normal file
BIN
limereport/items/images/pie_chart2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
@ -41,5 +41,6 @@
|
||||
<file alias="ImageItem">images/imageItem4.png</file>
|
||||
<file alias="ShapeItem">images/shapes7.png</file>
|
||||
<file alias="BarcodeItem">images/barcode5.png</file>
|
||||
<file alias="ChartItem">images/pie_chart2.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
1046
limereport/items/lrchartitem.cpp
Normal file
1046
limereport/items/lrchartitem.cpp
Normal file
File diff suppressed because it is too large
Load Diff
208
limereport/items/lrchartitem.h
Normal file
208
limereport/items/lrchartitem.h
Normal file
@ -0,0 +1,208 @@
|
||||
#ifndef LRCHARTITEM_H
|
||||
#define LRCHARTITEM_H
|
||||
#include "lritemdesignintf.h"
|
||||
|
||||
namespace LimeReport{
|
||||
|
||||
QColor generateColor();
|
||||
extern QColor color_map[39];
|
||||
|
||||
class IDataSource;
|
||||
|
||||
class SeriesItemData : public QObject{
|
||||
Q_OBJECT
|
||||
public:
|
||||
QList<qreal>& values(){ return m_values;}
|
||||
QList<QString>& labels(){ return m_labels;}
|
||||
QList<QColor>& colors() { return m_colors;}
|
||||
private:
|
||||
QList<qreal> m_values;
|
||||
QList<QString> m_labels;
|
||||
QList<QColor> m_colors;
|
||||
};
|
||||
|
||||
class SeriesItem : public QObject{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QString name READ name WRITE setName)
|
||||
Q_PROPERTY(QString valuesColumn READ valuesColumn WRITE setValuesColumn )
|
||||
Q_PROPERTY(QString labelsColumn READ labelsColumn WRITE setLabelsColumn )
|
||||
Q_PROPERTY(QColor color READ color WRITE setColor)
|
||||
public:
|
||||
SeriesItem(QObject* parent = 0):QObject(parent){}
|
||||
QString name() const;
|
||||
void setName(const QString &name);
|
||||
QString valuesColumn() const;
|
||||
void setValuesColumn(const QString &valuesColumn);
|
||||
QString labelsColumn() const;
|
||||
void setLabelsColumn(const QString &labelsColumn);
|
||||
SeriesItem* clone();
|
||||
void fillSeriesData(IDataSource* dataSource);
|
||||
SeriesItemData* data(){ return &m_data;}
|
||||
QColor color() const;
|
||||
void setColor(const QColor &color);
|
||||
private:
|
||||
QString m_name;
|
||||
QString m_valuesColumn;
|
||||
QString m_labelsColumn;
|
||||
SeriesItemData m_data;
|
||||
QColor m_color;
|
||||
};
|
||||
|
||||
class ChartItem;
|
||||
|
||||
class AbstractChart {
|
||||
public:
|
||||
AbstractChart(ChartItem* chartItem);
|
||||
virtual ~AbstractChart(){}
|
||||
virtual void paintChart(QPainter *painter, QRectF rect) = 0;
|
||||
virtual void paintChartLegend(QPainter *painter, QRectF legendRect) =0;
|
||||
virtual QSizeF calcChartLegendSize(const QFont &font) = 0;
|
||||
virtual QRectF calcChartLegendRect(const QFont& font, const QRectF& parentRect, bool takeAllRect, qreal borderMargin, qreal titleOffset);
|
||||
protected:
|
||||
virtual void prepareLegendToPaint(QRectF& legendRect, QPainter *painter);
|
||||
protected:
|
||||
ChartItem* m_chartItem;
|
||||
QList<QString> m_designLabels;
|
||||
};
|
||||
|
||||
class AbstractSeriesChart: public AbstractChart{
|
||||
public:
|
||||
AbstractSeriesChart(ChartItem* chartItem);
|
||||
protected:
|
||||
qreal maxValue();
|
||||
qreal minValue();
|
||||
int valuesCount();
|
||||
int seriesCount();
|
||||
QSizeF calcChartLegendSize(const QFont &font);
|
||||
qreal* designValues(){ return m_designValues;}
|
||||
private:
|
||||
qreal m_designValues [9];
|
||||
};
|
||||
|
||||
class PieChart : public AbstractChart{
|
||||
public:
|
||||
PieChart(ChartItem* chartItem):AbstractChart(chartItem){}
|
||||
QSizeF calcChartLegendSize(const QFont &font);
|
||||
void paintChart(QPainter *painter, QRectF chartRect);
|
||||
void paintChartLegend(QPainter *painter, QRectF legendRect);
|
||||
protected:
|
||||
void drawPercent(QPainter *painter, QRectF chartRect, qreal startAngle, qreal angle);
|
||||
};
|
||||
|
||||
class AbstractBarChart: public AbstractSeriesChart{
|
||||
public:
|
||||
AbstractBarChart(ChartItem* chartItem):AbstractSeriesChart(chartItem){}
|
||||
qreal hPadding(QRectF chartRect);
|
||||
qreal vPadding(QRectF chartRect);
|
||||
void paintChartLegend(QPainter *painter, QRectF legendRect);
|
||||
};
|
||||
|
||||
class HorizontalBarChart: public AbstractBarChart{
|
||||
public:
|
||||
HorizontalBarChart(ChartItem* chartItem):AbstractBarChart(chartItem){}
|
||||
qreal valuesHMargin(QPainter *painter);
|
||||
qreal valuesVMargin(QPainter *painter);
|
||||
void paintChart(QPainter *painter, QRectF chartRect);
|
||||
void paintHorizontalGrid(QPainter *painter, QRectF gridRect);
|
||||
void paintHorizontalBars(QPainter *painter, QRectF barsRect);
|
||||
QRectF labelsRect(QPainter* painter, QRectF labelsRect);
|
||||
void paintLabels(QPainter *painter, QRectF labelsRect);
|
||||
protected:
|
||||
QFont adaptLabelsFont(QRectF rect, QFont font);
|
||||
QFont adaptValuesFont(qreal width, QFont font);
|
||||
};
|
||||
|
||||
class VerticalBarChart: public AbstractBarChart{
|
||||
public:
|
||||
VerticalBarChart(ChartItem* chartItem):AbstractBarChart(chartItem){}
|
||||
qreal valuesHMargin(QPainter *painter);
|
||||
qreal valuesVMargin(QPainter *painter);
|
||||
QRectF labelsRect(QPainter* painter, QRectF labelsRect);
|
||||
void paintChart(QPainter *painter, QRectF chartRect);
|
||||
void paintVerticalGrid(QPainter *painter, QRectF gridRect);
|
||||
void paintVerticalBars(QPainter *painter, QRectF barsRect);
|
||||
void paintLabels(QPainter *painter, QRectF labelsRect);
|
||||
};
|
||||
|
||||
class ChartItem : public LimeReport::ItemDesignIntf
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_ENUMS(LegendAlign)
|
||||
Q_ENUMS(TitleAlign)
|
||||
Q_ENUMS(ChartType)
|
||||
Q_PROPERTY(ACollectionProperty series READ fakeCollectionReader)
|
||||
Q_PROPERTY(QString datasource READ datasource WRITE setDatasource)
|
||||
Q_PROPERTY(QString chartTitle READ chartTitle WRITE setChartTitle)
|
||||
Q_PROPERTY(bool drawLegendBorder READ drawLegendBorder WRITE setDrawLegendBorder)
|
||||
Q_PROPERTY(LegendAlign legendAlign READ legendAlign WRITE setLegendAlign)
|
||||
Q_PROPERTY(TitleAlign titleAlign READ titleAlign WRITE setTitleAlign)
|
||||
Q_PROPERTY(ChartType chartType READ chartType WRITE setChartType)
|
||||
Q_PROPERTY(QString labelsField READ labelsField WRITE setLabelsField)
|
||||
friend class AbstractChart;
|
||||
public:
|
||||
|
||||
enum LegendAlign{LegendAlignTop,LegendAlignCenter,LegendAlignBottom};
|
||||
enum TitleAlign{TitleAlignLeft, TitleAlignCenter, TitleAlignRight};
|
||||
enum ChartType{Pie, VerticalBar, HorizontalBar};
|
||||
|
||||
ChartItem(QObject* owner, QGraphicsItem* parent);
|
||||
~ChartItem();
|
||||
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
||||
|
||||
QList<SeriesItem *> &series();
|
||||
void setSeries(const QList<SeriesItem *> &series);
|
||||
bool isSeriesExists(const QString& name);
|
||||
|
||||
QString datasource() const;
|
||||
void setDatasource(const QString &datasource);
|
||||
|
||||
QString chartTitle() const;
|
||||
void setChartTitle(const QString &chartTitle);
|
||||
|
||||
bool drawLegendBorder() const;
|
||||
void setDrawLegendBorder(bool drawLegendBorder);
|
||||
|
||||
LegendAlign legendAlign() const;
|
||||
void setLegendAlign(const LegendAlign &legendAlign);
|
||||
|
||||
TitleAlign titleAlign() const;
|
||||
void setTitleAlign(const TitleAlign &titleAlign);
|
||||
|
||||
ChartType chartType() const;
|
||||
void setChartType(const ChartType &chartType);
|
||||
|
||||
QString labelsField() const;
|
||||
void setLabelsField(const QString &labelsField);
|
||||
|
||||
QList<QString> labels() const;
|
||||
void setLabels(const QList<QString> &labels);
|
||||
|
||||
protected:
|
||||
void paintChartTitle(QPainter* painter, QRectF titleRect);
|
||||
virtual BaseDesignIntf* createSameTypeItem(QObject *owner, QGraphicsItem *parent);
|
||||
//ICollectionContainer
|
||||
QObject* createElement(const QString& collectionName,const QString& elementType);
|
||||
int elementsCount(const QString& collectionName);
|
||||
QObject* elementAt(const QString& collectionName,int index);
|
||||
void collectionLoadFinished(const QString& collectionName){Q_UNUSED(collectionName)}
|
||||
void updateItemSize(DataSourceManager *dataManager, RenderPass, int);
|
||||
void fillLabels(IDataSource* dataSource);
|
||||
QWidget* defaultEditor();
|
||||
|
||||
private:
|
||||
QList<SeriesItem*> m_series;
|
||||
// QList< QPointer<SeriesItem> > m_series;
|
||||
QString m_datasource;
|
||||
QPixmap m_chartImage;
|
||||
QString m_title;
|
||||
AbstractChart* m_chart;
|
||||
bool m_legendBorder;
|
||||
LegendAlign m_legendAlign;
|
||||
TitleAlign m_titleAlign;
|
||||
ChartType m_chartType;
|
||||
QString m_labelsField;
|
||||
QList<QString> m_labels;
|
||||
};
|
||||
|
||||
} //namespace LimeReport
|
||||
#endif // LRCHARTITEM_H
|
249
limereport/items/lrchartitemeditor.cpp
Normal file
249
limereport/items/lrchartitemeditor.cpp
Normal file
@ -0,0 +1,249 @@
|
||||
#include "lrchartitemeditor.h"
|
||||
#include "ui_lrchartitemeditor.h"
|
||||
#include "lrchartitem.h"
|
||||
#include "lrpagedesignintf.h"
|
||||
#include <QColorDialog>
|
||||
|
||||
ChartItemEditor::ChartItemEditor(LimeReport::ChartItem *item, LimeReport::PageDesignIntf *page, QSettings *settings, QWidget *parent):
|
||||
QWidget(parent), ui(new Ui::ChartItemEditor), m_charItem(item), m_page(page),
|
||||
m_settings(settings), m_ownedSettings(false), m_isReadingSetting(false)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
QHBoxLayout* colorLayout = new QHBoxLayout();
|
||||
colorLayout->setMargin(0);
|
||||
m_colorButton = new QToolButton();
|
||||
m_colorButton->setText("...");
|
||||
m_colorButton->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
|
||||
m_colorIndicator = new ColorIndicator();
|
||||
m_colorIndicator->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
|
||||
ui->colorWidget->setLayout(colorLayout);
|
||||
colorLayout->addWidget(m_colorIndicator);
|
||||
colorLayout->addWidget(m_colorButton);
|
||||
colorLayout->insertStretch(0);
|
||||
readSetting();
|
||||
init();
|
||||
|
||||
connect(m_colorButton, SIGNAL(clicked(bool)), this, SLOT(slotChangeSeriesColor()));
|
||||
}
|
||||
|
||||
ChartItemEditor::~ChartItemEditor()
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
writeSetting();
|
||||
#endif
|
||||
#ifdef Q_OS_MAC
|
||||
writeSetting();
|
||||
#endif
|
||||
delete ui;
|
||||
}
|
||||
|
||||
QSettings* ChartItemEditor::settings()
|
||||
{
|
||||
if (m_settings){
|
||||
return m_settings;
|
||||
} else {
|
||||
m_settings = new QSettings("LimeReport",QApplication::applicationName());
|
||||
m_ownedSettings = true;
|
||||
return m_settings;
|
||||
}
|
||||
}
|
||||
|
||||
void ChartItemEditor::readSetting()
|
||||
{
|
||||
if (settings()==0) return;
|
||||
|
||||
m_isReadingSetting = true;
|
||||
|
||||
settings()->beginGroup("ChartItemEditor");
|
||||
QVariant v = settings()->value("Geometry");
|
||||
if (v.isValid()){
|
||||
restoreGeometry(v.toByteArray());
|
||||
}
|
||||
v = settings()->value("State");
|
||||
if (v.isValid()){
|
||||
ui->splitter->restoreState(v.toByteArray());
|
||||
}
|
||||
|
||||
settings()->endGroup();
|
||||
|
||||
m_isReadingSetting = false;
|
||||
}
|
||||
|
||||
void ChartItemEditor::writeSetting()
|
||||
{
|
||||
if (settings()!=0){
|
||||
settings()->beginGroup("ChartItemEditor");
|
||||
settings()->setValue("Geometry",saveGeometry());
|
||||
settings()->setValue("State",ui->splitter->saveState());
|
||||
settings()->endGroup();
|
||||
}
|
||||
}
|
||||
|
||||
void ChartItemEditor::rebuildTable()
|
||||
{
|
||||
ui->tableWidget->clearContents();
|
||||
ui->tableWidget->setRowCount(m_charItem->series().count());
|
||||
for( int i=0;i<m_charItem->series().count();++i){
|
||||
QTableWidgetItem* newRow = new QTableWidgetItem(m_charItem->series().at(i)->name());
|
||||
ui->tableWidget->setItem(i,0,newRow);
|
||||
}
|
||||
}
|
||||
|
||||
void ChartItemEditor::init()
|
||||
{
|
||||
m_initing = true;
|
||||
|
||||
ui->tableWidget->setColumnCount(1);
|
||||
ui->tableWidget->setRowCount(m_charItem->series().count());
|
||||
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
|
||||
ui->tableWidget->setHorizontalHeaderItem(0,new QTableWidgetItem("Series name"));
|
||||
|
||||
rebuildTable();
|
||||
|
||||
if (!m_charItem->datasource().isEmpty()){
|
||||
if (m_page && m_page->datasourceManager()){
|
||||
LimeReport::IDataSource* ds = m_page->datasourceManager()->dataSource(m_charItem->datasource());
|
||||
if (ds){
|
||||
for (int i=0;i<ds->columnCount();++i){
|
||||
ui->valuesFieldComboBox->addItem(ds->columnNameByIndex(i));
|
||||
ui->labelsFieldComboBox->addItem(ds->columnNameByIndex(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
ui->labelsFieldComboBox->setCurrentText(m_charItem->labelsField());
|
||||
if (!m_charItem->series().isEmpty()){
|
||||
enableSeriesEditor();
|
||||
ui->tableWidget->selectRow(0);
|
||||
} else {
|
||||
disableSeriesEditor();
|
||||
}
|
||||
|
||||
m_initing = false;
|
||||
}
|
||||
|
||||
void ChartItemEditor::enableSeriesEditor()
|
||||
{
|
||||
ui->seriesNameLineEdit->setEnabled(true);
|
||||
ui->valuesFieldComboBox->setEnabled(true);
|
||||
m_colorButton->setEnabled(true);
|
||||
m_colorIndicator->setEnabled(true);
|
||||
}
|
||||
|
||||
void ChartItemEditor::disableSeriesEditor()
|
||||
{
|
||||
ui->seriesNameLineEdit->setText("");
|
||||
ui->seriesNameLineEdit->setDisabled(true);
|
||||
ui->valuesFieldComboBox->setDisabled(true);
|
||||
m_colorButton->setDisabled(true);
|
||||
m_colorIndicator->setDisabled(true);
|
||||
ui->valuesFieldComboBox->setCurrentText("");
|
||||
}
|
||||
|
||||
LimeReport::SeriesItem *ChartItemEditor::currentSeries()
|
||||
{
|
||||
int curRow = ui->tableWidget->currentRow();
|
||||
if ((curRow>-1) && !m_charItem->series().isEmpty() && m_charItem->series().count()>curRow){
|
||||
return m_charItem->series().at(curRow);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ChartItemEditor::resizeEvent(QResizeEvent *)
|
||||
{
|
||||
#ifdef Q_OS_UNIX
|
||||
writeSetting();
|
||||
#endif
|
||||
}
|
||||
|
||||
void ChartItemEditor::moveEvent(QMoveEvent *)
|
||||
{
|
||||
#ifdef Q_OS_UNIX
|
||||
writeSetting();
|
||||
#endif
|
||||
}
|
||||
|
||||
void ChartItemEditor::on_splitter_splitterMoved(int , int )
|
||||
{
|
||||
#ifdef Q_OS_UNIX
|
||||
writeSetting();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void ChartItemEditor::on_pbOk_clicked()
|
||||
{
|
||||
close();
|
||||
}
|
||||
|
||||
void ChartItemEditor::slotAddSeries()
|
||||
{
|
||||
LimeReport::SeriesItem* series = new LimeReport::SeriesItem();
|
||||
int curSeriesNumber = m_charItem->series().count();
|
||||
while (m_charItem->isSeriesExists("Series"+QString::number(curSeriesNumber))) curSeriesNumber++;
|
||||
series->setName("Series"+QString::number(curSeriesNumber));
|
||||
series->setValuesColumn("");
|
||||
series->setLabelsColumn("");
|
||||
series->setColor((m_charItem->series().count()<32)?LimeReport::color_map[m_charItem->series().count()]:LimeReport::generateColor());
|
||||
m_charItem->series().append(series);
|
||||
ui->tableWidget->setRowCount(m_charItem->series().count());
|
||||
ui->tableWidget->setItem(m_charItem->series().count()-1, 0, new QTableWidgetItem(series->name()));
|
||||
ui->tableWidget->selectRow(m_charItem->series().count()-1);
|
||||
ui->valuesFieldComboBox->setCurrentText("");
|
||||
}
|
||||
|
||||
void ChartItemEditor::slotDeleteSeries()
|
||||
{
|
||||
QList<LimeReport::SeriesItem*> itemsToRemove;
|
||||
foreach(QModelIndex index,ui->tableWidget->selectionModel()->selectedRows()){
|
||||
itemsToRemove.append(m_charItem->series().at(index.row()));
|
||||
};
|
||||
foreach (LimeReport::SeriesItem* series, itemsToRemove){
|
||||
m_charItem->series().removeOne(series);
|
||||
delete series;
|
||||
}
|
||||
rebuildTable();
|
||||
disableSeriesEditor();
|
||||
}
|
||||
|
||||
void ChartItemEditor::on_tableWidget_itemSelectionChanged()
|
||||
{
|
||||
if (ui->tableWidget->selectionModel()->hasSelection()){
|
||||
LimeReport::SeriesItem* series = m_charItem->series().at(ui->tableWidget->selectionModel()->currentIndex().row());
|
||||
ui->seriesNameLineEdit->setText(series->name());
|
||||
ui->valuesFieldComboBox->setCurrentText(series->valuesColumn());
|
||||
m_colorIndicator->setColor(series->color());
|
||||
enableSeriesEditor();
|
||||
}
|
||||
}
|
||||
|
||||
void ChartItemEditor::on_seriesNameLineEdit_textChanged(const QString &arg1)
|
||||
{
|
||||
if (currentSeries()){
|
||||
currentSeries()->setName(arg1);
|
||||
ui->tableWidget->currentItem()->setText(arg1);
|
||||
}
|
||||
}
|
||||
|
||||
void ChartItemEditor::on_valuesFieldComboBox_currentTextChanged(const QString &arg1)
|
||||
{
|
||||
if (currentSeries()){
|
||||
currentSeries()->setValuesColumn(arg1);
|
||||
}
|
||||
}
|
||||
|
||||
void ChartItemEditor::on_labelsFieldComboBox_currentTextChanged(const QString &arg1)
|
||||
{
|
||||
if (!m_initing)
|
||||
m_charItem->setLabelsField(arg1);
|
||||
}
|
||||
|
||||
void ChartItemEditor::slotChangeSeriesColor()
|
||||
{
|
||||
QColorDialog colorDialog;
|
||||
if (colorDialog.exec()){
|
||||
currentSeries()->setColor(colorDialog.selectedColor());
|
||||
m_colorIndicator->setColor(colorDialog.selectedColor());
|
||||
}
|
||||
}
|
57
limereport/items/lrchartitemeditor.h
Normal file
57
limereport/items/lrchartitemeditor.h
Normal file
@ -0,0 +1,57 @@
|
||||
#ifndef CHARITEMEDITOR_H
|
||||
#define CHARITEMEDITOR_H
|
||||
|
||||
#include <QWidget>
|
||||
#include "lrchartitem.h"
|
||||
#include "lrcolorindicator.h"
|
||||
#include <QTableWidgetItem>
|
||||
#include <QToolButton>
|
||||
|
||||
namespace Ui {
|
||||
class ChartItemEditor;
|
||||
}
|
||||
|
||||
class ChartItemEditor : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
ChartItemEditor(LimeReport::ChartItem* item, LimeReport::PageDesignIntf* page,
|
||||
QSettings* settings=0, QWidget *parent = 0);
|
||||
~ChartItemEditor();
|
||||
public:
|
||||
QSettings *settings();
|
||||
void rebuildTable();
|
||||
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent *);
|
||||
void moveEvent(QMoveEvent *);
|
||||
private slots:
|
||||
void on_splitter_splitterMoved(int, int);
|
||||
void on_pbOk_clicked();
|
||||
void slotAddSeries();
|
||||
void slotDeleteSeries();
|
||||
void on_tableWidget_itemSelectionChanged();
|
||||
void on_seriesNameLineEdit_textChanged(const QString &arg1);
|
||||
void on_valuesFieldComboBox_currentTextChanged(const QString &arg1);
|
||||
void on_labelsFieldComboBox_currentTextChanged(const QString &arg1);
|
||||
void slotChangeSeriesColor();
|
||||
private:
|
||||
void readSetting();
|
||||
void writeSetting();
|
||||
void init();
|
||||
void enableSeriesEditor();
|
||||
void disableSeriesEditor();
|
||||
LimeReport::SeriesItem* currentSeries();
|
||||
private:
|
||||
Ui::ChartItemEditor *ui;
|
||||
LimeReport::ChartItem* m_charItem;
|
||||
LimeReport::PageDesignIntf* m_page;
|
||||
QSettings* m_settings;
|
||||
bool m_ownedSettings;
|
||||
bool m_isReadingSetting;
|
||||
QToolButton* m_colorButton;
|
||||
ColorIndicator* m_colorIndicator;
|
||||
bool m_initing;
|
||||
};
|
||||
|
||||
#endif // CHARITEMEDITOR_H
|
223
limereport/items/lrchartitemeditor.ui
Normal file
223
limereport/items/lrchartitemeditor.ui
Normal file
@ -0,0 +1,223 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>ChartItemEditor</class>
|
||||
<widget class="QWidget" name="ChartItemEditor">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>380</width>
|
||||
<height>268</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="gbSeries">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Series</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="rightMargin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QTableWidget" name="tableWidget"/>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pbAddSeries">
|
||||
<property name="text">
|
||||
<string>Add</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pbDeleteSeries">
|
||||
<property name="text">
|
||||
<string>Delete</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<layout class="QFormLayout" name="seriesData">
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="seriesNameLineEdit"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="valuesFieldLabel">
|
||||
<property name="text">
|
||||
<string>Values field</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="valuesFieldComboBox">
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="colorLabel">
|
||||
<property name="text">
|
||||
<string>Color</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QWidget" name="colorWidget" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>10</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::HLine</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelsFieldLabel">
|
||||
<property name="text">
|
||||
<string>Labels field</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="labelsFieldComboBox">
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pbOk">
|
||||
<property name="text">
|
||||
<string>Ok</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>pbAddSeries</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>ChartItemEditor</receiver>
|
||||
<slot>slotAddSeries()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>57</x>
|
||||
<y>136</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>8</x>
|
||||
<y>75</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>pbDeleteSeries</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>ChartItemEditor</receiver>
|
||||
<slot>slotDeleteSeries()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>142</x>
|
||||
<y>136</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>372</x>
|
||||
<y>137</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
<slots>
|
||||
<slot>slotAddSeries()</slot>
|
||||
<slot>slotDeleteSeries()</slot>
|
||||
</slots>
|
||||
</ui>
|
@ -94,8 +94,11 @@ SOURCES += \
|
||||
$$REPORT_PATH/lrsimplecrypt.cpp \
|
||||
$$REPORT_PATH/lraboutdialog.cpp \
|
||||
$$REPORT_PATH/lrsettingdialog.cpp \
|
||||
$$REPORT_PATH/lritemscontainerdesignitf.cpp
|
||||
|
||||
$$REPORT_PATH/lritemscontainerdesignitf.cpp \
|
||||
$$REPORT_PATH/lrcolorindicator.cpp \
|
||||
$$REPORT_PATH/items/lrchartitem.cpp \
|
||||
$$REPORT_PATH/items/lrchartitemeditor.cpp
|
||||
|
||||
contains(CONFIG, staticlib){
|
||||
SOURCES += $$REPORT_PATH/lrfactoryinitializer.cpp
|
||||
}
|
||||
@ -199,8 +202,11 @@ HEADERS += \
|
||||
$$REPORT_PATH/lrcallbackdatasourceintf.h \
|
||||
$$REPORT_PATH/lrsettingdialog.h \
|
||||
$$REPORT_PATH/lrpreviewreportwidget_p.h \
|
||||
$$REPORT_PATH/lritemscontainerdesignitf.h
|
||||
|
||||
$$REPORT_PATH/lritemscontainerdesignitf.h \
|
||||
$$REPORT_PATH/lrcolorindicator.h \
|
||||
$$REPORT_PATH/items/lrchartitem.h \
|
||||
$$REPORT_PATH/items/lrchartitemeditor.h
|
||||
|
||||
contains(CONFIG, staticlib){
|
||||
HEADERS += $$REPORT_PATH/lrfactoryinitializer.h
|
||||
}
|
||||
@ -221,6 +227,7 @@ FORMS += \
|
||||
$$REPORT_PATH/lraboutdialog.ui \
|
||||
$$REPORT_PATH/lrsettingdialog.ui \
|
||||
$$REPORT_PATH/scriptbrowser/lrscriptbrowser.ui \
|
||||
$$REPORT_PATH/items/lrchartitemeditor.ui
|
||||
|
||||
RESOURCES += \
|
||||
$$REPORT_PATH/objectinspector/lobjectinspector.qrc \
|
||||
|
38
limereport/lrcolorindicator.cpp
Normal file
38
limereport/lrcolorindicator.cpp
Normal file
@ -0,0 +1,38 @@
|
||||
#include "lrcolorindicator.h"
|
||||
#include <QPainter>
|
||||
|
||||
void ColorIndicator::paintEvent(QPaintEvent* event)
|
||||
{
|
||||
QPainter painter(this);
|
||||
painter.save();
|
||||
painter.setBrush(m_color);
|
||||
painter.setPen(Qt::gray);
|
||||
QRect rect = event->rect().adjusted(3,3,-4,-4);
|
||||
rect.setWidth(rect.height());
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
painter.drawEllipse(rect);
|
||||
painter.restore();
|
||||
}
|
||||
|
||||
ColorIndicator::ColorIndicator(QWidget *parent)
|
||||
:QWidget(parent), m_color(Qt::white){
|
||||
setAttribute(Qt::WA_StaticContents);
|
||||
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
|
||||
setFocusPolicy(Qt::NoFocus);
|
||||
}
|
||||
|
||||
QColor ColorIndicator::color() const
|
||||
{
|
||||
return m_color;
|
||||
}
|
||||
|
||||
void ColorIndicator::setColor(const QColor &color)
|
||||
{
|
||||
m_color = color;
|
||||
update();
|
||||
}
|
||||
|
||||
QSize ColorIndicator::sizeHint() const
|
||||
{
|
||||
return QSize(20,20);
|
||||
}
|
20
limereport/lrcolorindicator.h
Normal file
20
limereport/lrcolorindicator.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef COLORINDICATOR_H
|
||||
#define COLORINDICATOR_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QPaintEvent>
|
||||
|
||||
class ColorIndicator : public QWidget{
|
||||
Q_OBJECT
|
||||
public:
|
||||
ColorIndicator(QWidget* parent = 0);
|
||||
QColor color() const;
|
||||
void setColor(const QColor &color);
|
||||
QSize sizeHint() const;
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *event);
|
||||
private:
|
||||
QColor m_color;
|
||||
};
|
||||
|
||||
#endif // COLORINDICATOR_H
|
Loading…
Reference in New Issue
Block a user