49 Commits
1.2.0 ... 1.2.3

Author SHA1 Message Date
6e3df7ef74 Update version tag: 1.2.3 2014-10-17 09:15:18 +02:00
fbf774174f Merge branch 'dev' 2014-10-17 09:10:19 +02:00
3c79dec2c8 [INTEGRATION] add color in travis build 2014-10-17 09:02:57 +02:00
7f7b3283e3 [DEV] add update of clang to set it work with timer 2014-10-17 09:00:46 +02:00
7c37d8e549 [DEV] add sub parsing of pass1 2014-10-13 22:39:49 +02:00
a201439665 [DEV] Update the parsing of many languages (pyton, cmake) is now good 2014-10-09 21:23:19 +02:00
67a08dd775 [DEBUG] correction of end of file regexp change 2014-10-08 21:32:41 +02:00
7952872980 [DEV] better regex ==> need to update alge to recognise data 2014-10-07 21:42:07 +02:00
78887e64ed [DEV] correction of the regex and add some basic test example 2014-10-07 00:45:01 +02:00
d93844d6da [DEV] first std::regex really work in c++ 2014-10-06 23:22:14 +02:00
243d7e7494 [DEV] change in etk::RegExp in std::regex 2014-10-05 23:46:57 +02:00
154351e629 [ERROR] Abandonned version in std::u32string ==> unexistant regexp 2014-10-03 21:44:13 +02:00
febbaffdf4 [DEV] {remove etk regexp dependency} big rework in progress to simplify code and use real std::regex templates 2014-10-03 00:49:26 +02:00
b890f931ca [DEV] remove problematic function parsing 2014-10-02 22:40:40 +02:00
2c3a64933d [DEV] transform plugin manager in unique resource 2014-09-18 22:27:54 +02:00
b8962cc3b9 [DEV] set travis depend on dev branch of ewol 2014-09-18 21:32:25 +02:00
f9ff0b8899 [DEBUG] remove lutinBase.py that is deprecated 2014-09-18 21:07:32 +02:00
f971c4fdfe [DEBUG]travis file error 2014-09-18 21:05:48 +02:00
6076698201 Create .travis.yml 2014-09-18 21:01:41 +02:00
c12ed9e7fa [DEBUG #9] freez correction ==> plugin data missing iterator 2014-09-18 21:01:41 +02:00
e29aa94cc5 [DEBUG #8] CLose the file after saving it when request close 2014-09-15 07:27:51 +02:00
05ac6a9210 [DEBUG #2 #7] close file and save it whan needed 2014-09-15 07:21:22 +02:00
0a054c209f [DEV] add parenting between bufferManager and Buffer 2014-09-12 22:10:32 +02:00
996fd58370 [DEBUG #1] Save file done 2014-09-12 21:52:03 +02:00
3574fd917c [DEBUG #5] correct file selection 2014-09-12 21:36:20 +02:00
b889b4aa5a [DEV] update plugin 2014-08-29 22:52:21 +02:00
668570cdc7 [DEV] start correct plugin interface 2014-08-28 22:31:00 +02:00
7e6f56a1cd [DEV] this plugin to the new ewol interface 2014-08-27 22:58:21 +02:00
a371c09e22 [DEV] update new signal system ==> run but not have many capabilities 2014-08-25 22:44:42 +02:00
cd3c5ff2d4 [DEV] update new object interface & rework global message (start) 2014-08-25 05:55:06 +02:00
686ec6d8bd [DEV] remove caller in signal emit 2014-08-22 05:21:10 +02:00
d31137e1a3 [DEBUG] gcc compilation warning 2014-08-21 21:00:13 +02:00
03fa46bbcd [DEV] rework signal interface (step 1 normalisation) 2014-08-20 22:34:31 +02:00
7da1beb12d [CLEAN] remove unneeded code 2014-08-19 21:47:33 +02:00
8c3c3daf5c Merge branch 'dev'
Conflicts:
	sources/tag
2014-08-18 22:57:06 +02:00
ddd21072b5 [DEV] plop 2014-08-17 23:30:37 +02:00
bf7899e045 [DEV] remove function onObjectRemove 2014-08-15 23:28:04 +02:00
3f0febce28 [DEV] change default Instance 2014-08-13 22:30:47 +02:00
5a924f7c9d [DEV] remove cyclic dependence on shared_ptr 2014-08-08 23:25:43 +02:00
39801fd265 [DEV] start dev with generic std::shared_ptr ==> basic work 2014-08-07 23:41:48 +02:00
ebdfd8be4c [DEV] update regexp of the languages 2014-08-01 23:44:34 +02:00
1d60917575 [DEBUG] correct C regExp 2014-07-30 23:24:26 +02:00
86d54590c0 [DEV] update new regexp system (not work correctly and only for C++) 2014-07-29 15:36:12 +02:00
b9a1c026fa [DEV] remove etk_min and etk_max & etk::Color<> interface 2014-07-03 21:03:26 +02:00
4942765ccf [DEV] add file chooser in shared mode 2014-06-30 22:36:36 +02:00
a425bdc17b [DEV] change manager interface in application 2014-06-30 22:36:36 +02:00
7d7d66d121 [DEV] change NULL ==> nullptr 2014-06-30 22:36:36 +02:00
55e05d24a3 [DEV] update new interface EWOL ewol::constext::Application 2014-06-30 22:36:36 +02:00
173e57342d [TAG] create 1.2-dev tag 2014-06-30 22:36:36 +02:00
98 changed files with 3130 additions and 2791 deletions

41
.travis.yml Normal file
View File

@@ -0,0 +1,41 @@
# language type:
language: cpp
# compilator system:
compiler:
- clang
- gcc
# build branch requested
branches:
only:
- master
- dev
# previous actions:
before_script:
- git clone https://github.com/HeeroYui/ewol.git
- cd ewol; git checkout origin/dev -b dev; cd ..
- cd ewol; git submodule init; cd ..
- cd ewol; git submodule update; cd ..
install:
- if [ "$CXX" == "g++" ]; then sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y; fi
- if [ "$CXX" == "g++" ]; then sudo apt-get update -qq; fi
- if [ "$CXX" == "g++" ]; then sudo apt-get install -qq g++-4.8; fi
- if [ "$CXX" == "g++" ]; then sudo rm /usr/bin/gcc /usr/bin/g++; fi
- if [ "$CXX" == "g++" ]; then sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc; fi
- if [ "$CXX" == "g++" ]; then sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++; fi
- if [ "$CXX" == "clang++" ]; then wget http://llvm.org/releases/3.4.1/clang+llvm-3.4.1-x86_64-unknown-ubuntu12.04.tar.xz; fi
- if [ "$CXX" == "clang++" ]; then tar xJf clang+llvm-3.4.1-x86_64-unknown-ubuntu12.04.tar.xz; fi
- if [ "$CXX" == "clang++" ]; then export PATH=$PWD/clang+llvm-3.4.1-x86_64-unknown-ubuntu12.04/bin:$PATH; fi
# build sequence with Lutin :
script:
- if [ "$CXX" == "clang++" ]; then ./ewol/build/lutin.py -C -cclang -mdebug -p edn; fi
- if [ "$CXX" == "g++" ]; then ./ewol/build/lutin.py -C -cgcc -mdebug -p edn; fi
#send e-mail on compilation result:
notifications:
email:
- yui.heero@gmail.com

View File

@@ -1,14 +1,27 @@
[Desktop Entry] [Desktop Entry]
Version=0.3.0
Name=Edn : Editeur de N'ours Name=Edn : Editeur de N'ours
Exec=edn Exec=edn %U
Icon=Edn Icon=/usr/share/edn/icon.png
Terminal=false Terminal=false
Type=Application Type=Application
Categories=Development;Utility;TextEditor; Categories=Development;
GenericName=Text editor GenericName=Text editor
GenericName[en]=Text editor GenericName[en]=Text editor
GenericName[nl]=Tekst verwerker GenericName[nl]=Tekst verwerker
GenericName[fr]=éditeur de text GenericName[fr]=Éditeur de text
Comment=Code editor for c, c++, php, bash, xml ... Comment=Code editor for c, c++, php, bash, xml ...
Comment[fr]=éditeur de text pour les language c, c++, php, bash, xml ... Comment[fr]=éditeur de text pour les language c, c++, php, bash, xml ...
OnlyShowIn=GNOME;Unity;
MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https;
StartupNotify=true
Actions=New;
[Desktop Action New]
Name=Open a New Window
Name[fr]=Ouvrir une nouvelle fenêtre
Name[nl]=Nieuw venster openen
Name[en]=Open a New Window
Exec=edn
#desktop-file-validate edn.desktop
#sudo cp xxx /usr/share/applications/

View File

@@ -1,57 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Assembleur"> <EdnLang version="0.1" lang="Assembleur">
<ext>*.s</ext> <ext>.*\.(s|S|asm)</ext>
<ext>*.S</ext>
<ext>*.asm</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="my comment multiline doxygen"> <rule name="my comment multiline doxygen">
<color>commentDoxygen</color> <color>commentDoxygen</color>
<start>/\*\*</start> <regex>/\*\*.*?\*/</regex>
<end>\*/</end>
</rule> </rule>
<rule name="my comment multiline"> <rule name="my comment multiline">
<color>comment</color> <color>comment</color>
<start>/\*</start> <regex>/\*.*?\*/</regex>
<end>\*/</end>
</rule> </rule>
<rule name="my if 0"> <rule name="my if 0">
<color>preprocesseur</color> <color>preprocesseur</color>
<start>#[ \t]*if 0</start> <regex>#[ \t]*if 0.*?#(regexif|else)</regex>
<end>#endif|#else</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="my preprocesseur"> <rule name="my preprocesseur">
<color>preprocesseur</color> <color>preprocesseur</color>
<start>#</start> <regex>#.*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="my comment doxygen"> <rule name="my comment doxygen">
<color>commentDoxygen</color> <color>commentDoxygen</color>
<start>//!</start> <regex>//!.*?$</regex>
<end>\n</end>
</rule> </rule>
<rule name="my todo comment"> <rule name="my todo comment">
<color>SYNTAX_ERROR</color> <color>SYNTAX_ERROR</color>
<start>//[ \t]*TODO[ \t]*:</start> <regex>//[ \t]*TODO[ \t]*:.*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="my comment"> <rule name="my comment">
<color>comment</color> <color>comment</color>
<start>(//|@)</start> <regex>//.*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>\@smull|ldrsh|smlal|stmdb|mul|mla|umull|ldr|add|str|mov|subs|bgt|ldmia|stmia|ldmfd|cmp|sub|strd|stmfd|bne|bhi|ldrd|mvn\@</start> <regex>\b(smull|ldrsh|smlal|stmdb|mul|mla|umull|ldr|add|str|mov|subs|bgt|ldmia|stmia|ldmfd|cmp|sub|strd|stmfd|bne|bhi|ldrd|mvn)\b</regex>
</rule> </rule>
<rule name="register list"> <rule name="register list">
<color>type</color> <color>type</color>
<start>\@r(10|11|12|[0-9]?)|sp|lp|lr|pc\@</start> <regex>\b(r(10|11|12|[0-9]?)|sp|lp|lr|pc)\b</regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

@@ -1,48 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Bash script"> <EdnLang version="0.1" lang="Bash script">
<ext>*.sh</ext> <ext>.*\.sh</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="first line"> <rule name="first line">
<color>commentDoxygen</color> <color>commentDoxygen</color>
<start>#!</start> <regex>#!(.|\\[\\\n])*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="comment line"> <rule name="comment line">
<color>comment</color> <color>comment</color>
<start>#</start> <regex>#(.|\\[\\\n])*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="simpleQuteText"> <rule name="simpleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>'</start> <regex>&apos;(.|\\[\\&apos;])*?&apos;</regex>
<end>'</end>
<!--<EscapeChar>\</EscapeChar>-->
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>\@for|done|do|while|in|if|elif|then|else|fi\@</start> <regex>\b(for|done|do|while|in|if|elif|then|else|fi)\b</regex>
</rule> </rule>
<rule name="my Variable"> <rule name="my Variable">
<color>keyword</color> <color>keyword</color>
<start>[\$]+[a-zA-Z_][a-zA-Z0-9_]*</start> <regex>[\$]+[a-zA-Z_][a-zA-Z0-9_]*</regex>
</rule> </rule>
<rule name="Function name"> <rule name="Function name">
<color>functionName</color> <color>functionName</color>
<start>function (\w|_)+[ \t]*\(</start> <regex>function (\w|_)+[ \t]*\(</regex>
</rule> </rule>
<rule name="condition"> <rule name="condition">
<color>boolean</color> <color>boolean</color>
<start>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}|</start> <regex>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}</regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

@@ -1,60 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Boulou log"> <EdnLang version="0.1" lang="Boulou log">
<ext>*.boo</ext> <ext>.*\.boo</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="comment ##"> <rule name="comment ##">
<color>SYNTAX_ERROR</color> <color>SYNTAX_ERROR</color>
<start>##</start> <regex>##.*?$</regex>
<end>\n</end>
</rule> </rule>
<rule name="comment #"> <rule name="comment #">
<color>comment</color> <color>comment</color>
<start>#</start> <regex>#.*?$</regex>
<end>\n</end>
</rule> </rule>
<rule name="notes ... "> <rule name="notes ... ">
<color>preprocesseur</color> <color>preprocesseur</color>
<start>(NOTE|TODO) : </start> <regex>(NOTE|TODO) : .*?$</regex>
<end>\n</end>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>&quot;(.|\\[\\&quot;])*?$</regex>
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="simpleQuteText"> <rule name="simpleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>\@'</start> <regex>\b&apos;(.|\\[\\&apos;])*?$</regex>
<end>'</end>
<!--<EscapeChar>\</EscapeChar>-->
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="pourcentage OK"> <rule name="pourcentage OK">
<color>TestResultOK</color> <color>TestResultOK</color>
<start>100%</start> <regex>100%</regex>
</rule> </rule>
<rule name="pourcentage"> <rule name="pourcentage">
<color>number</color> <color>number</color>
<start>[0-9]*%</start> <regex>[0-9]*%</regex>
</rule> </rule>
<rule name="R<EFBFBD>sultat OK"> <rule name="Résultat OK">
<color>TestResultOK</color> <color>TestResultOK</color>
<start>\[( )*(OK|Ok|ok)( )*\]</start> <regex>\[( )*(OK|Ok|ok)( )*\]</regex>
</rule> </rule>
<rule name="resultat en erreur"> <rule name="resultat en erreur">
<color>TestResultERROR</color> <color>TestResultERROR</color>
<start>\[(ERREUR|Erreur|erreur)\]</start> <regex>\[(ERREUR|Erreur|erreur)\]</regex>
</rule> </rule>
<rule name="resultat vide"> <rule name="resultat vide">
<color>number</color> <color>number</color>
<start>\[( )*\]</start> <regex>\[( )*\]</regex>
</rule> </rule>
<rule name="notes ... "> <rule name="notes ... ">
<color>macro</color> <color>macro</color>
<start>==&gt;</start> <regex>==&gt;</regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

@@ -1,138 +1,132 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="C/C++"> <EdnLang version="0.1" lang="C/C++">
<ext>*.c</ext> <ext>.*\.(c|cpp|cxx|cc|h|hpp|hxx|m|mm)</ext>
<ext>*.cpp</ext>
<ext>*.cc</ext>
<ext>*.h</ext>
<ext>*.hpp</ext>
<ext>*.mm</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="my comment multiline doxygen"> <rule name="doxygen multiline">
<color>commentDoxygen</color> <color>commentDoxygen</color>
<start>/\*\*</start> <regex>/\*(\*|!)(.|\r|\n)*?\*/</regex>
<end>\*/</end> <sub>doxyparse</sub>
<rule name="macro">
<color>macro</color>
<start>\@[A-Z_]{4,500}\@</start>
</rule> </rule>
<rule name="keyword"> <rule name="comment multiline">
<color>keyword</color>
<start>@\w*[ \t]*(\[(in|out| |,)*\])?[ \t]*([a-zA-Z0-9\-_]*)</start>
<underColor idPThese="1"></underColor><!-- (\[(in|out| |,)*\]) -->
<underColor idPThese="3"></underColor><!-- (([a-zA-Z0-9\-_])*) -->
</rule>
</rule>
<rule name="code Review">
<color>SYNTAX_ERROR</color>
<start>/\*[ \t]*TODO :</start>
<end>\*/</end>
</rule>
<rule name="my comment multiline">
<color>comment</color> <color>comment</color>
<start>/\*</start> <regex>/\*(.|\r|\n)*?(\*/|\0)</regex>
<end>\*/</end> <sub>TODO</sub>
</rule> </rule>
<rule name="my if 0"> <rule name="comment miltiline ERROR">
<color>SYNTAX_ERROR</color>
<regex>/\*(.|\r|\n)*</regex>
</rule>
<rule name="#if 0">
<color>preprocesseur</color> <color>preprocesseur</color>
<start>#[ \t]*if 0</start> <regex>#[ \t]*if 0(.|\r|\n)*?#(endif|else)</regex>
<end>#endif|#else</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="my preprocesseur"> <rule name="#if 0 ERROR">
<color>SYNTAX_ERROR</color>
<regex>#[ \t]*if 0(.|\r|\n)*</regex>
</rule>
<rule name="#preproc">
<color>preprocesseur</color> <color>preprocesseur</color>
<start>#</start> <regex>#(.|\\[\\\n])*</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="my comment doxygen"> <rule name="inline doxygen">
<color>commentDoxygen</color> <color>commentDoxygen</color>
<start>//!</start> <regex>//!.*</regex>
<end>\n</end> <sub>doxyparse</sub>
</rule> </rule>
<rule name="my todo comment"> <rule name="inline comment">
<color>SYNTAX_ERROR</color>
<start>//[ \t]*TODO[ \t]*:</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule>
<rule name="my comment">
<color>comment</color> <color>comment</color>
<start>//</start> <regex>//.*</regex>
<end>\n</end> <sub>TODO</sub>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="double quote text">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>"(.|\\[\\"])*?"</regex> <!-- " -->
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="simpleQuteText"> <rule name="simple quote text">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>'</start> <regex>'\\?.'</regex>
<end>'</end>
<!--<EscapeChar>\</EscapeChar>-->
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>\@return|goto|if|else|case|default|switch|break|continue|while|do|for|sizeof\@</start> <regex>\b(return|goto|if|else|case|default|switch|break|continue|while|do|for|sizeof)\b</regex>
</rule> </rule>
<rule name="my function keyword"> <rule name="my function keyword">
<color>systemFunction</color> <color>systemFunction</color>
<start>\@new|delete|try|catch|memset|fopen|fread|fwrite|fgets|fclose|printf|(f|s|diag_)printf|calloc|malloc|realloc|(cyg|sup)_([a-z]|[A-Z]|[0-9]|_)+\@</start> <regex>\b(new|delete|try|catch|memset|fopen|fread|fwrite|fgets|fclose|printf|(f|s|diag_)printf|calloc|malloc|realloc|(cyg|sup)_([a-z]|[A-Z]|[0-9]|_)+)\b</regex>
</rule> </rule>
<rule name="my type"> <rule name="my type">
<color>type</color> <color>type</color>
<start>\@bool|BOOL|char(16_t|32_t)?|double|float|u?int(8|16|32|64|128)?(_t)?|long|short|signed|size_t|unsigned|void|(I|U)(8|16|32|64|128)\@</start> <regex>\b(bool|BOOL|char(16_t|32_t)?|double|float|u?int(8|16|32|64|128)?(_t)?|long|short|signed|size_t|unsigned|void|(I|U)(8|16|32|64|128))\b</regex>
</rule> </rule>
<rule name="std type"> <rule name="std type">
<color>type</color> <color>type</color>
<start>\@std::(vector|(u16|u32|w)?string|codecvt_utf(16|8_utf16|8)+|complex|iterator(_traits)?|tuple(_element|_size)?|pair)\@</start> <regex>\bstd::[\w:]*\b</regex>
</rule> </rule>
<rule name="my storage keyword"> <rule name="my storage keyword">
<color>storageKeyword</color> <color>storageKeyword</color>
<start>\@inline|const|class|virtual|private|public|protected|friend|const|extern|auto|register|static|unsigned|signed|volatile|char|double|float|int|long|short|void|typedef|struct|union|enum\@</start> <regex>\b(inline|const|class|namespace|virtual|private|public|protected|friend|const|extern|auto|register|static|unsigned|signed|volatile|char|double|float|int|long|short|void|typedef|struct|union|enum)\b</regex>
</rule> </rule>
<rule name="my common Define"> <rule name="my common Define">
<color>commonDefine</color> <color>commonDefine</color>
<start>\@NULL|MAX|MIN|__LINE__|__DATA__|__FILE__|__func__|__TIME__|__STDC__\@</start> <regex>\b(NULL|MAX|MIN|__LINE__|__DATA__|__FILE__|__func__|__TIME__|__STDC__)\b</regex>
</rule> </rule>
<rule name="numeric constant"> <rule name="numeric constant">
<color>number</color> <color>number</color>
<start>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</start> <regex>\b(((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?)\b</regex>
</rule> </rule>
<rule name="my boolean"> <rule name="my boolean">
<color>boolean</color> <color>boolean</color>
<start>\@true|TRUE|false|FALSE\@</start> <regex>\b(true|TRUE|false|FALSE)\b</regex>
</rule> </rule>
<rule name="BIG LETTER"> <rule name="BIG LETTER">
<color>macro</color> <color>macro</color>
<start>\@[A-Z_][A-Z_0-9]{3,500}\@</start> <regex>\b([A-Z_][A-Z_0-9]{3,500})\b</regex>
</rule> </rule>
<rule name="CPP member"> <rule name="CPP member">
<color>memberClass</color> <color>memberClass</color>
<start>\@m_[A-Za-z_0-9]*\@</start> <regex>\bm_\w+\b</regex>
</rule> </rule>
<rule name="function input"> <rule name="function input">
<color>inputFunction</color> <color>inputFunction</color>
<start>\@_[A-Za-z_0-9]*\@</start> <regex>\b_\w+\b</regex>
</rule> </rule>
<rule name="Function name"> <rule name="Function name">
<color>functionName</color> <color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start> <regex>\b((\w|_)+[ \t]*\()</regex>
</rule> </rule>
<rule name="condition"> <rule name="condition">
<color>boolean</color> <color>boolean</color>
<start>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}|</start> <regex>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}</regex>
</rule> </rule>
<!-- With all elementes :
<rule name="BIG LETTER"> <rule name="BIG LETTER">
<color>macro</color> <color>macro</color>
<start>([A-Z]|_){4,500}</start> <regex>([A-Z]|_){4,500}</regex>
<elemSubColor id="1">doxElem</elemSubColor> </rule>
<rule name="simpleQuteTextError">
<color>SYNTAX_ERROR</color>
<regex>&apos;|&quot;</regex>
</rule> </rule>
-->
</pass2> </pass2>
<pass name="doxyparse">
<rule name="key">
<color>doxygen-key</color>
<regex>(@|\\)[\t ]*\w+</regex>
</rule>
<rule name="in-out">
<color>doxygen-in-out</color>
<regex>\[(in|in,out|out)\]</regex>
</rule>
<rule name="function input">
<color>inputFunction</color>
<regex>\b_\w+\b</regex>
</rule>
</pass>
<pass name="TODO">
<rule name="function input">
<color>SYNTAX_ERROR</color>
<regex>TODO[ \t]*:.*</regex>
</rule>
</pass>
</EdnLang> </EdnLang>

View File

@@ -1,58 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="C/C++"> <EdnLang version="0.1" lang="cmake">
<ext>CMakeLists.txt</ext> <ext>CMakeLists.txt</ext>
<ext>CMakeCache.txt</ext> <ext>CMakeCache.txt</ext>
<pass1> <pass1>
<rule name="my comment doxygen"> <rule name="my comment doxygen">
<color>commentDoxygen</color> <color>commentDoxygen</color>
<start>##</start> <regex>##.*</regex>
<end>\n</end>
</rule> </rule>
<rule name="my todo comment"> <rule name="my todo comment">
<color>SYNTAX_ERROR</color> <color>SYNTAX_ERROR</color>
<start>#[ \t]TODO[ \t]*:</start> <regex>#[ \t]TODO[ \t]*:(.|\\[\\\n])*</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="my comment"> <rule name="my comment">
<color>comment</color> <color>comment</color>
<start>#</start> <regex>#(.|\\[\\\n])*</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>\@foreach|message|endforeach|if|else|endif|list|file|string\@</start> <regex>\b(foreach|message|endforeach|if|else|endif|list|file|string)\b</regex>
</rule> </rule>
<rule name="my function keyword"> <rule name="my function keyword">
<color>systemFunction</color> <color>systemFunction</color>
<start>\@set|include_directories|add_definitions|add_library|include_directories|target_link_libraries|project|include|check_include_file|enable_testing|option|cmake_minimum_required|add_definitions|check_include_file|configure_file|include_directories|add_custom_command|add_executable|add_test\@</start> <regex>\b(set|include_directories|add_definitions|add_library|include_directories|target_link_libraries|project|include|check_include_file|enable_testing|option|cmake_minimum_required|add_definitions|check_include_file|configure_file|include_directories|add_custom_command|add_executable|add_test|find_package|pkg_check_modules|set_target_properties|source_group)\b</regex>
</rule> </rule>
<rule name="Variable"> <rule name="Variable">
<color>inputFunction</color> <color>inputFunction</color>
<start>${</start> <regex>\$\{.*\}</regex>
<end>}</end>
</rule> </rule>
<rule name="numeric constant"> <rule name="numeric constant">
<color>number</color> <color>number</color>
<start>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</start> <regex>\b(((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?)\b</regex>
</rule> </rule>
<rule name="BIG LETTER"> <rule name="BIG LETTER">
<color>macro</color> <color>macro</color>
<start>\@[A-Z_][A-Z_0-9]{3,500}\@</start> <regex>\b([A-Z_][A-Z_0-9]{3,500})\b</regex>
</rule> </rule>
<rule name="Function name"> <rule name="Function name">
<color>functionName</color> <color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start> <regex>\b(\w|_)+[ \t]*\(</regex>
</rule>
<rule name="files path">
<color>memberClass</color>
<regex>[\w-]*(\.|/)\w*</regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

@@ -1,82 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Glsl"> <EdnLang version="0.1" lang="Glsl">
<ext>*.glsl</ext> <ext>.*\.(glsl|vert|frag|prog)</ext>
<ext>*.vert</ext>
<ext>*.frag</ext>
<ext>*.prog</ext>
<pass1> <pass1>
<rule name="my comment multiline doxygen"> <rule name="my comment multiline doxygen">
<color>commentDoxygen</color> <color>commentDoxygen</color>
<start>/\*\*</start> <regex>/\*\*.*\*/</regex>
<end>\*/</end>
</rule> </rule>
<rule name="my comment multiline"> <rule name="my comment multiline">
<color>comment</color> <color>comment</color>
<start>/\*</start> <regex>/\*.*\*/</regex>
<end>\*/</end>
</rule> </rule>
<rule name="my if 0"> <rule name="my if 0">
<color>preprocesseur</color> <color>preprocesseur</color>
<start>#[ \t]*if 0</start> <regex>#[ \t]*if 0(.|\\[\\\n])*#(endif|else)</regex>
<end>#endif|#else</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="my preprocesseur"> <rule name="my preprocesseur">
<color>preprocesseur</color> <color>preprocesseur</color>
<start>#</start> <regex>#(.|\\[\\\n])*$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="my comment doxygen"> <rule name="my comment doxygen">
<color>commentDoxygen</color> <color>commentDoxygen</color>
<start>//!</start> <regex>//!(.|\\[\\\n])*$</regex>
<end>\n</end>
</rule> </rule>
<rule name="my todo comment"> <rule name="my todo comment">
<color>SYNTAX_ERROR</color> <color>SYNTAX_ERROR</color>
<start>//[ \t]*TODO[ \t]*:</start> <regex>//[ \t]*TODO[ \t]*:(.|\\[\\\n])*$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="my comment"> <rule name="my comment">
<color>comment</color> <color>comment</color>
<start>//</start> <regex>//(.|\\[\\\n])*$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>\@return|goto|if|else|case|default|switch|break|continue|while|do|for|sizeof\@</start> <regex>\b(return|goto|if|else|case|default|switch|break|continue|while|do|for|sizeof)\b</regex>
</rule> </rule>
<rule name="my type"> <rule name="my type">
<color>type</color> <color>type</color>
<start>\@void|bool|float|int|(vec|mat|ivect|bvect)[2-4]\@</start> <regex>\b(void|bool|float|int|(vec|mat|ivect|bvect)[2-4])\b</regex>
</rule> </rule>
<rule name="my storage keyword"> <rule name="my storage keyword">
<color>storageKeyword</color> <color>storageKeyword</color>
<start>\@varying|uniform|attribute|precision|mediump\@</start> <regex>\b(varying|uniform|attribute|precision|mediump)\b</regex>
</rule> </rule>
<rule name="numeric constant"> <rule name="numeric constant">
<color>number</color> <color>number</color>
<start>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</start> <regex>\b(((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?)\b</regex>
</rule> </rule>
<rule name="my boolean"> <rule name="my boolean">
<color>boolean</color> <color>boolean</color>
<start>\@true|false\@</start> <regex>\b(true|false)\b</regex>
</rule> </rule>
<rule name="BIG LETTER"> <rule name="BIG LETTER">
<color>macro</color> <color>macro</color>
<start>\@[A-Z_][A-Z_0-9]{3,500}\@</start> <regex>\b([A-Z_][A-Z_0-9]{3,500})\b</regex>
</rule> </rule>
<rule name="Function name"> <rule name="Function name">
<color>functionName</color> <color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start> <regex>\b(\w|_)+[ \t]*\(</regex>
</rule> </rule>
<rule name="condition"> <rule name="condition">
<color>boolean</color> <color>boolean</color>
<start>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}|</start> <regex>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}</regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

@@ -1,46 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Kernel conf file"> <EdnLang version="0.1" lang="Kernel conf file">
<ext>*.in</ext> <ext>.*\.in</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="my preprocesseur"> <rule name="my preprocesseur">
<color>preprocesseur</color> <color>preprocesseur</color>
<start>#</start> <regex>#(.|\\[\\\n])*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>&quot;(.|\\[\\&quot;])*?$</regex>
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="simpleQuteText"> <rule name="simpleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>'</start> <regex>&apos;(.|\\[\\&apos;])*?$</regex>
<end>'</end>
<!--<EscapeChar>\</EscapeChar>-->
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>\@menu|endmenu|comment|if|endif|help|default|choice|endchoice|prompt|depends on|config\@</start> <regex>\b(menu|endmenu|comment|if|endif|help|default|choice|endchoice|prompt|depends on|config)\b</regex>
</rule> </rule>
<rule name="my type"> <rule name="my type">
<color>type</color> <color>type</color>
<start>\@int|hex|bool|string\@</start> <regex>\b(int|hex|bool|string)\b</regex>
</rule> </rule>
<rule name="numeric constant"> <rule name="numeric constant">
<color>number</color> <color>number</color>
<start>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</start> <regex>\b(((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?)\b</regex>
</rule> </rule>
<rule name="BIG LETTER"> <rule name="BIG LETTER">
<color>macro</color> <color>macro</color>
<start>\@[A-Z_][A-Z_0-9]{3,500}\@</start> <regex>\b([A-Z_][A-Z_0-9]{3,500})\b</regex>
</rule> </rule>
<rule name="condition"> <rule name="condition">
<color>boolean</color> <color>boolean</color>
<start>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}|</start> <regex>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}</regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

@@ -1,87 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Java"> <EdnLang version="0.1" lang="Java">
<ext>*.java</ext> <ext>.*\.java</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="my comment multiline doxygen"> <rule name="my comment multiline doxygen">
<color>commentDoxygen</color> <color>commentDoxygen</color>
<start>/\*\*</start> <regex>/\*\*.*?\*/</regex>
<end>\*/</end>
</rule> </rule>
<rule name="my comment multiline"> <rule name="my comment multiline">
<color>comment</color> <color>comment</color>
<start>/\*</start> <regex>/\*.*?\*/</regex>
<end>\*/</end>
</rule> </rule>
<rule name="my comment doxygen"> <rule name="my comment doxygen">
<color>commentDoxygen</color> <color>commentDoxygen</color>
<start>//!</start> <regex>//!(.|\\[\\\n])*?$</regex>
<end>\n</end>
</rule> </rule>
<rule name="my todo comment"> <rule name="my todo comment">
<color>SYNTAX_ERROR</color> <color>SYNTAX_ERROR</color>
<start>//[ \t]*TODO[ \t]*:</start> <regex>//[ \t]*TODO[ \t]*:(.|\\[\\\n])*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="my comment"> <rule name="my comment">
<color>comment</color> <color>comment</color>
<start>//</start> <regex>//(.|\\[\\\n])*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="simpleQuteText"> <rule name="simpleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>'</start> <regex>&apos;(.|\\[\\&apos;])*?&apos;</regex>
<end>'</end>
<!--<EscapeChar>\</EscapeChar>-->
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>\@return|goto|if|else|case|default|switch|break|continue|while|do|for\@</start> <regex>\b(return|goto|if|else|case|default|switch|break|continue|while|do|for)\b</regex>
</rule> </rule>
<rule name="my function keyword"> <rule name="my function keyword">
<color>systemFunction</color> <color>systemFunction</color>
<start>\@new|try|catch|print\@</start> <regex>\b(new|try|catch|print)\b</regex>
</rule> </rule>
<rule name="my type"> <rule name="my type">
<color>type</color> <color>type</color>
<start>\@boolean|byte|char|double|float|int|long|short|String|Object|Thread|void|enum\@</start> <regex>\b(boolean|byte|char|double|float|int|long|short|String|Object|Thread|void|enum)\b</regex>
</rule> </rule>
<rule name="my storage keyword"> <rule name="my storage keyword">
<color>storageKeyword</color> <color>storageKeyword</color>
<start>\@import|package|extends|Override|implements|const|class|abstract|private|public|protected|final|const|static|transiant|volatile|interface@</start> <regex>\b(import|package|extends|Override|implements|const|class|abstract|private|public|protected|final|const|static|transiant|volatile|interface)\b</regex>
</rule> </rule>
<rule name="my common Define"> <rule name="my common Define">
<color>commonDefine</color> <color>commonDefine</color>
<start>\@null\@</start> <regex>\bnull\b</regex>
</rule> </rule>
<rule name="numeric constant"> <rule name="numeric constant">
<color>number</color> <color>number</color>
<start>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</start> <regex>\b(((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?)\b</regex>
</rule> </rule>
<rule name="my boolean"> <rule name="my boolean">
<color>boolean</color> <color>boolean</color>
<start>\@true|false\@</start> <regex>\b(true|false)\b</regex>
</rule> </rule>
<rule name="BIG LETTER"> <rule name="BIG LETTER">
<color>macro</color> <color>macro</color>
<start>\@[A-Z_][A-Z_0-9]{3,500}\@</start> <regex>\b[A-Z_][A-Z_0-9]{3,500}\b</regex>
</rule> </rule>
<rule name="Function name"> <rule name="Function name">
<color>functionName</color> <color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start> <regex>\b(\w|_)+[ \t]*\(</regex>
</rule> </rule>
<rule name="condition"> <rule name="condition">
<color>boolean</color> <color>boolean</color>
<start>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}|</start> <regex>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}</regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

@@ -1,34 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Json"> <EdnLang version="0.1" lang="Json">
<ext>*.json</ext> <ext>.*\.json</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>\{|\}|\[|\]</start> <regex>\{|\}|\[|\]</regex>
</rule> </rule>
<rule name="separator"> <rule name="separator">
<color>error</color> <color>error</color>
<start>:|,</start> <regex>:|,</regex>
</rule> </rule>
<rule name="names"> <rule name="names">
<color>functionName</color> <color>functionName</color>
<start>([a-zA-Z0-9]|-|_)*</start> <regex>([a-zA-Z0-9]|-|_)+</regex>
</rule> </rule>
<rule name="numeric constant"> <rule name="numeric constant">
<color>number</color> <color>number</color>
<start>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</start> <regex>\b(((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?)\b</regex>
</rule> </rule>
<rule name="my boolean"> <rule name="my boolean">
<color>boolean</color> <color>boolean</color>
<start>\@true|false\@</start> <regex>\b(true|false)\b</regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

@@ -1,60 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Lua"> <EdnLang version="0.1" lang="Lua">
<ext>*.lua</ext> <ext>.*\.lua</ext>
<pass1> <pass1>
<rule name="Comment multiline"> <rule name="Comment multiline">
<color>comment</color> <color>comment</color>
<start>\-\-\[\[</start> <regex>\-\-\[\[.*?\-\-\]\]</regex>
<end>\-\-\]\]</end>
</rule> </rule>
<rule name="my todo comment"> <rule name="my todo comment">
<color>SYNTAX_ERROR</color> <color>SYNTAX_ERROR</color>
<start>\-\-[ \t]*TODO[ \t]*:</start> <regex>\-\-[ \t]*TODO[ \t]*:(.|\\[\\\n])*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="my comment"> <rule name="my comment">
<color>comment</color> <color>comment</color>
<start>\-\-</start> <regex>\-\-(.|\\[\\\n])*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="simpleQuteText"> <rule name="simpleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>'</start> <regex>&apos;(.|\\[\\&apos;])*?&apos;</regex>
<end>'</end>
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>\@and|break|do|else|elseif|end|for|function|if|in|local|nil|not|or|repeat|return|then|until|while\@</start> <regex>\b(and|break|do|else|elseif|end|for|function|if|in|local|nil|not|or|repeat|return|then|until|while)\b</regex>
</rule> </rule>
<rule name="numeric constant"> <rule name="numeric constant">
<color>number</color> <color>number</color>
<start>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</start> <regex>\b(((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?)\b</regex>
</rule> </rule>
<rule name="my boolean"> <rule name="my boolean">
<color>boolean</color> <color>boolean</color>
<start>\@true|false\@</start> <regex>\b(true|false)\b</regex>
</rule> </rule>
<rule name="BIG LETTER"> <rule name="BIG LETTER">
<color>macro</color> <color>macro</color>
<start>\@[A-Z_][A-Z_0-9]{3,500}\@</start> <regex>\b([A-Z_][A-Z_0-9]{3,500})\b</regex>
</rule> </rule>
<rule name="Function name"> <rule name="Function name">
<color>functionName</color> <color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start> <regex>\b(\w|_)+[ \t]*\(</regex>
</rule> </rule>
<rule name="condition"> <rule name="condition">
<color>boolean</color> <color>boolean</color>
<start>==|&lt;=|&gt;=|~=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}|</start> <regex>==|&lt;=|&gt;=|~=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}</regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

@@ -1,43 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Makefiles"> <EdnLang version="0.1" lang="Makefiles">
<ext>Makefile</ext> <ext>Makefile</ext>
<ext>*.mk</ext> <ext>.*\.(mk|global)</ext>
<ext>*.global</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="my preprocesseur"> <rule name="my preprocesseur">
<color>preprocesseur</color> <color>preprocesseur</color>
<start>#</start> <regex>#(.|\\[\\\n])*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="simpleQuteText"> <rule name="simpleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>'</start> <regex>&apos;(.|\\[\\&apos;])*?&apos;</regex>
<end>'</end>
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="confition"> <rule name="confition">
<color>type</color> <color>type</color>
<start>\@if|ifeq|ifneq|else|endif|define|endef\@</start> <regex>\b(if|ifeq|ifneq|else|endif|define|endef)\b</regex>
</rule> </rule>
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>\$\([a-zA-Z_][a-zA-Z0-9_]*\)</start> <regex>\b\([a-zA-Z_][a-zA-Z0-9_]*\)</regex>
</rule> </rule>
<rule name="function call"> <rule name="function call">
<color>functionName</color> <color>functionName</color>
<start>\$\((call|info|error|warning|shell|patsubst|lastword|wildcard|addprefix|foreach|subst|word|eval)</start> <regex>\$\((call|info|error|warning|shell|patsubst|lastword|wildcard|addprefix|foreach|subst|word|eval)</regex>
</rule> </rule>
<rule name="condition"> <rule name="condition">
<color>boolean</color> <color>boolean</color>
<start>:=|?=|!=|=</start> <regex>:=|\?=|!=|=</regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

@@ -1,62 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Matlab"> <EdnLang version="0.1" lang="Matlab">
<ext>*.m</ext> <ext>.*\.(m|M)</ext>
<ext>*.M</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="my comment doxygen"> <rule name="my comment doxygen">
<color>commentDoxygen</color> <color>commentDoxygen</color>
<start>%%</start> <regex>%%(.|\\[\\\n])*?$</regex>
<end>\n</end>
</rule> </rule>
<rule name="my comment"> <rule name="my comment">
<color>comment</color> <color>comment</color>
<start>%</start> <regex>%(.|\\[\\\n])*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start> "</start> <regex> &quot;.*?($|&quot;)</regex>
<end>("|\n)</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="simpleQuteText"> <rule name="simpleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start> '</start> <regex> &apos;.*?($|&apos;)</regex>
<end>('|\n)</end>
<!--<EscapeChar>\</EscapeChar>-->
</rule> </rule>
<rule name="global inclusion"> <rule name="global inclusion">
<color>preprocesseur</color> <color>preprocesseur</color>
<start>global( |\t)+</start> <regex>global( |\t)+(.|\\[\\\n])*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>\@return|goto|if|else|case|default|switch|break|continue|while|do|for|otherwise|end\@</start> <regex>\b(return|goto|if|else|case|default|switch|break|continue|while|do|for|otherwise|end)\b</regex>
</rule> </rule>
<rule name="my boolean"> <rule name="my boolean">
<color>boolean</color> <color>boolean</color>
<start>\@true|false\@</start> <regex>\b(true|false)\b</regex>
</rule> </rule>
<rule name="Function name"> <rule name="Function name">
<color>functionName</color> <color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start> <regex>\b(\w|_)+[ \t]*\(</regex>
</rule> </rule>
<rule name="condition"> <rule name="condition">
<color>boolean</color> <color>boolean</color>
<start>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}|</start> <regex>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}</regex>
</rule> </rule>
<rule name="numeric constant"> <rule name="numeric constant">
<color>number</color> <color>number</color>
<start>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</start> <regex>\b(((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?)\b</regex>
</rule> </rule>
<rule name="BIG LETTER"> <rule name="BIG LETTER">
<color>macro</color> <color>macro</color>
<start>\@[A-Z_][A-Z_0-9]{3,500}\@</start> <regex>\b([A-Z_][A-Z_0-9]{3,500})\b</regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

@@ -1,76 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Php: pretty home page"> <EdnLang version="0.1" lang="Php: pretty home page">
<ext>*.php</ext> <ext>.*\.(php|php3|php4|phtml)</ext>
<ext>*.php3</ext>
<ext>*.php4</ext>
<ext>*.phtml</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="my comment multiline"> <rule name="my comment multiline">
<color>comment</color> <color>comment</color>
<start>/\*</start> <regex>/\*.*?\*/</regex>
<end>\*/</end>
</rule> </rule>
<rule name="my todo comment"> <rule name="my todo comment">
<color>SYNTAX_ERROR</color> <color>SYNTAX_ERROR</color>
<start>//[ \t]*TODO[ \t]*:</start> <regex>//[ \t]*TODO[ \t]*:(.|\\[\\\n])*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="my comment inline"> <rule name="my comment inline">
<color>comment</color> <color>comment</color>
<start>#</start> <regex>#(.|\\[\\\n])*?$</regex>
<end>\n</end>
</rule> </rule>
<rule name="my comment"> <rule name="my comment">
<color>comment</color> <color>comment</color>
<start>//</start> <regex>//(.|\\[\\\n])*?$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="simpleQuteText"> <rule name="simpleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>'</start> <regex>&apos;(.|\\[\\&apos;])*?&apos;</regex>
<end>'</end>
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>[\$]+[a-zA-Z_][a-zA-Z0-9_]*</start> <regex>[\$]+[a-zA-Z_][a-zA-Z0-9_]*</regex>
</rule> </rule>
<rule name="my type"> <rule name="my type">
<color>type</color> <color>type</color>
<start>\@array|bool|boolean|double|float|int|integer|numeric|object|resource|string|unset\@</start> <regex>\b(array|bool|boolean|double|float|int|integer|numeric|object|resource|string|unset)\b</regex>
</rule> </rule>
<rule name="my storage keyword"> <rule name="my storage keyword">
<color>storageKeyword</color> <color>storageKeyword</color>
<start>\@abstract|and|as|break|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|interface|isset|list|namespace|new|or|print|private|protected|public|require|require_once|return|static|switch|throw|trait|try|unset|use|var|while|xor\@</start> <regex>\b(abstract|and|as|break|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|interface|isset|list|namespace|new|or|print|private|protected|public|require|require_once|return|static|switch|throw|trait|try|unset|use|var|while|xor)\b</regex>
</rule> </rule>
<rule name="my common Define"> <rule name="my common Define">
<color>commonDefine</color> <color>commonDefine</color>
<start>\@doubleval|floatval|gettype|intval|print_r|serialize|settype|strval|unserialize|var_dump|var_export\@</start> <regex>\b(doubleval|floatval|gettype|intval|print_r|serialize|settype|strval|unserialize|var_dump|var_export)\b</regex>
</rule> </rule>
<rule name="numeric constant"> <rule name="numeric constant">
<color>number</color> <color>number</color>
<start>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</start> <regex>\b(((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?)\b</regex>
</rule> </rule>
<rule name="my boolean"> <rule name="my boolean">
<color>boolean</color> <color>boolean</color>
<start>\@true|TRUE|false|FALSE\@</start> <regex>\b(true|TRUE|false|FALSE)\b</regex>
</rule> </rule>
<rule name="Function name"> <rule name="Function name">
<color>functionName</color> <color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start> <regex>\b\w+[ \t]*\(</regex>
</rule> </rule>
<rule name="condition"> <rule name="condition">
<color>boolean</color> <color>boolean</color>
<start>==|&lt;=|&gt;=|!=|&lt;|&gt;|&amp;&amp;|\{|\}|</start> <regex>==|&lt;=|&gt;=|!=|&lt;|&gt;|&amp;&amp;|\{|\}</regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

@@ -1,77 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Python"> <EdnLang version="0.1" lang="Python">
<ext>*.py</ext> <ext>.*\.py</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="my comment multiline"> <rule name="my comment multiline">
<color>comment</color> <color>comment</color>
<start>"""</start> <regex>&quot;&quot;&quot;(.|\r|\n)*?&quot;&quot;&quot;</regex>
<end>"""</end> </rule>
<rule name="my comment multiline">
<color>comment</color>
<regex>'''(.|\r|\n)*?'''</regex>
</rule>
<rule name="comment multiline Error">
<color>SYNTAX_ERROR</color>
<regex>(&quot;&quot;&quot;|''')(.|\n|\r)*</regex>
</rule> </rule>
<rule name="my comment doxygen"> <rule name="my comment doxygen">
<color>commentDoxygen</color> <color>commentDoxygen</color>
<start>##</start> <regex>##.*</regex>
<end>\n</end>
</rule> </rule>
<rule name="my comment"> <rule name="my comment">
<color>comment</color> <color>comment</color>
<start>#</start> <regex>#.*</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="simpleQuteText"> <rule name="simpleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>'</start> <regex>&apos;((\\[\\&apos;])|.)*?&apos;</regex>
<end>'</end>
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>\@if|else|elif|break|pass|continue|while|do|for|in|return\@</start> <regex>\b(if|else|elif|break|pass|continue|while|do|for|in|return)\b</regex>
</rule> </rule>
<rule name="my function keyword"> <rule name="my function keyword">
<color>systemFunction</color> <color>systemFunction</color>
<start>\@print|len|range|del|__init__|self|os\.|sys\.|path\.\@</start> <regex>\b(print|len|range|del|__init__|self|os\.|sys\.|path\.)\b</regex>
</rule> </rule>
<rule name="my type"> <rule name="my type">
<color>type</color> <color>type</color>
<start>\@bool|BOOL|char|double|float\@</start> <regex>\b(bool|BOOL|char|double|float)\b</regex>
</rule> </rule>
<rule name="my storage keyword"> <rule name="my storage keyword">
<color>storageKeyword</color> <color>storageKeyword</color>
<start>\@def|class|import|from|as|try|except\@</start> <regex>\b(def|class|import|from|as|try|except)\b</regex>
</rule> </rule>
<rule name="numeric constant"> <rule name="numeric constant">
<color>number</color> <color>number</color>
<start>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</start> <regex>\b(((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?)\b</regex>
</rule> </rule>
<rule name="my boolean"> <rule name="my boolean">
<color>boolean</color> <color>boolean</color>
<start>\@True|False\@</start> <regex>\b(True|False)\b</regex>
</rule> </rule>
<rule name="BIG LETTER"> <rule name="BIG LETTER">
<color>macro</color> <color>macro</color>
<start>\@[A-Z_][A-Z_0-9]{3,500}\@</start> <regex>\b([A-Z_][A-Z_0-9]{3,500})\b</regex>
</rule> </rule>
<rule name="Function name"> <rule name="Function name">
<color>functionName</color> <color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start> <regex>\b(\w|_)+[ \t]*\(</regex>
</rule> </rule>
<rule name="condition"> <rule name="condition">
<color>boolean</color> <color>boolean</color>
<start>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}|</start> <regex>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}</regex>
</rule> </rule>
<!-- With all elementes : --> <rule name="simpleQuteTextError">
<rule name="BIG LETTER"> <color>SYNTAX_ERROR</color>
<color>macro</color> <regex>&apos;|&quot;</regex>
<start>([A-Z]|_){4,500}</start>
<elemSubColor id="1">doxElem</elemSubColor>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

@@ -1,35 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.2" lang="XML"> <EdnLang version="0.2" lang="XML">
<ext>*.xml</ext> <ext>.*\.(xml|svg)</ext>
<ext>*.svg</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="Comment"> <rule name="Comment">
<color>comment</color> <color>comment</color>
<start>&lt;!\-\-</start> <!--<regex><![CDATA[<!\-\-(.|\r|\n)*?\-\->]]></regex>-->
<end>\-\-&gt;</end> -<regex>&lt;!\-\-(.|\r|\n)*?\-\-&gt;</regex>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="CDATA">
<color>doubleQuoteText</color> <color>macro</color>
<start>"</start> <!--<regex><![CDATA[<!\[CDATA\[(.|\r|\n)*?\]\]>]]></regex>-->
<end>"</end> <regex>&lt;!\[CDATA\[(.|\r|\n)*?\]\]&gt;</regex>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="simpleQuteText"> <rule name="stop balise">
<color>doubleQuoteText</color> <color>functionName</color>
<start>\@'</start> <!--<regex><![CDATA[</[ \t]*\w+?[ \t]*>]]></regex>-->
<end>('|\n)</end> <regex>&lt;/[ \t]*\w+?[ \t]*&gt;</regex>
<!--<EscapeChar>\</EscapeChar>--> </rule>
<rule name="stop balise">
<color>SYNTAX_ERROR</color>
<!--<regex><![CDATA[</(.|\n|\r)*?>]]></regex>-->
<regex>&lt;/(.|\n|\r)*?&gt;</regex>
</rule>
<rule name="start balise">
<color>normal</color>
<!--<regex><![CDATA[<(.|\n|\r)*?>]]></regex>-->
<regex>&lt;(.|\n|\r)*?&gt;</regex>
<sub>parseInsideBalise</sub>
</rule> </rule>
</pass1> </pass1>
<pass2> <pass2>
<rule name="special Balise"> <rule name="start balise">
<color>error</color> <color>commonDefine</color>
<start>&lt;\?\w*|\?&gt;</start> <!--<regex><![CDATA[&(gt|lt|amp|apos|quot);]]></regex>-->
<regex>&amp;(gt|lt|amp|apos|quot);</regex>
</rule> </rule>
<rule name="normale Balise"> <rule name="start balise">
<color>functionName</color> <color>error</color>
<start>&lt;/[0-9a-zA-Z_]+|&lt;[0-9a-zA-Z_]+|/&gt;|&gt;</start> <regex>&gt;|&lt;|&amp;|&apos;|&quot;</regex>
</rule> </rule>
</pass2> </pass2>
<pass name="parseInsideBalise">
<rule name="special Balise">
<color>error</color>
<!--<regex><![CDATA[<\?\w*|\?>]]></regex>-->
<regex>&lt;\?\w*|\?&gt;</regex>
</rule>
<rule name="open balise">
<color>functionName</color>
<!--<regex><![CDATA[<[ \t]*[0-9a-zA-Z_]+]]></regex>-->
<regex>&lt;[ \t]*[0-9a-zA-Z_]+</regex>
</rule>
<rule name="close balise">
<color>functionName</color>
<!--<regex><![CDATA[/?>]]></regex>-->
<regex>/?&gt;</regex>
</rule>
<rule name="doubleQuteText">
<color>doubleQuoteText</color>
<regex>&quot;(.|\r|\n|\\\\|\\&quot;)*?&quot;</regex>
</rule>
<rule name="simpleQuteText">
<color>doubleQuoteText</color>
<regex>\b&apos;(.|\r|\n)*?(&apos;|\n)</regex>
</rule>
<rule name="condition">
<color>boolean</color>
<regex>=</regex>
</rule>
<rule name="condition">
<color>keyword</color>
<regex>\w+</regex>
</rule>
</pass>
</EdnLang> </EdnLang>

View File

@@ -27,5 +27,8 @@
{ name:"functionName", foreground:"#24d1e0", bold:true}, { name:"functionName", foreground:"#24d1e0", bold:true},
{ name:"TestResultOK", foreground:"#000000", background:"#00FF00", bold:true}, { name:"TestResultOK", foreground:"#000000", background:"#00FF00", bold:true},
{ name:"TestResultERROR", FG:"#000000", background:"#FF0000", bold:true} { name:"TestResultERROR", FG:"#000000", background:"#FF0000", bold:true}
{ name:"doxygen-key", foreground:"#dc3700", bold:true, italic:false},
{ name:"doxygen-in-out", foreground:"#dc7000", bold:true, italic:false},
] ]
} }

View File

@@ -9,6 +9,7 @@
{ name:"SelectedText", foreground:"#292929", background:"#009ce7"}, { name:"SelectedText", foreground:"#292929", background:"#009ce7"},
{ name:"error", foreground:"#FF0000"}, { name:"error", foreground:"#FF0000"},
{ name:"doubleQuoteText", foreground:"#008e00"}, { name:"doubleQuoteText", foreground:"#008e00"},
{ name:"type", foreground:"#376d0a", bold:true}, { name:"type", foreground:"#376d0a", bold:true},
{ name:"memberClass", foreground:"#7c5406", bold:true}, { name:"memberClass", foreground:"#7c5406", bold:true},
{ name:"inputFunction", foreground:"#B80000", bold:true, italic:true}, { name:"inputFunction", foreground:"#B80000", bold:true, italic:true},
@@ -26,6 +27,9 @@
{ name:"functionName", foreground:"#09857e", bold:true}, { name:"functionName", foreground:"#09857e", bold:true},
{ name:"TestResultOK", foreground:"#000000", background:"#009c00", bold:true}, { name:"TestResultOK", foreground:"#000000", background:"#009c00", bold:true},
{ name:"TestResultERROR", foreground:"#000000", background:"#c20000", bold:true} { name:"TestResultERROR", foreground:"#000000", background:"#c20000", bold:true}
{ name:"doxygen-key", foreground:"#dc3700", bold:true, italic:false},
{ name:"doxygen-in-out", foreground:"#dc7000", bold:true, italic:false},
] ]
} }

View File

@@ -1,6 +0,0 @@
#!/usr/bin/python
import lutinModule
import lutinTools
lutinModule.import_path(lutinTools.get_current_path(__file__) + "/sources/")
lutinModule.import_path(lutinTools.get_current_path(__file__) + "/../ewol/")

View File

@@ -8,6 +8,7 @@
#include <etk/types.h> #include <etk/types.h>
#include <etk/stdTools.h>
#include <appl/Buffer.h> #include <appl/Buffer.h>
#include <appl/debug.h> #include <appl/debug.h>
#include <ewol/context/clipBoard.h> #include <ewol/context/clipBoard.h>
@@ -16,19 +17,14 @@
#undef __class__ #undef __class__
#define __class__ "Buffer" #define __class__ "Buffer"
const char* const appl::Buffer::eventIsModify = "edn-is-modify";
const char* const appl::Buffer::eventIsSave = "edn-is-save";
const char* const appl::Buffer::eventSelectChange = "edn-select-change";
const char* const appl::Buffer::eventChangeName = "edn-buffer-name-change";
appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ () { appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ () {
m_value = u32char::Null; m_value = u32char::Null;
if (m_current < 0) { if (m_current < 0) {
m_current = 0; m_current = 0;
return *this; return *this;
} }
if (m_data != NULL) { if (m_data != nullptr) {
if (m_current < m_data->m_data.size() ) { if (m_current < (int64_t)m_data->m_data.size() ) {
int8_t nbChar = utf8::theoricLen(m_data->m_data[m_current]); int8_t nbChar = utf8::theoricLen(m_data->m_data[m_current]);
if (nbChar != 0) { if (nbChar != 0) {
m_current+=nbChar; m_current+=nbChar;
@@ -36,7 +32,7 @@ appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ () {
m_current++; m_current++;
} }
} }
if (m_current >= m_data->m_data.size()) { if (m_current >= (int64_t)m_data->m_data.size()) {
m_current = m_data->m_data.size(); m_current = m_data->m_data.size();
} }
} }
@@ -45,7 +41,7 @@ appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ () {
appl::Buffer::Iterator& appl::Buffer::Iterator::operator-- () { appl::Buffer::Iterator& appl::Buffer::Iterator::operator-- () {
m_value = u32char::Null; m_value = u32char::Null;
if (m_data != NULL) { if (m_data != nullptr) {
if (m_current > 0) { if (m_current > 0) {
int32_t iii = -1; int32_t iii = -1;
while( utf8::theoricFirst(m_data->m_data[m_current+iii]) == false while( utf8::theoricFirst(m_data->m_data[m_current+iii]) == false
@@ -68,12 +64,12 @@ char32_t appl::Buffer::Iterator::operator* () {
if (m_value != u32char::Null) { if (m_value != u32char::Null) {
return m_value; return m_value;
} }
if (m_data == NULL) { if (m_data == nullptr) {
APPL_ERROR("request an element that iterator not link"); APPL_ERROR("request an element that iterator not link");
return m_value; return m_value;
} }
if ( m_current < 0 if ( m_current < 0
|| m_current >= m_data->m_data.size()) { || m_current >= (int64_t)m_data->m_data.size()) {
APPL_ERROR("request an element out of bounding !!! 0 <= " << m_current << " < " << m_data->m_data.size()); APPL_ERROR("request an element out of bounding !!! 0 <= " << m_current << " < " << m_data->m_data.size());
return m_value; return m_value;
} }
@@ -81,7 +77,7 @@ char32_t appl::Buffer::Iterator::operator* () {
memset(tmpVal, 0, sizeof(tmpVal)); memset(tmpVal, 0, sizeof(tmpVal));
tmpVal[0] = m_data->m_data[m_current]; tmpVal[0] = m_data->m_data[m_current];
int8_t nbChar = utf8::theoricLen(tmpVal[0]); int8_t nbChar = utf8::theoricLen(tmpVal[0]);
for (int32_t iii=1; iii<nbChar && m_current+iii<m_data->m_data.size(); ++iii) { for (int32_t iii=1; iii<nbChar && m_current+iii<(int64_t)m_data->m_data.size(); ++iii) {
tmpVal[iii] = m_data->m_data[m_current+iii]; tmpVal[iii] = m_data->m_data[m_current+iii];
} }
// transform ... // transform ...
@@ -118,8 +114,11 @@ appl::Buffer::Iterator appl::Buffer::selectStop() {
return position( getStopSelectionPos() ); return position( getStopSelectionPos() );
} }
appl::Buffer::Buffer() : appl::Buffer::Buffer() :
signalIsModify(*this, "is-modify"),
signalIsSave(*this, "is-save"),
signalSelectChange(*this, "select-change"),
signalChangeName(*this, "change-name"),
m_hasFileName(false), m_hasFileName(false),
m_fileName(""), m_fileName(""),
m_isModify(false), m_isModify(false),
@@ -127,19 +126,19 @@ appl::Buffer::Buffer() :
m_cursorSelectPos(-1), m_cursorSelectPos(-1),
m_cursorPreferredCol(-1), m_cursorPreferredCol(-1),
m_nbLines(1), m_nbLines(1),
m_highlight(NULL) { m_highlight(nullptr) {
addObjectType("appl::Buffer"); addObjectType("appl::Buffer");
static int32_t bufferBaseId = 0; static int32_t bufferBaseId = 0;
m_fileName = "No Name " + std::to_string(bufferBaseId); m_fileName = "No Name " + etk::to_string(bufferBaseId);
bufferBaseId++; bufferBaseId++;
addEventId(eventIsModify); }
addEventId(eventIsSave);
addEventId(eventSelectChange); void appl::Buffer::init() {
addEventId(eventChangeName); ewol::Object::init();
} }
appl::Buffer::~Buffer() { appl::Buffer::~Buffer() {
APPL_ERROR("REAL remove buffer : '" << m_name << "'");
} }
bool appl::Buffer::loadFile(const std::string& _name) { bool appl::Buffer::loadFile(const std::string& _name) {
@@ -153,14 +152,21 @@ bool appl::Buffer::loadFile(const std::string& _name) {
m_cursorPos = 0; m_cursorPos = 0;
setHighlightType(""); setHighlightType("");
m_nbLines = 0; m_nbLines = 0;
if (m_data.dumpFrom(m_fileName) == true ) { if (file.exist() == false) {
APPL_ERROR("File : '" << m_fileName << "' does not exist...");
return false;
}
if (file.fileOpenRead() == false) {
APPL_ERROR("File : '" << m_fileName << "' Fail to open in read mode");
return false;
}
m_data = file.fileReadAllString();
file.fileClose();
countNumberofLine(); countNumberofLine();
tryFindHighlightType(); tryFindHighlightType();
m_isModify = false; m_isModify = false;
return true; return true;
} }
return false;
}
void appl::Buffer::setFileName(const std::string& _name) { void appl::Buffer::setFileName(const std::string& _name) {
APPL_DEBUG("Convert filename :'" << _name << "'"); APPL_DEBUG("Convert filename :'" << _name << "'");
@@ -171,18 +177,22 @@ void appl::Buffer::setFileName(const std::string& _name) {
} }
m_fileName = name; m_fileName = name;
m_hasFileName = true; m_hasFileName = true;
generateEventId(eventChangeName); signalChangeName.emit();
setModification(true); setModification(true);
} }
bool appl::Buffer::storeFile() { bool appl::Buffer::storeFile() {
if (m_data.dumpIn(m_fileName) == true) { etk::FSNode file(m_fileName);
if (file.fileOpenWrite() == false) {
APPL_ERROR("File : '" << m_fileName << "' Fail to open in write mode");
return false;
}
file.fileWriteAll(m_data);
file.fileClose();
APPL_INFO("saving file : " << m_fileName); APPL_INFO("saving file : " << m_fileName);
setModification(false); setModification(false);
return true; return true;
} }
return false;
}
void appl::Buffer::setModification(bool _status) { void appl::Buffer::setModification(bool _status) {
if (m_isModify == _status) { if (m_isModify == _status) {
@@ -190,9 +200,9 @@ void appl::Buffer::setModification(bool _status) {
} }
m_isModify = _status; m_isModify = _status;
if (m_isModify == true) { if (m_isModify == true) {
generateEventId(eventIsModify); signalIsModify.emit();
} else { } else {
generateEventId(eventIsSave); signalIsSave.emit();
} }
} }
@@ -415,13 +425,13 @@ void appl::Buffer::moveCursor(int64_t _pos) {
if (m_cursorPos == m_cursorSelectPos) { if (m_cursorPos == m_cursorSelectPos) {
m_cursorSelectPos = -1; m_cursorSelectPos = -1;
} }
generateEventId(eventSelectChange); signalSelectChange.emit();
return; return;
} }
// move mode // move mode
m_cursorPos = _pos; m_cursorPos = _pos;
m_cursorSelectPos = -1; m_cursorSelectPos = -1;
generateEventId(eventSelectChange); signalSelectChange.emit();
} }
bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos, bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos,
@@ -514,12 +524,12 @@ bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos,
void appl::Buffer::setSelectionPos(const appl::Buffer::Iterator& _pos) { void appl::Buffer::setSelectionPos(const appl::Buffer::Iterator& _pos) {
m_cursorSelectPos = _pos; m_cursorSelectPos = _pos;
generateEventId(eventSelectChange); signalSelectChange.emit();
} }
void appl::Buffer::unSelect() { void appl::Buffer::unSelect() {
m_cursorSelectPos = -1; m_cursorSelectPos = -1;
generateEventId(eventSelectChange); signalSelectChange.emit();
} }
static const char *ControlCodeTable[32] = { static const char *ControlCodeTable[32] = {
@@ -639,7 +649,7 @@ bool appl::Buffer::write(const std::string& _data, const appl::Buffer::Iterator&
position = 0; position = 0;
} }
APPL_VERBOSE("write at pos: " << (int64_t)_pos << " ==> " << position << " data : " << _data); APPL_VERBOSE("write at pos: " << (int64_t)_pos << " ==> " << position << " data : " << _data);
m_data.insert(position, (int8_t*)(_data.c_str()), _data.size()); m_data.insert((size_t)position, _data);
if (m_cursorPos < 0) { if (m_cursorPos < 0) {
m_cursorPos = 0; m_cursorPos = 0;
} }
@@ -656,7 +666,7 @@ bool appl::Buffer::replace(const std::string& _data, const appl::Buffer::Iterato
if (position < 0){ if (position < 0){
position = 0; position = 0;
} }
m_data.replace(position, (int64_t)_posEnd-(int64_t)_pos, (int8_t*)(_data.c_str()), _data.size()); m_data.replace(m_data.begin() + position, m_data.begin() + (int64_t)_posEnd, _data.begin(), _data.end());
regenerateHighLightAt(position, (int64_t)_posEnd-(int64_t)_pos, _data.size()); regenerateHighLightAt(position, (int64_t)_posEnd-(int64_t)_pos, _data.size());
m_selectMode = false; m_selectMode = false;
moveCursor(position+_data.size()); moveCursor(position+_data.size());
@@ -671,7 +681,7 @@ void appl::Buffer::removeSelection() {
} }
int64_t startPos = getStartSelectionPos(); int64_t startPos = getStartSelectionPos();
int64_t endPos = getStopSelectionPos(); int64_t endPos = getStopSelectionPos();
m_data.remove(startPos, endPos-startPos); m_data.erase(startPos, endPos-startPos);
regenerateHighLightAt(startPos, endPos-startPos, 0); regenerateHighLightAt(startPos, endPos-startPos, 0);
m_selectMode = false; m_selectMode = false;
moveCursor(startPos); moveCursor(startPos);
@@ -681,7 +691,7 @@ void appl::Buffer::removeSelection() {
void appl::Buffer::tryFindHighlightType() { void appl::Buffer::tryFindHighlightType() {
etk::FSNode file(m_fileName); etk::FSNode file(m_fileName);
std::string type = appl::highlightManager::getTypeExtention(file.fileGetExtention()); std::string type = appl::highlightManager::getTypeFile(file.getNameFile());
if (type.size() == 0) { if (type.size() == 0) {
return; return;
} }
@@ -698,13 +708,13 @@ void appl::Buffer::setHighlightType(const std::string& _type) {
return; return;
} }
m_highlightType = _type; m_highlightType = _type;
m_highlight = appl::Highlight::keep(resourceName); m_highlight = appl::Highlight::create(resourceName);
generateHighLightAt(0, m_data.size()); generateHighLightAt(0, m_data.size());
} }
void appl::Buffer::regenerateHighLightAt(int64_t _pos, int64_t _nbDeleted, int64_t _nbAdded) { void appl::Buffer::regenerateHighLightAt(int64_t _pos, int64_t _nbDeleted, int64_t _nbAdded) {
// prevent ERROR... // prevent ERROR...
if (NULL == m_highlight) { if (nullptr == m_highlight) {
return; return;
} }
// prevent No data Call // prevent No data Call
@@ -713,7 +723,7 @@ void appl::Buffer::regenerateHighLightAt(int64_t _pos, int64_t _nbDeleted, int64
return; return;
} }
// normal case // normal case
//APPL_INFO("(pos="<<pos<<", nbDeleted="<<nbDeleted<<", nbAdded=" << nbAdded << "\");"); APPL_VERBOSE("(_pos="<<_pos<<", _nbDeleted="<<_nbDeleted<<", _nbAdded=" << _nbAdded << "\");");
int64_t posEnd = _pos + _nbDeleted; int64_t posEnd = _pos + _nbDeleted;
// search position of the old element to reparse IT... // search position of the old element to reparse IT...
int64_t startId; int64_t startId;
@@ -727,31 +737,44 @@ void appl::Buffer::regenerateHighLightAt(int64_t _pos, int64_t _nbDeleted, int64
// find element previous // find element previous
findMainHighLightPosition(_pos, posEnd, startId, stopId, true); findMainHighLightPosition(_pos, posEnd, startId, stopId, true);
APPL_VERBOSE(" list old parse:");
for (auto &elem : m_HLDataPass1) {
APPL_VERBOSE(" " << elem.start << "=>" << elem.stop);
}
// Remove previous element to prevent many errors like parsing of // for example
startId--;
APPL_VERBOSE("Find startId=" << startId << " stopId=" << stopId << " list size=" << m_HLDataPass1.size());
// remove deprecated element // remove deprecated element
if ( startId == -1 if ( startId <= -1
&& stopId == -1) { && stopId <= -1) {
m_HLDataPass1.clear(); m_HLDataPass1.clear();
} else if (startId == -1) { APPL_VERBOSE("1 * clear");
} else if (startId <= -1) {
if (stopId == 0){ if (stopId == 0){
m_HLDataPass1.erase(m_HLDataPass1.begin()); m_HLDataPass1.erase(m_HLDataPass1.begin());
//APPL_DEBUG("1 * Erase 0"); APPL_VERBOSE("1 * Erase 0");
} else { } else {
m_HLDataPass1.erase(m_HLDataPass1.begin(), m_HLDataPass1.begin()+stopId); m_HLDataPass1.erase(m_HLDataPass1.begin(), m_HLDataPass1.begin()+stopId);
//APPL_DEBUG("2 * Erase 0->" << stopId); APPL_VERBOSE("2 * Erase 0->" << stopId);
} }
} else if (stopId == -1) { } else if (stopId <= -1) {
//APPL_DEBUG("3 * Erase " << startId+1 << "-> end"); APPL_VERBOSE("3 * Erase " << startId+1 << "-> end");
m_HLDataPass1.erase(m_HLDataPass1.begin()+startId+1, m_HLDataPass1.end()); m_HLDataPass1.erase(m_HLDataPass1.begin()+startId+1, m_HLDataPass1.end());
stopId = -1; stopId = -1;
} else { } else {
int32_t currentSize = m_HLDataPass1.size(); int32_t currentSize = m_HLDataPass1.size();
//APPL_DEBUG("4 * Erase " << startId+1 << "->" << stopId << " in " << currentSize << " elements" ); APPL_VERBOSE("4 * Erase " << startId+1 << "->" << stopId << " in " << currentSize << " elements" );
m_HLDataPass1.erase(m_HLDataPass1.begin()+startId+1, m_HLDataPass1.begin()+stopId); m_HLDataPass1.erase(m_HLDataPass1.begin()+startId+1, m_HLDataPass1.begin()+stopId+1);
if (stopId == currentSize-1) { if (stopId == currentSize-1) {
stopId = -1; stopId = -1;
} }
} }
//APPL_DEBUG("new size=" << (int32_t)m_HLDataPass1.size()-1); APPL_VERBOSE(" list afterRemove:");
for (auto &elem : m_HLDataPass1) {
APPL_VERBOSE(" " << elem.start << "=>" << elem.stop);
}
// update position after the range position : // update position after the range position :
int64_t elemStart; int64_t elemStart;
if (startId == -1) { if (startId == -1) {
@@ -761,25 +784,23 @@ void appl::Buffer::regenerateHighLightAt(int64_t _pos, int64_t _nbDeleted, int64
} }
for (auto it(m_HLDataPass1.begin()+elemStart); it != m_HLDataPass1.end(); ++it) { for (auto it(m_HLDataPass1.begin()+elemStart); it != m_HLDataPass1.end(); ++it) {
//APPL_DEBUG("move element=" << i); //APPL_DEBUG("move element=" << i);
it->beginStart += _nbAdded - _nbDeleted; it->start += _nbAdded - _nbDeleted;
it->beginStop += _nbAdded - _nbDeleted; it->stop += _nbAdded - _nbDeleted;
it->endStart += _nbAdded - _nbDeleted;
it->endStop += _nbAdded - _nbDeleted;
} }
//Regenerate Element inside range //Regenerate Element inside range
if ( startId == -1 if ( startId <= -1
&& stopId == -1) { && stopId <= -1) {
//APPL_DEBUG("******* Regenerate ALL"); APPL_VERBOSE("******* Regenerate ALL");
generateHighLightAt(0, m_data.size()); generateHighLightAt(0, m_data.size());
} else if(-1 == startId) { } else if(startId <= -1) {
//APPL_DEBUG("******* Regenerate START"); APPL_VERBOSE("******* Regenerate START");
generateHighLightAt(0, m_HLDataPass1[0].beginStart, 0); generateHighLightAt(0, m_HLDataPass1[0].start, 0);
} else if(-1 == stopId) { } else if(stopId <= -1) {
//APPL_DEBUG("******* Regenerate STOP"); APPL_VERBOSE("******* Regenerate STOP");
generateHighLightAt(m_HLDataPass1[m_HLDataPass1.size() -1].endStop, m_data.size(), m_HLDataPass1.size()); generateHighLightAt(m_HLDataPass1[m_HLDataPass1.size() -1].stop, m_data.size(), m_HLDataPass1.size());
} else { } else {
//APPL_DEBUG("******* Regenerate RANGE"); APPL_VERBOSE("******* Regenerate RANGE");
generateHighLightAt(m_HLDataPass1[startId].endStop, m_HLDataPass1[startId+1].beginStart, startId+1); generateHighLightAt(m_HLDataPass1[startId].stop, m_HLDataPass1[startId+1].start, startId+1);
} }
} }
@@ -828,7 +849,7 @@ void appl::Buffer::findMainHighLightPosition(int64_t _startPos,
S=-1 *************** E S=-1 *************** E
*/ */
for (size_t iii = 0; iii < m_HLDataPass1.size(); ++iii) { for (size_t iii = 0; iii < m_HLDataPass1.size(); ++iii) {
if (m_HLDataPass1[iii].endStop > _startPos) { if (m_HLDataPass1[iii].stop > _startPos) {
break; break;
} }
_startId = iii; _startId = iii;
@@ -849,7 +870,7 @@ void appl::Buffer::findMainHighLightPosition(int64_t _startPos,
elemStart = _startId+1; elemStart = _startId+1;
} }
for (size_t iii = elemStart; iii < m_HLDataPass1.size(); ++iii) { for (size_t iii = elemStart; iii < m_HLDataPass1.size(); ++iii) {
if (m_HLDataPass1[iii].beginStart > _endPos) { if (m_HLDataPass1[iii].start > _endPos) {
_stopId = iii; _stopId = iii;
break; break;
} }
@@ -857,7 +878,7 @@ void appl::Buffer::findMainHighLightPosition(int64_t _startPos,
} }
void appl::Buffer::generateHighLightAt(int64_t _pos, int64_t _endPos, int64_t _addingPos) { void appl::Buffer::generateHighLightAt(int64_t _pos, int64_t _endPos, int64_t _addingPos) {
if (NULL == m_highlight) { if (nullptr == m_highlight) {
return; return;
} }
//APPL_DEBUG("area : ("<<pos<<","<<endPos<<") insert at : " << addingPos); //APPL_DEBUG("area : ("<<pos<<","<<endPos<<") insert at : " << addingPos);
@@ -871,25 +892,25 @@ void appl::Buffer::cleanHighLight() {
appl::HighlightInfo* appl::Buffer::getElementColorAtPosition(int64_t _pos, int64_t &_starPos) { appl::HighlightInfo* appl::Buffer::getElementColorAtPosition(int64_t _pos, int64_t &_starPos) {
int32_t start = etk_max(0, _starPos-1); int32_t start = std::max((int64_t)0, _starPos-1);
for (size_t iii = start; iii < m_HLDataPass1.size(); ++iii) { for (size_t iii = start; iii < m_HLDataPass1.size(); ++iii) {
_starPos = iii; _starPos = iii;
if ( m_HLDataPass1[iii].beginStart <= _pos if ( m_HLDataPass1[iii].start <= _pos
&& m_HLDataPass1[iii].endStop > _pos) { && m_HLDataPass1[iii].stop > _pos) {
return &m_HLDataPass1[iii]; return &m_HLDataPass1[iii];
} }
if(m_HLDataPass1[iii].beginStart > _pos) { if(m_HLDataPass1[iii].start > _pos) {
return NULL; return nullptr;
} }
} }
return NULL; return nullptr;
} }
void appl::Buffer::hightlightGenerateLines(appl::DisplayHLData& _MData, const appl::Buffer::Iterator& _HLStart, int64_t _nbLines) { void appl::Buffer::hightlightGenerateLines(appl::DisplayHLData& _MData, const appl::Buffer::Iterator& _HLStart, int64_t _nbLines) {
_MData.posHLPass1 = 0; _MData.posHLPass1 = 0;
_MData.posHLPass2 = 0; _MData.posHLPass2 = 0;
if (NULL == m_highlight) { if (nullptr == m_highlight) {
return; return;
} }
//int64_t timeStart = ewol::getTime(); //int64_t timeStart = ewol::getTime();
@@ -909,38 +930,40 @@ void appl::Buffer::hightlightGenerateLines(appl::DisplayHLData& _MData, const ap
endSearch = m_HLDataPass1.size(); endSearch = m_HLDataPass1.size();
} }
int64_t kkk; int64_t kkk;
for (kkk = etk_max(startId, 0); kkk < endSearch; ++kkk) { for (kkk = std::max(startId, (int64_t)0); kkk < endSearch; ++kkk) {
// empty section : // empty section :
if (kkk == 0) { if (kkk == 0) {
if (HLStartPos < m_HLDataPass1[kkk].beginStart) { if (HLStartPos < m_HLDataPass1[kkk].start) {
APPL_VERBOSE(" == > (empty section 1 ) kkk=" << kkk << APPL_VERBOSE(" == > (empty section 1 ) kkk=" << kkk <<
" start=" << HLStartPos << " start=" << HLStartPos <<
" stop=" << m_HLDataPass1[kkk].beginStart ); " stop=" << m_HLDataPass1[kkk].start );
m_highlight->parse2(HLStartPos, m_highlight->parse2(HLStartPos,
m_HLDataPass1[kkk].beginStart, m_HLDataPass1[kkk].start,
_MData.HLData, _MData.HLData,
m_data); m_data);
} // else : nothing to do ... } // else : nothing to do ...
} else { } else {
APPL_VERBOSE(" == > (empty section 2 ) kkk=" << kkk << APPL_VERBOSE(" == > (empty section 2 ) kkk=" << kkk <<
" start=" << m_HLDataPass1[kkk-1].endStop << " start=" << m_HLDataPass1[kkk-1].stop <<
" stop=" << m_HLDataPass1[kkk].beginStart ); " stop=" << m_HLDataPass1[kkk].start );
m_highlight->parse2(m_HLDataPass1[kkk-1].endStop, m_highlight->parse2(m_HLDataPass1[kkk-1].stop,
m_HLDataPass1[kkk].beginStart, m_HLDataPass1[kkk].start,
_MData.HLData, _MData.HLData,
m_data); m_data);
} }
// under section : // under section :
//APPL_DEBUG(" == > (under section ) k="<<k<<" start="<<m_HLDataPass1[k].beginStart<<" stop="<<m_HLDataPass1[k].endStop << " subSectionOfID=" << 99999999); APPL_VERBOSE(" == > (under section ) kkk="<<kkk<<" start="<<m_HLDataPass1[kkk].start<<" stop="<<m_HLDataPass1[kkk].stop << " subSectionOfID=" << 99999999);
// TODO : ... m_highlight->parseSubElement(m_HLDataPass1[kkk],
_MData.HLData,
m_data);
} }
if (endSearch == (int32_t)m_HLDataPass1.size() ){ if (endSearch == (int32_t)m_HLDataPass1.size() ){
//if( k < (int32_t)m_HLDataPass1.size()) { //if( k < (int32_t)m_HLDataPass1.size()) {
if (m_HLDataPass1.size() != 0) { if (m_HLDataPass1.size() != 0) {
APPL_VERBOSE(" == > (empty section 3 ) kkk=" << kkk << APPL_VERBOSE(" == > (empty section 3 ) kkk=" << kkk <<
" start=" << m_HLDataPass1[kkk-1].endStop << " start=" << m_HLDataPass1[kkk-1].stop <<
" stop=" << HLStop ); " stop=" << HLStop );
m_highlight->parse2(m_HLDataPass1[kkk-1].endStop, m_highlight->parse2(m_HLDataPass1[kkk-1].stop,
HLStop, HLStop,
_MData.HLData, _MData.HLData,
m_data); m_data);
@@ -961,15 +984,15 @@ void appl::Buffer::hightlightGenerateLines(appl::DisplayHLData& _MData, const ap
appl::HighlightInfo* appl::Buffer::getElementColorAtPosition(appl::DisplayHLData& _MData, int64_t _pos) { appl::HighlightInfo* appl::Buffer::getElementColorAtPosition(appl::DisplayHLData& _MData, int64_t _pos) {
int64_t start = etk_max(0, _MData.posHLPass2-1); int64_t start = std::max((int64_t)0, _MData.posHLPass2-1);
for (int64_t iii=start; iii<(int32_t)_MData.HLData.size(); iii++) { for (int64_t iii=start; iii<(int32_t)_MData.HLData.size(); iii++) {
_MData.posHLPass2 = iii; _MData.posHLPass2 = iii;
if( _MData.HLData[iii].beginStart <= _pos if( _MData.HLData[iii].start <= _pos
&& _MData.HLData[iii].endStop > _pos) && _MData.HLData[iii].stop > _pos)
{ {
return &_MData.HLData[iii]; return &_MData.HLData[iii];
} }
if(_MData.HLData[iii].beginStart > _pos) { if(_MData.HLData[iii].start > _pos) {
return getElementColorAtPosition(_pos, _MData.posHLPass1); return getElementColorAtPosition(_pos, _MData.posHLPass1);
} }
} }
@@ -990,3 +1013,41 @@ uint32_t appl::Buffer::getCursorLinesId() {
} }
return line; return line;
} }
namespace etk {
template<> std::string to_string<std::shared_ptr<appl::Buffer>>(const std::shared_ptr<appl::Buffer>& _obj) {
if (_obj != nullptr) {
return _obj->getFileName();
}
return "";
}
template<> std::u32string to_u32string<std::shared_ptr<appl::Buffer>>(const std::shared_ptr<appl::Buffer>& _obj) {
return etk::to_u32string(etk::to_string(_obj));
}
template<> bool from_string<std::shared_ptr<appl::Buffer>>(std::shared_ptr<appl::Buffer>& _variableRet, const std::string& _value) {
if (_variableRet != nullptr) {
_variableRet->loadFile(_value);
return true;
}
return false;
}
template<> bool from_string<std::shared_ptr<appl::Buffer>>(std::shared_ptr<appl::Buffer>& _variableRet, const std::u32string& _value) {
return from_string(_variableRet, etk::to_string(_value));
}
template<> std::string to_string<appl::Buffer>(const appl::Buffer& _obj) {
return _obj.getFileName();
}
template<> std::u32string to_u32string<appl::Buffer>(const appl::Buffer& _obj) {
return etk::to_u32string(etk::to_string(_obj));
}
template<> bool from_string<appl::Buffer>(appl::Buffer& _variableRet, const std::string& _value) {
_variableRet.loadFile(_value);
return true;
}
template<> bool from_string<appl::Buffer>(appl::Buffer& _variableRet, const std::u32string& _value) {
return from_string(_variableRet, etk::to_string(_value));
}
};

View File

@@ -17,6 +17,7 @@
#include <ewol/widget/Widget.h> #include <ewol/widget/Widget.h>
#include <ewol/compositing/Text.h> #include <ewol/compositing/Text.h>
#include <appl/Highlight.h> #include <appl/Highlight.h>
#include <ewol/object/Signal.h>
namespace appl { namespace appl {
@@ -40,7 +41,7 @@ namespace appl {
*/ */
Iterator(): Iterator():
m_current(0), m_current(0),
m_data(NULL), m_data(nullptr),
m_value(u32char::Null) { m_value(u32char::Null) {
// nothing to do ... // nothing to do ...
}; };
@@ -70,7 +71,7 @@ namespace appl {
*/ */
virtual ~Iterator() { virtual ~Iterator() {
m_current = 0; m_current = 0;
m_data = NULL; m_data = nullptr;
m_value = u32char::Null; m_value = u32char::Null;
}; };
/** /**
@@ -78,10 +79,10 @@ namespace appl {
* @return true if the element is present in buffer * @return true if the element is present in buffer
*/ */
operator bool () const { operator bool () const {
if (m_data == NULL) { if (m_data == nullptr) {
return false; return false;
} }
if (m_current >= m_data->m_data.size()) { if (m_current >= (int64_t)m_data->m_data.size()) {
return false; return false;
} }
if (m_current < 0) { if (m_current < 0) {
@@ -94,14 +95,14 @@ namespace appl {
* @return true if the element is present in buffer * @return true if the element is present in buffer
*/ */
operator int64_t () const { operator int64_t () const {
if (m_data == NULL) { if (m_data == nullptr) {
return 0; return 0;
} }
if (m_current < 0) { if (m_current < 0) {
return 0; return 0;
} }
if (m_current > m_data->m_data.size()) { if (m_current > (int64_t)m_data->m_data.size()) {
return m_data->m_data.size(); return (int64_t)m_data->m_data.size();
} }
return m_current; return m_current;
}; };
@@ -217,13 +218,13 @@ namespace appl {
* @return The requested position. * @return The requested position.
*/ */
int64_t getPos() const { int64_t getPos() const {
if (m_data == NULL) { if (m_data == nullptr) {
return 0; return 0;
} }
if (m_current < 0) { if (m_current < 0) {
return 0; return 0;
} }
if (m_current >= m_data->m_data.size()) { if (m_current >= (int64_t)m_data->m_data.size()) {
return m_data->m_data.size()-1; return m_data->m_data.size()-1;
} }
return m_current; return m_current;
@@ -288,12 +289,15 @@ namespace appl {
friend class Buffer; friend class Buffer;
}; };
public: public:
static const char* const eventIsModify; ewol::object::Signal<void> signalIsModify;
static const char* const eventIsSave; ewol::object::Signal<void> signalIsSave;
static const char* const eventSelectChange; ewol::object::Signal<void> signalSelectChange;
static const char* const eventChangeName; ewol::object::Signal<void> signalChangeName;
public: protected:
Buffer(); Buffer();
void init();
public:
DECLARE_FACTORY(Buffer);
virtual ~Buffer(); virtual ~Buffer();
private: private:
bool m_hasFileName; //!< when new file, the buffer has no name ==> but it might be reference with a single name ... bool m_hasFileName; //!< when new file, the buffer has no name ==> but it might be reference with a single name ...
@@ -302,14 +306,14 @@ namespace appl {
/** /**
* @brief get the curent filename of the Buffer * @brief get the curent filename of the Buffer
*/ */
const std::string& getFileName() { const std::string& getFileName() const {
return m_fileName; return m_fileName;
} }
/** /**
* @brief Check if the buffer has a real filename. * @brief Check if the buffer has a real filename.
* @return the status of the existance of a name. * @return the status of the existance of a name.
*/ */
bool hasFileName() { bool hasFileName() const {
return m_hasFileName; return m_hasFileName;
} }
/** /**
@@ -344,9 +348,9 @@ namespace appl {
*/ */
void setModification(bool _status); void setModification(bool _status);
protected: protected:
etk::Buffer m_data; //!< copy of the file buffer std::string m_data; //!< copy of the file buffer
public: public:
etk::Buffer& getData() { std::string& getData() {
return m_data; return m_data;
}; };
protected: protected:
@@ -381,14 +385,14 @@ namespace appl {
* @return position of the start selection. * @return position of the start selection.
*/ */
int64_t getStartSelectionPos() { int64_t getStartSelectionPos() {
return etk_min(m_cursorPos, m_cursorSelectPos); return std::min(m_cursorPos, m_cursorSelectPos);
} }
/** /**
* @brief Get the Stop position of the selection. * @brief Get the Stop position of the selection.
* @return position of the stop selection. * @return position of the stop selection.
*/ */
int64_t getStopSelectionPos() { int64_t getStopSelectionPos() {
return etk_max(m_cursorPos, m_cursorSelectPos); return std::max(m_cursorPos, m_cursorSelectPos);
} }
protected: protected:
float m_cursorPreferredCol; //!< position of the cursor when up and down is done. float m_cursorPreferredCol; //!< position of the cursor when up and down is done.
@@ -588,7 +592,7 @@ namespace appl {
protected: protected:
std::string m_highlightType; //!< Name of the highlight type std::string m_highlightType; //!< Name of the highlight type
ewol::object::Shared<appl::Highlight> m_highlight; //!< internal link with the Highlight system std::shared_ptr<appl::Highlight> m_highlight; //!< internal link with the Highlight system
std::vector<appl::HighlightInfo> m_HLDataPass1; //!< colorisation position in the current buffer pass 1 std::vector<appl::HighlightInfo> m_HLDataPass1; //!< colorisation position in the current buffer pass 1
public: public:
/** /**

View File

@@ -19,31 +19,43 @@
#define __class__ "BufferManager" #define __class__ "BufferManager"
appl::BufferManager::BufferManager() : appl::BufferManager::BufferManager() :
ewol::Resource("???BufferManager???"), signalNewBuffer(*this, "new-buffer"),
m_bufferSelected(NULL) { signalSelectFile(*this, "select-buffer"),
signalTextSelectionChange(*this, "text-selection-change"),
signalRemoveBuffer(*this, "remove-buffer") {
addObjectType("appl::BufferManager"); addObjectType("appl::BufferManager");
} }
void appl::BufferManager::init(const std::string& _uniqueName) {
ewol::Resource::init(_uniqueName);
}
appl::BufferManager::~BufferManager() { appl::BufferManager::~BufferManager() {
m_list.clear(); m_list.clear();
} }
ewol::object::Shared<appl::Buffer> appl::BufferManager::createNewBuffer() { std::shared_ptr<appl::Buffer> appl::BufferManager::createNewBuffer() {
ewol::object::Shared<appl::Buffer> tmp = ewol::object::makeShared(new appl::Buffer()); std::shared_ptr<appl::Buffer> tmp = appl::Buffer::create();
if (tmp == NULL) { if (tmp == nullptr) {
APPL_ERROR("Can not allocate the Buffer (empty)."); APPL_ERROR("Can not allocate the Buffer (empty).");
return NULL; return nullptr;
} }
tmp->setParent(shared_from_this());
m_list.push_back(tmp); m_list.push_back(tmp);
sendMultiCast(appl::MsgSelectNewFile, tmp->getFileName()); APPL_INFO("Create a new Buffer");
signalNewBuffer.emit(tmp->getFileName());
APPL_INFO("Create a new Buffer (done)");
APPL_INFO("select Buffer");
signalSelectFile.emit(tmp->getFileName());
APPL_INFO("select Buffer (done)");
return tmp; return tmp;
} }
ewol::object::Shared<appl::Buffer> appl::BufferManager::get(const std::string& _fileName, bool _createIfNeeded) { std::shared_ptr<appl::Buffer> appl::BufferManager::get(const std::string& _fileName, bool _createIfNeeded) {
APPL_INFO("get(" << _fileName << "," << _createIfNeeded << ")"); APPL_INFO("get('" << _fileName << "'," << _createIfNeeded << ")");
for (auto &it : m_list) { for (auto &it : m_list) {
if (it == NULL) { if (it == nullptr) {
continue; continue;
} }
if (it->getFileName() == _fileName) { if (it->getFileName() == _fileName) {
@@ -54,39 +66,36 @@ ewol::object::Shared<appl::Buffer> appl::BufferManager::get(const std::string& _
if (etk::FSNodeGetType(_fileName) == etk::FSN_FOLDER) { if (etk::FSNodeGetType(_fileName) == etk::FSN_FOLDER) {
APPL_WARNING("try open a folder : " << _fileName); APPL_WARNING("try open a folder : " << _fileName);
APPL_CRITICAL("plop"); APPL_CRITICAL("plop");
return NULL; return nullptr;
} }
ewol::object::Shared<appl::Buffer> tmp = ewol::object::makeShared(new appl::Buffer()); std::shared_ptr<appl::Buffer> tmp = appl::Buffer::create();
if (tmp == NULL) { if (tmp == nullptr) {
APPL_ERROR("Can not allocate the Buffer class : " << _fileName); APPL_ERROR("Can not allocate the Buffer class : " << _fileName);
return NULL; return nullptr;
} }
tmp->setParent(shared_from_this());
tmp->loadFile(_fileName); tmp->loadFile(_fileName);
m_list.push_back(tmp); m_list.push_back(tmp);
APPL_INFO("Creata a open Buffer");
signalNewBuffer.emit(tmp->getFileName());
APPL_INFO("Creata a open Buffer (done)");
return tmp; return tmp;
} }
return NULL; return nullptr;
} }
void appl::BufferManager::setBufferSelected(ewol::object::Shared<appl::Buffer> _bufferSelected) {
void appl::BufferManager::setBufferSelected(std::shared_ptr<appl::Buffer> _bufferSelected) {
m_bufferSelected = _bufferSelected; m_bufferSelected = _bufferSelected;
sendMultiCast(appl::MsgSelectChange, ""); if (m_bufferSelected == nullptr) {
APPL_ERROR("select a NULL buffer ...");
return;
}
APPL_INFO("Set buffer selected");
//signalSelectFile.emit(m_bufferSelected->getName());
APPL_INFO("Set buffer selected (done)");
} }
void appl::BufferManager::onObjectRemove(const ewol::object::Shared<ewol::Object>& _object) { std::shared_ptr<appl::Buffer> appl::BufferManager::get(int32_t _id) {
ewol::Resource::onObjectRemove(_object);
if (m_bufferSelected == _object) {
setBufferSelected(NULL);
}
for (auto it(m_list.begin()); it!=m_list.end(); ++it) {
if (*it != _object) {
continue;
}
m_list.erase(it);
it = m_list.begin();
}
}
ewol::object::Shared<appl::Buffer> appl::BufferManager::get(int32_t _id) {
int32_t id = 0; int32_t id = 0;
for (auto &it : m_list) { for (auto &it : m_list) {
if (id == _id) { if (id == _id) {
@@ -111,31 +120,42 @@ bool appl::BufferManager::exist(const std::string& _fileName) {
void appl::BufferManager::open(const std::string& _fileName) { void appl::BufferManager::open(const std::string& _fileName) {
if (exist(_fileName) == true) { if (exist(_fileName) == true) {
APPL_WARNING(" the element '" << _fileName << "' already exist ... just reselect it ...");
signalSelectFile.emit(_fileName);
return; return;
} }
if (get(_fileName, true) == NULL) { if (get(_fileName, true) == nullptr) {
APPL_ERROR("Error get '" << _fileName << "' ... ");
return; return;
} }
sendMultiCast(appl::MsgSelectNewFile, _fileName); signalSelectFile.emit(_fileName);
} }
void appl::BufferManager::onReceiveMessage(const ewol::object::Message& _msg) {
APPL_DEBUG("receive message !!! " << _msg);
}
ewol::object::Shared<appl::BufferManager> appl::BufferManager::keep() { void appl::BufferManager::requestDestroyFromChild(const std::shared_ptr<Object>& _child) {
ewol::object::Shared<appl::BufferManager> object = ewol::dynamic_pointer_cast<appl::BufferManager>(getManager().localKeep("???BufferManager???")); APPL_WARNING("Buffer request a close...");
if (NULL != object) { bool find = false;
return object; int32_t newValue = -1;
auto it = m_list.begin();
while(it != m_list.end()) {
if (*it == nullptr) {
it = m_list.erase(it);
continue;
} }
// this element create a new one every time .... if (*it == _child) {
EWOL_INFO("CREATE : appl::BufferManager: ???BufferManager???"); it = m_list.erase(it);
object = ewol::object::makeShared(new appl::BufferManager()); find = true;
if (NULL == object) { break;
EWOL_ERROR("allocation error of a resource : ???BufferManager???"); }
return NULL; newValue++;
++it;
}
if (find == true) {
signalRemoveBuffer.emit(std::dynamic_pointer_cast<appl::Buffer>(_child));
}
if (m_bufferSelected == _child) {
APPL_ERROR("is selected");
signalSelectFile.emit("");
m_bufferSelected = nullptr;
} }
getManager().localAdd(object);
return object;
} }

View File

@@ -17,12 +17,19 @@
namespace appl { namespace appl {
class BufferManager : public ewol::Resource { class BufferManager : public ewol::Resource {
public:
ewol::object::Signal<std::string> signalNewBuffer;
ewol::object::Signal<std::string> signalSelectFile;
ewol::object::Signal<void> signalTextSelectionChange;
ewol::object::Signal<std::shared_ptr<appl::Buffer>> signalRemoveBuffer;
protected: protected:
BufferManager(); BufferManager();
void init(const std::string& _uniqueName);
public: public:
DECLARE_RESOURCE_SINGLE_FACTORY(BufferManager, "???Buffer_Manager???");
virtual ~BufferManager(); virtual ~BufferManager();
private: private:
std::list<ewol::object::Owner<appl::Buffer>> m_list; // list of all buffer curently open std::list<std::shared_ptr<appl::Buffer>> m_list; // list of all buffer curently open
public: public:
/** /**
* @brief Get a specific buffer with his name (can create a new buffer). * @brief Get a specific buffer with his name (can create a new buffer).
@@ -30,7 +37,7 @@ namespace appl {
* @param[in] _createIfNeeded Create the buffer if not existed. * @param[in] _createIfNeeded Create the buffer if not existed.
* @return a pointer on the buffer * @return a pointer on the buffer
*/ */
ewol::object::Shared<appl::Buffer> get(const std::string& _fileName, bool _createIfNeeded=false); std::shared_ptr<appl::Buffer> get(const std::string& _fileName, bool _createIfNeeded=false);
/** /**
* @brief Load a specific file, event if it not existed: * @brief Load a specific file, event if it not existed:
* @param[in] _fileName Name of the file to open or create. * @param[in] _fileName Name of the file to open or create.
@@ -54,38 +61,29 @@ namespace appl {
* @param[in] _id Number of buffer * @param[in] _id Number of buffer
* @return pointer on the buffer * @return pointer on the buffer
*/ */
ewol::object::Shared<appl::Buffer> get(int32_t _id); std::shared_ptr<appl::Buffer> get(int32_t _id);
/** /**
* @brief Create a new buffer empty. * @brief Create a new buffer empty.
* @return Created buffer or NULL. * @return Created buffer or nullptr.
*/ */
ewol::object::Shared<appl::Buffer> createNewBuffer(); std::shared_ptr<appl::Buffer> createNewBuffer();
private: private:
ewol::object::Shared<appl::Buffer> m_bufferSelected; std::shared_ptr<appl::Buffer> m_bufferSelected;
public: public:
/** /**
* @brief Set the current buffer selected * @brief Set the current buffer selected
* @param[in] _bufferSelected Pointer on the buffer selected * @param[in] _bufferSelected Pointer on the buffer selected
*/ */
void setBufferSelected(ewol::object::Shared<appl::Buffer> _bufferSelected); void setBufferSelected(std::shared_ptr<appl::Buffer> _bufferSelected);
/** /**
* @brief Get the current buffer selected * @brief Get the current buffer selected
* @return Pointer on the buffer selected * @return Pointer on the buffer selected
*/ */
ewol::object::Shared<appl::Buffer> getBufferSelected() { std::shared_ptr<appl::Buffer> getBufferSelected() {
return m_bufferSelected; return m_bufferSelected;
}; };
public: // herited function private:
void onReceiveMessage(const ewol::object::Message& _msg); void requestDestroyFromChild(const std::shared_ptr<Object>& _child);
void onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject);
public: // resource manager
/**
* @brief keep the resource pointer.
* @note Never free this pointer by your own...
* @param[in] _filename Name of the configuration file.
* @return pointer on the resource or NULL if an error occured.
*/
static ewol::object::Shared<appl::BufferManager> keep();
}; };
}; };

View File

@@ -18,9 +18,12 @@
appl::GlyphPainting::GlyphPainting(const std::string& _filename) : appl::GlyphPainting::GlyphPainting() {
ewol::Resource(_filename) {
addObjectType("appl::GlyphPainting"); addObjectType("appl::GlyphPainting");
}
void appl::GlyphPainting::init(const std::string& _filename) {
ewol::Resource::init(_filename);
EWOL_DEBUG("SFP : load \"" << _filename << "\""); EWOL_DEBUG("SFP : load \"" << _filename << "\"");
reload(); reload();
} }
@@ -43,13 +46,13 @@ void appl::GlyphPainting::reload() {
APPL_DEBUG(tmppppp); APPL_DEBUG(tmppppp);
*/ */
ejson::Array* baseArray = doc.getArray("ednColor"); ejson::Array* baseArray = doc.getArray("ednColor");
if (baseArray == NULL) { if (baseArray == nullptr) {
APPL_ERROR("Can not get basic array : 'ednColor'"); APPL_ERROR("Can not get basic array : 'ednColor'");
return; return;
} }
for (size_t iii = 0; iii < baseArray->size(); ++iii) { for (size_t iii = 0; iii < baseArray->size(); ++iii) {
ejson::Object* tmpObj = baseArray->getObject(iii); ejson::Object* tmpObj = baseArray->getObject(iii);
if (tmpObj == NULL) { if (tmpObj == nullptr) {
APPL_DEBUG(" can not get object in 'ednColor' id=" << iii); APPL_DEBUG(" can not get object in 'ednColor' id=" << iii);
continue; continue;
} }
@@ -94,20 +97,3 @@ int32_t appl::GlyphPainting::request(const std::string& _name) {
m_list.push_back(tmpDeco); m_list.push_back(tmpDeco);
return m_list.size()-1; return m_list.size()-1;
} }
ewol::object::Shared<appl::GlyphPainting> appl::GlyphPainting::keep(const std::string& _filename) {
//EWOL_INFO("KEEP : appl::GlyphPainting : file : \"" << _filename << "\"");
ewol::object::Shared<appl::GlyphPainting> object = ewol::dynamic_pointer_cast<appl::GlyphPainting>(getManager().localKeep(_filename));
if (NULL != object) {
return object;
}
// this element create a new one every time ....
EWOL_INFO("CREATE : appl::GlyphPainting : file : \"" << _filename << "\"");
object = ewol::object::makeShared(new appl::GlyphPainting(_filename));
if (NULL == object) {
EWOL_ERROR("allocation error of a resource : ??GlyphPainting??");
return NULL;
}
getManager().localAdd(object);
return object;
}

View File

@@ -19,8 +19,10 @@ namespace appl {
private: private:
std::vector<appl::GlyphDecoration> m_list; std::vector<appl::GlyphDecoration> m_list;
protected: protected:
GlyphPainting(const std::string& _filename); GlyphPainting();
void init(const std::string& _filename);
public: public:
DECLARE_RESOURCE_NAMED_FACTORY(GlyphPainting);
virtual ~GlyphPainting(); virtual ~GlyphPainting();
public: public:
/** /**
@@ -49,14 +51,6 @@ namespace appl {
const appl::GlyphDecoration& operator[] (int32_t _pos) const { const appl::GlyphDecoration& operator[] (int32_t _pos) const {
return m_list[_pos]; return m_list[_pos];
} }
public:
/**
* @brief keep the resource pointer.
* @note Never free this pointer by your own...
* @param[in] _filename Name of the configuration file.
* @return pointer on the resource or NULL if an error occured.
*/
static ewol::object::Shared<appl::GlyphPainting> keep(const std::string& _filename);
}; };
}; };

View File

@@ -17,20 +17,15 @@
#undef __class__ #undef __class__
#define __class__ "BufferView" #define __class__ "BufferView"
static void SortElementList(std::vector<appl::dataBufferStruct*>& _list) { // TODO : write it better
std::vector<appl::dataBufferStruct *> tmpList = _list; static void SortElementList(std::vector<appl::dataBufferStruct>& _list) {
std::vector<appl::dataBufferStruct> tmpList = _list;
_list.clear(); _list.clear();
for(size_t iii=0; iii<tmpList.size(); iii++) { for(size_t iii=0; iii<tmpList.size(); iii++) {
if (NULL == tmpList[iii]) {
continue;
}
size_t findPos = 0; size_t findPos = 0;
for(size_t jjj=0; jjj<_list.size(); jjj++) { for(size_t jjj=0; jjj<_list.size(); jjj++) {
//EWOL_DEBUG("compare : \""<<*tmpList[iii] << "\" and \"" << *m_listDirectory[jjj] << "\""); //EWOL_DEBUG("compare : \""<<*tmpList[iii] << "\" and \"" << *m_listDirectory[jjj] << "\"");
if (_list[jjj] == NULL) { if (tmpList[iii].m_bufferName.getNameFile() > _list[jjj].m_bufferName.getNameFile()) {
continue;
}
if (tmpList[iii]->m_bufferName.getNameFile() > _list[jjj]->m_bufferName.getNameFile()) {
findPos = jjj+1; findPos = jjj+1;
} }
} }
@@ -43,18 +38,12 @@ BufferView::BufferView() :
m_openOrderMode(false) { m_openOrderMode(false) {
addObjectType("appl::BufferView"); addObjectType("appl::BufferView");
setCanHaveFocus(true); setCanHaveFocus(true);
registerMultiCast(ednMsgBufferListChange);
registerMultiCast(ednMsgBufferState);
registerMultiCast(ednMsgBufferId);
registerMultiCast(appl::MsgSelectNewFile);
registerMultiCast(appl::MsgSelectChange);
registerMultiCast(appl::MsgNameChange);
m_selectedID = -1; m_selectedID = -1;
m_selectedIdRequested = -1; m_selectedIdRequested = -1;
// load buffer manager: // load buffer manager:
m_bufferManager = appl::BufferManager::keep(); m_bufferManager = appl::BufferManager::create();
// load color properties // load color properties
m_paintingProperties = appl::GlyphPainting::keep("THEME:COLOR:bufferList.json"); m_paintingProperties = appl::GlyphPainting::create("THEME:COLOR:bufferList.json");
// get all id properties ... // get all id properties ...
m_colorBackground1 = m_paintingProperties->request("backgroung1"); m_colorBackground1 = m_paintingProperties->request("backgroung1");
m_colorBackground2 = m_paintingProperties->request("backgroung2"); m_colorBackground2 = m_paintingProperties->request("backgroung2");
@@ -63,80 +52,81 @@ BufferView::BufferView() :
m_colorTextModify = m_paintingProperties->request("textModify"); m_colorTextModify = m_paintingProperties->request("textModify");
} }
void BufferView::init() {
ewol::widget::List::init();
if (m_bufferManager != nullptr) {
m_bufferManager->signalNewBuffer.bind(shared_from_this(), &BufferView::onCallbackNewBuffer);
m_bufferManager->signalSelectFile.bind(shared_from_this(), &BufferView::onCallbackselectNewFile);
m_bufferManager->signalRemoveBuffer.bind(shared_from_this(), &BufferView::onCallbackBufferRemoved);
}
}
BufferView::~BufferView() { BufferView::~BufferView() {
removeAllElement(); removeAllElement();
} }
void BufferView::removeAllElement() { void BufferView::removeAllElement() {
for(auto &it : m_list) {
delete(it);
it = NULL;
}
m_list.clear(); m_list.clear();
} }
void BufferView::insertAlphabetic(appl::dataBufferStruct* _dataStruct, bool _selectNewPosition) { void BufferView::insertAlphabetic(const appl::dataBufferStruct& _dataStruct, bool _selectNewPosition) {
if (_dataStruct == NULL) {
return;
}
// alphabetical order: // alphabetical order:
for (size_t iii = 0; iii < m_list.size(); ++iii) { for (size_t iii = 0; iii < m_list.size(); ++iii) {
if (m_list[iii] == NULL) { if (etk::tolower(m_list[iii].m_bufferName.getNameFile()) > etk::tolower(_dataStruct.m_bufferName.getNameFile())) {
continue;
}
if (std::tolower(m_list[iii]->m_bufferName.getNameFile()) > std::tolower(_dataStruct->m_bufferName.getNameFile())) {
m_list.insert(m_list.begin() + iii, _dataStruct); m_list.insert(m_list.begin() + iii, _dataStruct);
_dataStruct = NULL;
if (_selectNewPosition == true) { if (_selectNewPosition == true) {
m_selectedID = iii; m_selectedID = iii;
} }
break; return;
} }
} }
if (_dataStruct != NULL) {
m_list.push_back(_dataStruct); m_list.push_back(_dataStruct);
if (_selectNewPosition == true) { if (_selectNewPosition == true) {
m_selectedID = m_list.size()-1; m_selectedID = m_list.size()-1;
} }
} }
}
void BufferView::onCallbackNewBuffer(const std::string& _value) {
void BufferView::onReceiveMessage(const ewol::object::Message& _msg) { std::shared_ptr<appl::Buffer> buffer = m_bufferManager->get(_value);
ewol::widget::List::onReceiveMessage(_msg); if (buffer == nullptr) {
if (_msg.getMessage() == appl::MsgSelectNewFile) { APPL_ERROR("event on element nor exist : " << _value);
ewol::object::Shared<appl::Buffer> buffer = m_bufferManager->get(_msg.getData());
if (buffer == NULL) {
APPL_ERROR("event on element nor exist : " << _msg.getData());
return;
}
buffer->registerOnEvent(this, appl::Buffer::eventIsSave);
buffer->registerOnEvent(this, appl::Buffer::eventIsModify);
buffer->registerOnEvent(this, appl::Buffer::eventChangeName);
appl::dataBufferStruct* tmp = new appl::dataBufferStruct(_msg.getData(), buffer);
if (tmp == NULL) {
APPL_ERROR("Allocation error of the tmp buffer list element");
return; return;
} }
buffer->signalIsSave.bind(shared_from_this(), &BufferView::onCallbackIsSave);
buffer->signalIsModify.bind(shared_from_this(), &BufferView::onCallbackIsModify);
buffer->signalChangeName.bind(shared_from_this(), &BufferView::onCallbackChangeName);
appl::dataBufferStruct tmp(_value, buffer);
if (m_openOrderMode == true) { if (m_openOrderMode == true) {
m_list.push_back(tmp); m_list.push_back(tmp);
} else { } else {
insertAlphabetic(tmp); insertAlphabetic(tmp);
} }
markToRedraw(); markToRedraw();
return;
} }
if (_msg.getMessage() == appl::Buffer::eventChangeName) {
for (size_t iii = 0; iii < m_list.size(); ++iii) { // TODO : Review this callback with the real shared_ptr on the buffer ...
if (m_list[iii] == NULL) { void BufferView::onCallbackselectNewFile(const std::string& _value) {
m_selectedID = -1;
for (size_t iii=0; iii<m_list.size(); iii++) {
if (m_list[iii].m_buffer == nullptr) {
continue; continue;
} }
if (m_list[iii]->m_bufferName != m_list[iii]->m_buffer->getFileName()) { if (m_list[iii].m_buffer->getFileName() != _value) {
m_list[iii]->m_bufferName = m_list[iii]->m_buffer->getFileName(); continue;
}
m_selectedID = iii;
break;
}
markToRedraw();
}
void BufferView::onCallbackChangeName() {
for (size_t iii = 0; iii < m_list.size(); ++iii) {
if (m_list[iii].m_bufferName != m_list[iii].m_buffer->getFileName()) {
m_list[iii].m_bufferName = m_list[iii].m_buffer->getFileName();
if (m_openOrderMode == false) { if (m_openOrderMode == false) {
// re-order the fine in the correct position // re-order the fine in the correct position
appl::dataBufferStruct* tmp = m_list[iii]; appl::dataBufferStruct tmp = m_list[iii];
m_list[iii] = NULL;
m_list.erase(m_list.begin() + iii); m_list.erase(m_list.begin() + iii);
insertAlphabetic(tmp, ((int64_t)iii == m_selectedID)); insertAlphabetic(tmp, ((int64_t)iii == m_selectedID));
break; break;
@@ -144,96 +134,27 @@ void BufferView::onReceiveMessage(const ewol::object::Message& _msg) {
} }
} }
markToRedraw(); markToRedraw();
return;
}
if (_msg.getMessage() == appl::Buffer::eventIsSave) {
markToRedraw();
return;
}
if (_msg.getMessage() == appl::Buffer::eventIsModify) {
markToRedraw();
return;
}
APPL_DEBUG("message : " << _msg);
if (_msg.getMessage() == appl::MsgSelectChange) {
m_selectedID = -1;
ewol::object::Shared<appl::Buffer> tmpBuffer;
if (m_bufferManager != NULL) {
tmpBuffer = m_bufferManager->getBufferSelected();
}
if (tmpBuffer != NULL) {
for (size_t iii=0; iii<m_list.size(); iii++) {
if (m_list[iii] == NULL) {
continue;
}
if (m_list[iii]->m_buffer != tmpBuffer) {
continue;
}
m_selectedID = iii;
break;
}
}
markToRedraw();
return;
}
if (_msg.getMessage() == ednMsgBufferListChange) {
// clean The list
removeAllElement();
// get all the buffer name and properties:
size_t nbBufferOpen = 0; // BufferManager::size();
for (size_t iii=0; iii<nbBufferOpen; iii++) {
/*
if (BufferManager::exist(iii)) {
BufferText* tmpBuffer = BufferManager::get(iii);
if (NULL != tmpBuffer) {
bool isModify = tmpBuffer->isModify();
etk::FSNode name = tmpBuffer->getFileName();
appl::dataBufferStruct* tmpElement = new appl::dataBufferStruct(name, iii, isModify);
if (NULL != tmpElement) {
m_list.push_back(tmpElement);
} else {
APPL_ERROR("Allocation error of the tmp buffer list element");
}
}
}
*/
}
if (true == globals::OrderTheBufferList() ) {
SortElementList(m_list);
}
markToRedraw();
}else if (_msg.getMessage() == ednMsgBufferId) {
m_selectedIdRequested = 0; //BufferManager::getSelected();
markToRedraw();
}else if (_msg.getMessage() == ednMsgBufferState) {
// update list of modify section ...
for (auto &it : m_list) {
if (it != nullptr) {
//it->m_isModify = BufferManager::get(it->m_bufferID)->isModify();
}
}
markToRedraw();
}
} }
void BufferView::onObjectRemove(const ewol::object::Shared<ewol::Object>& _object) { void BufferView::onCallbackBufferRemoved(const std::shared_ptr<appl::Buffer>& _buffer) {
ewol::widget::List::onObjectRemove(_object); APPL_ERROR("request remove buffer:");
auto it(m_list.begin()); auto it = m_list.begin();
while (it != m_list.end()) { while (it != m_list.end()) {
if ( *it != nullptr if (it->m_buffer == _buffer) {
&& (*it)->m_buffer == _object) { it = m_list.erase(it);
m_list.erase(it); m_selectedID = -1;
markToRedraw();
it = m_list.begin();
} else { } else {
++it; ++it;
} }
} }
if (m_bufferManager == _object) { markToRedraw();
m_bufferManager.reset();
} }
void BufferView::onCallbackIsSave() {
markToRedraw();
}
void BufferView::onCallbackIsModify() {
markToRedraw();
} }
etk::Color<> BufferView::getBasicBG() { etk::Color<> BufferView::getBasicBG() {
return (*m_paintingProperties)[m_colorBackground1].getForeground(); return (*m_paintingProperties)[m_colorBackground1].getForeground();
@@ -254,12 +175,11 @@ uint32_t BufferView::getNuberOfRaw() {
bool BufferView::getElement(int32_t _colomn, int32_t _raw, std::string& _myTextToWrite, etk::Color<>& _fg, etk::Color<>& _bg) { bool BufferView::getElement(int32_t _colomn, int32_t _raw, std::string& _myTextToWrite, etk::Color<>& _fg, etk::Color<>& _bg) {
if( _raw >= 0 if( _raw >= 0
&& _raw<(int64_t)m_list.size() && _raw<(int64_t)m_list.size() ) {
&& m_list[_raw] != nullptr) { _myTextToWrite = m_list[_raw].m_bufferName.getNameFile();
_myTextToWrite = m_list[_raw]->m_bufferName.getNameFile();
if ( m_list[_raw]->m_buffer != NULL if ( m_list[_raw].m_buffer != nullptr
&& m_list[_raw]->m_buffer->isModify() == false) { && m_list[_raw].m_buffer->isModify() == false) {
_fg = (*m_paintingProperties)[m_colorTextNormal].getForeground(); _fg = (*m_paintingProperties)[m_colorTextNormal].getForeground();
} else { } else {
_fg = (*m_paintingProperties)[m_colorTextModify].getForeground(); _fg = (*m_paintingProperties)[m_colorTextModify].getForeground();
@@ -279,17 +199,16 @@ bool BufferView::getElement(int32_t _colomn, int32_t _raw, std::string& _myTextT
return true; return true;
} }
bool BufferView::onItemEvent(int32_t _IdInput, enum ewol::key::status _typeEvent, int32_t _colomn, int32_t _raw, float _x, float _y) bool BufferView::onItemEvent(int32_t _IdInput, enum ewol::key::status _typeEvent, int32_t _colomn, int32_t _raw, float _x, float _y) {
{
if (1 == _IdInput && _typeEvent == ewol::key::statusSingle) { if (1 == _IdInput && _typeEvent == ewol::key::statusSingle) {
APPL_INFO("Event on List : IdInput=" << _IdInput << " colomn=" << _colomn << " raw=" << _raw ); APPL_INFO("Event on List : IdInput=" << _IdInput << " colomn=" << _colomn << " raw=" << _raw );
if( _raw >= 0 if( _raw >= 0
&& _raw<(int64_t)m_list.size() && _raw<(int64_t)m_list.size()) {
&& NULL != m_list[_raw]) { if (m_list[_raw].m_buffer != nullptr) {
if (m_list[_raw]->m_buffer != NULL) { if (m_bufferManager != nullptr) {
sendMultiCast(appl::MsgSelectNewFile, m_list[_raw]->m_buffer->getFileName()); APPL_INFO("Select file :" << m_list[_raw].m_buffer->getFileName() << " in list");
m_selectedID = _raw; m_bufferManager->open(m_list[_raw].m_buffer->getFileName());
markToRedraw(); }
return true; return true;
} }
} }

View File

@@ -19,8 +19,8 @@ namespace appl {
class dataBufferStruct { class dataBufferStruct {
public: public:
etk::FSNode m_bufferName; etk::FSNode m_bufferName;
ewol::object::Shared<appl::Buffer> m_buffer; std::shared_ptr<appl::Buffer> m_buffer;
dataBufferStruct(const std::string& _bufferName, const ewol::object::Shared<appl::Buffer>& _buffer) : dataBufferStruct(const std::string& _bufferName, const std::shared_ptr<appl::Buffer>& _buffer) :
m_bufferName(_bufferName), m_bufferName(_bufferName),
m_buffer(_buffer) { m_buffer(_buffer) {
@@ -31,9 +31,9 @@ namespace appl {
class BufferView : public ewol::widget::List { class BufferView : public ewol::widget::List {
private: private:
ewol::object::Shared<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager std::shared_ptr<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
private: private:
ewol::object::Shared<appl::GlyphPainting> m_paintingProperties; //!< element painting property std::shared_ptr<appl::GlyphPainting> m_paintingProperties; //!< element painting property
int32_t m_colorBackground1; int32_t m_colorBackground1;
int32_t m_colorBackground2; int32_t m_colorBackground2;
int32_t m_colorBackgroundSelect; int32_t m_colorBackgroundSelect;
@@ -42,19 +42,19 @@ class BufferView : public ewol::widget::List {
private: private:
int32_t m_selectedIdRequested; int32_t m_selectedIdRequested;
int32_t m_selectedID; int32_t m_selectedID;
std::vector<appl::dataBufferStruct*> m_list; std::vector<appl::dataBufferStruct> m_list;
/** /**
* @brief Insert the element in the alphabetic order. * @brief Insert the element in the alphabetic order.
* @param[in] _dataStruct element to add. * @param[in] _dataStruct element to add.
*/ */
void insertAlphabetic(appl::dataBufferStruct* _dataStruct, bool _selectNewPosition = false); void insertAlphabetic(const appl::dataBufferStruct& _dataStruct, bool _selectNewPosition = false);
public: protected:
// Constructeur // Constructeur
BufferView(); BufferView();
void init();
public:
DECLARE_FACTORY(BufferView);
virtual ~BufferView(); virtual ~BufferView();
// Derived function
virtual void onReceiveMessage(const ewol::object::Message& _msg);
virtual void onObjectRemove(const ewol::object::Shared<ewol::Object>& _object);
private: private:
bool m_openOrderMode; //!< true if the order is the opening order mode, otherwise, Alphabetic order bool m_openOrderMode; //!< true if the order is the opening order mode, otherwise, Alphabetic order
protected: protected:
@@ -67,6 +67,13 @@ class BufferView : public ewol::widget::List {
virtual uint32_t getNuberOfRaw(); virtual uint32_t getNuberOfRaw();
virtual bool getElement(int32_t _colomn, int32_t _raw, std::string& _myTextToWrite, etk::Color<>& _fg, etk::Color<>& _bg); virtual bool getElement(int32_t _colomn, int32_t _raw, std::string& _myTextToWrite, etk::Color<>& _fg, etk::Color<>& _bg);
virtual bool onItemEvent(int32_t _IdInput, enum ewol::key::status _typeEvent, int32_t _colomn, int32_t _raw, float _x, float _y); virtual bool onItemEvent(int32_t _IdInput, enum ewol::key::status _typeEvent, int32_t _colomn, int32_t _raw, float _x, float _y);
private: //callback function:
void onCallbackChangeName();
void onCallbackIsSave();
void onCallbackIsModify();
void onCallbackNewBuffer(const std::string& _value);
void onCallbackselectNewFile(const std::string& _value);
void onCallbackBufferRemoved(const std::shared_ptr<appl::Buffer>& _buffer);
}; };

View File

@@ -40,11 +40,11 @@
namespace appl { namespace appl {
std::string getVersion() { std::string getVersion() {
#define FIRST_YEAR (2010) #define FIRST_YEAR (2010)
std::string tmpOutput = std::to_string(date::getYear()-FIRST_YEAR); std::string tmpOutput = etk::to_string(date::getYear()-FIRST_YEAR);
tmpOutput += "."; tmpOutput += ".";
tmpOutput += std::to_string(date::getMonth()); tmpOutput += etk::to_string(date::getMonth());
tmpOutput += "."; tmpOutput += ".";
tmpOutput += std::to_string(date::getDay()); tmpOutput += etk::to_string(date::getDay());
return tmpOutput; return tmpOutput;
} }
@@ -59,12 +59,15 @@ namespace appl {
class ParameterAboutGui : public ewol::widget::Sizer { class ParameterAboutGui : public ewol::widget::Sizer {
public : public :
ParameterAboutGui() : ParameterAboutGui() {
ewol::widget::Sizer(ewol::widget::Sizer::modeVert) { addObjectType("appl::ParameterAboutGui");
ewol::object::Shared<ewol::widget::Spacer> mySpacer = NULL; }
void init() {
ewol::widget::Sizer::init(ewol::widget::Sizer::modeVert);
std::shared_ptr<ewol::widget::Spacer> mySpacer;
mySpacer = ewol::object::makeShared(new ewol::widget::Spacer()); mySpacer = ewol::widget::Spacer::create();
if (NULL == mySpacer) { if (nullptr == mySpacer) {
APPL_ERROR("Can not allocate widget == > display might be in error"); APPL_ERROR("Can not allocate widget == > display might be in error");
} else { } else {
mySpacer->setExpand(bvec2(true,true)); mySpacer->setExpand(bvec2(true,true));
@@ -93,8 +96,8 @@ class ParameterAboutGui : public ewol::widget::Sizer {
tmpLabel += " libPng, ogg-tremor, portaudio, libZip<br/>"; tmpLabel += " libPng, ogg-tremor, portaudio, libZip<br/>";
tmpLabel += " tinyXml, freetype, agg2.4, etk<br/>"; tmpLabel += " tinyXml, freetype, agg2.4, etk<br/>";
tmpLabel += "</left>"; tmpLabel += "</left>";
ewol::object::Shared<ewol::widget::Label> myLabel = ewol::object::makeShared(new ewol::widget::Label(tmpLabel)); std::shared_ptr<ewol::widget::Label> myLabel = ewol::widget::Label::create(tmpLabel);
if (NULL == myLabel) { if (nullptr == myLabel) {
APPL_ERROR("Can not allocate widget == > display might be in error"); APPL_ERROR("Can not allocate widget == > display might be in error");
} else { } else {
myLabel->setExpand(bvec2(true,false)); myLabel->setExpand(bvec2(true,false));
@@ -121,38 +124,42 @@ const char* l_smoothMax = "tmpEvent_maxChange";
MainWindows::MainWindows() { MainWindows::MainWindows() {
addObjectType("appl::MainWindows"); addObjectType("appl::MainWindows");
}
void MainWindows::init() {
ewol::widget::Windows::init();
APPL_DEBUG("CREATE WINDOWS ... "); APPL_DEBUG("CREATE WINDOWS ... ");
ewol::object::Shared<ewol::widget::Sizer> mySizerVert = NULL; std::shared_ptr<ewol::widget::Sizer> mySizerVert = nullptr;
ewol::object::Shared<ewol::widget::Sizer> mySizerVert2 = NULL; std::shared_ptr<ewol::widget::Sizer> mySizerVert2 = nullptr;
ewol::object::Shared<ewol::widget::Sizer> mySizerHori = NULL; std::shared_ptr<ewol::widget::Sizer> mySizerHori = nullptr;
ewol::object::Shared<appl::TextViewer> myTextView = NULL; std::shared_ptr<appl::TextViewer> myTextView = nullptr;
ewol::object::Shared<BufferView> myBufferView = NULL; std::shared_ptr<BufferView> myBufferView = nullptr;
ewol::object::Shared<ewol::widget::Menu> myMenu = NULL; std::shared_ptr<ewol::widget::Menu> myMenu = nullptr;
// load buffer manager: // load buffer manager:
m_bufferManager = appl::BufferManager::keep(); m_bufferManager = appl::BufferManager::create();
mySizerVert = ewol::object::makeShared(new ewol::widget::Sizer(ewol::widget::Sizer::modeVert)); mySizerVert = ewol::widget::Sizer::create(ewol::widget::Sizer::modeVert);
mySizerVert->setName("plop 1111111"); mySizerVert->setName("plop 1111111");
setSubWidget(mySizerVert); setSubWidget(mySizerVert);
mySizerHori = ewol::object::makeShared(new ewol::widget::Sizer(ewol::widget::Sizer::modeHori)); mySizerHori = ewol::widget::Sizer::create(ewol::widget::Sizer::modeHori);
mySizerHori->setName("plop 222222222"); mySizerHori->setName("plop 222222222");
mySizerVert->subWidgetAdd(mySizerHori); mySizerVert->subWidgetAdd(mySizerHori);
myBufferView = ewol::object::makeShared(new BufferView()); myBufferView = BufferView::create();
myBufferView->setName("plop 3333333"); myBufferView->setName("plop 3333333");
myBufferView->setExpand(bvec2(false,true)); myBufferView->setExpand(bvec2(false,true));
myBufferView->setFill(bvec2(true,true)); myBufferView->setFill(bvec2(true,true));
mySizerHori->subWidgetAdd(myBufferView); mySizerHori->subWidgetAdd(myBufferView);
mySizerVert2 = ewol::object::makeShared(new ewol::widget::Sizer(ewol::widget::Sizer::modeVert)); mySizerVert2 = ewol::widget::Sizer::create(ewol::widget::Sizer::modeVert);
mySizerHori->subWidgetAdd(mySizerVert2); mySizerHori->subWidgetAdd(mySizerVert2);
mySizerVert2->setName("plop 4444444"); mySizerVert2->setName("plop 4444444");
// main buffer Area : // main buffer Area :
#if defined(__TARGET_OS__Android) #if defined(__TARGET_OS__Android)
myTextView = ewol::object::makeShared(new appl::TextViewer("FreeMono;DejaVuSansMono;FreeSerif", 16)); myTextView = appl::TextViewer::create("FreeMono;DejaVuSansMono;FreeSerif", 16);
#else #else
myTextView = ewol::object::makeShared(new appl::TextViewer("FreeMono;DejaVuSansMono;FreeSerif", 11)); myTextView = appl::TextViewer::create("FreeMono;DejaVuSansMono;FreeSerif", 11);
#endif #endif
myTextView->setName("appl-text-viewer"); myTextView->setName("appl-text-viewer");
myTextView->setExpand(bvec2(true,true)); myTextView->setExpand(bvec2(true,true));
@@ -165,105 +172,66 @@ MainWindows::MainWindows() {
mySizerVert2->subWidgetAdd(myTextView); mySizerVert2->subWidgetAdd(myTextView);
*/ */
// search area : // search area :
ewol::object::Shared<appl::widget::Search> mySearch = ewol::object::makeShared(new appl::widget::Search()); m_widgetSearch = appl::widget::Search::create();
mySizerVert2->subWidgetAdd(mySearch); mySizerVert2->subWidgetAdd(m_widgetSearch);
mySizerHori = ewol::object::makeShared(new ewol::widget::Sizer(ewol::widget::Sizer::modeHori)); mySizerHori = ewol::widget::Sizer::create(ewol::widget::Sizer::modeHori);
mySizerHori->setName("plop 555555"); mySizerHori->setName("plop 555555");
mySizerVert->subWidgetAdd(mySizerHori); mySizerVert->subWidgetAdd(mySizerHori);
myMenu = ewol::object::makeShared(new ewol::widget::Menu()); myMenu = ewol::widget::Menu::create();
myMenu->setName("appl-menu-interface");
mySizerHori->subWidgetAdd(myMenu); mySizerHori->subWidgetAdd(myMenu);
int32_t idMenuFile = myMenu->addTitle("File"); int32_t idMenuFile = myMenu->addTitle("File");
myMenu->add(idMenuFile, "New", "", ednMsgGuiNew); myMenu->add(idMenuFile, "New", "", "menu:new");
myMenu->addSpacer(); myMenu->addSpacer();
myMenu->add(idMenuFile, "Open", "THEME:GUI:Load.edf", ednMsgGuiOpen); myMenu->add(idMenuFile, "Open", "THEME:GUI:Load.edf", "menu:open");
myMenu->add(idMenuFile, "Close", "THEME:GUI:Close.edf", ednMsgGuiClose, "current"); myMenu->add(idMenuFile, "Close", "THEME:GUI:Close.edf", "menu:close");
myMenu->add(idMenuFile, "Close (all)", "", ednMsgGuiClose, "All"); myMenu->add(idMenuFile, "Close (all)", "", "menu:close-all");
myMenu->add(idMenuFile, "Save", "THEME:GUI:Save.edf", ednMsgGuiSave, "current"); myMenu->add(idMenuFile, "Save", "THEME:GUI:Save.edf", "menu:save");
myMenu->add(idMenuFile, "Save As ...", "", ednMsgGuiSaveAs); myMenu->add(idMenuFile, "Save As ...", "", "menu:save-as");
myMenu->addSpacer(); myMenu->addSpacer();
//myMenu->add(idMenuFile, "Exit", "", ednMsgGuiExit); myMenu->add(idMenuFile, "Properties", "THEME:GUI:Parameter.edf", "menu:property");
myMenu->addSpacer();
myMenu->add(idMenuFile, "Properties", "THEME:GUI:Parameter.edf", ednMsgProperties);
int32_t idMenuEdit = myMenu->addTitle("Edit"); int32_t idMenuEdit = myMenu->addTitle("Edit");
myMenu->add(idMenuEdit, "Undo", "THEME:GUI:Undo.edf", ednMsgGuiUndo); myMenu->add(idMenuEdit, "Goto line ...","", "menu:goto-line");
myMenu->add(idMenuEdit, "Redo", "THEME:GUI:Redo.edf", ednMsgGuiRedo);
myMenu->addSpacer();
myMenu->add(idMenuEdit, "Copy", "", ednMsgGuiCopy, "STD");
myMenu->add(idMenuEdit, "Cut", "", ednMsgGuiCut, "STD");
myMenu->add(idMenuEdit, "Paste", "", ednMsgGuiPaste, "STD");
myMenu->add(idMenuEdit, "Remove", "", ednMsgGuiRm);
myMenu->addSpacer();
myMenu->add(idMenuEdit, "Select All","", ednMsgGuiSelect, "ALL");
myMenu->add(idMenuEdit, "Un-Select","", ednMsgGuiSelect, "NONE");
myMenu->add(idMenuEdit, "Goto line ...","", ednMsgGuiGotoLine, "???");
int32_t idMenuSearch = myMenu->addTitle("Search"); int32_t idMenuSearch = myMenu->addTitle("Search");
myMenu->add(idMenuSearch, "Search", "THEME:GUI:Search.edf", ednMsgGuiSearch); myMenu->add(idMenuSearch, "Search", "THEME:GUI:Search.edf", "menu:search");
myMenu->add(idMenuSearch, "Replace", "THEME:GUI:Replace.edf", ednMsgGuiReplace); myMenu->add(idMenuSearch, "Replace", "THEME:GUI:Replace.edf", "menu:replace");
myMenu->addSpacer(); myMenu->addSpacer();
myMenu->add(idMenuSearch, "Find (previous)","", ednMsgGuiFind, "Previous"); myMenu->add(idMenuSearch, "Find (previous)","", "menu:find:previous");
myMenu->add(idMenuSearch, "Find (next)", "", ednMsgGuiFind, "Next"); myMenu->add(idMenuSearch, "Find (next)", "", "menu:find:next");
myMenu->add(idMenuSearch, "Find (all)", "", ednMsgGuiFind, "All"); myMenu->add(idMenuSearch, "Find (all)", "", "menu:find:all");
myMenu->add(idMenuSearch, "Un-Select", "", ednMsgGuiFind, "None"); myMenu->add(idMenuSearch, "Un-Select", "", "menu:find:none");
/* ==> must be in the pluggin list control ...
int32_t idMenuCTags = myMenu->addTitle("C-tags");
myMenu->add(idMenuCTags, "Load", "", ednMsgGuiCtags, "Load");
myMenu->add(idMenuCTags, "ReLoad", "", ednMsgGuiCtags, "ReLoad");
myMenu->add(idMenuCTags, "Jump", "", ednMsgGuiCtags, "Jump");
myMenu->add(idMenuCTags, "Back", "", ednMsgGuiCtags, "Back");
*/
int32_t idMenugDisplay = myMenu->addTitle("Display"); int32_t idMenugDisplay = myMenu->addTitle("Display");
myMenu->add(idMenugDisplay, "Color Black", "", appl::MsgNameGuiChangeColor, "color/black/"); myMenu->add(idMenugDisplay, "Color Black", "", "menu:color:color/black/");
myMenu->add(idMenugDisplay, "Color White", "", appl::MsgNameGuiChangeColor, "color/white/"); myMenu->add(idMenugDisplay, "Color White", "", "menu:color:color/white/");
myMenu->add(idMenugDisplay, "Shape square", "", l_MsgNameGuiChangeShape, "shape/square/"); myMenu->add(idMenugDisplay, "Shape square", "", "menu:shape:shape/square/");
myMenu->add(idMenugDisplay, "Shape round", "", l_MsgNameGuiChangeShape, "shape/round/"); myMenu->add(idMenugDisplay, "Shape round", "", "menu:shape:shape/round/");
myMenu->addSpacer(); myMenu->addSpacer();
myMenu->add(idMenugDisplay, "Reload openGl Shader", "", ednMsgGuiReloadShader); myMenu->add(idMenugDisplay, "Reload openGl Shader", "", "menu:reloadShape");
myMenu->signalSelect.bind(shared_from_this(), &MainWindows::onCallbackMenuEvent);
m_widgetLabelFileName = ewol::object::makeShared(new ewol::widget::Label("FileName")); m_widgetLabelFileName = ewol::widget::Label::create("FileName");
m_widgetLabelFileName->setExpand(bvec2(true,false)); m_widgetLabelFileName->setExpand(bvec2(true,false));
m_widgetLabelFileName->setFill(bvec2(true,false));; m_widgetLabelFileName->setFill(bvec2(true,false));;
mySizerHori->subWidgetAdd(m_widgetLabelFileName); mySizerHori->subWidgetAdd(m_widgetLabelFileName);
// add generic shortcut ... // add generic shortcut ...
// (shift, control, alt, meta, char32_t unicodeValue, const char * generateEventId, std::string& data) shortCutAdd("ctrl+o", "menu:open");
shortCutAdd("ctrl+o", ednMsgGuiOpen, "", true); shortCutAdd("ctrl+n", "menu:new");
shortCutAdd("ctrl+n", ednMsgGuiNew, "", true);
shortCutAdd("ctrl+s", ednMsgGuiSave, "current", true); shortCutAdd("ctrl+s", "menu:save");
shortCutAdd("ctrl+shift+s", ednMsgGuiSave, "All", true); shortCutAdd("ctrl+shift+s", "menu:save-all");
shortCutAdd("ctrl+q", ednMsgGuiClose, "current", true); shortCutAdd("ctrl+q", "menu:close");
shortCutAdd("ctrl+shift+q", ednMsgGuiClose, "All", true); shortCutAdd("ctrl+shift+q", "menu:close-all");
shortCutAdd("ctrl+z", ednMsgGuiUndo, "", true); shortCutAdd("ctrl+l", "menu:goto-line");
shortCutAdd("ctrl+shift+z", ednMsgGuiRedo, "", true);
shortCutAdd("ctrl+l", ednMsgGuiGotoLine, "???", true); shortCutAdd("ctrl+f", "menu:search");
shortCutAdd("F12", "menu:reloade-shader");
shortCutAdd("ctrl+f", ednMsgGuiSearch, "", true); // TODO : auto-bind on shortcut event ==> maybe do beter later ...
shortCutAdd("F12", ednMsgGuiReloadShader, "", true); signalShortcut.bind(shared_from_this(), &MainWindows::onCallbackShortCut);
m_bufferManager->signalSelectFile.bind(shared_from_this(), &MainWindows::onCallbackShortCut);
//shortCutAdd("ctrl+d", ednMsgGuiCtags, "Jump", true);
// Generic event ...
registerMultiCast(ednMsgGuiSave);
registerMultiCast(ednMsgGuiSaveAs);
registerMultiCast(ednMsgProperties);
registerMultiCast(ednMsgGuiNew);
registerMultiCast(ednMsgGuiOpen);
registerMultiCast(ednMsgGuiClose);
// to update the title ...
registerMultiCast(ednMsgBufferState);
registerMultiCast(ednMsgBufferId);
registerMultiCast(ednMsgGuiReloadShader);
registerMultiCast(appl::MsgNameGuiChangeColor);
registerMultiCast(l_MsgNameGuiChangeShape);
registerMultiCast(appl::MsgSelectNewFile);
} }
@@ -272,161 +240,86 @@ MainWindows::~MainWindows() {
} }
const char *const ednEventPopUpFileSelected = "edn-mainWindows-openSelected";
const char *const ednEventPopUpFileSaveAs = "edn-mainWindows-saveAsSelected";
void MainWindows::onCallbackShortCut(const std::string& _value) {
void MainWindows::onReceiveMessage(const ewol::object::Message& _msg) { APPL_WARNING("Event from ShortCut : " << _value);
ewol::widget::Windows::onReceiveMessage(_msg); onCallbackMenuEvent(_value);
APPL_VERBOSE("Receive Event from the main windows: " << _msg );
// open file Section ...
if (_msg.getMessage() == ednMsgGuiOpen) {
ewol::widget::FileChooser* tmpWidget = new ewol::widget::FileChooser();
if (tmpWidget == NULL) {
APPL_ERROR("Can not open File chooser !!! ");
return;
}
tmpWidget->setTitle("Open files ...");
tmpWidget->setValidateLabel("Open");
if (m_bufferManager == NULL) {
APPL_ERROR("can not call unexistant buffer manager ... ");
return;
}
// Get a ref on the buffer selected (if null, no buffer was selected ...)
ewol::object::Shared<appl::Buffer> tmpBuffer = m_bufferManager->getBufferSelected();
if (tmpBuffer != NULL) {
etk::FSNode tmpFile = tmpBuffer->getFileName();
tmpWidget->setFolder(tmpFile.getNameFolder());
}
// apply widget pop-up ...
popUpWidgetPush(tmpWidget);
tmpWidget->registerOnEvent(this, "validate", ednEventPopUpFileSelected);
} else if (_msg.getMessage() == ednMsgProperties) {
// Request the parameter GUI
ewol::object::Shared<ewol::widget::Parameter> tmpWidget = ewol::object::makeShared(new ewol::widget::Parameter());
if (NULL == tmpWidget) {
APPL_ERROR("Can not allocate widget == > display might be in error");
} else {
#ifdef SDGSDFGSDFGSDFGSDFGSTERGDHFGHFDS
std::string menuDescription = "<title>Properties</title>\n";
menuDescription += "<group>\n";
menuDescription += " <title>Editor</title>\n";
menuDescription += " <menu>\n";
menuDescription += " <title>Editor Interface</title>\n";
menuDescription += " <short-title>Editor</short-title>\n";
menuDescription += " <widget>appl-text-viewer</widget>\n";
menuDescription += " </menu>\n";
menuDescription += "</group>\n";
menuDescription += "<group>\n";
menuDescription += " <title>Gui</title>\n";
menuDescription += " <menu>\n";
menuDescription += " <title>Font selection</title>\n";
menuDescription += " <short-title>Font</short-title>\n";
menuDescription += " <widget></widget>\n";
menuDescription += " </menu>\n";
menuDescription += " <menu>\n";
menuDescription += " <title>Color selection</title>\n";
menuDescription += " <short-title>Color</short-title>\n";
menuDescription += " <widget></widget>\n";
menuDescription += " </menu>\n";
menuDescription += " <menu>\n";
menuDescription += " <title>Theme selection</title>\n";
menuDescription += " <short-title>Theme</short-title>\n";
menuDescription += " <widget></widget>\n";
menuDescription += " </menu>\n";
menuDescription += "</group>\n";
tmpWidget->setMenu(menuDescription);
#endif
tmpWidget->setTitle("Properties");
popUpWidgetPush(tmpWidget);
tmpWidget->menuAddGroup("Editor");
ewol::object::Shared<ewol::Widget> tmpSubWidget = ewol::object::makeShared(new globals::ParameterGlobalsGui());
tmpWidget->menuAdd("Editor", "", tmpSubWidget);
tmpWidget->menuAdd("Font & Color", "", NULL);
tmpWidget->menuAdd("Highlight", "", NULL);
tmpWidget->menuAddGroup("General");
tmpWidget->menuAdd("Display", "", NULL);
tmpSubWidget = ewol::object::makeShared(new ParameterAboutGui());
tmpWidget->menuAdd("About", "", tmpSubWidget);
}
} else if (_msg.getMessage() == appl::MsgNameGuiChangeColor) {
etk::theme::setName("COLOR", _msg.getData());
ewol::getContext().getResourcesManager().reLoadResources();
ewol::getContext().forceRedrawAll();
} else if (_msg.getMessage() == l_MsgNameGuiChangeShape) {
etk::theme::setName("GUI", _msg.getData());
ewol::getContext().getResourcesManager().reLoadResources();
ewol::getContext().forceRedrawAll();
} else if (_msg.getMessage() == ednMsgGuiReloadShader) {
ewol::getContext().getResourcesManager().reLoadResources();
ewol::getContext().forceRedrawAll();
} else if (_msg.getMessage() == ednMsgGuiExit) {
// TODO : ...
}
// Note : Fore all next message we need to acces to the buffer manager ==> just check one time ...
if (m_bufferManager == NULL) {
APPL_ERROR("can not call unexistant buffer manager ... ");
return;
}
if ( _msg.getMessage() == appl::MsgSelectNewFile
|| _msg.getMessage() == appl::Buffer::eventIsModify
|| _msg.getMessage() == appl::Buffer::eventIsSave
|| _msg.getMessage() == appl::Buffer::eventChangeName) {
// select a new Buffer ==> change title:
ewol::object::Shared<appl::Buffer> tmpp = m_bufferManager->getBufferSelected();
if (tmpp == NULL) {
setTitle("Edn");
if (m_widgetLabelFileName != NULL) {
m_widgetLabelFileName->setLabel("");
}
} else {
if (_msg.getMessage() == appl::MsgSelectNewFile) {
tmpp->registerOnEvent(this, appl::Buffer::eventIsModify);
tmpp->registerOnEvent(this, appl::Buffer::eventIsSave);
tmpp->registerOnEvent(this, appl::Buffer::eventChangeName);
}
std::string nameFileSystem = etk::FSNode(tmpp->getFileName()).getFileSystemName();
setTitle(std::string("Edn : ") + (tmpp->isModify()==true?" *":"") + nameFileSystem);
if (m_widgetLabelFileName != NULL) {
m_widgetLabelFileName->setLabel(nameFileSystem + (tmpp->isModify()==true?" *":""));
}
} }
void MainWindows::onCallbackMenuEvent(const std::string& _value) {
} else if (_msg.getMessage() == ednMsgGuiNew) { APPL_WARNING("Event from Menu : " << _value);
if (_value == "menu:new") {
if (m_bufferManager != nullptr) {
m_bufferManager->createNewBuffer(); m_bufferManager->createNewBuffer();
} else if (_msg.getMessage() == ednEventPopUpFileSelected) {
APPL_DEBUG("Request opening the file : " << _msg.getData());
m_bufferManager->open(_msg.getData());
} else if (_msg.getMessage() == ednMsgGuiSave) {
APPL_DEBUG("Request saving the file : " << _msg.getData());
if (std::tolower(_msg.getData()) == "current") {
new appl::WorkerSaveFile("", false);
return;
} else if (std::tolower(_msg.getData()) == "all") {
new appl::WorkerSaveAllFile();
return;
} else {
APPL_ERROR("UNKNOW request : " << _msg);
} }
} else if (_msg.getMessage() == ednMsgGuiSaveAs) { } else if (_value == "menu:open") {
new appl::WorkerSaveFile("", true); displayOpen();
} else if (_msg.getMessage() == ednMsgGuiClose) { } else if (_value == "menu:close") {
// Get a ref on the buffer selected (if null, no buffer was selected ...) std::shared_ptr<appl::WorkerCloseFile> worker = appl::WorkerCloseFile::create();
if (_msg.getData() == "current") { worker->startAction("");
new appl::WorkerCloseFile(""); } else if (_value == "menu:close-all") {
} else { appl::WorkerCloseAllFile::create();
new appl::WorkerCloseAllFile(); } else if (_value == "menu:save") {
appl::WorkerSaveFile::create("", false);
} else if (_value == "menu:save-all") {
appl::WorkerSaveAllFile::create();
} else if (_value == "menu:save-as") {
appl::WorkerSaveFile::create("", true);
} else if (_value == "menu:property") {
displayProperty();
} else if (_value == "menu:search") {
if (m_widgetSearch == nullptr) {
return;
} }
if (m_widgetSearch->isHide()) {
m_widgetSearch->show();
m_widgetSearch->selectSearch();
} else {
m_widgetSearch->hide();
}
} else if (_value == "menu:replace") {
if (m_widgetSearch == nullptr) {
return;
}
if (m_widgetSearch->isHide()) {
m_widgetSearch->show();
m_widgetSearch->selectReplace();
} else {
m_widgetSearch->hide();
}
} else if (_value == "menu:find:previous") {
APPL_TODO("Event from Menu : " << _value);
} else if (_value == "menu:find:next") {
APPL_TODO("Event from Menu : " << _value);
} else if (_value == "menu:find:all") {
APPL_TODO("Event from Menu : " << _value);
} else if (_value == "menu:find:none") {
APPL_TODO("Event from Menu : " << _value);
} else if ( _value == "menu:color:color/black/"
|| _value == "menu:color:color/white/") {
etk::theme::setName("COLOR", std::string(_value, 12));
ewol::getContext().getResourcesManager().reLoadResources();
ewol::getContext().forceRedrawAll();
} else if ( _value == "menu:shape:shape/square/"
|| _value == "menu:shape:shape/round/") {
etk::theme::setName("GUI", std::string(_value, 12));
ewol::getContext().getResourcesManager().reLoadResources();
ewol::getContext().forceRedrawAll();
} else if (_value == "menu:reloadShape") {
ewol::getContext().getResourcesManager().reLoadResources();
ewol::getContext().forceRedrawAll();
} else {
APPL_ERROR("Event from Menu UNKNOW : '" << _value << "'");
}
}
/* TODO :
} else if (_msg.getMessage() == mainWindowsRequestSaveFile) { // return after a choice of close... } else if (_msg.getMessage() == mainWindowsRequestSaveFile) { // return after a choice of close...
if (m_bufferManager->exist(_msg.getData()) == false) { if (m_bufferManager->exist(_msg.getData()) == false) {
APPL_ERROR("Try to save an non-existant file :" << _msg.getData()); APPL_ERROR("Try to save an non-existant file :" << _msg.getData());
return; return;
} }
ewol::object::Shared<appl::Buffer> tmpBuffer = m_bufferManager->get(_msg.getData()); std::shared_ptr<appl::Buffer> tmpBuffer = m_bufferManager->get(_msg.getData());
if (tmpBuffer == NULL) { if (tmpBuffer == nullptr) {
APPL_ERROR("Error to get the buffer : " << _msg.getData()); APPL_ERROR("Error to get the buffer : " << _msg.getData());
return; return;
} }
@@ -444,8 +337,8 @@ void MainWindows::onReceiveMessage(const ewol::object::Message& _msg) {
APPL_ERROR("Try to save an non-existant file :" << _msg.getData()); APPL_ERROR("Try to save an non-existant file :" << _msg.getData());
return; return;
} }
ewol::object::Shared<appl::Buffer> tmpBuffer = m_bufferManager->get(_msg.getData()); std::shared_ptr<appl::Buffer> tmpBuffer = m_bufferManager->get(_msg.getData());
if (tmpBuffer == NULL) { if (tmpBuffer == nullptr) {
APPL_ERROR("Error to get the buffer : " << _msg.getData()); APPL_ERROR("Error to get the buffer : " << _msg.getData());
return; return;
} }
@@ -455,64 +348,157 @@ void MainWindows::onReceiveMessage(const ewol::object::Message& _msg) {
APPL_ERROR("Try to save an non-existant file :" << _msg.getData()); APPL_ERROR("Try to save an non-existant file :" << _msg.getData());
return; return;
} }
ewol::object::Shared<appl::Buffer> tmpBuffer = m_bufferManager->get(_msg.getData()); std::shared_ptr<appl::Buffer> tmpBuffer = m_bufferManager->get(_msg.getData());
if (tmpBuffer == NULL) { if (tmpBuffer == nullptr) {
APPL_ERROR("Error to get the buffer : " << _msg.getData()); APPL_ERROR("Error to get the buffer : " << _msg.getData());
return; return;
} }
// note: just remove ==> no check : normal case ... // note: just remove ==> no check : normal case ...
tmpBuffer->removeObject(); //tmpBuffer->removeObject();
EWOL_TODO("call remove buffer ...");
} }
*/
void MainWindows::displayOpen() {
std::shared_ptr<ewol::widget::FileChooser> tmpWidget = ewol::widget::FileChooser::create();
if (tmpWidget == nullptr) {
APPL_ERROR("Can not open File chooser !!! ");
return; return;
} }
tmpWidget->setTitle("Open files ...");
tmpWidget->setValidateLabel("Open");
if (m_bufferManager == nullptr) {
APPL_ERROR("can not call unexistant buffer manager ... ");
return;
}
// Get a ref on the buffer selected (if null, no buffer was selected ...)
std::shared_ptr<appl::Buffer> tmpBuffer = m_bufferManager->getBufferSelected();
if (tmpBuffer != nullptr) {
etk::FSNode tmpFile = tmpBuffer->getFileName();
tmpWidget->setFolder(tmpFile.getNameFolder());
}
// apply widget pop-up ...
popUpWidgetPush(tmpWidget);
tmpWidget->signalValidate.bind(shared_from_this(), &MainWindows::onCallbackPopUpFileSelected);
}
void MainWindows::saveAsPopUp(const ewol::object::Shared<appl::Buffer>& _buffer) { void MainWindows::displayProperty() {
if (_buffer == NULL) { // Request the parameter GUI
APPL_ERROR("Call With NULL input..."); std::shared_ptr<ewol::widget::Parameter> tmpWidget = ewol::widget::Parameter::create();
return; if (nullptr == tmpWidget) {
APPL_ERROR("Can not allocate widget == > display might be in error");
} else {
#ifdef SDGSDFGSDFGSDFGSDFGSTERGDHFGHFDS
std::string menuDescription = "<title>Properties</title>\n";
menuDescription += "<group title='Editor'>\n";
menuDescription += " <menu title='Editor Interface' short-title='Editor' widget='appl-text-viewer'>\n";
menuDescription += "</group>\n";
menuDescription += "<group title='Gui'>\n";
menuDescription += " <menu title='Font selection' short-title='Font' widget=''>\n";
menuDescription += " <menu title='Color selection' short-title='Color' widget=''>\n";
menuDescription += " <menu title='Theme selection' short-title='Theme' widget=''>\n";
menuDescription += "</group>\n";
tmpWidget->setMenu(menuDescription);
#endif
tmpWidget->setTitle("Properties");
popUpWidgetPush(tmpWidget);
tmpWidget->menuAddGroup("Editor");
std::shared_ptr<ewol::Widget> tmpSubWidget = globals::ParameterGlobalsGui::create();
tmpWidget->menuAdd("Editor", "", tmpSubWidget);
tmpWidget->menuAdd("Font & Color", "", nullptr);
tmpWidget->menuAdd("Highlight", "", nullptr);
tmpWidget->menuAddGroup("General");
tmpWidget->menuAdd("Display", "", nullptr);
tmpSubWidget = ParameterAboutGui::create();
tmpWidget->menuAdd("About", "", tmpSubWidget);
} }
appl::WorkerSaveFile* tmpObject = new appl::WorkerSaveFile(_buffer->getFileName());
} }
void MainWindows::closeNotSavedFile(const ewol::object::Shared<appl::Buffer>& _buffer) { void MainWindows::onCallbackselectNewFile(const std::string& _value) {
if (_buffer == NULL) { APPL_INFO("onCallbackselectNewFile(" << _value << ")");
APPL_ERROR("Call With NULL input..."); if (m_bufferManager == nullptr) {
APPL_ERROR("can not call unexistant buffer manager ... ");
return; return;
} }
ewol::object::Shared<ewol::widget::StdPopUp> tmpPopUp = ewol::object::makeShared(new ewol::widget::StdPopUp()); // TODO : Remove all previous binding from the old buffer ...
if (tmpPopUp == NULL) { onCallbackTitleUpdate();
std::shared_ptr<appl::Buffer> tmpp = m_bufferManager->getBufferSelected();
if (tmpp != nullptr) {
tmpp->signalIsSave.bind(shared_from_this(), &MainWindows::onCallbackTitleUpdate);
tmpp->signalIsModify.bind(shared_from_this(), &MainWindows::onCallbackTitleUpdate);
tmpp->signalChangeName.bind(shared_from_this(), &MainWindows::onCallbackTitleUpdate);
}
}
void MainWindows::onCallbackPopUpFileSelected(const std::string& _value) {
APPL_INFO("onCallbackPopUpFileSelected(" << _value << ")");
APPL_DEBUG("Request opening the file : " << _value);
m_bufferManager->open(_value);
}
void MainWindows::onCallbackTitleUpdate() {
APPL_INFO("onCallbackTitleUpdate()");
if (m_bufferManager == nullptr) {
APPL_ERROR("can not call unexistant buffer manager ... ");
return;
}
// select a new Buffer ==> change title:
std::shared_ptr<appl::Buffer> tmpp = m_bufferManager->getBufferSelected();
if (tmpp == nullptr) {
setTitle("Edn");
if (m_widgetLabelFileName != nullptr) {
m_widgetLabelFileName->setLabel("");
}
} else {
std::string nameFileSystem = etk::FSNode(tmpp->getFileName()).getFileSystemName();
setTitle(std::string("Edn : ") + (tmpp->isModify()==true?" *":"") + nameFileSystem);
if (m_widgetLabelFileName != nullptr) {
m_widgetLabelFileName->setLabel(nameFileSystem + (tmpp->isModify()==true?" *":""));
}
}
}
void MainWindows::saveAsPopUp(const std::shared_ptr<appl::Buffer>& _buffer) {
if (_buffer == nullptr) {
APPL_ERROR("Call With nullptr input...");
return;
}
std::shared_ptr<appl::WorkerSaveFile> tmpObject = appl::WorkerSaveFile::create(_buffer->getFileName());
}
void MainWindows::closeNotSavedFile(const std::shared_ptr<appl::Buffer>& _buffer) {
if (_buffer == nullptr) {
APPL_ERROR("Call With nullptr input...");
return;
}
std::shared_ptr<ewol::widget::StdPopUp> tmpPopUp = ewol::widget::StdPopUp::create();
if (tmpPopUp == nullptr) {
APPL_ERROR("Can not create a simple pop-up"); APPL_ERROR("Can not create a simple pop-up");
return; return;
} }
tmpPopUp->setTitle("<bold>Close un-saved file:</bold>"); tmpPopUp->setTitle("<bold>Close un-saved file:</bold>");
tmpPopUp->setComment("The file named : <i>\"" + _buffer->getFileName() + "\"</i> is curently modify. <br/>If you don't saves these modifications,<br/>they will be definitly lost..."); tmpPopUp->setComment("The file named : <i>\"" + _buffer->getFileName() + "\"</i> is curently modify. <br/>If you don't saves these modifications,<br/>they will be definitly lost...");
ewol::object::Shared<ewol::Widget> bt = NULL; std::shared_ptr<ewol::widget::Button> bt = nullptr;
if (_buffer->hasFileName() == true) { if (_buffer->hasFileName() == true) {
bt = tmpPopUp->addButton("Save", true); bt = tmpPopUp->addButton("Save", true);
if (bt != NULL) { if (bt != nullptr) {
// TODO : The element is removed before beeing pressed // TODO : The element is removed before beeing pressed
bt->registerOnEvent(this, "pressed", mainWindowsRequestSaveFile, _buffer->getFileName()); // TODO : bt->signalPressed.bind(shared_from_this(), mainWindowsRequestSaveFile, _buffer->getFileName());
bt->registerOnEvent(this, "pressed", mainWindowsRequestcloseFileNoCheck, _buffer->getFileName()); // TODO : bt->signalPressed.bind(shared_from_this(), mainWindowsRequestcloseFileNoCheck, _buffer->getFileName());
} }
} }
bt = tmpPopUp->addButton("Save As", true); bt = tmpPopUp->addButton("Save As", true);
if (bt != NULL) { if (bt != nullptr) {
bt->registerOnEvent(this, "pressed", mainWindowsRequestSaveFileAs, _buffer->getFileName()); // TODO : bt->signalPressed.bind(shared_from_this(), mainWindowsRequestSaveFileAs, _buffer->getFileName());
//bt->registerOnEvent(this, "pressed", mainWindowsRequestcloseFileNoCheck, _buffer->getFileName()); //bt->signalPressed.bind(shared_from_this(), mainWindowsRequestcloseFileNoCheck, _buffer->getFileName());
// TODO : Request the close when saved ... // TODO : Request the close when saved ...
} }
bt = tmpPopUp->addButton("Close", true); bt = tmpPopUp->addButton("Close", true);
if (bt != NULL) { if (bt != nullptr) {
bt->registerOnEvent(this, "pressed", mainWindowsRequestcloseFileNoCheck, _buffer->getFileName()); // TODO : bt->signalPressed.bind(shared_from_this(), mainWindowsRequestcloseFileNoCheck, _buffer->getFileName());
} }
tmpPopUp->addButton("Cancel", true); tmpPopUp->addButton("Cancel", true);
tmpPopUp->setRemoveOnExternClick(true); tmpPopUp->setRemoveOnExternClick(true);
popUpWidgetPush(tmpPopUp); popUpWidgetPush(tmpPopUp);
} }
void MainWindows::onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject) {
ewol::widget::Windows::onObjectRemove(_removeObject);
if (m_widgetLabelFileName == _removeObject) {
m_widgetLabelFileName = NULL;
}
}

View File

@@ -16,29 +16,39 @@
#include <appl/BufferManager.h> #include <appl/BufferManager.h>
#include <ewol/widget/Label.h> #include <ewol/widget/Label.h>
#include <appl/BufferManager.h> #include <appl/BufferManager.h>
#include <appl/Gui/Search.h>
class MainWindows : public ewol::widget::Windows { class MainWindows : public ewol::widget::Windows {
private: private:
ewol::object::Shared<ewol::widget::Label> m_widgetLabelFileName; std::shared_ptr<ewol::widget::Label> m_widgetLabelFileName;
public: std::shared_ptr<appl::widget::Search> m_widgetSearch;
protected:
// Constructeur // Constructeur
MainWindows(); MainWindows();
void init();
public:
DECLARE_FACTORY(MainWindows);
virtual ~MainWindows(); virtual ~MainWindows();
private: private:
ewol::object::Shared<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager std::shared_ptr<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
/** /**
* @brief Display a pop-up to the select the name of the file. * @brief Display a pop-up to the select the name of the file.
* @param[in] _buffer Buffer that might be saved with a new name. * @param[in] _buffer Buffer that might be saved with a new name.
*/ */
void saveAsPopUp(const ewol::object::Shared<appl::Buffer>& _buffer); void saveAsPopUp(const std::shared_ptr<appl::Buffer>& _buffer);
/** /**
* @brief Display a pop-up to the user to confirm wat he want to do when he close a file not saved. * @brief Display a pop-up to the user to confirm wat he want to do when he close a file not saved.
* @param[in] _buffer Buffer that might be close. * @param[in] _buffer Buffer that might be close.
*/ */
void closeNotSavedFile(const ewol::object::Shared<appl::Buffer>& _buffer); void closeNotSavedFile(const std::shared_ptr<appl::Buffer>& _buffer);
public: // Derived function void displayOpen();
virtual void onReceiveMessage(const ewol::object::Message& _msg); void displayProperty();
virtual void onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject); private:
void onCallbackPopUpFileSelected(const std::string& _value);
void onCallbackTitleUpdate();
void onCallbackMenuEvent(const std::string& _value);
void onCallbackShortCut(const std::string& _value);
void onCallbackselectNewFile(const std::string& _value);
}; };

View File

@@ -12,6 +12,8 @@
#include "appl/Gui/TextViewer.h" #include "appl/Gui/TextViewer.h"
#include "appl/Gui/MainWindows.h" #include "appl/Gui/MainWindows.h"
#include "appl/globalMsg.h" #include "appl/globalMsg.h"
#include <ewol/widget/Button.h>
#include <ewol/widget/Entry.h>
#undef __class__ #undef __class__
@@ -29,36 +31,32 @@ const char* const l_eventForwardCb = "appl-forward-CheckBox";
const char* const l_eventHideBt = "appl-hide-button"; const char* const l_eventHideBt = "appl-hide-button";
appl::widget::Search::Search() : appl::widget::Search::Search() :
ewol::widget::Composer(ewol::widget::Composer::file, "DATA:GUI-Search.xml"),
m_viewerManager(NULL),
m_forward(true), m_forward(true),
m_caseSensitive(false), m_caseSensitive(false),
m_wrap(true), m_wrap(true) {
m_searchEntry(NULL),
m_replaceEntry(NULL) {
addObjectType("appl::widget::Search"); addObjectType("appl::widget::Search");
// load buffer manager:onObjectRemove }
m_viewerManager = appl::ViewerManager::keep(); void appl::widget::Search::init() {
ewol::widget::Composer::init(ewol::widget::Composer::file, "DATA:GUI-Search.xml");
m_viewerManager = appl::ViewerManager::create();
// link event // link event
registerOnEventNameWidget(this, "SEARCH:close", "pressed", l_eventHideBt); subBind(ewol::widget::Button, "SEARCH:close", signalPressed, shared_from_this(), &appl::widget::Search::OnCallbackHide);
registerOnEventNameWidget(this, "SEARCH:search-entry", "modify", l_eventSearchEntry); subBind(ewol::widget::Entry, "SEARCH:search-entry", signalModify, shared_from_this(), &appl::widget::Search::OnCallbackSearchValue);
registerOnEventNameWidget(this, "SEARCH:search-entry", "enter", l_eventSearchEntryEnter); subBind(ewol::widget::Entry, "SEARCH:search-entry", signalEnter, shared_from_this(), &appl::widget::Search::OnCallbackSearchEntryValidate);
registerOnEventNameWidget(this, "SEARCH:search", "pressed", l_eventSearchBt); subBind(ewol::widget::Button, "SEARCH:search", signalPressed, shared_from_this(), &appl::widget::Search::OnCallbackSearch);
registerOnEventNameWidget(this, "SEARCH:replace-entry", "modify", l_eventReplaceEntry); subBind(ewol::widget::Entry, "SEARCH:replace-entry", signalModify, shared_from_this(), &appl::widget::Search::OnCallbackReplaceValue);
registerOnEventNameWidget(this, "SEARCH:replace-entry", "enter", l_eventReplaceEntryEnter); subBind(ewol::widget::Entry, "SEARCH:replace-entry", signalEnter, shared_from_this(), &appl::widget::Search::OnCallbackReplaceEntryValidate);
registerOnEventNameWidget(this, "SEARCH:replace", "pressed", l_eventReplaceBt); subBind(ewol::widget::Button, "SEARCH:replace", signalPressed, shared_from_this(), &appl::widget::Search::OnCallbackReplace);
registerOnEventNameWidget(this, "SEARCH:case", "value", l_eventCaseCb); subBind(ewol::widget::Button, "SEARCH:case", signalValue, shared_from_this(), &appl::widget::Search::OnCallbackCase);
registerOnEventNameWidget(this, "SEARCH:wrap", "value", l_eventWrapCb); subBind(ewol::widget::Button, "SEARCH:wrap", signalValue, shared_from_this(), &appl::widget::Search::OnCallbackWrap);
registerOnEventNameWidget(this, "SEARCH:up-down", "value", l_eventForwardCb); subBind(ewol::widget::Button, "SEARCH:up-down", signalValue, shared_from_this(), &appl::widget::Search::OnCallbackForward);
// set default properties // set default properties
setConfigNamed("SEARCH:case", "value", std::to_string(m_caseSensitive)); parameterSetOnWidgetNamed("SEARCH:case", "value", etk::to_string(m_caseSensitive));
setConfigNamed("SEARCH:wrap", "value", std::to_string(m_wrap)); parameterSetOnWidgetNamed("SEARCH:wrap", "value", etk::to_string(m_wrap));
setConfigNamed("SEARCH:up-down", "value", std::to_string(m_forward)); parameterSetOnWidgetNamed("SEARCH:up-down", "value", etk::to_string(m_forward));
// get widget // get widget
m_searchEntry = ewol::dynamic_pointer_cast<ewol::widget::Entry>(getWidgetNamed("SEARCH:search-entry")); m_searchEntry = std::dynamic_pointer_cast<ewol::widget::Entry>(getSubObjectNamed("SEARCH:search-entry"));
m_replaceEntry = ewol::dynamic_pointer_cast<ewol::widget::Entry>(getWidgetNamed("SEARCH:replace-entry")); m_replaceEntry = std::dynamic_pointer_cast<ewol::widget::Entry>(getSubObjectNamed("SEARCH:replace-entry"));
// Display and hide event:
registerMultiCast(ednMsgGuiSearch);
// basicly hiden ... // basicly hiden ...
hide(); hide();
} }
@@ -68,12 +66,12 @@ appl::widget::Search::~Search() {
} }
void appl::widget::Search::find() { void appl::widget::Search::find() {
if (m_viewerManager == NULL) { if (m_viewerManager == nullptr) {
APPL_WARNING("No viewer manager selected!!!"); APPL_WARNING("No viewer manager selected!!!");
return; return;
} }
ewol::object::Shared<appl::TextViewer> viewer = m_viewerManager->getViewerSelected(); std::shared_ptr<appl::TextViewer> viewer = m_viewerManager->getViewerSelected();
if (viewer == NULL) { if (viewer == nullptr) {
APPL_INFO("No viewer selected!!!"); APPL_INFO("No viewer selected!!!");
return; return;
} }
@@ -104,12 +102,12 @@ void appl::widget::Search::find() {
} }
void appl::widget::Search::replace() { void appl::widget::Search::replace() {
if (m_viewerManager == NULL) { if (m_viewerManager == nullptr) {
APPL_WARNING("No viewer manager selected!!!"); APPL_WARNING("No viewer manager selected!!!");
return; return;
} }
ewol::object::Shared<appl::TextViewer> viewer = m_viewerManager->getViewerSelected(); std::shared_ptr<appl::TextViewer> viewer = m_viewerManager->getViewerSelected();
if (viewer == NULL) { if (viewer == nullptr) {
APPL_INFO("No viewer selected!!!"); APPL_INFO("No viewer selected!!!");
return; return;
} }
@@ -120,58 +118,50 @@ void appl::widget::Search::replace() {
viewer->replace(m_replaceData); viewer->replace(m_replaceData);
} }
void appl::widget::Search::OnCallbackHide() {
void appl::widget::Search::onReceiveMessage(const ewol::object::Message& _msg) { hide();
ewol::widget::Composer::onReceiveMessage(_msg); }
APPL_INFO("Search receive message : " << _msg); void appl::widget::Search::OnCallbackSearchValue(const std::string& _value) {
if ( _msg.getMessage() == l_eventSearchEntry) { m_searchData = etk::to_u32string(_value);
m_searchData = to_u32string(_msg.getData()); }
} else if ( _msg.getMessage() == l_eventSearchEntryEnter void appl::widget::Search::OnCallbackSearch() {
|| _msg.getMessage() == l_eventSearchBt) {
find(); find();
} else if ( _msg.getMessage() == l_eventReplaceEntry) { }
m_replaceData = to_u32string(_msg.getData()); void appl::widget::Search::OnCallbackSearchEntryValidate(const std::string& _value) {
} else if ( _msg.getMessage() == l_eventReplaceEntryEnter m_searchData = etk::to_u32string(_value);
|| _msg.getMessage() == l_eventReplaceBt) { find();
}
void appl::widget::Search::OnCallbackReplaceValue(const std::string& _value) {
m_replaceData = etk::to_u32string(_value);
}
void appl::widget::Search::OnCallbackReplace() {
replace(); replace();
find(); find();
} else if ( _msg.getMessage() == l_eventCaseCb) { }
m_caseSensitive = std::stob(_msg.getData()); void appl::widget::Search::OnCallbackReplaceEntryValidate(const std::string& _value) {
} else if ( _msg.getMessage() == l_eventWrapCb) { m_replaceData = etk::to_u32string(_value);
m_wrap = std::stob(_msg.getData()); replace();
} else if ( _msg.getMessage() == l_eventForwardCb) { find();
m_forward = std::stob(_msg.getData()); }
} else if ( _msg.getMessage() == l_eventHideBt) { void appl::widget::Search::OnCallbackCase(const bool& _value) {
hide(); m_caseSensitive = _value;
} else if ( _msg.getMessage() == ednMsgGuiSearch) { }
if (true == isHide()) { void appl::widget::Search::OnCallbackWrap(const bool& _value) {
show(); m_wrap = _value;
if (m_searchEntry!= NULL) { }
void appl::widget::Search::OnCallbackForward(const bool& _value) {
m_forward = _value;
}
void appl::widget::Search::selectSearch() {
if (m_searchEntry!= nullptr) {
m_searchEntry->keepFocus(); m_searchEntry->keepFocus();
} }
} else {
if( (m_searchEntry!=NULL && true == m_searchEntry->getFocus())
|| (m_replaceEntry!=NULL && true == m_replaceEntry->getFocus()) ) {
hide();
} else if (m_searchEntry!= NULL) {
m_searchEntry->keepFocus();
} else {
hide();
}
}
}
} }
void appl::widget::Search::onObjectRemove(const ewol::object::Shared<ewol::Object>& _object) { void appl::widget::Search::selectReplace() {
ewol::widget::Composer::onObjectRemove(_object); if (m_replaceEntry!= nullptr) {
if (_object == m_searchEntry) { m_replaceEntry->keepFocus();
m_searchEntry.reset();
}
if (_object == m_replaceEntry) {
m_replaceEntry.reset();
}
if (_object == m_viewerManager) {
m_viewerManager.reset();
} }
} }

View File

@@ -18,17 +18,20 @@ namespace appl {
namespace widget { namespace widget {
class Search : public ewol::widget::Composer { class Search : public ewol::widget::Composer {
private: private:
ewol::object::Shared<appl::ViewerManager> m_viewerManager; //!< handle on the buffer manager std::shared_ptr<appl::ViewerManager> m_viewerManager; //!< handle on the buffer manager
bool m_forward; bool m_forward;
bool m_caseSensitive; bool m_caseSensitive;
bool m_wrap; bool m_wrap;
ewol::object::Shared<ewol::widget::Entry> m_searchEntry; std::shared_ptr<ewol::widget::Entry> m_searchEntry;
ewol::object::Shared<ewol::widget::Entry> m_replaceEntry; std::shared_ptr<ewol::widget::Entry> m_replaceEntry;
std::u32string m_searchData; std::u32string m_searchData;
std::u32string m_replaceData; std::u32string m_replaceData;
public: protected:
// Constructeur // Constructeur
Search(); Search();
void init();
public:
DECLARE_FACTORY(Search);
virtual ~Search(); virtual ~Search();
private: private:
/** /**
@@ -39,9 +42,20 @@ namespace appl {
* @brief Replace the current selected text. * @brief Replace the current selected text.
*/ */
void replace(); void replace();
public: // derived function public:
virtual void onReceiveMessage(const ewol::object::Message& _msg); void selectSearch();
virtual void onObjectRemove(const ewol::object::Shared<ewol::Object>& _object); void selectReplace();
private: // callback functions
void OnCallbackHide();
void OnCallbackSearchValue(const std::string& _value);
void OnCallbackSearch();
void OnCallbackSearchEntryValidate(const std::string& _value);
void OnCallbackReplaceValue(const std::string& _value);
void OnCallbackReplace();
void OnCallbackReplaceEntryValidate(const std::string& _value);
void OnCallbackCase(const bool& _value);
void OnCallbackWrap(const bool& _value);
void OnCallbackForward(const bool& _value);
}; };
}; };
}; };

View File

@@ -12,31 +12,30 @@
#undef __class__ #undef __class__
#define __class__ "TagFileList" #define __class__ "TagFileList"
extern const char * const applEventCtagsListSelect = "appl-event-ctags-list-select"; appl::TagFileList::TagFileList() :
extern const char * const applEventCtagsListUnSelect = "appl-event-ctags-list-un-select"; signalSelect(*this, "select"),
extern const char * const applEventCtagsListValidate = "appl-event-ctags-list-validate"; signalValidate(*this, "validate"),
signalUnSelect(*this, "unselect") {
appl::TagFileList::TagFileList() {
addObjectType("appl::TagFileList"); addObjectType("appl::TagFileList");
m_selectedLine = -1; m_selectedLine = -1;
addEventId(applEventCtagsListSelect);
addEventId(applEventCtagsListValidate);
setMouseLimit(1); setMouseLimit(1);
// Load color properties: (use file list to be generic ...) // Load color properties: (use file list to be generic ...)
m_colorProperty = ewol::resource::ColorFile::keep("THEME:COLOR:ListFileSystem.json"); m_colorProperty = ewol::resource::ColorFile::create("THEME:COLOR:ListFileSystem.json");
if (m_colorProperty != NULL) { if (m_colorProperty != nullptr) {
m_colorIdText = m_colorProperty->request("text"); m_colorIdText = m_colorProperty->request("text");
m_colorIdBackground1 = m_colorProperty->request("background1"); m_colorIdBackground1 = m_colorProperty->request("background1");
m_colorIdBackground2 = m_colorProperty->request("background2"); m_colorIdBackground2 = m_colorProperty->request("background2");
m_colorIdBackgroundSelected = m_colorProperty->request("selected"); m_colorIdBackgroundSelected = m_colorProperty->request("selected");
} }
} }
void appl::TagFileList::init() {
ewol::widget::List::init();
}
appl::TagFileList::~TagFileList() { appl::TagFileList::~TagFileList() {
for (auto &it : m_list) { for (auto &it : m_list) {
delete(it); delete(it);
it = NULL; it = nullptr;
} }
} }
@@ -58,9 +57,9 @@ uint32_t appl::TagFileList::getNuberOfRaw() {
} }
bool appl::TagFileList::getElement(int32_t _colomn, int32_t _raw, std::string& _myTextToWrite, etk::Color<>& _fg, etk::Color<>& _bg) { bool appl::TagFileList::getElement(int32_t _colomn, int32_t _raw, std::string& _myTextToWrite, etk::Color<>& _fg, etk::Color<>& _bg) {
if (_raw >= 0 && (size_t)_raw < m_list.size() && NULL != m_list[_raw]) { if (_raw >= 0 && (size_t)_raw < m_list.size() && nullptr != m_list[_raw]) {
if (0 == _colomn) { if (0 == _colomn) {
_myTextToWrite = std::to_string(m_list[_raw]->fileLine); _myTextToWrite = etk::to_string(m_list[_raw]->fileLine);
} else { } else {
_myTextToWrite = m_list[_raw]->filename; _myTextToWrite = m_list[_raw]->filename;
} }
@@ -90,16 +89,16 @@ bool appl::TagFileList::onItemEvent(int32_t _IdInput, enum ewol::key::status _ty
} else { } else {
m_selectedLine = _raw; m_selectedLine = _raw;
} }
const char * event = applEventCtagsListValidate;
if (previousRaw != m_selectedLine) {
event = applEventCtagsListSelect;
}
if( m_selectedLine >= 0 if( m_selectedLine >= 0
&& m_selectedLine < (int64_t)m_list.size() && m_selectedLine < (int64_t)m_list.size()
&& NULL != m_list[m_selectedLine] ) { && nullptr != m_list[m_selectedLine] ) {
generateEventId(event, std::to_string(m_list[_raw]->fileLine)+":"+m_list[m_selectedLine]->filename); if (previousRaw != m_selectedLine) {
signalSelect.emit(etk::to_string(m_list[_raw]->fileLine)+":"+m_list[m_selectedLine]->filename);
} else { } else {
generateEventId(applEventCtagsListUnSelect); signalValidate.emit(etk::to_string(m_list[_raw]->fileLine)+":"+m_list[m_selectedLine]->filename);
}
} else {
signalUnSelect.emit();
} }
// need to regenerate the display of the list : // need to regenerate the display of the list :
markToRedraw(); markToRedraw();
@@ -117,7 +116,7 @@ bool appl::TagFileList::onItemEvent(int32_t _IdInput, enum ewol::key::status _ty
*/ */
void appl::TagFileList::add(std::string& _file, int32_t _line) { void appl::TagFileList::add(std::string& _file, int32_t _line) {
appl::TagListElement *tmpFile = new appl::TagListElement(_file, _line); appl::TagListElement *tmpFile = new appl::TagListElement(_file, _line);
if (NULL != tmpFile) { if (nullptr != tmpFile) {
m_list.push_back(tmpFile); m_list.push_back(tmpFile);
} }
markToRedraw(); markToRedraw();

View File

@@ -13,11 +13,6 @@
#include <ewol/widget/List.h> #include <ewol/widget/List.h>
#include <ewol/resource/ColorFile.h> #include <ewol/resource/ColorFile.h>
extern const char * const applEventCtagsListSelect;
extern const char * const applEventCtagsListValidate;
extern const char * const applEventCtagsListUnSelect;
namespace appl { namespace appl {
class TagListElement { class TagListElement {
public: public:
@@ -33,17 +28,24 @@ namespace appl {
}; };
}; };
class TagFileList : public ewol::widget::List { class TagFileList : public ewol::widget::List {
public:
ewol::object::Signal<std::string> signalSelect;
ewol::object::Signal<std::string> signalValidate;
ewol::object::Signal<void> signalUnSelect;
private: private:
int32_t m_selectedLine; int32_t m_selectedLine;
std::vector<appl::TagListElement*> m_list; std::vector<appl::TagListElement*> m_list;
protected: protected:
ewol::object::Shared<ewol::resource::ColorFile> m_colorProperty; //!< theme color property. std::shared_ptr<ewol::resource::ColorFile> m_colorProperty; //!< theme color property.
int32_t m_colorIdText; //!< Color of the text. int32_t m_colorIdText; //!< Color of the text.
int32_t m_colorIdBackground1; //!< Color of the Background. int32_t m_colorIdBackground1; //!< Color of the Background.
int32_t m_colorIdBackground2; //!< Color of the Background 2. int32_t m_colorIdBackground2; //!< Color of the Background 2.
int32_t m_colorIdBackgroundSelected; //!< Color of line selected. int32_t m_colorIdBackgroundSelected; //!< Color of line selected.
public: protected:
TagFileList(); TagFileList();
void init();
public:
DECLARE_FACTORY(TagFileList);
virtual ~TagFileList(); virtual ~TagFileList();
// display API : // display API :
virtual etk::Color<> getBasicBG(); virtual etk::Color<> getBasicBG();

View File

@@ -26,18 +26,23 @@
#define __class__ "TagFileSelection" #define __class__ "TagFileSelection"
extern const char * const applEventctagsSelection = "appl-event-ctags-validate"; static const char * const applEventctagsSelection = "appl-event-ctags-validate";
extern const char * const applEventctagsCancel = "appl-event-ctags-cancel"; static const char * const applEventctagsCancel = "appl-event-ctags-cancel";
static const char * const applEventCtagsListValidate = "appl-event-ctags-list-validate";
static const char * const applEventCtagsListSelect = "appl-event-ctags-list-selected";
static const char * const applEventCtagsListUnSelect = "appl-event-ctags-list-un-selected";
appl::TagFileSelection::TagFileSelection() {
appl::TagFileSelection::TagFileSelection() :
signalSelect(*this, "select"),
signalCancel(*this, "cancel") {
addObjectType("appl::TagFileSelection"); addObjectType("appl::TagFileSelection");
addEventId(applEventctagsSelection); }
addEventId(applEventctagsCancel);
ewol::object::Shared<ewol::widget::Label> myWidgetTitle; void appl::TagFileSelection::init() {
ewol::widget::PopUp::init();
ewol::object::Shared<ewol::widget::Sizer> mySizerVert; std::shared_ptr<ewol::widget::Sizer> mySizerVert;
#if defined(__TARGET_OS__Android) #if defined(__TARGET_OS__Android)
setMinSize(ewol::Dimension(vec2(90,90),ewol::Dimension::Pourcent)); setMinSize(ewol::Dimension(vec2(90,90),ewol::Dimension::Pourcent));
#elif defined(__TARGET_OS__Windows) #elif defined(__TARGET_OS__Windows)
@@ -46,15 +51,15 @@ appl::TagFileSelection::TagFileSelection() {
setMinSize(ewol::Dimension(vec2(80,80),ewol::Dimension::Pourcent)); setMinSize(ewol::Dimension(vec2(80,80),ewol::Dimension::Pourcent));
#endif #endif
mySizerVert = ewol::object::makeShared(new ewol::widget::Sizer(ewol::widget::Sizer::modeVert)); mySizerVert = ewol::widget::Sizer::create(ewol::widget::Sizer::modeVert);
if (NULL == mySizerVert) { if (nullptr == mySizerVert) {
EWOL_ERROR("Can not allocate widget == > display might be in error"); EWOL_ERROR("Can not allocate widget == > display might be in error");
} else { } else {
mySizerVert->lockExpand(bvec2(true,true)); mySizerVert->lockExpand(bvec2(true,true));
mySizerVert->setExpand(bvec2(true,true)); mySizerVert->setExpand(bvec2(true,true));
// set it in the pop-up-system : // set it in the pop-up-system :
setSubWidget(mySizerVert); setSubWidget(mySizerVert);
ewol::object::Shared<ewol::widget::Composer> compose = ewol::object::makeShared(new ewol::widget::Composer(ewol::widget::Composer::String, std::shared_ptr<ewol::widget::Composer> compose = ewol::widget::Composer::create(ewol::widget::Composer::String,
"<sizer mode=\"hori\" expand=\"true,false\" lock=\"false,true\">\n" "<sizer mode=\"hori\" expand=\"true,false\" lock=\"false,true\">\n"
" <spacer expand=\"true,false\"/>\n" " <spacer expand=\"true,false\"/>\n"
" <button name=\"PLUGIN-CTAGS-jump\" expand=\"false\" fill=\"true\">" " <button name=\"PLUGIN-CTAGS-jump\" expand=\"false\" fill=\"true\">"
@@ -69,27 +74,28 @@ appl::TagFileSelection::TagFileSelection() {
" <label>Cancel</label>\n" " <label>Cancel</label>\n"
" </sizer>\n" " </sizer>\n"
" </button>\n" " </button>\n"
"</sizer>\n")); "</sizer>\n");
compose->setExpand(bvec2(true,false)); compose->setExpand(bvec2(true,false));
compose->setFill(bvec2(true,true)); compose->setFill(bvec2(true,true));
mySizerVert->subWidgetAdd(compose); mySizerVert->subWidgetAdd(compose);
compose->registerOnEventNameWidget(this, "PLUGIN-CTAGS-jump", "pressed", applEventctagsSelection); externSubBind(compose, ewol::widget::Button, "PLUGIN-CTAGS-jump", signalPressed, shared_from_this(), &appl::TagFileSelection::onCallbackCtagsSelection);
compose->registerOnEventNameWidget(this, "PLUGIN-CTAGS-cancel", "pressed", applEventctagsCancel); externSubBind(compose, ewol::widget::Button, "PLUGIN-CTAGS-cancel", signalPressed, shared_from_this(), &appl::TagFileSelection::onCallbackCtagsCancel);
m_listTag = ewol::object::makeShared(new appl::TagFileList()); m_listTag = appl::TagFileList::create();
if (NULL == m_listTag) { if (nullptr == m_listTag) {
EWOL_ERROR("Can not allocate widget == > display might be in error"); EWOL_ERROR("Can not allocate widget == > display might be in error");
} else { } else {
m_listTag->registerOnEvent(this, applEventCtagsListValidate); m_listTag->signalValidate.bind(shared_from_this(), &appl::TagFileSelection::onCallbackCtagsListValidate);
m_listTag->registerOnEvent(this, applEventCtagsListSelect); m_listTag->signalSelect.bind(shared_from_this(), &appl::TagFileSelection::onCallbackCtagsListSelect);
m_listTag->registerOnEvent(this, applEventCtagsListUnSelect); m_listTag->signalUnSelect.bind(shared_from_this(), &appl::TagFileSelection::onCallbackCtagsListUnSelect);
m_listTag->setExpand(bvec2(true,true)); m_listTag->setExpand(bvec2(true,true));
m_listTag->setFill(bvec2(true,true)); m_listTag->setFill(bvec2(true,true));
mySizerVert->subWidgetAdd(m_listTag); mySizerVert->subWidgetAdd(m_listTag);
} }
myWidgetTitle = new ewol::widget::Label("Ctags Jump Selection ..."); std::shared_ptr<ewol::widget::Label> myWidgetTitle;
if (NULL == myWidgetTitle) { myWidgetTitle = ewol::widget::Label::create("Ctags Jump Selection ...");
if (nullptr == myWidgetTitle) {
EWOL_ERROR("Can not allocate widget == > display might be in error"); EWOL_ERROR("Can not allocate widget == > display might be in error");
} else { } else {
mySizerVert->subWidgetAdd(myWidgetTitle); mySizerVert->subWidgetAdd(myWidgetTitle);
@@ -102,30 +108,34 @@ appl::TagFileSelection::~TagFileSelection() {
} }
void appl::TagFileSelection::onReceiveMessage(const ewol::object::Message& _msg) { void appl::TagFileSelection::onCallbackCtagsSelection() {
EWOL_INFO("ctags LIST ... : " << _msg );
if (_msg.getMessage() == applEventctagsSelection) {
if (m_eventNamed!="") { if (m_eventNamed!="") {
generateEventId(applEventctagsSelection, m_eventNamed); signalSelect.emit(m_eventNamed);
// == > Auto remove ... // == > Auto remove ...
autoDestroy(); autoDestroy();
} }
} else if (_msg.getMessage() == applEventCtagsListSelect) { }
m_eventNamed = _msg.getData();
} else if (_msg.getMessage() == applEventCtagsListUnSelect) { void appl::TagFileSelection::onCallbackCtagsCancel() {
m_eventNamed = ""; signalCancel.emit();
} else if (_msg.getMessage() == applEventCtagsListValidate) {
generateEventId(applEventctagsSelection, _msg.getData());
// == > Auto remove ...
autoDestroy();
} else if (_msg.getMessage() == applEventctagsCancel) {
generateEventId(applEventctagsCancel, "");
// == > Auto remove ... // == > Auto remove ...
autoDestroy(); autoDestroy();
} }
return;
}; void appl::TagFileSelection::onCallbackCtagsListValidate(const std::string& _value) {
signalSelect.emit(_value);
// == > Auto remove ...
autoDestroy();
}
void appl::TagFileSelection::onCallbackCtagsListSelect(const std::string& _value) {
m_eventNamed = _value;
}
void appl::TagFileSelection::onCallbackCtagsListUnSelect() {
m_eventNamed = "";
}
/** /**
@@ -134,21 +144,8 @@ void appl::TagFileSelection::onReceiveMessage(const ewol::object::Message& _msg)
* @param[in] jump line id * @param[in] jump line id
*/ */
void appl::TagFileSelection::addCtagsNewItem(std::string _file, int32_t _line) { void appl::TagFileSelection::addCtagsNewItem(std::string _file, int32_t _line) {
if (NULL != m_listTag) { if (nullptr != m_listTag) {
m_listTag->add(_file, _line); m_listTag->add(_file, _line);
} }
} }
void appl::TagFileSelection::onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject) {
// First step call parrent :
ewol::widget::PopUp::onObjectRemove(_removeObject);
// second step find if in all the elements ...
if(_removeObject == m_listTag) {
m_listTag = NULL;
}
}

View File

@@ -13,16 +13,19 @@
#include <ewol/widget/PopUp.h> #include <ewol/widget/PopUp.h>
#include <appl/Gui/TagFileList.h> #include <appl/Gui/TagFileList.h>
extern const char * const applEventctagsSelection;
extern const char * const applEventctagsCancel;
namespace appl { namespace appl {
class TagFileSelection : public ewol::widget::PopUp { class TagFileSelection : public ewol::widget::PopUp {
public:
ewol::object::Signal<std::string> signalSelect;
ewol::object::Signal<void> signalCancel;
private: private:
ewol::object::Shared<appl::TagFileList> m_listTag; std::shared_ptr<appl::TagFileList> m_listTag;
std::string m_eventNamed; std::string m_eventNamed;
public: public:
TagFileSelection(); TagFileSelection();
void init();
public:
DECLARE_FACTORY(TagFileSelection);
virtual ~TagFileSelection(); virtual ~TagFileSelection();
/** /**
* @brief add a Ctags item on the curent list * @brief add a Ctags item on the curent list
@@ -30,9 +33,12 @@ namespace appl {
* @param[in] jump line id * @param[in] jump line id
*/ */
void addCtagsNewItem(std::string file, int32_t line); void addCtagsNewItem(std::string file, int32_t line);
public: // herited function public: // callback function
void onReceiveMessage(const ewol::object::Message& _msg); void onCallbackCtagsSelection();
void onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject); void onCallbackCtagsCancel();
void onCallbackCtagsListValidate(const std::string& _value);
void onCallbackCtagsListSelect(const std::string& _value);
void onCallbackCtagsListUnSelect();
}; };
}; };

View File

@@ -28,26 +28,24 @@
int64_t processTimeLocal = (endTime - startTime); \ int64_t processTimeLocal = (endTime - startTime); \
APPL_DEBUG(comment << (float)((float)processTimeLocal / 1000.0) << "ms"); APPL_DEBUG(comment << (float)((float)processTimeLocal / 1000.0) << "ms");
appl::TextViewer::TextViewer(const std::string& _fontName, int32_t _fontSize) : static const char* const appl_Buffer_eventIsModify = "buffer-is-modify";
m_displayText(_fontName, _fontSize), static const char* const appl_Buffer_eventSelectChange = "buffer-select-change";
appl::TextViewer::TextViewer() :
m_insertMode(false) { m_insertMode(false) {
addObjectType("appl::TextViewer"); addObjectType("appl::TextViewer");
setCanHaveFocus(true); setCanHaveFocus(true);
registerMultiCast(ednMsgBufferId);
registerMultiCast(ednMsgGuiFind);
registerMultiCast(ednMsgGuiReplace);
registerMultiCast(appl::MsgSelectGotoLine);
registerMultiCast(appl::MsgSelectNewFile);
registerMultiCast(appl::MsgSelectGotoLineSelect);
setLimitScrolling(0.2); setLimitScrolling(0.2);
setSingleFinger(false); setSingleFinger(false);
// load buffer manager: // load buffer manager:
m_bufferManager = appl::BufferManager::keep(); m_bufferManager = appl::BufferManager::create();
m_viewerManager = appl::ViewerManager::keep(); m_pluginManager = appl::textPluginManager::create();
m_viewerManager = appl::ViewerManager::create();
// load color properties // load color properties
m_paintingProperties = appl::GlyphPainting::keep("THEME:COLOR:textViewer.json"); m_paintingProperties = appl::GlyphPainting::create("THEME:COLOR:textViewer.json");
// get all id properties ... // get all id properties ...
m_colorBackground = m_paintingProperties->request("CODE_basicBackgroung"); m_colorBackground = m_paintingProperties->request("CODE_basicBackgroung");
m_colorSpace = m_paintingProperties->request("CODE_space"); m_colorSpace = m_paintingProperties->request("CODE_space");
@@ -56,18 +54,87 @@ appl::TextViewer::TextViewer(const std::string& _fontName, int32_t _fontSize) :
m_colorLineNumber = m_paintingProperties->request("CODE_lineNumber"); m_colorLineNumber = m_paintingProperties->request("CODE_lineNumber");
m_colorSelection = m_paintingProperties->request("SelectedText"); m_colorSelection = m_paintingProperties->request("SelectedText");
m_colorNormal = m_paintingProperties->request("normal"); m_colorNormal = m_paintingProperties->request("normal");
}
appl::textPluginManager::connect(*this); void appl::TextViewer::init(const std::string& _fontName, int32_t _fontSize) {
ewol::widget::WidgetScrolled::init();
m_displayText.setFont(_fontName, _fontSize);
m_pluginManager->connect(*this);
// last created has focus ... // last created has focus ...
setCurrentSelect(); setCurrentSelect();
signalShortcut.bind(shared_from_this(), &appl::TextViewer::onCallbackShortCut);
/*
registerMultiCast(ednMsgBufferId);
registerMultiCast(ednMsgGuiFind);
registerMultiCast(ednMsgGuiReplace);
registerMultiCast(appl::MsgSelectGotoLine);
registerMultiCast(appl::MsgSelectGotoLineSelect);
*/
if (m_bufferManager != nullptr) {
m_bufferManager->signalSelectFile.bind(shared_from_this(), &appl::TextViewer::onCallbackselectNewFile);
}
} }
appl::TextViewer::~TextViewer() { appl::TextViewer::~TextViewer() {
appl::textPluginManager::disconnect(*this); m_pluginManager->disconnect(*this);
}
void appl::TextViewer::onCallbackShortCut(const std::string& _value) {
if (m_pluginManager->onReceiveShortCut(*this, _value) == true) {
return;
}
}
void appl::TextViewer::onCallbackselectNewFile(const std::string& _value) {
// reset scroll:
if (m_buffer != nullptr) {
m_buffer->unBindAll(shared_from_this());
bool needAdd = true;
auto it = m_drawingRemenber.begin();
while (it != m_drawingRemenber.end()) {
std::shared_ptr<appl::Buffer> tmpBuff = it->first.lock();
if (tmpBuff == nullptr) {
it = m_drawingRemenber.erase(it);
continue;
}
if (tmpBuff == m_buffer) {
it->second = m_originScrooled;
APPL_VERBOSE("store origin : " << m_originScrooled);
needAdd = false;
break;
}
++it;
}
if (needAdd == true) {
m_drawingRemenber.push_back(std::make_pair(std::weak_ptr<appl::Buffer>(m_buffer), m_originScrooled));
APPL_VERBOSE("Push origin : " << m_originScrooled);
}
}
m_originScrooled = vec2(0,0);
if (m_bufferManager != nullptr) {
m_buffer = m_bufferManager->get(_value);
m_bufferManager->setBufferSelected(m_buffer);
if (m_buffer != nullptr) {
m_buffer->signalIsModify.bind(shared_from_this(), &appl::TextViewer::onCallbackIsModify);
m_buffer->signalSelectChange.bind(shared_from_this(), &appl::TextViewer::onCallbackSelectChange);
for (auto element : m_drawingRemenber) {
if (element.first.lock() == m_buffer) {
m_originScrooled = element.second;
APPL_VERBOSE("retrive origin : " << m_originScrooled);
// TODO : Check if this element is not out of the display text ...
break;
}
}
}
}
markToRedraw();
return;
} }
std::string appl::TextViewer::getBufferPath() { std::string appl::TextViewer::getBufferPath() {
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return ""; return "";
} }
std::string filename = m_buffer->getFileName(); std::string filename = m_buffer->getFileName();
@@ -109,7 +176,7 @@ void appl::TextViewer::onRegenerateDisplay() {
m_displayDrawing.setColor((*m_paintingProperties)[m_colorBackground].getForeground()); m_displayDrawing.setColor((*m_paintingProperties)[m_colorBackground].getForeground());
m_displayDrawing.rectangleWidth(m_size); m_displayDrawing.rectangleWidth(m_size);
if (m_buffer == NULL) { if (m_buffer == nullptr) {
m_maxSize.setX(256); m_maxSize.setX(256);
m_maxSize.setY(256); m_maxSize.setY(256);
m_displayText.setTextAlignement(10, m_size.x()-20, ewol::compositing::alignLeft); m_displayText.setTextAlignement(10, m_size.x()-20, ewol::compositing::alignLeft);
@@ -138,7 +205,7 @@ void appl::TextViewer::onRegenerateDisplay() {
vec3 tmpCursorPosition(0, 0, -1); vec3 tmpCursorPosition(0, 0, -1);
float tmpCursorLenght = -1.0; float tmpCursorLenght = -1.0;
// real display ... // real display ...
m_displayText.setColor(etk::Color<>(0, 0, 0, 256)); m_displayText.setColor(etk::Color<>(0, 0, 0, 255));
float countNbLine = 1; float countNbLine = 1;
int32_t countColomn = 0; int32_t countColomn = 0;
// the siplay string : // the siplay string :
@@ -204,7 +271,7 @@ void appl::TextViewer::onRegenerateDisplay() {
appl::DisplayHLData displayLocalSyntax; appl::DisplayHLData displayLocalSyntax;
m_buffer->hightlightGenerateLines(displayLocalSyntax, startingIt, (m_size.y()/tmpLetterSize.y()) + 5); m_buffer->hightlightGenerateLines(displayLocalSyntax, startingIt, (m_size.y()/tmpLetterSize.y()) + 5);
float maxSizeX = 0; float maxSizeX = 0;
appl::HighlightInfo * HLColor = NULL; appl::HighlightInfo * HLColor = nullptr;
bool DisplayCursorAndSelection = isSelectedLast(); bool DisplayCursorAndSelection = isSelectedLast();
appl::Buffer::Iterator it; appl::Buffer::Iterator it;
for (it = startingIt; for (it = startingIt;
@@ -220,12 +287,12 @@ void appl::TextViewer::onRegenerateDisplay() {
if (*it == u32char::Return) { if (*it == u32char::Return) {
countNbLine += 1; countNbLine += 1;
countColomn = 0; countColomn = 0;
maxSizeX = etk_max(m_displayText.getPos().x(), maxSizeX); maxSizeX = std::max(m_displayText.getPos().x(), maxSizeX);
// Display the end line position only if we have the focus ... // Display the end line position only if we have the focus ...
if (DisplayCursorAndSelection == true) { if (DisplayCursorAndSelection == true) {
if (it >= selectPosStart && it < selectPosStop) { if (it >= selectPosStart && it < selectPosStop) {
ewol::compositing::Drawing& draw = m_displayText.getDrawing(); ewol::compositing::Drawing& draw = m_displayText.getDrawing();
draw.setColor(etk::Color<>(0xFF0000FF)); draw.setColor(etk::Color<>(0xFF, 0x00, 0x00, 0xFF));
draw.setPos(m_displayText.getPos() + tmpLetterSize/4.0f); draw.setPos(m_displayText.getPos() + tmpLetterSize/4.0f);
draw.rectangle(m_displayText.getPos() + tmpLetterSize*3.0f/4.0f); draw.rectangle(m_displayText.getPos() + tmpLetterSize*3.0f/4.0f);
} }
@@ -242,8 +309,8 @@ void appl::TextViewer::onRegenerateDisplay() {
} }
HLColor = m_buffer->getElementColorAtPosition(displayLocalSyntax, (int64_t)it); HLColor = m_buffer->getElementColorAtPosition(displayLocalSyntax, (int64_t)it);
bool haveBackground = false; bool haveBackground = false;
if ( HLColor != NULL if ( HLColor != nullptr
&& HLColor->patern != NULL) { && HLColor->patern != nullptr) {
m_displayText.setColor(HLColor->patern->getColorGlyph().getForeground()); m_displayText.setColor(HLColor->patern->getColorGlyph().getForeground());
m_displayText.setColorBg(HLColor->patern->getColorGlyph().getBackground()); m_displayText.setColorBg(HLColor->patern->getColorGlyph().getBackground());
haveBackground = HLColor->patern->getColorGlyph().haveBackground(); haveBackground = HLColor->patern->getColorGlyph().haveBackground();
@@ -281,7 +348,7 @@ void appl::TextViewer::onRegenerateDisplay() {
tmpCursorPosition = m_displayText.getPos(); tmpCursorPosition = m_displayText.getPos();
tmpCursorLenght = 5; tmpCursorLenght = 5;
} }
maxSizeX = etk_max(m_displayText.getPos().x(), maxSizeX); maxSizeX = std::max(m_displayText.getPos().x(), maxSizeX);
// Display cursor only if we have the focus ... // Display cursor only if we have the focus ...
if ( tmpCursorPosition.z() != -1 if ( tmpCursorPosition.z() != -1
&& getFocus() == true) { && getFocus() == true) {
@@ -313,11 +380,11 @@ void appl::TextViewer::onRegenerateDisplay() {
} }
bool appl::TextViewer::onEventEntry(const ewol::event::Entry& _event) { bool appl::TextViewer::onEventEntry(const ewol::event::Entry& _event) {
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return false; return false;
} }
// First call plugin // First call plugin
if (appl::textPluginManager::onEventEntry(*this, _event) == true) { if (m_pluginManager->onEventEntry(*this, _event) == true) {
markToRedraw(); markToRedraw();
return true; return true;
} }
@@ -429,7 +496,7 @@ bool appl::TextViewer::onEventInput(const ewol::event::Input& _event) {
keepFocus(); keepFocus();
} }
//tic(); //tic();
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return false; return false;
} }
// First call the scrolling widget : // First call the scrolling widget :
@@ -439,7 +506,7 @@ bool appl::TextViewer::onEventInput(const ewol::event::Input& _event) {
} }
APPL_VERBOSE("event : " << _event); APPL_VERBOSE("event : " << _event);
// Second call plugin // Second call plugin
if (appl::textPluginManager::onEventInput(*this, _event) == true) { if (m_pluginManager->onEventInput(*this, _event) == true) {
markToRedraw(); markToRedraw();
return true; return true;
} }
@@ -456,9 +523,9 @@ bool appl::TextViewer::onEventInput(const ewol::event::Input& _event) {
} }
if ( _event.getId() == 12 if ( _event.getId() == 12
&& _event.getStatus() == ewol::key::statusSingle) { && _event.getStatus() == ewol::key::statusSingle) {
APPL_DEBUG("kjhkjhkjh"); APPL_TODO("RAT5 SAVE button ==> TODO implement");
// Rat5 save event // Rat5 save event
sendMultiCast(ednMsgGuiSave, "current"); //sendMultiCast(ednMsgGuiSave, "current");
return true; return true;
} }
// just forward event == > manage directly in the buffer // just forward event == > manage directly in the buffer
@@ -613,99 +680,20 @@ appl::Buffer::Iterator appl::TextViewer::getMousePosition(const vec2& _relativeP
} }
void appl::TextViewer::onEventClipboard(enum ewol::context::clipBoard::clipboardListe _clipboardID) { void appl::TextViewer::onEventClipboard(enum ewol::context::clipBoard::clipboardListe _clipboardID) {
if (m_buffer != NULL) { if (m_buffer != nullptr) {
std::string data = ewol::context::clipBoard::get(_clipboardID); std::string data = ewol::context::clipBoard::get(_clipboardID);
write(data); write(data);
} }
markToRedraw(); markToRedraw();
} }
void appl::TextViewer::onReceiveMessage(const ewol::object::Message& _msg) { void appl::TextViewer::onCallbackIsModify() {
ewol::widget::WidgetScrolled::onReceiveMessage(_msg);
APPL_VERBOSE("receive msg: " << _msg);
// First call plugin
if (appl::textPluginManager::onReceiveMessageViewer(*this, _msg) == true) {
markToRedraw(); markToRedraw();
return;
} }
// event needed even if selection of buffer is not done ... void appl::TextViewer::onCallbackSelectChange() {
if (_msg.getMessage() == appl::Buffer::eventIsModify) {
markToRedraw(); markToRedraw();
return;
}
if (_msg.getMessage() == appl::Buffer::eventSelectChange) {
markToRedraw();
return;
}
// If not the last buffer selected, then no event parsing ...
if (isSelectedLast() == false) {
return;
}
if (_msg.getMessage() == appl::MsgSelectGotoLineSelect) {
if (m_buffer == NULL) {
return;
}
appl::Buffer::Iterator it = m_buffer->countForwardNLines(m_buffer->begin(), std::stoi(_msg.getData()));
select(it, m_buffer->getEndLine(it));
markToRedraw();
return;
}
if (_msg.getMessage() == appl::MsgSelectGotoLine) {
if (m_buffer == NULL) {
return;
}
appl::Buffer::Iterator it = m_buffer->countForwardNLines(m_buffer->begin(), std::stoi(_msg.getData()));
moveCursor(it);
markToRedraw();
return;
}
if (_msg.getMessage() == appl::MsgSelectNewFile) {
// reset scroll:
if (m_buffer != NULL) {
m_buffer->unRegisterOnEvent(this);
bool needAdd = true;
for (size_t iii=0; iii<m_drawingRemenber.size(); ++iii) {
if (m_drawingRemenber[iii].first == m_buffer) {
m_drawingRemenber[iii].second = m_originScrooled;
APPL_VERBOSE("store origin : " << m_originScrooled);
needAdd = false;
break;
}
}
if (needAdd == true) {
m_drawingRemenber.push_back(std::make_pair(m_buffer, m_originScrooled));
APPL_VERBOSE("Push origin : " << m_originScrooled);
}
}
m_originScrooled = vec2(0,0);
if (m_bufferManager != NULL) {
m_buffer = m_bufferManager->get(_msg.getData());
m_bufferManager->setBufferSelected(m_buffer);
if (m_buffer != NULL) {
m_buffer->registerOnEvent(this, appl::Buffer::eventIsModify);
m_buffer->registerOnEvent(this, appl::Buffer::eventSelectChange);
for (auto element : m_drawingRemenber) {
if (element.first == m_buffer) {
m_originScrooled = element.second;
APPL_VERBOSE("retrive origin : " << m_originScrooled);
// TODO : Check if this element is not out of the display text ...
break;
}
}
}
}
markToRedraw();
return;
}
} }
void appl::TextViewer::onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject) {
ewol::widget::WidgetScrolled::onObjectRemove(_removeObject);
if (m_buffer == _removeObject) {
m_buffer = NULL;
markToRedraw();
}
}
void appl::TextViewer::onGetFocus() { void appl::TextViewer::onGetFocus() {
showKeyboard(); showKeyboard();
@@ -731,7 +719,7 @@ void appl::TextViewer::setFontName(const std::string& _fontName) {
// TODO : Update process time ==> a little expensive (2->4ms) in end of file // TODO : Update process time ==> a little expensive (2->4ms) in end of file
void appl::TextViewer::updateScrolling() { void appl::TextViewer::updateScrolling() {
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return; return;
} }
vec2 realCursorPosition(0,0); vec2 realCursorPosition(0,0);
@@ -760,11 +748,11 @@ void appl::TextViewer::updateScrolling() {
} }
bool appl::TextViewer::moveCursor(const appl::Buffer::Iterator& _pos) { bool appl::TextViewer::moveCursor(const appl::Buffer::Iterator& _pos) {
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return false; return false;
} }
markToRedraw(); markToRedraw();
if (appl::textPluginManager::onCursorMove(*this, _pos) == true) { if (m_pluginManager->onCursorMove(*this, _pos) == true) {
updateScrolling(); updateScrolling();
return true; return true;
} }
@@ -774,7 +762,7 @@ bool appl::TextViewer::moveCursor(const appl::Buffer::Iterator& _pos) {
} }
bool appl::TextViewer::write(const std::string& _data) { bool appl::TextViewer::write(const std::string& _data) {
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return false; return false;
} }
if (m_buffer->hasTextSelected() == true) { if (m_buffer->hasTextSelected() == true) {
@@ -784,39 +772,39 @@ bool appl::TextViewer::write(const std::string& _data) {
} }
bool appl::TextViewer::write(const std::string& _data, const appl::Buffer::Iterator& _pos) { bool appl::TextViewer::write(const std::string& _data, const appl::Buffer::Iterator& _pos) {
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return false; return false;
} }
markToRedraw(); markToRedraw();
if (appl::textPluginManager::onWrite(*this, _pos, _data) == true) { if (m_pluginManager->onWrite(*this, _pos, _data) == true) {
// no call of the move cursor, because pluging might call theses function to copy and cut data... // no call of the move cursor, because pluging might call theses function to copy and cut data...
updateScrolling(); updateScrolling();
return true; return true;
} }
bool ret = m_buffer->write(_data, _pos); bool ret = m_buffer->write(_data, _pos);
appl::textPluginManager::onCursorMove(*this, m_buffer->cursor()); m_pluginManager->onCursorMove(*this, m_buffer->cursor());
updateScrolling(); updateScrolling();
return ret; return ret;
} }
bool appl::TextViewer::replace(const std::string& _data, const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _posEnd) { bool appl::TextViewer::replace(const std::string& _data, const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _posEnd) {
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return false; return false;
} }
markToRedraw(); markToRedraw();
if (appl::textPluginManager::onReplace(*this, _pos, _data, _posEnd) == true) { if (m_pluginManager->onReplace(*this, _pos, _data, _posEnd) == true) {
// no call of the move cursor, because pluging might call theses function to copy and cut data... // no call of the move cursor, because pluging might call theses function to copy and cut data...
updateScrolling(); updateScrolling();
return true; return true;
} }
bool ret = m_buffer->replace(_data, _pos, _posEnd); bool ret = m_buffer->replace(_data, _pos, _posEnd);
appl::textPluginManager::onCursorMove(*this, m_buffer->cursor()); m_pluginManager->onCursorMove(*this, m_buffer->cursor());
updateScrolling(); updateScrolling();
return ret; return ret;
} }
bool appl::TextViewer::replace(const std::string& _data) { bool appl::TextViewer::replace(const std::string& _data) {
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return false; return false;
} }
if (m_buffer->hasTextSelected() == false) { if (m_buffer->hasTextSelected() == false) {
@@ -826,7 +814,7 @@ bool appl::TextViewer::replace(const std::string& _data) {
} }
void appl::TextViewer::remove() { void appl::TextViewer::remove() {
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return; return;
} }
if (m_buffer->hasTextSelected() == false) { if (m_buffer->hasTextSelected() == false) {
@@ -834,17 +822,17 @@ void appl::TextViewer::remove() {
return; return;
} }
markToRedraw(); markToRedraw();
if (appl::textPluginManager::onRemove(*this, m_buffer->selectStart(), m_buffer->selectStop()) == true) { if (m_pluginManager->onRemove(*this, m_buffer->selectStart(), m_buffer->selectStop()) == true) {
return; return;
} }
m_buffer->removeSelection(); m_buffer->removeSelection();
appl::textPluginManager::onCursorMove(*this, m_buffer->cursor()); m_pluginManager->onCursorMove(*this, m_buffer->cursor());
} }
void appl::TextViewer::moveCursorRight(appl::TextViewer::moveMode _mode) { void appl::TextViewer::moveCursorRight(appl::TextViewer::moveMode _mode) {
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return; return;
} }
markToRedraw(); markToRedraw();
@@ -867,7 +855,7 @@ void appl::TextViewer::moveCursorRight(appl::TextViewer::moveMode _mode) {
} }
void appl::TextViewer::moveCursorLeft(appl::TextViewer::moveMode _mode) { void appl::TextViewer::moveCursorLeft(appl::TextViewer::moveMode _mode) {
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return; return;
} }
markToRedraw(); markToRedraw();
@@ -890,7 +878,7 @@ void appl::TextViewer::moveCursorLeft(appl::TextViewer::moveMode _mode) {
} }
void appl::TextViewer::moveCursorUp(uint32_t _nbLine) { void appl::TextViewer::moveCursorUp(uint32_t _nbLine) {
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return; return;
} }
markToRedraw(); markToRedraw();
@@ -916,7 +904,7 @@ void appl::TextViewer::moveCursorUp(uint32_t _nbLine) {
} }
void appl::TextViewer::moveCursorDown(uint32_t _nbLine) { void appl::TextViewer::moveCursorDown(uint32_t _nbLine) {
if (m_buffer == NULL) { if (m_buffer == nullptr) {
return; return;
} }
markToRedraw(); markToRedraw();
@@ -996,14 +984,14 @@ float appl::TextViewer::getScreenSize(const appl::Buffer::Iterator& _startLinePo
} }
void appl::TextViewer::setCurrentSelect() { void appl::TextViewer::setCurrentSelect() {
if (m_viewerManager != NULL) { if (m_viewerManager != nullptr) {
m_viewerManager->setViewerSelected(this, m_buffer); m_viewerManager->setViewerSelected(std::dynamic_pointer_cast<appl::TextViewer>(shared_from_this()), m_buffer);
} }
} }
bool appl::TextViewer::isSelectedLast() { bool appl::TextViewer::isSelectedLast() {
if (m_viewerManager != NULL) { if (m_viewerManager != nullptr) {
return m_viewerManager->isLastSelected(this); return m_viewerManager->isLastSelected(std::dynamic_pointer_cast<appl::TextViewer>(shared_from_this()));
} }
return false; return false;
} }

View File

@@ -22,9 +22,10 @@
#include <utility> #include <utility>
namespace appl { namespace appl {
class textPluginManager;
class TextViewer : public ewol::widget::WidgetScrolled { class TextViewer : public ewol::widget::WidgetScrolled {
private: private:
ewol::object::Shared<appl::GlyphPainting> m_paintingProperties; //!< element painting property std::shared_ptr<appl::GlyphPainting> m_paintingProperties; //!< element painting property
int32_t m_colorBackground; int32_t m_colorBackground;
int32_t m_colorSpace; int32_t m_colorSpace;
int32_t m_colorTabulation; int32_t m_colorTabulation;
@@ -33,25 +34,29 @@ namespace appl {
int32_t m_colorSelection; int32_t m_colorSelection;
int32_t m_colorNormal; int32_t m_colorNormal;
private: private:
ewol::object::Shared<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager std::shared_ptr<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
ewol::object::Shared<appl::ViewerManager> m_viewerManager; //!< handle on the buffer manager std::shared_ptr<appl::textPluginManager> m_pluginManager; //!< Plugin manager interface
std::shared_ptr<appl::ViewerManager> m_viewerManager; //!< handle on the buffer manager
protected:
TextViewer();
void init(const std::string& _fontName="", int32_t _fontSize=-1);
public: public:
TextViewer(const std::string& _fontName="", int32_t _fontSize=-1); DECLARE_FACTORY(TextViewer);
virtual ~TextViewer(); virtual ~TextViewer();
private: private:
ewol::object::Shared<appl::Buffer> m_buffer; //!< pointer on the current buffer to display (can be null if the buffer is remover or in state of changing buffer) std::shared_ptr<appl::Buffer> m_buffer; //!< pointer on the current buffer to display (can be null if the buffer is remover or in state of changing buffer)
public: public:
/** /**
* @brief Get the buffer property (only for the class : template <typename TYPE> class TextViewerPluginData) * @brief Get the buffer property (only for the class : template <typename TYPE> class TextViewerPluginData)
* @return pointer on buffer * @return pointer on buffer
*/ */
ewol::object::Shared<appl::Buffer> internalGetBuffer() { std::shared_ptr<appl::Buffer> internalGetBuffer() {
return m_buffer; return m_buffer;
} }
private: private:
ewol::compositing::Text m_displayText; //!< Text display properties. ewol::compositing::Text m_displayText; //!< Text display properties.
ewol::compositing::Drawing m_displayDrawing; //!< Other diaplay requested. ewol::compositing::Drawing m_displayDrawing; //!< Other diaplay requested.
std::vector<std::pair<ewol::object::Shared<appl::Buffer>, vec2>> m_drawingRemenber; std::vector<std::pair<std::weak_ptr<appl::Buffer>, vec2>> m_drawingRemenber;
public: public:
void setFontSize(int32_t _size); void setFontSize(int32_t _size);
void setFontName(const std::string& _fontName); void setFontName(const std::string& _fontName);
@@ -60,8 +65,6 @@ namespace appl {
public: // Derived function public: // Derived function
virtual bool calculateMinSize(); virtual bool calculateMinSize();
virtual void onRegenerateDisplay(); virtual void onRegenerateDisplay();
virtual void onReceiveMessage(const ewol::object::Message& _msg);
virtual void onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject);
virtual bool onEventInput(const ewol::event::Input& _event); virtual bool onEventInput(const ewol::event::Input& _event);
virtual bool onEventEntry(const ewol::event::Entry& _event); virtual bool onEventEntry(const ewol::event::Entry& _event);
virtual void onEventClipboard(enum ewol::context::clipBoard::clipboardListe _clipboardID); virtual void onEventClipboard(enum ewol::context::clipBoard::clipboardListe _clipboardID);
@@ -85,7 +88,7 @@ namespace appl {
bool replace(const std::string& _data, const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _posEnd); bool replace(const std::string& _data, const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _posEnd);
bool replace(const std::string& _data); bool replace(const std::string& _data);
bool replace(const std::u32string& _data) { bool replace(const std::u32string& _data) {
return replace(std::to_string(_data)); return replace(etk::to_string(_data));
} }
/** /**
* @brief Remove selected data ... * @brief Remove selected data ...
@@ -95,7 +98,7 @@ namespace appl {
* @brief Remove selected data ... (No plugin call) * @brief Remove selected data ... (No plugin call)
*/ */
void removeDirect() { void removeDirect() {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return; return;
} }
m_buffer->removeSelection(); m_buffer->removeSelection();
@@ -108,7 +111,7 @@ namespace appl {
* @return true of no error occured. * @return true of no error occured.
*/ */
bool copy(std::string& _data) { bool copy(std::string& _data) {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return false; return false;
} }
return m_buffer->copy(_data); return m_buffer->copy(_data);
@@ -120,7 +123,7 @@ namespace appl {
* @param[in] _posEnd End position to end replace the data. * @param[in] _posEnd End position to end replace the data.
*/ */
void copy(std::string& _data, const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _posEnd) { void copy(std::string& _data, const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _posEnd) {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return; return;
} }
m_buffer->copy(_data, _pos, _posEnd); m_buffer->copy(_data, _pos, _posEnd);
@@ -132,7 +135,7 @@ namespace appl {
* @return true if the write is done corectly * @return true if the write is done corectly
*/ */
bool writeDirect(const std::string& _data, const appl::Buffer::Iterator& _pos) { bool writeDirect(const std::string& _data, const appl::Buffer::Iterator& _pos) {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return false; return false;
} }
bool ret = m_buffer->write(_data, _pos); bool ret = m_buffer->write(_data, _pos);
@@ -147,7 +150,7 @@ namespace appl {
* @return true if the write is done corectly * @return true if the write is done corectly
*/ */
bool replaceDirect(const std::string& _data, const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _posEnd) { bool replaceDirect(const std::string& _data, const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _posEnd) {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return false; return false;
} }
bool ret = m_buffer->replace(_data, _pos, _posEnd); bool ret = m_buffer->replace(_data, _pos, _posEnd);
@@ -208,14 +211,14 @@ namespace appl {
* @return true if a display buffer is present, false otherwise. * @return true if a display buffer is present, false otherwise.
*/ */
virtual bool hasBuffer() { virtual bool hasBuffer() {
return m_buffer != NULL; return m_buffer != nullptr;
} }
/** /**
* @brief Get the status of selection. * @brief Get the status of selection.
* @return true if we have a current selection, false otherwise. * @return true if we have a current selection, false otherwise.
*/ */
virtual bool hasTextSelected() { virtual bool hasTextSelected() {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return false; return false;
} }
return m_buffer->hasTextSelected(); return m_buffer->hasTextSelected();
@@ -224,7 +227,7 @@ namespace appl {
* @brief Remove Selection of the buffer. * @brief Remove Selection of the buffer.
*/ */
virtual void unSelect() { virtual void unSelect() {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return; return;
} }
m_buffer->unSelect(); m_buffer->unSelect();
@@ -235,7 +238,7 @@ namespace appl {
* @param[in] _stop Stop position of the selection (the curor is set at this position) * @param[in] _stop Stop position of the selection (the curor is set at this position)
*/ */
virtual void select(const appl::Buffer::Iterator& _start, const appl::Buffer::Iterator& _stop) { virtual void select(const appl::Buffer::Iterator& _start, const appl::Buffer::Iterator& _stop) {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return; return;
} }
moveCursor(_stop); moveCursor(_stop);
@@ -255,7 +258,7 @@ namespace appl {
appl::Buffer::Iterator& _resultStart, appl::Buffer::Iterator& _resultStart,
appl::Buffer::Iterator& _resultStop, appl::Buffer::Iterator& _resultStop,
bool _caseSensitive = true) { bool _caseSensitive = true) {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return false; return false;
} }
bool ret = m_buffer->search(_pos, _search, _resultStart, _caseSensitive); bool ret = m_buffer->search(_pos, _search, _resultStart, _caseSensitive);
@@ -278,7 +281,7 @@ namespace appl {
appl::Buffer::Iterator& _resultStart, appl::Buffer::Iterator& _resultStart,
appl::Buffer::Iterator& _resultStop, appl::Buffer::Iterator& _resultStop,
bool _caseSensitive = true) { bool _caseSensitive = true) {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return false; return false;
} }
bool ret = m_buffer->searchBack(_pos, _search, _resultStart, _caseSensitive); bool ret = m_buffer->searchBack(_pos, _search, _resultStart, _caseSensitive);
@@ -297,7 +300,7 @@ namespace appl {
bool getPosAround(const appl::Buffer::Iterator& _pos, bool getPosAround(const appl::Buffer::Iterator& _pos,
appl::Buffer::Iterator &_beginPos, appl::Buffer::Iterator &_beginPos,
appl::Buffer::Iterator &_endPos) { appl::Buffer::Iterator &_endPos) {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return false; return false;
} }
return m_buffer->getPosAround(_pos, _beginPos, _endPos); return m_buffer->getPosAround(_pos, _beginPos, _endPos);
@@ -308,7 +311,7 @@ namespace appl {
* @return The Iterator * @return The Iterator
*/ */
appl::Buffer::Iterator position(int64_t _pos) { appl::Buffer::Iterator position(int64_t _pos) {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return appl::Buffer::Iterator(); return appl::Buffer::Iterator();
} }
return m_buffer->position(_pos); return m_buffer->position(_pos);
@@ -318,7 +321,7 @@ namespace appl {
* @return The iterator on the cursor position * @return The iterator on the cursor position
*/ */
appl::Buffer::Iterator cursor() { appl::Buffer::Iterator cursor() {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return appl::Buffer::Iterator(); return appl::Buffer::Iterator();
} }
return m_buffer->cursor(); return m_buffer->cursor();
@@ -328,7 +331,7 @@ namespace appl {
* @return The iterator on the begin position * @return The iterator on the begin position
*/ */
appl::Buffer::Iterator begin() { appl::Buffer::Iterator begin() {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return appl::Buffer::Iterator(); return appl::Buffer::Iterator();
} }
return m_buffer->begin(); return m_buffer->begin();
@@ -338,7 +341,7 @@ namespace appl {
* @return The iterator on the end position * @return The iterator on the end position
*/ */
appl::Buffer::Iterator end() { appl::Buffer::Iterator end() {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return appl::Buffer::Iterator(); return appl::Buffer::Iterator();
} }
return m_buffer->end(); return m_buffer->end();
@@ -348,7 +351,7 @@ namespace appl {
* @return The Iterator * @return The Iterator
*/ */
appl::Buffer::Iterator selectStart() { appl::Buffer::Iterator selectStart() {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return appl::Buffer::Iterator(); return appl::Buffer::Iterator();
} }
return m_buffer->selectStart(); return m_buffer->selectStart();
@@ -358,7 +361,7 @@ namespace appl {
* @return The Iterator * @return The Iterator
*/ */
appl::Buffer::Iterator selectStop() { appl::Buffer::Iterator selectStop() {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return appl::Buffer::Iterator(); return appl::Buffer::Iterator();
} }
return m_buffer->selectStop(); return m_buffer->selectStop();
@@ -369,7 +372,7 @@ namespace appl {
* @return The position in the buffer of the start of the line. * @return The position in the buffer of the start of the line.
*/ */
appl::Buffer::Iterator getStartLine(const appl::Buffer::Iterator& _pos) { appl::Buffer::Iterator getStartLine(const appl::Buffer::Iterator& _pos) {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return appl::Buffer::Iterator(); return appl::Buffer::Iterator();
} }
return m_buffer->getStartLine(_pos); return m_buffer->getStartLine(_pos);
@@ -380,7 +383,7 @@ namespace appl {
* @return The position in the buffer of the end of the line. * @return The position in the buffer of the end of the line.
*/ */
appl::Buffer::Iterator getEndLine(const appl::Buffer::Iterator& _pos) { appl::Buffer::Iterator getEndLine(const appl::Buffer::Iterator& _pos) {
if (m_buffer==NULL) { if (m_buffer==nullptr) {
return appl::Buffer::Iterator(); return appl::Buffer::Iterator();
} }
return m_buffer->getEndLine(_pos); return m_buffer->getEndLine(_pos);
@@ -389,21 +392,31 @@ namespace appl {
* @brief Register of the arrival of a Multicast message * @brief Register of the arrival of a Multicast message
* @param[in] _messageId Event Id waiting for... * @param[in] _messageId Event Id waiting for...
*/ */
// TODO : Remove
void ext_registerMultiCast(const char* const _messageId) { void ext_registerMultiCast(const char* const _messageId) {
registerMultiCast(_messageId); //registerMultiCast(_messageId);
} }
/** /**
* @brief add a specific shortcut with his description * @brief add a specific shortcut with his description
* @param[in] _descriptiveString Description string of the shortcut * @param[in] _descriptiveString Description string of the shortcut
* @param[in] _generateEventId Event generic of the element * @param[in] _generateEventName Event generic of the element
* @param[in] _data Associate data wit the event
*/ */
virtual void ext_shortCutAdd(const char * _descriptiveString, virtual void ext_shortCutAdd(const std::string& _descriptiveString,
const char * _generateEventId, const std::string& _generateEventName) {
std::string _data="", shortCutAdd(_descriptiveString, _generateEventName);
bool _broadcast=false) {
shortCutAdd(_descriptiveString, _generateEventId, _data, _broadcast);
} }
/**
* @brief Remove a specific shortcut with his event name
* @param[in] _generateEventName Event of the element shortcut
*/
virtual void ext_shortCutRm(const std::string& _generateEventName) {
shortCutRemove(_generateEventName);
}
private: // callback fundtions
void onCallbackIsModify();
void onCallbackShortCut(const std::string& _value);
void onCallbackSelectChange();
void onCallbackselectNewFile(const std::string& _value);
}; };
}; };

View File

@@ -17,57 +17,30 @@
#undef __class__ #undef __class__
#define __class__ "ViewerManager" #define __class__ "ViewerManager"
appl::ViewerManager::ViewerManager() : appl::ViewerManager::ViewerManager() {
ewol::Resource("???ViewerManager???"),
m_viewer(NULL) {
addObjectType("appl::ViewerManager"); addObjectType("appl::ViewerManager");
// load buffer manager: // load buffer manager:
m_bufferManager = appl::BufferManager::keep(); m_bufferManager = appl::BufferManager::create();
}
void appl::ViewerManager::init(const std::string& _uniqueName) {
ewol::Resource::init(_uniqueName);
} }
appl::ViewerManager::~ViewerManager() { appl::ViewerManager::~ViewerManager() {
} }
bool appl::ViewerManager::isLastSelected(const ewol::object::Shared<appl::TextViewer>& _viewer) { bool appl::ViewerManager::isLastSelected(const std::shared_ptr<appl::TextViewer>& _viewer) {
return m_viewer == _viewer; return m_viewer.lock() == _viewer;
} }
void appl::ViewerManager::setViewerSelected(const ewol::object::Shared<appl::TextViewer>& _viewer, const ewol::object::Shared<appl::Buffer>& _buffer) { void appl::ViewerManager::setViewerSelected(const std::shared_ptr<appl::TextViewer>& _viewer, const std::shared_ptr<appl::Buffer>& _buffer) {
if (m_viewer == _viewer) { if (m_viewer.lock() == _viewer) {
return; return;
} }
m_viewer = _viewer; m_viewer = _viewer;
if (m_bufferManager != NULL) { if (m_bufferManager != nullptr) {
m_bufferManager->setBufferSelected(_buffer); //m_bufferManager->setBufferSelected(_buffer);
} }
} }
void appl::ViewerManager::onReceiveMessage(const ewol::object::Message& _msg) {
APPL_DEBUG("receive message !!! " << _msg);
}
void appl::ViewerManager::onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject) {
ewol::Resource:: onObjectRemove(_removeObject);
if (_removeObject == m_viewer) {
m_viewer.reset();
return;
}
}
ewol::object::Shared<appl::ViewerManager> appl::ViewerManager::keep() {
//EWOL_INFO("KEEP : appl::GlyphPainting : file : \"" << _filename << "\"");
ewol::object::Shared<appl::ViewerManager> object = ewol::dynamic_pointer_cast<appl::ViewerManager>(getManager().localKeep("???ViewerManager???"));
if (NULL != object) {
return object;
}
// this element create a new one every time ....
EWOL_INFO("CREATE : appl::ViewerManager: ???ViewerManager???");
object = ewol::object::makeShared(new appl::ViewerManager());
if (NULL == object) {
EWOL_ERROR("allocation error of a resource : ???ViewerManager???");
return NULL;
}
getManager().localAdd(object);
return object;
}

View File

@@ -20,41 +20,32 @@ namespace appl {
class ViewerManager : public ewol::Resource { class ViewerManager : public ewol::Resource {
protected: protected:
ViewerManager(); ViewerManager();
void init(const std::string& _uniqueName);
public: public:
DECLARE_RESOURCE_SINGLE_FACTORY(ViewerManager, "???ViewerManager???");
virtual ~ViewerManager(); virtual ~ViewerManager();
private: private:
ewol::object::Shared<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager std::shared_ptr<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
ewol::object::Shared<appl::TextViewer> m_viewer; std::weak_ptr<appl::TextViewer> m_viewer;
public: public:
/** /**
* @brief Set the current buffer selected * @brief Set the current buffer selected
* @param[in] _viewer Pointer on the viewer selected * @param[in] _viewer Pointer on the viewer selected
*/ */
void setViewerSelected(const ewol::object::Shared<appl::TextViewer>& _viewer, const ewol::object::Shared<appl::Buffer>& _buffer); void setViewerSelected(const std::shared_ptr<appl::TextViewer>& _viewer, const std::shared_ptr<appl::Buffer>& _buffer);
/** /**
* @brief Get the current buffer selected * @brief Get the current buffer selected
* @return Pointer on the buffer selected * @return Pointer on the buffer selected
*/ */
ewol::object::Shared<appl::TextViewer> getViewerSelected() { std::shared_ptr<appl::TextViewer> getViewerSelected() {
return m_viewer; return m_viewer.lock();
}; };
/** /**
* @breif Check if the element is the last request selection * @breif Check if the element is the last request selection
* @param[in] _viewer element selected. * @param[in] _viewer element selected.
* @return true if the element is selected * @return true if the element is selected
*/ */
bool isLastSelected(const ewol::object::Shared<appl::TextViewer>& _viewer); bool isLastSelected(const std::shared_ptr<appl::TextViewer>& _viewer);
public: // herited function
void onReceiveMessage(const ewol::object::Message& _msg);
void onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject);
public: // resource manager
/**
* @brief keep the resource pointer.
* @note Never free this pointer by your own...
* @param[in] _filename Name of the configuration file.
* @return pointer on the resource or NULL if an error occured.
*/
static ewol::object::Shared<appl::ViewerManager> keep();
}; };
}; };

View File

@@ -13,82 +13,71 @@
#undef __class__ #undef __class__
#define __class__ "WorkerCloseAllFile" #define __class__ "WorkerCloseAllFile"
static const char* s_closeDone = "close-done"; appl::WorkerCloseAllFile::WorkerCloseAllFile() {
appl::WorkerCloseAllFile::WorkerCloseAllFile() :
m_worker(NULL),
m_bufferManager(NULL) {
addObjectType("appl::WorkerCloseAllFile"); addObjectType("appl::WorkerCloseAllFile");
// load buffer manager: // load buffer manager:
m_bufferManager = appl::BufferManager::keep(); m_bufferManager = appl::BufferManager::create();
}
if (m_bufferManager == NULL) { void appl::WorkerCloseAllFile::init() {
ewol::object::Worker::init();
if (m_bufferManager == nullptr) {
APPL_ERROR("can not call unexistant buffer manager ... "); APPL_ERROR("can not call unexistant buffer manager ... ");
autoDestroy(); destroy();
return; return;
} }
// List all current open file : // List all current open file :
for (int64_t iii=m_bufferManager->size()-1; iii>=0; --iii) { for (int64_t iii=m_bufferManager->size()-1; iii>=0; --iii) {
ewol::object::Shared<appl::Buffer> tmpBuffer = m_bufferManager->get(iii); std::shared_ptr<appl::Buffer> tmpBuffer = m_bufferManager->get(iii);
if (tmpBuffer == NULL) { if (tmpBuffer == nullptr) {
continue; continue;
} }
if (tmpBuffer->isModify() == false) { if (tmpBuffer->isModify() == false) {
tmpBuffer->removeObject(); APPL_TODO("destroy object");
tmpBuffer->destroy();
continue; continue;
} }
m_bufferNameList.push_back(tmpBuffer->getFileName()); m_bufferNameList.push_back(tmpBuffer->getFileName());
} }
// checkif an element has something to do in the queue // checkif an element has something to do in the queue
if (m_bufferNameList.size() == 0) { if (m_bufferNameList.size() == 0) {
autoDestroy(); destroy();
return; return;
} }
// create the worker : // create the worker :
m_worker = ewol::object::makeShared(new appl::WorkerCloseFile(m_bufferNameList.front())); m_worker = appl::WorkerCloseFile::create();
m_worker->signalCloseDone.bind(shared_from_this(), &appl::WorkerCloseAllFile::onCallbackCloseDone);
m_worker->startAction(m_bufferNameList.front());
// remove first element : // remove first element :
m_bufferNameList.erase(m_bufferNameList.begin()); m_bufferNameList.erase(m_bufferNameList.begin());
if (m_bufferNameList.size() == 0) { if (m_bufferNameList.size() == 0) {
autoDestroy(); destroy();
return; return;
} }
m_worker->registerOnEvent(this, appl::WorkerCloseFile::eventCloseDone, s_closeDone);
} }
appl::WorkerCloseAllFile::~WorkerCloseAllFile() { appl::WorkerCloseAllFile::~WorkerCloseAllFile() {
APPL_ERROR("Remove Worker");
} }
void appl::WorkerCloseAllFile::onReceiveMessage(const ewol::object::Message& _msg) { void appl::WorkerCloseAllFile::onCallbackCloseDone() {
if (m_bufferManager == NULL) { if (m_bufferManager == nullptr) {
// nothing to do in this case ==> can do nothing ... // nothing to do in this case ==> can do nothing ...
return; return;
} }
if (_msg.getMessage() == s_closeDone) {
if (m_bufferNameList.size() == 0) { if (m_bufferNameList.size() == 0) {
autoDestroy(); destroy();
return; return;
} }
// create the worker : // create the worker :
m_worker = ewol::object::makeShared(new appl::WorkerCloseFile(m_bufferNameList.front())); m_worker = appl::WorkerCloseFile::create();
m_worker->signalCloseDone.bind(shared_from_this(), &appl::WorkerCloseAllFile::onCallbackCloseDone);
m_worker->startAction(m_bufferNameList.front());
// remove first element : // remove first element :
m_bufferNameList.erase(m_bufferNameList.begin()); m_bufferNameList.erase(m_bufferNameList.begin());
if (m_bufferNameList.size() == 0) { if (m_bufferNameList.size() == 0) {
autoDestroy(); destroy();
return; return;
} }
m_worker->registerOnEvent(this, appl::WorkerCloseFile::eventCloseDone, s_closeDone);
}
}
void appl::WorkerCloseAllFile::onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject) {
if (_removeObject == m_worker) {
m_worker = NULL;
APPL_VERBOSE("AutoRemove After saving sub widget ...");
autoDestroy();
} else if (_removeObject == m_bufferManager) {
m_bufferManager = NULL;
autoDestroy();
}
} }

View File

@@ -9,21 +9,24 @@
#ifndef __WORKER_CLOSE_ALL_FILE_H__ #ifndef __WORKER_CLOSE_ALL_FILE_H__
#define __WORKER_CLOSE_ALL_FILE_H__ #define __WORKER_CLOSE_ALL_FILE_H__
#include <ewol/object/Worker.h>
#include <appl/BufferManager.h> #include <appl/BufferManager.h>
#include <appl/Gui/WorkerCloseFile.h> #include <appl/Gui/WorkerCloseFile.h>
namespace appl { namespace appl {
class WorkerCloseAllFile : public ewol::Object { class WorkerCloseAllFile : public ewol::object::Worker {
public: protected:
WorkerCloseAllFile(); WorkerCloseAllFile();
void init();
public:
DECLARE_FACTORY(WorkerCloseAllFile);
virtual ~WorkerCloseAllFile(); virtual ~WorkerCloseAllFile();
private: private:
std::vector<std::string> m_bufferNameList; std::vector<std::string> m_bufferNameList;
ewol::object::Shared<appl::WorkerCloseFile> m_worker; //! pop-up element that is open... std::shared_ptr<appl::WorkerCloseFile> m_worker; //! pop-up element that is open...
ewol::object::Shared<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager std::shared_ptr<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
public: // derived function public: // callback function
virtual void onReceiveMessage(const ewol::object::Message& _msg); void onCallbackCloseDone();
virtual void onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject);
}; };
}; };

View File

@@ -14,141 +14,159 @@
#undef __class__ #undef __class__
#define __class__ "WorkerCloseFile" #define __class__ "WorkerCloseFile"
const char* appl::WorkerCloseFile::eventCloseDone = "close-file-done"; appl::WorkerCloseFile::WorkerCloseFile() :
signalCloseDone(*this, "close-file-done"),
static const char* s_saveAsValidate = "save-as-validate"; signalAbort(*this, "close-file-abort"),
static const char* s_saveValidate = "save-validate"; m_buffer(nullptr),
static const char* s_closeValidate = "close-validate"; m_worker(nullptr),
static const char* s_saveAsDone = "save-as-done"; m_bufferManager(nullptr) {
appl::WorkerCloseFile::WorkerCloseFile(const std::string& _bufferName) :
m_bufferName(_bufferName),
m_buffer(NULL),
m_worker(NULL),
m_bufferManager(NULL) {
addObjectType("appl::WorkerCloseFile"); addObjectType("appl::WorkerCloseFile");
addEventId(eventCloseDone);
// load buffer manager: // load buffer manager:
m_bufferManager = appl::BufferManager::keep(); m_bufferManager = appl::BufferManager::create();
}
if (m_bufferManager == NULL) { void appl::WorkerCloseFile::init() {
ewol::object::Worker::init();
}
void appl::WorkerCloseFile::startAction(const std::string& _bufferName) {
m_bufferName = _bufferName;
if (m_bufferManager == nullptr) {
APPL_ERROR("can not call unexistant buffer manager ... "); APPL_ERROR("can not call unexistant buffer manager ... ");
autoDestroy(); destroy();
return; return;
} }
if (m_bufferName == "") { if (m_bufferName == "") {
// need to find the curent file ... // need to find the curent file ...
ewol::object::Shared<appl::Buffer> tmpp = m_bufferManager->getBufferSelected(); std::shared_ptr<appl::Buffer> tmpp = m_bufferManager->getBufferSelected();
if (tmpp == NULL) { if (tmpp == nullptr) {
APPL_ERROR("No selected buffer now ..."); APPL_ERROR("No selected buffer now ...");
autoDestroy(); destroy();
return; return;
} }
m_bufferName = tmpp->getFileName(); m_bufferName = tmpp->getFileName();
} }
if (m_bufferManager->exist(m_bufferName) == false) { if (m_bufferManager->exist(m_bufferName) == false) {
APPL_ERROR("Try to close an non-existant file :" << m_bufferName); APPL_ERROR("Try to close an non-existant file :" << m_bufferName);
autoDestroy(); destroy();
return; return;
} }
m_buffer = m_bufferManager->get(m_bufferName); m_buffer = m_bufferManager->get(m_bufferName);
if (m_buffer == NULL) { if (m_buffer == nullptr) {
APPL_ERROR("Error to get the buffer : " << m_bufferName); APPL_ERROR("Error to get the buffer : " << m_bufferName);
autoDestroy(); destroy();
return; return;
} }
if (m_buffer->isModify() == false) { if (m_buffer->isModify() == false) {
generateEventId(eventCloseDone); signalCloseDone.emit();
m_buffer->removeObject(); m_buffer->destroy();
destroy();
return; return;
} }
ewol::object::Shared<ewol::widget::StdPopUp> tmpPopUp = ewol::object::makeShared(new ewol::widget::StdPopUp()); std::shared_ptr<ewol::widget::StdPopUp> tmpPopUp = ewol::widget::StdPopUp::create();
if (tmpPopUp == NULL) { if (tmpPopUp == nullptr) {
APPL_ERROR("Can not create a simple pop-up"); APPL_ERROR("Can not create a simple pop-up");
destroy();
return; return;
} }
tmpPopUp->setTitle("<bold>Close un-saved file:</bold>"); tmpPopUp->setTitle("<bold>Close un-saved file:</bold>");
tmpPopUp->setComment("The file named : <i>\"" + m_buffer->getFileName() + "\"</i> is curently modify. <br/>If you don't saves these modifications,<br/>they will be definitly lost..."); tmpPopUp->setComment("The file named : <i>\"" + m_buffer->getFileName() + "\"</i> is curently modify. <br/>If you don't saves these modifications,<br/>they will be definitly lost...");
ewol::object::Shared<ewol::Widget> bt = NULL; std::shared_ptr<ewol::widget::Button> bt = nullptr;
if (m_buffer->hasFileName() == true) { if (m_buffer->hasFileName() == true) {
bt = tmpPopUp->addButton("Save", true); bt = tmpPopUp->addButton("Save", true);
if (bt != NULL) { if (bt != nullptr) {
bt->registerOnEvent(this, "pressed", s_saveValidate); bt->signalPressed.bind(shared_from_this(), &appl::WorkerCloseFile::onCallbackSaveValidate);
} }
} }
bt = tmpPopUp->addButton("Save As", true); bt = tmpPopUp->addButton("Save As", true);
if (bt != NULL) { if (bt != nullptr) {
bt->registerOnEvent(this, "pressed", s_saveAsValidate); bt->signalPressed.bind(shared_from_this(), &appl::WorkerCloseFile::onCallbackSaveAsValidate);
} }
bt = tmpPopUp->addButton("Close", true); bt = tmpPopUp->addButton("Close", true);
if (bt != NULL) { if (bt != nullptr) {
bt->registerOnEvent(this, "pressed", s_closeValidate); bt->signalPressed.bind(shared_from_this(), &appl::WorkerCloseFile::onCallbackClose);
}
bt = tmpPopUp->addButton("Cancel", true);
if (bt != nullptr) {
bt->signalPressed.bind(shared_from_this(), &appl::WorkerCloseFile::onCallbackCancel);
} }
tmpPopUp->addButton("Cancel", true);
tmpPopUp->setRemoveOnExternClick(true); tmpPopUp->setRemoveOnExternClick(true);
ewol::object::Shared<ewol::widget::Windows> tmpWindows = ewol::getContext().getWindows(); std::shared_ptr<ewol::widget::Windows> tmpWindows = ewol::getContext().getWindows();
if (tmpWindows == NULL) { if (tmpWindows == nullptr) {
APPL_ERROR("Error to get the windows."); APPL_ERROR("Error to get the windows.");
autoDestroy(); destroy();
return; return;
} }
tmpWindows->popUpWidgetPush(tmpPopUp); tmpWindows->popUpWidgetPush(tmpPopUp);
} }
appl::WorkerCloseFile::~WorkerCloseFile() { appl::WorkerCloseFile::~WorkerCloseFile() {
APPL_ERROR("Remove Worker");
} }
void appl::WorkerCloseFile::onReceiveMessage(const ewol::object::Message& _msg) { void appl::WorkerCloseFile::onCallbackCancel() {
if (m_bufferManager == NULL) { APPL_VERBOSE("Cancel signal ...");
signalAbort.emit();
destroy();
}
void appl::WorkerCloseFile::onCallbackSaveAsValidate() {
if (m_bufferManager == nullptr) {
// nothing to do in this case ==> can do nothing ... // nothing to do in this case ==> can do nothing ...
return; return;
} }
APPL_DEBUG("have message : " << _msg); m_worker = appl::WorkerSaveFile::create(m_bufferName);
if (_msg.getMessage() == s_saveAsValidate) { if (m_worker != nullptr) {
m_worker = ewol::object::makeShared(new appl::WorkerSaveFile(m_bufferName)); m_worker->signalSaveDone.bind(shared_from_this(), &appl::WorkerCloseFile::onCallbackClose);
if (m_worker != NULL) { m_worker->signalAbort.bind(shared_from_this(), &appl::WorkerCloseFile::onCallbackCancel);
m_worker->registerOnEvent(this, appl::WorkerSaveFile::eventSaveDone, s_saveAsDone);
} }
} else if (_msg.getMessage() == s_saveValidate) { }
if (m_buffer == NULL) {
void appl::WorkerCloseFile::onCallbackSaveValidate() {
if (m_bufferManager == nullptr) {
// nothing to do in this case ==> can do nothing ...
signalAbort.emit();
destroy();
return;
}
if (m_buffer == nullptr) {
APPL_ERROR("Error to get the buffer : oldName=" << m_bufferName); APPL_ERROR("Error to get the buffer : oldName=" << m_bufferName);
autoDestroy(); signalAbort.emit();
destroy();
return; return;
} }
if (m_buffer->storeFile() == false) { if (m_buffer->storeFile() == false) {
ewol::object::Shared<ewol::widget::Windows> tmpWindows = ewol::getContext().getWindows(); std::shared_ptr<ewol::widget::Windows> tmpWindows = ewol::getContext().getWindows();
if (tmpWindows == NULL) { if (tmpWindows == nullptr) {
return; return;
} }
tmpWindows->displayWarningMessage("We can not save the file : <br/><i>" + m_buffer->getFileName() + "</i>"); tmpWindows->displayWarningMessage("We can not save the file : <br/><i>" + m_buffer->getFileName() + "</i>");
signalAbort.emit();
} else { } else {
generateEventId(eventCloseDone); m_buffer->destroy();
m_buffer.reset();
signalCloseDone.emit();
} }
} else if ( _msg.getMessage() == s_closeValidate destroy();
|| _msg.getMessage() == s_saveAsDone) { }
if (m_buffer == NULL) {
APPL_ERROR("Error to get the buffer : " << m_bufferName); void appl::WorkerCloseFile::onCallbackClose() {
autoDestroy(); if (m_bufferManager == nullptr) {
// nothing to do in this case ==> can do nothing ...
signalAbort.emit();
destroy();
return; return;
} }
generateEventId(eventCloseDone); if (m_buffer == nullptr) {
m_buffer->removeObject(); APPL_ERROR("Error to get the buffer : " << m_bufferName);
} signalAbort.emit();
} destroy();
return;
void appl::WorkerCloseFile::onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject) {
if (_removeObject == m_worker) {
m_worker = NULL;
APPL_VERBOSE("AutoRemove After closing sub widget ...");
autoDestroy();
} else if (_removeObject == m_bufferManager) {
m_bufferManager = NULL;
autoDestroy();
} else if (_removeObject == m_buffer) {
m_buffer = NULL;
autoDestroy();
} }
m_buffer->destroy();
m_buffer.reset();
signalCloseDone.emit();
destroy();
} }

View File

@@ -9,26 +9,38 @@
#ifndef __WORKER_CLOSE_FILE_H__ #ifndef __WORKER_CLOSE_FILE_H__
#define __WORKER_CLOSE_FILE_H__ #define __WORKER_CLOSE_FILE_H__
#include <ewol/object/Worker.h>
#include <ewol/widget/meta/FileChooser.h> #include <ewol/widget/meta/FileChooser.h>
#include <appl/BufferManager.h> #include <appl/BufferManager.h>
#include <appl/Gui/WorkerSaveFile.h> #include <appl/Gui/WorkerSaveFile.h>
namespace appl { namespace appl {
class WorkerCloseFile : public ewol::Object { class WorkerCloseFile : public ewol::object::Worker {
public:
static const char* eventCloseDone;
public: public:
ewol::object::Signal<void> signalCloseDone;
ewol::object::Signal<void> signalAbort;
protected:
// note : if == "" ==> current ... // note : if == "" ==> current ...
WorkerCloseFile(const std::string& _bufferName); WorkerCloseFile();
void init();
public:
DECLARE_FACTORY(WorkerCloseFile);
virtual ~WorkerCloseFile(); virtual ~WorkerCloseFile();
public:
/**
* @brief Action to do
*/
void startAction(const std::string& _bufferName);
private: private:
std::string m_bufferName; std::string m_bufferName;
ewol::object::Shared<appl::Buffer> m_buffer; //!< reference on the buffer (when rename, we have no more reference on the buffer std::shared_ptr<appl::Buffer> m_buffer; //!< reference on the buffer (when rename, we have no more reference on the buffer
ewol::object::Shared<appl::WorkerSaveFile> m_worker; //! sub-worker element... std::shared_ptr<appl::WorkerSaveFile> m_worker; //! sub-worker element...
ewol::object::Shared<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager std::shared_ptr<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
public: // derived function public: // callback Functions
virtual void onReceiveMessage(const ewol::object::Message& _msg); void onCallbackSaveAsValidate();
virtual void onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject); void onCallbackSaveValidate();
void onCallbackClose();
void onCallbackCancel();
}; };
}; };

View File

@@ -13,24 +13,23 @@
#undef __class__ #undef __class__
#define __class__ "WorkerSaveAllFile" #define __class__ "WorkerSaveAllFile"
static const char* s_saveAsDone = "save-as-done"; appl::WorkerSaveAllFile::WorkerSaveAllFile() {
appl::WorkerSaveAllFile::WorkerSaveAllFile() :
m_worker(NULL),
m_bufferManager(NULL) {
addObjectType("appl::WorkerSaveAllFile"); addObjectType("appl::WorkerSaveAllFile");
// load buffer manager: // load buffer manager:
m_bufferManager = appl::BufferManager::keep(); m_bufferManager = appl::BufferManager::create();
}
if (m_bufferManager == NULL) { void appl::WorkerSaveAllFile::init() {
ewol::object::Worker::init();
if (m_bufferManager == nullptr) {
APPL_ERROR("can not call unexistant buffer manager ... "); APPL_ERROR("can not call unexistant buffer manager ... ");
autoDestroy(); destroy();
return; return;
} }
// List all current open file : // List all current open file :
for (int32_t iii=0; iii<m_bufferManager->size(); ++iii) { for (int32_t iii=0; iii<m_bufferManager->size(); ++iii) {
ewol::object::Shared<appl::Buffer> tmpBuffer = m_bufferManager->get(iii); std::shared_ptr<appl::Buffer> tmpBuffer = m_bufferManager->get(iii);
if (tmpBuffer == NULL) { if (tmpBuffer == nullptr) {
continue; continue;
} }
if (tmpBuffer->isModify() == false) { if (tmpBuffer->isModify() == false) {
@@ -44,54 +43,41 @@ appl::WorkerSaveAllFile::WorkerSaveAllFile() :
} }
// checkif an element has something to do in the queue // checkif an element has something to do in the queue
if (m_bufferNameList.size() == 0) { if (m_bufferNameList.size() == 0) {
autoDestroy(); destroy();
return; return;
} }
// create the worker : // create the worker :
m_worker = ewol::object::makeShared(new appl::WorkerSaveFile(m_bufferNameList.front())); m_worker = appl::WorkerSaveFile::create(m_bufferNameList.front());
// remove first element : // remove first element :
m_bufferNameList.erase(m_bufferNameList.begin()); m_bufferNameList.erase(m_bufferNameList.begin());
if (m_bufferNameList.size() == 0) { if (m_bufferNameList.size() == 0) {
autoDestroy(); destroy();
return; return;
} }
m_worker->registerOnEvent(this, appl::WorkerSaveFile::eventSaveDone, s_saveAsDone); m_worker->signalSaveDone.bind(shared_from_this(), &appl::WorkerSaveAllFile::onCallbackSaveAsDone);
} }
appl::WorkerSaveAllFile::~WorkerSaveAllFile() { appl::WorkerSaveAllFile::~WorkerSaveAllFile() {
APPL_ERROR("Remove Worker");
} }
void appl::WorkerSaveAllFile::onReceiveMessage(const ewol::object::Message& _msg) { void appl::WorkerSaveAllFile::onCallbackSaveAsDone() {
if (m_bufferManager == NULL) { if (m_bufferManager == nullptr) {
// nothing to do in this case ==> can do nothing ... // nothing to do in this case ==> can do nothing ...
return; return;
} }
if (_msg.getMessage() == s_saveAsDone) {
if (m_bufferNameList.size() == 0) { if (m_bufferNameList.size() == 0) {
autoDestroy(); destroy();
return; return;
} }
// create the worker : // create the worker :
m_worker = new appl::WorkerSaveFile(m_bufferNameList.front()); m_worker = appl::WorkerSaveFile::create(m_bufferNameList.front());
// remove first element : // remove first element :
m_bufferNameList.erase(m_bufferNameList.begin()); m_bufferNameList.erase(m_bufferNameList.begin());
if (m_bufferNameList.size() == 0) { if (m_bufferNameList.size() == 0) {
autoDestroy(); destroy();
return; return;
} }
m_worker->registerOnEvent(this, appl::WorkerSaveFile::eventSaveDone, s_saveAsDone); m_worker->signalSaveDone.bind(shared_from_this(), &appl::WorkerSaveAllFile::onCallbackSaveAsDone);
}
}
void appl::WorkerSaveAllFile::onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject) {
if (_removeObject == m_worker) {
m_worker = NULL;
APPL_VERBOSE("AutoRemove After saving sub widget ...");
autoDestroy();
} else if (_removeObject == m_bufferManager) {
m_bufferManager = NULL;
autoDestroy();
}
} }

View File

@@ -9,21 +9,24 @@
#ifndef __WORKER_SAVE_ALL_FILE_H__ #ifndef __WORKER_SAVE_ALL_FILE_H__
#define __WORKER_SAVE_ALL_FILE_H__ #define __WORKER_SAVE_ALL_FILE_H__
#include <ewol/object/Worker.h>
#include <appl/BufferManager.h> #include <appl/BufferManager.h>
#include <appl/Gui/WorkerSaveFile.h> #include <appl/Gui/WorkerSaveFile.h>
namespace appl { namespace appl {
class WorkerSaveAllFile : public ewol::Object { class WorkerSaveAllFile : public ewol::object::Worker {
public: protected:
WorkerSaveAllFile(); WorkerSaveAllFile();
void init();
public:
DECLARE_FACTORY(WorkerSaveAllFile);
virtual ~WorkerSaveAllFile(); virtual ~WorkerSaveAllFile();
private: private:
std::vector<std::string> m_bufferNameList; std::vector<std::string> m_bufferNameList;
ewol::object::Shared<appl::WorkerSaveFile> m_worker; //! pop-up element that is open... std::shared_ptr<appl::WorkerSaveFile> m_worker; //! pop-up element that is open...
ewol::object::Shared<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager std::shared_ptr<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
public: // derived function public: // callback function
virtual void onReceiveMessage(const ewol::object::Message& _msg); void onCallbackSaveAsDone();
virtual void onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject);
}; };
}; };

View File

@@ -13,57 +13,56 @@
#undef __class__ #undef __class__
#define __class__ "WorkerSaveFile" #define __class__ "WorkerSaveFile"
const char* appl::WorkerSaveFile::eventSaveDone = "save-file-done";
static const char* s_saveAsValidate = "save-as-validate"; appl::WorkerSaveFile::WorkerSaveFile() :
signalSaveDone(*this, "save-file-done"),
appl::WorkerSaveFile::WorkerSaveFile(const std::string& _bufferName, bool _forceSaveAs) : signalAbort(*this, "save-file-abort") {
m_bufferName(_bufferName),
m_chooser(NULL),
m_bufferManager(NULL) {
addObjectType("appl::WorkerSaveFile"); addObjectType("appl::WorkerSaveFile");
addEventId(eventSaveDone);
// load buffer manager: // load buffer manager:
m_bufferManager = appl::BufferManager::keep(); m_bufferManager = appl::BufferManager::create();
}
if (m_bufferManager == NULL) { void appl::WorkerSaveFile::init(const std::string& _bufferName, bool _forceSaveAs) {
ewol::object::Worker::init();
m_bufferName = _bufferName;
if (m_bufferManager == nullptr) {
APPL_ERROR("can not call unexistant buffer manager ... "); APPL_ERROR("can not call unexistant buffer manager ... ");
autoDestroy(); destroy();
return; return;
} }
if (m_bufferName == "") { if (m_bufferName == "") {
// need to find the curent file ... // need to find the curent file ...
ewol::object::Shared<appl::Buffer> tmpp = m_bufferManager->getBufferSelected(); std::shared_ptr<appl::Buffer> tmpp = m_bufferManager->getBufferSelected();
if (tmpp == NULL) { if (tmpp == nullptr) {
APPL_ERROR("No selected buffer now ..."); APPL_ERROR("No selected buffer now ...");
autoDestroy(); destroy();
return; return;
} }
m_bufferName = tmpp->getFileName(); m_bufferName = tmpp->getFileName();
} }
if (m_bufferManager->exist(m_bufferName) == false) { if (m_bufferManager->exist(m_bufferName) == false) {
APPL_ERROR("Try to save an non-existant file :" << m_bufferName); APPL_ERROR("Try to save an non-existant file :" << m_bufferName);
autoDestroy(); destroy();
return; return;
} }
ewol::object::Shared<appl::Buffer> tmpBuffer = m_bufferManager->get(m_bufferName); std::shared_ptr<appl::Buffer> tmpBuffer = m_bufferManager->get(m_bufferName);
if (tmpBuffer == NULL) { if (tmpBuffer == nullptr) {
APPL_ERROR("Error to get the buffer : " << m_bufferName); APPL_ERROR("Error to get the buffer : " << m_bufferName);
autoDestroy(); destroy();
return; return;
} }
if (_forceSaveAs == false) { if (_forceSaveAs == false) {
if (tmpBuffer->hasFileName() == true) { if (tmpBuffer->hasFileName() == true) {
tmpBuffer->storeFile(); tmpBuffer->storeFile();
generateEventId(eventSaveDone); signalSaveDone.emit();
autoDestroy(); destroy();
return; return;
} }
} }
m_chooser = ewol::object::makeShared(new ewol::widget::FileChooser()); m_chooser = ewol::widget::FileChooser::create();
if (NULL == m_chooser) { if (nullptr == m_chooser) {
APPL_ERROR("Can not allocate widget == > display might be in error"); APPL_ERROR("Can not allocate widget == > display might be in error");
autoDestroy(); destroy();
return; return;
} }
m_chooser->setTitle("Save files As..."); m_chooser->setTitle("Save files As...");
@@ -71,60 +70,59 @@ appl::WorkerSaveFile::WorkerSaveFile(const std::string& _bufferName, bool _force
etk::FSNode tmpName(m_bufferName); etk::FSNode tmpName(m_bufferName);
m_chooser->setFolder(tmpName.getNameFolder()); m_chooser->setFolder(tmpName.getNameFolder());
m_chooser->setFileName(tmpName.getNameFile()); m_chooser->setFileName(tmpName.getNameFile());
ewol::object::Shared<ewol::widget::Windows> tmpWindows = ewol::getContext().getWindows(); std::shared_ptr<ewol::widget::Windows> tmpWindows = ewol::getContext().getWindows();
if (tmpWindows == NULL) { if (tmpWindows == nullptr) {
APPL_ERROR("Error to get the windows."); APPL_ERROR("Error to get the windows.");
autoDestroy(); destroy();
return; return;
} }
tmpWindows->popUpWidgetPush(m_chooser); tmpWindows->popUpWidgetPush(m_chooser);
m_chooser->registerOnEvent(this, ewol::widget::FileChooser::eventValidate, s_saveAsValidate); m_chooser->signalValidate.bind(shared_from_this(), &appl::WorkerSaveFile::onCallbackSaveAsValidate);
m_chooser->signalCancel.bind(shared_from_this(), &appl::WorkerSaveFile::onCallbackCancel);
} }
appl::WorkerSaveFile::~WorkerSaveFile() { appl::WorkerSaveFile::~WorkerSaveFile() {
APPL_ERROR("Remove Worker");
} }
void appl::WorkerSaveFile::onReceiveMessage(const ewol::object::Message& _msg) { void appl::WorkerSaveFile::onCallbackCancel() {
if (m_bufferManager == NULL) { signalAbort.emit();
destroy();
}
void appl::WorkerSaveFile::onCallbackSaveAsValidate(const std::string& _value) {
if (m_bufferManager == nullptr) {
// nothing to do in this case ==> can do nothing ... // nothing to do in this case ==> can do nothing ...
destroy();
return; return;
} }
if (_msg.getMessage() == s_saveAsValidate) { if (_value == "") {
if (_msg.getData() == "") {
APPL_ERROR(" might be an error of the File chooser system..."); APPL_ERROR(" might be an error of the File chooser system...");
destroy();
return; return;
} }
if (m_bufferManager->exist(m_bufferName) == false) { if (m_bufferManager->exist(m_bufferName) == false) {
APPL_ERROR("Try to save an non-existant file :" << m_bufferName); APPL_ERROR("Try to save an non-existant file :" << m_bufferName);
destroy();
return; return;
} }
ewol::object::Shared<appl::Buffer> tmpBuffer = m_bufferManager->get(m_bufferName); std::shared_ptr<appl::Buffer> tmpBuffer = m_bufferManager->get(m_bufferName);
if (tmpBuffer == NULL) { if (tmpBuffer == nullptr) {
APPL_ERROR("Error to get the buffer : " << m_bufferName); APPL_ERROR("Error to get the buffer : " << m_bufferName);
destroy();
return; return;
} }
tmpBuffer->setFileName(_msg.getData()); tmpBuffer->setFileName(_value);
if (tmpBuffer->storeFile() == false) { if (tmpBuffer->storeFile() == false) {
ewol::object::Shared<ewol::widget::Windows> tmpWindows = ewol::getContext().getWindows(); std::shared_ptr<ewol::widget::Windows> tmpWindows = ewol::getContext().getWindows();
if (tmpWindows == NULL) { if (tmpWindows == nullptr) {
destroy();
return; return;
} }
tmpWindows->displayWarningMessage("We can not save the file : <br/><i>" + tmpBuffer->getFileName() + "</i>"); tmpWindows->displayWarningMessage("We can not save the file : <br/><i>" + tmpBuffer->getFileName() + "</i>");
} else { } else {
generateEventId(eventSaveDone); signalSaveDone.emit();
}
}
}
void appl::WorkerSaveFile::onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject) {
if (_removeObject == m_chooser) {
m_chooser = NULL;
APPL_VERBOSE("AutoRemove After closing sub widget ...");
autoDestroy();
} else if (_removeObject == m_bufferManager) {
m_bufferManager = NULL;
autoDestroy();
} }
destroy();
} }

View File

@@ -10,22 +10,27 @@
#define __WORKER_SAVE_FILE_H__ #define __WORKER_SAVE_FILE_H__
#include <ewol/widget/meta/FileChooser.h> #include <ewol/widget/meta/FileChooser.h>
#include <ewol/object/Worker.h>
#include <appl/BufferManager.h> #include <appl/BufferManager.h>
namespace appl { namespace appl {
class WorkerSaveFile : public ewol::Object { class WorkerSaveFile : public ewol::object::Worker {
public: public:
static const char* eventSaveDone; ewol::object::Signal<void> signalSaveDone;
ewol::object::Signal<void> signalAbort;
protected:
WorkerSaveFile();
void init(const std::string& _bufferName, bool _forceSaveAs=true);
public: public:
WorkerSaveFile(const std::string& _bufferName, bool _forceSaveAs=true); DECLARE_FACTORY(WorkerSaveFile);
virtual ~WorkerSaveFile(); virtual ~WorkerSaveFile();
private: private:
std::string m_bufferName; std::string m_bufferName;
ewol::object::Shared<ewol::widget::FileChooser> m_chooser; //! pop-up element that is open... std::shared_ptr<ewol::widget::FileChooser> m_chooser; //! pop-up element that is open...
ewol::object::Shared<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager std::shared_ptr<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
public: // derived function public: // callback function
virtual void onReceiveMessage(const ewol::object::Message& _msg); void onCallbackSaveAsValidate(const std::string& _value);
virtual void onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject); void onCallbackCancel();
}; };
}; };

View File

@@ -10,6 +10,7 @@
#include <appl/global.h> #include <appl/global.h>
#include <appl/Highlight.h> #include <appl/Highlight.h>
#include <exml/exml.h> #include <exml/exml.h>
#include <ewol/ewol.h>
#include <ewol/resource/Manager.h> #include <ewol/resource/Manager.h>
@@ -24,23 +25,15 @@
//#define HL2_DEBUG APPL_INFO //#define HL2_DEBUG APPL_INFO
#define HL2_DEBUG APPL_VERBOSE #define HL2_DEBUG APPL_VERBOSE
void appl::Highlight::parseRules(exml::Element* _child, appl::Highlight::Highlight() {
std::vector<std::unique_ptr<HighlightPattern>>& _mListPatern, addObjectType("appl::Highlight");
int32_t _level) {
// Create the patern ...
HighlightPattern *myPattern = new HighlightPattern(m_paintingProperties);
// parse under Element
myPattern->parseRules(_child, _level);
// add element in the list
_mListPatern.push_back(std::unique_ptr<HighlightPattern>(myPattern));
} }
appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _colorFile) : void appl::Highlight::init(const std::string& _xmlFilename, const std::string& _colorFile) {
ewol::Resource(_xmlFilename), ewol::Resource::init(_xmlFilename);
m_typeName("") {
addObjectType("appl::Highlight");
// keep color propertiy file : // keep color propertiy file :
m_paintingProperties = appl::GlyphPainting::keep(_colorFile); m_paintingProperties = appl::GlyphPainting::create(_colorFile);
exml::Document doc; exml::Document doc;
if (doc.load(_xmlFilename) == false) { if (doc.load(_xmlFilename) == false) {
@@ -48,7 +41,7 @@ appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _
return; return;
} }
exml::Element* root = doc.getNamed("EdnLang"); exml::Element* root = doc.getNamed("EdnLang");
if (NULL == root ) { if (nullptr == root ) {
APPL_ERROR("(l ?) main node not find: \"EdnLang\" ..."); APPL_ERROR("(l ?) main node not find: \"EdnLang\" ...");
return; return;
} }
@@ -58,7 +51,7 @@ appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _
// parse all the elements : // parse all the elements :
for(size_t iii = 0; iii < root->size(); ++iii) { for(size_t iii = 0; iii < root->size(); ++iii) {
exml::Element* child = root->getElement(iii); exml::Element* child = root->getElement(iii);
if (child == NULL) { if (child == nullptr) {
// trash here all that is not element ... // trash here all that is not element ...
continue; continue;
} }
@@ -72,27 +65,51 @@ appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _
// get sub Nodes ... // get sub Nodes ...
for(size_t jjj=0; jjj< child->size(); jjj++) { for(size_t jjj=0; jjj< child->size(); jjj++) {
exml::Element* passChild = child->getElement(jjj); exml::Element* passChild = child->getElement(jjj);
if (passChild == NULL) { if (passChild == nullptr) {
continue; continue;
} }
if (passChild->getValue() != "rule") { if (passChild->getValue() != "rule") {
APPL_ERROR("(l "<< passChild->getPos() << ") node not suported : \""<< passChild->getValue() << "\" must be [rule]" ); APPL_ERROR("(l "<< passChild->getPos() << ") node not suported : \""<< passChild->getValue() << "\" must be [rule]" );
continue; continue;
} }
parseRules(passChild, m_listHighlightPass1, level1++); // Create the patern in list
m_listHighlightPass1.push_back(HighlightPattern(m_paintingProperties, passChild, level1++));
} }
} else if (child->getValue() == "pass2") { } else if (child->getValue() == "pass2") {
// get sub Nodes ... // get sub Nodes ...
for(size_t jjj=0; jjj< child->size(); jjj++) { for(size_t jjj=0; jjj< child->size(); jjj++) {
exml::Element* passChild = child->getElement(jjj); exml::Element* passChild = child->getElement(jjj);
if (passChild == NULL) { if (passChild == nullptr) {
continue; continue;
} }
if (passChild->getValue() != "rule") { if (passChild->getValue() != "rule") {
APPL_ERROR("(l "<< passChild->getPos() << ") node not suported : \""<< passChild->getValue() << "\" must be [rule]" ); APPL_ERROR("(l "<< passChild->getPos() << ") node not suported : \""<< passChild->getValue() << "\" must be [rule]" );
continue; continue;
} }
parseRules(passChild, m_listHighlightPass2, level2++); // Create the patern in list
m_listHighlightPass2.push_back(HighlightPattern(m_paintingProperties, passChild, level2++));
}
} else if (child->getValue() == "pass") {
std::string attributeName = child->getAttribute("name");
if (attributeName == "") {
APPL_ERROR("Can not parse an element pass with no attribute name ... ligne=" << child->getPos());
continue;
}
m_listHighlightNamed.insert(std::pair<std::string, std::vector<HighlightPattern>>(attributeName, std::vector<HighlightPattern>()));
auto it = m_listHighlightNamed.find(attributeName);
int32_t level3=0;
// get sub Nodes ...
for(size_t jjj=0; jjj< child->size(); jjj++) {
exml::Element* passChild = child->getElement(jjj);
if (passChild == nullptr) {
continue;
}
if (passChild->getValue() != "rule") {
APPL_ERROR("(l "<< passChild->getPos() << ") node not suported : \""<< passChild->getValue() << "\" must be [rule]" );
continue;
}
// add element in the list
it->second.push_back(HighlightPattern(m_paintingProperties, passChild, level3++));
} }
} else { } else {
APPL_ERROR("(l "<< child->getPos() << ") node not suported : \""<< child->getValue() << "\" must be [ext,pass1,pass2]" ); APPL_ERROR("(l "<< child->getPos() << ") node not suported : \""<< child->getValue() << "\" must be [ext,pass1,pass2]" );
@@ -109,13 +126,28 @@ appl::Highlight::~Highlight() {
m_listExtentions.clear(); m_listExtentions.clear();
} }
bool appl::Highlight::hasExtention(const std::string& _ext) { bool appl::Highlight::isCompatible(const std::string& _name) {
for (auto &it : m_listExtentions) { for (auto &it : m_listExtentions) {
APPL_VERBOSE(" check : " << it << "=?=" << _ext); APPL_VERBOSE(" check : " << it << "=?=" << _name);
if ( it == "*." + _ext std::regex expression;
|| it == _ext) { try {
return true; expression.assign(it, std::regex_constants::optimize | std::regex_constants::ECMAScript);
} catch (std::regex_error e) {
APPL_ERROR("can not parse regex : '" << e.what() << "' for : " << it);
continue;
} }
std::smatch resultMatch;
std::regex_search(_name.begin(), _name.end(), resultMatch, expression, std::regex_constants::match_continuous);
if (resultMatch.size() <= 0) {
continue;
}
if (resultMatch[0].first != _name.begin()) {
continue;
}
if (resultMatch[0].second != _name.end()) {
continue;
}
return true;
} }
return false; return false;
} }
@@ -147,13 +179,20 @@ void appl::Highlight::display() {
} }
// display all elements // display all elements
for (auto &it : m_listHighlightPass1) { for (auto &it : m_listHighlightPass1) {
APPL_INFO(" Pass 1 : " << it->getName() ); APPL_INFO(" Pass 1 : " << it.getName() );
//m_listHighlightPass1[iii]->display(); //it.display();
} }
// display all elements
for (auto &it : m_listHighlightPass2) { for (auto &it : m_listHighlightPass2) {
APPL_INFO(" pass 2 : " << it->getName() ); APPL_INFO(" pass 2 : " << it.getName() );
//m_listHighlightPass2[iii]->display(); //it.display();
}
for (auto &it : m_listHighlightNamed) {
APPL_INFO(" pass * : " << it.first << " : ");
for (auto &it2 : it.second) {
APPL_INFO(" " << it2.getName() );
//it.display();
}
//it.display();
} }
} }
@@ -164,7 +203,7 @@ void appl::Highlight::parse(int64_t _start,
int64_t _stop, int64_t _stop,
std::vector<appl::HighlightInfo> & _metaData, std::vector<appl::HighlightInfo> & _metaData,
int64_t _addingPos, int64_t _addingPos,
etk::Buffer & _buffer) { std::string& _buffer) {
if (0 > _addingPos) { if (0 > _addingPos) {
_addingPos = 0; _addingPos = 0;
} }
@@ -172,27 +211,37 @@ void appl::Highlight::parse(int64_t _start,
int64_t elementStart = _start; int64_t elementStart = _start;
int64_t elementStop = _stop; int64_t elementStop = _stop;
appl::HighlightInfo resultat; appl::HighlightInfo resultat;
int64_t startTime = ewol::getTime();
while (elementStart <= elementStop) { while (elementStart <= elementStop) {
HL_DEBUG("Parse element in the buffer pos=" << elementStart); //HL_DEBUG("Parse element in the buffer pos=" << elementStart);
int64_t currentTime = ewol::getTime();
//try to fond the HL in ALL of we have //try to fond the HL in ALL of we have
for (int64_t jjj=0; jjj<(int64_t)m_listHighlightPass1.size(); jjj++){ for (int64_t jjj=0; jjj<(int64_t)m_listHighlightPass1.size(); jjj++){
enum resultFind ret = HLP_FIND_OK; enum resultFind ret = HLP_FIND_OK;
HL_DEBUG("Parse HL id=" << jjj << " position search: (" << elementStart << "," << _stop << ")" ); /*
if (_buffer[elementStart] == '\n') {
HL_DEBUG("Parse HL id=" << jjj << " position search: (" << elementStart << "," << _stop << ") input start='\\n' " << m_listHighlightPass1[jjj].getPaternString());
} else {
HL_DEBUG("Parse HL id=" << jjj << " position search: (" << elementStart << "," << _stop << ") input start='" << _buffer[elementStart] << "' " << m_listHighlightPass1[jjj].getPaternString());
}
*/
// Stop the search to the end (to get the end of the pattern) // Stop the search to the end (to get the end of the pattern)
ret = m_listHighlightPass1[jjj]->find(elementStart, _buffer.size(), resultat, _buffer); ret = m_listHighlightPass1[jjj].find(elementStart, _buffer.size(), resultat, _buffer);
if (HLP_FIND_ERROR != ret) { if (HLP_FIND_ERROR != ret) {
HL_DEBUG("Find Pattern in the Buffer : (" << resultat.beginStart << "," << resultat.endStop << ")" ); int64_t currentTimeEnd = ewol::getTime();
int64_t deltaTime = currentTimeEnd - currentTime;
HL_DEBUG("Find Pattern in the Buffer : time=" << (float)deltaTime/1000.0f << " ms (" << resultat.start << "," << resultat.stop << ") startPos=" << elementStart << " for=" << m_listHighlightPass1[jjj].getPaternString());
// remove element in the current List where the current Element have a end inside the next... // remove element in the current List where the current Element have a end inside the next...
int64_t kkk=_addingPos; int64_t kkk=_addingPos;
while(kkk < (int64_t)_metaData.size() ) { while(kkk < (int64_t)_metaData.size() ) {
if (_metaData[kkk].beginStart <= resultat.endStop) { if (_metaData[kkk].start <= resultat.stop) {
// remove element // remove element
HL_DEBUG("Erase element=" << kkk); HL_DEBUG("Erase element=" << kkk);
_metaData.erase(_metaData.begin()+kkk, _metaData.begin()+kkk+1); _metaData.erase(_metaData.begin()+kkk, _metaData.begin()+kkk+1);
// Increase the end of search // Increase the end of search
if (kkk < (int64_t)_metaData.size()) { if (kkk < (int64_t)_metaData.size()) {
// just befor the end of the next element // just before the end of the next element
elementStop = _metaData[kkk].beginStart-1; elementStop = _metaData[kkk].start-1;
} else { } else {
// end of the buffer // end of the buffer
elementStop = _buffer.size(); elementStop = _buffer.size();
@@ -204,9 +253,9 @@ void appl::Highlight::parse(int64_t _start,
} }
// add curent element in the list ... // add curent element in the list ...
_metaData.insert(_metaData.begin()+_addingPos, resultat); _metaData.insert(_metaData.begin()+_addingPos, resultat);
HL_DEBUG("INSERT at "<< _addingPos << " S=" << resultat.beginStart << " E=" << resultat.endStop ); HL_DEBUG("INSERT at "<< _addingPos << " S=" << resultat.start << " E=" << resultat.stop );
// update the current research starting element: (set position at the end of the current element // update the current research starting element: (set position at the end of the current element
elementStart = resultat.endStop-1; elementStart = resultat.stop-1;
// increment the position of insertion: // increment the position of insertion:
_addingPos++; _addingPos++;
// We find a pattern == > Stop search for the current element // We find a pattern == > Stop search for the current element
@@ -216,17 +265,25 @@ void appl::Highlight::parse(int64_t _start,
// Go to the next element (and search again ...). // Go to the next element (and search again ...).
elementStart++; elementStart++;
} }
int64_t stopTime = ewol::getTime();
int64_t deltaTimeGlobal = stopTime - startTime;
APPL_DEBUG("parse in time=" << (float)deltaTimeGlobal/1000.0f << " ms ");
} }
/** /**
* @brief second pass of the hightlight * @brief second pass of the hightlight
* * @param[in] _start Start searching data
* @param[in] _stop End searching data
* @param[out] _metaData Output list of all find patern
* @param[in] _buffer buffer where we need to search data
*/ */
void appl::Highlight::parse2(int64_t _start, void appl::Highlight::parse2(int64_t _start,
int64_t _stop, int64_t _stop,
std::vector<appl::HighlightInfo> &_metaData, std::vector<appl::HighlightInfo> &_metaData,
etk::Buffer &_buffer) { std::string&_buffer) {
HL2_DEBUG("Parse element 0 => " << m_listHighlightPass2.size() << HL2_DEBUG("Parse element 0 => " << m_listHighlightPass2.size() <<
" == > position search: (" << _start << "," << _stop << ")" ); " == > position search: (" << _start << "," << _stop << ")" );
int64_t elementStart = _start; int64_t elementStart = _start;
@@ -234,20 +291,21 @@ void appl::Highlight::parse2(int64_t _start,
appl::HighlightInfo resultat; appl::HighlightInfo resultat;
while (elementStart < elementStop) { while (elementStart < elementStop) {
if (elementStart == 306) {
//etk::log::setLevel(etk::log::logLevelVerbose);
}
//HL2_DEBUG("Parse element in the buffer pos=" << elementStart << "," << _buffer.size() << ")" ); //HL2_DEBUG("Parse element in the buffer pos=" << elementStart << "," << _buffer.size() << ")" );
//try to fond the HL in ALL of we have //try to fond the HL in ALL of we have
for (int64_t jjj=0; jjj<(int64_t)m_listHighlightPass2.size(); jjj++){ for (int64_t jjj=0; jjj<(int64_t)m_listHighlightPass2.size(); jjj++){
enum resultFind ret = HLP_FIND_OK; enum resultFind ret;
HL2_DEBUG("Parse HL id=" << jjj << " position search: (" << HL2_DEBUG("Parse HL id=" << jjj << " position search: (" <<
_start << "," << _buffer.size() << ")" ); elementStart << "," << elementStop << ") in='"
<< _buffer[elementStart] << "' " << m_listHighlightPass2[jjj].getPaternString());
// Stop the search to the end (to get the end of the pattern) // Stop the search to the end (to get the end of the pattern)
ret = m_listHighlightPass2[jjj]->find(elementStart, elementStop, resultat, _buffer); ret = m_listHighlightPass2[jjj].find(elementStart, elementStop, resultat, _buffer);
if (HLP_FIND_ERROR != ret) { if (ret != HLP_FIND_ERROR) {
HL2_DEBUG("Find Pattern in the Buffer : (" << resultat.beginStart << "," << resultat.endStop << ")" );
// add curent element in the list ...
_metaData.push_back(resultat); _metaData.push_back(resultat);
elementStart = resultat.endStop-1; elementStart = resultat.stop-1;
// Exit current cycle
break; break;
} }
} }
@@ -256,20 +314,45 @@ void appl::Highlight::parse2(int64_t _start,
} }
} }
ewol::object::Shared<appl::Highlight> appl::Highlight::keep(const std::string& _filename) { /**
//EWOL_INFO("KEEP : appl::Highlight : file : \"" << _filename << "\""); * @brief second pass of the hightlight pattern (have found something before)
ewol::object::Shared<appl::Highlight> object = ewol::dynamic_pointer_cast<appl::Highlight>(getManager().localKeep(_filename)); * @param[in] _upper upper pattern to find the data
if (NULL != object) { * @param[out] _metaData Output list of all find patern
return object; * @param[in] _buffer buffer where we need to search data
*/
void appl::Highlight::parseSubElement(const appl::HighlightInfo& _upper,
std::vector<appl::HighlightInfo> &_metaData,
std::string &_buffer) {
if (_upper.patern->getSubPatternName().size() == 0) {
return;
} }
EWOL_INFO("CREATE : appl::Highlight : file : \"" << _filename << "\""); HL2_DEBUG("Parse element 0 => " << m_listHighlightNamed.size() <<
// this element create a new one every time .... " == > position search: (" << _upper.start << "," << _upper.stop << ")" );
object = ewol::object::makeShared(new appl::Highlight(_filename, "THEME:COLOR:textViewer.json")); int64_t elementStart = _upper.start;
if (NULL == object) { int64_t elementStop = _upper.stop;
EWOL_ERROR("allocation error of a resource : ??Highlight??"); appl::HighlightInfo resultat;
return NULL; // Find element in the list:
} auto itHL = m_listHighlightNamed.find(_upper.patern->getSubPatternName());
getManager().localAdd(object); if (itHL == m_listHighlightNamed.end()) {
return object; APPL_ERROR("Patern does not exist : " << _upper.patern->getSubPatternName() << " note : Removing it ...");
_upper.patern->setSubPatternName("");
return;
} }
while (elementStart < elementStop) {
//try to fond the HL in ALL of we have
for (auto &it : itHL->second){
enum resultFind ret;
HL2_DEBUG("Parse HL position search: (" << elementStart << "," << elementStop << ") in='" << _buffer[elementStart] << "' " << it.getPaternString());
// Stop the search to the end (to get the end of the pattern)
ret = it.find(elementStart, elementStop, resultat, _buffer);
if (ret != HLP_FIND_ERROR) {
_metaData.push_back(resultat);
elementStart = resultat.stop-1;
break;
}
}
// Go to the next element (and search again ...).
elementStart++;
}
}

View File

@@ -16,12 +16,10 @@ namespace appl {
class HighlightInfo { class HighlightInfo {
public: public:
int32_t beginStart; int32_t start;
int32_t beginStop; int32_t stop;
int32_t endStart;
int32_t endStop;
bool notEnded; bool notEnded;
appl::HighlightPattern* patern; // pointer on class : appl::HighlightPattern* patern;
}; };
}; };
@@ -35,47 +33,46 @@ namespace appl {
namespace appl { namespace appl {
class Highlight : public ewol::Resource { class Highlight : public ewol::Resource {
private: private:
ewol::object::Shared<appl::GlyphPainting> m_paintingProperties; std::shared_ptr<appl::GlyphPainting> m_paintingProperties;
protected:
// Constructeur
Highlight(const std::string& _xmlFilename, const std::string& _colorFile);
public: public:
// Constructeur
Highlight();
void init(const std::string& _xmlFilename, const std::string& _colorFile = "THEME:COLOR:textViewer.json");
public:
DECLARE_RESOURCE_NAMED_FACTORY(Highlight);
virtual ~Highlight(); virtual ~Highlight();
private: private:
std::string m_typeName; //!< descriptive string type like "C/C++" std::string m_typeName; //!< descriptive string type like "C/C++"
public: public:
/**
* @brief Get the Type of the Hightlight like c++/Bash/...
* @return descriptive string
*/
const std::string& getTypeName() { const std::string& getTypeName() {
return m_typeName; return m_typeName;
} }
public: public:
bool hasExtention(const std::string& _ext); bool isCompatible(const std::string& _name);
bool fileNameCompatible(const std::string& _fileName); bool fileNameCompatible(const std::string& _fileName);
void display(); void display();
void parse(int64_t _start, void parse(int64_t _start,
int64_t _stop, int64_t _stop,
std::vector<appl::HighlightInfo>& _metaData, std::vector<appl::HighlightInfo>& _metaData,
int64_t _addingPos, int64_t _addingPos,
etk::Buffer &_buffer); std::string& _buffer);
void parse2(int64_t _start, void parse2(int64_t _start,
int64_t _stop, int64_t _stop,
std::vector<appl::HighlightInfo>& _metaData, std::vector<appl::HighlightInfo>& _metaData,
etk::Buffer &_buffer); std::string& _buffer);
void parseSubElement(const appl::HighlightInfo& _upper,
std::vector<appl::HighlightInfo>& _metaData,
std::string &_buffer);
private: private:
void parseRules(exml::Element* _child,
std::vector<std::unique_ptr<HighlightPattern>> &_mListPatern,
int32_t _level);
std::string m_styleName; //!< curent style name (like "c++" or "c" or "script Bash") std::string m_styleName; //!< curent style name (like "c++" or "c" or "script Bash")
std::vector<std::string> m_listExtentions; //!< List of possible extention for this high-light, like : ".c", ".cpp", ".h" std::vector<std::string> m_listExtentions; //!< List of possible extention for this high-light, like : ".c", ".cpp", ".h"
std::vector<std::unique_ptr<HighlightPattern>> m_listHighlightPass1; //!< List of ALL hightlight modules (pass 1 == > when we load and wride data on the buffer) std::vector<HighlightPattern> m_listHighlightPass1; //!< List of ALL hightlight modules (pass 1 == > when we load and wride data on the buffer)
std::vector<std::unique_ptr<HighlightPattern>> m_listHighlightPass2; //!< List of ALL hightlight modules (pass 2 == > When we display the buffer( only the display area (100 lines)) ) std::vector<HighlightPattern> m_listHighlightPass2; //!< List of ALL hightlight modules (pass 2 == > When we display the buffer( only the display area (100 lines)) )
public: std::map<std::string, std::vector<HighlightPattern>> m_listHighlightNamed; //!< list of all sub partern to parse...
/**
* @brief keep the resource pointer.
* @note Never free this pointer by your own...
* @param[in] _filename Name of the configuration file.
* @return pointer on the resource or NULL if an error occured.
*/
static ewol::object::Shared<appl::Highlight> keep(const std::string& _filename);
public: // herited function : public: // herited function :
virtual void updateContext() { virtual void updateContext() {
// no upfate to do ... // no upfate to do ...

View File

@@ -17,14 +17,14 @@
// TODO : Review this in a generic unique resource ... // TODO : Review this in a generic unique resource ...
static std::vector<ewol::object::Shared<appl::Highlight>>& s_list() { static std::vector<std::shared_ptr<appl::Highlight>>& s_list() {
static std::vector<ewol::object::Shared<appl::Highlight>> list; static std::vector<std::shared_ptr<appl::Highlight>> list;
return list; return list;
} }
void appl::highlightManager::init() { void appl::highlightManager::init() {
std::vector<ewol::object::Shared<appl::Highlight>>& hlList = s_list(); std::vector<std::shared_ptr<appl::Highlight>>& hlList = s_list();
if (hlList.size() != 0) { if (hlList.size() != 0) {
APPL_ERROR("HighlightManager == > already exist, just unlink the previous ..."); APPL_ERROR("HighlightManager == > already exist, just unlink the previous ...");
hlList.clear(); hlList.clear();
@@ -34,7 +34,7 @@ void appl::highlightManager::init() {
// get the subfolder list : // get the subfolder list :
std::vector<etk::FSNode *> list = myFile.folderGetSubList(false, true, false,false); std::vector<etk::FSNode *> list = myFile.folderGetSubList(false, true, false,false);
for (auto &it : list) { for (auto &it : list) {
if (it == NULL) { if (it == nullptr) {
continue; continue;
} }
if (it->getNodeType() != etk::FSN_FOLDER) { if (it->getNodeType() != etk::FSN_FOLDER) {
@@ -42,8 +42,8 @@ void appl::highlightManager::init() {
} }
std::string filename = it->getName() + "/highlight.xml"; std::string filename = it->getName() + "/highlight.xml";
APPL_DEBUG("Load xml name : " << filename); APPL_DEBUG("Load xml name : " << filename);
ewol::object::Shared<appl::Highlight> myHightLine = appl::Highlight::keep(filename); std::shared_ptr<appl::Highlight> myHightLine = appl::Highlight::create(filename);
if (myHightLine != NULL) { if (myHightLine != nullptr) {
hlList.push_back(myHightLine); hlList.push_back(myHightLine);
} else { } else {
APPL_ERROR("Can not allocate HighLight"); APPL_ERROR("Can not allocate HighLight");
@@ -52,7 +52,7 @@ void appl::highlightManager::init() {
// display : // display :
/* /*
for (auto &it : hlList) { for (auto &it : hlList) {
if (it == NULL) { if (it == nullptr) {
continue; continue;
} }
it->display(); it->display();
@@ -61,7 +61,7 @@ void appl::highlightManager::init() {
} }
void appl::highlightManager::unInit() { void appl::highlightManager::unInit() {
std::vector<ewol::object::Shared<Highlight>>& hlList = s_list(); std::vector<std::shared_ptr<Highlight>>& hlList = s_list();
if (hlList.size() == 0) { if (hlList.size() == 0) {
APPL_DEBUG("HighlightManager ==> no highlight"); APPL_DEBUG("HighlightManager ==> no highlight");
hlList.clear(); hlList.clear();
@@ -70,19 +70,19 @@ void appl::highlightManager::unInit() {
hlList.clear(); hlList.clear();
} }
std::string appl::highlightManager::getTypeExtention(const std::string& _extention) { std::string appl::highlightManager::getTypeFile(const std::string& _fileName) {
if (_extention.size() == 0) { if (_fileName.size() == 0) {
return ""; return "";
} }
APPL_DEBUG("Try to find type for extention : '" << _extention << "' in " << s_list().size() << " types"); APPL_DEBUG("Try to find type for extention : '" << _fileName << "' in " << s_list().size() << " types");
std::vector<ewol::object::Shared<Highlight>>& hlList = s_list(); std::vector<std::shared_ptr<Highlight>>& hlList = s_list();
for (auto &it : hlList) { for (auto &it : hlList) {
if (it == NULL) { if (it == nullptr) {
continue; continue;
} }
APPL_DEBUG(" check : " << it->getTypeName()); APPL_DEBUG(" check : " << it->getTypeName());
if (it->hasExtention(_extention) == true) { if (it->isCompatible(_fileName) == true) {
APPL_DEBUG("Find type for extention : " << _extention APPL_DEBUG("Find type for extention : " << _fileName
<< " type : " << it->getTypeName()); << " type : " << it->getTypeName());
return it->getTypeName(); return it->getTypeName();
} }
@@ -95,7 +95,7 @@ std::string appl::highlightManager::getFileWithTypeType(const std::string& _type
return ""; return "";
} }
for (auto &it : s_list()) { for (auto &it : s_list()) {
if (it == NULL) { if (it == nullptr) {
continue; continue;
} }
if (it->getTypeName() == _type) { if (it->getTypeName() == _type) {

View File

@@ -27,10 +27,10 @@ namespace appl {
void unInit(); void unInit();
/** /**
* @brief Un-Init the Highlight manager * @brief Un-Init the Highlight manager
* @param[in] extention of the file * @param[in] _fileName name of the file
* @return type of highlight * @return type of highlight
*/ */
std::string getTypeExtention(const std::string& _extention); std::string getTypeFile(const std::string& _fileName);
/** /**
* @brief Get filename with type. * @brief Get filename with type.
* @param[in] _type Type name of the highlight. * @param[in] _type Type name of the highlight.

View File

@@ -13,63 +13,59 @@
#undef __class__ #undef __class__
#define __class__ "HighlightPattern" #define __class__ "HighlightPattern"
appl::HighlightPattern::HighlightPattern(const ewol::object::Shared<appl::GlyphPainting>& _glyphPainting) : appl::HighlightPattern::HighlightPattern(const std::shared_ptr<appl::GlyphPainting>& _glyphPainting, exml::Element* _child, int32_t _level) :
m_glyphPainting(_glyphPainting), m_glyphPainting(_glyphPainting),
m_paternName(""), m_paternName(""),
m_regExpStart(nullptr), m_hasParsingError(true),
m_regExpStop(nullptr), m_regexValue(""),
m_regExp(),
m_colorName(""), m_colorName(""),
m_escapeChar(u32char::Null),
m_multiline(false),
m_level(0) { m_level(0) {
m_regExpStart = std::unique_ptr<etk::RegExp<etk::Buffer>>(new etk::RegExp<etk::Buffer>()); parseRules(_child, _level);
}
appl::HighlightPattern::HighlightPattern() :
m_glyphPainting(),
m_paternName(""),
m_hasParsingError(true),
m_regexValue(""),
m_regExp(),
m_colorName(""),
m_level(0) {
} }
appl::HighlightPattern::~HighlightPattern() { appl::HighlightPattern::~HighlightPattern() {
} }
void appl::HighlightPattern::setPaternStart(std::string& _regExp) { void appl::HighlightPattern::setPatern(const std::string& _regExp) {
if (m_regExpStart == NULL) { m_regexValue = _regExp;
return; APPL_DEBUG("parse regex='" << _regExp << "'");
try {
m_regExp.assign(_regExp, std::regex_constants::optimize | std::regex_constants::ECMAScript);
//m_regExp.assign(_regExp, std::regex_constants::optimize | std::regex_constants::extended);
m_hasParsingError = false;
} catch (std::regex_error e) {
m_hasParsingError = true;
APPL_ERROR("can not parse regex : '" << e.what() << "' for : " << _regExp);
} }
m_regExpStart->compile(_regExp); }
std::string appl::HighlightPattern::getPaternString() {
return m_regexValue;
} }
void appl::HighlightPattern::setPaternStop(std::string& _regExp) { void appl::HighlightPattern::setColorGlyph(const std::string& _colorName) {
m_regExpStop.reset();
if (_regExp.size() != 0) {
m_regExpStop = std::unique_ptr<etk::RegExp<etk::Buffer>>(new etk::RegExp<etk::Buffer>());
if (m_regExpStop != NULL) {
m_regExpStop->compile(_regExp);
} else {
APPL_ERROR("Allocation error");
}
}
}
void appl::HighlightPattern::setEscapeChar(const char32_t& _EscapeChar) {
m_escapeChar = _EscapeChar;
}
void appl::HighlightPattern::setColorGlyph(std::string& _colorName) {
m_colorName = _colorName; m_colorName = _colorName;
m_colorId = m_glyphPainting->request(m_colorName); m_colorId = m_glyphPainting->request(m_colorName);
APPL_VERBOSE("Resuest color name '" << m_colorName << "' => id=" << m_colorId); APPL_VERBOSE("Resuest color name '" << m_colorName << "' => id=" << m_colorId);
} }
void appl::HighlightPattern::display() { void appl::HighlightPattern::display() {
APPL_INFO("patern : \"" << m_paternName << "\" level=" << m_level ); APPL_INFO("patern : '" << m_paternName << "' level=" << m_level );
APPL_INFO(" == > colorName \"" << m_colorName << "\""); APPL_INFO(" == > colorName '" << m_colorName << "'");
APPL_INFO(" == > regExpStart \"" << m_regExpStart->getRegExp() << "\""); //APPL_INFO(" == > regExp '" << m_regExp.getRegExp() << "'");
if (m_regExpStop != NULL) { APPL_INFO(" == > regex '" << m_regexValue << "'");
APPL_INFO(" == > regExpStop \"" << m_regExpStop->getRegExp() << "\"");
}
if (m_multiline == true) {
APPL_INFO(" == > multiline pattern: YES");
} else {
APPL_INFO(" == > multiline pattern: NO");
}
} }
void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level) { void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level) {
@@ -77,9 +73,8 @@ void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level) {
/* /*
<rule name="my preprocesseur"> <rule name="my preprocesseur">
<color>preprocesseur</color> <color>preprocesseur</color>
<start>#</start> <regex>#</regex>
<end>$</end> <sub>namexxx</sub>
<multiline>yes</multiline>
</rule> </rule>
*/ */
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
@@ -93,38 +88,27 @@ void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level) {
setLevel(_level); setLevel(_level);
exml::Element* xChild = _child->getNamed("color"); exml::Element* xChild = _child->getNamed("color");
if (NULL != xChild) { if (nullptr != xChild) {
std::string myData = xChild->getText(); std::string myData = xChild->getText();
if (myData.size() != 0) { if (myData.size() != 0) {
//APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData); //APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData);
std::string myEdnData = myData; setColorGlyph(myData);
setColorGlyph(myEdnData);
} }
} }
xChild = _child->getNamed("start"); xChild = _child->getNamed("regex");
if (NULL != xChild) { if (nullptr != xChild) {
std::string myData = xChild->getText(); std::string myData = xChild->getText();
if (myData.size() != 0) { if (myData.size() != 0) {
//APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData); //APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData);
std::string myEdnData = myData; setPatern(myData);
setPaternStart(myEdnData);
} }
} }
xChild = _child->getNamed("end"); xChild = _child->getNamed("sub");
if (NULL != xChild) { if (nullptr != xChild) {
std::string myData = xChild->getText(); std::string myData = xChild->getText();
if (myData.size() != 0) { if (myData.size() != 0) {
//APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData); //APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData);
std::string myEdnData = myData; setSubPatternName(myData);
setPaternStop(myEdnData);
}
}
xChild = _child->getNamed("EscapeChar");
if (NULL != xChild) {
std::string myData = xChild->getText();
if (myData.size() != 0) {
//APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData);
setEscapeChar(myData[0]);
} }
} }
} }
@@ -133,43 +117,54 @@ void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level) {
enum resultFind appl::HighlightPattern::find(int32_t _start, enum resultFind appl::HighlightPattern::find(int32_t _start,
int32_t _stop, int32_t _stop,
appl::HighlightInfo& _resultat, appl::HighlightInfo& _resultat,
etk::Buffer& _buffer) { const std::string& _buffer) {
//APPL_DEBUG(" try to find the element"); //APPL_DEBUG(" try to find the element");
_resultat.beginStart = -1; _resultat.start = -1;
_resultat.beginStop = -1; _resultat.stop = -1;
_resultat.endStart = -1;
_resultat.endStop = -1;
_resultat.notEnded = false; _resultat.notEnded = false;
_resultat.patern = this; _resultat.patern = this;
if (m_hasParsingError == true) {
return HLP_FIND_ERROR;
}
// when we have only one element: std::smatch resultMatch;
if (m_regExpStop == NULL) { std::regex_constants::match_flag_type flags = std::regex_constants::match_continuous; // check only the match at the first character.
if (true == m_regExpStart->processOneElement(_buffer, _start, _stop)) {
_resultat.beginStart = m_regExpStart->start(); //APPL_DEBUG("find data at : start=" << _start << " stop=" << _stop << " regex='" << m_regexValue << "'");
_resultat.beginStop = m_regExpStart->stop(); if ((int64_t)_stop <= (int64_t)_buffer.size()) {
_resultat.endStart = m_regExpStart->start(); char val = _buffer[_stop];
_resultat.endStop = m_regExpStart->stop(); if ( val != '\n'
&& val != '\r') {
//after last char ==> not end of line ($ would not work))
flags |= std::regex_constants::match_not_eol;
}
if (!( ('a' <= val && val <= 'z')
|| ('A' <= val && val <= 'Z')
|| ('0' <= val && val <= '9')
|| val == '_')) {
flags |= std::regex_constants::match_not_eow;
}
}
if (_start>0) {
flags |= std::regex_constants::match_prev_avail;
}
std::regex_search(_buffer.begin() + _start, _buffer.begin() + _stop, resultMatch, m_regExp, flags);
if (resultMatch.size() > 0) {
_resultat.start = std::distance(_buffer.begin(), resultMatch[0].first);
_resultat.stop = std::distance(_buffer.begin(), resultMatch[0].second);
//APPL_DEBUG("find data at : start=" << _resultat.start << " stop=" << _resultat.stop << " data='" <<std::string(_buffer, _resultat.start, _resultat.stop-_resultat.start) << "'" );
/*
if (true){
//TK_DEBUG("in line : '" << etk::to_string(_buffer) << "'");
TK_DEBUG(" Find " << resultMatch.size() << " elements");
for (size_t iii=0; iii<resultMatch.size(); ++iii) {
int32_t posStart = std::distance(_buffer.begin(), resultMatch[iii].first);
int32_t posStop = std::distance(_buffer.begin(), resultMatch[iii].second);
TK_DEBUG(" [" << iii << "] " << posStart << " to " << posStop);
}
}
*/
return HLP_FIND_OK; return HLP_FIND_OK;
} }
//APPL_DEBUG("NOT find hightlightpatern ...");
return HLP_FIND_ERROR;
}
// try while we find the first element
if (m_regExpStart->processOneElement(_buffer, _start, _stop, m_escapeChar) == false) {
return HLP_FIND_ERROR;
}
_resultat.beginStart = m_regExpStart->start();
_resultat.beginStop = m_regExpStart->stop();
if (m_regExpStop->parse(_buffer, _resultat.beginStop, _stop, m_escapeChar) == true) {
_resultat.endStart = m_regExpStop->start();
_resultat.endStop = m_regExpStop->stop();
return HLP_FIND_OK;
} else {
_resultat.endStart = _stop+1;
_resultat.endStop = _stop+1;
_resultat.notEnded = true;
return HLP_FIND_OK_NO_END;
}
//APPL_DEBUG("NOT find start hightlightpatern ...");
return HLP_FIND_ERROR; return HLP_FIND_ERROR;
} }

View File

@@ -14,9 +14,9 @@
class HighlightPattern; class HighlightPattern;
#include <etk/RegExp.h>
#include <appl/GlyphPainting.h> #include <appl/GlyphPainting.h>
#include <vector> #include <vector>
#include <regex>
#include <exml/exml.h> #include <exml/exml.h>
#include <etk/Buffer.h> #include <etk/Buffer.h>
@@ -29,46 +29,45 @@ enum resultFind {
namespace appl { namespace appl {
class HighlightPattern { class HighlightPattern {
private: private:
ewol::object::Shared<appl::GlyphPainting> m_glyphPainting; std::shared_ptr<appl::GlyphPainting> m_glyphPainting;
public: public:
// Constructeur // Constructeur
HighlightPattern(const ewol::object::Shared<appl::GlyphPainting>& _glyphPainting); HighlightPattern();
HighlightPattern(const std::shared_ptr<appl::GlyphPainting>& _glyphPainting, exml::Element* _child, int32_t _level);
virtual ~HighlightPattern(); virtual ~HighlightPattern();
private: private:
std::string m_paternName; //!< Current style name (like "c++" or "c" or "script Bash") std::string m_paternName; //!< Current style name (like "c++" or "c" or "script Bash")
public: public:
void setName(std::string& _name) { void setName(const std::string& _name) {
m_paternName = _name; m_paternName = _name;
}; };
std::string getName() { const std::string& getName() {
return m_paternName; return m_paternName;
}; };
private: private:
std::unique_ptr<etk::RegExp<etk::Buffer>> m_regExpStart; //!< Start of Regular expression std::string m_paternSubName; //!< Sub patern name if needed
public: public:
void setPaternStart(std::string& _regExp); void setSubPatternName(const std::string& _name) {
m_paternSubName = _name;
};
const std::string& getSubPatternName() {
return m_paternSubName;
};
private: private:
std::unique_ptr<etk::RegExp<etk::Buffer>> m_regExpStop; //!< Stop of Regular Expression bool m_hasParsingError;
std::string m_regexValue;
std::regex m_regExp; //!< Start of Regular expression
public: public:
void setPaternStop(std::string& _regExp); void setPatern(const std::string& _regExp);
std::string getPaternString();
private: private:
std::string m_colorName; //!< Current color name std::string m_colorName; //!< Current color name
int32_t m_colorId; //!< Id of the the glyph painting int32_t m_colorId; //!< Id of the the glyph painting
public: public:
void setColorGlyph(std::string& _colorName); void setColorGlyph(const std::string& _colorName);
const appl::GlyphDecoration& getColorGlyph() { const appl::GlyphDecoration& getColorGlyph() {
return (*m_glyphPainting)[m_colorId]; return (*m_glyphPainting)[m_colorId];
}; };
private:
char32_t m_escapeChar; //!< Escape char to prevent exeit of patern ....
public:
void setEscapeChar(const char32_t& _EscapeChar);
private:
bool m_multiline; //!< The patern is multiline
public:
void setMultiline(bool _enable) {
m_multiline = _enable;
};
private: private:
int32_t m_level; //!< Level of the pattern == > this is to overwrite next pattern when we create an higher .... int32_t m_level; //!< Level of the pattern == > this is to overwrite next pattern when we create an higher ....
public: public:
@@ -95,7 +94,7 @@ namespace appl {
enum resultFind find(int32_t _start, enum resultFind find(int32_t _start,
int32_t _stop, int32_t _stop,
appl::HighlightInfo& _resultat, appl::HighlightInfo& _resultat,
etk::Buffer& _buffer); const std::string& _buffer);
void parseRules(exml::Element* _child, int32_t _level); void parseRules(exml::Element* _child, int32_t _level);
}; };

View File

@@ -8,6 +8,7 @@
#include <appl/TextPlugin.h> #include <appl/TextPlugin.h>
#include <appl/TextPluginManager.h>
#include <appl/debug.h> #include <appl/debug.h>
#undef __class__ #undef __class__
@@ -21,9 +22,23 @@ appl::TextViewerPlugin::TextViewerPlugin() :
m_activateOnWrite(false), m_activateOnWrite(false),
m_activateOnReplace(false), m_activateOnReplace(false),
m_activateOnRemove(false), m_activateOnRemove(false),
m_activateOnReceiveMessage(false), m_activateOnReceiveShortCut(false),
m_activateOnCursorMove(false) { m_activateOnCursorMove(false) {
addObjectType("appl::TextViewerPlugin"); addObjectType("appl::TextViewerPlugin");
m_menuInterface = std::dynamic_pointer_cast<ewol::widget::Menu>(getObjectNamed("appl-menu-interface"));
if (m_menuInterface.expired() == true) {
APPL_ERROR("Can not acces to the Menu interface");
}
// get a reference on the plugin manager...
m_pluginManager = appl::textPluginManager::create();
}
void appl::TextViewerPlugin::init() {
ewol::Object::init();
}
void appl::TextViewerPlugin::init(const std::string& _name) {
ewol::Object::init(_name);
} }
appl::TextViewerPlugin::~TextViewerPlugin() { appl::TextViewerPlugin::~TextViewerPlugin() {
@@ -31,7 +46,7 @@ appl::TextViewerPlugin::~TextViewerPlugin() {
return; return;
} }
m_isEnable = false; m_isEnable = false;
onPluginDisable(); onPluginGlobalDisable();
} }
void appl::TextViewerPlugin::setEnableStatus(bool _status) { void appl::TextViewerPlugin::setEnableStatus(bool _status) {
@@ -40,9 +55,9 @@ void appl::TextViewerPlugin::setEnableStatus(bool _status) {
} }
m_isEnable = _status; m_isEnable = _status;
if (m_isEnable == true) { if (m_isEnable == true) {
onPluginEnable(); onPluginGlobalEnable();
} else { } else {
onPluginDisable(); onPluginGlobalDisable();
} }
} }

View File

@@ -13,13 +13,23 @@
#include <ewol/object/Object.h> #include <ewol/object/Object.h>
#include <appl/Gui/TextViewer.h> #include <appl/Gui/TextViewer.h>
#include <ewol/compositing/Text.h> #include <ewol/compositing/Text.h>
#include <ewol/widget/Menu.h>
namespace appl { namespace appl {
class textPluginManager;
class TextViewerPlugin : public ewol::Object { class TextViewerPlugin : public ewol::Object {
friend class appl::TextViewer; friend class appl::TextViewer;
public: protected:
std::weak_ptr<appl::textPluginManager> m_pluginManager;
protected:
TextViewerPlugin(); TextViewerPlugin();
void init();
void init(const std::string& _name);
public:
DECLARE_FACTORY(TextViewerPlugin);
virtual ~TextViewerPlugin(); virtual ~TextViewerPlugin();
protected:
std::weak_ptr<ewol::widget::Menu> m_menuInterface;
private: private:
bool m_isEnable; //!< The plugin is enable or not (for all viewer). bool m_isEnable; //!< The plugin is enable or not (for all viewer).
public: public:
@@ -39,13 +49,13 @@ namespace appl {
/** /**
* @brief On plugin global enable. * @brief On plugin global enable.
*/ */
virtual void onPluginEnable() { virtual void onPluginGlobalEnable() {
// nothing to do here ... // nothing to do here ...
}; };
/** /**
* @brief On plugin global disable. * @brief On plugin global disable.
*/ */
virtual void onPluginDisable() { virtual void onPluginGlobalDisable() {
// nothing to do here ... // nothing to do here ...
}; };
/** /**
@@ -171,23 +181,22 @@ namespace appl {
return false; return false;
}; };
protected: protected:
bool m_activateOnReceiveMessage; //!< onReceiveMessage is availlable for this plugin. bool m_activateOnReceiveShortCut; //!< onReceiveShortCut is availlable for this plugin.
public: public:
/** /**
* @brief Get the availlability of a callback * @brief Get the availlability of a callback
* @return true if availlable * @return true if availlable
*/ */
bool isAvaillableOnReceiveMessage() { bool isAvaillableOnReceiveShortCut() {
return m_activateOnReceiveMessage; return m_activateOnReceiveShortCut;
} }
/** /**
* @brief Called when a message arrive. * @brief Called when a message arrive.
* @param[in] _widget Reference on the widget caller. * @param[in] _widget Reference on the widget caller.
* @param[in] _msg Generic message. * @param[in] _shortCutName Generic message requested.
* @return true if the event might not propagate anymore * @return true if the event might not propagate anymore
*/ */
virtual bool onReceiveMessageViewer(appl::TextViewer& _textDrawer, virtual bool onReceiveShortCut(appl::TextViewer& _textDrawer, const std::string& _shortCutName) {
const ewol::object::Message& _msg) {
return false; return false;
} }
protected: protected:

View File

@@ -20,6 +20,10 @@ appl::TextPluginAutoIndent::TextPluginAutoIndent() {
addObjectType("appl::TextPluginAutoIndent"); addObjectType("appl::TextPluginAutoIndent");
} }
void appl::TextPluginAutoIndent::init() {
appl::TextViewerPlugin::init();
}
bool appl::TextPluginAutoIndent::onEventEntry(appl::TextViewer& _textDrawer, bool appl::TextPluginAutoIndent::onEventEntry(appl::TextViewer& _textDrawer,
const ewol::event::Entry& _event) { const ewol::event::Entry& _event) {
if (isEnable() == false) { if (isEnable() == false) {

View File

@@ -17,8 +17,11 @@
namespace appl { namespace appl {
class TextPluginAutoIndent : public appl::TextViewerPlugin { class TextPluginAutoIndent : public appl::TextViewerPlugin {
public: protected:
TextPluginAutoIndent(); TextPluginAutoIndent();
void init();
public:
DECLARE_FACTORY(TextPluginAutoIndent);
virtual ~TextPluginAutoIndent() { virtual ~TextPluginAutoIndent() {
// nothing to do ... // nothing to do ...
}; };

View File

@@ -15,32 +15,63 @@
#define __class__ "TextPluginCopy" #define __class__ "TextPluginCopy"
appl::TextPluginCopy::TextPluginCopy() { appl::TextPluginCopy::TextPluginCopy() :
m_activateOnReceiveMessage = true; m_menuIdTitle(-1),
m_menuIdCopy(-1),
m_menuIdCut(-1),
m_menuIdPast(-1),
m_menuIdRemove(-1) {
m_activateOnReceiveShortCut = true;
addObjectType("appl::TextPluginCopy"); addObjectType("appl::TextPluginCopy");
} }
void appl::TextPluginCopy::init() {
appl::TextViewerPlugin::init();
}
void appl::TextPluginCopy::onPluginEnable(appl::TextViewer& _textDrawer) { void appl::TextPluginCopy::onPluginEnable(appl::TextViewer& _textDrawer) {
// add event : // add event :
_textDrawer.ext_registerMultiCast(ednMsgGuiCopy); std::shared_ptr<ewol::widget::Menu> menu = m_menuInterface.lock();
_textDrawer.ext_registerMultiCast(ednMsgGuiPaste); if (menu != nullptr) {
_textDrawer.ext_registerMultiCast(ednMsgGuiCut); m_menuIdTitle = menu->addTitle("Edit");
_textDrawer.ext_shortCutAdd("ctrl+x", ednMsgGuiCut, "STD"); if (m_menuIdTitle != -1) {
_textDrawer.ext_shortCutAdd("ctrl+c", ednMsgGuiCopy, "STD"); m_menuIdCopy = menu->add(m_menuIdTitle, "Copy", "", "appl::TextPluginCopy::menu:copy");
_textDrawer.ext_shortCutAdd("ctrl+v", ednMsgGuiPaste, "STD"); m_menuIdCut = menu->add(m_menuIdTitle, "Cut", "", "appl::TextPluginCopy::menu:cut");
m_menuIdPast = menu->add(m_menuIdTitle, "Paste", "", "appl::TextPluginCopy::menu:past");
m_menuIdRemove = menu->add(m_menuIdTitle, "Remove", "", "appl::TextPluginCopy::menu:remove");
}
}
_textDrawer.ext_shortCutAdd("ctrl+x", "appl::TextPluginCopy::cut");
_textDrawer.ext_shortCutAdd("ctrl+c", "appl::TextPluginCopy::copy");
_textDrawer.ext_shortCutAdd("ctrl+v", "appl::TextPluginCopy::Paste");
} }
void appl::TextPluginCopy::onPluginDisable(appl::TextViewer& _textDrawer) { void appl::TextPluginCopy::onPluginDisable(appl::TextViewer& _textDrawer) {
// TODO : unknow function ... _textDrawer.ext_shortCutRm("appl::TextPluginCopy::cut");
_textDrawer.ext_shortCutRm("appl::TextPluginCopy::copy");
_textDrawer.ext_shortCutRm("appl::TextPluginCopy::Paste");
std::shared_ptr<ewol::widget::Menu> menu = m_menuInterface.lock();
if (menu != nullptr) {
menu->remove(m_menuIdRemove);
menu->remove(m_menuIdPast);
menu->remove(m_menuIdCut);
menu->remove(m_menuIdCopy);
menu->remove(m_menuIdTitle);
}
m_menuIdTitle = -1;
m_menuIdCopy = -1;
m_menuIdCut = -1;
m_menuIdPast = -1;
m_menuIdRemove = -1;
} }
bool appl::TextPluginCopy::onReceiveMessageViewer(appl::TextViewer& _textDrawer, bool appl::TextPluginCopy::onReceiveShortCut(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg) { const std::string& _shortCutName) {
if (isEnable() == false) { if (isEnable() == false) {
return false; return false;
} }
if ( _msg.getMessage() == ednMsgGuiCopy if ( _shortCutName == "appl::TextPluginCopy::copy"
|| _msg.getMessage() == ednMsgGuiCut) { || _shortCutName == "appl::TextPluginCopy::cut") {
if (_textDrawer.hasBuffer() == true) { if (_textDrawer.hasBuffer() == true) {
std::string value; std::string value;
_textDrawer.copy(value); _textDrawer.copy(value);
@@ -48,11 +79,11 @@ bool appl::TextPluginCopy::onReceiveMessageViewer(appl::TextViewer& _textDrawer,
ewol::context::clipBoard::set(ewol::context::clipBoard::clipboardStd, value); ewol::context::clipBoard::set(ewol::context::clipBoard::clipboardStd, value);
} }
} }
if (_msg.getMessage() == ednMsgGuiCut) { if (_shortCutName == "appl::TextPluginCopy::cut") {
_textDrawer.remove(); _textDrawer.remove();
} }
return true; return true;
} else if (_msg.getMessage() == ednMsgGuiPaste) { } else if (_shortCutName == "appl::TextPluginCopy::Paste") {
if (_textDrawer.hasBuffer() == true) { if (_textDrawer.hasBuffer() == true) {
ewol::context::clipBoard::request(ewol::context::clipBoard::clipboardStd); ewol::context::clipBoard::request(ewol::context::clipBoard::clipboardStd);
} }

View File

@@ -17,15 +17,24 @@
namespace appl { namespace appl {
class TextPluginCopy : public appl::TextViewerPlugin { class TextPluginCopy : public appl::TextViewerPlugin {
public: private:
int32_t m_menuIdTitle;
int32_t m_menuIdCopy;
int32_t m_menuIdCut;
int32_t m_menuIdPast;
int32_t m_menuIdRemove;
protected:
TextPluginCopy(); TextPluginCopy();
void init();
public:
DECLARE_FACTORY(TextPluginCopy);
virtual ~TextPluginCopy() { virtual ~TextPluginCopy() {
// nothing to do ... // nothing to do ...
}; };
public: public:
virtual void onPluginEnable(appl::TextViewer& _textDrawer); virtual void onPluginEnable(appl::TextViewer& _textDrawer);
virtual void onPluginDisable(appl::TextViewer& _textDrawer); virtual void onPluginDisable(appl::TextViewer& _textDrawer);
virtual bool onReceiveMessageViewer(appl::TextViewer& _textDrawer, const ewol::object::Message& _msg); virtual bool onReceiveShortCut(appl::TextViewer& _textDrawer, const std::string& _shortCutName);
}; };
}; };

View File

@@ -21,44 +21,37 @@
appl::TextPluginCtags::TextPluginCtags() : appl::TextPluginCtags::TextPluginCtags() :
m_tagFolderBase(""), m_tagFolderBase(""),
m_tagFilename(""), m_tagFilename(""),
m_ctagFile(NULL) { m_ctagFile(nullptr) {
m_activateOnReceiveMessage = true; m_activateOnReceiveShortCut = true;
// load buffer manager: // load buffer manager:
m_bufferManager = appl::BufferManager::keep(); m_bufferManager = appl::BufferManager::create();
addObjectType("appl::TextPluginCtags"); addObjectType("appl::TextPluginCtags");
} }
void appl::TextPluginCtags::init() {
appl::TextViewerPlugin::init();
}
appl::TextPluginCtags::~TextPluginCtags() { appl::TextPluginCtags::~TextPluginCtags() {
} }
const char* eventJumpDestination = "event-plugin-ctags-jump-destination";
const char* eventJumpBack = "event-plugin-ctags-jump-back";
const char* eventOpenCtagsFile = "event-plugin-ctags-open";
const char* eventOpenCtagsOpenFileReturn = "event-plugin-ctags-open-file-return";
const char* eventOpenCtagsSelectReturn = "event-plugin-ctags-select-file-return";
void appl::TextPluginCtags::onPluginEnable(appl::TextViewer& _textDrawer) { void appl::TextPluginCtags::onPluginEnable(appl::TextViewer& _textDrawer) {
// Add local event of this object (no dependency with the viewer ...
/*
registerMultiCast(ednMsgGuiCtags);
registerMultiCast(ednMsgBufferId);
registerMultiCast(ednMsgCtagsLoadFile);
*/
// add event : // add event :
_textDrawer.ext_registerMultiCast(eventJumpDestination); _textDrawer.ext_shortCutAdd("ctrl+d", "appl::TextPluginCtags::JumpDestination");
_textDrawer.ext_registerMultiCast(eventJumpBack); _textDrawer.ext_shortCutAdd("ctrl+shift+d", "appl::TextPluginCtags::JumpBack");
_textDrawer.ext_registerMultiCast(eventOpenCtagsFile); _textDrawer.ext_shortCutAdd("ctrl+alt+d", "appl::TextPluginCtags::OpenCtagsFile");
_textDrawer.ext_shortCutAdd("ctrl+d", eventJumpDestination);
_textDrawer.ext_shortCutAdd("ctrl+shift+d", eventJumpBack);
_textDrawer.ext_shortCutAdd("ctrl+alt+d", eventOpenCtagsFile);
} }
void appl::TextPluginCtags::onPluginDisable(appl::TextViewer& _textDrawer) { void appl::TextPluginCtags::onPluginDisable(appl::TextViewer& _textDrawer) {
// TODO : unknow function ... _textDrawer.ext_shortCutRm("appl::TextPluginCtags::JumpDestination");
_textDrawer.ext_shortCutRm("appl::TextPluginCtags::JumpBack");
_textDrawer.ext_shortCutRm("appl::TextPluginCtags::OpenCtagsFile");
} }
void appl::TextPluginCtags::jumpTo(const std::string& _name) { void appl::TextPluginCtags::jumpTo(const std::string& _name) {
if (m_ctagFile == NULL) { if (m_ctagFile == nullptr) {
APPL_WARNING("No ctags file open"); APPL_WARNING("No ctags file open");
return; return;
} }
@@ -79,8 +72,8 @@ void appl::TextPluginCtags::jumpTo(const std::string& _name) {
if (tagsFindNext (m_ctagFile, &entry) == TagSuccess) { if (tagsFindNext (m_ctagFile, &entry) == TagSuccess) {
APPL_INFO("Multiple file destination ..."); APPL_INFO("Multiple file destination ...");
ewol::object::Shared<appl::TagFileSelection> tmpWidget = ewol::object::makeShared(new appl::TagFileSelection()); std::shared_ptr<appl::TagFileSelection> tmpWidget = appl::TagFileSelection::create();
if (NULL == tmpWidget) { if (nullptr == tmpWidget) {
APPL_ERROR("Can not allocate widget == > display might be in error"); APPL_ERROR("Can not allocate widget == > display might be in error");
} else { } else {
tmpWidget->addCtagsNewItem(myfile.getFileSystemName(), lineID); tmpWidget->addCtagsNewItem(myfile.getFileSystemName(), lineID);
@@ -92,7 +85,7 @@ void appl::TextPluginCtags::jumpTo(const std::string& _name) {
tmpWidget->addCtagsNewItem(myfile.getFileSystemName(), lineID); tmpWidget->addCtagsNewItem(myfile.getFileSystemName(), lineID);
} while (tagsFindNext (m_ctagFile, &entry) == TagSuccess); } while (tagsFindNext (m_ctagFile, &entry) == TagSuccess);
ewol::getContext().getWindows()->popUpWidgetPush(tmpWidget); ewol::getContext().getWindows()->popUpWidgetPush(tmpWidget);
tmpWidget->registerOnEvent(this, applEventctagsSelection, eventOpenCtagsSelectReturn); tmpWidget->signalSelect.bind(shared_from_this(), &appl::TextPluginCtags::onCallbackOpenCtagsSelectReturn);
} }
} else { } else {
jumpFile(myfile.getName(), lineID - 1); jumpFile(myfile.getName(), lineID - 1);
@@ -102,19 +95,19 @@ void appl::TextPluginCtags::jumpTo(const std::string& _name) {
void appl::TextPluginCtags::jumpFile(const std::string& _filename, int64_t _lineId) { void appl::TextPluginCtags::jumpFile(const std::string& _filename, int64_t _lineId) {
// save the current file in the history // save the current file in the history
// TODO : registerHistory(); // TODO : registerHistory();
if (m_bufferManager != NULL) { if (m_bufferManager != nullptr) {
m_bufferManager->open(_filename); m_bufferManager->open(_filename);
} }
sendMultiCast(appl::MsgSelectChange, _filename); //sendMultiCast(appl::MsgSelectGotoLineSelect, etk::to_string(_lineId));
sendMultiCast(appl::MsgSelectGotoLineSelect, std::to_string(_lineId)); APPL_TODO("request jup at line ...");
} }
void appl::TextPluginCtags::loadTagFile() { void appl::TextPluginCtags::loadTagFile() {
tagFileInfo info; tagFileInfo info;
// close previous tag file // close previous tag file
if (NULL != m_ctagFile) { if (nullptr != m_ctagFile) {
tagsClose(m_ctagFile); tagsClose(m_ctagFile);
m_ctagFile = NULL; m_ctagFile = nullptr;
} }
if (m_tagFilename == "") { if (m_tagFilename == "") {
return; return;
@@ -122,7 +115,7 @@ void appl::TextPluginCtags::loadTagFile() {
// load (open) the tag file : // load (open) the tag file :
APPL_INFO("try to open tag file : " << m_tagFilename); APPL_INFO("try to open tag file : " << m_tagFilename);
m_ctagFile = tagsOpen(m_tagFilename.c_str(), &info); m_ctagFile = tagsOpen(m_tagFilename.c_str(), &info);
if (NULL != m_ctagFile) { if (nullptr != m_ctagFile) {
APPL_INFO("open exuberant Ctags file is OK ..."); APPL_INFO("open exuberant Ctags file is OK ...");
} else { } else {
APPL_INFO("Error to open ctags file ..."); APPL_INFO("Error to open ctags file ...");
@@ -139,7 +132,7 @@ void appl::TextPluginCtags::printTag(const tagEntry *_entry) {
<< "\" at line="<< (int32_t)_entry->address.lineNumber); << "\" at line="<< (int32_t)_entry->address.lineNumber);
APPL_INFO("Extention field : "); APPL_INFO("Extention field : ");
if (_entry->kind != NULL && _entry->kind [0] != '\0') { if (_entry->kind != nullptr && _entry->kind [0] != '\0') {
APPL_INFO(" kind : " << _entry->kind); APPL_INFO(" kind : " << _entry->kind);
} }
if (_entry->fileScope) { if (_entry->fileScope) {
@@ -151,32 +144,33 @@ void appl::TextPluginCtags::printTag(const tagEntry *_entry) {
#endif #endif
} }
void appl::TextPluginCtags::onReceiveMessage(const ewol::object::Message& _msg) { void appl::TextPluginCtags::onCallbackOpenCtagsOpenFileReturn(const std::string& _value) {
if (_msg.getMessage() == eventOpenCtagsOpenFileReturn) {
// open the new one : // open the new one :
etk::FSNode tmpFilename = _msg.getData(); etk::FSNode tmpFilename = _value;
m_tagFilename = tmpFilename.getNameFile(); m_tagFilename = tmpFilename.getNameFile();
m_tagFolderBase = tmpFilename.getNameFolder(); m_tagFolderBase = tmpFilename.getNameFolder();
APPL_INFO("Receive load Ctags file : " << m_tagFolderBase << "/" << m_tagFilename << " "); APPL_INFO("Receive load Ctags file : " << m_tagFolderBase << "/" << m_tagFilename << " ");
loadTagFile(); loadTagFile();
} else if (_msg.getMessage() == eventOpenCtagsSelectReturn) { }
void appl::TextPluginCtags::onCallbackOpenCtagsSelectReturn(const std::string& _value) {
// parse the input data // parse the input data
char tmp[4096]; char tmp[4096];
int32_t lineID; int32_t lineID;
// TODO : Review this ... // TODO : Review this ...
sscanf(_msg.getData().c_str(), "%d:%s", &lineID, tmp); sscanf(_value.c_str(), "%d:%s", &lineID, tmp);
jumpFile(tmp, lineID - 1); jumpFile(tmp, lineID - 1);
} }
}
bool appl::TextPluginCtags::onReceiveMessageViewer(appl::TextViewer& _textDrawer, bool appl::TextPluginCtags::onReceiveShortCut(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg) { const std::string& _shortCutName) {
if (isEnable() == false) { if (isEnable() == false) {
return false; return false;
} }
if (_msg.getMessage() == eventOpenCtagsFile) { if (_shortCutName == "appl::TextPluginCtags::OpenCtagsFile") {
APPL_INFO("Request opening ctag file"); APPL_INFO("Request opening ctag file");
ewol::object::Shared<ewol::widget::FileChooser> tmpWidget = ewol::object::makeShared(new ewol::widget::FileChooser()); std::shared_ptr<ewol::widget::FileChooser> tmpWidget = ewol::widget::FileChooser::create();
if (NULL == tmpWidget) { if (nullptr == tmpWidget) {
APPL_ERROR("Can not allocate widget == > display might be in error"); APPL_ERROR("Can not allocate widget == > display might be in error");
return true; return true;
} }
@@ -189,9 +183,9 @@ bool appl::TextPluginCtags::onReceiveMessageViewer(appl::TextViewer& _textDrawer
tmpWidget->setFolder(path); tmpWidget->setFolder(path);
} }
ewol::getContext().getWindows()->popUpWidgetPush(tmpWidget); ewol::getContext().getWindows()->popUpWidgetPush(tmpWidget);
tmpWidget->registerOnEvent(this, "validate", eventOpenCtagsOpenFileReturn); tmpWidget->signalValidate.bind(shared_from_this(), &appl::TextPluginCtags::onCallbackOpenCtagsOpenFileReturn);
return true; return true;
} else if (_msg.getMessage() == eventJumpDestination) { } else if (_shortCutName == "appl::TextPluginCtags::JumpDestination") {
if (_textDrawer.hasBuffer() == false) { if (_textDrawer.hasBuffer() == false) {
return false; return false;
} }
@@ -209,7 +203,7 @@ bool appl::TextPluginCtags::onReceiveMessageViewer(appl::TextViewer& _textDrawer
} }
jumpTo(textToSearch); jumpTo(textToSearch);
return true; return true;
} else if (_msg.getMessage() == eventJumpBack) { } else if (_shortCutName == "appl::TextPluginCtags::JumpBack") {
if (_textDrawer.hasBuffer() == false) { if (_textDrawer.hasBuffer() == false) {
return false; return false;
} }

View File

@@ -33,17 +33,21 @@ namespace appl {
void printTag(const tagEntry *_entry); void printTag(const tagEntry *_entry);
void jumpTo(const std::string& _name); void jumpTo(const std::string& _name);
void jumpFile(const std::string& _filename, int64_t _lineId); void jumpFile(const std::string& _filename, int64_t _lineId);
ewol::object::Shared<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager std::shared_ptr<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
public: protected:
TextPluginCtags(); TextPluginCtags();
void init();
public:
DECLARE_FACTORY(TextPluginCtags);
virtual ~TextPluginCtags(); virtual ~TextPluginCtags();
public: public:
virtual void onPluginEnable(appl::TextViewer& _textDrawer); virtual void onPluginEnable(appl::TextViewer& _textDrawer);
virtual void onPluginDisable(appl::TextViewer& _textDrawer); virtual void onPluginDisable(appl::TextViewer& _textDrawer);
virtual bool onReceiveMessageViewer(appl::TextViewer& _textDrawer, virtual bool onReceiveShortCut(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg); const std::string& _shortCutName);
// internal message : // callback function:
virtual void onReceiveMessage(const ewol::object::Message& _msg); void onCallbackOpenCtagsOpenFileReturn(const std::string& _value);
void onCallbackOpenCtagsSelectReturn(const std::string& _value);
}; };
}; };

View File

@@ -17,96 +17,112 @@
namespace appl { namespace appl {
template <typename TYPE> class TextViewerPluginData : public appl::TextViewerPlugin { template <typename TYPE> class TextViewerPluginData : public appl::TextViewerPlugin {
public: protected:
TextViewerPluginData() { TextViewerPluginData() {
// nothing to do ... // nothing to do ...
addObjectType("appl::TextViewerPluginData"); addObjectType("appl::TextViewerPluginData");
} }
void init() {
appl::TextViewerPlugin::init();
}
void init(const std::string& _name) {
appl::TextViewerPlugin::init(_name);
}
public:
DECLARE_FACTORY(TextViewerPluginData);
virtual ~TextViewerPluginData() { virtual ~TextViewerPluginData() {
for (size_t iii = 0; iii < m_specificData.size() ; ++iii) { for (size_t iii = 0; iii < m_specificData.size() ; ++iii) {
if (m_specificData[iii].second != NULL) { if (m_specificData[iii].second != nullptr) {
remove(*m_specificData[iii].second); remove(*m_specificData[iii].second);
delete(m_specificData[iii].second); delete(m_specificData[iii].second);
m_specificData[iii].second = NULL; m_specificData[iii].second = nullptr;
} }
} }
m_specificData.clear(); m_specificData.clear();
} }
private: private:
std::vector<std::pair<ewol::object::Shared<appl::Buffer> ,TYPE* >> m_specificData; std::vector<std::pair<std::weak_ptr<appl::Buffer> ,TYPE* >> m_specificData;
protected: protected:
TYPE* getDataRef(appl::TextViewer& _textDrawer) { TYPE* getDataRef(appl::TextViewer& _textDrawer) {
for (size_t iii = 0; iii < m_specificData.size() ; ++iii) { auto it = m_specificData.begin();
if (m_specificData[iii].first == _textDrawer.internalGetBuffer()) { while(it != m_specificData.end()) {
return m_specificData[iii].second; std::shared_ptr<appl::Buffer> buf = it->first.lock();
if (buf == nullptr) {
delete(it->second);
it->second = nullptr;
it = m_specificData.erase(it);
} }
if (buf == _textDrawer.internalGetBuffer()) {
return it->second;
}
++it;
} }
TYPE* data = new TYPE(); TYPE* data = new TYPE();
if (data == NULL) { if (data == nullptr) {
return NULL; return nullptr;
} }
m_specificData.push_back(std::make_pair(_textDrawer.internalGetBuffer(), data)); m_specificData.push_back(std::make_pair(_textDrawer.internalGetBuffer(), data));
// create a new one ... // create a new one ...
return data; return data;
} }
protected: // Wrap all element with their internal data: (do not use theses function) protected: // Wrap all element with their internal data: (do not use theses function)
bool onReceiveMessageViewer(appl::TextViewer& _textDrawer, bool onReceiveShortCut(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg) { const std::string& _shortCutName) {
TYPE* data = getDataRef(_textDrawer); TYPE* data = getDataRef(_textDrawer);
if (data == NULL) { if (data == nullptr) {
return false; return false;
} }
return onReceiveMessageViewer(_textDrawer, _msg, *data); return onDataReceiveShortCut(_textDrawer, _shortCutName, *data);
} }
bool onWrite(appl::TextViewer& _textDrawer, bool onWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const std::string& _data) { const std::string& _data) {
TYPE* data = getDataRef(_textDrawer); TYPE* data = getDataRef(_textDrawer);
if (data == NULL) { if (data == nullptr) {
return false; return false;
} }
return onWrite(_textDrawer, _pos, _data, *data); return onDataWrite(_textDrawer, _pos, _data, *data);
} }
bool onReplace(appl::TextViewer& _textDrawer, bool onReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const std::string& _data, const std::string& _data,
const appl::Buffer::Iterator& _posEnd) { const appl::Buffer::Iterator& _posEnd) {
TYPE* data = getDataRef(_textDrawer); TYPE* data = getDataRef(_textDrawer);
if (data == NULL) { if (data == nullptr) {
return false; return false;
} }
return onReplace(_textDrawer, _pos, _data, _posEnd, *data); return onDataReplace(_textDrawer, _pos, _data, _posEnd, *data);
} }
bool onRemove(appl::TextViewer& _textDrawer, bool onRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd) { const appl::Buffer::Iterator& _posEnd) {
TYPE* data = getDataRef(_textDrawer); TYPE* data = getDataRef(_textDrawer);
if (data == NULL) { if (data == nullptr) {
return false; return false;
} }
return onRemove(_textDrawer, _pos, _posEnd, *data); return onDataRemove(_textDrawer, _pos, _posEnd, *data);
} }
public: public:
virtual bool onReceiveMessageViewer(appl::TextViewer& _textDrawer, virtual bool onDataReceiveShortCut(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg, const std::string& _shortCutName,
TYPE& _data) { TYPE& _data) {
return false; return false;
} }
virtual bool onWrite(appl::TextViewer& _textDrawer, virtual bool onDataWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const std::string& _strData, const std::string& _strData,
TYPE& _data) { TYPE& _data) {
return false; return false;
} }
virtual bool onReplace(appl::TextViewer& _textDrawer, virtual bool onDataReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const std::string& _strData, const std::string& _strData,
const appl::Buffer::Iterator& _posEnd, const appl::Buffer::Iterator& _posEnd,
TYPE& _data) { TYPE& _data) {
return false; return false;
} }
virtual bool onRemove(appl::TextViewer& _textDrawer, virtual bool onDataRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd, const appl::Buffer::Iterator& _posEnd,
TYPE& _data) { TYPE& _data) {
@@ -115,16 +131,6 @@ namespace appl {
virtual void remove(TYPE& _data) { virtual void remove(TYPE& _data) {
return; return;
}; };
public:
virtual void onObjectRemove(const ewol::object::Shared<ewol::Object>& _object) {
appl::TextViewerPlugin::onObjectRemove(_object);
for (auto it(m_specificData.begin()); it != m_specificData.end(); ++it) {
if (it->first == _object) {
m_specificData.erase(it);
it = m_specificData.begin();
}
}
};
}; };
}; };

View File

@@ -15,37 +15,61 @@
#undef __class__ #undef __class__
#define __class__ "TextPluginHistory" #define __class__ "TextPluginHistory"
appl::TextPluginHistory::TextPluginHistory() { appl::TextPluginHistory::TextPluginHistory() :
m_activateOnReceiveMessage = true; m_menuIdTitle(-1),
m_menuIdUndo(-1),
m_menuIdRedo(-1) {
m_activateOnReceiveShortCut = true;
m_activateOnWrite = true; m_activateOnWrite = true;
m_activateOnReplace = true; m_activateOnReplace = true;
m_activateOnRemove = true; m_activateOnRemove = true;
addObjectType("appl::TextPluginHistory"); addObjectType("appl::TextPluginHistory");
} }
void appl::TextPluginHistory::init() {
appl::TextViewerPluginData<appl::PluginHistoryData>::init();
}
void appl::TextPluginHistory::onPluginEnable(appl::TextViewer& _textDrawer) { void appl::TextPluginHistory::onPluginEnable(appl::TextViewer& _textDrawer) {
std::shared_ptr<ewol::widget::Menu> menu = m_menuInterface.lock();
if (menu != nullptr) {
m_menuIdTitle = menu->addTitle("Edit");
if (m_menuIdTitle != -1) {
m_menuIdUndo = menu->add(m_menuIdTitle, "Undo", "THEME:GUI:Undo.edf", "appl::TextPluginHistory::menu:undo");
m_menuIdRedo = menu->add(m_menuIdTitle, "Redo", "THEME:GUI:Redo.edf", "appl::TextPluginHistory::menu:redo");
}
}
// add event : // add event :
_textDrawer.ext_registerMultiCast(ednMsgGuiRedo); _textDrawer.ext_shortCutAdd("ctrl+z", "appl::TextPluginHistory::Undo");
_textDrawer.ext_registerMultiCast(ednMsgGuiUndo); _textDrawer.ext_shortCutAdd("ctrl+shift+z", "appl::TextPluginHistory::Redo");
_textDrawer.ext_shortCutAdd("ctrl+z", ednMsgGuiUndo);
_textDrawer.ext_shortCutAdd("ctrl+shift+z", ednMsgGuiRedo);
} }
void appl::TextPluginHistory::onPluginDisable(appl::TextViewer& _textDrawer) { void appl::TextPluginHistory::onPluginDisable(appl::TextViewer& _textDrawer) {
// TODO : unknow function ... _textDrawer.ext_shortCutRm("appl::TextPluginHistory::Undo");
_textDrawer.ext_shortCutRm("appl::TextPluginHistory::Redo");
std::shared_ptr<ewol::widget::Menu> menu = m_menuInterface.lock();
if (menu != nullptr) {
menu->remove(m_menuIdRedo);
menu->remove(m_menuIdUndo);
menu->remove(m_menuIdTitle);
}
m_menuIdTitle = -1;
m_menuIdUndo = -1;
m_menuIdRedo = -1;
} }
bool appl::TextPluginHistory::onReceiveMessageViewer(appl::TextViewer& _textDrawer, bool appl::TextPluginHistory::onDataReceiveShortCut(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg, const std::string& _shortCutName,
appl::PluginHistoryData& _data) { appl::PluginHistoryData& _data) {
if (isEnable() == false) { if (isEnable() == false) {
return false; return false;
} }
if (_msg.getMessage() == ednMsgGuiRedo) { if (_shortCutName == "appl::TextPluginHistory::Redo") {
if (_data.m_redo.size() == 0) { if (_data.m_redo.size() == 0) {
return true; return true;
} }
if (_data.m_redo[_data.m_redo.size()-1] == NULL) { if (_data.m_redo[_data.m_redo.size()-1] == nullptr) {
_data.m_redo.pop_back(); _data.m_redo.pop_back();
return true; return true;
} }
@@ -57,11 +81,11 @@ bool appl::TextPluginHistory::onReceiveMessageViewer(appl::TextViewer& _textDraw
_textDrawer.position(tmpElement->m_endPosRemoved) ); _textDrawer.position(tmpElement->m_endPosRemoved) );
return true; return true;
} else if (_msg.getMessage() == ednMsgGuiUndo) { } else if (_shortCutName == "appl::TextPluginHistory::Undo") {
if (_data.m_undo.size() == 0) { if (_data.m_undo.size() == 0) {
return true; return true;
} }
if (_data.m_undo[_data.m_undo.size()-1] == NULL) { if (_data.m_undo[_data.m_undo.size()-1] == nullptr) {
_data.m_undo.pop_back(); _data.m_undo.pop_back();
return true; return true;
} }
@@ -82,11 +106,11 @@ void appl::TextPluginHistory::clearRedo(appl::PluginHistoryData& _data) {
return; return;
} }
for (size_t iii=0; iii<_data.m_redo.size(); ++iii) { for (size_t iii=0; iii<_data.m_redo.size(); ++iii) {
if (_data.m_redo[iii] == NULL) { if (_data.m_redo[iii] == nullptr) {
continue; continue;
} }
delete(_data.m_redo[iii]); delete(_data.m_redo[iii]);
_data.m_redo[iii] = NULL; _data.m_redo[iii] = nullptr;
} }
_data.m_redo.clear(); _data.m_redo.clear();
} }
@@ -96,17 +120,17 @@ void appl::TextPluginHistory::clearUndo(appl::PluginHistoryData& _data) {
return; return;
} }
for (size_t iii=0; iii<_data.m_undo.size(); ++iii) { for (size_t iii=0; iii<_data.m_undo.size(); ++iii) {
if (_data.m_undo[iii] == NULL) { if (_data.m_undo[iii] == nullptr) {
continue; continue;
} }
delete(_data.m_undo[iii]); delete(_data.m_undo[iii]);
_data.m_undo[iii] = NULL; _data.m_undo[iii] = nullptr;
} }
_data.m_undo.clear(); _data.m_undo.clear();
} }
bool appl::TextPluginHistory::onWrite(appl::TextViewer& _textDrawer, bool appl::TextPluginHistory::onDataWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const std::string& _strData, const std::string& _strData,
appl::PluginHistoryData& _data) { appl::PluginHistoryData& _data) {
@@ -114,22 +138,25 @@ bool appl::TextPluginHistory::onWrite(appl::TextViewer& _textDrawer,
return false; return false;
} }
appl::History *tmpElement = new appl::History(); appl::History *tmpElement = new appl::History();
if (tmpElement != NULL) { if (tmpElement != nullptr) {
tmpElement->m_addedText = _strData; tmpElement->m_addedText = _strData;
tmpElement->m_posAdded = (int64_t)_pos; tmpElement->m_posAdded = (int64_t)_pos;
tmpElement->m_endPosRemoved = (int64_t)_pos; tmpElement->m_endPosRemoved = (int64_t)_pos;
} }
_textDrawer.writeDirect(_strData, _pos); _textDrawer.writeDirect(_strData, _pos);
if (tmpElement != NULL) { if (tmpElement != nullptr) {
tmpElement->m_endPosAdded = (int64_t)_textDrawer.cursor(); tmpElement->m_endPosAdded = (int64_t)_textDrawer.cursor();
clearRedo(_data); clearRedo(_data);
_data.m_undo.push_back(tmpElement); _data.m_undo.push_back(tmpElement);
} }
appl::textPluginManager::onCursorMove(_textDrawer, _textDrawer.cursor()); std::shared_ptr<appl::textPluginManager> mng = m_pluginManager.lock();
if (mng!=nullptr) {
mng->onCursorMove(_textDrawer, _textDrawer.cursor());
}
return true; return true;
} }
bool appl::TextPluginHistory::onReplace(appl::TextViewer& _textDrawer, bool appl::TextPluginHistory::onDataReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const std::string& _strData, const std::string& _strData,
const appl::Buffer::Iterator& _posEnd, const appl::Buffer::Iterator& _posEnd,
@@ -138,23 +165,26 @@ bool appl::TextPluginHistory::onReplace(appl::TextViewer& _textDrawer,
return false; return false;
} }
appl::History *tmpElement = new appl::History(); appl::History *tmpElement = new appl::History();
if (tmpElement != NULL) { if (tmpElement != nullptr) {
tmpElement->m_posAdded = (int64_t)_pos; tmpElement->m_posAdded = (int64_t)_pos;
tmpElement->m_addedText = _strData; tmpElement->m_addedText = _strData;
tmpElement->m_endPosRemoved = (int64_t)_posEnd; tmpElement->m_endPosRemoved = (int64_t)_posEnd;
_textDrawer.copy(tmpElement->m_removedText, _pos, _posEnd); _textDrawer.copy(tmpElement->m_removedText, _pos, _posEnd);
} }
_textDrawer.replaceDirect(_strData, _pos, _posEnd); _textDrawer.replaceDirect(_strData, _pos, _posEnd);
if (tmpElement != NULL) { if (tmpElement != nullptr) {
tmpElement->m_endPosAdded = (int64_t)_textDrawer.cursor(); tmpElement->m_endPosAdded = (int64_t)_textDrawer.cursor();
clearRedo(_data); clearRedo(_data);
_data.m_undo.push_back(tmpElement); _data.m_undo.push_back(tmpElement);
} }
appl::textPluginManager::onCursorMove(_textDrawer, _textDrawer.cursor()); std::shared_ptr<appl::textPluginManager> mng = m_pluginManager.lock();
if (mng!=nullptr) {
mng->onCursorMove(_textDrawer, _textDrawer.cursor());
}
return true; return true;
} }
bool appl::TextPluginHistory::onRemove(appl::TextViewer& _textDrawer, bool appl::TextPluginHistory::onDataRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd, const appl::Buffer::Iterator& _posEnd,
appl::PluginHistoryData& _data) { appl::PluginHistoryData& _data) {
@@ -162,7 +192,7 @@ bool appl::TextPluginHistory::onRemove(appl::TextViewer& _textDrawer,
return false; return false;
} }
appl::History *tmpElement = new appl::History(); appl::History *tmpElement = new appl::History();
if (tmpElement != NULL) { if (tmpElement != nullptr) {
tmpElement->m_addedText = ""; tmpElement->m_addedText = "";
tmpElement->m_posAdded = (int64_t)_pos; tmpElement->m_posAdded = (int64_t)_pos;
tmpElement->m_endPosAdded = tmpElement->m_posAdded; tmpElement->m_endPosAdded = tmpElement->m_posAdded;
@@ -172,15 +202,11 @@ bool appl::TextPluginHistory::onRemove(appl::TextViewer& _textDrawer,
_data.m_undo.push_back(tmpElement); _data.m_undo.push_back(tmpElement);
} }
_textDrawer.removeDirect(); _textDrawer.removeDirect();
appl::textPluginManager::onCursorMove(_textDrawer, _textDrawer.cursor()); std::shared_ptr<appl::textPluginManager> mng = m_pluginManager.lock();
if (mng!=nullptr) {
mng->onCursorMove(_textDrawer, _textDrawer.cursor());
}
return true; return true;
} }
void appl::TextPluginHistory::onObjectRemove(const ewol::object::Shared<ewol::Object>& _object) {
appl::TextViewerPluginData<appl::PluginHistoryData>::onObjectRemove(_object);
// TODO : Dependence with buffer removing ...
}

View File

@@ -36,26 +36,33 @@ namespace appl {
std::vector<History*> m_redo; //!< History storing data std::vector<History*> m_redo; //!< History storing data
}; };
class TextPluginHistory : public appl::TextViewerPluginData<appl::PluginHistoryData> { class TextPluginHistory : public appl::TextViewerPluginData<appl::PluginHistoryData> {
public: private:
int32_t m_menuIdTitle;
int32_t m_menuIdUndo;
int32_t m_menuIdRedo;
protected:
TextPluginHistory(); TextPluginHistory();
void init();
public:
DECLARE_FACTORY(TextPluginHistory);
virtual ~TextPluginHistory() { }; virtual ~TextPluginHistory() { };
private: private:
public: public:
virtual void onPluginEnable(appl::TextViewer& _textDrawer); virtual void onPluginEnable(appl::TextViewer& _textDrawer);
virtual void onPluginDisable(appl::TextViewer& _textDrawer); virtual void onPluginDisable(appl::TextViewer& _textDrawer);
virtual bool onReceiveMessageViewer(appl::TextViewer& _textDrawer, virtual bool onDataReceiveShortCut(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg, const std::string& _shortCutName,
appl::PluginHistoryData& _data); appl::PluginHistoryData& _data);
virtual bool onWrite(appl::TextViewer& _textDrawer, virtual bool onDataWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const std::string& _strData, const std::string& _strData,
appl::PluginHistoryData& _data); appl::PluginHistoryData& _data);
virtual bool onReplace(appl::TextViewer& _textDrawer, virtual bool onDataReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const std::string& _strData, const std::string& _strData,
const appl::Buffer::Iterator& _posEnd, const appl::Buffer::Iterator& _posEnd,
appl::PluginHistoryData& _data); appl::PluginHistoryData& _data);
virtual bool onRemove(appl::TextViewer& _textDrawer, virtual bool onDataRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd, const appl::Buffer::Iterator& _posEnd,
appl::PluginHistoryData& _data); appl::PluginHistoryData& _data);
@@ -66,8 +73,6 @@ namespace appl {
private: private:
void clearRedo(appl::PluginHistoryData& _data); void clearRedo(appl::PluginHistoryData& _data);
void clearUndo(appl::PluginHistoryData& _data); void clearUndo(appl::PluginHistoryData& _data);
public:
virtual void onObjectRemove(const ewol::object::Shared<ewol::Object>& _object);
}; };
}; };

View File

@@ -19,96 +19,60 @@
#undef __class__ #undef __class__
#define __class__ "textPluginManager" #define __class__ "textPluginManager"
static std::list<ewol::object::Owner<appl::TextViewerPlugin>>& getList() { appl::textPluginManager::textPluginManager() {
static std::list<ewol::object::Owner<appl::TextViewerPlugin>> s_list;
return s_list;
}
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>>& getListOnEventEntry() {
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>> s_list;
return s_list;
}
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>>& getListOnEventInput() {
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>> s_list;
return s_list;
}
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>>& getListOnWrite() {
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>> s_list;
return s_list;
}
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>>& getListOnReplace() {
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>> s_list;
return s_list;
}
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>>& getListOnRemove() {
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>> s_list;
return s_list;
}
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>>& getListonReceiveMessageViewer() {
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>> s_list;
return s_list;
}
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>>& getListOnCursorMove() {
static std::vector<ewol::object::Shared<appl::TextViewerPlugin>> s_list;
return s_list;
}
void appl::textPluginManager::init() {
} }
void appl::textPluginManager::init(const std::string& _name) {
void appl::textPluginManager::unInit() { ewol::Resource::init(_name);
// remove all sub plugin class:
getListOnEventEntry().clear();
getListOnEventInput().clear();
getListOnWrite().clear();
getListOnReplace().clear();
getListOnRemove().clear();
getListonReceiveMessageViewer().clear();
getListOnCursorMove().clear();
getList().clear();
} }
void appl::textPluginManager::addDefaultPlugin() { void appl::textPluginManager::addDefaultPlugin() {
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginCopy())); appl::textPluginManager::addPlugin(appl::TextPluginCopy::create());
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginMultiLineTab())); appl::textPluginManager::addPlugin(appl::TextPluginMultiLineTab::create());
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginAutoIndent())); appl::textPluginManager::addPlugin(appl::TextPluginAutoIndent::create());
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginHistory())); appl::textPluginManager::addPlugin(appl::TextPluginHistory::create());
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginRmLine())); appl::textPluginManager::addPlugin(appl::TextPluginRmLine::create());
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginSelectAll())); appl::textPluginManager::addPlugin(appl::TextPluginSelectAll::create());
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginCtags())); appl::textPluginManager::addPlugin(appl::TextPluginCtags::create());
} }
void appl::textPluginManager::addPlugin(const ewol::object::Shared<appl::TextViewerPlugin>& _plugin) { void appl::textPluginManager::addPlugin(const std::shared_ptr<appl::TextViewerPlugin>& _plugin) {
if (_plugin == NULL) { if (_plugin == nullptr) {
return; return;
} }
getList().push_back(_plugin); APPL_DEBUG("Add plugin : " << _plugin->getObjectType());
m_list.push_back(_plugin);
if (_plugin->isAvaillableOnEventEntry() == true) { if (_plugin->isAvaillableOnEventEntry() == true) {
getListOnEventEntry().push_back(_plugin); m_listOnEventEntry.push_back(_plugin);
} }
if (_plugin->isAvaillableOnEventInput() == true) { if (_plugin->isAvaillableOnEventInput() == true) {
getListOnEventInput().push_back(_plugin); m_listOnEventInput.push_back(_plugin);
} }
if (_plugin->isAvaillableOnWrite() == true) { if (_plugin->isAvaillableOnWrite() == true) {
getListOnWrite().push_back(_plugin); m_listOnWrite.push_back(_plugin);
} }
if (_plugin->isAvaillableOnReplace() == true) { if (_plugin->isAvaillableOnReplace() == true) {
getListOnReplace().push_back(_plugin); m_listOnReplace.push_back(_plugin);
} }
if (_plugin->isAvaillableOnRemove() == true) { if (_plugin->isAvaillableOnRemove() == true) {
getListOnRemove().push_back(_plugin); m_listOnRemove.push_back(_plugin);
} }
if (_plugin->isAvaillableOnReceiveMessage() == true) { if (_plugin->isAvaillableOnReceiveShortCut() == true) {
getListonReceiveMessageViewer().push_back(_plugin); m_listOnReceiveShortCutViewer.push_back(_plugin);
} }
if (_plugin->isAvaillableOnCursorMove() == true) { if (_plugin->isAvaillableOnCursorMove() == true) {
getListOnCursorMove().push_back(_plugin); m_listOnCursorMove.push_back(_plugin);
}
std::shared_ptr<appl::TextViewer> viewer = m_currentViewer.lock();
if (viewer != nullptr) {
_plugin->onPluginEnable(*viewer);
} }
} }
void appl::textPluginManager::connect(appl::TextViewer& _widget) { void appl::textPluginManager::connect(appl::TextViewer& _widget) {
for (auto &it : getList()) { m_currentViewer = std::dynamic_pointer_cast<appl::TextViewer>(_widget.shared_from_this());
if (it == NULL) { for (auto &it : m_list) {
if (it == nullptr) {
continue; continue;
} }
it->onPluginEnable(_widget); it->onPluginEnable(_widget);
@@ -116,8 +80,9 @@ void appl::textPluginManager::connect(appl::TextViewer& _widget) {
} }
void appl::textPluginManager::disconnect(appl::TextViewer& _widget) { void appl::textPluginManager::disconnect(appl::TextViewer& _widget) {
for (auto &it : getList()) { m_currentViewer.reset();
if (it == NULL) { for (auto &it : m_list) {
if (it == nullptr) {
continue; continue;
} }
it->onPluginDisable(_widget); it->onPluginDisable(_widget);
@@ -126,8 +91,8 @@ void appl::textPluginManager::disconnect(appl::TextViewer& _widget) {
bool appl::textPluginManager::onEventEntry(appl::TextViewer& _textDrawer, bool appl::textPluginManager::onEventEntry(appl::TextViewer& _textDrawer,
const ewol::event::Entry& _event) { const ewol::event::Entry& _event) {
for (auto &it : getListOnEventEntry()) { for (auto &it : m_listOnEventEntry) {
if (it == NULL) { if (it == nullptr) {
continue; continue;
} }
if (it->onEventEntry(_textDrawer, _event) == true ) { if (it->onEventEntry(_textDrawer, _event) == true ) {
@@ -139,8 +104,8 @@ bool appl::textPluginManager::onEventEntry(appl::TextViewer& _textDrawer,
bool appl::textPluginManager::onEventInput(appl::TextViewer& _textDrawer, bool appl::textPluginManager::onEventInput(appl::TextViewer& _textDrawer,
const ewol::event::Input& _event) { const ewol::event::Input& _event) {
for (auto &it : getListOnEventInput()) { for (auto &it : m_listOnEventInput) {
if (it == NULL) { if (it == nullptr) {
continue; continue;
} }
if (it->onEventInput(_textDrawer, _event) == true ) { if (it->onEventInput(_textDrawer, _event) == true ) {
@@ -153,8 +118,8 @@ bool appl::textPluginManager::onEventInput(appl::TextViewer& _textDrawer,
bool appl::textPluginManager::onWrite(appl::TextViewer& _textDrawer, bool appl::textPluginManager::onWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const std::string& _data) { const std::string& _data) {
for (auto &it : getListOnWrite()) { for (auto &it : m_listOnWrite) {
if (it == NULL) { if (it == nullptr) {
continue; continue;
} }
if (it->onWrite(_textDrawer, _pos, _data) == true ) { if (it->onWrite(_textDrawer, _pos, _data) == true ) {
@@ -168,8 +133,8 @@ bool appl::textPluginManager::onReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const std::string& _data, const std::string& _data,
const appl::Buffer::Iterator& _posEnd) { const appl::Buffer::Iterator& _posEnd) {
for (auto &it : getListOnReplace()) { for (auto &it : m_listOnReplace) {
if (it == NULL) { if (it == nullptr) {
continue; continue;
} }
if (it->onReplace(_textDrawer, _pos, _data, _posEnd) == true ) { if (it->onReplace(_textDrawer, _pos, _data, _posEnd) == true ) {
@@ -182,8 +147,8 @@ bool appl::textPluginManager::onReplace(appl::TextViewer& _textDrawer,
bool appl::textPluginManager::onRemove(appl::TextViewer& _textDrawer, bool appl::textPluginManager::onRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd) { const appl::Buffer::Iterator& _posEnd) {
for (auto &it : getListOnRemove()) { for (auto &it : m_listOnRemove) {
if (it == NULL) { if (it == nullptr) {
continue; continue;
} }
if (it->onRemove(_textDrawer, _pos, _posEnd) == true ) { if (it->onRemove(_textDrawer, _pos, _posEnd) == true ) {
@@ -193,13 +158,13 @@ bool appl::textPluginManager::onRemove(appl::TextViewer& _textDrawer,
return false; return false;
} }
bool appl::textPluginManager::onReceiveMessageViewer(appl::TextViewer& _textDrawer, bool appl::textPluginManager::onReceiveShortCut(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg) { const std::string& _shortCutName) {
for (auto &it : getListonReceiveMessageViewer()) { for (auto &it : m_listOnReceiveShortCutViewer) {
if (it == NULL) { if (it == nullptr) {
continue; continue;
} }
if (it->onReceiveMessageViewer(_textDrawer, _msg) == true ) { if (it->onReceiveShortCut(_textDrawer, _shortCutName) == true ) {
return true; return true;
} }
} }
@@ -208,8 +173,8 @@ bool appl::textPluginManager::onReceiveMessageViewer(appl::TextViewer& _textDraw
bool appl::textPluginManager::onCursorMove(appl::TextViewer& _textDrawer, bool appl::textPluginManager::onCursorMove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos) { const appl::Buffer::Iterator& _pos) {
for (auto &it : getListOnCursorMove()) { for (auto &it : m_listOnCursorMove) {
if (it == NULL) { if (it == nullptr) {
continue; continue;
} }
if (it->onCursorMove(_textDrawer, _pos) == true ) { if (it->onCursorMove(_textDrawer, _pos) == true ) {

View File

@@ -16,15 +16,23 @@
#include <appl/TextPlugin.h> #include <appl/TextPlugin.h>
namespace appl { namespace appl {
namespace textPluginManager { class textPluginManager : public ewol::Resource {
/** private:
* @brief Init the plugin manager for writer. std::weak_ptr<appl::TextViewer> m_currentViewer;
*/ std::list<std::shared_ptr<appl::TextViewerPlugin>> m_list;
void init(); std::vector<std::shared_ptr<appl::TextViewerPlugin>> m_listOnEventEntry;
/** std::vector<std::shared_ptr<appl::TextViewerPlugin>> m_listOnEventInput;
* @brief UnInit the plugin manager for writer. std::vector<std::shared_ptr<appl::TextViewerPlugin>> m_listOnWrite;
*/ std::vector<std::shared_ptr<appl::TextViewerPlugin>> m_listOnReplace;
void unInit(); std::vector<std::shared_ptr<appl::TextViewerPlugin>> m_listOnRemove;
std::vector<std::shared_ptr<appl::TextViewerPlugin>> m_listOnReceiveShortCutViewer;
std::vector<std::shared_ptr<appl::TextViewerPlugin>> m_listOnCursorMove;
protected:
textPluginManager();
void init(const std::string& _name);
public:
DECLARE_RESOURCE_SINGLE_FACTORY(textPluginManager, "plugin-Manager");
virtual ~textPluginManager() {};
/** /**
* @brief Add default plugin list * @brief Add default plugin list
*/ */
@@ -33,7 +41,7 @@ namespace appl {
* @brief Add a plugin. * @brief Add a plugin.
* @param[in] _plugin Plugin pointer to add. * @param[in] _plugin Plugin pointer to add.
*/ */
void addPlugin(const ewol::object::Shared<appl::TextViewerPlugin>& _plugin); void addPlugin(const std::shared_ptr<appl::TextViewerPlugin>& _plugin);
/** /**
* @brief connect a new widget to the plugin. * @brief connect a new widget to the plugin.
* @param[in] _widget Reference on the widget caller. * @param[in] _widget Reference on the widget caller.
@@ -95,11 +103,11 @@ namespace appl {
/** /**
* @brief Called when a message arrive. * @brief Called when a message arrive.
* @param[in] _widget Reference on the widget caller. * @param[in] _widget Reference on the widget caller.
* @param[in] _msg Generic message. * @param[in] _shortCutName shortcut properties.
* @return true if the event might not propagate anymore * @return true if the event might not propagate anymore
*/ */
bool onReceiveMessageViewer(appl::TextViewer& _textDrawer, bool onReceiveShortCut(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg); const std::string& _shortCutName);
/** /**
* @brief Called when Cursor move of position. * @brief Called when Cursor move of position.
* @param[in] _widget Reference on the widget caller. * @param[in] _widget Reference on the widget caller.

View File

@@ -19,6 +19,10 @@ appl::TextPluginMultiLineTab::TextPluginMultiLineTab() {
addObjectType("appl::TextPluginMultiLineTab"); addObjectType("appl::TextPluginMultiLineTab");
} }
void appl::TextPluginMultiLineTab::init() {
appl::TextViewerPlugin::init();
}
bool appl::TextPluginMultiLineTab::onEventEntry(appl::TextViewer& _textDrawer, bool appl::TextPluginMultiLineTab::onEventEntry(appl::TextViewer& _textDrawer,
const ewol::event::Entry& _event) { const ewol::event::Entry& _event) {
if (isEnable() == false) { if (isEnable() == false) {

View File

@@ -17,8 +17,11 @@
namespace appl { namespace appl {
class TextPluginMultiLineTab : public appl::TextViewerPlugin { class TextPluginMultiLineTab : public appl::TextViewerPlugin {
public: protected:
TextPluginMultiLineTab(); TextPluginMultiLineTab();
void init();
public:
DECLARE_FACTORY(TextPluginMultiLineTab);
virtual ~TextPluginMultiLineTab() { virtual ~TextPluginMultiLineTab() {
// nothing to do ... // nothing to do ...
}; };

View File

@@ -16,26 +16,29 @@
appl::TextPluginRmLine::TextPluginRmLine() { appl::TextPluginRmLine::TextPluginRmLine() {
m_activateOnReceiveMessage = true; m_activateOnReceiveShortCut = true;
addObjectType("appl::TextPluginRmLine"); addObjectType("appl::TextPluginRmLine");
} }
void appl::TextPluginRmLine::init() {
appl::TextViewerPlugin::init();
}
void appl::TextPluginRmLine::onPluginEnable(appl::TextViewer& _textDrawer) { void appl::TextPluginRmLine::onPluginEnable(appl::TextViewer& _textDrawer) {
// add event : // add event :
_textDrawer.ext_registerMultiCast(ednMsgGuiRm); _textDrawer.ext_shortCutAdd("ctrl+w", "appl::TextPluginRmLine::Rm");
_textDrawer.ext_shortCutAdd("ctrl+w", ednMsgGuiRm);
} }
void appl::TextPluginRmLine::onPluginDisable(appl::TextViewer& _textDrawer) { void appl::TextPluginRmLine::onPluginDisable(appl::TextViewer& _textDrawer) {
// TODO : unknow function ... _textDrawer.ext_shortCutRm("appl::TextPluginRmLine::Rm");
} }
bool appl::TextPluginRmLine::onReceiveMessageViewer(appl::TextViewer& _textDrawer, bool appl::TextPluginRmLine::onReceiveShortCut(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg) { const std::string& _shortCutName) {
if (isEnable() == false) { if (isEnable() == false) {
return false; return false;
} }
if (_msg.getMessage() == ednMsgGuiRm) { if (_shortCutName == "appl::TextPluginRmLine::Rm") {
if (_textDrawer.hasBuffer() == false) { if (_textDrawer.hasBuffer() == false) {
return false; return false;
} }

View File

@@ -17,15 +17,18 @@
namespace appl { namespace appl {
class TextPluginRmLine : public appl::TextViewerPlugin { class TextPluginRmLine : public appl::TextViewerPlugin {
public: protected:
TextPluginRmLine(); TextPluginRmLine();
void init();
public:
DECLARE_FACTORY(TextPluginRmLine);
virtual ~TextPluginRmLine() { virtual ~TextPluginRmLine() {
// nothing to do ... // nothing to do ...
}; };
public: public:
virtual void onPluginEnable(appl::TextViewer& _textDrawer); virtual void onPluginEnable(appl::TextViewer& _textDrawer);
virtual void onPluginDisable(appl::TextViewer& _textDrawer); virtual void onPluginDisable(appl::TextViewer& _textDrawer);
virtual bool onReceiveMessageViewer(appl::TextViewer& _textDrawer, const ewol::object::Message& _msg); virtual bool onReceiveShortCut(appl::TextViewer& _textDrawer, const std::string& _shortCutName);
}; };
}; };

View File

@@ -15,34 +15,65 @@
#define __class__ "TextPluginSelectAll" #define __class__ "TextPluginSelectAll"
appl::TextPluginSelectAll::TextPluginSelectAll() { appl::TextPluginSelectAll::TextPluginSelectAll() :
m_activateOnReceiveMessage = true; m_menuIdTitle(-1),
m_menuIdSelectAll(-1),
m_menuIdSelectNone(-1) {
m_activateOnReceiveShortCut = true;
addObjectType("appl::TextPluginSelectAll"); addObjectType("appl::TextPluginSelectAll");
} }
static const char* eventSelectAll = "plugin-select-all"; void appl::TextPluginSelectAll::init() {
appl::TextViewerPlugin::init();
}
void appl::TextPluginSelectAll::onPluginEnable(appl::TextViewer& _textDrawer) { void appl::TextPluginSelectAll::onPluginEnable(appl::TextViewer& _textDrawer) {
std::shared_ptr<ewol::widget::Menu> menu = m_menuInterface.lock();
if (menu != nullptr) {
m_menuIdTitle = menu->addTitle("Edit");
if (m_menuIdTitle != -1) {
m_menuIdSelectAll = menu->add(m_menuIdTitle, "Select All","", "appl::TextPluginSelectAll::menu:select-all");
m_menuIdSelectNone = menu->add(m_menuIdTitle, "Un-Select","", "appl::TextPluginSelectAll::menu:select-none");
}
}
// add event : // add event :
_textDrawer.ext_registerMultiCast(eventSelectAll); _textDrawer.ext_shortCutAdd("ctrl+a", "appl::TextPluginSelectAll::All");
_textDrawer.ext_shortCutAdd("ctrl+a", eventSelectAll); _textDrawer.ext_shortCutAdd("ctrl+shift+a", "appl::TextPluginSelectAll::None");
} }
void appl::TextPluginSelectAll::onPluginDisable(appl::TextViewer& _textDrawer) { void appl::TextPluginSelectAll::onPluginDisable(appl::TextViewer& _textDrawer) {
// TODO : unknow function ... _textDrawer.ext_shortCutRm("appl::TextPluginSelectAll::All");
_textDrawer.ext_shortCutRm("appl::TextPluginSelectAll::None");
std::shared_ptr<ewol::widget::Menu> menu = m_menuInterface.lock();
if (menu != nullptr) {
menu->remove(m_menuIdSelectNone);
menu->remove(m_menuIdSelectAll);
menu->remove(m_menuIdTitle);
}
m_menuIdTitle = -1;
m_menuIdSelectAll = -1;
m_menuIdSelectNone = -1;
} }
bool appl::TextPluginSelectAll::onReceiveMessageViewer(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg) { bool appl::TextPluginSelectAll::onReceiveShortCut(appl::TextViewer& _textDrawer,
const std::string& _shortCutName) {
if (isEnable() == false) { if (isEnable() == false) {
return false; return false;
} }
if (_msg.getMessage() == eventSelectAll) { if (_shortCutName == "appl::TextPluginSelectAll::All") {
if (_textDrawer.hasBuffer() == false) { if (_textDrawer.hasBuffer() == false) {
return false; return false;
} }
_textDrawer.select(_textDrawer.begin(), _textDrawer.end()); _textDrawer.select(_textDrawer.begin(), _textDrawer.end());
return true; return true;
} }
if (_shortCutName == "appl::TextPluginSelectAll::None") {
if (_textDrawer.hasBuffer() == false) {
return false;
}
_textDrawer.unSelect();
return true;
}
return false; return false;
} }

View File

@@ -17,15 +17,21 @@
namespace appl { namespace appl {
class TextPluginSelectAll : public appl::TextViewerPlugin { class TextPluginSelectAll : public appl::TextViewerPlugin {
public: protected:
TextPluginSelectAll(); TextPluginSelectAll();
void init();
int32_t m_menuIdTitle;
int32_t m_menuIdSelectAll;
int32_t m_menuIdSelectNone;
public:
DECLARE_FACTORY(TextPluginSelectAll);
virtual ~TextPluginSelectAll() { virtual ~TextPluginSelectAll() {
// nothing to do ... // nothing to do ...
}; };
public: public:
virtual void onPluginEnable(appl::TextViewer& _textDrawer); virtual void onPluginEnable(appl::TextViewer& _textDrawer);
virtual void onPluginDisable(appl::TextViewer& _textDrawer); virtual void onPluginDisable(appl::TextViewer& _textDrawer);
virtual bool onReceiveMessageViewer(appl::TextViewer& _textDrawer, const ewol::object::Message& _msg); virtual bool onReceiveShortCut(appl::TextViewer& _textDrawer, const std::string& _shortCutName);
}; };
}; };

View File

@@ -138,7 +138,7 @@ static int growString (vstring *s)
newLength = 2 * s->size; newLength = 2 * s->size;
newLine = (char*) realloc (s->buffer, newLength); newLine = (char*) realloc (s->buffer, newLength);
} }
if (newLine == NULL) if (newLine == nullptr)
perror ("string too large"); perror ("string too large");
else else
{ {
@@ -154,13 +154,13 @@ static void copyName (tagFile *const file)
{ {
size_t length; size_t length;
const char *end = strchr (file->line.buffer, '\t'); const char *end = strchr (file->line.buffer, '\t');
if (end == NULL) if (end == nullptr)
{ {
end = strchr (file->line.buffer, '\n'); end = strchr (file->line.buffer, '\n');
if (end == NULL) if (end == nullptr)
end = strchr (file->line.buffer, '\r'); end = strchr (file->line.buffer, '\r');
} }
if (end != NULL) if (end != nullptr)
length = end - file->line.buffer; length = end - file->line.buffer;
else else
length = strlen (file->line.buffer); length = strlen (file->line.buffer);
@@ -189,7 +189,7 @@ static int readTagLineRaw (tagFile *const file)
reReadLine = 0; reReadLine = 0;
*pLastChar = '\0'; *pLastChar = '\0';
line = fgets (file->line.buffer, (int) file->line.size, file->fp); line = fgets (file->line.buffer, (int) file->line.size, file->fp);
if (line == NULL) if (line == nullptr)
{ {
/* read error */ /* read error */
if (! feof (file->fp)) if (! feof (file->fp))
@@ -236,7 +236,7 @@ static tagResult growFields (tagFile *const file)
unsigned short newCount = (unsigned short) 2 * file->fields.max; unsigned short newCount = (unsigned short) 2 * file->fields.max;
tagExtensionField *newFields = (tagExtensionField*) tagExtensionField *newFields = (tagExtensionField*)
realloc (file->fields.list, newCount * sizeof (tagExtensionField)); realloc (file->fields.list, newCount * sizeof (tagExtensionField));
if (newFields == NULL) if (newFields == nullptr)
perror ("too many extension fields"); perror ("too many extension fields");
else else
{ {
@@ -251,7 +251,7 @@ static void parseExtensionFields (tagFile *const file, tagEntry *const entry,
char *const string) char *const string)
{ {
char *p = string; char *p = string;
while (p != NULL && *p != '\0') while (p != nullptr && *p != '\0')
{ {
while (*p == TAB) while (*p == TAB)
*p++ = '\0'; *p++ = '\0';
@@ -260,10 +260,10 @@ static void parseExtensionFields (tagFile *const file, tagEntry *const entry,
char *colon; char *colon;
char *field = p; char *field = p;
p = strchr (p, TAB); p = strchr (p, TAB);
if (p != NULL) if (p != nullptr)
*p++ = '\0'; *p++ = '\0';
colon = strchr (field, ':'); colon = strchr (field, ':');
if (colon == NULL) if (colon == nullptr)
entry->kind = field; entry->kind = field;
else else
{ {
@@ -295,19 +295,19 @@ static void parseTagLine (tagFile *file, tagEntry *const entry)
char *p = file->line.buffer; char *p = file->line.buffer;
char *tab = strchr (p, TAB); char *tab = strchr (p, TAB);
entry->fields.list = NULL; entry->fields.list = nullptr;
entry->fields.count = 0; entry->fields.count = 0;
entry->kind = NULL; entry->kind = nullptr;
entry->fileScope = 0; entry->fileScope = 0;
entry->name = p; entry->name = p;
if (tab != NULL) if (tab != nullptr)
{ {
*tab = '\0'; *tab = '\0';
p = tab + 1; p = tab + 1;
entry->file = p; entry->file = p;
tab = strchr (p, TAB); tab = strchr (p, TAB);
if (tab != NULL) if (tab != nullptr)
{ {
int fieldsPresent; int fieldsPresent;
*tab = '\0'; *tab = '\0';
@@ -321,8 +321,8 @@ static void parseTagLine (tagFile *file, tagEntry *const entry)
do do
{ {
p = strchr (p + 1, delimiter); p = strchr (p + 1, delimiter);
} while (p != NULL && *(p - 1) == '\\'); } while (p != nullptr && *(p - 1) == '\\');
if (p == NULL) if (p == nullptr)
{ {
/* invalid pattern */ /* invalid pattern */
} }
@@ -351,19 +351,19 @@ static void parseTagLine (tagFile *file, tagEntry *const entry)
entry->fields.list = file->fields.list; entry->fields.list = file->fields.list;
for (i = entry->fields.count ; i < file->fields.max ; ++i) for (i = entry->fields.count ; i < file->fields.max ; ++i)
{ {
file->fields.list [i].key = NULL; file->fields.list [i].key = nullptr;
file->fields.list [i].value = NULL; file->fields.list [i].value = nullptr;
} }
} }
static char *duplicate (const char *str) static char *duplicate (const char *str)
{ {
char *result = NULL; char *result = nullptr;
if (str != NULL) if (str != nullptr)
{ {
result = strdup (str); result = strdup (str);
if (result == NULL) if (result == nullptr)
perror (NULL); perror (nullptr);
} }
return result; return result;
} }
@@ -372,14 +372,14 @@ static void readPseudoTags (tagFile *const file, tagFileInfo *const info)
{ {
fpos_t startOfLine; fpos_t startOfLine;
const size_t prefixLength = strlen (PseudoTagPrefix); const size_t prefixLength = strlen (PseudoTagPrefix);
if (info != NULL) if (info != nullptr)
{ {
info->file.format = 1; info->file.format = 1;
info->file.sort = TAG_UNSORTED; info->file.sort = TAG_UNSORTED;
info->program.author = NULL; info->program.author = nullptr;
info->program.name = NULL; info->program.name = nullptr;
info->program.url = NULL; info->program.url = nullptr;
info->program.version = NULL; info->program.version = nullptr;
} }
while (1) while (1)
{ {
@@ -407,7 +407,7 @@ static void readPseudoTags (tagFile *const file, tagFileInfo *const info)
file->program.url = duplicate (value); file->program.url = duplicate (value);
else if (strcmp (key, "TAG_PROGRAM_VERSION") == 0) else if (strcmp (key, "TAG_PROGRAM_VERSION") == 0)
file->program.version = duplicate (value); file->program.version = duplicate (value);
if (info != NULL) if (info != nullptr)
{ {
info->file.format = file->format; info->file.format = file->format;
info->file.sort = file->sortMethod; info->file.sort = file->sortMethod;
@@ -440,7 +440,7 @@ static void gotoFirstLogicalTag (tagFile *const file)
static tagFile *initialize (const char *const filePath, tagFileInfo *const info) static tagFile *initialize (const char *const filePath, tagFileInfo *const info)
{ {
tagFile *result = (tagFile*) calloc ((size_t) 1, sizeof (tagFile)); tagFile *result = (tagFile*) calloc ((size_t) 1, sizeof (tagFile));
if (result != NULL) if (result != nullptr)
{ {
growString (&result->line); growString (&result->line);
growString (&result->name); growString (&result->name);
@@ -448,10 +448,10 @@ static tagFile *initialize (const char *const filePath, tagFileInfo *const info)
result->fields.list = (tagExtensionField*) calloc ( result->fields.list = (tagExtensionField*) calloc (
result->fields.max, sizeof (tagExtensionField)); result->fields.max, sizeof (tagExtensionField));
result->fp = fopen (filePath, "r"); result->fp = fopen (filePath, "r");
if (result->fp == NULL) if (result->fp == nullptr)
{ {
free (result); free (result);
result = NULL; result = nullptr;
info->status.error_number = errno; info->status.error_number = errno;
} }
else else
@@ -475,15 +475,15 @@ static void terminate (tagFile *const file)
free (file->name.buffer); free (file->name.buffer);
free (file->fields.list); free (file->fields.list);
if (file->program.author != NULL) if (file->program.author != nullptr)
free (file->program.author); free (file->program.author);
if (file->program.name != NULL) if (file->program.name != nullptr)
free (file->program.name); free (file->program.name);
if (file->program.url != NULL) if (file->program.url != nullptr)
free (file->program.url); free (file->program.url);
if (file->program.version != NULL) if (file->program.version != nullptr)
free (file->program.version); free (file->program.version);
if (file->search.name != NULL) if (file->search.name != nullptr)
free (file->search.name); free (file->search.name);
memset (file, 0, sizeof (tagFile)); memset (file, 0, sizeof (tagFile));
@@ -494,13 +494,13 @@ static void terminate (tagFile *const file)
static tagResult readNext (tagFile *const file, tagEntry *const entry) static tagResult readNext (tagFile *const file, tagEntry *const entry)
{ {
tagResult result; tagResult result;
if (file == NULL || ! file->initialized) if (file == nullptr || ! file->initialized)
result = TagFailure; result = TagFailure;
else if (! readTagLine (file)) else if (! readTagLine (file))
result = TagFailure; result = TagFailure;
else else
{ {
if (entry != NULL) if (entry != nullptr)
parseTagLine (file, entry); parseTagLine (file, entry);
result = TagSuccess; result = TagSuccess;
} }
@@ -510,13 +510,13 @@ static tagResult readNext (tagFile *const file, tagEntry *const entry)
static const char *readFieldValue ( static const char *readFieldValue (
const tagEntry *const entry, const char *const key) const tagEntry *const entry, const char *const key)
{ {
const char *result = NULL; const char *result = nullptr;
int i; int i;
if (strcmp (key, "kind") == 0) if (strcmp (key, "kind") == 0)
result = entry->kind; result = entry->kind;
else if (strcmp (key, "file") == 0) else if (strcmp (key, "file") == 0)
result = EmptyString; result = EmptyString;
else for (i = 0 ; i < entry->fields.count && result == NULL ; ++i) else for (i = 0 ; i < entry->fields.count && result == nullptr ; ++i)
if (strcmp (entry->fields.list [i].key, key) == 0) if (strcmp (entry->fields.list [i].key, key) == 0)
result = entry->fields.list [i].value; result = entry->fields.list [i].value;
return result; return result;
@@ -650,7 +650,7 @@ static tagResult find (tagFile *const file, tagEntry *const entry,
const char *const name, const int options) const char *const name, const int options)
{ {
tagResult result; tagResult result;
if (file->search.name != NULL) if (file->search.name != nullptr)
free (file->search.name); free (file->search.name);
file->search.name = duplicate (name); file->search.name = duplicate (name);
file->search.nameLength = strlen (name); file->search.nameLength = strlen (name);
@@ -680,7 +680,7 @@ static tagResult find (tagFile *const file, tagEntry *const entry,
else else
{ {
file->search.pos = file->pos; file->search.pos = file->pos;
if (entry != NULL) if (entry != nullptr)
parseTagLine (file, entry); parseTagLine (file, entry);
} }
return result; return result;
@@ -699,7 +699,7 @@ static tagResult findNext (tagFile *const file, tagEntry *const entry)
else else
{ {
result = findSequential (file); result = findSequential (file);
if (result == TagSuccess && entry != NULL) if (result == TagSuccess && entry != nullptr)
parseTagLine (file, entry); parseTagLine (file, entry);
} }
return result; return result;
@@ -717,7 +717,7 @@ extern tagFile *tagsOpen (const char *const filePath, tagFileInfo *const info)
extern tagResult tagsSetSortType (tagFile *const file, const sortType type) extern tagResult tagsSetSortType (tagFile *const file, const sortType type)
{ {
tagResult result = TagFailure; tagResult result = TagFailure;
if (file != NULL && file->initialized) if (file != nullptr && file->initialized)
{ {
file->sortMethod = type; file->sortMethod = type;
result = TagSuccess; result = TagSuccess;
@@ -728,7 +728,7 @@ extern tagResult tagsSetSortType (tagFile *const file, const sortType type)
extern tagResult tagsFirst (tagFile *const file, tagEntry *const entry) extern tagResult tagsFirst (tagFile *const file, tagEntry *const entry)
{ {
tagResult result = TagFailure; tagResult result = TagFailure;
if (file != NULL && file->initialized) if (file != nullptr && file->initialized)
{ {
gotoFirstLogicalTag (file); gotoFirstLogicalTag (file);
result = readNext (file, entry); result = readNext (file, entry);
@@ -739,15 +739,15 @@ extern tagResult tagsFirst (tagFile *const file, tagEntry *const entry)
extern tagResult tagsNext (tagFile *const file, tagEntry *const entry) extern tagResult tagsNext (tagFile *const file, tagEntry *const entry)
{ {
tagResult result = TagFailure; tagResult result = TagFailure;
if (file != NULL && file->initialized) if (file != nullptr && file->initialized)
result = readNext (file, entry); result = readNext (file, entry);
return result; return result;
} }
extern const char *tagsField (const tagEntry *const entry, const char *const key) extern const char *tagsField (const tagEntry *const entry, const char *const key)
{ {
const char *result = NULL; const char *result = nullptr;
if (entry != NULL) if (entry != nullptr)
result = readFieldValue (entry, key); result = readFieldValue (entry, key);
return result; return result;
} }
@@ -756,7 +756,7 @@ extern tagResult tagsFind (tagFile *const file, tagEntry *const entry,
const char *const name, const int options) const char *const name, const int options)
{ {
tagResult result = TagFailure; tagResult result = TagFailure;
if (file != NULL && file->initialized) if (file != nullptr && file->initialized)
result = find (file, entry, name, options); result = find (file, entry, name, options);
return result; return result;
} }
@@ -764,7 +764,7 @@ extern tagResult tagsFind (tagFile *const file, tagEntry *const entry,
extern tagResult tagsFindNext (tagFile *const file, tagEntry *const entry) extern tagResult tagsFindNext (tagFile *const file, tagEntry *const entry)
{ {
tagResult result = TagFailure; tagResult result = TagFailure;
if (file != NULL && file->initialized) if (file != nullptr && file->initialized)
result = findNext (file, entry); result = findNext (file, entry);
return result; return result;
} }
@@ -772,7 +772,7 @@ extern tagResult tagsFindNext (tagFile *const file, tagEntry *const entry)
extern tagResult tagsClose (tagFile *const file) extern tagResult tagsClose (tagFile *const file)
{ {
tagResult result = TagFailure; tagResult result = TagFailure;
if (file != NULL && file->initialized) if (file != nullptr && file->initialized)
{ {
terminate (file); terminate (file);
result = TagSuccess; result = TagSuccess;
@@ -804,7 +804,7 @@ static void printTag (const tagEntry *entry)
entry->name, entry->file, entry->address.pattern); entry->name, entry->file, entry->address.pattern);
if (extensionFields) if (extensionFields)
{ {
if (entry->kind != NULL && entry->kind [0] != '\0') if (entry->kind != nullptr && entry->kind [0] != '\0')
printf ("%s\tkind:%s", sep, entry->kind); printf ("%s\tkind:%s", sep, entry->kind);
if (entry->fileScope) if (entry->fileScope)
printf ("%s\tfile:", sep); printf ("%s\tfile:", sep);
@@ -825,7 +825,7 @@ static void findTag (const char *const name, const int options)
tagFileInfo info; tagFileInfo info;
tagEntry entry; tagEntry entry;
tagFile *const file = tagsOpen (TagFileName, &info); tagFile *const file = tagsOpen (TagFileName, &info);
if (file == NULL) if (file == nullptr)
{ {
fprintf (stderr, "%s: cannot open tag file: %s: %s\n", fprintf (stderr, "%s: cannot open tag file: %s: %s\n",
ProgramName, strerror (info.status.error_number), name); ProgramName, strerror (info.status.error_number), name);
@@ -851,7 +851,7 @@ static void listTags ()
tagFileInfo info; tagFileInfo info;
tagEntry entry; tagEntry entry;
tagFile *const file = tagsOpen (TagFileName, &info); tagFile *const file = tagsOpen (TagFileName, &info);
if (file == NULL) if (file == nullptr)
{ {
fprintf (stderr, "%s: cannot open tag file: %s: %s\n", fprintf (stderr, "%s: cannot open tag file: %s: %s\n",
ProgramName, strerror (info.status.error_number), TagFileName); ProgramName, strerror (info.status.error_number), TagFileName);
@@ -927,7 +927,7 @@ extern int main (int argc, char **argv)
++j; ++j;
if (arg [j] == '\0') if (arg [j] == '\0')
SortMethod = TAG_SORTED; SortMethod = TAG_SORTED;
else if (strchr ("012", arg[j]) != NULL) else if (strchr ("012", arg[j]) != nullptr)
SortMethod = (sortType) (arg[j] - '0'); SortMethod = (sortType) (arg[j] - '0');
else else
{ {

View File

@@ -114,7 +114,7 @@ typedef struct {
/* address for locating tag in source file */ /* address for locating tag in source file */
struct { struct {
/* pattern for locating source line /* pattern for locating source line
* (may be NULL if not present) */ * (may be nullptr if not present) */
const char *pattern; const char *pattern;
/* line number in source file of tag definition /* line number in source file of tag definition
@@ -122,7 +122,7 @@ typedef struct {
unsigned long lineNumber; unsigned long lineNumber;
} address; } address;
/* kind of tag (may by name, character, or NULL if not known) */ /* kind of tag (may by name, character, or nullptr if not known) */
const char *kind; const char *kind;
/* is tag of file-limited scope? */ /* is tag of file-limited scope? */

View File

@@ -18,91 +18,21 @@
class myParamGlobal : public ewol::Object { class myParamGlobal : public ewol::Object {
public: public:
static const char * const configEOL; ewol::object::Param<bool> m_displayEOL;
static const char * const configAutoIndent; ewol::object::Param<bool> m_AutoIndent;
static const char * const configShowTabChar; ewol::object::Param<bool> m_displayTabChar;
static const char * const configShowSpaceChar; ewol::object::Param<bool> m_displaySpaceChar;
public : public :
bool m_displayEOL; myParamGlobal() :
bool m_AutoIndent; m_displayEOL(*this, "eol", false, "Display end of line character"),
bool m_displayTabChar; m_AutoIndent(*this, "auto-indent", true, "Auto indent when create new line"),
bool m_displaySpaceChar; m_displayTabChar(*this, "display-tab", true, "Display the Tab char"),
public : m_displaySpaceChar(*this, "display-space", true, "Display the space char") {
myParamGlobal() {
m_static = true; // Note : set the object static notification( Must be set or assert at the end of process) m_static = true; // Note : set the object static notification( Must be set or assert at the end of process)
setName("edn_global_param"); setName("edn_global_param");
m_displayEOL=false;
m_AutoIndent = true;
m_displayTabChar = true;
m_displaySpaceChar = true;
registerConfig(configEOL, "bool", NULL, "Display end of line character");
registerConfig(configAutoIndent, "bool", NULL, "Auto indent when create new line");
registerConfig(configShowTabChar, "bool", NULL, "Display the Tab char");
registerConfig(configShowSpaceChar, "bool", NULL, "Display the space char");
}
bool onSetConfig(const ewol::object::Config& _conf) {
// Not set the EObject node parameter (name == > not change ...)
if (_conf.getConfig() == configEOL) {
m_displayEOL = std::stob(_conf.getData());
return true;
}
if (_conf.getConfig() == configAutoIndent) {
m_AutoIndent = std::stob(_conf.getData());
return true;
}
if (_conf.getConfig() == configShowTabChar) {
m_displayTabChar = std::stob(_conf.getData());
return true;
}
if (_conf.getConfig() == configShowSpaceChar) {
m_displaySpaceChar = std::stob(_conf.getData());
return true;
}
return false;
}
bool onGetConfig(const char* _config, std::string& _result) const {
// Not set the EObject node parameter (name == > not change ...)
if (_config == configEOL) {
if (true == m_displayEOL) {
_result = "true";
} else {
_result = "false";
}
return true;
}
if (_config == configAutoIndent) {
if (true == m_AutoIndent) {
_result = "true";
} else {
_result = "false";
}
return true;
}
if (_config == configShowTabChar) {
if (true == m_displayTabChar) {
_result = "true";
} else {
_result = "false";
}
return true;
}
if (_config == configShowSpaceChar) {
if (true == m_displaySpaceChar) {
_result = "true";
} else {
_result = "false";
}
return true;
}
return false;
} }
}; };
const char * const myParamGlobal::configEOL = "eol";
const char * const myParamGlobal::configAutoIndent = "auto-indent";
const char * const myParamGlobal::configShowTabChar = "display-tab";
const char * const myParamGlobal::configShowSpaceChar = "display-space";
static myParamGlobal& l_obj() { static myParamGlobal& l_obj() {
static myParamGlobal s_obj; static myParamGlobal s_obj;
@@ -173,67 +103,66 @@ int32_t globals::getNbLineBorder() {
#include <ewol/widget/CheckBox.h> #include <ewol/widget/CheckBox.h>
#include <ewol/widget/Spacer.h> #include <ewol/widget/Spacer.h>
static const char * const l_changeIndentation = "edn-event-change-indentation";
static const char * const l_changeSpace = "edn-event-change-spaces";
static const char * const l_changeTabulation = "edn-event-change-tabulation";
static const char * const l_changeEndOfLine = "edn-event-change-endOfLine";
static const char * const l_changeRounded = "edn-event-change-rounded";
globals::ParameterGlobalsGui::ParameterGlobalsGui() : globals::ParameterGlobalsGui::ParameterGlobalsGui() {
ewol::widget::Sizer(ewol::widget::Sizer::modeVert) { addObjectType("globals::ParameterGlobalsGui");
ewol::widget::CheckBox* myCheckbox = NULL; }
ewol::widget::Spacer* mySpacer = NULL;
mySpacer = new ewol::widget::Spacer(); void globals::ParameterGlobalsGui::init() {
if (NULL == mySpacer) { ewol::widget::Sizer::init(ewol::widget::Sizer::modeVert);
std::shared_ptr<ewol::widget::CheckBox> myCheckbox;
std::shared_ptr<ewol::widget::Spacer> mySpacer;
mySpacer = ewol::widget::Spacer::create();
if (nullptr == mySpacer) {
APPL_ERROR("Can not allocate widget == > display might be in error"); APPL_ERROR("Can not allocate widget == > display might be in error");
} else { } else {
mySpacer->setExpand(bvec2(true,true)); mySpacer->setExpand(bvec2(true,true));
subWidgetAdd(mySpacer); subWidgetAdd(mySpacer);
} }
myCheckbox = new ewol::widget::CheckBox("Automatic Indentation"); myCheckbox = ewol::widget::CheckBox::create("Automatic Indentation");
if (NULL == myCheckbox) { if (nullptr == myCheckbox) {
APPL_ERROR("Can not allocate widget == > display might be in error"); APPL_ERROR("Can not allocate widget == > display might be in error");
} else { } else {
myCheckbox->setExpand(bvec2(true,false)); myCheckbox->setExpand(bvec2(true,false));
myCheckbox->setValue(isSetAutoIndent()); myCheckbox->setValue(isSetAutoIndent());
myCheckbox->registerOnEvent(this, "clicked", l_changeIndentation); myCheckbox->signalValue.bind(shared_from_this(), &globals::ParameterGlobalsGui::onCallbackIndentation);
subWidgetAdd(myCheckbox); subWidgetAdd(myCheckbox);
} }
myCheckbox = new ewol::widget::CheckBox("Display space char (' ')"); myCheckbox = ewol::widget::CheckBox::create("Display space char (' ')");
if (NULL == myCheckbox) { if (nullptr == myCheckbox) {
APPL_ERROR("Can not allocate widget == > display might be in error"); APPL_ERROR("Can not allocate widget == > display might be in error");
} else { } else {
myCheckbox->setExpand(bvec2(true,false)); myCheckbox->setExpand(bvec2(true,false));
myCheckbox->setValue(isSetDisplaySpaceChar()); myCheckbox->setValue(isSetDisplaySpaceChar());
myCheckbox->registerOnEvent(this, "clicked", l_changeSpace); myCheckbox->signalValue.bind(shared_from_this(), &globals::ParameterGlobalsGui::onCallbackSpace);
subWidgetAdd(myCheckbox); subWidgetAdd(myCheckbox);
} }
myCheckbox = new ewol::widget::CheckBox("Display tabulation char ('\\t')"); myCheckbox = ewol::widget::CheckBox::create("Display tabulation char ('\\t')");
if (NULL == myCheckbox) { if (nullptr == myCheckbox) {
APPL_ERROR("Can not allocate widget == > display might be in error"); APPL_ERROR("Can not allocate widget == > display might be in error");
} else { } else {
myCheckbox->setExpand(bvec2(true,false)); myCheckbox->setExpand(bvec2(true,false));
myCheckbox->setValue(isSetDisplayTabChar()); myCheckbox->setValue(isSetDisplayTabChar());
myCheckbox->registerOnEvent(this, "clicked", l_changeTabulation); myCheckbox->signalValue.bind(shared_from_this(), &globals::ParameterGlobalsGui::onCallbackTabulation);
subWidgetAdd(myCheckbox); subWidgetAdd(myCheckbox);
} }
myCheckbox = new ewol::widget::CheckBox("Display end of line ('\\n')"); myCheckbox = ewol::widget::CheckBox::create("Display end of line ('\\n')");
if (NULL == myCheckbox) { if (nullptr == myCheckbox) {
APPL_ERROR("Can not allocate widget == > display might be in error"); APPL_ERROR("Can not allocate widget == > display might be in error");
} else { } else {
myCheckbox->setExpand(bvec2(true,false)); myCheckbox->setExpand(bvec2(true,false));
myCheckbox->setValue(isSetDisplayEndOfLine()); myCheckbox->setValue(isSetDisplayEndOfLine());
myCheckbox->registerOnEvent(this, "clicked", l_changeEndOfLine); myCheckbox->signalValue.bind(shared_from_this(), &globals::ParameterGlobalsGui::onCallbackEndOfLine);
subWidgetAdd(myCheckbox); subWidgetAdd(myCheckbox);
} }
myCheckbox = new ewol::widget::CheckBox("switch Rounded/default"); myCheckbox = ewol::widget::CheckBox::create("switch Rounded/default");
if (NULL == myCheckbox) { if (nullptr == myCheckbox) {
APPL_ERROR("Can not allocate widget == > display might be in error"); APPL_ERROR("Can not allocate widget == > display might be in error");
} else { } else {
myCheckbox->setExpand(bvec2(true,false)); myCheckbox->setExpand(bvec2(true,false));
myCheckbox->setValue(isSetDisplayEndOfLine()); myCheckbox->setValue(isSetDisplayEndOfLine());
myCheckbox->registerOnEvent(this, "clicked", l_changeRounded); myCheckbox->signalValue.bind(shared_from_this(), &globals::ParameterGlobalsGui::onCallbackRounded);
subWidgetAdd(myCheckbox); subWidgetAdd(myCheckbox);
} }
} }
@@ -243,35 +172,22 @@ globals::ParameterGlobalsGui::~ParameterGlobalsGui() {
} }
void globals::ParameterGlobalsGui::onReceiveMessage(const ewol::object::Message& _msg) { void globals::ParameterGlobalsGui::onCallbackEndOfLine(const bool& _value) {
ewol::widget::Sizer::onReceiveMessage(_msg); setDisplayEndOfLine(_value);
}
if (_msg.getMessage() == l_changeEndOfLine) { void globals::ParameterGlobalsGui::onCallbackIndentation(const bool& _value) {
if (_msg.getData() == "true") { setAutoIndent(_value);
setDisplayEndOfLine(true);
} else {
setDisplayEndOfLine(false);
} }
} else if (_msg.getMessage() == l_changeIndentation) {
if (_msg.getData() == "true") { void globals::ParameterGlobalsGui::onCallbackSpace(const bool& _value) {
setAutoIndent(true); setDisplaySpaceChar(_value);
} else {
setAutoIndent(false);
} }
} else if (_msg.getMessage() == l_changeSpace) { void globals::ParameterGlobalsGui::onCallbackTabulation(const bool& _value) {
if (_msg.getData() == "true") { setDisplayTabChar(_value);
setDisplaySpaceChar(true);
} else {
setDisplaySpaceChar(false);
} }
} else if (_msg.getMessage() == l_changeTabulation) { void globals::ParameterGlobalsGui::onCallbackRounded(const bool& _value) {
if (_msg.getData() == "true") { if (_value == true) {
setDisplayTabChar(true);
} else {
setDisplayTabChar(false);
}
} else if (_msg.getMessage() == l_changeRounded) {
if (_msg.getData() == "true") {
etk::theme::setName("GUI", "rounded");; etk::theme::setName("GUI", "rounded");;
} else { } else {
etk::theme::setName("GUI", "default");; etk::theme::setName("GUI", "default");;
@@ -281,5 +197,3 @@ void globals::ParameterGlobalsGui::onReceiveMessage(const ewol::object::Message&
ewol::getContext().forceRedrawAll(); ewol::getContext().forceRedrawAll();
} }
}

View File

@@ -37,11 +37,17 @@ namespace globals
bool OrderTheBufferList(); bool OrderTheBufferList();
class ParameterGlobalsGui : public ewol::widget::Sizer { class ParameterGlobalsGui : public ewol::widget::Sizer {
public : protected:
ParameterGlobalsGui(); ParameterGlobalsGui();
void init();
public:
DECLARE_FACTORY(ParameterGlobalsGui);
virtual ~ParameterGlobalsGui(); virtual ~ParameterGlobalsGui();
// herited function void onCallbackEndOfLine(const bool& _value);
virtual void onReceiveMessage(const ewol::object::Message& _msg); void onCallbackIndentation(const bool& _value);
void onCallbackSpace(const bool& _value);
void onCallbackTabulation(const bool& _value);
void onCallbackRounded(const bool& _value);
}; };
} }

View File

@@ -1,66 +0,0 @@
/**
* @author Edouard DUPIN
*
* @copyright 2010, Edouard DUPIN, all right reserved
*
* @license GPL v3 (see license file)
*/
#include <appl/globalMsg.h>
////////////////////////////////////////////////////////////////////////
// Event of the gui request something :
////////////////////////////////////////////////////////////////////////
extern const char* const ednMsgGuiNew = "edn-Msg-Gui-New";
extern const char* const ednMsgGuiOpen = "edn-Msg-Gui-Open";
extern const char* const ednMsgGuiClose = "edn-Msg-Gui-Close";
extern const char* const ednMsgGuiSave = "edn-Msg-Gui-Save";
extern const char* const ednMsgGuiSaveAs = "edn-Msg-Gui-SaveAs";
extern const char* const ednMsgProperties = "edn-Msg-Gui-Properties";
extern const char* const ednMsgGuiExit = "edn-Msg-Gui-quit";
extern const char* const ednMsgGuiUndo = "edn-Msg-Gui-Undo";
extern const char* const ednMsgGuiRedo = "edn-Msg-Gui-Redo";
extern const char* const ednMsgGuiCopy = "edn-Msg-Gui-Copy";
extern const char* const ednMsgGuiCut = "edn-Msg-Gui-Cut";
extern const char* const ednMsgGuiPaste = "edn-Msg-Gui-Paste";
extern const char* const ednMsgGuiRm = "edn-Msg-Gui-Rm";
extern const char* const ednMsgGuiSelect = "edn-Msg-Gui-Select";
extern const char* const ednMsgGuiGotoLine = "edn-Msg-Gui-GotoLine";
extern const char* const ednMsgGuiSearch = "edn-Msg-Gui-Search";
extern const char* const ednMsgGuiReplace = "edn-Msg-Gui-Replace";
extern const char* const ednMsgGuiFind = "edn-Msg-Gui-Find";
extern const char* const ednMsgGuiShowSpaces = "edn-Msg-Gui-ShowSpaces";
extern const char* const ednMsgGuiShowEndOfLine = "edn-Msg-Gui-ShowEndOfLine";
extern const char* const ednMsgGuiCtags = "edn-Msg-Gui-CTags";
extern const char* const ednMsgCtagsLoadFile = "edn-Msg-CTags-direct-load";
extern const char* const ednMsgGuiReloadShader = "edn-Msg-Gui-ReloadOpenGlShader";
////////////////////////////////////////////////////////////////////////
// Event internal :
////////////////////////////////////////////////////////////////////////
extern const char* const ednMsgBufferState = "edn-Msg-Buffer-State";
extern const char* const ednMsgBufferName = "edn-Msg-Buffer-Name";
extern const char* const ednMsgBufferId = "edn-Msg-Buffer-Id";
extern const char* const ednMsgCodeViewSelectedId = "edn-Msg-CodeView-Select-Id";
extern const char* const ednMsgOpenFile = "edn-Msg-OpenFile";
extern const char* const ednMsgBufferListChange = "edn-Msg-BufferListChange";
extern const char* const ednMsgBufferColor = "edn-Msg-Buffer-Color";
extern const char* const appl::MsgSelectNewFile = "edn-msg-select-new-file";
extern const char* const appl::MsgSelectChange = "edn-msg-select-change";
extern const char* const appl::MsgNameChange = "edn-msg-buffer-name-change";
extern const char* const appl::MsgNameGuiChangeColor = "edn-Msg-Gui-Change-color";
extern const char* const appl::MsgSelectGotoLine = "edn-Msg-Gui-goto-line";
extern const char* const appl::MsgSelectGotoLineSelect = "edn-Msg-Gui-goto-line-select";

View File

@@ -1,68 +0,0 @@
/**
* @author Edouard DUPIN
*
* @copyright 2010, Edouard DUPIN, all right reserved
*
* @license GPL v3 (see license file)
*/
#ifndef __MSG_BROADCAST_H__
#define __MSG_BROADCAST_H__
////////////////////////////////////////////////////////////////////////
// Event of the gui request something :
////////////////////////////////////////////////////////////////////////
extern const char* const ednMsgGuiNew; // data : ""
extern const char* const ednMsgGuiOpen; // data : ""
extern const char* const ednMsgGuiClose; // data : "current" "All"
extern const char* const ednMsgGuiSave; // data : ""
extern const char* const ednMsgGuiSaveAs; // data : ""
extern const char* const ednMsgProperties; // data : ""
extern const char* const ednMsgGuiExit; // data : ""
extern const char* const ednMsgGuiUndo; // data : ""
extern const char* const ednMsgGuiRedo; // data : ""
extern const char* const ednMsgGuiCopy; // data : "STD" "Middle" "1" ... "9"
extern const char* const ednMsgGuiCut; // data : "STD" "Middle" "1" ... "9"
extern const char* const ednMsgGuiPaste; // data : "STD" "Middle" "1" ... "9"
extern const char* const ednMsgGuiRm; // data : "Word" "Line" "Paragraph"
extern const char* const ednMsgGuiSelect; // data : "ALL" "NONE"
extern const char* const ednMsgGuiGotoLine; // data : "???" / "1" ... "999999999999"
extern const char* const ednMsgGuiSearch; // data : ""
extern const char* const ednMsgGuiReplace; // data : "Normal" "All"
extern const char* const ednMsgGuiFind; // data : "Next" "Previous" "All" "None"
extern const char* const ednMsgGuiShowSpaces; // data : "enable" "disable"
extern const char* const ednMsgGuiShowEndOfLine; // data : "enable" "disable"
extern const char* const ednMsgGuiCtags; // data : "Load" "ReLoad" "Jump" "Back"
extern const char* const ednMsgCtagsLoadFile; // data : "filename of the ctags file"
extern const char* const ednMsgGuiReloadShader; // data : ""
////////////////////////////////////////////////////////////////////////
// Event internal :
////////////////////////////////////////////////////////////////////////
extern const char* const ednMsgBufferState; // data : "Saved" "Modify" "HasHistory" "HasNotHistory" "HasFutureHistory" "HasNotFutureHistory"
extern const char* const ednMsgBufferName; // data : "filename"
extern const char* const ednMsgBufferId; // data : "0" ... "99999999999"
extern const char* const ednMsgCodeViewSelectedId; // data : "0" ... "99999999999"
extern const char* const ednMsgOpenFile; // data : "/Compleate/file/name.xx"
extern const char* const ednMsgBufferListChange; // data : ""
extern const char* const ednMsgBufferColor; // data : "new"
namespace appl {
extern const char* const MsgSelectNewFile; // data : "buffer/name"
extern const char* const MsgSelectChange; // data : ""
extern const char* const MsgNameChange; // data : ""
extern const char* const MsgNameGuiChangeColor; // data : "Black" "White"
extern const char* const MsgSelectGotoLine; // data : "75822"
extern const char* const MsgSelectGotoLineSelect; // data : "75822"
};
#endif

View File

@@ -28,22 +28,13 @@
#include <appl/ctags/readtags.h> #include <appl/ctags/readtags.h>
#include <appl/globalMsg.h> #include <appl/globalMsg.h>
/**
* @brief Main of the program (This can be set in every case, but it is not used in Andoid...).
* @param std IO
* @return std IO
*/
int main(int _argc, const char *_argv[]) {
// only one things to do:
return ewol::run(_argc, _argv);
}
ewol::object::Shared<appl::BufferManager> bufferManager = NULL;
/** class MainApplication : public ewol::context::Application {
* @brief main application function initialisation private:
*/ std::shared_ptr<appl::BufferManager> m_bufferManager;
bool APP_Init(ewol::Context& _context, size_t _initId, size_t& _nbInitStep) { std::shared_ptr<appl::textPluginManager> m_pluginManager;
_nbInitStep = 1; public:
bool init(ewol::Context& _context, size_t _initId) {
APPL_INFO(" == > init APPL v" << APPL_VERSION << " (START) [" << ewol::getBoardType() << "] (" << ewol::getCompilationMode() << ")"); APPL_INFO(" == > init APPL v" << APPL_VERSION << " (START) [" << ewol::getBoardType() << "] (" << ewol::getCompilationMode() << ")");
etk::theme::setName("COLOR", "color/black/"); etk::theme::setName("COLOR", "color/black/");
@@ -67,11 +58,10 @@ bool APP_Init(ewol::Context& _context, size_t _initId, size_t& _nbInitStep) {
// init ALL Singleton : // init ALL Singleton :
//()CTagsManager::getInstance(); //()CTagsManager::getInstance();
bufferManager = appl::BufferManager::keep(); m_bufferManager = appl::BufferManager::create();
m_pluginManager = appl::textPluginManager::create();
appl::highlightManager::init(); appl::highlightManager::init();
appl::textPluginManager::init();
appl::textPluginManager::addDefaultPlugin();
// Request load of the user configuration ... // Request load of the user configuration ...
//ewol::userConfig::load(); //ewol::userConfig::load();
@@ -84,7 +74,7 @@ bool APP_Init(ewol::Context& _context, size_t _initId, size_t& _nbInitStep) {
cCurrentPath[FILENAME_MAX - 1] = '\0'; cCurrentPath[FILENAME_MAX - 1] = '\0';
//APPL_INFO("The current working directory is " << cCurrentPath); //APPL_INFO("The current working directory is " << cCurrentPath);
ewol::object::Shared<MainWindows> basicWindows = ewol::object::makeShared(new MainWindows()); std::shared_ptr<MainWindows> basicWindows = MainWindows::create();
if (basicWindows == nullptr) { if (basicWindows == nullptr) {
APPL_ERROR("Can not allocate the basic windows"); APPL_ERROR("Can not allocate the basic windows");
@@ -94,6 +84,8 @@ bool APP_Init(ewol::Context& _context, size_t _initId, size_t& _nbInitStep) {
// create the specific windows // create the specific windows
_context.setWindows(basicWindows); _context.setWindows(basicWindows);
// need to add default plugin, because they depend on the Menu widget wich might be named : "appl-menu-interface"
m_pluginManager->addDefaultPlugin();
// add files // add files
APPL_INFO("show list of files : "); APPL_INFO("show list of files : ");
@@ -107,30 +99,39 @@ bool APP_Init(ewol::Context& _context, size_t _initId, size_t& _nbInitStep) {
std::string name = file.getName(); std::string name = file.getName();
APPL_INFO("Load ctag file : \"" << name << "\"" ); APPL_INFO("Load ctag file : \"" << name << "\"" );
ctagDetected = false; ctagDetected = false;
_context.getEObjectManager().multiCast().anonymousSend(ednMsgCtagsLoadFile, name); //_context.getEObjectManager().multiCast().anonymousSend(ednMsgCtagsLoadFile, name);
} else { } else {
etk::FSNode file(tmpppp); etk::FSNode file(tmpppp);
std::string name = file.getName(); std::string name = file.getName();
APPL_INFO("need load file : \"" << name << "\"" ); APPL_INFO("need load file : \"" << name << "\"" );
bufferManager->open(name); m_bufferManager->open(name);
} }
} }
APPL_INFO(" == > init " PROJECT_NAME " (END)"); APPL_INFO(" == > init " PROJECT_NAME " (END)");
return true; return true;
} }
void unInit(ewol::Context& _context) {
/**
* @brief main application function Un-Initialisation
*/
void APP_UnInit(ewol::Context& _context) {
APPL_INFO(" == > Un-Init " PROJECT_NAME " (START)"); APPL_INFO(" == > Un-Init " PROJECT_NAME " (START)");
appl::textPluginManager::unInit();
APPL_INFO("Stop Hightlight"); APPL_INFO("Stop Hightlight");
appl::highlightManager::unInit(); appl::highlightManager::unInit();
//Kill all singleton //Kill all singleton
bufferManager.reset(); m_pluginManager.reset();
m_bufferManager.reset();
APPL_INFO(" == > Un-Init " PROJECT_NAME " (END)"); APPL_INFO(" == > Un-Init " PROJECT_NAME " (END)");
} }
};
/**
* @brief Main of the program (This can be set in every case, but it is not used in Andoid...).
* @param std IO
* @return std IO
*/
int main(int _argc, const char *_argv[]) {
// second possibility
return ewol::run(new MainApplication(), _argc, _argv);
}

View File

@@ -102,9 +102,12 @@ def create(target):
myModule.compile_flags_CC([ myModule.compile_flags_CC([
"-DAPPL_VERSION=\"\\\"" + versionID + "\\\"\"" "-DAPPL_VERSION=\"\\\"" + versionID + "\\\"\""
]) ])
tagFile = tools.get_current_path(__file__) + "/tagCode"
versionIDCode = tools.file_read_data(tagFile)
# set the package properties : # set the package properties :
myModule.pkg_set("VERSION", versionID) myModule.pkg_set("VERSION", versionID)
myModule.pkg_set("VERSION_CODE", versionIDCode)
myModule.pkg_set("COMPAGNY_TYPE", "org") myModule.pkg_set("COMPAGNY_TYPE", "org")
myModule.pkg_set("COMPAGNY_NAME", "Edouard DUPIN") myModule.pkg_set("COMPAGNY_NAME", "Edouard DUPIN")
myModule.pkg_set("MAINTAINER", ["Mr DUPIN Edouard <yui.heero@gmail.com>"]) myModule.pkg_set("MAINTAINER", ["Mr DUPIN Edouard <yui.heero@gmail.com>"])

View File

@@ -1 +1 @@
1.2.0 1.2.3

1
sources/tagCode Normal file
View File

@@ -0,0 +1 @@
7

52
test/CMakeLists.txt Normal file
View File

@@ -0,0 +1,52 @@
set(GAMEPLAY_SRC
src/AbsoluteLayout.cpp
src/AbsoluteLayout.h
src/BoundingBox.h
src/Transform.h
src/Vector2.cpp
src/Vector2.h
src/lua/lua_ThemeUVs.h
src/lua/lua_Touch.cpp
src/lua/lua_Touch.h
src/lua/lua_TouchTouchEvent.cpp
src/lua/lua_TouchTouchEvent
)
include_directories(
src
../external-deps/lua/include
../external-deps/bullet/include
../external-deps/png/include
../external-deps/zlib/include
../external-deps/oggvorbis/include
../external-deps/openal/include
../external-deps/glew/include
)
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK2 REQUIRED gtk+-2.0)
include_directories(${GTK2_INCLUDE_DIRS})
add_definitions(${GTK2_CFLAGS_OTHER})
add_definitions(-D__linux__)
endif(CMAKE_SYSTEM_NAME MATCHES "Linux")
add_definitions(-lstdc++)
add_library(gameplay STATIC
${GAMEPLAY_SRC}
${GAMEPLAY_LUA}
)
set_target_properties(gameplay PROPERTIES
OUTPUT_NAME "gameplay"
CLEAN_DIRECT_OUTPUT 1
VERSION ${GAMEPLAY_VERSION}
)
source_group(lua FILES ${GAMEPLAY_LUA})
source_group(res FILES ${GAMEPLAY_RES} ${GAMEPLAY_RES} ${GAMEPLAY_RES_SHADERS} ${GAMEPLAY_RES_UI})
source_group(src FILES ${GAMEPLAY_SRC})

0
test/Makefile Normal file
View File

0
test/asm.asm Normal file
View File

0
test/bash.bash Normal file
View File

0
test/boo.boo Normal file
View File

164
test/cpp.cpp Normal file
View File

@@ -0,0 +1,164 @@
/**
* @author Edouard DUPIN
*
* @copyright 2011, Edouard DUPIN, all right reserved
*
* @license BSD v3 (see license file)
*/
#ifndef __EWOL_WIDGET_H__
#define __EWOL_WIDGET_H__
#include <ewol/object/Object.h>
#include <ewol/Dimension.h>
'dfgd\'fg'
'e' sdfsdf '\e'
"dqf\"gsdfg" // \\ \n "
// TODO : sqdkfjsdldkqfj
example_param
=_param
_
_s
_3RTDRsdfqsd
m_
m_d6
namespace ewol {
class Widget;
namespace widget {
class Manager;
class Windows;
};
};
#include <etk/types.h>
#include <vector>
#include <etk/math/Vector2D.h>
#include <ewol/debug.h>
#include <ewol/context/clipBoard.h>
#include <ewol/key/key.h>
#include <ewol/context/cursor.h>
#include <ewol/event/Input.h>
#include <ewol/event/Entry.h>
#include <ewol/event/Time.h>
#define ULTIMATE_MAX_SIZE (99999999)
namespace ewol {
#if 0
/**
* @not-in-doc
*/
#endif
class DrawProperty{
/*
/--> m_windowsSize
*--------------------------------------------------*
| g |
| |
| m_size |
| / |
| o-------------------o |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| o-------------------o |
| / |
| m_origin |
| |
*--------------------------------------------------*
/
(0,0)
*/
public :
ivec2 m_windowsSize; //!< Windows compleate size
ivec2 m_origin; //!< Windows clipping upper widget (can not be <0)
ivec2 m_size; //!< Windows clipping upper widget (can not be <0 and >m_windowsSize)
void limit(const vec2& _origin, const vec2& _size);
};
std::ostream& operator <<(std::ostream& _os, const ewol::DrawProperty& _obj);
/**
* @brief Gravity of the widget property
* @not-in-doc
*/
enum gravity {
gravityCenter=0x00, //!< gravity is in certer
gravityTopLeft=0x05,
gravityTop=0x01,
gravityTopRight=0x03,
gravityRight=0x02,
gravityButtomRight=0x06,
gravityButtom=0x04,
gravityButtomLeft=0x0C,
gravityLeft=0x08,
};
std::ostream& operator <<(std::ostream& _os, const enum ewol::gravity _obj);
std::string gravityToString(const enum ewol::gravity _obj);
enum ewol::gravity stringToGravity(const std::string& _obj);
/**
* @not-in-doc
*/
class EventShortCut {
public:
bool broadcastEvent; //!< if it is true, then the message is sent to all the system
const char* generateEventId; //!< Local generated event
std::string eventData; //!< data link with the event
ewol::key::Special specialKey; //!< special board key
char32_t unicodeValue; //!< 0 if not used
enum ewol::key::keyboard keyboardMoveValue; //!< ewol::EVENT_KB_MOVE_TYPE_NONE if not used
EventShortCut(void) {
broadcastEvent = false;
generateEventId = NULL;
eventData = "";
unicodeValue = 0;
keyboardMoveValue = ewol::key::keyboardUnknow;
};
~EventShortCut(void) { };
};
/**
* @brief Widget class is the main widget interface, it hase some generic properties:
* :** known his parent
* :** Can be display at a special position with a special scale
* :** Can get focus
* :** Receive Event (keyboard / mouse / ...)
*
*/
class Widget : public ewol::Object {
public:
// Config list of properties
static const char* const configFill;
static const char* const configExpand;
static const char* const configHide;
static const char* const configFocus;
static const char* const configMinSize;
static const char* const configMaxSize;
static const char* const configGravity;
public:
/**
* @brief Constructor of the widget classes
* @return (no execption generated (not managed in embended platform))
*/
Widget(void);
/**
* @brief Destructor of the widget classes
*/
virtual ~Widget(void) {
vec2 plop = vec2(15.2, 56.6f);
}
};
};
#endif

0
test/html.html Normal file
View File

0
test/in.in Normal file
View File

0
test/java.java Normal file
View File

0
test/lua.lua Normal file
View File

0
test/matlab.m Normal file
View File

62
test/php.php Normal file
View File

@@ -0,0 +1,62 @@
<?php
include_once(SITE_MODULE."plop.php");
//define('DEFAULT_PLUGIN_PATH','plugin_wiki/');
define('ABSPATH',dirname(__FILE__).'/');
//Tableau contenant la liste des module
$module_list = array(array( 'state' => false,
'level' => -1,
'name' => "",
'class' => NULL));
// supression de cet <20>l<EFBFBD>ment inutil...
array_pop($module_list);
function ShowModuleList(){
global $module_list;
$output = "";
//On liste simplement les module ouvert:
$output .= '<div class="matrice"><table cellspacing="1">';
$output .= '<tr>';
foreach($module_list as $element) {
$output .= '</tr>';
}
$output .= '</table></div>';
return $output;
}
function addModule($module_name) {
// element global :
global $module_list;
if (file_exists($module_file)) {
//On inclu le module
include_once($module_file);
} else {
// nothing to do ...
}
}
class ModuleSite{
// description du plugin
protected $description;
// level d'utilisation du plugin
private $useLevel;
// version du plugin
public $version;
/*!
* @brief Contructeur de base
* @param ---
* @return ---
*/
function ModuleSite($_nomDuModule) {
$this->description = "---";
$this->useLevel = 1024;
$this->version = "00.00";
return false;
}
?>

44
test/python.py Normal file
View File

@@ -0,0 +1,44 @@
#!/usr/bin/python
import lutinModule as module
import lutinTools as tools
def get_desc():
return "gameplay : video game engine (based on bullet lib)"
"""
multline comment
"""
'''
multline comment
'''
def create(target):
myModule = module.Module(__file__, 'gameplay', 'LIBRARY')
# add the file to compile:
myModule.add_src_file([
'ege/debug.cpp',
'ege/AudioElement.cpp',
'ege/AudioEngine.cpp',
'ege/Camera.cpp'
])
# myModule.copy_folder('data/ParticuleMesh.*','')
# name of the dependency
myModule.add_module_depend(['etk', 'ewol', 'bullet'])
myModule.compile_flags_CC([
'-Wno-write-strings',
'-Wall'])
myModule.add_export_path(tools.get_current_path(__file__))
# add the currrent module at the
return myModule
"""
multline comment error ...

52
test/vertexShader.frag Normal file
View File

@@ -0,0 +1,52 @@
/**
* Doxygen comment
*/
/* simple comment */
#if 0
remove value
#else
#endif
varying void
uniform bool
attribute float
precision int
mediump vec2
mediump vec3
mediump vec4
mediump mat2
mediump mat3
mediump mat4
mediump ivect2
mediump ivect3
mediump ivect4
mediump bvect2
mediump bvect3
mediump bvect4
//! inline doxygen comment
void emptyFunction() {
}
// inline comment
void main() {
return
goto
if
else
case
default
switch
break
continue
while
do
for
sizeof
MACRO_VALUE
}

12
test/xml.xml Normal file
View File

@@ -0,0 +1,12 @@
<?declaration attr="plop"?>
<node>
<node2 attribute="da\"ta string">
<emptyNode/>
<!-- comment -->
direct data
<!-- multiline comment
<inCommentNode/>
-->
<![CDATA[ raw data ]]>
</node2>
<node>