⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keditcl1.cpp

📁 一种效率高
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    killstring.detach();    killstring = killstring.mid(col,killstring.length());    if(!killbufferstring.isEmpty() && !killtrue && !lastwasanewline){      killbufferstring += "\n";    }    if( (killstring.length() == 0) && !killtrue){      killbufferstring += "\n";      lastwasanewline = true;    }    if(killstring.length() > 0){      killbufferstring += killstring;      lastwasanewline = false;      killtrue = true;    }else{      lastwasanewline = false;      killtrue = !killtrue;    }    killing = true;    QMultiLineEdit::keyPressEvent(e);    setModified();    emit CursorPositionChanged();    return;  }  if ((e->state() & ControlButton ) && (e->key() == Key_Y) ){    int line = 0;    int col  = 0;    getCursorPosition(&line,&col);    if(!killtrue)      killbufferstring += '\n';    insertAt(killbufferstring,line,col);    killing = false;    setModified();    emit CursorPositionChanged();    return;  }  killing = false;  if (e->key() == Key_Insert){    this->setOverwriteMode(!this->isOverwriteMode());    emit toggle_overwrite_signal();    return;  }  if( fill_column_value > 20 ){    if ((e->state() & ControlButton ) && (e->key() == Key_J) ){	deselect(); //Matthias	int templine,tempcol;	getCursorPosition(&templine,&tempcol);		setAutoUpdate(false);	int upperbound;	bool did_format = format2(par,upperbound);	if(!did_format)	  return;	int num_of_rows = 0;	QString newpar;	int cursorline = upperbound; //Matthias	int cursorcol = 0; //Matthias	bool cursor_found = false; //Matthias	for( int k = 0; k < (int)par.count(); k++){	  QString tmp = par.at(k); //Matthias	  { //Matthias	    int f = tmp.find((char)1);	    if (f>-1){	      cursor_found = true;	      cursorcol = f;	      tmp.remove(f,1);	    }	  }	  newpar += tmp; //Matthias	  if (!cursor_found) cursorline++; //Matthias	  if(k != (int)par.count() -1 )	    newpar += '\n';	}	insertLine(newpar,upperbound);	//printf("%s\n",newpar.data());	newpar = "";	num_of_rows = par.count();	par.clear();	setAutoUpdate(true);	// setCursorPosition(templine,tempcol); Matthias: do the next line instead	setCursorPosition(cursorline, cursorcol); //Matthias#if QT_VERSION < 142	repaint();#else	if (!repaintTimer->isActive())	    repaintTimer->start(0,TRUE);#endif	computePosition();	setModified();	emit CursorPositionChanged();	return;    }  }  if(fill_column_is_set && word_wrap_is_set ){    // word break algorithm    if(isprint(e->ascii()) || e->key() == Key_Tab || e->key() == Key_Return ||       e->key() == Key_Enter){	if (e->key() == Key_Return || e->key() == Key_Enter){	  mynewLine();	}	else{	  if (e->key() == Key_Tab){	    if (isReadOnly())	      return;	    QMultiLineEdit::insertChar((char)'\t');	  }	  else{	    QMultiLineEdit::keyPressEvent(e);	  }	}	int templine,tempcol;	getCursorPosition(&templine,&tempcol);	//	printf("GETCURSOR %d %d\n",templine,tempcol);		computePosition();	//	printf("LINEPOS %d\n",col_pos);	setAutoUpdate(false);		bool did_break = format(par);	int num_of_rows = 0;	if(did_break){	  QString newpar;	  int cursorline = templine; //Matthias	  int cursorcol = 0; //Matthias	  bool cursor_found = false; //Matthias	  for( int k = 0; k < (int)par.count(); k++){	    QString tmp = par.at(k); //Matthias	    { //Matthias	      int f = tmp.find((char)1);	      if (f>-1){		cursor_found = true;		cursorcol = f;		tmp.remove(f,1);	      }	    }	    newpar += tmp; //Matthias	    if (!cursor_found) cursorline++; //Matthias	    if(k != (int)par.count() -1 )	      newpar += '\n';	  }	  insertLine(newpar,templine);	  //printf("%s\n",newpar.data());	  newpar = "";	  num_of_rows = par.count();	  par.clear();	  /*	    Matthias: no longer necessary	  if(col_pos +1 > fill_column_value){	    setCursorPosition(templine+1,cursor_offset);	    //	    printf("SETCURSOR1 %d %d\n",templine +1,cursor_offset);	  }	  else{	      setCursorPosition(templine,tempcol);	    //	    printf("SETCURSOR2 %d %d\n",templine ,tempcol);	  }	  */	  // do this instead:	  setCursorPosition(cursorline, cursorcol); //Matthias	}	setAutoUpdate(true);	// Let's try to reduce flicker by updating only what we need to update	// printf("NUMOFROWS %d\n",num_of_rows);	if(did_break){#if QT_VERSION < 142	  int y1  = -1;	  int y2  = -1;	  rowYPos(templine,&y1);	  rowYPos(templine + num_of_rows ,&y2);	  if(y1 == -1)	    y1 = 0;	  //if(y2 == -1)	    y2 = this->height();	  repaint(0,y1,this->width(),y2);#else	if (!repaintTimer->isActive())	    repaintTimer->start(0,TRUE);#endif	}	computePosition();	setModified();	emit CursorPositionChanged();	return;    }    QMultiLineEdit::keyPressEvent(e);    computePosition();    emit CursorPositionChanged();    return;  } // end do_wordbreak && fillcolumn_set  // fillcolumn but no wordbreak  if (fill_column_is_set){    if (e->key() == Key_Tab){      if (isReadOnly())	return;      QMultiLineEdit::insertChar((char)'\t');      emit CursorPositionChanged();      return;    }    if(e->key() == Key_Return || e->key() == Key_Enter){      mynewLine();      emit CursorPositionChanged();      return;    }    if(isprint(e->ascii())){      if( col_pos >= fill_column_value ){	  mynewLine();      }    }    QMultiLineEdit::keyPressEvent(e);    emit CursorPositionChanged();    return;  }  // default action  if(e->key() == Key_Return || e->key() == Key_Enter){    mynewLine();    emit CursorPositionChanged();    return;  }  if (e->key() == Key_Tab){    if (isReadOnly())      return;    QMultiLineEdit::insertChar((char)'\t');    emit CursorPositionChanged();    return;  }  QMultiLineEdit::keyPressEvent(e);  emit CursorPositionChanged();}bool KEdit::format(QStrList& par){  QString mstring;  QString pstring;  int space_pos;  int right; /* char to right of space */  int templine,tempcol;  getCursorPosition(&templine,&tempcol);  mstring = textLine(templine);  /*  if((int)mstring.length() <= fill_column_value)    return false;*/  int l = 0;  int k = 0;  for( k = 0, l = 0; k < (int) mstring.length() && l <= fill_column_value; k++){    if(mstring.data()[k] == '\t')      l +=8 - l%8;    else      l ++;  }  if( l <= fill_column_value)    return false;  // ########################## TODO consider a autoupdate(false) aroudn getpar #####  getpar(templine,par);  // ########################## TODO consider a autoupdate(false) aroudn getpar #####  /*    printf("\n");    for ( int i = 0 ; i < (int)par.count() ; i ++){       printf("%s\n",par.at(i));    }    printf("\n");    */  for ( int i = 0 ; i < (int)par.count() ; i ++){    //    printf("par.count %d line %d\n",par.count(),i);    k = 0;    l = 0;    int last_ok = 0;    pstring = par.at(i);    /*    if((int)pstring.length() <= fill_column_value)      break;*/    space_pos = -1; //Matthias    for( k = 0, l = 0; k < (int) pstring.length() /* && l <= fill_column_value */; k++){//Matthias: commented out      if(pstring.data()[k] == '\t')        l +=8 - l%8;      else	l ++;      if ((!space_pos||l<=fill_column_value) &&	  (pstring.data()[k]==' '||pstring.data()[k]=='\t')) //Matthias	space_pos = k;      if( l <= fill_column_value )	last_ok = k;    }    if( l <= fill_column_value)      break;    //mstring = pstring.left( k ); //Matthias no longer needed    //space_pos = mstring.findRev( " ", -1, TRUE );//Matthias no longer needed//     if(space_pos == -1) // well let try to find a TAB then ..//Matthias no longer needed//           space_pos = mstring.findRev( "\t", -1, TRUE );//Matthias no longer needed    right = col_pos - space_pos - 1;    if( space_pos == -1 ){      /* Matthias: commented it out. Was broken, unfortunately      // no space to be found on line, just break, what else could we do?      par.remove(i);      par.insert(i,pstring.left(last_ok+1));      if(i < (int)par.count() - 1){	QString temp1 = par.at(i+1);	QString temp2;	if(autoIndentMode){	  temp1 = temp1.mid(prefixString(temp1).length(),temp1.length());	}	temp2 = pstring.mid(last_ok +1,pstring.length()) + (QString) " " + temp1;	temp1 = temp2.copy();	if(autoIndentMode)	  temp1 = prefixString(pstring) + temp1;	par.remove(i+1);	par.insert(i+1,temp1);      }      else{	if(autoIndentMode)	  par.append(prefixString(pstring) + pstring.mid(last_ok + 1,pstring.length()));	else	  par.append(pstring.mid(last_ok +1,pstring.length()));      }      if(i==0){	cursor_offset = pstring.length() - last_ok -1;	if(autoIndentMode)	  cursor_offset += prefixString(pstring).length();	//printf("CURSOROFFSET1 %d\n",cursor_offset);      }      */    }    else{      par.remove(i);      par.insert(i,pstring.left(space_pos));      if(i < (int)par.count() - 1){	QString temp1 = par.at(i+1);	QString temp2;	if(autoIndentMode){	  temp1 = temp1.mid(prefixString(temp1).length(),temp1.length());	}	temp2 = pstring.mid(space_pos +1,pstring.length()) + (QString) " " + temp1;	temp1 = temp2.copy();	if(autoIndentMode)	  temp1 = prefixString(pstring) + temp1;	par.remove(i+1);	par.insert(i+1,temp1);      }      else{	if(autoIndentMode)	  par.append(prefixString(pstring) + pstring.mid(space_pos + 1,pstring.length()));	else	  par.append(pstring.mid(space_pos+1,pstring.length()));      }      if(i==0){	cursor_offset = pstring.length() - space_pos -1;	if(autoIndentMode)	  cursor_offset += prefixString(pstring).length();	//	printf("CURSOROFFSET2 %d\n",cursor_offset);      }    }  }  return true;}void KEdit::getpar(int line,QStrList& par){  int templine,tempcol; //Matthias  getCursorPosition(&templine,&tempcol);//Matthias  QString linestr;  par.clear();  int num = numLines();  for(int i = line ; i < num ; i++){    linestr = textLine(line);    if (i == templine){      // Matthias      // cursor is in this line. At least it was. Insert mark.      linestr.insert(tempcol, (char)1);    }    if(linestr.isEmpty())      break;    par.append(linestr);    removeLine(line);  }}bool KEdit::format2(QStrList& par, int& upperbound){  QString mstring;  QString pstring;  QString prefix;  int right, space_pos;  int i;  int fill_column = fill_column_value;  int templine,tempcol;  getCursorPosition(&templine,&tempcol);  // ########################## TODO consider a autoupdate(false) around getpar #####  getpar2(templine,par,upperbound,prefix);  // ########################## TODO consider a autoupdate(false) around getpar #####  int k = 0;  int l = 0;  int last_ok = 0;  for( k = 0, l = 0; k < (int) prefix.length(); k++){    if(prefix.data()[k] == '\t')      l +=8 - l%8;    else      l ++;  }  fill_column_value = fill_column_value - l;  // safety net --  if(fill_column_value < 10 )    fill_column_value = 10;  if(par.count() == 0 ){    fill_column_value = fill_column;    return false;  }  /*   printf("PASS 1\n");	   for ( int i = 0 ; i < (int)par.count() ; i ++){     printf("%s\n",par.at(i));   }   printf("\n");   */   // first pass: break overfull lines  for (i = 0 ; i < (int)par.count() ; i ++){    //    printf("par.count %d line %d\n",par.count(),i);    k = 0;    l = 0;    last_ok = 0;    pstring = par.at(i);    space_pos = -1; //Matthias    for( k = 0, l = 0; k < (int) pstring.length() /* && l <= fill_column_value */; k++){ //Matthias: commented out      if(pstring.data()[k] == '\t')        l +=8 - l%8;      else	l ++;      if ((!space_pos||l<=fill_column_value) &&	  (pstring.data()[k]==' '||pstring.data()[k]=='\t')) //Matthias	space_pos = k;      if( l <= fill_column_value )	last_ok = k;    }    if( l <= fill_column_value)      continue;//     mstring = pstring.left( k );//     space_pos = mstring.findRev( " ", -1, TRUE ); // Matthias: no longer needed//     if(space_pos == -1) // well let try to find a TAB then ..// Matthias: no longer needed//           space_pos = mstring.findRev( "\t", -1, TRUE );// Matthias: no longer needed    right = col_pos - space_pos - 1;    if( space_pos == -1 ){      /* Matthias: commented it out. Was broken, unfortunately      // no space to be found on line, just break, what else could we do?      par.remove(i);      par.insert(i,pstring.left(last_ok+1));      if(i < (int)par.count() - 1){	QString temp1 = par.at(i+1);	QString temp2;	if(autoIndentMode){	  temp1 = temp1.mid(prefixString(temp1).length(),temp1.length());	}	temp2 = pstring.mid(last_ok +1,pstring.length()) + (QString) " " + temp1;	temp1 = temp2.copy();	if(autoIndentMode)	  temp1 = prefixString(pstring) + temp1;	par.remove(i+1);	par.insert(i+1,temp1);      }      else{	if(autoIndentMode)	  par.append(prefixString(pstring) + pstring.mid(last_ok + 1,pstring.length()));	else	  par.append(pstring.mid(last_ok +1,pstring.length()));      }      if(i==0){	cursor_offset = pstring.length() - last_ok -1;	if(autoIndentMode)	  cursor_offset += prefixString(pstring).length();	//printf("CURSOROFFSET1 %d\n",cursor_offset);      }      */    }    else{      par.remove(i);      par.insert(i,pstring.left(space_pos));      if(i < (int)par.count() - 1){	QString temp1 = par.at(i+1);	QString temp2;	if(autoIndentMode){	  temp1 = temp1.mid(prefixString(temp1).length(),temp1.length());	}	temp2 = pstring.mid(space_pos +1,pstring.length()) + (QString) " " + temp1;	temp1 = temp2.copy();	if(autoIndentMode)	  temp1 = prefixString(pstring) + temp1;	par.remove(i+1);	par.insert(i+1,temp1);      }      else{	if(autoIndentMode)	  par.append(prefixString(pstring) + pstring.mid(space_pos + 1,pstring.length()));	else	  par.append(pstring.mid(space_pos+1,pstring.length()));      }      if(i==0){	cursor_offset = pstring.length() - space_pos -1;	if(autoIndentMode)	  cursor_offset += prefixString(pstring).length();	//	printf("CURSOROFFSET2 %d\n",cursor_offset);      }    }  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -