• 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
  • modes
normal.cc
Go to the documentation of this file.
1 // Copyright (C) 2002 Dominique Devriese <devriese@kde.org>
2 
3 // This program is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU General Public License
5 // as published by the Free Software Foundation; either version 2
6 // of the License, or (at your option) any later version.
7 
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 // GNU General Public License for more details.
12 
13 // You should have received a copy of the GNU General Public License
14 // along with this program; if not, write to the Free Software
15 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16 // 02110-1301, USA.
17 
18 #include "normal.h"
19 
20 #include "../kig/kig_view.h"
21 #include "../kig/kig_part.h"
22 #include "../kig/kig_document.h"
23 #include "../kig/kig_commands.h"
24 #include "../objects/object_factory.h"
25 #include "../objects/object_imp.h"
26 #include "../objects/object_drawer.h"
27 #include "../misc/kigpainter.h"
28 #include "popup/popup.h"
29 #include "popup/objectchooserpopup.h"
30 #include "moving.h"
31 #include "macro.h"
32 #include "dragrectmode.h"
33 #include "historydialog.h"
34 #include "typesdialog.h"
35 
36 #include <qundostack.h>
37 #include <kcursor.h>
38 #include <kaction.h>
39 #include <klocale.h>
40 
41 #include <algorithm>
42 #include <functional>
43 #include <iterator>
44 
45 using namespace std;
46 
47 void NormalMode::enableActions()
48 {
49  KigMode::enableActions();
50  mdoc.enableConstructActions( true );
51  mdoc.aSelectAll->setEnabled( true );
52  mdoc.aDeselectAll->setEnabled( true );
53  mdoc.aInvertSelection->setEnabled( true );
54  mdoc.aDeleteObjects->setEnabled( true );
55  mdoc.aShowHidden->setEnabled( true );
56  mdoc.aNewMacro->setEnabled( true );
57  mdoc.aConfigureTypes->setEnabled( true );
58  mdoc.aBrowseHistory->setEnabled( true );
59  mdoc.action( "edit_undo" )->setEnabled( mdoc.history()->canUndo() );
60  mdoc.action( "edit_redo" )->setEnabled( mdoc.history()->canRedo() );
61 }
62 
63 void NormalMode::deleteObjects()
64 {
65  std::vector<ObjectHolder*> sel( sos.begin(), sos.end() );
66  mdoc.delObjects( sel );
67  sos.clear();
68 }
69 
70 void NormalMode::selectObject( ObjectHolder* o )
71 {
72  sos.insert( o );
73 }
74 
75 void NormalMode::selectObjects( const std::vector<ObjectHolder*>& os )
76 {
77  // hehe, don't you love this c++ stuff ;)
78  std::for_each( os.begin(), os.end(),
79  std::bind1st(
80  std::mem_fun( &NormalMode::selectObject ), this ) );
81 }
82 
83 void NormalMode::unselectObject( ObjectHolder* o )
84 {
85  sos.erase( o );
86 }
87 
88 void NormalMode::clearSelection()
89 {
90  sos.clear();
91 }
92 
93 // KigDocumentPopup* NormalMode::popup( KigDocument* )
94 // {
95 // return 0;
96 // }
97 
98 void NormalMode::showHidden()
99 {
100  mdoc.showObjects( mdoc.document().objects() );
101 }
102 
103 void NormalMode::newMacro()
104 {
105  DefineMacroMode m( mdoc );
106  mdoc.runMode( &m );
107 }
108 
109 void NormalMode::redrawScreen( KigWidget* w )
110 {
111  // unselect removed objects..
112  std::vector<ObjectHolder*> nsos;
113  const std::set<ObjectHolder*> docobjs = mdoc.document().objectsSet();
114  std::set_intersection( docobjs.begin(), docobjs.end(), sos.begin(), sos.end(),
115  std::back_inserter( nsos ) );
116  sos = std::set<ObjectHolder*>( nsos.begin(), nsos.end() );
117  w->redrawScreen( nsos, true );
118  w->updateScrollBars();
119 }
120 
121 void NormalMode::editTypes()
122 {
123  TypesDialog d( mdoc.widget(), mdoc );
124  d.exec();
125 }
126 
127 void NormalMode::browseHistory()
128 {
129  KigMode::enableActions();
130  HistoryDialog d( mdoc.history(), mdoc.widget() );
131  d.exec();
132  enableActions();
133 }
134 
135 NormalMode::NormalMode( KigPart& d )
136  : BaseMode( d )
137 {
138 }
139 
140 NormalMode::~NormalMode()
141 {
142 }
143 
144 void NormalMode::dragRect( const QPoint& p, KigWidget& w )
145 {
146  DragRectMode d( p, mdoc, w );
147  mdoc.runMode( &d );
148 
149  KigPainter pter( w.screenInfo(), &w.stillPix, mdoc.document() );
150 
151  if ( ! d.cancelled() )
152  {
153  std::vector<ObjectHolder*> sel = d.ret();
154 
155  if ( d.needClear() )
156  {
157  pter.drawObjects( sos.begin(), sos.end(), false );
158  clearSelection();
159  };
160 
161  selectObjects( sel );
162  pter.drawObjects( sel, true );
163  };
164 
165  w.updateCurPix( pter.overlay() );
166  w.updateWidget();
167 }
168 
169 void NormalMode::dragObject( const std::vector<ObjectHolder*>& oco, const QPoint& pco,
170  KigWidget& w, bool ctrlOrShiftDown )
171 {
172  // first determine what to move...
173  if( sos.find( oco.front() ) == sos.end() )
174  {
175  // the user clicked on something that is currently not
176  // selected... --> we select it, taking the Ctrl- and
177  // Shift-buttons into account...
178  if ( !ctrlOrShiftDown ) clearSelection();
179  selectObject(oco.front());
180  }
181 
182  std::vector<ObjectHolder*> sosv( sos.begin(), sos.end() );
183  MovingMode m( sosv, w.fromScreen( pco ), w, mdoc );
184  mdoc.runMode( &m );
185 }
186 
187 void NormalMode::leftClickedObject( ObjectHolder* o, const QPoint&,
188  KigWidget& w, bool ctrlOrShiftDown )
189 {
190  KigPainter pter( w.screenInfo(), &w.stillPix, mdoc.document() );
191 
192  if ( ! o )
193  {
194  pter.drawObjects( sos.begin(), sos.end(), false );
195  clearSelection();
196  }
197  else if( sos.find( o ) == sos.end() )
198  {
199  // clicked on an object that wasn't selected....
200  if (!ctrlOrShiftDown)
201  {
202  pter.drawObjects( sos.begin(), sos.end(), false );
203  clearSelection();
204  };
205  pter.drawObject( o, true );
206  selectObject( o );
207  }
208  else
209  {
210  // clicked on an object that was selected....
211  pter.drawObject( o, false );
212  unselectObject( o );
213  };
214  w.updateCurPix( pter.overlay() );
215  w.updateWidget();
216 }
217 
218 void NormalMode::midClicked( const QPoint& p, KigWidget& w )
219 {
220  ObjectHolder* pto = ObjectFactory::instance()->sensiblePoint( w.fromScreen( p ), mdoc.document(), w );
221  pto->calc( mdoc.document() );
222  mdoc.addObject( pto );
223 
224  // refresh the screen...
225  // not necessary, done by addObjects, which calls NormalMode::redrawScreen..
226 // w.redrawScreen();
227 // w.updateScrollBars();
228 }
229 
230 void NormalMode::rightClicked( const std::vector<ObjectHolder*>& os,
231  const QPoint& plc,
232  KigWidget& w )
233 {
234  // saving the current cursor position
235  QPoint pt = QCursor::pos();
236  if( !os.empty() )
237  {
238  ObjectHolder* o = 0;
239  int id = ObjectChooserPopup::getObjectFromList( pt, &w, os );
240  if ( id >= 0 )
241  o = os[id];
242  else
243  return;
244  if( sos.find( o ) == sos.end() )
245  {
246  clearSelection();
247  selectObject( o );
248  };
249  // show a popup menu...
250  std::vector<ObjectHolder*> sosv( sos.begin(), sos.end() );
251  NormalModePopupObjects p( mdoc, w, *this, sosv, plc );
252  p.exec( pt );
253  }
254  else
255  {
256  NormalModePopupObjects p( mdoc, w, *this, std::vector<ObjectHolder*>(), plc );
257  p.exec( pt );
258  };
259 }
260 
261 void NormalMode::mouseMoved( const std::vector<ObjectHolder*>& os,
262  const QPoint& plc,
263  KigWidget& w,
264  bool )
265 {
266  w.updateCurPix();
267  if( os.empty() )
268  {
269  w.setCursor( Qt::ArrowCursor );
270  mdoc.emitStatusBarText( 0 );
271  w.updateWidget();
272  }
273  else
274  {
275  // the cursor is over an object, show object type next to cursor
276  // and set statusbar text
277 
278  w.setCursor( Qt::PointingHandCursor );
279 
280  int id = ObjectChooserPopup::getObjectFromList( plc, &w, os, false );
281  QString stat = id == 0 ? os.front()->selectStatement() : i18n( "Which object?" );
282 
283  // statusbar text
284  mdoc.emitStatusBarText( stat );
285  KigPainter p( w.screenInfo(), &w.curPix, mdoc.document() );
286 
287  // set the text next to the arrow cursor
288  QPoint point = plc;
289  point.setX(point.x()+15);
290 
291  p.drawTextStd( point, stat );
292  w.updateWidget( p.overlay() );
293  };
294 }
295 
296 void NormalMode::selectAll()
297 {
298  const std::vector<ObjectHolder*> os = mdoc.document().objects();
299  selectObjects( os );
300  mdoc.redrawScreen();
301 }
302 
303 void NormalMode::deselectAll()
304 {
305  clearSelection();
306  mdoc.redrawScreen();
307 }
308 
309 void NormalMode::invertSelection()
310 {
311  std::vector<ObjectHolder*> os = mdoc.document().objects();
312  std::set<ObjectHolder*> oldsel = sos;
313  clearSelection();
314  for ( std::vector<ObjectHolder*>::const_iterator i = os.begin();
315  i != os.end(); ++i )
316  if ( oldsel.find( *i ) == oldsel.end() )
317  sos.insert( *i );
318  mdoc.redrawScreen();
319 }
NormalMode::mouseMoved
void mouseMoved(const std::vector< ObjectHolder * > &os, const QPoint &p, KigWidget &w, bool shiftpressed)
Definition: normal.cc:261
NormalMode::leftClickedObject
void leftClickedObject(ObjectHolder *o, const QPoint &p, KigWidget &w, bool ctrlOrShiftDown)
Definition: normal.cc:187
ObjectFactory::sensiblePoint
ObjectHolder * sensiblePoint(const Coordinate &c, const KigDocument &d, const KigWidget &w) const
Definition: object_factory.cc:286
popup.h
ObjectFactory::instance
static const ObjectFactory * instance()
Definition: object_factory.cc:90
NormalMode::editTypes
void editTypes()
Definition: normal.cc:121
historydialog.h
DefineMacroMode
Definition: macro.h:27
DragRectMode::needClear
bool needClear() const
this returns false if the control or shift button were pressed when the mouse button was released...
Definition: dragrectmode.cc:82
objectchooserpopup.h
KigPart::document
const KigDocument & document() const
Definition: kig_part.cpp:989
DragRectMode::cancelled
bool cancelled() const
whether the user cancelled the rect mode.
Definition: dragrectmode.cc:170
NormalMode::NormalMode
NormalMode(KigPart &)
Definition: normal.cc:135
KigPart::emitStatusBarText
void emitStatusBarText(const QString &text)
Definition: kig_part.cpp:695
KigMode::enableActions
virtual void enableActions()
actions: we enable the actions we want when our mode is made active.
Definition: mode.cc:27
dragrectmode.h
ObjectChooserPopup::getObjectFromList
static int getObjectFromList(const QPoint &p, KigWidget *w, const std::vector< ObjectHolder * > &objs, bool givepopup=true)
Get the index of the chosen object from a list of objects.
Definition: objectchooserpopup.cc:26
BaseMode
The BaseMode is a particular mode that allows an easy mapping of the mouse actions to real...
Definition: base_mode.h:33
NormalMode::deleteObjects
void deleteObjects()
Definition: normal.cc:63
KigMode::mdoc
KigPart & mdoc
Definition: mode.h:94
DragRectMode::ret
std::vector< ObjectHolder * > ret() const
this returns the selected objects.
Definition: dragrectmode.cc:77
NormalMode::selectObject
void selectObject(ObjectHolder *o)
Definition: normal.cc:70
NormalMode::deselectAll
void deselectAll()
Definition: normal.cc:303
NormalMode::showHidden
void showHidden()
Definition: normal.cc:98
ObjectHolder::calc
void calc(const KigDocument &)
Make our ObjectCalcer recalculate its ObjectImp.
Definition: object_holder.cc:73
KigWidget::updateScrollBars
void updateScrollBars()
Definition: kig_view.cpp:298
NormalMode::enableActions
void enableActions()
actions: we enable the actions we want when our mode is made active.
Definition: normal.cc:47
NormalModePopupObjects
This is the popup menu that appears when you click on selected objects in NormalMode.
Definition: popup.h:46
KigWidget::screenInfo
const ScreenInfo & screenInfo() const
the part of the document we're currently showing i.e.
Definition: kig_view.cpp:272
NormalMode::dragRect
void dragRect(const QPoint &p, KigWidget &w)
Definition: normal.cc:144
MovingMode
Definition: moving.h:73
KigPart::redrawScreen
void redrawScreen()
Definition: kig_part.cpp:980
KigPainter
KigPainter is an extended QPainter.
Definition: kigpainter.h:51
NormalMode::~NormalMode
~NormalMode()
Definition: normal.cc:140
ObjectHolder
An ObjectHolder represents an object as it is known to the document.
Definition: object_holder.h:40
KigWidget::fromScreen
const Coordinate fromScreen(const QPoint &p)
Definition: kig_view.cpp:282
KigPart::runMode
void runMode(KigMode *)
Definition: kig_part.cpp:735
NormalMode::unselectObject
void unselectObject(ObjectHolder *o)
Definition: normal.cc:83
HistoryDialog
The HistoryDialog represents a small dialog to navigate back and forth in the history of a constructi...
Definition: historydialog.h:34
KigWidget
This class is the real widget showing the document.
Definition: kig_view.h:50
NormalMode::rightClicked
void rightClicked(const std::vector< ObjectHolder * > &os, const QPoint &p, KigWidget &w)
Definition: normal.cc:230
KigDocument::objects
const std::vector< ObjectHolder * > objects() const
Get a hold of the objects of this KigDocument.
Definition: kig_document.cc:46
KigWidget::updateCurPix
void updateCurPix(const std::vector< QRect > &=std::vector< QRect >())
update curPix (bitBlt stillPix onto curPix..)
Definition: kig_view.cpp:187
moving.h
typesdialog.h
KigPart::addObject
void addObject(ObjectHolder *inObject)
Definition: kig_part.cpp:492
NormalMode::selectAll
void selectAll()
Definition: normal.cc:296
KigWidget::curPix
QPixmap curPix
temporary, gets bitBlt'd (copied) onto the widget (to avoid flickering)
Definition: kig_view.h:84
NormalMode::selectObjects
void selectObjects(const std::vector< ObjectHolder * > &os)
Definition: normal.cc:75
NormalMode::dragObject
void dragObject(const std::vector< ObjectHolder * > &os, const QPoint &pointClickedOn, KigWidget &w, bool ctrlOrShiftDown)
Definition: normal.cc:169
NormalMode::clearSelection
void clearSelection()
Definition: normal.cc:88
KigWidget::updateWidget
void updateWidget(const std::vector< QRect > &=std::vector< QRect >())
this means bitBlting curPix on the actual widget...
Definition: kig_view.cpp:115
NormalMode::newMacro
void newMacro()
Definition: normal.cc:103
TypesDialog
Manage the macro types...
Definition: typesdialog.h:72
normal.h
NormalMode::redrawScreen
void redrawScreen(KigWidget *)
Objcects were added.
Definition: normal.cc:109
KigPart
This is a "Part".
Definition: kig_part.h:68
macro.h
NormalMode::midClicked
void midClicked(const QPoint &p, KigWidget &w)
Definition: normal.cc:218
KigPainter::drawObjects
void drawObjects(const std::vector< ObjectHolder * > &os, bool sel)
Definition: kigpainter.cpp:518
KigWidget::redrawScreen
void redrawScreen(const std::vector< ObjectHolder * > &selection, bool paintOnWidget=true)
Definition: kig_view.cpp:252
NormalMode::browseHistory
void browseHistory()
Definition: normal.cc:127
KigWidget::stillPix
QPixmap stillPix
what do the still objects look like wondering if this is appropriate, maybe it should be part of Movi...
Definition: kig_view.h:79
DragRectMode
DragRectMode is a mode that provides a rect for selecting the objects inside it.
Definition: dragrectmode.h:40
NormalMode::invertSelection
void invertSelection()
Definition: normal.cc:309
NormalMode::sos
std::set< ObjectHolder * > sos
selected objects...
Definition: normal.h:77
KigPainter::drawTextStd
void drawTextStd(const QPoint &p, const QString &s)
draws text in a standard manner, convenience function...
Definition: kigpainter.cpp:531
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