Ejemplo n.º 1
0
ToolSettings::ToolSettings(tools::ToolController *ctrl, QWidget *parent)
	: QDockWidget(parent), d(new Private(ctrl))
{
	setStyleSheet(defaultDockStylesheet());

	// Create a widget stack
	d->widgetStack = new QStackedWidget(this);
	setWidget(d->widgetStack);

	for(int i=0;i<tools::Tool::_LASTTOOL;++i) {
		if(!d->pages[i].settings->getUi())
			d->widgetStack->addWidget(d->pages[i].settings->createUi(this));
	}

	setWindowTitle(d->pages[d->currentTool].title);

	connect(static_cast<tools::BrushSettings*>(getToolSettingsPage(tools::Tool::FREEHAND)), &tools::BrushSettings::colorChanged,
			this, &ToolSettings::setForegroundColor);
	connect(static_cast<tools::BrushSettings*>(getToolSettingsPage(tools::Tool::FREEHAND)), &tools::BrushSettings::subpixelModeChanged,
			this, &ToolSettings::subpixelModeChanged);
	connect(static_cast<tools::ColorPickerSettings*>(getToolSettingsPage(tools::Tool::PICKER)), &tools::ColorPickerSettings::colorSelected,
			this, &ToolSettings::setForegroundColor);

	d->colorDialog = new color_widgets::ColorDialog(this);
	d->colorDialog->setAlphaEnabled(false);
	connect(d->colorDialog, &color_widgets::ColorDialog::colorSelected, this, &ToolSettings::setForegroundColor);
}
Ejemplo n.º 2
0
/**
 * @brief Update the tool slot button to match the stored tool settings
 * @param i
 */
