• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

kig

  • sources
  • kde-4.12
  • kdeedu
  • kig
  • kig
kig_part.cpp
Go to the documentation of this file.
1 
21 #include "kig_part.h"
22 #include "kig_part.moc"
23 
24 #include "aboutdata.h"
25 #include "kig_commands.h"
26 #include "kig_document.h"
27 #include "kig_view.h"
28 
29 #include "../filters/exporter.h"
30 #include "../filters/filter.h"
31 #include "../misc/builtin_stuff.h"
32 #include "../misc/calcpaths.h"
33 #include "../misc/coordinate_system.h"
34 #include "../misc/guiaction.h"
35 #include "../misc/kigcoordinateprecisiondialog.h"
36 #include "../misc/kigpainter.h"
37 #include "../misc/lists.h"
38 #include "../misc/object_constructor.h"
39 #include "../misc/screeninfo.h"
40 #include "../modes/normal.h"
41 #include "../objects/object_drawer.h"
42 #include "../objects/point_imp.h"
43 
44 #include <algorithm>
45 #include <functional>
46 #include <iterator>
47 
48 #include <kaction.h>
49 #include <kdebug.h>
50 #include <kdemacros.h>
51 #include <kfiledialog.h>
52 #include <kglobal.h>
53 #include <kiconloader.h>
54 #include <kcomponentdata.h>
55 #include <klocale.h>
56 #include <kxmlguiwindow.h>
57 #include <kactioncollection.h>
58 #include <kmessagebox.h>
59 #include <kmimetype.h>
60 #include <kstandarddirs.h>
61 #include <kstandardaction.h>
62 #include <ktoggleaction.h>
63 #include <ktogglefullscreenaction.h>
64 #include <kundostack.h>
65 #include <kparts/genericfactory.h>
66 #include <kicon.h>
67 #include <kdeprintdialog.h>
68 #include <kprintpreview.h>
69 
70 #include <qbytearray.h>
71 #include <qcheckbox.h>
72 #include <qeventloop.h>
73 #include <qfile.h>
74 #include <qlayout.h>
75 #include <qsizepolicy.h>
76 #include <qtimer.h>
77 #include <QtGui/QPrinter>
78 #include <QtGui/QPrintDialog>
79 
80 using namespace std;
81 
82 static const QString typesFile = "macros.kigt";
83 
84 // export this library...
85 K_PLUGIN_FACTORY( KigPartFactory, registerPlugin< KigPart >(); )
86 K_EXPORT_PLUGIN( KigPartFactory( kigAboutData( "kig", I18N_NOOP( "KigPart" ) ) ) )
87 
88 SetCoordinateSystemAction::SetCoordinateSystemAction(
89  KigPart& d, KActionCollection* parent )
90  : KSelectAction( i18n( "&Set Coordinate System" ), &d),
91  md( d )
92 {
93  setItems( CoordinateSystemFactory::names() );
94  setCurrentItem( md.document().coordinateSystem().id() );
95  connect( this, SIGNAL( triggered( int ) ), this, SLOT( slotActivated( int ) ) );
96  if(parent)
97  parent->addAction("settings_set_coordinate_system", this);
98 }
99 
100 void SetCoordinateSystemAction::slotActivated( int index )
101 {
102  CoordinateSystem* sys = CoordinateSystemFactory::build( index );
103  assert( sys );
104  md.history()->push( KigCommand::changeCoordSystemCommand( md, sys ) );
105  setCurrentItem( index );
106 }
107 
108 class KigPrintDialogPage
109  : public QWidget
110 {
111 public:
112  KigPrintDialogPage( QWidget* parent = 0 );
113  ~KigPrintDialogPage();
114 
115  bool printShowGrid();
116  void setPrintShowGrid( bool status );
117 
118  bool printShowAxes();
119  void setPrintShowAxes( bool status );
120 
121  bool isValid( QString& );
122 
123 private:
124  QCheckBox *showgrid;
125  QCheckBox *showaxes;
126 };
127 
128 KigPrintDialogPage::KigPrintDialogPage( QWidget* parent )
129  : QWidget( parent )
130 {
131  setWindowTitle( i18n( "Kig Options" ) );
132 
133  QVBoxLayout* vl = new QVBoxLayout( this );
134 
135  showgrid = new QCheckBox( i18n( "Show grid" ), this );
136  vl->addWidget( showgrid );
137 
138  showaxes = new QCheckBox( i18n( "Show axes" ), this );
139  vl->addWidget( showaxes );
140 
141  vl->addItem( new QSpacerItem( 10, 10, QSizePolicy::Fixed, QSizePolicy::Expanding ) );
142 }
143 
144 KigPrintDialogPage::~KigPrintDialogPage()
145 {
146 }
147 
148 bool KigPrintDialogPage::printShowGrid()
149 {
150  return showgrid->isChecked();
151 }
152 
153 void KigPrintDialogPage::setPrintShowGrid( bool status )
154 {
155  showgrid->setChecked( status );
156 }
157 
158 bool KigPrintDialogPage::printShowAxes()
159 {
160  return showaxes->isChecked();
161 }
162 
163 void KigPrintDialogPage::setPrintShowAxes( bool status )
164 {
165  showaxes->setChecked( status );
166 }
167 
168 bool KigPrintDialogPage::isValid( QString& )
169 {
170  return true;
171 }
172 
173 KigPart::KigPart( QWidget *parentWidget, QObject *parent,
174  const QVariantList& )
175  : KParts::ReadWritePart( parent ),
176  mMode( 0 ), mRememberConstruction( 0 ), mdocument( new KigDocument() )
177 {
178  // we need an instance
179  setComponentData( KigPartFactory::componentData() );
180 
181  mMode = new NormalMode( *this );
182 
183  // we need a widget, to actually show the document
184  m_widget = new KigView( this, false, parentWidget );
185  m_widget->setObjectName( "kig_view" );
186  // notify the part that this is our internal widget
187  setWidget( m_widget );
188 
189  // create our actions...
190  setupActions();
191 
192  // set our XML-UI resource file
193  setXMLFile("kigpartui.rc");
194 
195  // our types...
196  setupTypes();
197 
198  // construct our command history
199  mhistory = new KUndoStack();
200  mhistory->createUndoAction( actionCollection() );
201  mhistory->createRedoAction( actionCollection() );
202  connect( mhistory, SIGNAL( cleanChanged( bool ) ), this, SLOT( setHistoryClean( bool ) ) );
203 
204  // we are read-write by default
205  setReadWrite(true);
206 
207  setModified (false);
208 
209  GUIActionList::instance()->regDoc( this );
210 }
211 
212 void KigPart::setupActions()
213 {
214  // save actions..
215  (void) KStandardAction::saveAs(this, SLOT(fileSaveAs()), actionCollection());
216  (void) KStandardAction::save(this, SLOT(fileSave()), actionCollection());
217 
218  // print actions
219  (void) KStandardAction::print( this, SLOT( filePrint() ), actionCollection() );
220  (void) KStandardAction::printPreview( this, SLOT( filePrintPreview() ), actionCollection() );
221 
222  // selection actions
223  aSelectAll = KStandardAction::selectAll(
224  this, SLOT( slotSelectAll() ), actionCollection() );
225  aDeselectAll = KStandardAction::deselect(
226  this, SLOT( slotDeselectAll() ), actionCollection() );
227  aInvertSelection = new KAction(i18n("Invert Selection"), this);
228  actionCollection()->addAction("edit_invert_selection", aInvertSelection );
229  connect(aInvertSelection, SIGNAL(triggered(bool) ), SLOT( slotInvertSelection() ));
230 
231  // we need icons...
232  KIconLoader* l = iconLoader();
233 
234  aDeleteObjects = new KAction(KIcon("edit-delete"), i18n("&Delete Objects"), this);
235  actionCollection()->addAction("delete_objects", aDeleteObjects );
236  connect(aDeleteObjects, SIGNAL(triggered(bool) ), SLOT(deleteObjects()));
237  aDeleteObjects->setShortcut(QKeySequence(Qt::Key_Delete));
238  aDeleteObjects->setToolTip(i18n("Delete the selected objects"));
239 
240  aCancelConstruction = new KAction(KIcon("process-stop"), i18n("Cancel Construction"), this);
241  actionCollection()->addAction("cancel_construction", aCancelConstruction );
242  connect(aCancelConstruction, SIGNAL(triggered(bool) ), SLOT(cancelConstruction()));
243  aCancelConstruction->setShortcut(QKeySequence(Qt::Key_Escape));
244  aCancelConstruction->setToolTip(
245  i18n("Cancel the construction of the object being constructed"));
246  aCancelConstruction->setEnabled(false);
247 
248  aRepeatLastConstruction = new KAction(KIcon("system-run"), i18n("Repeat Construction"), this);
249  actionCollection()->addAction("repeat_last_construction", aRepeatLastConstruction );
250  connect(aRepeatLastConstruction, SIGNAL(triggered(bool) ), SLOT(repeatLastConstruction()));
251  aRepeatLastConstruction->setShortcut(QKeySequence(Qt::Key_Z));
252  aRepeatLastConstruction->setToolTip(
253  i18n("Repeat the last construction (with new data)"));
254  aRepeatLastConstruction->setEnabled(false);
255 
256  aShowHidden = new KAction(i18n("U&nhide All"), this);
257  actionCollection()->addAction("edit_unhide_all", aShowHidden );
258  connect(aShowHidden, SIGNAL(triggered(bool) ), SLOT( showHidden() ));
259  aShowHidden->setToolTip(i18n("Show all hidden objects"));
260  aShowHidden->setEnabled( true );
261 
262  aNewMacro = new KAction(KIcon("system-run"), i18n("&New Macro..."), this);
263  actionCollection()->addAction("macro_action", aNewMacro );
264  connect(aNewMacro, SIGNAL(triggered(bool) ), SLOT(newMacro()));
265  aNewMacro->setToolTip(i18n("Define a new macro"));
266 
267  aConfigureTypes = new KAction(i18n("Manage &Types..."), this);
268  actionCollection()->addAction("types_edit", aConfigureTypes );
269  connect(aConfigureTypes, SIGNAL(triggered(bool) ), SLOT(editTypes()));
270  aConfigureTypes->setToolTip(i18n("Manage macro types."));
271 
272  aBrowseHistory = new KAction(KIcon("view-history"), i18n("&Browse History..."), this);
273  actionCollection()->addAction("browse_history", aBrowseHistory );
274  connect( aBrowseHistory, SIGNAL( triggered( bool ) ), SLOT( browseHistory() ) );
275  aBrowseHistory->setToolTip( i18n( "Browse the history of the current construction." ) );
276 
277  KigExportManager::instance()->addMenuAction( this, m_widget->realWidget(),
278  actionCollection() );
279 
280  QAction * a = KStandardAction::zoomIn( m_widget, SLOT( slotZoomIn() ),
281  actionCollection() );
282  a->setToolTip( i18n( "Zoom in on the document" ) );
283  a->setWhatsThis( i18n( "Zoom in on the document" ) );
284 
285  a = KStandardAction::zoomOut( m_widget, SLOT( slotZoomOut() ),
286  actionCollection() );
287  a->setToolTip( i18n( "Zoom out of the document" ) );
288  a->setWhatsThis( i18n( "Zoom out of the document" ) );
289 
290  a = KStandardAction::fitToPage( m_widget, SLOT( slotRecenterScreen() ),
291  actionCollection() );
292  // grr.. why isn't there an icon for this..
293  a->setIcon( KIcon( "view_fit_to_page", l ) );
294  a->setToolTip( i18n( "Recenter the screen on the document" ) );
295  a->setWhatsThis( i18n( "Recenter the screen on the document" ) );
296 
297  a = actionCollection()->addAction(KStandardAction::FullScreen, "fullscreen", m_widget, SLOT( toggleFullScreen() ));
298  a->setToolTip( i18n( "View this document full-screen." ) );
299  a->setWhatsThis( i18n( "View this document full-screen." ) );
300 
301  // TODO: an icon for this..
302  a = new KAction(KIcon("zoom-fit-best"), i18n("&Select Shown Area"), this);
303  actionCollection()->addAction("view_select_shown_rect", a );
304  connect(a, SIGNAL(triggered(bool) ), m_widget, SLOT( zoomRect() ));
305  a->setToolTip( i18n( "Select the area that you want to be shown in the window." ) );
306  a->setWhatsThis( i18n( "Select the area that you want to be shown in the window." ) );
307 
308  a = new KAction(KIcon("zoom-original"), i18n("S&elect Zoom Area"), this);
309  actionCollection()->addAction("view_zoom_area", a );
310  connect(a, SIGNAL(triggered(bool) ), m_widget, SLOT( zoomArea() ));
311 // a->setToolTip( i18n( "Select the area that you want to be shown in the window." ) );
312 // a->setWhatsThis( i18n( "Select the area that you want to be shown in the window." ) );
313 
314  aSetCoordinatePrecision = new KAction(i18n("Set Coordinate &Precision..."), this);
315  actionCollection()->addAction("settings_set_coordinate_precision", aSetCoordinatePrecision);
316  aSetCoordinatePrecision->setToolTip( i18n("Set the floating point precision of coordinates in the document. " ));
317  connect(aSetCoordinatePrecision, SIGNAL( triggered() ), this, SLOT( setCoordinatePrecision() ));
318 
319  aToggleGrid = new KToggleAction(i18n("Show &Grid"), this);
320  actionCollection()->addAction("settings_show_grid", aToggleGrid );
321  aToggleGrid->setToolTip( i18n( "Show or hide the grid." ) );
322  aToggleGrid->setChecked( true );
323  connect( aToggleGrid, SIGNAL( triggered() ), this, SLOT( toggleGrid() ) );
324 
325  aToggleAxes = new KToggleAction(i18n("Show &Axes"), this);
326  actionCollection()->addAction("settings_show_axes", aToggleAxes );
327  aToggleAxes->setToolTip( i18n( "Show or hide the axes." ) );
328  aToggleAxes->setChecked( true );
329  connect( aToggleAxes, SIGNAL( triggered() ), this, SLOT( toggleAxes() ) );
330 
331  aToggleNightVision = new KToggleAction(i18n("Wear Infrared Glasses"), this);
332  actionCollection()->addAction("settings_toggle_nightvision", aToggleNightVision );
333  aToggleNightVision->setToolTip( i18n( "Enable/disable hidden objects' visibility." ) );
334  aToggleNightVision->setChecked( false );
335  connect( aToggleNightVision, SIGNAL( triggered() ), this, SLOT( toggleNightVision() ) );
336 
337  // select coordinate system KActionMenu..
338  aCoordSystem = new SetCoordinateSystemAction( *this, actionCollection() );
339 }
340 
341 void KigPart::setupTypes()
342 {
343  setupBuiltinStuff();
344  setupBuiltinMacros();
345  setupMacroTypes();
346  GUIActionList& l = *GUIActionList::instance();
347  typedef GUIActionList::avectype::const_iterator iter;
348  for ( iter i = l.actions().begin(); i != l.actions().end(); ++i )
349  {
350  KigGUIAction* ret = new KigGUIAction( *i, *this );
351  aActions.push_back( ret );
352  ret->plug( this );
353  };
354 }
355 
356 void KigPart::rememberConstruction( ConstructibleAction* ca )
357 {
358  // mp:
359  // mRememberConstruction holds a pointer to the last construction
360  // done by the user, so that it can be quickly repeated
361 
362  mRememberConstruction = ca;
363  aRepeatLastConstruction->setEnabled(true);
364  aRepeatLastConstruction->setText(
365  i18n( "Repeat Construction (%1)", ca->descriptiveName() ) );
366  aRepeatLastConstruction->setToolTip(
367  i18n( "Repeat %1 (with new data)", ca->descriptiveName() ) );
368 }
369 
370 KigPart::~KigPart()
371 {
372  GUIActionList::instance()->unregDoc( this );
373 
374  // save our types...
375  saveTypes();
376 
377  // objects get deleted automatically, when mobjsref gets
378  // destructed..
379 
380  delete_all( aActions.begin(), aActions.end() );
381  aActions.clear();
382 
383  // cleanup
384  delete mMode;
385  delete mhistory;
386 
387  delete mdocument;
388 }
389 
390 bool KigPart::openFile()
391 {
392  QFileInfo fileinfo( localFilePath() );
393  if ( ! fileinfo.exists() )
394  {
395  KMessageBox::sorry( widget(),
396  i18n( "The file \"%1\" you tried to open does not exist. "
397  "Please verify that you entered the correct path.", localFilePath() ),
398  i18n( "File Not Found" ) );
399  return false;
400  };
401 
402  KMimeType::Ptr mimeType = KMimeType::mimeType( arguments().mimeType() );
403  if ( !mimeType )
404  {
405  // we can always use findByPath instead of findByURL with localFilePath()
406  mimeType = KMimeType::findByPath( localFilePath() );
407  }
408  kDebug() << "mimetype: " << mimeType->name();
409  KigFilter* filter = KigFilters::instance()->find( mimeType->name() );
410  if ( !filter )
411  {
412  // we don't support this mime type...
413  KMessageBox::sorry
414  (
415  widget(),
416  i18n( "You tried to open a document of type \"%1\"; unfortunately, "
417  "Kig does not support this format. If you think the format in "
418  "question would be worth implementing support for, you can "
419  "always ask us nicely on mailto:pino@kde.org "
420  "or do the work yourself and send me a patch."
421  , mimeType->name()),
422  i18n( "Format Not Supported" )
423  );
424  return false;
425  };
426 
427  KigDocument* newdoc = filter->load (localFilePath());
428  if ( !newdoc )
429  {
430  closeUrl();
431  setUrl( KUrl() );
432  return false;
433  }
434  delete mdocument;
435  mdocument = newdoc;
436  coordSystemChanged( mdocument->coordinateSystem().id() );
437  aToggleGrid->setChecked( mdocument->grid() );
438  aToggleAxes->setChecked( mdocument->axes() );
439  aToggleNightVision->setChecked( mdocument->getNightVision() );
440 
441  setModified(false);
442  mhistory->clear();
443 
444  std::vector<ObjectCalcer*> tmp = calcPath( getAllParents( getAllCalcers( document().objects() ) ) );
445  for ( std::vector<ObjectCalcer*>::iterator i = tmp.begin(); i != tmp.end(); ++i )
446  ( *i )->calc( document() );
447  emit recenterScreen();
448 
449  redrawScreen();
450 
451  return true;
452 }
453 
454 bool KigPart::saveFile()
455 {
456  if ( url().isEmpty() ) return internalSaveAs();
457  // mimetype:
458  KMimeType::Ptr mimeType = KMimeType::findByPath ( localFilePath() );
459  if ( mimeType->name() != "application/x-kig" )
460  {
461  // we don't support this mime type...
462  if( KMessageBox::warningYesNo( widget(),
463  i18n( "Kig does not support saving to any other file format than "
464  "its own. Save to Kig's format instead?" ),
465  i18n( "Format Not Supported" ), KGuiItem( i18n( "Save Kig Format" ) ), KStandardGuiItem::cancel() ) == KMessageBox::No )
466  return false;
467  internalSaveAs();
468  };
469 
470  if ( KigFilters::instance()->save( document(), localFilePath() ) )
471  {
472  setModified ( false );
473  mhistory->setClean();
474  return true;
475  }
476  return false;
477 }
478 
479 bool KigPart::queryClose()
480 {
481  if ( KParts::ReadWritePart::queryClose() )
482  {
483  if ( mode()->eventLoop() != 0 )
484  {
485  cancelConstruction();
486  }
487  return true;
488  }
489  return false;
490 }
491 
492 void KigPart::addObject(ObjectHolder* o)
493 {
494  if ( !misGroupingObjects )
495  mhistory->push( KigCommand::addCommand( *this, o ) );
496  else
497  {
498  _addObject( o );
499  mcurrentObjectGroup.push_back( o );
500  }
501 }
502 
503 void KigPart::addObjects( const std::vector<ObjectHolder*>& os )
504 {
505  if ( !misGroupingObjects )
506  mhistory->push( KigCommand::addCommand( *this, os ) );
507  else
508  {
509  _addObjects( os );
510  mcurrentObjectGroup.insert( mcurrentObjectGroup.end(), os.begin(), os.end() );
511  }
512 }
513 
514 void KigPart::_addObject( ObjectHolder* o )
515 {
516  document().addObject( o );
517  setModified(true);
518 }
519 
520 void KigPart::delObject( ObjectHolder* o )
521 {
522  // we delete all children and their children etc. too...
523  std::vector<ObjectHolder*> os;
524  os.push_back( o );
525  delObjects( os );
526 }
527 
528 void KigPart::_delObjects( const std::vector<ObjectHolder*>& o )
529 {
530  document().delObjects( o );
531  setModified( true );
532 }
533 
534 void KigPart::_delObject(ObjectHolder* o)
535 {
536  document().delObject( o );
537  setModified(true);
538 }
539 
540 void KigPart::setMode( KigMode* m )
541 {
542  mMode = m;
543  m->enableActions();
544  redrawScreen();
545 }
546 
547 void KigPart::_addObjects( const std::vector<ObjectHolder*>& os )
548 {
549  document().addObjects( os );
550  setModified( true );
551 }
552 
553 void KigPart::deleteObjects()
554 {
555  mode()->deleteObjects();
556 }
557 
558 void KigPart::startObjectGroup()
559 {
560  if ( mcurrentObjectGroup.size() > 0 )
561  kWarning() << "New object group started while already having objects in object group. Current group will be lost";
562 
563  mcurrentObjectGroup.clear();
564  misGroupingObjects = true;
565 }
566 
567 void KigPart::cancelObjectGroup()
568 {
569  misGroupingObjects = false;
570  _delObjects( mcurrentObjectGroup );
571  mcurrentObjectGroup.clear();
572 }
573 
574 void KigPart::finishObjectGroup()
575 {
576  misGroupingObjects = false;
577  _delObjects( mcurrentObjectGroup );
578  addObjects( mcurrentObjectGroup );
579  mcurrentObjectGroup.clear();
580 }
581 
582 void KigPart::cancelConstruction()
583 {
584  mode()->cancelConstruction();
585 }
586 
587 void KigPart::repeatLastConstruction()
588 {
589  if ( mRememberConstruction )
590  {
591  ConstructibleAction* ca = mRememberConstruction;
592  ca->act( *this );
593  }
594 }
595 
596 void KigPart::showHidden()
597 {
598  mode()->showHidden();
599 }
600 
601 void KigPart::newMacro()
602 {
603  mode()->newMacro();
604 }
605 
606 void KigPart::editTypes()
607 {
608  mode()->editTypes();
609 }
610 
611 void KigPart::browseHistory()
612 {
613  mode()->browseHistory();
614 }
615 
616 void KigPart::setHistoryClean( bool clean )
617 {
618  setModified( !clean );
619 }
620 
621 void KigPart::setCoordinatePrecision()
622 {
623  KigCoordinatePrecisionDialog dlg(document().isUserSpecifiedCoordinatePrecision(), document().getCoordinatePrecision() );
624 
625  if( dlg.exec() == QDialog::Accepted )
626  {
627  int coordinatePrecision = dlg.getUserSpecifiedCoordinatePrecision();
628 
629  document().setCoordinatePrecision( coordinatePrecision );
630  }
631 }
632 
633 QUndoStack* KigPart::history()
634 {
635  return mhistory;
636 }
637 
638 void KigPart::delObjects( const std::vector<ObjectHolder*>& os )
639 {
640  if ( os.size() < 1 ) return;
641  std::set<ObjectHolder*> delobjs;
642 
643  std::set<ObjectCalcer*> delcalcers = getAllChildren( getAllCalcers( os ) );
644  std::map<ObjectCalcer*, ObjectHolder*> holdermap;
645 
646  std::set<ObjectHolder*> curobjs = document().objectsSet();
647 
648  for ( std::set<ObjectHolder*>::iterator i = curobjs.begin();
649  i != curobjs.end(); ++i )
650  holdermap[( *i )->calcer()] = *i;
651 
652  for ( std::set<ObjectCalcer*>::iterator i = delcalcers.begin();
653  i != delcalcers.end(); ++i )
654  {
655  std::map<ObjectCalcer*, ObjectHolder*>::iterator j = holdermap.find( *i );
656  if ( j != holdermap.end() )
657  delobjs.insert( j->second );
658  }
659 
660  assert( delobjs.size() >= os.size() );
661 
662  std::vector<ObjectHolder*> delobjsvect( delobjs.begin(), delobjs.end() );
663  mhistory->push( KigCommand::removeCommand( *this, delobjsvect ) );
664 }
665 
666 void KigPart::enableConstructActions( bool enabled )
667 {
668  for_each( aActions.begin(), aActions.end(),
669  bind2nd( mem_fun( &KAction::setEnabled ),
670  enabled ) );
671 }
672 
673 void KigPart::unplugActionLists()
674 {
675  unplugActionList( "user_conic_types" );
676  unplugActionList( "user_segment_types" );
677  unplugActionList( "user_point_types" );
678  unplugActionList( "user_circle_types" );
679  unplugActionList( "user_line_types" );
680  unplugActionList( "user_other_types" );
681  unplugActionList( "user_types" );
682 }
683 
684 void KigPart::plugActionLists()
685 {
686  plugActionList( "user_conic_types", aMNewConic );
687  plugActionList( "user_segment_types", aMNewSegment );
688  plugActionList( "user_point_types", aMNewPoint );
689  plugActionList( "user_circle_types", aMNewCircle );
690  plugActionList( "user_line_types", aMNewLine );
691  plugActionList( "user_other_types", aMNewOther );
692  plugActionList( "user_types", aMNewAll );
693 }
694 
695 void KigPart::emitStatusBarText( const QString& text )
696 {
697  emit setStatusBarText( text );
698 }
699 
700 void KigPart::fileSaveAs()
701 {
702  internalSaveAs();
703 }
704 
705 void KigPart::fileSave()
706 {
707  save();
708 }
709 
710 bool KigPart::internalSaveAs()
711 {
712  // this slot is connected to the KStandardAction::saveAs action...
713  QString formats = i18n( "*.kig|Kig Documents (*.kig)\n"
714  "*.kigz|Compressed Kig Documents (*.kigz)" );
715 
716  // formats += "\n";
717  // formats += KImageIO::pattern( KImageIO::Writing );
718 
719  QString file_name = KFileDialog::getSaveFileName( KUrl( "kfiledialog:///document" ), formats );
720  if (file_name.isEmpty()) return false;
721  else if ( QFileInfo( file_name ).exists() )
722  {
723  int ret = KMessageBox::warningContinueCancel( m_widget,
724  i18n( "The file \"%1\" already exists. Do you wish to overwrite it?" ,
725  file_name ), i18n( "Overwrite File?" ), KStandardGuiItem::overwrite() );
726  if ( ret != KMessageBox::Continue )
727  {
728  return false;
729  }
730  }
731  saveAs( KUrl( file_name ) );
732  return true;
733 }
734 
735 void KigPart::runMode( KigMode* m )
736 {
737  KigMode* prev = mMode;
738 
739  setMode( m );
740 
741  QEventLoop e;
742  m->setEventLoop( &e );
743  e.exec( QEventLoop::AllEvents | QEventLoop::WaitForMoreEvents );
744 
745  setMode( prev );
746  redrawScreen();
747 }
748 
749 void KigPart::doneMode( KigMode* d )
750 {
751  assert( d == mMode );
752 
753  if ( d->eventLoop() )
754  d->eventLoop()->exit();
755 }
756 
757 void KigPart::actionRemoved( GUIAction* a, GUIUpdateToken& t )
758 {
759  KigGUIAction* rem = 0;
760  for ( std::vector<KigGUIAction*>::iterator i = aActions.begin(); i != aActions.end(); ++i )
761  {
762  if ( (*i)->guiAction() == a )
763  {
764  rem = *i;
765  aActions.erase( i );
766  break;
767  }
768  };
769  assert( rem );
770  aMNewSegment.removeAll( rem );
771  aMNewConic.removeAll( rem );
772  aMNewPoint.removeAll( rem );
773  aMNewCircle.removeAll( rem );
774  aMNewLine.removeAll( rem );
775  aMNewOther.removeAll( rem );
776  aMNewAll.removeAll( rem );
777  t.push_back( rem );
778 }
779 
780 void KigPart::actionAdded( GUIAction* a, GUIUpdateToken& )
781 {
782  KigGUIAction* ret = new KigGUIAction( a, *this );
783  aActions.push_back( ret );
784  ret->plug( this );
785 }
786 
787 void KigPart::endGUIActionUpdate( GUIUpdateToken& t )
788 {
789  unplugActionLists();
790  plugActionLists();
791  delete_all( t.begin(), t.end() );
792  t.clear();
793 }
794 
795 KigPart::GUIUpdateToken KigPart::startGUIActionUpdate()
796 {
797  return GUIUpdateToken();
798 }
799 
800 void KigPart::setupMacroTypes()
801 {
802  static bool alreadysetup = false;
803  if ( ! alreadysetup )
804  {
805  alreadysetup = true;
806 
807  // the user's saved macro types:
808  const QStringList dataFiles =
809  KGlobal::dirs()->findAllResources("appdata", "kig-types/*.kigt",
810  KStandardDirs::Recursive);
811  std::vector<Macro*> macros;
812  for ( QStringList::const_iterator file = dataFiles.begin();
813  file != dataFiles.end(); ++file )
814  {
815  std::vector<Macro*> nmacros;
816  bool ok = MacroList::instance()->load( *file, nmacros, *this );
817  if ( ! ok ) continue;
818  copy( nmacros.begin(), nmacros.end(), back_inserter( macros ) );
819  }
820  MacroList::instance()->add( macros );
821  };
822  // hack: we need to plug the action lists _after_ the gui is
823  // built.. i can't find a better solution than this...
824  QTimer::singleShot( 0, this, SLOT( plugActionLists() ) );
825 }
826 
827 void KigPart::setupBuiltinMacros()
828 {
829  static bool alreadysetup = false;
830  if ( ! alreadysetup )
831  {
832  alreadysetup = true;
833  // builtin macro types ( we try to make the user think these are
834  // normal types )..
835  const QStringList builtinfiles =
836  KGlobal::dirs()->findAllResources( "appdata", "builtin-macros/*.kigt", KStandardDirs::Recursive);
837  for ( QStringList::const_iterator file = builtinfiles.begin();
838  file != builtinfiles.end(); ++file )
839  {
840  std::vector<Macro*> macros;
841  bool ok = MacroList::instance()->load( *file, macros, *this );
842  if ( ! ok ) continue;
843  for ( uint i = 0; i < macros.size(); ++i )
844  {
845  ObjectConstructorList* ctors = ObjectConstructorList::instance();
846  GUIActionList* actions = GUIActionList::instance();
847  Macro* macro = macros[i];
848  macro->ctor->setBuiltin( true );
849  ctors->add( macro->ctor );
850  actions->add( macro->action );
851  macro->ctor = 0;
852  macro->action = 0;
853  delete macro;
854  };
855  };
856  };
857 }
858 
859 void KigPart::addWidget( KigWidget* v )
860 {
861  mwidgets.push_back( v );
862 }
863 
864 void KigPart::delWidget( KigWidget* v )
865 {
866  mwidgets.erase( std::remove( mwidgets.begin(), mwidgets.end(), v ), mwidgets.end() );
867 }
868 
869 void KigPart::filePrintPreview()
870 {
871  QPrinter printer;
872  KPrintPreview printPreview( &printer );
873  doPrint( printer, document().grid(), document().axes() );
874  printPreview.exec();
875 }
876 
877 void KigPart::filePrint()
878 {
879  QPrinter printer;
880  KigPrintDialogPage* kp = new KigPrintDialogPage();
881  QPrintDialog *printDialog = KdePrint::createPrintDialog( &printer, QList<QWidget*>() << kp, m_widget );
882  printDialog->setWindowTitle( i18n("Print Geometry") );
883  printer.setFullPage( true );
884  //Unsupported in Qt
885  //printer.setPageSelection( QPrinter::ApplicationSide );
886  kp->setPrintShowGrid( document().grid() );
887  kp->setPrintShowAxes( document().axes() );
888  if (printDialog->exec())
889  {
890  doPrint( printer, kp->printShowGrid(), kp->printShowAxes() );
891  }
892  delete printDialog;
893 }
894 
895 void KigPart::doPrint( QPrinter& printer, bool printGrid, bool printAxes )
896 {
897  Rect rect = document().suggestedRect();
898  QRect qrect( 0, 0, printer.width(), printer.height() );
899  if ( rect.width() * qrect.height() > rect.height() * qrect.width() )
900  {
901  // qrect is too high..
902  int nh = static_cast<int>( qrect.width() * rect.height() / rect.width() );
903  int rest = qrect.height() - nh;
904  qrect.setTop( qrect.top() - rest / 2 );
905  qrect.setTop( rest / 2 );
906  }
907  else
908  {
909  // qrect is too wide..
910  int nw = static_cast<int>( qrect.height() * rect.width() / rect.height() );
911  int rest = qrect.width() - nw;
912  qrect.setLeft( rest / 2 );
913  qrect.setRight( qrect.right() - rest / 2 );
914  };
915  ScreenInfo si( rect, qrect );
916  KigPainter painter( si, &printer, document() );
917  painter.setWholeWinOverlay();
918  painter.drawGrid( document().coordinateSystem(), printGrid, printAxes );
919  painter.drawObjects( document().objects(), false );
920 }
921 
922 void KigPart::slotSelectAll()
923 {
924  mMode->selectAll();
925 }
926 
927 void KigPart::slotDeselectAll()
928 {
929  mMode->deselectAll();
930 }
931 
932 void KigPart::slotInvertSelection()
933 {
934  mMode->invertSelection();
935 }
936 
937 void KigPart::hideObjects( const std::vector<ObjectHolder*>& inos )
938 {
939  std::vector<ObjectHolder*> os;
940  for (std::vector<ObjectHolder*>::const_iterator i = inos.begin(); i != inos.end(); ++i )
941  {
942  if ( (*i)->shown() )
943  os.push_back( *i );
944  };
945  KigCommand* kc = 0;
946  if ( os.size() == 0 ) return;
947  else if ( os.size() == 1 )
948  kc = new KigCommand( *this, os[0]->imp()->type()->hideAStatement() );
949  else kc = new KigCommand( *this, i18np( "Hide %1 Object", "Hide %1 Objects", os.size() ) );
950  for ( std::vector<ObjectHolder*>::iterator i = os.begin();
951  i != os.end(); ++i )
952  kc->addTask( new ChangeObjectDrawerTask( *i, ( *i )->drawer()->getCopyShown( false ) ) );
953  mhistory->push( kc );
954 }
955 
956 void KigPart::showObjects( const std::vector<ObjectHolder*>& inos )
957 {
958  std::vector<ObjectHolder*> os;
959  for (std::vector<ObjectHolder*>::const_iterator i = inos.begin(); i != inos.end(); ++i )
960  {
961  if ( !(*i)->shown() )
962  os.push_back( *i );
963  };
964  KigCommand* kc = 0;
965  if ( os.size() == 0 ) return;
966  else if ( os.size() == 1 )
967  kc = new KigCommand( *this, os[0]->imp()->type()->showAStatement() );
968  else kc = new KigCommand( *this, i18np( "Show %1 Object", "Show %1 Objects", os.size() ) );
969  for ( std::vector<ObjectHolder*>::iterator i = os.begin();
970  i != os.end(); ++i )
971  kc->addTask( new ChangeObjectDrawerTask( *i, ( *i )->drawer()->getCopyShown( true ) ) );
972  mhistory->push( kc );
973 }
974 
975 void KigPart::redrawScreen( KigWidget* w )
976 {
977  mode()->redrawScreen( w );
978 }
979 
980 void KigPart::redrawScreen()
981 {
982  for ( std::vector<KigWidget*>::iterator i = mwidgets.begin();
983  i != mwidgets.end(); ++i )
984  {
985  mode()->redrawScreen( *i );
986  }
987 }
988 
989 const KigDocument& KigPart::document() const
990 {
991  return *mdocument;
992 }
993 
994 KigDocument& KigPart::document()
995 {
996  return *mdocument;
997 }
998 
999 extern "C" KDE_EXPORT int convertToNative( const KUrl& url, const QByteArray& outfile )
1000 {
1001  kDebug() << "converting " << url.prettyUrl() << " to " << outfile;
1002 
1003  if ( ! url.isLocalFile() )
1004  {
1005  // TODO
1006  kError() << "--convert-to-native only supports local files for now." << endl;
1007  return -1;
1008  }
1009 
1010  QString file = url.toLocalFile();
1011 
1012  QFileInfo fileinfo( file );
1013  if ( ! fileinfo.exists() )
1014  {
1015  kError() << "The file \"" << file << "\" does not exist" << endl;
1016  return -1;
1017  };
1018 
1019  KMimeType::Ptr mimeType = KMimeType::findByPath ( file );
1020  kDebug() << "mimetype: " << mimeType->name();
1021  KigFilter* filter = KigFilters::instance()->find( mimeType->name() );
1022  if ( !filter )
1023  {
1024  kError() << "The file \"" << file << "\" is of a filetype not currently supported by Kig." << endl;
1025  return -1;
1026  };
1027 
1028  KigDocument* doc = filter->load (file);
1029  if ( !doc )
1030  {
1031  kError() << "Parse error in file \"" << file << "\"." << endl;
1032  return -1;
1033  }
1034 
1035  std::vector<ObjectCalcer*> tmp = calcPath( getAllParents( getAllCalcers( doc->objects() ) ) );
1036  for ( std::vector<ObjectCalcer*>::iterator i = tmp.begin(); i != tmp.end(); ++i )
1037  ( *i )->calc( *doc );
1038  for ( std::vector<ObjectCalcer*>::iterator i = tmp.begin(); i != tmp.end(); ++i )
1039  ( *i )->calc( *doc );
1040 
1041  QString out = ( outfile == "-" ) ? QString() : outfile;
1042  bool success = KigFilters::instance()->save( *doc, out );
1043  if ( !success )
1044  {
1045  kError() << "something went wrong while saving" << endl;
1046  return -1;
1047  }
1048 
1049  delete doc;
1050 
1051  return 0;
1052 }
1053 
1054 void KigPart::toggleGrid()
1055 {
1056  bool toshow = !mdocument->grid();
1057  aToggleGrid->setChecked( toshow );
1058  mdocument->setGrid( toshow );
1059 
1060  redrawScreen();
1061 }
1062 
1063 void KigPart::toggleAxes()
1064 {
1065  bool toshow = !mdocument->axes();
1066  aToggleAxes->setChecked( toshow );
1067  mdocument->setAxes( toshow );
1068 
1069  redrawScreen();
1070 }
1071 
1072 void KigPart::toggleNightVision()
1073 {
1074  bool nv = !mdocument->getNightVision();
1075  aToggleNightVision->setChecked( nv );
1076  mdocument->setNightVision( nv );
1077 
1078  redrawScreen();
1079 }
1080 
1081 void KigPart::coordSystemChanged( int id )
1082 {
1083  aCoordSystem->setCurrentItem( id );
1084 }
1085 
1086 void KigPart::saveTypes()
1087 {
1088  QString typesDir = KGlobal::dirs()->saveLocation( "appdata", "kig-types" );
1089  if ( !typesDir.endsWith( '/' ) )
1090  typesDir += '/';
1091  QString typesFileWithPath = typesDir + typesFile;
1092 
1093  // removing existent types file
1094  if ( QFile::exists( typesFileWithPath ) )
1095  QFile::remove( typesFileWithPath );
1096 
1097  MacroList* macrolist = MacroList::instance();
1098  macrolist->save( macrolist->macros(), typesFileWithPath );
1099 }
1100 
1101 void KigPart::loadTypes()
1102 {
1103  QString typesDir = KGlobal::dirs()->saveLocation( "appdata", "kig-types" );
1104  if ( !typesDir.endsWith( '/' ) )
1105  typesDir += '/';
1106  QString typesFileWithPath = typesDir + typesFile;
1107 
1108  if ( QFile::exists( typesFileWithPath ) )
1109  {
1110  std::vector<Macro*> macros;
1111  MacroList::instance()->load( typesFileWithPath, macros, *this );
1112  MacroList::instance()->add( macros );
1113  }
1114 }
1115 
1116 void KigPart::deleteTypes()
1117 {
1118  unplugActionLists();
1119  typedef MacroList::vectype vec;
1120  MacroList* macrolist = MacroList::instance();
1121  const vec& macros = macrolist->macros();
1122  for ( vec::const_reverse_iterator i = macros.rbegin(); i != macros.rend(); ++i )
1123  {
1124  macrolist->remove( *i );
1125  }
1126  plugActionLists();
1127 }
KigFilter
This is the base class for an input filter.
Definition: filter.h:68
KigPart::newMacro
void newMacro()
Definition: kig_part.cpp:601
GUIActionList
List of GUIActions for the parts to show.
Definition: lists.h:38
CoordinateSystemFactory::build
static CoordinateSystem * build(int which)
Definition: coordinate_system.cpp:535
KigPart::internalSaveAs
bool internalSaveAs()
Definition: kig_part.cpp:710
KigView::realWidget
KigWidget * realWidget() const
Definition: kig_view.cpp:455
CoordinateSystem
a CoordinateSystem is what the user sees: it is kept by KigPart to show the user a grid...
Definition: coordinate_system.h:60
kig_view.h
KigPart::setupMacroTypes
void setupMacroTypes()
Definition: kig_part.cpp:800
KigPart::mode
KigMode * mode() const
Definition: kig_part.h:143
KigFilters::find
KigFilter * find(const QString &mime)
Definition: filter.cc:34
KigPart::m_widget
KigView * m_widget
Definition: kig_part.h:278
KigPart::delWidget
void delWidget(KigWidget *)
Definition: kig_part.cpp:864
KigPainter::setWholeWinOverlay
void setWholeWinOverlay()
this is called by some drawing functions that modify the 'entire' screen, i.e.
Definition: kigpainter.cpp:494
KigMode::deleteObjects
virtual void deleteObjects()
Definition: mode.cc:99
KigPart::aNewMacro
KAction * aNewMacro
Definition: kig_part.h:242
KigPart::saveFile
virtual bool saveFile()
save our internal document to m_file
Definition: kig_part.cpp:454
KigCommand
a KigCommand represents almost every action performed in Kig.
Definition: kig_commands.h:44
KigPart::queryClose
virtual bool queryClose()
KigPart cannot be safely destroyed if it's in a nested event loop (construct mode).
Definition: kig_part.cpp:479
Rect::width
double width() const
Definition: rect.cc:204
KigDocument::delObject
void delObject(ObjectHolder *o)
Remove the object o from the document.
Definition: kig_document.cc:151
KigPart::openFile
virtual bool openFile()
load our internal document from m_file
Definition: kig_part.cpp:390
KigPart::fileSaveAs
void fileSaveAs()
Definition: kig_part.cpp:700
KigPart::aMNewSegment
QList< QAction * > aMNewSegment
Definition: kig_part.h:227
KigPart::slotInvertSelection
void slotInvertSelection()
Definition: kig_part.cpp:932
KigCoordinatePrecisionDialog::getUserSpecifiedCoordinatePrecision
int getUserSpecifiedCoordinatePrecision() const
Definition: kigcoordinateprecisiondialog.cpp:50
MacroList::macros
const vectype & macros() const
get access to the list of macro's.
Definition: lists.cc:231
KigCommand::removeCommand
static KigCommand * removeCommand(KigPart &doc, const std::vector< ObjectHolder * > &os)
make sure that when you delete something, you are also deleting its parents.
Definition: kig_commands.cpp:93
KigPart::aBrowseHistory
KAction * aBrowseHistory
Definition: kig_part.h:245
KigDocument::grid
bool grid() const
Definition: kig_document.cc:186
KigDocument::objectsSet
const std::set< ObjectHolder * > & objectsSet() const
Definition: kig_document.cc:51
KigCommand::addTask
void addTask(KigCommandTask *)
Definition: kig_commands.cpp:74
Rect
This file is part of Kig, a KDE program for Interactive Geometry...
Definition: rect.h:34
KigPart::document
const KigDocument & document() const
Definition: kig_part.cpp:989
GUIActionList::regDoc
void regDoc(KigPart *d)
register this document, so that it receives notifications for added and removed actions.
Definition: lists.cc:58
QWidget
SetCoordinateSystemAction
Definition: kig_part.h:49
KigPart::filePrint
void filePrint()
Definition: kig_part.cpp:877
ObjectConstructorList
The list of object constructors for use in various places, e.g.
Definition: lists.h:69
KigPart::aShowHidden
KAction * aShowHidden
Definition: kig_part.h:243
KigPart::repeatLastConstruction
void repeatLastConstruction()
Definition: kig_part.cpp:587
KigPart::enableConstructActions
void enableConstructActions(bool enabled)
Definition: kig_part.cpp:666
KigPart::aMNewLine
QList< QAction * > aMNewLine
Definition: kig_part.h:230
getAllCalcers
std::vector< ObjectCalcer * > getAllCalcers(const std::vector< ObjectHolder * > &os)
get the calcers that the holders represent and their namecalcers
Definition: common.cc:21
KigMode::redrawScreen
virtual void redrawScreen(KigWidget *w)
Redraw the document on KigWidget w .
Definition: mode.cc:119
KigPart::history
QUndoStack * history()
Definition: kig_part.cpp:633
KigPart::aRepeatLastConstruction
KAction * aRepeatLastConstruction
Definition: kig_part.h:237
KigPart::aDeleteObjects
KAction * aDeleteObjects
Definition: kig_part.h:241
KigPart::setHistoryClean
void setHistoryClean(bool)
Definition: kig_part.cpp:616
KigPart::emitStatusBarText
void emitStatusBarText(const QString &text)
Definition: kig_part.cpp:695
KigPart::GUIUpdateToken
std::vector< KigGUIAction * > GUIUpdateToken
the "token" keeps some objects that should be deleted, we only delete them after we replug the action...
Definition: kig_part.h:263
KigPart::hideObjects
void hideObjects(const std::vector< ObjectHolder * > &os)
Definition: kig_part.cpp:937
KigMode::showHidden
virtual void showHidden()
Definition: mode.cc:103
KigMode::browseHistory
virtual void browseHistory()
Definition: mode.cc:115
KigDocument::getNightVision
bool getNightVision() const
Definition: kig_document.cc:211
KigPart::toggleGrid
void toggleGrid()
Definition: kig_part.cpp:1054
KigExportManager::instance
static KigExportManager * instance()
Definition: exporter.cc:166
KigMode::eventLoop
QEventLoop * eventLoop() const
Definition: mode.cc:145
KigDocument::addObjects
void addObjects(const std::vector< ObjectHolder * > &os)
Add the objects os to the document.
Definition: kig_document.cc:143
KigMode::enableActions
virtual void enableActions()
actions: we enable the actions we want when our mode is made active.
Definition: mode.cc:27
kig_part.h
KigPart::browseHistory
void browseHistory()
Definition: kig_part.cpp:611
Macro::action
GUIAction * action
Definition: lists.h:94
GUIActionList::unregDoc
void unregDoc(KigPart *d)
Definition: lists.cc:63
KigGUIAction::plug
void plug(KigPart *doc)
Definition: guiaction.cc:162
KigPart::finishObjectGroup
void finishObjectGroup()
Draws the current group of objects and add them as a whole to the Undo history.
Definition: kig_part.cpp:574
KigPart::toggleAxes
void toggleAxes()
Definition: kig_part.cpp:1063
KigPart::loadTypes
void loadTypes()
Definition: kig_part.cpp:1101
ObjectConstructorList::add
void add(ObjectConstructor *a)
Definition: lists.cc:155
KigMode::invertSelection
virtual void invertSelection()
Definition: mode.cc:136
Macro::ctor
MacroConstructor * ctor
Definition: lists.h:95
CoordinateSystemFactory::names
static QStringList names()
Definition: coordinate_system.cpp:527
ScreenInfo
ScreenInfo is a simple utility class that maps a region of the document onto a region of the screen...
Definition: screeninfo.h:31
KigPart::deleteTypes
void deleteTypes()
Definition: kig_part.cpp:1116
KigPart::mwidgets
std::vector< KigWidget * > mwidgets
Definition: kig_part.h:276
KigMode
this is an ABC of a class containing the current "Mode" of the Kig document...
Definition: mode.h:37
KigPart::~KigPart
virtual ~KigPart()
Destructor.
Definition: kig_part.cpp:370
KigPart::mhistory
KUndoStack * mhistory
the command history
Definition: kig_part.h:215
KigPart::aSetCoordinatePrecision
KAction * aSetCoordinatePrecision
Definition: kig_part.h:246
KigFilter::load
virtual KigDocument * load(const QString &fromfile)=0
load file fromfile and build a KigDocument from it.
KigGUIAction
Definition: guiaction.h:34
KSelectAction
KigFilters::instance
static KigFilters * instance()
Definition: filter.cc:52
KigPart::unplugActionLists
void unplugActionLists()
Definition: kig_part.cpp:673
KigDocument::setGrid
void setGrid(bool showgrid)
set to show/hide the grid.
Definition: kig_document.cc:181
delete_all
void delete_all(T begin, T end)
Definition: objects/common.h:53
KigPart::aConfigureTypes
KAction * aConfigureTypes
Definition: kig_part.h:244
getAllParents
std::vector< ObjectCalcer * > getAllParents(const std::vector< ObjectCalcer * > &objs)
This function returns all objects above the given in the dependency graph.
Definition: calcpaths.cc:229
KigView
This class is a wrapper for KigWidget.
Definition: kig_view.h:229
MacroList::add
void add(Macro *m)
Add a Macro m .
Definition: lists.cc:213
calcPath
std::vector< ObjectCalcer * > calcPath(const std::vector< ObjectCalcer * > &os)
This function sorts os such that they're in the right order for calc()-ing.
Definition: calcpaths.cc:48
KigMode::cancelConstruction
virtual void cancelConstruction()
Definition: mode.cc:95
KigFilters::save
bool save(const KigDocument &data, const QString &outfile)
saving is always done with the native filter.
Definition: filter.cc:104
ChangeObjectDrawerTask
Definition: kig_commands.h:223
KigMode::editTypes
virtual void editTypes()
Definition: mode.cc:111
KigPart::slotDeselectAll
void slotDeselectAll()
Definition: kig_part.cpp:927
KigPart::actionAdded
void actionAdded(GUIAction *a, GUIUpdateToken &t)
Definition: kig_part.cpp:780
convertToNative
KDE_EXPORT int convertToNative(const KUrl &url, const QByteArray &outfile)
Definition: kig_part.cpp:999
KigPart::misGroupingObjects
bool misGroupingObjects
Indicates whether objects added to the documents are being grouped or not.
Definition: kig_part.h:287
KigPart::redrawScreen
void redrawScreen()
Definition: kig_part.cpp:980
KigPainter
KigPainter is an extended QPainter.
Definition: kigpainter.h:51
KigPart::startGUIActionUpdate
GUIUpdateToken startGUIActionUpdate()
Definition: kig_part.cpp:795
KigExportManager::addMenuAction
void addMenuAction(const KigPart *doc, KigWidget *w, KActionCollection *coll)
Definition: exporter.cc:155
KigPart::setCoordinatePrecision
void setCoordinatePrecision()
Definition: kig_part.cpp:621
ObjectHolder
An ObjectHolder represents an object as it is known to the document.
Definition: object_holder.h:40
setupBuiltinStuff
void setupBuiltinStuff()
Definition: builtin_stuff.cc:48
KigPart::addWidget
void addWidget(KigWidget *)
Definition: kig_part.cpp:859
KigPart::showObjects
void showObjects(const std::vector< ObjectHolder * > &os)
Definition: kig_part.cpp:956
aboutdata.h
KigPart::aInvertSelection
KAction * aInvertSelection
Definition: kig_part.h:240
KigPart::mdocument
KigDocument * mdocument
Definition: kig_part.h:280
typesFile
static const QString typesFile
Definition: kig_part.cpp:82
SetCoordinateSystemAction::SetCoordinateSystemAction
SetCoordinateSystemAction(KigPart &d, KActionCollection *parent)
KigPart::runMode
void runMode(KigMode *)
Definition: kig_part.cpp:735
KigPart::setupActions
void setupActions()
Definition: kig_part.cpp:212
KigPart::recenterScreen
void recenterScreen()
emitted when we want to suggest a new size for the view ( basically after loading a file...
KigWidget
This class is the real widget showing the document.
Definition: kig_view.h:50
KigPart::startObjectGroup
void startObjectGroup()
Call this method to start an object group which will be deleted as a whole if the construction is can...
Definition: kig_part.cpp:558
ConstructibleAction::descriptiveName
QString descriptiveName() const
Definition: guiaction.cc:72
ObjectConstructorList::instance
static ObjectConstructorList * instance()
Definition: lists.cc:129
KigPart::doneMode
void doneMode(KigMode *)
Definition: kig_part.cpp:749
KigCommand::changeCoordSystemCommand
static KigCommand * changeCoordSystemCommand(KigPart &doc, CoordinateSystem *s)
This creates directly a command to change the coordinate system to s .
Definition: kig_commands.cpp:118
KigPart::slotSelectAll
void slotSelectAll()
Definition: kig_part.cpp:922
KigDocument::objects
const std::vector< ObjectHolder * > objects() const
Get a hold of the objects of this KigDocument.
Definition: kig_document.cc:46
KigPainter::drawGrid
void drawGrid(const CoordinateSystem &c, bool showGrid=true, bool showAxes=true)
Definition: kigpainter.cpp:507
KigPart::setupTypes
void setupTypes()
Definition: kig_part.cpp:341
KigPart::saveTypes
void saveTypes()
Definition: kig_part.cpp:1086
KigPart::aActions
std::vector< KigGUIAction * > aActions
Definition: kig_part.h:250
kig_document.h
KigPart::aCoordSystem
KSelectAction * aCoordSystem
Definition: kig_part.h:209
KigPart::aToggleGrid
KToggleAction * aToggleGrid
Definition: kig_part.h:247
kig_commands.h
KigPart::_addObject
void _addObject(ObjectHolder *inObject)
Definition: kig_part.cpp:514
KigPart::addObject
void addObject(ObjectHolder *inObject)
Definition: kig_part.cpp:492
KigPart::_delObject
void _delObject(ObjectHolder *inObject)
Definition: kig_part.cpp:534
MacroList::vectype
std::vector< Macro * > vectype
Definition: lists.h:113
ConstructibleAction::act
void act(KigPart &)
Definition: guiaction.cc:77
ConstructibleAction
Definition: guiaction.h:68
kigAboutData
KAboutData kigAboutData(const char *name, const char *iname)
Definition: aboutdata.h:26
KigPart::fileSave
void fileSave()
Definition: kig_part.cpp:705
KigDocument::setAxes
void setAxes(bool showaxes)
set to show/hide the grid.
Definition: kig_document.cc:191
KigDocument::setCoordinatePrecision
void setCoordinatePrecision(int precision)
Definition: kig_document.cc:201
KigPart::coordSystemChanged
void coordSystemChanged(int)
Definition: kig_part.cpp:1081
KigPart::aMNewCircle
QList< QAction * > aMNewCircle
Definition: kig_part.h:229
KigPart::_addObjects
void _addObjects(const std::vector< ObjectHolder * > &o)
Definition: kig_part.cpp:547
KigPart::setMode
void setMode(KigMode *)
Definition: kig_part.cpp:540
KigPart::toggleNightVision
void toggleNightVision()
Definition: kig_part.cpp:1072
KigCommand::addCommand
static KigCommand * addCommand(KigPart &doc, const std::vector< ObjectHolder * > &os)
To avoid confusion, this doesn't add a command to anything, this creates an AddCommand ;) ...
Definition: kig_commands.cpp:106
MacroList
This class keeps a list of all macro's, and allows them to be easily accessed, added etc...
Definition: lists.h:110
KigPart::editTypes
void editTypes()
Definition: kig_part.cpp:606
Rect::height
double height() const
Definition: rect.cc:209
KigPart::KigPart
KigPart(QWidget *parentWidget, QObject *parent=0, const QVariantList &=QVariantList())
Default constructor.
Definition: kig_part.cpp:173
MacroList::save
bool save(Macro *m, const QString &f)
Save macro m to file f .
Definition: lists.cc:240
KigMode::newMacro
virtual void newMacro()
Definition: mode.cc:107
KigPart::rememberConstruction
void rememberConstruction(ConstructibleAction *)
Definition: kig_part.cpp:356
Macro
this is just a simple data struct.
Definition: lists.h:91
KAction
MacroList::load
bool load(const QString &f, vectype &ret, const KigPart &)
load macro's from file f .
Definition: lists.cc:298
KigDocument
KigDocument is the class holding the real data in a Kig document.
Definition: kig_document.h:36
KigPart::mRememberConstruction
ConstructibleAction * mRememberConstruction
Definition: kig_part.h:210
GUIActionList::instance
static GUIActionList * instance()
Definition: lists.cc:42
KigPart::actionRemoved
void actionRemoved(GUIAction *a, GUIUpdateToken &t)
Definition: kig_part.cpp:757
KigPart::endGUIActionUpdate
void endGUIActionUpdate(GUIUpdateToken &t)
Definition: kig_part.cpp:787
KigDocument::addObject
void addObject(ObjectHolder *oObject)
Add the objects o to the document.
Definition: kig_document.cc:138
K_EXPORT_PLUGIN
K_EXPORT_PLUGIN(KigPartFactory(kigAboutData("kig", I18N_NOOP("KigPart")))) SetCoordinateSystemAction
Definition: kig_part.cpp:86
KigDocument::setNightVision
void setNightVision(bool nv)
set to enable/disable night-vision (visibility of hidden objects)
Definition: kig_document.cc:196
KigPart::aToggleNightVision
KToggleAction * aToggleNightVision
Definition: kig_part.h:249
KigPart
This is a "Part".
Definition: kig_part.h:68
KigMode::selectAll
virtual void selectAll()
Definition: mode.cc:128
MacroList::remove
void remove(Macro *m)
Remove macro m .
Definition: lists.cc:220
KigMode::deselectAll
virtual void deselectAll()
Definition: mode.cc:132
GUIActionList::add
void add(GUIAction *a)
Definition: lists.cc:80
KigPart::aMNewPoint
QList< QAction * > aMNewPoint
Definition: kig_part.h:228
KigPart::addObjects
void addObjects(const std::vector< ObjectHolder * > &os)
Definition: kig_part.cpp:503
KigDocument::axes
bool axes() const
Definition: kig_document.cc:206
GUIAction
Definition: guiaction.h:51
KigPart::aDeselectAll
KAction * aDeselectAll
Definition: kig_part.h:239
KigDocument::delObjects
void delObjects(const std::vector< ObjectHolder * > &os)
Remove the objects os from the document.
Definition: kig_document.cc:156
MacroConstructor::setBuiltin
void setBuiltin(bool builtin)
Definition: object_constructor.cc:526
KigPart::cancelConstruction
void cancelConstruction()
Definition: kig_part.cpp:582
KigDocument::coordinateSystem
const CoordinateSystem & coordinateSystem() const
Definition: kig_document.cc:40
KigPart::aCancelConstruction
KAction * aCancelConstruction
Definition: kig_part.h:236
KigPart::delObject
void delObject(ObjectHolder *inObject)
Definition: kig_part.cpp:520
KigPart::deleteObjects
void deleteObjects()
Definition: kig_part.cpp:553
GUIActionList::actions
const avectype & actions() const
Definition: lists.h:50
CoordinateSystem::id
virtual int id() const =0
KigPart::aToggleAxes
KToggleAction * aToggleAxes
Definition: kig_part.h:248
getAllChildren
std::set< ObjectCalcer * > getAllChildren(ObjectCalcer *obj)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: calcpaths.cc:281
KigPart::mMode
KigMode * mMode
Definition: kig_part.h:208
KigPart::cancelObjectGroup
void cancelObjectGroup()
Deletes the current group of objects from the document without adding them to the Undo history...
Definition: kig_part.cpp:567
KigPainter::drawObjects
void drawObjects(const std::vector< ObjectHolder * > &os, bool sel)
Definition: kigpainter.cpp:518
KigPart::aMNewConic
QList< QAction * > aMNewConic
Definition: kig_part.h:233
KigPart::delObjects
void delObjects(const std::vector< ObjectHolder * > &os)
Definition: kig_part.cpp:638
NormalMode
Definition: normal.h:26
KigPart::filePrintPreview
void filePrintPreview()
Definition: kig_part.cpp:869
uint
unsigned int uint
Definition: object_imp.h:87
KigPart::aSelectAll
KAction * aSelectAll
Definition: kig_part.h:238
KigPart::setupBuiltinMacros
void setupBuiltinMacros()
Definition: kig_part.cpp:827
KigPart::plugActionLists
void plugActionLists()
Definition: kig_part.cpp:684
KigDocument::suggestedRect
Rect suggestedRect() const
Return a rect containing most of the objects, which would be a fine suggestion to map to the widget...
Definition: kig_document.cc:106
MacroList::instance
static MacroList * instance()
MacroList is a singleton.
Definition: lists.cc:195
KigPart::showHidden
void showHidden()
Definition: kig_part.cpp:596
KigPart::aMNewOther
QList< QAction * > aMNewOther
Definition: kig_part.h:231
KigMode::setEventLoop
void setEventLoop(QEventLoop *e)
Definition: mode.cc:140
KigPart::_delObjects
void _delObjects(const std::vector< ObjectHolder * > &o)
Definition: kig_part.cpp:528
KigPart::aMNewAll
QList< QAction * > aMNewAll
Definition: kig_part.h:232
KigPart::mcurrentObjectGroup
std::vector< ObjectHolder * > mcurrentObjectGroup
Stores the current group of object being drawn if an object group has been started.
Definition: kig_part.h:294
KigPart::doPrint
void doPrint(QPrinter &printer, bool printGrid, bool printAxes)
Definition: kig_part.cpp:895
KigCoordinatePrecisionDialog
This file is part of Kig, a KDE program for Interactive Geometry...
Definition: kigcoordinateprecisiondialog.h:28
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:35:39 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kig

Skip menu "kig"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal