radxide.tcl 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. #! /usr/bin/env tclsh
  2. ###########################################################
  3. # Name: radxide.tcl
  4. # Author: Daniele Bonini (posta@elettronica.lol)
  5. # Date: 05/12/2023
  6. # Desc: Starting file of RadXIDE.
  7. #
  8. # Starting file and most of code
  9. # here presented and distributed contain 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
  18. # 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. package provide radxide 1.0.5
  31. set _ [package require Tk]
  32. wm withdraw .
  33. if {![package vsatisfies $_ 8.6.10-]} {
  34. tk_messageBox -message "\nradxide needs Tcl/Tk v8.6.10+ \
  35. \n\nwhile the current is v$_\n"
  36. exit
  37. }
  38. unset -nocomplain _
  39. # __________________________ radxide:: Main _________________________ #
  40. namespace eval radxide {
  41. variable dan; array set dan [list]
  42. variable tcltk_version "Tcl/Tk [package versions Tk]"
  43. ## ________________________ Main variables _________________________ ##
  44. set DEBUG no ;# debug mode
  45. set dan(WIN) .danwin ;# main form
  46. set dan(WORKDIR) "/home/YouUser/.radxwork" ;# root working dir
  47. set dan(TITLE) RADXIDE
  48. # Check workdir existance..
  49. if {![file exists $dan(WORKDIR)]} {
  50. file mkdir $dan(WORKDIR)
  51. }
  52. # Check Code Library dir existance.. (WORKDIR)/.examples)
  53. if {![file exists $dan(WORKDIR)/.examples]} {
  54. file mkdir $dan(WORKDIR)/.examples
  55. }
  56. set dan(TREEVIEW) "" ;# ide project tree
  57. set dan(TEXT) "" ;# ide text control
  58. set dan(prjdirignore) {.git .bak} ;# ignored subdirectories of project
  59. set project(NAME) "" ;# project default name
  60. set project(ROOT) "" ;# project default root
  61. set project(PATH) "" ;# project default path
  62. set project(CUR_FILE_PATH) "" ;# project current file path
  63. set project(TREE_PROJECT_ROOT) "" ;# Treeview: Project root node
  64. set project(TREE_PRIVATE_ROOT) "" ;# Treeview: Private node
  65. set project(TREE_PUBLIC_ROOT) "" ;# Treeview: Public node
  66. set files(FILE1) "" ;# Array files
  67. set files(FILE2) ""
  68. set files(FILE3) ""
  69. set files(FILE4) ""
  70. set files(FILE5) ""
  71. # main data of radxide (others are in ini.tcl)
  72. variable SCRIPT [info script]
  73. variable SCRIPTNORMAL [file normalize $SCRIPT]
  74. variable FILEDIR [file dirname $SCRIPTNORMAL]
  75. variable DIR [file dirname $FILEDIR]
  76. # directories of sources
  77. variable SRCDIR [file join $DIR src]
  78. variable LIBDIR [file join $DIR lib]
  79. # misc. vars
  80. variable pID 0
  81. # directory tree's content
  82. variable _dirtree [list]
  83. set dan(TITLE_TEMPL) {%f :: %t} ;# radxide title's template
  84. set dan(WIDTH) 1600
  85. set dan(HEIGHT) 800
  86. #set al(MOVEFG) "black"
  87. #set al(MOVEBG) "#7eeeee"
  88. set dan(FG) "#000000"
  89. set dan(BG) "#cecece"
  90. set dan(fgred) "red"
  91. set dan(fgbold) "magenta"
  92. set dan(fgtodo) "orange"
  93. set dan(fgbranch) "blue"
  94. set dan(CHARFAMILY) "Sans"
  95. set dan(CHARSIZE) 10
  96. set dan(MAXFILES) 250
  97. set dan(MAXFILESIZE) 65534
  98. set dan(MAXFINDLENGTH) 50
  99. # icons
  100. set dan(ICON) "icons/radxide.png"
  101. set dan(ICONI) [image create photo imgobj1 -file $dan(ICON)]
  102. set icons(PROJECT-ICON) "icons/archive.png"
  103. set icons(PROJECT-ICONI) [image create photo imgobj2 -file $icons(PROJECT-ICON)]
  104. set icons(PUBLICF-ICON) "icons/public-folder.png"
  105. set icons(PUBLICF-ICONI) [image create photo imgobj3 -file $icons(PUBLICF-ICON)]
  106. set icons(PRIVATEF-ICON) "icons/private-folder.png"
  107. set icons(PRIVATEF-ICONI) [image create photo imgobj4 -file $icons(PRIVATEF-ICON)]
  108. set icons(PHP-ICON) "icons/file-php.png"
  109. set icons(PHP-ICONI) [image create photo imgobj5 -file $icons(PHP-ICON)]
  110. set icons(GENERIC-FILE-ICON) "icons/file-generic.png"
  111. set icons(GENERIC-FILE-ICONI) [image create photo imgobj6 -file $icons(GENERIC-FILE-ICON)]
  112. set icons(FOLDER-ICON) "icons/folder.png"
  113. set icons(FOLDER-ICONI) [image create photo imgobj7 -file $icons(FOLDER-ICON)]
  114. # Menu variables
  115. set menu(ROOT) "";
  116. set menu(ADD_FILE_ENTRY_IDX) 2;
  117. set menu(SAVE_AS_ENTRY_IDX) 4;
  118. set menu(SAVE_ENTRY_IDX) 5;
  119. set menu(CLOSE_ENTRY_IDX) 7;
  120. set menu(CLOSE_PROJECT_ENTRY_IDX) 8;
  121. set menu(COPY_ENTRY_IDX) 0;
  122. set menu(PASTE_ENTRY_IDX) 1;
  123. set menu(CUT_ENTRY_IDX) 2;
  124. set menu(FIND_ENTRY_IDX) 4;
  125. set dan(PhpExts) {.php .php2 .php3 .php4 .php5 .funny} ;# extensions of Php files
  126. # __________________ iswindows ___________________ #
  127. proc iswindows {} {
  128. # Checks for "platform is MS Windows".
  129. expr {$::tcl_platform(platform) eq {windows}}
  130. }
  131. # __________________ quit ___________________ #
  132. proc quit {{w ""} {res 0} {ask yes}} {
  133. # Closes alited application.
  134. # w - not used
  135. # res - result of running of main window
  136. # ask - if "yes", requests the confirmation of the exit
  137. exit 0;
  138. }
  139. # __________________ raise_window ___________________ #
  140. proc raise_window {} {
  141. # Raises the app's window.
  142. variable dan
  143. catch {
  144. wm withdraw $dan(WIN)
  145. wm deiconify $dan(WIN)
  146. }
  147. }
  148. # __________________ Tclexe ___________________ #
  149. proc Tclexe {} {
  150. # Gets Tcl's executable file.
  151. variable dan
  152. set tclexe [info nameofexecutable]
  153. return $tclexe
  154. }
  155. source [file join $SRCDIR main.tcl]
  156. source [file join $SRCDIR filelib.tcl]
  157. source [file join $SRCDIR win.tcl]
  158. source [file join $SRCDIR menu.tcl]
  159. source [file join $SRCDIR tree.tcl]
  160. source [file join $SRCDIR eglib.tcl]
  161. ## _ EONS: radxide _ ##
  162. }
  163. # ________________________ ::argv, ::argc _________________________ #
  164. set ::radxide::ARGV $::argv
  165. set ::radxide::dan(IsWindows) [expr {$::tcl_platform(platform) eq {windows}}]
  166. # _________________________ Run the app _________________________ #
  167. namespace upvar ::radxide dan dan
  168. radxide::main::_create ;# create the main form
  169. unset -nocomplain _
  170. if {[catch {set res [radxide::main::_run]} err]} {
  171. set res 0
  172. set msg "\nERROR in radxide:"
  173. puts \n$msg\n\n$::errorInfo\n
  174. set msg "$msg\n\n$err\n\nPlease, inform authors.\nDetails are in stdout."
  175. tk_messageBox -title $dan(TITLE) -icon error -message $msg
  176. exit 2
  177. }
  178. # _________________________________ EOF _________________________________ #