From 8bc88cb5db84219a5ad4d1c49239607113ec85fa Mon Sep 17 00:00:00 2001 From: Comment Date: Sun, 30 Dec 2012 10:45:58 +0000 Subject: nearly working --- fensterTextEditor.layout | 4 +- src/testApp.cpp | 260 +++++++++++++++++++++++++++++------------------ src/testApp.h | 18 ++-- 3 files changed, 173 insertions(+), 109 deletions(-) diff --git a/fensterTextEditor.layout b/fensterTextEditor.layout index 648eb3c..735e727 100644 --- a/fensterTextEditor.layout +++ b/fensterTextEditor.layout @@ -2,9 +2,9 @@ - + - + diff --git a/src/testApp.cpp b/src/testApp.cpp index 0cffe26..df59d6e 100755 --- a/src/testApp.cpp +++ b/src/testApp.cpp @@ -18,6 +18,8 @@ method to retreive text as a single string with \n's set box size - draw scrollbar & set scrollpoint - drag to scroll +load & save + architecture :- text editor in a box or a window? insertion point/ selection - set with mouse - @@ -39,7 +41,9 @@ void editorWindow::setup(){ win->setWindowTitle("editor"); win->addListener(this); selected=false; + changed=false; text.push_back(string("")); + output=""; } void editorWindow::draw(){ ofDisableAlphaBlending(); @@ -47,17 +51,6 @@ void editorWindow::draw(){ for (int i=0;iselectionEnd.row) { - } ofDisableAlphaBlending(); } else { @@ -84,98 +75,105 @@ void editorWindow::draw(){ } } -/* - #define OF_KEY_LEFT (100 | OF_KEY_MODIFIER) - #define OF_KEY_UP (101 | OF_KEY_MODIFIER) - #define OF_KEY_RIGHT (102 | OF_KEY_MODIFIER) - #define OF_KEY_DOWN (103 | OF_KEY_MODIFIER) - #define OF_KEY_PAGE_UP (104 | OF_KEY_MODIFIER) - #define OF_KEY_PAGE_DOWN (105 | OF_KEY_MODIFIER) - #define OF_KEY_HOME (106 | OF_KEY_MODIFIER) - #define OF_KEY_END (107 | OF_KEY_MODIFIER) - #define OF_KEY_INSERT -*/ void editorWindow::keyPressed(int key){ - //printf("%i\n",key); + printf("%i\n",key); + changed=true; vector::iterator i; string t; int l; - switch (key) { - case OF_KEY_DEL: - if (insertionPoint.column0) { - insertionPoint.row--; - insertionPoint.column=text[insertionPoint.row].size(); - } - else insertionPoint.column=0; - } - break; - case 269: //OF_KEY_UP in fenster - if (insertionPoint.row>0) { - insertionPoint.row--; - insertionPoint.column=min(insertionPoint.column,(int)text[insertionPoint.row].size()); - } - break; - case 268: //OF_KEY_RIGHT in fenster - insertionPoint.column++; - if (insertionPoint.column>text[insertionPoint.row].size()) { - if (text.size()>insertionPoint.column) { - insertionPoint.row++; - insertionPoint.column=min(insertionPoint.column,(int)text[insertionPoint.row].size()); - } - else insertionPoint.column--; - } - break; - case 270: //OF_KEY_DOWN in fenster - if (insertionPoint.row0) insertionPoint.column--; + else if (insertionPoint.row>0) { + insertionPoint.row--; + insertionPoint.column=text[insertionPoint.row].size(); + } + break; + case OF_KEY_UP: + if (insertionPoint.row>0) { + insertionPoint.row--; + insertionPoint.column=min(insertionPoint.column,(int)text[insertionPoint.row].size()); + } + break; + case OF_KEY_RIGHT: + if (insertionPoint.columninsertionPoint.column) { + insertionPoint.row++; + insertionPoint.column=min(insertionPoint.column,(int)text[insertionPoint.row].size()); + } + } + break; + case OF_KEY_DOWN: + if (insertionPoint.row(ofxFensterManager::get()->getClipboard()))); + break; + default: + if (key>-1 && key<256) { + deleteSelection(); + text[insertionPoint.row].insert(insertionPoint.column,1,(char)key); + insertionPoint.column++; + } } } void editorWindow::keyReleased(int key){ //key repeat? } void editorWindow::mousePressed(int x, int y, int button){ - selected=false; + selected=false; clickX=x; clickY=y; } @@ -185,16 +183,76 @@ void editorWindow::mouseReleased(int x, int y, int button){ } } void editorWindow::mouseDragged(int x, int y, int button){ - selected=true; - selectionStart=clickPos(clickX,clickY); - selectionEnd=clickPos(x,y); + texPt c1=clickPos(clickX,clickY); + texPt c2=clickPos(x,y); + if ((c1.row==c2.row&&c2.column>c1.column)||c2.row>c1.row) { + selectionStart=c1; + selectionEnd=c2; + } + else { + selectionStart=c2; + selectionEnd=c1; + } + if (selectionStart.row!=selectionEnd.row||selectionStart.column!=selectionEnd.column) selected=true; } texPt editorWindow::clickPos(int x,int y) { texPt t; - t.row=min((int)text.size()-1,(y-5)/12); - t.column=min((int)text[insertionPoint.row].size(),(x-10)/8); + t.row=max(0,min((int)text.size()-1,(y-5)/12)); + t.column=max(0,min((int)text[t.row].size(),(x-10)/8)); return t; } +void editorWindow::insertText(string text){ + string line; + int l=0; + //while(std::getline(text, line)) { + //if (line==0) + //} +} +void editorWindow::setClipboard(string text){ + char * cstr = new char [text.size()+1]; + strcpy (cstr, text.c_str()); + ofxFensterManager::get()->setClipboard(cstr); + delete[] cstr; +} +string editorWindow::getSelection(){ + string t=text[selectionStart.row].substr(selectionStart.column); + if (selectionStart.row==selectionEnd.row) { + t.erase(selectionEnd.column-selectionStart.column); + } + else { + for (int i=selectionStart.row+1;iselectionStart.row) { + vector::iterator i=text.begin()+selectionStart.row+1; + vector::iterator j=text.begin()+selectionEnd.row+1; + text.erase(i,j); + } + insertionPoint=selectionStart; + selected=false; + } +} +string editorWindow::getText(){ + if (changed) { + output ==""; + for (int i=0;i text; + texPt clickPos(int x,int y); + void setClipboard(string text); + string getSelection(); + void insertText(string text); + void deleteSelection(); + vector text; texPt insertionPoint; texPt selectionStart; - texPt selectionEnd; - bool selected; + texPt selectionEnd; + bool selected,changed; + string output; int clickX,clickY; }; -- cgit v1.2.3