22#include "KWTableDia.h"
23#include "KWTableDia.moc"
25#include "KWTableTemplateSelector.h"
27#include "KWDocument.h"
28#include "KWTableFrameSet.h"
29#include "KWTableTemplate.h"
30#include "KWPageManager.h"
37#include <tqcheckbox.h>
38#include <tqbuttongroup.h>
39#include <tqcombobox.h>
50void KWTablePreview::paintEvent( TQPaintEvent * )
52 int wid = ( width() - 10 ) / cols;
53 int hei = ( height() - 10 ) / rows;
58 p.setPen( TQPen( black ) );
60 for (
int i = 0; i < rows; i++ )
62 for (
int j = 0; j < cols; j++ )
63 p.drawRect( j * wid + 5, i * hei + 5, wid + 1, hei + 1 );
73KWTableDia::KWTableDia( TQWidget* parent,
const char* name, UseMode _useMode,
KWCanvas *_canvas, KWDocument *_doc,
74 int rows,
int cols, CellSize wid, CellSize hei,
bool floating ,
const TQString & _templateName,
int format)
75 : KDialogBase( Tabbed, i18n(
"Table Settings"), Ok | Cancel, Ok, parent, name, true)
81 setupTab1( rows, cols, wid, hei, floating );
82 setupTab2( _templateName,format );
84 setInitialSize( TQSize(500, 480) );
88 oldTemplateName = _templateName;
89#ifdef ALLOW_NON_INLINE_TABLES
92 slotInlineTable( cbIsFloating->isChecked());
97void KWTableDia::setupTab1(
int rows,
int cols, CellSize wid, CellSize hei,
bool floating )
99 tab1 = addPage( i18n(
"Geometry" ) );
101 TQGridLayout *grid =
new TQGridLayout( tab1, 9, 2, 0, KDialog::spacingHint() );
103 lRows =
new TQLabel( i18n(
"Number of rows:" ), tab1 );
104 grid->addWidget( lRows, 0, 0 );
106 nRows =
new TQSpinBox( 1, 128, 1, tab1 );
107 nRows->setValue( rows );
108 grid->addWidget( nRows, 1, 0 );
110 lCols =
new TQLabel( i18n(
"Number of columns:" ), tab1 );
111 grid->addWidget( lCols, 2, 0 );
113 nCols =
new TQSpinBox( 1, 128, 1, tab1 );
114 nCols->setValue( cols );
115 grid->addWidget( nCols, 3, 0 );
117#ifdef ALLOW_NON_INLINE_TABLES
118 if ( m_useMode==NEW )
120 lHei =
new TQLabel( i18n(
"Cell heights:" ), tab1 );
121 grid->addWidget( lHei, 4, 0 );
123 cHei =
new TQComboBox(
false, tab1 );
124 cHei->insertItem( i18n(
"Automatic" ) );
125 cHei->insertItem( i18n(
"Manual" ) );
126 cHei->setCurrentItem( (
int)hei );
127 grid->addWidget( cHei, 5, 0 );
129 lWid =
new TQLabel( i18n(
"Cell widths:" ), tab1 );
130 grid->addWidget( lWid, 6, 0 );
132 cWid =
new TQComboBox(
false, tab1 );
133 cWid->insertItem( i18n(
"Automatic" ) );
134 cWid->insertItem( i18n(
"Manual" ) );
135 cWid->setCurrentItem( (
int)wid );
136 grid->addWidget( cWid, 7, 0 );
141 Q_UNUSED( floating );
144 preview =
new KWTablePreview( tab1, rows, cols );
145 preview->setBackgroundColor( white );
146 grid->addMultiCellWidget( preview, 0, 8, 1, 1 );
148 if ( m_useMode==NEW )
150#ifdef ALLOW_NON_INLINE_TABLES
152 cbIsFloating =
new TQCheckBox( i18n(
"The table is &inline" ), tab1 );
154 cbIsFloating->setChecked( floating );
156 grid->addMultiCellWidget( cbIsFloating, 9, 9, 0, 2 );
157 connect( cbIsFloating, TQ_SIGNAL( toggled (
bool ) ),
this, TQ_SLOT( slotInlineTable(
bool ) ) );
163 cbReapplyTemplate1 =
new TQCheckBox( i18n(
"Reapply template to table"), tab1 );
164 grid->addMultiCellWidget( cbReapplyTemplate1, 9, 9, 0, 2);
166 connect( cbReapplyTemplate1, TQ_SIGNAL( toggled (
bool ) ),
this, TQ_SLOT( slotSetReapply(
bool ) ) );
169 grid->addRowSpacing( 0, lRows->height() );
170 grid->addRowSpacing( 1, nRows->height() );
171 grid->addRowSpacing( 2, lCols->height() );
172 grid->addRowSpacing( 3, nCols->height() );
173#ifdef ALLOW_NON_INLINE_TABLES
174 if ( m_useMode==NEW )
176 grid->addRowSpacing( 4, lHei->height() );
177 grid->addRowSpacing( 5, cHei->height() );
178 grid->addRowSpacing( 6, lWid->height() );
179 grid->addRowSpacing( 7, cWid->height() );
182 grid->addRowSpacing( 8, 150 - ( lRows->height() + nRows->height() + lCols->height() + nCols->height() ) );
183#ifdef ALLOW_NON_INLINE_TABLES
184 if ( m_useMode==NEW )
185 grid->addRowSpacing( 9, cbIsFloating->height() );
187 grid->setRowStretch( 0, 0 );
188 grid->setRowStretch( 1, 0 );
189 grid->setRowStretch( 2, 0 );
190 grid->setRowStretch( 3, 0 );
191 grid->setRowStretch( 4, 0 );
192 grid->setRowStretch( 5, 0 );
193 grid->setRowStretch( 6, 0 );
194 grid->setRowStretch( 7, 0 );
195 grid->setRowStretch( 8, 1 );
196 grid->setRowStretch( 9, 0 );
198 grid->addColSpacing( 0, lRows->width() );
199 grid->addColSpacing( 0, nRows->width() );
200 grid->addColSpacing( 0, lCols->width() );
201 grid->addColSpacing( 0, nCols->width() );
202#ifdef ALLOW_NON_INLINE_TABLES
203 if ( m_useMode==NEW )
205 grid->addColSpacing( 0, lHei->width() );
206 grid->addColSpacing( 0, cHei->width() );
207 grid->addColSpacing( 0, lWid->width() );
208 grid->addColSpacing( 0, cWid->width() );
211 grid->addColSpacing( 1, 150 );
212 grid->setColStretch( 0, 0 );
213 grid->setColStretch( 1, 1 );
217 connect( nRows, TQ_SIGNAL( valueChanged(
int ) ),
this, TQ_SLOT( rowsChanged(
int ) ) );
218 connect( nCols, TQ_SIGNAL( valueChanged(
int ) ),
this, TQ_SLOT( colsChanged(
int ) ) );
221void KWTableDia::setupTab2(
const TQString & _templateName,
int format )
223 TQWidget *tab2 = addPage( i18n(
"Templates"));
225 TQGridLayout *grid =
new TQGridLayout( tab2, 2, 1, 0, KDialog::spacingHint() );
227 tableTemplateSelector =
new KWTableTemplateSelector( doc, tab2, _templateName,format );
228 grid->addWidget(tableTemplateSelector, 0, 0);
232 cbReapplyTemplate2 =
new TQCheckBox( i18n(
"Reapply template to table"), tab2 );
233 grid->addWidget( cbReapplyTemplate2, 1, 0);
235 grid->setRowStretch( 0, 1);
236 grid->setRowStretch( 1, 0);
238 connect( cbReapplyTemplate2, TQ_SIGNAL( toggled (
bool ) ),
this, TQ_SLOT( slotSetReapply(
bool ) ) );
243void KWTableDia::slotOk()
245 if ( m_useMode==NEW )
248 canvas->createTable( nRows->value(), nCols->value(),
249#ifdef ALLOW_NON_INLINE_TABLES
252 cbIsFloating->isChecked(),
258 tableTemplateSelector->getTableTemplate(),
259 tableTemplateSelector->getFormatType());
262 KWTableFrameSet *table = canvas->getCurrentTable();
265 KMacroCommand *macroCmd = 0L;
269 int rowsDiff = nRows->value()-oldRowCount;
272 macroCmd =
new KMacroCommand( (rowsDiff>0 ) ? i18n(
"Add New Rows to Table") : i18n(
"Remove Rows From Table") );
273 for (
int i = 0 ; i < abs( rowsDiff ) ; i++ )
276 cmd =
new KWRemoveRowCommand( i18n(
"Remove Row"), table, oldRowCount-i-1 );
279 cmd =
new KWInsertRowCommand( i18n(
"Insert Row"), table, oldRowCount+i );
283 macroCmd->addCommand( cmd );
285 canvas->setTableRows( nRows->value() );
289 int colsDiff = nCols->value()-oldColCount;
292 double maxRightOffset;
297 KWPage *page = doc->pageManager()->page(table->cell(0,0)->
frame(0));
301 macroCmd =
new KMacroCommand( (colsDiff>0 ) ? i18n(
"Add New Columns to Table") : i18n(
"Remove Columns From Table") );
303 for (
int i = 0 ; i < abs( colsDiff ) ; i++ )
306 cmd =
new KWRemoveColumnCommand( i18n(
"Remove Column"), table, oldColCount-i-1 );
309 cmd =
new KWInsertColumnCommand( i18n(
"Insert Column"), table, oldColCount+i, maxRightOffset);
313 macroCmd->addCommand( cmd );
315 canvas->setTableCols( nCols->value() );
319 if ( tableTemplateSelector->getTableTemplate() && (( oldTemplateName!=tableTemplateSelector->getTableTemplate()->name() ) || (cbReapplyTemplate1->isChecked()) ))
322 macroCmd =
new KMacroCommand( i18n(
"Apply Template to Table") );
323 KWTableTemplateCommand *ttCmd=
new KWTableTemplateCommand( i18n(
"Apply Template to Table"), table, tableTemplateSelector->getTableTemplate() );
324 macroCmd->addCommand( ttCmd );
325 canvas->setTableTemplateName( tableTemplateSelector->getTableTemplate()->name() );
330 doc->addCommand( macroCmd );
334 KDialogBase::slotOk();
337void KWTableDia::rowsChanged(
int _rows )
339 preview->setRows( _rows );
342void KWTableDia::colsChanged(
int _cols )
344 preview->setCols( _cols );
347void KWTableDia::slotSetReapply(
bool _reapply )
349 if ( cbReapplyTemplate1->isChecked()!=_reapply ) cbReapplyTemplate1->setChecked( _reapply );
350 if ( cbReapplyTemplate2->isChecked()!=_reapply ) cbReapplyTemplate2->setChecked( _reapply );
353void KWTableDia::slotInlineTable(
bool state)
355#ifdef ALLOW_NON_INLINE_TABLES
356 if ( m_useMode==NEW )
358 lWid->setEnabled( !state );
359 lHei->setEnabled( !state );
360 cHei->setEnabled( !state );
361 cWid->setEnabled( !state );
Class: KWCanvas This class is responsible for the rendering of the frames to the screen as well as th...
bool isFloating() const
Return true if this frameset is floating (inline), false if it's fixed.
KWTextFrameSet * anchorFrameset() const
Return the frameset in which our anchor is - assuming isFloating().
KWFrame * frame(unsigned int _num) const
get a frame by number
double width() const
return the width of this page (in pt)
double rightMargin() const
return the width of the margin at left (in pt);