"""
"""
import os
from const import *
import table, area
import basic, input, button
class Dialog(table.Table):
"""A dialog window with a title bar and an "close" button on the bar.
Dialog(title,main)
- title
- title widget, usually a label
- main
- main widget, usually a container
Example
title = gui.Label("My Title")
main = gui.Container()
#add stuff to the container...
d = gui.Dialog(title,main)
d.open()
"""
def __init__(self,title,main,**params):
params.setdefault('cls','dialog')
table.Table.__init__(self,**params)
self.tr()
self.td(title,align=-1,cls=self.cls+'.bar')
clos = button.Icon(self.cls+".bar.close")
clos.connect(CLICK,self.close,None)
self.td(clos,align=1,cls=self.cls+'.bar')
self.tr()
self.td(main,colspan=2,cls=self.cls+".main")
# self.tr()
#
#
# t = table.Table(cls=self.cls+".bar")
# t.tr()
# t.td(title)
# clos = button.Icon(self.cls+".bar.close")
# t.td(clos,align=1)
# clos.connect(CLICK,self.close,None)
# self.add(t,0,0)
#
# main.rect.w,main.rect.h = main.resize()
# clos.rect.w,clos.rect.h = clos.resize()
# title.container.style.width = main.rect.w - clos.rect.w
#
# self.tr()
# self.td(main,cls=self.cls+".main")
#
class FileDialog(Dialog):
"""A file picker dialog window.
FileDialog()
Some optional parameters:
- title_txt
- title text
- button_txt
- button text
- path
- initial path
"""
def __init__(self, title_txt="File Browser", button_txt="Okay", cls="dialog", path=None):
cls1 = 'filedialog'
if not path: self.curdir = os.getcwd()
else: self.curdir = path
import app
self.dir_img = basic.Image(app.App.app.theme.get(cls1+'.folder', '', 'image'))
td_style = {'padding_left': 4,
'padding_right': 4,
'padding_top': 2,
'padding_bottom': 2}
self.title = basic.Label(title_txt, cls=cls+".title.label")
self.body = table.Table()
self.list = area.List(width=350, height=150)
self.input_dir = input.Input()
self.input_file = input.Input()
self._list_dir_()
self.button_ok = button.Button(button_txt)
self.body.tr()
self.body.td(basic.Label("Folder"), style=td_style, align=-1)
self.body.td(self.input_dir, style=td_style)
self.body.tr()
self.body.td(self.list, colspan=3, style=td_style)
self.list.connect(CHANGE, self._item_select_changed_, None)
self.button_ok.connect(CLICK, self._button_okay_clicked_, None)
self.body.tr()
self.body.td(basic.Label("File"), style=td_style, align=-1)
self.body.td(self.input_file, style=td_style)
self.body.td(self.button_ok, style=td_style)
self.value = None
Dialog.__init__(self, self.title, self.body)
def _list_dir_(self):
self.input_dir.value = self.curdir
self.input_dir.pos = len(self.curdir)
self.input_dir.vpos = 0
dirs = []
files = []
try:
for i in os.listdir(self.curdir):
if os.path.isdir(os.path.join(self.curdir, i)): dirs.append(i)
else: files.append(i)
except:
self.input_file.value = "Opps! no access"
#if '..' not in dirs: dirs.append('..')
dirs.sort()
dirs = ['..'] + dirs
files.sort()
for i in dirs:
#item = ListItem(image=self.dir_img, text=i, value=i)
self.list.add(i,image=self.dir_img,value=i)
for i in files:
#item = ListItem(image=None, text=i, value=i)
self.list.add(i,value=i)
#self.list.resize()
self.list.set_vertical_scroll(0)
#self.list.repaintall()
def _item_select_changed_(self, arg):
self.input_file.value = self.list.value
fname = os.path.abspath(os.path.join(self.curdir, self.input_file.value))
if os.path.isdir(fname):
self.input_file.value = ""
self.curdir = fname
self.list.clear()
self._list_dir_()
def _button_okay_clicked_(self, arg):
if self.input_dir.value != self.curdir:
if os.path.isdir(self.input_dir.value):
self.input_file.value = ""
self.curdir = os.path.abspath(self.input_dir.value)
self.list.clear()
self._list_dir_()
else:
self.value = os.path.join(self.curdir, self.input_file.value)
self.send(CHANGE)
self.close()