49 Commits
1.1.2 ... 1.2.2

Author SHA1 Message Date
fbf774174f Merge branch 'dev' 2014-10-17 09:10:19 +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
440f4c7093 Update version tag: 1.2.0 2014-06-03 22:27:31 +02:00
09425067dc [DEV] remove to many request of focus 2014-06-03 22:19:00 +02:00
780234de13 [DEBUG] remove error in the HL update 2014-06-02 21:40:02 +02:00
c421bd5f90 [DEV] remove compilation warning 2014-06-02 21:04:35 +02:00
3ec3fa00d9 [DEV] work corectly with refcounting object (and remove some memory leek at close) 2014-05-27 21:43:02 +02:00
9b21e5c769 [DEV] correction some internal memory leek 2014-05-26 21:42:51 +02:00
2157099f0a [DEV] new staep to owner 2014-05-25 21:17:06 +02:00
d18b202e75 [DEV] init remove remove windows 2014-05-23 12:37:38 +02:00
63834fe960 [DEBUG] plugin are object ==> set it in shared pointer 2014-05-22 22:06:13 +02:00
cab0e6009d [DEV] update to the new API, system start but not compleately work 2014-05-20 23:26:14 +02:00
08261def10 [DEV] start rework on shared pointer 2014-05-20 21:35:41 +02:00
304ac2ba45 [DEV] start rework for dev interface of ewol 2014-05-19 22:30:39 +02:00
83 changed files with 2547 additions and 2897 deletions

39
.travis.yml Normal file
View File

@@ -0,0 +1,39 @@
# 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
# build sequence with Lutin :
script:
- if [ "$CXX" == "clang++" ]; then ./ewol/build/lutin.py -cclang -mdebug -p edn; fi
- if [ "$CXX" == "g++" ]; then ./ewol/build/lutin.py -cgcc -mdebug -p edn; fi
#send e-mail on compilation result:
notifications:
email:
- yui.heero@gmail.com

View File

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

0
data/lang/EN.json Normal file
View File

0
data/lang/FR.json Normal file
View File

View File

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

View File

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

View File

@@ -4,57 +4,50 @@
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="comment ##"> <rule name="comment ##">
<color>SYNTAX_ERROR</color> <color>SYNTAX_ERROR</color>
<start>##</start> <regex>##.*$</regex>
<end>\n</end>
</rule> </rule>
<rule name="comment #"> <rule name="comment #">
<color>comment</color> <color>comment</color>
<start>#</start> <regex>#.*$</regex>
<end>\n</end>
</rule> </rule>
<rule name="notes ... "> <rule name="notes ... ">
<color>preprocesseur</color> <color>preprocesseur</color>
<start>(NOTE|TODO) : </start> <regex>(NOTE|TODO) : .*$</regex>
<end>\n</end>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>"(\\[\\"]|.)*$</regex>
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="simpleQuteText"> <rule name="simpleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>\@'</start> <regex>\@'(\\[\\']|.)*$</regex>
<end>'</end>
<!--<EscapeChar>\</EscapeChar>-->
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="pourcentage OK"> <rule name="pourcentage OK">
<color>TestResultOK</color> <color>TestResultOK</color>
<start>100%</start> <regex>100%</regex>
</rule> </rule>
<rule name="pourcentage"> <rule name="pourcentage">
<color>number</color> <color>number</color>
<start>[0-9]*%</start> <regex>[0-9]*%</regex>
</rule> </rule>
<rule name="R<>sultat OK"> <rule name="R<>sultat OK">
<color>TestResultOK</color> <color>TestResultOK</color>
<start>\[( )*(OK|Ok|ok)( )*\]</start> <regex>\[( )*(OK|Ok|ok)( )*\]</regex>
</rule> </rule>
<rule name="resultat en erreur"> <rule name="resultat en erreur">
<color>TestResultERROR</color> <color>TestResultERROR</color>
<start>\[(ERREUR|Erreur|erreur)\]</start> <regex>\[(ERREUR|Erreur|erreur)\]</regex>
</rule> </rule>
<rule name="resultat vide"> <rule name="resultat vide">
<color>number</color> <color>number</color>
<start>\[( )*\]</start> <regex>\[( )*\]</regex>
</rule> </rule>
<rule name="notes ... "> <rule name="notes ... ">
<color>macro</color> <color>macro</color>
<start>==&gt;</start> <regex>==&gt;</regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

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

View File

