📄 qt_spec.cpp
字号:
}boolRLPGraphDrag::provides(const char *mimeType){ if(go1 && 0 == strcmp(mimeType, MIME_RLPGRAPH)) return true; if(go2 && 0 == strcmp(mimeType, MIME_RLPOBJ)) return true; return false;}voidRLPGraphDrag::setGraphData(GraphObj *g){ go1 = g; if(CurrGraph && CurrGraph != g) go2 = CurrGraph; else go2 = 0L;}QByteArrayRLPGraphDrag::encodedData(const char* mime) const{ static QByteArray b; char *ptr = 0L; long cb; if(0 == strcmp(mime, "text/plain")) return 0L; else if(go1 && 0 == strcmp(mime, MIME_RLPGRAPH)) ptr = GraphToMem(go1, &cb); else if(go2 && 0 == strcmp(mime, MIME_RLPOBJ)) ptr = GraphToMem(go2, &cb); else return 0L; if(ptr && b.resize(cb+1)) { memcpy(b.data(), ptr, cb+1); free (ptr); return (b); } return 0L;}const char*RLPGraphDrag::format(int i) const{ switch(i) { case 0: return("text/plain"); case 1: return MIME_RLPGRAPH; case 2: return MIME_RLPOBJ; default: return 0L; }}boolRLPGraphDrag::canDecode(QMimeSource *e){ if(e->provides(MIME_RLPGRAPH)) return true; if(e->provides(MIME_RLPOBJ)) return true; return false;}const char*RLPGraphDrag::selectionMimeType(){ return(MIME_RLPGRAPH);}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// Process paste command: check for clipboard contentsvoid TestClipboard(GraphObj *g){ QClipboard *cb; QDragObject *mime; if(!(cb = QAppl->clipboard()))return;
if(!(mime = (QDragObject *)cb->data()))return;
if(g->Id == GO_SPREADDATA) { if(mime->provides(MIME_RLPLOT)){
QByteArray b = mime->encodedData(MIME_RLPLOT); if(b) g->Command(CMD_PASTE_XML, (void*)b.data(), 0L); return; } else if(mime->provides(MIME_KSPREAD)){ QByteArray b = mime->encodedData(MIME_KSPREAD); if(b) g->Command(CMD_PASTE_XML, (void*)b.data(), 0L); return; } else if(QByteArray b = mime->encodedData(MIME_RLPOBJ)){ OpenGraph(g, 0L, (unsigned char*)b.data()); return; } else if(QByteArray b = mime->encodedData(MIME_RLPGRAPH)){ OpenGraph(g, 0L, (unsigned char*)b.data()); return; } else if(mime->provides("text/plain")){ QString _text = cb->text(); ProcMemData(g, (unsigned char*)_text.latin1(), true); return; } } else if(g->Id == GO_PAGE){ if(QByteArray b = mime->encodedData(MIME_RLPOBJ)){ OpenGraph(g, 0L, (unsigned char*)b.data()); return; } else if(QByteArray b = mime->encodedData(MIME_RLPGRAPH)){ OpenGraph(g, 0L, (unsigned char*)b.data()); return; } } else if(g->Id == GO_GRAPH)TestClipboard(g->parent);}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// Copy spreadsheet or graph to clipboardvoid CopyData(GraphObj *g){ EmptyClip(); KSpreadTextDrag *kd = new KSpreadTextDrag(0L); kd->setText(QString("RLPlot snippet")); kd->setSpreadData(g);#ifdef Q_CHECK_PTR //n.a. in Qt version 2 if(QAppl->clipboard()->supportsSelection()) QAppl->clipboard()->setSelectionMode(TRUE);#endif QAppl->clipboard()->setData(kd);}void CopyGraph(GraphObj *g){ EmptyClip(); RLPGraphDrag *gd = new RLPGraphDrag(0L); gd->setText(QString("RLPlot graph")); gd->setGraphData(g); //no support for X11 clipboard possible QAppl->clipboard()->setData(gd);}void EmptyClip(){ HideCopyMark(); QAppl->clipboard()->clear();}
void CopyText(char *txt, int len)
{
QClipboard *cb;
char tmp_txt[90];
if(!(cb = QAppl->clipboard()) || !txt || !txt[0])return;
EmptyClip();
if(!len) len = strlen(txt);
memcpy(tmp_txt, txt, len); tmp_txt[len] = 0;
#ifdef Q_CHECK_PTR //n.a. in Qt version 2
cb->setText(tmp_txt, QClipboard::Clipboard);
cb->setText(tmp_txt, QClipboard::Selection);
#else
cb->setText(tmp_txt);
#endif
}
unsigned char* PasteText()
{
QClipboard *cb;
QMimeSource *mime;
unsigned char *tmp_txt = 0L;
if(!(cb = QAppl->clipboard())) return 0L;
#ifdef Q_CHECK_PTR //n.a. in Qt version 2
QString qstr = cb->text(QClipboard::Clipboard);
#else
QString qstr = cb->text();
#endif
if(qstr.length()) tmp_txt = (unsigned char*) strdup(qstr);
else {
#ifdef Q_CHECK_PTR //n.a. in Qt version 2
qstr = cb->text(QClipboard::Selection);
#else
QString qstr = cb->text();
#endif
if(qstr.length()) tmp_txt = (unsigned char*) strdup(qstr);
}
return tmp_txt;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// Get display (desktop) size//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void GetDesktopSize(int *width, int *height){ QWidget *d = QApplication::desktop(); *width = d->width(); *height = d->height();}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// Swap red and blue in RGB value//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~DWORD SwapRB(DWORD col){ DWORD nc = col & 0x0000ff00L; nc |= (col>>16)&0x000000ffL; nc |= (col<<16)&0x00ff0000L; return nc;}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Common code for all QT output classes
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool com_TextOut(int x, int y, char *ctxt, TextDEF *TxtSet, QPainter *qP, anyOutput *o)
{
int i, w, h, ix, iy;
QBrush oldBrush;
QPen oldPen, currPen;
QWMatrix xf, dxf;
QString txt(ctxt);
if(!ctxt || !ctxt[0] || !TxtSet || !qP || !o) return false;
if(TxtSet->Font==FONT_GREEK) {
txt.truncate(0);
for(i = 0; ctxt[i]; i++) {
if((ctxt[i] >= 'A' && ctxt[i] <= 'Z')) txt.append(QChar(ctxt[i] - 'A' + 0x391));
else if((ctxt[i] >= 'a' && ctxt[i] <= 'z')) txt.append(QChar(ctxt[i] - 'a' + 0x3B1));
else txt.append(QChar(ctxt[i]));
}
}
oldBrush = qP->brush(); dxf = qP->worldMatrix();
oldPen = currPen = qP->pen();
o->oGetTextExtent(ctxt, -1, &w, &h);
if(TxtSet->Align & TXA_VCENTER) iy = y + iround(TxtSet->iSize *0.4);
else if(TxtSet->Align & TXA_VBOTTOM) iy = y;
else iy = y + TxtSet->iSize + 1;
if(TxtSet->Align & TXA_HCENTER) ix = x - (w >> 1);
else if(TxtSet->Align & TXA_HRIGHT) ix = x - w;
else ix = x;
currPen.setColor(SwapRB(TxtSet->ColTxt));
qP->setPen(currPen);
if(fabs(TxtSet->RotBL) >.01 || fabs(TxtSet->RotCHAR) >.01) {
xf.translate(x, y);
xf.rotate(-TxtSet->RotBL);
qP->setWorldMatrix(xf, TRUE);
if(TxtSet->Mode == TXM_OPAQUE){
currPen.setColor(SwapRB(TxtSet->ColBg));
qP->setPen(currPen);
qP->setBrush(QColor(SwapRB(TxtSet->ColBg)));
qP->drawRect(0, - iround(h*.8), w, h);
currPen.setColor(SwapRB(TxtSet->ColTxt));
qP->setPen(currPen);
}
if(TxtSet->Style & TXS_SUB) iy += o->un2iy(TxtSet->fSize*0.4);
else if(TxtSet->Style & TXS_SUPER) iy -= o->un2iy(TxtSet->fSize*0.4);
qP->drawText(ix-x, iy-y, txt, -1);
}
else {
if(TxtSet->Mode == TXM_OPAQUE){
currPen.setColor(SwapRB(TxtSet->ColBg));
qP->setPen(currPen);
qP->setBrush(QColor(SwapRB(TxtSet->ColBg)));
qP->drawRect(ix, iy - iround(h*.8), w, h);
currPen.setColor(SwapRB(TxtSet->ColTxt));
qP->setPen(currPen);
}
if(TxtSet->Style & TXS_SUB) iy += o->un2iy(TxtSet->fSize*0.4);
else if(TxtSet->Style & TXS_SUPER) iy -= o->un2iy(TxtSet->fSize*0.4);
qP->drawText(ix, iy, txt, -1);
}
qP->setPen(oldPen);
qP->setBrush(oldBrush);
qP->setWorldMatrix(dxf, FALSE);
return true;
}
bool com_SetTextSpec(TextDEF *set, TextDEF *TxtSet, anyOutput *o, QFont qF, QPainter *qP)
{
bool IsModified, RetVal;
if(!set->iSize && set->fSize > 0.0) set->iSize = o->un2iy(set->fSize);
if(!set->iSize) return false;
if(TxtSet->iSize != set->iSize || TxtSet->Style != set->Style ||
TxtSet->RotBL != set->RotBL || TxtSet->RotCHAR != set->RotCHAR ||
TxtSet->Font != set->Font || TxtSet->Mode != set->Mode)
IsModified = true;
else IsModified = false;
RetVal = o->anyOutput::SetTextSpec(set);
if(IsModified) {
qF.setBold((TxtSet->Style & TXS_BOLD) ? true : false);
qF.setItalic((TxtSet->Style & TXS_ITALIC) ? true : false);
qF.setUnderline((TxtSet->Style &TXS_UNDERLINE) ? true : false);
if((TxtSet->Style & TXS_SUPER) || (TxtSet->Style & TXS_SUB))
qF.setPointSize(o->un2iy(set->fSize*0.71));
else qF.setPointSize((TxtSet->iSize > 8) ? TxtSet->iSize : 8);
switch(TxtSet->Font){
case FONT_HELVETICA:
default: qF.setFamily("Helvetica"); break;
case FONT_GREEK:
case FONT_TIMES: qF.setFamily("Times"); break;
case FONT_COURIER: qF.setFamily("Courier"); break;
}
qP->setFont(qF);
}
return RetVal;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// Icon definitions//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//this icon has been taken from trolltech's Qt: qmessagebox.cppstatic char *information_xpm[]={"32 32 5 1",". c None","c c #000000","* c #999999","a c #ffffff","b c #0000ff","...........********.............","........***aaaaaaaa***..........","......**aaaaaaaaaaaaaa**........",".....*aaaaaaaaaaaaaaaaaa*.......","....*aaaaaaaabbbbaaaaaaaac......","...*aaaaaaaabbbbbbaaaaaaaac.....","..*aaaaaaaaabbbbbbaaaaaaaaac....",".*aaaaaaaaaaabbbbaaaaaaaaaaac...",".*aaaaaaaaaaaaaaaaaaaaaaaaaac*..","*aaaaaaaaaaaaaaaaaaaaaaaaaaaac*.","*aaaaaaaaaabbbbbbbaaaaaaaaaaac*.","*aaaaaaaaaaaabbbbbaaaaaaaaaaac**","*aaaaaaaaaaaabbbbbaaaaaaaaaaac**","*aaaaaaaaaaaabbbbbaaaaaaaaaaac**","*aaaaaaaaaaaabbbbbaaaaaaaaaaac**","*aaaaaaaaaaaabbbbbaaaaaaaaaaac**",".*aaaaaaaaaaabbbbbaaaaaaaaaac***",".*aaaaaaaaaaabbbbbaaaaaaaaaac***","..*aaaaaaaaaabbbbbaaaaaaaaac***.","...caaaaaaabbbbbbbbbaaaaaac****.","....caaaaaaaaaaaaaaaaaaaac****..",".....caaaaaaaaaaaaaaaaaac****...","......ccaaaaaaaaaaaaaacc****....",".......*cccaaaaaaaaccc*****.....","........***cccaaaac*******......","..........****caaac*****........",".............*caaac**...........","...............caac**...........","................cac**...........",".................cc**...........","..................***...........","...................**..........."};//this icon has been taken from trolltech's Qt: qmessagebox.cppstatic char *critical_xpm[]={"32 32 4 1",". c None","a c #999999","* c #ff0000","b c #ffffff","...........********.............",".........************...........",".......****************.........","......******************........",".....********************a......","....**********************a.....","...************************a....","..*******b**********b*******a...","..******bbb********bbb******a...",".******bbbbb******bbbbb******a..",".*******bbbbb****bbbbb*******a..","*********bbbbb**bbbbb*********a.","**********bbbbbbbbbb**********a.","***********bbbbbbbb***********aa","************bbbbbb************aa","************bbbbbb************aa","***********bbbbbbbb***********aa","**********bbbbbbbbbb**********aa","*********bbbbb**bbbbb*********aa",".*******bbbbb****bbbbb*******aa.",".******bbbbb******bbbbb******aa.","..******bbb********bbb******aaa.","..*******b**********b*******aa..","...************************aaa..","....**********************aaa...","....a********************aaa....",".....a******************aaa.....","......a****************aaa......",".......aa************aaaa.......",".........aa********aaaaa........","...........aaaaaaaaaaa..........",".............aaaaaaa............"};
//thanks to Markus Bongard for the following iconstatic char *RLPlot_xpm[]={/* width height ncolors chars_per_pixel */
"32 32 169 2",
/* colors */
"AA c #FFFFFFFFFFFF",
"BA c #FFFFF7F79494",
"CA c #FFFFF7F78484",
"DA c #FFFFF7F77373",
"EA c #FFFFF7F75252",
"FA c #FFFFF7F74242",
"GA c #FFFFF7F73939",
"HA c #FFFFEFEF8C8C",
"IA c #FFFFEFEF4A4A",
"JA c #FFFFEFEF2929",
"KA c #F7F7E7E77B7B",
"LA c #F7F7C6C6ADAD",
"MA c #F7F7B5B59C9C",
"NA c #F7F7ADAD9494",
"OA c #EFEFF7F7F7F7",
"PA c #EFEFF7F7EFEF",
"AB c #EFEFEFEFEFEF",
"BB c #EFEFEFEFDEDE",
"CB c #EFEFE7E7A5A5",
"DB c #EFEFDEDE7373",
"EB c #EFEFDEDE3939",
"FB c #EFEFDEDE2929",
"GB c #EFEFD6D64242",
"HB c #EFEFA5A58C8C",
"IB c #EFEF94947B7B",
"JB c #EFEF84847373",
"KB c #EFEF84846363",
"LB c #EFEF7B7B7373",
"MB c #E7E7E7E7CECE",
"NB c #E7E7E7E79494",
"OB c #E7E7DEDE6B6B",
"PB c #E7E7DEDE5252",
"AC c #E7E7CECE5252",
"BC c #E7E77B7B6363",
"CC c #E7E773735A5A",
"DC c #E7E76B6B5252",
"EC c #E7E75A5A4A4A",
"FC c #DEDEE7E7F7F7",
"GC c #DEDEE7E7EFEF",
"HC c #DEDEDEDEDEDE",
"IC c #DEDEDEDEBDBD",
"JC c #DEDECECE4A4A",
"KC c #DEDE4A4A3939",
"LC c #D6D6EFEFCECE",
"MC c #D6D6DEDEEFEF",
"NC c #D6D6DEDECECE",
"OC c #CECEDEDEDEDE",
"PC c #CECED6D6CECE",
"AD c #CECECECEB5B5",
"BD c #CECECECE5A5A",
"CD c #C6C6E7E7C6C6",
"DD c #C6C6DEDEEFEF",
"ED c #C6C6D6D67373",
"FD c #C6C6CECE4A4A",
"GD c #BDBDDEDEB5B5",
"HD c #BDBDCECEE7E7",
"ID c #BDBDCECECECE",
"JD c #BDBDC6C6D6D6",
"KD c #BDBD39394242",
"LD c #B5B5DEDEADAD",
"MD c #B5B5BDBDCECE",
"ND c #B5B5BDBD4242",
"OD c #B5B5B5B59C9C",
"PD c #ADADD6D6ADAD",
"AE c #ADADCECEDEDE",
"BE c #ADADBDBDB5B5",
"CE c #ADADB5B54242",
"DE c #ADAD4A4A5252",
"EE c #A5A5BDBDDEDE",
"FE c #A5A5BDBDCECE",
"GE c #A5A5ADADB5B5",
"HE c #A5A5ADAD4242",
"IE c #A5A563637B7B",
"JE c #9C9CD6D6A5A5",
"KE c #9C9CBDBDD6D6",
"LE c #9C9CBDBDBDBD",
"ME c #9C9CADADCECE",
"NE c #9C9CADADA5A5",
"OE c #9C9C52525252",
"PE c #9C9C4A4A5252",
"AF c #9494CECE9C9C",
"BF c #9494B5B5CECE",
"CF c #9494ADAD5A5A",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -