42 #include <QApplication>
44 #include <QHBoxLayout>
47 #include <QMouseEvent>
49 #include <QStyleOption>
59 QCoreApplication::translate(
"QtCursorDatabase",
"Arrow"),
60 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-arrow.png")));
63 QCoreApplication::translate(
"QtCursorDatabase",
"Up Arrow"),
64 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-uparrow.png")));
67 QCoreApplication::translate(
"QtCursorDatabase",
"Cross"),
68 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-cross.png")));
69 appendCursor(Qt::WaitCursor,
70 QCoreApplication::translate(
"QtCursorDatabase",
"Wait"),
71 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-wait.png")));
74 QCoreApplication::translate(
"QtCursorDatabase",
"IBeam"),
75 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-ibeam.png")));
78 QCoreApplication::translate(
"QtCursorDatabase",
"Size Vertical"),
79 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-sizev.png")));
82 QCoreApplication::translate(
"QtCursorDatabase",
"Size Horizontal"),
83 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-sizeh.png")));
86 QCoreApplication::translate(
"QtCursorDatabase",
"Size Backslash"),
87 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-sizef.png")));
90 QCoreApplication::translate(
"QtCursorDatabase",
"Size Slash"),
91 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-sizeb.png")));
94 QCoreApplication::translate(
"QtCursorDatabase",
"Size All"),
95 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-sizeall.png")));
97 Qt::BlankCursor, QCoreApplication::translate(
"QtCursorDatabase",
"Blank"), QIcon());
100 QCoreApplication::translate(
"QtCursorDatabase",
"Split Vertical"),
101 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-vsplit.png")));
104 QCoreApplication::translate(
"QtCursorDatabase",
"Split Horizontal"),
105 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-hsplit.png")));
106 appendCursor(Qt::PointingHandCursor,
107 QCoreApplication::translate(
"QtCursorDatabase",
"Pointing Hand"),
108 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-hand.png")));
111 QCoreApplication::translate(
"QtCursorDatabase",
"Forbidden"),
112 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-forbidden.png")));
115 QCoreApplication::translate(
"QtCursorDatabase",
"Open Hand"),
116 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-openhand.png")));
118 Qt::ClosedHandCursor,
119 QCoreApplication::translate(
"QtCursorDatabase",
"Closed Hand"),
120 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-closedhand.png")));
123 QCoreApplication::translate(
"QtCursorDatabase",
"What's This"),
124 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-whatsthis.png")));
125 appendCursor(Qt::BusyCursor,
126 QCoreApplication::translate(
"QtCursorDatabase",
"Busy"),
127 QIcon(QLatin1String(
":/qt-project.org/qtpropertybrowser/images/cursor-busy.png")));
133 m_cursorNames.clear();
134 m_cursorIcons.clear();
135 m_valueToCursorShape.clear();
136 m_cursorShapeToValue.clear();
140 QtCursorDatabase::appendCursor(Qt::CursorShape shape,
const QString& name,
const QIcon& icon)
142 if (m_cursorShapeToValue.contains(shape))
147 const int value = m_cursorNames.count();
148 m_cursorNames.append(name);
149 m_cursorIcons.insert(
value, icon);
150 m_valueToCursorShape.insert(
value, shape);
151 m_cursorShapeToValue.insert(shape,
value);
157 return m_cursorNames;
163 return m_cursorIcons;
173 return m_cursorNames.at(val);
183 return m_cursorIcons.value(val);
190 Qt::CursorShape shape = cursor.shape();
192 if (m_cursorShapeToValue.contains(shape))
194 return m_cursorShapeToValue[shape];
205 if (m_valueToCursorShape.contains(
value))
207 return QCursor(m_valueToCursorShape[
value]);
217 QImage img(16, 16, QImage::Format_ARGB32_Premultiplied);
220 QPainter painter(&img);
221 painter.setCompositionMode(QPainter::CompositionMode_Source);
222 painter.fillRect(0, 0, img.width(), img.height(), b);
223 QColor color = b.color();
225 if (color.alpha() != 255)
227 QBrush opaqueBrush = b;
229 opaqueBrush.setColor(color);
231 img.width() / 4, img.height() / 4, img.width() / 2, img.height() / 2, opaqueBrush);
235 return QPixmap::fromImage(img);
247 return QCoreApplication::translate(
"QtPropertyBrowserUtils",
"[%1, %2, %3] (%4)")
258 QImage img(16, 16, QImage::Format_ARGB32_Premultiplied);
261 p.setRenderHint(QPainter::TextAntialiasing,
true);
262 p.setRenderHint(QPainter::Antialiasing,
true);
266 t.setAlignment(Qt::AlignCenter);
267 p.drawText(QRect(0, 0, 16, 16), QString(QLatin1Char(
'A')), t);
268 return QPixmap::fromImage(img);
280 return QCoreApplication::translate(
"QtPropertyBrowserUtils",
"[%1, %2]")
286 QWidget(parent), m_checkBox(new QCheckBox(this)), m_textVisible(true)
288 QHBoxLayout* lt =
new QHBoxLayout;
290 if (QApplication::layoutDirection() == Qt::LeftToRight)
292 lt->setContentsMargins(4, 0, 0, 0);
296 lt->setContentsMargins(0, 0, 4, 0);
299 lt->addWidget(m_checkBox);
301 connect(m_checkBox, SIGNAL(
toggled(
bool)),
this, SIGNAL(
toggled(
bool)));
302 setFocusProxy(m_checkBox);
303 m_checkBox->setText(tr(
"True"));
318 m_checkBox->setText(
isChecked() ? tr(
"True") : tr(
"False"));
322 m_checkBox->setText(QString());
329 return m_checkBox->checkState();
335 m_checkBox->setCheckState(state);
341 return m_checkBox->isChecked();
347 m_checkBox->setChecked(
c);
354 m_checkBox->setText(
isChecked() ? tr(
"True") : tr(
"False"));
360 return m_checkBox->blockSignals(block);
366 if (event->buttons() == Qt::LeftButton)
373 QWidget::mousePressEvent(event);
383 style()->drawPrimitive(QStyle::PE_Widget, &opt, &p,
this);
387 QWidget(parent), m_num(0), m_lineEdit(new QLineEdit(this))
389 QHBoxLayout* layout =
new QHBoxLayout(
this);
390 layout->addWidget(m_lineEdit);
391 layout->setMargin(0);
392 m_lineEdit->installEventFilter(
this);
393 m_lineEdit->setReadOnly(
true);
394 m_lineEdit->setFocusProxy(
this);
395 setFocusPolicy(m_lineEdit->focusPolicy());
396 setAttribute(Qt::WA_InputMethodEnabled);
402 if (o == m_lineEdit && e->type() == QEvent::ContextMenu)
404 QContextMenuEvent*
c =
static_cast<QContextMenuEvent*
>(e);
405 QMenu* menu = m_lineEdit->createStandardContextMenu();
406 const QList<QAction*> actions = menu->actions();
407 QListIterator<QAction*> itAction(actions);
409 while (itAction.hasNext())
411 QAction* action = itAction.next();
412 action->setShortcut(QKeySequence());
413 QString actionString = action->text();
414 const int pos = actionString.lastIndexOf(QLatin1Char(
'\t'));
418 actionString.remove(pos, actionString.length() - pos);
421 action->setText(actionString);
424 QAction* actionBefore = 0;
426 if (actions.count() > 0)
428 actionBefore = actions[0];
431 QAction* clearAction =
new QAction(tr(
"Clear Shortcut"), menu);
432 menu->insertAction(actionBefore, clearAction);
433 menu->insertSeparator(actionBefore);
434 clearAction->setEnabled(!m_keySequence.isEmpty());
435 connect(clearAction, SIGNAL(triggered()),
this, SLOT(slotClearShortcut()));
436 menu->exec(
c->globalPos());
442 return QWidget::eventFilter(o, e);
446 QtKeySequenceEdit::slotClearShortcut()
448 if (m_keySequence.isEmpty())
458 QtKeySequenceEdit::handleKeyEvent(QKeyEvent* e)
460 int nextKey = e->key();
462 if (nextKey == Qt::Key_Control || nextKey == Qt::Key_Shift || nextKey == Qt::Key_Meta ||
463 nextKey == Qt::Key_Alt || nextKey == Qt::Key_Super_L || nextKey == Qt::Key_AltGr)
468 nextKey |= translateModifiers(e->modifiers(), e->text());
469 int k0 = m_keySequence[0];
470 int k1 = m_keySequence[1];
471 int k2 = m_keySequence[2];
472 int k3 = m_keySequence[3];
509 m_keySequence = QKeySequence(k0, k1, k2, k3);
510 m_lineEdit->setText(m_keySequence.toString(QKeySequence::NativeText));
518 if (sequence == m_keySequence)
524 m_keySequence = sequence;
525 m_lineEdit->setText(m_keySequence.toString(QKeySequence::NativeText));
531 return m_keySequence;
535 QtKeySequenceEdit::translateModifiers(Qt::KeyboardModifiers state,
const QString& text)
const
539 if ((state & Qt::ShiftModifier) && (text.size() == 0 || !text.at(0).isPrint() ||
540 text.at(0).isLetter() || text.at(0).isSpace()))
545 if (state & Qt::ControlModifier)
550 if (state & Qt::MetaModifier)
555 if (state & Qt::AltModifier)
566 m_lineEdit->event(e);
567 m_lineEdit->selectAll();
568 QWidget::focusInEvent(e);
575 m_lineEdit->event(e);
576 QWidget::focusOutEvent(e);
589 m_lineEdit->event(e);
598 style()->drawPrimitive(QStyle::PE_Widget, &opt, &p,
this);
604 if (e->type() == QEvent::Shortcut || e->type() == QEvent::ShortcutOverride ||
605 e->type() == QEvent::KeyRelease)
611 return QWidget::event(e);