there is no moc file generated for this class
[kdegraphics.git] / kolourpaint / mainWindow / kpMainWindow_Tools.cpp
blobc34636841a3cb6e0f2e155248cfbd9ce1668c989
2 /*
3 Copyright (c) 2003-2007 Clarence Dang <dang@kde.org>
4 All rights reserved.
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions
8 are met:
10 1. Redistributions of source code must retain the above copyright
11 notice, this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
16 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #include <kpMainWindow.h>
30 #include <kpMainWindowPrivate.h>
32 #include <QActionGroup>
33 #include <qlist.h>
35 #include <kapplication.h>
36 #include <kactioncollection.h>
37 #include <kconfig.h>
38 #include <kconfiggroup.h>
39 #include <kdebug.h>
40 #include <kglobal.h>
41 #include <klocale.h>
43 #include <kpColorToolBar.h>
44 #include <kpCommandHistory.h>
45 #include <kpDocument.h>
46 #include <kpImageSelectionTransparency.h>
47 #include <kpTool.h>
48 #include <kpToolAction.h>
49 #include <kpToolBrush.h>
50 #include <kpToolColorEraser.h>
51 #include <kpToolColorPicker.h>
52 #include <kpToolCurve.h>
53 #include <kpToolEllipticalSelection.h>
54 #include <kpToolEllipse.h>
55 #include <kpToolEraser.h>
56 #include <kpToolFloodFill.h>
57 #include <kpToolFreeFormSelection.h>
58 #include <kpToolLine.h>
59 #include <kpToolPen.h>
60 #include <kpToolPolygon.h>
61 #include <kpToolPolyline.h>
62 #include <kpToolRectangle.h>
63 #include <kpToolRectSelection.h>
64 #include <kpToolRoundedRectangle.h>
65 #include <kpToolSelectionEnvironment.h>
66 #include <kpToolSpraycan.h>
67 #include <kpToolText.h>
68 #include <kpToolToolBar.h>
69 #include <kpToolWidgetOpaqueOrTransparent.h>
70 #include <kpToolZoom.h>
71 #include <kpTransformResizeScaleCommand.h>
72 #include <kpViewScrollableContainer.h>
73 #include <kpZoomedView.h>
76 // private
77 kpToolSelectionEnvironment *kpMainWindow::toolSelectionEnvironment ()
79 if (!d->toolSelectionEnvironment)
80 d->toolSelectionEnvironment = new kpToolSelectionEnvironment (this);
82 return d->toolSelectionEnvironment;
85 // private
86 kpToolEnvironment *kpMainWindow::toolEnvironment ()
88 // It's fine to return a more complex environment than required.
89 return toolSelectionEnvironment ();
93 // private
94 void kpMainWindow::setupToolActions ()
96 kpToolSelectionEnvironment *toolSelEnv = toolSelectionEnvironment ();
97 kpToolEnvironment *toolEnv = toolEnvironment ();
99 d->tools.append (d->toolFreeFormSelection = new kpToolFreeFormSelection (toolSelEnv, this));
100 d->tools.append (d->toolRectSelection = new kpToolRectSelection (toolSelEnv, this));
102 d->tools.append (d->toolEllipticalSelection = new kpToolEllipticalSelection (toolSelEnv, this));
103 d->tools.append (d->toolText = new kpToolText (toolSelEnv, this));
105 d->tools.append (d->toolLine = new kpToolLine (toolEnv, this));
106 d->tools.append (d->toolPen = new kpToolPen (toolEnv, this));
108 d->tools.append (d->toolEraser = new kpToolEraser (toolEnv, this));
109 d->tools.append (d->toolBrush = new kpToolBrush (toolEnv, this));
111 d->tools.append (d->toolFloodFill = new kpToolFloodFill (toolEnv, this));
112 d->tools.append (d->toolColorPicker = new kpToolColorPicker (toolEnv, this));
114 d->tools.append (d->toolColorEraser = new kpToolColorEraser (toolEnv, this));
115 d->tools.append (d->toolSpraycan = new kpToolSpraycan (toolEnv, this));
117 d->tools.append (d->toolRoundedRectangle = new kpToolRoundedRectangle (toolEnv, this));
118 d->tools.append (d->toolRectangle = new kpToolRectangle (toolEnv, this));
120 d->tools.append (d->toolPolygon = new kpToolPolygon (toolEnv, this));
121 d->tools.append (d->toolEllipse = new kpToolEllipse (toolEnv, this));
123 d->tools.append (d->toolPolyline = new kpToolPolyline (toolEnv, this));
124 d->tools.append (d->toolCurve = new kpToolCurve (toolEnv, this));
126 d->tools.append (d->toolZoom = new kpToolZoom (toolEnv, this));
129 KActionCollection *ac = actionCollection ();
131 d->actionPrevToolOptionGroup1 = ac->addAction ("prev_tool_option_group_1");
132 d->actionPrevToolOptionGroup1->setText (i18n ("Previous Tool Option (Group #1)"));
133 d->actionPrevToolOptionGroup1->setShortcuts (kpTool::shortcutForKey (Qt::Key_1));
134 connect (d->actionPrevToolOptionGroup1, SIGNAL (triggered (bool)),
135 SLOT (slotActionPrevToolOptionGroup1 ()));
137 d->actionNextToolOptionGroup1 = ac->addAction ("next_tool_option_group_1");
138 d->actionNextToolOptionGroup1->setText (i18n ("Next Tool Option (Group #1)"));
139 d->actionNextToolOptionGroup1->setShortcuts (kpTool::shortcutForKey (Qt::Key_2));
140 connect (d->actionNextToolOptionGroup1, SIGNAL (triggered (bool)),
141 SLOT (slotActionNextToolOptionGroup1 ()));
143 d->actionPrevToolOptionGroup2 = ac->addAction ("prev_tool_option_group_2");
144 d->actionPrevToolOptionGroup2->setText (i18n ("Previous Tool Option (Group #2)"));
145 d->actionPrevToolOptionGroup2->setShortcuts (kpTool::shortcutForKey (Qt::Key_3));
146 connect (d->actionPrevToolOptionGroup2, SIGNAL (triggered (bool)),
147 SLOT (slotActionPrevToolOptionGroup2 ()));
149 d->actionNextToolOptionGroup2 = ac->addAction ("next_tool_option_group_2");
150 d->actionNextToolOptionGroup2->setText (i18n ("Next Tool Option (Group #2)"));
151 d->actionNextToolOptionGroup2->setShortcuts (kpTool::shortcutForKey (Qt::Key_4));
152 connect (d->actionNextToolOptionGroup2, SIGNAL (triggered (bool)),
153 SLOT (slotActionNextToolOptionGroup2 ()));
157 // Implemented in this file (kpMainWindow_Tools.cpp), not
158 // kpImageWindow_Image.cpp since they're really setting tool options.
161 d->actionDrawOpaque = ac->add <KToggleAction> ("image_draw_opaque");
162 d->actionDrawOpaque->setText (i18n ("&Draw Opaque"));
163 connect (d->actionDrawOpaque, SIGNAL (triggered (bool)),
164 SLOT (slotActionDrawOpaqueToggled ()));
166 d->actionDrawColorSimilarity = ac->addAction ("image_draw_color_similarity");
167 d->actionDrawColorSimilarity->setText (i18n ("Draw With Color Similarity..."));
168 connect (d->actionDrawColorSimilarity, SIGNAL (triggered (bool)),
169 SLOT (slotActionDrawColorSimilarity ()));
172 // private
173 void kpMainWindow::createToolBox ()
175 d->toolToolBar = new kpToolToolBar (i18n ("Tool Box"), 2/*columns/rows*/, this);
177 // (needed for QMainWindow::saveState())
178 d->toolToolBar->setObjectName ("Tool Box");
180 connect (d->toolToolBar, SIGNAL (sigToolSelected (kpTool *)),
181 this, SLOT (slotToolSelected (kpTool *)));
182 connect (d->toolToolBar, SIGNAL (toolWidgetOptionSelected ()),
183 this, SLOT (updateToolOptionPrevNextActionsEnabled ()));
185 connect (d->toolToolBar->toolWidgetOpaqueOrTransparent (),
186 SIGNAL (isOpaqueChanged (bool)),
187 SLOT (updateActionDrawOpaqueChecked ()));
188 updateActionDrawOpaqueChecked ();
190 for (QList <kpTool *>::const_iterator it = d->tools.constBegin ();
191 it != d->tools.constEnd ();
192 it++)
194 d->toolToolBar->registerTool (*it);
198 // (from config file)
199 readLastTool ();
202 enableToolsDocumentActions (false);
205 // private
206 void kpMainWindow::enableToolsDocumentActions (bool enable)
208 #if DEBUG_KP_MAIN_WINDOW
209 kDebug () << "kpMainWindow::enableToolsDocumentsAction(" << enable << ")";
210 #endif
212 d->toolActionsEnabled = enable;
215 if (enable && !d->toolToolBar->isEnabled ())
217 kpTool *previousTool = d->toolToolBar->previousTool ();
219 // select tool for enabled Tool Box
221 if (previousTool)
222 d->toolToolBar->selectPreviousTool ();
223 else
225 if (d->lastToolNumber >= 0 && d->lastToolNumber < (int) d->tools.count ())
226 d->toolToolBar->selectTool (d->tools.at (d->lastToolNumber));
227 else
228 d->toolToolBar->selectTool (d->toolPen);
231 else if (!enable && d->toolToolBar->isEnabled ())
233 // don't have a disabled Tool Box with an enabled Tool
234 d->toolToolBar->selectTool (0);
238 d->toolToolBar->setEnabled (enable);
241 for (QList <kpTool *>::const_iterator it = d->tools.constBegin ();
242 it != d->tools.constEnd ();
243 it++)
245 kpToolAction *action = (*it)->action ();
246 if (action)
248 #if DEBUG_KP_MAIN_WINDOW
249 kDebug () << "\tchanging enabled state of " << (*it)->objectName ();
250 #endif
252 if (!enable && action->isChecked ())
253 action->setChecked (false);
255 action->setEnabled (enable);
257 else
259 #if DEBUG_KP_MAIN_WINDOW
260 kDebug () << "\tno action for " << (*it)->objectName ();
261 #endif
266 updateToolOptionPrevNextActionsEnabled ();
267 updateActionDrawOpaqueEnabled ();
270 // private slot
271 void kpMainWindow::updateToolOptionPrevNextActionsEnabled ()
273 #if DEBUG_KP_MAIN_WINDOW
274 kDebug () << "kpMainWindow::updateToolOptionPrevNextActionsEnabled()"
275 << " numShownToolWidgets="
276 << d->toolToolBar->numShownToolWidgets ()
277 << endl;
278 #endif
280 const bool enable = d->toolActionsEnabled;
283 d->actionPrevToolOptionGroup1->setEnabled (enable &&
284 d->toolToolBar->shownToolWidget (0) &&
285 d->toolToolBar->shownToolWidget (0)->hasPreviousOption ());
286 d->actionNextToolOptionGroup1->setEnabled (enable &&
287 d->toolToolBar->shownToolWidget (0) &&
288 d->toolToolBar->shownToolWidget (0)->hasNextOption ());
290 d->actionPrevToolOptionGroup2->setEnabled (enable &&
291 d->toolToolBar->shownToolWidget (1) &&
292 d->toolToolBar->shownToolWidget (1)->hasPreviousOption ());
293 d->actionNextToolOptionGroup2->setEnabled (enable &&
294 d->toolToolBar->shownToolWidget (1) &&
295 d->toolToolBar->shownToolWidget (1)->hasNextOption ());
299 // private slot
300 void kpMainWindow::updateActionDrawOpaqueChecked ()
302 #if DEBUG_KP_MAIN_WINDOW
303 kDebug () << "kpMainWindow::updateActionDrawOpaqueChecked()";
304 #endif
306 const bool drawOpaque =
307 (d->toolToolBar->toolWidgetOpaqueOrTransparent ()->selectedRow () == 0);
308 #if DEBUG_KP_MAIN_WINDOW
309 kDebug () << "\tdrawOpaque=" << drawOpaque;
310 #endif
312 d->actionDrawOpaque->setChecked (drawOpaque);
315 // private
316 void kpMainWindow::updateActionDrawOpaqueEnabled ()
318 #if DEBUG_KP_MAIN_WINDOW
319 kDebug () << "kpMainWindow::updateActionDrawOpaqueEnabled()";
320 #endif
322 const bool enable = d->toolActionsEnabled;
324 #if DEBUG_KP_MAIN_WINDOW
325 kDebug () << "\tenable=" << enable
326 << " tool=" << (tool () ? tool ()->objectName () : 0)
327 << " (is selection=" << toolIsASelectionTool () << ")"
328 << endl;
329 #endif
331 d->actionDrawOpaque->setEnabled (enable && toolIsASelectionTool ());
335 // public
336 QActionGroup *kpMainWindow::toolsActionGroup ()
338 if (!d->toolsActionGroup)
339 d->toolsActionGroup = new QActionGroup (this);
341 return d->toolsActionGroup;
345 // public
346 kpTool *kpMainWindow::tool () const
348 return d->toolToolBar ? d->toolToolBar->tool () : 0;
351 // public
352 bool kpMainWindow::toolHasBegunShape () const
354 kpTool *currentTool = tool ();
355 return (currentTool && currentTool->hasBegunShape ());
358 // public
359 bool kpMainWindow::toolIsASelectionTool (bool includingTextTool) const
361 kpTool *currentTool = tool ();
363 return ((currentTool == d->toolFreeFormSelection) ||
364 (currentTool == d->toolRectSelection) ||
365 (currentTool == d->toolEllipticalSelection) ||
366 (currentTool == d->toolText && includingTextTool));
369 // public
370 bool kpMainWindow::toolIsTextTool () const
372 return (tool () == d->toolText);
376 // private
377 void kpMainWindow::toolEndShape ()
379 if (toolHasBegunShape ())
380 tool ()->endShapeInternal ();
384 // public
385 kpImageSelectionTransparency kpMainWindow::imageSelectionTransparency () const
387 kpToolWidgetOpaqueOrTransparent *oot = d->toolToolBar->toolWidgetOpaqueOrTransparent ();
388 Q_ASSERT (oot);
390 return kpImageSelectionTransparency (oot->isOpaque (), backgroundColor (), d->colorToolBar->colorSimilarity ());
393 // public
394 void kpMainWindow::setImageSelectionTransparency (const kpImageSelectionTransparency &transparency, bool forceColorChange)
396 #if DEBUG_KP_MAIN_WINDOW && 1
397 kDebug () << "kpMainWindow::setImageSelectionTransparency() isOpaque=" << transparency.isOpaque ()
398 << " color=" << (transparency.transparentColor ().isValid () ? (int *) transparency.transparentColor ().toQRgb () : 0)
399 << " forceColorChange=" << forceColorChange
400 << endl;
401 #endif
403 kpToolWidgetOpaqueOrTransparent *oot = d->toolToolBar->toolWidgetOpaqueOrTransparent ();
404 Q_ASSERT (oot);
406 d->settingImageSelectionTransparency++;
408 oot->setOpaque (transparency.isOpaque ());
409 if (transparency.isTransparent () || forceColorChange)
411 d->colorToolBar->setColor (1, transparency.transparentColor ());
412 d->colorToolBar->setColorSimilarity (transparency.colorSimilarity ());
415 d->settingImageSelectionTransparency--;
418 // public
419 int kpMainWindow::settingImageSelectionTransparency () const
421 return d->settingImageSelectionTransparency;
425 // private slot
426 void kpMainWindow::slotToolSelected (kpTool *tool)
428 #if DEBUG_KP_MAIN_WINDOW
429 kDebug () << "kpMainWindow::slotToolSelected (" << tool << ")";
430 #endif
432 kpTool *previousTool = d->toolToolBar ? d->toolToolBar->previousTool () : 0;
434 if (previousTool)
436 disconnect (previousTool, SIGNAL (movedAndAboutToDraw (const QPoint &, const QPoint &, int, bool *)),
437 this, SLOT (slotDragScroll (const QPoint &, const QPoint &, int, bool *)));
438 disconnect (previousTool, SIGNAL (endedDraw (const QPoint &)),
439 this, SLOT (slotEndDragScroll ()));
440 disconnect (previousTool, SIGNAL (cancelledShape (const QPoint &)),
441 this, SLOT (slotEndDragScroll ()));
443 disconnect (previousTool, SIGNAL (userMessageChanged (const QString &)),
444 this, SLOT (recalculateStatusBarMessage ()));
445 disconnect (previousTool, SIGNAL (userShapePointsChanged (const QPoint &, const QPoint &)),
446 this, SLOT (recalculateStatusBarShape ()));
447 disconnect (previousTool, SIGNAL (userShapeSizeChanged (const QSize &)),
448 this, SLOT (recalculateStatusBarShape ()));
450 disconnect (d->colorToolBar, SIGNAL (colorsSwapped (const kpColor &, const kpColor &)),
451 previousTool, SLOT (slotColorsSwappedInternal (const kpColor &, const kpColor &)));
452 disconnect (d->colorToolBar, SIGNAL (foregroundColorChanged (const kpColor &)),
453 previousTool, SLOT (slotForegroundColorChangedInternal (const kpColor &)));
454 disconnect (d->colorToolBar, SIGNAL (backgroundColorChanged (const kpColor &)),
455 previousTool, SLOT (slotBackgroundColorChangedInternal (const kpColor &)));
456 disconnect (d->colorToolBar, SIGNAL (colorSimilarityChanged (double, int)),
457 previousTool, SLOT (slotColorSimilarityChangedInternal (double, int)));
460 if (tool)
462 connect (tool, SIGNAL (movedAndAboutToDraw (const QPoint &, const QPoint &, int, bool *)),
463 this, SLOT (slotDragScroll (const QPoint &, const QPoint &, int, bool *)));
464 connect (tool, SIGNAL (endedDraw (const QPoint &)),
465 this, SLOT (slotEndDragScroll ()));
466 connect (tool, SIGNAL (cancelledShape (const QPoint &)),
467 this, SLOT (slotEndDragScroll ()));
469 connect (tool, SIGNAL (userMessageChanged (const QString &)),
470 this, SLOT (recalculateStatusBarMessage ()));
471 connect (tool, SIGNAL (userShapePointsChanged (const QPoint &, const QPoint &)),
472 this, SLOT (recalculateStatusBarShape ()));
473 connect (tool, SIGNAL (userShapeSizeChanged (const QSize &)),
474 this, SLOT (recalculateStatusBarShape ()));
475 recalculateStatusBar ();
477 connect (d->colorToolBar, SIGNAL (colorsSwapped (const kpColor &, const kpColor &)),
478 tool, SLOT (slotColorsSwappedInternal (const kpColor &, const kpColor &)));
479 connect (d->colorToolBar, SIGNAL (foregroundColorChanged (const kpColor &)),
480 tool, SLOT (slotForegroundColorChangedInternal (const kpColor &)));
481 connect (d->colorToolBar, SIGNAL (backgroundColorChanged (const kpColor &)),
482 tool, SLOT (slotBackgroundColorChangedInternal (const kpColor &)));
483 connect (d->colorToolBar, SIGNAL (colorSimilarityChanged (double, int)),
484 tool, SLOT (slotColorSimilarityChangedInternal (double, int)));
487 saveLastTool ();
490 updateToolOptionPrevNextActionsEnabled ();
491 updateActionDrawOpaqueEnabled ();
495 // private
496 void kpMainWindow::readLastTool ()
498 KConfigGroup cfg (KGlobal::config (), kpSettingsGroupTools);
500 d->lastToolNumber = cfg.readEntry (kpSettingLastTool, -1);
504 // private
505 int kpMainWindow::toolNumber () const
507 int number = 0;
508 for (QList <kpTool *>::const_iterator it = d->tools.constBegin ();
509 it != d->tools.constEnd ();
510 it++)
512 if (*it == tool ())
513 return number;
515 number++;
518 return -1;
521 // private
522 void kpMainWindow::saveLastTool ()
524 int number = toolNumber ();
525 if (number < 0 || number >= (int) d->tools.count ())
526 return;
529 KConfigGroup cfg (KGlobal::config (), kpSettingsGroupTools);
531 cfg.writeEntry (kpSettingLastTool, number);
532 cfg.sync ();
536 // private
537 bool kpMainWindow::maybeDragScrollingMainView () const
539 return (tool () && d->mainView &&
540 tool ()->viewUnderStartPoint () == d->mainView);
543 // private slot
544 bool kpMainWindow::slotDragScroll (const QPoint &docPoint,
545 const QPoint &docLastPoint,
546 int zoomLevel,
547 bool *scrolled)
549 #if DEBUG_KP_MAIN_WINDOW
550 kDebug () << "kpMainWindow::slotDragScroll() maybeDragScrolling="
551 << maybeDragScrollingMainView ()
552 << endl;
553 #endif
555 if (maybeDragScrollingMainView ())
557 return d->scrollView->beginDragScroll (docPoint, docLastPoint, zoomLevel, scrolled);
559 else
561 return false;
565 // private slot
566 bool kpMainWindow::slotEndDragScroll ()
568 // (harmless if haven't started drag scroll)
569 return d->scrollView->endDragScroll ();
573 // private slot
574 void kpMainWindow::slotBeganDocResize ()
576 toolEndShape ();
578 recalculateStatusBarShape ();
581 // private slot
582 void kpMainWindow::slotContinuedDocResize (const QSize &)
584 recalculateStatusBarShape ();
587 // private slot
588 void kpMainWindow::slotCancelledDocResize ()
590 recalculateStatusBar ();
593 // private slot
594 void kpMainWindow::slotEndedDocResize (const QSize &size)
596 #define DOC_RESIZE_COMPLETED() \
598 d->docResizeToBeCompleted = false; \
599 recalculateStatusBar (); \
602 // Prevent statusbar updates
603 d->docResizeToBeCompleted = true;
605 d->docResizeWidth = (size.width () > 0 ? size.width () : 1),
606 d->docResizeHeight = (size.height () > 0 ? size.height () : 1);
608 if (d->docResizeWidth == d->document->width () &&
609 d->docResizeHeight == d->document->height ())
611 DOC_RESIZE_COMPLETED ();
612 return;
616 // Blank status to avoid confusion if dialog comes up
617 setStatusBarMessage ();
618 setStatusBarShapePoints ();
619 setStatusBarShapeSize ();
622 if (kpTool::warnIfBigImageSize (d->document->width (),
623 d->document->height (),
624 d->docResizeWidth, d->docResizeHeight,
625 i18n ("<qt><p>Resizing the image to"
626 " %1x%2 may take a substantial amount of memory."
627 " This can reduce system"
628 " responsiveness and cause other application resource"
629 " problems.</p>"
631 "<p>Are you sure want to resize the"
632 " image?</p></qt>",
633 d->docResizeWidth,
634 d->docResizeHeight),
635 i18n ("Resize Image?"),
636 i18n ("R&esize Image"),
637 this))
639 d->commandHistory->addCommand (
640 new kpTransformResizeScaleCommand (
641 false/*doc, not sel*/,
642 d->docResizeWidth, d->docResizeHeight,
643 kpTransformResizeScaleCommand::Resize,
644 commandEnvironment ()));
646 saveDefaultDocSize (QSize (d->docResizeWidth, d->docResizeHeight));
650 DOC_RESIZE_COMPLETED ();
652 #undef DOC_RESIZE_COMPLETED
655 // private slot
656 void kpMainWindow::slotDocResizeMessageChanged (const QString &string)
658 #if DEBUG_KP_MAIN_WINDOW
659 kDebug () << "kpMainWindow::slotDocResizeMessageChanged(" << string
660 << ") docResizeToBeCompleted=" << d->docResizeToBeCompleted
661 << endl;
662 #else
663 (void) string;
664 #endif
666 if (d->docResizeToBeCompleted)
667 return;
669 recalculateStatusBarMessage ();
673 // private slot
674 void kpMainWindow::slotActionPrevToolOptionGroup1 ()
676 if (!d->toolToolBar->shownToolWidget (0))
677 return;
679 // We don't call toolEndShape() here because we want #23 in the file BUGS
680 // to later work.
682 d->toolToolBar->shownToolWidget (0)->selectPreviousOption ();
683 updateToolOptionPrevNextActionsEnabled ();
686 // private slot
687 void kpMainWindow::slotActionNextToolOptionGroup1 ()
689 if (!d->toolToolBar->shownToolWidget (0))
690 return;
692 // We don't call toolEndShape() here because we want #23 in the file BUGS
693 // to later work.
695 d->toolToolBar->shownToolWidget (0)->selectNextOption ();
696 updateToolOptionPrevNextActionsEnabled ();
700 // private slot
701 void kpMainWindow::slotActionPrevToolOptionGroup2 ()
703 if (!d->toolToolBar->shownToolWidget (1))
704 return;
706 // We don't call toolEndShape() here because we want #23 in the file BUGS
707 // to later work.
709 d->toolToolBar->shownToolWidget (1)->selectPreviousOption ();
710 updateToolOptionPrevNextActionsEnabled ();
713 // private slot
714 void kpMainWindow::slotActionNextToolOptionGroup2 ()
716 if (!d->toolToolBar->shownToolWidget (1))
717 return;
719 // We don't call toolEndShape() here because we want #23 in the file BUGS
720 // to later work.
722 d->toolToolBar->shownToolWidget (1)->selectNextOption ();
723 updateToolOptionPrevNextActionsEnabled ();
727 // private slot
728 void kpMainWindow::slotActionDrawOpaqueToggled ()
730 #if DEBUG_KP_MAIN_WINDOW
731 kDebug () << "kpMainWindow::slotActionDrawOpaqueToggled()";
732 #endif
733 toolEndShape ();
735 // TODO: How does this differ to setImageSelectionTransparency()?
737 // ("kpToolWidgetBase::" is to access one overload shadowed by the override
738 // of the other overload)
739 d->toolToolBar->toolWidgetOpaqueOrTransparent ()->kpToolWidgetBase::setSelected (
740 (d->actionDrawOpaque->isChecked () ?
741 0/*row 0 = opaque*/ :
742 1/*row 1 = transparent*/),
743 0/*column*/);
746 // private slot
747 void kpMainWindow::slotActionDrawColorSimilarity ()
749 #if DEBUG_KP_MAIN_WINDOW
750 kDebug () << "kpMainWindow::slotActionDrawColorSimilarity()";
751 #endif
752 toolEndShape ();
754 d->colorToolBar->openColorSimilarityDialog ();
758 // public slots
760 // LOTODO: Who actually calls these?
761 #define SLOT_TOOL(toolName) \
762 void kpMainWindow::slotTool##toolName () \
764 if (!d->toolToolBar) \
765 return; \
767 if (tool () == d->tool##toolName) \
768 return; \
770 d->toolToolBar->selectTool (d->tool##toolName); \
773 SLOT_TOOL (Spraycan)
774 SLOT_TOOL (Brush)
775 SLOT_TOOL (ColorEraser)
776 SLOT_TOOL (ColorPicker)
777 SLOT_TOOL (Curve)
778 SLOT_TOOL (Ellipse)
779 SLOT_TOOL (EllipticalSelection)
780 SLOT_TOOL (Eraser)
781 SLOT_TOOL (FloodFill)
782 SLOT_TOOL (FreeFormSelection)
783 SLOT_TOOL (Line)
784 SLOT_TOOL (Pen)
785 SLOT_TOOL (Polygon)
786 SLOT_TOOL (Polyline)
787 SLOT_TOOL (Rectangle)
788 SLOT_TOOL (RectSelection)
789 SLOT_TOOL (RoundedRectangle)
790 SLOT_TOOL (Text)
791 SLOT_TOOL (Zoom)