int GenericChannel::handleRead(EncodeBuffer &encodeBuffer, const unsigned char *message, unsigned int length) { #ifdef TEST *logofs << "handleRead: Called for FD#" << fd_ << " with " << encodeBuffer.getLength() << " bytes already encoded.\n" << logofs_flush; #endif // // Pointer to located message and // its size in bytes. // const unsigned char *inputMessage; unsigned int inputLength; // // Tag message as generic data in compression // routine. Opcode is not actually transferred // over the network. // unsigned char inputOpcode = X_NXInternalGenericData; #if defined(TEST) || defined(INFO) *logofs << "handleRead: Trying to read from FD#" << fd_ << " at " << strMsTimestamp() << ".\n" << logofs_flush; #endif int result = readBuffer_.readMessage(); #ifdef DEBUG *logofs << "handleRead: Read result on FD#" << fd_ << " is " << result << ".\n" << logofs_flush; #endif if (result < 0) { // // Let the proxy close the channel. // return -1; } else if (result == 0) { #if defined(TEST) || defined(INFO) *logofs << "handleRead: PANIC! No data read from FD#" << fd_ << " while encoding messages.\n" << logofs_flush; HandleCleanup(); #endif return 0; } #if defined(TEST) || defined(INFO) || defined(FLUSH) *logofs << "handleRead: Encoding messages for FD#" << fd_ << " with " << readBuffer_.getLength() << " bytes " << "in the buffer.\n" << logofs_flush; #endif // // Divide the available data in multiple // messages and encode them one by one. // if (proxy -> handleAsyncSwitch(fd_) < 0) { return -1; } while ((inputMessage = readBuffer_.getMessage(inputLength)) != NULL) { encodeBuffer.encodeValue(inputLength, 32, 14); if (isCompressed() == 1) { unsigned int compressedDataSize = 0; unsigned char *compressedData = NULL; if (handleCompress(encodeBuffer, inputOpcode, 0, inputMessage, inputLength, compressedData, compressedDataSize) < 0) { return -1; } } else { encodeBuffer.encodeMemory(inputMessage, inputLength); } int bits = encodeBuffer.diffBits(); #if defined(TEST) || defined(OPCODES) *logofs << "handleRead: Handled generic data for FD#" << fd_ << ". " << inputLength << " bytes in, " << bits << " bits (" << ((float) bits) / 8 << " bytes) out.\n" << logofs_flush; #endif addProtocolBits(inputLength << 3, bits); if (isPrioritized() == 1) { priority_++; } } // End of while ((inputMessage = readBuffer_.getMessage(inputLength)) != NULL) ... // // All data has been read from the read buffer. // We still need to mark the end of the encode // buffer just before sending the frame. This // allows us to accomodate multiple reads in // a single frame. // if (priority_ > 0) { #if defined(TEST) || defined(INFO) *logofs << "handleRead: WARNING! Requesting flush " << "because of " << priority_ << " prioritized " << "messages for FD#" << fd_ << ".\n" << logofs_flush; #endif if (proxy -> handleAsyncPriority() < 0) { return -1; } // // Reset the priority flag. // priority_ = 0; } // // Flush if we produced enough data. // if (proxy -> canAsyncFlush() == 1) { #if defined(TEST) || defined(INFO) *logofs << "handleRead: WARNING! Requesting flush " << "because of enough data or timeout on the " << "proxy link.\n" << logofs_flush; #endif if (proxy -> handleAsyncFlush() < 0) { return -1; } } #if defined(TEST) || defined(INFO) if (transport_ -> pending() != 0 || readBuffer_.checkMessage() != 0) { *logofs << "handleRead: PANIC! Buffer for X descriptor FD#" << fd_ << " has " << transport_ -> pending() << " bytes to read.\n" << logofs_flush; HandleCleanup(); } #endif // // Reset the read buffer. // readBuffer_.fullReset(); return 1; }
CustomFDialog::CustomFDialog(QWidget *parent, QString wDir, QString caption, QString filter, int flags) : QDialog(parent), optionFlags(flags) { setModal(true); setWindowTitle(caption); setWindowIcon(QIcon(loadIcon("AppIcon.png"))); vboxLayout = new QVBoxLayout(this); vboxLayout->setSpacing(5); vboxLayout->setMargin(10); hboxLayout = new QHBoxLayout; hboxLayout->setSpacing(5); hboxLayout->setMargin(0); fileDialog = new ScFileWidget(this); hboxLayout->addWidget(fileDialog); fileDialog->setIconProvider(new ImIconProvider()); fileDialog->setFilter(filter); fileDialog->selectFilter(filter); fileDialog->setDirectory(wDir); vboxLayout1 = new QVBoxLayout; vboxLayout1->setSpacing(0); vboxLayout1->setMargin(0); vboxLayout1->setContentsMargins(0, 37, 0, 0); vboxLayout1->setAlignment( Qt::AlignTop ); pw = new FDialogPreview( this ); pw->setMinimumSize(QSize(200, 200)); pw->setMaximumSize(QSize(200, 200)); vboxLayout1->addWidget(pw); hboxLayout->addLayout(vboxLayout1); vboxLayout->addLayout(hboxLayout); QHBoxLayout *hboxLayout1 = new QHBoxLayout; hboxLayout1->setSpacing(5); hboxLayout1->setContentsMargins(9, 0, 0, 0); showPreview = new QCheckBox(this); showPreview->setText( tr("Show Preview")); showPreview->setToolTip( tr("Show a preview and information for the selected file")); showPreview->setChecked(true); previewIsShown = true; hboxLayout1->addWidget(showPreview); QSpacerItem *spacerItem = new QSpacerItem(2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum); hboxLayout1->addItem(spacerItem); OKButton = new QPushButton( CommonStrings::tr_OK, this); OKButton->setDefault( true ); hboxLayout1->addWidget( OKButton ); CancelB = new QPushButton( CommonStrings::tr_Cancel, this); CancelB->setAutoDefault( false ); hboxLayout1->addWidget( CancelB ); vboxLayout->addLayout(hboxLayout1); SaveZip=NULL; WithFonts=NULL; WithProfiles=NULL; if (flags & fdDirectoriesOnly) { Layout = new QFrame(this); Layout1 = new QHBoxLayout(Layout); Layout1->setSpacing( 0 ); Layout1->setContentsMargins(9, 0, 0, 0); SaveZip = new QCheckBox( tr( "&Compress File" ), Layout); Layout1->addWidget(SaveZip, Qt::AlignLeft); QSpacerItem* spacer = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum ); Layout1->addItem( spacer ); vboxLayout->addWidget(Layout); LayoutC = new QFrame(this); Layout1C = new QHBoxLayout(LayoutC); Layout1C->setSpacing( 0 ); Layout1C->setContentsMargins(9, 0, 0, 0); WithFonts = new QCheckBox( tr( "&Include Fonts" ), LayoutC); Layout1C->addWidget(WithFonts, Qt::AlignLeft); WithProfiles = new QCheckBox( tr( "&Include Color Profiles" ), LayoutC); Layout1C->addWidget(WithProfiles, Qt::AlignLeft); QSpacerItem* spacer2 = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum ); Layout1C->addItem( spacer2 ); vboxLayout->addWidget(LayoutC); fileDialog->setFileMode(QFileDialog::DirectoryOnly); pw->hide(); showPreview->setVisible(false); showPreview->setChecked(false); previewIsShown = false; } else { if (flags & fdCompressFile) { Layout = new QFrame(this); Layout1 = new QHBoxLayout(Layout); Layout1->setSpacing( 5 ); Layout1->setContentsMargins(9, 0, 0, 0); SaveZip = new QCheckBox( tr( "&Compress File" ), Layout); Layout1->addWidget(SaveZip); QSpacerItem* spacer = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum ); Layout1->addItem( spacer ); } if (flags & fdExistingFiles) fileDialog->setFileMode(QFileDialog::ExistingFile); else { fileDialog->setFileMode(QFileDialog::AnyFile); if (flags & fdCompressFile) vboxLayout->addWidget(Layout); } if (SaveZip!=NULL) SaveZip->setToolTip( "<qt>" + tr( "Compress the Scribus document on save" ) + "</qt>"); if (WithFonts!=NULL) WithFonts->setToolTip( "<qt>" + tr( "Include fonts when collecting files for the document. Be sure to know and understand licensing information for any fonts you collect and possibly redistribute." ) + "</qt>"); if (WithProfiles!=NULL) WithProfiles->setToolTip( "<qt>" + tr( "Include color profiles when collecting files for the document" ) + "</qt>"); if (flags & fdShowCodecs) { LayoutC = new QFrame(this); Layout1C = new QHBoxLayout(LayoutC); Layout1C->setSpacing( 0 ); Layout1C->setContentsMargins(9, 0, 0, 0); TxCodeT = new QLabel(this); TxCodeT->setText( tr("Encoding:")); Layout1C->addWidget(TxCodeT); TxCodeM = new ScComboBox(LayoutC); TxCodeM->setEditable(false); QString tmp_txc[] = {"ISO 8859-1", "ISO 8859-2", "ISO 8859-3", "ISO 8859-4", "ISO 8859-5", "ISO 8859-6", "ISO 8859-7", "ISO 8859-8", "ISO 8859-9", "ISO 8859-10", "ISO 8859-13", "ISO 8859-14", "ISO 8859-15", "UTF-8", "UTF-16", "KOI8-R", "KOI8-U", "CP1250", "CP1251", "CP1252", "CP1253", "CP1254", "CP1255", "CP1256", "CP1257", "Apple Roman"}; size_t array = sizeof(tmp_txc) / sizeof(*tmp_txc); for (uint a = 0; a < array; ++a) TxCodeM->addItem(tmp_txc[a]); QString localEn = QTextCodec::codecForLocale()->name(); if (localEn == "ISO-10646-UCS-2") localEn = "UTF-16"; bool hasIt = false; for (int cc = 0; cc < TxCodeM->count(); ++cc) { if (TxCodeM->itemText(cc) == localEn) { TxCodeM->setCurrentIndex(cc); hasIt = true; break; } } if (!hasIt) { TxCodeM->addItem(localEn); TxCodeM->setCurrentIndex(TxCodeM->count()-1); } TxCodeM->setMinimumSize(QSize(200, 0)); Layout1C->addWidget(TxCodeM); QSpacerItem* spacer2 = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum ); Layout1C->addItem( spacer2 ); vboxLayout->addWidget(LayoutC); } bool setter2 = flags & fdHidePreviewCheckBox; if (!setter2) { bool setter = flags & fdShowPreview; showPreview->setChecked(setter); previewIsShown = setter; pw->setVisible(setter); } else { showPreview->hide(); previewIsShown = false; pw->setVisible(false); } if (flags & fdCompressFile) connect(SaveZip, SIGNAL(clicked()), this, SLOT(handleCompress())); } #if QT_VERSION >= 0x040600 fileDialog->setNameFilterDetailsVisible(false); #else fileDialog->setOption(QFileDialog::HideNameFilterDetails); #endif extZip = "gz"; connect(OKButton, SIGNAL(clicked()), this, SLOT(accept())); connect(CancelB, SIGNAL(clicked()), this, SLOT(reject())); connect(showPreview, SIGNAL(clicked()), this, SLOT(togglePreview())); connect(fileDialog, SIGNAL(currentChanged(const QString &)), this, SLOT(fileClicked(const QString &))); connect(fileDialog, SIGNAL(filesSelected(const QStringList &)), this, SLOT(accept())); connect(fileDialog, SIGNAL(accepted()), this, SLOT(accept())); connect(fileDialog, SIGNAL(rejected()), this, SLOT(reject())); resize(minimumSizeHint()); }