def __init__(self, parent, title, done_cb, **kargs): self._user_cb = done_cb self._inwin = InnerWindow(parent) vbox = Box(self._inwin) self._inwin.content = vbox vbox.show() lb = Label(vbox, text='<b>%s</b>' % title) vbox.pack_end(lb) lb.show() Fileselector.__init__(self, vbox, expandable=False, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH, **kargs) self.callback_done_add(self._fileselector_done_cb) self.callback_activated_add(self._fileselector_done_cb) # TODO this filter seems not to work well...need fixing # fs.mime_types_filter_append(list(EXTRACT_MAP.keys()), 'Archive files') # fs.mime_types_filter_append(['*'], 'All files') vbox.pack_end(self) self.show() self._inwin.activate()
def sort_by_column(self, col, ascending=True): ''' utility to sort list on columns ''' assert col >= 0 assert col < len(self.header_row) self.header_row[self.sort_column].icon = None btn = self.header_row[col] _ic = Label(btn) btn.part_content_set("icon", _ic) _ic.show() if ascending: # ascending: _ic.text = "⬇" self.sort_column_ascending = True else: _ic.text = "⬆" self.sort_column_ascending = False # reverse=False if ascending else True self.rows.sort(key=lambda e: e[col]) if not ascending: self.rows.reverse() # Clear old data for our_list in self.lists: our_list.clear() for row in self.rows: self.add_row(row) self.sort_column = col
def __init__(self, parent): InnerWindow.__init__(self, parent) vbox = Box(self) vbox.show() self.content = vbox title = Label(self, scale=2.0, text='Edone %s' % VERSION) title.show() vbox.pack_end(title) en = Entry(self, text=INFO, editable=False, scrollable=True, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) en.show() vbox.pack_end(en) sep = Separator(self, horizontal=True) sep.show() vbox.pack_end(sep) close = Button(self, text='Close') close.callback_clicked_add(lambda b: self.delete()) close.show() vbox.pack_end(close) self.activate()
def __init__(self): win = StandardWindow("Testing", "Elementary Tabbed Widget") # pylint: disable=no-member win.callback_delete_request_add(lambda o: elm.exit()) tabbs = TabbedBox(win, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) tabbs.close_cb = self.close_checks for i in range(10): lbl = Label(win) lbl.text = "Tab %s" % i lbl.show() tabbs.add(lbl, "Tab %s" % i) tabbs.disable(0) tabbs.disable(3) tabbs.show() win.resize_object_add(tabbs) win.resize(600, 400) win.show()
def build_prog_popup(self): pp = Popup(self) pp.part_text_set('title,text', _('Extracting files, please wait...')) pp.show() vbox = Box(self) pp.part_content_set('default', vbox) vbox.show() lb = Label(self, ellipsis=True, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ) vbox.pack_end(lb) lb.show() pb = Progressbar(pp, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ) vbox.pack_end(pb) pb.show() bt = Button(pp, text=_('Cancel')) bt.callback_clicked_add(lambda b: self.app.abort_operation()) pp.part_content_set('button1', bt) self.prog_pbar = pb self.prog_label = lb self.prog_popup = pp
def __init__(self, parent, session): Frame.__init__(self, parent) self.text = "Limits" self.size_hint_align = FILL_HORIZ base = 1024 units = ( "bytes/s", "KiB/s", "MiB/s", "GiB/s", "TiB/s" ) t = Table(parent) for r, values in enumerate(( ("Upload limit", session.upload_rate_limit, session.set_upload_rate_limit), ("Download limit", session.download_rate_limit, session.set_download_rate_limit), ("Upload limit for local connections", session.local_upload_rate_limit, session.set_local_upload_rate_limit), ("Download limit for local connections", session.local_download_rate_limit, session.set_local_download_rate_limit), )): title, rfunc, wfunc = values l = Label(parent) l.text = title l.size_hint_align = FILL_HORIZ t.pack(l, 0, r, 1, 1) l.show() usw = UnitSpinner(parent, base, units) usw.size_hint_weight = EXPAND_HORIZ usw.size_hint_align = FILL_HORIZ usw.set_value(rfunc()) usw.callback_changed_add(wfunc, delay=2.0) t.pack(usw, 1, r, 1, 1) usw.show() self.content = t
def __init__(self, parent, label_text, values, initial_value): Box.__init__(self, parent) self.vd = { ELM_ACTIONSLIDER_LEFT: values[0], ELM_ACTIONSLIDER_CENTER: values[1], ELM_ACTIONSLIDER_RIGHT: values[2], } self.horizontal = True self.size_hint_align = -1.0, 0.0 self.size_hint_weight = 1.0, 0.0 l = Label(parent) l.text = label_text l.show() w = self.w = Actionslider(parent) w.magnet_pos = ELM_ACTIONSLIDER_ALL w.size_hint_align = -1.0, 0.0 w.size_hint_weight = 1.0, 0.0 w.show() parts = "left", "center", "right" for i, v in enumerate(values): w.part_text_set(parts[i], str(v)) w.indicator_pos = values.index(initial_value) + 1 self.pack_end(l) self.pack_end(w)
def __init__(self, parent): DialogWindow.__init__(self, parent, 'epack-info', 'Epack', autodel=True) fr = Frame(self, style='pad_large', size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) self.resize_object_add(fr) fr.show() hbox = Box(self, horizontal=True, padding=(12,12)) fr.content = hbox hbox.show() vbox = Box(self, align=(0.0,0.0), padding=(6,6), size_hint_weight=EXPAND_VERT, size_hint_align=FILL_VERT) hbox.pack_end(vbox) vbox.show() # icon + version ic = Icon(self, standard='epack', size_hint_min=(64,64)) vbox.pack_end(ic) ic.show() lb = Label(self, text=_('Version: %s') % __version__) vbox.pack_end(lb) lb.show() sep = Separator(self, horizontal=True) vbox.pack_end(sep) sep.show() # buttons bt = Button(self, text=_('Epack'), size_hint_align=FILL_HORIZ) bt.callback_clicked_add(lambda b: self.entry.text_set(utils.INFO)) vbox.pack_end(bt) bt.show() bt = Button(self, text=_('Website'),size_hint_align=FILL_HORIZ) bt.callback_clicked_add(lambda b: utils.xdg_open(utils.GITHUB)) vbox.pack_end(bt) bt.show() bt = Button(self, text=_('Authors'), size_hint_align=FILL_HORIZ) bt.callback_clicked_add(lambda b: self.entry.text_set(utils.AUTHORS)) vbox.pack_end(bt) bt.show() bt = Button(self, text=_('License'), size_hint_align=FILL_HORIZ) bt.callback_clicked_add(lambda b: self.entry.text_set(utils.LICENSE)) vbox.pack_end(bt) bt.show() # main text self.entry = Entry(self, editable=False, scrollable=True, text=utils.INFO, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) self.entry.callback_anchor_clicked_add(lambda e,i: utils.xdg_open(i.name)) hbox.pack_end(self.entry) self.entry.show() self.resize(400, 200) self.show()
def addPackage(self, pak): row = [] ourCheck = Check(self) ourCheck.data['packageName'] = pak.name ourCheck.callback_changed_add(self.app.checkChange) ourCheck.show() row.append(ourCheck) ourName = Button(self, style="anchor", size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ) ourName.text = pak.name ourName.data["packageDes"] = pak.candidate.description ourName.callback_pressed_add(self.packagePressed) ourName.show() row.append(ourName) ourVersion = Label(self, size_hint_weight=EXPAND_HORIZ, size_hint_align=(0.1, 0.5)) ourVersion.text = pak.installed.version ourVersion.show() row.append(ourVersion) newVersion = Label(self, size_hint_weight=EXPAND_HORIZ, size_hint_align=(0.1, 0.5)) newVersion.text = pak.candidate.version newVersion.show() row.append(newVersion) self.app.packagesToUpdate[pak.name] = {'check':ourCheck, 'selected':False} self.packageList.row_pack(row, sort=False)
def sort_by_column(self, col, ascending=True): assert col >= 0 assert col < len(self.header_row) self.header_row[self.sort_column].icon = None btn = self.header_row[col] ic = Label(btn) btn.part_content_set("icon", ic) ic.show() if ascending == True: #ascending: ic.text = u"⬇" self.sort_column_ascending = True else: ic.text = u"⬆" self.sort_column_ascending = False self.rows.sort(key=lambda e: e[col], #reverse=False if ascending else True ) if not ascending: self.rows.reverse() #Clear old data for our_list in self.lists: our_list.clear() for row in self.rows: self.add_row(row) self.sort_column = col
def buildLoadBox(self): # build the load label loadLable = Label(self, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_HORIZ) loadLable.text = "<b>Processing</b>" loadLable.show() # build the spinning wheel wheel = Progressbar(self, pulse_mode=True, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_HORIZ) wheel.pulse(True) wheel.show() detailsbtn = Button(self, style="anchor") detailsbtn.text_set("Details") detailsbtn.callback_pressed_add(self.innerWinShow) detailsbtn.show() # build the status label self.statusLabel = Label(self, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_HORIZ) self.statusLabel.show() # put all the built objects in a vertical box box = Box(self, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) box.pack_end(loadLable) box.pack_end(wheel) box.pack_end(self.statusLabel) box.pack_end(detailsbtn) box.show() return box
def __init__(self): StandardWindow.__init__(self, "ex2", "Hello Elementary", size=(300, 200)) self.callback_delete_request_add(lambda o: elm.exit()) ourLabel = Label(self) ourLabel.size_hint_weight = EXPAND_BOTH ourLabel.text = "Hello Elementary!" ourLabel.show() ourButton = Button(self) ourButton.size_hint_weight = EXPAND_BOTH ourButton.text = "Goodbye Elementary" ourButton.callback_clicked_add(self.buttonPressed) ourButton.show() ourBox = Box(self) ourBox.size_hint_weight = EXPAND_BOTH ourBox.pack_end(ourLabel) ourBox.pack_end(ourButton) ourBox.show() self.resize_object_add(ourBox)
def LOG(win, m): lb = Label(win, text=m, size_hint_weight=(0.0, 0.0), size_hint_align=FILL_BOTH) lb.show() return lb
def display_error(self, exc): self.load_notify.content.delete() l = Label(self.load_notify, style="marker", text="Document load error: %s" % utf8_to_markup(str(exc)), color=(255, 0, 0, 255)) self.load_notify.content = l l.show()
def __init__(self): win = StandardWindow("Testing", "Elementary Sorted Table") # pylint: disable=no-member win.callback_delete_request_add(lambda o: elm.exit()) # Build the titles for the table. The titles is a list of tuples # with the following format: # ( <str - Header Text>, <Bool - Sortable> )''' titles = [] for i in range(COLUMNS): titles.append(("Column " + str(i), True if i != 2 else False)) # Create our sorted list object slist = SortedList(win, titles=titles, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) # Populate the rows in our table for _i in range(ROWS): # Each row is a list with the number of elements # that must equal the number of headers row = [] for j in range(COLUMNS): # Row elements can be ANY elementary object if j == 0: # For the first column in each row, we will create a button # that will delete the row when pressed btn = Button(slist, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) btn.text = "Delete row" btn.callback_clicked_add( lambda x, y=row: slist.row_unpack(y, delete=True)) btn.show() # Add the btn created to our row row.append(btn) else: # For each other row create a label with a random number data = random.randint(0, ROWS * COLUMNS) label = Label(slist, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) label.text = str(data) # For integer data we also need to assign value to "sort_data" # because otherwise things get sorted as text label.data["sort_data"] = data label.show() # Append our label to the row row.append(label) # Add the row into the SortedList slist.row_pack(row, sort=False) # Show the list slist.show() win.resize_object_add(slist) win.resize(600, 400) win.show()
def fileExists(self, filePath): self.confirmPopup = Popup(self.mainWindow, size_hint_weight=EXPAND_BOTH) # Add a table to hold dialog image and text to Popup tb = Table(self.confirmPopup, size_hint_weight=EXPAND_BOTH) self.confirmPopup.part_content_set("default", tb) tb.show() # Add dialog-error Image to table need_ethumb() icon = Icon(self.confirmPopup, thumb='True') icon.standard_set('dialog-question') # Using gksudo or sudo fails to load Image here # unless options specify using preserving their existing environment. # may also fail to load other icons but does not raise an exception # in that situation. # Works fine using eSudo as a gksudo alternative, # other alternatives not tested try: dialogImage = Image(self.confirmPopup, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH, file=icon.file_get()) tb.pack(dialogImage, 0, 0, 1, 1) dialogImage.show() except RuntimeError: # An error message is displayed for this same error # when aboutWin is initialized so no need to redisplay. pass # Add dialog text to table dialogLabel = Label(self.confirmPopup, line_wrap=ELM_WRAP_WORD, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH) current_file = os.path.basename(filePath) dialogLabel.text = "'%s' already exists. Overwrite?<br><br>" \ % (current_file) tb.pack(dialogLabel, 1, 0, 1, 1) dialogLabel.show() # Close without saving button no_btt = Button(self.mainWindow) no_btt.text = "No" no_btt.callback_clicked_add(self.closePopup, self.confirmPopup) no_btt.show() # Save the file and then close button sav_btt = Button(self.mainWindow) sav_btt.text = "Yes" sav_btt.callback_clicked_add(self.doSelected) sav_btt.callback_clicked_add(self.closePopup, self.confirmPopup) sav_btt.show() # add buttons to popup self.confirmPopup.part_content_set("button1", no_btt) self.confirmPopup.part_content_set("button3", sav_btt) self.confirmPopup.show()
def update_ui(self, listing_in_progress=False): box = self.header_box box.clear() ui_disabled = True # file listing in progress if listing_in_progress: spin = Progressbar(box, style='wheel', pulse_mode=True) spin.pulse(True) spin.show() box.pack_end(spin) lb = Label(box, text=_('Reading archive, please wait...'), size_hint_weight=EXPAND_HORIZ, size_hint_align=(0.0, 0.5)) lb.show() box.pack_end(lb) # or header button else: if self.app.file_name is None: txt = _('No archive loaded, click to choose a file') else: ui_disabled = False txt = _('<b>Archive:</b> %s') % \ (os.path.basename(self.app.file_name)) txt = '<align=left>%s</align>' % txt lb = Label(box, ellipsis=True, text=txt) bt = Button(box, content=lb, size_hint_weight=EXPAND_HORIZ, size_hint_fill=FILL_HORIZ) bt.callback_clicked_add(lambda b: \ FileSelectorInwin(self, _('Choose an archive'), self._archive_selected_cb, path=os.getcwd())) box.pack_end(bt) bt.show() # always show the about button sep = Separator(box) box.pack_end(sep) sep.show() ic = SafeIcon(box, 'help-about', size_hint_min=(24, 24)) ic.callback_clicked_add(lambda i: InfoWin(self)) box.pack_end(ic) ic.show() for widget in (self.extract_btn, self.fsb, self.create_folder_chk, self.del_chk): widget.disabled = ui_disabled self.update_fsb_label()
def __init__(self): StandardWindow.__init__(self, "ex1", "Hello Elementary", size=(300, 200)) self.callback_delete_request_add(lambda o: elm.exit()) ourLabel = Label(self) ourLabel.size_hint_weight = EXPAND_BOTH ourLabel.text = "Hello Elementary!" ourLabel.show() self.resize_object_add(ourLabel)
def __init__(self): StandardWindow.__init__(self, "ex1", "Hello Elementary", size=(640, 480)) self.callback_delete_request_add(lambda o: elm.exit()) ourLabel = Label(self) ourLabel.size_hint_weight = EXPAND_BOTH ourLabel.text = "Hello Elementary!" ourLabel.show() self.resize_object_add(ourLabel)
def __init__( self ): win = StandardWindow("Testing", "Elementary Sorted Table") win.callback_delete_request_add(lambda o: elm.exit()) """Build the titles for the table. The titles is a list of tuples with the following format: ( <String - Header Text>, <Bool - Sortable> )""" titles = [] for i in range(COLUMNS): titles.append( ("Column " + str(i), True if i != 2 else False) ) #Create our sorted list object slist = SortedList(win, titles=titles, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) #Populate the rows in our table for i in range(ROWS): #Each row is a list with the number of elements that must equal the number of headers row = [] for j in range(COLUMNS): #Row elements can be ANY elementary object if j == 0: #For the first column in each row, we will create a button that will delete the row when pressed btn = Button(slist, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) btn.text = "Delete row" btn.callback_clicked_add( lambda x, y=row: slist.row_unpack(y, delete=True) ) btn.show() #Add the btn created to our row row.append(btn) else: #For each other row create a label with a random number data = random.randint(0, ROWS*COLUMNS) lb = Label(slist, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) lb.text=str(data) """For integer data we also need to assign value to "sort_data" because otherwise things get sorted as text""" lb.data["sort_data"] = data lb.show() #Append our label to the row row.append(lb) #Add the row into the SortedList slist.row_pack(row, sort=False) #Show the list slist.show() win.resize_object_add(slist) win.resize(600, 400) win.show()
def update_ui(self, listing_in_progress=False): box = self.header_box box.clear() ui_disabled = True # file listing in progress if listing_in_progress: spin = Progressbar(box, style='wheel', pulse_mode=True) spin.pulse(True) spin.show() box.pack_end(spin) lb = Label(box, text=_('Reading archive, please wait...'), size_hint_weight=EXPAND_HORIZ, size_hint_align=(0.0, 0.5)) lb.show() box.pack_end(lb) # or header button else: if self.app.file_name is None: txt = _('No archive loaded, click to choose a file') else: ui_disabled = False txt = _('<b>Archive:</b> %s') % \ (os.path.basename(self.app.file_name)) txt = '<align=left>%s</align>' % txt lb = Label(box, ellipsis=True, text=txt) bt = Button(box, content=lb, size_hint_weight=EXPAND_HORIZ, size_hint_fill=FILL_HORIZ) bt.callback_clicked_add(lambda b: \ FileSelectorInwin(self, _('Choose an archive'), self._archive_selected_cb, path=os.getcwd())) box.pack_end(bt) bt.show() # always show the about button sep = Separator(box) box.pack_end(sep) sep.show() ic = SafeIcon(box, 'help-about', size_hint_min=(24,24)) ic.callback_clicked_add(lambda i: InfoWin(self)) box.pack_end(ic) ic.show() for widget in (self.extract_btn, self.fsb, self.create_folder_chk, self.del_chk): widget.disabled = ui_disabled self.update_fsb_label()
class DestinationButton(Button): def __init__(self, app, parent): self.app = app self._text = '' Button.__init__(self, parent, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ) self.callback_clicked_add(self._btn_clicked_cb) box = Box(self, horizontal=True, padding=(3, 0)) self.content = box box.show() icon = SafeIcon(box, 'folder', size_hint_min=(16, 16)) box.pack_end(icon) icon.show() self.label = Label(box, ellipsis=True, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_HORIZ) box.pack_end(self.label) self.label.show() def _btn_clicked_cb(self, btn): if os.path.isdir(self._text): path = self._text elif os.path.isdir(os.path.dirname(self._text)): path = os.path.dirname(self._text) else: path = os.getcwd() FileSelectorInwin(self.app.main_win, _('Choose destination'), self._fs_done_cb, folder_only=True, path=path) def _fs_done_cb(self, path): if path: self.app.dest_folder = path self.app.main_win.update_fsb_label() @property def text(self): return self._text @text.setter def text(self, text): self._text = text self.label.text = '<align=left>%s</align>' % text
def cnp_clicked(obj): win = StandardWindow("copypaste", "CopyPaste", autodel=True) if obj is None: win.callback_delete_request_add(lambda o: elementary.exit()) gd = Grid(win, size=(100, 100), size_hint_weight=EXPAND_BOTH) win.resize_object_add(gd) gd.show() en = Entry(win, scrollable=True, line_wrap=ELM_WRAP_CHAR, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH, text="Elementary provides ") gd.pack(en, 10, 10, 60, 30) en.show() bt = Button(win, text="Copy from left entry") bt.callback_clicked_add(bt_copy_clicked, en) gd.pack(bt, 70, 10, 22, 30) bt.show() bt = Button(win, text="Clear clipboard") bt.callback_clicked_add(bt_clear_clicked, en) gd.pack(bt, 70, 70, 22, 20) bt.show() en = Entry(win, scrollable=True, line_wrap=ELM_WRAP_CHAR, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH, text="rich copying and pasting functionality,") gd.pack(en, 10, 40, 60, 30) en.show() bt = Button(win, text="Paste to left entry") bt.callback_clicked_add(bt_paste_clicked, en) gd.pack(bt, 70, 40, 22, 30) bt.show() lb = Label(win, text="<b>Clipboard:</b>", size_hint_weight=(0.0, 0.0), size_hint_align=FILL_BOTH) gd.pack(lb, 10, 70, 60, 10) lb.show() global glb glb = Label(win, text="", size_hint_weight=(0.0, 0.0), size_hint_align=FILL_BOTH) gd.pack(glb, 10, 80, 60, 10) glb.show() win.size = 480, 200 win.show()
def popup_created(self, popup): super().popup_created(popup) # add all the available players to the popup edje box for player in self.mpris.players: self.popup_player_add(popup, player) # add all the channel sliders if self.pulse.conn is not None: for ch in self.pulse.channels: self.popup_volume_add(popup, ch) else: lb = Label(popup, text='Cannot connect to PulseAudio') lb.show() popup.part_box_append('volumes.box', lb)
def errorPopup(window, errorMsg): errorPopup = Popup(window, size_hint_weight=EXPAND_BOTH) errorPopup.callback_block_clicked_add(lambda obj: errorPopup.delete()) # Add a table to hold dialog image and text to Popup tb = Table(errorPopup, size_hint_weight=EXPAND_BOTH) errorPopup.part_content_set("default", tb) tb.show() # Add dialog-error Image to table need_ethumb() icon = Icon(errorPopup, thumb='True') icon.standard_set('dialog-warning') # Using gksudo or sudo fails to load Image here # unless options specify using preserving their existing environment. # may also fail to load other icons but does not raise an exception # in that situation. # Works fine using eSudo as a gksudo alternative, # other alternatives not tested try: dialogImage = Image(errorPopup, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH, file=icon.file_get()) tb.pack(dialogImage, 0, 0, 1, 1) dialogImage.show() except RuntimeError: # An error message is displayed for this same error # when aboutWin is initialized so no need to redisplay. pass # Add dialog text to table dialogLabel = Label(errorPopup, line_wrap=ELM_WRAP_WORD, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH) dialogLabel.text = errorMsg tb.pack(dialogLabel, 1, 0, 1, 1) dialogLabel.show() # Ok Button ok_btt = Button(errorPopup) ok_btt.text = "Ok" ok_btt.callback_clicked_add(lambda obj: errorPopup.delete()) ok_btt.show() # add button to popup errorPopup.part_content_set("button3", ok_btt) errorPopup.show()
def __init__(self, ourParent, ourMsg, ourIcon=None, *args, **kwargs): Popup.__init__(self, ourParent, *args, **kwargs) self.callback_block_clicked_add(lambda obj: self.delete()) # Add a table to hold dialog image and text to Popup tb = Table(self, size_hint_weight=EXPAND_BOTH) self.part_content_set("default", tb) tb.show() # Add dialog-error Image to table need_ethumb() icon = Icon(self, thumb='True') icon.standard_set(ourIcon) # Using gksudo or sudo fails to load Image here # unless options specify using preserving their existing environment. # may also fail to load other icons but does not raise an exception # in that situation. # Works fine using eSudo as a gksudo alternative, # other alternatives not tested try: dialogImage = Image(self, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH, file=icon.file_get()) tb.pack(dialogImage, 0, 0, 1, 1) dialogImage.show() except RuntimeError: # An error message is displayed for this same error # when aboutWin is initialized so no need to redisplay. pass # Add dialog text to table dialogLabel = Label(self, line_wrap=ELM_WRAP_WORD, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH) dialogLabel.text = ourMsg tb.pack(dialogLabel, 1, 0, 1, 1) dialogLabel.show() # Ok Button ok_btt = Button(self) ok_btt.text = "Ok" ok_btt.callback_clicked_add(lambda obj: self.delete()) ok_btt.show() # add button to popup self.part_content_set("button3", ok_btt)
class DestinationButton(Button): def __init__(self, app, parent): self.app = app self._text = '' Button.__init__(self, parent,size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ) self.callback_clicked_add(self._btn_clicked_cb) box = Box(self, horizontal=True, padding=(3,0)) self.content = box box.show() icon = Icon(box, standard='folder', size_hint_min=(16,16)) box.pack_end(icon) icon.show() self.label = Label(box, ellipsis=True, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_HORIZ) box.pack_end(self.label) self.label.show() def _btn_clicked_cb(self, btn): if os.path.isdir(self._text): path = self._text elif os.path.isdir(os.path.dirname(self._text)): path = os.path.dirname(self._text) else: path = os.getcwd() FileSelectorInwin(self.app.main_win, _('Choose destination'), self._fs_done_cb, folder_only=True, path=path) def _fs_done_cb(self, path): if path: self.app.dest_folder = path self.app.main_win.update_fsb_label() @property def text(self): return self._text @text.setter def text(self, text): self._text = text self.label.text = '<align=left>%s</align>' % text
def clicked_mouse(event): print(event) print() if (event.buttons == 3): dia = StandardWindow("window-dia", "DialogWindow", size=(400, 40), autodel=True) lb = Label(dia, text="This is a DialogWindow", size_hint_weight=EXPAND_BOTH) dia.resize_object_add(lb) lb.show() # dia.borderless_set(1) dia.show() return ecore.ECORE_CALLBACK_PASS_ON
def __init__(self, parent, text=None, title=None): Popup.__init__(self, parent) self.part_text_set('title,text', title or 'Please wait') box = Box(self, horizontal=True, padding=(6,6)) self.content = box box.show() wheel = Progressbar(self, style='wheel', pulse_mode=True) wheel.pulse(True) box.pack_end(wheel) wheel.show() lb = Label(self, text=text or 'Operation in progress...') box.pack_end(lb) lb.show() self.show()
def cb_menu_overlay_bubble(menu, item, Map, lon, lat): ov = Map.overlay_add(lon, lat) bub = Map.overlay_bubble_add() bub.follow(ov) lb = Label(Map, text="You can push contents here") bub.content_append(lb) lb.show() ic = Icon(Map, file=os.path.join(img_path, "sky_01.jpg")) ic.size_hint_min = 50, 50 bub.content_append(ic) ic.show() bt = Button(Map, text="clear me") bt.callback_clicked_add(lambda bt:bub.content_clear()) bub.content_append(bt) bt.show()
def sort_by_column(self, col, ascending=True): assert col >= 0 assert col < len(self.header_row) self.header_row[self.sort_column].icon = None btn = self.header_row[col] ic = Label(btn) btn.part_content_set("icon", ic) ic.show() if ascending == True: #ascending: ic.text = u"⬇" self.sort_column_ascending = True else: ic.text = u"⬆" self.sort_column_ascending = False orig_col = [ (i, x[col].data.get("sort_data", x[col].text)) \ for i, x in enumerate(self.rows) ] sorted_col = sorted(orig_col, key=lambda e: e[1]) new_order = [x[0] for x in sorted_col] # print(new_order) if not ascending: new_order.reverse() # print(new_order) for bx in self.lists: bx.unpack_all() for new_y in new_order: self.add_row(self.rows[new_y]) self.rows.sort( key=lambda e: e[col].data.get("sort_data", e[col].text), #reverse=False if ascending else True ) self.sort_column = col
def __init__( self ): win = StandardWindow("Testing", "Elementary About Dialog") win.callback_delete_request_add(lambda o: elm.exit()) win.show() lbl = Label(win, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) lbl.text = "This is a parent window for the About Dialog. Close when done." lbl.show() win.resize_object_add(lbl) win.resize(600, 400) win.show() AboutWindow(win, title="About Test", standardicon="dialog-information", \ version="1.0", authors=AUTHORS, \ licen=LICENSE, webaddress="https://github.com/JeffHoogland/python-elm-extensions", \ info=INFO)
def sort_by_column(self, col, ascending=True): assert col >= 0 assert col < len(self.header_row) self.header_row[self.sort_column].icon = None btn = self.header_row[col] ic = Label(btn) btn.part_content_set("icon", ic) ic.show() if ascending == True: #ascending: ic.text = u"⬇" self.sort_column_ascending = True else: ic.text = u"⬆" self.sort_column_ascending = False orig_col = [ (i, x[col].data.get("sort_data", x[col].text)) \ for i, x in enumerate(self.rows) ] sorted_col = sorted(orig_col, key=lambda e: e[1]) new_order = [x[0] for x in sorted_col] # print(new_order) if not ascending: new_order.reverse() # print(new_order) for bx in self.lists: bx.unpack_all() for new_y in new_order: self.add_row(self.rows[new_y]) self.rows.sort(key=lambda e: e[col].data.get("sort_data", e[col].text), #reverse=False if ascending else True ) self.sort_column = col
def __init__(self, parent): self._freezed = False # used in populate to not trigger callbacks Box.__init__(self, parent, size_hint_weight=EXPAND_VERT, size_hint_align=FILL_VERT) # status (view: all, todo or done) seg = SegmentControl(self, focus_allow=False) for name, val in ('All','all'),('Todo','todo'),('Done','done'): it = seg.item_add(None, name) it.data['view'] = val it.selected = True if options.view == val else False seg.callback_changed_add(self._status_changed_cb) self.pack_end(seg) seg.show() # @Projects list label = Label(self, text="<b>Projects +</b>", scale=1.4) self.pack_end(label) label.show() self.projs_list = List(self, multi_select=True, focus_allow=False, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) self.projs_list.callback_selected_add(self._list_selection_changed_cb) self.projs_list.callback_unselected_add(self._list_selection_changed_cb) self.pack_end(self.projs_list) self.projs_list.show() # @Contexts list label = Label(self, text="<b>Contexts @</b>", scale=1.4) self.pack_end(label) label.show() self.cxts_list = List(self, multi_select=True, focus_allow=False, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) self.cxts_list.callback_selected_add(self._list_selection_changed_cb) self.cxts_list.callback_unselected_add(self._list_selection_changed_cb) self.pack_end(self.cxts_list) self.cxts_list.show() self.show()
def __init__(self, parent, done_cb, title, text=None, guide=None, not_empty=True): self.done_cb = done_cb Popup.__init__(self, parent) self.part_text_set('title,text', title) box = Box(self, padding=(0,4)) self.content = box box.show() if text: lb = Label(self, text=text) box.pack_end(lb) lb.show() en = Entry(self, single_line=True, scrollable=True, size_hint_expand=EXPAND_BOTH, size_hint_fill=FILL_BOTH) if guide is not None: en.part_text_set('guide', guide) box.pack_end(en) en.show() sep = Separator(self, horizontal=True, size_hint_expand=EXPAND_HORIZ) box.pack_end(sep) sep.show() b = Button(self, text='Cancel') b.callback_clicked_add(lambda b: self.delete()) self.part_content_set('button1', b) b.show() b = Button(self, text='OK', disabled=not_empty) b.callback_clicked_add(self._confirmed_cb, en, done_cb) self.part_content_set('button2', b) b.show() if not_empty is True: en.callback_changed_user_add(self._entry_changed, b) en.focus = True self.show()
def worker_check(t): if t.is_alive(): return True if self.doc and self.page_count: spn.special_value_add(self.page_count, "Last") spn.min_max = (1, self.page_count) if self.doc.isEncrypted: PasswordPrompt(self) return False self.metadata_read() self.populate_pages() return False self.load_notify.content.delete() l = Label( self.load_notify, style="marker", text="Document load error", color=(255, 0, 0, 255)) self.load_notify.content = l l.show()
def __init__( self ): win = StandardWindow("Testing", "Elementary Tabbed Widget") win.callback_delete_request_add(lambda o: elm.exit()) tabbs = TabbedBox(win, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) tabbs.closeCallback = self.closeChecks for i in range(10): lbl = Label(win) lbl.text = "Tab %s"%i lbl.show() tabbs.addTab(lbl, "Tab %s"%i) tabbs.disableTab(0) tabbs.disableTab(3) tabbs.show() win.resize_object_add(tabbs) win.resize(600, 400) win.show()
def __init__(self, parent, session): Frame.__init__(self, parent) self.text = "Limits" self.size_hint_align = FILL_HORIZ base = 1024 units = ("bytes/s", "KiB/s", "MiB/s", "GiB/s", "TiB/s") t = Table(parent) for r, values in enumerate(( ("Upload limit", session.upload_rate_limit, session.set_upload_rate_limit), ("Download limit", session.download_rate_limit, session.set_download_rate_limit), ("Upload limit for local connections", session.local_upload_rate_limit, session.set_local_upload_rate_limit), ("Download limit for local connections", session.local_download_rate_limit, session.set_local_download_rate_limit), )): title, rfunc, wfunc = values l = Label(parent) l.text = title l.size_hint_align = FILL_HORIZ t.pack(l, 0, r, 1, 1) l.show() usw = UnitSpinner(parent, base, units) usw.size_hint_weight = EXPAND_HORIZ usw.size_hint_align = FILL_HORIZ usw.set_value(rfunc()) usw.callback_changed_add(wfunc, delay=2.0) t.pack(usw, 1, r, 1, 1) usw.show() self.content = t
def ask_what_to_do_next(self): pop = Popup(self) pop.part_text_set('title,text', _('Extract completed')) box = Box(pop) pop.content = box box.show() lb = Label(pop, text=_('What to do next?'), size_hint_align=FILL_HORIZ) box.pack_end(lb) lb.show() btn = Button(pop, text=_('Open Filemanager'), size_hint_align=FILL_HORIZ) btn.callback_clicked_add(self._open_fm_and_exit_cb) box.pack_end(btn) btn.show() btn = Button(pop, text=_('Open Terminal'), size_hint_align=FILL_HORIZ) btn.callback_clicked_add(self._open_term_and_exit_cb) box.pack_end(btn) btn.show() btn = Button(pop, text=_('Close this popup'), size_hint_align=FILL_HORIZ) btn.callback_clicked_add(lambda b: pop.delete()) box.pack_end(btn) btn.show() btn = Button(pop, text=_('Exit'), size_hint_align=FILL_HORIZ) btn.callback_clicked_add(lambda b: self.app.exit()) box.pack_end(btn) btn.show() pop.show()
def addPackage(self, pak): row = [] ourCheck = Check(self) ourCheck.data['packageName'] = pak.name ourCheck.callback_changed_add(self.app.checkChange) ourCheck.show() row.append(ourCheck) ourName = Button(self, style="anchor", size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ) ourName.text = pak.name ourName.data["packageDes"] = pak.candidate.description ourName.callback_pressed_add(self.packagePressed) ourName.show() row.append(ourName) ourVersion = Label(self, size_hint_weight=EXPAND_HORIZ, size_hint_align=(0.1, 0.5)) ourVersion.text = pak.installed.version ourVersion.show() row.append(ourVersion) newVersion = Label(self, size_hint_weight=EXPAND_HORIZ, size_hint_align=(0.1, 0.5)) newVersion.text = pak.candidate.version newVersion.show() row.append(newVersion) self.app.packagesToUpdate[pak.name] = { 'check': ourCheck, 'selected': False } self.packageList.row_pack(row, sort=False)
def __init__(self): self.win = StandardWindow("test", "Toolbar_issue", size=(600, 400)) self.win.callback_delete_request_add(lambda x: elementary.exit()) box0 = Box(self.win) #, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH) self.win.resize_object_add(box0) box0.show() tb = Toolbar(self.win, homogeneous=True, size_hint_weight=EXPAND_HORIZ, size_hint_align=(EVAS_HINT_FILL, 0.0), select_mode=ELM_OBJECT_SELECT_MODE_DEFAULT) self.menuItem = tb.item_append("document-save", "Save", self.popup) tb.show() box0.pack_end(tb) lb = Label(self.win) lb.text_set("<br>This is a test program to illustrate a problem <br>" "with the Radiance e19 theme.<br><br>" "Disabling a toolbar item and then re-enabling it does not<br>" "re-enable the toolbar item's <i>callback function</i>.<br><br>" "To test this first click <b>Save</b> when this program is opened<br>" "This opens a popup as expected. Dismiss popup.<br><br>" "Now click the <b>Toggle</b> button to disable <b>Save</b> Toolbar Item<br>" "After this the <b>Save</b> button is disabled and 'looks different'<br><br>" "Click the <b>Toggle</b> button again to enable <b>Save</b><br>" "After this clicking <b>Save</b> does nothing even tho it 'looks' enabled<br><br>" ) lb.show() box0.pack_end(lb) testButton = Button(self.win, text="Toogle") testButton.callback_clicked_add(self.disable) testButton.show() box0.pack_end(testButton) self.win.show()
class DagGraph(Box): def __init__(self, parent, app): Box.__init__(self, parent) # header self.label_top = Label(self, ellipsis=True, size_hint_expand=EXPAND_HORIZ, size_hint_fill=FILL_HORIZ) self.pack_end(self.label_top) self.label_top.show() # genlist self.genlist = DagGraphList(self, app) self.pack_end(self.genlist) self.genlist.show() # footer self.label = Label(self, ellipsis=True, size_hint_expand=EXPAND_HORIZ, size_hint_fill=FILL_HORIZ) self.pack_end(self.label) self.label.show() # self.show() def populate(self, *args, **kargs): self.genlist.populate(*args, **kargs) def update(self): self.genlist.update() def header_label_set(self, text): self.label_top.text = '<align=left><big>' + text + '</big></align>' def info_label_set(self, text): self.label.text = '<align=left>' + text + '</align>'
def sort_by_column(self, col, ascending=True): '''Sort column''' assert col >= 0 assert col < len(self.header_row) self.header_row[self.sort_column].icon = None btn = self.header_row[col] label = Label(btn) btn.part_content_set("labelon", label) label.show() if ascending: # sascending: label.text = u"⬇" self.sort_column_ascending = True else: label.text = u"⬆" self.sort_column_ascending = False orig_col = [ (i, x[col].data.get("sort_data", x[col].text)) for i, x in enumerate(self.rows) ] sorted_col = sorted(orig_col, key=lambda e: e[1]) new_order = [x[0] for x in sorted_col] if not ascending: new_order.reverse() for box in self.lists: box.unpack_all() for new_y in new_order: self.add_row(self.rows[new_y]) self.rows.sort(key=lambda e: e[col].data.get("sort_data", e[col].text)) self.sort_column = col
def content_get(self, gl, part, item_data): if item_data == 'STASHES': count = len(self.app.repo.stash) elif item_data == 'BRANCHES': count = len(self.app.repo.branches) elif item_data == 'TAGS': count = len(self.app.repo.tags) elif item_data == 'REMOTES': count = len(self.app.repo.remotes) box = Box(gl, horizontal=True, size_hint_expand=EXPAND_HORIZ, size_hint_fill=FILL_HORIZ) lb = Label(gl, text='<align=left><b>{}</b></align>'.format(item_data), size_hint_expand=EXPAND_HORIZ, size_hint_fill=FILL_HORIZ) box.pack_end(lb) lb.show() lb = Entry(gl, editable=False, single_line=True, text='<name>{}</name>'.format(count)) box.pack_end(lb) lb.show() return box
def sort_by_column(self, col, ascending=True): assert col >= 0 assert col < len(self.header_row) if self.sort_column: self.header_row[self.sort_column].icon = None btn = self.header_row[col] ic = Label(btn) btn.part_content_set("icon", ic) ic.show() if ascending == True: # ascending: ic.text = u"⬇" self.sort_column_ascending = True else: ic.text = u"⬆" self.sort_column_ascending = False self.rows.sort( key=lambda e: e[col], # reverse=False if ascending else True ) if not ascending: self.rows.reverse() # Clear old data for our_list in self.lists: our_list.clear() for row in self.rows: self.add_row(row) self.sort_column = col
def __init__(self, command=None, win=None, start_callback=None, end_callback=None, *args, **kwargs): if not win: nowindow = True win = self.win = Window("esudo", ELM_WIN_DIALOG_BASIC) win.title = "eSudo" win.borderless = True win.size_hint_weight = evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND win.size_hint_align = evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL win.resize(300, 200) win.callback_delete_request_add(lambda o: elementary.exit()) win.layer_set(11) #~ win.fullscreen = True win.show() win.activate() bg = Background(win) bg.size_hint_weight = 1.0, 1.0 win.resize_object_add(bg) bg.show() self.embedded = False else: nowindow = False self.embedded = True self.cmd = command self.start_cb = start_callback if callable(start_callback) else None self.end_cb = end_callback if callable(end_callback) else None self.args = args self.kwargs = kwargs #--------eSudo Window bz = Box(win) if nowindow: bz.size_hint_weight = evas.EVAS_HINT_EXPAND, 0.0 else: bz.size_hint_weight = evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND bz.size_hint_align = evas.EVAS_HINT_FILL, 0.0 bz.show() if nowindow: lbl = Label(win) lbl.style = "marker" lbl.color = 170, 170, 170, 255 lbl.size_hint_align = 0.5, 0.0 lbl.scale = 2.0 lbl.text = "<b>eSudo</b>" bz.pack_end(lbl) lbl.show() sep = Separator(win) sep.horizontal = True bz.pack_end(sep) sep.show() fr = Frame(win) fr.text = "Command:" fr.size_hint_align = evas.EVAS_HINT_FILL, 0.0 bz.pack_end(fr) fr.show() if nowindow: sep = Separator(win) sep.horizontal = True bz.pack_end(sep) sep.show() self.cmdline = cmdline = Entry(win) cmdline.elm_event_callback_add(self.entry_event) cmdline.single_line = True if self.cmd: cmdline.text = self.cmd cmdline.editable = False fr.content = cmdline cmdline.scrollable_set(True) cmdline.show() if nowindow: fr = Frame(win) fr.text = "Password:"******"<b>Password:</b>" lb.size_hint_align = 0.0, 0.5 bz1.pack_end(lb) lb.show() en = self.en = Entry(win) en.name = "password" en.elm_event_callback_add(self.entry_event) en.single_line = True en.password = True en.show() if nowindow: fr.content = en else: bz1.pack_end(en) sep = Separator(win) sep.horizontal = True bz.pack_end(sep) sep.show() btnb = Box(win) btnb.horizontal = True btnb.size_hint_weight = evas.EVAS_HINT_EXPAND, 0.0 btnb.size_hint_align = evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL bz.pack_end(btnb) btnb.show() bt = Button(win) bt.text = "Cancel" bt.callback_clicked_add(self.esudo_cancel, en) bt.size_hint_align = evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL bt.size_hint_weight = evas.EVAS_HINT_EXPAND, 0.0 btnb.pack_end(bt) bt.show() bt = Button(win) bt.text = "OK" bt.callback_clicked_add(self.password_check, en) bt.size_hint_align = evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL bt.size_hint_weight = evas.EVAS_HINT_EXPAND, 0.0 btnb.pack_end(bt) bt.show() self.iw = iw = InnerWindow(win) iw.content = bz iw.show() iw.activate() if self.cmd: en.focus = True
def __init__(self, parent, h): if not h.is_valid(): Information(parent.win, "Invalid torrent handle.") return if not h.has_metadata(): Information(parent.win, "Torrent contains no metadata.") return i = h.get_torrent_info() InnerWindow.__init__(self, parent.win) box = Box(self) box.size_hint_align = -1.0, -1.0 box.size_hint_weight = 1.0, 1.0 tname = Label(self) tname.size_hint_align = -1.0, 0.5 tname.line_wrap = ELM_WRAP_CHAR tname.ellipsis = True tname.text = "{}".format(cgi.escape(i.name())) tname.show() box.pack_end(tname) for func in i.comment, i.creation_date, i.creator: try: w = func() except Exception as e: log.debug(e) else: if w: f = Frame(self) f.size_hint_align = -1.0, 0.0 f.text = func.__name__.replace("_", " ").capitalize() l = Label(self) l.ellipsis = True l.text = cgi.escape(str(w)) l.show() f.content = l f.show() box.pack_end(f) tpriv = Check(self) tpriv.size_hint_align = 0.0, 0.0 tpriv.text = "Private" tpriv.tooltip_text_set("Whether this torrent is private.<br> \ i.e., it should not be distributed on the trackerless network<br> \ (the kademlia DHT).") tpriv.disabled = True tpriv.state = i.priv() magnet_uri = lt.make_magnet_uri(h) f = Frame(self) f.size_hint_align = -1.0, 0.0 f.text = "Magnet URI" me_box = Box(self) me_box.horizontal = True me = Entry(self) me.size_hint_align = -1.0, 0.0 me.size_hint_weight = 1.0, 0.0 #me.editable = False me.entry = magnet_uri me_box.pack_end(me) me.show() me_btn = Button(self) me_btn.text = "Copy" if hasattr(me, "cnp_selection_set"): me_btn.callback_clicked_add( lambda x: me.top_widget.cnp_selection_set( ELM_SEL_TYPE_CLIPBOARD, ELM_SEL_FORMAT_TEXT, me.text)) else: import pyperclip me_btn.callback_clicked_add(lambda x: pyperclip.copy(magnet_uri)) me_btn.show() me_box.pack_end(me_btn) me_box.show() f.content = me_box f.show() box.pack_end(f) fl_btn = Button(self) fl_btn.text = "Files ->" fl_btn.callback_clicked_add(self.file_list_cb, h) xbtn = Button(self) xbtn.text_set("Close") xbtn.callback_clicked_add(lambda x: self.delete()) for w in tpriv, fl_btn, xbtn: w.show() box.pack_end(w) box.show() nf = self.nf = Naviframe(self) nf.item_simple_push(box) self.content_set(nf) self.activate()
if __name__ == "__main__": elementary.init() win = StandardWindow("test", "python-elementary test application", size=(320, 520)) win.callback_delete_request_add(lambda o: elementary.exit()) box0 = Box(win, size_hint_weight=EXPAND_BOTH) win.resize_object_add(box0) box0.show() lb = Label(win) lb.text_set("Please select a test from the list below<br>" "by clicking the test button to show the<br>" "test window.") lb.show() fr = Frame(win, text="Information", content=lb) box0.pack_end(fr) fr.show() items = [ ("Conformant", conformant_clicked), ("Conformant 2", conformant2_clicked), ] li = List(win, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) box0.pack_end(li) li.show() for item in items:
def map_clicked(obj): win = StandardWindow("map", "Map test", autodel=True, size=(600, 600)) if obj is None: win.callback_delete_request_add(lambda o: elementary.exit()) vbox = Box(win) vbox.size_hint_weight = EXPAND_BOTH vbox.size_hint_align = FILL_BOTH win.resize_object_add(vbox) vbox.show() map_obj = Map(win, zoom=2) map_obj.size_hint_weight = EXPAND_BOTH map_obj.size_hint_align = FILL_BOTH map_obj.callback_tile_load_add(cb_map_load) map_obj.callback_tile_loaded_add(cb_map_load) map_obj.event_callback_add(EVAS_CALLBACK_MOUSE_DOWN, cb_map_mouse_down) vbox.pack_end(map_obj) map_obj.show() ### lb = Label(win, text="load_status: 0 / 0") vbox.pack_end(lb) lb.show() map_obj.data["lb_load_status"] = lb ### hbox = Box(win, horizontal=True) hbox.size_hint_weight = EXPAND_HORIZ hbox.size_hint_align = FILL_HORIZ vbox.pack_end(hbox) hbox.show() bt = Button(win, text="Goto") bt.callback_clicked_add(cb_btn_goto, map_obj) hbox.pack_end(bt) bt.show() bt = Button(win, text="Zoom +") bt.callback_clicked_add(cb_btn_zoom, map_obj, 1) hbox.pack_end(bt) bt.show() bt = Button(win, text="Zoom -") bt.callback_clicked_add(cb_btn_zoom, map_obj, -1) hbox.pack_end(bt) bt.show() sl = Slider(win, text="Rotation:", min_max=(0, 360), value=0, indicator_format="%3.0f") sl.callback_changed_add(cb_slider_rot, map_obj) hbox.pack_end(sl) sl.show() src_type = ELM_MAP_SOURCE_TYPE_TILE ho = Hoversel(win, hover_parent=win, text="Tiles: %s" % (map_obj.source_get(src_type))) for src in map_obj.sources_get(src_type): ho.item_add(src) ho.callback_selected_add(cb_hovsel_selected, map_obj, src_type, "Tiles") hbox.pack_end(ho) ho.show() ### hbox = Box(win, horizontal=True) hbox.size_hint_weight = EXPAND_HORIZ hbox.size_hint_align = FILL_HORIZ vbox.pack_end(hbox) hbox.show() ck = Check(win, text="wheel_disabled") ck.callback_changed_add(lambda bt: map_obj.wheel_disabled_set(bt.state)) hbox.pack_end(ck) ck.show() ck = Check(win, text="paused") ck.callback_changed_add(lambda bt: map_obj.paused_set(bt.state)) hbox.pack_end(ck) ck.show() ck = Check(win, text="hide overlays") ck.callback_changed_add(cb_chk_overlays_hidden, map_obj) hbox.pack_end(ck) ck.show() ck = Check(win, text="pause overlays") ck.callback_changed_add(cb_chk_overlays_paused, map_obj) hbox.pack_end(ck) ck.show() ### sp = Separator(win, horizontal=True) sp.show() vbox.pack_end(sp) hbox = Box(win, horizontal=True) hbox.size_hint_weight = EXPAND_HORIZ hbox.size_hint_align = FILL_HORIZ vbox.pack_end(hbox) hbox.show() src_type = ELM_MAP_SOURCE_TYPE_ROUTE ho = Hoversel(win, hover_parent=win, text="Routes: %s" % (map_obj.source_get(src_type))) for src in map_obj.sources_get(src_type): ho.item_add(src) ho.callback_selected_add(cb_hovsel_selected, map_obj, src_type, "Routes") hbox.pack_end(ho) ho.show() lb = Label(win, text="Set Start and End point to calculate route") hbox.pack_end(lb) lb.show() map_obj.data["lb_distance"] = lb bt = Button(win, text="Calc route") bt.callback_clicked_add(cb_btn_calc_route, map_obj) hbox.pack_end(bt) bt.show() ### sp = Separator(win, horizontal=True) sp.show() vbox.pack_end(sp) hbox = Box(win, horizontal=True) hbox.size_hint_weight = EXPAND_HORIZ hbox.size_hint_align = FILL_HORIZ vbox.pack_end(hbox) hbox.show() src_type = ELM_MAP_SOURCE_TYPE_NAME ho = Hoversel(win, hover_parent=win, text="Names: %s" % (map_obj.source_get(src_type))) for src in map_obj.sources_get(src_type): ho.item_add(src) ho.callback_selected_add(cb_hovsel_selected, map_obj, src_type, "Names") hbox.pack_end(ho) ho.show() en = Entry(win, scrollable=True, text="type an address here") en.size_hint_weight = EXPAND_BOTH en.size_hint_align = FILL_BOTH en.single_line = True hbox.pack_end(en) en.show() bt = Button(win, text="Search address") bt.callback_clicked_add(cb_btn_search_name, map_obj, en) hbox.pack_end(bt) bt.show() bt = Button(win, text="Search start point") bt.callback_clicked_add(cb_btn_search_region, map_obj, en) hbox.pack_end(bt) bt.show() print_map_info(map_obj) win.show()
def label_clicked(obj): win = StandardWindow("label", "Label test", autodel=True, size=(280, 400)) if obj is None: win.callback_delete_request_add(lambda o: elementary.exit()) vbox = Box(win, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) win.resize_object_add(vbox) vbox.show() lb = Label(win, "<b>This is a small label</b>", size_hint_align=(0.0, 0.5)) vbox.pack_end(lb) lb.show() lb = Label(win, size_hint_align=(0.0, 0.5)) lb.text = "This is a larger label with newlines<br/>" \ "to make it bigger, bit it won't expand or wrap<br/>" \ "just be a block of text that can't change its<br/>" \ "formatting as it's fixed based on text<br/>" vbox.pack_end(lb) lb.show() lb = Label(win, line_wrap=ELM_WRAP_CHAR, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH) lb.text = "<b>This is more text designed to line-wrap here as " \ "This object is resized horizontally. As it is " \ "resized vertically though, nothing should change. " \ "The amount of space allocated vertically should " \ "change as horizontal size changes.</b>" vbox.pack_end(lb) lb.show() lb = Label(win, text="This small label set to wrap", size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH) vbox.pack_end(lb) lb.show() sp = Separator(win, horizontal=True) vbox.pack_end(sp) sp.show() gd = Grid(win, size=(100, 100), size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH) vbox.pack_end(gd) gd.show() lb = Label(win, text="Test Label Ellipsis:", size_hint_align=(0.0, 0.5)) gd.pack(lb, 5, 5, 90, 15) lb.show() rect = Rectangle(win.evas, color=(255, 125, 125, 255)) gd.pack(rect, 5, 15, 90, 15) rect.show() lb = Label(win, ellipsis=True, size_hint_align=(0.0, 0.5)) lb.text = "This is a label set to ellipsis. " \ "If set ellipsis to true and the text doesn't fit " \ "in the label an ellipsis(\"...\") will be shown " \ "at the end of the widget." gd.pack(lb, 5, 15, 90, 15) lb.show() lb = Label(win, text="Test Label Slide:", size_hint_align=(0.0, 0.5)) gd.pack(lb, 5, 30, 90, 15) lb.show() rect = Rectangle(win.evas, color=(255, 125, 125, 255)) gd.pack(rect, 5, 40, 90, 15) rect.show() lb = Label(win, slide_mode=ELM_LABEL_SLIDE_MODE_AUTO, style="slide_short", size_hint_align=(0.0, 0.5), slide_duration=15) lb.text = "This is a label set to slide. " \ "If set slide to true the text of the label " \ "will slide/scroll through the length of label." \ "This only works with the themes \"slide_short\", " \ "\"slide_long\" and \"slide_bounce\"." gd.pack(lb, 5, 40, 90, 15) lb.show() rd = Radio(win, state_value=1, text="slide_short") gd.pack(rd, 5, 55, 30, 15) rd.callback_changed_add(cb_slide_radio, lb) rd.show() rdg = rd rd = Radio(win, state_value=2, text="slide_long") rd.group_add(rdg) gd.pack(rd, 35, 55, 30, 15) rd.callback_changed_add(cb_slide_radio, lb) rd.show() rd = Radio(win, state_value=3, text="slide_bounce") rd.group_add(rdg) gd.pack(rd, 65, 55, 30, 15) rd.callback_changed_add(cb_slide_radio, lb) rd.show() sl_dur = Slider(win, text="Slide Duration", unit_format="%1.1f secs", min_max=(1, 40), value=15, size_hint_align=FILL_HORIZ, size_hint_weight=EXPAND_HORIZ) sl_dur.callback_changed_add(cb_slider_duration, lb) gd.pack(sl_dur, 5, 70, 90, 15) sl_dur.show() sl_spd = Slider(win, text="Slide Speed", unit_format="%1.1f px/sec", min_max=(10, 300), value=10, size_hint_align=FILL_HORIZ, size_hint_weight=EXPAND_HORIZ) sl_spd.callback_changed_add(cb_slider_speed, lb) gd.pack(sl_spd, 5, 80, 90, 15) sl_spd.show() lb.data["slider_duration"] = sl_dur lb.data["slider_speed"] = sl_spd win.show()
def __init__(self, parent, method): Popup.__init__(self, parent) self._method = method self._param_entry = None self._return_entry = None # title self.part_text_set('title,text', 'Method: %s()' % method.name) self.show() # content is vbox vbox = Box(parent) vbox.show() self.content = vbox # params label + entry if len(method.params) > 0: label = Label(parent) label.size_hint_align = 0.0, 0.5 label.text = 'Params: ' + method.params_str label.show() vbox.pack_end(label) en = Entry(parent) self._param_entry = en en.editable = True en.scrollable = True en.single_line = True en.entry = '' en.size_hint_weight = evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND en.size_hint_align = evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL en.show() vbox.pack_end(en) sp = Separator(win) sp.horizontal = True sp.show() vbox.pack_end(sp) # returns label + entry label = Label(parent) label.size_hint_align = 0.0, 0.5 label.text = 'Returns: ' label.text += method.returns_str if method.returns_str else 'None' label.show() vbox.pack_end(label) en = Entry(parent) self._return_entry = en en.size_hint_weight = evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND en.size_hint_align = evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL en.editable = False en.scrollable = True en.disabled = True en.single_line = True # TODO this is wrong, but the only way to show the entry :/ en.entry = '<br> <br> <br>' en.show() vbox.pack_end(en) # pretty print check button def pretty_output_clicked_cb(chk): options.pretty_output = chk.state ch = Check(parent) ch.size_hint_align = 0.0, 0.5 ch.text = "Prettify output (loosing type infos)" ch.state = options.pretty_output ch.callback_changed_add(pretty_output_clicked_cb) ch.show() vbox.pack_end(ch) # popup buttons btn = Button(parent) btn.text = 'Close' btn.callback_clicked_add(lambda b: self.delete()) self.part_content_set('button1', btn) btn = Button(parent) btn.text = 'Clear output' btn.callback_clicked_add(lambda b: self._return_entry.entry_set('')) self.part_content_set('button2', btn) btn = Button(parent) btn.text = 'Run method' btn.callback_clicked_add(self.run_clicked_cb) self.part_content_set('button3', btn)