2013-08-29 15:21:13 +01:00
|
|
|
#
|
|
|
|
# Copyright 2004-2008 University of Zagreb, Croatia.
|
|
|
|
#
|
|
|
|
# Redistribution and use in source and binary forms, with or without
|
|
|
|
# modification, are permitted provided that the following conditions
|
|
|
|
# are met:
|
|
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
|
|
# notice, this list of conditions and the following disclaimer.
|
|
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
|
|
# documentation and/or other materials provided with the distribution.
|
|
|
|
#
|
|
|
|
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
|
|
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
# SUCH DAMAGE.
|
|
|
|
#
|
|
|
|
# This work was supported in part by Croatian Ministry of Science
|
|
|
|
# and Technology through the research contract #IP-2003-143.
|
|
|
|
#
|
|
|
|
|
|
|
|
#****h* imunes/initgui.tcl
|
|
|
|
# NAME
|
|
|
|
# initgui.tcl
|
|
|
|
# FUNCTION
|
|
|
|
# Initialize GUI. Not included when operating in batch mode.
|
|
|
|
#****
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# GUI-related global variables
|
|
|
|
#
|
|
|
|
|
|
|
|
#****v* initgui.tcl/global variables
|
|
|
|
# NAME
|
|
|
|
# global variables
|
|
|
|
# FUNCTION
|
|
|
|
# GUI-related global varibles
|
2018-07-25 20:50:19 +01:00
|
|
|
#
|
2013-08-29 15:21:13 +01:00
|
|
|
# * newlink -- helps when creating a new link. If there is no
|
|
|
|
# link currently created, this value is set to an empty string.
|
|
|
|
# * selectbox -- the value of the box representing all the selected items
|
|
|
|
# * selected -- containes the list of node_id's of all selected nodes.
|
2018-07-25 20:50:19 +01:00
|
|
|
# * newCanvas --
|
2013-08-29 15:21:13 +01:00
|
|
|
#
|
2018-07-25 20:50:19 +01:00
|
|
|
# * animatephase -- starting dashoffset. With this value the effect of
|
|
|
|
# rotating line around selected itme is achived.
|
2013-08-29 15:21:13 +01:00
|
|
|
# * undolevel -- control variable for undo.
|
|
|
|
# * redolevel -- control variable for redo.
|
|
|
|
# * undolog -- control variable for saving all the past configurations.
|
2018-07-25 20:50:19 +01:00
|
|
|
# * changed -- control variable for indicating that there something changed
|
2013-08-29 15:21:13 +01:00
|
|
|
# in active configuration.
|
|
|
|
# * badentry -- control variable indicating that there has been a bad entry
|
|
|
|
# in the text box.
|
|
|
|
# * cursorstate -- control variable for animating cursor.
|
|
|
|
# * clock_seconds -- control variable for animating cursor.
|
2018-07-25 20:50:19 +01:00
|
|
|
# * oper_mode -- control variable reresenting operating mode, possible
|
2013-08-29 15:21:13 +01:00
|
|
|
# values are edit and exec.
|
2018-07-25 20:50:19 +01:00
|
|
|
# * grid -- control variable representing grid distance. All new
|
|
|
|
# elements on the
|
2013-08-29 15:21:13 +01:00
|
|
|
# canvas are snaped to grid. Default value is 24.
|
|
|
|
# * sizex -- X size of the canvas.
|
|
|
|
# * sizey -- Y size of the canvas.
|
|
|
|
# * curcanvas -- the value of the current canvas.
|
2018-07-25 20:50:19 +01:00
|
|
|
# * autorearrange_enabled -- control variable indicating is
|
2013-08-29 15:21:13 +01:00
|
|
|
# autorearrange enabled.
|
|
|
|
#
|
|
|
|
# * defLinkColor -- defines the default link color, default link color is set
|
|
|
|
# to red.
|
|
|
|
# * defLinkWidth -- defines the width of the link, default is 2.
|
2018-07-25 20:50:19 +01:00
|
|
|
# * defEthBandwidth -- defines the ethernet bandwidth, default is set to
|
2013-08-29 15:21:13 +01:00
|
|
|
# 100000000.
|
|
|
|
# * defSerBandwidth -- defines the serail link bandwidth, default is 2048000.
|
|
|
|
# * defSerDelay -- defines the serail link delay, default is 2500.
|
|
|
|
# * showIfNames -- control variable for showing interface names, default is 1
|
2018-07-25 20:50:19 +01:00
|
|
|
# * showIfIPaddrs -- control variable for showing interface IPv4 addresses,
|
2013-08-29 15:21:13 +01:00
|
|
|
# default is 1 (addresses are visible).
|
2018-07-25 20:50:19 +01:00
|
|
|
# * showIfIPv6addrs -- control variable for showing interface IPv4
|
2013-08-29 15:21:13 +01:00
|
|
|
# addresses, default is 1 (addresses are visible).
|
|
|
|
# * showNodeLabels -- control variable for showing node labels, default is 1.
|
|
|
|
# * showLinkLabels -- control variable for showing link labels, default is 1.
|
|
|
|
#
|
|
|
|
#****
|
|
|
|
|
|
|
|
|
|
|
|
set newlink ""
|
|
|
|
set selectbox ""
|
|
|
|
set selected ""
|
|
|
|
newCanvas ""
|
|
|
|
|
|
|
|
set animatephase 0
|
|
|
|
set undolevel 0
|
|
|
|
set redolevel 0
|
|
|
|
set undolog(0) ""
|
|
|
|
set changed 0
|
|
|
|
set badentry 0
|
|
|
|
set cursorState 0
|
|
|
|
set clock_seconds 0
|
|
|
|
set oper_mode edit
|
|
|
|
set grid 24
|
|
|
|
set showGrid 1
|
|
|
|
set zoom 1.0
|
|
|
|
set curcanvas [lindex $canvas_list 0]
|
|
|
|
set autorearrange_enabled 0
|
|
|
|
|
|
|
|
set num_canvases $g_prefs(gui_num_canvases)
|
|
|
|
while { $num_canvases > 1 } { newCanvas ""; incr num_canvases -1 }
|
|
|
|
|
|
|
|
# resize Oval/Rectangle, "false" or direction: north/west/east/...
|
|
|
|
set resizemode false
|
|
|
|
set thruplotResize false
|
|
|
|
|
|
|
|
# dictionary that maps cursor style to resize mode
|
2018-07-25 20:50:19 +01:00
|
|
|
set cursorToResizemode [dict create top_left_corner lu]
|
2013-08-29 15:21:13 +01:00
|
|
|
dict set cursorToResizemode bottom_left_corner ld
|
|
|
|
dict set cursorToResizemode left_side l
|
|
|
|
dict set cursorToResizemode top_right_corner ru
|
|
|
|
dict set cursorToResizemode bottom_right_corner rd
|
|
|
|
dict set cursorToResizemode right_side r
|
|
|
|
dict set cursorToResizemode top_side u
|
2018-07-25 20:50:19 +01:00
|
|
|
dict set cursorToResizemode bottom_side d
|
2013-08-29 15:21:13 +01:00
|
|
|
|
2018-07-25 20:50:19 +01:00
|
|
|
# dictionary that maps thruplot to color
|
2013-08-29 15:21:13 +01:00
|
|
|
set thruPlotColor [dict create default blue]
|
|
|
|
set thruPlotDragStart false
|
2018-07-25 20:50:19 +01:00
|
|
|
set thruPlotCur null
|
2013-08-29 15:21:13 +01:00
|
|
|
|
|
|
|
set curPlotLineColor blue
|
|
|
|
set curPlotFillColor "#7f9eee"
|
|
|
|
set curPlotBgColor "#EEEEFF"
|
|
|
|
|
|
|
|
# values for locking thruplot Max Height
|
|
|
|
set thruPlotMaxKBPS 10
|
|
|
|
set defThruPlotMaxKBPS 10
|
|
|
|
|
|
|
|
#
|
|
|
|
# Initialize a few variables to default values
|
|
|
|
#
|
2018-07-25 20:50:19 +01:00
|
|
|
set defLinkColor Red
|
2013-08-29 15:21:13 +01:00
|
|
|
set defFillColor Gray
|
|
|
|
set defLinkWidth 2
|
|
|
|
set defEthBandwidth 0
|
|
|
|
set defSerBandwidth 2048000
|
|
|
|
set defSerDelay 2500
|
|
|
|
|
|
|
|
set newoval ""
|
|
|
|
set defOvalColor #CFCFFF
|
|
|
|
set defOvalLabelFont "Arial 12"
|
|
|
|
set newrect ""
|
|
|
|
set defRectColor #C0C0FF
|
|
|
|
set defRectLabelFont "Arial 12"
|
|
|
|
set defTextFont "Arial 12"
|
|
|
|
set defTextFontFamily "Arial"
|
|
|
|
set defTextFontSize 12
|
|
|
|
set defTextColor #000000
|
|
|
|
|
|
|
|
set showIfNames 0
|
|
|
|
set showIfIPaddrs 1
|
|
|
|
set showIfIPv6addrs 1
|
|
|
|
set showNodeLabels 1
|
|
|
|
set showLinkLabels 1
|
|
|
|
|
|
|
|
set showBkgImage 0
|
|
|
|
set showAnnotations 1
|
|
|
|
set g_view_locked 0
|
|
|
|
|
|
|
|
set defSelectionColor #FEFFBA
|
|
|
|
set def_router_model router
|
|
|
|
|
|
|
|
set wlanLinkColors "#007000 #000070 #700000 #700070 #707070 #007070 #707000"
|
|
|
|
set g_twoNodeSelect "" ;# flag for editor.tcl:button1 when selecting two nodes
|
|
|
|
|
|
|
|
# assume displaying only 7 other distributed servers cpu usage
|
|
|
|
array set server_cpuusage {}
|
|
|
|
set cpu_palettes { black blue red yellow green magenta cyan white}
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Window / canvas setup section
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
|
|
wm minsize . 640 480
|
|
|
|
wm geometry . 1016x716-30+30
|
|
|
|
setGuiTitle ""
|
|
|
|
wm iconbitmap . @$CORE_DATA_DIR/icons/normal/core-icon.xbm
|
|
|
|
catch {
|
|
|
|
set g_core_icon [image create photo -file \
|
|
|
|
"$CORE_DATA_DIR/icons/normal/core-icon.png"]
|
|
|
|
wm iconphoto . -default $g_core_icon
|
|
|
|
}
|
|
|
|
|
|
|
|
menu .menubar
|
|
|
|
. config -menu .menubar -bg white
|
|
|
|
|
|
|
|
.menubar add cascade -label File -underline 0 -menu .menubar.file
|
|
|
|
.menubar add cascade -label Edit -underline 0 -menu .menubar.edit
|
|
|
|
.menubar add cascade -label Canvas -underline 0 -menu .menubar.canvas
|
|
|
|
.menubar add cascade -label View -underline 0 -menu .menubar.view
|
|
|
|
.menubar add cascade -label Tools -underline 0 -menu .menubar.tools
|
|
|
|
.menubar add cascade -label Widgets -underline 0 -menu .menubar.widgets
|
|
|
|
.menubar add cascade -label Session -underline 0 -menu .menubar.session
|
|
|
|
.menubar add cascade -label Help -underline 0 -menu .menubar.help
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# File
|
|
|
|
#
|
|
|
|
menu .menubar.file -tearoff 0
|
|
|
|
|
|
|
|
.menubar.file add command -label New -underline 0 \
|
|
|
|
-accelerator "Ctrl+N" -command { fileNewDialogBox }
|
|
|
|
bind . <Control-n> "fileNewDialogBox"
|
|
|
|
|
|
|
|
.menubar.file add command -label "Open..." -underline 0 \
|
|
|
|
-accelerator "Ctrl+O" -command { fileOpenDialogBox }
|
|
|
|
bind . <Control-o> "fileOpenDialogBox"
|
|
|
|
|
2014-10-22 20:33:32 +01:00
|
|
|
.menubar.file add command -label "Reload" -underline 0 \
|
2018-07-25 20:50:19 +01:00
|
|
|
-command { openFile $currentFile }
|
2014-10-22 20:33:32 +01:00
|
|
|
|
2013-08-29 15:21:13 +01:00
|
|
|
.menubar.file add command -label Save -underline 0 \
|
|
|
|
-accelerator "Ctrl+S" -command { fileSaveDialogBox "" }
|
|
|
|
bind . <Control-s> "fileSaveDialogBox {}"
|
|
|
|
|
|
|
|
.menubar.file add command -label "Save As XML..." -underline 8 \
|
|
|
|
-command { fileSaveDialogBox xml }
|
|
|
|
|
|
|
|
.menubar.file add command -label "Save As imn..." -underline 8 \
|
|
|
|
-command { fileSaveDialogBox imn }
|
|
|
|
|
|
|
|
.menubar.file add separator
|
|
|
|
.menubar.file add command -label "Export Python script..." -command exportPython
|
2013-11-25 19:56:08 +00:00
|
|
|
.menubar.file add command -label "Execute XML or Python script..." \
|
2014-04-03 18:26:47 +01:00
|
|
|
-command { execPython false }
|
|
|
|
.menubar.file add command -label "Execute Python script with options..." \
|
|
|
|
-command { execPython true }
|
2013-08-29 15:21:13 +01:00
|
|
|
|
|
|
|
.menubar.file add separator
|
|
|
|
.menubar.file add command -label "Open current file in editor..." \
|
2018-07-25 20:50:19 +01:00
|
|
|
-underline 21 -command {
|
2013-08-29 15:21:13 +01:00
|
|
|
global currentFile
|
|
|
|
set ed [get_text_editor false]
|
|
|
|
set t [get_term_prog false]
|
|
|
|
if { [catch {eval exec $t "$ed $currentFile" & } err ] } {
|
|
|
|
puts "Error running editor '$ed' in terminal '$t': $err"
|
|
|
|
puts "Check the text editor setting under preferences."
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.menubar.file add command -label "Print..." -underline 0 \
|
|
|
|
-command {
|
|
|
|
set w .entry1
|
|
|
|
catch {destroy $w}
|
|
|
|
toplevel $w
|
|
|
|
wm title $w "Printing options"
|
|
|
|
wm iconname $w "Printing options"
|
|
|
|
|
|
|
|
label $w.msg -wraplength 5i -justify left -text "Print command:"
|
|
|
|
pack $w.msg -side top
|
|
|
|
|
|
|
|
frame $w.buttons
|
|
|
|
pack $w.buttons -side bottom -fill x -pady 2m
|
|
|
|
button $w.buttons.print -text Print -command "printCanvas $w"
|
|
|
|
button $w.buttons.cancel -text "Cancel" -command "destroy $w"
|
|
|
|
pack $w.buttons.print $w.buttons.cancel -side left -expand 1
|
|
|
|
|
|
|
|
entry $w.e1 -bg white
|
|
|
|
$w.e1 insert 0 "lpr"
|
|
|
|
pack $w.e1 -side top -pady 5 -padx 10 -fill x
|
|
|
|
}
|
|
|
|
.menubar.file add command -label "Save screenshot..." -command {
|
|
|
|
global currentFile
|
|
|
|
set initialfile [file tail $currentFile]
|
|
|
|
# this chops off the .imn file extension
|
|
|
|
set ext [file extension $initialfile]
|
|
|
|
set extidx [expr {[string last $ext $initialfile] - 1}]
|
|
|
|
if { $ext != "" && $extidx > 0 } {
|
|
|
|
set initialfile [string range $initialfile 0 $extidx]
|
|
|
|
}
|
|
|
|
if { $initialfile == "" } { set initialfile "untitled" }
|
|
|
|
set fname [tk_getSaveFile -filetypes {{ "PostScript file" {.ps} }} \
|
|
|
|
-initialfile $initialfile -defaultextension .ps]
|
|
|
|
if { $fname != "" } {
|
|
|
|
.c postscript -file $fname
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.menubar.file add separator
|
2014-10-22 20:33:32 +01:00
|
|
|
set g_mru_index 15 ;# index of first MRU list item
|
2013-08-29 15:21:13 +01:00
|
|
|
foreach f $g_mrulist {
|
2014-04-03 18:26:47 +01:00
|
|
|
.menubar.file add command -label "$f" -command "mrufile {$f}"
|
2013-08-29 15:21:13 +01:00
|
|
|
}
|
|
|
|
.menubar.file add separator
|
|
|
|
.menubar.file add command -label Quit -underline 0 -command { exit }
|
|
|
|
|
|
|
|
wm protocol . WM_DELETE_WINDOW exit
|
|
|
|
|
|
|
|
#
|
|
|
|
# Edit
|
|
|
|
#
|
|
|
|
menu .menubar.edit -tearoff 0
|
|
|
|
.menubar.edit add command -label "Undo" -underline 0 \
|
|
|
|
-accelerator "Ctrl+Z" -command undo -state disabled
|
|
|
|
bind . <Control-z> undo
|
|
|
|
.menubar.edit add command -label "Redo" -underline 0 \
|
|
|
|
-accelerator "Ctrl+Y" -command redo -state disabled
|
|
|
|
bind . <Control-y> redo
|
|
|
|
.menubar.edit add separator
|
|
|
|
.menubar.edit add command -label "Cut" -underline 2 \
|
|
|
|
-accelerator "Ctrl+X" -command cutSelection
|
|
|
|
bind . <Control-x> cutSelection
|
|
|
|
.menubar.edit add command -label "Copy" -underline 0 \
|
|
|
|
-accelerator "Ctrl+C" -command copySelection
|
|
|
|
bind . <Control-c> copySelection
|
|
|
|
bind . <Control-Insert> copySelection
|
|
|
|
.menubar.edit add command -label "Paste" -underline 0 \
|
|
|
|
-accelerator "Ctrl+V" -command pasteSelection
|
|
|
|
bind . <Control-v> pasteSelection
|
|
|
|
bind . <Shift-Insert> copySelection
|
|
|
|
.menubar.edit add separator
|
|
|
|
.menubar.edit add command -label "Select all" \
|
|
|
|
-accelerator "Ctrl+A" -command {
|
|
|
|
foreach obj [.c find withtag node] {
|
|
|
|
selectNode .c $obj
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bind . <Control-a> {
|
|
|
|
foreach obj [.c find withtag node] {
|
|
|
|
selectNode .c $obj
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.menubar.edit add command -label "Select adjacent" \
|
|
|
|
-accelerator "Ctrl+J" -command selectAdjacent
|
|
|
|
bind . <Control-j> selectAdjacent
|
|
|
|
|
|
|
|
.menubar.edit add separator
|
|
|
|
.menubar.edit add command -label "Find..." -underline 0 -accelerator "Ctrl+F" \
|
|
|
|
-command popupFind
|
|
|
|
bind . <Control-f> popupFind
|
|
|
|
.menubar.edit add command -label "Clear marker" -command clearMarker
|
|
|
|
.menubar.edit add command -label "Preferences..." -command popupPrefs
|
|
|
|
|
|
|
|
#
|
|
|
|
# Canvas
|
|
|
|
#
|
|
|
|
menu .menubar.canvas -tearoff 0
|
|
|
|
.menubar.canvas add command -label "New" -command {
|
|
|
|
newCanvas ""
|
|
|
|
switchCanvas last
|
|
|
|
set changed 1
|
|
|
|
updateUndoLog
|
|
|
|
}
|
|
|
|
.menubar.canvas add command -label "Manage..." -command {manageCanvasPopup 0 0}
|
|
|
|
.menubar.canvas add command -label "Delete" -command {
|
|
|
|
if { [llength $canvas_list] == 1 } {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
foreach obj [.c find withtag node] {
|
|
|
|
selectNode .c $obj
|
|
|
|
}
|
|
|
|
deleteSelection
|
|
|
|
set i [lsearch $canvas_list $curcanvas]
|
|
|
|
set canvas_list [lreplace $canvas_list $i $i]
|
|
|
|
set curcanvas [lindex $canvas_list $i]
|
|
|
|
if { $curcanvas == "" } {
|
|
|
|
set curcanvas [lindex $canvas_list end]
|
|
|
|
}
|
|
|
|
switchCanvas none
|
|
|
|
set changed 1
|
|
|
|
updateUndoLog
|
|
|
|
}
|
|
|
|
.menubar.canvas add separator
|
|
|
|
.menubar.canvas add command -label "Size/scale..." -command resizeCanvasPopup
|
|
|
|
# Boeing
|
|
|
|
.menubar.canvas add command -label "Wallpaper..." -command wallpaperPopup
|
|
|
|
# end Boeing
|
|
|
|
.menubar.canvas add separator
|
|
|
|
.menubar.canvas add command -label "Previous" -accelerator "PgUp" \
|
|
|
|
-command { switchCanvas prev }
|
|
|
|
bind . <Prior> { switchCanvas prev }
|
|
|
|
.menubar.canvas add command -label "Next" -accelerator "PgDown" \
|
|
|
|
-command { switchCanvas next }
|
|
|
|
bind . <Next> { switchCanvas next }
|
|
|
|
.menubar.canvas add command -label "First" -accelerator "Home" \
|
|
|
|
-command { switchCanvas first }
|
|
|
|
bind . <Home> { switchCanvas first }
|
|
|
|
.menubar.canvas add command -label "Last" -accelerator "End" \
|
|
|
|
-command { switchCanvas last }
|
|
|
|
bind . <End> { switchCanvas last }
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Tools
|
|
|
|
#
|
|
|
|
menu .menubar.tools -tearoff 0
|
|
|
|
.menubar.tools add checkbutton -label "Auto rearrange all" -underline 0 \
|
|
|
|
-command { rearrange all }
|
|
|
|
.menubar.tools add checkbutton -label "Auto rearrange selected" -underline 0 \
|
|
|
|
-command { rearrange selected }
|
|
|
|
.menubar.tools add separator
|
|
|
|
.menubar.tools add command -label "Align to grid" -underline 0 \
|
|
|
|
-command { align2grid }
|
|
|
|
.menubar.tools add separator
|
|
|
|
.menubar.tools add command -label "Traffic..." -command popupTrafficDialog
|
|
|
|
# Boeing
|
|
|
|
#
|
|
|
|
.menubar.tools add command -label "IP addresses..." -underline 0 \
|
|
|
|
-command { popupAddressConfig }
|
|
|
|
.menubar.tools add command -label "MAC addresses..." -underline 0 \
|
|
|
|
-command { popupMacAddressConfig }
|
|
|
|
.menubar.tools add command -label "Build hosts file..." -underline 0 \
|
|
|
|
-command { popupBuildHostsFile }
|
|
|
|
.menubar.tools add command -label "Renumber nodes..." -underline 0 \
|
|
|
|
-command { popupRenumberNodes }
|
|
|
|
menu .menubar.tools.experimental
|
|
|
|
.menubar.tools add cascade -label "Experimental" \
|
|
|
|
-menu .menubar.tools.experimental
|
|
|
|
.menubar.tools.experimental add command -label "Plugins..." \
|
|
|
|
-underline 0 -command "popupPluginsConfig"
|
|
|
|
.menubar.tools.experimental add command -label "ns2imunes converter..." \
|
|
|
|
-underline 0 -command {
|
|
|
|
toplevel .ns2im-dialog
|
|
|
|
wm transient .ns2im-dialog .
|
|
|
|
wm title .ns2im-dialog "ns2imunes converter"
|
2018-07-25 20:50:19 +01:00
|
|
|
|
2013-08-29 15:21:13 +01:00
|
|
|
set f1 [frame .ns2im-dialog.entry1]
|
|
|
|
set f2 [frame .ns2im-dialog.buttons]
|
2018-07-25 20:50:19 +01:00
|
|
|
|
2013-08-29 15:21:13 +01:00
|
|
|
label $f1.l -text "ns2 file:"
|
|
|
|
entry $f1.e -width 25 -textvariable ns2srcfile
|
|
|
|
button $f1.b -text "Browse" -width 8 \
|
|
|
|
-command {
|
|
|
|
set srcfile [tk_getOpenFile -parent .ns2im-dialog \
|
|
|
|
-initialfile $ns2srcfile]
|
|
|
|
$f1.e delete 0 end
|
|
|
|
$f1.e insert 0 "$srcfile"
|
2018-07-25 20:50:19 +01:00
|
|
|
}
|
2013-08-29 15:21:13 +01:00
|
|
|
button $f2.b1 -text "OK" -command {
|
|
|
|
ns2im $srcfile
|
|
|
|
destroy .ns2im-dialog
|
|
|
|
}
|
|
|
|
button $f2.b2 -text "Cancel" -command { destroy .ns2im-dialog}
|
2018-07-25 20:50:19 +01:00
|
|
|
|
2013-08-29 15:21:13 +01:00
|
|
|
pack $f1.b $f1.e -side right
|
|
|
|
pack $f1.l -side right -fill x -expand true
|
|
|
|
pack $f2.b1 -side left -expand true -anchor e
|
|
|
|
pack $f2.b2 -side left -expand true -anchor w
|
|
|
|
pack $f1 $f2 -fill x
|
|
|
|
}
|
|
|
|
|
|
|
|
# Widgets
|
|
|
|
#
|
|
|
|
init_widget_menu
|
|
|
|
# end Boeing
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# View
|
|
|
|
#
|
|
|
|
menu .menubar.view -tearoff 1
|
|
|
|
menu .menubar.view.show -tearoff 1
|
|
|
|
.menubar.view add cascade -label "Show" -menu .menubar.view.show
|
|
|
|
|
|
|
|
.menubar.view.show add command -label "All" -underline 5 -command {
|
|
|
|
set showIfNames 1
|
|
|
|
set showIfIPaddrs 1
|
|
|
|
set showIfIPv6addrs 1
|
|
|
|
set showNodeLabels 1
|
|
|
|
set showLinkLabels 1
|
|
|
|
redrawAllLinks
|
|
|
|
foreach object [.c find withtag linklabel] {
|
|
|
|
.c itemconfigure $object -state normal
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.menubar.view.show add command -label "None" -underline 6 -command {
|
|
|
|
set showIfNames 0
|
|
|
|
set showIfIPaddrs 0
|
|
|
|
set showIfIPv6addrs 0
|
|
|
|
set showNodeLabels 0
|
|
|
|
set showLinkLabels 0
|
|
|
|
redrawAllLinks
|
|
|
|
foreach object [.c find withtag linklabel] {
|
|
|
|
.c itemconfigure $object -state hidden
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.menubar.view.show add separator
|
|
|
|
|
|
|
|
.menubar.view.show add checkbutton -label "Interface Names" \
|
|
|
|
-underline 5 -variable showIfNames \
|
|
|
|
-command { redrawAllLinks }
|
|
|
|
.menubar.view.show add checkbutton -label "IPv4 Addresses " \
|
|
|
|
-underline 8 -variable showIfIPaddrs \
|
|
|
|
-command { redrawAllLinks }
|
|
|
|
.menubar.view.show add checkbutton -label "IPv6 Addresses " \
|
|
|
|
-underline 8 -variable showIfIPv6addrs \
|
|
|
|
-command { redrawAllLinks }
|
|
|
|
.menubar.view.show add checkbutton -label "Node Labels" \
|
|
|
|
-underline 5 -variable showNodeLabels -command {
|
|
|
|
foreach object [.c find withtag nodelabel] {
|
|
|
|
if { $showNodeLabels } {
|
|
|
|
.c itemconfigure $object -state normal
|
|
|
|
} else {
|
|
|
|
.c itemconfigure $object -state hidden
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.menubar.view.show add checkbutton -label "Link Labels" \
|
|
|
|
-underline 5 -variable showLinkLabels -command {
|
|
|
|
foreach object [.c find withtag linklabel] {
|
|
|
|
if { $showLinkLabels } {
|
|
|
|
.c itemconfigure $object -state normal
|
|
|
|
} else {
|
|
|
|
.c itemconfigure $object -state hidden
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
# .menubar.view.show add checkbutton -label "Background Image" \
|
|
|
|
# -underline 5 -variable showBkgImage \
|
|
|
|
# -command { redrawAll }
|
|
|
|
.menubar.view.show add checkbutton -label "Annotations" \
|
|
|
|
-underline 5 -variable showAnnotations -command redrawAll
|
|
|
|
.menubar.view.show add checkbutton -label "Grid" \
|
|
|
|
-underline 5 -variable showGrid -command redrawAll
|
|
|
|
.menubar.view.show add checkbutton -label "API Messages" \
|
|
|
|
-underline 5 -variable showAPI
|
|
|
|
|
|
|
|
.menubar.view add command -label "Show hidden nodes" \
|
|
|
|
-command {
|
|
|
|
global node_list
|
|
|
|
foreach node $node_list { setNodeHidden $node 0 }
|
|
|
|
redrawAll
|
|
|
|
}
|
|
|
|
.menubar.view add checkbutton -label "Locked" -variable g_view_locked
|
|
|
|
.menubar.view add command -label "3D GUI..." -command {
|
|
|
|
global g_prefs
|
|
|
|
set gui ""
|
|
|
|
set guipref ""
|
|
|
|
if { [info exists g_prefs(gui_3d_path)] } {
|
|
|
|
set guipref $g_prefs(gui_3d_path)
|
|
|
|
set gui [auto_execok $guipref]
|
|
|
|
}
|
|
|
|
if { $gui == "" } {
|
|
|
|
set msg "The 3D GUI command was not valid ('$guipref').\n"
|
|
|
|
set msg "$msg Make sure that SDT3D is installed and that an appropriate"
|
|
|
|
set msg "$msg launch script is configured under preferences."
|
|
|
|
tk_messageBox -type ok -icon warning -message $msg -title "Error"
|
|
|
|
} else {
|
|
|
|
if { [catch { exec $gui & }] } {
|
|
|
|
puts "Error with 3D GUI command '$gui'."
|
|
|
|
}
|
|
|
|
statline "3D GUI command executed: $gui"
|
|
|
|
}
|
|
|
|
setSessionOption "enablesdt" 1 1
|
|
|
|
}
|
|
|
|
.menubar.view add separator
|
|
|
|
.menubar.view add command -label "Zoom In" -accelerator "+" \
|
|
|
|
-command "zoom up"
|
|
|
|
bind . "+" "zoom up"
|
|
|
|
.menubar.view add command -label "Zoom Out" -accelerator "-" \
|
|
|
|
-command "zoom down"
|
|
|
|
bind . "-" "zoom down"
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Session
|
|
|
|
#
|
|
|
|
menu .menubar.session -tearoff 1
|
|
|
|
.menubar.session add command -label "Stop" -underline 1 \
|
|
|
|
-command "setOperMode edit"
|
|
|
|
.menubar.session add command -label "Change sessions..." \
|
|
|
|
-underline 0 -command "requestSessions"
|
|
|
|
.menubar.session add separator
|
|
|
|
.menubar.session add command -label "Node types..." -underline 0 \
|
|
|
|
-command "popupNodesConfig"
|
|
|
|
.menubar.session add command -label "Comments..." -underline 0 \
|
|
|
|
-command "popupCommentsConfig"
|
|
|
|
.menubar.session add command -label "Hooks..." -underline 0 \
|
|
|
|
-command "popupHooksConfig"
|
|
|
|
.menubar.session add command -label "Reset node positions" -underline 0 \
|
|
|
|
-command "resetAllNodeCoords reset"
|
|
|
|
.menubar.session add command -label "Emulation servers..." \
|
|
|
|
-underline 0 -command "configRemoteServers"
|
|
|
|
.menubar.session add command -label "Options..." \
|
|
|
|
-underline 0 -command "sendConfRequestMessage -1 0 session 0x1 -1 \"\""
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Help
|
|
|
|
#
|
|
|
|
menu .menubar.help -tearoff 0
|
2018-07-25 20:50:19 +01:00
|
|
|
.menubar.help add command -label "CORE GitHub (www)" -command \
|
|
|
|
"_launchBrowser https://github.com/coreemu/core"
|
|
|
|
.menubar.help add command -label "CORE Documentation (www)" -command \
|
|
|
|
"_launchBrowser https://coreemu.github.io/core/"
|
2013-08-29 15:21:13 +01:00
|
|
|
.menubar.help add command -label "About" -command popupAbout
|
|
|
|
|
|
|
|
#
|
|
|
|
# Left-side toolbar
|
|
|
|
#
|
|
|
|
frame .left
|
|
|
|
pack .left -side left -fill y
|
|
|
|
# Boeing: create images now, buttons in setOperMode
|
|
|
|
#foreach b {select delete link hub lanswitch router host pc rj45} {
|
|
|
|
foreach b {select } {
|
|
|
|
set imgf "$CORE_DATA_DIR/icons/tiny/$b.gif"
|
|
|
|
set image [image create photo -file $imgf]
|
|
|
|
radiobutton .left.$b -indicatoron 0 \
|
|
|
|
-variable activetool -value $b -selectcolor $defSelectionColor \
|
|
|
|
-width 32 -height 32 -image $image \
|
|
|
|
-command "popupMenuChoose \"\" $b $imgf"
|
|
|
|
pack .left.$b -side top
|
|
|
|
leftToolTip $b .left
|
|
|
|
}
|
|
|
|
foreach b {hub lanswitch router host pc rj45 \
|
|
|
|
tunnel wlan oval text antenna } {
|
|
|
|
set $b [image create photo -file "$CORE_DATA_DIR/icons/normal/$b.gif"]
|
|
|
|
createScaledImages $b
|
|
|
|
}
|
|
|
|
set activetool_prev select
|
|
|
|
set markersize 5
|
|
|
|
set markercolor black
|
|
|
|
# end Boeing changes
|
|
|
|
set pseudo [image create photo]
|
|
|
|
set text [image create photo]
|
|
|
|
|
|
|
|
|
|
|
|
. configure -background #808080
|
|
|
|
frame .grid
|
|
|
|
frame .hframe
|
|
|
|
frame .vframe
|
|
|
|
set c [canvas .c -bd 0 -relief sunken -highlightthickness 0\
|
|
|
|
-background gray \
|
|
|
|
-xscrollcommand ".hframe.scroll set" \
|
|
|
|
-yscrollcommand ".vframe.scroll set"]
|
|
|
|
|
|
|
|
canvas .hframe.t -width 300 -height 18 -bd 0 -highlightthickness 0 \
|
|
|
|
-background gray \
|
|
|
|
-xscrollcommand ".hframe.ts set"
|
|
|
|
bind .hframe.t <1> {
|
|
|
|
set canvas [lindex [.hframe.t gettags current] 1]
|
|
|
|
if { $canvas != "" && $canvas != $curcanvas } {
|
|
|
|
set curcanvas $canvas
|
|
|
|
switchCanvas none
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bind .hframe.t <Double-1> {
|
|
|
|
set canvas [lindex [.hframe.t gettags current] 1]
|
|
|
|
if { $canvas != "" } {
|
|
|
|
if { $canvas != $curcanvas } {
|
|
|
|
set curcanvas $canvas
|
|
|
|
switchCanvas none
|
|
|
|
} else {
|
|
|
|
manageCanvasPopup %X %Y
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
scrollbar .hframe.scroll -orient horiz -command "$c xview" \
|
|
|
|
-bd 1 -width 14
|
|
|
|
scrollbar .vframe.scroll -command "$c yview" \
|
|
|
|
-bd 1 -width 14
|
|
|
|
scrollbar .hframe.ts -orient horiz -command ".hframe.t xview" \
|
|
|
|
-bd 1 -width 14
|
|
|
|
pack .hframe.ts .hframe.t -side left -padx 0 -pady 0
|
|
|
|
pack .hframe.scroll -side left -padx 0 -pady 0 -fill both -expand true
|
|
|
|
pack .vframe.scroll -side top -padx 0 -pady 0 -fill both -expand true
|
|
|
|
pack .grid -expand yes -fill both -padx 1 -pady 1
|
|
|
|
grid rowconfig .grid 0 -weight 1 -minsize 0
|
|
|
|
grid columnconfig .grid 0 -weight 1 -minsize 0
|
|
|
|
grid .c -in .grid -row 0 -column 0 \
|
|
|
|
-rowspan 1 -columnspan 1 -sticky news
|
|
|
|
grid .vframe -in .grid -row 0 -column 1 \
|
|
|
|
-rowspan 1 -columnspan 1 -sticky news
|
|
|
|
grid .hframe -in .grid -row 1 -column 0 \
|
|
|
|
-rowspan 1 -columnspan 1 -sticky news
|
|
|
|
|
|
|
|
frame .bottom
|
|
|
|
pack .bottom -side bottom -fill x
|
|
|
|
label .bottom.textbox -relief sunken -bd 1 -anchor w -width 999
|
|
|
|
label .bottom.zoom -relief sunken -bd 1 -anchor w -width 10
|
|
|
|
label .bottom.cpu_load -relief sunken -bd 1 -anchor w -width 9
|
2018-07-25 20:50:19 +01:00
|
|
|
label .bottom.mbuf -relief sunken -bd 1 -anchor w -width 9
|
2013-08-29 15:21:13 +01:00
|
|
|
label .bottom.indicators -relief sunken -bd 1 -anchor w -width 5
|
|
|
|
pack .bottom.indicators .bottom.mbuf .bottom.cpu_load \
|
|
|
|
.bottom.zoom .bottom.textbox -side right -padx 0 -fill both
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Event bindings and procedures for main canvas:
|
|
|
|
#
|
|
|
|
$c bind node <Any-Enter> "+nodeEnter $c"
|
|
|
|
$c bind nodelabel <Any-Enter> "nodeEnter $c"
|
|
|
|
$c bind link <Any-Enter> "linkEnter $c"
|
|
|
|
$c bind linklabel <Any-Enter> "linkEnter $c"
|
|
|
|
$c bind node <Any-Leave> "anyLeave $c"
|
|
|
|
$c bind nodelabel <Any-Leave> "anyLeave $c"
|
|
|
|
$c bind link <Any-Leave> "anyLeave $c"
|
|
|
|
$c bind linklabel <Any-Leave> "anyLeave $c"
|
|
|
|
$c bind node <Double-1> "popupConfigDialog $c"
|
|
|
|
$c bind nodelabel <Double-1> "popupConfigDialog $c"
|
|
|
|
$c bind grid <Double-1> "double1onGrid $c %x %y"
|
|
|
|
$c bind link <Double-1> "popupConfigDialog $c"
|
|
|
|
$c bind linklabel <Double-1> "popupConfigDialog $c"
|
|
|
|
$c bind node <3> "button3node $c %x %y \"\""
|
|
|
|
$c bind oval <Double-1> "popupConfigDialog $c"
|
|
|
|
$c bind rectangle <Double-1> "popupConfigDialog $c"
|
|
|
|
$c bind text <Double-1> "popupConfigDialog $c"
|
|
|
|
$c bind text <KeyPress> "textInsert $c %A"
|
|
|
|
$c bind text <Return> "textInsert $c \\n"
|
|
|
|
$c bind node <3> "button3node $c %x %y \"\""
|
|
|
|
$c bind nodelabel <3> "button3node $c %x %y \"\""
|
|
|
|
$c bind link <3> "button3link $c %x %y"
|
|
|
|
$c bind linklabel <3> "button3link $c %x %y"
|
|
|
|
|
|
|
|
$c bind oval <3> "button3annotation oval $c %x %y"
|
|
|
|
$c bind rectangle <3> "button3annotation rectangle $c %x %y"
|
|
|
|
$c bind text <3> "button3annotation text $c %x %y"
|
|
|
|
|
|
|
|
$c bind selectmark <Any-Enter> "selectmarkEnter $c %x %y"
|
|
|
|
$c bind selectmark <Any-Leave> "selectmarkLeave $c %x %y"
|
|
|
|
|
|
|
|
bind $c <1> "button1 $c %x %y none"
|
|
|
|
bind $c <Control-Button-1> "button1 $c %x %y ctrl"
|
|
|
|
bind $c <B1-Motion> "button1-motion $c %x %y"
|
|
|
|
bind $c <B1-ButtonRelease> "button1-release $c %x %y"
|
|
|
|
bind . <Delete> deleteSelection
|
|
|
|
bind .menubar <Destroy> {setOperMode edit}
|
|
|
|
|
|
|
|
# Scrolling and panning support
|
|
|
|
bind $c <2> "$c scan mark %x %y"
|
|
|
|
bind $c <B2-Motion> "$c scan dragto %x %y 1"
|
|
|
|
bind $c <4> "$c yview scroll -1 units"
|
|
|
|
bind $c <5> "$c yview scroll 1 units"
|
|
|
|
bind . <Right> ".c xview scroll 1 units"
|
|
|
|
bind . <Left> ".c xview scroll -1 units"
|
|
|
|
bind . <Down> ".c yview scroll 1 units"
|
|
|
|
bind . <Up> ".c yview scroll -1 units"
|
|
|
|
|
|
|
|
# Escape to Select mode
|
|
|
|
bind . <Key-Escape> "set activetool select"
|
|
|
|
|
|
|
|
$c bind node <Shift-Button-3> "button3node $c %x %y shift"
|
|
|
|
$c bind node <Control-Button-3> "button3node $c %x %y ctrl"
|
|
|
|
$c bind marker <3> "button3annotation marker $c %x %y"
|
|
|
|
bind .bottom.zoom <1> "zoom up"
|
|
|
|
bind .bottom.zoom <3> "zoom down"
|
|
|
|
bind .bottom.indicators <1> "popupExceptions"
|
|
|
|
|
|
|
|
#
|
|
|
|
# Popup-menu hierarchy
|
|
|
|
#
|
|
|
|
menu .button3menu -tearoff 0
|
|
|
|
menu .button3menu.connect -tearoff 0
|
|
|
|
menu .button3menu.assign -tearoff 0
|
|
|
|
menu .button3menu.moveto -tearoff 0
|
|
|
|
menu .button3menu.shell -tearoff 0
|
|
|
|
menu .button3menu.services -tearoff 0
|
|
|
|
menu .button3menu.ethereal -tearoff 0
|
|
|
|
menu .button3menu.tcpdump -tearoff 0
|
|
|
|
menu .button3menu.tshark -tearoff 0
|
|
|
|
menu .button3menu.wireshark -tearoff 0
|
|
|
|
menu .button3menu.tunnel -tearoff 0
|
|
|
|
menu .button3menu.color -tearoff 0
|
|
|
|
|
|
|
|
#
|
|
|
|
# Restore window position
|
|
|
|
#
|
|
|
|
if { ( [info exists g_prefs(gui_save_pos)] && $g_prefs(gui_save_pos) ) || \
|
|
|
|
( [info exists g_prefs(gui_save_size)] && $g_prefs(gui_save_size) ) } {
|
|
|
|
set newgeo ""
|
|
|
|
if { [info exists g_prefs(gui_save_size)] && $g_prefs(gui_save_size) && \
|
|
|
|
[info exists g_prefs(gui_window_size)] } {
|
|
|
|
set newgeo "$g_prefs(gui_window_size)"
|
|
|
|
}
|
|
|
|
if { [info exists g_prefs(gui_save_pos)] && $g_prefs(gui_save_pos) && \
|
|
|
|
[info exists g_prefs(gui_window_pos] } {
|
|
|
|
set newgeo "${newgeo}-$g_prefs(gui_window_pos)"
|
|
|
|
}
|
|
|
|
if { $newgeo != "" } { wm geometry . $newgeo }
|
|
|
|
}
|
|
|
|
|
|
|
|
#
|
|
|
|
# Invisible pseudo links
|
|
|
|
#
|
|
|
|
set invisible -1
|
|
|
|
bind . <Control-i> {
|
|
|
|
global invisible
|
|
|
|
set invisible [expr $invisible * -1]
|
|
|
|
redrawAll
|
|
|
|
}
|
|
|
|
|
|
|
|
#
|
|
|
|
# Don't show hidden files by default under Linux
|
|
|
|
#
|
|
|
|
catch { tk_getOpenFile foo bar }
|
|
|
|
set ::tk::dialog::file::showHiddenVar 0
|
|
|
|
set ::tk::dialog::file::showHiddenBtn 1
|
|
|
|
|
|
|
|
#
|
|
|
|
# Done with initialization, draw an empty canvas
|
|
|
|
#
|
|
|
|
switchCanvas first
|
|
|
|
|
2018-07-25 20:50:19 +01:00
|
|
|
focus -force .
|
2013-08-29 15:21:13 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# Fire up the animation loop - used basically for selectbox
|
|
|
|
#
|
|
|
|
animate
|