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]
Version=0.3.0
Name=Edn : Editeur de N'ours
Exec=edn
Icon=Edn
Exec=edn %U
Icon=/usr/share/edn/icon.png
Terminal=false
Type=Application
Categories=Development;Utility;TextEditor;
Categories=Development;
GenericName=Text editor
GenericName[en]=Text editor
GenericName[nl]=Tekst verwerker
GenericName[fr]=éditeur de text
GenericName[fr]=Éditeur de text
Comment=Code editor for 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"?>
<EdnLang version="0.1" lang="Assembleur">
<ext>*.s</ext>
<ext>*.S</ext>
<ext>*.asm</ext>
<ext>.*\.(s|S|asm)</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="my comment multiline doxygen">
<color>commentDoxygen</color>
<start>/\*\*</start>
<end>\*/</end>
<regex>/\*\*.*?\*/</regex>
</rule>
<rule name="my comment multiline">
<color>comment</color>
<start>/\*</start>
<end>\*/</end>
<regex>/\*.*?\*/</regex>
</rule>
<rule name="my if 0">
<color>preprocesseur</color>
<start>#[ \t]*if 0</start>
<end>#endif|#else</end>
<EscapeChar>\</EscapeChar>
<regex>#[ \t]*if 0.*?#(regexif|else)</regex>
</rule>
<rule name="my preprocesseur">
<color>preprocesseur</color>
<start>#</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>#.*?$</regex>
</rule>
<rule name="my comment doxygen">
<color>commentDoxygen</color>
<start>//!</start>
<end>\n</end>
<regex>//!.*?$</regex>
</rule>
<rule name="my todo comment">
<color>SYNTAX_ERROR</color>
<start>//[ \t]*TODO[ \t]*:</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>//[ \t]*TODO[ \t]*:.*?$</regex>
</rule>
<rule name="my comment">
<color>comment</color>
<start>(//|@)</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>//.*?$</regex>
</rule>
</pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword">
<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 name="register list">
<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>
</pass2>
</EdnLang>

View File

@@ -1,48 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<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 -->
<rule name="first line">
<color>commentDoxygen</color>
<start>#!</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>#!(.|\\[\\\n])*?$</regex>
</rule>
<rule name="comment line">
<color>comment</color>
<start>#</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>#(.|\\[\\\n])*?$</regex>
</rule>
<rule name="doubleQuteText">
<color>doubleQuoteText</color>
<start>"</start>
<end>"</end>
<EscapeChar>\</EscapeChar>
<regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
</rule>
<rule name="simpleQuteText">
<color>doubleQuoteText</color>
<start>'</start>
<end>'</end>
<!--<EscapeChar>\</EscapeChar>-->
<regex>&apos;(.|\\[\\&apos;])*?&apos;</regex>
</rule>
</pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword">
<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 name="my Variable">
<color>keyword</color>
<start>[\$]+[a-zA-Z_][a-zA-Z0-9_]*</start>
<regex>[\$]+[a-zA-Z_][a-zA-Z0-9_]*</regex>
</rule>
<rule name="Function name">
<color>functionName</color>
<start>function (\w|_)+[ \t]*\(</start>
<regex>function (\w|_)+[ \t]*\(</regex>
</rule>
<rule name="condition">
<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>
</pass2>
</EdnLang>

View File

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

View File

@@ -1,138 +1,132 @@
<?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="C/C++">
<ext>*.c</ext>
<ext>*.cpp</ext>
<ext>*.cc</ext>
<ext>*.h</ext>
<ext>*.hpp</ext>
<ext>*.mm</ext>
<ext>.*\.(c|cpp|cxx|cc|h|hpp|hxx|m|mm)</ext>
<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>
<start>/\*\*</start>
<end>\*/</end>
<rule name="macro">
<color>macro</color>
<start>\@[A-Z_]{4,500}\@</start>
</rule>
<rule name="keyword">
<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>
<regex>/\*(\*|!)(.|\r|\n)*?\*/</regex>
<sub>doxyparse</sub>
</rule>
<rule name="code Review">
<color>SYNTAX_ERROR</color>
<start>/\*[ \t]*TODO :</start>
<end>\*/</end>
</rule>
<rule name="my comment multiline">
<rule name="comment multiline">
<color>comment</color>
<start>/\*</start>
<end>\*/</end>
<regex>/\*(.|\r|\n)*?(\*/|\0)</regex>
<sub>TODO</sub>
</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>
<start>#[ \t]*if 0</start>
<end>#endif|#else</end>
<EscapeChar>\</EscapeChar>
<regex>#[ \t]*if 0(.|\r|\n)*?#(endif|else)</regex>
</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>
<start>#</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>#(.|\\[\\\n])*</regex>
</rule>
<rule name="my comment doxygen">
<rule name="inline doxygen">
<color>commentDoxygen</color>
<start>//!</start>
<end>\n</end>
<regex>//!.*</regex>
<sub>doxyparse</sub>
</rule>
<rule name="my todo comment">
<color>SYNTAX_ERROR</color>
<start>//[ \t]*TODO[ \t]*:</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule>
<rule name="my comment">
<rule name="inline comment">
<color>comment</color>
<start>//</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>//.*</regex>
<sub>TODO</sub>
</rule>
<rule name="doubleQuteText">
<rule name="double quote text">
<color>doubleQuoteText</color>
<start>"</start>
<end>"</end>
<EscapeChar>\</EscapeChar>
<regex>"(.|\\[\\"])*?"</regex> <!-- " -->
</rule>
<rule name="simpleQuteText">
<rule name="simple quote text">
<color>doubleQuoteText</color>
<start>'</start>
<end>'</end>
<!--<EscapeChar>\</EscapeChar>-->
<regex>'\\?.'</regex>
</rule>
</pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword">
<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 name="my function keyword">
<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 name="my type">
<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 name="std type">
<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 name="my storage keyword">
<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 name="my common Define">
<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 name="numeric constant">
<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 name="my boolean">
<color>boolean</color>
<start>\@true|TRUE|false|FALSE\@</start>
<regex>\b(true|TRUE|false|FALSE)\b</regex>
</rule>
<rule name="BIG LETTER">
<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 name="CPP member">
<color>memberClass</color>
<start>\@m_[A-Za-z_0-9]*\@</start>
<regex>\bm_\w+\b</regex>
</rule>
<rule name="function input">
<color>inputFunction</color>
<start>\@_[A-Za-z_0-9]*\@</start>
<regex>\b_\w+\b</regex>
</rule>
<rule name="Function name">
<color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start>
<regex>\b((\w|_)+[ \t]*\()</regex>
</rule>
<rule name="condition">
<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>
<!-- With all elementes :
<rule name="BIG LETTER">
<color>macro</color>
<start>([A-Z]|_){4,500}</start>
<elemSubColor id="1">doxElem</elemSubColor>
<regex>([A-Z]|_){4,500}</regex>
</rule>
<rule name="simpleQuteTextError">
<color>SYNTAX_ERROR</color>
<regex>&apos;|&quot;</regex>
</rule>
-->
</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>

View File

@@ -1,58 +1,53 @@
<?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>CMakeCache.txt</ext>
<pass1>
<rule name="my comment doxygen">
<color>commentDoxygen</color>
<start>##</start>
<end>\n</end>
<regex>##.*</regex>
</rule>
<rule name="my todo comment">
<color>SYNTAX_ERROR</color>
<start>#[ \t]TODO[ \t]*:</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>#[ \t]TODO[ \t]*:(.|\\[\\\n])*</regex>
</rule>
<rule name="my comment">
<color>comment</color>
<start>#</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>#(.|\\[\\\n])*</regex>
</rule>
<rule name="doubleQuteText">
<color>doubleQuoteText</color>
<start>"</start>
<end>"</end>
<EscapeChar>\</EscapeChar>
<regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
</rule>
</pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword">
<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 name="my function keyword">
<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 name="Variable">
<color>inputFunction</color>
<start>${</start>
<end>}</end>
<regex>\$\{.*\}</regex>
</rule>
<rule name="numeric constant">
<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 name="BIG LETTER">
<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 name="Function name">
<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>
</pass2>
</EdnLang>

View File

@@ -1,82 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Glsl">
<ext>*.glsl</ext>
<ext>*.vert</ext>
<ext>*.frag</ext>
<ext>*.prog</ext>
<ext>.*\.(glsl|vert|frag|prog)</ext>
<pass1>
<rule name="my comment multiline doxygen">
<color>commentDoxygen</color>
<start>/\*\*</start>
<end>\*/</end>
<regex>/\*\*.*\*/</regex>
</rule>
<rule name="my comment multiline">
<color>comment</color>
<start>/\*</start>
<end>\*/</end>
<regex>/\*.*\*/</regex>
</rule>
<rule name="my if 0">
<color>preprocesseur</color>
<start>#[ \t]*if 0</start>
<end>#endif|#else</end>
<EscapeChar>\</EscapeChar>
<regex>#[ \t]*if 0(.|\\[\\\n])*#(endif|else)</regex>
</rule>
<rule name="my preprocesseur">
<color>preprocesseur</color>
<start>#</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>#(.|\\[\\\n])*$</regex>
</rule>
<rule name="my comment doxygen">
<color>commentDoxygen</color>
<start>//!</start>
<end>\n</end>
<regex>//!(.|\\[\\\n])*$</regex>
</rule>
<rule name="my todo comment">
<color>SYNTAX_ERROR</color>
<start>//[ \t]*TODO[ \t]*:</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>//[ \t]*TODO[ \t]*:(.|\\[\\\n])*$</regex>
</rule>
<rule name="my comment">
<color>comment</color>
<start>//</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>//(.|\\[\\\n])*$</regex>
</rule>
</pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword">
<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 name="my type">
<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 name="my storage keyword">
<color>storageKeyword</color>
<start>\@varying|uniform|attribute|precision|mediump\@</start>
<regex>\b(varying|uniform|attribute|precision|mediump)\b</regex>
</rule>
<rule name="numeric constant">
<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 name="my boolean">
<color>boolean</color>
<start>\@true|false\@</start>
<regex>\b(true|false)\b</regex>
</rule>
<rule name="BIG LETTER">
<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 name="Function name">
<color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start>
<regex>\b(\w|_)+[ \t]*\(</regex>
</rule>
<rule name="condition">
<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>
</pass2>
</EdnLang>

View File

@@ -1,46 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<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 -->
<rule name="my preprocesseur">
<color>preprocesseur</color>
<start>#</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>#(.|\\[\\\n])*?$</regex>
</rule>
<rule name="doubleQuteText">
<color>doubleQuoteText</color>
<start>"</start>
<end>"</end>
<EscapeChar>\</EscapeChar>
<regex>&quot;(.|\\[\\&quot;])*?$</regex>
</rule>
<rule name="simpleQuteText">
<color>doubleQuoteText</color>
<start>'</start>
<end>'</end>
<!--<EscapeChar>\</EscapeChar>-->
<regex>&apos;(.|\\[\\&apos;])*?$</regex>
</rule>
</pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword">
<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 name="my type">
<color>type</color>
<start>\@int|hex|bool|string\@</start>
<regex>\b(int|hex|bool|string)\b</regex>
</rule>
<rule name="numeric constant">
<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 name="BIG LETTER">
<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 name="condition">
<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>
</pass2>
</EdnLang>

View File

@@ -1,87 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<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 -->
<rule name="my comment multiline doxygen">
<color>commentDoxygen</color>
<start>/\*\*</start>
<end>\*/</end>
<regex>/\*\*.*?\*/</regex>
</rule>
<rule name="my comment multiline">
<color>comment</color>
<start>/\*</start>
<end>\*/</end>
<regex>/\*.*?\*/</regex>
</rule>
<rule name="my comment doxygen">
<color>commentDoxygen</color>
<start>//!</start>
<end>\n</end>
<regex>//!(.|\\[\\\n])*?$</regex>
</rule>
<rule name="my todo comment">
<color>SYNTAX_ERROR</color>
<start>//[ \t]*TODO[ \t]*:</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>//[ \t]*TODO[ \t]*:(.|\\[\\\n])*?$</regex>
</rule>
<rule name="my comment">
<color>comment</color>
<start>//</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>//(.|\\[\\\n])*?$</regex>
</rule>
<rule name="doubleQuteText">
<color>doubleQuoteText</color>
<start>"</start>
<end>"</end>
<EscapeChar>\</EscapeChar>
<regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
</rule>
<rule name="simpleQuteText">
<color>doubleQuoteText</color>
<start>'</start>
<end>'</end>
<!--<EscapeChar>\</EscapeChar>-->
<regex>&apos;(.|\\[\\&apos;])*?&apos;</regex>
</rule>
</pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword">
<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 name="my function keyword">
<color>systemFunction</color>
<start>\@new|try|catch|print\@</start>
<regex>\b(new|try|catch|print)\b</regex>
</rule>
<rule name="my type">
<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 name="my storage keyword">
<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 name="my common Define">
<color>commonDefine</color>
<start>\@null\@</start>
<regex>\bnull\b</regex>
</rule>
<rule name="numeric constant">
<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 name="my boolean">
<color>boolean</color>
<start>\@true|false\@</start>
<regex>\b(true|false)\b</regex>
</rule>
<rule name="BIG LETTER">
<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 name="Function name">
<color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start>
<regex>\b(\w|_)+[ \t]*\(</regex>
</rule>
<rule name="condition">
<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>
</pass2>
</EdnLang>

View File

@@ -1,34 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<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 -->
<rule name="doubleQuteText">
<color>doubleQuoteText</color>
<start>"</start>
<end>"</end>
<EscapeChar>\</EscapeChar>
<regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
</rule>
</pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword">
<color>keyword</color>
<start>\{|\}|\[|\]</start>
<regex>\{|\}|\[|\]</regex>
</rule>
<rule name="separator">
<color>error</color>
<start>:|,</start>
<regex>:|,</regex>
</rule>
<rule name="names">
<color>functionName</color>
<start>([a-zA-Z0-9]|-|_)*</start>
<regex>([a-zA-Z0-9]|-|_)+</regex>
</rule>
<rule name="numeric constant">
<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 name="my boolean">
<color>boolean</color>
<start>\@true|false\@</start>
<regex>\b(true|false)\b</regex>
</rule>
</pass2>
</EdnLang>

View File

@@ -1,60 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Lua">
<ext>*.lua</ext>
<ext>.*\.lua</ext>
<pass1>
<rule name="Comment multiline">
<color>comment</color>
<start>\-\-\[\[</start>
<end>\-\-\]\]</end>
<regex>\-\-\[\[.*?\-\-\]\]</regex>
</rule>
<rule name="my todo comment">
<color>SYNTAX_ERROR</color>
<start>\-\-[ \t]*TODO[ \t]*:</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>\-\-[ \t]*TODO[ \t]*:(.|\\[\\\n])*?$</regex>
</rule>
<rule name="my comment">
<color>comment</color>
<start>\-\-</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>\-\-(.|\\[\\\n])*?$</regex>
</rule>
<rule name="doubleQuteText">
<color>doubleQuoteText</color>
<start>"</start>
<end>"</end>
<EscapeChar>\</EscapeChar>
<regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
</rule>
<rule name="simpleQuteText">
<color>doubleQuoteText</color>
<start>'</start>
<end>'</end>
<regex>&apos;(.|\\[\\&apos;])*?&apos;</regex>
</rule>
</pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword">
<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 name="numeric constant">
<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 name="my boolean">
<color>boolean</color>
<start>\@true|false\@</start>
<regex>\b(true|false)\b</regex>
</rule>
<rule name="BIG LETTER">
<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 name="Function name">
<color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start>
<regex>\b(\w|_)+[ \t]*\(</regex>
</rule>
<rule name="condition">
<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>
</pass2>
</EdnLang>

View File

@@ -1,43 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Makefiles">
<ext>Makefile</ext>
<ext>*.mk</ext>
<ext>*.global</ext>
<ext>.*\.(mk|global)</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="my preprocesseur">
<color>preprocesseur</color>
<start>#</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>#(.|\\[\\\n])*?$</regex>
</rule>
<rule name="doubleQuteText">
<color>doubleQuoteText</color>
<start>"</start>
<end>"</end>
<EscapeChar>\</EscapeChar>
<regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
</rule>
<rule name="simpleQuteText">
<color>doubleQuoteText</color>
<start>'</start>
<end>'</end>
<regex>&apos;(.|\\[\\&apos;])*?&apos;</regex>
</rule>
</pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="confition">
<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 name="my keyword">
<color>keyword</color>
<start>\$\([a-zA-Z_][a-zA-Z0-9_]*\)</start>
<regex>\b\([a-zA-Z_][a-zA-Z0-9_]*\)</regex>
</rule>
<rule name="function call">
<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 name="condition">
<color>boolean</color>
<start>:=|?=|!=|=</start>
<regex>:=|\?=|!=|=</regex>
</rule>
</pass2>
</EdnLang>

View File

@@ -1,62 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Matlab">
<ext>*.m</ext>
<ext>*.M</ext>
<ext>.*\.(m|M)</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="my comment doxygen">
<color>commentDoxygen</color>
<start>%%</start>
<end>\n</end>
<regex>%%(.|\\[\\\n])*?$</regex>
</rule>
<rule name="my comment">
<color>comment</color>
<start>%</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>%(.|\\[\\\n])*?$</regex>
</rule>
<rule name="doubleQuteText">
<color>doubleQuoteText</color>
<start> "</start>
<end>("|\n)</end>
<EscapeChar>\</EscapeChar>
<regex> &quot;.*?($|&quot;)</regex>
</rule>
<rule name="simpleQuteText">
<color>doubleQuoteText</color>
<start> '</start>
<end>('|\n)</end>
<!--<EscapeChar>\</EscapeChar>-->
<regex> &apos;.*?($|&apos;)</regex>
</rule>
<rule name="global inclusion">
<color>preprocesseur</color>
<start>global( |\t)+</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>global( |\t)+(.|\\[\\\n])*?$</regex>
</rule>
</pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword">
<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 name="my boolean">
<color>boolean</color>
<start>\@true|false\@</start>
<regex>\b(true|false)\b</regex>
</rule>
<rule name="Function name">
<color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start>
<regex>\b(\w|_)+[ \t]*\(</regex>
</rule>
<rule name="condition">
<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 name="numeric constant">
<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 name="BIG LETTER">
<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>
</pass2>
</EdnLang>

View File

@@ -1,76 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="Php: pretty home page">
<ext>*.php</ext>
<ext>*.php3</ext>
<ext>*.php4</ext>
<ext>*.phtml</ext>
<ext>.*\.(php|php3|php4|phtml)</ext>
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="my comment multiline">
<color>comment</color>
<start>/\*</start>
<end>\*/</end>
<regex>/\*.*?\*/</regex>
</rule>
<rule name="my todo comment">
<color>SYNTAX_ERROR</color>
<start>//[ \t]*TODO[ \t]*:</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>//[ \t]*TODO[ \t]*:(.|\\[\\\n])*?$</regex>
</rule>
<rule name="my comment inline">
<color>comment</color>
<start>#</start>
<end>\n</end>
<regex>#(.|\\[\\\n])*?$</regex>
</rule>
<rule name="my comment">
<color>comment</color>
<start>//</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>//(.|\\[\\\n])*?$</regex>
</rule>
<rule name="doubleQuteText">
<color>doubleQuoteText</color>
<start>"</start>
<end>"</end>
<EscapeChar>\</EscapeChar>
<regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
</rule>
<rule name="simpleQuteText">
<color>doubleQuoteText</color>
<start>'</start>
<end>'</end>
<regex>&apos;(.|\\[\\&apos;])*?&apos;</regex>
</rule>
</pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword">
<color>keyword</color>
<start>[\$]+[a-zA-Z_][a-zA-Z0-9_]*</start>
<regex>[\$]+[a-zA-Z_][a-zA-Z0-9_]*</regex>
</rule>
<rule name="my type">
<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 name="my storage keyword">
<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 name="my common Define">
<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 name="numeric constant">
<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 name="my boolean">
<color>boolean</color>
<start>\@true|TRUE|false|FALSE\@</start>
<regex>\b(true|TRUE|false|FALSE)\b</regex>
</rule>
<rule name="Function name">
<color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start>
<regex>\b\w+[ \t]*\(</regex>
</rule>
<rule name="condition">
<color>boolean</color>
<start>==|&lt;=|&gt;=|!=|&lt;|&gt;|&amp;&amp;|\{|\}|</start>
<regex>==|&lt;=|&gt;=|!=|&lt;|&gt;|&amp;&amp;|\{|\}</regex>
</rule>
</pass2>
</EdnLang>

View File

@@ -1,77 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<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 -->
<rule name="my comment multiline">
<color>comment</color>
<start>"""</start>
<end>"""</end>
<regex>&quot;&quot;&quot;(.|\r|\n)*?&quot;&quot;&quot;</regex>
</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 name="my comment doxygen">
<color>commentDoxygen</color>
<start>##</start>
<end>\n</end>
<regex>##.*</regex>
</rule>
<rule name="my comment">
<color>comment</color>
<start>#</start>
<end>\n</end>
<EscapeChar>\</EscapeChar>
<regex>#.*</regex>
</rule>
<rule name="doubleQuteText">
<color>doubleQuoteText</color>
<start>"</start>
<end>"</end>
<EscapeChar>\</EscapeChar>
<regex>&quot;(.|\\[\\&quot;])*?&quot;</regex>
</rule>
<rule name="simpleQuteText">
<color>doubleQuoteText</color>
<start>'</start>
<end>'</end>
<regex>&apos;((\\[\\&apos;])|.)*?&apos;</regex>
</rule>
</pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword">
<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 name="my function keyword">
<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 name="my type">
<color>type</color>
<start>\@bool|BOOL|char|double|float\@</start>
<regex>\b(bool|BOOL|char|double|float)\b</regex>
</rule>
<rule name="my storage keyword">
<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 name="numeric constant">
<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 name="my boolean">
<color>boolean</color>
<start>\@True|False\@</start>
<regex>\b(True|False)\b</regex>
</rule>
<rule name="BIG LETTER">
<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 name="Function name">
<color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start>
<regex>\b(\w|_)+[ \t]*\(</regex>
</rule>
<rule name="condition">
<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>
<!-- With all elementes : -->
<rule name="BIG LETTER">
<color>macro</color>
<start>([A-Z]|_){4,500}</start>
<elemSubColor id="1">doxElem</elemSubColor>
<rule name="simpleQuteTextError">
<color>SYNTAX_ERROR</color>
<regex>&apos;|&quot;</regex>
</rule>
</pass2>
</EdnLang>

View File

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

View File

@@ -27,5 +27,8 @@
{ name:"functionName", foreground:"#24d1e0", bold:true},
{ name:"TestResultOK", foreground:"#000000", background:"#00FF00", 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:"error", foreground:"#FF0000"},
{ name:"doubleQuoteText", foreground:"#008e00"},
{ name:"type", foreground:"#376d0a", bold:true},
{ name:"memberClass", foreground:"#7c5406", bold:true},
{ name:"inputFunction", foreground:"#B80000", bold:true, italic:true},
@@ -26,6 +27,9 @@
{ name:"functionName", foreground:"#09857e", bold:true},
{ name:"TestResultOK", foreground:"#000000", background:"#009c00", 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/stdTools.h>
#include <appl/Buffer.h>
#include <appl/debug.h>
#include <ewol/context/clipBoard.h>
@@ -16,19 +17,14 @@
#undef __class__
#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++ () {
m_value = u32char::Null;
if (m_current < 0) {
m_current = 0;
return *this;
}
if (m_data != NULL) {
if (m_current < m_data->m_data.size() ) {
if (m_data != nullptr) {
if (m_current < (int64_t)m_data->m_data.size() ) {
int8_t nbChar = utf8::theoricLen(m_data->m_data[m_current]);
if (nbChar != 0) {
m_current+=nbChar;
@@ -36,7 +32,7 @@ appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ () {
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();
}
}
@@ -45,7 +41,7 @@ appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ () {
appl::Buffer::Iterator& appl::Buffer::Iterator::operator-- () {
m_value = u32char::Null;
if (m_data != NULL) {
if (m_data != nullptr) {
if (m_current > 0) {
int32_t iii = -1;
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) {
return m_value;
}
if (m_data == NULL) {
if (m_data == nullptr) {
APPL_ERROR("request an element that iterator not link");
return m_value;
}
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());
return m_value;
}
@@ -81,7 +77,7 @@ char32_t appl::Buffer::Iterator::operator* () {
memset(tmpVal, 0, sizeof(tmpVal));
tmpVal[0] = m_data->m_data[m_current];
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];
}
// transform ...
@@ -118,8 +114,11 @@ appl::Buffer::Iterator appl::Buffer::selectStop() {
return position( getStopSelectionPos() );
}
appl::Buffer::Buffer() :
signalIsModify(*this, "is-modify"),
signalIsSave(*this, "is-save"),
signalSelectChange(*this, "select-change"),
signalChangeName(*this, "change-name"),
m_hasFileName(false),
m_fileName(""),
m_isModify(false),
@@ -127,19 +126,19 @@ appl::Buffer::Buffer() :
m_cursorSelectPos(-1),
m_cursorPreferredCol(-1),
m_nbLines(1),
m_highlight(NULL) {
m_highlight(nullptr) {
addObjectType("appl::Buffer");
static int32_t bufferBaseId = 0;
m_fileName = "No Name " + std::to_string(bufferBaseId);
m_fileName = "No Name " + etk::to_string(bufferBaseId);
bufferBaseId++;
addEventId(eventIsModify);
addEventId(eventIsSave);
addEventId(eventSelectChange);
addEventId(eventChangeName);
}
void appl::Buffer::init() {
ewol::Object::init();
}
appl::Buffer::~Buffer() {
APPL_ERROR("REAL remove buffer : '" << m_name << "'");
}
bool appl::Buffer::loadFile(const std::string& _name) {
@@ -153,13 +152,20 @@ bool appl::Buffer::loadFile(const std::string& _name) {
m_cursorPos = 0;
setHighlightType("");
m_nbLines = 0;
if (m_data.dumpFrom(m_fileName) == true ) {
countNumberofLine();
tryFindHighlightType();
m_isModify = false;
return true;
if (file.exist() == false) {
APPL_ERROR("File : '" << m_fileName << "' does not exist...");
return false;
}
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();
tryFindHighlightType();
m_isModify = false;
return true;
}
void appl::Buffer::setFileName(const std::string& _name) {
@@ -171,17 +177,21 @@ void appl::Buffer::setFileName(const std::string& _name) {
}
m_fileName = name;
m_hasFileName = true;
generateEventId(eventChangeName);
signalChangeName.emit();
setModification(true);
}
bool appl::Buffer::storeFile() {
if (m_data.dumpIn(m_fileName) == true) {
APPL_INFO("saving file : " << m_fileName);
setModification(false);
return true;
etk::FSNode file(m_fileName);
if (file.fileOpenWrite() == false) {
APPL_ERROR("File : '" << m_fileName << "' Fail to open in write mode");
return false;
}
return false;
file.fileWriteAll(m_data);
file.fileClose();
APPL_INFO("saving file : " << m_fileName);
setModification(false);
return true;
}
void appl::Buffer::setModification(bool _status) {
@@ -190,9 +200,9 @@ void appl::Buffer::setModification(bool _status) {
}
m_isModify = _status;
if (m_isModify == true) {
generateEventId(eventIsModify);
signalIsModify.emit();
} else {
generateEventId(eventIsSave);
signalIsSave.emit();
}
}
@@ -415,13 +425,13 @@ void appl::Buffer::moveCursor(int64_t _pos) {
if (m_cursorPos == m_cursorSelectPos) {
m_cursorSelectPos = -1;
}
generateEventId(eventSelectChange);
signalSelectChange.emit();
return;
}
// move mode
m_cursorPos = _pos;
m_cursorSelectPos = -1;
generateEventId(eventSelectChange);
signalSelectChange.emit();
}
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) {
m_cursorSelectPos = _pos;
generateEventId(eventSelectChange);
signalSelectChange.emit();
}
void appl::Buffer::unSelect() {
m_cursorSelectPos = -1;
generateEventId(eventSelectChange);
signalSelectChange.emit();
}
static const char *ControlCodeTable[32] = {
@@ -639,7 +649,7 @@ bool appl::Buffer::write(const std::string& _data, const appl::Buffer::Iterator&
position = 0;
}
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) {
m_cursorPos = 0;
}
@@ -656,7 +666,7 @@ bool appl::Buffer::replace(const std::string& _data, const appl::Buffer::Iterato
if (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());
m_selectMode = false;
moveCursor(position+_data.size());
@@ -671,7 +681,7 @@ void appl::Buffer::removeSelection() {
}
int64_t startPos = getStartSelectionPos();
int64_t endPos = getStopSelectionPos();
m_data.remove(startPos, endPos-startPos);
m_data.erase(startPos, endPos-startPos);
regenerateHighLightAt(startPos, endPos-startPos, 0);
m_selectMode = false;
moveCursor(startPos);
@@ -681,7 +691,7 @@ void appl::Buffer::removeSelection() {
void appl::Buffer::tryFindHighlightType() {
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) {
return;
}
@@ -698,13 +708,13 @@ void appl::Buffer::setHighlightType(const std::string& _type) {
return;
}
m_highlightType = _type;
m_highlight = appl::Highlight::keep(resourceName);
m_highlight = appl::Highlight::create(resourceName);
generateHighLightAt(0, m_data.size());
}
void appl::Buffer::regenerateHighLightAt(int64_t _pos, int64_t _nbDeleted, int64_t _nbAdded) {
// prevent ERROR...
if (NULL == m_highlight) {
if (nullptr == m_highlight) {
return;
}
// prevent No data Call
@@ -713,7 +723,7 @@ void appl::Buffer::regenerateHighLightAt(int64_t _pos, int64_t _nbDeleted, int64
return;
}
// normal case
//APPL_INFO("(pos="<<pos<<", nbDeleted="<<nbDeleted<<", nbAdded=" << nbAdded << "\");");
APPL_VERBOSE("(_pos="<<_pos<<", _nbDeleted="<<_nbDeleted<<", _nbAdded=" << _nbAdded << "\");");
int64_t posEnd = _pos + _nbDeleted;
// search position of the old element to reparse IT...
int64_t startId;
@@ -726,32 +736,45 @@ void appl::Buffer::regenerateHighLightAt(int64_t _pos, int64_t _nbDeleted, int64
}
// find element previous
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
if ( startId == -1
&& stopId == -1) {
if ( startId <= -1
&& stopId <= -1) {
m_HLDataPass1.clear();
} else if (startId == -1) {
APPL_VERBOSE("1 * clear");
} else if (startId <= -1) {
if (stopId == 0){
m_HLDataPass1.erase(m_HLDataPass1.begin());
//APPL_DEBUG("1 * Erase 0");
APPL_VERBOSE("1 * Erase 0");
} else {
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) {
//APPL_DEBUG("3 * Erase " << startId+1 << "-> end");
} else if (stopId <= -1) {
APPL_VERBOSE("3 * Erase " << startId+1 << "-> end");
m_HLDataPass1.erase(m_HLDataPass1.begin()+startId+1, m_HLDataPass1.end());
stopId = -1;
} else {
int32_t currentSize = m_HLDataPass1.size();
//APPL_DEBUG("4 * Erase " << startId+1 << "->" << stopId << " in " << currentSize << " elements" );
m_HLDataPass1.erase(m_HLDataPass1.begin()+startId+1, m_HLDataPass1.begin()+stopId);
APPL_VERBOSE("4 * Erase " << startId+1 << "->" << stopId << " in " << currentSize << " elements" );
m_HLDataPass1.erase(m_HLDataPass1.begin()+startId+1, m_HLDataPass1.begin()+stopId+1);
if (stopId == currentSize-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 :
int64_t elemStart;
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) {
//APPL_DEBUG("move element=" << i);
it->beginStart += _nbAdded - _nbDeleted;
it->beginStop += _nbAdded - _nbDeleted;
it->endStart += _nbAdded - _nbDeleted;
it->endStop += _nbAdded - _nbDeleted;
it->start += _nbAdded - _nbDeleted;
it->stop += _nbAdded - _nbDeleted;
}
//Regenerate Element inside range
if ( startId == -1
&& stopId == -1) {
//APPL_DEBUG("******* Regenerate ALL");
if ( startId <= -1
&& stopId <= -1) {
APPL_VERBOSE("******* Regenerate ALL");
generateHighLightAt(0, m_data.size());
} else if(-1 == startId) {
//APPL_DEBUG("******* Regenerate START");
generateHighLightAt(0, m_HLDataPass1[0].beginStart, 0);
} else if(-1 == stopId) {
//APPL_DEBUG("******* Regenerate STOP");
generateHighLightAt(m_HLDataPass1[m_HLDataPass1.size() -1].endStop, m_data.size(), m_HLDataPass1.size());
} else if(startId <= -1) {
APPL_VERBOSE("******* Regenerate START");
generateHighLightAt(0, m_HLDataPass1[0].start, 0);
} else if(stopId <= -1) {
APPL_VERBOSE("******* Regenerate STOP");
generateHighLightAt(m_HLDataPass1[m_HLDataPass1.size() -1].stop, m_data.size(), m_HLDataPass1.size());
} else {
//APPL_DEBUG("******* Regenerate RANGE");
generateHighLightAt(m_HLDataPass1[startId].endStop, m_HLDataPass1[startId+1].beginStart, startId+1);
APPL_VERBOSE("******* Regenerate RANGE");
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
*/
for (size_t iii = 0; iii < m_HLDataPass1.size(); ++iii) {
if (m_HLDataPass1[iii].endStop > _startPos) {
if (m_HLDataPass1[iii].stop > _startPos) {
break;
}
_startId = iii;
@@ -849,7 +870,7 @@ void appl::Buffer::findMainHighLightPosition(int64_t _startPos,
elemStart = _startId+1;
}
for (size_t iii = elemStart; iii < m_HLDataPass1.size(); ++iii) {
if (m_HLDataPass1[iii].beginStart > _endPos) {
if (m_HLDataPass1[iii].start > _endPos) {
_stopId = iii;
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) {
if (NULL == m_highlight) {
if (nullptr == m_highlight) {
return;
}
//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) {
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) {
_starPos = iii;
if ( m_HLDataPass1[iii].beginStart <= _pos
&& m_HLDataPass1[iii].endStop > _pos) {
if ( m_HLDataPass1[iii].start <= _pos
&& m_HLDataPass1[iii].stop > _pos) {
return &m_HLDataPass1[iii];
}
if(m_HLDataPass1[iii].beginStart > _pos) {
return NULL;
if(m_HLDataPass1[iii].start > _pos) {
return nullptr;
}
}
return NULL;
return nullptr;
}
void appl::Buffer::hightlightGenerateLines(appl::DisplayHLData& _MData, const appl::Buffer::Iterator& _HLStart, int64_t _nbLines) {
_MData.posHLPass1 = 0;
_MData.posHLPass2 = 0;
if (NULL == m_highlight) {
if (nullptr == m_highlight) {
return;
}
//int64_t timeStart = ewol::getTime();
@@ -909,48 +930,50 @@ void appl::Buffer::hightlightGenerateLines(appl::DisplayHLData& _MData, const ap
endSearch = m_HLDataPass1.size();
}
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 :
if (kkk == 0) {
if (HLStartPos < m_HLDataPass1[kkk].beginStart) {
if (HLStartPos < m_HLDataPass1[kkk].start) {
APPL_VERBOSE(" == > (empty section 1 ) kkk=" << kkk <<
" start=" << HLStartPos <<
" stop=" << m_HLDataPass1[kkk].beginStart );
" stop=" << m_HLDataPass1[kkk].start );
m_highlight->parse2(HLStartPos,
m_HLDataPass1[kkk].beginStart,
_MData.HLData,
m_data);
m_HLDataPass1[kkk].start,
_MData.HLData,
m_data);
} // else : nothing to do ...
} else {
APPL_VERBOSE(" == > (empty section 2 ) kkk=" << kkk <<
" start=" << m_HLDataPass1[kkk-1].endStop <<
" stop=" << m_HLDataPass1[kkk].beginStart );
m_highlight->parse2(m_HLDataPass1[kkk-1].endStop,
m_HLDataPass1[kkk].beginStart,
_MData.HLData,
m_data);
" start=" << m_HLDataPass1[kkk-1].stop <<
" stop=" << m_HLDataPass1[kkk].start );
m_highlight->parse2(m_HLDataPass1[kkk-1].stop,
m_HLDataPass1[kkk].start,
_MData.HLData,
m_data);
}
// under section :
//APPL_DEBUG(" == > (under section ) k="<<k<<" start="<<m_HLDataPass1[k].beginStart<<" stop="<<m_HLDataPass1[k].endStop << " subSectionOfID=" << 99999999);
// TODO : ...
APPL_VERBOSE(" == > (under section ) kkk="<<kkk<<" start="<<m_HLDataPass1[kkk].start<<" stop="<<m_HLDataPass1[kkk].stop << " subSectionOfID=" << 99999999);
m_highlight->parseSubElement(m_HLDataPass1[kkk],
_MData.HLData,
m_data);
}
if (endSearch == (int32_t)m_HLDataPass1.size() ){
//if( k < (int32_t)m_HLDataPass1.size()) {
if (m_HLDataPass1.size() != 0) {
APPL_VERBOSE(" == > (empty section 3 ) kkk=" << kkk <<
" start=" << m_HLDataPass1[kkk-1].endStop <<
" start=" << m_HLDataPass1[kkk-1].stop <<
" stop=" << HLStop );
m_highlight->parse2(m_HLDataPass1[kkk-1].endStop,
HLStop,
_MData.HLData,
m_data);
m_highlight->parse2(m_HLDataPass1[kkk-1].stop,
HLStop,
_MData.HLData,
m_data);
} else {
APPL_VERBOSE(" == > (empty section 4 ) kkk=" << kkk <<
" start=0 stop=" << HLStop );
m_highlight->parse2(0,
HLStop,
_MData.HLData,
m_data);
HLStop,
_MData.HLData,
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) {
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++) {
_MData.posHLPass2 = iii;
if( _MData.HLData[iii].beginStart <= _pos
&& _MData.HLData[iii].endStop > _pos)
if( _MData.HLData[iii].start <= _pos
&& _MData.HLData[iii].stop > _pos)
{
return &_MData.HLData[iii];
}
if(_MData.HLData[iii].beginStart > _pos) {
if(_MData.HLData[iii].start > _pos) {
return getElementColorAtPosition(_pos, _MData.posHLPass1);
}
}
@@ -990,3 +1013,41 @@ uint32_t appl::Buffer::getCursorLinesId() {
}
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/compositing/Text.h>
#include <appl/Highlight.h>
#include <ewol/object/Signal.h>
namespace appl {
@@ -40,7 +41,7 @@ namespace appl {
*/
Iterator():
m_current(0),
m_data(NULL),
m_data(nullptr),
m_value(u32char::Null) {
// nothing to do ...
};
@@ -70,7 +71,7 @@ namespace appl {
*/
virtual ~Iterator() {
m_current = 0;
m_data = NULL;
m_data = nullptr;
m_value = u32char::Null;
};
/**
@@ -78,10 +79,10 @@ namespace appl {
* @return true if the element is present in buffer
*/
operator bool () const {
if (m_data == NULL) {
if (m_data == nullptr) {
return false;
}
if (m_current >= m_data->m_data.size()) {
if (m_current >= (int64_t)m_data->m_data.size()) {
return false;
}
if (m_current < 0) {
@@ -94,14 +95,14 @@ namespace appl {
* @return true if the element is present in buffer
*/
operator int64_t () const {
if (m_data == NULL) {
if (m_data == nullptr) {
return 0;
}
if (m_current < 0) {
return 0;
}
if (m_current > m_data->m_data.size()) {
return m_data->m_data.size();
if (m_current > (int64_t)m_data->m_data.size()) {
return (int64_t)m_data->m_data.size();
}
return m_current;
};
@@ -217,13 +218,13 @@ namespace appl {
* @return The requested position.
*/
int64_t getPos() const {
if (m_data == NULL) {
if (m_data == nullptr) {
return 0;
}
if (m_current < 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_current;
@@ -288,12 +289,15 @@ namespace appl {
friend class Buffer;
};
public:
static const char* const eventIsModify;
static const char* const eventIsSave;
static const char* const eventSelectChange;
static const char* const eventChangeName;
public:
ewol::object::Signal<void> signalIsModify;
ewol::object::Signal<void> signalIsSave;
ewol::object::Signal<void> signalSelectChange;
ewol::object::Signal<void> signalChangeName;
protected:
Buffer();
void init();
public:
DECLARE_FACTORY(Buffer);
virtual ~Buffer();
private:
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
*/
const std::string& getFileName() {
const std::string& getFileName() const {
return m_fileName;
}
/**
* @brief Check if the buffer has a real filename.
* @return the status of the existance of a name.
*/
bool hasFileName() {
bool hasFileName() const {
return m_hasFileName;
}
/**
@@ -344,9 +348,9 @@ namespace appl {
*/
void setModification(bool _status);
protected:
etk::Buffer m_data; //!< copy of the file buffer
std::string m_data; //!< copy of the file buffer
public:
etk::Buffer& getData() {
std::string& getData() {
return m_data;
};
protected:
@@ -381,14 +385,14 @@ namespace appl {
* @return position of the start selection.
*/
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.
* @return position of the stop selection.
*/
int64_t getStopSelectionPos() {
return etk_max(m_cursorPos, m_cursorSelectPos);
return std::max(m_cursorPos, m_cursorSelectPos);
}
protected:
float m_cursorPreferredCol; //!< position of the cursor when up and down is done.
@@ -588,7 +592,7 @@ namespace appl {
protected:
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
public:
/**

View File

@@ -19,31 +19,43 @@
#define __class__ "BufferManager"
appl::BufferManager::BufferManager() :
ewol::Resource("???BufferManager???"),
m_bufferSelected(NULL) {
signalNewBuffer(*this, "new-buffer"),
signalSelectFile(*this, "select-buffer"),
signalTextSelectionChange(*this, "text-selection-change"),
signalRemoveBuffer(*this, "remove-buffer") {
addObjectType("appl::BufferManager");
}
void appl::BufferManager::init(const std::string& _uniqueName) {
ewol::Resource::init(_uniqueName);
}
appl::BufferManager::~BufferManager() {
m_list.clear();
}
ewol::object::Shared<appl::Buffer> appl::BufferManager::createNewBuffer() {
ewol::object::Shared<appl::Buffer> tmp = ewol::object::makeShared(new appl::Buffer());
if (tmp == NULL) {
std::shared_ptr<appl::Buffer> appl::BufferManager::createNewBuffer() {
std::shared_ptr<appl::Buffer> tmp = appl::Buffer::create();
if (tmp == nullptr) {
APPL_ERROR("Can not allocate the Buffer (empty).");
return NULL;
return nullptr;
}
tmp->setParent(shared_from_this());
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;
}
ewol::object::Shared<appl::Buffer> appl::BufferManager::get(const std::string& _fileName, bool _createIfNeeded) {
APPL_INFO("get(" << _fileName << "," << _createIfNeeded << ")");
std::shared_ptr<appl::Buffer> appl::BufferManager::get(const std::string& _fileName, bool _createIfNeeded) {
APPL_INFO("get('" << _fileName << "'," << _createIfNeeded << ")");
for (auto &it : m_list) {
if (it == NULL) {
if (it == nullptr) {
continue;
}
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) {
APPL_WARNING("try open a folder : " << _fileName);
APPL_CRITICAL("plop");
return NULL;
return nullptr;
}
ewol::object::Shared<appl::Buffer> tmp = ewol::object::makeShared(new appl::Buffer());
if (tmp == NULL) {
std::shared_ptr<appl::Buffer> tmp = appl::Buffer::create();
if (tmp == nullptr) {
APPL_ERROR("Can not allocate the Buffer class : " << _fileName);
return NULL;
return nullptr;
}
tmp->setParent(shared_from_this());
tmp->loadFile(_fileName);
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 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;
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) {
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) {
std::shared_ptr<appl::Buffer> appl::BufferManager::get(int32_t _id) {
int32_t id = 0;
for (auto &it : m_list) {
if (id == _id) {
@@ -111,31 +120,42 @@ bool appl::BufferManager::exist(const std::string& _fileName) {
void appl::BufferManager::open(const std::string& _fileName) {
if (exist(_fileName) == true) {
APPL_WARNING(" the element '" << _fileName << "' already exist ... just reselect it ...");
signalSelectFile.emit(_fileName);
return;
}
if (get(_fileName, true) == NULL) {
if (get(_fileName, true) == nullptr) {
APPL_ERROR("Error get '" << _fileName << "' ... ");
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() {
ewol::object::Shared<appl::BufferManager> object = ewol::dynamic_pointer_cast<appl::BufferManager>(getManager().localKeep("???BufferManager???"));
if (NULL != object) {
return object;
void appl::BufferManager::requestDestroyFromChild(const std::shared_ptr<Object>& _child) {
APPL_WARNING("Buffer request a close...");
bool find = false;
int32_t newValue = -1;
auto it = m_list.begin();
while(it != m_list.end()) {
if (*it == nullptr) {
it = m_list.erase(it);
continue;
}
if (*it == _child) {
it = m_list.erase(it);
find = true;
break;
}
newValue++;
++it;
}
// this element create a new one every time ....
EWOL_INFO("CREATE : appl::BufferManager: ???BufferManager???");
object = ewol::object::makeShared(new appl::BufferManager());
if (NULL == object) {
EWOL_ERROR("allocation error of a resource : ???BufferManager???");
return NULL;
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 {
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:
BufferManager();
void init(const std::string& _uniqueName);
public:
DECLARE_RESOURCE_SINGLE_FACTORY(BufferManager, "???Buffer_Manager???");
virtual ~BufferManager();
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:
/**
* @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.
* @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:
* @param[in] _fileName Name of the file to open or create.
@@ -54,38 +61,29 @@ namespace appl {
* @param[in] _id Number of 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.
* @return Created buffer or NULL.
* @return Created buffer or nullptr.
*/
ewol::object::Shared<appl::Buffer> createNewBuffer();
std::shared_ptr<appl::Buffer> createNewBuffer();
private:
ewol::object::Shared<appl::Buffer> m_bufferSelected;
std::shared_ptr<appl::Buffer> m_bufferSelected;
public:
/**
* @brief Set the current 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
* @return Pointer on the buffer selected
*/
ewol::object::Shared<appl::Buffer> getBufferSelected() {
std::shared_ptr<appl::Buffer> getBufferSelected() {
return m_bufferSelected;
};
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::BufferManager> keep();
private:
void requestDestroyFromChild(const std::shared_ptr<Object>& _child);
};
};

View File

@@ -18,9 +18,12 @@
appl::GlyphPainting::GlyphPainting(const std::string& _filename) :
ewol::Resource(_filename) {
appl::GlyphPainting::GlyphPainting() {
addObjectType("appl::GlyphPainting");
}
void appl::GlyphPainting::init(const std::string& _filename) {
ewol::Resource::init(_filename);
EWOL_DEBUG("SFP : load \"" << _filename << "\"");
reload();
}
@@ -43,13 +46,13 @@ void appl::GlyphPainting::reload() {
APPL_DEBUG(tmppppp);
*/
ejson::Array* baseArray = doc.getArray("ednColor");
if (baseArray == NULL) {
if (baseArray == nullptr) {
APPL_ERROR("Can not get basic array : 'ednColor'");
return;
}
for (size_t iii = 0; iii < baseArray->size(); ++iii) {
ejson::Object* tmpObj = baseArray->getObject(iii);
if (tmpObj == NULL) {
if (tmpObj == nullptr) {
APPL_DEBUG(" can not get object in 'ednColor' id=" << iii);
continue;
}
@@ -94,20 +97,3 @@ int32_t appl::GlyphPainting::request(const std::string& _name) {
m_list.push_back(tmpDeco);
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:
std::vector<appl::GlyphDecoration> m_list;
protected:
GlyphPainting(const std::string& _filename);
GlyphPainting();
void init(const std::string& _filename);
public:
DECLARE_RESOURCE_NAMED_FACTORY(GlyphPainting);
virtual ~GlyphPainting();
public:
/**
@@ -49,14 +51,6 @@ namespace appl {
const appl::GlyphDecoration& operator[] (int32_t _pos) const {
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__
#define __class__ "BufferView"
static void SortElementList(std::vector<appl::dataBufferStruct*>& _list) {
std::vector<appl::dataBufferStruct *> tmpList = _list;
// TODO : write it better
static void SortElementList(std::vector<appl::dataBufferStruct>& _list) {
std::vector<appl::dataBufferStruct> tmpList = _list;
_list.clear();
for(size_t iii=0; iii<tmpList.size(); iii++) {
if (NULL == tmpList[iii]) {
continue;
}
size_t findPos = 0;
for(size_t jjj=0; jjj<_list.size(); jjj++) {
//EWOL_DEBUG("compare : \""<<*tmpList[iii] << "\" and \"" << *m_listDirectory[jjj] << "\"");
if (_list[jjj] == NULL) {
continue;
}
if (tmpList[iii]->m_bufferName.getNameFile() > _list[jjj]->m_bufferName.getNameFile()) {
if (tmpList[iii].m_bufferName.getNameFile() > _list[jjj].m_bufferName.getNameFile()) {
findPos = jjj+1;
}
}
@@ -43,18 +38,12 @@ BufferView::BufferView() :
m_openOrderMode(false) {
addObjectType("appl::BufferView");
setCanHaveFocus(true);
registerMultiCast(ednMsgBufferListChange);
registerMultiCast(ednMsgBufferState);
registerMultiCast(ednMsgBufferId);
registerMultiCast(appl::MsgSelectNewFile);
registerMultiCast(appl::MsgSelectChange);
registerMultiCast(appl::MsgNameChange);
m_selectedID = -1;
m_selectedIdRequested = -1;
// load buffer manager:
m_bufferManager = appl::BufferManager::keep();
m_bufferManager = appl::BufferManager::create();
// 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 ...
m_colorBackground1 = m_paintingProperties->request("backgroung1");
m_colorBackground2 = m_paintingProperties->request("backgroung2");
@@ -63,177 +52,109 @@ BufferView::BufferView() :
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() {
removeAllElement();
}
void BufferView::removeAllElement() {
for(auto &it : m_list) {
delete(it);
it = NULL;
}
m_list.clear();
}
void BufferView::insertAlphabetic(appl::dataBufferStruct* _dataStruct, bool _selectNewPosition) {
if (_dataStruct == NULL) {
return;
}
void BufferView::insertAlphabetic(const appl::dataBufferStruct& _dataStruct, bool _selectNewPosition) {
// alphabetical order:
for (size_t iii = 0; iii < m_list.size(); ++iii) {
if (m_list[iii] == NULL) {
continue;
}
if (std::tolower(m_list[iii]->m_bufferName.getNameFile()) > std::tolower(_dataStruct->m_bufferName.getNameFile())) {
if (etk::tolower(m_list[iii].m_bufferName.getNameFile()) > etk::tolower(_dataStruct.m_bufferName.getNameFile())) {
m_list.insert(m_list.begin() + iii, _dataStruct);
_dataStruct = NULL;
if (_selectNewPosition == true) {
m_selectedID = iii;
}
break;
return;
}
}
if (_dataStruct != NULL) {
m_list.push_back(_dataStruct);
if (_selectNewPosition == true) {
m_selectedID = m_list.size()-1;
}
m_list.push_back(_dataStruct);
if (_selectNewPosition == true) {
m_selectedID = m_list.size()-1;
}
}
void BufferView::onCallbackNewBuffer(const std::string& _value) {
std::shared_ptr<appl::Buffer> buffer = m_bufferManager->get(_value);
if (buffer == nullptr) {
APPL_ERROR("event on element nor exist : " << _value);
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) {
m_list.push_back(tmp);
} else {
insertAlphabetic(tmp);
}
markToRedraw();
}
void BufferView::onReceiveMessage(const ewol::object::Message& _msg) {
ewol::widget::List::onReceiveMessage(_msg);
if (_msg.getMessage() == appl::MsgSelectNewFile) {
ewol::object::Shared<appl::Buffer> buffer = m_bufferManager->get(_msg.getData());
if (buffer == NULL) {
APPL_ERROR("event on element nor exist : " << _msg.getData());
return;
// TODO : Review this callback with the real shared_ptr on the buffer ...
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;
}
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;
if (m_list[iii].m_buffer->getFileName() != _value) {
continue;
}
if (m_openOrderMode == true) {
m_list.push_back(tmp);
} else {
insertAlphabetic(tmp);
}
markToRedraw();
return;
m_selectedID = iii;
break;
}
if (_msg.getMessage() == appl::Buffer::eventChangeName) {
for (size_t iii = 0; iii < m_list.size(); ++iii) {
if (m_list[iii] == NULL) {
continue;
}
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) {
// re-order the fine in the correct position
appl::dataBufferStruct* tmp = m_list[iii];
m_list[iii] = NULL;
m_list.erase(m_list.begin() + iii);
insertAlphabetic(tmp, ((int64_t)iii == m_selectedID));
break;
}
}
}
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;
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) {
// re-order the fine in the correct position
appl::dataBufferStruct tmp = m_list[iii];
m_list.erase(m_list.begin() + iii);
insertAlphabetic(tmp, ((int64_t)iii == m_selectedID));
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();
}
markToRedraw();
}
void BufferView::onObjectRemove(const ewol::object::Shared<ewol::Object>& _object) {
ewol::widget::List::onObjectRemove(_object);
auto it(m_list.begin());
void BufferView::onCallbackBufferRemoved(const std::shared_ptr<appl::Buffer>& _buffer) {
APPL_ERROR("request remove buffer:");
auto it = m_list.begin();
while (it != m_list.end()) {
if ( *it != nullptr
&& (*it)->m_buffer == _object) {
m_list.erase(it);
markToRedraw();
it = m_list.begin();
if (it->m_buffer == _buffer) {
it = m_list.erase(it);
m_selectedID = -1;
} else {
++it;
}
}
if (m_bufferManager == _object) {
m_bufferManager.reset();
}
markToRedraw();
}
void BufferView::onCallbackIsSave() {
markToRedraw();
}
void BufferView::onCallbackIsModify() {
markToRedraw();
}
etk::Color<> BufferView::getBasicBG() {
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) {
if( _raw >= 0
&& _raw<(int64_t)m_list.size()
&& m_list[_raw] != nullptr) {
_myTextToWrite = m_list[_raw]->m_bufferName.getNameFile();
&& _raw<(int64_t)m_list.size() ) {
_myTextToWrite = m_list[_raw].m_bufferName.getNameFile();
if ( m_list[_raw]->m_buffer != NULL
&& m_list[_raw]->m_buffer->isModify() == false) {
if ( m_list[_raw].m_buffer != nullptr
&& m_list[_raw].m_buffer->isModify() == false) {
_fg = (*m_paintingProperties)[m_colorTextNormal].getForeground();
} else {
_fg = (*m_paintingProperties)[m_colorTextModify].getForeground();
@@ -279,17 +199,16 @@ bool BufferView::getElement(int32_t _colomn, int32_t _raw, std::string& _myTextT
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) {
APPL_INFO("Event on List : IdInput=" << _IdInput << " colomn=" << _colomn << " raw=" << _raw );
if( _raw >= 0
&& _raw<(int64_t)m_list.size()
&& NULL != m_list[_raw]) {
if (m_list[_raw]->m_buffer != NULL) {
sendMultiCast(appl::MsgSelectNewFile, m_list[_raw]->m_buffer->getFileName());
m_selectedID = _raw;
markToRedraw();
&& _raw<(int64_t)m_list.size()) {
if (m_list[_raw].m_buffer != nullptr) {
if (m_bufferManager != nullptr) {
APPL_INFO("Select file :" << m_list[_raw].m_buffer->getFileName() << " in list");
m_bufferManager->open(m_list[_raw].m_buffer->getFileName());
}
return true;
}
}

View File

@@ -19,8 +19,8 @@ namespace appl {
class dataBufferStruct {
public:
etk::FSNode m_bufferName;
ewol::object::Shared<appl::Buffer> m_buffer;
dataBufferStruct(const std::string& _bufferName, const ewol::object::Shared<appl::Buffer>& _buffer) :
std::shared_ptr<appl::Buffer> m_buffer;
dataBufferStruct(const std::string& _bufferName, const std::shared_ptr<appl::Buffer>& _buffer) :
m_bufferName(_bufferName),
m_buffer(_buffer) {
@@ -31,9 +31,9 @@ namespace appl {
class BufferView : public ewol::widget::List {
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:
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_colorBackground2;
int32_t m_colorBackgroundSelect;
@@ -42,19 +42,19 @@ class BufferView : public ewol::widget::List {
private:
int32_t m_selectedIdRequested;
int32_t m_selectedID;
std::vector<appl::dataBufferStruct*> m_list;
std::vector<appl::dataBufferStruct> m_list;
/**
* @brief Insert the element in the alphabetic order.
* @param[in] _dataStruct element to add.
*/
void insertAlphabetic(appl::dataBufferStruct* _dataStruct, bool _selectNewPosition = false);
public:
void insertAlphabetic(const appl::dataBufferStruct& _dataStruct, bool _selectNewPosition = false);
protected:
// Constructeur
BufferView();
void init();
public:
DECLARE_FACTORY(BufferView);
virtual ~BufferView();
// Derived function
virtual void onReceiveMessage(const ewol::object::Message& _msg);
virtual void onObjectRemove(const ewol::object::Shared<ewol::Object>& _object);
private:
bool m_openOrderMode; //!< true if the order is the opening order mode, otherwise, Alphabetic order
protected:
@@ -67,6 +67,13 @@ class BufferView : public ewol::widget::List {
virtual uint32_t getNuberOfRaw();
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);
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 {
std::string getVersion() {
#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 += std::to_string(date::getMonth());
tmpOutput += etk::to_string(date::getMonth());
tmpOutput += ".";
tmpOutput += std::to_string(date::getDay());
tmpOutput += etk::to_string(date::getDay());
return tmpOutput;
}
@@ -59,12 +59,15 @@ namespace appl {
class ParameterAboutGui : public ewol::widget::Sizer {
public :
ParameterAboutGui() :
ewol::widget::Sizer(ewol::widget::Sizer::modeVert) {
ewol::object::Shared<ewol::widget::Spacer> mySpacer = NULL;
ParameterAboutGui() {
addObjectType("appl::ParameterAboutGui");
}
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());
if (NULL == mySpacer) {
mySpacer = ewol::widget::Spacer::create();
if (nullptr == mySpacer) {
APPL_ERROR("Can not allocate widget == > display might be in error");
} else {
mySpacer->setExpand(bvec2(true,true));
@@ -93,8 +96,8 @@ class ParameterAboutGui : public ewol::widget::Sizer {
tmpLabel += " libPng, ogg-tremor, portaudio, libZip<br/>";
tmpLabel += " tinyXml, freetype, agg2.4, etk<br/>";
tmpLabel += "</left>";
ewol::object::Shared<ewol::widget::Label> myLabel = ewol::object::makeShared(new ewol::widget::Label(tmpLabel));
if (NULL == myLabel) {
std::shared_ptr<ewol::widget::Label> myLabel = ewol::widget::Label::create(tmpLabel);
if (nullptr == myLabel) {
APPL_ERROR("Can not allocate widget == > display might be in error");
} else {
myLabel->setExpand(bvec2(true,false));
@@ -121,38 +124,42 @@ const char* l_smoothMax = "tmpEvent_maxChange";
MainWindows::MainWindows() {
addObjectType("appl::MainWindows");
}
void MainWindows::init() {
ewol::widget::Windows::init();
APPL_DEBUG("CREATE WINDOWS ... ");
ewol::object::Shared<ewol::widget::Sizer> mySizerVert = NULL;
ewol::object::Shared<ewol::widget::Sizer> mySizerVert2 = NULL;
ewol::object::Shared<ewol::widget::Sizer> mySizerHori = NULL;
ewol::object::Shared<appl::TextViewer> myTextView = NULL;
ewol::object::Shared<BufferView> myBufferView = NULL;
ewol::object::Shared<ewol::widget::Menu> myMenu = NULL;
std::shared_ptr<ewol::widget::Sizer> mySizerVert = nullptr;
std::shared_ptr<ewol::widget::Sizer> mySizerVert2 = nullptr;
std::shared_ptr<ewol::widget::Sizer> mySizerHori = nullptr;
std::shared_ptr<appl::TextViewer> myTextView = nullptr;
std::shared_ptr<BufferView> myBufferView = nullptr;
std::shared_ptr<ewol::widget::Menu> myMenu = nullptr;
// 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");
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");
mySizerVert->subWidgetAdd(mySizerHori);
myBufferView = ewol::object::makeShared(new BufferView());
myBufferView = BufferView::create();
myBufferView->setName("plop 3333333");
myBufferView->setExpand(bvec2(false,true));
myBufferView->setFill(bvec2(true,true));
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);
mySizerVert2->setName("plop 4444444");
// main buffer Area :
#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
myTextView = ewol::object::makeShared(new appl::TextViewer("FreeMono;DejaVuSansMono;FreeSerif", 11));
myTextView = appl::TextViewer::create("FreeMono;DejaVuSansMono;FreeSerif", 11);
#endif
myTextView->setName("appl-text-viewer");
myTextView->setExpand(bvec2(true,true));
@@ -165,105 +172,66 @@ MainWindows::MainWindows() {
mySizerVert2->subWidgetAdd(myTextView);
*/
// search area :
ewol::object::Shared<appl::widget::Search> mySearch = ewol::object::makeShared(new appl::widget::Search());
mySizerVert2->subWidgetAdd(mySearch);
m_widgetSearch = appl::widget::Search::create();
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");
mySizerVert->subWidgetAdd(mySizerHori);
myMenu = ewol::object::makeShared(new ewol::widget::Menu());
myMenu = ewol::widget::Menu::create();
myMenu->setName("appl-menu-interface");
mySizerHori->subWidgetAdd(myMenu);
int32_t idMenuFile = myMenu->addTitle("File");
myMenu->add(idMenuFile, "New", "", ednMsgGuiNew);
myMenu->add(idMenuFile, "New", "", "menu:new");
myMenu->addSpacer();
myMenu->add(idMenuFile, "Open", "THEME:GUI:Load.edf", ednMsgGuiOpen);
myMenu->add(idMenuFile, "Close", "THEME:GUI:Close.edf", ednMsgGuiClose, "current");
myMenu->add(idMenuFile, "Close (all)", "", ednMsgGuiClose, "All");
myMenu->add(idMenuFile, "Save", "THEME:GUI:Save.edf", ednMsgGuiSave, "current");
myMenu->add(idMenuFile, "Save As ...", "", ednMsgGuiSaveAs);
myMenu->add(idMenuFile, "Open", "THEME:GUI:Load.edf", "menu:open");
myMenu->add(idMenuFile, "Close", "THEME:GUI:Close.edf", "menu:close");
myMenu->add(idMenuFile, "Close (all)", "", "menu:close-all");
myMenu->add(idMenuFile, "Save", "THEME:GUI:Save.edf", "menu:save");
myMenu->add(idMenuFile, "Save As ...", "", "menu:save-as");
myMenu->addSpacer();
//myMenu->add(idMenuFile, "Exit", "", ednMsgGuiExit);
myMenu->addSpacer();
myMenu->add(idMenuFile, "Properties", "THEME:GUI:Parameter.edf", ednMsgProperties);
myMenu->add(idMenuFile, "Properties", "THEME:GUI:Parameter.edf", "menu:property");
int32_t idMenuEdit = myMenu->addTitle("Edit");
myMenu->add(idMenuEdit, "Undo", "THEME:GUI:Undo.edf", ednMsgGuiUndo);
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, "???");
myMenu->add(idMenuEdit, "Goto line ...","", "menu:goto-line");
int32_t idMenuSearch = myMenu->addTitle("Search");
myMenu->add(idMenuSearch, "Search", "THEME:GUI:Search.edf", ednMsgGuiSearch);
myMenu->add(idMenuSearch, "Replace", "THEME:GUI:Replace.edf", ednMsgGuiReplace);
myMenu->add(idMenuSearch, "Search", "THEME:GUI:Search.edf", "menu:search");
myMenu->add(idMenuSearch, "Replace", "THEME:GUI:Replace.edf", "menu:replace");
myMenu->addSpacer();
myMenu->add(idMenuSearch, "Find (previous)","", ednMsgGuiFind, "Previous");
myMenu->add(idMenuSearch, "Find (next)", "", ednMsgGuiFind, "Next");
myMenu->add(idMenuSearch, "Find (all)", "", ednMsgGuiFind, "All");
myMenu->add(idMenuSearch, "Un-Select", "", ednMsgGuiFind, "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");
*/
myMenu->add(idMenuSearch, "Find (previous)","", "menu:find:previous");
myMenu->add(idMenuSearch, "Find (next)", "", "menu:find:next");
myMenu->add(idMenuSearch, "Find (all)", "", "menu:find:all");
myMenu->add(idMenuSearch, "Un-Select", "", "menu:find:none");
int32_t idMenugDisplay = myMenu->addTitle("Display");
myMenu->add(idMenugDisplay, "Color Black", "", appl::MsgNameGuiChangeColor, "color/black/");
myMenu->add(idMenugDisplay, "Color White", "", appl::MsgNameGuiChangeColor, "color/white/");
myMenu->add(idMenugDisplay, "Shape square", "", l_MsgNameGuiChangeShape, "shape/square/");
myMenu->add(idMenugDisplay, "Shape round", "", l_MsgNameGuiChangeShape, "shape/round/");
myMenu->add(idMenugDisplay, "Color Black", "", "menu:color:color/black/");
myMenu->add(idMenugDisplay, "Color White", "", "menu:color:color/white/");
myMenu->add(idMenugDisplay, "Shape square", "", "menu:shape:shape/square/");
myMenu->add(idMenugDisplay, "Shape round", "", "menu:shape:shape/round/");
myMenu->addSpacer();
myMenu->add(idMenugDisplay, "Reload openGl Shader", "", ednMsgGuiReloadShader);
m_widgetLabelFileName = ewol::object::makeShared(new ewol::widget::Label("FileName"));
myMenu->add(idMenugDisplay, "Reload openGl Shader", "", "menu:reloadShape");
myMenu->signalSelect.bind(shared_from_this(), &MainWindows::onCallbackMenuEvent);
m_widgetLabelFileName = ewol::widget::Label::create("FileName");
m_widgetLabelFileName->setExpand(bvec2(true,false));
m_widgetLabelFileName->setFill(bvec2(true,false));;
mySizerHori->subWidgetAdd(m_widgetLabelFileName);
// add generic shortcut ...
// (shift, control, alt, meta, char32_t unicodeValue, const char * generateEventId, std::string& data)
shortCutAdd("ctrl+o", ednMsgGuiOpen, "", true);
shortCutAdd("ctrl+n", ednMsgGuiNew, "", true);
shortCutAdd("ctrl+o", "menu:open");
shortCutAdd("ctrl+n", "menu:new");
shortCutAdd("ctrl+s", ednMsgGuiSave, "current", true);
shortCutAdd("ctrl+shift+s", ednMsgGuiSave, "All", true);
shortCutAdd("ctrl+s", "menu:save");
shortCutAdd("ctrl+shift+s", "menu:save-all");
shortCutAdd("ctrl+q", ednMsgGuiClose, "current", true);
shortCutAdd("ctrl+shift+q", ednMsgGuiClose, "All", true);
shortCutAdd("ctrl+q", "menu:close");
shortCutAdd("ctrl+shift+q", "menu:close-all");
shortCutAdd("ctrl+z", ednMsgGuiUndo, "", true);
shortCutAdd("ctrl+shift+z", ednMsgGuiRedo, "", true);
shortCutAdd("ctrl+l", "menu:goto-line");
shortCutAdd("ctrl+l", ednMsgGuiGotoLine, "???", true);
shortCutAdd("ctrl+f", ednMsgGuiSearch, "", true);
shortCutAdd("F12", ednMsgGuiReloadShader, "", true);
//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);
shortCutAdd("ctrl+f", "menu:search");
shortCutAdd("F12", "menu:reloade-shader");
// TODO : auto-bind on shortcut event ==> maybe do beter later ...
signalShortcut.bind(shared_from_this(), &MainWindows::onCallbackShortCut);
m_bufferManager->signalSelectFile.bind(shared_from_this(), &MainWindows::onCallbackShortCut);
}
@@ -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) {
APPL_WARNING("Event from ShortCut : " << _value);
onCallbackMenuEvent(_value);
}
void MainWindows::onReceiveMessage(const ewol::object::Message& _msg) {
ewol::widget::Windows::onReceiveMessage(_msg);
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 !!! ");
void MainWindows::onCallbackMenuEvent(const std::string& _value) {
APPL_WARNING("Event from Menu : " << _value);
if (_value == "menu:new") {
if (m_bufferManager != nullptr) {
m_bufferManager->createNewBuffer();
}
} else if (_value == "menu:open") {
displayOpen();
} else if (_value == "menu:close") {
std::shared_ptr<appl::WorkerCloseFile> worker = appl::WorkerCloseFile::create();
worker->startAction("");
} else if (_value == "menu:close-all") {
appl::WorkerCloseAllFile::create();
} 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;
}
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");
if (m_widgetSearch->isHide()) {
m_widgetSearch->show();
m_widgetSearch->selectSearch();
} 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);
m_widgetSearch->hide();
}
} else if (_msg.getMessage() == appl::MsgNameGuiChangeColor) {
etk::theme::setName("COLOR", _msg.getData());
} 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 (_msg.getMessage() == l_MsgNameGuiChangeShape) {
etk::theme::setName("GUI", _msg.getData());
} 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 (_msg.getMessage() == ednMsgGuiReloadShader) {
} else if (_value == "menu:reloadShape") {
ewol::getContext().getResourcesManager().reLoadResources();
ewol::getContext().forceRedrawAll();
} else if (_msg.getMessage() == ednMsgGuiExit) {
// TODO : ...
} else {
APPL_ERROR("Event from Menu UNKNOW : '" << _value << "'");
}
// 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?" *":""));
}
}
} else if (_msg.getMessage() == ednMsgGuiNew) {
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) {
new appl::WorkerSaveFile("", true);
} else if (_msg.getMessage() == ednMsgGuiClose) {
// Get a ref on the buffer selected (if null, no buffer was selected ...)
if (_msg.getData() == "current") {
new appl::WorkerCloseFile("");
} else {
new appl::WorkerCloseAllFile();
}
}
/* TODO :
} else if (_msg.getMessage() == mainWindowsRequestSaveFile) { // return after a choice of close...
if (m_bufferManager->exist(_msg.getData()) == false) {
APPL_ERROR("Try to save an non-existant file :" << _msg.getData());
return;
}
ewol::object::Shared<appl::Buffer> tmpBuffer = m_bufferManager->get(_msg.getData());
if (tmpBuffer == NULL) {
std::shared_ptr<appl::Buffer> tmpBuffer = m_bufferManager->get(_msg.getData());
if (tmpBuffer == nullptr) {
APPL_ERROR("Error to get the buffer : " << _msg.getData());
return;
}
@@ -444,8 +337,8 @@ void MainWindows::onReceiveMessage(const ewol::object::Message& _msg) {
APPL_ERROR("Try to save an non-existant file :" << _msg.getData());
return;
}
ewol::object::Shared<appl::Buffer> tmpBuffer = m_bufferManager->get(_msg.getData());
if (tmpBuffer == NULL) {
std::shared_ptr<appl::Buffer> tmpBuffer = m_bufferManager->get(_msg.getData());
if (tmpBuffer == nullptr) {
APPL_ERROR("Error to get the buffer : " << _msg.getData());
return;
}
@@ -455,64 +348,157 @@ void MainWindows::onReceiveMessage(const ewol::object::Message& _msg) {
APPL_ERROR("Try to save an non-existant file :" << _msg.getData());
return;
}
ewol::object::Shared<appl::Buffer> tmpBuffer = m_bufferManager->get(_msg.getData());
if (tmpBuffer == NULL) {
std::shared_ptr<appl::Buffer> tmpBuffer = m_bufferManager->get(_msg.getData());
if (tmpBuffer == nullptr) {
APPL_ERROR("Error to get the buffer : " << _msg.getData());
return;
}
// note: just remove ==> no check : normal case ...
tmpBuffer->removeObject();
//tmpBuffer->removeObject();
EWOL_TODO("call remove buffer ...");
}
return;
}
*/
void MainWindows::saveAsPopUp(const ewol::object::Shared<appl::Buffer>& _buffer) {
if (_buffer == NULL) {
APPL_ERROR("Call With NULL input...");
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;
}
appl::WorkerSaveFile* tmpObject = new appl::WorkerSaveFile(_buffer->getFileName());
}
void MainWindows::closeNotSavedFile(const ewol::object::Shared<appl::Buffer>& _buffer) {
if (_buffer == NULL) {
APPL_ERROR("Call With NULL input...");
tmpWidget->setTitle("Open files ...");
tmpWidget->setValidateLabel("Open");
if (m_bufferManager == nullptr) {
APPL_ERROR("can not call unexistant buffer manager ... ");
return;
}
ewol::object::Shared<ewol::widget::StdPopUp> tmpPopUp = ewol::object::makeShared(new ewol::widget::StdPopUp());
if (tmpPopUp == NULL) {
// 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::displayProperty() {
// Request the parameter GUI
std::shared_ptr<ewol::widget::Parameter> tmpWidget = ewol::widget::Parameter::create();
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);
}
}
void MainWindows::onCallbackselectNewFile(const std::string& _value) {
APPL_INFO("onCallbackselectNewFile(" << _value << ")");
if (m_bufferManager == nullptr) {
APPL_ERROR("can not call unexistant buffer manager ... ");
return;
}
// TODO : Remove all previous binding from the old buffer ...
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");
return;
}
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...");
ewol::object::Shared<ewol::Widget> bt = NULL;
std::shared_ptr<ewol::widget::Button> bt = nullptr;
if (_buffer->hasFileName() == true) {
bt = tmpPopUp->addButton("Save", true);
if (bt != NULL) {
if (bt != nullptr) {
// TODO : The element is removed before beeing pressed
bt->registerOnEvent(this, "pressed", mainWindowsRequestSaveFile, _buffer->getFileName());
bt->registerOnEvent(this, "pressed", mainWindowsRequestcloseFileNoCheck, _buffer->getFileName());
// TODO : bt->signalPressed.bind(shared_from_this(), mainWindowsRequestSaveFile, _buffer->getFileName());
// TODO : bt->signalPressed.bind(shared_from_this(), mainWindowsRequestcloseFileNoCheck, _buffer->getFileName());
}
}
bt = tmpPopUp->addButton("Save As", true);
if (bt != NULL) {
bt->registerOnEvent(this, "pressed", mainWindowsRequestSaveFileAs, _buffer->getFileName());
//bt->registerOnEvent(this, "pressed", mainWindowsRequestcloseFileNoCheck, _buffer->getFileName());
if (bt != nullptr) {
// TODO : bt->signalPressed.bind(shared_from_this(), mainWindowsRequestSaveFileAs, _buffer->getFileName());
//bt->signalPressed.bind(shared_from_this(), mainWindowsRequestcloseFileNoCheck, _buffer->getFileName());
// TODO : Request the close when saved ...
}
bt = tmpPopUp->addButton("Close", true);
if (bt != NULL) {
bt->registerOnEvent(this, "pressed", mainWindowsRequestcloseFileNoCheck, _buffer->getFileName());
if (bt != nullptr) {
// TODO : bt->signalPressed.bind(shared_from_this(), mainWindowsRequestcloseFileNoCheck, _buffer->getFileName());
}
tmpPopUp->addButton("Cancel", true);
tmpPopUp->setRemoveOnExternClick(true);
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 <ewol/widget/Label.h>
#include <appl/BufferManager.h>
#include <appl/Gui/Search.h>
class MainWindows : public ewol::widget::Windows {
private:
ewol::object::Shared<ewol::widget::Label> m_widgetLabelFileName;
public:
std::shared_ptr<ewol::widget::Label> m_widgetLabelFileName;
std::shared_ptr<appl::widget::Search> m_widgetSearch;
protected:
// Constructeur
MainWindows();
void init();
public:
DECLARE_FACTORY(MainWindows);
virtual ~MainWindows();
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.
* @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.
* @param[in] _buffer Buffer that might be close.
*/
void closeNotSavedFile(const ewol::object::Shared<appl::Buffer>& _buffer);
public: // Derived function
virtual void onReceiveMessage(const ewol::object::Message& _msg);
virtual void onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject);
void closeNotSavedFile(const std::shared_ptr<appl::Buffer>& _buffer);
void displayOpen();
void displayProperty();
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/MainWindows.h"
#include "appl/globalMsg.h"
#include <ewol/widget/Button.h>
#include <ewol/widget/Entry.h>
#undef __class__
@@ -29,36 +31,32 @@ const char* const l_eventForwardCb = "appl-forward-CheckBox";
const char* const l_eventHideBt = "appl-hide-button";
appl::widget::Search::Search() :
ewol::widget::Composer(ewol::widget::Composer::file, "DATA:GUI-Search.xml"),
m_viewerManager(NULL),
m_forward(true),
m_caseSensitive(false),
m_wrap(true),
m_searchEntry(NULL),
m_replaceEntry(NULL) {
m_wrap(true) {
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
registerOnEventNameWidget(this, "SEARCH:close", "pressed", l_eventHideBt);
registerOnEventNameWidget(this, "SEARCH:search-entry", "modify", l_eventSearchEntry);
registerOnEventNameWidget(this, "SEARCH:search-entry", "enter", l_eventSearchEntryEnter);
registerOnEventNameWidget(this, "SEARCH:search", "pressed", l_eventSearchBt);
registerOnEventNameWidget(this, "SEARCH:replace-entry", "modify", l_eventReplaceEntry);
registerOnEventNameWidget(this, "SEARCH:replace-entry", "enter", l_eventReplaceEntryEnter);
registerOnEventNameWidget(this, "SEARCH:replace", "pressed", l_eventReplaceBt);
registerOnEventNameWidget(this, "SEARCH:case", "value", l_eventCaseCb);
registerOnEventNameWidget(this, "SEARCH:wrap", "value", l_eventWrapCb);
registerOnEventNameWidget(this, "SEARCH:up-down", "value", l_eventForwardCb);
subBind(ewol::widget::Button, "SEARCH:close", signalPressed, shared_from_this(), &appl::widget::Search::OnCallbackHide);
subBind(ewol::widget::Entry, "SEARCH:search-entry", signalModify, shared_from_this(), &appl::widget::Search::OnCallbackSearchValue);
subBind(ewol::widget::Entry, "SEARCH:search-entry", signalEnter, shared_from_this(), &appl::widget::Search::OnCallbackSearchEntryValidate);
subBind(ewol::widget::Button, "SEARCH:search", signalPressed, shared_from_this(), &appl::widget::Search::OnCallbackSearch);
subBind(ewol::widget::Entry, "SEARCH:replace-entry", signalModify, shared_from_this(), &appl::widget::Search::OnCallbackReplaceValue);
subBind(ewol::widget::Entry, "SEARCH:replace-entry", signalEnter, shared_from_this(), &appl::widget::Search::OnCallbackReplaceEntryValidate);
subBind(ewol::widget::Button, "SEARCH:replace", signalPressed, shared_from_this(), &appl::widget::Search::OnCallbackReplace);
subBind(ewol::widget::Button, "SEARCH:case", signalValue, shared_from_this(), &appl::widget::Search::OnCallbackCase);
subBind(ewol::widget::Button, "SEARCH:wrap", signalValue, shared_from_this(), &appl::widget::Search::OnCallbackWrap);
subBind(ewol::widget::Button, "SEARCH:up-down", signalValue, shared_from_this(), &appl::widget::Search::OnCallbackForward);
// set default properties
setConfigNamed("SEARCH:case", "value", std::to_string(m_caseSensitive));
setConfigNamed("SEARCH:wrap", "value", std::to_string(m_wrap));
setConfigNamed("SEARCH:up-down", "value", std::to_string(m_forward));
parameterSetOnWidgetNamed("SEARCH:case", "value", etk::to_string(m_caseSensitive));
parameterSetOnWidgetNamed("SEARCH:wrap", "value", etk::to_string(m_wrap));
parameterSetOnWidgetNamed("SEARCH:up-down", "value", etk::to_string(m_forward));
// get widget
m_searchEntry = ewol::dynamic_pointer_cast<ewol::widget::Entry>(getWidgetNamed("SEARCH:search-entry"));
m_replaceEntry = ewol::dynamic_pointer_cast<ewol::widget::Entry>(getWidgetNamed("SEARCH:replace-entry"));
// Display and hide event:
registerMultiCast(ednMsgGuiSearch);
m_searchEntry = std::dynamic_pointer_cast<ewol::widget::Entry>(getSubObjectNamed("SEARCH:search-entry"));
m_replaceEntry = std::dynamic_pointer_cast<ewol::widget::Entry>(getSubObjectNamed("SEARCH:replace-entry"));
// basicly hiden ...
hide();
}
@@ -68,12 +66,12 @@ appl::widget::Search::~Search() {
}
void appl::widget::Search::find() {
if (m_viewerManager == NULL) {
if (m_viewerManager == nullptr) {
APPL_WARNING("No viewer manager selected!!!");
return;
}
ewol::object::Shared<appl::TextViewer> viewer = m_viewerManager->getViewerSelected();
if (viewer == NULL) {
std::shared_ptr<appl::TextViewer> viewer = m_viewerManager->getViewerSelected();
if (viewer == nullptr) {
APPL_INFO("No viewer selected!!!");
return;
}
@@ -104,12 +102,12 @@ void appl::widget::Search::find() {
}
void appl::widget::Search::replace() {
if (m_viewerManager == NULL) {
if (m_viewerManager == nullptr) {
APPL_WARNING("No viewer manager selected!!!");
return;
}
ewol::object::Shared<appl::TextViewer> viewer = m_viewerManager->getViewerSelected();
if (viewer == NULL) {
std::shared_ptr<appl::TextViewer> viewer = m_viewerManager->getViewerSelected();
if (viewer == nullptr) {
APPL_INFO("No viewer selected!!!");
return;
}
@@ -120,58 +118,50 @@ void appl::widget::Search::replace() {
viewer->replace(m_replaceData);
}
void appl::widget::Search::OnCallbackHide() {
hide();
}
void appl::widget::Search::OnCallbackSearchValue(const std::string& _value) {
m_searchData = etk::to_u32string(_value);
}
void appl::widget::Search::OnCallbackSearch() {
find();
}
void appl::widget::Search::OnCallbackSearchEntryValidate(const std::string& _value) {
m_searchData = etk::to_u32string(_value);
find();
}
void appl::widget::Search::OnCallbackReplaceValue(const std::string& _value) {
m_replaceData = etk::to_u32string(_value);
}
void appl::widget::Search::OnCallbackReplace() {
replace();
find();
}
void appl::widget::Search::OnCallbackReplaceEntryValidate(const std::string& _value) {
m_replaceData = etk::to_u32string(_value);
replace();
find();
}
void appl::widget::Search::OnCallbackCase(const bool& _value) {
m_caseSensitive = _value;
}
void appl::widget::Search::OnCallbackWrap(const bool& _value) {
m_wrap = _value;
}
void appl::widget::Search::OnCallbackForward(const bool& _value) {
m_forward = _value;
}
void appl::widget::Search::onReceiveMessage(const ewol::object::Message& _msg) {
ewol::widget::Composer::onReceiveMessage(_msg);
APPL_INFO("Search receive message : " << _msg);
if ( _msg.getMessage() == l_eventSearchEntry) {
m_searchData = to_u32string(_msg.getData());
} else if ( _msg.getMessage() == l_eventSearchEntryEnter
|| _msg.getMessage() == l_eventSearchBt) {
find();
} else if ( _msg.getMessage() == l_eventReplaceEntry) {
m_replaceData = to_u32string(_msg.getData());
} else if ( _msg.getMessage() == l_eventReplaceEntryEnter
|| _msg.getMessage() == l_eventReplaceBt) {
replace();
find();
} else if ( _msg.getMessage() == l_eventCaseCb) {
m_caseSensitive = std::stob(_msg.getData());
} else if ( _msg.getMessage() == l_eventWrapCb) {
m_wrap = std::stob(_msg.getData());
} else if ( _msg.getMessage() == l_eventForwardCb) {
m_forward = std::stob(_msg.getData());
} else if ( _msg.getMessage() == l_eventHideBt) {
hide();
} else if ( _msg.getMessage() == ednMsgGuiSearch) {
if (true == isHide()) {
show();
if (m_searchEntry!= NULL) {
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::selectSearch() {
if (m_searchEntry!= nullptr) {
m_searchEntry->keepFocus();
}
}
void appl::widget::Search::onObjectRemove(const ewol::object::Shared<ewol::Object>& _object) {
ewol::widget::Composer::onObjectRemove(_object);
if (_object == m_searchEntry) {
m_searchEntry.reset();
}
if (_object == m_replaceEntry) {
m_replaceEntry.reset();
}
if (_object == m_viewerManager) {
m_viewerManager.reset();
void appl::widget::Search::selectReplace() {
if (m_replaceEntry!= nullptr) {
m_replaceEntry->keepFocus();
}
}

View File

@@ -18,17 +18,20 @@ namespace appl {
namespace widget {
class Search : public ewol::widget::Composer {
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_caseSensitive;
bool m_wrap;
ewol::object::Shared<ewol::widget::Entry> m_searchEntry;
ewol::object::Shared<ewol::widget::Entry> m_replaceEntry;
std::shared_ptr<ewol::widget::Entry> m_searchEntry;
std::shared_ptr<ewol::widget::Entry> m_replaceEntry;
std::u32string m_searchData;
std::u32string m_replaceData;
public:
protected:
// Constructeur
Search();
void init();
public:
DECLARE_FACTORY(Search);
virtual ~Search();
private:
/**
@@ -39,9 +42,20 @@ namespace appl {
* @brief Replace the current selected text.
*/
void replace();
public: // derived function
virtual void onReceiveMessage(const ewol::object::Message& _msg);
virtual void onObjectRemove(const ewol::object::Shared<ewol::Object>& _object);
public:
void selectSearch();
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__
#define __class__ "TagFileList"
extern const char * const applEventCtagsListSelect = "appl-event-ctags-list-select";
extern const char * const applEventCtagsListUnSelect = "appl-event-ctags-list-un-select";
extern const char * const applEventCtagsListValidate = "appl-event-ctags-list-validate";
appl::TagFileList::TagFileList() {
appl::TagFileList::TagFileList() :
signalSelect(*this, "select"),
signalValidate(*this, "validate"),
signalUnSelect(*this, "unselect") {
addObjectType("appl::TagFileList");
m_selectedLine = -1;
addEventId(applEventCtagsListSelect);
addEventId(applEventCtagsListValidate);
setMouseLimit(1);
// Load color properties: (use file list to be generic ...)
m_colorProperty = ewol::resource::ColorFile::keep("THEME:COLOR:ListFileSystem.json");
if (m_colorProperty != NULL) {
m_colorProperty = ewol::resource::ColorFile::create("THEME:COLOR:ListFileSystem.json");
if (m_colorProperty != nullptr) {
m_colorIdText = m_colorProperty->request("text");
m_colorIdBackground1 = m_colorProperty->request("background1");
m_colorIdBackground2 = m_colorProperty->request("background2");
m_colorIdBackgroundSelected = m_colorProperty->request("selected");
}
}
void appl::TagFileList::init() {
ewol::widget::List::init();
}
appl::TagFileList::~TagFileList() {
for (auto &it : m_list) {
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) {
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) {
_myTextToWrite = std::to_string(m_list[_raw]->fileLine);
_myTextToWrite = etk::to_string(m_list[_raw]->fileLine);
} else {
_myTextToWrite = m_list[_raw]->filename;
}
@@ -90,16 +89,16 @@ bool appl::TagFileList::onItemEvent(int32_t _IdInput, enum ewol::key::status _ty
} else {
m_selectedLine = _raw;
}
const char * event = applEventCtagsListValidate;
if (previousRaw != m_selectedLine) {
event = applEventCtagsListSelect;
}
if( m_selectedLine >= 0
&& m_selectedLine < (int64_t)m_list.size()
&& NULL != m_list[m_selectedLine] ) {
generateEventId(event, std::to_string(m_list[_raw]->fileLine)+":"+m_list[m_selectedLine]->filename);
&& nullptr != m_list[m_selectedLine] ) {
if (previousRaw != m_selectedLine) {
signalSelect.emit(etk::to_string(m_list[_raw]->fileLine)+":"+m_list[m_selectedLine]->filename);
} else {
signalValidate.emit(etk::to_string(m_list[_raw]->fileLine)+":"+m_list[m_selectedLine]->filename);
}
} else {
generateEventId(applEventCtagsListUnSelect);
signalUnSelect.emit();
}
// need to regenerate the display of the list :
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) {
appl::TagListElement *tmpFile = new appl::TagListElement(_file, _line);
if (NULL != tmpFile) {
if (nullptr != tmpFile) {
m_list.push_back(tmpFile);
}
markToRedraw();

View File

@@ -13,11 +13,6 @@
#include <ewol/widget/List.h>
#include <ewol/resource/ColorFile.h>
extern const char * const applEventCtagsListSelect;
extern const char * const applEventCtagsListValidate;
extern const char * const applEventCtagsListUnSelect;
namespace appl {
class TagListElement {
public:
@@ -33,17 +28,24 @@ namespace appl {
};
};
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:
int32_t m_selectedLine;
std::vector<appl::TagListElement*> m_list;
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_colorIdBackground1; //!< Color of the Background.
int32_t m_colorIdBackground2; //!< Color of the Background 2.
int32_t m_colorIdBackgroundSelected; //!< Color of line selected.
public:
protected:
TagFileList();
void init();
public:
DECLARE_FACTORY(TagFileList);
virtual ~TagFileList();
// display API :
virtual etk::Color<> getBasicBG();

View File

@@ -26,18 +26,23 @@
#define __class__ "TagFileSelection"
extern const char * const applEventctagsSelection = "appl-event-ctags-validate";
extern const char * const applEventctagsCancel = "appl-event-ctags-cancel";
static const char * const applEventctagsSelection = "appl-event-ctags-validate";
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");
addEventId(applEventctagsSelection);
addEventId(applEventctagsCancel);
ewol::object::Shared<ewol::widget::Label> myWidgetTitle;
ewol::object::Shared<ewol::widget::Sizer> mySizerVert;
}
void appl::TagFileSelection::init() {
ewol::widget::PopUp::init();
std::shared_ptr<ewol::widget::Sizer> mySizerVert;
#if defined(__TARGET_OS__Android)
setMinSize(ewol::Dimension(vec2(90,90),ewol::Dimension::Pourcent));
#elif defined(__TARGET_OS__Windows)
@@ -46,15 +51,15 @@ appl::TagFileSelection::TagFileSelection() {
setMinSize(ewol::Dimension(vec2(80,80),ewol::Dimension::Pourcent));
#endif
mySizerVert = ewol::object::makeShared(new ewol::widget::Sizer(ewol::widget::Sizer::modeVert));
if (NULL == mySizerVert) {
mySizerVert = ewol::widget::Sizer::create(ewol::widget::Sizer::modeVert);
if (nullptr == mySizerVert) {
EWOL_ERROR("Can not allocate widget == > display might be in error");
} else {
mySizerVert->lockExpand(bvec2(true,true));
mySizerVert->setExpand(bvec2(true,true));
// set it in the pop-up-system :
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"
" <spacer expand=\"true,false\"/>\n"
" <button name=\"PLUGIN-CTAGS-jump\" expand=\"false\" fill=\"true\">"
@@ -69,27 +74,28 @@ appl::TagFileSelection::TagFileSelection() {
" <label>Cancel</label>\n"
" </sizer>\n"
" </button>\n"
"</sizer>\n"));
"</sizer>\n");
compose->setExpand(bvec2(true,false));
compose->setFill(bvec2(true,true));
mySizerVert->subWidgetAdd(compose);
compose->registerOnEventNameWidget(this, "PLUGIN-CTAGS-jump", "pressed", applEventctagsSelection);
compose->registerOnEventNameWidget(this, "PLUGIN-CTAGS-cancel", "pressed", applEventctagsCancel);
externSubBind(compose, ewol::widget::Button, "PLUGIN-CTAGS-jump", signalPressed, shared_from_this(), &appl::TagFileSelection::onCallbackCtagsSelection);
externSubBind(compose, ewol::widget::Button, "PLUGIN-CTAGS-cancel", signalPressed, shared_from_this(), &appl::TagFileSelection::onCallbackCtagsCancel);
m_listTag = ewol::object::makeShared(new appl::TagFileList());
if (NULL == m_listTag) {
m_listTag = appl::TagFileList::create();
if (nullptr == m_listTag) {
EWOL_ERROR("Can not allocate widget == > display might be in error");
} else {
m_listTag->registerOnEvent(this, applEventCtagsListValidate);
m_listTag->registerOnEvent(this, applEventCtagsListSelect);
m_listTag->registerOnEvent(this, applEventCtagsListUnSelect);
m_listTag->signalValidate.bind(shared_from_this(), &appl::TagFileSelection::onCallbackCtagsListValidate);
m_listTag->signalSelect.bind(shared_from_this(), &appl::TagFileSelection::onCallbackCtagsListSelect);
m_listTag->signalUnSelect.bind(shared_from_this(), &appl::TagFileSelection::onCallbackCtagsListUnSelect);
m_listTag->setExpand(bvec2(true,true));
m_listTag->setFill(bvec2(true,true));
mySizerVert->subWidgetAdd(m_listTag);
}
myWidgetTitle = new ewol::widget::Label("Ctags Jump Selection ...");
if (NULL == myWidgetTitle) {
std::shared_ptr<ewol::widget::Label> myWidgetTitle;
myWidgetTitle = ewol::widget::Label::create("Ctags Jump Selection ...");
if (nullptr == myWidgetTitle) {
EWOL_ERROR("Can not allocate widget == > display might be in error");
} else {
mySizerVert->subWidgetAdd(myWidgetTitle);
@@ -102,30 +108,34 @@ appl::TagFileSelection::~TagFileSelection() {
}
void appl::TagFileSelection::onReceiveMessage(const ewol::object::Message& _msg) {
EWOL_INFO("ctags LIST ... : " << _msg );
if (_msg.getMessage() == applEventctagsSelection) {
if (m_eventNamed!="") {
generateEventId(applEventctagsSelection, m_eventNamed);
// == > Auto remove ...
autoDestroy();
}
} else if (_msg.getMessage() == applEventCtagsListSelect) {
m_eventNamed = _msg.getData();
} else if (_msg.getMessage() == applEventCtagsListUnSelect) {
m_eventNamed = "";
} else if (_msg.getMessage() == applEventCtagsListValidate) {
generateEventId(applEventctagsSelection, _msg.getData());
// == > Auto remove ...
autoDestroy();
} else if (_msg.getMessage() == applEventctagsCancel) {
generateEventId(applEventctagsCancel, "");
void appl::TagFileSelection::onCallbackCtagsSelection() {
if (m_eventNamed!="") {
signalSelect.emit(m_eventNamed);
// == > Auto remove ...
autoDestroy();
}
return;
};
}
void appl::TagFileSelection::onCallbackCtagsCancel() {
signalCancel.emit();
// == > Auto remove ...
autoDestroy();
}
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
*/
void appl::TagFileSelection::addCtagsNewItem(std::string _file, int32_t _line) {
if (NULL != m_listTag) {
if (nullptr != m_listTag) {
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 <appl/Gui/TagFileList.h>
extern const char * const applEventctagsSelection;
extern const char * const applEventctagsCancel;
namespace appl {
class TagFileSelection : public ewol::widget::PopUp {
public:
ewol::object::Signal<std::string> signalSelect;
ewol::object::Signal<void> signalCancel;
private:
ewol::object::Shared<appl::TagFileList> m_listTag;
std::shared_ptr<appl::TagFileList> m_listTag;
std::string m_eventNamed;
public:
TagFileSelection();
void init();
public:
DECLARE_FACTORY(TagFileSelection);
virtual ~TagFileSelection();
/**
* @brief add a Ctags item on the curent list
@@ -30,9 +33,12 @@ namespace appl {
* @param[in] jump line id
*/
void addCtagsNewItem(std::string file, int32_t line);
public: // herited function
void onReceiveMessage(const ewol::object::Message& _msg);
void onObjectRemove(const ewol::object::Shared<ewol::Object>& _removeObject);
public: // callback function
void onCallbackCtagsSelection();
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); \
APPL_DEBUG(comment << (float)((float)processTimeLocal / 1000.0) << "ms");
appl::TextViewer::TextViewer(const std::string& _fontName, int32_t _fontSize) :
m_displayText(_fontName, _fontSize),
static const char* const appl_Buffer_eventIsModify = "buffer-is-modify";
static const char* const appl_Buffer_eventSelectChange = "buffer-select-change";
appl::TextViewer::TextViewer() :
m_insertMode(false) {
addObjectType("appl::TextViewer");
setCanHaveFocus(true);
registerMultiCast(ednMsgBufferId);
registerMultiCast(ednMsgGuiFind);
registerMultiCast(ednMsgGuiReplace);
registerMultiCast(appl::MsgSelectGotoLine);
registerMultiCast(appl::MsgSelectNewFile);
registerMultiCast(appl::MsgSelectGotoLineSelect);
setLimitScrolling(0.2);
setSingleFinger(false);
// load buffer manager:
m_bufferManager = appl::BufferManager::keep();
m_viewerManager = appl::ViewerManager::keep();
m_bufferManager = appl::BufferManager::create();
m_pluginManager = appl::textPluginManager::create();
m_viewerManager = appl::ViewerManager::create();
// 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 ...
m_colorBackground = m_paintingProperties->request("CODE_basicBackgroung");
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_colorSelection = m_paintingProperties->request("SelectedText");
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 ...
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::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() {
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
return "";
}
std::string filename = m_buffer->getFileName();
@@ -109,7 +176,7 @@ void appl::TextViewer::onRegenerateDisplay() {
m_displayDrawing.setColor((*m_paintingProperties)[m_colorBackground].getForeground());
m_displayDrawing.rectangleWidth(m_size);
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
m_maxSize.setX(256);
m_maxSize.setY(256);
m_displayText.setTextAlignement(10, m_size.x()-20, ewol::compositing::alignLeft);
@@ -138,7 +205,7 @@ void appl::TextViewer::onRegenerateDisplay() {
vec3 tmpCursorPosition(0, 0, -1);
float tmpCursorLenght = -1.0;
// real display ...
m_displayText.setColor(etk::Color<>(0, 0, 0, 256));
m_displayText.setColor(etk::Color<>(0, 0, 0, 255));
float countNbLine = 1;
int32_t countColomn = 0;
// the siplay string :
@@ -204,7 +271,7 @@ void appl::TextViewer::onRegenerateDisplay() {
appl::DisplayHLData displayLocalSyntax;
m_buffer->hightlightGenerateLines(displayLocalSyntax, startingIt, (m_size.y()/tmpLetterSize.y()) + 5);
float maxSizeX = 0;
appl::HighlightInfo * HLColor = NULL;
appl::HighlightInfo * HLColor = nullptr;
bool DisplayCursorAndSelection = isSelectedLast();
appl::Buffer::Iterator it;
for (it = startingIt;
@@ -220,12 +287,12 @@ void appl::TextViewer::onRegenerateDisplay() {
if (*it == u32char::Return) {
countNbLine += 1;
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 ...
if (DisplayCursorAndSelection == true) {
if (it >= selectPosStart && it < selectPosStop) {
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.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);
bool haveBackground = false;
if ( HLColor != NULL
&& HLColor->patern != NULL) {
if ( HLColor != nullptr
&& HLColor->patern != nullptr) {
m_displayText.setColor(HLColor->patern->getColorGlyph().getForeground());
m_displayText.setColorBg(HLColor->patern->getColorGlyph().getBackground());
haveBackground = HLColor->patern->getColorGlyph().haveBackground();
@@ -281,7 +348,7 @@ void appl::TextViewer::onRegenerateDisplay() {
tmpCursorPosition = m_displayText.getPos();
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 ...
if ( tmpCursorPosition.z() != -1
&& getFocus() == true) {
@@ -313,11 +380,11 @@ void appl::TextViewer::onRegenerateDisplay() {
}
bool appl::TextViewer::onEventEntry(const ewol::event::Entry& _event) {
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
return false;
}
// First call plugin
if (appl::textPluginManager::onEventEntry(*this, _event) == true) {
if (m_pluginManager->onEventEntry(*this, _event) == true) {
markToRedraw();
return true;
}
@@ -429,7 +496,7 @@ bool appl::TextViewer::onEventInput(const ewol::event::Input& _event) {
keepFocus();
}
//tic();
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
return false;
}
// First call the scrolling widget :
@@ -439,7 +506,7 @@ bool appl::TextViewer::onEventInput(const ewol::event::Input& _event) {
}
APPL_VERBOSE("event : " << _event);
// Second call plugin
if (appl::textPluginManager::onEventInput(*this, _event) == true) {
if (m_pluginManager->onEventInput(*this, _event) == true) {
markToRedraw();
return true;
}
@@ -456,9 +523,9 @@ bool appl::TextViewer::onEventInput(const ewol::event::Input& _event) {
}
if ( _event.getId() == 12
&& _event.getStatus() == ewol::key::statusSingle) {
APPL_DEBUG("kjhkjhkjh");
APPL_TODO("RAT5 SAVE button ==> TODO implement");
// Rat5 save event
sendMultiCast(ednMsgGuiSave, "current");
//sendMultiCast(ednMsgGuiSave, "current");
return true;
}
// 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) {
if (m_buffer != NULL) {
if (m_buffer != nullptr) {
std::string data = ewol::context::clipBoard::get(_clipboardID);
write(data);
}
markToRedraw();
}
void appl::TextViewer::onReceiveMessage(const ewol::object::Message& _msg) {
ewol::widget::WidgetScrolled::onReceiveMessage(_msg);
APPL_VERBOSE("receive msg: " << _msg);
// First call plugin
if (appl::textPluginManager::onReceiveMessageViewer(*this, _msg) == true) {
markToRedraw();
return;
}
// event needed even if selection of buffer is not done ...
if (_msg.getMessage() == appl::Buffer::eventIsModify) {
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::onCallbackIsModify() {
markToRedraw();
}
void appl::TextViewer::onCallbackSelectChange() {
markToRedraw();
}
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() {
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
void appl::TextViewer::updateScrolling() {
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
return;
}
vec2 realCursorPosition(0,0);
@@ -760,11 +748,11 @@ void appl::TextViewer::updateScrolling() {
}
bool appl::TextViewer::moveCursor(const appl::Buffer::Iterator& _pos) {
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
return false;
}
markToRedraw();
if (appl::textPluginManager::onCursorMove(*this, _pos) == true) {
if (m_pluginManager->onCursorMove(*this, _pos) == true) {
updateScrolling();
return true;
}
@@ -774,7 +762,7 @@ bool appl::TextViewer::moveCursor(const appl::Buffer::Iterator& _pos) {
}
bool appl::TextViewer::write(const std::string& _data) {
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
return false;
}
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) {
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
return false;
}
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...
updateScrolling();
return true;
}
bool ret = m_buffer->write(_data, _pos);
appl::textPluginManager::onCursorMove(*this, m_buffer->cursor());
m_pluginManager->onCursorMove(*this, m_buffer->cursor());
updateScrolling();
return ret;
}
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;
}
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...
updateScrolling();
return true;
}
bool ret = m_buffer->replace(_data, _pos, _posEnd);
appl::textPluginManager::onCursorMove(*this, m_buffer->cursor());
m_pluginManager->onCursorMove(*this, m_buffer->cursor());
updateScrolling();
return ret;
}
bool appl::TextViewer::replace(const std::string& _data) {
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
return false;
}
if (m_buffer->hasTextSelected() == false) {
@@ -826,7 +814,7 @@ bool appl::TextViewer::replace(const std::string& _data) {
}
void appl::TextViewer::remove() {
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
return;
}
if (m_buffer->hasTextSelected() == false) {
@@ -834,17 +822,17 @@ void appl::TextViewer::remove() {
return;
}
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;
}
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) {
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
return;
}
markToRedraw();
@@ -867,7 +855,7 @@ void appl::TextViewer::moveCursorRight(appl::TextViewer::moveMode _mode) {
}
void appl::TextViewer::moveCursorLeft(appl::TextViewer::moveMode _mode) {
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
return;
}
markToRedraw();
@@ -890,7 +878,7 @@ void appl::TextViewer::moveCursorLeft(appl::TextViewer::moveMode _mode) {
}
void appl::TextViewer::moveCursorUp(uint32_t _nbLine) {
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
return;
}
markToRedraw();
@@ -916,7 +904,7 @@ void appl::TextViewer::moveCursorUp(uint32_t _nbLine) {
}
void appl::TextViewer::moveCursorDown(uint32_t _nbLine) {
if (m_buffer == NULL) {
if (m_buffer == nullptr) {
return;
}
markToRedraw();
@@ -996,14 +984,14 @@ float appl::TextViewer::getScreenSize(const appl::Buffer::Iterator& _startLinePo
}
void appl::TextViewer::setCurrentSelect() {
if (m_viewerManager != NULL) {
m_viewerManager->setViewerSelected(this, m_buffer);
if (m_viewerManager != nullptr) {
m_viewerManager->setViewerSelected(std::dynamic_pointer_cast<appl::TextViewer>(shared_from_this()), m_buffer);
}
}
bool appl::TextViewer::isSelectedLast() {
if (m_viewerManager != NULL) {
return m_viewerManager->isLastSelected(this);
if (m_viewerManager != nullptr) {
return m_viewerManager->isLastSelected(std::dynamic_pointer_cast<appl::TextViewer>(shared_from_this()));
}
return false;
}

View File

@@ -22,9 +22,10 @@
#include <utility>
namespace appl {
class textPluginManager;
class TextViewer : public ewol::widget::WidgetScrolled {
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_colorSpace;
int32_t m_colorTabulation;
@@ -33,25 +34,29 @@ namespace appl {
int32_t m_colorSelection;
int32_t m_colorNormal;
private:
ewol::object::Shared<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::BufferManager> m_bufferManager; //!< 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:
TextViewer(const std::string& _fontName="", int32_t _fontSize=-1);
DECLARE_FACTORY(TextViewer);
virtual ~TextViewer();
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:
/**
* @brief Get the buffer property (only for the class : template <typename TYPE> class TextViewerPluginData)
* @return pointer on buffer
*/
ewol::object::Shared<appl::Buffer> internalGetBuffer() {
std::shared_ptr<appl::Buffer> internalGetBuffer() {
return m_buffer;
}
private:
ewol::compositing::Text m_displayText; //!< Text display properties.
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:
void setFontSize(int32_t _size);
void setFontName(const std::string& _fontName);
@@ -60,8 +65,6 @@ namespace appl {
public: // Derived function
virtual bool calculateMinSize();
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 onEventEntry(const ewol::event::Entry& _event);
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);
bool replace(const std::u32string& _data) {
return replace(std::to_string(_data));
return replace(etk::to_string(_data));
}
/**
* @brief Remove selected data ...
@@ -95,7 +98,7 @@ namespace appl {
* @brief Remove selected data ... (No plugin call)
*/
void removeDirect() {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return;
}
m_buffer->removeSelection();
@@ -108,7 +111,7 @@ namespace appl {
* @return true of no error occured.
*/
bool copy(std::string& _data) {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return false;
}
return m_buffer->copy(_data);
@@ -120,7 +123,7 @@ namespace appl {
* @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) {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return;
}
m_buffer->copy(_data, _pos, _posEnd);
@@ -132,7 +135,7 @@ namespace appl {
* @return true if the write is done corectly
*/
bool writeDirect(const std::string& _data, const appl::Buffer::Iterator& _pos) {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return false;
}
bool ret = m_buffer->write(_data, _pos);
@@ -147,7 +150,7 @@ namespace appl {
* @return true if the write is done corectly
*/
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;
}
bool ret = m_buffer->replace(_data, _pos, _posEnd);
@@ -208,14 +211,14 @@ namespace appl {
* @return true if a display buffer is present, false otherwise.
*/
virtual bool hasBuffer() {
return m_buffer != NULL;
return m_buffer != nullptr;
}
/**
* @brief Get the status of selection.
* @return true if we have a current selection, false otherwise.
*/
virtual bool hasTextSelected() {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return false;
}
return m_buffer->hasTextSelected();
@@ -224,7 +227,7 @@ namespace appl {
* @brief Remove Selection of the buffer.
*/
virtual void unSelect() {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return;
}
m_buffer->unSelect();
@@ -235,7 +238,7 @@ namespace appl {
* @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) {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return;
}
moveCursor(_stop);
@@ -255,7 +258,7 @@ namespace appl {
appl::Buffer::Iterator& _resultStart,
appl::Buffer::Iterator& _resultStop,
bool _caseSensitive = true) {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return false;
}
bool ret = m_buffer->search(_pos, _search, _resultStart, _caseSensitive);
@@ -278,7 +281,7 @@ namespace appl {
appl::Buffer::Iterator& _resultStart,
appl::Buffer::Iterator& _resultStop,
bool _caseSensitive = true) {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return false;
}
bool ret = m_buffer->searchBack(_pos, _search, _resultStart, _caseSensitive);
@@ -297,7 +300,7 @@ namespace appl {
bool getPosAround(const appl::Buffer::Iterator& _pos,
appl::Buffer::Iterator &_beginPos,
appl::Buffer::Iterator &_endPos) {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return false;
}
return m_buffer->getPosAround(_pos, _beginPos, _endPos);
@@ -308,7 +311,7 @@ namespace appl {
* @return The Iterator
*/
appl::Buffer::Iterator position(int64_t _pos) {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return appl::Buffer::Iterator();
}
return m_buffer->position(_pos);
@@ -318,7 +321,7 @@ namespace appl {
* @return The iterator on the cursor position
*/
appl::Buffer::Iterator cursor() {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return appl::Buffer::Iterator();
}
return m_buffer->cursor();
@@ -328,7 +331,7 @@ namespace appl {
* @return The iterator on the begin position
*/
appl::Buffer::Iterator begin() {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return appl::Buffer::Iterator();
}
return m_buffer->begin();
@@ -338,7 +341,7 @@ namespace appl {
* @return The iterator on the end position
*/
appl::Buffer::Iterator end() {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return appl::Buffer::Iterator();
}
return m_buffer->end();
@@ -348,7 +351,7 @@ namespace appl {
* @return The Iterator
*/
appl::Buffer::Iterator selectStart() {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return appl::Buffer::Iterator();
}
return m_buffer->selectStart();
@@ -358,7 +361,7 @@ namespace appl {
* @return The Iterator
*/
appl::Buffer::Iterator selectStop() {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return appl::Buffer::Iterator();
}
return m_buffer->selectStop();
@@ -369,7 +372,7 @@ namespace appl {
* @return The position in the buffer of the start of the line.
*/
appl::Buffer::Iterator getStartLine(const appl::Buffer::Iterator& _pos) {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return appl::Buffer::Iterator();
}
return m_buffer->getStartLine(_pos);
@@ -380,7 +383,7 @@ namespace appl {
* @return The position in the buffer of the end of the line.
*/
appl::Buffer::Iterator getEndLine(const appl::Buffer::Iterator& _pos) {
if (m_buffer==NULL) {
if (m_buffer==nullptr) {
return appl::Buffer::Iterator();
}
return m_buffer->getEndLine(_pos);
@@ -389,21 +392,31 @@ namespace appl {
* @brief Register of the arrival of a Multicast message
* @param[in] _messageId Event Id waiting for...
*/
// TODO : Remove
void ext_registerMultiCast(const char* const _messageId) {
registerMultiCast(_messageId);
//registerMultiCast(_messageId);
}
/**
* @brief add a specific shortcut with his description
* @param[in] _descriptiveString Description string of the shortcut
* @param[in] _generateEventId Event generic of the element
* @param[in] _data Associate data wit the event
* @param[in] _generateEventName Event generic of the element
*/
virtual void ext_shortCutAdd(const char * _descriptiveString,
const char * _generateEventId,
std::string _data="",
bool _broadcast=false) {
shortCutAdd(_descriptiveString, _generateEventId, _data, _broadcast);
virtual void ext_shortCutAdd(const std::string& _descriptiveString,
const std::string& _generateEventName) {
shortCutAdd(_descriptiveString, _generateEventName);
}
/**
* @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__
#define __class__ "ViewerManager"
appl::ViewerManager::ViewerManager() :
ewol::Resource("???ViewerManager???"),
m_viewer(NULL) {
appl::ViewerManager::ViewerManager() {
addObjectType("appl::ViewerManager");
// 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() {
}
bool appl::ViewerManager::isLastSelected(const ewol::object::Shared<appl::TextViewer>& _viewer) {
return m_viewer == _viewer;
bool appl::ViewerManager::isLastSelected(const std::shared_ptr<appl::TextViewer>& _viewer) {
return m_viewer.lock() == _viewer;
}
void appl::ViewerManager::setViewerSelected(const ewol::object::Shared<appl::TextViewer>& _viewer, const ewol::object::Shared<appl::Buffer>& _buffer) {
if (m_viewer == _viewer) {
void appl::ViewerManager::setViewerSelected(const std::shared_ptr<appl::TextViewer>& _viewer, const std::shared_ptr<appl::Buffer>& _buffer) {
if (m_viewer.lock() == _viewer) {
return;
}
m_viewer = _viewer;
if (m_bufferManager != NULL) {
m_bufferManager->setBufferSelected(_buffer);
if (m_bufferManager != nullptr) {
//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 {
protected:
ViewerManager();
void init(const std::string& _uniqueName);
public:
DECLARE_RESOURCE_SINGLE_FACTORY(ViewerManager, "???ViewerManager???");
virtual ~ViewerManager();
private:
ewol::object::Shared<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
ewol::object::Shared<appl::TextViewer> m_viewer;
std::shared_ptr<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
std::weak_ptr<appl::TextViewer> m_viewer;
public:
/**
* @brief Set the current buffer 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
* @return Pointer on the buffer selected
*/
ewol::object::Shared<appl::TextViewer> getViewerSelected() {
return m_viewer;
std::shared_ptr<appl::TextViewer> getViewerSelected() {
return m_viewer.lock();
};
/**
* @breif Check if the element is the last request selection
* @param[in] _viewer element selected.
* @return true if the element is selected
*/
bool isLastSelected(const ewol::object::Shared<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();
bool isLastSelected(const std::shared_ptr<appl::TextViewer>& _viewer);
};
};

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -10,6 +10,7 @@
#include <appl/global.h>
#include <appl/Highlight.h>
#include <exml/exml.h>
#include <ewol/ewol.h>
#include <ewol/resource/Manager.h>
@@ -24,23 +25,15 @@
//#define HL2_DEBUG APPL_INFO
#define HL2_DEBUG APPL_VERBOSE
void appl::Highlight::parseRules(exml::Element* _child,
std::vector<std::unique_ptr<HighlightPattern>>& _mListPatern,
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() {
addObjectType("appl::Highlight");
}
appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _colorFile) :
ewol::Resource(_xmlFilename),
m_typeName("") {
addObjectType("appl::Highlight");
void appl::Highlight::init(const std::string& _xmlFilename, const std::string& _colorFile) {
ewol::Resource::init(_xmlFilename);
// keep color propertiy file :
m_paintingProperties = appl::GlyphPainting::keep(_colorFile);
m_paintingProperties = appl::GlyphPainting::create(_colorFile);
exml::Document doc;
if (doc.load(_xmlFilename) == false) {
@@ -48,7 +41,7 @@ appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _
return;
}
exml::Element* root = doc.getNamed("EdnLang");
if (NULL == root ) {
if (nullptr == root ) {
APPL_ERROR("(l ?) main node not find: \"EdnLang\" ...");
return;
}
@@ -58,7 +51,7 @@ appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _
// parse all the elements :
for(size_t iii = 0; iii < root->size(); ++iii) {
exml::Element* child = root->getElement(iii);
if (child == NULL) {
if (child == nullptr) {
// trash here all that is not element ...
continue;
}
@@ -72,27 +65,51 @@ appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _
// get sub Nodes ...
for(size_t jjj=0; jjj< child->size(); jjj++) {
exml::Element* passChild = child->getElement(jjj);
if (passChild == NULL) {
if (passChild == nullptr) {
continue;
}
if (passChild->getValue() != "rule") {
APPL_ERROR("(l "<< passChild->getPos() << ") node not suported : \""<< passChild->getValue() << "\" must be [rule]" );
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") {
// get sub Nodes ...
for(size_t jjj=0; jjj< child->size(); jjj++) {
exml::Element* passChild = child->getElement(jjj);
if (passChild == NULL) {
if (passChild == nullptr) {
continue;
}
if (passChild->getValue() != "rule") {
APPL_ERROR("(l "<< passChild->getPos() << ") node not suported : \""<< passChild->getValue() << "\" must be [rule]" );
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 {
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();
}
bool appl::Highlight::hasExtention(const std::string& _ext) {
bool appl::Highlight::isCompatible(const std::string& _name) {
for (auto &it : m_listExtentions) {
APPL_VERBOSE(" check : " << it << "=?=" << _ext);
if ( it == "*." + _ext
|| it == _ext) {
return true;
APPL_VERBOSE(" check : " << it << "=?=" << _name);
std::regex expression;
try {
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;
}
@@ -147,13 +179,20 @@ void appl::Highlight::display() {
}
// display all elements
for (auto &it : m_listHighlightPass1) {
APPL_INFO(" Pass 1 : " << it->getName() );
//m_listHighlightPass1[iii]->display();
APPL_INFO(" Pass 1 : " << it.getName() );
//it.display();
}
// display all elements
for (auto &it : m_listHighlightPass2) {
APPL_INFO(" pass 2 : " << it->getName() );
//m_listHighlightPass2[iii]->display();
APPL_INFO(" pass 2 : " << it.getName() );
//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,
std::vector<appl::HighlightInfo> & _metaData,
int64_t _addingPos,
etk::Buffer & _buffer) {
std::string& _buffer) {
if (0 > _addingPos) {
_addingPos = 0;
}
@@ -172,27 +211,37 @@ void appl::Highlight::parse(int64_t _start,
int64_t elementStart = _start;
int64_t elementStop = _stop;
appl::HighlightInfo resultat;
int64_t startTime = ewol::getTime();
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
for (int64_t jjj=0; jjj<(int64_t)m_listHighlightPass1.size(); jjj++){
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)
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) {
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...
int64_t kkk=_addingPos;
while(kkk < (int64_t)_metaData.size() ) {
if (_metaData[kkk].beginStart <= resultat.endStop) {
if (_metaData[kkk].start <= resultat.stop) {
// remove element
HL_DEBUG("Erase element=" << kkk);
_metaData.erase(_metaData.begin()+kkk, _metaData.begin()+kkk+1);
// Increase the end of search
if (kkk < (int64_t)_metaData.size()) {
// just befor the end of the next element
elementStop = _metaData[kkk].beginStart-1;
// just before the end of the next element
elementStop = _metaData[kkk].start-1;
} else {
// end of the buffer
elementStop = _buffer.size();
@@ -204,9 +253,9 @@ void appl::Highlight::parse(int64_t _start,
}
// add curent element in the list ...
_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
elementStart = resultat.endStop-1;
elementStart = resultat.stop-1;
// increment the position of insertion:
_addingPos++;
// 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 ...).
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
*
* @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,
int64_t _stop,
std::vector<appl::HighlightInfo> &_metaData,
etk::Buffer &_buffer) {
std::string&_buffer) {
HL2_DEBUG("Parse element 0 => " << m_listHighlightPass2.size() <<
" == > position search: (" << _start << "," << _stop << ")" );
int64_t elementStart = _start;
@@ -234,20 +291,21 @@ void appl::Highlight::parse2(int64_t _start,
appl::HighlightInfo resultat;
while (elementStart < elementStop) {
if (elementStart == 306) {
//etk::log::setLevel(etk::log::logLevelVerbose);
}
//HL2_DEBUG("Parse element in the buffer pos=" << elementStart << "," << _buffer.size() << ")" );
//try to fond the HL in ALL of we have
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: (" <<
_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)
ret = m_listHighlightPass2[jjj]->find(elementStart, elementStop, resultat, _buffer);
if (HLP_FIND_ERROR != ret) {
HL2_DEBUG("Find Pattern in the Buffer : (" << resultat.beginStart << "," << resultat.endStop << ")" );
// add curent element in the list ...
ret = m_listHighlightPass2[jjj].find(elementStart, elementStop, resultat, _buffer);
if (ret != HLP_FIND_ERROR) {
_metaData.push_back(resultat);
elementStart = resultat.endStop-1;
// Exit current cycle
elementStart = resultat.stop-1;
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 << "\"");
ewol::object::Shared<appl::Highlight> object = ewol::dynamic_pointer_cast<appl::Highlight>(getManager().localKeep(_filename));
if (NULL != object) {
return object;
/**
* @brief second pass of the hightlight pattern (have found something before)
* @param[in] _upper upper pattern to find the data
* @param[out] _metaData Output list of all find patern
* @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 << "\"");
// this element create a new one every time ....
object = ewol::object::makeShared(new appl::Highlight(_filename, "THEME:COLOR:textViewer.json"));
if (NULL == object) {
EWOL_ERROR("allocation error of a resource : ??Highlight??");
return NULL;
HL2_DEBUG("Parse element 0 => " << m_listHighlightNamed.size() <<
" == > position search: (" << _upper.start << "," << _upper.stop << ")" );
int64_t elementStart = _upper.start;
int64_t elementStop = _upper.stop;
appl::HighlightInfo resultat;
// Find element in the list:
auto itHL = m_listHighlightNamed.find(_upper.patern->getSubPatternName());
if (itHL == m_listHighlightNamed.end()) {
APPL_ERROR("Patern does not exist : " << _upper.patern->getSubPatternName() << " note : Removing it ...");
_upper.patern->setSubPatternName("");
return;
}
getManager().localAdd(object);
return object;
}
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 {
public:
int32_t beginStart;
int32_t beginStop;
int32_t endStart;
int32_t endStop;
int32_t start;
int32_t stop;
bool notEnded;
appl::HighlightPattern* patern; // pointer on class :
appl::HighlightPattern* patern;
};
};
@@ -35,47 +33,46 @@ namespace appl {
namespace appl {
class Highlight : public ewol::Resource {
private:
ewol::object::Shared<appl::GlyphPainting> m_paintingProperties;
protected:
// Constructeur
Highlight(const std::string& _xmlFilename, const std::string& _colorFile);
std::shared_ptr<appl::GlyphPainting> m_paintingProperties;
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();
private:
std::string m_typeName; //!< descriptive string type like "C/C++"
public:
/**
* @brief Get the Type of the Hightlight like c++/Bash/...
* @return descriptive string
*/
const std::string& getTypeName() {
return m_typeName;
}
public:
bool hasExtention(const std::string& _ext);
bool isCompatible(const std::string& _name);
bool fileNameCompatible(const std::string& _fileName);
void display();
void parse(int64_t _start,
int64_t _stop,
std::vector<appl::HighlightInfo> &_metaData,
std::vector<appl::HighlightInfo>& _metaData,
int64_t _addingPos,
etk::Buffer &_buffer);
std::string& _buffer);
void parse2(int64_t _start,
int64_t _stop,
std::vector<appl::HighlightInfo> &_metaData,
etk::Buffer &_buffer);
std::vector<appl::HighlightInfo>& _metaData,
std::string& _buffer);
void parseSubElement(const appl::HighlightInfo& _upper,
std::vector<appl::HighlightInfo>& _metaData,
std::string &_buffer);
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::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<std::unique_ptr<HighlightPattern>> m_listHighlightPass2; //!< List of ALL hightlight modules (pass 2 == > When we display the buffer( only the display area (100 lines)) )
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::Highlight> keep(const std::string& _filename);
std::vector<HighlightPattern> m_listHighlightPass1; //!< List of ALL hightlight modules (pass 1 == > when we load and wride data on the buffer)
std::vector<HighlightPattern> m_listHighlightPass2; //!< List of ALL hightlight modules (pass 2 == > When we display the buffer( only the display area (100 lines)) )
std::map<std::string, std::vector<HighlightPattern>> m_listHighlightNamed; //!< list of all sub partern to parse...
public: // herited function :
virtual void updateContext() {
// no upfate to do ...

View File

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

View File

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

View File

@@ -13,63 +13,59 @@
#undef __class__
#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_paternName(""),
m_regExpStart(nullptr),
m_regExpStop(nullptr),
m_hasParsingError(true),
m_regexValue(""),
m_regExp(),
m_colorName(""),
m_escapeChar(u32char::Null),
m_multiline(false),
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() {
}
void appl::HighlightPattern::setPaternStart(std::string& _regExp) {
if (m_regExpStart == NULL) {
return;
}
m_regExpStart->compile(_regExp);
}
void appl::HighlightPattern::setPaternStop(std::string& _regExp) {
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::setPatern(const std::string& _regExp) {
m_regexValue = _regExp;
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);
}
}
void appl::HighlightPattern::setEscapeChar(const char32_t& _EscapeChar) {
m_escapeChar = _EscapeChar;
std::string appl::HighlightPattern::getPaternString() {
return m_regexValue;
}
void appl::HighlightPattern::setColorGlyph(std::string& _colorName) {
void appl::HighlightPattern::setColorGlyph(const std::string& _colorName) {
m_colorName = _colorName;
m_colorId = m_glyphPainting->request(m_colorName);
APPL_VERBOSE("Resuest color name '" << m_colorName << "' => id=" << m_colorId);
}
void appl::HighlightPattern::display() {
APPL_INFO("patern : \"" << m_paternName << "\" level=" << m_level );
APPL_INFO(" == > colorName \"" << m_colorName << "\"");
APPL_INFO(" == > regExpStart \"" << m_regExpStart->getRegExp() << "\"");
if (m_regExpStop != NULL) {
APPL_INFO(" == > regExpStop \"" << m_regExpStop->getRegExp() << "\"");
}
if (m_multiline == true) {
APPL_INFO(" == > multiline pattern: YES");
} else {
APPL_INFO(" == > multiline pattern: NO");
}
APPL_INFO("patern : '" << m_paternName << "' level=" << m_level );
APPL_INFO(" == > colorName '" << m_colorName << "'");
//APPL_INFO(" == > regExp '" << m_regExp.getRegExp() << "'");
APPL_INFO(" == > regex '" << m_regexValue << "'");
}
void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level) {
@@ -77,13 +73,12 @@ void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level) {
/*
<rule name="my preprocesseur">
<color>preprocesseur</color>
<start>#</start>
<end>$</end>
<multiline>yes</multiline>
<regex>#</regex>
<sub>namexxx</sub>
</rule>
*/
//--------------------------------------------------------------------------------------------
// process attribute
// process attribute
std::string highLightName = _child->getAttribute("name");
std::string myEdnDataTmp = "???";
if (highLightName.size()!=0) {
@@ -93,83 +88,83 @@ void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level) {
setLevel(_level);
exml::Element* xChild = _child->getNamed("color");
if (NULL != xChild) {
if (nullptr != xChild) {
std::string myData = xChild->getText();
if (myData.size() != 0) {
//APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData);
std::string myEdnData = myData;
setColorGlyph(myEdnData);
setColorGlyph(myData);
}
}
xChild = _child->getNamed("start");
if (NULL != xChild) {
xChild = _child->getNamed("regex");
if (nullptr != xChild) {
std::string myData = xChild->getText();
if (myData.size() != 0) {
//APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData);
std::string myEdnData = myData;
setPaternStart(myEdnData);
setPatern(myData);
}
}
xChild = _child->getNamed("end");
if (NULL != xChild) {
xChild = _child->getNamed("sub");
if (nullptr != xChild) {
std::string myData = xChild->getText();
if (myData.size() != 0) {
//APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData);
std::string myEdnData = 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]);
setSubPatternName(myData);
}
}
}
enum resultFind appl::HighlightPattern::find(int32_t _start,
int32_t _stop,
appl::HighlightInfo& _resultat,
etk::Buffer& _buffer) {
int32_t _stop,
appl::HighlightInfo& _resultat,
const std::string& _buffer) {
//APPL_DEBUG(" try to find the element");
_resultat.beginStart = -1;
_resultat.beginStop = -1;
_resultat.endStart = -1;
_resultat.endStop = -1;
_resultat.start = -1;
_resultat.stop = -1;
_resultat.notEnded = false;
_resultat.patern = this;
if (m_hasParsingError == true) {
return HLP_FIND_ERROR;
}
// when we have only one element:
if (m_regExpStop == NULL) {
if (true == m_regExpStart->processOneElement(_buffer, _start, _stop)) {
_resultat.beginStart = m_regExpStart->start();
_resultat.beginStop = m_regExpStart->stop();
_resultat.endStart = m_regExpStart->start();
_resultat.endStop = m_regExpStart->stop();
return HLP_FIND_OK;
std::smatch resultMatch;
std::regex_constants::match_flag_type flags = std::regex_constants::match_continuous; // check only the match at the first character.
//APPL_DEBUG("find data at : start=" << _start << " stop=" << _stop << " regex='" << m_regexValue << "'");
if ((int64_t)_stop <= (int64_t)_buffer.size()) {
char val = _buffer[_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;
}
//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;
if (_start>0) {
flags |= std::regex_constants::match_prev_avail;
}
_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();
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;
} 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;
}

View File

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

View File

@@ -8,6 +8,7 @@
#include <appl/TextPlugin.h>
#include <appl/TextPluginManager.h>
#include <appl/debug.h>
#undef __class__
@@ -21,9 +22,23 @@ appl::TextViewerPlugin::TextViewerPlugin() :
m_activateOnWrite(false),
m_activateOnReplace(false),
m_activateOnRemove(false),
m_activateOnReceiveMessage(false),
m_activateOnReceiveShortCut(false),
m_activateOnCursorMove(false) {
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() {
@@ -31,7 +46,7 @@ appl::TextViewerPlugin::~TextViewerPlugin() {
return;
}
m_isEnable = false;
onPluginDisable();
onPluginGlobalDisable();
}
void appl::TextViewerPlugin::setEnableStatus(bool _status) {
@@ -40,9 +55,9 @@ void appl::TextViewerPlugin::setEnableStatus(bool _status) {
}
m_isEnable = _status;
if (m_isEnable == true) {
onPluginEnable();
onPluginGlobalEnable();
} else {
onPluginDisable();
onPluginGlobalDisable();
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -17,114 +17,120 @@
namespace appl {
template <typename TYPE> class TextViewerPluginData : public appl::TextViewerPlugin {
public:
protected:
TextViewerPluginData() {
// nothing to do ...
addObjectType("appl::TextViewerPluginData");
}
void init() {
appl::TextViewerPlugin::init();
}
void init(const std::string& _name) {
appl::TextViewerPlugin::init(_name);
}
public:
DECLARE_FACTORY(TextViewerPluginData);
virtual ~TextViewerPluginData() {
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);
delete(m_specificData[iii].second);
m_specificData[iii].second = NULL;
m_specificData[iii].second = nullptr;
}
}
m_specificData.clear();
}
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:
TYPE* getDataRef(appl::TextViewer& _textDrawer) {
for (size_t iii = 0; iii < m_specificData.size() ; ++iii) {
if (m_specificData[iii].first == _textDrawer.internalGetBuffer()) {
return m_specificData[iii].second;
auto it = m_specificData.begin();
while(it != m_specificData.end()) {
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();
if (data == NULL) {
return NULL;
if (data == nullptr) {
return nullptr;
}
m_specificData.push_back(std::make_pair(_textDrawer.internalGetBuffer(), data));
// create a new one ...
return data;
}
protected: // Wrap all element with their internal data: (do not use theses function)
bool onReceiveMessageViewer(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg) {
bool onReceiveShortCut(appl::TextViewer& _textDrawer,
const std::string& _shortCutName) {
TYPE* data = getDataRef(_textDrawer);
if (data == NULL) {
if (data == nullptr) {
return false;
}
return onReceiveMessageViewer(_textDrawer, _msg, *data);
return onDataReceiveShortCut(_textDrawer, _shortCutName, *data);
}
bool onWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _data) {
TYPE* data = getDataRef(_textDrawer);
if (data == NULL) {
if (data == nullptr) {
return false;
}
return onWrite(_textDrawer, _pos, _data, *data);
return onDataWrite(_textDrawer, _pos, _data, *data);
}
bool onReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _data,
const appl::Buffer::Iterator& _posEnd) {
TYPE* data = getDataRef(_textDrawer);
if (data == NULL) {
if (data == nullptr) {
return false;
}
return onReplace(_textDrawer, _pos, _data, _posEnd, *data);
return onDataReplace(_textDrawer, _pos, _data, _posEnd, *data);
}
bool onRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd) {
TYPE* data = getDataRef(_textDrawer);
if (data == NULL) {
if (data == nullptr) {
return false;
}
return onRemove(_textDrawer, _pos, _posEnd, *data);
return onDataRemove(_textDrawer, _pos, _posEnd, *data);
}
public:
virtual bool onReceiveMessageViewer(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg,
TYPE& _data) {
virtual bool onDataReceiveShortCut(appl::TextViewer& _textDrawer,
const std::string& _shortCutName,
TYPE& _data) {
return false;
}
virtual bool onWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _strData,
TYPE& _data) {
virtual bool onDataWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _strData,
TYPE& _data) {
return false;
}
virtual bool onReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _strData,
const appl::Buffer::Iterator& _posEnd,
TYPE& _data) {
virtual bool onDataReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _strData,
const appl::Buffer::Iterator& _posEnd,
TYPE& _data) {
return false;
}
virtual bool onRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd,
TYPE& _data) {
virtual bool onDataRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd,
TYPE& _data) {
return false;
}
virtual void remove(TYPE& _data) {
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__
#define __class__ "TextPluginHistory"
appl::TextPluginHistory::TextPluginHistory() {
m_activateOnReceiveMessage = true;
appl::TextPluginHistory::TextPluginHistory() :
m_menuIdTitle(-1),
m_menuIdUndo(-1),
m_menuIdRedo(-1) {
m_activateOnReceiveShortCut = true;
m_activateOnWrite = true;
m_activateOnReplace = true;
m_activateOnRemove = true;
addObjectType("appl::TextPluginHistory");
}
void appl::TextPluginHistory::init() {
appl::TextViewerPluginData<appl::PluginHistoryData>::init();
}
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 :
_textDrawer.ext_registerMultiCast(ednMsgGuiRedo);
_textDrawer.ext_registerMultiCast(ednMsgGuiUndo);
_textDrawer.ext_shortCutAdd("ctrl+z", ednMsgGuiUndo);
_textDrawer.ext_shortCutAdd("ctrl+shift+z", ednMsgGuiRedo);
_textDrawer.ext_shortCutAdd("ctrl+z", "appl::TextPluginHistory::Undo");
_textDrawer.ext_shortCutAdd("ctrl+shift+z", "appl::TextPluginHistory::Redo");
}
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,
const ewol::object::Message& _msg,
appl::PluginHistoryData& _data) {
bool appl::TextPluginHistory::onDataReceiveShortCut(appl::TextViewer& _textDrawer,
const std::string& _shortCutName,
appl::PluginHistoryData& _data) {
if (isEnable() == false) {
return false;
}
if (_msg.getMessage() == ednMsgGuiRedo) {
if (_shortCutName == "appl::TextPluginHistory::Redo") {
if (_data.m_redo.size() == 0) {
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();
return true;
}
@@ -57,11 +81,11 @@ bool appl::TextPluginHistory::onReceiveMessageViewer(appl::TextViewer& _textDraw
_textDrawer.position(tmpElement->m_endPosRemoved) );
return true;
} else if (_msg.getMessage() == ednMsgGuiUndo) {
} else if (_shortCutName == "appl::TextPluginHistory::Undo") {
if (_data.m_undo.size() == 0) {
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();
return true;
}
@@ -82,11 +106,11 @@ void appl::TextPluginHistory::clearRedo(appl::PluginHistoryData& _data) {
return;
}
for (size_t iii=0; iii<_data.m_redo.size(); ++iii) {
if (_data.m_redo[iii] == NULL) {
if (_data.m_redo[iii] == nullptr) {
continue;
}
delete(_data.m_redo[iii]);
_data.m_redo[iii] = NULL;
_data.m_redo[iii] = nullptr;
}
_data.m_redo.clear();
}
@@ -96,73 +120,79 @@ void appl::TextPluginHistory::clearUndo(appl::PluginHistoryData& _data) {
return;
}
for (size_t iii=0; iii<_data.m_undo.size(); ++iii) {
if (_data.m_undo[iii] == NULL) {
if (_data.m_undo[iii] == nullptr) {
continue;
}
delete(_data.m_undo[iii]);
_data.m_undo[iii] = NULL;
_data.m_undo[iii] = nullptr;
}
_data.m_undo.clear();
}
bool appl::TextPluginHistory::onWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _strData,
appl::PluginHistoryData& _data) {
bool appl::TextPluginHistory::onDataWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _strData,
appl::PluginHistoryData& _data) {
if (isEnable() == false) {
return false;
}
appl::History *tmpElement = new appl::History();
if (tmpElement != NULL) {
if (tmpElement != nullptr) {
tmpElement->m_addedText = _strData;
tmpElement->m_posAdded = (int64_t)_pos;
tmpElement->m_endPosRemoved = (int64_t)_pos;
}
_textDrawer.writeDirect(_strData, _pos);
if (tmpElement != NULL) {
if (tmpElement != nullptr) {
tmpElement->m_endPosAdded = (int64_t)_textDrawer.cursor();
clearRedo(_data);
_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;
}
bool appl::TextPluginHistory::onReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _strData,
const appl::Buffer::Iterator& _posEnd,
appl::PluginHistoryData& _data) {
bool appl::TextPluginHistory::onDataReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _strData,
const appl::Buffer::Iterator& _posEnd,
appl::PluginHistoryData& _data) {
if (isEnable() == false) {
return false;
}
appl::History *tmpElement = new appl::History();
if (tmpElement != NULL) {
if (tmpElement != nullptr) {
tmpElement->m_posAdded = (int64_t)_pos;
tmpElement->m_addedText = _strData;
tmpElement->m_endPosRemoved = (int64_t)_posEnd;
_textDrawer.copy(tmpElement->m_removedText, _pos, _posEnd);
}
_textDrawer.replaceDirect(_strData, _pos, _posEnd);
if (tmpElement != NULL) {
if (tmpElement != nullptr) {
tmpElement->m_endPosAdded = (int64_t)_textDrawer.cursor();
clearRedo(_data);
_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;
}
bool appl::TextPluginHistory::onRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd,
appl::PluginHistoryData& _data) {
bool appl::TextPluginHistory::onDataRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd,
appl::PluginHistoryData& _data) {
if (isEnable() == false) {
return false;
}
appl::History *tmpElement = new appl::History();
if (tmpElement != NULL) {
if (tmpElement != nullptr) {
tmpElement->m_addedText = "";
tmpElement->m_posAdded = (int64_t)_pos;
tmpElement->m_endPosAdded = tmpElement->m_posAdded;
@@ -172,15 +202,11 @@ bool appl::TextPluginHistory::onRemove(appl::TextViewer& _textDrawer,
_data.m_undo.push_back(tmpElement);
}
_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;
}
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,29 +36,36 @@ namespace appl {
std::vector<History*> m_redo; //!< History storing data
};
class TextPluginHistory : public appl::TextViewerPluginData<appl::PluginHistoryData> {
public:
private:
int32_t m_menuIdTitle;
int32_t m_menuIdUndo;
int32_t m_menuIdRedo;
protected:
TextPluginHistory();
void init();
public:
DECLARE_FACTORY(TextPluginHistory);
virtual ~TextPluginHistory() { };
private:
public:
virtual void onPluginEnable(appl::TextViewer& _textDrawer);
virtual void onPluginDisable(appl::TextViewer& _textDrawer);
virtual bool onReceiveMessageViewer(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg,
appl::PluginHistoryData& _data);
virtual bool onWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _strData,
appl::PluginHistoryData& _data);
virtual bool onReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _strData,
const appl::Buffer::Iterator& _posEnd,
appl::PluginHistoryData& _data);
virtual bool onRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd,
appl::PluginHistoryData& _data);
virtual bool onDataReceiveShortCut(appl::TextViewer& _textDrawer,
const std::string& _shortCutName,
appl::PluginHistoryData& _data);
virtual bool onDataWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _strData,
appl::PluginHistoryData& _data);
virtual bool onDataReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _strData,
const appl::Buffer::Iterator& _posEnd,
appl::PluginHistoryData& _data);
virtual bool onDataRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd,
appl::PluginHistoryData& _data);
virtual void remove(appl::PluginHistoryData& _data) {
clearRedo(_data);
clearUndo(_data);
@@ -66,8 +73,6 @@ namespace appl {
private:
void clearRedo(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__
#define __class__ "textPluginManager"
static std::list<ewol::object::Owner<appl::TextViewerPlugin>>& getList() {
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() {
appl::textPluginManager::textPluginManager() {
}
void appl::textPluginManager::unInit() {
// remove all sub plugin class:
getListOnEventEntry().clear();
getListOnEventInput().clear();
getListOnWrite().clear();
getListOnReplace().clear();
getListOnRemove().clear();
getListonReceiveMessageViewer().clear();
getListOnCursorMove().clear();
getList().clear();
void appl::textPluginManager::init(const std::string& _name) {
ewol::Resource::init(_name);
}
void appl::textPluginManager::addDefaultPlugin() {
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginCopy()));
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginMultiLineTab()));
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginAutoIndent()));
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginHistory()));
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginRmLine()));
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginSelectAll()));
appl::textPluginManager::addPlugin(ewol::object::makeShared(new appl::TextPluginCtags()));
appl::textPluginManager::addPlugin(appl::TextPluginCopy::create());
appl::textPluginManager::addPlugin(appl::TextPluginMultiLineTab::create());
appl::textPluginManager::addPlugin(appl::TextPluginAutoIndent::create());
appl::textPluginManager::addPlugin(appl::TextPluginHistory::create());
appl::textPluginManager::addPlugin(appl::TextPluginRmLine::create());
appl::textPluginManager::addPlugin(appl::TextPluginSelectAll::create());
appl::textPluginManager::addPlugin(appl::TextPluginCtags::create());
}
void appl::textPluginManager::addPlugin(const ewol::object::Shared<appl::TextViewerPlugin>& _plugin) {
if (_plugin == NULL) {
void appl::textPluginManager::addPlugin(const std::shared_ptr<appl::TextViewerPlugin>& _plugin) {
if (_plugin == nullptr) {
return;
}
getList().push_back(_plugin);
APPL_DEBUG("Add plugin : " << _plugin->getObjectType());
m_list.push_back(_plugin);
if (_plugin->isAvaillableOnEventEntry() == true) {
getListOnEventEntry().push_back(_plugin);
m_listOnEventEntry.push_back(_plugin);
}
if (_plugin->isAvaillableOnEventInput() == true) {
getListOnEventInput().push_back(_plugin);
m_listOnEventInput.push_back(_plugin);
}
if (_plugin->isAvaillableOnWrite() == true) {
getListOnWrite().push_back(_plugin);
m_listOnWrite.push_back(_plugin);
}
if (_plugin->isAvaillableOnReplace() == true) {
getListOnReplace().push_back(_plugin);
m_listOnReplace.push_back(_plugin);
}
if (_plugin->isAvaillableOnRemove() == true) {
getListOnRemove().push_back(_plugin);
m_listOnRemove.push_back(_plugin);
}
if (_plugin->isAvaillableOnReceiveMessage() == true) {
getListonReceiveMessageViewer().push_back(_plugin);
if (_plugin->isAvaillableOnReceiveShortCut() == true) {
m_listOnReceiveShortCutViewer.push_back(_plugin);
}
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) {
for (auto &it : getList()) {
if (it == NULL) {
m_currentViewer = std::dynamic_pointer_cast<appl::TextViewer>(_widget.shared_from_this());
for (auto &it : m_list) {
if (it == nullptr) {
continue;
}
it->onPluginEnable(_widget);
@@ -116,8 +80,9 @@ void appl::textPluginManager::connect(appl::TextViewer& _widget) {
}
void appl::textPluginManager::disconnect(appl::TextViewer& _widget) {
for (auto &it : getList()) {
if (it == NULL) {
m_currentViewer.reset();
for (auto &it : m_list) {
if (it == nullptr) {
continue;
}
it->onPluginDisable(_widget);
@@ -126,8 +91,8 @@ void appl::textPluginManager::disconnect(appl::TextViewer& _widget) {
bool appl::textPluginManager::onEventEntry(appl::TextViewer& _textDrawer,
const ewol::event::Entry& _event) {
for (auto &it : getListOnEventEntry()) {
if (it == NULL) {
for (auto &it : m_listOnEventEntry) {
if (it == nullptr) {
continue;
}
if (it->onEventEntry(_textDrawer, _event) == true ) {
@@ -139,8 +104,8 @@ bool appl::textPluginManager::onEventEntry(appl::TextViewer& _textDrawer,
bool appl::textPluginManager::onEventInput(appl::TextViewer& _textDrawer,
const ewol::event::Input& _event) {
for (auto &it : getListOnEventInput()) {
if (it == NULL) {
for (auto &it : m_listOnEventInput) {
if (it == nullptr) {
continue;
}
if (it->onEventInput(_textDrawer, _event) == true ) {
@@ -153,8 +118,8 @@ bool appl::textPluginManager::onEventInput(appl::TextViewer& _textDrawer,
bool appl::textPluginManager::onWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _data) {
for (auto &it : getListOnWrite()) {
if (it == NULL) {
for (auto &it : m_listOnWrite) {
if (it == nullptr) {
continue;
}
if (it->onWrite(_textDrawer, _pos, _data) == true ) {
@@ -168,8 +133,8 @@ bool appl::textPluginManager::onReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _data,
const appl::Buffer::Iterator& _posEnd) {
for (auto &it : getListOnReplace()) {
if (it == NULL) {
for (auto &it : m_listOnReplace) {
if (it == nullptr) {
continue;
}
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,
const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd) {
for (auto &it : getListOnRemove()) {
if (it == NULL) {
for (auto &it : m_listOnRemove) {
if (it == nullptr) {
continue;
}
if (it->onRemove(_textDrawer, _pos, _posEnd) == true ) {
@@ -193,13 +158,13 @@ bool appl::textPluginManager::onRemove(appl::TextViewer& _textDrawer,
return false;
}
bool appl::textPluginManager::onReceiveMessageViewer(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg) {
for (auto &it : getListonReceiveMessageViewer()) {
if (it == NULL) {
bool appl::textPluginManager::onReceiveShortCut(appl::TextViewer& _textDrawer,
const std::string& _shortCutName) {
for (auto &it : m_listOnReceiveShortCutViewer) {
if (it == nullptr) {
continue;
}
if (it->onReceiveMessageViewer(_textDrawer, _msg) == true ) {
if (it->onReceiveShortCut(_textDrawer, _shortCutName) == true ) {
return true;
}
}
@@ -208,8 +173,8 @@ bool appl::textPluginManager::onReceiveMessageViewer(appl::TextViewer& _textDraw
bool appl::textPluginManager::onCursorMove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos) {
for (auto &it : getListOnCursorMove()) {
if (it == NULL) {
for (auto &it : m_listOnCursorMove) {
if (it == nullptr) {
continue;
}
if (it->onCursorMove(_textDrawer, _pos) == true ) {

View File

@@ -16,98 +16,106 @@
#include <appl/TextPlugin.h>
namespace appl {
namespace textPluginManager {
/**
* @brief Init the plugin manager for writer.
*/
void init();
/**
* @brief UnInit the plugin manager for writer.
*/
void unInit();
/**
* @brief Add default plugin list
*/
void addDefaultPlugin();
/**
* @brief Add a plugin.
* @param[in] _plugin Plugin pointer to add.
*/
void addPlugin(const ewol::object::Shared<appl::TextViewerPlugin>& _plugin);
/**
* @brief connect a new widget to the plugin.
* @param[in] _widget Reference on the widget caller.
*/
void connect(appl::TextViewer& _widget);
/**
* @brief dis-connect a new widget to the plugin.
* @param[in] _widget Reference on the widget caller.
*/
void disconnect(appl::TextViewer& _widget);
/**
* @brief On entry event call.
* @param[in] _widget Reference on the widget caller.
* @param[in] _event Generic event.
* @return true if the event might not propagate anymore.
*/
bool onEventEntry(appl::TextViewer& _widget,
const ewol::event::Entry& _event);
/**
* @brief On Input event call.
* @param[in] _widget Reference on the widget caller.
* @param[in] _event Generic event.
* @return true if the event might not propagate anymore
*/
bool onEventInput(appl::TextViewer& _textDrawer,
const ewol::event::Input& _event);
/**
* @brief Called when data is written in the buffer.
* @param[in] _widget Reference on the widget caller.
* @param[in] _pos Position in the buffer where data might be witten.
* @param[in] _data Input stream written.
* @return true if the event might not propagate anymore
*/
bool onWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _data);
/**
* @brief Called when data is written in the buffer, and some are removed.
* @param[in] _widget Reference on the widget caller.
* @param[in] _pos Position in the buffer where data might be witten.
* @param[in] _data Input stream written.
* @param[in] _posEnd end replace position.
* @return true if the event might not propagate anymore
*/
bool onReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _data,
const appl::Buffer::Iterator& _posEnd);
/**
* @brief Called when data is removed.
* @param[in] _widget Reference on the widget caller.
* @param[in] _pos Position in the buffer where data might be witten.
* @param[in] _posEnd end replace position.
* @return true if the event might not propagate anymore
*/
bool onRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd);
/**
* @brief Called when a message arrive.
* @param[in] _widget Reference on the widget caller.
* @param[in] _msg Generic message.
* @return true if the event might not propagate anymore
*/
bool onReceiveMessageViewer(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg);
/**
* @brief Called when Cursor move of position.
* @param[in] _widget Reference on the widget caller.
* @param[in] _pos New cursor position.
* @return true if the event might not propagate anymore
*/
bool onCursorMove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos);
class textPluginManager : public ewol::Resource {
private:
std::weak_ptr<appl::TextViewer> m_currentViewer;
std::list<std::shared_ptr<appl::TextViewerPlugin>> m_list;
std::vector<std::shared_ptr<appl::TextViewerPlugin>> m_listOnEventEntry;
std::vector<std::shared_ptr<appl::TextViewerPlugin>> m_listOnEventInput;
std::vector<std::shared_ptr<appl::TextViewerPlugin>> m_listOnWrite;
std::vector<std::shared_ptr<appl::TextViewerPlugin>> m_listOnReplace;
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
*/
void addDefaultPlugin();
/**
* @brief Add a plugin.
* @param[in] _plugin Plugin pointer to add.
*/
void addPlugin(const std::shared_ptr<appl::TextViewerPlugin>& _plugin);
/**
* @brief connect a new widget to the plugin.
* @param[in] _widget Reference on the widget caller.
*/
void connect(appl::TextViewer& _widget);
/**
* @brief dis-connect a new widget to the plugin.
* @param[in] _widget Reference on the widget caller.
*/
void disconnect(appl::TextViewer& _widget);
/**
* @brief On entry event call.
* @param[in] _widget Reference on the widget caller.
* @param[in] _event Generic event.
* @return true if the event might not propagate anymore.
*/
bool onEventEntry(appl::TextViewer& _widget,
const ewol::event::Entry& _event);
/**
* @brief On Input event call.
* @param[in] _widget Reference on the widget caller.
* @param[in] _event Generic event.
* @return true if the event might not propagate anymore
*/
bool onEventInput(appl::TextViewer& _textDrawer,
const ewol::event::Input& _event);
/**
* @brief Called when data is written in the buffer.
* @param[in] _widget Reference on the widget caller.
* @param[in] _pos Position in the buffer where data might be witten.
* @param[in] _data Input stream written.
* @return true if the event might not propagate anymore
*/
bool onWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _data);
/**
* @brief Called when data is written in the buffer, and some are removed.
* @param[in] _widget Reference on the widget caller.
* @param[in] _pos Position in the buffer where data might be witten.
* @param[in] _data Input stream written.
* @param[in] _posEnd end replace position.
* @return true if the event might not propagate anymore
*/
bool onReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const std::string& _data,
const appl::Buffer::Iterator& _posEnd);
/**
* @brief Called when data is removed.
* @param[in] _widget Reference on the widget caller.
* @param[in] _pos Position in the buffer where data might be witten.
* @param[in] _posEnd end replace position.
* @return true if the event might not propagate anymore
*/
bool onRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd);
/**
* @brief Called when a message arrive.
* @param[in] _widget Reference on the widget caller.
* @param[in] _shortCutName shortcut properties.
* @return true if the event might not propagate anymore
*/
bool onReceiveShortCut(appl::TextViewer& _textDrawer,
const std::string& _shortCutName);
/**
* @brief Called when Cursor move of position.
* @param[in] _widget Reference on the widget caller.
* @param[in] _pos New cursor position.
* @return true if the event might not propagate anymore
*/
bool onCursorMove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos);
};
};

View File

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

View File

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

View File

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

View File

@@ -17,15 +17,18 @@
namespace appl {
class TextPluginRmLine : public appl::TextViewerPlugin {
public:
protected:
TextPluginRmLine();
void init();
public:
DECLARE_FACTORY(TextPluginRmLine);
virtual ~TextPluginRmLine() {
// nothing to do ...
};
public:
virtual void onPluginEnable(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"
appl::TextPluginSelectAll::TextPluginSelectAll() {
m_activateOnReceiveMessage = true;
appl::TextPluginSelectAll::TextPluginSelectAll() :
m_menuIdTitle(-1),
m_menuIdSelectAll(-1),
m_menuIdSelectNone(-1) {
m_activateOnReceiveShortCut = true;
addObjectType("appl::TextPluginSelectAll");
}
static const char* eventSelectAll = "plugin-select-all";
void appl::TextPluginSelectAll::init() {
appl::TextViewerPlugin::init();
}
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 :
_textDrawer.ext_registerMultiCast(eventSelectAll);
_textDrawer.ext_shortCutAdd("ctrl+a", eventSelectAll);
_textDrawer.ext_shortCutAdd("ctrl+a", "appl::TextPluginSelectAll::All");
_textDrawer.ext_shortCutAdd("ctrl+shift+a", "appl::TextPluginSelectAll::None");
}
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) {
return false;
}
if (_msg.getMessage() == eventSelectAll) {
if (_shortCutName == "appl::TextPluginSelectAll::All") {
if (_textDrawer.hasBuffer() == false) {
return false;
}
_textDrawer.select(_textDrawer.begin(), _textDrawer.end());
return true;
}
if (_shortCutName == "appl::TextPluginSelectAll::None") {
if (_textDrawer.hasBuffer() == false) {
return false;
}
_textDrawer.unSelect();
return true;
}
return false;
}

View File

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

View File

@@ -114,7 +114,7 @@ typedef struct {
/* address for locating tag in source file */
struct {
/* pattern for locating source line
* (may be NULL if not present) */
* (may be nullptr if not present) */
const char *pattern;
/* line number in source file of tag definition
@@ -122,7 +122,7 @@ typedef struct {
unsigned long lineNumber;
} 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;
/* is tag of file-limited scope? */

View File

@@ -18,91 +18,21 @@
class myParamGlobal : public ewol::Object {
public:
static const char * const configEOL;
static const char * const configAutoIndent;
static const char * const configShowTabChar;
static const char * const configShowSpaceChar;
public:
bool m_displayEOL;
bool m_AutoIndent;
bool m_displayTabChar;
bool m_displaySpaceChar;
ewol::object::Param<bool> m_displayEOL;
ewol::object::Param<bool> m_AutoIndent;
ewol::object::Param<bool> m_displayTabChar;
ewol::object::Param<bool> m_displaySpaceChar;
public :
myParamGlobal() {
myParamGlobal() :
m_displayEOL(*this, "eol", false, "Display end of line character"),
m_AutoIndent(*this, "auto-indent", true, "Auto indent when create new line"),
m_displayTabChar(*this, "display-tab", true, "Display the Tab char"),
m_displaySpaceChar(*this, "display-space", true, "Display the space char") {
m_static = true; // Note : set the object static notification( Must be set or assert at the end of process)
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 s_obj;
@@ -173,67 +103,66 @@ int32_t globals::getNbLineBorder() {
#include <ewol/widget/CheckBox.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() :
ewol::widget::Sizer(ewol::widget::Sizer::modeVert) {
ewol::widget::CheckBox* myCheckbox = NULL;
ewol::widget::Spacer* mySpacer = NULL;
globals::ParameterGlobalsGui::ParameterGlobalsGui() {
addObjectType("globals::ParameterGlobalsGui");
}
void globals::ParameterGlobalsGui::init() {
ewol::widget::Sizer::init(ewol::widget::Sizer::modeVert);
std::shared_ptr<ewol::widget::CheckBox> myCheckbox;
std::shared_ptr<ewol::widget::Spacer> mySpacer;
mySpacer = new ewol::widget::Spacer();
if (NULL == mySpacer) {
mySpacer = ewol::widget::Spacer::create();
if (nullptr == mySpacer) {
APPL_ERROR("Can not allocate widget == > display might be in error");
} else {
mySpacer->setExpand(bvec2(true,true));
subWidgetAdd(mySpacer);
}
myCheckbox = new ewol::widget::CheckBox("Automatic Indentation");
if (NULL == myCheckbox) {
myCheckbox = ewol::widget::CheckBox::create("Automatic Indentation");
if (nullptr == myCheckbox) {
APPL_ERROR("Can not allocate widget == > display might be in error");
} else {
myCheckbox->setExpand(bvec2(true,false));
myCheckbox->setValue(isSetAutoIndent());
myCheckbox->registerOnEvent(this, "clicked", l_changeIndentation);
myCheckbox->signalValue.bind(shared_from_this(), &globals::ParameterGlobalsGui::onCallbackIndentation);
subWidgetAdd(myCheckbox);
}
myCheckbox = new ewol::widget::CheckBox("Display space char (' ')");
if (NULL == myCheckbox) {
myCheckbox = ewol::widget::CheckBox::create("Display space char (' ')");
if (nullptr == myCheckbox) {
APPL_ERROR("Can not allocate widget == > display might be in error");
} else {
myCheckbox->setExpand(bvec2(true,false));
myCheckbox->setValue(isSetDisplaySpaceChar());
myCheckbox->registerOnEvent(this, "clicked", l_changeSpace);
myCheckbox->signalValue.bind(shared_from_this(), &globals::ParameterGlobalsGui::onCallbackSpace);
subWidgetAdd(myCheckbox);
}
myCheckbox = new ewol::widget::CheckBox("Display tabulation char ('\\t')");
if (NULL == myCheckbox) {
myCheckbox = ewol::widget::CheckBox::create("Display tabulation char ('\\t')");
if (nullptr == myCheckbox) {
APPL_ERROR("Can not allocate widget == > display might be in error");
} else {
myCheckbox->setExpand(bvec2(true,false));
myCheckbox->setValue(isSetDisplayTabChar());
myCheckbox->registerOnEvent(this, "clicked", l_changeTabulation);
myCheckbox->signalValue.bind(shared_from_this(), &globals::ParameterGlobalsGui::onCallbackTabulation);
subWidgetAdd(myCheckbox);
}
myCheckbox = new ewol::widget::CheckBox("Display end of line ('\\n')");
if (NULL == myCheckbox) {
myCheckbox = ewol::widget::CheckBox::create("Display end of line ('\\n')");
if (nullptr == myCheckbox) {
APPL_ERROR("Can not allocate widget == > display might be in error");
} else {
myCheckbox->setExpand(bvec2(true,false));
myCheckbox->setValue(isSetDisplayEndOfLine());
myCheckbox->registerOnEvent(this, "clicked", l_changeEndOfLine);
myCheckbox->signalValue.bind(shared_from_this(), &globals::ParameterGlobalsGui::onCallbackEndOfLine);
subWidgetAdd(myCheckbox);
}
myCheckbox = new ewol::widget::CheckBox("switch Rounded/default");
if (NULL == myCheckbox) {
myCheckbox = ewol::widget::CheckBox::create("switch Rounded/default");
if (nullptr == myCheckbox) {
APPL_ERROR("Can not allocate widget == > display might be in error");
} else {
myCheckbox->setExpand(bvec2(true,false));
myCheckbox->setValue(isSetDisplayEndOfLine());
myCheckbox->registerOnEvent(this, "clicked", l_changeRounded);
myCheckbox->signalValue.bind(shared_from_this(), &globals::ParameterGlobalsGui::onCallbackRounded);
subWidgetAdd(myCheckbox);
}
}
@@ -243,43 +172,28 @@ globals::ParameterGlobalsGui::~ParameterGlobalsGui() {
}
void globals::ParameterGlobalsGui::onReceiveMessage(const ewol::object::Message& _msg) {
ewol::widget::Sizer::onReceiveMessage(_msg);
if (_msg.getMessage() == l_changeEndOfLine) {
if (_msg.getData() == "true") {
setDisplayEndOfLine(true);
} else {
setDisplayEndOfLine(false);
}
} else if (_msg.getMessage() == l_changeIndentation) {
if (_msg.getData() == "true") {
setAutoIndent(true);
} else {
setAutoIndent(false);
}
} else if (_msg.getMessage() == l_changeSpace) {
if (_msg.getData() == "true") {
setDisplaySpaceChar(true);
} else {
setDisplaySpaceChar(false);
}
} else if (_msg.getMessage() == l_changeTabulation) {
if (_msg.getData() == "true") {
setDisplayTabChar(true);
} else {
setDisplayTabChar(false);
}
} else if (_msg.getMessage() == l_changeRounded) {
if (_msg.getData() == "true") {
etk::theme::setName("GUI", "rounded");;
} else {
etk::theme::setName("GUI", "default");;
}
// Reload shaders and graphic system ...
ewol::getContext().getResourcesManager().reLoadResources();
ewol::getContext().forceRedrawAll();
}
void globals::ParameterGlobalsGui::onCallbackEndOfLine(const bool& _value) {
setDisplayEndOfLine(_value);
}
void globals::ParameterGlobalsGui::onCallbackIndentation(const bool& _value) {
setAutoIndent(_value);
}
void globals::ParameterGlobalsGui::onCallbackSpace(const bool& _value) {
setDisplaySpaceChar(_value);
}
void globals::ParameterGlobalsGui::onCallbackTabulation(const bool& _value) {
setDisplayTabChar(_value);
}
void globals::ParameterGlobalsGui::onCallbackRounded(const bool& _value) {
if (_value == true) {
etk::theme::setName("GUI", "rounded");;
} else {
etk::theme::setName("GUI", "default");;
}
// Reload shaders and graphic system ...
ewol::getContext().getResourcesManager().reLoadResources();
ewol::getContext().forceRedrawAll();
}

View File

@@ -37,11 +37,17 @@ namespace globals
bool OrderTheBufferList();
class ParameterGlobalsGui : public ewol::widget::Sizer {
public :
protected:
ParameterGlobalsGui();
void init();
public:
DECLARE_FACTORY(ParameterGlobalsGui);
virtual ~ParameterGlobalsGui();
// herited function
virtual void onReceiveMessage(const ewol::object::Message& _msg);
void onCallbackEndOfLine(const bool& _value);
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,109 +28,110 @@
#include <appl/ctags/readtags.h>
#include <appl/globalMsg.h>
class MainApplication : public ewol::context::Application {
private:
std::shared_ptr<appl::BufferManager> m_bufferManager;
std::shared_ptr<appl::textPluginManager> m_pluginManager;
public:
bool init(ewol::Context& _context, size_t _initId) {
APPL_INFO(" == > init APPL v" << APPL_VERSION << " (START) [" << ewol::getBoardType() << "] (" << ewol::getCompilationMode() << ")");
etk::theme::setName("COLOR", "color/black/");
// TODO : remove this : Move if in the windows properties
_context.setSize(vec2(800, 600));
// select internal data for font ...
_context.getFontDefault().setUseExternal(true);
#ifdef __TARGET_OS__Android
_context.getFontDefault().set("FreeSerif", 19);
#else
_context.getFontDefault().set("FreeSerif;DejaVuSansMono",14);
#endif
// set the application icon ...
_context.setIcon("DATA:icon.png");
// init internal global value
globals::init();
// init ALL Singleton :
//()CTagsManager::getInstance();
m_bufferManager = appl::BufferManager::create();
m_pluginManager = appl::textPluginManager::create();
appl::highlightManager::init();
// Request load of the user configuration ...
//ewol::userConfig::load();
char cCurrentPath[FILENAME_MAX];
// get the curent program folder
if (!getcwd(cCurrentPath, FILENAME_MAX)) {
return false;
}
cCurrentPath[FILENAME_MAX - 1] = '\0';
//APPL_INFO("The current working directory is " << cCurrentPath);
std::shared_ptr<MainWindows> basicWindows = MainWindows::create();
if (basicWindows == nullptr) {
APPL_ERROR("Can not allocate the basic windows");
_context.stop();
return false;
}
// create the specific windows
_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
APPL_INFO("show list of files : ");
bool ctagDetected = false;
for( int32_t iii=0 ; iii<_context.getCmd().size(); iii++) {
std::string tmpppp = _context.getCmd().get(iii);
if (tmpppp == "-t") {
ctagDetected = true;
} else if (true == ctagDetected) {
etk::FSNode file(tmpppp);
std::string name = file.getName();
APPL_INFO("Load ctag file : \"" << name << "\"" );
ctagDetected = false;
//_context.getEObjectManager().multiCast().anonymousSend(ednMsgCtagsLoadFile, name);
} else {
etk::FSNode file(tmpppp);
std::string name = file.getName();
APPL_INFO("need load file : \"" << name << "\"" );
m_bufferManager->open(name);
}
}
APPL_INFO(" == > init " PROJECT_NAME " (END)");
return true;
}
void unInit(ewol::Context& _context) {
APPL_INFO(" == > Un-Init " PROJECT_NAME " (START)");
APPL_INFO("Stop Hightlight");
appl::highlightManager::unInit();
//Kill all singleton
m_pluginManager.reset();
m_bufferManager.reset();
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[]) {
// only one things to do:
return ewol::run(_argc, _argv);
}
ewol::object::Shared<appl::BufferManager> bufferManager = NULL;
/**
* @brief main application function initialisation
*/
bool APP_Init(ewol::Context& _context, size_t _initId, size_t& _nbInitStep) {
_nbInitStep = 1;
APPL_INFO(" == > init APPL v" << APPL_VERSION << " (START) [" << ewol::getBoardType() << "] (" << ewol::getCompilationMode() << ")");
etk::theme::setName("COLOR", "color/black/");
// TODO : remove this : Move if in the windows properties
_context.setSize(vec2(800, 600));
// select internal data for font ...
_context.getFontDefault().setUseExternal(true);
#ifdef __TARGET_OS__Android
_context.getFontDefault().set("FreeSerif", 19);
#else
_context.getFontDefault().set("FreeSerif;DejaVuSansMono",14);
#endif
// set the application icon ...
_context.setIcon("DATA:icon.png");
// init internal global value
globals::init();
// init ALL Singleton :
//()CTagsManager::getInstance();
bufferManager = appl::BufferManager::keep();
appl::highlightManager::init();
appl::textPluginManager::init();
appl::textPluginManager::addDefaultPlugin();
// Request load of the user configuration ...
//ewol::userConfig::load();
char cCurrentPath[FILENAME_MAX];
// get the curent program folder
if (!getcwd(cCurrentPath, FILENAME_MAX)) {
return false;
}
cCurrentPath[FILENAME_MAX - 1] = '\0';
//APPL_INFO("The current working directory is " << cCurrentPath);
ewol::object::Shared<MainWindows> basicWindows = ewol::object::makeShared(new MainWindows());
if (basicWindows == nullptr) {
APPL_ERROR("Can not allocate the basic windows");
_context.stop();
return false;
}
// create the specific windows
_context.setWindows(basicWindows);
// add files
APPL_INFO("show list of files : ");
bool ctagDetected = false;
for( int32_t iii=0 ; iii<_context.getCmd().size(); iii++) {
std::string tmpppp = _context.getCmd().get(iii);
if (tmpppp == "-t") {
ctagDetected = true;
} else if (true == ctagDetected) {
etk::FSNode file(tmpppp);
std::string name = file.getName();
APPL_INFO("Load ctag file : \"" << name << "\"" );
ctagDetected = false;
_context.getEObjectManager().multiCast().anonymousSend(ednMsgCtagsLoadFile, name);
} else {
etk::FSNode file(tmpppp);
std::string name = file.getName();
APPL_INFO("need load file : \"" << name << "\"" );
bufferManager->open(name);
}
}
APPL_INFO(" == > init " PROJECT_NAME " (END)");
return true;
// second possibility
return ewol::run(new MainApplication(), _argc, _argv);
}
/**
* @brief main application function Un-Initialisation
*/
void APP_UnInit(ewol::Context& _context) {
APPL_INFO(" == > Un-Init " PROJECT_NAME " (START)");
appl::textPluginManager::unInit();
APPL_INFO("Stop Hightlight");
appl::highlightManager::unInit();
//Kill all singleton
bufferManager.reset();
APPL_INFO(" == > Un-Init " PROJECT_NAME " (END)");
}

View File

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