├── .gitattributes
├── .gitignore
├── LICENSE.txt
├── README.md
├── btk_gpio
└── gpio_btkclient.py
├── btkeyboard
├── dbus
│ └── org.yaptb.btkbservice.conf
├── keyboard
│ ├── kb_client.py
│ ├── keymap.py
│ ├── keymap.pyc
│ └── send_string.py
└── server
│ ├── btk_server.py
│ ├── sdp_record.xml
│ └── ~sdp_record.xml
├── deskcycle
├── deskcycle_btkclient.py
└── deskcycle_test.py
├── dotNet
└── VizWindow
│ ├── VizWindow.sln
│ └── VizWindow
│ ├── Program.cs
│ ├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
│ ├── VizWindow.bmp
│ ├── VizWindow.csproj
│ ├── VizWindow.ico
│ ├── VizWindow.png
│ ├── app.config
│ ├── frmAbout.Designer.cs
│ ├── frmAbout.cs
│ ├── frmAbout.resx
│ ├── frmMain.Designer.cs
│ ├── frmMain.cs
│ ├── frmMain.resx
│ ├── frmSettings.Designer.cs
│ ├── frmSettings.cs
│ ├── frmSettings.resx
│ └── packages.config
├── kivy
├── komodoro.kv
└── komodoro
│ └── komodoro.py
└── pi
└── scripts
├── realvncboot
├── tmux
└── tmux.conf
└── vncboot
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.userosscache
8 | *.sln.docstates
9 |
10 | # User-specific files (MonoDevelop/Xamarin Studio)
11 | *.userprefs
12 |
13 | # Build results
14 | [Dd]ebug/
15 | [Dd]ebugPublic/
16 | [Rr]elease/
17 | [Rr]eleases/
18 | x64/
19 | x86/
20 | build/
21 | bld/
22 | [Bb]in/
23 | [Oo]bj/
24 |
25 | # Visual Studio 2015 cache/options directory
26 | .vs/
27 |
28 | # MSTest test Results
29 | [Tt]est[Rr]esult*/
30 | [Bb]uild[Ll]og.*
31 |
32 | # NUNIT
33 | *.VisualState.xml
34 | TestResult.xml
35 |
36 | # Build Results of an ATL Project
37 | [Dd]ebugPS/
38 | [Rr]eleasePS/
39 | dlldata.c
40 |
41 | # DNX
42 | project.lock.json
43 | artifacts/
44 |
45 | *_i.c
46 | *_p.c
47 | *_i.h
48 | *.ilk
49 | *.meta
50 | *.obj
51 | *.pch
52 | *.pdb
53 | *.pgc
54 | *.pgd
55 | *.rsp
56 | *.sbr
57 | *.tlb
58 | *.tli
59 | *.tlh
60 | *.tmp
61 | *.tmp_proj
62 | *.log
63 | *.vspscc
64 | *.vssscc
65 | .builds
66 | *.pidb
67 | *.svclog
68 | *.scc
69 |
70 | # Chutzpah Test files
71 | _Chutzpah*
72 |
73 | # Visual C++ cache files
74 | ipch/
75 | *.aps
76 | *.ncb
77 | *.opensdf
78 | *.sdf
79 | *.cachefile
80 |
81 | # Visual Studio profiler
82 | *.psess
83 | *.vsp
84 | *.vspx
85 |
86 | # TFS 2012 Local Workspace
87 | $tf/
88 |
89 | # Guidance Automation Toolkit
90 | *.gpState
91 |
92 | # ReSharper is a .NET coding add-in
93 | _ReSharper*/
94 | *.[Rr]e[Ss]harper
95 | *.DotSettings.user
96 |
97 | # JustCode is a .NET coding add-in
98 | .JustCode
99 |
100 | # TeamCity is a build add-in
101 | _TeamCity*
102 |
103 | # DotCover is a Code Coverage Tool
104 | *.dotCover
105 |
106 | # NCrunch
107 | _NCrunch_*
108 | .*crunch*.local.xml
109 |
110 | # MightyMoose
111 | *.mm.*
112 | AutoTest.Net/
113 |
114 | # Web workbench (sass)
115 | .sass-cache/
116 |
117 | # Installshield output folder
118 | [Ee]xpress/
119 |
120 | # DocProject is a documentation generator add-in
121 | DocProject/buildhelp/
122 | DocProject/Help/*.HxT
123 | DocProject/Help/*.HxC
124 | DocProject/Help/*.hhc
125 | DocProject/Help/*.hhk
126 | DocProject/Help/*.hhp
127 | DocProject/Help/Html2
128 | DocProject/Help/html
129 |
130 | # Click-Once directory
131 | publish/
132 |
133 | # Publish Web Output
134 | *.[Pp]ublish.xml
135 | *.azurePubxml
136 | ## TODO: Comment the next line if you want to checkin your
137 | ## web deploy settings but do note that will include unencrypted
138 | ## passwords
139 | #*.pubxml
140 |
141 | *.publishproj
142 |
143 | # NuGet Packages
144 | *.nupkg
145 | # The packages folder can be ignored because of Package Restore
146 | **/packages/*
147 | # except build/, which is used as an MSBuild target.
148 | !**/packages/build/
149 | # Uncomment if necessary however generally it will be regenerated when needed
150 | #!**/packages/repositories.config
151 |
152 | # Windows Azure Build Output
153 | csx/
154 | *.build.csdef
155 |
156 | # Windows Store app package directory
157 | AppPackages/
158 |
159 | # Visual Studio cache files
160 | # files ending in .cache can be ignored
161 | *.[Cc]ache
162 | # but keep track of directories ending in .cache
163 | !*.[Cc]ache/
164 |
165 | # Others
166 | ClientBin/
167 | [Ss]tyle[Cc]op.*
168 | ~$*
169 | *~
170 | *.dbmdl
171 | *.dbproj.schemaview
172 | *.pfx
173 | *.publishsettings
174 | node_modules/
175 | orleans.codegen.cs
176 |
177 | # RIA/Silverlight projects
178 | Generated_Code/
179 |
180 | # Backup & report files from converting an old project file
181 | # to a newer Visual Studio version. Backup files are not needed,
182 | # because we have git ;-)
183 | _UpgradeReport_Files/
184 | Backup*/
185 | UpgradeLog*.XML
186 | UpgradeLog*.htm
187 |
188 | # SQL Server files
189 | *.mdf
190 | *.ldf
191 |
192 | # Business Intelligence projects
193 | *.rdl.data
194 | *.bim.layout
195 | *.bim_*.settings
196 |
197 | # Microsoft Fakes
198 | FakesAssemblies/
199 |
200 | # Node.js Tools for Visual Studio
201 | .ntvs_analysis.dat
202 |
203 | # Visual Studio 6 build log
204 | *.plg
205 |
206 | # Visual Studio 6 workspace options file
207 | *.opt
208 |
209 | # LightSwitch generated files
210 | GeneratedArtifacts/
211 | _Pvt_Extensions/
212 | ModelManifest.xml
213 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 |
4 | Copyright (c) 2017 http://yetanotherpointlesstechblog.blogspot.com
5 |
6 | Permission is hereby granted, free of charge, to any person obtaining a copy
7 | of this software and associated documentation files (the "Software"), to deal
8 | in the Software without restriction, including without limitation the rights
9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | copies of the Software, and to permit persons to whom the Software is
11 | furnished to do so, subject to the following conditions:
12 |
13 | The above copyright notice and this permission notice shall be included in all
14 | copies or substantial portions of the Software.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 | SOFTWARE.
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BlogCode
2 | Yet Another Pointless Tech Blog Article Code Repository
3 |
4 | This is the github repository for the Yet Another Pointless Tech Blog site.
5 |
6 | http://yetanotherpointlesstechblog.blogspot.com
7 |
8 |
--------------------------------------------------------------------------------
/btk_gpio/gpio_btkclient.py:
--------------------------------------------------------------------------------
1 |
2 | import os #used to all external commands
3 | import sys # used to exit the script
4 | import dbus
5 | import dbus.service
6 | import dbus.mainloop.glib
7 | import RPi.GPIO as GPIO
8 | import time
9 | import thread
10 |
11 |
12 | class BtkGpioClient():
13 |
14 | """GPIO client of the Bluetooth Keyboard Emulator
15 | Polls the status of a GPIO pin and triggers the emulator to send a single key
16 | http://yetanotherpointlesstechblog.blogspot.com
17 | """
18 |
19 | #constants
20 | PIN=37 # physical number of GPIO pin to monitor
21 | KEYCODE=26 # w scan code - key code to send.
22 | MIN_KEY_TIME=0.001 # minimum delay between key down and key up events to enable key press to be detected
23 | REPEAT_KEY=True # True = repeat key while the pin is enabled. FALSE = send a single key per keypress
24 | REPEAT_KEY_DELAY=0.001 # delay between repeated key presses when REPEAT_KEY = True
25 |
26 |
27 | def __init__(self):
28 |
29 | #the structure for a bt keyboard input report (size is 10 bytes)
30 |
31 | self.state=[
32 | 0xA1, #this is an input report
33 | 0x01, #Usage report = Keyboard
34 | #Bit array for Modifier keys
35 | [0, #Right GUI - Windows Key
36 | 0, #Right ALT
37 | 0, #Right Shift
38 | 0, #Right Control
39 | 0, #Left GUI
40 | 0, #Left ALT
41 | 0, #Left Shift
42 | 0], #Left Control
43 | 0x00, #Vendor reserved
44 | 0x00, #rest is space for 6 keys
45 | 0x00,
46 | 0x00,
47 | 0x00,
48 | 0x00,
49 | 0x00]
50 |
51 |
52 | #initialize the GPIO library
53 | print "setting up GPIO"
54 |
55 | GPIO.setmode(GPIO.BOARD)
56 | GPIO.setup(BtkGpioClient.PIN,GPIO.IN,pull_up_down=GPIO.PUD_UP)
57 |
58 |
59 | #connect with the Bluetooth keyboard server
60 | print "setting up DBus Client"
61 |
62 | self.bus = dbus.SystemBus()
63 | self.btkservice = self.bus.get_object('org.yaptb.btkbservice','/org/yaptb/btkbservice')
64 | self.iface = dbus.Interface(self.btkservice,'org.yaptb.btkbservice')
65 |
66 |
67 | #hard code the key to send for this demo
68 | self.state[4]=BtkGpioClient.KEYCODE
69 |
70 |
71 |
72 | def send_key_state(self):
73 |
74 | """sends a single frame of the current key state to the emulator server"""
75 |
76 | bin_str=""
77 | element=self.state[2]
78 | for bit in element:
79 | bin_str += str(bit)
80 | self.iface.send_keys(int(bin_str,2),self.state[4:10] )
81 |
82 |
83 | def send_key_down(self):
84 |
85 | """sends a key down event to the server"""
86 |
87 | self.state[4]=BtkGpioClient.KEYCODE
88 | self.send_key_state()
89 |
90 |
91 | def send_key_up(self):
92 |
93 | """sends a key up event to the server"""
94 |
95 | self.state[4]=0
96 | self.send_key_state()
97 |
98 |
99 |
100 | def pin_event(self,channel):
101 |
102 |
103 | """RPi.GPIO callback method. called when a GPIO event occurs on the specified pin
104 |
105 | """
106 |
107 |
108 | if(self.key_down==False):
109 | print "Key Down"
110 | self.key_down=True
111 | else:
112 | print "Key Up"
113 | self.key_down=False
114 |
115 |
116 |
117 | def event_loop(self):
118 |
119 | """main loop. sets up the GPIO callback then polls the hit state to detect a key press.
120 | """
121 |
122 | self.key_down=False
123 | key_up_sent=False
124 | key_down_sent=False
125 |
126 | GPIO.add_event_detect(BtkGpioClient.PIN, GPIO.BOTH, callback=self.pin_event,bouncetime=250)
127 |
128 |
129 | while True:
130 |
131 |
132 | if(self.key_down ):
133 |
134 | #the pin is set on
135 |
136 | if(BtkGpioClient.REPEAT_KEY and key_down_sent):
137 | #finish the current key and repeat
138 | self.send_key_up()
139 | key_down_sent=False
140 | time.sleep(BtkGpioClient.REPEAT_KEY_DELAY)
141 |
142 | if(not key_down_sent):
143 | #start a key press
144 | self.send_key_down()
145 | key_down_sent=True
146 |
147 |
148 | else:
149 |
150 | #the pin is set off
151 |
152 | if(key_down_sent):
153 | #finish the key press
154 | self.send_key_up()
155 | key_down_sent=False
156 |
157 |
158 | time.sleep(BtkGpioClient.MIN_KEY_TIME) #seems like the minimum delay required for a keypress to be registered
159 |
160 |
161 | if __name__ == "__main__":
162 |
163 | print "Setting up GPIO Bluetooth kb emulator client"
164 |
165 | dc = BtkGpioClient()
166 |
167 | print "starting event loop"
168 | dc.event_loop()
169 |
170 |
171 |
--------------------------------------------------------------------------------
/btkeyboard/dbus/org.yaptb.btkbservice.conf:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/btkeyboard/keyboard/kb_client.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python
2 | #
3 | # YAPTB Bluetooth keyboard emulation service
4 | # keyboard copy client.
5 | # Reads local key events and forwards them to the btk_server DBUS service
6 | #
7 | # Adapted from www.linuxuser.co.uk/tutorials/emulate-a-bluetooth-keyboard-with-the-raspberry-pi
8 | #
9 | #
10 | import os #used to all external commands
11 | import sys # used to exit the script
12 | import dbus
13 | import dbus.service
14 | import dbus.mainloop.glib
15 | import time
16 | import evdev # used to get input from the keyboard
17 | from evdev import *
18 | import keymap # used to map evdev input to hid keodes
19 |
20 |
21 |
22 | #Define a client to listen to local key events
23 | class Keyboard():
24 |
25 |
26 | def __init__(self):
27 | #the structure for a bt keyboard input report (size is 10 bytes)
28 |
29 | self.state=[
30 | 0xA1, #this is an input report
31 | 0x01, #Usage report = Keyboard
32 | #Bit array for Modifier keys
33 | [0, #Right GUI - Windows Key
34 | 0, #Right ALT
35 | 0, #Right Shift
36 | 0, #Right Control
37 | 0, #Left GUI
38 | 0, #Left ALT
39 | 0, #Left Shift
40 | 0], #Left Control
41 | 0x00, #Vendor reserved
42 | 0x00, #rest is space for 6 keys
43 | 0x00,
44 | 0x00,
45 | 0x00,
46 | 0x00,
47 | 0x00]
48 |
49 | print "setting up DBus Client"
50 |
51 | self.bus = dbus.SystemBus()
52 | self.btkservice = self.bus.get_object('org.yaptb.btkbservice','/org/yaptb/btkbservice')
53 | self.iface = dbus.Interface(self.btkservice,'org.yaptb.btkbservice')
54 |
55 |
56 | print "waiting for keyboard"
57 |
58 | #keep trying to key a keyboard
59 | have_dev=False
60 | while have_dev==False:
61 | try:
62 | #try and get a keyboard - should always be event0 as
63 | #we're only plugging one thing in
64 | self.dev = InputDevice("/dev/input/event0")
65 | have_dev=True
66 | except OSError:
67 | print "Keyboard not found, waiting 3 seconds and retrying"
68 | time.sleep(3)
69 | print "found a keyboard"
70 |
71 |
72 |
73 | def change_state(self,event):
74 | evdev_code=ecodes.KEY[event.code]
75 | modkey_element = keymap.modkey(evdev_code)
76 |
77 | if modkey_element > 0:
78 | if self.state[2][modkey_element] ==0:
79 | self.state[2][modkey_element]=1
80 | else:
81 | self.state[2][modkey_element]=0
82 |
83 | else:
84 |
85 | #Get the keycode of the key
86 | hex_key = keymap.convert(ecodes.KEY[event.code])
87 | #Loop through elements 4 to 9 of the inport report structure
88 | for i in range(4,10):
89 | if self.state[i]== hex_key and event.value ==0:
90 | #Code 0 so we need to depress it
91 | self.state[i] = 0x00
92 | elif self.state[i] == 0x00 and event.value==1:
93 | #if the current space if empty and the key is being pressed
94 | self.state[i]=hex_key
95 | break;
96 |
97 |
98 | #poll for keyboard events
99 | def event_loop(self):
100 | for event in self.dev.read_loop():
101 | #only bother if we hit a key and its an up or down event
102 | if event.type==ecodes.EV_KEY and event.value < 2:
103 | self.change_state(event)
104 | self.send_input()
105 |
106 |
107 | #forward keyboard events to the dbus service
108 | def send_input(self):
109 |
110 | bin_str=""
111 | element=self.state[2]
112 | for bit in element:
113 | bin_str += str(bit)
114 |
115 |
116 |
117 | self.iface.send_keys(int(bin_str,2),self.state[4:10] )
118 |
119 |
120 |
121 | if __name__ == "__main__":
122 |
123 | print "Setting up keyboard"
124 |
125 | kb = Keyboard()
126 |
127 | print "starting event loop"
128 | kb.event_loop()
129 |
130 |
--------------------------------------------------------------------------------
/btkeyboard/keyboard/keymap.py:
--------------------------------------------------------------------------------
1 | #
2 | # www.linuxuser.co.uk/tutorials/emulate-a-bluetooth-keyboard-with-the-raspberry-pi
3 | #
4 | #
5 | #
6 | # Convert value returned from Linux event device ("evdev") to a HID code. This
7 | # is reverse of what's actually hardcoded in the kernel.
8 | #
9 | # Lubomir Rintel
10 | # License: GPL
11 | #
12 | # Ported to a Python module by Liam Fraser.
13 | #
14 |
15 | keytable = {
16 | "KEY_RESERVED" : 0,
17 | "KEY_ESC" : 41,
18 | "KEY_1" : 30,
19 | "KEY_2" : 31,
20 | "KEY_3" : 32,
21 | "KEY_4" : 33,
22 | "KEY_5" : 34,
23 | "KEY_6" : 35,
24 | "KEY_7" : 36,
25 | "KEY_8" : 37,
26 | "KEY_9" : 38,
27 | "KEY_0" : 39,
28 | "KEY_MINUS" : 45,
29 | "KEY_EQUAL" : 46,
30 | "KEY_BACKSPACE" : 42,
31 | "KEY_TAB" : 43,
32 | "KEY_Q" : 20,
33 | "KEY_W" : 26,
34 | "KEY_E" : 8,
35 | "KEY_R" : 21,
36 | "KEY_T" : 23,
37 | "KEY_Y" : 28,
38 | "KEY_U" : 24,
39 | "KEY_I" : 12,
40 | "KEY_O" : 18,
41 | "KEY_P" : 19,
42 | "KEY_LEFTBRACE" : 47,
43 | "KEY_RIGHTBRACE" : 48,
44 | "KEY_ENTER" : 40,
45 | "KEY_LEFTCTRL" : 224,
46 | "KEY_A" : 4,
47 | "KEY_S" : 22,
48 | "KEY_D" : 7,
49 | "KEY_F" : 9,
50 | "KEY_G" : 10,
51 | "KEY_H" : 11,
52 | "KEY_J" : 13,
53 | "KEY_K" : 14,
54 | "KEY_L" : 15,
55 | "KEY_SEMICOLON" : 51,
56 | "KEY_APOSTROPHE" : 52,
57 | "KEY_GRAVE" : 53,
58 | "KEY_LEFTSHIFT" : 225,
59 | "KEY_BACKSLASH" : 50,
60 | "KEY_Z" : 29,
61 | "KEY_X" : 27,
62 | "KEY_C" : 6,
63 | "KEY_V" : 25,
64 | "KEY_B" : 5,
65 | "KEY_N" : 17,
66 | "KEY_M" : 16,
67 | "KEY_COMMA" : 54,
68 | "KEY_DOT" : 55,
69 | "KEY_SLASH" : 56,
70 | "KEY_RIGHTSHIFT" : 229,
71 | "KEY_KPASTERISK" : 85,
72 | "KEY_LEFTALT" : 226,
73 | "KEY_SPACE" : 44,
74 | "KEY_CAPSLOCK" : 57,
75 | "KEY_F1" : 58,
76 | "KEY_F2" : 59,
77 | "KEY_F3" : 60,
78 | "KEY_F4" : 61,
79 | "KEY_F5" : 62,
80 | "KEY_F6" : 63,
81 | "KEY_F7" : 64,
82 | "KEY_F8" : 65,
83 | "KEY_F9" : 66,
84 | "KEY_F10" : 67,
85 | "KEY_NUMLOCK" : 83,
86 | "KEY_SCROLLLOCK" : 71,
87 | "KEY_KP7" : 95,
88 | "KEY_KP8" : 96,
89 | "KEY_KP9" : 97,
90 | "KEY_KPMINUS" : 86,
91 | "KEY_KP4" : 92,
92 | "KEY_KP5" : 93,
93 | "KEY_KP6" : 94,
94 | "KEY_KPPLUS" : 87,
95 | "KEY_KP1" : 89,
96 | "KEY_KP2" : 90,
97 | "KEY_KP3" : 91,
98 | "KEY_KP0" : 98,
99 | "KEY_KPDOT" : 99,
100 | "KEY_ZENKAKUHANKAKU" : 148,
101 | "KEY_102ND" : 100,
102 | "KEY_F11" : 68,
103 | "KEY_F12" : 69,
104 | "KEY_RO" : 135,
105 | "KEY_KATAKANA" : 146,
106 | "KEY_HIRAGANA" : 147,
107 | "KEY_HENKAN" : 138,
108 | "KEY_KATAKANAHIRAGANA" : 136,
109 | "KEY_MUHENKAN" : 139,
110 | "KEY_KPJPCOMMA" : 140,
111 | "KEY_KPENTER" : 88,
112 | "KEY_RIGHTCTRL" : 228,
113 | "KEY_KPSLASH" : 84,
114 | "KEY_SYSRQ" : 70,
115 | "KEY_RIGHTALT" : 230,
116 | "KEY_HOME" : 74,
117 | "KEY_UP" : 82,
118 | "KEY_PAGEUP" : 75,
119 | "KEY_LEFT" : 80,
120 | "KEY_RIGHT" : 79,
121 | "KEY_END" : 77,
122 | "KEY_DOWN" : 81,
123 | "KEY_PAGEDOWN" : 78,
124 | "KEY_INSERT" : 73,
125 | "KEY_DELETE" : 76,
126 | "KEY_MUTE" : 239,
127 | "KEY_VOLUMEDOWN" : 238,
128 | "KEY_VOLUMEUP" : 237,
129 | "KEY_POWER" : 102,
130 | "KEY_KPEQUAL" : 103,
131 | "KEY_PAUSE" : 72,
132 | "KEY_KPCOMMA" : 133,
133 | "KEY_HANGEUL" : 144,
134 | "KEY_HANJA" : 145,
135 | "KEY_YEN" : 137,
136 | "KEY_LEFTMETA" : 227,
137 | "KEY_RIGHTMETA" : 231,
138 | "KEY_COMPOSE" : 101,
139 | "KEY_STOP" : 243,
140 | "KEY_AGAIN" : 121,
141 | "KEY_PROPS" : 118,
142 | "KEY_UNDO" : 122,
143 | "KEY_FRONT" : 119,
144 | "KEY_COPY" : 124,
145 | "KEY_OPEN" : 116,
146 | "KEY_PASTE" : 125,
147 | "KEY_FIND" : 244,
148 | "KEY_CUT" : 123,
149 | "KEY_HELP" : 117,
150 | "KEY_CALC" : 251,
151 | "KEY_SLEEP" : 248,
152 | "KEY_WWW" : 240,
153 | "KEY_COFFEE" : 249,
154 | "KEY_BACK" : 241,
155 | "KEY_FORWARD" : 242,
156 | "KEY_EJECTCD" : 236,
157 | "KEY_NEXTSONG" : 235,
158 | "KEY_PLAYPAUSE" : 232,
159 | "KEY_PREVIOUSSONG" : 234,
160 | "KEY_STOPCD" : 233,
161 | "KEY_REFRESH" : 250,
162 | "KEY_EDIT" : 247,
163 | "KEY_SCROLLUP" : 245,
164 | "KEY_SCROLLDOWN" : 246,
165 | "KEY_F13" : 104,
166 | "KEY_F14" : 105,
167 | "KEY_F15" : 106,
168 | "KEY_F16" : 107,
169 | "KEY_F17" : 108,
170 | "KEY_F18" : 109,
171 | "KEY_F19" : 110,
172 | "KEY_F20" : 111,
173 | "KEY_F21" : 112,
174 | "KEY_F22" : 113,
175 | "KEY_F23" : 114,
176 | "KEY_F24" : 115
177 | }
178 |
179 | # Map modifier keys to array element in the bit array
180 | modkeys = {
181 | "KEY_RIGHTMETA" : 0,
182 | "KEY_RIGHTALT" : 1,
183 | "KEY_RIGHTSHIFT" : 2,
184 | "KEY_RIGHTCTRL" : 3,
185 | "KEY_LEFTMETA" : 4,
186 | "KEY_LEFTALT": 5,
187 | "KEY_LEFTSHIFT": 6,
188 | "KEY_LEFTCTRL": 7
189 | }
190 |
191 | def convert(evdev_keycode):
192 | return keytable[evdev_keycode]
193 |
194 | def modkey(evdev_keycode):
195 | if evdev_keycode in modkeys:
196 | return modkeys[evdev_keycode]
197 | else:
198 | return -1 # Return an invalid array element
199 |
--------------------------------------------------------------------------------
/btkeyboard/keyboard/keymap.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yaptb/BlogCode/25544071fa9add4cec46cd6ba6b0798f29025b52/btkeyboard/keyboard/keymap.pyc
--------------------------------------------------------------------------------
/btkeyboard/keyboard/send_string.py:
--------------------------------------------------------------------------------
1 |
2 | import os #used to all external commands
3 | import sys # used to exit the script
4 | import dbus
5 | import dbus.service
6 | import dbus.mainloop.glib
7 | import RPi.GPIO as GPIO
8 | import time
9 | import thread
10 | import keymap
11 |
12 |
13 | class BtkStringClient():
14 |
15 | """simple client of the Bluetooth Keyboard Emulator
16 | writes a string to the BTK Keyboard
17 | http://yetanotherpointlesstechblog.blogspot.com
18 | """
19 |
20 | #constants
21 | KEY_DOWN_TIME=0.01
22 | KEY_DELAY=0.1
23 |
24 |
25 | def __init__(self):
26 |
27 | #the structure for a bt keyboard input report (size is 10 bytes)
28 |
29 | self.state=[
30 | 0xA1, #this is an input report
31 | 0x01, #Usage report = Keyboard
32 | #Bit array for Modifier keys
33 | [0, #Right GUI - Windows Key
34 | 0, #Right ALT
35 | 0, #Right Shift
36 | 0, #Right Control
37 | 0, #Left GUI
38 | 0, #Left ALT
39 | 0, #Left Shift
40 | 0], #Left Control
41 | 0x00, #Vendor reserved
42 | 0x00, #rest is space for 6 keys
43 | 0x00,
44 | 0x00,
45 | 0x00,
46 | 0x00,
47 | 0x00]
48 |
49 |
50 | self.scancodes={
51 | " ": "KEY_SPACE"
52 | }
53 |
54 |
55 | #connect with the Bluetooth keyboard server
56 | print "setting up DBus Client"
57 |
58 | self.bus = dbus.SystemBus()
59 | self.btkservice = self.bus.get_object('org.yaptb.btkbservice','/org/yaptb/btkbservice')
60 | self.iface = dbus.Interface(self.btkservice,'org.yaptb.btkbservice')
61 |
62 |
63 |
64 |
65 | def send_key_state(self):
66 |
67 | """sends a single frame of the current key state to the emulator server"""
68 |
69 | bin_str=""
70 | element=self.state[2]
71 | for bit in element:
72 | bin_str += str(bit)
73 | self.iface.send_keys(int(bin_str,2),self.state[4:10] )
74 |
75 |
76 | def send_key_down(self, scancode):
77 |
78 | """sends a key down event to the server"""
79 |
80 | self.state[4]=scancode
81 | self.send_key_state()
82 |
83 |
84 | def send_key_up(self):
85 |
86 | """sends a key up event to the server"""
87 |
88 | self.state[4]=0
89 | self.send_key_state()
90 |
91 |
92 |
93 | def send_string(self, string_to_send):
94 |
95 | for c in string_to_send:
96 |
97 | cu = c.upper()
98 |
99 | if(cu in self.scancodes):
100 | scantablekey = self.scancodes[cu]
101 | else:
102 | scantablekey = "KEY_"+c.upper()
103 |
104 | print scantablekey
105 |
106 | scancode = keymap.keytable[scantablekey]
107 | self.send_key_down(scancode)
108 | time.sleep( BtkStringClient.KEY_DOWN_TIME)
109 | self.send_key_up()
110 | time.sleep( BtkStringClient.KEY_DELAY)
111 |
112 |
113 |
114 |
115 | if __name__ == "__main__":
116 |
117 |
118 | if(len(sys.argv) <2):
119 | print "Usage: send_string 0):
63 | os.close(self.fd)
64 | self.fd = -1
65 |
66 | def __init__(self, bus, path):
67 | dbus.service.Object.__init__(self, bus, path)
68 |
69 |
70 | #
71 | #create a bluetooth device to emulate a HID keyboard,
72 | # advertize a SDP record using our bluez profile class
73 | #
74 | class BTKbDevice():
75 | #change these constants
76 | MY_ADDRESS="00:1A:7D:DA:71:13"
77 | MY_DEV_NAME="DeskPi_BTKb"
78 |
79 | #define some constants
80 | P_CTRL =17 #Service port - must match port configured in SDP record
81 | P_INTR =19 #Service port - must match port configured in SDP record#Interrrupt port
82 | PROFILE_DBUS_PATH="/bluez/yaptb/btkb_profile" #dbus path of the bluez profile we will create
83 | SDP_RECORD_PATH = sys.path[0] + "/sdp_record.xml" #file path of the sdp record to laod
84 | UUID="00001124-0000-1000-8000-00805f9b34fb"
85 |
86 |
87 | def __init__(self):
88 |
89 | print("Setting up BT device")
90 |
91 | self.init_bt_device()
92 | self.init_bluez_profile()
93 |
94 |
95 | #configure the bluetooth hardware device
96 | def init_bt_device(self):
97 |
98 |
99 | print("Configuring for name "+BTKbDevice.MY_DEV_NAME)
100 |
101 | #set the device class to a keybord and set the name
102 | os.system("hciconfig hcio class 0x002540")
103 | os.system("hciconfig hcio name " + BTKbDevice.MY_DEV_NAME)
104 |
105 | #make the device discoverable
106 | os.system("hciconfig hcio piscan")
107 |
108 |
109 | #set up a bluez profile to advertise device capabilities from a loaded service record
110 | def init_bluez_profile(self):
111 |
112 | print("Configuring Bluez Profile")
113 |
114 | #setup profile options
115 | service_record=self.read_sdp_service_record()
116 |
117 | opts = {
118 | "ServiceRecord":service_record,
119 | "Role":"server",
120 | "RequireAuthentication":False,
121 | "RequireAuthorization":False
122 | }
123 |
124 | #retrieve a proxy for the bluez profile interface
125 | bus = dbus.SystemBus()
126 | manager = dbus.Interface(bus.get_object("org.bluez","/org/bluez"), "org.bluez.ProfileManager1")
127 |
128 | profile = BTKbBluezProfile(bus, BTKbDevice.PROFILE_DBUS_PATH)
129 |
130 | manager.RegisterProfile(BTKbDevice.PROFILE_DBUS_PATH, BTKbDevice.UUID,opts)
131 |
132 | print("Profile registered ")
133 |
134 |
135 | #read and return an sdp record from a file
136 | def read_sdp_service_record(self):
137 |
138 | print("Reading service record")
139 |
140 | try:
141 | fh = open(BTKbDevice.SDP_RECORD_PATH, "r")
142 | except:
143 | sys.exit("Could not open the sdp record. Exiting...")
144 |
145 | return fh.read()
146 |
147 |
148 |
149 | #listen for incoming client connections
150 | #ideally this would be handled by the Bluez 5 profile
151 | #but that didn't seem to work
152 | def listen(self):
153 |
154 | print("Waiting for connections")
155 | self.scontrol=BluetoothSocket(L2CAP)
156 | self.sinterrupt=BluetoothSocket(L2CAP)
157 |
158 | #bind these sockets to a port - port zero to select next available
159 | self.scontrol.bind((self.MY_ADDRESS,self.P_CTRL))
160 | self.sinterrupt.bind((self.MY_ADDRESS,self.P_INTR ))
161 |
162 | #Start listening on the server sockets
163 | self.scontrol.listen(1) # Limit of 1 connection
164 | self.sinterrupt.listen(1)
165 |
166 | self.ccontrol,cinfo = self.scontrol.accept()
167 | print ("Got a connection on the control channel from " + cinfo[0])
168 |
169 | self.cinterrupt, cinfo = self.sinterrupt.accept()
170 | print ("Got a connection on the interrupt channel from " + cinfo[0])
171 |
172 |
173 | #send a string to the bluetooth host machine
174 | def send_string(self,message):
175 |
176 | # print("Sending "+message)
177 | self.cinterrupt.send(message)
178 |
179 |
180 |
181 | #define a dbus service that emulates a bluetooth keyboard
182 | #this will enable different clients to connect to and use
183 | #the service
184 | class BTKbService(dbus.service.Object):
185 |
186 | def __init__(self):
187 |
188 | print("Setting up service")
189 |
190 | #set up as a dbus service
191 | bus_name=dbus.service.BusName("org.yaptb.btkbservice",bus=dbus.SystemBus())
192 | dbus.service.Object.__init__(self,bus_name,"/org/yaptb/btkbservice")
193 |
194 | #create and setup our device
195 | self.device= BTKbDevice();
196 |
197 | #start listening for connections
198 | self.device.listen();
199 |
200 |
201 | @dbus.service.method('org.yaptb.btkbservice', in_signature='yay')
202 | def send_keys(self,modifier_byte,keys):
203 |
204 | cmd_str=""
205 | cmd_str+=chr(0xA1)
206 | cmd_str+=chr(0x01)
207 | cmd_str+=chr(modifier_byte)
208 | cmd_str+=chr(0x00)
209 |
210 | count=0
211 | for key_code in keys:
212 | if(count<6):
213 | cmd_str+=chr(key_code)
214 | count+=1
215 |
216 | self.device.send_string(cmd_str);
217 |
218 |
219 | #main routine
220 | if __name__ == "__main__":
221 | # we an only run as root
222 | if not os.geteuid() == 0:
223 | sys.exit("Only root can run this script")
224 |
225 | DBusGMainLoop(set_as_default=True)
226 | myservice = BTKbService();
227 | gtk.main()
228 |
229 |
--------------------------------------------------------------------------------
/btkeyboard/server/sdp_record.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
--------------------------------------------------------------------------------
/btkeyboard/server/~sdp_record.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
--------------------------------------------------------------------------------
/deskcycle/deskcycle_btkclient.py:
--------------------------------------------------------------------------------
1 |
2 | import os #used to all external commands
3 | import sys # used to exit the script
4 | import dbus
5 | import dbus.service
6 | import dbus.mainloop.glib
7 | import RPi.GPIO as GPIO
8 | import time
9 | import thread
10 |
11 |
12 | class DeskCycle():
13 |
14 | PIN=40
15 | KEYCODE=26 # w scan code
16 |
17 | def __init__(self):
18 |
19 | #the structure for a bt keyboard input report (size is 10 bytes)
20 |
21 | self.state=[
22 | 0xA1, #this is an input report
23 | 0x01, #Usage report = Keyboard
24 | #Bit array for Modifier keys
25 | [0, #Right GUI - Windows Key
26 | 0, #Right ALT
27 | 0, #Right Shift
28 | 0, #Right Control
29 | 0, #Left GUI
30 | 0, #Left ALT
31 | 0, #Left Shift
32 | 0], #Left Control
33 | 0x00, #Vendor reserved
34 | 0x00, #rest is space for 6 keys
35 | 0x00,
36 | 0x00,
37 | 0x00,
38 | 0x00,
39 | 0x00]
40 |
41 |
42 | print "setting up GPIO"
43 |
44 | GPIO.setmode(GPIO.BOARD)
45 | GPIO.setup(DeskCycle.PIN,GPIO.IN,pull_up_down=GPIO.PUD_UP)
46 |
47 | print "setting up DBus Client"
48 |
49 | self.bus = dbus.SystemBus()
50 | self.btkservice = self.bus.get_object('org.yaptb.btkbservice','/org/yaptb/btkbservice')
51 | self.iface = dbus.Interface(self.btkservice,'org.yaptb.btkbservice')
52 |
53 |
54 | #hard code the key to send
55 | self.state[4]=DeskCycle.KEYCODE
56 |
57 |
58 | def send_key_state(self):
59 |
60 | bin_str=""
61 | element=self.state[2]
62 | for bit in element:
63 | bin_str += str(bit)
64 | self.iface.send_keys(int(bin_str,2),self.state[4:10] )
65 |
66 |
67 | def send_keys(self, num_keys, inter_key_delay, key_press_delay):
68 |
69 | for x in range(1,num_keys):
70 | self.state[4]=DeskCycle.KEYCODE
71 | self.send_key_state()
72 | time.sleep(key_press_delay)
73 | self.state[4]=0
74 | self.send_key_state()
75 | time.sleep(inter_key_delay)
76 |
77 | def pin_event(self,channel):
78 | self.hitCount+=1
79 | self.last_hit_time = time.time()
80 | print "Hit",time.time(), self.hitCount
81 |
82 |
83 |
84 | def event_loop(self):
85 |
86 |
87 | self.keyDown=False
88 | self.hitCount=0
89 |
90 |
91 | keys_per_rev=5
92 | key_press_delay=0.2
93 | inter_key_delay=0.001
94 |
95 | self.last_hit_time=0
96 | self.current_hit_time=0
97 | self.rev_time=0.5
98 |
99 | GPIO.add_event_detect(DeskCycle.PIN, GPIO.FALLING, callback=self.pin_event,bouncetime=250)
100 |
101 |
102 | while True:
103 |
104 |
105 | if(self.hitCount >0):
106 |
107 | if(not self.keyDown):
108 | print "On"
109 | self.state[4]=DeskCycle.KEYCODE
110 | self.send_key_state()
111 | self.keyDown=True
112 |
113 | self.hitCount=0
114 |
115 | else:
116 | if(self.keyDown):
117 |
118 | if(time.time()-self.last_hit_time > 1):
119 | print "Off"
120 | self.state[4]=0
121 | self.send_key_state()
122 | self.keyDown=False
123 |
124 | time.sleep(0.001)
125 |
126 |
127 | if __name__ == "__main__":
128 |
129 | print "Setting up desk cycle"
130 |
131 | dc = DeskCycle()
132 |
133 | print "starting event loop"
134 | dc.event_loop()
135 |
136 |
137 |
--------------------------------------------------------------------------------
/deskcycle/deskcycle_test.py:
--------------------------------------------------------------------------------
1 |
2 | import os #used to all external commands
3 | import sys # used to exit the script
4 | import dbus
5 | import dbus.service
6 | import dbus.mainloop.glib
7 | import RPi.GPIO as GPIO
8 | import time
9 | import thread
10 |
11 |
12 | class DeskCycle():
13 |
14 | PIN=40
15 |
16 | def __init__(self):
17 |
18 |
19 | print "setting up GPIO"
20 |
21 | GPIO.setmode(GPIO.BOARD)
22 | GPIO.setup(DeskCycle.PIN,GPIO.IN,pull_up_down=GPIO.PUD_UP)
23 |
24 | self.hitCount=0
25 |
26 | pin2=38
27 | GPIO.setup(pin2,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
28 | GPIO.add_event_detect(pin2, GPIO.FALLING, callback=self.pin_2_event,bouncetime=100)
29 |
30 | def pin_2_event(self,channel):
31 |
32 | print("OI!")
33 |
34 | def pin_event(self,channel):
35 | self.hitCount+=1
36 |
37 |
38 | def event_loop(self):
39 |
40 | count =0
41 |
42 | keys_per_rev=5
43 | key_press_delay=0.05
44 | inter_key_delay=0.1
45 | last_time=0
46 | current_time=0
47 |
48 | GPIO.add_event_detect(DeskCycle.PIN, GPIO.FALLING, callback=self.pin_event,bouncetime=100)
49 |
50 | while True:
51 |
52 | if(self.hitCount >0):
53 | count+=1
54 | print "Hit ",count
55 | self.hitCount-=1
56 |
57 | time.sleep(0.01)
58 |
59 | if __name__ == "__main__":
60 |
61 | print "Setting up desk cycle"
62 |
63 | dc = DeskCycle()
64 |
65 | print "starting event loop"
66 | dc.event_loop()
67 |
68 |
69 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.24720.0
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VizWindow", "VizWindow\VizWindow.csproj", "{88669B83-4217-40B7-8A4C-DCD65DFD6877}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Debug|x64 = Debug|x64
12 | Debug|x86 = Debug|x86
13 | Release|Any CPU = Release|Any CPU
14 | Release|x64 = Release|x64
15 | Release|x86 = Release|x86
16 | EndGlobalSection
17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
18 | {88669B83-4217-40B7-8A4C-DCD65DFD6877}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
19 | {88669B83-4217-40B7-8A4C-DCD65DFD6877}.Debug|Any CPU.Build.0 = Debug|Any CPU
20 | {88669B83-4217-40B7-8A4C-DCD65DFD6877}.Debug|x64.ActiveCfg = Debug|x64
21 | {88669B83-4217-40B7-8A4C-DCD65DFD6877}.Debug|x64.Build.0 = Debug|x64
22 | {88669B83-4217-40B7-8A4C-DCD65DFD6877}.Debug|x86.ActiveCfg = Debug|x86
23 | {88669B83-4217-40B7-8A4C-DCD65DFD6877}.Debug|x86.Build.0 = Debug|x86
24 | {88669B83-4217-40B7-8A4C-DCD65DFD6877}.Release|Any CPU.ActiveCfg = Release|Any CPU
25 | {88669B83-4217-40B7-8A4C-DCD65DFD6877}.Release|Any CPU.Build.0 = Release|Any CPU
26 | {88669B83-4217-40B7-8A4C-DCD65DFD6877}.Release|x64.ActiveCfg = Release|x64
27 | {88669B83-4217-40B7-8A4C-DCD65DFD6877}.Release|x64.Build.0 = Release|x64
28 | {88669B83-4217-40B7-8A4C-DCD65DFD6877}.Release|x86.ActiveCfg = Release|x86
29 | {88669B83-4217-40B7-8A4C-DCD65DFD6877}.Release|x86.Build.0 = Release|x86
30 | EndGlobalSection
31 | GlobalSection(SolutionProperties) = preSolution
32 | HideSolutionNode = FALSE
33 | EndGlobalSection
34 | EndGlobal
35 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Windows.Forms;
5 |
6 | namespace VizWindow
7 | {
8 | static class Program
9 | {
10 | ///
11 | /// The main entry point for the application.
12 | ///
13 | [STAThread]
14 | static void Main()
15 | {
16 | Application.EnableVisualStyles();
17 | Application.SetCompatibleTextRenderingDefault(false);
18 | Application.Run(new frmMain());
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("VizWindow")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Microsoft")]
12 | [assembly: AssemblyProduct("VizWindow")]
13 | [assembly: AssemblyCopyright("Copyright © Microsoft 2016")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("c90ded60-802e-43ff-812c-58d8d15d6982")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace VizWindow.Properties
12 | {
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources
26 | {
27 |
28 | private static global::System.Resources.ResourceManager resourceMan;
29 |
30 | private static global::System.Globalization.CultureInfo resourceCulture;
31 |
32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
33 | internal Resources()
34 | {
35 | }
36 |
37 | ///
38 | /// Returns the cached ResourceManager instance used by this class.
39 | ///
40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
41 | internal static global::System.Resources.ResourceManager ResourceManager
42 | {
43 | get
44 | {
45 | if ((resourceMan == null))
46 | {
47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VizWindow.Properties.Resources", typeof(Resources).Assembly);
48 | resourceMan = temp;
49 | }
50 | return resourceMan;
51 | }
52 | }
53 |
54 | ///
55 | /// Overrides the current thread's CurrentUICulture property for all
56 | /// resource lookups using this strongly typed resource class.
57 | ///
58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
59 | internal static global::System.Globalization.CultureInfo Culture
60 | {
61 | get
62 | {
63 | return resourceCulture;
64 | }
65 | set
66 | {
67 | resourceCulture = value;
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace VizWindow.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 |
26 | [global::System.Configuration.UserScopedSettingAttribute()]
27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
28 | [global::System.Configuration.DefaultSettingValueAttribute("http://webglsamples.org/aquarium/aquarium.html")]
29 | public string URL {
30 | get {
31 | return ((string)(this["URL"]));
32 | }
33 | set {
34 | this["URL"] = value;
35 | }
36 | }
37 |
38 | [global::System.Configuration.UserScopedSettingAttribute()]
39 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
40 | [global::System.Configuration.DefaultSettingValueAttribute("0")]
41 | public int WindowPosX {
42 | get {
43 | return ((int)(this["WindowPosX"]));
44 | }
45 | set {
46 | this["WindowPosX"] = value;
47 | }
48 | }
49 |
50 | [global::System.Configuration.UserScopedSettingAttribute()]
51 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
52 | [global::System.Configuration.DefaultSettingValueAttribute("0")]
53 | public int WindowPosY {
54 | get {
55 | return ((int)(this["WindowPosY"]));
56 | }
57 | set {
58 | this["WindowPosY"] = value;
59 | }
60 | }
61 |
62 | [global::System.Configuration.UserScopedSettingAttribute()]
63 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
64 | [global::System.Configuration.DefaultSettingValueAttribute("800")]
65 | public int WindowWidth {
66 | get {
67 | return ((int)(this["WindowWidth"]));
68 | }
69 | set {
70 | this["WindowWidth"] = value;
71 | }
72 | }
73 |
74 | [global::System.Configuration.UserScopedSettingAttribute()]
75 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
76 | [global::System.Configuration.DefaultSettingValueAttribute("600")]
77 | public int WindowHeight {
78 | get {
79 | return ((int)(this["WindowHeight"]));
80 | }
81 | set {
82 | this["WindowHeight"] = value;
83 | }
84 | }
85 |
86 | [global::System.Configuration.UserScopedSettingAttribute()]
87 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
88 | [global::System.Configuration.DefaultSettingValueAttribute("128")]
89 | public int WindowOpacity {
90 | get {
91 | return ((int)(this["WindowOpacity"]));
92 | }
93 | set {
94 | this["WindowOpacity"] = value;
95 | }
96 | }
97 |
98 | [global::System.Configuration.UserScopedSettingAttribute()]
99 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
100 | [global::System.Configuration.DefaultSettingValueAttribute("False")]
101 | public bool WindowMaximized {
102 | get {
103 | return ((bool)(this["WindowMaximized"]));
104 | }
105 | set {
106 | this["WindowMaximized"] = value;
107 | }
108 | }
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | http://webglsamples.org/aquarium/aquarium.html
7 |
8 |
9 | 0
10 |
11 |
12 | 0
13 |
14 |
15 | 800
16 |
17 |
18 | 600
19 |
20 |
21 | 128
22 |
23 |
24 | False
25 |
26 |
27 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/VizWindow.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yaptb/BlogCode/25544071fa9add4cec46cd6ba6b0798f29025b52/dotNet/VizWindow/VizWindow/VizWindow.bmp
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/VizWindow.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Debug
8 | AnyCPU
9 | {88669B83-4217-40B7-8A4C-DCD65DFD6877}
10 | WinExe
11 | Properties
12 | VizWindow
13 | VizWindow
14 | v4.0
15 | 512
16 | 16a1dd66
17 |
18 |
19 | x86
20 | true
21 | full
22 | false
23 | bin\Debug\
24 | DEBUG;TRACE
25 | prompt
26 | 4
27 |
28 |
29 | AnyCPU
30 | pdbonly
31 | true
32 | bin\Release\
33 | TRACE
34 | prompt
35 | 4
36 |
37 |
38 | true
39 | bin\x64\Debug\
40 | DEBUG;TRACE
41 | full
42 | x64
43 | prompt
44 | MinimumRecommendedRules.ruleset
45 |
46 |
47 | bin\x64\Release\
48 | TRACE
49 | true
50 | pdbonly
51 | x64
52 | prompt
53 | MinimumRecommendedRules.ruleset
54 |
55 |
56 | true
57 | bin\x86\Debug\
58 | DEBUG;TRACE
59 | full
60 | x86
61 | prompt
62 | MinimumRecommendedRules.ruleset
63 |
64 |
65 | bin\x86\Release\
66 | TRACE
67 | true
68 | pdbonly
69 | x86
70 | prompt
71 | MinimumRecommendedRules.ruleset
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 | Form
88 |
89 |
90 | frmAbout.cs
91 |
92 |
93 | Form
94 |
95 |
96 | frmMain.cs
97 |
98 |
99 | Form
100 |
101 |
102 | frmSettings.cs
103 |
104 |
105 |
106 |
107 | frmAbout.cs
108 |
109 |
110 | frmMain.cs
111 |
112 |
113 | frmSettings.cs
114 |
115 |
116 | ResXFileCodeGenerator
117 | Resources.Designer.cs
118 | Designer
119 |
120 |
121 | True
122 | Resources.resx
123 |
124 |
125 |
126 |
127 | SettingsSingleFileGenerator
128 | Settings.Designer.cs
129 |
130 |
131 | True
132 | Settings.settings
133 | True
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 | This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
160 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/VizWindow.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yaptb/BlogCode/25544071fa9add4cec46cd6ba6b0798f29025b52/dotNet/VizWindow/VizWindow/VizWindow.ico
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/VizWindow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yaptb/BlogCode/25544071fa9add4cec46cd6ba6b0798f29025b52/dotNet/VizWindow/VizWindow/VizWindow.png
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | http://webglsamples.org/aquarium/aquarium.html
12 |
13 |
14 | 0
15 |
16 |
17 | 0
18 |
19 |
20 | 800
21 |
22 |
23 | 600
24 |
25 |
26 | 128
27 |
28 |
29 | False
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/frmAbout.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace VizWindow
2 | {
3 | partial class frmAbout
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.linkLabel1 = new System.Windows.Forms.LinkLabel();
32 | this.btnOk = new System.Windows.Forms.Button();
33 | this.textBox1 = new System.Windows.Forms.TextBox();
34 | this.panel1 = new System.Windows.Forms.Panel();
35 | this.panel1.SuspendLayout();
36 | this.SuspendLayout();
37 | //
38 | // linkLabel1
39 | //
40 | this.linkLabel1.AutoSize = true;
41 | this.linkLabel1.Location = new System.Drawing.Point(114, 113);
42 | this.linkLabel1.Name = "linkLabel1";
43 | this.linkLabel1.Size = new System.Drawing.Size(130, 13);
44 | this.linkLabel1.TabIndex = 0;
45 | this.linkLabel1.TabStop = true;
46 | this.linkLabel1.Text = "http://yaptb.blogspot.com";
47 | this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
48 | //
49 | // btnOk
50 | //
51 | this.btnOk.Location = new System.Drawing.Point(144, 8);
52 | this.btnOk.Name = "btnOk";
53 | this.btnOk.Size = new System.Drawing.Size(75, 23);
54 | this.btnOk.TabIndex = 1;
55 | this.btnOk.Text = "&OK";
56 | this.btnOk.UseVisualStyleBackColor = true;
57 | this.btnOk.Click += new System.EventHandler(this.button1_Click);
58 | //
59 | // textBox1
60 | //
61 | this.textBox1.Dock = System.Windows.Forms.DockStyle.Top;
62 | this.textBox1.Location = new System.Drawing.Point(0, 0);
63 | this.textBox1.Multiline = true;
64 | this.textBox1.Name = "textBox1";
65 | this.textBox1.ReadOnly = true;
66 | this.textBox1.Size = new System.Drawing.Size(370, 88);
67 | this.textBox1.TabIndex = 2;
68 | this.textBox1.Text = "\r\nVizWindow: A simple embeded browser for your desktop. \r\n\r\nFree for all use with" +
69 | " no warranty or support provided.\r\n\r\n";
70 | this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
71 | this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
72 | //
73 | // panel1
74 | //
75 | this.panel1.Controls.Add(this.btnOk);
76 | this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
77 | this.panel1.Location = new System.Drawing.Point(0, 220);
78 | this.panel1.Name = "panel1";
79 | this.panel1.Size = new System.Drawing.Size(370, 43);
80 | this.panel1.TabIndex = 3;
81 | //
82 | // frmAbout
83 | //
84 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
85 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
86 | this.ClientSize = new System.Drawing.Size(370, 263);
87 | this.Controls.Add(this.panel1);
88 | this.Controls.Add(this.textBox1);
89 | this.Controls.Add(this.linkLabel1);
90 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
91 | this.Name = "frmAbout";
92 | this.Text = "About";
93 | this.panel1.ResumeLayout(false);
94 | this.ResumeLayout(false);
95 | this.PerformLayout();
96 |
97 | }
98 |
99 | #endregion
100 |
101 | private System.Windows.Forms.LinkLabel linkLabel1;
102 | private System.Windows.Forms.Button btnOk;
103 | private System.Windows.Forms.TextBox textBox1;
104 | private System.Windows.Forms.Panel panel1;
105 | }
106 | }
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/frmAbout.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Drawing;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Windows.Forms;
9 |
10 | namespace VizWindow
11 | {
12 | public partial class frmAbout : Form
13 | {
14 | public frmAbout()
15 | {
16 | InitializeComponent();
17 | }
18 |
19 | private void textBox1_TextChanged(object sender, EventArgs e)
20 | {
21 |
22 | }
23 |
24 | private void button1_Click(object sender, EventArgs e)
25 | {
26 | this.Close();
27 | }
28 |
29 | private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
30 | {
31 |
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/frmAbout.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/frmMain.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace VizWindow
2 | {
3 | partial class frmMain
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMain));
33 | this.niNotificationIcon = new System.Windows.Forms.NotifyIcon(this.components);
34 | this.cmNotificaitonContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
35 | this.tsInteractive = new System.Windows.Forms.ToolStripMenuItem();
36 | this.tsSettings = new System.Windows.Forms.ToolStripMenuItem();
37 | this.cmNotificaitonContextMenu.SuspendLayout();
38 | this.SuspendLayout();
39 | //
40 | // niNotificationIcon
41 | //
42 | this.niNotificationIcon.ContextMenuStrip = this.cmNotificaitonContextMenu;
43 | this.niNotificationIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("niNotificationIcon.Icon")));
44 | this.niNotificationIcon.Text = "VizWindow";
45 | this.niNotificationIcon.Visible = true;
46 | //
47 | // cmNotificaitonContextMenu
48 | //
49 | this.cmNotificaitonContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
50 | this.tsInteractive,
51 | this.tsSettings});
52 | this.cmNotificaitonContextMenu.Name = "contextMenuStrip1";
53 | this.cmNotificaitonContextMenu.Size = new System.Drawing.Size(153, 70);
54 | //
55 | // tsInteractive
56 | //
57 | this.tsInteractive.Checked = true;
58 | this.tsInteractive.CheckOnClick = true;
59 | this.tsInteractive.CheckState = System.Windows.Forms.CheckState.Checked;
60 | this.tsInteractive.Name = "tsInteractive";
61 | this.tsInteractive.Size = new System.Drawing.Size(152, 22);
62 | this.tsInteractive.Text = "Interactive";
63 | this.tsInteractive.Click += new System.EventHandler(this.tsInteractive_Click);
64 | //
65 | // tsSettings
66 | //
67 | this.tsSettings.Name = "tsSettings";
68 | this.tsSettings.Size = new System.Drawing.Size(152, 22);
69 | this.tsSettings.Text = "Settings";
70 | this.tsSettings.Click += new System.EventHandler(this.settingsToolStripMenuItem_Click);
71 | //
72 | // frmMain
73 | //
74 | this.ClientSize = new System.Drawing.Size(620, 588);
75 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
76 | this.Name = "frmMain";
77 | this.Opacity = 0.5D;
78 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmMain_FormClosing);
79 | this.Load += new System.EventHandler(this.frmMain_Load);
80 | this.cmNotificaitonContextMenu.ResumeLayout(false);
81 | this.ResumeLayout(false);
82 |
83 | }
84 |
85 | #endregion
86 |
87 | private System.Windows.Forms.NotifyIcon niNotificationIcon;
88 | private System.Windows.Forms.ContextMenuStrip cmNotificaitonContextMenu;
89 | private System.Windows.Forms.ToolStripMenuItem tsInteractive;
90 | private System.Windows.Forms.ToolStripMenuItem tsSettings;
91 | }
92 | }
93 |
94 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/frmMain.cs:
--------------------------------------------------------------------------------
1 | /*
2 | Desktop Vizualation Viewer
3 | (c) 2016 Yet Another Pointless Tech Blog http://yaptb.blogspot.com
4 |
5 | This application wraps the https://github.com/cefsharp/CefSharp browser in a transparent window to enable animated web based desktops
6 | */
7 |
8 |
9 |
10 | using System;
11 | using System.Drawing;
12 | using System.Windows.Forms;
13 | using CefSharp;
14 | using CefSharp.WinForms;
15 | using VizWindow.Properties;
16 |
17 | namespace VizWindow
18 | {
19 |
20 | ///
21 | /// this is the main form. It simply hosts the browser control and the notify icon
22 | ///
23 | public partial class frmMain : Form
24 | {
25 |
26 |
27 | public frmMain()
28 | {
29 | InitializeComponent();
30 | this.AllowTransparency = true;
31 |
32 | SettingsDialog = new frmSettings(this);
33 | }
34 |
35 |
36 | #region Form Events
37 |
38 | private void frmMain_Load(object sender, EventArgs e)
39 | {
40 |
41 | RestoreSavedSettings();
42 | InitializeBrowserControl();
43 |
44 | }
45 |
46 |
47 | private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
48 | {
49 | ShutdownBrowserControl();
50 | }
51 |
52 |
53 | private void tsInteractive_Click(object sender, EventArgs e)
54 | {
55 | if (this.tsInteractive.Checked)
56 | SetInteractiveMode();
57 | else
58 |
59 | SetBackgroundMode();
60 | }
61 |
62 |
63 | private void settingsToolStripMenuItem_Click(object sender, EventArgs e)
64 | {
65 |
66 | SettingsDialog.UpdateFormMainForm();
67 |
68 | if (SettingsDialog.ShowDialog() == DialogResult.OK)
69 | UpdateSettingsFromDialog();
70 | }
71 |
72 |
73 | #endregion
74 |
75 |
76 | ///
77 | /// start up the embedded browser control
78 | ///
79 | private void InitializeBrowserControl()
80 | {
81 | Cef.Initialize();
82 | Browser = new ChromiumWebBrowser(Url);
83 | this.Controls.Add(Browser);
84 | }
85 |
86 |
87 | ///
88 | /// shutdown the browser control to free unmanaged resources
89 | ///
90 | private void ShutdownBrowserControl()
91 | {
92 | Cef.Shutdown();
93 | }
94 |
95 |
96 | ///
97 | /// sets the application to interactive mode, where the user can interact with the browser
98 | ///
99 | private void SetInteractiveMode()
100 | {
101 |
102 | this.FormBorderStyle = FormBorderStyle.Sizable;
103 | this.Browser.Enabled = true;
104 | }
105 |
106 |
107 |
108 |
109 | ///
110 | /// sets the application to background mode, where input events are ignored
111 | ///
112 | private void SetBackgroundMode()
113 | {
114 | //we are in background mode
115 |
116 | this.Browser.Enabled = false;
117 |
118 | this.FormBorderStyle = FormBorderStyle.None;
119 |
120 | if (this.WindowState == FormWindowState.Maximized)
121 | {
122 |
123 | //HACK: fix the issue where removing borders from a maximized window bleeds the screen into other monitors
124 | //by forcing the window out of maximized mode when non-interactive and resizing to the screen bounds
125 | //TODO: put the window back into mazimized mode
126 | this.WindowState = FormWindowState.Normal;
127 |
128 | Screen screen = Screen.FromControl(this);
129 | this.Location = screen.WorkingArea.Location;
130 | this.Width = screen.WorkingArea.Width;
131 | this.Height = screen.Bounds.Height;
132 | }
133 |
134 | }
135 |
136 |
137 |
138 | ///
139 | /// restore a user's previously saved settings
140 | ///
141 | private void RestoreSavedSettings()
142 | {
143 |
144 | //restore previsiouly saved settings
145 | var winX = Settings.Default.WindowPosX;
146 | var winY = Settings.Default.WindowPosY;
147 | var winH = Settings.Default.WindowHeight;
148 | var winW = Settings.Default.WindowWidth;
149 | var isMaximized = Settings.Default.WindowMaximized;
150 | var Url = Settings.Default.URL;
151 |
152 |
153 | this.Width = winW;
154 | this.Height = winH;
155 | this.StartPosition = FormStartPosition.Manual;
156 | this.Location = new Point(winX, winY);
157 | this.Opacity = (float)(Settings.Default.WindowOpacity) / 255.0f;
158 |
159 | if (isMaximized)
160 | this.WindowState = FormWindowState.Maximized;
161 |
162 | }
163 |
164 |
165 | ///
166 | /// update the current settings from the ones the users have specified on the settings dialog
167 | ///
168 | private void UpdateSettingsFromDialog()
169 | {
170 | this.Opacity = (float)(SettingsDialog.Transparency) / 255.0f;
171 |
172 | if (SettingsDialog.URL != Browser.Address)
173 | {
174 | //navigate to a new address
175 | Url = SettingsDialog.URL;
176 | this.Browser.Load(Url);
177 |
178 | }
179 | }
180 |
181 |
182 |
183 | public ChromiumWebBrowser Browser { get; set; }
184 |
185 | public string Url { get; set; }
186 |
187 | private frmSettings SettingsDialog { get; set; }
188 | }
189 | }
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/frmMain.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
124 | 130, 17
125 |
126 |
127 |
128 |
129 | AAABAAIAEBAAAAAAIABoBAAAJgAAACAgAAAAACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAI
130 | AAAAAAAAAAAAAAAAAAAAAAAAAgAA/xYCAP8ZAQD/GQIA/xkCAP8ZAgD/GQIA/xkCAP8ZAgD/GQIA/xkC
131 | AP8ZAgD/GQIA/xkBAP8WAgD/AgAA/xcCAP/QHwD/5CkA/+QrAP/kKwD/5CsA/+QrAP/kKwD/5CsA/+Qr
132 | AP/kKwD/5CsA/+QrAP/kKQD/0B8A/xcCAP8ZAQD/5SkA//uEAP/mgwD/5IEA/+OBAP/igAD/4X4A/+F+
133 | AP/igAD/44EA/+SBAP/mgwD/+4QA/+UpAP8ZAQD/GQEA/+QqAP/lggD/LBsA/xkPAP8YDwD/FxEL/x8Z
134 | F/8fGRf/FxEL/xgPAP8ZDwD/LBsA/+WCAP/kKgD/GQEA/xkCAP/kKwD/44EA/xcOAP8AAAD/CAkK/3l6
135 | fP/c3d//3N3f/3l6fP8ICQr/AAAA/xcOAP/jgQD/5CsA/xkCAP8ZAgD/5CsA/+SBAP8ZDwD/AAAA/x8f
136 | H//e3t7/5+fn/+fn5//e3t7/Hx8f/wAAAP8ZDwD/5IEA/+QrAP8ZAgD/GQIA/+QrAP/kgQD/GQ8A/woK
137 | Cv+AgID/5ubm/y0tLf8tLS3/5ubm/4CAgP8KCgr/GQ8A/+SBAP/kKwD/GQIA/xkCAP/kKwD/44EA/xgP
138 | AP8eHh//3d3d/+Xl5f8XFxf/FxcX/+Xl5f/d3d3/Hh4f/xgPAP/jgQD/5CsA/xkCAP8ZAgD/5CsA/+J/
139 | AP8XEAv/e3x+//Dw8P/S0tL/FxcX/xcXF//S0tL/8PDw/3t8fv8XEAv/4n8A/+QrAP8ZAgD/GQIA/+Qr
140 | AP/gfgD/HhkX/9na3P/k5OT/KSkp/wICAv8CAgL/KSkp/+Tk5P/Z2tz/HhkX/+B+AP/kKwD/GQIA/xkC
141 | AP/kKwD/4H4A/x8aGf/i4+X/5OTk/xgYGP8AAAD/AAAA/xgYGP/k5OT/4uPl/x8aGf/gfgD/5CsA/xkC
142 | AP8ZAgD/5CsA/+B+AP8cFxf/yszQ/83O0P8VFhf/AAAA/wAAAP8VFhf/zc7Q/8rM0P8cFxf/4H4A/+Qr
143 | AP8ZAgD/GQEA/+QqAP/lggD/KxoC/x4YFv8eGBb/GA4C/xkPAP8ZDwD/GA4C/x4YFv8eGBb/KxoC/+WC
144 | AP/kKgD/GQEA/xkBAP/lKQD/+4QA/+aDAP/hfwD/4X4A/+OBAP/kgQD/5IEA/+OBAP/hfgD/4X8A/+aD
145 | AP/7hAD/5SkA/xkBAP8XAgD/0B8A/+QpAP/kKwD/5CsA/+QrAP/kKwD/5CsA/+QrAP/kKwD/5CsA/+Qr
146 | AP/kKwD/5CkA/9AfAP8XAgD/AgAA/xYCAP8ZAQD/GQIA/xkCAP8ZAgD/GQIA/xkCAP8ZAgD/GQIA/xkC
147 | AP8ZAgD/GQIA/xkBAP8WAgD/AgAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
148 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAgAAAAAAAAAAAAAAAA
149 | AAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
150 | AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
151 | AP8AAAD/AAAA/wAAAP8AAAD/CQAA/ygFAP8yBgD/MgQA/zIDAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIE
152 | AP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zID
153 | AP8yBAD/MgYA/ygFAP8JAAD/AAAA/wAAAP8nBAD/oBcA/8odAP/KFwD/yhUA/8oVAP/KFQD/yhUA/8oV
154 | AP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oV
155 | AP/KFQD/yhUA/8oXAP/KHQD/oBcA/ycEAP8AAAD/AAAA/zUGAP/YHQD//i4A//45AP/+QAD//kEA//5B
156 | AP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5B
157 | 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
199 | J/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8hJCf/mp2g/8TGyv/Exsr/lpqg/xMcJ/8eDQD/xHYA//6H
200 | AP/+QQD/yhUA/zIEAP8AAAD/AAAA/zIEAP/KFQD//kEA//6HAP/FeAD/IBMA/wAACf8VHSj/ICgy/yAo
201 | Mv8WHSj/AAAJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAACf8WHSj/ICgy/yAoMv8VHSj/AAAJ/yAT
202 | AP/FeAD//ocA//5BAP/KFQD/MgQA/wAAAP8AAAD/MgMA/8oUAP/+QAD//ocA/9SFAP9cOgD/MBwA/yQR
203 | AP8gDQD/IA0A/yQRAP8vHAD/Mh8A/zIfAP8yHwD/Mh8A/zIfAP8yHwD/LxwA/yQRAP8gDQD/IA0A/yQR
204 | AP8wHAD/XDoA/9SFAP/+hwD//kAA/8oUAP8yAwD/AAAA/wAAAP8yAwD/yhQA//5AAP/+hQD/85wA/9SF
205 | AP/JewD/xXgA/8R2AP/EdgD/xXcA/8l7AP/KfAD/ynwA/8p8AP/KfAD/ynwA/8p8AP/JewD/xXcA/8R2
206 | AP/EdgD/xXgA/8l7AP/UhQD/85wA//6FAP/+QAD/yhQA/zIDAP8AAAD/AAAA/zMEAP/OFwD//joA//5r
207 | AP/+hQD//ocA//6HAP/+hwD//ocA//6HAP/+hwD//ocA//6HAP/+hwD//ocA//6HAP/+hwD//ocA//6H
208 | AP/+hwD//ocA//6HAP/+hwD//ocA//6HAP/+hQD//msA//46AP/OFwD/MwQA/wAAAP8AAAD/NQYA/9gd
209 | AP/+LgD//jkA//5AAP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5B
210 | AP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5AAP/+OQD//i4A/9gdAP81BgD/AAAA/wAA
211 | AP8nBAD/oBcA/8odAP/KFwD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oV
212 | AP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oXAP/KHQD/oBcA/ycE
213 | AP8AAAD/AAAA/wkAAP8oBQD/MgYA/zIEAP8yAwD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIE
214 | AP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yAwD/MgQA/zIG
215 | AP8oBQD/CQAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
216 | AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
217 | AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
218 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
219 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
220 |
221 |
222 |
223 |
224 | AAABAAIAEBAAAAAAIABoBAAAJgAAACAgAAAAACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAI
225 | AAAAAAAAAAAAAAAAAAAAAAAAAgAA/xYCAP8ZAQD/GQIA/xkCAP8ZAgD/GQIA/xkCAP8ZAgD/GQIA/xkC
226 | AP8ZAgD/GQIA/xkBAP8WAgD/AgAA/xcCAP/QHwD/5CkA/+QrAP/kKwD/5CsA/+QrAP/kKwD/5CsA/+Qr
227 | AP/kKwD/5CsA/+QrAP/kKQD/0B8A/xcCAP8ZAQD/5SkA//uEAP/mgwD/5IEA/+OBAP/igAD/4X4A/+F+
228 | AP/igAD/44EA/+SBAP/mgwD/+4QA/+UpAP8ZAQD/GQEA/+QqAP/lggD/LBsA/xkPAP8YDwD/FxEL/x8Z
229 | F/8fGRf/FxEL/xgPAP8ZDwD/LBsA/+WCAP/kKgD/GQEA/xkCAP/kKwD/44EA/xcOAP8AAAD/CAkK/3l6
230 | fP/c3d//3N3f/3l6fP8ICQr/AAAA/xcOAP/jgQD/5CsA/xkCAP8ZAgD/5CsA/+SBAP8ZDwD/AAAA/x8f
231 | H//e3t7/5+fn/+fn5//e3t7/Hx8f/wAAAP8ZDwD/5IEA/+QrAP8ZAgD/GQIA/+QrAP/kgQD/GQ8A/woK
232 | Cv+AgID/5ubm/y0tLf8tLS3/5ubm/4CAgP8KCgr/GQ8A/+SBAP/kKwD/GQIA/xkCAP/kKwD/44EA/xgP
233 | AP8eHh//3d3d/+Xl5f8XFxf/FxcX/+Xl5f/d3d3/Hh4f/xgPAP/jgQD/5CsA/xkCAP8ZAgD/5CsA/+J/
234 | AP8XEAv/e3x+//Dw8P/S0tL/FxcX/xcXF//S0tL/8PDw/3t8fv8XEAv/4n8A/+QrAP8ZAgD/GQIA/+Qr
235 | AP/gfgD/HhkX/9na3P/k5OT/KSkp/wICAv8CAgL/KSkp/+Tk5P/Z2tz/HhkX/+B+AP/kKwD/GQIA/xkC
236 | AP/kKwD/4H4A/x8aGf/i4+X/5OTk/xgYGP8AAAD/AAAA/xgYGP/k5OT/4uPl/x8aGf/gfgD/5CsA/xkC
237 | AP8ZAgD/5CsA/+B+AP8cFxf/yszQ/83O0P8VFhf/AAAA/wAAAP8VFhf/zc7Q/8rM0P8cFxf/4H4A/+Qr
238 | AP8ZAgD/GQEA/+QqAP/lggD/KxoC/x4YFv8eGBb/GA4C/xkPAP8ZDwD/GA4C/x4YFv8eGBb/KxoC/+WC
239 | AP/kKgD/GQEA/xkBAP/lKQD/+4QA/+aDAP/hfwD/4X4A/+OBAP/kgQD/5IEA/+OBAP/hfgD/4X8A/+aD
240 | AP/7hAD/5SkA/xkBAP8XAgD/0B8A/+QpAP/kKwD/5CsA/+QrAP/kKwD/5CsA/+QrAP/kKwD/5CsA/+Qr
241 | AP/kKwD/5CkA/9AfAP8XAgD/AgAA/xYCAP8ZAQD/GQIA/xkCAP8ZAgD/GQIA/xkCAP8ZAgD/GQIA/xkC
242 | AP8ZAgD/GQIA/xkBAP8WAgD/AgAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
243 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAgAAAAAAAAAAAAAAAA
244 | AAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
245 | AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
246 | AP8AAAD/AAAA/wAAAP8AAAD/CQAA/ygFAP8yBgD/MgQA/zIDAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIE
247 | AP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zID
248 | AP8yBAD/MgYA/ygFAP8JAAD/AAAA/wAAAP8nBAD/oBcA/8odAP/KFwD/yhUA/8oVAP/KFQD/yhUA/8oV
249 | AP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oV
250 | AP/KFQD/yhUA/8oXAP/KHQD/oBcA/ycEAP8AAAD/AAAA/zUGAP/YHQD//i4A//45AP/+QAD//kEA//5B
251 | AP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5B
252 | 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
294 | J/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8hJCf/mp2g/8TGyv/Exsr/lpqg/xMcJ/8eDQD/xHYA//6H
295 | AP/+QQD/yhUA/zIEAP8AAAD/AAAA/zIEAP/KFQD//kEA//6HAP/FeAD/IBMA/wAACf8VHSj/ICgy/yAo
296 | Mv8WHSj/AAAJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAACf8WHSj/ICgy/yAoMv8VHSj/AAAJ/yAT
297 | AP/FeAD//ocA//5BAP/KFQD/MgQA/wAAAP8AAAD/MgMA/8oUAP/+QAD//ocA/9SFAP9cOgD/MBwA/yQR
298 | AP8gDQD/IA0A/yQRAP8vHAD/Mh8A/zIfAP8yHwD/Mh8A/zIfAP8yHwD/LxwA/yQRAP8gDQD/IA0A/yQR
299 | AP8wHAD/XDoA/9SFAP/+hwD//kAA/8oUAP8yAwD/AAAA/wAAAP8yAwD/yhQA//5AAP/+hQD/85wA/9SF
300 | AP/JewD/xXgA/8R2AP/EdgD/xXcA/8l7AP/KfAD/ynwA/8p8AP/KfAD/ynwA/8p8AP/JewD/xXcA/8R2
301 | AP/EdgD/xXgA/8l7AP/UhQD/85wA//6FAP/+QAD/yhQA/zIDAP8AAAD/AAAA/zMEAP/OFwD//joA//5r
302 | AP/+hQD//ocA//6HAP/+hwD//ocA//6HAP/+hwD//ocA//6HAP/+hwD//ocA//6HAP/+hwD//ocA//6H
303 | AP/+hwD//ocA//6HAP/+hwD//ocA//6HAP/+hQD//msA//46AP/OFwD/MwQA/wAAAP8AAAD/NQYA/9gd
304 | AP/+LgD//jkA//5AAP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5B
305 | AP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5AAP/+OQD//i4A/9gdAP81BgD/AAAA/wAA
306 | AP8nBAD/oBcA/8odAP/KFwD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oV
307 | AP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oXAP/KHQD/oBcA/ycE
308 | AP8AAAD/AAAA/wkAAP8oBQD/MgYA/zIEAP8yAwD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIE
309 | AP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yAwD/MgQA/zIG
310 | AP8oBQD/CQAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
311 | AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
312 | AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
313 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
314 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
315 |
316 |
317 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/frmSettings.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace VizWindow
2 | {
3 | partial class frmSettings
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmSettings));
33 | this.txtURL = new System.Windows.Forms.TextBox();
34 | this.label1 = new System.Windows.Forms.Label();
35 | this.trackBar1 = new System.Windows.Forms.TrackBar();
36 | this.label3 = new System.Windows.Forms.Label();
37 | this.msSettings = new System.Windows.Forms.MenuStrip();
38 | this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
39 | this.saveSettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
40 | this.ssSettings = new System.Windows.Forms.StatusStrip();
41 | this.tsStatusLabel = new System.Windows.Forms.ToolStripStatusLabel();
42 | this.gbSettings = new System.Windows.Forms.GroupBox();
43 | this.panel1 = new System.Windows.Forms.Panel();
44 | this.btnCancel = new System.Windows.Forms.Button();
45 | this.btnOK = new System.Windows.Forms.Button();
46 | this.ttSettings = new System.Windows.Forms.ToolTip(this.components);
47 | this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
48 | this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
49 | ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit();
50 | this.msSettings.SuspendLayout();
51 | this.ssSettings.SuspendLayout();
52 | this.gbSettings.SuspendLayout();
53 | this.panel1.SuspendLayout();
54 | this.SuspendLayout();
55 | //
56 | // txtURL
57 | //
58 | resources.ApplyResources(this.txtURL, "txtURL");
59 | this.txtURL.Name = "txtURL";
60 | this.ttSettings.SetToolTip(this.txtURL, resources.GetString("txtURL.ToolTip"));
61 | //
62 | // label1
63 | //
64 | resources.ApplyResources(this.label1, "label1");
65 | this.label1.Name = "label1";
66 | //
67 | // trackBar1
68 | //
69 | resources.ApplyResources(this.trackBar1, "trackBar1");
70 | this.trackBar1.Maximum = 255;
71 | this.trackBar1.Minimum = 1;
72 | this.trackBar1.Name = "trackBar1";
73 | this.trackBar1.TickFrequency = 10;
74 | this.ttSettings.SetToolTip(this.trackBar1, resources.GetString("trackBar1.ToolTip"));
75 | this.trackBar1.Value = 1;
76 | //
77 | // label3
78 | //
79 | resources.ApplyResources(this.label3, "label3");
80 | this.label3.Name = "label3";
81 | //
82 | // msSettings
83 | //
84 | this.msSettings.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
85 | this.fileToolStripMenuItem,
86 | this.helpToolStripMenuItem});
87 | resources.ApplyResources(this.msSettings, "msSettings");
88 | this.msSettings.Name = "msSettings";
89 | //
90 | // fileToolStripMenuItem
91 | //
92 | this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
93 | this.saveSettingsToolStripMenuItem});
94 | this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
95 | resources.ApplyResources(this.fileToolStripMenuItem, "fileToolStripMenuItem");
96 | //
97 | // saveSettingsToolStripMenuItem
98 | //
99 | this.saveSettingsToolStripMenuItem.Name = "saveSettingsToolStripMenuItem";
100 | resources.ApplyResources(this.saveSettingsToolStripMenuItem, "saveSettingsToolStripMenuItem");
101 | this.saveSettingsToolStripMenuItem.Click += new System.EventHandler(this.saveSettingsToolStripMenuItem_Click);
102 | //
103 | // ssSettings
104 | //
105 | this.ssSettings.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
106 | this.tsStatusLabel});
107 | resources.ApplyResources(this.ssSettings, "ssSettings");
108 | this.ssSettings.Name = "ssSettings";
109 | //
110 | // tsStatusLabel
111 | //
112 | this.tsStatusLabel.Name = "tsStatusLabel";
113 | resources.ApplyResources(this.tsStatusLabel, "tsStatusLabel");
114 | //
115 | // gbSettings
116 | //
117 | this.gbSettings.Controls.Add(this.trackBar1);
118 | this.gbSettings.Controls.Add(this.label3);
119 | this.gbSettings.Controls.Add(this.txtURL);
120 | this.gbSettings.Controls.Add(this.label1);
121 | resources.ApplyResources(this.gbSettings, "gbSettings");
122 | this.gbSettings.Name = "gbSettings";
123 | this.gbSettings.TabStop = false;
124 | //
125 | // panel1
126 | //
127 | this.panel1.Controls.Add(this.btnCancel);
128 | this.panel1.Controls.Add(this.btnOK);
129 | resources.ApplyResources(this.panel1, "panel1");
130 | this.panel1.Name = "panel1";
131 | //
132 | // btnCancel
133 | //
134 | this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
135 | resources.ApplyResources(this.btnCancel, "btnCancel");
136 | this.btnCancel.Name = "btnCancel";
137 | this.btnCancel.UseVisualStyleBackColor = true;
138 | //
139 | // btnOK
140 | //
141 | this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
142 | resources.ApplyResources(this.btnOK, "btnOK");
143 | this.btnOK.Name = "btnOK";
144 | this.btnOK.UseVisualStyleBackColor = true;
145 | //
146 | // helpToolStripMenuItem
147 | //
148 | this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
149 | this.aboutToolStripMenuItem});
150 | this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
151 | resources.ApplyResources(this.helpToolStripMenuItem, "helpToolStripMenuItem");
152 | //
153 | // aboutToolStripMenuItem
154 | //
155 | this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
156 | resources.ApplyResources(this.aboutToolStripMenuItem, "aboutToolStripMenuItem");
157 | this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
158 | //
159 | // frmSettings
160 | //
161 | resources.ApplyResources(this, "$this");
162 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
163 | this.Controls.Add(this.gbSettings);
164 | this.Controls.Add(this.msSettings);
165 | this.Controls.Add(this.panel1);
166 | this.Controls.Add(this.ssSettings);
167 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
168 | this.MainMenuStrip = this.msSettings;
169 | this.Name = "frmSettings";
170 | ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit();
171 | this.msSettings.ResumeLayout(false);
172 | this.msSettings.PerformLayout();
173 | this.ssSettings.ResumeLayout(false);
174 | this.ssSettings.PerformLayout();
175 | this.gbSettings.ResumeLayout(false);
176 | this.gbSettings.PerformLayout();
177 | this.panel1.ResumeLayout(false);
178 | this.ResumeLayout(false);
179 | this.PerformLayout();
180 |
181 | }
182 |
183 | #endregion
184 |
185 | private System.Windows.Forms.TextBox txtURL;
186 | private System.Windows.Forms.Label label1;
187 | private System.Windows.Forms.TrackBar trackBar1;
188 | private System.Windows.Forms.Label label3;
189 | private System.Windows.Forms.MenuStrip msSettings;
190 | private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
191 | private System.Windows.Forms.ToolStripMenuItem saveSettingsToolStripMenuItem;
192 | private System.Windows.Forms.StatusStrip ssSettings;
193 | private System.Windows.Forms.ToolStripStatusLabel tsStatusLabel;
194 | private System.Windows.Forms.GroupBox gbSettings;
195 | private System.Windows.Forms.Panel panel1;
196 | private System.Windows.Forms.Button btnCancel;
197 | private System.Windows.Forms.Button btnOK;
198 | private System.Windows.Forms.ToolTip ttSettings;
199 | private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
200 | private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
201 | }
202 | }
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/frmSettings.cs:
--------------------------------------------------------------------------------
1 | /*
2 | Desktop Vizualation Viewer
3 | (c) 2016 Yet Another Pointless Tech Blog http://yaptb.blogspot.com
4 |
5 | */
6 |
7 |
8 |
9 | using System;
10 | using System.Collections.Generic;
11 | using System.ComponentModel;
12 | using System.Data;
13 | using System.Drawing;
14 | using System.Linq;
15 | using System.Text;
16 | using System.Windows.Forms;
17 |
18 | namespace VizWindow
19 | {
20 |
21 | ///
22 | /// This is the settings form. It enables the user to change the application URL, transparency and save them
23 | /// along with the current window position and state
24 | ///
25 | public partial class frmSettings : Form
26 | {
27 |
28 | private frmMain _mainForm;
29 |
30 | public frmSettings(frmMain mainForm)
31 | {
32 | InitializeComponent();
33 |
34 | _mainForm = mainForm;
35 |
36 | }
37 |
38 |
39 | #region Form Events
40 |
41 | private void btnOK_Click(object sender, EventArgs e)
42 | {
43 | this.DialogResult = DialogResult.OK;
44 | this.Close();
45 |
46 | }
47 |
48 | private void btnCancel_Click(object sender, EventArgs e)
49 | {
50 | this.DialogResult = DialogResult.Cancel;
51 | this.Close();
52 |
53 | }
54 |
55 | private void saveSettingsToolStripMenuItem_Click(object sender, EventArgs e)
56 | {
57 | SaveSettings();
58 | }
59 |
60 | private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
61 | {
62 | var frm = new frmAbout();
63 |
64 | frm.ShowDialog();
65 | }
66 |
67 |
68 | #endregion
69 |
70 |
71 | public void UpdateFormMainForm()
72 | {
73 | this.txtURL.Text = _mainForm.Browser.Address;
74 | this.trackBar1.Value = (int)(255.0f * _mainForm.Opacity);
75 | }
76 |
77 |
78 | private void SaveSettings()
79 | {
80 | Properties.Settings.Default.URL = this.txtURL.Text;
81 | Properties.Settings.Default.WindowHeight = _mainForm.Height;
82 | Properties.Settings.Default.WindowWidth = _mainForm.Width;
83 | Properties.Settings.Default.WindowPosX = _mainForm.Location.X;
84 | Properties.Settings.Default.WindowPosY = _mainForm.Location.Y;
85 | Properties.Settings.Default.WindowOpacity = this.trackBar1.Value;
86 | Properties.Settings.Default.WindowMaximized = _mainForm.WindowState == FormWindowState.Maximized;
87 |
88 | Properties.Settings.Default.Save();
89 |
90 | this.tsStatusLabel.Text = "Settings Saved.";
91 |
92 | }
93 |
94 |
95 | public string URL { get { return this.txtURL.Text; } }
96 |
97 | public int Transparency { get { return this.trackBar1.Value; } }
98 |
99 |
100 |
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/frmSettings.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 | 24, 48
123 |
124 |
125 | 540, 20
126 |
127 |
128 |
129 | 0
130 |
131 |
132 | 238, 17
133 |
134 |
135 | Enter the URL to display on the main window here
136 |
137 |
138 | txtURL
139 |
140 |
141 | System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
142 |
143 |
144 | gbSettings
145 |
146 |
147 | 2
148 |
149 |
150 | True
151 |
152 |
153 | 21, 32
154 |
155 |
156 | 29, 13
157 |
158 |
159 | 1
160 |
161 |
162 | URL
163 |
164 |
165 | label1
166 |
167 |
168 | System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
169 |
170 |
171 | gbSettings
172 |
173 |
174 | 3
175 |
176 |
177 | 24, 103
178 |
179 |
180 | 537, 45
181 |
182 |
183 | 6
184 |
185 |
186 | Set the Opacity of the main window
187 |
188 |
189 | trackBar1
190 |
191 |
192 | System.Windows.Forms.TrackBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
193 |
194 |
195 | gbSettings
196 |
197 |
198 | 0
199 |
200 |
201 | True
202 |
203 |
204 | 21, 87
205 |
206 |
207 | 43, 13
208 |
209 |
210 | 7
211 |
212 |
213 | Opacity
214 |
215 |
216 | label3
217 |
218 |
219 | System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
220 |
221 |
222 | gbSettings
223 |
224 |
225 | 1
226 |
227 |
228 | 17, 17
229 |
230 |
231 | 37, 20
232 |
233 |
234 | &File
235 |
236 |
237 | 152, 22
238 |
239 |
240 | A&bout
241 |
242 |
243 | 44, 20
244 |
245 |
246 | &Help
247 |
248 |
249 | 0, 0
250 |
251 |
252 | 592, 24
253 |
254 |
255 | 8
256 |
257 |
258 | menuStrip1
259 |
260 |
261 | msSettings
262 |
263 |
264 | System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
265 |
266 |
267 | $this
268 |
269 |
270 | 1
271 |
272 |
273 | 152, 22
274 |
275 |
276 | S&ave Settings
277 |
278 |
279 | 132, 17
280 |
281 |
282 | 0, 288
283 |
284 |
285 | 592, 22
286 |
287 |
288 | 9
289 |
290 |
291 | statusStrip1
292 |
293 |
294 | ssSettings
295 |
296 |
297 | System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
298 |
299 |
300 | $this
301 |
302 |
303 | 3
304 |
305 |
306 | 0, 17
307 |
308 |
309 |
310 | Fill
311 |
312 |
313 | 0, 24
314 |
315 |
316 | 3, 9, 3, 3
317 |
318 |
319 | 592, 213
320 |
321 |
322 | 10
323 |
324 |
325 | gbSettings
326 |
327 |
328 | System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
329 |
330 |
331 | $this
332 |
333 |
334 | 0
335 |
336 |
337 | btnCancel
338 |
339 |
340 | System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
341 |
342 |
343 | panel1
344 |
345 |
346 | 0
347 |
348 |
349 | btnOK
350 |
351 |
352 | System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
353 |
354 |
355 | panel1
356 |
357 |
358 | 1
359 |
360 |
361 | Bottom
362 |
363 |
364 | 0, 237
365 |
366 |
367 | 592, 51
368 |
369 |
370 | 11
371 |
372 |
373 | panel1
374 |
375 |
376 | System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
377 |
378 |
379 | $this
380 |
381 |
382 | 2
383 |
384 |
385 | NoControl
386 |
387 |
388 | 301, 16
389 |
390 |
391 | 75, 23
392 |
393 |
394 | 5
395 |
396 |
397 | C&ancel
398 |
399 |
400 | btnCancel
401 |
402 |
403 | System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
404 |
405 |
406 | panel1
407 |
408 |
409 | 0
410 |
411 |
412 | NoControl
413 |
414 |
415 | 220, 16
416 |
417 |
418 | 75, 23
419 |
420 |
421 | 4
422 |
423 |
424 | &OK
425 |
426 |
427 | btnOK
428 |
429 |
430 | System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
431 |
432 |
433 | panel1
434 |
435 |
436 | 1
437 |
438 |
439 | True
440 |
441 |
442 | 6, 13
443 |
444 |
445 | 592, 310
446 |
447 |
448 |
449 | AAABAAIAEBAAAAAAIABoBAAAJgAAACAgAAAAACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAI
450 | AAAAAAAAAAAAAAAAAAAAAAAAAgAA/xYCAP8ZAQD/GQIA/xkCAP8ZAgD/GQIA/xkCAP8ZAgD/GQIA/xkC
451 | AP8ZAgD/GQIA/xkBAP8WAgD/AgAA/xcCAP/QHwD/5CkA/+QrAP/kKwD/5CsA/+QrAP/kKwD/5CsA/+Qr
452 | AP/kKwD/5CsA/+QrAP/kKQD/0B8A/xcCAP8ZAQD/5SkA//uEAP/mgwD/5IEA/+OBAP/igAD/4X4A/+F+
453 | AP/igAD/44EA/+SBAP/mgwD/+4QA/+UpAP8ZAQD/GQEA/+QqAP/lggD/LBsA/xkPAP8YDwD/FxEL/x8Z
454 | F/8fGRf/FxEL/xgPAP8ZDwD/LBsA/+WCAP/kKgD/GQEA/xkCAP/kKwD/44EA/xcOAP8AAAD/CAkK/3l6
455 | fP/c3d//3N3f/3l6fP8ICQr/AAAA/xcOAP/jgQD/5CsA/xkCAP8ZAgD/5CsA/+SBAP8ZDwD/AAAA/x8f
456 | H//e3t7/5+fn/+fn5//e3t7/Hx8f/wAAAP8ZDwD/5IEA/+QrAP8ZAgD/GQIA/+QrAP/kgQD/GQ8A/woK
457 | Cv+AgID/5ubm/y0tLf8tLS3/5ubm/4CAgP8KCgr/GQ8A/+SBAP/kKwD/GQIA/xkCAP/kKwD/44EA/xgP
458 | AP8eHh//3d3d/+Xl5f8XFxf/FxcX/+Xl5f/d3d3/Hh4f/xgPAP/jgQD/5CsA/xkCAP8ZAgD/5CsA/+J/
459 | AP8XEAv/e3x+//Dw8P/S0tL/FxcX/xcXF//S0tL/8PDw/3t8fv8XEAv/4n8A/+QrAP8ZAgD/GQIA/+Qr
460 | AP/gfgD/HhkX/9na3P/k5OT/KSkp/wICAv8CAgL/KSkp/+Tk5P/Z2tz/HhkX/+B+AP/kKwD/GQIA/xkC
461 | AP/kKwD/4H4A/x8aGf/i4+X/5OTk/xgYGP8AAAD/AAAA/xgYGP/k5OT/4uPl/x8aGf/gfgD/5CsA/xkC
462 | AP8ZAgD/5CsA/+B+AP8cFxf/yszQ/83O0P8VFhf/AAAA/wAAAP8VFhf/zc7Q/8rM0P8cFxf/4H4A/+Qr
463 | AP8ZAgD/GQEA/+QqAP/lggD/KxoC/x4YFv8eGBb/GA4C/xkPAP8ZDwD/GA4C/x4YFv8eGBb/KxoC/+WC
464 | AP/kKgD/GQEA/xkBAP/lKQD/+4QA/+aDAP/hfwD/4X4A/+OBAP/kgQD/5IEA/+OBAP/hfgD/4X8A/+aD
465 | AP/7hAD/5SkA/xkBAP8XAgD/0B8A/+QpAP/kKwD/5CsA/+QrAP/kKwD/5CsA/+QrAP/kKwD/5CsA/+Qr
466 | AP/kKwD/5CkA/9AfAP8XAgD/AgAA/xYCAP8ZAQD/GQIA/xkCAP8ZAgD/GQIA/xkCAP8ZAgD/GQIA/xkC
467 | AP8ZAgD/GQIA/xkBAP8WAgD/AgAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
468 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAgAAAAAAAAAAAAAAAA
469 | AAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
470 | AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
471 | AP8AAAD/AAAA/wAAAP8AAAD/CQAA/ygFAP8yBgD/MgQA/zIDAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIE
472 | AP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zID
473 | AP8yBAD/MgYA/ygFAP8JAAD/AAAA/wAAAP8nBAD/oBcA/8odAP/KFwD/yhUA/8oVAP/KFQD/yhUA/8oV
474 | AP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oV
475 | AP/KFQD/yhUA/8oXAP/KHQD/oBcA/ycEAP8AAAD/AAAA/zUGAP/YHQD//i4A//45AP/+QAD//kEA//5B
476 | AP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5B
477 | AP/+QQD//kEA//5BAP/+QAD//jkA//4uAP/YHQD/NQYA/wAAAP8AAAD/MwQA/84XAP/+OgD//msA//6F
478 | AP/+hwD//ocA//6HAP/+hwD//ocA//6HAP/+hwD//ocA//6HAP/+hwD//ocA//6HAP/+hwD//ocA//6H
479 | AP/+hwD//ocA//6HAP/+hwD//ocA//6FAP/+awD//joA/84XAP8zBAD/AAAA/wAAAP8yAwD/yhQA//5A
480 | AP/+hQD/85wA/9SEAP/KfAD/ynwA/8p8AP/KfAD/yXwA/8h6AP/GeAD/xHcA/8R2AP/EdgD/xHcA/8Z4
481 | AP/IegD/yXwA/8p8AP/KfAD/ynwA/8p8AP/UhAD/85wA//6FAP/+QAD/yhQA/zIDAP8AAAD/AAAA/zID
482 | AP/KFAD//kAA//6HAP/UhAD/WzkA/zIfAP8yHwD/Mh8A/zIfAP8xHgD/LBkA/ycUAP8iDwD/IA0A/yAN
483 | AP8iDwD/JxQA/ywZAP8xHgD/Mh8A/zIfAP8yHwD/Mh8A/1s5AP/UhAD//ocA//5AAP/KFAD/MgMA/wAA
484 | AP8AAAD/MgQA/8oVAP/+QQD//ocA/8Z5AP8jFgD/AAAA/wAAAP8AAAD/AAAA/wAAA/8ABA//CxMd/xsj
485 | Lf8gKDL/ICgy/xsjLf8LEx3/AAQP/wAAA/8AAAD/AAAA/wAAAP8AAAD/IxYA/8Z5AP/+hwD//kEA/8oV
486 | AP8yBAD/AAAA/wAAAP8yBAD/yhUA//5BAP/+hwD/yHsA/y0cAP8AAAD/AAAA/wAAAP8AAAD/CQsP/zs9
487 | Qf9zdnn/sLK2/8TGyv/Exsr/sLK2/3N2ef87PUH/CQsP/wAAAP8AAAD/AAAA/wAAAP8tHAD/yHsA//6H
488 | AP/+QQD/yhUA/zIEAP8AAAD/AAAA/zIEAP/KFQD//kEA//6HAP/KfAD/Mh8A/wAAAP8AAAD/AAAA/wAA
489 | AP8aGhr/d3d3/8DAwP/+/v7//v7+//7+/v/+/v7/wMDA/3d3d/8aGhr/AAAA/wAAAP8AAAD/AAAA/zIf
490 | AP/KfAD//ocA//5BAP/KFQD/MgQA/wAAAP8AAAD/MgQA/8oVAP/+QQD//ocA/8p8AP8yHwD/AAAA/wAA
491 | AP8AAAD/AAAA/yQkJP+ysrL/8fHx//7+/v/+/v7//v7+//7+/v/x8fH/srKy/yQkJP8AAAD/AAAA/wAA
492 | AP8AAAD/Mh8A/8p8AP/+hwD//kEA/8oVAP8yBAD/AAAA/wAAAP8yBAD/yhUA//5BAP/+hwD/ynwA/zIf
493 | AP8AAAD/AAAA/wMDA/8PDw//SUlJ/9vb2//8/Pz/1tbW/8rKyv/Kysr/1tbW//z8/P/b29v/SUlJ/w8P
494 | D/8DAwP/AAAA/wAAAP8yHwD/ynwA//6HAP/+QQD/yhUA/zIEAP8AAAD/AAAA/zIEAP/KFQD//kEA//6H
495 | AP/KfAD/Mh8A/wAAAP8AAAD/Dw8P/0FBQf+JiYn/8fHx/97e3v9eXl7/MjIy/zIyMv9eXl7/3t7e//Hx
496 | 8f+JiYn/QUFB/w8PD/8AAAD/AAAA/zIfAP/KfAD//ocA//5BAP/KFQD/MgQA/wAAAP8AAAD/MgQA/8oV
497 | AP/+QQD//ocA/8p8AP8yHwD/AAAA/wAAAP8aGhr/eHh4/8DAwP/9/f3/zs7O/yYmJv8AAAD/AAAA/yYm
498 | Jv/Ozs7//f39/8DAwP94eHj/Ghoa/wAAAP8AAAD/Mh8A/8p8AP/+hwD//kEA/8oVAP8yBAD/AAAA/wAA
499 | AP8yBAD/yhUA//5BAP/+hwD/ynwA/zIfAP8AAAD/AAAA/yUlJf+zs7P/7+/v//7+/v/Kysr/LS0t/wAA
500 | AP8AAAD/LS0t/8rKyv/+/v7/7+/v/7Ozs/8lJSX/AAAA/wAAAP8yHwD/ynwA//6HAP/+QQD/yhUA/zIE
501 | AP8AAAD/AAAA/zIEAP/KFQD//kEA//6HAP/JewD/MB0A/wAAA/8ODg//SEhI/9fX1//+/v7//v7+/87O
502 | zv8yMjL/AAAA/wAAAP8yMjL/zs7O//7+/v/+/v7/19fX/0hISP8ODg//AAAD/zAdAP/JewD//ocA//5B
503 | AP/KFQD/MgQA/wAAAP8AAAD/MgQA/8oVAP/+QQD//ocA/8d5AP8rGAD/AQYP/zw+Qf+EhIT/4uLi//7+
504 | /v/+/v7/2NjY/zU1Nf8AAAD/AAAA/zU1Nf/Y2Nj//v7+//7+/v/i4uL/hISE/zw+Qf8BBg//KxgA/8d5
505 | AP/+hwD//kEA/8oVAP8yBAD/AAAA/wAAAP8yBAD/yhUA//5BAP/+hwD/xngA/yYTAP8KER3/cnR4/7u7
506 | u//t7e3/8/Pz/9TU1P+goKD/Jycn/wAAAP8AAAD/Jycn/6CgoP/U1NT/8/Pz/+3t7f+7u7v/cnR4/woR
507 | Hf8mEwD/xngA//6HAP/+QQD/yhUA/zIEAP8AAAD/AAAA/zIEAP/KFQD//kEA//6HAP/EdgD/IQ4A/xoi
508 | LP+vsbX/7e3t//r6+v/U1NT/W1tb/ygoKP8JCQn/AAAA/wAAAP8JCQn/KCgo/1tbW//U1NT/+vr6/+3t
509 | 7f+vsbX/GiIs/yEOAP/EdgD//ocA//5BAP/KFQD/MgQA/wAAAP8AAAD/MgQA/8oVAP/+QQD//ocA/8N1
510 | AP8fDAD/ISoz/8vN0f/+/v7//v7+/8bGxv8jIyP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/IyMj/8bG
511 | xv/+/v7//v7+/8vN0f8hKjP/HwwA/8N1AP/+hwD//kEA/8oVAP8yBAD/AAAA/wAAAP8yBAD/yhUA//5B
512 | AP/+hwD/w3UA/x8MAP8gKDL/xsjM//7+/v/+/v7/yMjI/y0tLf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
513 | AP8tLS3/yMjI//7+/v/+/v7/xsjM/yAoMv8fDAD/w3UA//6HAP/+QQD/yhUA/zIEAP8AAAD/AAAA/zIE
514 | AP/KFQD//kEA//6HAP/DdQD/HwwA/yAoM//Iys7//v7+//7+/v/Ozs7/MzMz/wAAAP8AAAD/AAAA/wAA
515 | AP8AAAD/AAAA/zMzM//Ozs7//v7+//7+/v/Iys7/ICgz/x8MAP/DdQD//ocA//5BAP/KFQD/MgQA/wAA
516 | AP8AAAD/MgQA/8oVAP/+QQD//ocA/8N1AP8eCwD/Iio1/9HT2P/+/v7//v7+/9jY2P81NTX/AAAA/wAA
517 | AP8AAAD/AAAA/wAAAP8AAAD/NTU1/9jY2P/+/v7//v7+/9HT2P8iKjX/HgsA/8N1AP/+hwD//kEA/8oV
518 | AP8yBAD/AAAA/wAAAP8yBAD/yhUA//5BAP/+hwD/xHYA/x4NAP8THCf/lpqg/8TGyv/Exsr/mp2g/yEk
519 | J/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8hJCf/mp2g/8TGyv/Exsr/lpqg/xMcJ/8eDQD/xHYA//6H
520 | AP/+QQD/yhUA/zIEAP8AAAD/AAAA/zIEAP/KFQD//kEA//6HAP/FeAD/IBMA/wAACf8VHSj/ICgy/yAo
521 | Mv8WHSj/AAAJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAACf8WHSj/ICgy/yAoMv8VHSj/AAAJ/yAT
522 | AP/FeAD//ocA//5BAP/KFQD/MgQA/wAAAP8AAAD/MgMA/8oUAP/+QAD//ocA/9SFAP9cOgD/MBwA/yQR
523 | AP8gDQD/IA0A/yQRAP8vHAD/Mh8A/zIfAP8yHwD/Mh8A/zIfAP8yHwD/LxwA/yQRAP8gDQD/IA0A/yQR
524 | AP8wHAD/XDoA/9SFAP/+hwD//kAA/8oUAP8yAwD/AAAA/wAAAP8yAwD/yhQA//5AAP/+hQD/85wA/9SF
525 | AP/JewD/xXgA/8R2AP/EdgD/xXcA/8l7AP/KfAD/ynwA/8p8AP/KfAD/ynwA/8p8AP/JewD/xXcA/8R2
526 | AP/EdgD/xXgA/8l7AP/UhQD/85wA//6FAP/+QAD/yhQA/zIDAP8AAAD/AAAA/zMEAP/OFwD//joA//5r
527 | AP/+hQD//ocA//6HAP/+hwD//ocA//6HAP/+hwD//ocA//6HAP/+hwD//ocA//6HAP/+hwD//ocA//6H
528 | AP/+hwD//ocA//6HAP/+hwD//ocA//6HAP/+hQD//msA//46AP/OFwD/MwQA/wAAAP8AAAD/NQYA/9gd
529 | AP/+LgD//jkA//5AAP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5B
530 | AP/+QQD//kEA//5BAP/+QQD//kEA//5BAP/+QQD//kEA//5AAP/+OQD//i4A/9gdAP81BgD/AAAA/wAA
531 | AP8nBAD/oBcA/8odAP/KFwD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oV
532 | AP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oVAP/KFQD/yhUA/8oXAP/KHQD/oBcA/ycE
533 | AP8AAAD/AAAA/wkAAP8oBQD/MgYA/zIEAP8yAwD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIE
534 | AP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yBAD/MgQA/zIEAP8yAwD/MgQA/zIG
535 | AP8oBQD/CQAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
536 | AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
537 | AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
538 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
539 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
540 |
541 |
542 |
543 | Settings
544 |
545 |
546 | fileToolStripMenuItem
547 |
548 |
549 | System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
550 |
551 |
552 | saveSettingsToolStripMenuItem
553 |
554 |
555 | System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
556 |
557 |
558 | tsStatusLabel
559 |
560 |
561 | System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
562 |
563 |
564 | ttSettings
565 |
566 |
567 | System.Windows.Forms.ToolTip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
568 |
569 |
570 | helpToolStripMenuItem
571 |
572 |
573 | System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
574 |
575 |
576 | aboutToolStripMenuItem
577 |
578 |
579 | System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
580 |
581 |
582 | frmSettings
583 |
584 |
585 | System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
586 |
587 |
--------------------------------------------------------------------------------
/dotNet/VizWindow/VizWindow/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/kivy/komodoro.kv:
--------------------------------------------------------------------------------
1 | #:kivy 1.09
2 |
3 | # kivy language definition for the Komodoro application
4 | # http://yetanotherpointlesstechblog.blogspot.com
5 |
6 | #define the root window widget
7 | :
8 |
9 |
10 | #enable selected widgets to be bound to object properties
11 | # pythonPropertyName:widget_id
12 |
13 | displayLabel:display_label
14 | startButton:start_button
15 | stopButton:stop_button
16 |
17 |
18 | #application title
19 | Label:
20 | text:"Komodoro"
21 | center_x:root.width/2
22 | top:root.top
23 |
24 | #main time display
25 | Label:
26 | id:display_label
27 | text:"15:00"
28 | font_size:100
29 | center_x:root.width/2
30 | center_y:root.height/2
31 |
32 | #button bar
33 | BoxLayout:
34 |
35 | height:40
36 | width:root.width/4
37 | center_x:root.width/2
38 | spacing:20
39 |
40 | Button:
41 | id:start_button
42 | on_press:root.btnStart_OnPress(*args)
43 | text:"Start"
44 |
45 | Button:
46 | id:stop_button
47 | on_press:root.btnStop_OnPress(*args)
48 | disabled:True
49 | text:"Stop"
50 |
51 | Button:
52 | id:resetButton
53 | on_press:root.btnReset_OnPress(*args)
54 | text:"Reset"
55 |
56 |
57 |
--------------------------------------------------------------------------------
/kivy/komodoro/komodoro.py:
--------------------------------------------------------------------------------
1 | #
2 | #Kivy Pomodoro-like Application
3 | #http://yetanotherpointlesstechblog.blogspot.com
4 | #
5 |
6 | from kivy.app import App
7 | from kivy.uix.widget import Widget
8 | from kivy.properties import ObjectProperty
9 | from kivy.clock import Clock
10 |
11 |
12 | class Timer:
13 |
14 | """ a service that manages the time keeping logic for the
15 | application """
16 |
17 |
18 | TOTALTIME=15*60 #total time for a coutn down
19 | timerRunning=False #flag. True if the clock is running
20 | elapsedTimeSecs=0 #the number of seconds that have elapsed
21 |
22 |
23 | def startTimer(self):
24 | self.timerRunning =True
25 |
26 | def stopTimer(self):
27 | self.timerRunning = False
28 |
29 | def resetTimer(self):
30 | self.elapsedTimeSecs=0
31 |
32 | def tick(self):
33 |
34 | """updates the start of the timer.
35 | this method expects to be called once per second"""
36 |
37 | if(self.timerRunning):
38 | self.elapsedTimeSecs = self.elapsedTimeSecs+1
39 |
40 | def getTimeRemaining(self):
41 |
42 | """returns the amount of time remaining on the count down
43 | as a tuple (minutes, seconds)"""
44 |
45 | timeRemainingSecs = self.TOTALTIME-self.elapsedTimeSecs
46 | if(timeRemainingSecs<0):
47 | timeRemainingSecs=0
48 |
49 | minutes = int(timeRemainingSecs/60)
50 | seconds = int(timeRemainingSecs-minutes*60)
51 |
52 | return (minutes, seconds)
53 |
54 | def checkComplete(self):
55 | """returns true if the countown has finished"""
56 | (mins,secs)= self.getTimeRemaining()
57 | if( mins==0 and secs==0):
58 | return True
59 | else:
60 | return False
61 |
62 |
63 | class KomodoroMain(Widget):
64 |
65 | """ the root widget controller for our application"""
66 |
67 |
68 | timer = Timer() # instantiates the timer service
69 |
70 |
71 | #object properties are used by Kivy to bind
72 | #widgets defined in *.kv files so that they
73 | #can be accessed from python.
74 |
75 | displayLabel = ObjectProperty(None) #the count down display
76 | startButton = ObjectProperty(None) #the start button
77 | stopButton = ObjectProperty(None) #the stop button
78 |
79 |
80 | def update(self, stuff):
81 | """this method is a callback method that is called by the
82 | kivy scheduler one a second"""
83 |
84 | #update the timer service
85 | self.timer.tick()
86 |
87 | #if we have finished the countdown, notify the user
88 | #else display the time remaining
89 |
90 | if( self.timer.checkComplete()):
91 | self.displayLabel.text="Finished!"
92 | else:
93 | (mins,secs)=self.timer.getTimeRemaining()
94 | smins='{0:02d}'.format(mins)
95 | ssecs='{0:02d}'.format(secs)
96 | self.displayLabel.text=smins+':'+ssecs
97 |
98 |
99 | def btnStart_OnPress(self, value):
100 | self.timer.startTimer()
101 | self.startButton.disabled=True
102 | self.stopButton.disabled=False
103 |
104 | def btnStop_OnPress(self, value):
105 | self.timer.stopTimer()
106 | self.startButton.disabled=False
107 | self.stopButton.disabled=True
108 |
109 | def btnReset_OnPress(self, value):
110 | self.timer.resetTimer()
111 |
112 |
113 |
114 | class KomodoroApp(App):
115 |
116 | """creates a subclass of the Kivy App class to define our
117 | program as a Kivy application """
118 |
119 |
120 | def build(self):
121 | """called from Kivy. Build and return the root widget for
122 | our application and schedule updates every second"""
123 | main=KomodoroMain()
124 | Clock.schedule_interval(main.update, 1.0)
125 | return main
126 |
127 | if __name__== '__main__':
128 | KomodoroApp().run()
129 |
130 |
131 |
--------------------------------------------------------------------------------
/pi/scripts/realvncboot:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 | #! /etc/init.d/vncboot
3 | #
4 |
5 | cd ~pi
6 |
7 | case "$1" in
8 | start)
9 | echo "Starting VNC server"
10 | su pi -c '/usr/bin/vncserver -geometry 1776x1000'
11 | ;;
12 | stop)
13 | echo "Stopping VNC Server"
14 | pkill vncserver
15 | ;;
16 | *)
17 | echo "Usage: /etc/init.d/vncboot (start|stop)"
18 | exit 1
19 | ;;
20 | esac
21 |
22 | exit 0
23 |
24 |
--------------------------------------------------------------------------------
/pi/scripts/tmux/tmux.conf:
--------------------------------------------------------------------------------
1 | #minimal tmux.conf
2 |
3 | # C-b is not acceptable -- Vim uses it
4 | set-option -g prefix C-a
5 | bind-key C-a last-window
6 |
7 | # Start numbering at 1
8 | set -g base-index 1
9 |
10 | # Allows us to use C-a a to send commands to a TMUX session inside
11 | # another TMUX session
12 | bind-key a send-prefix
13 |
14 |
15 |
--------------------------------------------------------------------------------
/pi/scripts/vncboot:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 | #! /etc/init.d/vncboot
3 | #
4 |
5 | cd ~pi
6 |
7 | case "$1" in
8 | start)
9 | echo "Starting VNC server"
10 | su pi -c '/usr/bin/vncserver -geometry 1776x1000'
11 | ;;
12 | stop)
13 | echo "Stopping VNC Server"
14 | pkill vncserver
15 | ;;
16 | *)
17 | echo "Usage: /etc/init.d/vncboot (start|stop)"
18 | exit 1
19 | ;;
20 | esac
21 |
22 | exit 0
23 |
24 |
--------------------------------------------------------------------------------