/*****************************************************************************/
/* sample.cpp - plugin example for LibreCAD */
/* */
/* Copyright (C) 2011 Rallaz, rallazz@gmail.com */
/* */
/* This library is free software, licensed 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. */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see . */
/*****************************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include "document_interface.h"
#include "sample.h"
QString LC_Sample::name() const
{
return (tr("Sample plugin"));
}
PluginCapabilities LC_Sample::getCapabilities() const
{
PluginCapabilities pluginCapabilities;
pluginCapabilities.menuEntryPoints
<< PluginMenuLocation("Help", tr("Sample plugin"));
return pluginCapabilities;
}
void LC_Sample::execComm(Document_Interface *doc,
QWidget *parent, QString cmd)
{
Q_UNUSED(doc);
lc_Sampledlg pdt(parent);
int result = pdt.exec();
if (result == QDialog::Accepted)
pdt.procesAction(doc);
}
/*****************************/
lc_Sampledlg::lc_Sampledlg(QWidget *parent) : QDialog(parent)
{
setWindowTitle(tr("Draw line"));
QLabel *label;
QDoubleValidator *val = new QDoubleValidator(0);
QGridLayout *mainLayout = new QGridLayout;
label = new QLabel(tr("Start X:"));
mainLayout->addWidget(label, 0, 0);
startxedit = new QLineEdit();
startxedit->setValidator(val);
mainLayout->addWidget(startxedit, 1, 0);
label = new QLabel(tr("Start Y:"));
mainLayout->addWidget(label, 0, 1);
startyedit = new QLineEdit();
startyedit->setValidator(val);
mainLayout->addWidget(startyedit, 1, 1);
label = new QLabel(tr("End X:"));
mainLayout->addWidget(label, 2, 0);
endxedit = new QLineEdit();
endxedit->setValidator(val);
mainLayout->addWidget(endxedit, 3, 0);
label = new QLabel(tr("End Y:"));
mainLayout->addWidget(label, 2, 1);
endyedit = new QLineEdit();
endyedit->setValidator(val);
mainLayout->addWidget(endyedit, 3, 1);
QHBoxLayout *loaccept = new QHBoxLayout;
QPushButton *acceptbut = new QPushButton(tr("Accept"));
loaccept->addStretch();
loaccept->addWidget(acceptbut);
mainLayout->addLayout(loaccept, 4, 0);
QPushButton *cancelbut = new QPushButton(tr("Cancel"));
QHBoxLayout *locancel = new QHBoxLayout;
locancel->addWidget(cancelbut);
locancel->addStretch();
mainLayout->addLayout(locancel, 4, 1);
setLayout(mainLayout);
readSettings();
connect(cancelbut, SIGNAL(clicked()), this, SLOT(reject()));
connect(acceptbut, SIGNAL(clicked()), this, SLOT(checkAccept()));
}
bool lc_Sampledlg::failGUI(QString *msg)
{
if (startxedit->text().isEmpty()) {msg->insert(0, tr("Start X is empty")); return true;}
if (startyedit->text().isEmpty()) {msg->insert(0, tr("Start Y is empty")); return true;}
if (endxedit->text().isEmpty()) {msg->insert(0, tr("End X is empty")); return true;}
if (endyedit->text().isEmpty()) {msg->insert(0, tr("End Y is empty")); return true;}
return false;
}
void lc_Sampledlg::procesAction(Document_Interface *doc)
{
Q_UNUSED(doc);
QPointF start, end;
start.setX(startxedit->text().toDouble());
start.setY(startyedit->text().toDouble());
end.setX(endxedit->text().toDouble());
end.setY(endyedit->text().toDouble());
doc->addLine(&start, &end);
}
void lc_Sampledlg::checkAccept()
{
errmsg.clear();
if (failGUI(&errmsg)) {
QMessageBox::critical ( this, "Sample plugin", errmsg );
errmsg.clear();
return;
}
accept();
}
lc_Sampledlg::~lc_Sampledlg()
{
}
void lc_Sampledlg::closeEvent(QCloseEvent *event)
{
writeSettings();
QWidget::closeEvent(event);
}
void lc_Sampledlg::readSettings()
{
QString str;
QSettings settings(QSettings::IniFormat, QSettings::UserScope, "LibreCAD", "sample_plugin");
QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();
QSize size = settings.value("size", QSize(430,140)).toSize();
startxedit->setText( settings.value("startx", 0.5).toString() );
startyedit->setText( settings.value("starty", 0.5).toString() );
endxedit->setText( settings.value("endx", 3.5).toString() );
endyedit->setText( settings.value("endy", 3.5).toString() );
resize(size);
move(pos);
}
void lc_Sampledlg::writeSettings()
{
QSettings settings(QSettings::IniFormat, QSettings::UserScope, "LibreCAD", "sample_plugin");
settings.setValue("pos", pos());
settings.setValue("size", size());
settings.setValue("startx", startxedit->text());
settings.setValue("starty", startyedit->text());
settings.setValue("endx", endxedit->text());
settings.setValue("endy", endyedit->text());
}
Q_EXPORT_PLUGIN2(lc_sample, LC_Sample);