93 self.__nameCompleter.activated.connect(self.__nameCompleterActivated) |
93 self.__nameCompleter.activated.connect(self.__nameCompleterActivated) |
94 self.nameEdit.setCompleter(self.__nameCompleter) |
94 self.nameEdit.setCompleter(self.__nameCompleter) |
95 |
95 |
96 self.__contextMenu = QMenu(self) |
96 self.__contextMenu = QMenu(self) |
97 |
97 |
98 self.__fsInterface = ericApp().getObject("EricServer").getServiceInterface( |
98 self.__fsInterface = ( |
99 "FileSystem" |
99 ericApp().getObject("EricServer").getServiceInterface("FileSystem") |
100 ) |
100 ) |
101 |
101 |
102 # set some default values |
102 # set some default values |
103 self.__fileMode = FileMode.ExistingFile |
103 self.__fileMode = FileMode.ExistingFile |
104 self.__dirsOnly = False |
104 self.__dirsOnly = False |
333 @param item reference to the activated item |
333 @param item reference to the activated item |
334 @type QTreeWidgetItem |
334 @type QTreeWidgetItem |
335 @param column column number (unused) |
335 @param column column number (unused) |
336 @type int |
336 @type int |
337 """ |
337 """ |
338 if ( |
338 if item.data(0, EricServerFileDialog.IsDirectoryRole): |
339 item.data(0, EricServerFileDialog.IsDirectoryRole) |
|
340 ): |
|
341 self.setDirectory(self.__getFullPath(item.text(0))) |
339 self.setDirectory(self.__getFullPath(item.text(0))) |
342 else: |
340 else: |
343 self.accept() |
341 self.accept() |
344 |
342 |
345 @pyqtSlot() |
343 @pyqtSlot() |
363 selected.append(itm.text(0)) |
361 selected.append(itm.text(0)) |
364 |
362 |
365 if len(selected) == 1: |
363 if len(selected) == 1: |
366 self.nameEdit.setText(selected[0]) |
364 self.nameEdit.setText(selected[0]) |
367 elif len(selected) > 1: |
365 elif len(selected) > 1: |
368 self.nameEdit.setText( |
366 self.nameEdit.setText('"{0}"'.format('" "'.join(selected))) |
369 '"{0}"'.format('" "'.join(selected)) |
|
370 ) |
|
371 |
367 |
372 self.__updateOkButton() |
368 self.__updateOkButton() |
373 |
369 |
374 @pyqtSlot() |
370 @pyqtSlot() |
375 def __nameCompleterActivated(self): |
371 def __nameCompleterActivated(self): |
443 if self.__selectedDirectory and self.__fileMode != FileMode.Directory: |
439 if self.__selectedDirectory and self.__fileMode != FileMode.Directory: |
444 self.okButton.setEnabled(True) |
440 self.okButton.setEnabled(True) |
445 elif self.__fileMode == FileMode.AnyFile: |
441 elif self.__fileMode == FileMode.AnyFile: |
446 self.okButton.setEnabled(bool(self.nameEdit.text())) |
442 self.okButton.setEnabled(bool(self.nameEdit.text())) |
447 elif self.__fileMode == FileMode.ExistingFile: |
443 elif self.__fileMode == FileMode.ExistingFile: |
448 self.okButton.setEnabled( |
444 self.okButton.setEnabled(self.nameEdit.text() in self.__filenameCache) |
449 self.nameEdit.text() in self.__filenameCache |
|
450 ) |
|
451 elif self.__fileMode == FileMode.ExistingFiles: |
445 elif self.__fileMode == FileMode.ExistingFiles: |
452 names = self.__getNames() |
446 names = self.__getNames() |
453 self.okButton.setEnabled( |
447 self.okButton.setEnabled(all(n in self.__filenameCache for n in names)) |
454 all(n in self.__filenameCache for n in names) |
|
455 ) |
|
456 elif self.__fileMode == FileMode.Directory: |
448 elif self.__fileMode == FileMode.Directory: |
457 self.okButton.setEnabled(True) |
449 self.okButton.setEnabled(True) |
458 else: |
450 else: |
459 self.okButton.setEnabled(False) |
451 self.okButton.setEnabled(False) |
460 |
452 |
515 # 2. populate the directory listing |
507 # 2. populate the directory listing |
516 self.listing.clear() |
508 self.listing.clear() |
517 for dirEntry in sorted( |
509 for dirEntry in sorted( |
518 dirListing, |
510 dirListing, |
519 key=lambda d: ( |
511 key=lambda d: ( |
520 " " + d['name'].lower() if d["is_dir"] else d["name"].lower() |
512 " " + d["name"].lower() if d["is_dir"] else d["name"].lower() |
521 ), |
513 ), |
522 ): |
514 ): |
523 if dirEntry["is_dir"]: |
515 if dirEntry["is_dir"]: |
524 type_ = self.tr("Directory") |
516 type_ = self.tr("Directory") |
525 iconName = "dirClosed" |
517 iconName = "dirClosed" |
529 type_ = self.tr("File") |
521 type_ = self.tr("File") |
530 iconName = self.__iconProvider.fileIconName(dirEntry["name"]) |
522 iconName = self.__iconProvider.fileIconName(dirEntry["name"]) |
531 sizeStr = dataString(dirEntry["size"], QLocale.system()) |
523 sizeStr = dataString(dirEntry["size"], QLocale.system()) |
532 self.__filenameCache.append(dirEntry["name"]) |
524 self.__filenameCache.append(dirEntry["name"]) |
533 itm = QTreeWidgetItem( |
525 itm = QTreeWidgetItem( |
534 self.listing, |
526 self.listing, [dirEntry["name"], sizeStr, type_, dirEntry["mtime"]] |
535 [dirEntry["name"], sizeStr, type_, dirEntry["mtime"]] |
|
536 ) |
527 ) |
537 itm.setIcon(0, EricPixmapCache.getIcon(iconName)) |
528 itm.setIcon(0, EricPixmapCache.getIcon(iconName)) |
538 itm.setTextAlignment(1, Qt.AlignmentFlag.AlignRight) |
529 itm.setTextAlignment(1, Qt.AlignmentFlag.AlignRight) |
539 itm.setTextAlignment(2, Qt.AlignmentFlag.AlignHCenter) |
530 itm.setTextAlignment(2, Qt.AlignmentFlag.AlignHCenter) |
540 itm.setData(0, EricServerFileDialog.IsDirectoryRole, dirEntry["is_dir"]) |
531 itm.setData(0, EricServerFileDialog.IsDirectoryRole, dirEntry["is_dir"]) |
633 else: |
624 else: |
634 EricMessageBox.critical( |
625 EricMessageBox.critical( |
635 self, |
626 self, |
636 title, |
627 title, |
637 self.tr( |
628 self.tr( |
638 "<p>The renaming operation failed.</p>" |
629 "<p>The renaming operation failed.</p><p>Reason: {0}</p>" |
639 "<p>Reason: {0}</p>" |
|
640 ).format(error if error else self.tr("Unknown")), |
630 ).format(error if error else self.tr("Unknown")), |
641 ) |
631 ) |
642 |
632 |
643 @pyqtSlot(QTreeWidgetItem) |
633 @pyqtSlot(QTreeWidgetItem) |
644 def __deleteItem(self, item): |
634 def __deleteItem(self, item): |
673 else: |
663 else: |
674 EricMessageBox.critical( |
664 EricMessageBox.critical( |
675 self, |
665 self, |
676 title, |
666 title, |
677 self.tr( |
667 self.tr( |
678 "<p>The deletion operation failed.</p>" |
668 "<p>The deletion operation failed.</p><p>Reason: {0}</p>" |
679 "<p>Reason: {0}</p>" |
|
680 ).format(error if error else self.tr("Unknown")), |
669 ).format(error if error else self.tr("Unknown")), |
681 ) |
670 ) |
682 |
671 |
683 @pyqtSlot(bool) |
672 @pyqtSlot(bool) |
684 def __showHiddenToggled(self, on): |
673 def __showHiddenToggled(self, on): |
693 self.__filterList(filters) |
682 self.__filterList(filters) |
694 |
683 |
695 def selectedFiles(self): |
684 def selectedFiles(self): |
696 """ |
685 """ |
697 Public method to get the selected files or the current viewport path. |
686 Public method to get the selected files or the current viewport path. |
698 |
687 |
699 @return selected files or current viewport path |
688 @return selected files or current viewport path |
700 @rtype str |
689 @rtype str |
701 """ |
690 """ |
702 if self.__fileMode == FileMode.Directory and not self.nameEdit.text(): |
691 if self.__fileMode == FileMode.Directory and not self.nameEdit.text(): |
703 return [self.treeCombo.currentText()] |
692 return [self.treeCombo.currentText()] |
705 return [self.__getFullPath(n) for n in self.__getNames()] |
694 return [self.__getFullPath(n) for n in self.__getNames()] |
706 |
695 |
707 def selectedNameFilter(self): |
696 def selectedNameFilter(self): |
708 """ |
697 """ |
709 Public method to get the selected name filter. |
698 Public method to get the selected name filter. |
710 |
699 |
711 @return selected name filter |
700 @return selected name filter |
712 @rtype str |
701 @rtype str |
713 """ |
702 """ |
714 return self.filterCombo.currentText() |
703 return self.filterCombo.currentText() |
715 |
704 |
735 """ |
724 """ |
736 self.listing.clearSelection() |
725 self.listing.clearSelection() |
737 for row in range(self.listing.topLevelItemCount()): |
726 for row in range(self.listing.topLevelItemCount()): |
738 itm = self.listing.topLevelItem(row) |
727 itm = self.listing.topLevelItem(row) |
739 name = itm.text(0) |
728 name = itm.text(0) |
740 if ( |
729 if self.__dirsOnly and not itm.data( |
741 self.__dirsOnly |
730 0, EricServerFileDialog.IsDirectoryRole |
742 and not itm.data(0, EricServerFileDialog.IsDirectoryRole) |
|
743 ): |
731 ): |
744 itm.setHidden(True) |
732 itm.setHidden(True) |
745 elif not self.__showHidden and self.__isHidden(name): |
733 elif not self.__showHidden and self.__isHidden(name): |
746 # applies to files and directories |
734 # applies to files and directories |
747 itm.setHidden(True) |
735 itm.setHidden(True) |
753 |
741 |
754 # resize the columns |
742 # resize the columns |
755 for column in range(4): |
743 for column in range(4): |
756 self.listing.resizeColumnToContents(column) |
744 self.listing.resizeColumnToContents(column) |
757 |
745 |
|
746 |
758 ########################################################################### |
747 ########################################################################### |
759 ## Module functions mimicing the interface of EricFileDialog/QFileDialog |
748 ## Module functions mimicing the interface of EricFileDialog/QFileDialog |
760 ########################################################################### |
749 ########################################################################### |
761 |
750 |
762 |
751 |
763 def getOpenFileName( |
752 def getOpenFileName( |
764 parent=None, caption="", directory="", filterStr="", initialFilter="", |
753 parent=None, |
765 withRemote=True |
754 caption="", |
|
755 directory="", |
|
756 filterStr="", |
|
757 initialFilter="", |
|
758 withRemote=True, |
766 ): |
759 ): |
767 """ |
760 """ |
768 Module function to get the name of a file for opening it. |
761 Module function to get the name of a file for opening it. |
769 |
762 |
770 @param parent parent widget of the dialog (defaults to None) |
763 @param parent parent widget of the dialog (defaults to None) |
787 parent, caption, directory, filterStr, initialFilter, withRemote |
780 parent, caption, directory, filterStr, initialFilter, withRemote |
788 )[0] |
781 )[0] |
789 |
782 |
790 |
783 |
791 def getOpenFileNameAndFilter( |
784 def getOpenFileNameAndFilter( |
792 parent=None, caption="", directory="", filterStr="", initialFilter="", |
785 parent=None, |
793 withRemote=True |
786 caption="", |
|
787 directory="", |
|
788 filterStr="", |
|
789 initialFilter="", |
|
790 withRemote=True, |
794 ): |
791 ): |
795 """ |
792 """ |
796 Module function to get the name of a file for opening it and the selected |
793 Module function to get the name of a file for opening it and the selected |
797 file name filter. |
794 file name filter. |
798 |
795 |
830 |
827 |
831 return fileName, selectedFilter |
828 return fileName, selectedFilter |
832 |
829 |
833 |
830 |
834 def getOpenFileNames( |
831 def getOpenFileNames( |
835 parent=None, caption="", directory="", filterStr="", initialFilter="", |
832 parent=None, |
836 withRemote=True |
833 caption="", |
|
834 directory="", |
|
835 filterStr="", |
|
836 initialFilter="", |
|
837 withRemote=True, |
837 ): |
838 ): |
838 """ |
839 """ |
839 Module function to get a list of names of files for opening. |
840 Module function to get a list of names of files for opening. |
840 |
841 |
841 @param parent parent widget of the dialog (defaults to None) |
842 @param parent parent widget of the dialog (defaults to None) |
858 parent, caption, directory, filterStr, initialFilter, withRemote |
859 parent, caption, directory, filterStr, initialFilter, withRemote |
859 )[0] |
860 )[0] |
860 |
861 |
861 |
862 |
862 def getOpenFileNamesAndFilter( |
863 def getOpenFileNamesAndFilter( |
863 parent=None, caption="", directory="", filterStr="", initialFilter="", |
864 parent=None, |
864 withRemote=True |
865 caption="", |
|
866 directory="", |
|
867 filterStr="", |
|
868 initialFilter="", |
|
869 withRemote=True, |
865 ): |
870 ): |
866 """ |
871 """ |
867 Module function to get a list of names of files for opening and the |
872 Module function to get a list of names of files for opening and the |
868 selected file name filter. |
873 selected file name filter. |
869 |
874 |
903 |
908 |
904 return filesList, selectedFilter |
909 return filesList, selectedFilter |
905 |
910 |
906 |
911 |
907 def getSaveFileName( |
912 def getSaveFileName( |
908 parent=None, caption="", directory="", filterStr="", initialFilter="", |
913 parent=None, |
909 withRemote=True |
914 caption="", |
|
915 directory="", |
|
916 filterStr="", |
|
917 initialFilter="", |
|
918 withRemote=True, |
910 ): |
919 ): |
911 """ |
920 """ |
912 Module function to get the name of a file for saving. |
921 Module function to get the name of a file for saving. |
913 |
922 |
914 @param parent parent widget of the dialog (defaults to None) |
923 @param parent parent widget of the dialog (defaults to None) |
931 parent, caption, directory, filterStr, initialFilter, withRemote |
940 parent, caption, directory, filterStr, initialFilter, withRemote |
932 )[0] |
941 )[0] |
933 |
942 |
934 |
943 |
935 def getSaveFileNameAndFilter( |
944 def getSaveFileNameAndFilter( |
936 parent=None, caption="", directory="", filterStr="", initialFilter="", |
945 parent=None, |
937 withRemote=True |
946 caption="", |
|
947 directory="", |
|
948 filterStr="", |
|
949 initialFilter="", |
|
950 withRemote=True, |
938 ): |
951 ): |
939 """ |
952 """ |
940 Module function to get the name of a file for saving and the selected file name |
953 Module function to get the name of a file for saving and the selected file name |
941 filter. |
954 filter. |
942 |
955 |