radxide.tcl 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. #! /usr/bin/env tclsh
  2. ###########################################################
  3. # Name: radxide.tcl
  4. # Author: Daniele Bonini (posta@elettronica.lol)
  5. # Date: 08/10/2024
  6. # Desc: Bootstrap file of RadXIDE.
  7. #
  8. # Bootstrap file and most of the code
  9. # here presented and distributed contains excerpts
  10. # from [alited](https://github.com/aplsimple/alited
  11. # by Alex Plotnikov and contributors to the project.
  12. # The original code of these excerpts could be
  13. # borrowed from other sources which the author
  14. # and the contributors to this RadXIDE have no
  15. # knowledge about.
  16. #
  17. # Code Library scaffolding and most of its code contains
  18. # excerpts from "Practical Programming in Tcl and Tk, 4th Ed."
  19. # by Brent B. Welch, Ken Jones, Jeffrey Hebbs.
  20. # The original code of these excerpts could be
  21. # borrowed from other sources which the author
  22. # and the contributors to RadXIDE have no
  23. # knowledge about. For the related copyright notice
  24. # refer <eglib.tcl> part of this software.
  25. #
  26. # License: MIT. Copyrights 5 Mode (Last implementation and adaptations.)
  27. # Copyright (c) 2021-2023 Alex Plotnikov https://aplsimple.github.io (original scaffolding and excerpts.)
  28. #
  29. ###########################################################
  30. set version "1.5.8"
  31. set os "$::tcl_platform(os) $::tcl_platform(osVersion)"
  32. package provide radxide $version
  33. set _ [package require Tk]
  34. wm withdraw .
  35. if {![package vsatisfies $_ 8.6.10-]} {
  36. tk_messageBox -message "\nradxide needs Tcl/Tk v8.6.10+ \
  37. \n\nwhile the current is v$_\n"
  38. exit
  39. }
  40. unset -nocomplain _
  41. # __________________________ radxide:: Main _________________________ #
  42. namespace eval radxide {
  43. variable dan; array set dan [list]
  44. variable tcltk_version "Tcl/Tk [package versions Tk]"
  45. ## ________________________ Main variables _________________________ ##
  46. set DEBUG no ;# debug mode
  47. set dan(WIN) .danwin ;# main form
  48. set dan(TITLE) RADXIDE
  49. set tmpfname "~"
  50. set userhome [file normalize $tmpfname]
  51. if {$userhome eq "/root"} {
  52. tk_messageBox -title $dan(TITLE) -icon error -message "RADXIDE can't run under root."
  53. exit 0
  54. }
  55. # To restore at deployment time..
  56. #
  57. set dan(WORKDIR) "$userhome/.radxwork" ;# working dir
  58. # Check workdir existance..
  59. if {![file exists $dan(WORKDIR)]} {
  60. file mkdir $dan(WORKDIR)
  61. }
  62. # Check Code Library dir existance.. (WORKDIR)/.examples)
  63. if {![file exists $dan(WORKDIR)/.snippets]} {
  64. file mkdir $dan(WORKDIR)/.snippets
  65. }
  66. set dan(TREEVIEW) "" ;# ide project tree
  67. set dan(GUTTEXT) "" ;# ide guttext control
  68. set dan(GUTTERWIDTH) 12
  69. set dan(TEXT) "" ;# ide text control
  70. set dan(TEXTBG) "#222223"
  71. set dan(TEXTFG) "#55ff55"
  72. set dan(TEXTSELFG) "red"
  73. set dan(TEXTFONT) "Monospace Semi-Condensed"
  74. set dan(TEXTFONTSIZE) "10"
  75. set dan(CURSORCOLOR) "red"
  76. set dan(CURSORWIDTH) "5"
  77. set dan(TOTLINES) 1
  78. set dan(CUR_FILE_MAX_YVIEW) 1.0
  79. set dan(prjdirignore) {.git nbproject} ;# ignored subdirectories of project
  80. set project(NAME) "" ;# project default name
  81. set project(ROOT) "" ;# project default root
  82. set project(PATH) "" ;# project default path
  83. set project(CUR_FILE_PATH) "" ;# project current file path
  84. set project(TREE_PROJECT_ROOT) "" ;# Treeview: Project root node
  85. set project(TREE_PRIVATE_ROOT) "" ;# Treeview: Private node
  86. set project(TREE_PUBLIC_ROOT) "" ;# Treeview: Public node
  87. set files(FILE1) "" ;# Array files
  88. set files(FILE2) ""
  89. set files(FILE3) ""
  90. set files(FILE4) ""
  91. set files(FILE5) ""
  92. # main data of radxide (others are in ini.tcl)
  93. variable SCRIPT [info script]
  94. variable SCRIPTNORMAL [file normalize $SCRIPT]
  95. variable FILEDIR [file dirname $SCRIPTNORMAL]
  96. variable DIR [file dirname $FILEDIR]
  97. # directories of sources
  98. #variable SRCDIR [file join $DIR src]
  99. variable SRCDIR $FILEDIR
  100. variable LIBDIR [file join $DIR lib]
  101. variable ICONDIR [file join $SRCDIR icons]
  102. # misc. vars
  103. variable pID 0
  104. # directory tree's content
  105. variable _dirtree [list]
  106. set dan(TITLE_TEMPL) {%f :: %t} ;# radxide title's template
  107. set dan(WIDTH) 1280
  108. set dan(HEIGHT) 760
  109. #set al(MOVEFG) "black"
  110. #set al(MOVEBG) "#7eeeee"
  111. set dan(FG) "#000000"
  112. set dan(BG) "#cecece"
  113. set dan(fgred) "red"
  114. set dan(fgbold) "magenta"
  115. set dan(fgtodo) "orange"
  116. set dan(fgbranch) "blue"
  117. set dan(CHARFAMILY) "Sans"
  118. set dan(CHARSIZE) 10
  119. set dan(MAXFILES) 15000
  120. set dan(MAXFILESIZE) 150000
  121. set dan(MAXFINDLENGTH) 50
  122. set dan(TAB_IN_SPACE) " "
  123. # icons
  124. set dan(ICON) "$ICONDIR/radxide.png"
  125. set dan(ICONI) [image create photo imgobj1 -file $dan(ICON)]
  126. set icons(PROJECT-ICON) "$ICONDIR/archive.png"
  127. set icons(PROJECT-ICONI) [image create photo imgobj2 -file $icons(PROJECT-ICON)]
  128. set icons(PUBLICF-ICON) "$ICONDIR/public-folder.png"
  129. set icons(PUBLICF-ICONI) [image create photo imgobj3 -file $icons(PUBLICF-ICON)]
  130. set icons(PRIVATEF-ICON) "$ICONDIR/private-folder.png"
  131. set icons(PRIVATEF-ICONI) [image create photo imgobj4 -file $icons(PRIVATEF-ICON)]
  132. set icons(HTML-ICON) "$ICONDIR/file-html.png"
  133. set icons(HTML-ICONI) [image create photo imgobj5 -file $icons(HTML-ICON)]
  134. set icons(JS-ICON) "$ICONDIR/file-js.png"
  135. set icons(JS-ICONI) [image create photo imgobj6 -file $icons(JS-ICON)]
  136. set icons(IMG-ICON) "$ICONDIR/image.png"
  137. set icons(IMG-ICONI) [image create photo imgobj7 -file $icons(IMG-ICON)]
  138. set icons(CSS-ICON) "$ICONDIR/file-css.png"
  139. set icons(CSS-ICONI) [image create photo imgobj8 -file $icons(CSS-ICON)]
  140. set icons(PHP-ICON) "$ICONDIR/file-php.png"
  141. set icons(PHP-ICONI) [image create photo imgobj9 -file $icons(PHP-ICON)]
  142. set icons(TXT-ICON) "$ICONDIR/file-txt.png"
  143. set icons(TXT-ICONI) [image create photo imgobj10 -file $icons(TXT-ICON)]
  144. set icons(GENERIC-FILE-ICON) "$ICONDIR/file-generic.png"
  145. set icons(GENERIC-FILE-ICONI) [image create photo imgobj11 -file $icons(GENERIC-FILE-ICON)]
  146. set icons(FOLDER-ICON) "$ICONDIR/folder.png"
  147. set icons(FOLDER-ICONI) [image create photo imgobj12 -file $icons(FOLDER-ICON)]
  148. # Menu variables
  149. set menu(ROOT) "";
  150. set menu(ADD_FILE_ENTRY_IDX) 2;
  151. set menu(SAVE_AS_ENTRY_IDX) 4;
  152. set menu(SAVE_ENTRY_IDX) 5;
  153. set menu(CLOSE_ENTRY_IDX) 7;
  154. set menu(CLOSE_PROJECT_ENTRY_IDX) 8;
  155. set menu(UNDO_ENTRY_IDX) 0;
  156. set menu(REDO_ENTRY_IDX) 1;
  157. set menu(COPY_ENTRY_IDX) 3;
  158. set menu(PASTE_ENTRY_IDX) 4;
  159. set menu(CUT_ENTRY_IDX) 5;
  160. set menu(INDENT_ENTRY_IDX) 7;
  161. set menu(UNINDENT_ENTRY_IDX) 8;
  162. set menu(FIND_ENTRY_IDX) 10;
  163. set menu(GOTO_ENTRY_IDX) 11;
  164. # a couplle of extension definitions..
  165. set dan(PhpExts) {.php .php2 .php3 .php4 .php5 .inc} ;# extensions of php files
  166. set dan(HtmlExts) {.html .htm .xml .xsl} ;# extensions of html files
  167. set dan(CssExts) {.css} ;# extensions of css files
  168. set dan(JsExts) {.js} ;# extensions of js files
  169. set dan(TxtExts) {.txt .rtf} ;# extensions of txt files
  170. set dan(ImgExts) {.gif .png .jpg .jpeg .ico} ;# extensions of images
  171. set dan(OfficeExts) {.doc .docx .xls .xlsx .ppt .pptx} ;# extensions of office files
  172. set dan(BinExts) {.so .o .exe} ;# extensions of binary
  173. # __________________ iswindows ___________________ #
  174. proc iswindows {} {
  175. # Checks for "platform is MS Windows".
  176. expr {$::tcl_platform(platform) eq {windows}}
  177. }
  178. # __________________ quit ___________________ #
  179. proc quit {{w ""} {res 0} {ask yes}} {
  180. # Closes alited application.
  181. # w - not used
  182. # res - result of running of main window
  183. # ask - if "yes", requests the confirmation of the exit
  184. namespace upvar ::radxide dan dan
  185. set answer [tk_messageBox -message "Really quit RADXIDE?" \
  186. -icon question -type yesno \
  187. -detail "Select \"Yes\" to make the application exit" \
  188. -parent $dan(WIN)]
  189. switch -- $answer {
  190. yes exit 0
  191. no
  192. }
  193. return
  194. }
  195. # __________________ raise_window ___________________ #
  196. proc raise_window {} {
  197. # Raises the app's window.
  198. variable dan
  199. catch {
  200. wm withdraw $dan(WIN)
  201. wm deiconify $dan(WIN)
  202. }
  203. }
  204. # __________________ Tclexe ___________________ #
  205. proc Tclexe {} {
  206. # Gets Tcl's executable file.
  207. variable dan
  208. set tclexe [info nameofexecutable]
  209. return $tclexe
  210. }
  211. source [file join $SRCDIR main.tcl]
  212. source [file join $SRCDIR filelib.tcl]
  213. source [file join $SRCDIR win.tcl]
  214. source [file join $SRCDIR menu.tcl]
  215. source [file join $SRCDIR tree.tcl]
  216. source [file join $SRCDIR eglib.tcl]
  217. ## _ EONS: radxide _ ##
  218. }
  219. # ________________________ ::argv, ::argc _________________________ #
  220. set ::radxide::ARGV $::argv
  221. set ::radxide::dan(IsWindows) [expr {$::tcl_platform(platform) eq {windows}}]
  222. # _________________________ Run the app _________________________ #
  223. namespace upvar ::radxide dan dan
  224. radxide::main::_create ;# create the main form
  225. unset -nocomplain _
  226. if {[catch {set res [radxide::main::_run]} err]} {
  227. set res 0
  228. set msg "\nERROR in radxide:"
  229. puts \n$msg\n\n$::errorInfo\n
  230. set msg "$msg\n\n$err\n\nPlease, inform authors.\nDetails are in stdout."
  231. tk_messageBox -title $dan(TITLE) -icon error -message $msg -parent $dan(WIN)
  232. exit 2
  233. }
  234. exit 0
  235. # _________________________________ EOF _________________________________ #