20#include "karbon_view.h"
22#include <tqdragobject.h>
24#include <tqapplication.h>
25#include <tqclipboard.h>
26#include <tqpopupmenu.h>
27#include <tqpaintdevicemetrics.h>
31#include <kcolordrag.h>
33#include <kiconloader.h>
34#include <tdemessagebox.h>
37#include <KoMainWindow.h>
38#include <KoFilterManager.h>
39#include <kstatusbar.h>
40#include <tdefiledialog.h>
41#include <kstdaction.h>
42#include <KoContextCelp.h>
43#include <KoUnitWidgets.h>
44#include <KoPageLayoutDia.h>
46#include <Kolinestyleaction.h>
50#include "vcleanupcmd.h"
51#include "vclipartcmd.h"
52#include "vclosepathcmd.h"
53#include "vdeletecmd.h"
54#include "vdistributecmd.h"
57#include "vstrokecmd.h"
58#include "vtransformcmd.h"
59#include "vinsertcmd.h"
60#include "vungroupcmd.h"
61#include "vzordercmd.h"
64#include "vconfiguredlg.h"
67#include <kopalettemanager.h>
68#include "vcolordocker.h"
69#include "vdocumentdocker.h"
70#include "vstrokedocker.h"
71#include "vstyledocker.h"
72#include "vtransformdocker.h"
78#include "vsmallpreview.h"
81#include "karbon_factory.h"
82#include "karbon_part.h"
83#include "karbon_view_iface.h"
85#include "vselection.h"
87#include "vtoolcontroller.h"
88#include "vcomposite.h"
90#include "vpainterfactory.h"
92#include "vkopainter.h"
93#include "vstrokefillpreview.h"
94#include "vtypebuttonbox.h"
95#include "vstatebutton.h"
98#include "karbon_drag.h"
106const int rulerWidth = 20;
107const int rulerHeight = 20;
109KarbonView::KarbonView(
KarbonPart* p, TQWidget* parent,
const char* name )
110 : KoView( p, parent, name ), KXMLGUIBuilder( shell() ), m_part( p )
113 m_toolController =
new VToolController(
this );
114 m_toolController->init();
116 setInstance( KarbonFactory::instance(),
true );
118 setClientBuilder(
this );
120 if( !p->isReadWrite() )
121 setXMLFile( TQString::fromLatin1(
"karbon_readonly.rc" ) );
123 setXMLFile( TQString::fromLatin1(
"karbon.rc" ) );
129 m_status =
new KStatusBarLabel( TQString(), 0, statusBar() );
130 m_status->setAlignment( AlignLeft | AlignVCenter );
131 m_status->setMinimumWidth( 300 );
132 addStatusBarItem( m_status, 1 );
133 m_cursorCoords =
new KStatusBarLabel( TQString(), 0, statusBar() );
134 m_cursorCoords->setAlignment( AlignLeft | AlignVCenter );
135 m_cursorCoords->setMinimumWidth( 50 );
136 addStatusBarItem( m_cursorCoords, 0 );
137 m_smallPreview =
new VSmallPreview(
this, name );
138 addStatusBarItem( m_smallPreview );
145 m_strokeFillPreview = 0L;
149 m_TransformDocker = 0L;
154 m_pPaletteManager =
new KoPaletteManager(
this, actionCollection(),
"karbon palette manager");
156 unsigned int max = part()->maxRecentFiles();
157 setNumberOfRecentFiles( max );
161 connect( p, TQ_SIGNAL( unitChanged( KoUnit::Unit ) ),
this, TQ_SLOT( setUnit( KoUnit::Unit ) ) );
164 m_horizRuler =
new VRuler( TQt::Horizontal,
this );
165 m_horizRuler->setUnit(p->unit());
166 connect( p, TQ_SIGNAL( unitChanged( KoUnit::Unit ) ), m_horizRuler, TQ_SLOT( setUnit( KoUnit::Unit ) ) );
168 m_vertRuler =
new VRuler( TQt::Vertical,
this );
169 m_vertRuler->setUnit(p->unit());
170 connect( p, TQ_SIGNAL( unitChanged( KoUnit::Unit ) ), m_vertRuler, TQ_SLOT( setUnit( KoUnit::Unit ) ) );
172 m_canvas =
new VCanvas(
this,
this, p );
173 connect( m_canvas, TQ_SIGNAL( contentsMoving(
int,
int ) ),
this, TQ_SLOT( canvasContentsMoving(
int,
int ) ) );
178 m_painterFactory =
new VPainterFactory;
179 m_painterFactory->setPainter( canvasWidget()->pixmap(), width(), height() );
180 m_painterFactory->setEditPainter( canvasWidget()->viewport(), width(), height() );
187 createTransformDock();
188 createDocumentTabDock();
189 createLayersTabDock();
190 createHistoryTabDock();
191 createResourceDock();
193 if( m_showRulerAction->isChecked() )
195 m_horizRuler->show();
200 m_horizRuler->hide();
204 m_horizRuler->installEventFilter(m_canvas);
205 m_vertRuler->installEventFilter(m_canvas);
211KarbonView::~KarbonView()
213 kdDebug(38000) <<
"Handling KarbonView dtor" << endl;
216 delete m_smallPreview;
218 delete m_cursorCoords;
220 delete m_painterFactory;
226 delete m_toolController;
229static TQt::Dock stringToDock(
const TQString& attrPosition )
231 TDEToolBar::Dock dock = TDEToolBar::DockTop;
232 if ( !attrPosition.isEmpty() ) {
233 if ( attrPosition ==
"top" )
235 else if ( attrPosition ==
"left" )
236 dock = TQt::DockLeft;
237 else if ( attrPosition ==
"right" )
238 dock = TQt::DockRight;
239 else if ( attrPosition ==
"bottom" )
240 dock = TQt::DockBottom;
241 else if ( attrPosition ==
"floating" )
242 dock = TQt::DockTornOff;
243 else if ( attrPosition ==
"flat" )
244 dock = TQt::DockMinimized;
251KarbonView::createContainer( TQWidget *parent,
int index,
const TQDomElement &element,
int &
id )
253 if( element.attribute(
"name" ) ==
"Tools" )
255 m_toolbox =
new VToolBox( mainWindow(),
"Tools", KarbonFactory::instance() );
256 toolController()->setUp( actionCollection(), m_toolbox );
258 kdDebug() <<
"Toolbox position: " << element.attribute(
"position" ) <<
"\n";
259 Dock dock = stringToDock( element.attribute(
"position" ).lower() );
261 mainWindow()->addDockWindow( m_toolbox, dock,
false);
262 mainWindow()->moveDockWindow( m_toolbox, dock,
false, 0, 0 );
268 m_strokeFillPreview =
new VStrokeFillPreview( part(), m_toolbox );
269 m_typeButtonBox =
new VTypeButtonBox( part(), m_toolbox );
271 connect( m_strokeFillPreview, TQ_SIGNAL( fillSelected() ), m_typeButtonBox, TQ_SLOT( setFill() ) );
272 connect( m_strokeFillPreview, TQ_SIGNAL( strokeSelected() ), m_typeButtonBox, TQ_SLOT( setStroke() ) );
274 connect( m_strokeFillPreview, TQ_SIGNAL( strokeChanged(
const VStroke & ) ),
this, TQ_SLOT( slotStrokeChanged(
const VStroke & ) ) );
275 connect( m_strokeFillPreview, TQ_SIGNAL( fillChanged(
const VFill & ) ),
this, TQ_SLOT( slotFillChanged(
const VFill & ) ) );
277 connect( m_strokeFillPreview, TQ_SIGNAL( strokeSelected() ), m_ColorManager, TQ_SLOT( setStrokeDocker() ) );
278 connect( m_strokeFillPreview, TQ_SIGNAL( fillSelected( ) ), m_ColorManager, TQ_SLOT( setFillDocker() ) );
280 connect( m_part->commandHistory(), TQ_SIGNAL( commandExecuted( VCommand* ) ),
this, TQ_SLOT( commandExecuted( VCommand* ) ) );
282 connect( m_ColorManager, TQ_SIGNAL(modeChanged( KDualColorButton::DualColor)),
this, TQ_SLOT( strokeFillSelectionChanged(KDualColorButton::DualColor) ) );
283 connect( m_ColorManager, TQ_SIGNAL(bgColorChanged(
const TQColor & )),
this, TQ_SLOT(colorChanged(
const TQColor & )) );
284 connect( m_ColorManager, TQ_SIGNAL(fgColorChanged(
const TQColor & )),
this, TQ_SLOT(colorChanged(
const TQColor & )) );
293 return KXMLGUIBuilder::createContainer( parent, index, element,
id );
297KarbonView::removeContainer( TQWidget *container, TQWidget *parent,
298 TQDomElement &element,
int id )
301 kdDebug(38000) << container << endl;
303 if( shell() && container == m_toolbox )
305 disconnect( m_part->commandHistory(), TQ_SIGNAL( commandExecuted( VCommand* ) ),
this, TQ_SLOT( commandExecuted( VCommand* ) ) );
306 disconnect( m_ColorManager, TQ_SIGNAL(modeChanged( KDualColorButton::DualColor)),
this, TQ_SLOT( strokeFillSelectionChanged(KDualColorButton::DualColor) ) );
307 disconnect( m_ColorManager, TQ_SIGNAL(bgColorChanged(
const TQColor & )),
this, TQ_SLOT(colorChanged(
const TQColor & )) );
308 disconnect( m_ColorManager, TQ_SIGNAL(fgColorChanged(
const TQColor & )),
this, TQ_SLOT(colorChanged(
const TQColor & )) );
311 m_toolController->youAintGotNoToolBox();
313 m_strokeFillPreview = 0;
320 KXMLGUIBuilder::removeContainer( container, parent, element,
id );
325KarbonView::dcopObject()
328 m_dcop =
new KarbonViewIface(
this );
334KarbonView::canvas()
const
340KarbonView::resizeEvent( TQResizeEvent* )
342 if( shell() && m_showRulerAction->isChecked())
344 m_canvas->setGeometry( rulerWidth, rulerHeight, width() - rulerWidth, height() - rulerHeight );
349 m_horizRuler->hide();
351 m_canvas->setGeometry( 0, 0, width(), height() );
359KarbonView::dropEvent( TQDropEvent *e )
364 VObjectList selection;
366 if( KColorDrag::decode( e, color ) )
368 float r = color.red() / 255.0;
369 float g = color.green() / 255.0;
370 float b = color.blue() / 255.0;
372 realcolor.
set( r, g, b );
375 if( m_strokeFillPreview->strokeIsSelected() )
376 part()->addCommand(
new VStrokeCmd( &part()->document(), realcolor ),
true );
378 part()->addCommand(
new VFillCmd( &part()->document(), realcolor ),
true );
380 else if( KarbonDrag::decode( e, selection, m_part->document() ) )
382 VObject *clipart = selection.first();
383 KoPoint p( e->pos() );
384 p = m_canvas->toContents( p );
385 TQWMatrix mat( 1, 0, 0, 1, p.x(), p.y() );
387 VTransformCmd trafo( 0L, mat );
388 trafo.visit( *clipart );
389 VClipartCmd* cmd =
new VClipartCmd( &m_part->document(), i18n(
"Insert Clipart" ), clipart );
391 m_part->addCommand( cmd,
true );
396KarbonView::print( KPrinter &printer )
399 kdDebug(38000) <<
"KarbonView::print" << endl;
401 TQPaintDeviceMetrics metrics( ( TQPaintDevice * ) & printer );
402 printer.setFullPage(
true );
404 KoPageLayout pageLayout = part()->pageLayout();
405 printer.setOrientation( pageLayout.orientation == PG_PORTRAIT ? KPrinter::Portrait : KPrinter::Landscape );
406 printer.setPageSize( (KPrinter::PageSize)KoPageFormat::printerPageSize( pageLayout.format ) );
409 double zoom = metrics.logicalDpiX() / 72.0;
413 mat.translate( 0, -part()->document().height()*zoom );
415 double w = zoom*part()->document().width();
416 double h = zoom*part()->document().height();
418 KoRect rect( 0, 0, w, h );
420 TQPixmap img(
static_cast<int>( w ),
static_cast<int>( h ) );
423 VKoPainter kop( ( TQPaintDevice * )&img,
static_cast<int>( w ),
static_cast<int>( h ) );
425 kop.setZoomFactor( zoom );
426 kop.setWorldMatrix( mat );
430 part()->document().draw( &kop, &rect );
440 p.drawPixmap( 0, 0, img );
445KarbonView::fileImportGraphic()
448 filter <<
"application/x-karbon" <<
"image/svg+xml" <<
"image/x-wmf" <<
"image/x-eps" <<
"application/postscript";
449 KFileDialog *dialog =
new KFileDialog(
"foo", TQString(), 0L,
"Choose Graphic to Add",
true);
450 dialog->setMimeFilter( filter,
"application/x-karbon" );
451 if(dialog->exec()!=TQDialog::Accepted) {
455 TQString fname = dialog->selectedFile();
459 if( part()->nativeFormatMimeType() == dialog->currentMimeFilter().latin1() )
460 part()->mergeNativeFormat( fname );
463 KoFilterManager man( part() );
464 KoFilter::ConversionStatus status;
465 TQString importedFile = man.import( fname, status );
466 part()->mergeNativeFormat( importedFile );
467 if( !importedFile.isEmpty() )
468 unlink( TQFile::encodeName( importedFile ) );
471 part()->repaintAllViews();
477 addSelectionToClipboard();
479 editDeleteSelection();
483KarbonView::editCopy()
485 addSelectionToClipboard();
489KarbonView::addSelectionToClipboard()
const
491 if( part()->document().selection()->objects().count() <= 0 )
494 KarbonDrag* kd =
new KarbonDrag();
495 kd->setObjectList( part()->document().selection()->objects() );
496 TQApplication::clipboard()->setData( kd );
500KarbonView::editPaste()
505 if( !kd.decode( TQApplication::clipboard()->data(), objects, part()->document() ) )
509 double copyOffset = part()->instance()->config()->readNumEntry(
"CopyOffset", 10 );
510 part()->addCommand(
new VInsertCmd( &part()->document(),
512 ? i18n(
"Paste Object" )
513 : i18n(
"Paste Objects" ),
514 &objects, copyOffset ),
517 part()->repaintAllViews();
522KarbonView::editSelectAll()
524 part()->document().selection()->append();
526 if( part()->document().selection()->objects().count() > 0 )
527 part()->repaintAllViews();
533KarbonView::editDeselectAll()
535 if( part()->document().selection()->objects().count() > 0 )
537 part()->document().selection()->clear();
538 part()->repaintAllViews();
545KarbonView::editDeleteSelection()
547 kdDebug(38000) <<
"*********" << endl;
549 if( part()->document().selection()->objects().count() > 0 )
552 new VDeleteCmd( &part()->document() ),
558KarbonView::editPurgeHistory()
562 if( KMessageBox::warningContinueCancel(
this,
563 i18n(
"This action cannot be undone later. Do you really want to continue?" ),
564 i18n(
"Purge History" ),
566 "edit_purge_history" ) )
570 VCleanUpCmd cmd( &part()->document() );
573 part()->clearHistory();
578KarbonView::selectionAlignHorizontalLeft()
581 new VAlignCmd( &part()->document(), VAlignCmd::ALIGN_HORIZONTAL_LEFT ),
true );
584KarbonView::selectionAlignHorizontalCenter()
587 new VAlignCmd( &part()->document(), VAlignCmd::ALIGN_HORIZONTAL_CENTER ),
true );
591KarbonView::selectionAlignHorizontalRight()
594 new VAlignCmd( &part()->document(), VAlignCmd::ALIGN_HORIZONTAL_RIGHT ),
true );
598KarbonView::selectionAlignVerticalTop()
601 new VAlignCmd( &part()->document(), VAlignCmd::ALIGN_VERTICAL_TOP ),
true );
605KarbonView::selectionAlignVerticalCenter()
608 new VAlignCmd( &part()->document(), VAlignCmd::ALIGN_VERTICAL_CENTER ),
true );
612KarbonView::selectionAlignVerticalBottom()
615 new VAlignCmd( &part()->document(), VAlignCmd::ALIGN_VERTICAL_BOTTOM ),
true );
619KarbonView::selectionDistributeHorizontalCenter()
622 new VDistributeCmd( &part()->document(), VDistributeCmd::DISTRIBUTE_HORIZONTAL_CENTER ),
true );
626KarbonView::selectionDistributeHorizontalGap()
629 new VDistributeCmd( &part()->document(), VDistributeCmd::DISTRIBUTE_HORIZONTAL_GAP ),
true );
633KarbonView::selectionDistributeHorizontalLeft()
636 new VDistributeCmd( &part()->document(), VDistributeCmd::DISTRIBUTE_HORIZONTAL_LEFT ),
true );
640KarbonView::selectionDistributeHorizontalRight()
643 new VDistributeCmd( &part()->document(), VDistributeCmd::DISTRIBUTE_HORIZONTAL_RIGHT ),
true );
647KarbonView::selectionDistributeVerticalCenter()
650 new VDistributeCmd( &part()->document(), VDistributeCmd::DISTRIBUTE_VERTICAL_CENTER ),
true );
654KarbonView::selectionDistributeVerticalGap()
657 new VDistributeCmd( &part()->document(), VDistributeCmd::DISTRIBUTE_VERTICAL_GAP ),
true );
661KarbonView::selectionDistributeVerticalBottom()
664 new VDistributeCmd( &part()->document(), VDistributeCmd::DISTRIBUTE_VERTICAL_BOTTOM ),
true );
668KarbonView::selectionDistributeVerticalTop()
671 new VDistributeCmd( &part()->document(), VDistributeCmd::DISTRIBUTE_VERTICAL_TOP ),
true );
675KarbonView::selectionDuplicate()
677 if ( !part()->document().selection()->objects().count() )
683 VObjectListIterator itr( part()->document().selection()->objects() );
684 for ( ; itr.current() ; ++itr ) {
685 objects.append( itr.current()->clone() );
689 double copyOffset = part()->instance()->config()->readNumEntry(
"CopyOffset", 10 );
690 part()->addCommand(
new VInsertCmd( &part()->document(),
692 ? i18n(
"Duplicate Object" )
693 : i18n(
"Duplicate Objects" ),
694 &objects, copyOffset ),
697 part()->repaintAllViews();
702KarbonView::selectionBringToFront()
705 new VZOrderCmd( &part()->document(), VZOrderCmd::bringToFront ),
true );
709KarbonView::selectionMoveUp()
712 new VZOrderCmd( &part()->document(), VZOrderCmd::up ),
true );
716KarbonView::selectionMoveDown()
719 new VZOrderCmd( &part()->document(), VZOrderCmd::down ),
true );
723KarbonView::selectionSendToBack()
726 new VZOrderCmd( &part()->document(), VZOrderCmd::sendToBack ),
true );
730KarbonView::groupSelection()
732 part()->addCommand(
new VGroupCmd( &part()->document() ),
true );
736KarbonView::ungroupSelection()
738 part()->addCommand(
new VUnGroupCmd( &part()->document() ),
true );
742KarbonView::closePath()
744 part()->addCommand(
new VClosePathCmd( &part()->document() ),
true );
748KarbonView::slotActiveToolChanged(
VTool *tool )
750 toolController()->setCurrentTool( tool );
752 m_canvas->repaintAll();
756KarbonView::viewModeChanged()
758 canvasWidget()->pixmap()->fill();
760 if( m_viewAction->currentItem() == 1 )
761 m_painterFactory->setWireframePainter( canvasWidget()->pixmap(), width(), height() );
763 m_painterFactory->setPainter( canvasWidget()->pixmap(), width(), height() );
765 m_canvas->repaintAll();
769KarbonView::setZoomAt(
double zoom,
const KoPoint &p )
771 TQString zoomText = TQString(
"%1%" ).arg( zoom * 100.0, 0,
'f', 2 );
772 TQStringList stl = m_zoomAction->items();
773 if( stl.first() ==
"25%" )
775 stl.prepend( zoomText.latin1() );
776 m_zoomAction->setItems( stl );
777 m_zoomAction->setCurrentItem( 0 );
781 m_zoomAction->setCurrentItem( 0 );
782 m_zoomAction->changeItem( m_zoomAction->currentItem(), zoomText.latin1() );
788KarbonView::viewZoomIn()
790 setZoomAt( zoom() * 1.50 );
794KarbonView::viewZoomOut()
796 setZoomAt( zoom() * 0.75 );
800KarbonView::zoomChanged(
const KoPoint &p )
808 centerX = ( ( p.x() ) * zoom() + m_canvas->pageOffsetX() ) / double( m_canvas->contentsWidth() );
809 centerY = 1 - ( ( p.y() ) * zoom() + m_canvas->pageOffsetY() ) / double( m_canvas->contentsHeight() );
810 zoomFactor = m_zoomAction->currentText().remove(
'%' ).toDouble() / 100.0;
812 else if( m_zoomAction->currentText() == i18n(
"Zoom Width") )
815 centerY = double( m_canvas->contentsY() + 0.5 * m_canvas->visibleHeight() ) / double( m_canvas->contentsHeight() );
816 zoomFactor = double( m_canvas->visibleWidth() ) / double( part()->document().width() );
818 else if( m_zoomAction->currentText() == i18n(
"Whole Page") )
822 double zoomFactorX = double( m_canvas->visibleWidth() ) / double( part()->document().width() );
823 double zoomFactorY = double( m_canvas->visibleHeight() ) / double( part()->document().height() );
825 if(zoomFactorX < 0 && zoomFactorY > 0)
826 zoomFactor = zoomFactorY;
827 else if(zoomFactorX > 0 && zoomFactorY < 0)
828 zoomFactor = zoomFactorX;
829 else if(zoomFactorX < 0 && zoomFactorY < 0)
832 zoomFactor = kMin( zoomFactorX, zoomFactorY );
836 if( m_canvas->contentsWidth() > m_canvas->visibleWidth() )
837 centerX = double( m_canvas->contentsX() + 0.5 * m_canvas->visibleWidth() ) / double( m_canvas->contentsWidth() );
840 if( m_canvas->contentsHeight() > m_canvas->visibleHeight() )
841 centerY = double( m_canvas->contentsY() + 0.5 * m_canvas->visibleHeight() ) / double( m_canvas->contentsHeight() );
844 zoomFactor = m_zoomAction->currentText().remove(
'%' ).toDouble() / 100.0;
846 kdDebug(38000) <<
"centerX : " << centerX << endl;
847 kdDebug(38000) <<
"centerY : " << centerY << endl;
848 kdDebug(38000) <<
"zoomFactor : " << zoomFactor << endl;
849 if( zoomFactor == 0.0 )
return;
852 if( zoomFactor > 20 )
855 m_zoomAction->changeItem( m_zoomAction->currentItem(),
" 2000%" );
858 KoView::setZoom( zoomFactor );
860 m_canvas->viewport()->setUpdatesEnabled(
false );
862 m_canvas->resizeContents(
int( ( part()->pageLayout().ptWidth + 300 ) * zoomFactor ),
863 int( ( part()->pageLayout().ptHeight + 460 ) * zoomFactor ) );
866 VPainter *painter = painterFactory()->editpainter();
867 painter->setZoomFactor( zoomFactor );
869 m_canvas->setViewport( centerX, centerY );
870 m_canvas->repaintAll();
871 m_canvas->viewport()->setUpdatesEnabled(
true );
874 if( shell() && m_showRulerAction->isChecked() )
876 m_horizRuler->setZoom( zoomFactor );
877 m_vertRuler->setZoom( zoomFactor );
878 m_canvas->setGeometry( rulerWidth, rulerHeight, width() - rulerWidth, height() - rulerHeight );
883 m_horizRuler->hide();
886 m_canvas->viewport()->setFocus();
888 emit zoomChanged( zoomFactor );
892KarbonView::setLineStyle(
int style )
894 TQValueList<float> dashes;
895 if( style == TQt::NoPen )
896 part()->addCommand(
new VStrokeCmd( &part()->document(), dashes << 0 << 20 ),
true );
897 else if( style == TQt::SolidLine )
898 part()->addCommand(
new VStrokeCmd( &part()->document(), dashes ),
true );
899 else if( style == TQt::DashLine )
900 part()->addCommand(
new VStrokeCmd( &part()->document(), dashes << 12 << 6 ),
true );
901 else if( style == TQt::DotLine )
902 part()->addCommand(
new VStrokeCmd( &part()->document(), dashes << 2 << 2 ),
true );
903 else if( style == TQt::DashDotLine )
904 part()->addCommand(
new VStrokeCmd( &part()->document(), dashes << 12 << 2 << 2 << 2 ),
true );
905 else if( style == TQt::DashDotDotLine )
906 part()->addCommand(
new VStrokeCmd( &part()->document(), dashes << 12 << 2 << 2 << 2 << 2 << 2 ),
true );
910KarbonView::slotStrokeChanged(
const VStroke &c )
912 part()->document().selection()->setStroke( c );
917KarbonView::slotFillChanged(
const VFill &f )
919 part()->document().selection()->setFill( f );
924KarbonView::setLineWidth()
926 setLineWidth( m_setLineWidth->value() );
932KarbonView::setLineWidth(
double val )
934 part()->addCommand(
new VStrokeCmd( &part()->document(), val ),
true );
938KarbonView::initActions()
941 m_viewAction =
new TDESelectAction(
942 i18n(
"View &Mode" ), 0,
this,
943 TQ_SLOT( viewModeChanged() ), actionCollection(),
"view_mode" );
945 m_zoomAction =
new TDESelectAction(
946 i18n(
"&Zoom" ),
"viewmag", 0,
this,
947 TQ_SLOT( zoomChanged() ), actionCollection(),
"view_zoom" );
950 mstl << i18n(
"Normal" ) << i18n(
"Wireframe" );
951 m_viewAction->setItems( mstl );
952 m_viewAction->setCurrentItem( 0 );
953 m_viewAction->setEditable(
false );
957 stl << i18n(
"25%" );
959 stl << i18n(
"50%" );
961 stl << i18n(
"100%" );
963 stl << i18n(
"200%" );
965 stl << i18n(
"300%" );
967 stl << i18n(
"400%" );
969 stl << i18n(
"800%" );
970 stl << i18n(
"Whole Page" )
971 << i18n(
"Zoom Width" );
973 m_zoomAction->setItems( stl );
974 m_zoomAction->setEditable(
true );
975 m_zoomAction->setCurrentItem( 7 );
977 KStdAction::zoomIn(
this, TQ_SLOT( viewZoomIn() ), actionCollection(),
"view_zoom_in" );
978 KStdAction::zoomOut(
this, TQ_SLOT( viewZoomOut() ), actionCollection(),
"view_zoom_out" );
980 m_showPageMargins =
new TDEToggleAction( i18n(
"Show Page Margins"),
"view_margins", 0, actionCollection(),
"view_show_margins" );
981 connect( m_showPageMargins, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(togglePageMargins(
bool)));
982 m_showPageMargins->setCheckedState(i18n(
"Hide Page Margins"));
989 KStdAction::cut(
this,
990 TQ_SLOT( editCut() ), actionCollection(),
"edit_cut" );
991 KStdAction::copy(
this,
992 TQ_SLOT( editCopy() ), actionCollection(),
"edit_copy" );
993 KStdAction::paste(
this,
994 TQ_SLOT( editPaste() ), actionCollection(),
"edit_paste" );
995 KStdAction::selectAll(
this, TQ_SLOT( editSelectAll() ), actionCollection(),
"edit_select_all" );
996 KStdAction::deselect(
this, TQ_SLOT( editDeselectAll() ), actionCollection(),
"edit_deselect_all" );
999 i18n(
"&Import Graphic..." ), 0, 0,
this,
1000 TQ_SLOT( fileImportGraphic() ), actionCollection(),
"file_import" );
1001 m_deleteSelectionAction =
new TDEAction(
1002 i18n(
"D&elete" ),
"edit-delete", TQKeySequence(
"Del" ),
this,
1003 TQ_SLOT( editDeleteSelection() ), actionCollection(),
"edit_delete" );
1005 i18n(
"&History" ), 0, 0,
this,
1006 TQ_SLOT( editPurgeHistory() ), actionCollection(),
"edit_purge_history" );
1011 i18n(
"&Duplicate" ),
"duplicate", TQKeySequence(
"Ctrl+D" ),
this,
1012 TQ_SLOT( selectionDuplicate() ), actionCollection(),
"object_duplicate" );
1014 i18n(
"Bring to &Front" ),
"bring_forward", TQKeySequence(
"Ctrl+Shift+]" ),
this,
1015 TQ_SLOT( selectionBringToFront() ), actionCollection(),
"object_move_totop" );
1017 i18n(
"&Raise" ),
"raise", TQKeySequence(
"Ctrl+]" ),
this,
1018 TQ_SLOT( selectionMoveUp() ), actionCollection(),
"object_move_up" );
1020 i18n(
"&Lower" ),
"lower", TQKeySequence(
"Ctrl+[" ),
this,
1021 TQ_SLOT( selectionMoveDown() ), actionCollection(),
"object_move_down" );
1023 i18n(
"Send to &Back" ),
"send_backward", TQKeySequence(
"Ctrl+Shift+[" ),
this,
1024 TQ_SLOT( selectionSendToBack() ), actionCollection(),
"object_move_tobottom" );
1027 i18n(
"Align Left" ),
"aoleft", 0,
this,
1028 TQ_SLOT( selectionAlignHorizontalLeft() ),
1029 actionCollection(),
"object_align_horizontal_left" );
1031 i18n(
"Align Center (Horizontal)" ),
"aocenterh", 0,
this,
1032 TQ_SLOT( selectionAlignHorizontalCenter() ),
1033 actionCollection(),
"object_align_horizontal_center" );
1035 i18n(
"Align Right" ),
"aoright", 0,
this,
1036 TQ_SLOT( selectionAlignHorizontalRight() ),
1037 actionCollection(),
"object_align_horizontal_right" );
1039 i18n(
"Align Top" ),
"aotop", 0,
this,
1040 TQ_SLOT( selectionAlignVerticalTop() ),
1041 actionCollection(),
"object_align_vertical_top" );
1043 i18n(
"Align Middle (Vertical)" ),
"aocenterv", 0,
this,
1044 TQ_SLOT( selectionAlignVerticalCenter() ),
1045 actionCollection(),
"object_align_vertical_center" );
1047 i18n(
"Align Bottom" ),
"aobottom", 0,
this,
1048 TQ_SLOT( selectionAlignVerticalBottom() ),
1049 actionCollection(),
"object_align_vertical_bottom" );
1052 i18n(
"Distribute Center (Horizontal)" ),
"", 0,
this,
1053 TQ_SLOT( selectionDistributeHorizontalCenter() ),
1054 actionCollection(),
"object_distribute_horizontal_center" );
1056 i18n(
"Distribute Gaps (Horizontal)" ),
"", 0,
this,
1057 TQ_SLOT( selectionDistributeHorizontalGap() ),
1058 actionCollection(),
"object_distribute_horizontal_gap" );
1060 i18n(
"Distribute Left Borders" ),
"", 0,
this,
1061 TQ_SLOT( selectionDistributeHorizontalLeft() ),
1062 actionCollection(),
"object_distribute_horizontal_left" );
1064 i18n(
"Distribute Right Borders" ),
"", 0,
this,
1065 TQ_SLOT( selectionDistributeHorizontalRight() ),
1066 actionCollection(),
"object_distribute_horizontal_right" );
1068 i18n(
"Distribute Center (Vertical)" ),
"", 0,
this,
1069 TQ_SLOT( selectionDistributeVerticalCenter() ),
1070 actionCollection(),
"object_distribute_vertical_center" );
1072 i18n(
"Distribute Gaps (Vertical)" ),
"", 0,
this,
1073 TQ_SLOT( selectionDistributeVerticalGap() ),
1074 actionCollection(),
"object_distribute_vertical_gap" );
1076 i18n(
"Distribute Bottom Borders" ),
"", 0,
this,
1077 TQ_SLOT( selectionDistributeVerticalBottom() ),
1078 actionCollection(),
"object_distribute_vertical_bottom" );
1080 i18n(
"Distribute Top Borders" ),
"", 0,
this,
1081 TQ_SLOT( selectionDistributeVerticalTop() ),
1082 actionCollection(),
"object_distribute_vertical_top" );
1084 m_showRulerAction =
new TDEToggleAction( i18n(
"Show Rulers" ), 0,
this, TQ_SLOT( showRuler() ), actionCollection(),
"view_show_ruler" );
1085 m_showRulerAction->setCheckedState(i18n(
"Hide Rulers"));
1086 m_showRulerAction->setToolTip( i18n(
"Shows or hides rulers." ) );
1087 m_showRulerAction->setChecked(
false );
1088 m_showGridAction =
new TDEToggleAction( i18n(
"Show Grid" ),
"view_grid",
this, TQ_SLOT( showGrid() ), actionCollection(),
"view_show_grid" );
1089 m_showGridAction->setCheckedState(i18n(
"Hide Grid"));
1090 m_showGridAction->setToolTip( i18n(
"Shows or hides grid." ) );
1092 m_snapGridAction =
new TDEToggleAction( i18n(
"Snap to Grid" ), 0,
this, TQ_SLOT( snapToGrid() ), actionCollection(),
"view_snap_to_grid" );
1093 m_snapGridAction->setToolTip( i18n(
"Snaps to grid." ) );
1095 m_groupObjects =
new TDEAction(
1096 i18n(
"&Group Objects" ),
"group", TQKeySequence(
"Ctrl+G" ),
this,
1097 TQ_SLOT( groupSelection() ), actionCollection(),
"selection_group" );
1098 m_ungroupObjects =
new TDEAction(
1099 i18n(
"&Ungroup Objects" ),
"ungroup", TQKeySequence(
"Ctrl+Shift+G" ),
this,
1100 TQ_SLOT( ungroupSelection() ), actionCollection(),
"selection_ungroup" );
1101 m_closePath =
new TDEAction(
1102 i18n(
"&Close Path" ), TQKeySequence(
"Ctrl+U" ),
this,
1103 TQ_SLOT( closePath() ), actionCollection(),
"close_path" );
1107 m_lineStyleAction =
new KoLineStyleAction( i18n(
"Line Style" ),
"linestyle",
this, TQ_SLOT( setLineStyle(
int ) ), actionCollection(),
"setLineStyle" );
1110 m_setLineWidth =
new KoUnitDoubleSpinComboBox(
this, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 1 );
1111 new KWidgetAction( m_setLineWidth, i18n(
"Set Line Width" ), 0,
this, TQ_SLOT( setLineWidth() ), actionCollection(),
"setLineWidth" );
1112 m_setLineWidth->insertItem( 0.25 );
1113 m_setLineWidth->insertItem( 0.5 );
1114 m_setLineWidth->insertItem( 0.75 );
1115 m_setLineWidth->insertItem( 1.0 );
1116 m_setLineWidth->insertItem( 2.0 );
1117 m_setLineWidth->insertItem( 3.0 );
1118 m_setLineWidth->insertItem( 4.0 );
1119 m_setLineWidth->insertItem( 5.0 );
1120 m_setLineWidth->insertItem( 10.0 );
1121 m_setLineWidth->insertItem( 20.0 );
1122 connect( m_setLineWidth, TQ_SIGNAL( valueChanged(
double ) ),
this, TQ_SLOT( setLineWidth() ) );
1124 m_configureAction =
new TDEAction(
1125 i18n(
"Configure Karbon..." ),
"configure", 0,
this,
1126 TQ_SLOT( configure() ), actionCollection(),
"configure" );
1128 new TDEAction( i18n(
"Page &Layout..." ), 0,
this,
1129 TQ_SLOT( pageLayout() ), actionCollection(),
"page_layout" );
1130 m_contextHelpAction =
new KoContextHelpAction( actionCollection(),
this );
1134KarbonView::paintEverything( TQPainter& ,
const TQRect& ,
bool )
1136 kdDebug(38000) <<
"view->paintEverything()" << endl;
1140KarbonView::mouseEvent( TQMouseEvent* event,
const KoPoint &p )
1142 int mx =
event->pos().x();
1143 int my =
event->pos().y();
1147 if( m_canvas->horizontalScrollBar()->isVisible() && ((m_canvas->horizontalScrollBar()->value() - m_canvas->pageOffsetX()) > 0))
1150 px = (mx + canvasWidget()->contentsX() - canvasWidget()->pageOffsetX());
1152 if( m_canvas->verticalScrollBar()->isVisible() && ((m_canvas->verticalScrollBar()->value() - m_canvas->pageOffsetY()) > 0))
1155 py = (my + canvasWidget()->contentsY() - canvasWidget()->pageOffsetY());
1157 m_horizRuler->updatePointer(px, py);
1158 m_vertRuler->updatePointer(px, py);
1161 xy.setX((mx + canvasWidget()->contentsX() - canvasWidget()->pageOffsetX())/zoom());
1162 xy.setY( tqRound(m_part->document().height()) - (my + canvasWidget()->contentsY() - canvasWidget()->pageOffsetY())/zoom());
1164 xy.setX(KoUnit::toUserValue(xy.x(), part()->unit()));
1165 xy.setY(KoUnit::toUserValue(xy.y(), part()->unit()));
1167 m_cursorCoords->setText( TQString(
"%1, %2" ).arg(TDEGlobal::_locale->formatNumber(xy.x(), 2)).arg(TDEGlobal::_locale->formatNumber(xy.y(), 2)) );
1169 if( toolController() )
1170 return toolController()->mouseEvent( event, p );
1176KarbonView::keyEvent( TQEvent* event )
1178 if( toolController() )
1179 return toolController()->keyEvent( event );
1185KarbonView::reorganizeGUI()
1189 if( part()->showStatusBar() )
1190 statusBar()->show();
1192 statusBar()->hide();
1197KarbonView::setNumberOfRecentFiles(
unsigned int number )
1200 shell()->setMaxRecentItems( number );
1204KarbonView::showRuler()
1206 if( shell() && m_showRulerAction->isChecked() )
1208 m_horizRuler->show();
1209 m_vertRuler->show();
1210 m_canvas->setGeometry( rulerWidth, rulerHeight, width() - rulerWidth, height() - rulerHeight );
1215 m_horizRuler->hide();
1216 m_vertRuler->hide();
1217 m_canvas->setGeometry( 0, 0, width(), height() );
1224KarbonView::showPageMargins()
1226 return ((TDEToggleAction*)actionCollection()->action(
"view_show_margins"))->isChecked();
1230KarbonView::togglePageMargins(
bool b)
1232 ((TDEToggleAction*)actionCollection()->action(
"view_show_margins"))->setChecked(b);
1233 m_canvas->repaintAll();
1237KarbonView::updateRuler()
1239 if(!m_canvas->horizontalScrollBar()->isVisible())
1241 if( (1 + m_canvas->pageOffsetX() - m_canvas->contentsX()) >= 0 )
1243 m_horizRuler->setGeometry( 1 + rulerWidth + m_canvas->pageOffsetX() - m_canvas->contentsX(), 0, tqRound( 1 + part()->document().width() * zoom() ), rulerHeight );
1244 m_horizRuler->updateVisibleArea(0,0);
1248 m_horizRuler->setGeometry( rulerWidth, 0, tqRound( 1 + part()->document().width() * zoom() ) - m_canvas->contentsX() + m_canvas->pageOffsetX(), rulerHeight );
1249 m_horizRuler->updateVisibleArea((m_canvas->contentsX() - m_canvas->pageOffsetX()),0);
1253 if(!m_canvas->verticalScrollBar()->isVisible())
1255 if( (1 + m_canvas->pageOffsetY() - m_canvas->contentsY()) >= 0 )
1257 m_vertRuler->setGeometry( 0, 1 + rulerHeight + m_canvas->pageOffsetY() - m_canvas->contentsY(), rulerWidth, 1 + tqRound( part()->document().height() * zoom() ));
1258 m_vertRuler->updateVisibleArea(0,0);
1262 m_vertRuler->setGeometry( 0, 1 + rulerHeight, rulerWidth, 1 + tqRound( part()->document().height() * zoom() ) + m_canvas->contentsY() - m_canvas->pageOffsetY() );
1263 m_vertRuler->updateVisibleArea(0, (m_canvas->contentsY() - m_canvas->pageOffsetY()));
1269KarbonView::showGrid()
1271 m_part->document().grid().isShow = m_showGridAction->isChecked();
1275KarbonView::snapToGrid()
1277 m_part->document().grid().isSnap = m_snapGridAction->isChecked();
1281KarbonView::showSelectionPopupMenu(
const TQPoint &pos )
1283 TQPtrList<TDEAction> actionList;
1284 if( m_groupObjects->isEnabled() )
1285 actionList.append( m_groupObjects );
1286 else if( m_ungroupObjects->isEnabled() )
1287 actionList.append( m_ungroupObjects );
1288 if( m_closePath->isEnabled() )
1289 actionList.append( m_closePath );
1290 plugActionList(
"selection_type_action", actionList );
1291 ((TQPopupMenu *)factory()->container(
"selection_popup",
this ) )->exec( pos );
1292 unplugActionList(
"selection_type_action" );
1296KarbonView::configure()
1298 VConfigureDlg dialog(
this );
1303KarbonView::pageLayout()
1306 KoPageLayout layout = part()->pageLayout();
1307 KoUnit::Unit unit = part()->unit();
1308 if( KoPageLayoutDia::pageLayout( layout, hf, FORMAT_AND_BORDERS | DISABLE_UNIT, unit ) )
1310 part()->setPageLayout( layout, unit );
1311 m_horizRuler->setUnit( unit );
1312 m_vertRuler->setUnit( unit );
1313 m_canvas->resizeContents(
int( ( part()->pageLayout().ptWidth + 300 ) * zoom() ),
1314 int( ( part()->pageLayout().ptHeight + 460 ) * zoom() ) );
1315 part()->repaintAllViews();
1317 emit pageLayoutChanged();
1322KarbonView::canvasContentsMoving(
int x,
int y )
1324 if( m_canvas->horizontalScrollBar()->isVisible() )
1326 if( shell() && m_showRulerAction->isChecked() )
1328 if( (1 + m_canvas->pageOffsetX() - x) >= 0)
1330 m_horizRuler->setGeometry( 1 + rulerWidth + m_canvas->pageOffsetX() - x, 0, tqRound( 1 + part()->document().width() * zoom() ), rulerHeight );
1331 m_horizRuler->updateVisibleArea(0,0);
1335 m_horizRuler->setGeometry( rulerWidth, 0, tqRound( 1 + part()->document().width() * zoom() ) - x + m_canvas->pageOffsetX(), rulerHeight );
1336 m_horizRuler->updateVisibleArea((x - m_canvas->pageOffsetX()),0);
1341 if( m_canvas->verticalScrollBar()->isVisible() )
1343 if( shell() && m_showRulerAction->isChecked() )
1345 if( (1 + m_canvas->pageOffsetY() - y) >= 0)
1347 m_vertRuler->setGeometry( 0, 1 + rulerHeight + m_canvas->pageOffsetY() - y , rulerWidth, 1 + tqRound( part()->document().height() * zoom() ));
1348 m_vertRuler->updateVisibleArea(0,0);
1352 m_vertRuler->setGeometry( 0, 1 + rulerHeight, rulerWidth, 1 + tqRound( part()->document().height() * zoom() ) - y + m_canvas->pageOffsetY() );
1353 m_vertRuler->updateVisibleArea(0, (y - m_canvas->pageOffsetY()));
1360KarbonView::selectionChanged()
1362 VSelection *selection = part()->document().selection();
1363 int count = selection->
objects().count();
1364 m_groupObjects->setEnabled(
false );
1365 m_closePath->setEnabled(
false );
1366 m_ungroupObjects->setEnabled(
false );
1370 VObject *obj = selection->
objects().getFirst();
1371 VFill fill = obj->
fill() ? *obj->
fill() : VFill();
1372 VStroke stroke = obj->
stroke() ? *obj->
stroke() : VStroke();
1376 m_strokeFillPreview->update( stroke, fill );
1377 m_smallPreview->update( stroke, fill );
1380 m_strokeDocker->setStroke( stroke );
1384 VGroup *group =
dynamic_cast<VGroup *
>( selection->
objects().getFirst() );
1385 m_ungroupObjects->setEnabled( group );
1386 VPath *path =
dynamic_cast<VPath *
>( selection->
objects().getFirst() );
1387 m_closePath->setEnabled( path && !path->isClosed() );
1390 m_groupObjects->setEnabled(
true );
1394 m_setLineWidth->setEnabled(
true );
1395 m_setLineWidth->updateValue( stroke.lineWidth() );
1397 m_lineStyleAction->setEnabled(
true );
1398 if( stroke.dashPattern().array().isEmpty() )
1399 m_lineStyleAction->setCurrentSelection( TQt::SolidLine );
1400 else if( stroke.dashPattern().array()[ 0 ] == 0. )
1401 m_lineStyleAction->setCurrentSelection( TQt::NoPen );
1402 else if( stroke.dashPattern().array()[ 0 ] == 2. )
1403 m_lineStyleAction->setCurrentSelection( TQt::DotLine );
1404 else if( stroke.dashPattern().array().count() == 2 )
1405 m_lineStyleAction->setCurrentSelection( TQt::DashLine );
1406 else if( stroke.dashPattern().array().count() == 4 )
1407 m_lineStyleAction->setCurrentSelection( TQt::DashDotLine );
1408 else if( stroke.dashPattern().array().count() == 6 )
1409 m_lineStyleAction->setCurrentSelection( TQt::DashDotDotLine );
1411 m_deleteSelectionAction->setEnabled(
true );
1417 VFill fill = selection->
fill() ? *selection->
fill() : VFill();
1418 VStroke stroke = selection->
stroke() ? *selection->
stroke() : VStroke();
1420 m_strokeFillPreview->update( stroke, fill );
1422 m_lineStyleAction->setEnabled(
false );
1423 m_deleteSelectionAction->setEnabled(
false );
1425 emit selectionChange();
1428KarbonView::setCursor(
const TQCursor &c )
1430 m_canvas->setCursor( c );
1434KarbonView::repaintAll(
const KoRect &r )
1436 m_canvas->repaintAll( r );
1440KarbonView::repaintAll(
bool repaint )
1442 m_canvas->repaintAll( repaint );
1445KarbonView::setPos(
const KoPoint& p )
1447 m_canvas->setPos( p );
1451KarbonView::setViewportRect(
const KoRect &rect )
1453 m_canvas->setViewportRect( rect );
1457KarbonView::setUnit( KoUnit::Unit )
1461void KarbonView::createDocumentTabDock()
1463 m_DocumentTab =
new VDocumentTab(
this,
this);
1464 m_DocumentTab->setCaption(i18n(
"Document"));
1465 paletteManager()->addWidget(m_DocumentTab,
"DocumentTabDock",
"DocumentPanel");
1466 connect( m_part, TQ_SIGNAL( unitChanged( KoUnit::Unit ) ), m_DocumentTab, TQ_SLOT( updateDocumentInfo() ) );
1469void KarbonView::createLayersTabDock()
1471 m_LayersTab =
new VLayersTab(
this,
this);
1472 m_LayersTab->setCaption(i18n(
"Layers"));
1473 paletteManager()->addWidget(m_LayersTab,
"LayersTabDock",
"DocumentPanel");
1476void KarbonView::createHistoryTabDock()
1478 m_HistoryTab =
new VHistoryTab(part(),
this);
1479 m_HistoryTab->setCaption(i18n(
"History"));
1480 paletteManager()->addWidget(m_HistoryTab,
"HistoryTabDock",
"DocumentPanel");
1483void KarbonView::createStrokeDock()
1485 m_strokeDocker =
new VStrokeDocker(part(),
this);
1486 m_strokeDocker->setCaption(i18n(
"Stroke Properties"));
1487 paletteManager()->addWidget(m_strokeDocker,
"StrokeTabDock",
"StrokePanel");
1489 connect( part(), TQ_SIGNAL( unitChanged( KoUnit::Unit ) ), m_strokeDocker, TQ_SLOT( setUnit( KoUnit::Unit ) ) );
1492void KarbonView::createColorDock()
1494 m_ColorManager =
new VColorDocker(part(),
this);
1496 paletteManager()->addWidget(m_ColorManager,
"ColorTabDock",
"ColorPanel");
1498 connect(
this, TQ_SIGNAL( selectionChange() ), m_ColorManager, TQ_SLOT( update() ) );
1501void KarbonView::createTransformDock()
1503 m_TransformDocker =
new VTransformDocker(part(),
this);
1504 m_TransformDocker->setCaption(i18n(
"Transform"));
1505 paletteManager()->addWidget(m_TransformDocker,
"TransformTabDock",
"TransformPanel");
1507 connect(
this, TQ_SIGNAL( selectionChange() ), m_TransformDocker, TQ_SLOT( update() ) );
1508 connect( part(), TQ_SIGNAL( unitChanged( KoUnit::Unit ) ), m_TransformDocker, TQ_SLOT( setUnit( KoUnit::Unit ) ) );
1511void KarbonView::createResourceDock()
1513 m_styleDocker =
new VStyleDocker( part(),
this );
1514 m_styleDocker->setCaption(i18n(
"Resources"));
1515 paletteManager()->addWidget(m_styleDocker,
"ResourceTabDock",
"ResourcePanel");
1519KarbonView::toolController()
1521 return m_toolController;
1524void KarbonView::commandExecuted(
VCommand *command )
1530void KarbonView::strokeFillSelectionChanged( KDualColorButton::DualColor s )
1532 if( s == KDualColorButton::Foreground )
1533 m_strokeFillPreview->setStrokeSelected();
1535 m_strokeFillPreview->setFillSelected();
1539void KarbonView::colorChanged(
const TQColor &c )
1544#include "karbon_view.moc"
Keeps track of visual per document properties.
void set(float v1)
Sets the first color component.
The base class for all karbon commands.
virtual bool changesSelection() const
Returns if the command changes the actual document selection.
Manages the fill of shapes.
virtual void setStroke(const VStroke &stroke)
Sets the stroke to a given new stroke.
virtual VFill * fill() const
Gets the object's actual fill.
virtual VStroke * stroke() const
Gets the object's actual stroke.
virtual void setFill(const VFill &fill)
Sets the fill to a given new fill.
const VObjectList & objects() const
Read only access to the selected objects.
Manages stroke properties.