📄 manager.tcl
字号:
################################################################################
# manager.tcl -
#
# creates the main windows (editor, console, code browser etc.)
# was originally based upon BWidget磗 Demo
#
# Copyright 1999-2000 by Andreas Sievers
################################################################################
namespace eval EditManager {
variable _progress 0
variable _afterid ""
variable _status "Compute in progress..."
variable _homogeneous 0
variable _newPageCounter 0
variable lastPage ""
}
proc EditManager::focus_text {nb pagename} {
global EditorData
if {[info exists Editor::current(pagename)] && $Editor::current(pagename) == $pagename} {
return
} else {
if {[catch Editor::tclose info]} {
# tk_messageBox -message $info
}
}
set text_page [$nb getframe $pagename]
#save values of last active textWindow
if {[info exists Editor::current(text)]} {\
set f0 $Editor::current(text)
set p0 $Editor::current(pagename)
if {[info exists Editor::index($f0)]} {\
set idx $Editor::index($f0)
set Editor::text_win($idx,hasChanged) $Editor::current(hasChanged)
set Editor::text_win($idx,file) $Editor::current(file)
set Editor::text_win($idx,slave) $Editor::current(slave)
set Editor::text_win($idx,project) $Editor::current(project)
set Editor::text_win($idx,history) $Editor::current(procListHistory)
set Editor::text_win($idx,writable) $Editor::current(writable)
}
}
set Editor::current(text) $text_page.sw.textWindow
set Editor::current(page) $text_page
set idx $Editor::index($Editor::current(text))
set Editor::current(undo_id) $Editor::text_win($idx,undo_id)
set Editor::current(hasChanged) $Editor::text_win($idx,hasChanged)
set Editor::current(file) $Editor::text_win($idx,file)
set Editor::current(pagename) $Editor::text_win($idx,pagename)
set Editor::current(slave) $Editor::text_win($idx,slave)
set Editor::current(project) $Editor::text_win($idx,project)
set Editor::current(procListHistory) $Editor::text_win($idx,history)
set Editor::current(writable) $Editor::text_win($idx,writable)
#restore Cursor position
set Editor::last(index) $idx
focus $Editor::current(text)
NoteBook::see $nb $pagename
set editorWindows::TxtWidget $Editor::current(text)
set EditorData(curFile) $Editor::current(file)
$Editor::current(text) see insert
editorWindows::ReadCursor 0
editorWindows::flashLine
if {!$Editor::current(initDone)} {
Editor::updateObjects
Editor::selectObject 0
set Editor::current(initDone) 1
} else {
Editor::topen
Editor::selectObject 0
}
catch {$Editor::con_notebook raise $pagename}
}
proc EditManager::create_text {nb file} {
global EditorData
variable TxtWidget
variable _newPageCounter
incr _newPageCounter
set pageName "Page$_newPageCounter"
set filename [file tail $file]
set prjFile [file join [file dirname $file] [lindex [split $filename .] 0]].prj
set frame [$nb insert end $pageName -text $filename \
-raisecmd "EditManager::focus_text $nb $pageName" ]
set sw [ScrolledWindow::create $frame.sw -auto none]
set text [text $sw.textWindow -bg white -wrap none \
-font $EditorData(options,fonts,editorFont) -height 20 -width 80]
pack $text -fill both -expand yes
ScrolledWindow::setwidget $sw $text
pack $sw -fill both -expand yes
# init bindings for the text widget
set editorWindows::TxtWidget $text
editorWindows::setBindings
incr Editor::index_counter
set Editor::index($text) $Editor::index_counter
set Editor::text_win($Editor::index_counter,page) $frame
set Editor::text_win($Editor::index_counter,path) $text
set Editor::text_win($Editor::index_counter,hasChanged) 0
set Editor::text_win($Editor::index_counter,file) $file
set Editor::text_win($Editor::index_counter,writable) 1
set Editor::text_win($Editor::index_counter,pagename) $pageName
set Editor::text_win($Editor::index_counter,slave) "none"
set Editor::text_win($Editor::index_counter,history) [list "mark1"]
if {[file exists $prjFile]} {
set fd [open $prjFile r]
set Editor::text_win($Editor::index_counter,project) [read $fd]
close $fd
} else {
set Editor::text_win($Editor::index_counter,project) $EditorData(options,defaultProjectFile)
}
set Editor::current(initDone) 0
return [list $frame $pageName $text]
}
proc EditManager::create_procWindow {nb } {
variable TxtWidget
set pagename Proclist
set frame [$nb insert end $pagename -text "Procs"]
set sw [ScrolledWindow::create $frame.sw -auto both]
set procList [listbox $sw.proc -bg white]
$procList configure -exportselection false
set item "<none>"
$procList insert end $item
pack $procList -fill both -expand yes
ScrolledWindow::setwidget $sw $procList
pack $sw -fill both -expand yes
set buttonFrame [frame $frame.buttonFrame -relief sunken -borderwidth 2]
set button_prev [Button::create $buttonFrame.bp \
-image [Bitmap::get left] \
-relief raised\
-helptext [tr "Goto previous Position"]\
-command {Editor::procList_history_get_prev}]
set button_next [Button::create $buttonFrame.bn\
-image [Bitmap::get right] \
-relief raised\
-helptext [tr "Goto next Position"]\
-command {Editor::procList_history_get_next}]
set entryFrame [frame $frame.entryFrame -relief sunken -borderwidth 2]
set Editor::lineEntryCombo [ComboBox::create $entryFrame.combo \
-textvariable Editor::lineNo\
-values {""} \
-helptext [tr "Enter Linenumber"] \
-entrybg white\
-width 6]
set button_go [Button::create $entryFrame.go\
-image [Bitmap::get go] \
-relief raised\
-helptext [tr "Goto Line"]\
-command {Editor::lineNo_history_add ; Editor::gotoLine $Editor::lineNo}]
pack $button_prev -side left -expand yes -padx 2 -pady 5
pack $button_next -side left -expand yes -padx 2 -pady 5
pack $Editor::lineEntryCombo -side left -fill both -expand yes -pady 0 -ipady 0
pack $button_go -side left -expand yes
pack $entryFrame -side left -fill both -expand yes -ipadx 2 -padx 1
set childList [winfo children $Editor::lineEntryCombo]
foreach w $childList {if {[winfo class $w] == "Entry"} { set lineEntry $w ; break}}
bind $lineEntry <KeyRelease-Return> {Editor::lineNo_history_add ; Editor::gotoLine $Editor::lineNo}
return $frame
}
proc EditManager::create_conWindow {nb } {
global conWindow
set pagename asedCon
set frame [$nb insert end $pagename -text [tr "Console"]]
set sw [ScrolledWindow::create $frame.sw -auto both]
set conWindow [consoleInit $sw]
$conWindow configure -wrap word
ScrolledWindow::setwidget $sw $conWindow
pack $sw -fill both -expand yes
return $frame
}
proc EditManager::create_testTerminal {nb pagename title} {
set frame [$nb insert end $pagename \
-text "$title" \
-raisecmd "$Editor::notebook raise $pagename" ]
set sw [ScrolledWindow::create $frame.sw -auto both]
set termWindow [testTermInit $sw]
$termWindow configure -wrap word
ScrolledWindow::setwidget $sw $termWindow
pack $sw -fill both -expand yes
return $termWindow
}
################################################################################
#
# proc EditManager::create_treeWindow
#
# create a tree window for the object tree, using BWidgets treewidget
#
# zerbst@tu-harburg.d
#
# enhanced by Andreas Sievers
################################################################################
proc EditManager::create_treeWindow {nb } {
variable TxtWidget
set pagename "objtree"
set frame [$nb insert end $pagename -text "Code Browser"]
# no auto scrollbar due to a bug in BWidgets tree
set sw [ScrolledWindow::create $frame.sw -auto none]
set objTree [Tree $frame.sw.objTree \
-width 15\
-highlightthickness 0\
-bg white \
-deltay 18 \
-opencmd "Editor::tmoddir 1" \
-closecmd "Editor::tmoddir 0"
]
$sw setwidget $objTree
#navigator frame
set naviframe [frame $frame.naviFrame -height 20 -width 150]
#History Buttons
set buttonFrame [frame $naviframe.buttonFrame -relief sunken -borderwidth 2 ]
set button_prev [Button::create $buttonFrame.bp \
-image [Bitmap::get left] \
-relief raised\
-helptext [tr "Goto previous Position"]\
-command {Editor::procList_history_get_prev}]
set button_next [Button::create $buttonFrame.bn\
-image [Bitmap::get right] \
-relief raised\
-helptext [tr "Goto next Position"]\
-command {Editor::procList_history_get_next}]
# Line number etc.
set entryFrame [frame $naviframe.entryFrame -relief sunken -borderwidth 2]
set Editor::lineEntryCombo [ComboBox::create $entryFrame.combo \
-textvariable Editor::lineNo\
-values {""} \
-helptext [tr "Enter Linenumber"] \
-entrybg white\
-width 6]
set button_go [Button::create $entryFrame.go\
-image [Bitmap::get go] \
-relief raised\
-helptext [tr "Goto Line"]\
-command {Editor::lineNo_history_add ; Editor::gotoLine $Editor::lineNo}]
pack $button_prev -side left -expand yes -padx 2 -pady 5
pack $button_next -side left -expand yes -padx 2 -pady 5
pack $Editor::lineEntryCombo -side left -expand yes -padx 2 -pady 5
pack $button_go -side left -expand yes -padx 2 -pady 5
pack $buttonFrame -side left -fill both -expand yes -ipadx 2 -padx 1
pack $entryFrame -side left -fill both -expand yes -ipadx 2 -padx 1
pack $naviframe -side bottom -fill x
pack $sw -side top -fill both -expand yes -pady 1
set childList [winfo children $Editor::lineEntryCombo]
foreach w $childList {if {[winfo class $w] == "Entry"} { set lineEntry $w ; break}}
bind $lineEntry <KeyRelease-Return> {Editor::lineNo_history_add ; Editor::gotoLine $Editor::lineNo}
return $frame
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -