1package gui
2
3import (
4	"sync"
5
6	"github.com/coyim/coyim/config"
7	"github.com/coyim/coyim/i18n"
8	"github.com/coyim/gotk3adapter/glibi"
9	"github.com/coyim/gotk3adapter/gtki"
10)
11
12var (
13	// TODO: shouldn't this be specific to the account ID in question?
14	accountChangedSignal glibi.Signal
15)
16
17var accountsLock sync.Mutex
18
19func (u *gtkUI) buildStaticAccountsMenu(submenu gtki.Menu) {
20	connectAutomaticallyItem, _ := g.gtk.CheckMenuItemNewWithMnemonic(i18n.Local("Connect On _Startup"))
21	u.config.WhenLoaded(func(a *config.ApplicationConfig) {
22		connectAutomaticallyItem.SetActive(a.ConnectAutomatically)
23	})
24
25	connectAutomaticallyItem.Connect("activate", func() {
26		u.setConnectAllAutomatically(connectAutomaticallyItem.GetActive())
27	})
28	submenu.Append(connectAutomaticallyItem)
29
30	connectAllMenu, _ := g.gtk.MenuItemNewWithMnemonic(i18n.Local("_Connect All"))
31	connectAllMenu.Connect("activate", func() { u.connectAllAutomatics(true) })
32	submenu.Append(connectAllMenu)
33
34	disconnectAllMenu, _ := g.gtk.MenuItemNewWithMnemonic(i18n.Local("_Disconnect All"))
35	disconnectAllMenu.Connect("activate", u.disconnectAll)
36	submenu.Append(disconnectAllMenu)
37
38	sep2, _ := g.gtk.SeparatorMenuItemNew()
39	submenu.Append(sep2)
40
41	registerAccMenu, _ := g.gtk.MenuItemNewWithMnemonic(i18n.Local("_New Account"))
42	registerAccMenu.Connect("activate", u.showServerSelectionWindow)
43	submenu.Append(registerAccMenu)
44
45	addAccMenu, _ := g.gtk.MenuItemNewWithMnemonic(i18n.Local("_Add Account"))
46	addAccMenu.Connect("activate", u.showAddAccountWindow)
47	submenu.Append(addAccMenu)
48
49	importMenu, _ := g.gtk.MenuItemNewWithMnemonic(i18n.Local("_Import Account"))
50	importMenu.Connect("activate", u.runImporter)
51	submenu.Append(importMenu)
52
53}
54
55func (u *gtkUI) buildAccountsMenu() {
56	accountsLock.Lock()
57	defer accountsLock.Unlock()
58
59	submenu, _ := g.gtk.MenuNew()
60
61	allAccounts := u.getAllAccounts()
62	for _, account := range allAccounts {
63		account.appendMenuTo(u, submenu)
64	}
65
66	if len(allAccounts) > 0 {
67		sep, _ := g.gtk.SeparatorMenuItemNew()
68		submenu.Append(sep)
69	}
70
71	u.buildStaticAccountsMenu(submenu)
72
73	submenu.ShowAll()
74
75	u.accountsMenu.SetSubmenu(submenu)
76}
77