void ToolSettings::updateToolSlot(int i, bool typeChanged)
{
	int tool = _toolprops[i].currentTool();
	tools::ToolSettings *ts = getToolSettingsPage(tools::Tool::Type(tool));
	if(!ts)
		ts = getToolSettingsPage(tools::Tool::PEN);


	_quickslot[i]->setColors(_toolprops[i].foregroundColor(), _toolprops[i].backgroundColor());

	if(typeChanged) {
		_quickslot[i]->setIcons(ts->getIcon(icon::LIGHT), ts->getIcon(icon::DARK));
		_quickslot[i]->setToolTip(QStringLiteral("#%1: %2").arg(i+1).arg(ts->getTitle()));
	}
}
Ejemplo n.º 3
0
void ToolSettings::selectTool(tools::Type tool)
{
	tools::ToolSettings *ts = getToolSettingsPage(tool);
	if(!ts) {
		qWarning("selectTool: invalid tool %d", tool);
		return;
	}

	_currenttool = ts;

	// Deselect annotation on tool change
	if(tool != tools::ANNOTATION) {
		int a = _textsettings->selected();
		if(a)
			_textsettings->setSelection(0);
	}

	setWindowTitle(_currenttool->getTitle());
	_widgets->setCurrentWidget(_currenttool->getUi());
	_currenttool->setForeground(foregroundColor());
	_currenttool->setBackground(backgroundColor());
	_currenttool->restoreToolSettings(_toolprops[currentToolSlot()].tool(_currenttool->getName()));
	_toolprops[_currentQuickslot].setCurrentTool(tool);

	updateToolSlot(currentToolSlot(), true);
	emit toolChanged(tool);
	emit sizeChanged(_currenttool->getSize());
	updateSubpixelMode();
}
Ejemplo n.º 4
0
void ToolSettings::setToolSlot(int idx)
{
	// Currently, brush tool is the only tool with tool slots
	tools::BrushSettings *bs = qobject_cast<tools::BrushSettings*>(d->currentSettings());
	if(bs) {
		// Eraser tool is a specialization of the freehand tool locked to the eraser slot
		if(d->currentTool == tools::Tool::ERASER)
			return;

		d->previousTool = d->currentTool;
		d->previousToolSlot = bs->currentBrushSlot();
		bs->selectBrushSlot(idx);
	} else {
		setTool(tools::Tool::FREEHAND);
		static_cast<tools::BrushSettings*>(getToolSettingsPage(tools::Tool::FREEHAND))->selectBrushSlot(idx);
	}
}
Ejemplo n.º 5
0
void ToolSettings::selectTool(tools::Tool::Type tool)
{
	tools::ToolSettings *ts = getToolSettingsPage(tool);
	if(!ts) {
		qWarning("selectTool: invalid tool %d", tool);
		return;
	}

	_currenttool = ts;

	setWindowTitle(QStringLiteral("%1. %2").arg(currentToolSlot()+1).arg(_currenttool->getTitle()));
	m_widgets->setCurrentWidget(_currenttool->getUi());
	_currenttool->setForeground(foregroundColor());
	_currenttool->restoreToolSettings(_toolprops[currentToolSlot()].tool(_currenttool->getName()));
	_toolprops[_currentQuickslot].setCurrentTool(tool);

	updateToolSlot(currentToolSlot(), true);
	emit toolChanged(tool);
	emit sizeChanged(_currenttool->getSize());
	updateSubpixelMode();
}
Ejemplo n.º 6
0
ToolSettings::ToolSettings(tools::ToolController *ctrl, QWidget *parent)
	: QDockWidget(parent), m_settingspage{},
	m_ctrl(ctrl), _currentQuickslot(0), _eraserOverride(0), _eraserActive(false)
{
	Q_ASSERT(ctrl);

	// Initialize tool slots
	_toolprops.reserve(QUICK_SLOTS);
	for(int i=0;i<QUICK_SLOTS;++i)
		_toolprops.append(tools::ToolsetProperties());

	setStyleSheet(defaultDockStylesheet());

	// Create quick toolchange slot buttons
	// We use the buttons as the title bar for this dock.
	// The widget has special event handling so it can be used
	// to drag the dock like a normal titlebar
	QWidget *tb = new QWidget(this);
	auto *hlayout = new QHBoxLayout(tb);
	hlayout->setContentsMargins(3, 3, 3, 0);
	hlayout->setSpacing(0);
	setTitleBarWidget(tb);

	QButtonGroup *quickbuttons = new QButtonGroup(this);
	quickbuttons->setExclusive(true);

	for(int i=0;i<QUICK_SLOTS;++i) {
		auto *b = new widgets::ToolSlotButton(tb);

		b->setCheckable(true);
		b->setText(QString::number(i+1));
		b->setMinimumSize(40, 40);
		b->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
		b->setAutoRaise(true);

		hlayout->addWidget(b);
		quickbuttons->addButton(b, i);
		_quickslot[i] = b;
	}

	connect(quickbuttons, SIGNAL(buttonClicked(int)), this, SLOT(setToolSlot(int)));

	// Create a widget stack
	m_widgets = new QStackedWidget(this);
	setWidget(m_widgets);

	addPage(tools::Tool::PEN, new tools::PenSettings("pen", tr("Pen"), m_ctrl));
	addPage(tools::Tool::BRUSH, new tools::BrushSettings("brush", tr("Brush"), m_ctrl));
	addPage(tools::Tool::SMUDGE, new tools::SmudgeSettings("smudge", tr("Watercolor"), m_ctrl));
	addPage(tools::Tool::ERASER, new tools::EraserSettings("eraser", tr("Eraser"), m_ctrl));
	addPage(tools::Tool::PICKER, new tools::ColorPickerSettings("picker", tr("Color Picker"), m_ctrl));
	addPage(tools::Tool::LINE, new tools::SimpleSettings("line", tr("Line"), "draw-line", tools::SimpleSettings::Line, true, m_ctrl));
	addPage(tools::Tool::RECTANGLE, new tools::SimpleSettings("rectangle", tr("Rectangle"), "draw-rectangle", tools::SimpleSettings::Rectangle, false, m_ctrl));
	addPage(tools::Tool::ELLIPSE, new tools::SimpleSettings("ellipse", tr("Ellipse"), "draw-ellipse", tools::SimpleSettings::Ellipse, true, m_ctrl));
	addPage(tools::Tool::FLOODFILL, new tools::FillSettings("fill", tr("Flood Fill"), m_ctrl));
	addPage(tools::Tool::ANNOTATION, new tools::AnnotationSettings("annotation", tr("Annotation"), m_ctrl));
	addPage(tools::Tool::SELECTION, new tools::SelectionSettings("selection", tr("Selection (Rectangular)"), false, m_ctrl));
	addPage(tools::Tool::POLYGONSELECTION, new tools::SelectionSettings("polygonselection", tr("Selection (Free-Form)"), true, m_ctrl));
	addPage(tools::Tool::LASERPOINTER, new tools::LaserPointerSettings("laser", tr("Laser pointer"), m_ctrl));

	_currenttool = getToolSettingsPage(tools::Tool::BRUSH);

	connect(static_cast<tools::ColorPickerSettings*>(getToolSettingsPage(tools::Tool::PICKER)), &tools::ColorPickerSettings::colorSelected,
			this, &ToolSettings::setForegroundColor);

	// Create color changer dialogs
	_fgdialog = new color_widgets::ColorDialog(this);
	_fgdialog->setAlphaEnabled(false);
	_fgdialog->setWindowTitle(tr("Foreground Color"));
	connect(_fgdialog, SIGNAL(colorSelected(QColor)), this, SLOT(setForegroundColor(QColor)));
}