23#include <tqtabwidget.h>
25#include <tqhbuttongroup.h>
26#include <tqtoolbutton.h>
29#include <kiconloader.h>
30#include <KoMainWindow.h>
31#include <KoFilterManager.h>
32#include <tdefiledialog.h>
34#include "karbon_part.h"
35#include "karbon_view.h"
36#include "karbon_factory.h"
37#include "karbon_resourceserver.h"
38#include "karbon_drag.h"
39#include "vselection.h"
43#include "vtransformcmd.h"
45#include "vstyledocker.h"
49ClipartChooser::ClipartChooser( TQSize iconSize, TQWidget *parent,
const char *name )
50 : KoIconChooser( iconSize, parent, name )
52 setDragEnabled(
true );
56ClipartChooser::startDrag()
58 KoIconChooser::startDrag();
59 KarbonDrag* kd =
new KarbonDrag(
this );
61 VClipartIconItem *selectedClipart = (VClipartIconItem *)currentItem();
62 double s = kMax( selectedClipart->originalWidth(), selectedClipart->originalHeight() );
65 TQWMatrix mat( s, 0, 0, -s, -( s / 2 ), ( s / 2 ) );
67 VTransformCmd trafo( 0L, mat );
68 trafo.visit( *clipart );
70 objects.append( clipart );
71 kd->setObjectList( objects );
75VStyleDocker::VStyleDocker(
KarbonPart* part, KarbonView* parent,
const char* )
76 : TQWidget(), m_part ( part ), m_view( parent )
78 setCaption( i18n(
"Resources" ) );
80 mTabWidget =
new TQTabWidget(
this );
83 KoPatternChooser *pPatternChooser =
new KoPatternChooser( KarbonFactory::rServer()->patterns(), mTabWidget );
84 pPatternChooser->setCaption( i18n(
"Patterns" ) );
86 connect( pPatternChooser, TQ_SIGNAL(selected( KoIconItem * ) ),
this, TQ_SLOT( slotItemSelected( KoIconItem * )));
87 connect( KarbonFactory::rServer(), TQ_SIGNAL( patternAdded( KoIconItem * )), pPatternChooser, TQ_SLOT( addPattern( KoIconItem * )));
88 connect( KarbonFactory::rServer(), TQ_SIGNAL( patternRemoved( KoIconItem * )), pPatternChooser, TQ_SLOT( removePattern( KoIconItem * )));
89 mTabWidget->addTab( pPatternChooser, i18n(
"Patterns" ) );
92 ClipartWidget *pClipartWidget =
new ClipartWidget( KarbonFactory::rServer()->cliparts(), part, mTabWidget );
93 mTabWidget->addTab( pClipartWidget, i18n(
"Clipart" ) );
95 TQVBoxLayout *mainWidgetLayout =
new TQVBoxLayout(
this, 2 );
96 mainWidgetLayout->addWidget( mTabWidget );
97 mainWidgetLayout->activate();
98 setMinimumHeight( 174 );
99 setMinimumWidth( 194 );
102VStyleDocker::~VStyleDocker()
106void VStyleDocker::slotItemSelected( KoIconItem *item )
108 VPattern *pattern = (VPattern *)item;
109 if( !pattern )
return;
110 kdDebug(38000) <<
"loading pattern : " << pattern->tilename().latin1() << endl;
111 if( m_part && m_part->document().selection() )
114 fill.pattern() = *pattern;
117 m_part->addCommand(
new VFillCmd( &m_part->document(), fill ),
true );
122VStyleDocker::mouseReleaseEvent( TQMouseEvent * )
126ClipartWidget::ClipartWidget( TQPtrList<VClipartIconItem>* clipartItems,
KarbonPart *part, TQWidget* parent )
127 : TQWidget( parent ), m_part( part )
131 TQVBoxLayout* layout =
new TQVBoxLayout(
this );
132 layout->addWidget( m_clipartChooser =
new ClipartChooser( TQSize( 32, 32 ),
this ) );
133 layout->addWidget( m_buttonGroup =
new TQHButtonGroup(
this ) );
134 TQToolButton* m_addClipartButton;
135 m_buttonGroup->insert( m_addClipartButton =
new TQToolButton( m_buttonGroup ) );
136 m_buttonGroup->insert( m_importClipartButton =
new TQToolButton( m_buttonGroup ) );
137 m_buttonGroup->insert( m_deleteClipartButton =
new TQToolButton( m_buttonGroup ) );
138 m_addClipartButton->setIconSet( SmallIcon(
"14_layer_newlayer" ) );
139 m_addClipartButton->setTextLabel( i18n(
"Add" ) );
140 m_importClipartButton->setIconSet( SmallIcon(
"fileimport" ) );
141 m_importClipartButton->setTextLabel( i18n(
"Import" ) );
142 m_deleteClipartButton->setIconSet( SmallIcon(
"14_layer_deletelayer" ) );
143 m_deleteClipartButton->setTextLabel( i18n(
"Delete" ) );
145 m_buttonGroup->setInsideMargin( 3 );
148 layout->setMargin( 3 );
150 connect( m_buttonGroup, TQ_SIGNAL( clicked(
int ) ),
this, TQ_SLOT( slotButtonClicked(
int ) ) );
152 connect( m_clipartChooser, TQ_SIGNAL( selected( KoIconItem* ) ),
this, TQ_SLOT( clipartSelected( KoIconItem* ) ) );
154 m_clipartChooser->setAutoDelete(
false );
155 VClipartIconItem* item = 0L;
157 for( item = clipartItems->first(); item; item = clipartItems->next() )
158 m_clipartChooser->addItem( item );
160 m_clipartItem = ( clipartItems->first() ) ? clipartItems->first()->clone() : 0;
162 m_deleteClipartButton->setEnabled(
false );
165ClipartWidget::~ClipartWidget()
167 delete m_clipartItem;
170VClipartIconItem* ClipartWidget::selectedClipart()
172 return m_clipartItem;
176ClipartWidget::clipartSelected( KoIconItem* item )
180 delete m_clipartItem;
181 VClipartIconItem* clipartItem = ( VClipartIconItem* ) item;
182 m_deleteClipartButton->setEnabled( clipartItem->canDelete() );
183 m_selectedItem = clipartItem;
184 m_clipartItem = clipartItem->clone();
189ClipartWidget::addClipart()
194 if( selection->
objects().count() == 1 )
196 clipart = selection->
objects().getFirst()->clone();
200 if( selection->
objects().count() > 1 )
202 TQPtrVector<VObject> objects;
203 selection->
objects().toVector( &objects );
206 for(
unsigned int i = 0; i < objects.count(); i++ )
219 double scaleFactor = 1. / kMax( clipartBox.width(), clipartBox.height() );
220 TQWMatrix trMatrix( scaleFactor, 0, 0, scaleFactor, -clipartBox.x() * scaleFactor, -clipartBox.y() * scaleFactor );
222 VTransformCmd trafo( 0L, trMatrix );
223 trafo.visit( *clipart );
228 trMatrix.translate( ( size - clipart->
boundingBox().width() ) / 2, ( size - clipart->
boundingBox().height() ) / 2 );
230 trafo.setMatrix( trMatrix );
231 trafo.visit( *clipart );
235 trMatrix.scale( 1, -1 );
236 trMatrix.translate( 0, -1 );
238 trafo.setMatrix( trMatrix );
239 trafo.visit( *clipart );
241 m_clipartChooser->addItem( KarbonFactory::rServer()->addClipart( clipart, clipartBox.width(), clipartBox.height() ) );
244 m_clipartChooser->updateContents();
248ClipartWidget::importClipart()
251 filter <<
"application/x-karbon" <<
"image/svg+xml" <<
"image/x-wmf" <<
"image/x-eps" <<
"application/postscript";
252 KFileDialog *dialog =
new KFileDialog(
"foo", TQString(), 0L,
"Choose Graphic to Add",
true);
253 dialog->setMimeFilter( filter,
"application/x-karbon" );
254 if( dialog->exec()!=TQDialog::Accepted )
259 TQString fname = dialog->selectedFile();
261 if( m_part->nativeFormatMimeType() == dialog->currentMimeFilter().latin1() )
262 m_part->mergeNativeFormat( fname );
265 KoFilterManager man( m_part );
266 KoFilter::ConversionStatus status;
267 TQString importedFile = man.import( fname, status );
268 if( status == KoFilter::OK )
269 m_part->mergeNativeFormat( importedFile );
270 if( !importedFile.isEmpty() )
271 unlink( TQFile::encodeName( importedFile ) );
272 if( status != KoFilter::OK )
275 m_part->document().selection()->clear();
276 m_part->document().selection()->append( m_part->document().activeLayer()->objects() );
278 m_part->document().selection()->clear();
279 m_part->document().removeLayer( m_part->document().activeLayer() );
283ClipartWidget::deleteClipart()
285 VClipartIconItem* clipartItem = m_clipartItem;
286 KarbonFactory::rServer()->removeClipart( clipartItem );
287 m_clipartChooser->removeItem( m_selectedItem );
288 m_clipartChooser->updateContents();
292ClipartWidget::slotButtonClicked(
int id )
296 case 0: addClipart();
break;
297 case 1: importClipart();
break;
298 case 2: deleteClipart();
302#include "vstyledocker.moc"
Keeps track of visual per document properties.
VSelection * selection() const
Returns a pointer to the selection.
Manages the fill of shapes.
Base class for all sort of VObject conglomerats.
void append(VObject *object)
Appends a new child object.
The base class for all karbon objects.
virtual VObject * clone() const =0
Create an exact copy of this object.
void setParent(VObject *parent)
Sets a new parent object.
virtual const KoRect & boundingBox() const
Calculates the tightest bounding box around the object.
VDocument * document() const
Return document the object belongs to.
VSelection manages a set of selected vobjects.
const VObjectList & objects() const
Read only access to the selected objects.