Browse Source

Added some more logic in the TTkFilePicker

pull/18/head
Eugenio Parodi 4 years ago
parent
commit
cece199331
  1. 6
      TermTk/TTkGui/fileicon_ascii.py
  2. 6
      TermTk/TTkGui/fileicon_nerd.py
  3. 6
      TermTk/TTkGui/fileicon_utf8.py
  4. 14
      TermTk/TTkGui/theme.py
  5. 78
      TermTk/TTkWidgets/TTkPickers/filepicker.py
  6. 6
      TermTk/TTkWidgets/label.py
  7. 5
      TermTk/TTkWidgets/listwidget.py

6
TermTk/TTkGui/fileicon_ascii.py

@ -21,8 +21,10 @@
# SOFTWARE.
class FileIcon():
folder_close = '+'
folder_open = '-'
folderClose = '+'
folderOpen = '-'
home = '-'
computer = '-'
@staticmethod
def getIcon(fileName):

6
TermTk/TTkGui/fileicon_nerd.py

@ -33,8 +33,10 @@ import os
from TermTk.TTkCore.color import TTkColor
class FileIcon():
folder_close = ''
folder_open = ''
folderClose = ''
folderOpen = ''
home = ''
computer = ''
file_node_exact_matches = (
('.bashprofile' , ''),

6
TermTk/TTkGui/fileicon_utf8.py

@ -21,8 +21,10 @@
# SOFTWARE.
class FileIcon():
folder_close = '+'
folder_open = '-'
folderClose = '+'
folderOpen = '-'
home = ''
computer = ''
@staticmethod
def getIcon(fileName):

14
TermTk/TTkGui/theme.py

@ -67,14 +67,7 @@ class TTkTheme():
folderIconColor = TTkColor.fg("#FFFFAA") # Yellowish
'''Default to **TTkColor.fg("#FFFFAA") # Yellowish**'''
getIcon = fi_utf8.FileIcon.getIcon
folderIconClose = TTkString() + folderIconColor + fi_utf8.FileIcon.folder_close + TTkColor.RST
folderIconOpen = TTkString() + folderIconColor + fi_utf8.FileIcon.folder_open + TTkColor.RST
@staticmethod
def getFileIcon(file):
return TTkString() + TTkTheme.fileIconColor + TTkTheme.getIcon(file) + TTkColor.RST
fileIcon = fi_utf8.FileIcon
@staticmethod
def loadTheme(theme):
@ -90,10 +83,7 @@ class TTkTheme():
TTkTheme.tab = theme['draw'].TTkTheme.tab
TTkTheme.braille = theme['draw'].TTkTheme.braille
TTkTheme.getIcon = theme['file'].FileIcon.getIcon
TTkTheme.folderIconClose = TTkString() + TTkTheme.folderIconColor + theme['file'].FileIcon.folder_close + TTkColor.RST
TTkTheme.folderIconOpen = TTkString() + TTkTheme.folderIconColor + theme['file'].FileIcon.folder_open + TTkColor.RST
TTkTheme.fileIcon = theme['file'].FileIcon
TTkHelper.updateAll()

78
TermTk/TTkWidgets/TTkPickers/filepicker.py

@ -31,6 +31,7 @@ from TermTk.TTkCore.constant import TTkK
from TermTk.TTkCore.log import TTkLog
from TermTk.TTkCore.cfg import TTkCfg
from TermTk.TTkCore.string import TTkString
from TermTk.TTkWidgets.lineedit import TTkLineEdit
from TermTk.TTkWidgets.window import TTkWindow
from TermTk.TTkWidgets.tree import TTkTree
from TermTk.TTkWidgets.treewidgetitem import TTkTreeWidgetItem
@ -40,6 +41,7 @@ from TermTk.TTkWidgets.combobox import TTkComboBox
from TermTk.TTkWidgets.button import TTkButton
from TermTk.TTkWidgets.label import TTkLabel
from TermTk.TTkWidgets.list_ import TTkList
from TermTk.TTkWidgets.listwidget import TTkAbstractListItem
from TermTk.TTkLayouts.gridlayout import TTkGridLayout
from TermTk.TTkCore.signal import pyTTkSlot, pyTTkSignal
@ -78,7 +80,8 @@ class _FileTreeWidgetItem(TTkTreeWidgetItem):
class TTkFileDialogPicker(TTkWindow):
__slots__ = ('_path', '_recentPath', '_recentPathId', '_filter', '_caption',
# Widgets
'_fileTree', '_lookPath', 'btnPrev', 'btnNext', 'btnUp',
'_fileTree', '_lookPath', '_btnPrev', '_btnNext', '_btnUp',
'_fileName', '_fileType', '_btnOpen', '_btnCancel',
# Signals
'filePicked')
@ -103,34 +106,53 @@ class TTkFileDialogPicker(TTkWindow):
topLayout = TTkGridLayout()
self.layout().addItem(topLayout,0,0)
topLayout.addWidget(TTkLabel(text="Look in:",maxWidth=14), 0,0)
topLayout.addWidget(lookPath := TTkComboBox(textAlign=TTkK.LEFT_ALIGN), 0,1)
topLayout.addWidget(btnPrev := TTkButton(text="<",maxWidth=3,enabled=False), 0,2)
topLayout.addWidget(btnNext := TTkButton(text=">",maxWidth=3,enabled=False), 0,3)
topLayout.addWidget(btnUp := TTkButton(text="^",maxWidth=3,enabled=True), 0,4)
self._lookPath = lookPath
self._btnPrev = btnPrev
self._btnNext = btnNext
self._btnUp = btnUp
self._lookPath = TTkComboBox(textAlign=TTkK.LEFT_ALIGN)
self._btnPrev = TTkButton(text="<",maxWidth=3, enabled=False)
self._btnNext = TTkButton(text=">",maxWidth=3, enabled=False)
self._btnUp = TTkButton(text="^",maxWidth=3, enabled=True)
self._btnPrev.clicked.connect(self._openPrev)
self._btnNext.clicked.connect(self._openNext)
self._btnUp.clicked.connect( self._openUp)
topLayout.addWidget(TTkLabel(text="Look in:",maxWidth=14), 0,0)
topLayout.addWidget(self._lookPath , 0,1)
topLayout.addWidget(self._btnPrev , 0,2)
topLayout.addWidget(self._btnNext , 0,3)
topLayout.addWidget(self._btnUp , 0,4)
# Bottom (File Name, Controls)
self._fileName = TTkLineEdit()
self._fileType = TTkComboBox()
self._btnOpen = TTkButton(text="Open", maxWidth=8, enabled=False)
self._btnCancel = TTkButton(text="Cancel",maxWidth=8)
self._btnOpen.clicked.connect(self._open)
self._btnCancel.clicked.connect(self.close)
self._fileName.returnPressed.connect(self._open)
self._fileName.textChanged.connect(self._checkFileName)
self._fileName.textEdited.connect(self._checkFileName)
bottomLayout = TTkGridLayout()
self.layout().addItem(bottomLayout,2,0)
bottomLayout.addWidget(TTkLabel(text="File name:" ,maxWidth=14), 0,0)
bottomLayout.addWidget(TTkLabel(text="Files of type:" ,maxWidth=14), 1,0)
bottomLayout.addWidget(_xxyyzz := TTkComboBox(), 0,1)
bottomLayout.addWidget(_aabbcc := TTkComboBox(), 1,1)
bottomLayout.addWidget(btnOpen := TTkButton(text="Open", maxWidth=8), 0,2)
bottomLayout.addWidget(btnCancel := TTkButton(text="Cancel",maxWidth=8), 1,2)
bottomLayout.addWidget(self._fileName , 0,1)
bottomLayout.addWidget(self._fileType , 1,1)
bottomLayout.addWidget(self._btnOpen , 0,2)
bottomLayout.addWidget(self._btnCancel , 1,2)
# Center (self._fileTree, Bookmarks)
splitter = TTkSplitter(border=True)
self.layout().addWidget(splitter,1,0)
bookmarks = TTkList(parent=splitter)
bookmarks.addItem(TTkString() + TTkCfg.theme.fileIconColor + TTkCfg.theme.fileIcon.computer + TTkColor.RST+" Computer", data='/')
bookmarks.addItem(TTkString() + TTkCfg.theme.fileIconColor + TTkCfg.theme.fileIcon.home + TTkColor.RST+" Home", data=os.path.expanduser("~"))
def _bookmarksCallback(item):
self._openNewPath(item.data)
bookmarks.itemClicked.connect(_bookmarksCallback)
# Home Folder (Win Compatible):
# os.path.expanduser("~")
@ -141,11 +163,31 @@ class TTkFileDialogPicker(TTkWindow):
self._fileTree.itemExpanded.connect(TTkFileDialogPicker._folderExpanded)
self._fileTree.itemCollapsed.connect(TTkFileDialogPicker._folderCollapsed)
self._fileTree.itemClicked.connect(self._selectedItem)
self._fileTree.itemActivated.connect(self._activatedItem)
self._lookPath.currentTextChanged.connect(self._openNewPath)
self._openNewPath(self._path, True)
@pyTTkSlot(str)
def _checkFileName(self, fileName):
if os.path.exists(fileName):
self._btnOpen.setEnabled()
else:
self._btnOpen.setDisabled()
@pyTTkSlot()
def _open(self):
fileName = self._fileName.text()
if not os.path.exists(fileName): return
self.filePicked.emit(fileName)
self.close()
@pyTTkSlot(TTkTreeWidgetItem, int)
def _selectedItem(self, item, _):
if item.getType() != item.FILE: return
self._fileName.setText(item.path())
@pyTTkSlot(TTkTreeWidgetItem, int)
def _activatedItem(self, item, _):
path = item.path()
@ -254,7 +296,7 @@ class TTkFileDialogPicker(TTkWindow):
[ name, "", typef, time],
path=nodePath,
type=_FileTreeWidgetItem.DIR,
icon=TTkCfg.theme.folderIconClose,
icon=TTkString() + TTkCfg.theme.folderIconColor + TTkCfg.theme.fileIcon.folderClose + TTkColor.RST,
childIndicatorPolicy=TTkK.ShowIndicator))
elif os.path.isfile(nodePath) or os.path.islink(nodePath):
@ -283,17 +325,17 @@ class TTkFileDialogPicker(TTkWindow):
[ name, size, typef, time],
path=nodePath,
type=_FileTreeWidgetItem.FILE,
icon=TTkCfg.theme.getFileIcon(n),
icon=TTkString() + TTkCfg.theme.fileIconColor + TTkCfg.theme.fileIcon.getIcon(n) + TTkColor.RST,
childIndicatorPolicy=TTkK.DontShowIndicator))
return ret
@staticmethod
def _folderExpanded(item):
item.setIcon(0, TTkCfg.theme.folderIconOpen)
item.setIcon(0, TTkString() + TTkCfg.theme.folderIconColor + TTkCfg.theme.fileIcon.folderOpen + TTkColor.RST,)
@staticmethod
def _folderCollapsed(item):
item.setIcon(0, TTkCfg.theme.folderIconClose)
item.setIcon(0, TTkString() + TTkCfg.theme.folderIconColor + TTkCfg.theme.fileIcon.folderClose + TTkColor.RST,)
@staticmethod
def _updateChildren(item):

