Exemple #1
0
 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
Exemple #3
0
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'])
Exemple #6
0
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!')
Exemple #7
0
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
Exemple #9
0
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()
Exemple #10
0
 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()
Exemple #11
0
	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()
Exemple #12
0
	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
Exemple #13
0
 def show_input_dialog(self):
     return dialogs.form_dialog(fields=[{
         'type': 'text',
         'key': 'account',
         'title': 'account'
     }, {
         'type': 'text',
         'key': 'key',
         'title': 'secret key'
     }])
Exemple #14
0
 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)
Exemple #15
0
	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
Exemple #16
0
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()
Exemple #18
0
    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()
Exemple #19
0
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)
Exemple #20
0
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))
Exemple #21
0
        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()
Exemple #23
0
    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
Exemple #25
0
	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) 
Exemple #27
0
 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"]
Exemple #29
0
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!")
Exemple #30
0
 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)
Exemple #31
0
 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')
Exemple #32
0
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
Exemple #33
0
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)
Exemple #34
0
	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.')
Exemple #35
0
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 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.'
Exemple #38
0
	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()
Exemple #39
0
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()
Exemple #42
0
	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)
Exemple #43
0
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()
Exemple #48
0
  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'])])
Exemple #49
0
 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)