def tableview_accessory_button_tapped(self, tableview, section, row): entry = self.feed.entries[row] fields = [] for name in ['title', 'link', 'description', 'published', 'id']: if name in entry: field = { 'type': 'text', 'title': name.title(), 'value': entry[name] } fields.append(field) dialogs.form_dialog(title='Info', fields=fields)
def run(self, input=''): formDict = [{ 'type': 'text', 'title': 'Title', 'key': 'title' }, { 'type': 'text', 'title': 'Street', 'autocorrection': False }, { 'type': 'text', 'title': 'City', 'autocorrection': False }, { 'type': 'text', 'title': 'Country', 'autocorrection': False }, { 'type': 'text', 'title': 'Zip Postcode', 'key': 'ZIP', 'autocorrection': False }] address = dialogs.form_dialog(title='Address Input', fields=formDict) ev = ElementValue(type=self.get_output_type(), value=address) self.status = 'complete' return ev
def setup(): d = [{'title':'Host', 'type':'text','autocorrection':False, 'autocapitalization':ui.AUTOCAPITALIZE_NONE,'key':'host'}, {'title':'Domain', 'type':'text', 'autocorrection':False, 'autocapitalization':ui.AUTOCAPITALIZE_NONE,'placeholder':'org','key':'domain'}, {'title':'Ident', 'type':'text', 'autocorrection':False, 'autocapitalization':ui.AUTOCAPITALIZE_NONE,'key':'ident'}, {'title':'Description', 'type':'text', 'autocorrection':True, 'key':'hdesc'}, {'title':'Organization', 'type':'text', 'autocorrection':False, 'autocapitalization':ui.AUTOCAPITALIZE_NONE,'key':'horg'}, {'title':'Name', 'type':'text', 'autocorrection':False, 'autocapitalization':ui.AUTOCAPITALIZE_NONE, 'key':'hname'}] r = dialogs.form_dialog('Setup',d) if r == None: print 'Canceled' return # remove keys with empty values for i in r.keys(): if type(r[i]) == str: if len(r[i]) == 0: r.__delitem__(i) # Check to make sure we got a host name if not r.__contains__('host'): print 'No host name' return return r
def wifi(payload): form = [{ 'title': 'ssid', 'type': 'text', 'key': 'ssid', 'autocorrection': False, 'autocapitalization': ui.AUTOCAPITALIZE_NONE }, { 'title': 'Hidden', 'key': 'hidden', 'type': 'switch', 'valie': True }, { 'title': 'Autojpin', 'key': 'autojoin', 'type': 'switch', 'valie': True }, { 'title': 'Hotspot', 'key': 'hotspot', 'type': 'switch', 'valie': False }, { 'title': 'Encryption type', 'key': 'encryption', 'type': 'text', 'autocorrection': False }, { 'title': 'Password', 'key': 'pw', 'type': 'password' }] + common_form returns = dialogs.form_dialog('Wifi', form) if returns: payload.wifi(**stripestring(returns))
def change_settings(self, sender): bg_hex = self.background_color[0:3] bg_hex = '#' + ''.join( [hex(ceil(num * 255))[2:].zfill(2) for num in bg_hex]) tc_hex = self['textview1'].text_color[0:3] tc_hex = '#' + ''.join( [hex(ceil(num * 255))[2:].zfill(2) for num in tc_hex]) new_sets = form_dialog(title='Settings', fields=[{ 'type': 'text', 'title': 'Background Color', 'autocapitalization': AUTOCAPITALIZE_ALL, 'value': bg_hex }, { 'type': 'text', 'title': 'Text Color', 'autocapitalization': AUTOCAPITALIZE_ALL, 'value': tc_hex }]) if new_sets: self.background_color = new_sets['Background Color'] self['textview1'].text_color = new_sets['Text Color'] with open('.settings', 'w') as f: f.write(new_sets['Background Color'] + '\n' + new_sets['Text Color'])
def main(): today = date.today() friday = today + timedelta((4 - today.weekday()) % 7) args = dialogs.form_dialog(title="Movie", fields=[ { 'type': 'text', 'key': 'title', 'title': 'Movie Title', 'placeholder': 'What\'s the movie?', }, { 'type': 'date', 'key': 'date', 'title': 'First day of movie', 'value': friday, }, ]) if not args: sys.exit(0) args['date'] = args['date'].date() get_movie(title=args['title'], date=args['date'], year=None) print('done!')
def fill_placeholders(action_in): # Find placeholders known_placeholders = set() placeholders = [] fields = [] for placeholder_match in re.finditer(u"«(.+?)»", action_in): placeholder = placeholder_match.group(1) if placeholder not in known_placeholders: known_placeholders.add(placeholder) placeholders.append(placeholder) fields.append({'type': 'text', 'title': placeholder, 'key': placeholder}) action_out = action_in # Substitute the placeholders if len(placeholders) == 0: if dialogs.alert(u"No template placeholders were found.", u""" If your project text has placeholders (that look like «this»), this script will prompt for values you'd like to substitute for them. """, u"Continue") != 1: return else: # print fields values = dialogs.form_dialog(title='', fields=fields, sections=None) # print values if values: for key in values: action_out = re.sub(u"«" + key + u"»", values[key], action_out) else: return None return action_out
def multiple_selection_list_dialog(lst): form_list_of_dicts = [] for item in lst: form_list_of_dicts.append( dict(type='check', title=item, key=item, value=False)) result = dialogs.form_dialog(title='Multiple Selection List', fields=form_list_of_dicts) return [i for i in result if result[i]] if result else None
def but_action(sender): fields = [{'key' : 'name', 'type' : 'text', 'value' : 'Name your reminder'},] result=dialogs.form_dialog(title='Create a Reminder', fields=fields) r = reminders.Reminder() r.title = result['name'] r.save() segment.selected_index = 0 grabbed()
def add_feed_url(self, sender): url = 'http://skin-horse.com/feed/' fields = [{'type': 'url', 'title': 'URL', 'key': 'url', 'value': url}] input = dialogs.form_dialog(title='Add Feed', fields=fields) if input is None or input['url'] == '': return self.feeddata.add_feed_url(input['url']) self.feeddata.save() self.superview.reload_data()
def textview_should_begin_editing(self,textview): if(textview.placeholder=='Bank Bal'): field1={'type':'number','key':'balance','title':'Current Balance: ','tint_color':'#346511','value':'{:.2f}'.format(float(textview.text))} field1_1={'type':'date','key':'bal_date','title':'Deposit Date: ','tint_color':'#000000', 'value': (datetime.strptime(self.acc_list[0].bank_date,'%Y-%m-%d'))} field2={'type':'number','key':'deposit1','title':'Deposit Amount: ','value':'{:.2f}'.format( float(self.acc_list[1].bank_balance))} field3={'type':'date','key':'dep1_date','title':'Deposit Date: ','tint_color':'#000000', 'value': (datetime.strptime(self.acc_list[1].bank_date,'%Y,%m,%d'))} field4={'type':'number','key':'deposit2','title':'Deposit Amount: ','value':'{:.2f}'.format(float(self.acc_list[2].bank_balance))} field5={'type':'date','key':'dep2_date','title':'Deposit Date: ' ,'tint_color':'#000000', 'value': (datetime.strptime(self.acc_list[2].bank_date,'%Y,%m,%d'))} field6={'type':'number','key':'deposit3','title':'Deposit Amount: ','value':'{:.2f}'.format(float(self.acc_list[3].bank_balance))} field7={'type':'date','key':'dep3_date','title':'Deposit Date: ' ,'tint_color':'#000000', 'value': (datetime.strptime(self.acc_list[3].bank_date,'%Y,%m,%d'))} field8={'type':'number','key':'deposit4','title':'Deposit Amount: ','value':'{:.2f}'.format(float(self.acc_list[4].bank_balance))} field9={'type':'date','key':'dep4_date','title':'Deposit Date: ' ,'tint_color':'#000000', 'value': (datetime.strptime(self.acc_list[4].bank_date,'%Y,%m,%d'))} t1=[field1,field1_1] t2=[field2,field3] t3=[field4,field5] t4=[field6,field7] t5=[field8,field9] s1='Current Balance',t1 s2='Recurring Deposit 1: (Monthly)',t2 s3='Recurring Deposit 2: (monthly)',t3 s4='Recurring Deposit 3: (every 2 weeks)',t4 s5='Recurring Deposit 4: (monthly)',t5 sect=(s1,s2,s3,s4,s5) answer=dialogs.form_dialog(title='Bank Balance Settings',sections=sect,done_button_title='Finished') if (not(answer==None)): d_bal = answer['balance'] d_bal_date = answer['bal_date'] d_dep1 = answer['deposit1'] d_dep1_date = answer['dep1_date'] d_dep2 = answer['deposit2'] d_dep2_date = answer['dep2_date'] d_dep3 = answer['deposit3'] d_dep3_date = answer['dep3_date'] d_dep4 = answer['deposit4'] d_dep4_date = answer['dep4_date'] # fill account list bank balaces # dates require conversion to string # prior to csv write self.acc_list[0].bank_balance= d_bal self.acc_list[0].bank_date= date.strftime(d_bal_date,'%Y-%m-%d') self.acc_list[1].bank_balance= d_dep1 self.acc_list[1].bank_date= date.strftime(d_dep1_date,'%Y,%m,%d') self.acc_list[2].bank_balance=d_dep2 self.acc_list[2].bank_date= date.strftime(d_dep2_date,'%Y,%m,%d') self.acc_list[3].bank_balance=d_dep3 self.acc_list[3].bank_date= date.strftime(d_dep3_date,'%Y,%m,%d') self.acc_list[4].bank_balance=d_dep4 self.acc_list[4].bank_date= date.strftime(d_dep4_date,'%Y,%m,%d') # update balance on gui self.set_needs_display()
def run(self, input=''): formDict = [{'type':'text','title':'Title','key':'title'}, {'type':'text', 'title':'Street', 'autocorrection':False}, {'type':'text', 'title':'City', 'autocorrection':False}, {'type':'text', 'title':'Country', 'autocorrection':False}, {'type':'text', 'title':'Zip Postcode','key':'ZIP', 'autocorrection':False}] address = dialogs.form_dialog(title='Address Input', fields=formDict) ev = ElementValue(type = self.get_output_type(), value = address) self.status = 'complete' return ev
def show_input_dialog(self): return dialogs.form_dialog(fields=[{ 'type': 'text', 'key': 'account', 'title': 'account' }, { 'type': 'text', 'key': 'key', 'title': 'secret key' }])
def tableview_accessory_button_tapped(self, tableview, section, row): feed = self.feeds[row] fields = [{'type': 'url', 'title': 'URL', 'value': feed.url}] if feed.error: fields.append({ 'type': 'text', 'title': 'Error', 'value': str(feed.error) }) else: for name in ['title', 'link', 'description', 'published']: if name in feed.feed: field = { 'type': 'text', 'title': name.title(), 'value': feed.feed[name] } fields.append(field) dialogs.form_dialog(title='Info', fields=fields)
def tableview_did_select(self, tableview, section, row): global store # Called when a row was selected event = self.events_array[row] alarms = event.alarms() fields = [] if alarms: i = 1 for alarm in alarms: al = int(alarm.relativeOffset() / 60) fields.append({'title':'n° '+str(i),'key':'alarm'+str(i),'type':'number','value':str(al)}) i += 1 else: i = 1 # add a blank alarm for a new one n = i al = 0 fields.append({'title': 'n°' + str(n), 'key': 'alarm' + str(n), 'type': 'number', 'value': str(al)}) als = dialogs.form_dialog(title='Alarmes (en minutes)', done_button_title='ok', fields=fields, sections=None) modif = False if als: # Done pressed i = 1 while i <= n: al = int(als['alarm' + str(i)]) * 60 alold = int(alarm.relativeOffset() / 60) if i < n else 0 if al != alold: modif = True if i < n: # remove alarm event.removeAlarm_(alarms[i-1]) if al: # add non zero alarm alarm = ObjCClass('EKAlarm').alarmWithRelativeOffset_(al) event.addAlarm_(alarm) i += 1 if modif: span = 0 # assume only this instance if event.hasRecurrenceRules(): but = console.alert('Event is recurrent', 'modify this instance only?', 'Yes', 'No', hide_cancel_button=True) if but != 1: span = 1 # all instances # store modified event in calendar store.saveEvent_span_error_(event, span, None) # store modified in memory, reason why we use a normal array instead of a NSarray self.events_array[row] = event
def wifi(payload): form = [{'title':'ssid', 'type':'text', 'key':'ssid', 'autocorrection':False, 'autocapitalization':ui.AUTOCAPITALIZE_NONE}, {'title':'Hidden', 'key':'hidden', 'type':'switch', 'valie':True}, {'title':'Autojpin', 'key':'autojoin', 'type':'switch', 'valie':True}, {'title':'Hotspot', 'key':'hotspot', 'type':'switch', 'valie':False}, {'title':'Encryption type', 'key':'encryption', 'type':'text', 'autocorrection':False}, {'title':'Password', 'key':'pw', 'type':'password'}] + common_form returns = dialogs.form_dialog('Wifi',form) if returns: payload.wifi(**stripestring(returns))
def add_item(sender): values = dialogs.form_dialog(title='Add Item', fields=[{ 'type': 'text', 'title': 'Key' }, { 'type': 'text', 'title': 'Value' }]) if not values == None: dbo.dictionary[values['Key']] = values['Value'] table_view.reload()
def settings_action(self, sender): Dialog_List =[{'type':'text','title':'RSS Feed 1','key':'feeds', 'value': config.feeds}, #{'type':'text','title':'RSS Feed 2','key':'feed2', 'value': config.feed_2}, {'type': 'switch', 'title': 'Twitter Feed', 'key':'twitter', 'value': config.twitter_mode},] settings = dialogs.form_dialog(title='Settings', fields=Dialog_List) console.show_activity() #if settings is None: #print 'Cancelled' #else: #self.updatepy(settings['feed1'], settings['feed2'], settings['twitter']) self.update_news() console.hide_activity()
def webclip(payload): form = [{'title':'URL','type':'url','key':'url'}, {'title':'Title','key':'label','type':'text'}, {'title':'Removable','key':'removable','type':'switch','value':True}, {'title':'Fullscreen','key':'fullscreen','type':'switch','value':False}, {'title':'Precomposed','key':'precomposed','type':'switch','value':True}, {'title':'image','key':'icon','type':'switch','value':False}] + common_form returns = dialogs.form_dialog('Webclip',form) image = None if returns['icon']: returns['icon'] = photos.pick_image(True) if returns: payload.webclip(**returns)
def webclip(payload): form = [{'title':'URL','type':'url','key':'url'}, {'title':'Title','key':'label','type':'text'}, {'title':'Removable','key':'removable','type':'switch','value':True}, {'title':'Fullscreen','key':'fullscreen','type':'switch','value':False}, {'title':'Precomposed','key':'precomposed','type':'switch','value':True}, {'title':'image','key':'icon','type':'switch','value':False}] + common_form returns = dialogs.form_dialog('Webclip',form) image = None if returns['icon']: returns['icon'] = photos.pick_image(True) if returns: payload.webclip(**stripestring(returns))
def setup_configuration(self): if self.c.get_config(key='reset'): if not ispythonista: logging.info( 'Get your API key from the hotspotsystem website') return_dict = dialogs.form_dialog( title='Input to hotspotsystem', fields=[ { 'key': 'API_KEY', 'type': 'password', 'title': 'API Key', 'value': "" }, { 'key': 'LOC_ID', 'type': 'number', 'title': 'Location id nr [Loc. ID]', 'value': '1' }, { 'key': 'package', 'type': 'number', 'title': 'Voucher package id nr', 'value': '1' }, { 'key': 'reset_code', 'type': 'number', 'title': 'Safety code for resetting app', 'value': '1234' }, ], sections=None) API_KEY = return_dict['API_KEY'] self.c.write_config('API_KEY', API_KEY) LOC_ID = return_dict['LOC_ID'] if not LOC_ID.isdigit(): LOC_ID = "1" self.c.write_config('LOC_ID', LOC_ID) package = return_dict['package'] if not package.isdigit(): package = "1" self.c.write_config('package', package) reset_code = return_dict['reset_code'] self.c.write_config('reset_code', reset_code)
def edit_item(key, value): values = dialogs.form_dialog(title='Edit Item', fields=[{ 'type': 'text', 'title': 'Key', 'value': key }, { 'type': 'text', 'title': 'Value', 'value': value }]) if not values == None: dbo.dictionary[values['Key']] = values['Value'] table_view.reload()
def add_repo(self, sender): """ Add a new repo to be downloaded and/or saved. """ q = [{ 'title': "Github User", 'icon': 'iob:ios7_person_32', 'key': 'user', 'value': '', 'type': 'text' }, { 'title': 'Repo Name', 'icon': 'iob:code_working_32', 'key': 'repo', 'type': 'text' }, { 'title': 'Save', 'icon': 'iob:briefcase_32', 'key': 'save', 'value': True, 'type': 'switch' }, { 'title': 'Download Now', 'icon': 'iob:code_download_32', 'key': 'download', 'value': True, 'type': 'switch' }] new = dialogs.form_dialog('Add Repo', q) if new: user = str(new['user']).strip() repo = str(new['repo']).strip() url_format = 'https://www.github.com/{user}/{repo}/archive/master.zip' url = url_format.format(user=user, repo=repo) title = '{}/{}'.format(user, repo) item = { 'title': title, 'image': 'iob:code_download_32', 'accessory_type': 'disclosure_indicator', 'url': url } if new['save']: self.saved.append(item) self.save_saved() self.tv.data_source = ui.ListDataSource(self.saved) self.tv.reload() if new['download']: self.download_now(url)
def setup(): d = [{ 'title': 'Host', 'type': 'text', 'autocorrection': False, 'autocapitalization': ui.AUTOCAPITALIZE_NONE, 'key': 'host' }, { 'title': 'Domain', 'type': 'text', 'autocorrection': False, 'autocapitalization': ui.AUTOCAPITALIZE_NONE, 'placeholder': 'org', 'key': 'domain' }, { 'title': 'Ident', 'type': 'text', 'autocorrection': False, 'autocapitalization': ui.AUTOCAPITALIZE_NONE, 'key': 'ident' }, { 'title': 'Description', 'type': 'text', 'autocorrection': True, 'key': 'hdesc' }, { 'title': 'Organization', 'type': 'text', 'autocorrection': False, 'autocapitalization': ui.AUTOCAPITALIZE_NONE, 'key': 'horg' }, { 'title': 'Name', 'type': 'text', 'autocorrection': False, 'autocapitalization': ui.AUTOCAPITALIZE_NONE, 'key': 'hname' }] r = dialogs.form_dialog('Setup', d) if r == None: print('Canceled') return # remove keys with empty values r = {k: v for k, v in r.items() if v is not '' or None} # Check to make sure we got a host name if 'host' in r: return r print('No host name') return None
def __init__(self): config = keychain.get_password('Movie Diary', 'Config') if config == None: moviedb_api = keychain.get_password('MovieDB', 'API') airtable_api = keychain.get_password('Airtable', 'API') airtable_db = keychain.get_password('Airtable', 'Movie Diary') airtable_table = keychain.get_password('Airtable', 'Movie Diary Table') if airtable_api == None or airtable_db == None or airtable_table == None: airtable_api, airtable_db, airtable_table = self.getairtable(airtable_api, airtable_db, airtable_table) config = dialogs.form_dialog(title='Movie Diary Configuration', sections=[('MovieDB', [{'type': 'text', 'key': 'moviedb_api', 'value': moviedb_api if moviedb_api is not None else '84cef43ccf02b1ba6093c9694ed671c9', 'title': 'MovieDB API Token'}]), ('Airtable', [{'type': 'text', 'key': 'airtable_api', 'value': airtable_api, 'title': 'Airtable API Key'}, {'type': 'text', 'key': 'airtable_db', 'value': airtable_db, 'title': 'Airtable database ID'}, {'type': 'text', 'key': 'airtable_table', 'value': airtable_table if airtable_table is not None else 'Table 1', 'title': 'Airtable table name'}]), ('Custom', [{'type': 'switch', 'key': 'set_date_manually', 'value': False, 'title': 'Set date manually'}, {'type': 'switch', 'key': 'add_time_to_date', 'value': False, 'title': 'Add time to date'}]),('Extra Fields', [{'type': 'switch', 'key': 'directors_field', 'value': True, 'title': 'Directors'}, {'type': 'switch', 'key': 'genres_field', 'value': False, 'title': 'Genres'}, {'type': 'switch', 'key': 'runtime_field', 'value': False, 'title': 'Runtime'}, {'type': 'switch', 'key': 'cast_field', 'value': False, 'title': 'Cast'}, {'type': 'switch', 'key': 'imdb_field', 'value': False, 'title': 'IMDB URL'}]),('Fields', [{'type':'text', 'key': 'title_field_name', 'value': 'Title', 'title': 'Title'}, {'type':'text', 'key': 'overview_field_name', 'value': 'Overview', 'title': 'Overview'}, {'type':'text', 'key': 'rating_field_name', 'value': 'Rating', 'title': 'Rating'}, {'type':'text', 'key': 'date_field_name', 'value': 'Date', 'title': 'Date'}, {'type':'text', 'key': 'directors_field_name', 'value': 'Directors', 'title': 'Directors'}, {'type':'text', 'key': 'poster_field_name', 'value': 'Poster', 'title': 'Poster'}, {'type':'text', 'key': 'year_field_name', 'value': 'Year', 'title': 'Year'}, {'type':'text', 'key': 'genres_field_name', 'value': 'Genres', 'title': 'Genres'}, {'type':'text', 'key': 'cast_field_name', 'value': 'Cast', 'title': 'Cast'}, {'type':'text', 'key': 'runtime_field_name', 'value': 'Runtime', 'title': 'Runtime'}, {'type':'text', 'key': 'imdb_field_name', 'value': 'IMDB', 'title': 'IMDB URL'}])]) if config == None: raise MissingConfigError('You must setup and confirm the Movie Diary configuration before continuing.') else: config['moviedb_api'] = self.validate_config(config['moviedb_api'], 'Insert your TMDB API key', 'You need a valid MovieDB API key', '84cef43ccf02b1ba6093c9694ed671c9') config['airtable_api'] = self.validate_config(config['airtable_api'], 'Insert your Airtable API key', 'You need a valid Airtable API key') config['airtable_db'] = self.validate_config(config['airtable_db'], 'Insert your Airtable database ID', 'You need the ID of your database') config['airtable_table'] = self.validate_config(config['airtable_table'], 'Insert the name of yout Airtable table', 'You must insert the name of the table in your database.', 'Table 1', True) keychain.set_password('Movie Diary', 'Config', cPickle.dumps(config)) else: config = cPickle.loads(config) self.moviedb_api = config.get('moviedb_api', '') self.airtable_api = config.get('airtable_api', '') self.airtable_db = config.get('airtable_db', '') self.airtable_table = config.get('airtable_table', '') self.set_date_manually = config.get('set_date_manually', '') self.add_time_to_date = config.get('add_time_to_date', '') self.directors_field = config.get('directors_field', '') self.genres_field = config.get('genres_field', '') self.runtime_field = config.get('runtime_field', '') self.cast_field = config.get('cast_field', '') self.imdb_field = config.get('imdb_field', '') self.title_field_name = config.get('title_field_name', 'Title') self.overview_field_name = config.get('overview_field_name', 'Overview') self.rating_field_name = config.get('rating_field_name', 'Rating') self.date_field_name = config.get('date_field_name', 'Date') self.directors_field_name = config.get('directors_field_name', 'Directors') self.poster_field_name = config.get('poster_field_name', 'Poster') self.year_field_name = config.get('year_field_name', 'Year') self.genres_field_name = config.get('genres_field_name', 'Genres') self.cast_field_name = config.get('cast_field_name', 'Cast') self.runtime_field_name = config.get('runtime_field_name', 'Runtime') self.imdb_field_name = config.get('imdb_field_name', 'IMDB')
def form_dialog_from_fields_dict(title, fields_dict, autotext=False, colors=True): ret = [{'title': k, 'type': v} for k, v in fields_dict.items()] if not autotext: for d in ret: d.update({ "autocorrection": False, "autocapitalization": ui.AUTOCAPITALIZE_NONE, }) if colors: for i, d in enumerate(ret, start=1): d.update({ "tint_color": "#{0}".format( 'ff0000' if i == 1 else 'ffae55' if i == 2 else 'f4ff00' if i == 3 else '00ff16' ) }) return dialogs.form_dialog(title, ret)
def form_dialog_from_fields_dict(title, fields_dict, autotext=False, colors=True): ret = [{'title': k, 'type': v} for k, v in fields_dict.items()] if not autotext: for d in ret: d.update({ "autocorrection": False, "autocapitalization": ui.AUTOCAPITALIZE_NONE, }) if colors: for i, d in enumerate(ret, start=1): d.update({ "tint_color": "#{0}".format('ff0000' if i == 1 else 'ffae55' if i == 2 else 'f4ff00' if i == 3 else '00ff16') }) return dialogs.form_dialog(title, ret)
def more(sender): paperSection = ("Brush", [{ "title": "Color", "icon": ui.Image('iob:record_24'), "placeholder": "Enter a CSS value", "type": "text", "tint_color": drawCanvas.color, "value": drawCanvas.color }, { "title": "Size", "placeholder": str(drawCanvas.brush_size), "type": "number" }]) morePopup = dialogs.form_dialog("More", sections=[paperSection]) if morePopup != None: if morePopup["Size"] != "": drawCanvas.brush_size = int(morePopup["Size"]) colorbtn.tint_color = morePopup["Color"] drawCanvas.color = morePopup["Color"]
def choose_title(): if platform == 'ios': import dialogs sections = [{ "title": "Game: ", "type": "text", "key": "game" }, { "title": "Plays: ", "type": "number", "key": "plays", "value": "1" }] choices = dialogs.form_dialog("Game Played", fields=sections) or {} try: plays = int(choices.get('plays', 0)) game = choices.get('game') if game and plays > 0: game_options = link.get_games(game) if game_options: selected = dialogs.list_dialog("Choose Title", [ f'{g["name"]} ({g["year"]}) - {g["idx"]}' for g in game_options ]) if selected: idx = selected.split('-')[-1] link.log_play(idx, plays) dialogs.alert( "Add Success", f"Added {str(plays) + ' plays' if plays != 1 else str(plays) + ' play'} to {game}", "Close", hide_cancel_button=True) else: dialogs.alert( f"No entries found for {game} on BoardGameGeek!") except ValueError: dialogs.alert("Play count must be a number!") else: raise ImportError("Cannot run choose_title on a non-iOS device!")
def add_action(self, sender): raw = self['textfield_search'].text t = dialogs.form_dialog(title='添加搜索词', fields=[{ 'type': 'text', 'title': '搜索词', 'key': 'raw', 'value': raw }, { 'type': 'text', 'title': '提示词', 'key': 'display', 'placeholder': 'optional' }]) if t: if t['display']: item = {'display': t['display'], 'raw': t['raw']} else: item = t['raw'] if item: sender.superview.add_item(item)
def settings_action(self, sender): settings = dialogs.form_dialog(title='Settings', fields=[{ 'type': 'text', 'title': 'Name', 'key': 'name', 'value': self.settings['name'], }, { 'type': 'date', 'title': 'Date of birth', 'key': 'dob', 'value': self.settings['dob'], }]) # None if form is not saved if settings: self.save('settings', settings) self.settings = settings self.personalize(self.settings) #TODO #self.update_weeks() dialogs.hud_alert('Saved')
def setup(): d = [{'title':'Host', 'type':'text','autocorrection':False, 'autocapitalization':ui.AUTOCAPITALIZE_NONE,'key':'host'}, {'title':'Domain', 'type':'text', 'autocorrection':False, 'autocapitalization':ui.AUTOCAPITALIZE_NONE,'placeholder':'org','key':'domain'}, {'title':'Ident', 'type':'text', 'autocorrection':False, 'autocapitalization':ui.AUTOCAPITALIZE_NONE,'key':'ident'}, {'title':'Description', 'type':'text', 'autocorrection':True, 'key':'hdesc'}, {'title':'Organization', 'type':'text', 'autocorrection':False, 'autocapitalization':ui.AUTOCAPITALIZE_NONE,'key':'horg'}, {'title':'Name', 'type':'text', 'autocorrection':False, 'autocapitalization':ui.AUTOCAPITALIZE_NONE, 'key':'hname'}] r = dialogs.form_dialog('Setup',d) if r == None: print('Canceled') return # remove keys with empty values r={k: v for k, v in r.items() if v is not '' or None} # Check to make sure we got a host name if 'host' in r: return r print('No host name') return None
def but_action(sender): fields = [{'key' : 'name', 'type' : 'text', 'value' : 'Name your reminder'}, {'key' : 'calendar', 'type' : 'text', 'value' : 'Name a calendar for this reminder'}] result=dialogs.form_dialog(title='Create a Reminder', fields=fields) all_calendars = reminders.get_all_calendars() for calendar in all_calendars: if calendar.title == result['calendar']: r = reminders.Reminder(calendar) r.title = result['name'] r.save() break else: q = console.alert('Could not find calendar', 'Could not find calendar named ' + result['calendar'] + ' Would you like to create one?', 'Yes', hide_cancel_button=False) if q == 1: new_calendar = reminders.Calendar() new_calendar.title = result['calendar'] new_calendar.save() calendar.title == result['calendar'] r = reminders.Reminder(calendar) r.title = result['name'] r.save() segment.selected_index = 0 reminders_table.data_source.items = get_reminder_items(completed=False)
def edit_config(self): config = dialogs.form_dialog(title='Movie Diary Configuration', sections=[('MovieDB', [{'type': 'text', 'key': 'moviedb_api', 'value': self.moviedb_api, 'title': 'MovieDB API Token'}]), ('Airtable', [{'type': 'text', 'key': 'airtable_api', 'value': self.airtable_api, 'title': 'Airtable API Key'}, {'type': 'text', 'key': 'airtable_db', 'value': self.airtable_db, 'title': 'Airtable database ID'}, {'type': 'text', 'key': 'airtable_table', 'value': self.airtable_table, 'title': 'Airtable table name'}]), ('Custom', [{'type': 'switch', 'key': 'set_date_manually', 'value': self.set_date_manually, 'title': 'Set date manually'}, {'type': 'switch', 'key': 'add_time_to_date', 'value': self.add_time_to_date, 'title': 'Add time to date'}]),('Extra Fields', [{'type': 'switch', 'key': 'directors_field', 'value': self.directors_field, 'title': 'Directors'}, {'type': 'switch', 'key': 'genres_field', 'value': self.genres_field, 'title': 'Genres'}, {'type': 'switch', 'key': 'runtime_field', 'value': self.runtime_field, 'title': 'Runtime'}, {'type': 'switch', 'key': 'cast_field', 'value': self.cast_field, 'title': 'Cast'}, {'type': 'switch', 'key': 'imdb_field', 'value': self.imdb_field, 'title': 'IMDB URL'}]),('Fields', [{'type':'text', 'key': 'title_field_name', 'value': self.title_field_name, 'title': 'Title'}, {'type':'text', 'key': 'overview_field_name', 'value': self.overview_field_name, 'title': 'Overview'}, {'type':'text', 'key': 'rating_field_name', 'value': self.rating_field_name, 'title': 'Rating'}, {'type':'text', 'key': 'date_field_name', 'value': self.date_field_name, 'title': 'Date'}, {'type':'text', 'key': 'directors_field_name', 'value': self.directors_field_name, 'title': 'Directors'}, {'type':'text', 'key': 'poster_field_name', 'value': self.poster_field_name, 'title': 'Poster'}, {'type':'text', 'key': 'year_field_name', 'value': self.year_field_name, 'title': 'Year'}, {'type':'text', 'key': 'genres_field_name', 'value': self.genres_field_name, 'title': 'Genres'}, {'type':'text', 'key': 'cast_field_name', 'value': self.cast_field_name, 'title': 'Cast'}, {'type':'text', 'key': 'runtime_field_name', 'value': self.runtime_field_name, 'title': 'Runtime'}, {'type':'text', 'key': 'imdb_field_name', 'value': self.imdb_field_name, 'title': 'IMDB URL'}]), ('Serious Stuff', [{'type': 'switch', 'key': 'reset_config', 'title': 'Reset Configuration', 'value': False}])]) if config != None: if config['reset_config']: reset_confirm = console.alert('Reset Configuration?', 'Are you sure? This will only clean your credentials data and has no relation to your database.', 'Cancel', 'Reset', hide_cancel_button=True) if reset_confirm == 2: keychain.delete_password('Movie Diary', 'Config') keychain.delete_password('Airtable', 'API') keychain.delete_password('Airtable', 'Movie Diary') keychain.delete_password('Airtable', 'Movie Diary Table') return console.hud_alert('Movie Diary Configuration Successfully Reset') config['moviedb_api'] = self.validate_config(config['moviedb_api'], 'Insert your TMDB API key', 'You need a valid MovieDB API key', '84cef43ccf02b1ba6093c9694ed671c9') config['airtable_api'] = self.validate_config(config['airtable_api'], 'Insert your Airtable API key', 'You need a valid Airtable API key') config['airtable_db'] = self.validate_config(config['airtable_db'], 'Insert your Airtable database ID', 'You need the ID of your database') config['airtable_table'] = self.validate_config(config['airtable_table'], 'Insert the name of yout Airtable table', 'You must insert the name of the table in your database.', 'Table 1', True) keychain.set_password('Movie Diary', 'Config', cPickle.dumps(config)) console.hud_alert('Movie Diary Configuration Successfully Edited') else: raise MissingConfigError('You must setup and confirm the Movie Diary configuration before continuing.')
def get_user_input(): """Vraci slovnik se vstupnima udajema nebo None v pripade zavreni dialogu. Klice slovniku jsou primo pouzitelne ve funkci notification.schedule. Tj. slovnik obsahuje message, delay a action_url. """ input = None # Opakujeme porad dokola dokud nebudou vstupni data validni while True: input = dialogs.form_dialog('Nová připomínka', fields=fields_with_previous_input(input)) if input is None: # Dialog byl zavreny krizkem, vratime None return None # Validace pripominky message = input['message'].strip() if not message: alert('Připomínka nemůže být prázdná.') continue # Validace data & casu zobrazeni delta = input['date'] - datetime.datetime.now() delay = delta.days * 24 * 60 * 60 + delta.seconds if delay < 60: alert('Čas upozornění musí nastat nejdříve za minutu.') continue # Pokud nezadal akci, zkonvertujeme na None action_url = input['action_url'].strip() or None return dict(message=message, delay=delay, action_url=action_url)
# coding: utf-8 import requests, json, dialogs token = "InsertYourTokenHere" fields=[{'type':'text', 'key':'repo_name', 'value':'', 'title':'Repository name:'}] items = dialogs.form_dialog(title='CreateRepo', fields=fields, sections=None) if items: repo_name = items.get('repo_name') if repo_name: url = 'https://api.github.com/user/repos' data = {"name": repo_name, "auto_init": True, "private": False} headers = {"Authorization": "token " + token} r = requests.post(url, data=json.dumps(data), headers=headers) if r.status_code == 201: print 'Success: Repo ' + repo_name + ' is created.' else: print 'Error: ' + str(r) else: print 'Error: No RepoName.'
def show_form(self): self.data = dialogs.form_dialog(title='Settings', fields=self.fields ) if not self.data == None: self.save_file() self.update_fields()
def main(): if not appex.is_running_extension(): print 'Running in Pythonista app, using test data...\n' text = ''' ''' else: text = appex.get_text() if text: author = 'Taha Dhiaeddine Amdouni' github_repo = 'tdamdouni.github.io' github_user = '******' github_password = keychain.get_password('github', github_user) or '' (title, text) = extract_title(text) filename = '%s-%s.md' % (date.today(), slug(title)) github_fields = ( 'Github Settings', [ dict(title='Github Username', key='github_user', type='text', value=github_user, autocorrection=False, autocapitalization=False), dict(title='Github Password', key='github_password', type='password', value=github_password), dict(title='Repository', key='github_repo', type='text', value=github_repo, autocorrection=False, autocapitalization=False) ] ) posting_fields = ( 'Post Settings', [ dict(title='Title', key='title', type='text', value=title), dict(title='Author', key='author', type='text', value=author), dict(title='Layout', key='layout', type='text', value='post', autocorrection=False, autocapitalization=False), dict(title='Tags', key='tags', type='text', value=''), dict(title='Filename', key='filename', type='text', value=filename, autocorrection=False, autocapitalization=False) ], 'Please seperate tags by spaces.' ) results = dialogs.form_dialog(title='Publish new post', sections=[ posting_fields, github_fields ]) if results is None: console.hud_alert('Posting was cancelled', 'error') return metas = { 'tags': results['tags'], 'branch': 'master', 'author': results['author'], 'layout': results['layout'], 'filename': results['filename'] } if github_password != results['github_password']: keychain.set_password('github', results['github_user'], results['github_password']) console.show_activity() mb = MobileBlogger(results['github_user'], results['github_password'], results['github_repo']) mb.create_new_post(results['title'], text, metas) console.hud_alert('New post created!') else: print 'No input text found.'
import urllib2, dialogs from reportlab.lib.pagesizes import A4, letter from reportlab.platypus import Paragraph, SimpleDocTemplate, PageBreak from reportlab.lib.styles import getSampleStyleSheet #ext, domain, page links field_url=[{'type':'url', 'key':'url', 'value':'http://', 'title':'URL:'}] field_pdf=[{'type':'switch', 'key':'htmltitle', 'value':True, 'title':'Use HTML title (or filename)'}, {'type':'text', 'key':'filename', 'value':'urls.pdf', 'title':'Filename:'}, {'type':'switch', 'key':'format', 'value':True, 'title':'A4 (or Letter)'}] fields_hl=[{'type':'switch', 'key':'extlink', 'value':True, 'title':'External Hyperlinks'}, {'type':'switch', 'key':'domainlink', 'value':True, 'title':'Domain Hyperlinks'}, {'type':'switch', 'key':'imagelink', 'value':True, 'title':'Image Hyperlinks'}, {'type':'switch', 'key':'qmlink', 'value':True, 'title':'??? Hyperlinks'}] sections=[('',field_url),('PDF',field_pdf),('Hyperlinks',fields_hl)] items = dialogs.form_dialog(title='Hyperlink2PDF', fields=None, sections=sections) if items: url = items.get('url') htmltitle = items.get('htmltitle') filename = items.get('filename') format = items.get('format') # True = A4 / False = letter extlink = items.get('extlink') ext = 0 domainlink = items.get('domainlink') dom = 0 imagelink = items.get('imagelink') qmlink = items.get('qmlink') if url == 'http://' or url == '': print 'Please type in a valid website!' elif htmltitle == False and filename == '': print 'Please type in a valid filename!'
def edit_item(key, value): values = dialogs.form_dialog(title='Edit Item', fields=[{'type':'text', 'title':'Key', 'value':key},{'type':'text', 'title':'Value', 'value':value}]) if not values == None: dbo.dictionary[values['Key']] = values['Value'] table_view.reload()
def controller_changed(self, key, value): """called when a button was pressed.""" oldvalue = self.keymap[key] self.root.proxy.lose_focus() try: if isinstance(value, bool): intype = TYPE_NBUTTON if not value: return elif isinstance(value, float): intype = TYPE_PBUTTON if value < 0.7: return elif isinstance(value, scene.Point): intype = TYPE_VECTOR if abs(value) < 0.7: return if oldvalue is not None: if oldvalue["type"] != intype: oldvalue = None del self.keymap[key] ac = ui.AUTOCAPITALIZE_NONE ack = "autocapitalization" if intype == TYPE_NBUTTON: fields = [ { "type": "text", "value": "Normal Button", "title": "Type", }, { "type": "text", "value": oldvalue["button"] if oldvalue else "", "title": "Keyboard Button", "key": "keyboardbutton", ack: ac, } ] elif intype == TYPE_PBUTTON: fields = [ { "type": "text", "value": "Pressure-sensitive Button", "title": "Type", }, { "type": "text", "value": oldvalue["button"] if oldvalue else "", "title": "Keyboard Button", "key": "keyboardbutton", ack: ac, }, { "type": "number", "value": str(oldvalue["trigger"]) if oldvalue else "0.5", "title": "Trigger on", "key": "trigger", } ] elif intype == TYPE_VECTOR: fields = [ { "type": "text", "value": "Directional Input", "title": "Type", }, { "type": "number", "value": str(oldvalue["trigger"]) if oldvalue else "0.5", "title": "Deadzone", "key": "trigger", }, { "title": "Upwards-Button", "type": "text", "key": "upbutton", "value": oldvalue["upbutton"] if oldvalue else "", ack: ac, }, { "title": "Downwards-Button", "type": "text", "key": "downbutton", "value": oldvalue["downbutton"] if oldvalue else "", ack: ac, }, { "title": "Leftwards-Button", "type": "text", "key": "leftbutton", "value": oldvalue["leftbutton"] if oldvalue else "", ack: ac, }, { "title": "Rightwards-Button", "type": "text", "key": "rightbutton", "value": oldvalue["rightbutton"] if oldvalue else "", ack: ac, }, ] res = dialogs.form_dialog("Mapping: " + key, fields) if res is None: return if intype == TYPE_NBUTTON: kbb = res["keyboardbutton"] self.keymap[key] = { "type": intype, "button": kbb, } return elif intype == TYPE_PBUTTON: kbb = res["keyboardbutton"] tv = res["trigger"] try: tv = float(tv.replace(",", ".")) if tv < 0.0 or tv > 1.0: raise ValueError except ValueError: console.alert( "Invalid Input", "Please enter a number between 0 and 1!", "Ok", hide_cancel_button=True ) return self.keymap[key] = { "type": intype, "button": kbb, "trigger": tv } return elif intype == TYPE_VECTOR: upb = res["upbutton"] downb = res["downbutton"] leftb = res["leftbutton"] rightb = res["rightbutton"] tv = res["trigger"] try: tv = float(tv.replace(",", ".")) if tv < 0.0 or tv > 1.0: raise ValueError except ValueError: console.alert( "Invalid Input", "Please enter a number between 0 and 1!", "Ok", hide_cancel_button=True ) return self.keymap[key] = { "type": intype, "trigger": tv, "upbutton": upb, "downbutton": downb, "leftbutton": leftb, "rightbutton": rightb, } return finally: self.root.proxy.set_focus(self)
def onCollect(button): global nodeDelegate,walker,undoStack,lastSelectedRow selected = [] for row,item in enumerate(tvNodeList.delegate.items): if item['selected'] and not item['hidden']: selected.append((row,item)) if selected: item = selected[0][1] # get the first selected oldParent = item['node']['parent'] oldLevel = item['node']['level'] for _,item in selected: if oldParent != item['node']['parent']: console.hud_alert("Mixed heritgate items collected. Must all have same parent") return result = dialogs.form_dialog("Container View", [{'type':'text', 'key':'name', 'title':'View Name', 'value':''}, {'type':'text', 'key':'margins', 'title':'Frame Margins', 'value':'0,0,0,0'}, {'type':'text', 'key':'customView', 'title':'Custom View Class', 'value':''} ] ) if not result: return customViewClass = result['customView'] name = result['name'] match = validQuadTuple.match(result['margins']) if match: margins = [float(x) for x in match.groups() if x] if len(margins) != 4: console.hud_alert("{} is invalid margin definition".format(result)) else: console.hud_alert("{} is invalid margin definition".format(result)) return undoStack.append((deepcopy(nodeDelegate.items), deepcopy(walker.frameByUUID)) ) for row,item in enumerate(nodeDelegate.items): if item['node']['uuid'] == oldParent: oldParentRow = row collectionFrame = collectiveSize(selected,margins) location = "{{{}, {}}}".format(*collectionFrame[:2]) widthHeight = "{{{}, {}}}".format(*collectionFrame[2:]) collectionPyuiFrame = "{{{}, {}}}".format(location,widthHeight) collectionUUID = str(uuid.uuid4()).upper() childUUIDs =[] parentFrame,parentUUID = walker.frameByUUID[oldParent] children = [] # adjust the first generation children frames and parehhood for row,item in selected: thisUUID = item['node']['uuid'] thisFrame = item['node']['frame'] newFrame = (thisFrame[0] - collectionFrame[0], thisFrame[1] - collectionFrame[1], thisFrame[2], thisFrame[3]) thisLoc = "{{{}, {}}}".format(*newFrame[:2]) thisWH = "{{{}, {}}}".format(*newFrame[2:]) pyuiFrame = "{{{}, {}}}".format(thisLoc,thisWH) nodeDelegate.items[row]['node']['frame'] = newFrame nodeDelegate.items[row]['node']['attributes']['frame'] = pyuiFrame nodeDelegate.items[row]['node']['parent'] = collectionUUID for nodeIndex,node in enumerate(nodeDelegate.items[oldParentRow]['node']['nodes']): if node == thisUUID: nodeDelegate.items[oldParentRow]['node']['nodes'][nodeIndex] = collectionUUID break #the above will lead to redundant references to the same node. Make unique later. walker.setFrameByUUID(thisUUID,newFrame,collectionUUID) # update the "byUUID" hash childUUIDs.append(nodeDelegate.items[row]['node']['uuid']) #save for writing the collection view # accululate all childrens rows (as a tree) childwalker = ItemsWalker(nodeDelegate.items) children.append(childwalker.walkItems([row,])) del childwalker nodeDelegate.items[oldParentRow]['node']['nodes'] = uniqify(nodeDelegate.items[oldParentRow]['node']['nodes']) childrenRows = flatten(children) # get the indexes as a simple list for row in childrenRows: nodeDelegate.items[row]['node']['level'] += 1 thisNode = genericView.format(collectionUUID, name, collectionFrame, childUUIDs,oldLevel,collectionUUID,oldParent) thisItem= { 'title': name, 'node' : eval(thisNode), 'selected':False, 'hidden':False, 'accessory_type':None, } if customViewClass: thisItem['custom_class'] = customViewClass insertPoint = selected[0][0] childrenItems = [nodeDelegate.items[row] for row in childrenRows] otherItems = [nodeDelegate.items[row] for row in range(insertPoint+1,len(nodeDelegate.items)) if row not in childrenRows] nodeDelegate.items.insert(insertPoint,thisItem) nodeDelegate.listLength += 1 walker.setFrameByUUID(collectionUUID,collectionFrame,oldParent) nodeDelegate.items[:] = nodeDelegate.items[:insertPoint+1] for item in childrenItems: nodeDelegate.items.append(item) for item in otherItems: nodeDelegate.items.append(item) for row,_ in enumerate(nodeDelegate.items): nodeDelegate.items[row]['selected'] = False nodeDelegate.items[row]['hidden'] = False tvNodeList.selected_rows = [] lastSelectedRow = -1 tvNodeList.reload_data() viewNodeMap.set_needs_display()
#! python3 # coding: utf-8 import dialogs, bs4, urllib.request field_url=[{'type':'url', 'key':'url', 'value':'', 'title':'URL:'}] field_filter=[{'type':'switch', 'key':'python', 'value':False, 'title':'python'}, {'type':'switch', 'key':'xml', 'value':False, 'title':'xml'}, {'type':'switch', 'key':'json', 'value':False, 'title':'json'}, {'type':'switch', 'key':'allcode', 'value':True, 'title':'all'}] fields_file=[{'type':'switch', 'key':'savefile', 'value':True, 'title':'Save as file'}, {'type':'text', 'key':'filename', 'value':'sourcecode.txt', 'title':'Filename:'}] sections=[('',field_url),('Filter',field_filter),('File',fields_file)] items = dialogs.form_dialog(title='FindCodeInForum', fields=None, sections=sections) if items: url = items.get('url') cpython = items.get('python') cxml = items.get('xml') cjson = items.get('json') call = items.get('allcode') savefile = items.get('savefile') filename = items.get('filename') if savefile and filename == '': print('Please type in a valid filename!') else: c = [] soup = bs4.BeautifulSoup(urllib.request.urlopen(url).read()) if cpython: allpython = soup.find_all('code','python') for code in allpython: c.append(['py',code.getText()]) if cxml:
__author__ = 'Lukas Kollmer' __copyright__ = 'Copyright © 2016 Lukas Kollmer <*****@*****.**>' def title_key_dict(title, key): return {'type': 'text', 'title': title, 'key': key} fields = ([title_key_dict('Author', 'author_name'), # section 1 rows title_key_dict('Email', 'email')], [title_key_dict('Description', 'description'), # section 2 rows title_key_dict('Documentation', 'documentation')]) form_sections = (('About', fields[0], None), ('File info', fields[1], None)) data = dialogs.form_dialog('New File', sections=form_sections) assert data, 'No data entered.' #data['filename'] = os.path.basename(editor.get_path()) data['copyright_year'] = datetime.datetime.now().year fmt = """#!/usr/bin/env python3 # -*- coding: utf-8 -*- ''' {description} {documentation} ''' import sys
def form_dialog_from_fields_dict(title, fields_dict): return dialogs.form_dialog(title, [{'title': k, 'type': v} for k, v in fields_dict.items()])
def add_item(sender): values = dialogs.form_dialog(title='Add Item', fields=[{'type':'text', 'title':'Key'},{'type':'text', 'title':'Value'}]) if not values == None: dbo.dictionary[values['Key']] = values['Value'] table_view.reload()
dt = dt.strftime('%m-%d-%Y') # Set up fields fields = ([title_key_dict('text', 'Filename:', f, 'file_name'), title_key_dict('text', 'Author:', '', 'author_name'), title_key_dict('text', 'Created:', dt, 'creation_date'), title_key_dict('text', 'Last Updated:', dt, 'last_update'), title_key_dict('text', 'Description:', '', 'description'), title_key_dict('text', 'Requirements:', '', 'requirements'), title_key_dict('text', 'Optional:', '', 'optional'), title_key_dict('text', 'Contributors:', '', 'contributors'), title_key_dict('text', 'To Do:', '', 'to_do')]) #print fields # Call form dialog to collect necessary data from fields data = dialogs.form_dialog('Add Header Comments', fields) # If user clicked 'X' on title bar of form dialog... if not data: console.hud_alert('No comments entered.') sys.exit() # Retrive text from end position to end of script. remaining_text = old_text[end:len(old_text)] # Spaces per line for word wrap...Makes comment margins appear more uniform. This setting is for an iPhone 6+. Less spaces for smaller displays and more for iPad. wrap_len = 60 # Wrap long comment lines for i in range(len(fields)): d = '{}{} {}'.format(chars, fields[i]['title'], data['{}'.format(fields[i]['key'])])
def settings_action(self, sender): Dialog_List = [{"type": "text", "title": "RSS Feed", "key": "feed", "value": news_url}] settings = dialogs.form_dialog(title="Settings", fields=Dialog_List)