6
TermTk/TTkWidgets/label.py

@ -22,6 +22,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
from TermTk.TTkCore.color import TTkColor
from TermTk.TTkCore.log import TTkLog
from TermTk.TTkWidgets.widget import *
from TermTk.TTkTemplates.color import TColor
@ -38,8 +39,9 @@ class TTkLabel(TTkWidget, TColor, TText):
self.textUpdated(self.text)
def paintEvent(self):
self._canvas.drawText(pos=(0,0), text=' '*self.width(), color=self.color)
self._canvas.drawText(pos=(0,0), text=self.text, color=self.color)
forceColor = self.color!=TTkColor.RST
self._canvas.drawText(pos=(0,0), text=' '*self.width(), color=self.color, forceColor=forceColor)
self._canvas.drawText(pos=(0,0), text=self.text, color=self.color, forceColor=forceColor)
def textUpdated(self, text):
w, h = self.size()

5
TermTk/TTkWidgets/listwidget.py

@ -27,6 +27,7 @@ from TermTk.TTkCore.constant import TTkK
from TermTk.TTkCore.log import TTkLog
from TermTk.TTkCore.signal import pyTTkSlot, pyTTkSignal
from TermTk.TTkCore.color import TTkColor
from TermTk.TTkCore.string import TTkString
from TermTk.TTkWidgets.widget import TTkWidget
from TermTk.TTkWidgets.label import TTkLabel
from TermTk.TTkAbstract.abstractscrollview import TTkAbstractScrollView
@ -176,12 +177,12 @@ class TTkListWidget(TTkAbstractScrollView):
minw = self.width()
for item in self._items:
minw = max(minw,item.minimumWidth())
for y,item in enumerate(self._items):
for y,item in enumerate(self._items):
item.setGeometry(0,y,minw,1)
self.viewChanged.emit()
def addItemAt(self, item, pos, data=None):
if isinstance(item, str):
if isinstance(item, str) or isinstance(item, TTkString):
#label = TTkAbstractListItem(text=item, width=max(len(item),self.width()))
label = TTkAbstractListItem(text=item, data=data)
label.listItemClicked.connect(self._labelSelectedHandler)

Loading…
Cancel
Save