void TextStream::Test () { // // ctor, GetLength() // TextStream ts1; assert (0 == ts1._pStorage); assert (0 == ts1._pData); assert (0 == ts1._numAllocated); assert (0 == ts1._cachedLen); assert (0 == ts1.GetLength()); const char * str = "What's up with this?\nI just want to know.\n"; TextStream ts2 (str); assert (strlen (str) == ts2._cachedLen); assert (strlen (str) == ts2.GetLength()); assert (0 == strcmp (str, ts2._pData)); // // copy ctor // TextStream ts3 = ts2; assert (strlen (str) == ts3._cachedLen); assert (strlen (str) == ts3.GetLength()); assert (0 == strcmp (str, ts3._pData)); // // Clear() // ts3.Clear (); assert (0 == ts3._pStorage); assert (0 == ts3._pData); assert (0 == ts3._numAllocated); assert (0 == ts3._cachedLen); assert (0 == ts3.GetLength()); // // op= // ts3 = ts2; assert (strlen (str) == ts3._cachedLen); assert (strlen (str) == ts3.GetLength()); assert (0 == strcmp (str, ts3._pData)); // // Append(char) // assert (0 == ts1._pStorage); assert (0 == ts1._pData); assert (0 == ts1._numAllocated); assert (0 == ts1.GetLength()); ts1.Append ('H'); assert (ts1._pStorage); assert (ts1._numAllocated); assert (1 == ts1.GetLength()); assert (ts1._pData); assert (1 == strlen (ts1._pData)); int oldAlloc = ts1._numAllocated; ts1.Append ('i'); assert (oldAlloc == ts1._numAllocated); assert (0 == strcmp ("Hi", ts1._pData)); // // Append(TextStream) // ts2 = TextStream ("Hello, "); ts3 = TextStream ("there."); ts2.Append (ts3); assert (0 == strcmp ("Hello, there.", ts2._pData)); // // Append(FILE*) // FILE * fp = fopen ("test.dat", "w"); SourceInfo si; assert (fp); fprintf (fp, "This is some kinda test, ya know?\n"); fclose (fp); fp = fopen ("test.dat", "r"); assert (fp); ts3.Append (fp, si); fclose (fp); assert (0 == strcmp ("there.This is some kinda test, ya know?\n", ts3._pData)); // // Consume() // char c; bool stat; stat = ts1.Consume (c); assert (stat); assert ('H' == c); assert (1 == ts1.GetLength()); stat = ts1.Consume (c); assert (stat); assert ('i' == c); assert (0 == ts1.GetLength()); stat = ts1.Consume (c); assert (!stat); assert (! c); // // Snoop(), Expect() // assert (! ts3.Snoop ("there..")); assert (ts3.Snoop ("there.")); assert (ts3.Snoop ("there.")); assert (! ts3.Expect ("there..")); assert (ts3.Expect ("there.")); assert (! ts3.Expect ("there.")); assert (ts3.Expect ("This is")); }
void CTimerDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); if(!pDX->m_bSaveAndValidate) { if (m_current_timer && m_current_timer->bIncluded) m_strIncluded = "(included)"; else m_strIncluded.Empty (); } //{{AFX_DATA_MAP(CTimerDlg) DDX_Control(pDX, IDC_SEND_TO, m_ctlSendTo); DDX_Control(pDX, IDC_SCRIPT_NAME, m_ctlProcedure); DDX_Control(pDX, IDC_TIMER_CONTENTS, m_ctlContents); DDX_Control(pDX, IDC_BUTTON_AT, m_ctlButtonAt); DDX_Check(pDX, IDC_ENABLED, m_bEnabled); DDX_Text(pDX, IDC_TIMER_LABEL, m_strLabel); DDX_Text(pDX, IDC_AT_HOUR, m_iAtHour); DDV_MinMaxInt(pDX, m_iAtHour, 0, 23); DDX_Text(pDX, IDC_AT_MINUTE, m_iAtMinute); DDV_MinMaxInt(pDX, m_iAtMinute, 0, 59); DDX_Text(pDX, IDC_INTERVAL_HOUR, m_iEveryHour); DDV_MinMaxInt(pDX, m_iEveryHour, 0, 23); DDX_Text(pDX, IDC_INTERVAL_MINUTE, m_iEveryMinute); DDV_MinMaxInt(pDX, m_iEveryMinute, 0, 59); DDX_Text(pDX, IDC_OFFSET_HOUR, m_iOffsetHour); DDV_MinMaxInt(pDX, m_iOffsetHour, 0, 23); DDX_Text(pDX, IDC_OFFSET_MINUTE, m_iOffsetMinute); DDV_MinMaxInt(pDX, m_iOffsetMinute, 0, 59); DDX_MinMaxString(pDX, IDC_TIMER_CONTENTS, m_strContents); DDV_MinMaxString(pDX, m_strContents, 0, 32000); DDX_Radio(pDX, IDC_BUTTON_EVERY, m_iType); DDX_Text(pDX, IDC_SCRIPT_NAME, m_strProcedure); DDX_Check(pDX, IDC_ONE_SHOT_TIMER, m_bOneShot); DDX_Check(pDX, IDC_TEMPORARY, m_bTemporary); DDX_Check(pDX, IDC_ACTIVE_WHEN_CLOSED, m_bActiveWhenClosed); DDX_Text(pDX, IDC_GROUP, m_strGroup); DDX_CBIndex(pDX, IDC_SEND_TO, m_iSendTo); DDX_Text(pDX, IDC_VARIABLE, m_strVariable); DDX_Text(pDX, IDC_INCLUDED, m_strIncluded); DDX_Check(pDX, IDC_OMIT_FROM_OUTPUT, m_bOmitFromOutput); DDX_Check(pDX, IDC_OMIT_FROM_LOG, m_bOmitFromLog); DDX_Text(pDX, IDC_AT_SECOND, m_fAtSecond); DDV_MinMaxDouble(pDX, m_fAtSecond, 0., 59.99999); DDX_Text(pDX, IDC_INTERVAL_SECOND, m_fEverySecond); DDV_MinMaxDouble(pDX, m_fEverySecond, 0., 59.99999); DDX_Text(pDX, IDC_OFFSET_SECOND, m_fOffsetSecond); DDV_MinMaxDouble(pDX, m_fOffsetSecond, 0., 59.99999); //}}AFX_DATA_MAP if(pDX->m_bSaveAndValidate) { m_strLabel.TrimLeft (); m_strLabel.TrimRight (); m_strProcedure.TrimLeft (); m_strProcedure.TrimRight (); m_strGroup.TrimLeft (); m_strGroup.TrimRight (); if (m_iType == CTimer::eInterval) { CmcDateTimeSpan ts1 (0, m_iEveryHour, m_iEveryMinute, m_fEverySecond); CmcDateTimeSpan ts2 (0, m_iOffsetHour, m_iOffsetMinute, m_fOffsetSecond); if (ts1 <= CmcDateTimeSpan (0, 0, 0, 0)) { ::TMessageBox("The timer interval must be greater than zero."); DDX_Text(pDX, IDC_INTERVAL_HOUR, m_iEveryHour); pDX->Fail(); } // end of interval <= 0 if(ts2 >= ts1) { ::TMessageBox("The timer offset must be less than the timer period."); DDX_Text(pDX, IDC_OFFSET_HOUR, m_iOffsetHour); pDX->Fail(); } // end of offset >= period } // end of doing a periodical timer CString strTimerName; CTimer * timer_item; POSITION pos; for (pos = m_pTimerMap->GetStartPosition (); pos; ) { m_pTimerMap->GetNextAssoc (pos, strTimerName, timer_item); // don't compare against itself if (timer_item == m_current_timer) continue; // now check the label for duplicates if (!m_strLabel.IsEmpty ()) // we can have duplicate blank names if (m_strLabel.CompareNoCase (timer_item->strLabel) == 0) { CString strMsg; strMsg = TFormat ("The timer label \"%s\" is already in the list of timers.", (LPCTSTR) m_strLabel); ::UMessageBox(strMsg); DDX_Text(pDX, IDC_TIMER_LABEL, m_strLabel); pDX->Fail(); } } // end of checking each Timer if (!m_strLabel.IsEmpty ()) // we can have blank labels { // check label is valid if (CheckLabel (m_strLabel)) { ::TMessageBox ("The label must start with a letter and consist of letters" ", numbers or the underscore character."); DDX_Text(pDX, IDC_TIMER_LABEL, m_strLabel); pDX->Fail(); } } // end of having non-blank label if (m_strVariable.IsEmpty ()) // we can have blank variables { if (m_iSendTo == eSendToVariable) { ::TMessageBox("When sending to a variable you must specify a variable name. ", MB_ICONSTOP); DDX_Text(pDX, IDC_VARIABLE, m_strVariable); pDX->Fail(); } } else { // check variable name is valid if (CheckLabel (m_strVariable)) { ::TMessageBox("The variable name must start with a letter and consist of letters" ", numbers or the underscore character."); DDX_Text(pDX, IDC_VARIABLE, m_strVariable); pDX->Fail(); } } // end of having non-blank variable // check for speed walking OK, unless they are substituting if (m_iSendTo == eSendToSpeedwalk) { CString strResult = m_pDoc->DoEvaluateSpeedwalk (m_strContents); if (!strResult.IsEmpty ()) { if (strResult [0] == '*') // error in speedwalk string? { ::UMessageBox (strResult.Mid (1)); // already translated, I think DDX_Text(pDX, IDC_TIMER_CONTENTS, m_strContents); pDX->Fail(); } // end of error message } // end of non-empty speedwalk } // end of speed walking wanted if(m_strContents.IsEmpty () && m_strProcedure.IsEmpty ()) { ::TMessageBox("The timer contents cannot be blank unless you specify a script subroutine."); DDX_Text(pDX, IDC_TIMER_CONTENTS, m_strContents); pDX->Fail(); } // end of contents being blank if (!m_strProcedure.IsEmpty ()) // blank procedure is OK { // check procedure is valid if (CheckLabel (m_strProcedure, true)) { ::TMessageBox("The script subroutine name must start with a letter and consist of letters" ", numbers or the underscore character."); DDX_Text(pDX, IDC_SCRIPT_NAME, m_strProcedure); pDX->Fail(); } } // end of having non-blank procedure } // end of saving and validating }
bool PaletteLoader_PS::importFile(const QString& fileName, bool /*merge*/) { QString tmp, colorName; double c, m, y, k; ScColor cc; QFile f(fileName); if (!f.open(QIODevice::ReadOnly)) return false; int oldCount = m_colors->count(); bool isAtend = false; QDataStream ts(&f); while (!ts.atEnd()) { tmp = readLineFromDataStream(ts); if ((tmp.startsWith("%%CMYKCustomColor")) || (tmp.startsWith("%%CMYKProcessColor"))) { if (tmp.contains("(atend)")) isAtend = true; else { if (tmp.startsWith("%%CMYKCustomColor")) tmp = tmp.remove(0,18); else if (tmp.startsWith("%%CMYKProcessColor")) tmp = tmp.remove(0,19); ScTextStream ts2(&tmp, QIODevice::ReadOnly); ts2 >> c >> m >> y >> k; colorName = ts2.readAll(); colorName = colorName.trimmed(); colorName = colorName.remove(0,1); colorName = colorName.remove(colorName.length()-1,1); colorName = colorName.simplified(); cc = ScColor(qRound(255 * c), qRound(255 * m), qRound(255 * y), qRound(255 * k)); cc.setSpotColor(true); if (!colorName.isEmpty()) m_colors->tryAddColor(colorName, cc); while (!ts.atEnd()) { quint64 oldPos = ts.device()->pos(); tmp = readLineFromDataStream(ts); if (!tmp.startsWith("%%+")) { ts.device()->seek(oldPos); break; } tmp = tmp.remove(0,3); ScTextStream ts2(&tmp, QIODevice::ReadOnly); ts2 >> c >> m >> y >> k; colorName = ts2.readAll(); colorName = colorName.trimmed(); colorName = colorName.remove(0,1); colorName = colorName.remove(colorName.length()-1,1); colorName = colorName.simplified(); cc = ScColor(qRound(255 * c), qRound(255 * m), qRound(255 * y), qRound(255 * k)); cc.setSpotColor(true); if (!colorName.isEmpty()) m_colors->tryAddColor(colorName, cc); } } } if ((tmp.startsWith("%%RGBCustomColor")) || (tmp.startsWith("%%RGBProcessColor"))) { if (tmp.contains("(atend)")) isAtend = true; else { if (tmp.startsWith("%%RGBCustomColor")) tmp = tmp.remove(0,17); else if (tmp.startsWith("%%RGBProcessColor")) tmp = tmp.remove(0,18); ScTextStream ts2(&tmp, QIODevice::ReadOnly); ts2 >> c >> m >> y; colorName = ts2.readAll(); colorName = colorName.trimmed(); colorName = colorName.remove(0,1); colorName = colorName.remove(colorName.length()-1,1); colorName = colorName.simplified(); cc = ScColor(qRound(255 * c), qRound(255 * m), qRound(255 * y)); if (!colorName.isEmpty()) m_colors->tryAddColor(colorName, cc); while (!ts.atEnd()) { quint64 oldPos = ts.device()->pos(); tmp = readLineFromDataStream(ts); if (!tmp.startsWith("%%+")) { ts.device()->seek(oldPos); break; } tmp = tmp.remove(0,3); ScTextStream ts2(&tmp, QIODevice::ReadOnly); ts2 >> c >> m >> y; colorName = ts2.readAll(); colorName = colorName.trimmed(); colorName = colorName.remove(0,1); colorName = colorName.remove(colorName.length()-1,1); colorName = colorName.simplified(); cc = ScColor(qRound(255 * c), qRound(255 * m), qRound(255 * y)); if (!colorName.isEmpty()) m_colors->tryAddColor(colorName, cc); } } } if (tmp.startsWith("%%EndComments")) { if (!isAtend) break; } } f.close(); return (m_colors->count() != oldCount); }
// Paste text from the clipboard void Matrix::pasteSelection() { QApplication::setOverrideCursor(waitCursor); QString text; if ( !QTextDrag::decode(QApplication::clipboard()->data(), text) || text.isNull()) { QApplication::restoreOverrideCursor(); return; } QTextStream ts( &text, IO_ReadOnly ); QString s = ts.readLine(); QStringList cellTexts = QStringList::split ("\t", s, TRUE); int cols=int(cellTexts.count()); int rows= 1; while(!ts.atEnd()) { rows++; s = ts.readLine(); } ts.reset(); int i, j, top, bottom, right, left, firstCol; QTableSelection sel=d_table->selection(d_table->currentSelection()); if (!sel.isEmpty()) {// not columns but only cells are selected top=sel.topRow(); bottom=sel.bottomRow(); left=sel.leftCol(); right=sel.rightCol(); } else { top=0; bottom=d_table->numRows() - 1; left=0; right=d_table->numCols() - 1; firstCol = -1; for (i=0; i<d_table->numCols(); i++) { if (d_table->isColumnSelected(i, TRUE)) { firstCol = i; break; } } if (firstCol >= 0) {// columns are selected left=firstCol; int selectedColsNumber = 0; for (i=0; i<d_table->numCols(); i++) { if (d_table->isColumnSelected(i, TRUE)) selectedColsNumber++; } right=firstCol + selectedColsNumber - 1; } } QTextStream ts2( &text, IO_ReadOnly ); int r = bottom-top+1; int c = right-left+1; QApplication::restoreOverrideCursor(); if (rows>r || cols>c) { switch( QMessageBox::information(0,"QtiPlot", tr("The text in the clipboard is larger than your current selection!\ \nDo you want to insert cells?"), tr("Yes"), tr("No"), tr("Cancel"), 0, 0) ) { case 0: if(cols > c ) d_table->insertColumns(left, cols - c); if(rows > r) { if (firstCol >= 0) d_table->insertRows(top, rows - r); else d_table->insertRows(top, rows - r + 1); } break; case 1: rows = r; cols = c; break; case 2: return; break; } } QApplication::setOverrideCursor(waitCursor); bool numeric; double value; for (i=top; i<top+rows; i++) { s = ts2.readLine(); cellTexts=QStringList::split ("\t", s, TRUE); for (j=left; j<left+cols; j++) { value = cellTexts[j-left].toDouble(&numeric); if (numeric) d_table->setText(i, j, QString::number(value, txt_format, num_precision)); else d_table->setText(i, j, cellTexts[j-left]); } } emit modifiedWindow(this); QApplication::restoreOverrideCursor(); }
void Matrix::pasteSelection() { QString the_text = QApplication::clipboard()->text(); if (the_text.isEmpty()) return; allow_modification_signals = false; QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QTextStream ts( &the_text, QIODevice::ReadOnly ); QString s = ts.readLine(); QStringList cellTexts = s.split("\t"); int cols = cellTexts.count(); int rows = 1; while(!ts.atEnd()) { rows++; s = ts.readLine(); } ts.reset(); int i, j, top, bottom, right, left, firstCol; QList<QTableWidgetSelectionRange> sel = d_table->selectedRanges(); QListIterator<QTableWidgetSelectionRange> it(sel); QTableWidgetSelectionRange cur; if (!sel.isEmpty()) { cur = it.next(); top = cur.topRow(); bottom = cur.bottomRow(); left = cur.leftColumn(); right = cur.rightColumn(); } else { top = 0; bottom = numRows() - 1; left = 0; right = numCols() - 1; firstCol = firstSelectedColumn(); if (firstCol >= 0) { // columns are selected left = firstCol; int selectedColsNumber = 0; for(i=0; i<numCols(); i++) { if (isColumnSelected(i, true)) selectedColsNumber++; } right = firstCol + selectedColsNumber - 1; } } QTextStream ts2( &the_text, QIODevice::ReadOnly ); int r = bottom-top+1; int c = right-left+1; QApplication::restoreOverrideCursor(); if (rows>r || cols>c) { // TODO: I find the insert cells option awkward // I would prefer the behavior of OpenOffice Calc // here - thzs switch( QMessageBox::information(0,"QtiPlot", tr("The text in the clipboard is larger than your current selection!\ \nDo you want to insert cells?"), tr("Yes"), tr("No"), tr("Cancel"), 0, 0) ) { case 0: if(cols > c ) for(int i=0; i<(cols-c); i++) d_table->insertColumn(left); if(rows > r) { if (firstCol >= 0) for(int i=0; i<(rows-r); i++) d_table->insertRow(top); else for(int i=0; i<(rows-r+1); i++) d_table->insertRow(top); } break; case 1: rows = r; cols = c; break; case 2: allow_modification_signals = true; return; break; } } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); bool numeric; double value; QLocale system_locale = QLocale::system(); for(i=top; i<top+rows; i++) { s = ts2.readLine(); cellTexts=s.split("\t"); for(j=left; j<left+cols; j++) { value = system_locale.toDouble(cellTexts[j-left], &numeric); if (numeric) setText(i, j, QLocale().toString(value, txt_format.toAscii(), num_precision)); else setText(i, j, cellTexts[j-left]); } } allow_modification_signals = true; emit modifiedWindow(this); QApplication::restoreOverrideCursor(); }