summaryrefslogtreecommitdiffstats
path: root/kolourpaint/kpthumbnail.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kolourpaint/kpthumbnail.cpp')
-rw-r--r--kolourpaint/kpthumbnail.cpp213
1 files changed, 213 insertions, 0 deletions
diff --git a/kolourpaint/kpthumbnail.cpp b/kolourpaint/kpthumbnail.cpp
new file mode 100644
index 00000000..a45164ac
--- /dev/null
+++ b/kolourpaint/kpthumbnail.cpp
@@ -0,0 +1,213 @@
+
+/*
+ Copyright (c) 2003,2004,2005 Clarence Dang <[email protected]>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#define DEBUG_KP_THUMBNAIL 0
+
+#include <kpthumbnail.h>
+
+#include <qdockarea.h>
+#include <qdockwindow.h>
+#include <qtimer.h>
+
+#include <kdebug.h>
+#include <klocale.h>
+
+#include <kpdefs.h>
+#include <kpdocument.h>
+#include <kpmainwindow.h>
+#include <kpthumbnailview.h>
+#include <kptool.h>
+
+
+// TODO: get out of the Alt+Tab list
+kpThumbnail::kpThumbnail (kpMainWindow *parent, const char *name)
+#if KP_IS_QT_3_3
+ : QDockWindow (QDockWindow::OutsideDock, parent, name),
+#else // With Qt <3.3, OutsideDock requires parent = 0,
+ // sync: make sure outside of dock
+ : QDockWindow (QDockWindow::InDock, parent, name),
+ #warning "Using Qt <3.3: the thumbnail will flicker more when appearing"
+#endif
+ m_mainWindow (parent),
+ m_view (0)
+{
+ if (!parent)
+ kdError () << "kpThumbnail::kpThumbnail() requires parent" << endl;
+
+
+#if !KP_IS_QT_3_3
+ if (parent)
+ {
+ hide ();
+
+ // sync: make sure outside of dock
+ parent->moveDockWindow (this, Qt::DockTornOff);
+ }
+#endif
+
+
+ if (parent)
+ {
+ // Prevent thumbnail from docking - it's _really_ irritating otherwise
+ parent->leftDock ()->setAcceptDockWindow (this, false);
+ parent->rightDock ()->setAcceptDockWindow (this, false);
+ parent->topDock ()->setAcceptDockWindow (this, false);
+ parent->bottomDock ()->setAcceptDockWindow (this, false);
+ }
+
+
+ QSize layoutMinimumSize = layout () ? layout ()->minimumSize () : QSize ();
+#if DEBUG_KP_THUMBNAIL
+ kdDebug () << "\tlayout=" << layout ()
+ << " minSize=" << (layout () ? layout ()->minimumSize () : QSize ()) << endl;
+ kdDebug () << "\tboxLayout=" << boxLayout ()
+ << " minSize=" << (boxLayout () ? boxLayout ()->minimumSize () : QSize ())
+ << endl;
+#endif
+ if (layout ())
+ layout ()->setResizeMode (QLayout::FreeResize);
+ setMinimumSize (QMAX (layoutMinimumSize.width (), 64),
+ QMAX (layoutMinimumSize.height (), 64));
+
+
+ // Enable "X" Close Button
+ setCloseMode (QDockWindow::Always);
+
+ setResizeEnabled (true);
+
+ updateCaption ();
+}
+
+kpThumbnail::~kpThumbnail ()
+{
+}
+
+
+// public
+kpThumbnailView *kpThumbnail::view () const
+{
+ return m_view;
+}
+
+// public
+void kpThumbnail::setView (kpThumbnailView *view)
+{
+#if DEBUG_KP_THUMBNAIL
+ kdDebug () << "kpThumbnail::setView(" << view << ")" << endl;
+#endif
+
+ if (m_view == view)
+ return;
+
+
+ if (m_view)
+ {
+ disconnect (m_view, SIGNAL (destroyed ()),
+ this, SLOT (slotViewDestroyed ()));
+ disconnect (m_view, SIGNAL (zoomLevelChanged (int, int)),
+ this, SLOT (updateCaption ()));
+
+ boxLayout ()->remove (m_view);
+ }
+
+ m_view = view;
+
+ if (m_view)
+ {
+ connect (m_view, SIGNAL (destroyed ()),
+ this, SLOT (slotViewDestroyed ()));
+ connect (m_view, SIGNAL (zoomLevelChanged (int, int)),
+ this, SLOT (updateCaption ()));
+ updateCaption ();
+
+ boxLayout ()->addWidget (m_view);
+ m_view->show ();
+ }
+}
+
+
+// public slot
+void kpThumbnail::updateCaption ()
+{
+ setCaption (view () ? view ()->caption () : i18n ("Thumbnail"));
+}
+
+
+// public slot virtual [base QDockWindow]
+void kpThumbnail::dock ()
+{
+#if DEBUG_KP_THUMBNAIL
+ kdDebug () << "kpThumbnail::dock() CALLED - ignoring request" << endl;
+#endif
+
+ // --- ignore all requests to dock ---
+}
+
+
+// protected slot
+void kpThumbnail::slotViewDestroyed ()
+{
+#if DEBUG_KP_THUMBNAIL
+ kdDebug () << "kpThumbnail::slotViewDestroyed()" << endl;
+#endif
+
+ m_view = 0;
+ updateCaption ();
+}
+
+
+// protected virtual [base QWidget]
+void kpThumbnail::resizeEvent (QResizeEvent *e)
+{
+#if DEBUG_KP_THUMBNAIL
+ kdDebug () << "kpThumbnail::resizeEvent(" << width ()
+ << "," << height () << ")" << endl;
+#endif
+
+ QDockWindow::resizeEvent (e);
+
+ // updateVariableZoom (); TODO: is below a good idea since this commented out
+
+ if (m_mainWindow)
+ {
+ m_mainWindow->notifyThumbnailGeometryChanged ();
+
+ if (m_mainWindow->tool ())
+ m_mainWindow->tool ()->somethingBelowTheCursorChanged ();
+ }
+}
+
+// protected virtual [base QWidget]
+void kpThumbnail::moveEvent (QMoveEvent * /*e*/)
+{
+ if (m_mainWindow)
+ m_mainWindow->notifyThumbnailGeometryChanged ();
+}
+
+
+#include <kpthumbnail.moc>