aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfffw2015-02-08 16:12:36 +0800
committerfffw2015-02-08 16:12:36 +0800
commit0b3ba10b6e00fafdf72e2f6c41e530daac45476a (patch)
tree33a341d1fc8c3925a896f09b00154850b630b0c3
parentcc1b27b47c1436c3075c02f78e0004f202b6e0ba (diff)
downloadsystray-0b3ba10b6e00fafdf72e2f6c41e530daac45476a.tar.bz2
wrap MenuItem attributes as methods
-rw-r--r--example/main.go18
-rw-r--r--systray.go68
2 files changed, 61 insertions, 25 deletions
diff --git a/example/main.go b/example/main.go
index 944fb6f..83f2dad 100644
--- a/example/main.go
+++ b/example/main.go
@@ -37,20 +37,18 @@ func onReady() {
for {
select {
case <-mChange.Ch:
- mChange.Title = "I've Changed"
- mChange.Update()
+ mChange.SetTitle("I've Changed")
case <-mChecked.Ch:
- mChecked.Checked = !mChecked.Checked
- if mChecked.Checked {
- mChecked.Title = "Checked"
+ if mChecked.Checked() {
+ mChecked.Uncheck()
+ mChecked.SetTitle("Unchecked")
} else {
- mChecked.Title = "Unchecked"
+ mChecked.Check()
+ mChecked.SetTitle("Checked")
}
- mChecked.Update()
case <-mEnabled.Ch:
- mEnabled.Disabled = !mEnabled.Disabled
- mEnabled.Title = "Disabled"
- mEnabled.Update()
+ mChange.SetTitle("Disabled")
+ mEnabled.Disable()
case <-mUrl.Ch:
open.Run("https://www.getlantern.org")
case <-mQuit.Ch:
diff --git a/systray.go b/systray.go
index 24a10bb..3f5ef5f 100644
--- a/systray.go
+++ b/systray.go
@@ -26,14 +26,14 @@ import (
type MenuItem struct {
// id uniquely identify a menu item, not supposed to be modified
id string
- // Title is the text shown on menu item
- Title string
- // Tooltip is the text shown when pointing to menu item
- Tooltip string
- // Disabled menu item is grayed out and has no effect when clicked
- Disabled bool
- // Checked menu item has a tick before the title
- Checked bool
+ // title is the text shown on menu item
+ title string
+ // tooltip is the text shown when pointing to menu item
+ tooltip string
+ // disabled menu item is grayed out and has no effect when clicked
+ disabled bool
+ // checked menu item has a tick before the title
+ checked bool
// Ch is the channel which will be notified when the menu item is clicked
Ch chan interface{}
@@ -95,27 +95,65 @@ func AddMenuItem(title string, tooltip string) *MenuItem {
id := uuid.New()
item := &MenuItem{id, title, tooltip, false, false, nil}
item.Ch = make(chan interface{})
- item.Update()
+ item.update()
return item
}
-// Update propogates changes on a menu item to systray
-func (item *MenuItem) Update() {
+func (item *MenuItem) SetTitle(title string) {
+ item.title = title
+ item.update()
+}
+
+func (item *MenuItem) SetTooltip(tooltip string) {
+ item.tooltip = tooltip
+ item.update()
+}
+
+func (item *MenuItem) Disabled() bool {
+ return item.disabled
+}
+
+func (item *MenuItem) Enable() {
+ item.disabled = false
+ item.update()
+}
+
+func (item *MenuItem) Disable() {
+ item.disabled = true
+ item.update()
+}
+
+func (item *MenuItem) Checked() bool {
+ return item.checked
+}
+
+func (item *MenuItem) Check() {
+ item.checked = true
+ item.update()
+}
+
+func (item *MenuItem) Uncheck() {
+ item.checked = false
+ item.update()
+}
+
+// update propogates changes on a menu item to systray
+func (item *MenuItem) update() {
menuItemsLock.Lock()
defer menuItemsLock.Unlock()
menuItems[item.id] = item
var disabled C.short = 0
- if item.Disabled {
+ if item.disabled {
disabled = 1
}
var checked C.short = 0
- if item.Checked {
+ if item.checked {
checked = 1
}
C.add_or_update_menu_item(
C.CString(item.id),
- C.CString(item.Title),
- C.CString(item.Tooltip),
+ C.CString(item.title),
+ C.CString(item.tooltip),
disabled,
checked,
)