@@ -5,54 +5,47 @@
<pass1> <pass1>
<rule name="my comment doxygen"> <rule name="my comment doxygen">
<color>commentDoxygen</color> <color>commentDoxygen</color>
<start>##</start> <regex>##.*$</regex>
<end>\n</end>
</rule> </rule>
<rule name="my todo comment"> <rule name="my todo comment">
<color>SYNTAX_ERROR</color> <color>SYNTAX_ERROR</color>
<start>#[ \t]TODO[ \t]*:</start> <regex>#[ \t]TODO[ \t]*:(\\[\\\n]|.)*$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="my comment"> <rule name="my comment">
<color>comment</color> <color>comment</color>
<start>#</start> <regex>#(\\[\\\n]|.)*$</regex>
<end>\n</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>"(\\[\\"]|.)*$</regex>
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
</pass1> </pass1>
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear --> <pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
<rule name="my keyword"> <rule name="my keyword">
<color>keyword</color> <color>keyword</color>
<start>\@foreach|message|endforeach|if|else|endif|list|file|string\@</start> <regex>\@foreach|message|endforeach|if|else|endif|list|file|string\@</regex>
</rule> </rule>
<rule name="my function keyword"> <rule name="my function keyword">
<color>systemFunction</color> <color>systemFunction</color>
<start>\@set|include_directories|add_definitions|add_library|include_directories|target_link_libraries|project|include|check_include_file|enable_testing|option|cmake_minimum_required|add_definitions|check_include_file|configure_file|include_directories|add_custom_command|add_executable|add_test\@</start> <regex>\@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\@</regex>
</rule> </rule>
<rule name="Variable"> <rule name="Variable">
<color>inputFunction</color> <color>inputFunction</color>
<start>${</start> <regex>\${.*}</regex>
<end>}</end>
</rule> </rule>
<rule name="numeric constant"> <rule name="numeric constant">
<color>number</color> <color>number</color>
<start>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</start> <regex>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</regex>
</rule> </rule>
<rule name="BIG LETTER"> <rule name="BIG LETTER">
<color>macro</color> <color>macro</color>
<start>\@[A-Z_][A-Z_0-9]{3,500}\@</start> <regex>\@[A-Z_][A-Z_0-9]{3,500}\@</regex>
</rule> </rule>
<!--
<rule name="Function name"> <rule name="Function name">
<color>functionName</color> <color>functionName</color>
<start>\@(\w|_)+[ \t]*\(</start> <regex>\@(\w|_)+[ \t]*\(</regex>
</rule> </rule>
-->
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -5,30 +5,33 @@
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification --> <pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
<rule name="Comment"> <rule name="Comment">
<color>comment</color> <color>comment</color>
<start>&lt;!\-\-</start> <regex><![CDATA[<!\-\-.*\-\->]]></regex>
<end>\-\-&gt;</end> <!--<regex>&lt;!\-\-.*\-\-&gt;</regex>-->
</rule> </rule>
<rule name="doubleQuteText"> <rule name="doubleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>"</start> <regex>"(\\[\\"]|.)*"</regex>
<end>"</end>
<EscapeChar>\</EscapeChar>
</rule> </rule>
<rule name="simpleQuteText"> <rule name="simpleQuteText">
<color>doubleQuoteText</color> <color>doubleQuoteText</color>
<start>\@'</start> <regex>\@'.*('|\n)</regex>
<end>('|\n)</end>
<!--<EscapeChar>\</EscapeChar>-->
</rule> </rule>
</pass1> </pass1>
<pass2> <pass2>
<rule name="special Balise"> <rule name="special Balise">
<color>error</color> <color>error</color>
<start>&lt;\?\w*|\?&gt;</start> <regex>&lt;\?\w*|\?&gt;</regex>
</rule> </rule>
<!--
<rule name="normale Balise2">
<color>functionName</color>
<regex><![CDATA[(</[0-9a-zA-Z_]+|<[0-9a-zA-Z_]+)(/>|>)]]></regex>
</rule>
-->
<rule name="normale Balise"> <rule name="normale Balise">
<color>functionName</color> <color>functionName</color>
<start>&lt;/[0-9a-zA-Z_]+|&lt;[0-9a-zA-Z_]+|/&gt;|&gt;</start> <!--<regex>&lt;/[0-9a-zA-Z_]+|&lt;[0-9a-zA-Z_]+|/&gt;|&gt;</regex>-->
<regex><![CDATA[(</[0-9a-zA-Z_]+|<[0-9a-zA-Z_]+)\@]]></regex>
</rule> </rule>
</pass2> </pass2>
</EdnLang> </EdnLang>

View File

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

View File

@@ -8,6 +8,7 @@
#include <etk/types.h> #include <etk/types.h>
#include <etk/stdTools.h>
#include <appl/Buffer.h> #include <appl/Buffer.h>
#include <appl/debug.h> #include <appl/debug.h>
#include <ewol/context/clipBoard.h> #include <ewol/context/clipBoard.h>
@@ -16,18 +17,13 @@
#undef __class__ #undef __class__
#define __class__ "Buffer" #define __class__ "Buffer"
const char* const appl::Buffer::eventIsModify = "edn-is-modify";
const char* const appl::Buffer::eventIsSave = "edn-is-save";
const char* const appl::Buffer::eventSelectChange = "edn-select-change";
const char* const appl::Buffer::eventChangeName = "edn-buffer-name-change";
appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ () { appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ () {
m_value = u32char::Null; m_value = u32char::Null;
if (m_current < 0) { if (m_current < 0) {
m_current = 0; m_current = 0;
return *this; return *this;
} }
if (m_data != NULL) { if (m_data != nullptr) {
if (m_current < m_data->m_data.size() ) { if (m_current < m_data->m_data.size() ) {
int8_t nbChar = utf8::theoricLen(m_data->m_data[m_current]); int8_t nbChar = utf8::theoricLen(m_data->m_data[m_current]);
if (nbChar != 0) { if (nbChar != 0) {
@@ -45,7 +41,7 @@ appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ () {
appl::Buffer::Iterator& appl::Buffer::Iterator::operator-- () { appl::Buffer::Iterator& appl::Buffer::Iterator::operator-- () {
m_value = u32char::Null; m_value = u32char::Null;
if (m_data != NULL) { if (m_data != nullptr) {
if (m_current > 0) { if (m_current > 0) {
int32_t iii = -1; int32_t iii = -1;
while( utf8::theoricFirst(m_data->m_data[m_current+iii]) == false while( utf8::theoricFirst(m_data->m_data[m_current+iii]) == false
@@ -68,7 +64,7 @@ char32_t appl::Buffer::Iterator::operator* () {
if (m_value != u32char::Null) { if (m_value != u32char::Null) {
return m_value; return m_value;
} }
if (m_data == NULL) { if (m_data == nullptr) {
APPL_ERROR("request an element that iterator not link"); APPL_ERROR("request an element that iterator not link");
return m_value; return m_value;
} }
@@ -118,8 +114,11 @@ appl::Buffer::Iterator appl::Buffer::selectStop() {
return position( getStopSelectionPos() ); return position( getStopSelectionPos() );
} }
appl::Buffer::Buffer() : appl::Buffer::Buffer() :
signalIsModify(*this, "is-modify"),
signalIsSave(*this, "is-save"),
signalSelectChange(*this, "select-change"),
signalChangeName(*this, "change-name"),
m_hasFileName(false), m_hasFileName(false),
m_fileName(""), m_fileName(""),
m_isModify(false), m_isModify(false),
@@ -127,21 +126,19 @@ appl::Buffer::Buffer() :
m_cursorSelectPos(-1), m_cursorSelectPos(-1),
m_cursorPreferredCol(-1), m_cursorPreferredCol(-1),
m_nbLines(1), m_nbLines(1),
m_highlight(NULL) { m_highlight(nullptr) {
addObjectType("appl::Buffer"); addObjectType("appl::Buffer");
static int32_t bufferBaseId = 0; static int32_t bufferBaseId = 0;
m_fileName = "No Name " + std::to_string(bufferBaseId); m_fileName = "No Name " + etk::to_string(bufferBaseId);
bufferBaseId++; bufferBaseId++;
addEventId(eventIsModify); }
addEventId(eventIsSave);
addEventId(eventSelectChange); void appl::Buffer::init() {
addEventId(eventChangeName); ewol::Object::init();
} }
appl::Buffer::~Buffer() { appl::Buffer::~Buffer() {
if (m_highlight == NULL) { APPL_ERROR("REAL remove buffer : '" << m_name << "'");
appl::Highlight::release(m_highlight);
}
} }
bool appl::Buffer::loadFile(const std::string& _name) { bool appl::Buffer::loadFile(const std::string& _name) {
@@ -173,7 +170,7 @@ void appl::Buffer::setFileName(const std::string& _name) {
} }
m_fileName = name; m_fileName = name;
m_hasFileName = true; m_hasFileName = true;
generateEventId(eventChangeName); signalChangeName.emit();
setModification(true); setModification(true);
} }
@@ -192,9 +189,9 @@ void appl::Buffer::setModification(bool _status) {
} }
m_isModify = _status; m_isModify = _status;
if (m_isModify == true) { if (m_isModify == true) {
generateEventId(eventIsModify); signalIsModify.emit();
} else { } else {
generateEventId(eventIsSave); signalIsSave.emit();
} }
} }
@@ -301,7 +298,7 @@ bool appl::Buffer::search(const appl::Buffer::Iterator& _pos,
for (Iterator it = _pos; for (Iterator it = _pos;
(bool)it == true; (bool)it == true;
++it) { ++it) {
if (tolower(*it) == firstElement) { if ((char32_t)tolower(*it) == firstElement) {
// find the first char ==> check next... // find the first char ==> check next...
bool find = true; bool find = true;
Iterator tmp = it; Iterator tmp = it;
@@ -373,7 +370,7 @@ bool appl::Buffer::searchBack(const appl::Buffer::Iterator& _pos,
(bool)it == true; (bool)it == true;
--it) { --it) {
//APPL_DEBUG("compare : " << *it << " ?= " << _search); //APPL_DEBUG("compare : " << *it << " ?= " << _search);
if (tolower(*it) == lastElement) { if ((char32_t)tolower(*it) == lastElement) {
// find the last char ==> check previous... // find the last char ==> check previous...
bool find = true; bool find = true;
_result = it; _result = it;
@@ -417,13 +414,13 @@ void appl::Buffer::moveCursor(int64_t _pos) {
if (m_cursorPos == m_cursorSelectPos) { if (m_cursorPos == m_cursorSelectPos) {
m_cursorSelectPos = -1; m_cursorSelectPos = -1;
} }
generateEventId(eventSelectChange); signalSelectChange.emit();
return; return;
} }
// move mode // move mode
m_cursorPos = _pos; m_cursorPos = _pos;
m_cursorSelectPos = -1; m_cursorSelectPos = -1;
generateEventId(eventSelectChange); signalSelectChange.emit();
} }
bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos, bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos,
@@ -516,12 +513,12 @@ bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos,
void appl::Buffer::setSelectionPos(const appl::Buffer::Iterator& _pos) { void appl::Buffer::setSelectionPos(const appl::Buffer::Iterator& _pos) {
m_cursorSelectPos = _pos; m_cursorSelectPos = _pos;
generateEventId(eventSelectChange); signalSelectChange.emit();
} }
void appl::Buffer::unSelect() { void appl::Buffer::unSelect() {
m_cursorSelectPos = -1; m_cursorSelectPos = -1;
generateEventId(eventSelectChange); signalSelectChange.emit();
} }
static const char *ControlCodeTable[32] = { static const char *ControlCodeTable[32] = {
@@ -694,21 +691,19 @@ void appl::Buffer::tryFindHighlightType() {
void appl::Buffer::setHighlightType(const std::string& _type) { void appl::Buffer::setHighlightType(const std::string& _type) {
m_highlightType = ""; m_highlightType = "";
cleanHighLight(); cleanHighLight();
if (m_highlight == NULL) { m_highlight.reset();
appl::Highlight::release(m_highlight);
}
std::string resourceName = appl::highlightManager::getFileWithTypeType(_type); std::string resourceName = appl::highlightManager::getFileWithTypeType(_type);
if (resourceName == "") { if (resourceName == "") {
return; return;
} }
m_highlightType = _type; m_highlightType = _type;
m_highlight = appl::Highlight::keep(resourceName); m_highlight = appl::Highlight::create(resourceName);
generateHighLightAt(0, m_data.size()); generateHighLightAt(0, m_data.size());
} }
void appl::Buffer::regenerateHighLightAt(int64_t _pos, int64_t _nbDeleted, int64_t _nbAdded) { void appl::Buffer::regenerateHighLightAt(int64_t _pos, int64_t _nbDeleted, int64_t _nbAdded) {
// prevent ERROR... // prevent ERROR...
if (NULL == m_highlight) { if (nullptr == m_highlight) {
return; return;
} }
// prevent No data Call // prevent No data Call
@@ -763,12 +758,10 @@ void appl::Buffer::regenerateHighLightAt(int64_t _pos, int64_t _nbDeleted, int64
} else { } else {
elemStart = startId+1; elemStart = startId+1;
} }
for (int64_t iii = elemStart; iii < m_HLDataPass1.size(); ++iii) { for (auto it(m_HLDataPass1.begin()+elemStart); it != m_HLDataPass1.end(); ++it) {
//APPL_DEBUG("move element=" << i); //APPL_DEBUG("move element=" << i);
m_HLDataPass1[iii].beginStart += _nbAdded - _nbDeleted; it->start += _nbAdded - _nbDeleted;
m_HLDataPass1[iii].beginStop += _nbAdded - _nbDeleted; it->stop += _nbAdded - _nbDeleted;
m_HLDataPass1[iii].endStart += _nbAdded - _nbDeleted;
m_HLDataPass1[iii].endStop += _nbAdded - _nbDeleted;
} }
//Regenerate Element inside range //Regenerate Element inside range
if ( startId == -1 if ( startId == -1
@@ -777,13 +770,13 @@ void appl::Buffer::regenerateHighLightAt(int64_t _pos, int64_t _nbDeleted, int64
generateHighLightAt(0, m_data.size()); generateHighLightAt(0, m_data.size());
} else if(-1 == startId) { } else if(-1 == startId) {
//APPL_DEBUG("******* Regenerate START"); //APPL_DEBUG("******* Regenerate START");
generateHighLightAt(0, m_HLDataPass1[0].beginStart, 0); generateHighLightAt(0, m_HLDataPass1[0].start, 0);
} else if(-1 == stopId) { } else if(-1 == stopId) {
//APPL_DEBUG("******* Regenerate STOP"); //APPL_DEBUG("******* Regenerate STOP");
generateHighLightAt(m_HLDataPass1[m_HLDataPass1.size() -1].endStop, m_data.size(), m_HLDataPass1.size()); generateHighLightAt(m_HLDataPass1[m_HLDataPass1.size() -1].stop, m_data.size(), m_HLDataPass1.size());
} else { } else {
//APPL_DEBUG("******* Regenerate RANGE"); //APPL_DEBUG("******* Regenerate RANGE");
generateHighLightAt(m_HLDataPass1[startId].endStop, m_HLDataPass1[startId+1].beginStart, startId+1); generateHighLightAt(m_HLDataPass1[startId].stop, m_HLDataPass1[startId+1].start, startId+1);
} }
} }
@@ -831,8 +824,8 @@ void appl::Buffer::findMainHighLightPosition(int64_t _startPos,
------------ ------------- ---------- ------------ ------------- ----------
S=-1 *************** E S=-1 *************** E
*/ */
for (int32_t iii = 0; iii < m_HLDataPass1.size(); ++iii) { for (size_t iii = 0; iii < m_HLDataPass1.size(); ++iii) {
if (m_HLDataPass1[iii].endStop > _startPos) { if (m_HLDataPass1[iii].stop > _startPos) {
break; break;
} }
_startId = iii; _startId = iii;
@@ -852,8 +845,8 @@ void appl::Buffer::findMainHighLightPosition(int64_t _startPos,
} else { } else {
elemStart = _startId+1; elemStart = _startId+1;
} }
for (int32_t iii = elemStart; iii < m_HLDataPass1.size(); ++iii) { for (size_t iii = elemStart; iii < m_HLDataPass1.size(); ++iii) {
if (m_HLDataPass1[iii].beginStart > _endPos) { if (m_HLDataPass1[iii].start > _endPos) {
_stopId = iii; _stopId = iii;
break; break;
} }
@@ -861,7 +854,7 @@ void appl::Buffer::findMainHighLightPosition(int64_t _startPos,
} }
void appl::Buffer::generateHighLightAt(int64_t _pos, int64_t _endPos, int64_t _addingPos) { void appl::Buffer::generateHighLightAt(int64_t _pos, int64_t _endPos, int64_t _addingPos) {
if (NULL == m_highlight) { if (nullptr == m_highlight) {
return; return;
} }
//APPL_DEBUG("area : ("<<pos<<","<<endPos<<") insert at : " << addingPos); //APPL_DEBUG("area : ("<<pos<<","<<endPos<<") insert at : " << addingPos);
@@ -875,25 +868,25 @@ void appl::Buffer::cleanHighLight() {
appl::HighlightInfo* appl::Buffer::getElementColorAtPosition(int64_t _pos, int64_t &_starPos) { appl::HighlightInfo* appl::Buffer::getElementColorAtPosition(int64_t _pos, int64_t &_starPos) {
int32_t start = etk_max(0, _starPos-1); int32_t start = std::max((int64_t)0, _starPos-1);
for (int32_t iii = start; iii < m_HLDataPass1.size(); ++iii) { for (size_t iii = start; iii < m_HLDataPass1.size(); ++iii) {
_starPos = iii; _starPos = iii;
if ( m_HLDataPass1[iii].beginStart <= _pos if ( m_HLDataPass1[iii].start <= _pos
&& m_HLDataPass1[iii].endStop > _pos) { && m_HLDataPass1[iii].stop > _pos) {
return &m_HLDataPass1[iii]; return &m_HLDataPass1[iii];
} }
if(m_HLDataPass1[iii].beginStart > _pos) { if(m_HLDataPass1[iii].start > _pos) {
return NULL; return nullptr;
} }
} }
return NULL; return nullptr;
} }
void appl::Buffer::hightlightGenerateLines(appl::DisplayHLData& _MData, const appl::Buffer::Iterator& _HLStart, int64_t _nbLines) { void appl::Buffer::hightlightGenerateLines(appl::DisplayHLData& _MData, const appl::Buffer::Iterator& _HLStart, int64_t _nbLines) {
_MData.posHLPass1 = 0; _MData.posHLPass1 = 0;
_MData.posHLPass2 = 0; _MData.posHLPass2 = 0;
if (NULL == m_highlight) { if (nullptr == m_highlight) {
return; return;
} }
//int64_t timeStart = ewol::getTime(); //int64_t timeStart = ewol::getTime();
@@ -913,24 +906,24 @@ void appl::Buffer::hightlightGenerateLines(appl::DisplayHLData& _MData, const ap
endSearch = m_HLDataPass1.size(); endSearch = m_HLDataPass1.size();
} }
int64_t kkk; int64_t kkk;
for (kkk = etk_max(startId, 0); kkk < endSearch; ++kkk) { for (kkk = std::max(startId, (int64_t)0); kkk < endSearch; ++kkk) {
// empty section : // empty section :
if (kkk == 0) { if (kkk == 0) {
if (HLStartPos < m_HLDataPass1[kkk].beginStart) { if (HLStartPos < m_HLDataPass1[kkk].start) {
APPL_VERBOSE(" == > (empty section 1 ) kkk=" << kkk << APPL_VERBOSE(" == > (empty section 1 ) kkk=" << kkk <<
" start=" << HLStartPos << " start=" << HLStartPos <<
" stop=" << m_HLDataPass1[kkk].beginStart ); " stop=" << m_HLDataPass1[kkk].start );
m_highlight->parse2(HLStartPos, m_highlight->parse2(HLStartPos,
m_HLDataPass1[kkk].beginStart, m_HLDataPass1[kkk].start,
_MData.HLData, _MData.HLData,
m_data); m_data);
} // else : nothing to do ... } // else : nothing to do ...
} else { } else {
APPL_VERBOSE(" == > (empty section 2 ) kkk=" << kkk << APPL_VERBOSE(" == > (empty section 2 ) kkk=" << kkk <<
" start=" << m_HLDataPass1[kkk-1].endStop << " start=" << m_HLDataPass1[kkk-1].stop <<
" stop=" << m_HLDataPass1[kkk].beginStart ); " stop=" << m_HLDataPass1[kkk].start );
m_highlight->parse2(m_HLDataPass1[kkk-1].endStop, m_highlight->parse2(m_HLDataPass1[kkk-1].stop,
m_HLDataPass1[kkk].beginStart, m_HLDataPass1[kkk].start,
_MData.HLData, _MData.HLData,
m_data); m_data);
} }
@@ -942,9 +935,9 @@ void appl::Buffer::hightlightGenerateLines(appl::DisplayHLData& _MData, const ap
//if( k < (int32_t)m_HLDataPass1.size()) { //if( k < (int32_t)m_HLDataPass1.size()) {
if (m_HLDataPass1.size() != 0) { if (m_HLDataPass1.size() != 0) {
APPL_VERBOSE(" == > (empty section 3 ) kkk=" << kkk << APPL_VERBOSE(" == > (empty section 3 ) kkk=" << kkk <<
" start=" << m_HLDataPass1[kkk-1].endStop << " start=" << m_HLDataPass1[kkk-1].stop <<
" stop=" << HLStop ); " stop=" << HLStop );
m_highlight->parse2(m_HLDataPass1[kkk-1].endStop, m_highlight->parse2(m_HLDataPass1[kkk-1].stop,
HLStop, HLStop,
_MData.HLData, _MData.HLData,
m_data); m_data);
@@ -965,15 +958,15 @@ void appl::Buffer::hightlightGenerateLines(appl::DisplayHLData& _MData, const ap
appl::HighlightInfo* appl::Buffer::getElementColorAtPosition(appl::DisplayHLData& _MData, int64_t _pos) { appl::HighlightInfo* appl::Buffer::getElementColorAtPosition(appl::DisplayHLData& _MData, int64_t _pos) {
int64_t start = etk_max(0, _MData.posHLPass2-1); int64_t start = std::max((int64_t)0, _MData.posHLPass2-1);
for (int64_t iii=start; iii<(int32_t)_MData.HLData.size(); iii++) { for (int64_t iii=start; iii<(int32_t)_MData.HLData.size(); iii++) {
_MData.posHLPass2 = iii; _MData.posHLPass2 = iii;
if( _MData.HLData[iii].beginStart <= _pos if( _MData.HLData[iii].start <= _pos
&& _MData.HLData[iii].endStop > _pos) && _MData.HLData[iii].stop > _pos)
{ {
return &_MData.HLData[iii]; return &_MData.HLData[iii];
} }
if(_MData.HLData[iii].beginStart > _pos) { if(_MData.HLData[iii].start > _pos) {
return getElementColorAtPosition(_pos, _MData.posHLPass1); return getElementColorAtPosition(_pos, _MData.posHLPass1);
} }
} }
@@ -994,3 +987,41 @@ uint32_t appl::Buffer::getCursorLinesId() {
} }
return line; return line;
} }
namespace etk {
template<> std::string to_string<std::shared_ptr<appl::Buffer>>(const std::shared_ptr<appl::Buffer>& _obj) {
if (_obj != nullptr) {
return _obj->getFileName();
}
return "";
}
template<> std::u32string to_u32string<std::shared_ptr<appl::Buffer>>(const std::shared_ptr<appl::Buffer>& _obj) {
return etk::to_u32string(etk::to_string(_obj));
}
template<> bool from_string<std::shared_ptr<appl::Buffer>>(std::shared_ptr<appl::Buffer>& _variableRet, const std::string& _value) {
if (_variableRet != nullptr) {
_variableRet->loadFile(_value);
return true;
}
return false;
}
template<> bool from_string<std::shared_ptr<appl::Buffer>>(std::shared_ptr<appl::Buffer>& _variableRet, const std::u32string& _value) {
return from_string(_variableRet, etk::to_string(_value));
}
template<> std::string to_string<appl::Buffer>(const appl::Buffer& _obj) {
return _obj.getFileName();
}
template<> std::u32string to_u32string<appl::Buffer>(const appl::Buffer& _obj) {
return etk::to_u32string(etk::to_string(_obj));
}
template<> bool from_string<appl::Buffer>(appl::Buffer& _variableRet, const std::string& _value) {
_variableRet.loadFile(_value);
return true;
}
template<> bool from_string<appl::Buffer>(appl::Buffer& _variableRet, const std::u32string& _value) {
return from_string(_variableRet, etk::to_string(_value));
}
};

View File

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

View File

@@ -19,90 +19,99 @@
#define __class__ "BufferManager" #define __class__ "BufferManager"
appl::BufferManager::BufferManager() : appl::BufferManager::BufferManager() :
ewol::Resource("???BufferManager???"), signalNewBuffer(*this, "new-buffer"),
m_bufferSelected(NULL) { signalSelectFile(*this, "select-buffer"),
signalTextSelectionChange(*this, "text-selection-change"),
signalRemoveBuffer(*this, "remove-buffer") {
addObjectType("appl::BufferManager"); addObjectType("appl::BufferManager");
} }
void appl::BufferManager::init(const std::string& _uniqueName) {
ewol::Resource::init(_uniqueName);
}
appl::BufferManager::~BufferManager() { appl::BufferManager::~BufferManager() {
int32_t previousCount = m_list.size();
for (int32_t iii = m_list.size()-1; iii >= 0 ; --iii) {
if (m_list[iii] == NULL) {
continue;
}
delete(m_list[iii]);
if (previousCount == m_list.size()) {
APPL_ERROR("Error in removing buffer !! ");
}
previousCount = m_list.size();
}
m_list.clear(); m_list.clear();
} }
appl::Buffer* appl::BufferManager::createNewBuffer() { std::shared_ptr<appl::Buffer> appl::BufferManager::createNewBuffer() {
appl::Buffer* tmp = new appl::Buffer(); std::shared_ptr<appl::Buffer> tmp = appl::Buffer::create();
if (tmp == NULL) { if (tmp == nullptr) {
APPL_ERROR("Can not allocate the Buffer (empty)."); APPL_ERROR("Can not allocate the Buffer (empty).");
return NULL; return nullptr;
} }
tmp->setParent(shared_from_this());
m_list.push_back(tmp); m_list.push_back(tmp);
sendMultiCast(appl::MsgSelectNewFile, tmp->getFileName()); APPL_INFO("Create a new Buffer");
signalNewBuffer.emit(tmp->getFileName());
APPL_INFO("Create a new Buffer (done)");
APPL_INFO("select Buffer");
signalSelectFile.emit(tmp->getFileName());
APPL_INFO("select Buffer (done)");
return tmp; return tmp;
} }
appl::Buffer* appl::BufferManager::get(const std::string& _fileName, bool _createIfNeeded) { std::shared_ptr<appl::Buffer> appl::BufferManager::get(const std::string& _fileName, bool _createIfNeeded) {
APPL_INFO("get(" << _fileName << "," << _createIfNeeded << ")"); APPL_INFO("get('" << _fileName << "'," << _createIfNeeded << ")");
for (int32_t iii = 0; iii < m_list.size(); ++iii) { for (auto &it : m_list) {
if (m_list[iii] == NULL) { if (it == nullptr) {
continue; continue;
} }
if (m_list[iii]->getFileName() == _fileName) { if (it->getFileName() == _fileName) {
return m_list[iii]; return it;
} }
} }
if (_createIfNeeded == true) { if (_createIfNeeded == true) {
if (etk::FSNodeGetType(_fileName) == etk::FSN_FOLDER) { if (etk::FSNodeGetType(_fileName) == etk::FSN_FOLDER) {
APPL_WARNING("try open a folder : " << _fileName); APPL_WARNING("try open a folder : " << _fileName);
APPL_CRITICAL("plop"); APPL_CRITICAL("plop");
return NULL; return nullptr;
} }
appl::Buffer* tmp = new appl::Buffer(); std::shared_ptr<appl::Buffer> tmp = appl::Buffer::create();
if (tmp == NULL) { if (tmp == nullptr) {
APPL_ERROR("Can not allocate the Buffer class : " << _fileName); APPL_ERROR("Can not allocate the Buffer class : " << _fileName);
return NULL; return nullptr;
} }
tmp->setParent(shared_from_this());
tmp->loadFile(_fileName); tmp->loadFile(_fileName);
m_list.push_back(tmp); m_list.push_back(tmp);
APPL_INFO("Creata a open Buffer");
signalNewBuffer.emit(tmp->getFileName());
APPL_INFO("Creata a open Buffer (done)");
return tmp; return tmp;
} }
return NULL; return nullptr;
}
void appl::BufferManager::setBufferSelected(appl::Buffer* _bufferSelected) {
m_bufferSelected = _bufferSelected;
sendMultiCast(appl::MsgSelectChange, "");
} }
void appl::BufferManager::onObjectRemove(ewol::Object * _removeObject) { void appl::BufferManager::setBufferSelected(std::shared_ptr<appl::Buffer> _bufferSelected) {
if (m_bufferSelected == _removeObject) { m_bufferSelected = _bufferSelected;
setBufferSelected(NULL); if (m_bufferSelected == nullptr) {
} APPL_ERROR("select a NULL buffer ...");
for (int32_t iii = 0; iii < m_list.size(); ++iii) {
if (m_list[iii] != _removeObject) {
continue;
}
m_list[iii] = NULL;
m_list.erase(m_list.begin()+iii);
return; return;
} }
APPL_INFO("Set buffer selected");
//signalSelectFile.emit(m_bufferSelected->getName());
APPL_INFO("Set buffer selected (done)");
}
std::shared_ptr<appl::Buffer> appl::BufferManager::get(int32_t _id) {
int32_t id = 0;
for (auto &it : m_list) {
if (id == _id) {
return it;
}
id++;
}
return m_list.back();
} }
bool appl::BufferManager::exist(const std::string& _fileName) { bool appl::BufferManager::exist(const std::string& _fileName) {
for (int32_t iii = 0; iii < m_list.size(); ++iii) { for (auto &it : m_list) {
if (m_list[iii] == NULL) { if (it == nullptr) {
continue; continue;
} }
if (m_list[iii]->getFileName() == _fileName) { if (it->getFileName() == _fileName) {
return true; return true;
} }
} }
@@ -111,40 +120,42 @@ bool appl::BufferManager::exist(const std::string& _fileName) {
void appl::BufferManager::open(const std::string& _fileName) { void appl::BufferManager::open(const std::string& _fileName) {
if (exist(_fileName) == true) { if (exist(_fileName) == true) {
APPL_WARNING(" the element '" << _fileName << "' already exist ... just reselect it ...");
signalSelectFile.emit(_fileName);
return; return;
} }
if (get(_fileName, true) == NULL) { if (get(_fileName, true) == nullptr) {
APPL_ERROR("Error get '" << _fileName << "' ... ");
return; return;
} }
sendMultiCast(appl::MsgSelectNewFile, _fileName); signalSelectFile.emit(_fileName);
} }
void appl::BufferManager::onReceiveMessage(const ewol::object::Message& _msg) {
APPL_DEBUG("receive message !!! " << _msg);
}
appl::BufferManager* appl::BufferManager::keep() { void appl::BufferManager::requestDestroyFromChild(const std::shared_ptr<Object>& _child) {
//EWOL_INFO("KEEP : appl::GlyphPainting : file : \"" << _filename << "\""); APPL_WARNING("Buffer request a close...");
appl::BufferManager* object = static_cast<appl::BufferManager*>(getManager().localKeep("???BufferManager???")); bool find = false;
if (NULL != object) { int32_t newValue = -1;
return object; 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 .... if (find == true) {
EWOL_INFO("CREATE : appl::BufferManager: ???BufferManager???"); signalRemoveBuffer.emit(std::dynamic_pointer_cast<appl::Buffer>(_child));
object = new appl::BufferManager(); }
if (NULL == object) { if (m_bufferSelected == _child) {
EWOL_ERROR("allocation error of a resource : ???BufferManager???"); APPL_ERROR("is selected");
return NULL; signalSelectFile.emit("");
m_bufferSelected = nullptr;
} }
getManager().localAdd(object);
return object;
}
void appl::BufferManager::release(appl::BufferManager*& _object) {
if (NULL == _object) {
return;
}
ewol::Resource* object2 = static_cast<ewol::Resource*>(_object);
getManager().release(object2);
_object = NULL;
} }

View File

@@ -9,6 +9,7 @@
#ifndef __BUFFER_MANAGER_H__ #ifndef __BUFFER_MANAGER_H__
#define __BUFFER_MANAGER_H__ #define __BUFFER_MANAGER_H__
#include <list>
#include <appl/Buffer.h> #include <appl/Buffer.h>
#include <appl/globalMsg.h> #include <appl/globalMsg.h>
#include <ewol/widget/Widget.h> #include <ewol/widget/Widget.h>
@@ -16,11 +17,19 @@
namespace appl { namespace appl {
class BufferManager : public ewol::Resource { class BufferManager : public ewol::Resource {
public:
ewol::object::Signal<std::string> signalNewBuffer;
ewol::object::Signal<std::string> signalSelectFile;
ewol::object::Signal<void> signalTextSelectionChange;
ewol::object::Signal<std::shared_ptr<appl::Buffer>> signalRemoveBuffer;
protected: protected:
BufferManager(); BufferManager();
~BufferManager(); void init(const std::string& _uniqueName);
public:
DECLARE_RESOURCE_SINGLE_FACTORY(BufferManager, "???Buffer_Manager???");
virtual ~BufferManager();
private: private:
std::vector<appl::Buffer*> m_list; // list of all buffer curently open std::list<std::shared_ptr<appl::Buffer>> m_list; // list of all buffer curently open
public: public:
/** /**
* @brief Get a specific buffer with his name (can create a new buffer). * @brief Get a specific buffer with his name (can create a new buffer).
@@ -28,7 +37,7 @@ namespace appl {
* @param[in] _createIfNeeded Create the buffer if not existed. * @param[in] _createIfNeeded Create the buffer if not existed.
* @return a pointer on the buffer * @return a pointer on the buffer
*/ */
appl::Buffer* get(const std::string& _fileName, bool _createIfNeeded=false); std::shared_ptr<appl::Buffer> get(const std::string& _fileName, bool _createIfNeeded=false);
/** /**
* @brief Load a specific file, event if it not existed: * @brief Load a specific file, event if it not existed:
* @param[in] _fileName Name of the file to open or create. * @param[in] _fileName Name of the file to open or create.
@@ -52,45 +61,29 @@ namespace appl {
* @param[in] _id Number of buffer * @param[in] _id Number of buffer
* @return pointer on the buffer * @return pointer on the buffer
*/ */
appl::Buffer* get(int32_t _id) { std::shared_ptr<appl::Buffer> get(int32_t _id);
return m_list[_id];
}
/** /**
* @brief Create a new buffer empty. * @brief Create a new buffer empty.
* @return Created buffer or NULL. * @return Created buffer or nullptr.
*/ */
appl::Buffer* createNewBuffer(); std::shared_ptr<appl::Buffer> createNewBuffer();
private: private:
appl::Buffer* m_bufferSelected; std::shared_ptr<appl::Buffer> m_bufferSelected;
public: public:
/** /**
* @brief Set the current buffer selected * @brief Set the current buffer selected
* @param[in] _bufferSelected Pointer on the buffer selected * @param[in] _bufferSelected Pointer on the buffer selected
*/ */
void setBufferSelected(appl::Buffer* _bufferSelected); void setBufferSelected(std::shared_ptr<appl::Buffer> _bufferSelected);
/** /**
* @brief Get the current buffer selected * @brief Get the current buffer selected
* @return Pointer on the buffer selected * @return Pointer on the buffer selected
*/ */
appl::Buffer* getBufferSelected() { std::shared_ptr<appl::Buffer> getBufferSelected() {
return m_bufferSelected; return m_bufferSelected;
}; };
public: // herited function private:
void onReceiveMessage(const ewol::object::Message& _msg); void requestDestroyFromChild(const std::shared_ptr<Object>& _child);
void onObjectRemove(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 appl::BufferManager* keep();
/**
* @brief release the keeped resources
* @param[in,out] reference on the object pointer
*/
static void release(appl::BufferManager*& _object);
}; };
}; };

View File

@@ -17,7 +17,7 @@ namespace appl {
public: public:
// Constructeur // Constructeur
GlyphDecoration(const std::string& _newColorName = "no_name"); GlyphDecoration(const std::string& _newColorName = "no_name");
~GlyphDecoration() { virtual ~GlyphDecoration() {
// nothing to do ... // nothing to do ...
}; };
private: private:

View File

@@ -18,9 +18,12 @@
appl::GlyphPainting::GlyphPainting(const std::string& _filename) : appl::GlyphPainting::GlyphPainting() {
ewol::Resource(_filename) {
addObjectType("appl::GlyphPainting"); addObjectType("appl::GlyphPainting");
}
void appl::GlyphPainting::init(const std::string& _filename) {
ewol::Resource::init(_filename);
EWOL_DEBUG("SFP : load \"" << _filename << "\""); EWOL_DEBUG("SFP : load \"" << _filename << "\"");
reload(); reload();
} }
@@ -43,13 +46,13 @@ void appl::GlyphPainting::reload() {
APPL_DEBUG(tmppppp); APPL_DEBUG(tmppppp);
*/ */
ejson::Array* baseArray = doc.getArray("ednColor"); ejson::Array* baseArray = doc.getArray("ednColor");
if (baseArray == NULL) { if (baseArray == nullptr) {
APPL_ERROR("Can not get basic array : 'ednColor'"); APPL_ERROR("Can not get basic array : 'ednColor'");
return; return;
} }
for (int32_t iii = 0; iii < baseArray->size(); ++iii) { for (size_t iii = 0; iii < baseArray->size(); ++iii) {
ejson::Object* tmpObj = baseArray->getObject(iii); ejson::Object* tmpObj = baseArray->getObject(iii);
if (tmpObj == NULL) { if (tmpObj == nullptr) {
APPL_DEBUG(" can not get object in 'ednColor' id=" << iii); APPL_DEBUG(" can not get object in 'ednColor' id=" << iii);
continue; continue;
} }
@@ -60,7 +63,7 @@ void appl::GlyphPainting::reload() {
bool bold = tmpObj->getBooleanValue("bold", false); bool bold = tmpObj->getBooleanValue("bold", false);
APPL_VERBOSE("find new color : '" << name << "' fg='" << foreground << "' bg='" << background << "' italic='" << italic << "' bold='" << bold << "'"); APPL_VERBOSE("find new color : '" << name << "' fg='" << foreground << "' bg='" << background << "' italic='" << italic << "' bold='" << bold << "'");
bool findElement = false; bool findElement = false;
for (int32_t jjj=0; jjj<m_list.size(); ++jjj) { for (size_t jjj=0; jjj<m_list.size(); ++jjj) {
if (m_list[jjj].getName() != name) { if (m_list[jjj].getName() != name) {
continue; continue;
} }
@@ -84,7 +87,7 @@ void appl::GlyphPainting::reload() {
int32_t appl::GlyphPainting::request(const std::string& _name) { int32_t appl::GlyphPainting::request(const std::string& _name) {
for (int32_t iii=0; iii<m_list.size(); ++iii) { for (size_t iii=0; iii<m_list.size(); ++iii) {
if (m_list[iii].getName() == _name) { if (m_list[iii].getName() == _name) {
return iii; return iii;
} }
@@ -94,30 +97,3 @@ int32_t appl::GlyphPainting::request(const std::string& _name) {
m_list.push_back(tmpDeco); m_list.push_back(tmpDeco);
return m_list.size()-1; return m_list.size()-1;
} }
appl::GlyphPainting* appl::GlyphPainting::keep(const std::string& _filename) {
//EWOL_INFO("KEEP : appl::GlyphPainting : file : \"" << _filename << "\"");
appl::GlyphPainting* object = static_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 = new appl::GlyphPainting(_filename);
if (NULL == object) {
EWOL_ERROR("allocation error of a resource : ??GlyphPainting??");
return NULL;
}
getManager().localAdd(object);
return object;
}
void appl::GlyphPainting::release(appl::GlyphPainting*& _object) {
if (NULL == _object) {
return;
}
ewol::Resource* object2 = static_cast<ewol::Resource*>(_object);
getManager().release(object2);
_object = NULL;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -14,35 +14,51 @@
#include <ewol/widget/Entry.h> #include <ewol/widget/Entry.h>
#include <appl/Buffer.h> #include <appl/Buffer.h>
#include <appl/Gui/ViewerManager.h> #include <appl/Gui/ViewerManager.h>
namespace appl {
class Search : public ewol::widget::Composer { namespace widget {
private: class Search : public ewol::widget::Composer {
appl::ViewerManager* m_viewerManager; //!< handle on the buffer manager private:
bool m_forward; std::shared_ptr<appl::ViewerManager> m_viewerManager; //!< handle on the buffer manager
bool m_caseSensitive; bool m_forward;
bool m_wrap; bool m_caseSensitive;
ewol::widget::Entry* m_searchEntry; bool m_wrap;
ewol::widget::Entry* m_replaceEntry; std::shared_ptr<ewol::widget::Entry> m_searchEntry;
std::u32string m_searchData; std::shared_ptr<ewol::widget::Entry> m_replaceEntry;
std::u32string m_replaceData; std::u32string m_searchData;
public: std::u32string m_replaceData;
// Constructeur protected:
Search(); // Constructeur
~Search(); Search();
private: void init();
/** public:
* @brief Find the next element that corespond at the search DECLARE_FACTORY(Search);
*/ virtual ~Search();
void find(); private:
/** /**
* @brief Replace the current selected text. * @brief Find the next element that corespond at the search
*/ */
void replace(); void find();
public: // derived function /**
virtual void onReceiveMessage(const ewol::object::Message& _msg); * @brief Replace the current selected text.
virtual void onObjectRemove(ewol::Object * _removeObject); */
void replace();
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);
};
};
}; };
#endif #endif

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -17,62 +17,30 @@
#undef __class__ #undef __class__
#define __class__ "ViewerManager" #define __class__ "ViewerManager"
appl::ViewerManager::ViewerManager() : appl::ViewerManager::ViewerManager() {
ewol::Resource("???ViewerManager???"),
m_viewer(NULL) {
addObjectType("appl::ViewerManager"); addObjectType("appl::ViewerManager");
// load buffer manager: // load buffer manager:
m_bufferManager = appl::BufferManager::keep(); m_bufferManager = appl::BufferManager::create();
}
void appl::ViewerManager::init(const std::string& _uniqueName) {
ewol::Resource::init(_uniqueName);
} }
appl::ViewerManager::~ViewerManager() { appl::ViewerManager::~ViewerManager() {
appl::BufferManager::release(m_bufferManager);
} }
void appl::ViewerManager::setViewerSelected(appl::TextViewer* _viewer, appl::Buffer* _buffer) { bool appl::ViewerManager::isLastSelected(const std::shared_ptr<appl::TextViewer>& _viewer) {
if (m_viewer == _viewer) { return m_viewer.lock() == _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; return;
} }
m_viewer = _viewer; m_viewer = _viewer;
if (m_bufferManager != NULL) { if (m_bufferManager != nullptr) {
m_bufferManager->setBufferSelected(_buffer); //m_bufferManager->setBufferSelected(_buffer);
} }
} }
void appl::ViewerManager::onReceiveMessage(const ewol::object::Message& _msg) {
APPL_DEBUG("receive message !!! " << _msg);
}
void appl::ViewerManager::onObjectRemove(ewol::Object* _removeObject) {
ewol::Resource:: onObjectRemove(_removeObject);
if (_removeObject == m_viewer) {
m_viewer = NULL;
return;
}
}
appl::ViewerManager* appl::ViewerManager::keep() {
//EWOL_INFO("KEEP : appl::GlyphPainting : file : \"" << _filename << "\"");
appl::ViewerManager* object = static_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 = new appl::ViewerManager();
if (NULL == object) {
EWOL_ERROR("allocation error of a resource : ???ViewerManager???");
return NULL;
}
getManager().localAdd(object);
return object;
}
void appl::ViewerManager::release(appl::ViewerManager*& _object) {
if (NULL == _object) {
return;
}
ewol::Resource* object2 = static_cast<ewol::Resource*>(_object);
getManager().release(object2);
_object = NULL;
}

View File

@@ -20,47 +20,32 @@ namespace appl {
class ViewerManager : public ewol::Resource { class ViewerManager : public ewol::Resource {
protected: protected:
ViewerManager(); ViewerManager();
~ViewerManager(); void init(const std::string& _uniqueName);
public:
DECLARE_RESOURCE_SINGLE_FACTORY(ViewerManager, "???ViewerManager???");
virtual ~ViewerManager();
private: private:
appl::BufferManager* m_bufferManager; //!< handle on the buffer manager std::shared_ptr<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
appl::TextViewer* m_viewer; std::weak_ptr<appl::TextViewer> m_viewer;
public: public:
/** /**
* @brief Set the current buffer selected * @brief Set the current buffer selected
* @param[in] _viewer Pointer on the viewer selected * @param[in] _viewer Pointer on the viewer selected
*/ */
void setViewerSelected(appl::TextViewer* _viewer, appl::Buffer* _buffer); void setViewerSelected(const std::shared_ptr<appl::TextViewer>& _viewer, const std::shared_ptr<appl::Buffer>& _buffer);
/** /**
* @brief Get the current buffer selected * @brief Get the current buffer selected
* @return Pointer on the buffer selected * @return Pointer on the buffer selected
*/ */
appl::TextViewer* getViewerSelected() { std::shared_ptr<appl::TextViewer> getViewerSelected() {
return m_viewer; return m_viewer.lock();
}; };
/** /**
* @breif Check if the element is the last request selection * @breif Check if the element is the last request selection
* @param[in] _viewer element selected. * @param[in] _viewer element selected.
* @return true if the element is selected * @return true if the element is selected
*/ */
bool isLastSelected(appl::TextViewer* _viewer) { bool isLastSelected(const std::shared_ptr<appl::TextViewer>& _viewer);
return m_viewer == _viewer;
};
public: // herited function
void onReceiveMessage(const ewol::object::Message& _msg);
void onObjectRemove(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 appl::ViewerManager* keep();
/**
* @brief release the keeped resources
* @param[in,out] reference on the object pointer
*/
static void release(appl::ViewerManager*& _object);
}; };
}; };

View File

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

View File

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

View File

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

View File

@@ -13,24 +13,23 @@
#undef __class__ #undef __class__
#define __class__ "WorkerSaveAllFile" #define __class__ "WorkerSaveAllFile"
static const char* s_saveAsDone = "save-as-done"; appl::WorkerSaveAllFile::WorkerSaveAllFile() {
appl::WorkerSaveAllFile::WorkerSaveAllFile() :
m_worker(NULL),
m_bufferManager(NULL) {
addObjectType("appl::WorkerSaveAllFile"); addObjectType("appl::WorkerSaveAllFile");
// load buffer manager: // load buffer manager:
m_bufferManager = appl::BufferManager::keep(); m_bufferManager = appl::BufferManager::create();
}
if (m_bufferManager == NULL) {
void appl::WorkerSaveAllFile::init() {
ewol::object::Worker::init();
if (m_bufferManager == nullptr) {
APPL_ERROR("can not call unexistant buffer manager ... "); APPL_ERROR("can not call unexistant buffer manager ... ");
autoDestroy(); destroy();
return; return;
} }
// List all current open file : // List all current open file :
for (size_t iii=0; iii<m_bufferManager->size(); ++iii) { for (int32_t iii=0; iii<m_bufferManager->size(); ++iii) {
appl::Buffer* tmpBuffer = m_bufferManager->get(iii); std::shared_ptr<appl::Buffer> tmpBuffer = m_bufferManager->get(iii);
if (tmpBuffer == NULL) { if (tmpBuffer == nullptr) {
continue; continue;
} }
if (tmpBuffer->isModify() == false) { if (tmpBuffer->isModify() == false) {
@@ -44,54 +43,41 @@ appl::WorkerSaveAllFile::WorkerSaveAllFile() :
} }
// checkif an element has something to do in the queue // checkif an element has something to do in the queue
if (m_bufferNameList.size() == 0) { if (m_bufferNameList.size() == 0) {
autoDestroy(); destroy();
return; return;
} }
// create the worker : // create the worker :
m_worker = new appl::WorkerSaveFile(m_bufferNameList.front()); m_worker = appl::WorkerSaveFile::create(m_bufferNameList.front());
// remove first element : // remove first element :
m_bufferNameList.erase(m_bufferNameList.begin()); m_bufferNameList.erase(m_bufferNameList.begin());
if (m_bufferNameList.size() == 0) { if (m_bufferNameList.size() == 0) {
autoDestroy(); destroy();
return; return;
} }
m_worker->registerOnEvent(this, appl::WorkerSaveFile::eventSaveDone, s_saveAsDone); m_worker->signalSaveDone.bind(shared_from_this(), &appl::WorkerSaveAllFile::onCallbackSaveAsDone);
} }
appl::WorkerSaveAllFile::~WorkerSaveAllFile() { appl::WorkerSaveAllFile::~WorkerSaveAllFile() {
appl::BufferManager::release(m_bufferManager); APPL_ERROR("Remove Worker");
} }
void appl::WorkerSaveAllFile::onReceiveMessage(const ewol::object::Message& _msg) { void appl::WorkerSaveAllFile::onCallbackSaveAsDone() {
if (m_bufferManager == NULL) { if (m_bufferManager == nullptr) {
// nothing to do in this case ==> can do nothing ... // nothing to do in this case ==> can do nothing ...
return; return;
} }
if (_msg.getMessage() == s_saveAsDone) { if (m_bufferNameList.size() == 0) {
if (m_bufferNameList.size() == 0) { destroy();
autoDestroy(); return;
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(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();
} }
// 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__ #ifndef __WORKER_SAVE_ALL_FILE_H__
#define __WORKER_SAVE_ALL_FILE_H__ #define __WORKER_SAVE_ALL_FILE_H__
#include <ewol/object/Worker.h>
#include <appl/BufferManager.h> #include <appl/BufferManager.h>
#include <appl/Gui/WorkerSaveFile.h> #include <appl/Gui/WorkerSaveFile.h>
namespace appl { namespace appl {
class WorkerSaveAllFile : public ewol::Object { class WorkerSaveAllFile : public ewol::object::Worker {
public: protected:
WorkerSaveAllFile(); WorkerSaveAllFile();
void init();
public:
DECLARE_FACTORY(WorkerSaveAllFile);
virtual ~WorkerSaveAllFile(); virtual ~WorkerSaveAllFile();
private: private:
std::vector<std::string> m_bufferNameList; std::vector<std::string> m_bufferNameList;
appl::WorkerSaveFile* m_worker; //! pop-up element that is open... std::shared_ptr<appl::WorkerSaveFile> m_worker; //! pop-up element that is open...
appl::BufferManager* m_bufferManager; //!< handle on the buffer manager std::shared_ptr<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
public: // derived function public: // callback function
virtual void onReceiveMessage(const ewol::object::Message& _msg); void onCallbackSaveAsDone();
virtual void onObjectRemove(ewol::Object * _removeObject);
}; };
}; };

View File

@@ -13,57 +13,56 @@
#undef __class__ #undef __class__
#define __class__ "WorkerSaveFile" #define __class__ "WorkerSaveFile"
const char* appl::WorkerSaveFile::eventSaveDone = "save-file-done";
static const char* s_saveAsValidate = "save-as-validate"; appl::WorkerSaveFile::WorkerSaveFile() :
signalSaveDone(*this, "save-file-done"),
appl::WorkerSaveFile::WorkerSaveFile(const std::string& _bufferName, bool _forceSaveAs) : signalAbort(*this, "save-file-abort") {
m_bufferName(_bufferName),
m_chooser(NULL),
m_bufferManager(NULL) {
addObjectType("appl::WorkerSaveFile"); addObjectType("appl::WorkerSaveFile");
addEventId(eventSaveDone);
// load buffer manager: // load buffer manager:
m_bufferManager = appl::BufferManager::keep(); m_bufferManager = appl::BufferManager::create();
}
if (m_bufferManager == NULL) {
void appl::WorkerSaveFile::init(const std::string& _bufferName, bool _forceSaveAs) {
ewol::object::Worker::init();
m_bufferName = _bufferName;
if (m_bufferManager == nullptr) {
APPL_ERROR("can not call unexistant buffer manager ... "); APPL_ERROR("can not call unexistant buffer manager ... ");
autoDestroy(); destroy();
return; return;
} }
if (m_bufferName == "") { if (m_bufferName == "") {
// need to find the curent file ... // need to find the curent file ...
appl::Buffer* tmpp = m_bufferManager->getBufferSelected(); std::shared_ptr<appl::Buffer> tmpp = m_bufferManager->getBufferSelected();
if (tmpp == NULL) { if (tmpp == nullptr) {
APPL_ERROR("No selected buffer now ..."); APPL_ERROR("No selected buffer now ...");
autoDestroy(); destroy();
return; return;
} }
m_bufferName = tmpp->getFileName(); m_bufferName = tmpp->getFileName();
} }
if (m_bufferManager->exist(m_bufferName) == false) { if (m_bufferManager->exist(m_bufferName) == false) {
APPL_ERROR("Try to save an non-existant file :" << m_bufferName); APPL_ERROR("Try to save an non-existant file :" << m_bufferName);
autoDestroy(); destroy();
return; return;
} }
appl::Buffer* tmpBuffer = m_bufferManager->get(m_bufferName); std::shared_ptr<appl::Buffer> tmpBuffer = m_bufferManager->get(m_bufferName);
if (tmpBuffer == NULL) { if (tmpBuffer == nullptr) {
APPL_ERROR("Error to get the buffer : " << m_bufferName); APPL_ERROR("Error to get the buffer : " << m_bufferName);
autoDestroy(); destroy();
return; return;
} }
if (_forceSaveAs == false) { if (_forceSaveAs == false) {
if (tmpBuffer->hasFileName() == true) { if (tmpBuffer->hasFileName() == true) {
tmpBuffer->storeFile(); tmpBuffer->storeFile();
generateEventId(eventSaveDone); signalSaveDone.emit();
autoDestroy(); destroy();
return; return;
} }
} }
m_chooser = new ewol::widget::FileChooser(); m_chooser = ewol::widget::FileChooser::create();
if (NULL == m_chooser) { if (nullptr == m_chooser) {
APPL_ERROR("Can not allocate widget == > display might be in error"); APPL_ERROR("Can not allocate widget == > display might be in error");
autoDestroy(); destroy();
return; return;
} }
m_chooser->setTitle("Save files As..."); m_chooser->setTitle("Save files As...");
@@ -71,60 +70,59 @@ appl::WorkerSaveFile::WorkerSaveFile(const std::string& _bufferName, bool _force
etk::FSNode tmpName(m_bufferName); etk::FSNode tmpName(m_bufferName);
m_chooser->setFolder(tmpName.getNameFolder()); m_chooser->setFolder(tmpName.getNameFolder());
m_chooser->setFileName(tmpName.getNameFile()); m_chooser->setFileName(tmpName.getNameFile());
ewol::widget::Windows* tmpWindows = ewol::getContext().getWindows(); std::shared_ptr<ewol::widget::Windows> tmpWindows = ewol::getContext().getWindows();
if (tmpWindows == NULL) { if (tmpWindows == nullptr) {
APPL_ERROR("Error to get the windows."); APPL_ERROR("Error to get the windows.");
autoDestroy(); destroy();
return; return;
} }
tmpWindows->popUpWidgetPush(m_chooser); tmpWindows->popUpWidgetPush(m_chooser);
m_chooser->registerOnEvent(this, ewol::widget::FileChooser::eventValidate, s_saveAsValidate); m_chooser->signalValidate.bind(shared_from_this(), &appl::WorkerSaveFile::onCallbackSaveAsValidate);
m_chooser->signalCancel.bind(shared_from_this(), &appl::WorkerSaveFile::onCallbackCancel);
} }
appl::WorkerSaveFile::~WorkerSaveFile() { appl::WorkerSaveFile::~WorkerSaveFile() {
appl::BufferManager::release(m_bufferManager); APPL_ERROR("Remove Worker");
} }
void appl::WorkerSaveFile::onReceiveMessage(const ewol::object::Message& _msg) { void appl::WorkerSaveFile::onCallbackCancel() {
if (m_bufferManager == NULL) { signalAbort.emit();
destroy();
}
void appl::WorkerSaveFile::onCallbackSaveAsValidate(const std::string& _value) {
if (m_bufferManager == nullptr) {
// nothing to do in this case ==> can do nothing ... // nothing to do in this case ==> can do nothing ...
destroy();
return; return;
} }
if (_msg.getMessage() == s_saveAsValidate) { if (_value == "") {
if (_msg.getData() == "") { APPL_ERROR(" might be an error of the File chooser system...");
APPL_ERROR(" might be an error of the File chooser system..."); destroy();
return; return;
}
if (m_bufferManager->exist(m_bufferName) == false) {
APPL_ERROR("Try to save an non-existant file :" << m_bufferName);
return;
}
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::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(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 (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__ #define __WORKER_SAVE_FILE_H__
#include <ewol/widget/meta/FileChooser.h> #include <ewol/widget/meta/FileChooser.h>
#include <ewol/object/Worker.h>
#include <appl/BufferManager.h> #include <appl/BufferManager.h>
namespace appl { namespace appl {
class WorkerSaveFile : public ewol::Object { class WorkerSaveFile : public ewol::object::Worker {
public: public:
static const char* eventSaveDone; ewol::object::Signal<void> signalSaveDone;
ewol::object::Signal<void> signalAbort;
protected:
WorkerSaveFile();
void init(const std::string& _bufferName, bool _forceSaveAs=true);
public: public:
WorkerSaveFile(const std::string& _bufferName, bool _forceSaveAs=true); DECLARE_FACTORY(WorkerSaveFile);
virtual ~WorkerSaveFile(); virtual ~WorkerSaveFile();
private: private:
std::string m_bufferName; std::string m_bufferName;
ewol::widget::FileChooser* m_chooser; //! pop-up element that is open... std::shared_ptr<ewol::widget::FileChooser> m_chooser; //! pop-up element that is open...
appl::BufferManager* m_bufferManager; //!< handle on the buffer manager std::shared_ptr<appl::BufferManager> m_bufferManager; //!< handle on the buffer manager
public: // derived function public: // callback function
virtual void onReceiveMessage(const ewol::object::Message& _msg); void onCallbackSaveAsValidate(const std::string& _value);
virtual void onObjectRemove(ewol::Object * _removeObject); void onCallbackCancel();
}; };
}; };

View File

@@ -25,21 +25,26 @@
#define HL2_DEBUG APPL_VERBOSE #define HL2_DEBUG APPL_VERBOSE
void appl::Highlight::parseRules(exml::Element* _child, void appl::Highlight::parseRules(exml::Element* _child,
std::vector<HighlightPattern*>& _mListPatern, std::vector<std::unique_ptr<HighlightPattern>>& _mListPatern,
int32_t _level) { int32_t _level,
bool forceMaximize) {
// Create the patern ... // Create the patern ...
HighlightPattern *myPattern = new HighlightPattern(m_paintingProperties); HighlightPattern *myPattern = new HighlightPattern(m_paintingProperties);
// parse under Element // parse under Element
myPattern->parseRules(_child, _level); myPattern->parseRules(_child, _level, forceMaximize);
// add element in the list // add element in the list
_mListPatern.push_back(myPattern); _mListPatern.push_back(std::unique_ptr<HighlightPattern>(myPattern));
} }
appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _colorFile) : appl::Highlight::Highlight() {
ewol::Resource(_xmlFilename), addObjectType("appl::Highlight");
m_typeName("") { }
void appl::Highlight::init(const std::string& _xmlFilename, const std::string& _colorFile) {
ewol::Resource::init(_xmlFilename);
// keep color propertiy file : // keep color propertiy file :
m_paintingProperties = appl::GlyphPainting::keep(_colorFile); m_paintingProperties = appl::GlyphPainting::create(_colorFile);
exml::Document doc; exml::Document doc;
if (doc.load(_xmlFilename) == false) { if (doc.load(_xmlFilename) == false) {
@@ -47,7 +52,7 @@ appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _
return; return;
} }
exml::Element* root = doc.getNamed("EdnLang"); exml::Element* root = doc.getNamed("EdnLang");
if (NULL == root ) { if (nullptr == root ) {
APPL_ERROR("(l ?) main node not find: \"EdnLang\" ..."); APPL_ERROR("(l ?) main node not find: \"EdnLang\" ...");
return; return;
} }
@@ -55,9 +60,9 @@ appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _
int32_t level1 = 0; int32_t level1 = 0;
int32_t level2 = 0; int32_t level2 = 0;
// parse all the elements : // parse all the elements :
for(int32_t iii = 0; iii < root->size(); ++iii) { for(size_t iii = 0; iii < root->size(); ++iii) {
exml::Element* child = root->getElement(iii); exml::Element* child = root->getElement(iii);
if (child == NULL) { if (child == nullptr) {
// trash here all that is not element ... // trash here all that is not element ...
continue; continue;
} }
@@ -69,9 +74,9 @@ appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _
} }
} else if (child->getValue() == "pass1") { } else if (child->getValue() == "pass1") {
// get sub Nodes ... // get sub Nodes ...
for(int32_t jjj=0; jjj< child->size(); jjj++) { for(size_t jjj=0; jjj< child->size(); jjj++) {
exml::Element* passChild = child->getElement(jjj); exml::Element* passChild = child->getElement(jjj);
if (passChild == NULL) { if (passChild == nullptr) {
continue; continue;
} }
if (passChild->getValue() != "rule") { if (passChild->getValue() != "rule") {
@@ -82,16 +87,16 @@ appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _
} }
} else if (child->getValue() == "pass2") { } else if (child->getValue() == "pass2") {
// get sub Nodes ... // get sub Nodes ...
for(int32_t jjj=0; jjj< child->size(); jjj++) { for(size_t jjj=0; jjj< child->size(); jjj++) {
exml::Element* passChild = child->getElement(jjj); exml::Element* passChild = child->getElement(jjj);
if (passChild == NULL) { if (passChild == nullptr) {
continue; continue;
} }
if (passChild->getValue() != "rule") { if (passChild->getValue() != "rule") {
APPL_ERROR("(l "<< passChild->getPos() << ") node not suported : \""<< passChild->getValue() << "\" must be [rule]" ); APPL_ERROR("(l "<< passChild->getPos() << ") node not suported : \""<< passChild->getValue() << "\" must be [rule]" );
continue; continue;
} }
parseRules(passChild, m_listHighlightPass2, level2++); parseRules(passChild, m_listHighlightPass2, level2++, true);
} }
} else { } else {
APPL_ERROR("(l "<< child->getPos() << ") node not suported : \""<< child->getValue() << "\" must be [ext,pass1,pass2]" ); APPL_ERROR("(l "<< child->getPos() << ") node not suported : \""<< child->getValue() << "\" must be [ext,pass1,pass2]" );
@@ -100,24 +105,19 @@ appl::Highlight::Highlight(const std::string& _xmlFilename, const std::string& _
} }
appl::Highlight::~Highlight() { appl::Highlight::~Highlight() {
// clean all Element
for (int32_t iii = 0; iii < m_listHighlightPass1.size(); ++iii) {
if (m_listHighlightPass1[iii] != NULL) {
delete(m_listHighlightPass1[iii]);
m_listHighlightPass1[iii] = NULL;
}
}
// clear the compleate list // clear the compleate list
m_listHighlightPass1.clear(); m_listHighlightPass1.clear();
// clear the compleate list // clear the compleate list
m_listHighlightPass2.clear();
// clear the compleate list
m_listExtentions.clear(); m_listExtentions.clear();
} }
bool appl::Highlight::hasExtention(const std::string& _ext) { bool appl::Highlight::hasExtention(const std::string& _ext) {
for (int32_t iii=0; iii<m_listExtentions.size(); iii++) { for (auto &it : m_listExtentions) {
APPL_VERBOSE(" check : " << m_listExtentions[iii] << "=?=" << _ext); APPL_VERBOSE(" check : " << it << "=?=" << _ext);
if ( m_listExtentions[iii] == "*." + _ext if ( it == "*." + _ext
|| m_listExtentions[iii] == _ext) { || it == _ext) {
return true; return true;
} }
} }
@@ -135,8 +135,8 @@ bool appl::Highlight::fileNameCompatible(const std::string& _fileName) {
} }
APPL_DEBUG(" try to find : in \"" << file << "\" extention:\"" << extention << "\" "); APPL_DEBUG(" try to find : in \"" << file << "\" extention:\"" << extention << "\" ");
for (int32_t iii=0; iii<m_listExtentions.size(); iii++) { for (auto &it : m_listExtentions) {
if (extention == m_listExtentions[iii] ) { if (extention == it ) {
return true; return true;
} }
} }
@@ -146,17 +146,17 @@ bool appl::Highlight::fileNameCompatible(const std::string& _fileName) {
void appl::Highlight::display() { void appl::Highlight::display() {
APPL_INFO("List of ALL Highlight : "); APPL_INFO("List of ALL Highlight : ");
for (int32_t iii=0; iii< m_listExtentions.size(); iii++) { for (auto &it : m_listExtentions) {
APPL_INFO(" Extention : " << iii << " : " << m_listExtentions[iii] ); APPL_INFO(" Extention : " << it );
} }
// display all elements // display all elements
for (int32_t iii=0; iii< m_listHighlightPass1.size(); iii++) { for (auto &it : m_listHighlightPass1) {
APPL_INFO(" " << iii << " Pass 1 : " << m_listHighlightPass1[iii]->getName() ); APPL_INFO(" Pass 1 : " << it->getName() );
//m_listHighlightPass1[iii]->display(); //m_listHighlightPass1[iii]->display();
} }
// display all elements // display all elements
for (int32_t iii=0; iii< m_listHighlightPass2.size(); iii++) { for (auto &it : m_listHighlightPass2) {
APPL_INFO(" " << iii << " Pass 2 : " << m_listHighlightPass2[iii]->getName() ); APPL_INFO(" pass 2 : " << it->getName() );
//m_listHighlightPass2[iii]->display(); //m_listHighlightPass2[iii]->display();
} }
} }
@@ -179,24 +179,24 @@ void appl::Highlight::parse(int64_t _start,
while (elementStart <= elementStop) { while (elementStart <= elementStop) {
HL_DEBUG("Parse element in the buffer pos=" << elementStart); HL_DEBUG("Parse element in the buffer pos=" << elementStart);
//try to fond the HL in ALL of we have //try to fond the HL in ALL of we have
for (int64_t jjj=0; jjj<m_listHighlightPass1.size(); jjj++){ for (int64_t jjj=0; jjj<(int64_t)m_listHighlightPass1.size(); jjj++){
enum resultFind ret = HLP_FIND_OK; enum resultFind ret = HLP_FIND_OK;
HL_DEBUG("Parse HL id=" << jjj << " position search: (" << elementStart << "," << _stop << ")" ); HL_DEBUG("Parse HL id=" << jjj << " position search: (" << elementStart << "," << _stop << ") input start='" << _buffer[elementStart] << "' " << m_listHighlightPass1[jjj]->getPaternString());
// Stop the search to the end (to get the end of the pattern) // Stop the search to the end (to get the end of the pattern)
ret = m_listHighlightPass1[jjj]->find(elementStart, _buffer.size(), resultat, _buffer); ret = m_listHighlightPass1[jjj]->find(elementStart, _buffer.size(), resultat, _buffer);
if (HLP_FIND_ERROR != ret) { if (HLP_FIND_ERROR != ret) {
HL_DEBUG("Find Pattern in the Buffer : (" << resultat.beginStart << "," << resultat.endStop << ")" ); HL_DEBUG("Find Pattern in the Buffer : (" << resultat.start << "," << resultat.stop << ")" );
// remove element in the current List where the current Element have a end inside the next... // remove element in the current List where the current Element have a end inside the next...
int64_t kkk=_addingPos; int64_t kkk=_addingPos;
while(kkk < _metaData.size() ) { while(kkk < (int64_t)_metaData.size() ) {
if (_metaData[kkk].beginStart <= resultat.endStop) { if (_metaData[kkk].start <= resultat.stop) {
// remove element // remove element
HL_DEBUG("Erase element=" << kkk); HL_DEBUG("Erase element=" << kkk);
_metaData.erase(_metaData.begin()+kkk, _metaData.begin()+kkk+1); _metaData.erase(_metaData.begin()+kkk, _metaData.begin()+kkk+1);
// Increase the end of search // Increase the end of search
if (kkk < _metaData.size()) { if (kkk < (int64_t)_metaData.size()) {
// just befor the end of the next element // just befor the end of the next element
elementStop = _metaData[kkk].beginStart-1; elementStop = _metaData[kkk].start-1;
} else { } else {
// end of the buffer // end of the buffer
elementStop = _buffer.size(); elementStop = _buffer.size();
@@ -208,9 +208,9 @@ void appl::Highlight::parse(int64_t _start,
} }
// add curent element in the list ... // add curent element in the list ...
_metaData.insert(_metaData.begin()+_addingPos, resultat); _metaData.insert(_metaData.begin()+_addingPos, resultat);
HL_DEBUG("INSERT at "<< _addingPos << " S=" << resultat.beginStart << " E=" << resultat.endStop ); HL_DEBUG("INSERT at "<< _addingPos << " S=" << resultat.start << " E=" << resultat.stop );
// update the current research starting element: (set position at the end of the current element // update the current research starting element: (set position at the end of the current element
elementStart = resultat.endStop-1; elementStart = resultat.stop-1;
// increment the position of insertion: // increment the position of insertion:
_addingPos++; _addingPos++;
// We find a pattern == > Stop search for the current element // We find a pattern == > Stop search for the current element
@@ -238,19 +238,23 @@ void appl::Highlight::parse2(int64_t _start,
appl::HighlightInfo resultat; appl::HighlightInfo resultat;
while (elementStart < elementStop) { while (elementStart < elementStop) {
if (elementStart == 306) {
//etk::log::setLevel(etk::log::logLevelVerbose);
}
//HL2_DEBUG("Parse element in the buffer pos=" << elementStart << "," << _buffer.size() << ")" ); //HL2_DEBUG("Parse element in the buffer pos=" << elementStart << "," << _buffer.size() << ")" );
//try to fond the HL in ALL of we have //try to fond the HL in ALL of we have
for (int64_t jjj=0; jjj<m_listHighlightPass2.size(); jjj++){ for (int64_t jjj=0; jjj<(int64_t)m_listHighlightPass2.size(); jjj++){
enum resultFind ret = HLP_FIND_OK; enum resultFind ret = HLP_FIND_OK;
HL2_DEBUG("Parse HL id=" << jjj << " position search: (" << HL2_DEBUG("Parse HL id=" << jjj << " position search: (" <<
_start << "," << _buffer.size() << ")" ); elementStart << "," << elementStop << ") in='"
<< _buffer[elementStart] << "' " << m_listHighlightPass2[jjj]->getPaternString());
// Stop the search to the end (to get the end of the pattern) // Stop the search to the end (to get the end of the pattern)
ret = m_listHighlightPass2[jjj]->find(elementStart, elementStop, resultat, _buffer); ret = m_listHighlightPass2[jjj]->find(elementStart, elementStop, resultat, _buffer);
if (HLP_FIND_ERROR != ret) { if (ret != HLP_FIND_ERROR) {
HL2_DEBUG("Find Pattern in the Buffer : (" << resultat.beginStart << "," << resultat.endStop << ")" ); HL2_DEBUG("Find Pattern in the Buffer : (" << resultat.start << "," << resultat.stop << ")" );
// add curent element in the list ... // add curent element in the list ...
_metaData.push_back(resultat); _metaData.push_back(resultat);
elementStart = resultat.endStop-1; elementStart = resultat.stop-1;
// Exit current cycle // Exit current cycle
break; break;
} }
@@ -259,30 +263,3 @@ void appl::Highlight::parse2(int64_t _start,
elementStart++; elementStart++;
} }
} }
appl::Highlight* appl::Highlight::keep(const std::string& _filename) {
//EWOL_INFO("KEEP : appl::Highlight : file : \"" << _filename << "\"");
appl::Highlight* object = static_cast<appl::Highlight*>(getManager().localKeep(_filename));
if (NULL != object) {
return object;
}
EWOL_INFO("CREATE : appl::Highlight : file : \"" << _filename << "\"");
// this element create a new one every time ....
object = new appl::Highlight(_filename, "THEME:COLOR:textViewer.json");
if (NULL == object) {
EWOL_ERROR("allocation error of a resource : ??Highlight??");
return NULL;
}
getManager().localAdd(object);
return object;
}
void appl::Highlight::release(appl::Highlight*& _object) {
if (NULL == _object) {
return;
}
ewol::Resource* object2 = static_cast<ewol::Resource*>(_object);
getManager().release(object2);
_object = NULL;
}

View File

@@ -16,15 +16,14 @@ namespace appl {
class HighlightInfo { class HighlightInfo {
public: public:
int32_t beginStart; int32_t start;
int32_t beginStop; int32_t stop;
int32_t endStart;
int32_t endStop;
bool notEnded; bool notEnded;
appl::HighlightPattern* patern; // pointer on class : appl::HighlightPattern* patern; // pointer on class :
}; };
}; };
#include <memory>
#include <etk/os/FSNode.h> #include <etk/os/FSNode.h>
#include <appl/HighlightPattern.h> #include <appl/HighlightPattern.h>
#include <appl/GlyphPainting.h> #include <appl/GlyphPainting.h>
@@ -34,11 +33,14 @@ namespace appl {
namespace appl { namespace appl {
class Highlight : public ewol::Resource { class Highlight : public ewol::Resource {
private: private:
appl::GlyphPainting* m_paintingProperties; std::shared_ptr<appl::GlyphPainting> m_paintingProperties;
protected: public:
// Constructeur // Constructeur
Highlight(const std::string& _xmlFilename, const std::string& _colorFile); Highlight();
~Highlight(); void init(const std::string& _xmlFilename, const std::string& _colorFile = "THEME:COLOR:textViewer.json");
public:
DECLARE_RESOURCE_NAMED_FACTORY(Highlight);
virtual ~Highlight();
private: private:
std::string m_typeName; //!< descriptive string type like "C/C++" std::string m_typeName; //!< descriptive string type like "C/C++"
public: public:
@@ -60,25 +62,13 @@ namespace appl {
etk::Buffer &_buffer); etk::Buffer &_buffer);
private: private:
void parseRules(exml::Element* _child, void parseRules(exml::Element* _child,
std::vector<HighlightPattern*> &_mListPatern, std::vector<std::unique_ptr<HighlightPattern>> &_mListPatern,
int32_t _level); int32_t _level,
bool forceMaximize=false);
std::string m_styleName; //!< curent style name (like "c++" or "c" or "script Bash") std::string m_styleName; //!< curent style name (like "c++" or "c" or "script Bash")
std::vector<std::string> m_listExtentions; //!< List of possible extention for this high-light, like : ".c", ".cpp", ".h" std::vector<std::string> m_listExtentions; //!< List of possible extention for this high-light, like : ".c", ".cpp", ".h"
std::vector<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_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::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 appl::Highlight* keep(const std::string& _filename);
/**
* @brief release the keeped resources
* @param[in,out] reference on the object pointer
*/
static void release(appl::Highlight*& _object);
public: // herited function : public: // herited function :
virtual void updateContext() { virtual void updateContext() {
// no upfate to do ... // no upfate to do ...

View File

@@ -15,14 +15,16 @@
#undef __class__ #undef __class__
#define __class__ "highlightManager" #define __class__ "highlightManager"
static std::vector<appl::Highlight*>& s_list() { // TODO : Review this in a generic unique resource ...
static std::vector<appl::Highlight*> list;
static std::vector<std::shared_ptr<appl::Highlight>>& s_list() {
static std::vector<std::shared_ptr<appl::Highlight>> list;
return list; return list;
} }
void appl::highlightManager::init() { void appl::highlightManager::init() {
std::vector<appl::Highlight*>& hlList = s_list(); std::vector<std::shared_ptr<appl::Highlight>>& hlList = s_list();
if (hlList.size() != 0) { if (hlList.size() != 0) {
APPL_ERROR("HighlightManager == > already exist, just unlink the previous ..."); APPL_ERROR("HighlightManager == > already exist, just unlink the previous ...");
hlList.clear(); hlList.clear();
@@ -31,17 +33,17 @@ void appl::highlightManager::init() {
etk::FSNode myFile("DATA:languages/"); etk::FSNode myFile("DATA:languages/");
// get the subfolder list : // get the subfolder list :
std::vector<etk::FSNode *> list = myFile.folderGetSubList(false, true, false,false); std::vector<etk::FSNode *> list = myFile.folderGetSubList(false, true, false,false);
for (int32_t iii = 0; iii < list.size(); ++iii) { for (auto &it : list) {
if (list[iii] == NULL) { if (it == nullptr) {
continue; continue;
} }
if (list[iii]->getNodeType() != etk::FSN_FOLDER) { if (it->getNodeType() != etk::FSN_FOLDER) {
continue; continue;
} }
std::string filename = list[iii]->getName() + "/highlight.xml"; std::string filename = it->getName() + "/highlight.xml";
APPL_DEBUG("Load xml name : " << filename); APPL_DEBUG("Load xml name : " << filename);
appl::Highlight *myHightLine = appl::Highlight::keep(filename); std::shared_ptr<appl::Highlight> myHightLine = appl::Highlight::create(filename);
if (myHightLine != NULL) { if (myHightLine != nullptr) {
hlList.push_back(myHightLine); hlList.push_back(myHightLine);
} else { } else {
APPL_ERROR("Can not allocate HighLight"); APPL_ERROR("Can not allocate HighLight");
@@ -49,29 +51,22 @@ void appl::highlightManager::init() {
} }
// display : // display :
/* /*
for (int32_t iii = 0; iii < hlList.size(); ++iii) { for (auto &it : hlList) {
if (hlList[iii] == NULL) { if (it == nullptr) {
continue; continue;
} }
hlList[iii]->display(); it->display();
} }
*/ */
} }
void appl::highlightManager::unInit() { void appl::highlightManager::unInit() {
std::vector<Highlight*>& hlList = s_list(); std::vector<std::shared_ptr<Highlight>>& hlList = s_list();
if (hlList.size() == 0) { if (hlList.size() == 0) {
APPL_DEBUG("HighlightManager ==> no highlight"); APPL_DEBUG("HighlightManager ==> no highlight");
hlList.clear(); hlList.clear();
return; return;
} }
for (int32_t iii = 0; iii < hlList.size(); ++iii) {
if (hlList[iii] == NULL) {
continue;
}
appl::Highlight::release(hlList[iii]);
hlList[iii] = NULL;
}
hlList.clear(); hlList.clear();
} }
@@ -80,16 +75,16 @@ std::string appl::highlightManager::getTypeExtention(const std::string& _extenti
return ""; return "";
} }
APPL_DEBUG("Try to find type for extention : '" << _extention << "' in " << s_list().size() << " types"); APPL_DEBUG("Try to find type for extention : '" << _extention << "' in " << s_list().size() << " types");
std::vector<Highlight*>& hlList = s_list(); std::vector<std::shared_ptr<Highlight>>& hlList = s_list();
for (int32_t iii = 0; iii < hlList.size(); ++iii) { for (auto &it : hlList) {
if (hlList[iii] == NULL) { if (it == nullptr) {
continue; continue;
} }
APPL_DEBUG(" check : " << hlList[iii]->getTypeName()); APPL_DEBUG(" check : " << it->getTypeName());
if (hlList[iii]->hasExtention(_extention) == true) { if (it->hasExtention(_extention) == true) {
APPL_DEBUG("Find type for extention : " << _extention APPL_DEBUG("Find type for extention : " << _extention
<< " type : " << hlList[iii]->getTypeName()); << " type : " << it->getTypeName());
return hlList[iii]->getTypeName(); return it->getTypeName();
} }
} }
return ""; return "";
@@ -99,13 +94,12 @@ std::string appl::highlightManager::getFileWithTypeType(const std::string& _type
if (_type.size() == 0) { if (_type.size() == 0) {
return ""; return "";
} }
std::vector<Highlight*>& hlList = s_list(); for (auto &it : s_list()) {
for (int32_t iii = 0; iii < hlList.size(); ++iii) { if (it == nullptr) {
if (hlList[iii] == NULL) {
continue; continue;
} }
if (hlList[iii]->getTypeName() == _type) { if (it->getTypeName() == _type) {
return hlList[iii]->getName(); return it->getName();
} }
} }
return ""; return "";

View File

@@ -13,53 +13,28 @@
#undef __class__ #undef __class__
#define __class__ "HighlightPattern" #define __class__ "HighlightPattern"
appl::HighlightPattern::HighlightPattern(appl::GlyphPainting*& _glyphPainting) : appl::HighlightPattern::HighlightPattern(const std::shared_ptr<appl::GlyphPainting>& _glyphPainting) :
m_glyphPainting(_glyphPainting), m_glyphPainting(_glyphPainting),
m_paternName(""), m_paternName(""),
m_regExpStart(NULL), m_regExp(nullptr),
m_regExpStop(NULL),
m_colorName(""), m_colorName(""),
m_escapeChar(u32char::Null),
m_multiline(false),
m_level(0) { m_level(0) {
m_regExpStart = new etk::RegExp<etk::Buffer>(); m_regExp = std::unique_ptr<etk::RegExp<etk::Buffer>>(new etk::RegExp<etk::Buffer>());
} }
appl::HighlightPattern::~HighlightPattern() { appl::HighlightPattern::~HighlightPattern() {
if (m_regExpStart != NULL) {
delete(m_regExpStart);
m_regExpStart = NULL;
}
if (m_regExpStop != NULL) {
delete(m_regExpStop);
m_regExpStop = NULL;
}
} }
void appl::HighlightPattern::setPaternStart(std::string& _regExp) { void appl::HighlightPattern::setPatern(std::string& _regExp, bool forceMaximize) {
if (m_regExpStart == NULL) { if (m_regExp == nullptr) {
return; return;
} }
m_regExpStart->compile(_regExp); m_regExp->compile(_regExp);
m_regExp->setMaximize(forceMaximize);
} }
std::string appl::HighlightPattern::getPaternString() {
void appl::HighlightPattern::setPaternStop(std::string& _regExp) { return m_regExp->getRegExDecorated();
if (m_regExpStop != NULL) {
delete(m_regExpStop);
m_regExpStop = NULL;
}
if (_regExp.size() != 0) {
m_regExpStop = new etk::RegExp<etk::Buffer>();
if (m_regExpStop != NULL) {
m_regExpStop->compile(_regExp);
} else {
APPL_ERROR("Allocation error");
}
}
}
void appl::HighlightPattern::setEscapeChar(const char32_t& _EscapeChar) {
m_escapeChar = _EscapeChar;
} }
void appl::HighlightPattern::setColorGlyph(std::string& _colorName) { void appl::HighlightPattern::setColorGlyph(std::string& _colorName) {
@@ -69,27 +44,18 @@ void appl::HighlightPattern::setColorGlyph(std::string& _colorName) {
} }
void appl::HighlightPattern::display() { void appl::HighlightPattern::display() {
APPL_INFO("patern : \"" << m_paternName << "\" level=" << m_level ); APPL_INFO("patern : '" << m_paternName << "' level=" << m_level );
APPL_INFO(" == > colorName \"" << m_colorName << "\""); APPL_INFO(" == > colorName '" << m_colorName << "'");
APPL_INFO(" == > regExpStart \"" << m_regExpStart->getRegExp() << "\""); APPL_INFO(" == > regExp '" << m_regExp->getRegExp() << "'");
if (m_regExpStop != NULL) {
APPL_INFO(" == > regExpStop \"" << m_regExpStop->getRegExp() << "\"");
}
if (m_multiline == true) {
APPL_INFO(" == > multiline pattern: YES");
} else {
APPL_INFO(" == > multiline pattern: NO");
}
} }
void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level) { void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level, bool forceMaximize) {
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
/* /*
<rule name="my preprocesseur"> <rule name="my preprocesseur">
<color>preprocesseur</color> <color>preprocesseur</color>
<start>#</start> <regex>#</regex>
<end>$</end> <max>false</max>
<multiline>yes</multiline>
</rule> </rule>
*/ */
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
@@ -103,7 +69,7 @@ void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level) {
setLevel(_level); setLevel(_level);
exml::Element* xChild = _child->getNamed("color"); exml::Element* xChild = _child->getNamed("color");
if (NULL != xChild) { if (nullptr != xChild) {
std::string myData = xChild->getText(); std::string myData = xChild->getText();
if (myData.size() != 0) { if (myData.size() != 0) {
//APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData); //APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData);
@@ -111,30 +77,17 @@ void appl::HighlightPattern::parseRules(exml::Element* _child, int32_t _level) {
setColorGlyph(myEdnData); setColorGlyph(myEdnData);
} }
} }
xChild = _child->getNamed("start"); xChild = _child->getNamed("max");
if (NULL != xChild) { if (nullptr != xChild) {
forceMaximize = etk::string_to_bool(xChild->getText());
}
xChild = _child->getNamed("regex");
if (nullptr != xChild) {
std::string myData = xChild->getText(); std::string myData = xChild->getText();
if (myData.size() != 0) { if (myData.size() != 0) {
//APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData); //APPL_INFO(PFX"(l %d) node fined : %s=\"%s\"", xChild->Row(), xChild->Value() , myData);
std::string myEdnData = myData; std::string myEdnData = myData;
setPaternStart(myEdnData); setPatern(myEdnData, forceMaximize);
}
}
xChild = _child->getNamed("end");
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);
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]);
} }
} }
} }
@@ -145,41 +98,17 @@ enum resultFind appl::HighlightPattern::find(int32_t _start,
appl::HighlightInfo& _resultat, appl::HighlightInfo& _resultat,
etk::Buffer& _buffer) { etk::Buffer& _buffer) {
//APPL_DEBUG(" try to find the element"); //APPL_DEBUG(" try to find the element");
_resultat.beginStart = -1; _resultat.start = -1;
_resultat.beginStop = -1; _resultat.stop = -1;
_resultat.endStart = -1;
_resultat.endStop = -1;
_resultat.notEnded = false; _resultat.notEnded = false;
_resultat.patern = this; _resultat.patern = this;
// when we have only one element: // when we have only one element:
if (m_regExpStop == NULL) { if (true == m_regExp->processOneElement(_buffer, _start, _stop)) {
if (true == m_regExpStart->processOneElement(_buffer, _start, _stop)) { _resultat.start = m_regExp->start();
_resultat.beginStart = m_regExpStart->start(); _resultat.stop = m_regExp->stop();
_resultat.beginStop = m_regExpStart->stop();
_resultat.endStart = m_regExpStart->start();
_resultat.endStop = m_regExpStart->stop();
return HLP_FIND_OK;
}
//APPL_DEBUG("NOT find hightlightpatern ...");
return HLP_FIND_ERROR;
}
// try while we find the first element
if (m_regExpStart->processOneElement(_buffer, _start, _stop, m_escapeChar) == false) {
return HLP_FIND_ERROR;
}
_resultat.beginStart = m_regExpStart->start();
_resultat.beginStop = m_regExpStart->stop();
if (m_regExpStop->parse(_buffer, _resultat.beginStop, _stop, m_escapeChar) == true) {
_resultat.endStart = m_regExpStop->start();
_resultat.endStop = m_regExpStop->stop();
return HLP_FIND_OK; 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 ..."); //APPL_DEBUG("NOT find hightlightpatern ...");
return HLP_FIND_ERROR; return HLP_FIND_ERROR;
} }

View File

@@ -29,11 +29,11 @@ enum resultFind {
namespace appl { namespace appl {
class HighlightPattern { class HighlightPattern {
private: private:
appl::GlyphPainting*& m_glyphPainting; std::shared_ptr<appl::GlyphPainting> m_glyphPainting;
public: public:
// Constructeur // Constructeur
HighlightPattern(appl::GlyphPainting*& _glyphPainting); HighlightPattern(const std::shared_ptr<appl::GlyphPainting>& _glyphPainting);
~HighlightPattern(); virtual ~HighlightPattern();
private: private:
std::string m_paternName; //!< Current style name (like "c++" or "c" or "script Bash") std::string m_paternName; //!< Current style name (like "c++" or "c" or "script Bash")
public: public:
@@ -44,13 +44,10 @@ namespace appl {
return m_paternName; return m_paternName;
}; };
private: private:
etk::RegExp<etk::Buffer>* m_regExpStart; //!< Start of Regular expression std::unique_ptr<etk::RegExp<etk::Buffer>> m_regExp; //!< Start of Regular expression
public: public:
void setPaternStart(std::string& _regExp); void setPatern(std::string& _regExp, bool forceMaximize=false);
private: std::string getPaternString();
etk::RegExp<etk::Buffer>* m_regExpStop; //!< Stop of Regular Expression
public:
void setPaternStop(std::string& _regExp);
private: private:
std::string m_colorName; //!< Current color name std::string m_colorName; //!< Current color name
int32_t m_colorId; //!< Id of the the glyph painting int32_t m_colorId; //!< Id of the the glyph painting
@@ -59,16 +56,6 @@ namespace appl {
const appl::GlyphDecoration& getColorGlyph() { const appl::GlyphDecoration& getColorGlyph() {
return (*m_glyphPainting)[m_colorId]; return (*m_glyphPainting)[m_colorId];
}; };
private:
char32_t m_escapeChar; //!< Escape char to prevent exeit of patern ....
public:
void setEscapeChar(const char32_t& _EscapeChar);
private:
bool m_multiline; //!< The patern is multiline
public:
void setMultiline(bool _enable) {
m_multiline = _enable;
};
private: private:
int32_t m_level; //!< Level of the pattern == > this is to overwrite next pattern when we create an higher .... int32_t m_level; //!< Level of the pattern == > this is to overwrite next pattern when we create an higher ....
public: public:
@@ -97,7 +84,7 @@ namespace appl {
appl::HighlightInfo& _resultat, appl::HighlightInfo& _resultat,
etk::Buffer& _buffer); etk::Buffer& _buffer);
void parseRules(exml::Element* _child, int32_t _level); void parseRules(exml::Element* _child, int32_t _level, bool forceMaximize=false);
}; };
}; };

View File

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

View File

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

View File

@@ -17,6 +17,11 @@
appl::TextPluginAutoIndent::TextPluginAutoIndent() { appl::TextPluginAutoIndent::TextPluginAutoIndent() {
m_activateOnEventEntry = true; m_activateOnEventEntry = true;
addObjectType("appl::TextPluginAutoIndent");
}
void appl::TextPluginAutoIndent::init() {
appl::TextViewerPlugin::init();
} }
bool appl::TextPluginAutoIndent::onEventEntry(appl::TextViewer& _textDrawer, bool appl::TextPluginAutoIndent::onEventEntry(appl::TextViewer& _textDrawer,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -19,127 +19,83 @@
#undef __class__ #undef __class__
#define __class__ "textPluginManager" #define __class__ "textPluginManager"
static std::vector<appl::TextViewerPlugin *>& getList() { appl::textPluginManager::textPluginManager() {
static std::vector<appl::TextViewerPlugin *> s_list;
return s_list;
}
static std::vector<appl::TextViewerPlugin *>& getListOnEventEntry() {
static std::vector<appl::TextViewerPlugin *> s_list;
return s_list;
}
static std::vector<appl::TextViewerPlugin *>& getListOnEventInput() {
static std::vector<appl::TextViewerPlugin *> s_list;
return s_list;
}
static std::vector<appl::TextViewerPlugin *>& getListOnWrite() {
static std::vector<appl::TextViewerPlugin *> s_list;
return s_list;
}
static std::vector<appl::TextViewerPlugin *>& getListOnReplace() {
static std::vector<appl::TextViewerPlugin *> s_list;
return s_list;
}
static std::vector<appl::TextViewerPlugin *>& getListOnRemove() {
static std::vector<appl::TextViewerPlugin *> s_list;
return s_list;
}
static std::vector<appl::TextViewerPlugin *>& getListOnReceiveMessage() {
static std::vector<appl::TextViewerPlugin *> s_list;
return s_list;
}
static std::vector<appl::TextViewerPlugin *>& getListOnCursorMove() {
static std::vector<appl::TextViewerPlugin *> s_list;
return s_list;
}
void appl::textPluginManager::init() {
} }
void appl::textPluginManager::init(const std::string& _name) {
void appl::textPluginManager::unInit() { ewol::Resource::init(_name);
// remove all sub plugin class:
getListOnEventEntry().clear();
getListOnEventInput().clear();
getListOnWrite().clear();
getListOnReplace().clear();
getListOnRemove().clear();
getListOnReceiveMessage().clear();
getListOnCursorMove().clear();
// remove all plugin:
for (int32_t iii=0; iii<getList().size(); ++iii) {
if (getList()[iii] == NULL) {
continue;
}
delete(getList()[iii]);
getList()[iii] = NULL;
}
getList().clear();
} }
void appl::textPluginManager::addDefaultPlugin() { void appl::textPluginManager::addDefaultPlugin() {
appl::textPluginManager::addPlugin(new appl::TextPluginCopy()); appl::textPluginManager::addPlugin(appl::TextPluginCopy::create());
appl::textPluginManager::addPlugin(new appl::TextPluginMultiLineTab()); appl::textPluginManager::addPlugin(appl::TextPluginMultiLineTab::create());
appl::textPluginManager::addPlugin(new appl::TextPluginAutoIndent()); appl::textPluginManager::addPlugin(appl::TextPluginAutoIndent::create());
appl::textPluginManager::addPlugin(new appl::TextPluginHistory()); appl::textPluginManager::addPlugin(appl::TextPluginHistory::create());
appl::textPluginManager::addPlugin(new appl::TextPluginRmLine()); appl::textPluginManager::addPlugin(appl::TextPluginRmLine::create());
appl::textPluginManager::addPlugin(new appl::TextPluginSelectAll()); appl::textPluginManager::addPlugin(appl::TextPluginSelectAll::create());
appl::textPluginManager::addPlugin(new appl::TextPluginCtags()); appl::textPluginManager::addPlugin(appl::TextPluginCtags::create());
} }
void appl::textPluginManager::addPlugin(appl::TextViewerPlugin* _plugin) { void appl::textPluginManager::addPlugin(const std::shared_ptr<appl::TextViewerPlugin>& _plugin) {
if (_plugin == NULL) { if (_plugin == nullptr) {
return; return;
} }
getList().push_back(_plugin); APPL_DEBUG("Add plugin : " << _plugin->getObjectType());
m_list.push_back(_plugin);
if (_plugin->isAvaillableOnEventEntry() == true) { if (_plugin->isAvaillableOnEventEntry() == true) {
getListOnEventEntry().push_back(_plugin); m_listOnEventEntry.push_back(_plugin);
} }
if (_plugin->isAvaillableOnEventInput() == true) { if (_plugin->isAvaillableOnEventInput() == true) {
getListOnEventInput().push_back(_plugin); m_listOnEventInput.push_back(_plugin);
} }
if (_plugin->isAvaillableOnWrite() == true) { if (_plugin->isAvaillableOnWrite() == true) {
getListOnWrite().push_back(_plugin); m_listOnWrite.push_back(_plugin);
} }
if (_plugin->isAvaillableOnReplace() == true) { if (_plugin->isAvaillableOnReplace() == true) {
getListOnReplace().push_back(_plugin); m_listOnReplace.push_back(_plugin);
} }
if (_plugin->isAvaillableOnRemove() == true) { if (_plugin->isAvaillableOnRemove() == true) {
getListOnRemove().push_back(_plugin); m_listOnRemove.push_back(_plugin);
} }
if (_plugin->isAvaillableOnReceiveMessage() == true) { if (_plugin->isAvaillableOnReceiveShortCut() == true) {
getListOnReceiveMessage().push_back(_plugin); m_listOnReceiveShortCutViewer.push_back(_plugin);
} }
if (_plugin->isAvaillableOnCursorMove() == true) { if (_plugin->isAvaillableOnCursorMove() == true) {
getListOnCursorMove().push_back(_plugin); m_listOnCursorMove.push_back(_plugin);
}
std::shared_ptr<appl::TextViewer> viewer = m_currentViewer.lock();
if (viewer != nullptr) {
_plugin->onPluginEnable(*viewer);
} }
} }
void appl::textPluginManager::connect(appl::TextViewer& _widget) { void appl::textPluginManager::connect(appl::TextViewer& _widget) {
for (int32_t iii=0; iii<getList().size(); ++iii) { m_currentViewer = std::dynamic_pointer_cast<appl::TextViewer>(_widget.shared_from_this());
if (getList()[iii] == NULL) { for (auto &it : m_list) {
if (it == nullptr) {
continue; continue;
} }
getList()[iii]->onPluginEnable(_widget); it->onPluginEnable(_widget);
} }
} }
void appl::textPluginManager::disconnect(appl::TextViewer& _widget) { void appl::textPluginManager::disconnect(appl::TextViewer& _widget) {
for (int32_t iii=0; iii<getList().size(); ++iii) { m_currentViewer.reset();
if (getList()[iii] == NULL) { for (auto &it : m_list) {
if (it == nullptr) {
continue; continue;
} }
getList()[iii]->onPluginDisable(_widget); it->onPluginDisable(_widget);
} }
} }
bool appl::textPluginManager::onEventEntry(appl::TextViewer& _textDrawer, bool appl::textPluginManager::onEventEntry(appl::TextViewer& _textDrawer,
const ewol::event::Entry& _event) { const ewol::event::Entry& _event) {
std::vector<appl::TextViewerPlugin *>& list = getListOnEventEntry(); for (auto &it : m_listOnEventEntry) {
for (int32_t iii=0; iii<list.size(); ++iii) { if (it == nullptr) {
if (list[iii] == NULL) {
continue; continue;
} }
if (list[iii]->onEventEntry(_textDrawer, _event) == true ) { if (it->onEventEntry(_textDrawer, _event) == true ) {
return true; return true;
} }
} }
@@ -148,12 +104,11 @@ bool appl::textPluginManager::onEventEntry(appl::TextViewer& _textDrawer,
bool appl::textPluginManager::onEventInput(appl::TextViewer& _textDrawer, bool appl::textPluginManager::onEventInput(appl::TextViewer& _textDrawer,
const ewol::event::Input& _event) { const ewol::event::Input& _event) {
std::vector<appl::TextViewerPlugin *>& list = getListOnEventInput(); for (auto &it : m_listOnEventInput) {
for (int32_t iii=0; iii<list.size(); ++iii) { if (it == nullptr) {
if (list[iii] == NULL) {
continue; continue;
} }
if (list[iii]->onEventInput(_textDrawer, _event) == true ) { if (it->onEventInput(_textDrawer, _event) == true ) {
return true; return true;
} }
} }
@@ -163,12 +118,11 @@ bool appl::textPluginManager::onEventInput(appl::TextViewer& _textDrawer,
bool appl::textPluginManager::onWrite(appl::TextViewer& _textDrawer, bool appl::textPluginManager::onWrite(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const std::string& _data) { const std::string& _data) {
std::vector<appl::TextViewerPlugin *>& list = getListOnWrite(); for (auto &it : m_listOnWrite) {
for (int32_t iii=0; iii<list.size(); ++iii) { if (it == nullptr) {
if (list[iii] == NULL) {
continue; continue;
} }
if (list[iii]->onWrite(_textDrawer, _pos, _data) == true ) { if (it->onWrite(_textDrawer, _pos, _data) == true ) {
return true; return true;
} }
} }
@@ -179,12 +133,11 @@ bool appl::textPluginManager::onReplace(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const std::string& _data, const std::string& _data,
const appl::Buffer::Iterator& _posEnd) { const appl::Buffer::Iterator& _posEnd) {
std::vector<appl::TextViewerPlugin *>& list = getListOnReplace(); for (auto &it : m_listOnReplace) {
for (int32_t iii=0; iii<list.size(); ++iii) { if (it == nullptr) {
if (list[iii] == NULL) {
continue; continue;
} }
if (list[iii]->onReplace(_textDrawer, _pos, _data, _posEnd) == true ) { if (it->onReplace(_textDrawer, _pos, _data, _posEnd) == true ) {
return true; return true;
} }
} }
@@ -194,26 +147,24 @@ bool appl::textPluginManager::onReplace(appl::TextViewer& _textDrawer,
bool appl::textPluginManager::onRemove(appl::TextViewer& _textDrawer, bool appl::textPluginManager::onRemove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _pos,
const appl::Buffer::Iterator& _posEnd) { const appl::Buffer::Iterator& _posEnd) {
std::vector<appl::TextViewerPlugin *>& list = getListOnRemove(); for (auto &it : m_listOnRemove) {
for (int32_t iii=0; iii<list.size(); ++iii) { if (it == nullptr) {
if (list[iii] == NULL) {
continue; continue;
} }
if (list[iii]->onRemove(_textDrawer, _pos, _posEnd) == true ) { if (it->onRemove(_textDrawer, _pos, _posEnd) == true ) {
return true; return true;
} }
} }
return false; return false;
} }
bool appl::textPluginManager::onReceiveMessage(appl::TextViewer& _textDrawer, bool appl::textPluginManager::onReceiveShortCut(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg) { const std::string& _shortCutName) {
std::vector<appl::TextViewerPlugin *>& list = getListOnReceiveMessage(); for (auto &it : m_listOnReceiveShortCutViewer) {
for (int32_t iii=0; iii<list.size(); ++iii) { if (it == nullptr) {
if (list[iii] == NULL) {
continue; continue;
} }
if (list[iii]->onReceiveMessage(_textDrawer, _msg) == true ) { if (it->onReceiveShortCut(_textDrawer, _shortCutName) == true ) {
return true; return true;
} }
} }
@@ -222,12 +173,11 @@ bool appl::textPluginManager::onReceiveMessage(appl::TextViewer& _textDrawer,
bool appl::textPluginManager::onCursorMove(appl::TextViewer& _textDrawer, bool appl::textPluginManager::onCursorMove(appl::TextViewer& _textDrawer,
const appl::Buffer::Iterator& _pos) { const appl::Buffer::Iterator& _pos) {
std::vector<appl::TextViewerPlugin *>& list = getListOnCursorMove(); for (auto &it : m_listOnCursorMove) {
for (int32_t iii=0; iii<list.size(); ++iii) { if (it == nullptr) {
if (list[iii] == NULL) {
continue; continue;
} }
if (list[iii]->onCursorMove(_textDrawer, _pos) == true ) { if (it->onCursorMove(_textDrawer, _pos) == true ) {
return true; return true;
} }
} }

View File

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

@@ -16,6 +16,11 @@
appl::TextPluginMultiLineTab::TextPluginMultiLineTab() { appl::TextPluginMultiLineTab::TextPluginMultiLineTab() {
m_activateOnEventEntry = true; m_activateOnEventEntry = true;
addObjectType("appl::TextPluginMultiLineTab");
}
void appl::TextPluginMultiLineTab::init() {
appl::TextViewerPlugin::init();
} }
bool appl::TextPluginMultiLineTab::onEventEntry(appl::TextViewer& _textDrawer, bool appl::TextPluginMultiLineTab::onEventEntry(appl::TextViewer& _textDrawer,
@@ -47,22 +52,22 @@ bool appl::TextPluginMultiLineTab::onEventEntry(appl::TextViewer& _textDrawer,
_textDrawer.copy(data, itStart, itStop); _textDrawer.copy(data, itStart, itStop);
// TODO : Change this ... // TODO : Change this ...
bool m_useTabs = true; bool m_useTabs = true;
int32_t m_tabDist = 4; size_t m_tabDist = 4;
if (true == _event.getSpecialKey().getShift() ) { if (true == _event.getSpecialKey().getShift() ) {
// un-indent // un-indent
data.insert(0, 1, u32char::Return); data.insert(0, 1, u32char::Return);
for (int32_t iii=1; iii<data.size(); ++iii) { for (size_t iii=1; iii<data.size(); ++iii) {
if (data[iii-1] != u32char::Return) { if ((char32_t)data[iii-1] != u32char::Return) {
continue; continue;
} }
if(data[iii] == u32char::Tabulation) { if((char32_t)data[iii] == u32char::Tabulation) {
data.erase(iii, 1); data.erase(iii, 1);
} else if(data[iii] == u32char::Space) { } else if((char32_t)data[iii] == u32char::Space) {
for (int32_t jjj=0; jjj<m_tabDist && jjj+iii<data.size() ; jjj++) { for (size_t jjj=0; jjj<m_tabDist && jjj+iii<data.size() ; jjj++) {
if(data[iii] == u32char::Space) { if((char32_t)data[iii] == u32char::Space) {
data.erase(iii, 1); data.erase(iii, 1);
} else if(data[iii] == u32char::Tabulation) { } else if((char32_t)data[iii] == u32char::Tabulation) {
data.erase(iii, 1); data.erase(iii, 1);
break; break;
} else { } else {
@@ -75,8 +80,8 @@ bool appl::TextPluginMultiLineTab::onEventEntry(appl::TextViewer& _textDrawer,
} else { } else {
// indent // indent
data.insert(0, 1, u32char::Return); data.insert(0, 1, u32char::Return);
for (int32_t iii=1; iii<data.size(); iii++) { for (size_t iii=1; iii<data.size(); iii++) {
if (data[iii-1] != u32char::Return) { if ((char32_t)data[iii-1] != u32char::Return) {
continue; continue;
} }
if (true == _event.getSpecialKey().getCtrl() ) { if (true == _event.getSpecialKey().getCtrl() ) {

View File

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

View File

@@ -16,25 +16,29 @@
appl::TextPluginRmLine::TextPluginRmLine() { 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) { void appl::TextPluginRmLine::onPluginEnable(appl::TextViewer& _textDrawer) {
// add event : // add event :
_textDrawer.ext_registerMultiCast(ednMsgGuiRm); _textDrawer.ext_shortCutAdd("ctrl+w", "appl::TextPluginRmLine::Rm");
_textDrawer.ext_shortCutAdd("ctrl+w", ednMsgGuiRm);
} }
void appl::TextPluginRmLine::onPluginDisable(appl::TextViewer& _textDrawer) { void appl::TextPluginRmLine::onPluginDisable(appl::TextViewer& _textDrawer) {
// TODO : unknow function ... _textDrawer.ext_shortCutRm("appl::TextPluginRmLine::Rm");
} }
bool appl::TextPluginRmLine::onReceiveMessage(appl::TextViewer& _textDrawer, bool appl::TextPluginRmLine::onReceiveShortCut(appl::TextViewer& _textDrawer,
const ewol::object::Message& _msg) { const std::string& _shortCutName) {
if (isEnable() == false) { if (isEnable() == false) {
return false; return false;
} }
if (_msg.getMessage() == ednMsgGuiRm) { if (_shortCutName == "appl::TextPluginRmLine::Rm") {
if (_textDrawer.hasBuffer() == false) { if (_textDrawer.hasBuffer() == false) {
return false; return false;
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -37,11 +37,17 @@ namespace globals
bool OrderTheBufferList(); bool OrderTheBufferList();
class ParameterGlobalsGui : public ewol::widget::Sizer { class ParameterGlobalsGui : public ewol::widget::Sizer {
public : protected:
ParameterGlobalsGui(); ParameterGlobalsGui();
~ParameterGlobalsGui(); void init();
// herited function public:
virtual void onReceiveMessage(const ewol::object::Message& _msg); DECLARE_FACTORY(ParameterGlobalsGui);
virtual ~ParameterGlobalsGui();
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,122 +28,110 @@
#include <appl/ctags/readtags.h> #include <appl/ctags/readtags.h>
#include <appl/globalMsg.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...). * @brief Main of the program (This can be set in every case, but it is not used in Andoid...).
* @param std IO * @param std IO
* @return std IO * @return std IO
*/ */
int main(int _argc, const char *_argv[]) { int main(int _argc, const char *_argv[]) {
// only one things to do: // second possibility
return ewol::run(_argc, _argv); return ewol::run(new MainApplication(), _argc, _argv);
}
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);
MainWindows* basicWindows = new MainWindows();
if (NULL == basicWindows) {
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;
} }
/**
* @brief main application function Un-Initialisation
*/
void APP_UnInit(ewol::Context& _context) {
APPL_INFO(" == > Un-Init " PROJECT_NAME " (START)");
ewol::widget::Windows* tmpWindows = _context.getWindows();
_context.setWindows(NULL);
if (NULL != tmpWindows) {
delete(tmpWindows);
tmpWindows = NULL;
}
appl::textPluginManager::unInit();
APPL_INFO("Stop Hightlight");
appl::highlightManager::unInit();
//Kill all singleton
if (bufferManager != NULL) {
APPL_INFO("Stop BufferManager");
appl::BufferManager::release(bufferManager);
bufferManager = NULL;
}
APPL_INFO(" == > Un-Init " PROJECT_NAME " (END)");
}

View File

@@ -12,6 +12,7 @@ def create(target):
# module name is 'edn' and type binary. # module name is 'edn' and type binary.
myModule = module.Module(__file__, 'edn', 'PACKAGE') myModule = module.Module(__file__, 'edn', 'PACKAGE')
myModule.add_extra_compile_flags()
# add the file to compile: # add the file to compile:
myModule.add_src_file([ myModule.add_src_file([
'appl/ctags/readtags.cpp']) 'appl/ctags/readtags.cpp'])
@@ -101,9 +102,12 @@ def create(target):
myModule.compile_flags_CC([ myModule.compile_flags_CC([
"-DAPPL_VERSION=\"\\\"" + versionID + "\\\"\"" "-DAPPL_VERSION=\"\\\"" + versionID + "\\\"\""
]) ])
tagFile = tools.get_current_path(__file__) + "/tagCode"
versionIDCode = tools.file_read_data(tagFile)
# set the package properties : # set the package properties :
myModule.pkg_set("VERSION", versionID) myModule.pkg_set("VERSION", versionID)
myModule.pkg_set("VERSION_CODE", versionIDCode)
myModule.pkg_set("COMPAGNY_TYPE", "org") myModule.pkg_set("COMPAGNY_TYPE", "org")
myModule.pkg_set("COMPAGNY_NAME", "Edouard DUPIN") myModule.pkg_set("COMPAGNY_NAME", "Edouard DUPIN")
myModule.pkg_set("MAINTAINER", ["Mr DUPIN Edouard <yui.heero@gmail.com>"]) myModule.pkg_set("MAINTAINER", ["Mr DUPIN Edouard <yui.heero@gmail.com>"])

View File

@@ -1 +1 @@
1.1.2 1.2.2

1
sources/tagCode Normal file
View File

@@ -0,0 +1 @@
6