Exemple #1
0
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);
}
Exemple #3
0
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;
}