From c4e895a81364a04c36aba74be82223962f916842 Mon Sep 17 00:00:00 2001 From: Torsten Paul Date: Tue, 23 Dec 2014 03:07:27 +0100 Subject: [PATCH] Add drag&drop to the FontListDialog. --- openscad.pro | 2 ++ src/FontListDialog.cc | 2 ++ src/FontListDialog.h | 3 -- src/FontListDialog.ui | 19 +++++++++++- src/FontListTableView.cc | 66 ++++++++++++++++++++++++++++++++++++++++ src/FontListTableView.h | 18 +++++++++++ 6 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 src/FontListTableView.cc create mode 100644 src/FontListTableView.h diff --git a/openscad.pro b/openscad.pro index c90942ea..92f1b720 100644 --- a/openscad.pro +++ b/openscad.pro @@ -259,6 +259,7 @@ HEADERS += src/typedefs.h \ src/OpenCSGWarningDialog.h \ src/AboutDialog.h \ src/FontListDialog.h \ + src/FontListTableView.h \ src/builtin.h \ src/calc.h \ src/context.h \ @@ -428,6 +429,7 @@ SOURCES += src/version_check.cc \ src/UIUtils.cc \ src/Dock.cc \ src/FontListDialog.cc \ + src/FontListTableView.cc \ src/launchingscreen.cc \ src/legacyeditor.cc \ src/LibraryInfoDialog.cc diff --git a/src/FontListDialog.cc b/src/FontListDialog.cc index f515774c..474c2ef3 100644 --- a/src/FontListDialog.cc +++ b/src/FontListDialog.cc @@ -60,6 +60,7 @@ void FontListDialog::selection_changed(const QItemSelection ¤t, const QIte { if (current.count() == 0) { copyButton->setEnabled(false); + tableView->setDragText(""); return; } @@ -68,6 +69,7 @@ void FontListDialog::selection_changed(const QItemSelection ¤t, const QIte const QString style = model->item(idx.row(), 1)->text(); selection = QString("\"%1:style=%2\"").arg(quote(name)).arg(quote(style)); copyButton->setEnabled(true); + tableView->setDragText(selection); } void FontListDialog::update_font_list() diff --git a/src/FontListDialog.h b/src/FontListDialog.h index 5624f833..d1927631 100644 --- a/src/FontListDialog.h +++ b/src/FontListDialog.h @@ -6,9 +6,6 @@ #include "qtgettext.h" #include "ui_FontListDialog.h" -#define STRINGIFY(x) #x -#define TOSTRING(x) STRINGIFY(x) - class FontListDialog : public QDialog, public Ui::FontListDialog { Q_OBJECT; diff --git a/src/FontListDialog.ui b/src/FontListDialog.ui index dda5eb1b..70ff4fff 100644 --- a/src/FontListDialog.ui +++ b/src/FontListDialog.ui @@ -67,7 +67,17 @@ - + + + true + + + QAbstractItemView::DragOnly + + + QAbstractItemView::SelectRows + + @@ -100,6 +110,13 @@ + + + FontListTableView + QTableView +
FontListTableView.h
+
+
diff --git a/src/FontListTableView.cc b/src/FontListTableView.cc new file mode 100644 index 00000000..b013d81f --- /dev/null +++ b/src/FontListTableView.cc @@ -0,0 +1,66 @@ +/* + * OpenSCAD (www.openscad.org) + * Copyright (C) 2009-2011 Clifford Wolf and + * Marius Kintel + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * As a special exception, you have permission to link this program + * with the CGAL library and distribute executables, as long as you + * follow the requirements of the GNU GPL in regard to all of the + * software in the executable aside from CGAL. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#include +#include +#include +#include + +#include "qtgettext.h" +#include "FontListDialog.h" + +FontListTableView::FontListTableView(QWidget *parent) : QTableView(parent) +{ +} + +void FontListTableView::setDragText(const QString &text) +{ + this->text = text.trimmed(); +} + +void FontListTableView::startDrag(Qt::DropActions supportedActions) +{ + if (text.isEmpty()) { + return; + } + + QMimeData *mimeData = new QMimeData; + mimeData->setText(text); + + QFontMetrics fm(font()); + QRect rect(0, 0, fm.width(text), fm.height()); + QPixmap pixmap(rect.width(), rect.height()); + pixmap.fill(Qt::transparent); + + QPainter painter(&pixmap); + painter.setFont(font()); + painter.drawText(rect, Qt::AlignCenter, text); + + QDrag *drag = new QDrag(this); + drag->setPixmap(pixmap); + drag->setMimeData(mimeData); + drag->setHotSpot(QPoint(-10, rect.height() + 6)); + drag->exec(supportedActions, Qt::CopyAction); +} diff --git a/src/FontListTableView.h b/src/FontListTableView.h new file mode 100644 index 00000000..70348c46 --- /dev/null +++ b/src/FontListTableView.h @@ -0,0 +1,18 @@ +#pragma once + +#include + +class FontListTableView : public QTableView +{ + Q_OBJECT; + +public: + FontListTableView(QWidget *parent = NULL); + void setDragText(const QString &text); + +protected: + void startDrag(Qt::DropActions supportedActions); + +private: + QString text; +};