⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 manager.tcl

📁 是TCL的另外一个编译(解释)器
💻 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 + -