20#include "KWTableStyleManager.h"
21#include "KWTableStyleManager.moc"
22#include "KWImportStyleDia.h"
24#include "KWDocument.h"
26#include <KoParagCounter.h>
27#include <KoTextDocument.h>
29#include "KoParagStyle.h"
30#include "KWFrameStyleManager.h"
31#include "KWStyleManager.h"
34#include <kiconloader.h>
37#include <tqpushbutton.h>
39#include <tqgroupbox.h>
41#include <tqlineedit.h>
43#include <tqcombobox.h>
51KWTableStylePreview::KWTableStylePreview(
const TQString& title,
const TQString& text, TQWidget* parent,
const char* name )
52 : TQGroupBox( title, parent, name )
54 m_zoomHandler =
new KoTextZoomHandler;
55 TQFont font = KoGlobal::defaultFont();
56 m_textdoc =
new KoTextDocument( m_zoomHandler,
new KoTextFormatCollection( font, TQColor(),TDEGlobal::locale()->language(),
false ) );
57 KoTextParag * parag = m_textdoc->firstParag();
58 parag->insert( 0, text );
61KWTableStylePreview::~KWTableStylePreview()
70void KWTableStylePreview::drawContents( TQPainter *p )
73 TQRect r = contentsRect();
75 int wid = ( r.width() - 40 );
76 int hei = ( r.height() - 40 );
81 p->fillRect( TQRect( 10, 20, r.width()-20, r.height() - 20 ), TQColor(
"white") );
85 if (tableStyle->frameStyle()->topBorder().width()>0) {
86 p->setPen( KoBorder::borderPen(tableStyle->frameStyle()->topBorder(), ptToPx( tableStyle->frameStyle()->topBorder().width() ), black) );
87 p->drawLine( 20 -
int(tableStyle->frameStyle()->leftBorder().width()/2), 30,
88 20 + wid +
int(tableStyle->frameStyle()->rightBorder().width()/2), 30 );
90 if (tableStyle->frameStyle()->leftBorder().width()>0) {
91 p->setPen( KoBorder::borderPen(tableStyle->frameStyle()->leftBorder(), ptToPx( tableStyle->frameStyle()->leftBorder().width() ), black) );
92 p->drawLine( 20, 30 -
int(tableStyle->frameStyle()->topBorder().width()/2),
93 20 , 30 + hei +
int(tableStyle->frameStyle()->bottomBorder().width()/2) );
95 if (tableStyle->frameStyle()->bottomBorder().width()>0) {
96 p->setPen( KoBorder::borderPen(tableStyle->frameStyle()->bottomBorder(), ptToPx( tableStyle->frameStyle()->bottomBorder().width() ), black) );
97 p->drawLine( 20 + wid +
int(ceil(tableStyle->frameStyle()->rightBorder().width()/2)), 30 + hei,
98 20 -
int(tableStyle->frameStyle()->leftBorder().width()/2), 30 + hei );
100 if (tableStyle->frameStyle()->rightBorder().width()>0) {
101 p->setPen( KoBorder::borderPen(tableStyle->frameStyle()->rightBorder(), ptToPx( tableStyle->frameStyle()->rightBorder().width() ), black) );
102 p->drawLine( 20 + wid, 30 -
int(tableStyle->frameStyle()->topBorder().width()/2) ,
103 20 + wid, 30 + hei +
int(tableStyle->frameStyle()->bottomBorder().width()/2) );
108 TQRect fr( TQPoint(20 +
int(ceil(tableStyle->frameStyle()->leftBorder().width()/2)), 30 +
int(ceil(tableStyle->frameStyle()->topBorder().width()/2))),
109 TQPoint(20 + wid -
int(floor(tableStyle->frameStyle()->rightBorder().width()/2)+1), 30 + hei -
int(floor(tableStyle->frameStyle()->bottomBorder().width()/2)+1)) );
111 p->fillRect( fr, tableStyle->frameStyle()->backgroundColor() );
115 KoTextParag * parag = m_textdoc->firstParag();
116 int widthLU = m_zoomHandler->pixelToLayoutUnitX( fr.width() - 2 );
117 if ( m_textdoc->width() != widthLU )
120 m_textdoc->setWidth( widthLU );
121 parag->invalidate(0);
125 TQRect textRect = parag->pixelRect( m_zoomHandler );
128 textRect.moveTopLeft( TQPoint( fr.x(), fr.y() + ( fr.height() - textRect.height() ) / 2 ) );
130 p->setClipRect( textRect.intersect( fr ) );
131 p->translate( textRect.x(), textRect.y() );
133 TQColorGroup cg = TQApplication::palette().active();
134 cg.setBrush( TQColorGroup::Base, tableStyle->frameStyle()->backgroundColor() );
136 m_textdoc->drawWYSIWYG( p, 1, 0, textRect.width() - 1, textRect.height(), cg, m_zoomHandler );
141void KWTableStylePreview::setTableStyle(
KWTableStyle *_tableStyle )
143 tableStyle = _tableStyle;
145 KoTextParag * parag = m_textdoc->firstParag();
146 parag->applyStyle( tableStyle->paragraphStyle() );
155KWTableStyleListItem::~KWTableStyleListItem()
159void KWTableStyleListItem::switchStyle()
161 delete m_changedTableStyle;
163 if ( m_origTableStyle )
164 m_changedTableStyle =
new KWTableStyle( *m_origTableStyle );
167void KWTableStyleListItem::deleteStyle(
KWTableStyle *current )
169 Q_ASSERT( m_changedTableStyle == current );
170 delete m_changedTableStyle;
171 m_changedTableStyle = 0L;
174void KWTableStyleListItem::apply()
176 *m_origTableStyle = *m_changedTableStyle;
185KWTableStyleManager::KWTableStyleManager( TQWidget *_parent, KWDocument *_doc )
186 : KDialogBase( _parent,
"Tablestylist", true,
187 i18n(
"Table Style Manager"),
188 KDialogBase::Ok | KDialogBase::Cancel | KDialogBase::Apply | KDialogBase::User1 )
192 m_currentTableStyle = 0L;
195 m_tableStyles.setAutoDelete(
false);
199 m_stylesList->setCurrentItem( 0 );
202 setInitialSize( TQSize( 450, 450 ) );
203 setButtonText( KDialogBase::User1, i18n(
"Import From File...") );
204 connect(
this, TQ_SIGNAL(user1Clicked()),
this, TQ_SLOT(importFromFile()));
208KWTableStyleManager::~KWTableStyleManager()
210 m_tableStyles.setAutoDelete(
true );
211 m_tableStyles.clear();
214void KWTableStyleManager::setupWidget()
216 TQFrame * frame1 = makeMainWidget();
217 TQGridLayout *frame1Layout =
new TQGridLayout( frame1, 0, 0,
218 0, KDialog::spacingHint() );
221 KWTableStyleCollection* collection = m_doc->tableStyleCollection();
222 numTableStyles = collection->count();
223 m_stylesList =
new TQListBox( frame1,
"stylesList" );
224 m_stylesList->insertStringList( collection->displayNameList() );
225 const TQValueList<KoUserStyle*> styleList = collection->styleList();
226 Q_ASSERT( !styleList.isEmpty() );
227 for ( TQValueList<KoUserStyle *>::const_iterator it = styleList.begin(), end = styleList.end();
230 KWTableStyle* style =
static_cast<KWTableStyle *
>( *it );
231 m_tableStyles.append(
new KWTableStyleListItem(style,
new KWTableStyle(*style) ) );
232 m_styleOrder << style->name();
234 Q_ASSERT( m_stylesList->count() == m_styleOrder.count() );
235 Q_ASSERT( m_styleOrder.count() == m_tableStyles.count() );
237 frame1Layout->addMultiCellWidget( m_stylesList, 0, 0, 0, 1 );
240 m_moveUpButton =
new TQPushButton( frame1,
"moveUpButton" );
241 m_moveUpButton->setIconSet( SmallIconSet(
"go-up" ) );
242 connect( m_moveUpButton, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( moveUpStyle() ) );
243 frame1Layout->addWidget( m_moveUpButton, 1, 1 );
245 m_moveDownButton =
new TQPushButton( frame1,
"moveDownButton" );
246 m_moveDownButton->setIconSet( SmallIconSet(
"go-down" ) );
247 connect( m_moveDownButton, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( moveDownStyle() ) );
248 frame1Layout->addWidget( m_moveDownButton, 1, 0 );
251 m_deleteButton =
new TQPushButton( frame1,
"deleteButton" );
252 m_deleteButton->setText( i18n(
"&Delete" ) );
253 connect( m_deleteButton, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( deleteStyle() ) );
255 frame1Layout->addWidget( m_deleteButton, 2, 1 );
257 m_newButton =
new TQPushButton( frame1,
"newButton" );
258 m_newButton->setText( i18n(
"New" ) );
259 connect( m_newButton, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( addStyle() ) );
261 frame1Layout->addWidget( m_newButton, 2, 0 );
263 main =
new TQWidget( frame1 );
267 frame1Layout->addMultiCellWidget( main, 0, 2, 2, 2 );
269 connect( m_stylesList, TQ_SIGNAL( selectionChanged() ),
this, TQ_SLOT( switchStyle() ) );
272void KWTableStyleManager::setupMain()
274 TQGridLayout *mainLayout =
new TQGridLayout( main );
275 mainLayout->setSpacing( KDialog::spacingHint() );
277 preview =
new KWTableStylePreview( i18n(
"Preview"), i18n(
"Tablestyles preview"), main );
278 preview->resize(preview->sizeHint());
280 mainLayout->addMultiCellWidget( preview, 1, 1, 0, 1 );
282 m_nameString =
new TQLineEdit( main );
283 m_nameString->resize(m_nameString->sizeHint() );
284 connect( m_nameString, TQ_SIGNAL( textChanged(
const TQString &) ),
this, TQ_SLOT( renameStyle(
const TQString &) ) );
286 mainLayout->addWidget( m_nameString, 0, 1 );
288 TQLabel *nameLabel =
new TQLabel( main );
289 nameLabel->setText( i18n(
"Name:" ) );
290 nameLabel->resize(nameLabel->sizeHint());
291 nameLabel->setAlignment( AlignRight | AlignVCenter );
293 mainLayout->addWidget( nameLabel, 0, 0 );
295 TQGroupBox *adjustBox =
new TQGroupBox( 0, TQt::Vertical, i18n(
"Adjust"), main);
296 adjustBox->layout()->setSpacing(KDialog::spacingHint());
297 adjustBox->layout()->setMargin(KDialog::marginHint());
298 TQGridLayout *adjustLayout =
new TQGridLayout( adjustBox->layout() );
300 TQLabel *frameStyleLabel =
new TQLabel( adjustBox );
301 frameStyleLabel->setText( i18n(
"Framestyle:" ) );
302 frameStyleLabel->setAlignment( AlignRight | AlignVCenter );
304 TQLabel *styleLabel =
new TQLabel( adjustBox );
305 styleLabel->setText( i18n(
"Textstyle:" ) );
306 styleLabel->setAlignment( AlignRight | AlignVCenter );
308 m_frameStyle =
new TQComboBox( adjustBox );
309 m_style =
new TQComboBox( adjustBox );
310 updateAllStyleCombos();
312 connect( m_frameStyle, TQ_SIGNAL( activated(
int) ),
this, TQ_SLOT( selectFrameStyle(
int) ) );
313 connect( m_style, TQ_SIGNAL( activated(
int) ),
this, TQ_SLOT( selectStyle(
int) ) );
315 m_changeFrameStyleButton =
new TQPushButton( adjustBox );
316 m_changeFrameStyleButton->setText( i18n(
"Change..." ) );
317 connect( m_changeFrameStyleButton, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( changeFrameStyle() ) );
319 m_changeStyleButton =
new TQPushButton( adjustBox );
320 m_changeStyleButton->setText( i18n(
"Change..." ) );
321 connect( m_changeStyleButton, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( changeStyle() ) );
323 adjustLayout->addWidget( frameStyleLabel, 0, 0 );
324 adjustLayout->addWidget( styleLabel, 1, 0 );
326 adjustLayout->addWidget( m_frameStyle, 0, 1 );
327 adjustLayout->addWidget( m_style, 1, 1 );
329 adjustLayout->addWidget( m_changeFrameStyleButton, 0, 2 );
330 adjustLayout->addWidget( m_changeStyleButton, 1, 2 );
332 adjustBox->setMaximumHeight(120);
333 mainLayout->addMultiCellWidget( adjustBox, 2, 2, 0, 1);
336void KWTableStyleManager::switchStyle()
338 kdDebug() <<
"KWTableStyleManager::switchStyle noSignals=" << noSignals << endl;
339 if(noSignals)
return;
342 if(m_currentTableStyle !=0L)
345 m_currentTableStyle = 0L;
346 int num = tableStyleIndex( m_stylesList->currentItem() );
348 kdDebug() <<
"KWTableStyleManager::switchStyle switching to " << num << endl;
349 if( m_tableStyles.at(num)->origTableStyle() == m_tableStyles.at(num)->changedTableStyle() )
350 m_tableStyles.at(num)->switchStyle();
352 m_currentTableStyle = m_tableStyles.at(num)->changedTableStyle();
359int KWTableStyleManager::tableStyleIndex(
int pos )
362 for(
unsigned int i=0; i < m_tableStyles.count(); i++) {
364 KWTableStyle * style = m_tableStyles.at(i)->changedTableStyle();
365 if ( !style )
continue;
370 kdWarning() <<
"KWTableStyleManager::tableStyleIndex no style found at pos " << pos << endl;
373#warning implement undo/redo
379void KWTableStyleManager::updateGUI()
381 kdDebug() <<
"KWTableStyleManager::updateGUI m_currentTableStyle=" << m_currentTableStyle <<
" " << m_currentTableStyle->name() << endl;
384 m_nameString->setText(m_currentTableStyle->displayName());
386 if ( m_doc->styleCollection()->findStyle( m_currentTableStyle->paragraphStyle()->name() ) )
387 m_style->setCurrentText(m_currentTableStyle->paragraphStyle()->displayName());
388 if ( m_doc->frameStyleCollection()->findStyle( m_currentTableStyle->frameStyle()->name() ) )
389 m_frameStyle->setCurrentText(m_currentTableStyle->frameStyle()->displayName());
392 m_deleteButton->setEnabled(m_stylesList->currentItem() != 0);
394 m_moveUpButton->setEnabled(m_stylesList->currentItem() != 0);
395 m_moveDownButton->setEnabled(m_stylesList->currentItem()!=(
int)m_stylesList->count()-1);
400void KWTableStyleManager::updatePreview()
402 preview->setTableStyle(m_currentTableStyle);
405void KWTableStyleManager::save()
407 m_currentTableStyle->setDisplayName( m_nameString->text() );
410void KWTableStyleManager::addStyle()
413 KWTableStyleCollection* collection = m_doc->tableStyleCollection();
415 TQString str = i18n(
"New Tablestyle Template (%1)" ).arg(numTableStyles++);
416 if ( m_currentTableStyle )
418 m_currentTableStyle =
new KWTableStyle( *m_currentTableStyle );
419 m_currentTableStyle->setDisplayName( str );
423 KWTableStyle* defaultTableStyle = collection->
findStyle( collection->defaultStyleName() );
424 Q_ASSERT( defaultTableStyle );
426 KWFrameStyle *defaultFrameStyle = defaultTableStyle->frameStyle();
427 KoParagStyle *defaultParagraphStyle = defaultTableStyle->paragraphStyle();
429 m_currentTableStyle =
new KWTableStyle( str, defaultParagraphStyle, defaultFrameStyle );
431 m_currentTableStyle->setName( collection->generateUniqueName() );
434 m_tableStyles.append(
new KWTableStyleListItem(0L,m_currentTableStyle));
435 m_stylesList->insertItem( str );
436 m_styleOrder << m_currentTableStyle->name();
437 m_stylesList->setCurrentItem( m_stylesList->count() - 1 );
443void KWTableStyleManager::importFromFile()
446 for (
unsigned int i = 0; i<m_stylesList->count();i++)
448 lst << m_stylesList->text(i );
451 KWImportFrameTableStyleDia dia( m_doc, lst, KWImportFrameTableStyleDia::TableStyle,
this, 0 );
452 if ( dia.listOfTableStyleImported().count() > 0 && dia.exec() ) {
453 TQPtrList<KWTableStyle> list = dia.listOfTableStyleImported();
458void KWTableStyleManager::addStyles(
const TQPtrList<KWTableStyle> &listStyle )
462 TQPtrListIterator<KWTableStyle> style( listStyle );
463 for ( ; style.current() ; ++style )
466 m_stylesList->insertItem( style.current()->displayName() );
467 m_styleOrder << style.current()->name();
468 m_tableStyles.append(
new KWTableStyleListItem( 0L,
new KWTableStyle(*style.current())) );
477void KWTableStyleManager::deleteStyle()
479 Q_ASSERT( m_currentTableStyle );
481 unsigned int cur = tableStyleIndex( m_stylesList->currentItem() );
482 m_styleOrder.remove( m_currentTableStyle->name() );
483 if ( !m_tableStyles.at(cur)->origTableStyle() )
484 m_tableStyles.take( cur );
486 m_tableStyles.at(cur)->deleteStyle( m_currentTableStyle );
487 m_currentTableStyle = 0L;
491 m_stylesList->removeItem( m_stylesList->currentItem() );
493 m_stylesList->setSelected( m_stylesList->currentItem(),
true );
496void KWTableStyleManager::moveUpStyle()
498 Q_ASSERT( m_currentTableStyle );
499 if ( m_currentTableStyle )
502 const TQString currentStyleName = m_currentTableStyle->name();
503 const TQString currentStyleDisplayName = m_stylesList->currentText();
504 int pos2 = m_styleOrder.findIndex( currentStyleName );
507 m_styleOrder.remove( m_styleOrder.at(pos2) );
508 m_styleOrder.insert( m_styleOrder.at(pos2-1), currentStyleName );
512 int pos = m_stylesList->currentItem();
514 m_stylesList->changeItem( m_stylesList->text( pos-1 ), pos );
516 m_stylesList->changeItem( currentStyleDisplayName, pos-1 );
518 m_stylesList->setCurrentItem( m_stylesList->currentItem() );
524void KWTableStyleManager::moveDownStyle()
526 Q_ASSERT( m_currentTableStyle );
527 if ( m_currentTableStyle )
530 const TQString currentStyleName = m_currentTableStyle->name();
531 const TQString currentStyleDisplayName = m_stylesList->currentText();
532 int pos2 = m_styleOrder.findIndex( currentStyleName );
535 m_styleOrder.remove( m_styleOrder.at(pos2) );
536 m_styleOrder.insert( m_styleOrder.at(pos2+1), currentStyleName );
539 int pos = m_stylesList->currentItem();
541 m_stylesList->changeItem( m_stylesList->text( pos+1 ), pos );
542 m_stylesList->changeItem( currentStyleDisplayName, pos+1 );
543 m_stylesList->setCurrentItem( m_stylesList->currentItem() );
549void KWTableStyleManager::slotOk() {
552 KDialogBase::slotOk();
555void KWTableStyleManager::slotApply() {
558 KDialogBase::slotApply();
561void KWTableStyleManager::apply() {
563 for (
unsigned int i =0 ; i < m_tableStyles.count() ; i++) {
564 if(m_tableStyles.at(i)->origTableStyle() == 0) {
565 kdDebug() <<
"adding new tablestyle" << m_tableStyles.at(i)->changedTableStyle()->name() <<
" (" << i <<
")" << endl;
566 KWTableStyle *tmp = m_doc->tableStyleCollection()->addStyle( m_tableStyles.take(i)->changedTableStyle() );
567 m_tableStyles.insert(i,
new KWTableStyleListItem(0, tmp) );
568 }
else if(m_tableStyles.at(i)->changedTableStyle() == 0) {
569 kdDebug() <<
"deleting orig tablestyle " << m_tableStyles.at(i)->origTableStyle()->name() <<
" (" << i <<
")" << endl;
571 KWTableStyle *orig = m_tableStyles.at(i)->origTableStyle();
572 m_doc->tableStyleCollection()->removeStyle( orig );
574 kdDebug() <<
"update tablestyle " << m_tableStyles.at(i)->changedTableStyle()->name() <<
" (" << i <<
")" << endl;
576 m_tableStyles.at(i)->apply();
579 m_doc->tableStyleCollection()->updateStyleListOrder( m_styleOrder );
580 m_doc->updateAllTableStyleLists();
581 m_doc->setModified(
true );
585void KWTableStyleManager::renameStyle(
const TQString &theText) {
586 if(noSignals)
return;
589 int index = m_stylesList->currentItem();
590 kdDebug() <<
"KWTableStyleManager::renameStyle " << index <<
" to " << theText << endl;
593 m_stylesList->changeItem( theText, index );
597 for (
unsigned int i = 0; i < m_stylesList->count(); i++ ) {
598 if ( m_stylesList->text( i ) == m_stylesList->currentText() )
601 Q_ASSERT( synonyms > 0 );
604 bool state=!theText.isEmpty() && (synonyms == 1);
605 enableButtonOK(state );
606 enableButtonApply(state);
607 enableButton( KDialogBase::User1, state );
608 m_deleteButton->setEnabled(state&&(m_stylesList->currentItem() != 0));
609 m_newButton->setEnabled(state);
610 m_stylesList->setEnabled( state );
613 m_moveUpButton->setEnabled(m_stylesList->currentItem() != 0);
614 m_moveDownButton->setEnabled(m_stylesList->currentItem()!=(
int)m_stylesList->count()-1);
618 m_moveUpButton->setEnabled(
false);
619 m_moveDownButton->setEnabled(
false);
626void KWTableStyleManager::changeFrameStyle()
632 KWFrameStyleManager frameStylist(
this, m_doc, m_currentTableStyle->frameStyle()->name() );
636 updateAllStyleCombos();
642void KWTableStyleManager::changeStyle()
648 KWStyleManager styleManager(
this, m_doc->unit(), m_doc, *m_doc->styleCollection());
652 updateAllStyleCombos();
656void KWTableStyleManager::updateAllStyleCombos()
658 unsigned int oldSindex = 0;
659 unsigned int oldFSindex = 0;
663 if (m_style->currentItem()>=0) {
664 oldSindex = m_style->currentItem();
665 oldS = m_style->currentText();
667 if (m_frameStyle->currentItem()>=0) {
668 oldFSindex = m_frameStyle->currentItem();
669 oldFS = m_frameStyle->currentText();
679 if ( (
static_cast<unsigned int>(m_style->count())!=m_doc->styleCollection()->styleList().count() ) &&
680 ( m_style->listBox()->findItem( oldS ) ) ) {
681 oldSindex = m_style->listBox()->index( m_style->listBox()->findItem( oldS ) );
683 if ( ( m_frameStyle->count() != m_doc->frameStyleCollection()->count() ) &&
684 ( m_frameStyle->listBox()->findItem( oldFS ) ) ) {
685 oldFSindex = m_frameStyle->listBox()->index( m_frameStyle->listBox()->findItem( oldFS ) );
690 m_frameStyle->clear();
691 m_frameStyle->insertStringList( m_doc->frameStyleCollection()->displayNameList() );
692 m_frameStyle->setCurrentItem( oldFSindex );
695 m_style->insertStringList( m_doc->styleCollection()->displayNameList() );
696 m_style->setCurrentItem( oldSindex );
699void KWTableStyleManager::selectFrameStyle(
int index)
701 kdDebug() <<
"KWTableStyleManager::selectFrameStyle index " << index << endl;
703 if ( (index>=0) && ( index < (
int)m_doc->frameStyleCollection()->count() ) )
704 m_currentTableStyle->setFrameStyle( m_doc->frameStyleCollection()->frameStyleAt(index) );
709void KWTableStyleManager::selectStyle(
int index)
711 kdDebug() <<
"KWTableStyleManager::selectStyle index " << index << endl;
712 if ( (index>=0) && ( index < (
int)m_doc->styleCollection()->styleList().count() ) )
713 m_currentTableStyle->setParagraphStyle( m_doc->styleCollection()->styleAt(index) );
KWTableStyle * findStyle(const TQString &name) const
Find style based on the untranslated name name.
Table style (can created/modified/deleted by the user) A table style is simply a paragraph style and ...