| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include <QtGui> |
| | #include <QApplication> |
| | #include <QDialog> |
| | #include <QGroupBox> |
| | #include <QDialogButtonBox> |
| | #include <QScrollArea> |
| | #include <QGridLayout> |
| | #include <QMessageBox> |
| | #include <QLabel> |
| | #include <complex> |
| |
|
| | #include "dividedlg.h" |
| |
|
| | |
| |
|
| | dividedlg::dividedlg( Document_Interface *doc, QString passedData, |
| | QWidget *parent ) : QDialog( parent ) |
| | { |
| | |
| | this->setWindowFlags( this->windowFlags() & ~Qt::WindowContextHelpButtonHint ); |
| |
|
| | QFont font1, font2, font3, font4; |
| | font1.setPointSize( 14 ); |
| | font2.setPointSize( 12 ); |
| | font3.setPointSize( 11 ); |
| | font4.setPointSize( 9 ); |
| |
|
| | d = doc; |
| |
|
| | QList<QString> data = ( passedData.split |
| | ( QRegularExpression ( "[\\n\\t\\r]" ) ) ); |
| |
|
| | QList<QString> splitList = data.at( 0 ).split( ": " ); |
| | QString entType = splitList.at( 1 ); |
| | this->setWindowTitle( tr("Divide - ") + entType ); |
| | entType = entType.toLower(); |
| |
|
| | QHBoxLayout *mainLayout = new QHBoxLayout; |
| | setLayout(mainLayout); |
| |
|
| | QVBoxLayout *leftcolayout = new QVBoxLayout; |
| | mainLayout->addLayout(leftcolayout); |
| |
|
| | QFrame *Fr1 = new QFrame(); |
| | Fr1->setFrameStyle( QFrame::Box ); |
| | Fr1->setLineWidth( 1 ); |
| | leftcolayout->addWidget(Fr1); |
| |
|
| | QFrame *Fr2 = new QFrame(); |
| | Fr2->setFrameStyle( QFrame::Box ); |
| | Fr2->setLineWidth( 1 ); |
| | leftcolayout->addWidget(Fr2); |
| |
|
| | QGroupBox *G1 = new QGroupBox(); |
| | G1->setFont( font2 ); |
| | G1->setTitle(tr("Layers")); |
| | G1->setVisible( true ); |
| | leftcolayout->addWidget(G1); |
| |
|
| | QDialogButtonBox *BB1 = new QDialogButtonBox(); |
| | leftcolayout->addWidget(BB1, 0, Qt::AlignRight); |
| | BB1->addButton( tr( "OK" ), QDialogButtonBox::AcceptRole ); |
| | BB1->addButton( tr( "Cancel" ), QDialogButtonBox::RejectRole ); |
| | QObject::connect( BB1, SIGNAL( accepted() ), this, SLOT( onOkClickedSlot() ) ); |
| | QObject::connect( BB1, SIGNAL( rejected() ), this, SLOT( reject() ) ); |
| |
|
| | QHBoxLayout* fr1layout = new QHBoxLayout; |
| | Fr1->setLayout(fr1layout); |
| | QLabel *L1 = new QLabel(); |
| | fr1layout->addWidget(L1); |
| | L1->setFont( font1 ); |
| | L1->setText(tr("Divide at")); |
| |
|
| | QHBoxLayout* fr2layout = new QHBoxLayout; |
| | Fr2->setLayout(fr2layout); |
| | QLabel *L2 = new QLabel(); |
| | fr2layout->addWidget(L2); |
| | L2->setFont( font1 ); |
| | L2->setText(tr("Size")); |
| |
|
| | Sp1 = new QSpinBox(); |
| | fr1layout->addWidget(Sp1); |
| | Sp1->setFont( font1 ); |
| | Sp1->setMaximum( 99 ); |
| | Sp1->setMinimum( 0 ); |
| | Sp1->setValue( 0 ); |
| | QObject::connect( Sp1, SIGNAL( valueChanged( int ) ), this, |
| | SLOT( onQtyChangedSlot( int ) ) ); |
| |
|
| | Sp2 = new QSpinBox(); |
| | fr2layout->addWidget(Sp2); |
| | Sp2->setFont(font1); |
| | Sp2->setMaximum( 10 ); |
| | Sp2->setMinimum( 1 ); |
| | Sp2->setValue(5); |
| | QObject::connect( Sp2, SIGNAL( valueChanged( int ) ), this, |
| | SLOT( onSizeChangedSlot( int ) ) ); |
| |
|
| | QLabel* L3 = new QLabel(); |
| | fr1layout->addWidget(L3); |
| | L3->setFont( font1 ); |
| | L3->setText(tr("places")); |
| | fr1layout->addSpacing(10); |
| |
|
| | QLabel* L4 = new QLabel(); |
| | fr2layout->addWidget(L4); |
| | L4->setFont( font1 ); |
| | L4->setText("%"); |
| |
|
| | R1 = new QRadioButton(Fr1); |
| | fr1layout->addWidget(R1); |
| | R1->setFont( font2 ); |
| | R1->setText(tr("Ticks - Off")); |
| | ticksShowHideFlag = false; |
| | QObject::connect( R1, SIGNAL( toggled( bool ) ), this, |
| | SLOT( onOffTicksSlot( bool ) ) ); |
| |
|
| | R2 = new QRadioButton(Fr2); |
| | fr2layout->addWidget(R2); |
| | R2->setFont( font2 ); |
| | R2->setText(tr("Breaks - Off")); |
| | breaksOnOffFlag = false; |
| | QObject::connect (R2, SIGNAL( toggled( bool ) ), this, |
| | SLOT( onOffBreaksSlot( bool ) ) ); |
| |
|
| | QList<QString> layerList = doc->getAllLayer(); |
| | QString activeLayerName = doc->getCurrentLayer(); |
| | QString num; |
| | QGridLayout *laylayout = new QGridLayout; |
| |
|
| | for( int i = 0; i < layerList.size(); i++ ) |
| | { |
| | QRadioButton *RB = new QRadioButton; |
| | RB->setFont( font4 ); |
| | num = QString::number( i ); |
| | RB->setObjectName( num ); |
| | RB->setText( num + " - " + layerList.at( i ) ); |
| |
|
| | QObject::connect( RB, SIGNAL( toggled( bool ) ), this, |
| | SLOT( onWhichButtonSlot( bool ) ) ); |
| |
|
| | if ( activeLayerName == layerList.at( i ) ) |
| | { |
| | RB->setChecked( true ); |
| | activeLayer = i; |
| | } |
| |
|
| | laylayout->addWidget( RB ); |
| | } |
| |
|
| | QVBoxLayout* g1layout = new QVBoxLayout; |
| | G1->setLayout(g1layout); |
| |
|
| | QScrollArea *Sa1 = new QScrollArea( G1 ); |
| | g1layout->addWidget(Sa1); |
| | Sa1->setLineWidth( 1 ); |
| | Sa1->setWidgetResizable(true); |
| | QWidget *containerWidget = new QWidget; |
| | containerWidget->setLayout( laylayout ); |
| | Sa1->setWidget( containerWidget ); |
| |
|
| | QHBoxLayout* newlaylayout = new QHBoxLayout; |
| | QLabel *L5 = new QLabel( G1 ); |
| | newlaylayout->addWidget(L5); |
| | L5->setFont( font4 ); |
| | L5->setText(tr("<i>New</i>")); |
| |
|
| | Le2 = new QLineEdit( G1 ); |
| | newlaylayout->addWidget(Le2); |
| | Le2->setFont( font4 ); |
| | g1layout->addLayout(newlaylayout); |
| |
|
| | QVBoxLayout* rtcolayout = new QVBoxLayout; |
| | mainLayout->addLayout(rtcolayout); |
| |
|
| | if ( entType == "line" ) |
| | { |
| | dataToReturn.append( "LINE:" ); |
| | rtcolayout->addWidget(choice(STRAIGHT, font4)); |
| | } |
| |
|
| | else if ( entType == "circle" ) |
| | { |
| | dataToReturn.append( "CIRCLE:" ); |
| |
|
| | QFrame *Cr2 = new QFrame(); |
| | Cr2->setFrameStyle( QFrame::Box ); |
| | Cr2->setLineWidth(1); |
| | rtcolayout->addWidget(Cr2); |
| |
|
| | QVBoxLayout* anglayout = new QVBoxLayout(); |
| | Cr2->setLayout(anglayout); |
| | |
| | QLabel *C4 = new QLabel(); |
| | anglayout->addWidget(C4); |
| | C4->setFont( font4 ); |
| | C4->setText(tr("Enter start\nangle, in\ndecimal degrees\n" |
| | "0° at 3 o'clock\ngoes\nanti-clockwise.")); |
| |
|
| | Le1 = new QLineEdit(); |
| | anglayout->addWidget(Le1); |
| |
|
| | QDoubleValidator *doubleVal = new QDoubleValidator |
| | ( -999999.999, 999999.999, 3, this ); |
| | doubleVal->setNotation( QDoubleValidator::StandardNotation ); |
| | Le1->setValidator( doubleVal ); |
| | Le1->installEventFilter( this ); |
| |
|
| | QObject::connect( Le1, SIGNAL( textChanged( const QString & ) ), this, |
| | SLOT( onStartAngleChangedSlot ( const QString & ) ) ); |
| |
|
| | rtcolayout->addWidget(choice(CURVED, font4)); |
| | } |
| |
|
| | else if ( entType == "arc" ) |
| | { |
| | dataToReturn.append( "ARC:" ); |
| | rtcolayout->addWidget(choice(CURVED, font4)); |
| | } |
| |
|
| | else if ( entType == "polyline" ) |
| | { |
| | dataToReturn.append( "POLYLINE:" ); |
| | } |
| | rtcolayout->addStretch(); |
| |
|
| | QLabel *C2 = new QLabel(); |
| | rtcolayout->addWidget(C2); |
| | C2->setStyleSheet("border: 0.2ex solid black"); |
| | C2->setFont(font4); |
| | C2->setContentsMargins( 0, 3, 0, 0 ); |
| | C2->setAlignment( Qt::Alignment( Qt::AlignTop ) ); |
| | C2->setText(tr("<i>\"New\"</i><br>Enter name<br>for a new layer<br>" |
| | "(if required?) to<br>draw ticks on.")); |
| | } |
| |
|
| | QFrame* dividedlg::choice(ElementKind ek, QFont font ) |
| | { |
| | QString msg1 = tr("Ticks"); |
| | QString msg2; |
| | QString msg3; |
| |
|
| | switch ( ek ) { |
| | case STRAIGHT: |
| | msg2 = tr("Above"); |
| | msg3 = tr("Below"); |
| | break; |
| |
|
| | case CURVED: |
| | msg2 = tr("Outside"); |
| | msg3 = tr("Inside"); |
| | break; |
| |
|
| | default: |
| | break; |
| | } |
| |
|
| | QFrame *Cr1= new QFrame(); |
| | Cr1->setFrameStyle( QFrame::Box ); |
| | Cr1->setLineWidth(1); |
| |
|
| | QVBoxLayout* tickloclayout = new QVBoxLayout; |
| | Cr1->setLayout(tickloclayout); |
| |
|
| | QLabel *C1 = new QLabel( Cr1 ); |
| | tickloclayout->addWidget(C1); |
| | C1->setFont( font ); |
| | C1->setContentsMargins( 0, 3, 0, 0 ); |
| | C1->setAlignment( Qt::Alignment( Qt::AlignTop ) ); |
| | C1->setText( msg1 ); |
| |
|
| | QHBoxLayout* tickchoiceslayout = new QHBoxLayout; |
| | tickloclayout->addLayout(tickchoiceslayout); |
| |
|
| | QRadioButton *R1 = new QRadioButton( C1 ); |
| | tickchoiceslayout->addWidget(R1); |
| | R1->setText( msg2 ); |
| | R1->setObjectName( "o" ); |
| | QObject::connect(R1,SIGNAL( toggled( bool ) ), this, |
| | SLOT( onInOutSlot( bool ) ) ); |
| | R1->setChecked( true ); |
| |
|
| | QRadioButton *R2 = new QRadioButton( C1 ); |
| | tickchoiceslayout->addWidget(R2); |
| | R2->setText( msg3 ); |
| | R2->setObjectName( "i" ); |
| | QObject::connect(R2, SIGNAL( toggled( bool ) ), this, |
| | SLOT( onInOutSlot( bool ) ) ); |
| |
|
| | return Cr1; |
| | } |
| |
|
| | bool dividedlg::eventFilter( QObject * obj, QEvent * event ) |
| | { |
| | if ( Le1->hasFocus() ) |
| | { |
| | backSpace = true; |
| |
|
| | if ( event->type() == QEvent::KeyPress ) |
| | { |
| | QKeyEvent * keyEvent = static_cast<QKeyEvent *>( event ); |
| | if ( keyEvent->key() == Qt::Key_Backspace ) |
| | backSpace = false; |
| | } |
| | } |
| |
|
| | return ( QWidget::eventFilter( obj, event ) ); |
| | } |
| |
|
| | |
| | void dividedlg::onStartAngleChangedSlot( const QString & passed ) |
| | { |
| | if ( backSpace ) |
| | { |
| | int len = passed.length(); |
| | bool noPoint = ( ! passed.contains( "." ) ); |
| | bool addPoint = false; |
| | if (QChar('-') == passed.at( 0)) { |
| | if ( ( len == 7 ) && noPoint ) addPoint = true; |
| | } |
| | else |
| | if ( ( len == 6 ) && noPoint ) addPoint = true; |
| |
|
| | if ( addPoint ) Le1->setText( Le1->text() + "." ); |
| | } |
| | } |
| |
|
| | void dividedlg::onInOutSlot( bool state ) |
| | { |
| | QObject *object = QObject::sender(); |
| | QRadioButton *btn = qobject_cast<QRadioButton *>( object ); |
| |
|
| | inOut = ( state && btn->objectName() == "o" ) ? true : false; |
| | } |
| |
|
| | void dividedlg::onSizeChangedSlot( int s ) |
| | { |
| | size = s; |
| | } |
| |
|
| | void dividedlg::onQtyChangedSlot( int q ) |
| | { |
| | qty = q; |
| | } |
| |
|
| | void dividedlg::onOffTicksSlot( bool state ) |
| | { |
| | state ? R1->setText( "Ticks - On" ) : R1->setText( "Ticks - Off" ); |
| |
|
| | ticksShowHideFlag = state; |
| | } |
| |
|
| | void dividedlg::onOffBreaksSlot( bool state ) |
| | { |
| | state ? R2->setText( "Breaks - On" ) : R2->setText( "Breaks - Off" ); |
| |
|
| | breaksOnOffFlag = state; |
| | } |
| |
|
| | void dividedlg::onWhichButtonSlot( bool state ) |
| | { |
| | QObject *object = QObject::sender(); |
| | QRadioButton *btn = qobject_cast<QRadioButton *>(object); |
| |
|
| | if ( state ) |
| | { |
| | d->setLayer( ( btn->text() ).split( "- " ).at( 1 ) ); |
| | btn->setText( btn->text() + " (ticks)" ); |
| | activeLayer = btn->objectName().toInt(); |
| | } |
| | else |
| | btn->setText( btn->text().remove( " (ticks)" ) ); |
| | } |
| |
|
| | void dividedlg::onOkClickedSlot() |
| | { |
| | dataToReturn.append( QString::number( Sp1->value() ).append(":") ); |
| | dataToReturn.append( QString::number( Sp2->value() ).append(":") ); |
| |
|
| | dataToReturn.append( R1->isChecked() ? "t:" : "f:" ); |
| | dataToReturn.append( R2->isChecked() ? "t:" : "f:" ); |
| |
|
| | if ( dataToReturn.startsWith( "CI" ) ) |
| | dataToReturn.append( Le1->text().simplified().append( ":" ) ); |
| |
|
| | dataToReturn.append( inOut ? "o:" : "i:" ); |
| |
|
| | QString test = Le2->text().simplified(); |
| |
|
| | dataToReturn.append( test.isEmpty() ? ( d->getCurrentLayer() |
| | .remove( " (ticks)" ).append( ":" ) ) |
| | : ( test.append( ":" ).append( "lay" ) ) ); |
| | emit returnData( dataToReturn ); |
| | this->accept(); |
| | } |
| |
|
| | dividedlg::~dividedlg() |
| | { |
| | this->deleteLater(); |
| | } |
| |
|