void FLFormRecordDB::previousRecord() { if ( cursor_ && cursor_->isValid() ) { if ( cursor_->at() == 0 ) { lastRecord(); return ; } if ( !validateForm() ) return ; if ( cursor_->checkIntegrity() ) { acceptedForm(); cursor_->setActivatedCheckIntegrity( false ); if ( cursor_->commitBuffer() ) { cursor_->setActivatedCheckIntegrity( true ); cursor_->commit(); cursor_->setModeAccess( initialModeAccess ); accepted = false; QString caption = cursor_->metadata() ->alias() + " [ " + static_cast<FLApplication *>( qApp ) ->lastTextCaption() + " ]"; cursor_->transaction(); cursor_->prev(); initScript(); } } #ifdef FL_TEST static_cast<FLApplication *>( qApp ) ->continueTesting( FLTester::FORM_RECORD_READY, this->name() ); #endif } }
DbRecord DbFile::newRecord(const char* key, const char* value, RecordType type) { switch (type) { case Normal: { size_t size = DbRecord::getSize(key, value, type); // Record size too large if (size > DbPage::maxFreeSpace) return newRecord(key, value, Long); return getNewRecord(key, value, type); } case Long: { // Check value length size_t size = DbRecord::getSize(key, value, type); int valueLen = strlen(value); int leftValueLen = size - DbPage::maxFreeSpace; // Record size too small if (leftValueLen <= 0) return newRecord(key, value, Normal); // Split the first value str std::string currentStr(value, valueLen - leftValueLen); // Init iterators DbRecord firstRecord(getPage(0), 0); DbRecord currentRecord(getPage(0), 0); DbRecord lastRecord(getPage(0), 0); // Create records while (leftValueLen > 0) { lastRecord = currentRecord; currentRecord = getNewRecord(key, currentStr.c_str(), type); // Update record iterator and next record cursor if (type != Long) { lastRecord.nextExtendedRecord(currentRecord.getPage()->getId(), currentRecord.getCursor()); leftValueLen -= currentStr.size(); } else { firstRecord = currentRecord; type = LongExtended; } // Get the size of next value in the new record if (leftValueLen > 0) { size = DbRecord::getSize(key, value + (valueLen - leftValueLen), type); if (size > DbPage::maxFreeSpace) currentStr = std::string(value + (valueLen - leftValueLen), leftValueLen - (size - DbPage::maxFreeSpace)); else currentStr = std::string(value + (valueLen - leftValueLen), leftValueLen); } } currentRecord.nextExtendedRecord(0, 0); return firstRecord; } default: error("Not known record type"); return DbRecord(getPage(0), 0); // Avoid warning } }
void FLFormRecordDB::setMainWidget( QWidget * w ) { if ( !cursor_ || !w ) return ; if ( !cursor_->metadata() ) return ; if ( showed ) { if ( mainWidget_ && mainWidget_ != w ) initMainWidget( w ); } else w->hide(); if ( pushButtonAcceptContinue ) pushButtonAcceptContinue->hide(); if ( pushButtonAccept ) pushButtonAccept->hide(); if ( pushButtonCancel ) pushButtonCancel->hide(); if ( pushButtonFirst ) pushButtonFirst->hide(); if ( pushButtonPrevious ) pushButtonPrevious->hide(); if ( pushButtonNext ) pushButtonNext->hide(); if ( pushButtonLast ) pushButtonLast->hide(); if ( layoutButtons ) delete layoutButtons; if ( layout ) delete layout; w->setFont( qApp->font() ); layout = new QVBoxLayout( this, 2, 3, "vlay" + name_ ); layout->add( w ); layoutButtons = new QHBoxLayout( layout, 3, "hlay" + name_ ) ; QSpacerItem *spacer_2 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); QSize pbSize( 26, 26 ); #ifdef FL_DEBUGGER if ( !pushButtonIDE ) { pushButtonIDE = new QPushButton( this, "pushButtonIDE" ); connect( pushButtonIDE, SIGNAL( clicked() ), this, SLOT( openIde() ) ); } pushButtonIDE->setSizePolicy( QSizePolicy(( QSizePolicy::SizeType ) 0, ( QSizePolicy::SizeType ) 0, 0, 0, pushButtonIDE->sizePolicy().hasHeightForWidth() ) ); pushButtonIDE->setMinimumSize( pbSize ); pushButtonIDE->setMaximumSize( pbSize ); QPixmap qsa( QPixmap::fromMimeSource( "bug.png" ) ); pushButtonIDE->setIconSet( qsa ); pushButtonIDE->setAccel( QKeySequence( Qt::Key_F3 ) ); QToolTip::add( pushButtonIDE, tr( "Abrir Depurador (F3)" ) ); QWhatsThis::add( pushButtonIDE, tr( "Abrir Depurador (F3)" ) ); pushButtonIDE->setFocusPolicy( QWidget::NoFocus ); layoutButtons->addWidget( pushButtonIDE ); connect( pushButtonIDE, SIGNAL( clicked() ), this, SLOT( openIde() ) ); #endif layoutButtons->addItem( spacer_2 ); if ( cursor_->modeAccess() == FLSqlCursor::EDIT || cursor_->modeAccess() == FLSqlCursor::BROWSE ) { if ( !pushButtonFirst ) { pushButtonFirst = new QPushButton( this, "pushButtonFirst" ); connect( pushButtonFirst, SIGNAL( clicked() ), this, SLOT( firstRecord() ) ); } pushButtonFirst->setSizePolicy( QSizePolicy(( QSizePolicy::SizeType ) 0, ( QSizePolicy::SizeType ) 0, 0, 0, pushButtonFirst->sizePolicy().hasHeightForWidth() ) ); pushButtonFirst->setMinimumSize( pbSize ); pushButtonFirst->setMaximumSize( pbSize ); QPixmap rld( QPixmap::fromMimeSource( "first.png" ) ); pushButtonFirst->setIconSet( rld ); pushButtonFirst->setAccel( QKeySequence( Qt::Key_F5 ) ); QToolTip::add( pushButtonFirst, tr( "Aceptar los cambios e ir al primer registro (F5)" ) ); QWhatsThis::add( pushButtonFirst, tr( "Aceptar los cambios e ir al primer registro (F5)" ) ); pushButtonFirst->setFocusPolicy( QWidget::NoFocus ); layoutButtons->addWidget( pushButtonFirst ); pushButtonFirst->show(); if ( !pushButtonPrevious ) { pushButtonPrevious = new QPushButton( this, "pushButtonPrevious" ); connect( pushButtonPrevious, SIGNAL( clicked() ), this, SLOT( previousRecord() ) ); } pushButtonPrevious->setSizePolicy( QSizePolicy(( QSizePolicy::SizeType ) 0, ( QSizePolicy::SizeType ) 0, 0, 0, pushButtonPrevious->sizePolicy().hasHeightForWidth() ) ); pushButtonPrevious->setMinimumSize( pbSize ); pushButtonPrevious->setMaximumSize( pbSize ); QPixmap rld2( QPixmap::fromMimeSource( "previous.png" ) ); pushButtonPrevious->setIconSet( rld2 ); pushButtonPrevious->setAccel( QKeySequence( Qt::Key_F6 ) ); QToolTip::add( pushButtonPrevious, tr( "Aceptar los cambios e ir al registro anterior (F6)" ) ); QWhatsThis::add( pushButtonPrevious, tr( "Aceptar los cambios e ir al registro anterior (F6)" ) ); pushButtonPrevious->setFocusPolicy( QWidget::NoFocus ); layoutButtons->addWidget( pushButtonPrevious ); pushButtonPrevious->show(); if ( !pushButtonNext ) { pushButtonNext = new QPushButton( this, "pushButtonNext" ); connect( pushButtonNext, SIGNAL( clicked() ), this, SLOT( nextRecord() ) ); } pushButtonNext->setSizePolicy( QSizePolicy(( QSizePolicy::SizeType ) 0, ( QSizePolicy::SizeType ) 0, 0, 0, pushButtonNext->sizePolicy().hasHeightForWidth() ) ); pushButtonNext->setMinimumSize( pbSize ); pushButtonNext->setMaximumSize( pbSize ); QPixmap rld3( QPixmap::fromMimeSource( "next.png" ) ); pushButtonNext->setIconSet( rld3 ); pushButtonNext->setAccel( QKeySequence( Qt::Key_F7 ) ); QToolTip::add( pushButtonNext, tr( "Aceptar los cambios e ir al registro siguiente (F7)" ) ); QWhatsThis::add( pushButtonNext, tr( "Aceptar los cambios e ir al registro siguiente (F7)" ) ); pushButtonNext->setFocusPolicy( QWidget::NoFocus ); layoutButtons->addWidget( pushButtonNext ); pushButtonNext->show(); if ( !pushButtonLast ) { pushButtonLast = new QPushButton( this, "pushButtonLast" ); connect( pushButtonLast, SIGNAL( clicked() ), this, SLOT( lastRecord() ) ); } pushButtonLast->setSizePolicy( QSizePolicy(( QSizePolicy::SizeType ) 0, ( QSizePolicy::SizeType ) 0, 0, 0, pushButtonLast->sizePolicy().hasHeightForWidth() ) ); pushButtonLast->setMinimumSize( pbSize ); pushButtonLast->setMaximumSize( pbSize ); QPixmap rld4( QPixmap::fromMimeSource( "last.png" ) ); pushButtonLast->setIconSet( rld4 ); pushButtonLast->setAccel( QKeySequence( Qt::Key_F8 ) ); QToolTip::add( pushButtonLast, tr( "Aceptar los cambios e ir al último registro (F8)" ) ); QWhatsThis::add( pushButtonLast, tr( "Aceptar los cambios e ir al último registro (F8)" ) ); pushButtonLast->setFocusPolicy( QWidget::NoFocus ); layoutButtons->addWidget( pushButtonLast ); pushButtonLast->show(); } if ( cursor_->modeAccess() != FLSqlCursor::BROWSE ) { if ( showAcceptContinue_ ) { if ( !pushButtonAcceptContinue ) { pushButtonAcceptContinue = new QPushButton( this, "pushButtonAcceptContinue" ); connect( pushButtonAcceptContinue, SIGNAL( clicked() ), this, SLOT( acceptContinue() ) ); } pushButtonAcceptContinue->setSizePolicy( QSizePolicy(( QSizePolicy::SizeType ) 0, ( QSizePolicy::SizeType ) 0, 0, 0, pushButtonAcceptContinue->sizePolicy().hasHeightForWidth() ) ); pushButtonAcceptContinue->setMinimumSize( pbSize ); pushButtonAcceptContinue->setMaximumSize( pbSize ); QPixmap rld( QPixmap::fromMimeSource( "reload.png" ) ); pushButtonAcceptContinue->setIconSet( rld ); pushButtonAcceptContinue->setFocusPolicy( QWidget::NoFocus ); pushButtonAcceptContinue->setAccel( QKeySequence( Qt::Key_F9 ) ); QToolTip::add( pushButtonAcceptContinue, tr( "Aceptar los cambios y continuar con la edición de un nuevo registro (F9)" ) ); QWhatsThis::add( pushButtonAcceptContinue, tr( "Aceptar los cambios y continuar con la edición de un nuevo registro (F9)" ) ); layoutButtons->addWidget( pushButtonAcceptContinue ); pushButtonAcceptContinue->show(); } if ( !pushButtonAccept ) { pushButtonAccept = new QPushButton( this, "pushButtonAccept" ); connect( pushButtonAccept, SIGNAL( clicked() ), this, SLOT( accept() ) ); } pushButtonAccept->setSizePolicy( QSizePolicy(( QSizePolicy::SizeType ) 0, ( QSizePolicy::SizeType ) 0, 0, 0, pushButtonAccept->sizePolicy().hasHeightForWidth() ) ); pushButtonAccept->setMinimumSize( pbSize ); pushButtonAccept->setMaximumSize( pbSize ); QPixmap ok( QPixmap::fromMimeSource( "button_ok.png" ) ); pushButtonAccept->setIconSet( ok ); pushButtonAccept->setFocusPolicy( QWidget::NoFocus ); pushButtonAccept->setAccel( QKeySequence( Qt::Key_F10 ) ); QToolTip::add( pushButtonAccept, tr( "Aceptar los cambios y cerrar formulario (F10)" ) ); QWhatsThis::add( pushButtonAccept, tr( "Aceptar los cambios y cerrar formulario (F10)" ) ); layoutButtons->addWidget( pushButtonAccept ); pushButtonAccept->show(); } if ( !pushButtonCancel ) { pushButtonCancel = new QPushButton( this, "pushButtonCancel" ); connect( cursor_, SIGNAL( autoCommit() ), this, SLOT( disablePushButtonCancel() ) ); connect( pushButtonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); } pushButtonCancel->setSizePolicy( QSizePolicy(( QSizePolicy::SizeType ) 0, ( QSizePolicy::SizeType ) 0, 0, 0, pushButtonCancel->sizePolicy().hasHeightForWidth() ) ); pushButtonCancel->setMinimumSize( pbSize ); pushButtonCancel->setMaximumSize( pbSize ); QPixmap cancel( QPixmap::fromMimeSource( "button_cancel.png" ) ); pushButtonCancel->setIconSet( cancel ); if ( cursor_->modeAccess() != FLSqlCursor::BROWSE ) { pushButtonCancel->setFocusPolicy( QWidget::NoFocus ); pushButtonCancel->setAccel( 4096 ); QToolTip::add( pushButtonCancel, tr( "Cancelar los cambios y cerrar formulario (Esc)" ) ); QWhatsThis::add( pushButtonCancel, tr( "Cancelar los cambios y cerrar formulario (Esc)" ) ); } else { QPixmap ok( QPixmap::fromMimeSource( "button_cancel.png" ) ); pushButtonCancel->setIconSet( ok ); pushButtonCancel->setFocusPolicy( QWidget::StrongFocus ); pushButtonCancel->setFocus(); pushButtonCancel->setAccel( 4096 ); QToolTip::add( pushButtonCancel, tr( "Aceptar y cerrar formulario (Esc)" ) ); QWhatsThis::add( pushButtonCancel, tr( "Aceptar y cerrar formulario (Esc)" ) ); } pushButtonCancel->setDefault( true ); layoutButtons->addWidget( pushButtonCancel ); pushButtonCancel->show(); mainWidget_ = w; mainWidget_->setFocusPolicy( QWidget::NoFocus ); int mWidth = mainWidget_->width(); int mHeight = mainWidget_->height(); QWidget * actWin = qApp->activeWindow(); QRect screen = ( actWin ? actWin->geometry() : qApp->mainWidget()->geometry() ); QRect desk = QApplication::desktop()->geometry(); QPoint p = screen.center() - QPoint( mWidth / 2, mHeight / 2 ); if ( p.x() + mWidth > desk.width() ) p.setX( desk.width() - mWidth ); if ( p.y() + mHeight > desk.height() ) p.setY( desk.height() - mHeight ); if ( p.x() < 0 ) p.setX( 0 ); if ( p.y() < 0 ) p.setY( 0 ); move( p ); }