Changeset 5638 for pjproject/trunk/pjsip-apps/src/pygui/buddy.py
- Timestamp:
- Aug 2, 2017 9:45:09 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjsip-apps/src/pygui/buddy.py
r4704 r5638 21 21 import sys 22 22 if sys.version_info[0] >= 3: # Python 3 23 24 25 23 import tkinter as tk 24 from tkinter import ttk 25 from tkinter import messagebox as msgbox 26 26 else: 27 28 29 27 import Tkinter as tk 28 import tkMessageBox as msgbox 29 import ttk 30 30 31 31 import random … … 36 36 # Buddy class 37 37 class Buddy(pj.Buddy): 38 39 40 41 42 43 44 45 46 38 """ 39 High level Python Buddy object, derived from pjsua2's Buddy object. 40 """ 41 def __init__(self, app): 42 pj.Buddy.__init__(self) 43 self.app = app 44 self.randId = random.randint(1, 9999) 45 self.cfg = None 46 self.account = None 47 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 48 def statusText(self): 49 bi = self.getInfo() 50 status = '' 51 if bi.subState == pj.PJSIP_EVSUB_STATE_ACTIVE: 52 if bi.presStatus.status == pj.PJSUA_BUDDY_STATUS_ONLINE: 53 status = bi.presStatus.statusText 54 if not status: 55 status = 'Online' 56 elif bi.presStatus.status == pj.PJSUA_BUDDY_STATUS_OFFLINE: 57 status = 'Offline' 58 else: 59 status = 'Unknown' 60 return status 61 62 def onBuddyState(self): 63 self.app.updateBuddy(self) 64 64 65 65 class SettingDialog(tk.Toplevel): 66 """ 67 This implements buddy settings dialog to manipulate buddy settings. 68 """ 69 def __init__(self, parent, cfg): 70 tk.Toplevel.__init__(self, parent) 71 self.transient(parent) 72 self.parent = parent 73 self.geometry("+100+100") 74 self.title('Buddy settings') 75 76 self.frm = ttk.Frame(self) 77 self.frm.pack(expand='yes', fill='both') 78 79 self.isOk = False 80 self.cfg = cfg 81 82 self.createWidgets() 83 84 def doModal(self): 85 if self.parent: 86 self.parent.wait_window(self) 87 else: 88 self.wait_window(self) 89 return self.isOk 90 91 def createWidgets(self): 92 # The notebook 93 self.frm.rowconfigure(0, weight=1) 94 self.frm.rowconfigure(1, weight=0) 95 self.frm.columnconfigure(0, weight=1) 96 self.frm.columnconfigure(1, weight=1) 97 self.wTab = ttk.Notebook(self.frm) 98 self.wTab.grid(column=0, row=0, columnspan=2, padx=5, pady=5, sticky=tk.N+tk.S+tk.W+tk.E) 99 100 # Main buttons 101 btnOk = ttk.Button(self.frm, text='Ok', command=self.onOk) 102 btnOk.grid(column=0, row=1, sticky=tk.E, padx=20, pady=10) 103 btnCancel = ttk.Button(self.frm, text='Cancel', command=self.onCancel) 104 btnCancel.grid(column=1, row=1, sticky=tk.W, padx=20, pady=10) 105 106 # Tabs 107 self.createBasicTab() 108 109 def createBasicTab(self): 110 # Prepare the variables to set/receive values from GUI 111 self.cfgUri = tk.StringVar() 112 self.cfgUri.set( self.cfg.uri ) 113 self.cfgSubscribe = tk.IntVar() 114 self.cfgSubscribe.set(self.cfg.subscribe) 115 116 # Build the tab page 117 frm = ttk.Frame(self.frm) 118 frm.columnconfigure(0, weight=1) 119 frm.columnconfigure(1, weight=2) 120 row = 0 121 ttk.Label(frm, text='URI:').grid(row=row, column=0, sticky=tk.E, pady=2) 122 ttk.Entry(frm, textvariable=self.cfgUri, width=40).grid(row=row, column=1, sticky=tk.W+tk.E, padx=6) 123 row += 1 124 ttk.Checkbutton(frm, text='Subscribe presence', variable=self.cfgSubscribe).grid(row=row, column=1, sticky=tk.W, padx=6, pady=2) 66 """ 67 This implements buddy settings dialog to manipulate buddy settings. 68 """ 69 def __init__(self, parent, cfg): 70 tk.Toplevel.__init__(self, parent) 71 self.transient(parent) 72 self.parent = parent 73 self.geometry("+100+100") 74 self.title('Buddy settings') 125 75 126 self.wTab.add(frm, text='Basic Settings') 127 128 129 def onOk(self): 130 # Check basic settings 131 errors = ""; 132 if self.cfgUri.get(): 133 if not endpoint.validateSipUri(self.cfgUri.get()): 134 errors += "Invalid Buddy URI: '%s'\n" % (self.cfgUri.get()) 135 136 if errors: 137 msgbox.showerror("Error detected:", errors) 138 return 139 140 # Basic settings 141 self.cfg.uri = self.cfgUri.get() 142 self.cfg.subscribe = self.cfgSubscribe.get() 143 144 self.isOk = True 145 self.destroy() 146 147 def onCancel(self): 148 self.destroy() 76 self.frm = ttk.Frame(self) 77 self.frm.pack(expand='yes', fill='both') 78 79 self.isOk = False 80 self.cfg = cfg 81 82 self.createWidgets() 83 84 def doModal(self): 85 if self.parent: 86 self.parent.wait_window(self) 87 else: 88 self.wait_window(self) 89 return self.isOk 90 91 def createWidgets(self): 92 # The notebook 93 self.frm.rowconfigure(0, weight=1) 94 self.frm.rowconfigure(1, weight=0) 95 self.frm.columnconfigure(0, weight=1) 96 self.frm.columnconfigure(1, weight=1) 97 self.wTab = ttk.Notebook(self.frm) 98 self.wTab.grid(column=0, row=0, columnspan=2, padx=5, pady=5, sticky=tk.N+tk.S+tk.W+tk.E) 99 100 # Main buttons 101 btnOk = ttk.Button(self.frm, text='Ok', command=self.onOk) 102 btnOk.grid(column=0, row=1, sticky=tk.E, padx=20, pady=10) 103 btnCancel = ttk.Button(self.frm, text='Cancel', command=self.onCancel) 104 btnCancel.grid(column=1, row=1, sticky=tk.W, padx=20, pady=10) 105 106 # Tabs 107 self.createBasicTab() 108 109 def createBasicTab(self): 110 # Prepare the variables to set/receive values from GUI 111 self.cfgUri = tk.StringVar() 112 self.cfgUri.set( self.cfg.uri ) 113 self.cfgSubscribe = tk.IntVar() 114 self.cfgSubscribe.set(self.cfg.subscribe) 115 116 # Build the tab page 117 frm = ttk.Frame(self.frm) 118 frm.columnconfigure(0, weight=1) 119 frm.columnconfigure(1, weight=2) 120 row = 0 121 ttk.Label(frm, text='URI:').grid(row=row, column=0, sticky=tk.E, pady=2) 122 ttk.Entry(frm, textvariable=self.cfgUri, width=40).grid(row=row, column=1, sticky=tk.W+tk.E, padx=6) 123 row += 1 124 ttk.Checkbutton(frm, text='Subscribe presence', variable=self.cfgSubscribe).grid(row=row, column=1, sticky=tk.W, padx=6, pady=2) 125 126 self.wTab.add(frm, text='Basic Settings') 127 128 129 def onOk(self): 130 # Check basic settings 131 errors = ""; 132 if self.cfgUri.get(): 133 if not endpoint.validateSipUri(self.cfgUri.get()): 134 errors += "Invalid Buddy URI: '%s'\n" % (self.cfgUri.get()) 135 136 if errors: 137 msgbox.showerror("Error detected:", errors) 138 return 139 140 # Basic settings 141 self.cfg.uri = self.cfgUri.get() 142 self.cfg.subscribe = self.cfgSubscribe.get() 143 144 self.isOk = True 145 self.destroy() 146 147 def onCancel(self): 148 self.destroy() 149 149 150 150 151 151 if __name__ == '__main__': 152 152 application.main()
Note: See TracChangeset
for help on using the changeset viewer.