]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt2/QWorkArea.C
Get rid of the static_casts.
[lyx.git] / src / frontends / qt2 / QWorkArea.C
index 6f23701f10ed8bd1da85ca52df3a44cdc46727d2..b5971a214ad1f9887acffcdb2f77427b0f5e5dd3 100644 (file)
@@ -3,16 +3,13 @@
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
- * \author John Levon 
+ * \author John Levon
  *
  * Full author contact details are available in file CREDITS
  */
 
 #include <config.h>
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
 
 #include "debug.h"
 #include "LyXView.h"
 #include "support/lstrings.h"
 #include "support/LAssert.h"
 
-#include <cmath>
-#include <cctype>
-
 #include "QWorkArea.h"
+#include "qt_helpers.h"
+#include "lcolorcache.h"
+
 #include <qapplication.h>
-#include <qevent.h> 
+#include <qevent.h>
 #include <qpainter.h>
 #include <qmainwindow.h>
 #include <qlayout.h>
 #include <qclipboard.h>
+
+#ifdef Q_WS_X11
+#include <X11/Xlib.h>
+#endif
+
+#include <cmath>
+#include <cctype>
+
 using std::endl;
 using std::abs;
 using std::hex;
 
+
 QWorkArea::QWorkArea(int, int, int, int)
        : WorkArea(), QWidget(qApp->mainWidget()), painter_(*this)
 {
@@ -46,17 +49,17 @@ QWorkArea::QWorkArea(int, int, int, int)
        content_ = new QContentPane(this);
 
        (static_cast<QMainWindow*>(qApp->mainWidget()))->setCentralWidget(this);
+
        setFocusProxy(content_);
+
        content_->show();
 
-       content_->setBackgroundColor(lcolor.getX11Name(LColor::background).c_str());
+       content_->setBackgroundColor(lcolorcache.get(LColor::background));
 
        QHBoxLayout * vl = new QHBoxLayout(this);
        vl->addWidget(content_, 5);
        vl->addWidget(scrollbar_, 0);
+
        show();
 }
 
@@ -70,33 +73,72 @@ void QWorkArea::setScrollbarParams(int h, int pos, int line_h)
 {
        // do what cursor movement does (some grey)
        h += height() / 4;
-       int max = h - height();
-       if (max < 0)
-               max = 0;
+
+       int max = std::max(0, h - height());
+
        scrollbar_->setRange(0, max);
        scrollbar_->setValue(pos);
        scrollbar_->setLineStep(line_h);
        scrollbar_->setPageStep(height());
 }
 
+namespace {
+QWorkArea const * wa_ptr = 0;
+}
 
-void QWorkArea::haveSelection(bool) const
+#ifdef Q_WS_X11
+bool lyxX11EventFilter(XEvent * xev)
 {
-       // not possible in Qt !
+       switch (xev->type) {
+       case SelectionRequest:
+               lyxerr[Debug::GUI] << "X requested selection." << endl;
+               if (wa_ptr)
+                       wa_ptr->selectionRequested();
+               break;
+       case SelectionClear:
+               lyxerr[Debug::GUI] << "Lost selection." << endl;
+               if (wa_ptr)
+                       wa_ptr->selectionLost();
+               break;
+       }
+       return false;
 }
+#endif
 
-string const QWorkArea::getClipboard() const 
+void QWorkArea::haveSelection(bool own) const
 {
-       QString str = QApplication::clipboard()->text(); 
+       wa_ptr = this;
+
+#if QT_VERSION >= 300
+       if (!QApplication::clipboard()->supportsSelection())
+               return;
+
+       if (own) {
+               QApplication::clipboard()->setSelectionMode(true);
+               QApplication::clipboard()->setText(QString());
+       }
+       // We don't need to do anything if own = false, as this case is
+       // handled by QT.
+#endif
+}
+
+
+string const QWorkArea::getClipboard() const
+{
+#if QT_VERSION >= 300
+       QApplication::clipboard()->setSelectionMode(true);
+#endif
+       QString str = QApplication::clipboard()->text();
        if (str.isNull())
                return string();
-       return str.latin1();
+       return fromqstr(str);
 }
 
-       
+
 void QWorkArea::putClipboard(string const & str) const
 {
-       QApplication::clipboard()->setText(str.c_str());
+#if QT_VERSION >= 300
+       QApplication::clipboard()->setSelectionMode(true);
+#endif
+       QApplication::clipboard()->setText(toqstr(str));
 }