int FarEditor::editorEvent(int event, void *param) { // ignore event if (event != EE_REDRAW || (event == EE_REDRAW && param == EEREDRAW_ALL && inRedraw)){ return 0; } enterHandler(); WindowSizeX = ei.WindowSizeX; WindowSizeY = ei.WindowSizeY; baseEditor->visibleTextEvent(ei.TopScreenLine, WindowSizeY); baseEditor->lineCountEvent(ei.TotalLines); if (param == EEREDRAW_CHANGE){ int ml = (prevLinePosition < ei.CurLine ? prevLinePosition : ei.CurLine)-1; if (ml < 0){ ml = 0; } if (blockTopPosition != -1 && ml > blockTopPosition){ ml = blockTopPosition; } baseEditor->modifyEvent(ml); }; prevLinePosition = ei.CurLine; blockTopPosition = -1; if (ei.BlockType != BTYPE_NONE){ blockTopPosition = ei.BlockStartLine; } // hack against tabs in FAR's editor EditorConvertPos ecp {}, ecp_cl {}; ecp.StringNumber = -1; ecp.SrcPos = ei.CurPos; info->EditorControl(ECTL_REALTOTAB, &ecp); delete cursorRegion; cursorRegion = nullptr; if (rdBackground == nullptr){ throw Exception(DString("HRD Background region 'def:Text' not found")); } for (int lno = ei.TopScreenLine; lno < ei.TopScreenLine + WindowSizeY; lno++){ if (lno >= ei.TotalLines){ break; } LineRegion *l1 = nullptr; if (drawSyntax || drawPairs){ l1 = baseEditor->getLineRegions(lno); } //clean line in far editor addFARColor(lno, -1, 0, color()); EditorGetString egs; egs.StringNumber = lno; info->EditorControl(ECTL_GETSTRING, &egs); int llen = egs.StringLength; // fills back if (lno == ei.CurLine && showHorizontalCross){ if (!TrueMod){ addFARColor(lno, 0, ei.LeftPos + ei.WindowSizeX, horzCrossColor); } else{ addFARColor(lno, 0, ei.LeftPos + ei.WindowSizeX, convert(nullptr)); } } else{ addFARColor(lno, 0, ei.LeftPos + ei.WindowSizeX, convert(nullptr)); } if (showVerticalCross && !TrueMod){ ecp_cl.StringNumber = lno; ecp_cl.SrcPos = ecp.DestPos; info->EditorControl(ECTL_TABTOREAL, &ecp_cl); vertCrossColor.concolor |= 0x10000; addFARColor(lno, ecp_cl.DestPos, ecp_cl.DestPos+1, vertCrossColor); }; bool vertCrossDone = false; if (drawSyntax){ for (; l1; l1 = l1->next){ if (l1->special){ continue; } if (l1->start == l1->end){ continue; } if (l1->start > ei.LeftPos+ei.WindowSizeX){ continue; } if (l1->end != -1 && l1->end < ei.LeftPos-ei.WindowSizeX){ continue; } if ((lno != ei.CurLine || !showHorizontalCross || crossZOrder == 0)){ color col = convert(l1->styled()); //TODO if (lno == ei.CurLine && showHorizontalCross){ if (!TrueMod){ if (foreDefault(col)){ col.concolor = (col.concolor&0xF0) + (horzCrossColor.concolor&0xF); } if (backDefault(col)){ col.concolor = (col.concolor&0xF) + (horzCrossColor.concolor&0xF0); } } }; if (!col.concolor){ continue; } // int lend = l1->end; if (lend == -1){ lend = fullBackground ? ei.LeftPos+ei.WindowSizeX : llen; } addFARColor(lno, l1->start, lend, col); if (lno == ei.CurLine && (l1->start <= ei.CurPos) && (ei.CurPos <= lend)){ delete cursorRegion; cursorRegion = new LineRegion(*l1); }; // column if (!TrueMod && showVerticalCross && crossZOrder == 0 && l1->start <= ecp_cl.DestPos && ecp_cl.DestPos < lend){ col = convert(l1->styled()); if (foreDefault(col)) col.concolor = (col.concolor&0xF0) + (vertCrossColor.concolor&0xF); if (backDefault(col)) col.concolor = (col.concolor&0xF) + (vertCrossColor.concolor&0xF0); ecp_cl.StringNumber = lno; ecp_cl.SrcPos = ecp.DestPos; info->EditorControl(ECTL_TABTOREAL, &ecp_cl); col.concolor|=0x10000; addFARColor(lno, ecp_cl.DestPos, ecp_cl.DestPos+1, col); vertCrossDone = true; }; }; }; }; if (!TrueMod && showVerticalCross && !vertCrossDone){ ecp_cl.StringNumber = lno; ecp_cl.SrcPos = ecp.DestPos; info->EditorControl(ECTL_TABTOREAL, &ecp_cl); vertCrossColor.concolor |= 0x10000; addFARColor(lno, ecp_cl.DestPos, ecp_cl.DestPos+1, vertCrossColor); }; }; /// pair brackets PairMatch *pm = nullptr; if (drawPairs){ pm = baseEditor->searchLocalPair(ei.CurLine, ei.CurPos); } if (pm != nullptr){ color col = convert(pm->start->styled()); // TODO if (!TrueMod && showHorizontalCross){ if (foreDefault(col)){ col.concolor = (col.concolor&0xF0) + (horzCrossColor.concolor&0xF); } if (backDefault(col)){ col.concolor = (col.concolor&0xF) + (horzCrossColor.concolor&0xF0); } }; // addFARColor(ei.CurLine, pm->start->start, pm->start->end, col); // TODO if (!TrueMod && showVerticalCross && !showHorizontalCross && pm->start->start <= ei.CurPos && ei.CurPos < pm->start->end){ col = convert(pm->start->styled()); if (foreDefault(col)){ col.concolor = (col.concolor&0xF0) + (vertCrossColor.concolor&0xF); } if (backDefault(col)){ col.concolor = (col.concolor&0xF) + (vertCrossColor.concolor&0xF0); } col.concolor|=0x10000; addFARColor(pm->sline, ei.CurPos, ei.CurPos+1, col); }; // if (pm->eline != -1){ col = convert(pm->end->styled()); // if (!TrueMod && showHorizontalCross && pm->eline == ei.CurLine){ if (foreDefault(col)){ col.concolor = (col.concolor&0xF0) + (horzCrossColor.concolor&0xF); } if (backDefault(col)){ col.concolor = (col.concolor&0xF) + (horzCrossColor.concolor&0xF0); } }; // addFARColor(pm->eline, pm->end->start, pm->end->end, col); ecp.StringNumber = pm->eline; ecp.SrcPos = ecp.DestPos; info->EditorControl(ECTL_TABTOREAL, &ecp); // if (!TrueMod && showVerticalCross && pm->end->start <= ecp.DestPos && ecp.DestPos < pm->end->end){ col = convert(pm->end->styled()); if (foreDefault(col)){ col.concolor = (col.concolor&0xF0) + (vertCrossColor.concolor&0xF); } if (backDefault(col)){ col.concolor = (col.concolor&0xF) + (vertCrossColor.concolor&0xF0); } col.concolor|=0x10000; addFARColor(pm->eline, ecp.DestPos, ecp.DestPos+1, col); }; // }; baseEditor->releasePairMatch(pm); }; if (param != EEREDRAW_ALL){ inRedraw = true; info->EditorControl(ECTL_REDRAW, nullptr); inRedraw = false; }; return true; }
Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); QFont font1("Times", 12, QFont::Normal); QFont font("Times", 10, QFont::Normal); lm=new QLabel("<u>Matrix:</u>"); m1=new QLineEdit("1"); m2=new QLineEdit("0"); m3=new QLineEdit("0"); m4=new QLineEdit("1"); M=new QLineEdit("5"); R=new QLineEdit("0.25"); mm=new QLabel("m = "); rr=new QLabel("R = "); speed=new QLabel("Speed:"); voptions=new QLabel("<u>Picture options:</u>"); viewoptions=new QLabel("<u>View options:</u>"); zoomlabel=new QLabel("<u>Scaling:</u>"); zoomlabel->setFont(font1); lm->setFont(font1); mm->setFont(font1); rr->setFont(font1); speed->setFont(font1); voptions->setFont(font1); viewoptions->setFont(font1); //QDoubleValidator *b=new QDoubleValidator(0,9999,begin); //QIntValidator *e=new QIntValidator(1,10000,end); //begin->setValidator(b); //end->setValidator(e); QLabel *space=new QLabel(" "); //mm1=new QLabel("mm"); //mm2=new QLabel("mm"); //mm1->setFont(font1); //mm2->setFont(font1); // lbegin=new QLabel("From:"); // lend=new QLabel("To:"); //lbegin->setFont(font); //lend->setFont(font); backDef=new QPushButton("Default view"); pmdstop=new QPushButton("Stop"); goButton=new QPushButton("Go!"); delaxis=new QPushButton("Delete axis"); delmcircle=new QPushButton("Delete moving circle"); delscircle=new QPushButton("Delete static circle"); aboutbutton=new QPushButton("About"); zoombutton=new QPushButton("Fit to screen"); zoombutton->setFont(font1); aboutbutton->setFont(font1); backDef->setFont(font1); pmdstop->setFont(font1); goButton->setFont(font1); delaxis->setFont(font1); delmcircle->setFont(font1); delscircle->setFont(font1); delaxis->setFont(font); delmcircle->setFont(font); delscircle->setFont(font); zoombutton->setFixedHeight(25); zoombutton->setFixedWidth(120); delmcircle->setFixedWidth(120); backDef->setFixedWidth(120); pmdstop->setFixedWidth(120); goButton->setFixedWidth(120); delscircle->setFixedWidth(120); delaxis->setFixedWidth(120); delmcircle->setFixedHeight(25); backDef->setFixedHeight(25); pmdstop->setFixedHeight(25); goButton->setFixedHeight(25); delscircle->setFixedHeight(25); delaxis->setFixedHeight(25); delmcircle->setFixedHeight(25); aboutbutton->setFixedWidth(120); aboutbutton->setFixedHeight(20); aboutbutton->setFont(font); fast=new QPushButton(">"); fast->setFont(font1); fast->setFixedWidth(20); slow=new QPushButton("<"); slow->setFont(font1); slow->setFixedWidth(20); //pmdstop->setDisabled(true); //backDef->setDisabled(true); QHBoxLayout *main=new QHBoxLayout; QGridLayout *gl=new QGridLayout; int size=250; p1=new PMD1; p1->setFixedSize(size,size); p2=new PMD2; p2->setFixedSize(size,size); p3=new PMD3; p3->setFixedSize(size,size); p4=new PMD4; p4->setFixedSize(size,size); gl->addWidget(p1,0,0,1,1,Qt::AlignCenter); gl->addWidget(p2,0,1,1,1,Qt::AlignCenter); gl->addWidget(p3,1,0,1,1,Qt::AlignCenter); gl->addWidget(p4,1,1,1,1,Qt::AlignCenter); main->addLayout(gl); QVBoxLayout *left=new QVBoxLayout; QGridLayout *panel=new QGridLayout; panel->addWidget(lm,0,0,1,4,Qt::AlignCenter); panel->addWidget(m1,1,0,1,2,Qt::AlignCenter); panel->addWidget(m2,1,2,1,2,Qt::AlignCenter); panel->addWidget(m3,2,0,1,2,Qt::AlignCenter); panel->addWidget(m4,2,2,1,2,Qt::AlignCenter); panel->addWidget(rr,3,0,1,2,Qt::AlignRight); panel->addWidget(R,3,2,1,2,Qt::AlignCenter); panel->addWidget(mm,4,0,1,2,Qt::AlignRight); panel->addWidget(M,4,2,1,2,Qt::AlignCenter); panel->addWidget(speed,5,0,1,2,Qt::AlignCenter); panel->addWidget(slow,5,2,1,1,Qt::AlignCenter); panel->addWidget(fast,5,3,1,1,Qt::AlignCenter); panel->addWidget(goButton,6,0,1,4,Qt::AlignCenter); panel->addWidget(voptions,7,0,1,4,Qt::AlignCenter); panel->addWidget(delaxis,8,0,1,4,Qt::AlignCenter); panel->addWidget(delmcircle,9,0,1,4,Qt::AlignCenter); panel->addWidget(delscircle,10,0,1,4,Qt::AlignCenter); panel->addWidget(zoomlabel,11,0,1,4,Qt::AlignCenter); panel->addWidget(zoombutton,12,0,1,4,Qt::AlignCenter); panel->addWidget(viewoptions,13,0,1,4,Qt::AlignCenter); panel->addWidget(backDef,14,0,1,4,Qt::AlignCenter); panel->addWidget(pmdstop,15,0,1,4,Qt::AlignCenter); //panel->addWidget(space,16,0,1,4,Qt::AlignCenter); panel->addWidget(aboutbutton,17,0,1,4,Qt::AlignCenter); left->addLayout(panel); left->addStretch(); main->addLayout(left); QObject::connect(backDef,SIGNAL(clicked()),this, SLOT(backDefault())); QObject::connect(pmdstop,SIGNAL(clicked()),this, SLOT(pmdStop())); QObject::connect(goButton,SIGNAL(clicked()),this, SLOT(pmdGo())); QObject::connect(fast,SIGNAL(clicked()),this, SLOT(makefast())); QObject::connect(slow,SIGNAL(clicked()),this, SLOT(makeslow())); QObject::connect(delaxis,SIGNAL(clicked()),this, SLOT(deleteaxis())); QObject::connect(delmcircle,SIGNAL(clicked()),this, SLOT(deletemcircle())); QObject::connect(delscircle,SIGNAL(clicked()),this, SLOT(deletescircle())); QObject::connect(aboutbutton,SIGNAL(clicked()),this, SLOT(about())); QObject::connect(zoombutton,SIGNAL(clicked()),this, SLOT(zoom())); Dialog::setLayout(main); timer = new QTimer(this); //connect(timer, SIGNAL(timeout()), p1, SLOT(update())); //connect(timer, SIGNAL(timeout()), p2, SLOT(update())); //connect(timer, SIGNAL(timeout()), p3, SLOT(update())); connect(timer, SIGNAL(timeout()), p4, SLOT(update())); timer->start(50); }
int FarEditor::editorEvent(int event, void *param) { // ignore event if (event != EE_REDRAW || inRedraw) return 0; enterHandler(); if (farEncodingIndex != ei.TableNum - ei.AnsiMode){ static CharTableSet cts; farEncodingIndex = ei.TableNum - ei.AnsiMode; if (farEncodingIndex == -1) unicodeEncodingIndex = Encodings::getEncodingIndex("cp866"); else if (farEncodingIndex == -2) unicodeEncodingIndex = Encodings::getEncodingIndex("cp1251"); else{ info->CharTable(farEncodingIndex, (char*)&cts, sizeof(cts)); unicodeEncodingIndex = Encodings::getEncodingIndex(cts.TableName); }; if (unicodeEncodingIndex == -1) unicodeEncodingIndex = Encodings::getDefaultEncodingIndex(); // Here we have to invalidate full editor content baseEditor->modifyEvent(0); }; if (WindowSizeX != ei.WindowSizeX || WindowSizeY != ei.WindowSizeY){ WindowSizeX = ei.WindowSizeX; WindowSizeY = ei.WindowSizeY; }; baseEditor->visibleTextEvent(ei.TopScreenLine, WindowSizeY); baseEditor->lineCountEvent(ei.TotalLines); // Hack against FAR's bad EEREDRAW_CHANGE events if (param == EEREDRAW_CHANGE && ignoreChange == true){ param = EEREDRAW_ALL; ignoreChange = false; }; if (oldFAR || param == EEREDRAW_CHANGE){ int ml = (prevLinePosition < ei.CurLine ? prevLinePosition : ei.CurLine)-1; if (ml < 0) ml = 0; if (blockTopPosition != -1 && ml > blockTopPosition) ml = blockTopPosition; baseEditor->modifyEvent(ml); }; prevLinePosition = ei.CurLine; blockTopPosition = -1; if (ei.BlockType != BTYPE_NONE) blockTopPosition = ei.BlockStartLine; // hack against tabs in FAR's editor EditorConvertPos ecp, ecp_cl; ecp.StringNumber = -1; ecp.SrcPos = ei.CurPos; info->EditorControl(ECTL_REALTOTAB, &ecp); delete cursorRegion; cursorRegion = null; if (rdBackground == null) throw Exception(DString("HRD Background region 'def:Text' not found")); for(int lno = ei.TopScreenLine; lno < ei.TopScreenLine + WindowSizeY; lno++){ if (lno >= ei.TotalLines) break; LineRegion *l1 = null; if (drawSyntax || drawPairs){ l1 = baseEditor->getLineRegions(lno); } addFARColor(lno, -1, 0, 0); EditorGetString egs; egs.StringNumber = lno; info->EditorControl(ECTL_GETSTRING, &egs); int llen = egs.StringLength; const char *lptr = egs.StringText; // fills back if (lno == ei.CurLine && showHorizontalCross) addFARColor(lno, 0, ei.LeftPos + ei.WindowSizeX, horzCrossColor); else addFARColor(lno, 0, ei.LeftPos + ei.WindowSizeX, convert(null)); if (showVerticalCross){ ecp_cl.StringNumber = lno; ecp_cl.SrcPos = ecp.DestPos; info->EditorControl(ECTL_TABTOREAL, &ecp_cl); addFARColor(lno, ecp_cl.DestPos, ecp_cl.DestPos+1, vertCrossColor+0x10000); }; bool vertCrossDone = false; int syns = 0; int syne = 0; if (drawSyntax) for(; l1; l1 = l1->next){ if (l1->special) continue; if (l1->start == l1->end) continue; if (l1->start > ei.LeftPos+ei.WindowSizeX) continue; if (l1->end != -1 && l1->end < ei.LeftPos-ei.WindowSizeX) continue; if ((lno != ei.CurLine || !showHorizontalCross || crossZOrder == 0)){ int color = convert(l1->styled()); if (lno == ei.CurLine && showHorizontalCross){ if (foreDefault(color)) color = (color&0xF0) + (horzCrossColor&0xF); if (backDefault(color)) color = (color&0xF) + (horzCrossColor&0xF0); }; if (!color) continue; int lend = l1->end; if (lend == -1) lend = fullBackground ? ei.LeftPos+ei.WindowSizeX : llen; addFARColor(lno, l1->start, lend, color); if (lno == ei.CurLine && (l1->start <= ei.CurPos) && (ei.CurPos <= lend)){ delete cursorRegion; cursorRegion = new LineRegion(*l1); }; // column if (showVerticalCross && crossZOrder == 0 && l1->start <= ecp_cl.DestPos && ecp_cl.DestPos < lend) { color = convert(l1->styled()); if (foreDefault(color)) color = (color&0xF0) + (vertCrossColor&0xF); if (backDefault(color)) color = (color&0xF) + (vertCrossColor&0xF0); ecp_cl.StringNumber = lno; ecp_cl.SrcPos = ecp.DestPos; info->EditorControl(ECTL_TABTOREAL, &ecp_cl); addFARColor(lno, ecp_cl.DestPos, ecp_cl.DestPos+1, color+0x10000); vertCrossDone = true; }; }; }; if (showVerticalCross && !vertCrossDone){ ecp_cl.StringNumber = lno; ecp_cl.SrcPos = ecp.DestPos; info->EditorControl(ECTL_TABTOREAL, &ecp_cl); addFARColor(lno, ecp_cl.DestPos, ecp_cl.DestPos+1, vertCrossColor+0x10000); }; }; /// pair brackets PairMatch *pm = null; if (drawPairs){ pm = baseEditor->searchLocalPair(ei.CurLine, ei.CurPos); } if (pm != null){ int color = convert(pm->start->styled()); if (showHorizontalCross){ if (foreDefault(color)) color = (color&0xF0) + (horzCrossColor&0xF); if (backDefault(color)) color = (color&0xF) + (horzCrossColor&0xF0); }; addFARColor(ei.CurLine, pm->start->start, pm->start->end, color); if (showVerticalCross && !showHorizontalCross && pm->start->start <= ei.CurPos && ei.CurPos < pm->start->end){ color = convert(pm->start->styled()); if (foreDefault(color)) color = (color&0xF0) + (vertCrossColor&0xF); if (backDefault(color)) color = (color&0xF) + (vertCrossColor&0xF0); addFARColor(pm->sline, ei.CurPos, ei.CurPos+1, color+0x10000); }; if (pm->eline != -1){ color = convert(pm->end->styled()); if (showHorizontalCross && pm->eline == ei.CurLine){ if (foreDefault(color)) color = (color&0xF0) + (horzCrossColor&0xF); if (backDefault(color)) color = (color&0xF) + (horzCrossColor&0xF0); }; addFARColor(pm->eline, pm->end->start, pm->end->end, color); ecp.StringNumber = pm->eline; ecp.SrcPos = ecp.DestPos; info->EditorControl(ECTL_TABTOREAL, &ecp); if (showVerticalCross && pm->end->start <= ecp.DestPos && ecp.DestPos < pm->end->end) { color = convert(pm->end->styled()); if (foreDefault(color)) color = (color&0xF0) + (vertCrossColor&0xF); if (backDefault(color)) color = (color&0xF) + (vertCrossColor&0xF0); addFARColor(pm->eline, ecp.DestPos, ecp.DestPos+1, color+0x10000); }; }; baseEditor->releasePairMatch(pm); }; leaveHandler(); if (param != EEREDRAW_ALL){ inRedraw = true; info->EditorControl(ECTL_REDRAW, EEREDRAW_ALL); inRedraw = false; }; return true; }