10#include <tqpopupmenu.h>
11#include <tqpaintdevicemetrics.h>
17#include <kiconloader.h>
20#include <kstandarddirs.h>
21#include <tdetempfile.h>
22#include <dcopobject.h>
23#include <kxmlguifactory.h>
24#include <tdefiledialog.h>
25#include <tdemessagebox.h>
27#include <KoTemplateCreateDia.h>
30#include "kchart_view.h"
31#include "kchart_factory.h"
32#include "kchart_part.h"
33#include "kchart_params.h"
34#include "kchartWizard.h"
35#include "kchartDataEditor.h"
36#include "kchartConfigDialog.h"
37#include "KChartViewIface.h"
38#include "kchartPageLayout.h"
39#include "kchartPrinterDlg.h"
40#include "csvimportdialog.h"
52KChartView::KChartView( KChartPart* part, TQWidget* parent,
const char* name )
53 : KoView( part, parent, name )
57 setBackgroundMode( TQt::NoBackground );
59 setInstance( KChartFactory::global() );
60 if ( koDocument()->isReadWrite() )
61 setXMLFile(
"kchart.rc" );
63 setXMLFile(
"kchart_readonly.rc" );
67 m_importData =
new TDEAction( i18n(
"Import Data..." ), 0,
68 this, TQ_SLOT( importData() ),
69 actionCollection(),
"import_data" );
71 TDEAction * actionExtraCreateTemplate =
73 new TDEAction( i18n(
"&Create Template From Document..." ), 0,
74 this, TQ_SLOT( extraCreateTemplate() ),
75 actionCollection(),
"extra_template" );
77 m_wizard =
new TDEAction( i18n(
"Customize with &Wizard..."),
79 this, TQ_SLOT( wizard() ),
80 actionCollection(),
"wizard");
81 m_edit =
new TDEAction( i18n(
"Edit &Data..."),
"edit", 0,
82 this, TQ_SLOT( editData() ),
83 actionCollection(),
"editdata");
84 m_config =
new TDEAction( i18n(
"&Chart..." ),
"configure", 0,
86 this, TQ_SLOT( slotConfig() ),
87 actionCollection(),
"config" );
90 m_chartbars =
new TDEToggleAction( i18n(
"&Bar"),
"chart_bar_3d", 0,
this,
91 TQ_SLOT( barsChart() ), actionCollection(),
93 m_chartbars->setExclusiveGroup(
"charttypes" );
94 m_chartbars->setChecked(
true );
96 m_chartline =
new TDEToggleAction( i18n(
"&Line"),
"chart_line", 0,
this,
97 TQ_SLOT( lineChart() ), actionCollection(),
99 m_chartline->setExclusiveGroup(
"charttypes" );
101 m_chartareas =
new TDEToggleAction( i18n(
"&Area"),
"chart_area", 0,
this,
102 TQ_SLOT( areasChart() ), actionCollection(),
104 m_chartareas->setExclusiveGroup(
"charttypes" );
106 m_charthilo =
new TDEToggleAction( i18n(
"&HiLo"),
"chart_hilo", 0,
this,
107 TQ_SLOT( hiLoChart() ), actionCollection(),
109 m_charthilo->setExclusiveGroup(
"charttypes" );
111 m_chartbw =
new TDEToggleAction( i18n(
"Bo&x && Whiskers"),
"chart_boxwhisker", 0,
this,
112 TQ_SLOT( bwChart() ), actionCollection(),
114 m_chartbw->setExclusiveGroup(
"charttypes" );
116 m_chartpie =
new TDEToggleAction( i18n(
"&Pie"),
"chart_pie", 0,
this,
117 TQ_SLOT( pieChart() ), actionCollection(),
119 m_chartpie->setExclusiveGroup(
"charttypes" );
121 m_chartring =
new TDEToggleAction( i18n(
"&Ring"),
"chart_ring", 0,
this,
122 TQ_SLOT( ringChart() ), actionCollection(),
124 m_chartring->setExclusiveGroup(
"charttypes" );
126 m_chartpolar =
new TDEToggleAction( i18n(
"&Polar"),
"chart_polar", 0,
this,
127 TQ_SLOT( polarChart() ), actionCollection(),
129 m_chartpolar->setExclusiveGroup(
"charttypes" );
132 m_colorConfig =
new TDEAction( i18n(
"&Colors..." ), 0,
133 this, TQ_SLOT( slotConfigColor() ),
134 actionCollection(),
"color_config" );
136 m_fontConfig =
new TDEAction( i18n(
"&Font..." ), 0,
137 this, TQ_SLOT( slotConfigFont() ),
138 actionCollection(),
"font_config" );
140 m_backConfig =
new TDEAction( i18n(
"&Background..." ), 0,
141 this, TQ_SLOT( slotConfigBack() ),
142 actionCollection(),
"back_config" );
144 m_legendConfig =
new TDEAction( i18n(
"&Legend..." ), 0,
145 this, TQ_SLOT( slotConfigLegend() ),
146 actionCollection(),
"legend_config" );
148 m_subTypeChartConfig =
new TDEAction( i18n(
"Chart &Sub-type..." ), 0,
149 this, TQ_SLOT( slotConfigSubTypeChart() ),
150 actionCollection(),
"legend_subtype" );
152 m_dataFormatConfig =
new TDEAction( i18n(
"&Data Format..." ), 0,
153 this, TQ_SLOT( slotConfigDataFormat() ),
154 actionCollection(),
"data_format" );
156 m_headerFooterConfig =
new TDEAction( i18n(
"&Header && Footer..." ), 0,
157 this, TQ_SLOT( slotConfigHeaderFooterChart() ),
158 actionCollection(),
"headerfooter_subtype" );
160 m_pageLayoutConfig =
new TDEAction( i18n(
"Page Layout..." ), 0,
161 this, TQ_SLOT( slotConfigPageLayout() ),
162 actionCollection(),
"page_layout" );
169 if (!((KChartPart*)koDocument())->canChangeValue()) {
170 m_edit->setEnabled(
false);
171 m_importData->setEnabled(
false);
174 updateGuiTypeOfChart();
178KChartView::~KChartView()
184DCOPObject* KChartView::dcopObject()
187 m_dcop =
new KChartViewIface(
this );
193void KChartView::paintEvent( TQPaintEvent* )
195 TQPainter painter(
this );
201 koDocument()->paintEverything( painter, rect(),
false,
this );
205void KChartView::updateReadWrite(
bool )
217void KChartView::editData()
219 kchartDataEditor ed(
this);
220 KChartParams *params = ((KChartPart*)koDocument())->params();
221 KDChartTableData *dat = ((KChartPart*)koDocument())->data();
223 kdDebug(35001) <<
"***Before calling editor: cols =" << dat->cols()
224 <<
" , rows = " << dat->rows()
225 <<
" , usedCols = " << dat->usedCols()
226 <<
" usedRows = " << dat->usedRows() << endl;
228 ed.setData( params, dat );
229 ed.setRowLabels(((KChartPart*)koDocument())->rowLabelTexts());
230 ed.setColLabels(((KChartPart*)koDocument())->colLabelTexts());
233 connect(&ed, TQ_SIGNAL(applyClicked(kchartDataEditor *)),
234 this, TQ_SLOT(applyEdit(kchartDataEditor *)));
237 if ( ed.exec() != TQDialog::Accepted ) {
244 ed.getData(params, dat);
245 ed.getRowLabels(((KChartPart*)koDocument())->rowLabelTexts());
246 ed.getColLabels(((KChartPart*)koDocument())->colLabelTexts());
247 ((KChartPart*)koDocument())->setModified(
true);
249 kdDebug(35001) <<
"***After calling editor: cols =" << dat->cols()
250 <<
" , rows = " << dat->rows()
251 <<
" , usedCols = " << dat->usedCols()
252 <<
" usedRows = " << dat->usedRows() << endl;
257void KChartView::applyEdit(kchartDataEditor *ed)
262 ed->getData( ((KChartPart*)koDocument())->params(),
263 ((KChartPart*)koDocument())->data() );
264 ed->getRowLabels(((KChartPart*)koDocument())->rowLabelTexts());
265 ed->getColLabels(((KChartPart*)koDocument())->colLabelTexts());
267 ((KChartPart*)koDocument())->setModified(
true);
273void KChartView::wizard()
275 kdDebug(35001) <<
"Wizard called" << endl;
276 KChartWizard *wiz =
new KChartWizard((KChartPart*)koDocument(),
this,
277 "KChart Wizard",
true);
278 kdDebug(35001) <<
"Executed. Now, display it" << endl;
280 ((KChartPart*)koDocument())->setModified(
true);
282 updateGuiTypeOfChart();
283 kdDebug(35001) <<
"Ok, executed..." << endl;
288void KChartView::updateGuiTypeOfChart()
290 KDChartParams* params = ((KChartPart*)koDocument())->params();
293 case KDChartParams::Bar:
294 m_chartbars->setChecked(
true);
296 case KDChartParams::Line:
297 m_chartline->setChecked(
true);
299 case KDChartParams::Area:
300 m_chartareas->setChecked(
true);
302 case KDChartParams::Pie:
303 m_chartpie->setChecked(
true);
305 case KDChartParams::HiLo:
306 m_charthilo->setChecked(
true);
308 case KDChartParams::Ring:
309 m_chartring->setChecked(
true);
311 case KDChartParams::Polar:
312 m_chartpolar->setChecked(
true);
314 case KDChartParams::BoxWhisker:
315 m_chartbw->setChecked(
true );
327void KChartView::slotConfig()
329 config(KChartConfigDialog::KC_ALL);
333void KChartView::config(
int flags)
336 KChartParams *params = ((KChartPart*)koDocument())->params();
337 KDChartTableData *dat = ((KChartPart*)koDocument())->data();
339 KChartConfigDialog *d =
new KChartConfigDialog( params,
this, flags,
342 connect( d, TQ_SIGNAL( dataChanged() ),
343 this, TQ_SLOT( slotRepaint() ) );
349void KChartView::slotRepaint()
351 ((KChartPart*)koDocument())->setModified(
true);
356void KChartView::saveConfig()
358 kdDebug(35001) <<
"Save config..." << endl;
359 ((KChartPart*)koDocument())->saveConfig( TDEGlobal::config() );
363void KChartView::loadConfig()
365 kdDebug(35001) <<
"Load config..." << endl;
367 TDEGlobal::config()->reparseConfiguration();
368 ((KChartPart*)koDocument())->loadConfig( TDEGlobal::config() );
370 updateGuiTypeOfChart();
376void KChartView::defaultConfig()
378 ((KChartPart*)koDocument())->defaultConfig( );
379 updateGuiTypeOfChart();
384void KChartView::pieChart()
386 if ( m_chartpie->isChecked() ) {
387 forceAxisParams(
false);
388 KChartParams *params = ((KChartPart*)koDocument())->params();
390 params->setChartType( KChartParams::Pie );
391 params->setThreeDPies(params->threeDBars());
392 params->setExplodeFactor( 0 );
393 params->setExplode(
true );
397 ((KChartPart*)koDocument())->setModified(
true);
400 m_chartpie->setChecked(
true );
403void KChartView::forceAxisParams(
bool lineMode) {
404 KChartParams *params = ((KChartPart*)koDocument())->params();
406 axisParams = params->axisParams( KDChartAxisParams::AxisPosLeft );
407 if(params->chartType() == KChartParams::Line)
410 if(m_logarithmicScale)
414 params->setAxisParams( KDChartAxisParams::AxisPosLeft, axisParams );
417void KChartView::lineChart()
419 if ( m_chartline->isChecked() ) {
420 forceAxisParams(
true);
421 KChartParams* params = ((KChartPart*)koDocument())->params();
423 params->setChartType( KChartParams::Line );
424 params->setLineChartSubType( KDChartParams::LineNormal );
428 ((KChartPart*)koDocument())->setModified(
true);
431 m_chartline->setChecked(
true );
436void KChartView::barsChart()
438 if ( m_chartbars->isChecked() ) {
439 forceAxisParams(
false);
440 KChartParams* params = ((KChartPart*)koDocument())->params();
442 params->setChartType( KChartParams::Bar );
443 params->setBarChartSubType( KDChartParams::BarNormal );
446 params->setThreeDBars( params->threeDPies() );
448 ((KChartPart*)koDocument())->setModified(
true);
451 m_chartbars->setChecked(
true );
455void KChartView::areasChart()
457 if ( m_chartareas->isChecked() ) {
458 forceAxisParams(
false);
459 KChartParams* params = ((KChartPart*)koDocument())->params();
461 params->setChartType( KChartParams::Area );
462 params->setAreaChartSubType( KDChartParams::AreaNormal );
466 ((KChartPart*)koDocument())->setModified(
true);
469 m_chartareas->setChecked(
true );
474void KChartView::hiLoChart()
476 if ( m_charthilo->isChecked() ) {
477 forceAxisParams(
false);
478 KChartParams* params = ((KChartPart*)koDocument())->params();
480 params->setChartType( KChartParams::HiLo );
481 params->setHiLoChartSubType( KDChartParams::HiLoNormal );
485 ((KChartPart*)koDocument())->setModified(
true);
488 m_charthilo->setChecked(
true );
492void KChartView::ringChart()
494 if ( m_chartring->isChecked() ) {
495 forceAxisParams(
false);
496 KChartParams* params = ((KChartPart*)koDocument())->params();
498 params->setChartType( KChartParams::Ring );
502 ((KChartPart*)koDocument())->setModified(
true);
505 m_chartring->setChecked(
true );
510void KChartView::polarChart()
512 if ( m_chartpolar->isChecked() ) {
513 forceAxisParams(
false);
514 KDChartParams* params = ((KChartPart*)koDocument())->params();
520 ((KChartPart*)koDocument())->setModified(
true);
523 m_chartpolar->setChecked(
true );
527void KChartView::bwChart()
529 if ( m_chartbw->isChecked() ) {
530 forceAxisParams(
false);
531 KDChartParams* params = ((KChartPart*)koDocument())->params();
537 ((KChartPart*)koDocument())->setModified(
true);
540 m_chartbw->setChecked(
true );
544void KChartView::mousePressEvent ( TQMouseEvent *e )
546 if (!koDocument()->isReadWrite() || !factory())
548 if ( e->button() == TQt::RightButton )
549 ((TQPopupMenu*)factory()->container(
"action_popup",
this))->popup(TQCursor::pos());
553void KChartView::slotConfigColor()
555 config(KChartConfigDialog::KC_COLORS);
559void KChartView::slotConfigFont()
561 config(KChartConfigDialog::KC_FONT);
565void KChartView::slotConfigBack()
567 config(KChartConfigDialog::KC_BACK);
571void KChartView::slotConfigLegend()
573 config(KChartConfigDialog::KC_LEGEND);
576void KChartView::slotConfigDataFormat()
578 config(KChartConfigDialog::KC_DATAFORMAT);
581void KChartView::slotConfigSubTypeChart()
583 config(KChartConfigDialog::KC_SUBTYPE);
587void KChartView::slotConfigHeaderFooterChart()
589 config(KChartConfigDialog::KC_HEADERFOOTER);
594void KChartView::updateButton()
597 KChartParams* params = ((KChartPart*)koDocument())->params();
599 bool state=(params->chartType()==KChartParams::Bar ||
600 params->chartType()==KChartParams::Area ||
601 params->chartType()==KChartParams::Line ||
602 params->chartType()==KChartParams::HiLo ||
603 params->chartType()==KChartParams::Polar);
604 m_subTypeChartConfig->setEnabled(state);
608void KChartView::slotConfigPageLayout()
610 KChartParams *params = ((KChartPart*)koDocument())->params();
611 KChartPageLayout *dialog =
new KChartPageLayout(params,
this,
614 connect( dialog, TQ_SIGNAL( dataChanged() ),
615 this, TQ_SLOT( slotRepaint() ) );
622void KChartView::setupPrinter( KPrinter &printer )
624 if ( !printer.previewOnly() )
625 printer.addDialogPage(
new KChartPrinterDlg( 0,
"KChart page" ) );
629void KChartView::print(KPrinter &printer)
631 printer.setFullPage(
false );
634 painter.begin(&printer);
635 TQPaintDeviceMetrics pdm( &printer );
639 if ( !printer.previewOnly() ) {
640 int const scalex = printer.option(
"kde-kchart-printsizex").toInt();
641 int const scaley = printer.option(
"kde-kchart-printsizey").toInt();
643 width = pdm.width() * scalex / 100;
644 height = pdm.height() * scaley / 100;
649 height = pdm.height();
652 TQRect rect(0, 0, width, height);
654 ((KChartPart*)koDocument())->params(),
655 ((KChartPart*)koDocument())->data(),
666void KChartView::importData()
669 TQString filename = KFileDialog::getOpenFileName(TQString(),
672 i18n(
"Import Data"));
673 kdDebug(35001) <<
"Filename = <" << filename <<
">" << endl;
674 if (filename.isEmpty())
678 TQFile inFile(filename);
679 if (!inFile.open(IO_ReadOnly)) {
680 KMessageBox::sorry( 0, i18n(
"The file %1 could not be read.")
687 TQByteArray inData( inFile.readAll() );
689 CSVImportDialog *dialog =
new CSVImportDialog(0L, inData);
691 if ( !dialog->exec() ) {
692 kdDebug(35001) <<
"Cancel was pressed" << endl;
696 kdDebug(35001) <<
"OK was pressed" << endl;
698 uint rows = dialog->rows();
699 uint cols = dialog->cols();
701 kdDebug(35001) <<
"Rows: " << rows <<
" Cols: " << cols << endl;
703 bool hasRowHeaders = ( rows > 1 && dialog->firstRowContainHeaders() );
704 bool hasColHeaders = ( cols > 1 && dialog->firstColContainHeaders() );
706 KDChartTableData data( rows, cols );
707 data.setUsedRows( rows );
708 data.setUsedCols( cols );
709 for (uint row = 0; row < rows; row++) {
710 for (uint col = 0; col < cols; col++) {
716 tmp = dialog->text( row, col );
717 if ( ( row == 0 && hasRowHeaders )
718 || ( col == 0 && hasColHeaders ) ) {
719 kdDebug(35001) <<
"Setting header (" << row <<
"," << col
720 <<
") to value " << tmp << endl;
721 data.setCell( row, col, tmp );
724 val = tmp.toDouble(&ok);
728 kdDebug(35001) <<
"Setting (" << row <<
"," << col
729 <<
") to value " << val << endl;
732 data.setCell( row, col, val );
737 ((KChartPart*)koDocument())->doSetData( data,
738 hasRowHeaders, hasColHeaders );
742void KChartView::extraCreateTemplate()
746 TQPixmap pix = koDocument()->generatePreview(TQSize(width, height));
748 KTempFile tempFile( TQString(),
".chrt" );
749 tempFile.setAutoDelete(
true);
751 koDocument()->saveNativeFormat( tempFile.name() );
753 KoTemplateCreateDia::createTemplate(
"kchart_template", KChartFactory::global(),
754 tempFile.name(), pix,
this );
756 KChartFactory::global()->dirs()->addResourceType(
"kchart_template",
757 TDEStandardDirs::kde_default(
"data" ) +
758 "kchart/templates/");
764#include "kchart_view.moc"
Definition of a single entry-point to the charting engine for applications that wish to provide their...
access the chart axis parameters.
void setAxisCalcMode(AxisCalcMode axisCalcMode)
enum AxisCalcMode { AxisCalcLinear, AxisCalcLogarithmic }; The axis calculation mode.
AxisCalcMode axisCalcMode() const
Returns the axis calculation mode configured in this params object.
Bundles the display parameters of a chart.
void setChartType(ChartType chartType)
Specifies the chart type.
void setPolarChartSubType(PolarChartSubType polarChartSubType)
Specifies the polar chart subtype.
void setBWChartSubType(BWChartSubType bWChartSubType)
Specifies the BoxWhisker chart subtype.
ChartType chartType() const
Returns the chart type configured in this params object.
static void print(TQPainter *, KDChartParams *, KDChartTableDataBase *, KDChartDataRegionList *regions=0, const TQRect *rect=0, bool mustCalculateGeometry=true)
Paints a chart with the specified parameters on the specified painter which should use a TQPrinter as...