Fixed Refresh click to clear object and property windows. Added icon. (#1065)

This commit is contained in:
Steve Karg
2025-08-08 10:40:09 -05:00
committed by GitHub
parent 3f89981b29
commit e67777e345
5 changed files with 504 additions and 1 deletions
+193
View File
@@ -0,0 +1,193 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.91 r13725"
width="81.106468"
height="70.240265"
version="1.0"
sodipodi:docname="BACnet-Icon.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="D:\clipart\BACnet\BACnet-Icon.png"
inkscape:export-xdpi="397.25562"
inkscape:export-ydpi="397.25562">
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs5">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective9" />
<inkscape:perspective
id="perspective3545"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 526.18109 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<sodipodi:namedview
inkscape:window-height="776"
inkscape:window-width="1166"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="true"
inkscape:zoom="8.6844778"
inkscape:cx="23.223464"
inkscape:cy="35.120132"
inkscape:window-x="198"
inkscape:window-y="121"
inkscape:current-layer="svg2"
inkscape:snap-global="true"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid3209"
visible="true"
enabled="true"
originx="-21.510189"
originy="-179.74785" />
</sodipodi:namedview>
<g
id="g3289"
transform="translate(-29.21047,-188.04387)">
<path
style="fill:none;stroke:#000000;stroke-width:2.49708986;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(0.5476842,0,0,0.5476842,-723.61556,329.90577)"
d="m 1376.004,-194.89656 36.3016,-62.87624 72.6032,0 36.3016,62.87624 -36.3016,62.87624 -72.6032,0 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="3.6651914"
sodipodi:arg1="3.1415927"
sodipodi:r2="62.876236"
sodipodi:r1="72.603226"
sodipodi:cy="-194.89656"
sodipodi:cx="1448.6072"
sodipodi:sides="6"
id="path2437"
sodipodi:type="star" />
<g
transform="translate(31.700281,-79.015259)"
id="g3281">
<path
inkscape:connector-curvature="0"
style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.01922166;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 27.580969,284.90625 -9.875,17.0625 9.875,17.09375 19.71875,0 9.84375,-17.09375 -9.84375,-17.0625 -19.71875,0 z m 9.84375,8.65625 c 4.653939,0 8.4375,3.82247 8.4375,8.5 -3e-6,4.67753 -3.78356,8.46875 -8.4375,8.46875 -4.653942,0 -8.4375,-3.79122 -8.4375,-8.46875 0,-4.67753 3.78356,-8.5 8.4375,-8.5 z"
id="path3211" />
<g
id="g3278"
transform="translate(-32,79.000001)"
style="stroke:#ffffff;stroke-opacity:1">
<path
inkscape:connector-curvature="0"
d="m 52.012781,223.04724 34.987219,0 0,0 m -26,-15 17,30 m -8.472477,-28.04745 0,25.95459 0,0 M 81,216.04724 l -23,14 m 20,-22 -17,30 m -3,-22 23,14"
style="opacity:1;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path3241" />
</g>
</g>
<circle
r="2.5"
cy="220.54724"
cx="68.5"
transform="matrix(0.8074057,0,0,0.8074057,14.19271,45.001782)"
id="path3213"
style="fill:none;stroke:#000000;stroke-width:1.92344439;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-size:20px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Heavy';text-align:start;writing-mode:lr;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
x="32.146084"
y="16.538191"
id="text3297"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3453">A</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-size:20px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Heavy';text-align:start;writing-mode:lr;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
x="41.534122"
y="-35.713566"
id="text3301"
sodipodi:linespacing="125%"
transform="matrix(0.5,0.8660254,-0.8660254,0.5,0,0)"><tspan
sodipodi:role="line"
id="tspan3455">C</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-size:20px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Heavy';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="49.670067"
y="64.771278"
id="text3307"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3461"
x="49.670067"
y="64.771278">t</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-size:20px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Heavy';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="35.525581"
y="64.689491"
id="text3313"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3459"
x="35.525581"
y="64.689491">e</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-size:20px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Heavy';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="22.171034"
y="64.864128"
id="text3319"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3457"
x="22.171034"
y="64.864128">n</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-size:20px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Heavy';text-align:start;writing-mode:lr;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
x="-17.86729"
y="33.987972"
id="text3325"
sodipodi:linespacing="125%"
transform="matrix(0.5,-0.8660254,0.8660254,0.5,0,0)"><tspan
sodipodi:role="line"
id="tspan3451">B</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 8.2 KiB

+16
View File
@@ -0,0 +1,16 @@
[Desktop Entry]
Name=BACnet GTK Discovery
Comment=Graphical discovery for BACnet devices, objects, and properties
Exec=/usr/local/bin/bacdiscover-gtk
Icon=network-workgroup
Terminal=false
Type=Application
Categories=Network;Development;Utility;
Keywords=BACnet;Building Automation;HVAC;Industrial;Network;Protocol;
StartupNotify=true
MimeType=application/x-bacnet;
# Additional metadata
GenericName=BACnet Device Discovery
StartupWMClass=bacnet-gtk-discovery
X-GNOME-UsesNotifications=true
+140
View File
@@ -0,0 +1,140 @@
/* XPM */
static const char *bacnet_icon[] = {
/* columns rows colors chars-per-pixel */
"81 70 64 1 ",
" c black",
". c #060906090609",
"X c gray3",
"o c #0D150D150D15",
"O c #111B111B111B",
"+ c #173C173C173C",
"@ c #1B0F1B0F1B0F",
"# c #1EFB1EFB1EFB",
"$ c #203320332033",
"% c #242524252425",
"& c #294429442944",
"* c #2D412D412D41",
"= c gray20",
"- c #351035103510",
"; c #3A333A333A33",
": c #3D623D623D62",
"> c #414141414141",
", c #477347734773",
"< c #4A4C4A4C4A4C",
"1 c #4E3E4E3E4E3E",
"2 c #503E503E503E",
"3 c #54C054C054C0",
"4 c #5A665A665A66",
"5 c #5F825F825F82",
"6 c #606060606060",
"7 c #653F653F653F",
"8 c #6A6A6A6A6A6A",
"9 c #6FC46FC46FC4",
"0 c #72B272B272B2",
"q c #767376737673",
"w c #799279927992",
"e c #7DA67DA67DA6",
"r c #805B805B805B",
"t c #857585758575",
"y c #888888888888",
"u c #8E968E968E96",
"i c #927E927E927E",
"p c #946794679467",
"a c #9B659B659B65",
"s c #9D9E9D9E9D9E",
"d c #A0D9A0D9A0D9",
"f c #A569A569A569",
"g c #ABE1ABE1ABE1",
"h c #AEDFAEDFAEDF",
"j c #B2C9B2C9B2C9",
"k c #B799B799B799",
"l c #B97EB97EB97E",
"z c gray",
"x c #C3ECC3ECC3EC",
"c c #C5A4C5A4C5A4",
"v c #CBCBCBCBCBCB",
"b c #CFB6CFB6CFB6",
"n c #D1C2D1C2D1C2",
"m c gray83",
"M c #DBBFDBBFDBBF",
"N c gainsboro",
"B c #E0F7E0F7E0F7",
"V c #E841E841E841",
"C c #EA2BEA2BEA2B",
"Z c #EF17EF17EF17",
"A c #F200F200F200",
"S c #F4EEF4EEF4EE",
"D c #FC4BFC4BFC4B",
"F c white",
/* pixels */
"FFFFFFFFFFFFFFFFFFFFx9999999999999999999999999999999999999999xFFFFFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFFFFD DFFFFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFFFFu vFFFFFFFFFFFFFFF* rFFFFFFFFFFFFFFFFFFv uFFFFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFFFV 2FFFFFFFFFFFFFFFm *FFFFFFFFFFFFFFFFFFF1 VFFFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFFF4 VFFFFFFFFFFFFFFFe o mFFFFFFFFFFFFFFFFFFB 4FFFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFFb tFFFFFFFFFFFFFFFF% Xt rFFFFFFFFFFFFFFFFFFFt bFFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFF# SFFFFFFFFFFFFFFFb 2B &FFFFFFFFFFFFFFFFFFFS #FFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFg jFFFFFFFFFFFFFFFFq fF- nFFFFFFFFFFFFFFFFFFFj gFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFS %FFFFFFFFFFFFFFFFF# .AFt eFFFFFFFFFFFFFFFFFFFF% SFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFe nFFFFFFFFFFFFFFFFx <FFM %FFFFFFFFFFFFFFFFFFFFn eFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFB 6FFFFFFFFFFFFFFFFF8 ,tttX nFFFFFFFFFFFFFFFFFFFF6 BFFFFFFFFFFFFF",
"FFFFFFFFFFFFFF, CFFFFFFFFFFFFFFFFF+ wFFFFFFFFFFFFFFFFFFFFC <FFFFFFFFFFFFF",
"FFFFFFFFFFFFFx pFFFFFFFFFFFFFFFFFl $FFFFFFFFFFFFFFFFFFFFFi cFFFFFFFFFFFF",
"FFFFFFFFFFFFDX DFFFFFFFFFFFFFFFFF6 aFFFFF% bFFFFFFFFFFFFFFFAbxNFD XDFFFFFFFFFFF",
"FFFFFFFFFFFFs kAFFFFFFFFFFFFFFFFDo CFFFFFw qFFFFFFFFFFFFFz<. &hz sFFFFFFFFFFF",
"FFFFFFFFFFFZ o >BFFFFFFFFFFFFFFj >FFFFFFv $FFFFFFFFFFFV1 e; ZFFFFFFFFFF",
"FFFFFFFFFFF4 $ZFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFm@ *,% i 9FFFFFFFFFF",
"FFFFFFFFFFn *+ aFZZFFFFFFFFzzzzzzzzzzzzzzzzzzzzvFFFFZ# 6mFFFh. +9 MFFFFFFFFF",
"FFFFFFFFFF@ eFS: >- -mFFFFFz ZFFF9 OkFFFFFFi a -FFFFFFFFF",
"FFFFFFFFFf *FFFy OnFFFF. oX o. 2FFDo lFFFFFFFS. 7d lFFFFFFFF",
"FFFFFFFFD zFFF: 2r% 1FFFu df m0 nFn 1FFFFFFFFDX 2Fo DFFFFFFF",
"FFFFFFFF9 ,FFFj 4FFA# FFZ @F= % <Fo #Fn eFFFFFFFFs 8Fc uFFFFFFF",
"FFFFFFFV 4BD% OCFFF2 .FF3 eM +F .F4 gS. 2FFFFFFFF# lFF1 CFFFFFF",
"FFFFFFF4 X X, iFFFAo <Fm XF1 +F 9Z D< .mFFFFFFFp ,FFFB 5FFFFFF",
"FFFFFFb rB4 @DFFFq kF$ 3FX +F +F; qv. #jCvAFFFF0AFFFFr bFFFFF",
"FFFFFF$ SFFx= ;vFM. :Fg C0 +F al Vi wFFFFFFFFFFS $FFFFF",
"FFFFFh hFFFFFs+ 6, bD -F+ +F &F$ >Fe. .NFFFFFFFFFFh hFFFF",
"FFFFS %FFFFFFFAq. 7Fq OX ks @5F, by OX vFM01<iCFFFFFFFFFFF$ SFFF",
"FFFFr nFFFFFFFFFN2 oCC sF< #FAFFFFFBFo 5F9 OFFFFFFFFFFFFFFFFFFn rFFF",
"FFFB 5FFFFFFFFFFFFz* uF> 4Fx$ lFFFFFFFFFw *BF, aFFFFFFFFFFFFFFFFFF5 BFF",
"FFF< CFFFFFFFFFFFFFFdDc OpFwlFFFFFFFFFFF0iFeX SFFFFFFFFFFFFFFFFFC <FF",
"FFc iFFFFFFFFFFFFFFFFFO =AFFFFFFFFFFFFFv$ 7FFFFFFFFFFFFFFFFFFi cF",
"FFX DFFFFFFFFFFFFFFFFa ZFFFFFMfxFFFFFf BFFFFFFFFFFFFFFFFFD XF",
"Fs lFFFFFFFFFFFFFFFFA OFFFFFg $DFFFA =FFFFFFFFFFFFFFFFFFl s",
"Z ;FFFFFFFFFFFFFFFFF6 O%%%%%%%%%6FFFFD xq sFFFF%%%%%%%%%%X lFFFFFFFFFFFFFFFFFF- ",
"p MFFFFFFFFFFFFFFFFF iFFFFFFFFFFFFFFC 7FV 7FFFFFFFFFFFFFF8 1FFFFFFFFFFFFFFFFFFM ",
"Z ;FFFFFFFFFFFFFFFFFj :FFFFF u; hFFFF ZFFFFFFFFFFFFFFFFFF- ",
"Fs lFFFFFFFFFFFFFFFFF% FFFFFc 6FFFFV rFFFFFFFFFFFFFFFFFFl s",
"FFX DFFFFFFFFFFFFFFFFM MFFFFFSnVFFFFFu DFFFFFFFFFFFFFFFFFD XF",
"FFc iFFFFFFFFFFFFFFFFF4 .9FFFFFFFFFFFFFFF4 kFFFFFFFFFFFFFFFFFFi cF",
"FFF< CFFFFFFFFFFFFFFFFA ;FS-eFFFFFFFFFFF*,FN& &FFFFFFFFFFFFFFFFFFC <FF",
"FFFB 5FFFFFFFFFFFFFFFFFi +gF8. 0FFFFFFFFD* XrFuo MFFFFFFFFFFFFFFFFFF5 BFF",
"FFFFr nFFFFFFFFFFFFFFFFFX pj@ ;FlSFFFCsF$ %b9 4FFFFFFFFFFFFFFFFFFn rFFF",
"FFFFS %FFFFFFFFFFFFFFFFFx A9 +F pz AFFFFFFFFFFFFFFFFFF$ SFFF",
"FFFFFh hFFFFFFFFFFFFFFFFF- 4F. +F OF: iFFFFFFFFFFFFFFFFFFh hFFFF",
"FFFFFF$ SFFFFFFFFFFFFFFFFB oF< +F 8S XFFFFFFFFFFFFFFFFFFS $FFFFF",
"FFFFFFb rFFFFFFFFFFFFFFFFF9 rm +F .F5 zFFFFFFFFFFFFFFFFFFr bFFFFF",
"FFFFFFF5 BFFFFFFFFFFFFFFFFS #F* +F <Fo -FFFFFFFFFFFFFFFFFFB 5FFFFFF",
"FFFFFFFC 1FFFFFFFFFFFFFFFFFd jd oS nt BFFFFFFFFFFFFFFFFFF1 CFFFFFF",
"FFFFFFFFu cFFFFFFFFFFFFFFFFF+ -F+ &F# 8FFFFFFFFFFFFFFFFFFc uFFFFFFF",
"FFFFFFFFD oFFFFFFFFFFFFFFFFFb pq s8 SFFFFFFFFFFFFFFFFFFo DFFFFFFF",
"FFFFFFFFFl dFFFFFFFFFFFFFFFFF< 9&&sFFFFFFFFFFFFFFFd lFFFFFFFF",
"FFFFFFFFFF- AFFFFFFFFFFFFFFFFC Of uFFFFFFFFFFFFFFA -FFFFFFFFF",
"FFFFFFFFFFM 0FFFFFFFFFFFFFFFFFFFFFFFFZ9-O*eZFFFFFFFg uFFFFFFFFFFFFFF0 MFFFFFFFFF",
"FFFFFFFFFFF9 MFFFFFFFFF,XXAe-+:kFFFFn@ $NFFFFF<. .XFFFFFFFFFFFFM 9FFFFFFFFFF",
"FFFFFFFFFFFZ ;FFFFFFFFF> 2 zFFF; otct :FFFFF3o o@FFFFFFFFFFFF; ZFFFFFFFFFF",
"FFFFFFFFFFFFs zFFFFFFFF> X8w$ 1FFx yFFF> bFFFFFg uFFFFFFFFFFFFz sFFFFFFFFFFF",
"FFFFFFFFFFFFD. DFFFFFFF> gFFm %FFp #***+ aFFFFFg uFFFFFFFFFFFD XFFFFFFFFFFFF",
"FFFFFFFFFFFFFx pFFFFFFF> ZFFFO @FFw yFFFFFg uFFFFFFFFFFFi xFFFFFFFFFFFF",
"FFFFFFFFFFFFFF, CFFFFFF> SFFF@ @FFp kFFFFFFFFFFFFg uFFFFFFFFFFC <FFFFFFFFFFFFF",
"FFFFFFFFFFFFFFB 6FFFFFF> SFFF@ @FFx tFFFkttBFFFFFg uFFFFFFFFFF6 BFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFe nFFFFF> SFFF@ @FFF= Xani. $FFFFFFg yFFFFFFFFFn eFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFA %FFFFF> SFFF@ @FFFcO +nFFFFFFh 1MFFFFFFFF% SFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFg jFFFF> SFFF@ @FFFFB5&X&0VFFFFFFFM FFFFFFFj gFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFF# SFFF> SFFF@ @FFFFFFFFFFFFFFFFFFFp#X%FFFFFFS #FFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFFb tFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFt bFFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFFF4 BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB 4FFFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFFFV 2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 VFFFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFFFFu vFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFv uFFFFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFFFFFD DFFFFFFFFFFFFFFFFFF"
};
+143
View File
@@ -0,0 +1,143 @@
#!/bin/bash
# Install script for BACnet GTK Discovery
# This script helps install the necessary dependencies and build the application
set -e
echo "BACnet GTK Discovery - Installation Script"
echo "========================================="
# Function to detect the Linux distribution
detect_distro() {
if [ -f /etc/os-release ]; then
. /etc/os-release
echo $ID
elif [ -f /etc/debian_version ]; then
echo "debian"
elif [ -f /etc/redhat-release ]; then
echo "rhel"
else
echo "unknown"
fi
}
# Function to install GTK dependencies
install_gtk_deps() {
local distro=$(detect_distro)
echo "Detected distribution: $distro"
echo "Installing GTK+ 3.0 development libraries..."
case $distro in
ubuntu|debian|linuxmint)
sudo apt-get update
sudo apt-get install -y libgtk-3-dev pkg-config build-essential
;;
fedora)
sudo dnf install -y gtk3-devel pkgconfig gcc make
;;
rhel|centos)
sudo yum install -y gtk3-devel pkgconfig gcc make
;;
opensuse|suse)
sudo zypper install -y gtk3-devel pkg-config gcc make
;;
arch|manjaro)
sudo pacman -S --needed gtk3 pkgconfig gcc make
;;
*)
echo "Unknown distribution. Please install GTK+ 3.0 development libraries manually."
echo "Required packages: gtk3-devel (or libgtk-3-dev), pkgconfig, gcc, make"
exit 1
;;
esac
}
# Function to check if GTK is available
check_gtk() {
if pkg-config --exists gtk+-3.0; then
echo "GTK+ 3.0 development libraries are available."
echo "Version: $(pkg-config --modversion gtk+-3.0)"
return 0
else
echo "GTK+ 3.0 development libraries are not available."
return 1
fi
}
# Function to build the GTK application
build_gtk_app() {
echo "Building BACnet GTK Discovery..."
# Default to BACnet/IP
DATALINK=${1:-bip}
make -C ../../ clean || true
make -C ../../ gtk-discover BACDL=$DATALINK
if [ -f "./bacdiscover-gtk" ]; then
echo "BACnet GTK Discovery built successfully!"
echo "Run with: ./bacdiscover-gtk"
else
echo "Build failed. Please check the error messages above."
exit 1
fi
}
# Main installation process
main() {
echo "Checking for GTK+ 3.0 development libraries..."
if ! check_gtk; then
echo "GTK+ 3.0 development libraries not found."
read -p "Do you want to install them automatically? (y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
install_gtk_deps
if ! check_gtk; then
echo "Failed to install GTK+ 3.0 development libraries."
exit 1
fi
else
echo "Please install GTK+ 3.0 development libraries manually and run this script again."
exit 1
fi
fi
# Ask user for datalink type
echo ""
echo "Choose BACnet datalink type:"
echo "1) BACnet/IP (default)"
echo "2) MS/TP (Master-Slave/Token-Passing)"
echo "3) Ethernet"
echo ""
read -p "Enter choice (1-3) [default: 1]: " choice
case $choice in
2)
DATALINK="mstp"
;;
3)
DATALINK="ethernet"
;;
*)
DATALINK="bip"
;;
esac
echo "Building with datalink: $DATALINK"
build_gtk_app $DATALINK
echo ""
echo "Installation completed successfully!"
echo ""
echo "To run the application:"
echo " ./bacdiscover-gtk"
echo ""
echo "To install system-wide:"
echo " sudo make install"
}
# Run main function
main "$@"
+12 -1
View File
@@ -36,6 +36,8 @@
#include "bacnet/basic/tsm/tsm.h"
#include "bacnet/datalink/datalink.h"
#include "bacnet/datalink/dlenv.h"
/* Used ImageMagick: convert BACnet-Icon.svg bacnet-icon.xpm */
#include "bacnet-icon.xpm"
/* Global variables */
static GtkWidget *main_window;
@@ -372,6 +374,8 @@ static void on_refresh_clicked(GtkButton *button, gpointer data)
(void)data; /* unused parameter */
gtk_list_store_clear(device_store);
gtk_list_store_clear(object_store);
gtk_list_store_clear(property_store);
process_discovered_devices();
}
@@ -517,6 +521,7 @@ static void create_main_window(void)
GtkWidget *scrolled_window;
GtkWidget *discover_button, *refresh_button;
GtkToolItem *tool_item;
GdkPixbuf *icon_pixbuf;
/* Create main window */
main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
@@ -524,6 +529,12 @@ static void create_main_window(void)
gtk_window_set_default_size(GTK_WINDOW(main_window), 1200, 800);
gtk_container_set_border_width(GTK_CONTAINER(main_window), 5);
/* set the icon */
icon_pixbuf = gdk_pixbuf_new_from_xpm_data(bacnet_icon);
if (icon_pixbuf) {
gtk_window_set_icon(GTK_WINDOW(main_window), icon_pixbuf);
}
/* Connect destroy signal */
g_signal_connect(main_window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
@@ -670,7 +681,7 @@ static void bacnet_server_init(void)
mstimer_set(&BACnet_TSM_Timer, 50);
/* Start BACnet background processing */
bacnet_timeout_id = g_timeout_add(100, bacnet_task_timeout, NULL);
bacnet_timeout_id = g_timeout_add(10, bacnet_task_timeout, NULL);
bacnet_initialized = true;
printf("BACnet Stack initialized\n");