diff options
Diffstat (limited to 'kio/kfile')
100 files changed, 0 insertions, 33753 deletions
diff --git a/kio/kfile/CMakeLists.txt b/kio/kfile/CMakeLists.txt deleted file mode 100644 index 3444fa0da..000000000 --- a/kio/kfile/CMakeLists.txt +++ /dev/null @@ -1,76 +0,0 @@ -################################################# -# -# (C) 2010 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -include_directories( - ${TQT_INCLUDE_DIRS} - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_BINARY_DIR}/tdecore - ${CMAKE_SOURCE_DIR} - ${CMAKE_SOURCE_DIR}/dcop - ${CMAKE_SOURCE_DIR}/tdefx - ${CMAKE_SOURCE_DIR}/tdecore - ${CMAKE_SOURCE_DIR}/tdeui - ${CMAKE_SOURCE_DIR}/kio - ${CMAKE_SOURCE_DIR}/kio/kio - ${CMAKE_SOURCE_DIR}/kio/bookmarks - ${LIBART_INCLUDE_DIRS} -) - - -##### headers ################################### - -install( FILES - kfiledialog.h kencodingfiledialog.h - kdiroperator.h kfileview.h kfilefiltercombo.h - kfiledetailview.h kcombiview.h kdiskfreesp.h - kfileiconview.h krecentdocument.h - kurlrequester.h kfilepreview.h kfile.h - kurlcombobox.h kurlrequesterdlg.h kopenwith.h kpropsdlg.h - kicondialog.h kdirsize.h kpreviewwidgetbase.h kimagefilepreview.h kfilesharedlg.h - kfiletreeview.h kfiletreeviewitem.h kfiletreebranch.h - kdirselectdialog.h kurlbar.h kpropertiesdialog.h knotifydialog.h - kcustommenueditor.h ${CMAKE_CURRENT_BINARY_DIR}/knotifywidgetbase.h - DESTINATION ${INCLUDE_INSTALL_DIR} ) - - -##### other data ################################ - -install( FILES - kpropsdlgplugin.desktop - DESTINATION ${SERVICETYPES_INSTALL_DIR} ) - - -##### kfile ##################################### - -set( target kfile ) - -set( ${target}_SRCS - kfilefiltercombo.cpp kfileview.cpp kfileiconview.cpp - krecentdocument.cpp kfiledialog.cpp kdiroperator.cpp - kfiledetailview.cpp kcombiview.cpp kurlrequester.cpp - kfilepreview.cpp kurlcombobox.cpp kurlrequesterdlg.cpp - kopenwith.cpp kpropertiesdialog.cpp kicondialog.cpp - kdirsize.cpp krecentdirs.cpp kdiskfreesp.cpp kimagefilepreview.cpp - kfilesharedlg.cpp kurlbar.cpp kmetaprops.cpp kpreviewprops.cpp - kfiletreeview.cpp kfiletreeviewitem.cpp kfiletreebranch.cpp - kdirselectdialog.cpp kfilebookmarkhandler.cpp kfilemetainfowidget.cpp - kcustommenueditor.cpp knotifywidgetbase.ui knotifydialog.cpp - kfilespeedbar.cpp kpreviewwidgetbase.cpp kfilemetapreview.cpp - kpropertiesdesktopbase.ui kpropertiesdesktopadvbase.ui - kpropertiesmimetypebase.ui kencodingfiledialog.cpp - kacleditwidget.cpp -) - -tde_add_library( ${target} STATIC_PIC AUTOMOC - SOURCES ${${target}_SRCS} -) diff --git a/kio/kfile/ChangeLog b/kio/kfile/ChangeLog deleted file mode 100644 index 2c9651390..000000000 --- a/kio/kfile/ChangeLog +++ /dev/null @@ -1,725 +0,0 @@ -Sat Feb 26 00:26:55 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kdiroperator.cpp: - lottsa changes, e.g. action handling more clear now. - fixed completed item not clearning the previous selection - - * kfileviewitem.cpp: - fixed unreadable pixmap not shown, when files were deleted - - * kfiledialog.cpp (selectedURLs): - re-enabled the hack to support multi-selection, until we have something - better - - * kcombiview.*: - forward the sorting to the right view (or should it apply to the dir- - view as well?) Sort of broken tho. - -Sun Feb 20 01:50:44 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kdiroperator.*, kfiledialog.* (saveConfig): - implemented loading, saving and applying configuration - - * kfiledialog.cpp (setURL): - KDirComboBox is now a combo for recent directories as well as the - root-dir, home-dir and Desktop-dir. - Recent dirs will be saved in kdeglobals. - -Fri Feb 18 23:35:04 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfilefilter.cpp (eventFilter): - intercept Key_Return and Key_Enter in the filter-combo and emit - filterChanged instead of letting the dialog close - -Thu Feb 17 19:09:54 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfiledialog.{cpp,h} (KDirComboBox): - Added KDirComboBox and replaced the directory combobox with it. It - even does something now :) Items need to be indented tho. - - * kfilereader.cpp, kdiroperator.{cpp,h}: - fixed showHidden default - -Tue Feb 15 14:21:41 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfile.h (class KFile): - added a small class that contains all the enums now. - cleaned up the enums (hope not too many apps will be broken) - added flags for "Existing files only" and "local files only" - - * all views (setSelected()): - replaced highlightItem(item) with setSelected(item, bool) which makes - it more suitable and more consistent with Qt. - added selectionChanged() method (necessary for multiselection) - - * kfileview.*: - added invertSelection() - - * kfiledialog.cpp: - made it work with multiselection - added static methods for multiselection - added getOpenURL(), getOpenURLs and getSaveURL() - - * kdiroperator.cpp (setSorting): - added setSorting() and sorting() to keep sorting when switching views - a few cosmetic and KAction changes - -Sun Feb 13 00:45:12 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfiledialog.cpp (completion): - small fix: completion and auto-directory following works also - without protocol-part in the location. - -Sat Feb 12 15:30:40 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfileview.h: - made setSorting() and sortReversed() virtual so that subclasses - can intercept that to show sorting order - - * kfiledetailview.cpp,h (setSortIndicator): - enable header-clicking again to set the sorting - -Fri Feb 11 12:17:59 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfiledialog.cpp (KFileDialog): - fixed filefilter not being applied in constructor - -Thu Feb 10 17:06:36 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kdiroperator.cpp (connectView): - - Now that KToggleAction is fixed, I can commit the new stuff: - Offer Actions for all the common functionality, i.e. sorting, setting - the view, home(), cdUp(), back, forward, etc. - All actions are exposed through a QActionCollection - - BTW, I'd really like to have a way to change the state of an action - without it calling the associated slot. For now I use blockSignals() - (thanks, Simon), but this sucks. - - - renamed fileList to fileView (that was an old relic of KDE 1) - - * kfiledialog.*: - - make use of the new Actions and fill the toolbar again (up, back, - forward, reload, home). - - - the combo in the toolbar is going to change, it does nothing now - (only shows the Root and Desktop dirs with a nice icon). - -Thu Feb 10 12:59:29 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kdiroperator.cpp (insertNewFiles): - aahhh, finally fixed that infinite loop in KFileView::mergeLists - clear the view before calling view->addItemList( currentContents ); - - * kfilereader.cpp (setURL): - don't disable dirWatch update (setAutoUpdate) when setting a remote URL - -Fri Feb 4 12:42:37 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfiledetailview.cpp (insertItem): - - don't let QListView sort the items - I disabled clicking at the headers for now, will fix that later - - don't flicker on mimetype-pixmap update - -Thu Feb 3 12:15:16 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfileview.h + all views where necessary - added selectAll() - added isSelected( const KFileViewItem * ) - added const KFileViewItemList * selectedItems() - added const KFileViewItemList * items() - - spiced up documentation of KFileView a bit - -Sun Jan 30 22:20:14 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfileviewitem.cpp (pixmap): - fixed some issues for different pixmap sizes - - * kfileiconview.{h,cpp} (setPixmapSize): - added configurability for different pixmap sizes - -Sun Jan 30 16:49:12 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfileview.h + all views: - A view can now have a name (setViewName() and viewName()) - This is useful to differentiate views and to display the names in a - popupmenu for switching between views. - -Sun Jan 30 12:41:04 2000 Werner Trobin <wtrobin@carinthia.com> - The preview mode works again. It's very similar to the Qt-2.1 QFD - preview mode - but it's not totally the same. There are some rough - edges which have to be ironed out, but it works :) - For further information, see kfilepreview.* - Note: kpreview and so on are obsolete (IMHO) - -Sat Jan 29 15:33:37 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - Time to add some changelogs again, all the recent hard work of the - restructuring is only in CVS-log... - - * kfileview.cpp (compareItems): - - added support to disable sorting directories first (QDir::DirsFirst) - - added support to sort by date and to sort reversed - - removed unused findCompletion method - - sort case insensitive by default - - some optimization for mergeList - - fixed infinite loop in mergeLists, when the lists are the same - (I think another one is still there, but I'm tired now) - - changed setSortMode stuff: Switching-mode replaced with - sortReversed(). The enum Switching will be removed, soon. - - made setSortMode public - - * kfileviewitem.cpp: - - added time_t mTime() to enable sorting by modification time - - * kdiroperator.cpp: - - offer sorting options in popupmenu - - use checkAccess before creating directories. I guess this will again - change when the new kio will be used, tho. - - show progress widget at the bottom (otherwise the header of e.g. - the detail-view would be covered). - - Added LGPL copyright header - - * kfilewidget.cpp (connectSignals): - - connect to all signals of KDirOperator - - directly connect SIGNAL to SIGNAL -> removed slotFileHighlighted etc. - - fixed some sorting/merging bugs - - * {kfiledialog,kdiroperator}.{cpp,h}; - - support for disabling chdir (some apps may not want KFileDialog / - KFileReader change the working directory under their feet) - - Added LGPL header in cpp-file - - * kfilereader.cpp (stat): - - fixed: some special files were recognized as directories - - * kfstest.cpp: - - added test for KFileWidget (widget -> KFileWidget, - diroperator -> KDirOperator) - -Sun Oct 31 00:56:23 1999 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfileinfo.cpp (readUserInfo): Don't call getpwnam() and getgrgid() - all the time over and over again! This opens and parses /etc/passwd - or /etc/group with every call! - Now we load /etc/passwd and /etc/group once and store the interesting - stuff in static QMaps, which need to be freed with KFileInfo::cleanup() - cleanup() is called from KFileBaseDialog's destructor. - - This speeds up KFileDialog a LOT! - -Sat Oct 23 01:55:00 1999 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfiledetaillist.cpp (key): hopefully implemented correct mapping - from KFileInfo to QListViewItem and back. I had a hard time convincing - QListView that KFileInfoContents knows best where to insert an item - Now the detaillist is even usable :) - Fixed a problem with selection and highlighting - Disable clicking on listview headers that can't be used for sorting - - * kfileinfocontents.cpp (setSorting): call insertItem() with a correct - (is it?) index, instead of -1 - -Thu Oct 21 23:18:54 1999 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfiledialog.cpp (init): removed "[development only] from tooltip - (sorry to break the translations, but this HAD to go) - - * don't update anything when leaving the configure-dialog with Cancel - -Wed Oct 20 15:07:16 1999 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfileinfo.cpp,h: implemented KFileInfo::filePath() and fixed - KFileInfo::absURL() not being set in some cases - - * kdir.cpp: fixed a buglet in the path (double slashes) - - * kfiledetaillist.cpp (KFileDetailList): improved selecting files - (single click, double click, Return-key) - but the mapping from QListViewItem to KFileInfo is still quite broken - -1999-06-09 Woohyun JANG <louis@mizi.co.kr> - - * kdir.cpp: used QString::local8Bit() instead of QString::ascii() - for file names and directory names. - - * kfiledialog.cpp: used QStringList instead of QStrIList. - -1999-01-14 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: fixed some GUI problems and moved all default - configurations into config-kfile.h. - Changed some default values, so that users that never looked into - the config dialog gets a nice suprise with 1.1 ;-) - - * kfiledialog.cpp: changed selectedFile to return decoded path instead - of encoded one - -Thu Jan 7 23:14:39 1999 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfilesimpleview.cpp (keyPressEvent): fixed segfault on keypress, - when there were no files at all in the list - -1998-12-19 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: fixing an ugly bug when "." is used as argument - -Mon Dec 14 23:00:41 1998 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfilebookmark.cpp: renamed class KBookmark to KFileBookmark to - avoid problems with KFM's KBookmark class. Renamed bookmark.* to - kfilebookmark.*, too and changed all occurrences of bookmark.* to - kfilebookmark.* (especially all the .po-files) - -Wed Dec 2 15:59:13 1998 Carsten Pfeiffer <pfeiffer@kde.org> - - * kfilesimpleview.cpp: Fixed some more keyboard navigation bugs. - Added method isColCompletelyVisible( int col ), now you can scroll - perfectly to make items completely visible. - Moreover, in resizeEvent() the number of columns was not calculated - correctly in a special case. - And the currently selected item is rehighlighted correctly after - resizing, now. - -1998-10-12 Jochen Küpper <jochen@uni-duesseldorf.de> - - * kfiledialog.cpp (okPressed): Changed okPressed to store the correct - filename before leaving the dialog. - -1998-06-07 Stephan Kulow <coolo@kde.org> - - * kfilesimpleview.cpp: added some checks to prevent division with - zero using the latest qt snapshots - - * kfilesimpleview.cpp: added a repaint call after a resize - - * kfiledialog.cpp: new experimental button order - - * kfiledialog.cpp: added lastDirectory to remember the last visited - directory for next open - -1998-05-24 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: use setSelection also for the initial filename - given - - * kfiledialog.cpp: introduced KFileFilter to make an abstraction - for the used filter widget. Currently only QComboBox is supported, - but this may change in the future - -1998-05-20 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: changed the accelerator for completion - to CTRL-T - - * kfiledialog.cpp: fixed the setSelection() feature - -1998-05-19 Stephan Kulow <coolo@kde.org> - - * kfiledialog.h: added setSelection - -1998-05-18 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: bugfixes - -1998-05-15 Stephan Kulow <coolo@kde.org> - - * kfileinfocontents.cpp: some more changes and speed ups - (caching and some other little things) - -1998-05-14 Stephan Kulow <coolo@kde.org> - - * kfileinfocontents.cpp: added addItemList - - * kfileinfocontents.h: introduced KFileInfoContentsSignaler - - * kfileinfocontents.cpp: some more speed improvment - -1998-05-10 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: tried to speed up the refresh - -1998-04-17 Stephan Kulow <coolo@kde.org> - - * kfiledetaillist.cpp: implemented the date field - - * kfiledetaillist.cpp: made the columns wider - - * kfileinfocontents.cpp: use the new icons by Mark - -Thu Apr 16 10:51:24 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - - * kfiledialog.*: some small fixes concerning preview - - * kfileinfocontents.cpp: fixed sorting bug in preview - - * kfilepreview.*: small bug fixes - - * kpreview.*: small bug fixes - - * added some documentation - -1998-04-15 Stephan Kulow <coolo@kde.org> - - * kfilepreview.cpp: use a list box instead of simple view - - * kfiledialog.cpp: fixed an ugly bug - -1998-04-14 Stephan Kulow <coolo@kde.org> - - * kfiledialogconf.cpp: removed the width/height sliders - - * kfiledialog.cpp: save the width and height on exit - - * kfiledialogconf.cpp: added more guys to the about box - - * kfiledialog.h: removed init*Children. They were useless - - * kfiledialog.cpp: set the default size to a useful value - -Mon Apr 6 17:30:18 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - - * kfilepreview.*: restructured previewing, one can now easily - use custom previewers, dynamically - - * kpreview.*: changes for allowing custom previewers, two previewers - are hardcoded so far - - * kfiledialog.*: changes changes for allowing custom previewers - - * kfstest.cpp: changes to preview mode - - * xview.*: QimageIO module allowing the visual-schnauzer generated - images to be loaded - -1998-04-06 Stephan Kulow <coolo@kde.org> - - * debug.h: added debugC. An empty macro to hide debug output - -Thu Apr 2 19:39:37 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - - * kpreview.*: widget which for now shows some info about a - file/folder along with the first 20-30 lines of it - - * kfilepreview.*: added a new view which has a preview of any text - file in the right part - - * kfstest.cpp: added the new mode "preview" which shows the above - view - -1998-03-30 Stephan Kulow <coolo@kde.org> - - * kfilesimpleview.cpp: fixed highlightning - - * kfiledialog.cpp: some fixes for the dir selection - - * kfiledialog.h: Moved KFileDialog into KFileBaseDialog and made - KFileDialog and KDirDialog a derived class of KFileBaseDialog to - make this virtual functions work - -Mon Mar 30 17:53:20 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - - * kcombiview.cpp: bug fixes for completion & corresponding - highlighting - - * kfiledialog.cpp: small bug fix, too much copying into location - - * kfileinfocontents.cpp: completion slightly remodeled, should - work in all views now - - * kfileinfocontents.h: changed nameList to case insensitive - list - -1998-03-28 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: changed the filter separator to \n. - This looks nicer in the source code of the call - -Sat Mar 28 14:49:00 1998 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: changed the meaning of the dirName argument - - * kfiledialog.h: added getShowFilter - -Thu Mar 26 12:47:42 1998 Stephan Kulow <coolo@kde.org> - - * kfilesimpleview.cpp: improved scrolling in simple view - - * kfileinfocontents.cpp: add a / after a found dir - - * kfiledialog.cpp: fixed bug for !showFilter - -Wed Mar 25 18:39:09 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - - * kfileinfocontents.cpp: completion now working - - * kcombiview.cpp: changed behavior for completion, it - now highlights completed directory and file - -Tue Mar 24 16:08:46 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - - * kfileinfocontents.cpp: sorting now fully working - - * kfiledialog.cpp: modifications for sorting in the on the - fly reconfiguration - - * kfileinfocontents.*: modification to the constructor - to pass along the sorting - - * kfiledetaillist.*: modification to the constructor - to pass along the sorting - - * kcombiview.*: modification to the constructor - to pass along the sorting - - * kfilesimpleview.*: modification to the constructor - to pass along the sorting - -Tue Mar 24 10:45:15 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - - * kfileinfocontents.cpp: sorting fixed, the feature of keeping - directories grouped is still missing though - -Mon Mar 23 22:59:18 1998 Stephan Kulow <coolo@kde.org> - - * kfiledetaillist.h: added acceptsFiles() and acceptsDirs() to - make dirs-only views useful - - * kfileinfocontents.cpp: OK, completion is back again, but - currently not working, because the code is missing ;-) - -Mon Mar 23 00:08:02 1998 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: moved all GM related things into initGUI() to - make recreation possible - -Sun Mar 22 00:22:46 1998 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: use KShellProcess now - - * kfiledialog.h: added virtual function initFileList to made - KFileDialog customable - - * kfiledialog.cpp: show a combo box, in case more filters are given - - * kfiledialog.cpp: some bug fixes. I can't get the sorting to work - - * Makefile.am: install some toolbar pixmaps - - * kfiledetailview.cpp: added pixmaps to the detail view - - * Kfiledialog.cpp: made KComboView customable through virtual - functions - - * kcombiview.cpp: took out the completion for now, added - kcombiview and some little changes in setCurrentItem - - * kdirlistbox.cpp: fixed the use of single click - - * kdir.h: moved the header files a little bit to remove - some dependencies - - * kdirlistbox.cpp: KDirListBox is now a KFileInfoContents too - - * kfiledialog.cpp: another change in the API. It uses now QSignal. - I didn't liked the old way - -1998-03-21 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: implemented mixDirsAndFiles. Need some work and currently - only supported by the simple view - -Sat Mar 21 01:00:48 1998 Stephan Kulow <coolo@kde.org> - - * kfilesimpleview.cpp: added pixmaps to indicate access on the file - - * kfilesimpleview.cpp: improved keyboard navigation - - * kfilesimpleview.cpp: first almost working simple view - - * kfilesimpleview.cpp: started implementing a simple view. Needs - still some work - - -Fri Mar 20 22:42:31 1998 Stephan Kulow <coolo@kde.org> - - * kfileinfocontents.h: bugfixes - - * kfileinfo.cpp: KFileInfo is no longer a derived class of - QFileInfo. This should reduce memory use too - - * kfileinfocontents.h: moved the actual sorting in - KFileInfoContents. Derived classes are for viewing only - - * kfiledialog.h: fixed some header files locations - -1998-03-20 Stephan Kulow <coolo@kde.org> - - * kfileinfo.cpp: show lockedfolder.xpm for folders, that are not - allowed to enter or read - - * kfiledialog.cpp: bug fixes - -Fri Mar 20 13:10:11 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - * kfilgdialog.*, remodeled the configuration dialog to reflect the - current possible settings - * kfiledetailList.cpp: added the PageUp PageDown navigation - -1998-03-19 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: fixed the forward/back back reported by - Stefan Tafener - -1998-03-18 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: set the initial focus to the line edit - - * kfiledialog.cpp: use kapp->invokeHTMLHelp now - - * kfiledialog.h: removed treeList, since it's not implemented - -Wed Mar 18 02:56:32 1998 Stephan Kulow <coolo@kde.org> - - * kfiledetaillist.cpp: fixed sorting again - -1998-03-17 Stephan Kulow <coolo@kde.org> - - * added a virtual class KInfoListContent to make an abstraction - for the file contents. Currently there is just one implementation - KFileDetailList - -1998-03-16 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: don't accept the first entry of the combo - box as a file name - - * kfiledialog.cpp: added an accelerator for completion, since - KCombo no longer emits such a thing (currently CTRL-A) - - * kdir.cpp: disable parent button in / - - * kfiledialog.cpp: fixed layout of mkdir dialog - - * kdir.cpp: use currentDir instead of homeDir as default - - * kfiledialog.cpp: added member acceptOnlyExisting and set it - for now to always false. I guess, we need an extra parameter for this - - * kfiledialog.cpp: changed dirList and fileList to fix the - focus handling - - * kfileinfolistwidget.cpp: added focus handling - - * kfileinfolistwidget.cpp: added keyevent handling to handle - cursor and enter - - * kfiledialog.cpp: changed the filter edit to a QLineEdit, since - we don't need the completion, but the tabing for focus changes - -Mon Mar 16 11:36:07 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - * added create directory, pops up a modal dialog, should add - a mkdir method to kdir in near future - -Mon Mar 16 20:04:00 1998 Martin Jones <mjones@kde.org> - * Added booktoken.* to remove dependancy on tdehtmlw and jscript - -Thu Mar 12 09:32:06 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - * worked on the dir and file completion, should do both now, - text in the location box will be added as much as possible - (right now it's the lowest denominator of dir&file&location-text) - * added sorting for the detailed list, so far only name and size - sorting implemented - * added single click selection for directories - * added a status line, which shows the number of directories and - files showed - -Thu Mar 12 00:36:05 1998 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: made a library out of the file selector - * kfiledialog.cpp: added an extra parameter acceptURLs to seperate - between getOpenFileName and getOpenFileURL - -Sun Feb 15 23:13:47 1998 Richard Moore <rich@kde.org> - - * More work on the bookmarks - they should work properly now, you - must create the directory ~/.kde/share/apps/tdeui to store the - bookmarks in. - - * Regenerated docs - -Thu Feb 12 17:27:51 1998 Stephan Kulow <coolo@kde.org> - - * kfileinfo.cpp: added determination of group and other things to - be display the correct values in the kfileinfolistwidget - -Thu Feb 12 16:01:44 1998 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: removed the #ifdef code. Now the combo box for - the path is the only option - -Tue Feb 10 01:09:16 1998 Richard Moore <rich@kde.org> - - * Added details widget - this is currently selected by a config - file entry, but it there should be a toolbar button. Many changes - to kfiledialog to allow the switch (need an abstract fileview class). - -Fri Feb 6 18:08:14 1998 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: replaced the location lineedit with an combo - box. Currently configurable with a compiler define. - -Fri Feb 6 17:07:26 1998 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: fixed the en- and decoding of URLs. Now it's - possible to move into directories called "sdasd#sdsd" for example - -Sat Jan 24 17:18:10 1998 Mario Weilguni <mweilguni@sime.com> - - * fixed a bug in kdir.cpp/parsePermissions() - - * implemented error handling for KFM URL errors - -Tue Jan 20 00:51:55 1998 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: some fixes to make kfm support more robust - -Mon Jan 19 01:10:11 1998 Stephan Kulow <coolo@kde.org> - - * kdir.cpp: re-added ftp support - - * kfiledialog.cpp: take care of the case, when the user enters a - complete filename - - * kdir.cpp: added isReadable() to indicate, that the dir is not - correct - - * kfiledialog.cpp: played a little bit with the geometry management - - -Sun Jan 18 15:00:06 1998 Stephan Kulow <coolo@kde.org> - - * kfiledialog.cpp: - back/forward work now as expected - - show the correct filter - - the combo box works now as expected - - * kdir.cpp: check if the directory is correct (for local - files). If not, go back to the old value - - * kfiledialog.cpp: - disable parent button, when in root - - treat the case, that the URL ends with "/" - - strip white spaces out of the location text - - * kfileinfo.cpp: don't insert broken links - - * kfiledialog.cpp: just set the dir, if it's different - from the already set one - -Sun Jan 18 11:53:32 1998 Mario Weilguni <mweilguni@sime.com> - - * symbolic links to subdirectories are now correctly reported as - directories - - * symbolic links are show as italic text - - * The toolbar button "Home" works now as expected diff --git a/kio/kfile/Makefile.am b/kio/kfile/Makefile.am deleted file mode 100644 index 1951f30c0..000000000 --- a/kio/kfile/Makefile.am +++ /dev/null @@ -1,78 +0,0 @@ -# This file is part of the KDE libraries -# Copyright (C) 1997 Stephan Kulow (coolo@kde.org) - -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. - -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this library; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. - - -INCLUDES= -I$(srcdir)/../libltdl/ -I$(top_srcdir) -I$(top_srcdir)/tdefx \ - -I$(top_builddir)/kio/kio -I$(top_srcdir)/kio/bookmarks $(all_includes) $(LIBART_CFLAGS) - -noinst_LTLIBRARIES = libkfile.la - -METASOURCES = AUTO - -#SUBDIRS = . acl_prop_page - -include_HEADERS = kfiledialog.h kencodingfiledialog.h\ - kdiroperator.h kfileview.h kfilefiltercombo.h \ - kfiledetailview.h kcombiview.h kdiskfreesp.h \ - kfileiconview.h krecentdocument.h \ - kurlrequester.h kfilepreview.h kfile.h \ - kurlcombobox.h kurlrequesterdlg.h kopenwith.h kpropsdlg.h \ - kicondialog.h kdirsize.h kpreviewwidgetbase.h kimagefilepreview.h kfilesharedlg.h \ - kfiletreeview.h kfiletreeviewitem.h kfiletreebranch.h \ - kdirselectdialog.h kurlbar.h kpropertiesdialog.h knotifydialog.h \ - kcustommenueditor.h knotifywidgetbase.h - -noinst_HEADERS = config-kfile.h krecentdirs.h kmetaprops.h \ - kfilebookmarkhandler.h kfilemetainfowidget.h kopenwith_p.h \ - kfilespeedbar.h kpreviewprops.h kacleditwidget.h kacleditwidget_p.h images.h - -libkfile_la_SOURCES = \ - kfilefiltercombo.cpp \ - kfileview.cpp kfileiconview.cpp \ - krecentdocument.cpp kfiledialog.cpp kdiroperator.cpp \ - kfiledetailview.cpp kcombiview.cpp kurlrequester.cpp \ - kfilepreview.cpp kurlcombobox.cpp kurlrequesterdlg.cpp \ - kopenwith.cpp kpropertiesdialog.cpp kicondialog.cpp kdirsize.cpp \ - krecentdirs.cpp kdiskfreesp.cpp kimagefilepreview.cpp kfilesharedlg.cpp \ - kurlbar.cpp kmetaprops.cpp kpreviewprops.cpp \ - kfiletreeview.cpp kfiletreeviewitem.cpp kfiletreebranch.cpp \ - kdirselectdialog.cpp kfilebookmarkhandler.cpp \ - kfilemetainfowidget.cpp kcustommenueditor.cpp knotifywidgetbase.ui \ - knotifydialog.cpp kfilespeedbar.cpp kpreviewwidgetbase.cpp \ - kfilemetapreview.cpp kpropertiesdesktopbase.ui \ - kpropertiesdesktopadvbase.ui kpropertiesmimetypebase.ui \ - kencodingfiledialog.cpp kacleditwidget.cpp - -libkfile_la_COMPILE_FIRST = $(srcdir)/../kio/kdirnotify_stub.h - -EXTRA_DIST = NOTES - -# convenience lib - no _LDFLAGS or _LIBADD ! - -servicetype_DATA = kpropsdlgplugin.desktop -servicetypedir = $(kde_servicetypesdir) - - -#Can't be a module, we need to link to it for readConfig -#kde_module_LTLIBRARIES = libkfileshare.la -#libkfileshare_la_SOURCES = kfileshare.cpp -#libkfileshare_la_LIBADD = libkfile.la -#libkfileshare_la_LDFLAGS = -module $(KDE_PLUGIN) -#kde_services_DATA = kfilesharepropsplugin.desktop - -include $(top_srcdir)/admin/Doxyfile.am diff --git a/kio/kfile/NOTES b/kio/kfile/NOTES deleted file mode 100644 index c3fb6fbcb..000000000 --- a/kio/kfile/NOTES +++ /dev/null @@ -1,100 +0,0 @@ -Rewrite -======= - -Here is the result of a long discussion between the kfile developers -(Carsten) and the konqueror developers (Simon and David), about the plans -for more integration between kfile and konqueror. 16/08/2000. - - - - KDirLister -----(1)---------------------> KFileView (3) - <----(2)------ [Signaller] --- | | - | | - | | - | | - | | - KFileIconView KFileListView - (4) (5) - - -(1) Gives items found when listing, and the key for each item - (KDirLister has all the sorting code) -(2) KFileView inherited classes emit requests for listing a new - directory (with a bool for treeviews), and emit requests for - the mimetype of a given item. If all KFileView inherited classes - are QScrollViews, then it could even implement the "ask for mimetype - of the visible icons first" algorithm, currently in KonqIconView. -(3) KFileView, the base class for any view, knows about KFileItem, has - signals for dropped(), popupMenu(list of actions provided by the view), - has a QWidget * canvas() method, xOffset() and yOffset() -(4) KFileIconView holds a QPtrDict to look up a QIconViewItem quickly from a - given KFileItem. This will help for e.g. deleteItems and refreshItems. -(5) KFileListView holds a QPtrDict to find the QListViewItem for a - KFileItem. It implements different modes if we want the tree view in - kfile ? - - - KFileChooserWidget - -This (base) class is the container widget that can contain any kfileview and -switch between them. It is embeddable into an application that wants a widget -for choosing a file or directory. Features listing, selecting, popupmenu for -switching modes, and a virtual createView( viewmode ) method, which -only knows about the builtin views, in this class. -It knows the current URL, has setURL(), and triggers the listing, connecting -KFileView's requests to KDirLister's methods. - - KFileManagerWidget - -This class inherits from KFileChooserWidget and adds the file management -operations. It uses a KFileOperations class (taken from the current -KonqOperations) for all KIO operations, and it uses KFileUndo, taken from -the KonqUndo stuff. The popupMenu method is reimplemented to add those -operations to it. - - KFileWidget - -This class is the full widget that can be seen in the dialog. It has the -toolbar buttons, the combo, etc. It embeds a KFileChooserWidget or a -KFileManagerWidget, the latter being a specialisation of the former. - -The Konqueror side of things -============================ - - KonqFileIconView - -Inherits KFileIconView and adds image preview - unless we want it in -KFileIconView, and the line-up-icons algorithm, etc. - - KonqFileListView - -Inherits KFileListView to add more stuff if needed. The mc-like text view -could be implemented here as well, unless we want it in kfile. Same for the -tree view. - - KonqFileManagerWidget - -This class inherits KFileManagerWidget and adds the konqueror stuff, like -the enableAction signal. It also reimplements createView to create the -konqueror versions of the views. - - KonqDirPart - -This class inherits KParts::ReadOnlyPart, and provides a BrowserExtension. -It integrates KonqFileManagerWidget as its KParts widget, and provides -KActions for it. - -Important : - -Make sure to take kfind into account. It would be nice if it could use the -same views as konqueror, to have access to all the view modes, as well as -image preview, etc. - -Unrelated: -To Add -====== - -Mime Mappings? - -Filter= ( Mime Type | shell glob list ) -Mime Type -> shell glob list diff --git a/kio/kfile/TODO b/kio/kfile/TODO deleted file mode 100644 index b7bf74ea5..000000000 --- a/kio/kfile/TODO +++ /dev/null @@ -1,17 +0,0 @@ -TODO-List for the KFileDialog and associated classes (in order of importance) - -- are more messageboxes necessary? -- KFD's default dirs configurable -- drag&drop support for the views (somehow into baseclass KFileView? -- KFileView::setSelected( const QRegExp& ) -- separate KDirOperator, location-combo, filter-combo etc. from KFileDialog - to another widget (everything besides OK/Cancel buttons). -- implement in-place editing (rename) + make it configurable in all views -- make a simple fileview based on QListBox -- implement KFile::PreviewInfo -- signal KFileView::selectionCleared() - -If anyone wants to implement some of those, please do. In case of questions, -don't hesitate to ask me. - -Carsten Pfeiffer <pfeiffer@kde.org> diff --git a/kio/kfile/config-kfile.h b/kio/kfile/config-kfile.h deleted file mode 100644 index 8715ed273..000000000 --- a/kio/kfile/config-kfile.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef CONFIG_KFILE_H -#define CONFIG_KFILE_H - -const int kfile_area = 250; - -#define DefaultViewStyle TQString::fromLatin1("SimpleView") -#define DefaultPannerPosition 40 -#define DefaultMixDirsAndFiles false -#define DefaultShowStatusLine false -#define DefaultShowHidden false -#define DefaultCaseInsensitive true -#define DefaultDirsFirst true -#define DefaultSortReversed false -#define DefaultRecentURLsNumber 15 -#define DefaultDirectoryFollowing true -#define DefaultAutoSelectExtChecked true -#define ConfigGroup TQString::fromLatin1("KFileDialog Settings") -#define RecentURLs TQString::fromLatin1("Recent URLs") -#define RecentFiles TQString::fromLatin1("Recent Files") -#define RecentURLsNumber TQString::fromLatin1("Maximum of recent URLs") -#define RecentFilesNumber TQString::fromLatin1("Maximum of recent files") -#define DialogWidth TQString::fromLatin1("Width (%1)") -#define DialogHeight TQString::fromLatin1("Height (%1)") -#define ConfigShowStatusLine TQString::fromLatin1("ShowStatusLine") -#define AutoDirectoryFollowing TQString::fromLatin1("Automatic directory following") -#define PathComboCompletionMode TQString::fromLatin1("PathCombo Completionmode") -#define LocationComboCompletionMode TQString::fromLatin1("LocationCombo Completionmode") -#define ShowSpeedbar TQString::fromLatin1("Show Speedbar") -#define ShowBookmarks TQString::fromLatin1("Show Bookmarks") -#define AutoSelectExtChecked TQString::fromLatin1("Automatically select filename extension") - -#endif diff --git a/kio/kfile/images.h b/kio/kfile/images.h deleted file mode 100644 index f544e2f0a..000000000 --- a/kio/kfile/images.h +++ /dev/null @@ -1,277 +0,0 @@ -#ifdef USE_POSIX_ACL -#ifndef _QEMBED_1804289383 -#define _QEMBED_1804289383 -#include <tqimage.h> -#include <tqdict.h> -static const QRgb group_grey_data[] = { - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x42484848,0xc39b9b9b,0xeab1b1b1,0xce9d9d9d,0x5a4d4d4d,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x563b3b3b,0xfdaeaeae,0xffcfcfcf,0xffcccccc,0xffcecece, - 0xffbababa,0x62393939,0x0,0x0,0x0,0x0,0x0,0x0,0x4525252,0x9383838,0x0,0xd0515151,0xff969696,0xff959595, - 0xff969696,0xff959595,0xff969696,0xdd505050,0x6000000,0x0,0x0,0x0,0xa191919,0x908f8f8f,0xebc1c1c1,0xf6c6c6c6,0xc0a1a1a1,0xf74f4f4f, - 0xff626262,0xff6a6a6a,0xff6c6c6c,0xff6a6a6a,0xff636363,0xfb4a4a4a,0x1a000000,0x0,0x0,0x0,0xa3828282,0xffdfdfdf,0xffdedede,0xffdddddd, - 0xffe0e0e0,0xffa4a4a4,0xff636363,0xff666666,0xff6a6a6a,0xff676767,0xff5f5f5f,0xe6494949,0xd000000,0x0,0x0,0x21232323,0xfca2a2a2,0xffc3c3c3, - 0xffc6c6c6,0xffc6c6c6,0xffc4c4c4,0xffbababa,0xff717171,0xff7e7e7e,0xff7e7e7e,0xff7d7d7d,0xfe6f6f6f,0x812b2b2b,0x0,0x0,0x0,0x3e303030, - 0xffa6a6a6,0xffb7b7b7,0xffbdbdbd,0xffbebebe,0xffb9b9b9,0xffacacac,0xff808080,0xff8f8f8f,0xff939393,0xff909090,0xf86b6b6b,0x34202020,0x0,0x0, - 0x0,0x1c191919,0xf8a5a5a5,0xffc2c2c2,0xffcccccc,0xffcecece,0xffc5c5c5,0xffbababa,0xff888888,0xffa5a5a5,0xffa4a4a4,0xffa5a5a5,0xffa1a1a1,0xd3515151, - 0x8030303,0x0,0x0,0x0,0x8f6f6f6f,0xffd3d3d3,0xffe2e2e2,0xffe3e3e3,0xffdbdbdb,0xff9b9b9b,0xff6f6f6f,0xff727272,0xff6e6e6e,0xff717171, - 0xff707070,0xff606060,0x62363636,0x0,0x0,0x0,0x6e5b5b5b,0xffb4b4b4,0xffd4d4d4,0xffdadada,0xffcecece,0xff737373,0xff656565,0xff676767, - 0xff696969,0xff676767,0xff636363,0xff5d5d5d,0xc44b4b4b,0x0,0x0,0x27343434,0xf5a5a5a5,0xffd1d1d1,0xffd2d2d2,0xffd1d1d1,0xffd1d1d1,0xffc3c3c3, - 0xff7b7b7b,0xff6f6f6f,0xff727272,0xff6f6f6f,0xff696969,0xff626262,0xf7606060,0x16050505,0x0,0xa07d7d7d,0xffb8b8b8,0xffc0c0c0,0xffc2c2c2,0xffc1c1c1, - 0xffc1c1c1,0xffbbbbbb,0xffa6a6a6,0xff868686,0xff858585,0xff838383,0xff838383,0xff878787,0xe95e5e5e,0x19050505,0xd141414,0xf0a2a2a2,0xffbdbdbd,0xffc6c6c6, - 0xffcbcbcb,0xffcbcbcb,0xffc8c8c8,0xffc0c0c0,0xffb8b8b8,0xef8b8b8b,0xd6707070,0xd26a6a6a,0xbb595959,0x82363636,0x24070707,0x0,0x44505050,0xffc0c0c0, - 0xffc7c7c7,0xffd2d2d2,0xffd9d9d9,0xffdadada,0xffd4d4d4,0xffcacaca,0xffc1c1c1,0xc8979797,0x3000000,0x4000000,0x0,0x0,0x0,0x0, - 0x2b393939,0xeeaaaaaa,0xffdadada,0xffe4e4e4,0xffeaeaea,0xffeaeaea,0xffe4e4e4,0xffdddddd,0xffd1d1d1,0xae797979,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x1e0f0f0f,0x76575757,0xae898989,0xc49c9c9c,0xc6a0a0a0,0xbc9a9a9a,0x98808080,0x57414141,0xb000000,0x0,0x0, - 0x0,0x0,0x0,0x0 -}; - -/* Generated by qembed */ -static const QRgb group_data[] = { - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4223731d,0xc37fbb7c,0xea9bca98,0xce86b982,0x5a316e2c,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x56146610,0xfd8fce8e,0xffbae4bb,0xffb7e2b7,0xffbae3ba, - 0xff9ed89d,0x62166112,0x0,0x0,0x0,0x0,0x0,0x0,0x4003ca5,0x9003171,0x0,0xd0198b17,0xff6ac468,0xff6ec665, - 0xff70c865,0xff6ec665,0xff6ac468,0xdd1a8918,0x6000000,0x0,0x0,0x0,0xa001333,0x905b8cc4,0xeb9fc0e4,0xf6a8c5e4,0xc07a9dc9,0xf7108e1e, - 0xff2eb113,0xff42be17,0xff49c216,0xff44be17,0xff31b214,0xfb109301,0x1a000000,0x0,0x0,0x0,0xa3497ebb,0xffc6def8,0xffc6ddf6,0xffc5ddf6, - 0xffc9e0f8,0xff77abd2,0xff31af18,0xff50cd00,0xff5cd400,0xff52ce00,0xff3bbe00,0xe6218f03,0xd000000,0x0,0x0,0x21042043,0xfc61a0e3,0xff97c3f0, - 0xff9cc7f1,0xff9cc8f1,0xff98c4f0,0xff85b8ef,0xff469d88,0xff7de517,0xff87ed10,0xff7ce417,0xfe5bca14,0x811b5304,0x0,0x0,0x0,0x3e082e58, - 0xff60a7ed,0xff7fbaef,0xff8ac3f1,0xff8bc4f1,0xff83beef,0xff6caeec,0xff4e98b3,0xff88d54a,0xff98e343,0xff89d64a,0xf846a630,0x340c4100,0x0,0x0, - 0x0,0x1c021631,0xf867a7e3,0xff90c9f4,0xffa1d6f8,0xffa4d8f8,0xff96cef5,0xff82bef2,0xff65aca9,0xff8ad576,0xff86d276,0xff88d377,0xff80d072,0xd3279310, - 0x8000700,0x0,0x0,0x0,0x8f3f6f9f,0xffaedcf9,0xffc7effe,0xffc9f0fe,0xffbbe5fc,0xff73b7c4,0xff45ba25,0xff51c61e,0xff50c617,0xff51c61c, - 0xff4bc120,0xff30b50c,0x62206705,0x0,0x0,0x0,0x6e1d5899,0xff81b2e7,0xffb4d7f4,0xffbddcf7,0xffa8cef4,0xff4698a0,0xff45c407,0xff53ce00, - 0xff59d200,0xff54cf00,0xff46c600,0xff34bb00,0xc42d9105,0x0,0x0,0x270a305f,0xf567a5e3,0xffaed3f4,0xffafd4f5,0xffaed4f4,0xffaed3f4,0xff94c2f3, - 0xff4fa782,0xff6cdf00,0xff74e400,0xff6cdf00,0xff5ad300,0xff43c401,0xf742b110,0x16060b00,0x0,0xa0407dba,0xff80bcf1,0xff8ec5f2,0xff92c8f2,0xff91c8f2, - 0xff90c6f2,0xff86bff0,0xff67a8e6,0xff80e02c,0xff95f615,0xff8aee18,0xff7de323,0xff76db33,0xe951a31a,0x19040a00,0xd000f28,0xf066a4de,0xff88c4f2,0xff97cef5, - 0xffa0d4f7,0xffa0d5f7,0xff9ad0f6,0xff8dc7f3,0xff7ebcf2,0xef6ea88b,0xd679b12f,0xd271a82d,0xbb5c9221,0x8235600c,0x24060d02,0x0,0x44184c89,0xff8cc6f4, - 0xff99d0f6,0xffabddfa,0xffb7e6fc,0xffb8e6fc,0xffaee0fb,0xff9ed4f7,0xff90c9f3,0xc86697c9,0x3000000,0x4000000,0x0,0x0,0x0,0x0, - 0x2b0e3664,0xee7caed8,0xffb9e4fc,0xffcaf1fe,0xffd5f6ff,0xffd6f7ff,0xffcbf2fe,0xffbee8fc,0xffa9d6f9,0xae5378a0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x1e020c1d,0x7634547a,0xae6a88a8,0xc4849bb4,0xc689a0b8,0xbc7d9ab7,0x98627f9f,0x572c3e56,0xb000000,0x0,0x0, - 0x0,0x0,0x0,0x0 -}; - -static const QRgb mask_data[] = { - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11c84a00,0x1000000,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x68d14e00,0xffda6400,0x72bf4700,0x3000000,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14d04d00,0xefda6400,0xfffec300,0xf2d86300,0x24742b00, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x98d14e00,0xfff3b537,0xfffffed6, - 0xfff3b537,0xa5c04800,0x6000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30cf4d00,0xfbe17803, - 0xfff1e7ad,0xffcacaba,0xfff1e7ac,0xfce07803,0x42973800,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0xc4d35300,0xfffad45c,0xffc0c0b2,0xff979797,0xffb2b2a9,0xfffad45a,0xccca5000,0xa000000,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x58d14e00,0xffe89410,0xfffffcbd,0xffc6c6af,0xff929292,0xffbdbda8,0xfffffcb9,0xffe8930e,0x69b04100,0x2000000,0x0,0x0,0x0, - 0x0,0x0,0x8cb4c00,0xe3d76000,0xfffeec6c,0xffffffbe,0xffe2e2b2,0xff878787,0xffd5d5a8,0xffffffb7,0xfffeeb62,0xe8d35e00,0x17491b00,0x0, - 0x0,0x0,0x0,0x0,0x84d14e00,0xfff0b41a,0xfffffea3,0xffffffa8,0xfffbfba7,0xff7b7b76,0xfff6f6a0,0xffffff9c,0xfffffe8e,0xfff0b414, - 0x92bd4600,0x4000000,0x0,0x0,0x0,0x20d04d00,0xf7dd7400,0xfffff85e,0xffffff89,0xffffff8b,0xffffff8a,0xffc3c376,0xffffff82,0xffffff7b, - 0xffffff71,0xfffff746,0xf9db7300,0x32873200,0x0,0x0,0x0,0xa8d25200,0xfff6d518,0xffffff61,0xffffff65,0xffffff65,0xffecec60,0xff9f9f52, - 0xffe6e657,0xffffff54,0xffffff4c,0xffffff44,0xfff6d50e,0xb4c54c00,0x8000000,0x0,0x40d04e00,0xffe49001,0xfffffd2b,0xffffff3a,0xffffff3d,0xffffff3d, - 0xff9b9b33,0xff272727,0xff84842a,0xffffff2e,0xffffff28,0xffffff22,0xfffffd18,0xffe49000,0x52a33c00,0x2000000,0xd0d55b00,0xfffcef07,0xffffff17,0xffffff1a, - 0xffffff1b,0xffffff1b,0xffeaea19,0xff8c8c16,0xffdbdb13,0xffffff10,0xffffff0d,0xffffff0a,0xffffff07,0xfffcef02,0xd7ce5800,0xc000000,0xe4d55d00,0xffe49204, - 0xffe4940a,0xffe4950c,0xffe4960d,0xffe4950c,0xffe4950c,0xffe4940a,0xffe49308,0xffe49307,0xffe49205,0xffe39204,0xffe39102,0xffe39100,0xead05b00,0x1c000000, - 0x13582100,0x3c702900,0x40692700,0x40692700,0x40692700,0x40692700,0x40692700,0x40692700,0x40692700,0x40692700,0x40692700,0x40692700,0x40692700,0x40692700, - 0x29290f00,0xc000000,0x0,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000, - 0x2000000,0x2000000,0x2000000,0x0 -}; - -static const QRgb others_grey_data[] = { - 0x0,0x0,0x0,0xa4c4c4c,0x5d676767,0x777c7c7c,0x3d555555,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x17535353,0xd2afafaf,0xffebebeb,0xffe5e5e5,0xfec2c2c2,0x906d6d6d,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0xa09c9c9c,0xfff1f1f1,0xfff5f5f5,0xffe6e6e6,0xffd4d4d4,0xffbebebe,0x4c424242,0x117b7b7b, - 0x357d7d7d,0x177c7c7c,0x0,0x0,0x0,0x0,0x0,0x606060,0xe4b4b4b4,0xffe1e1e1,0xffe4e4e4,0xffdcdcdc,0xffcecece,0xffc0c0c0, - 0xd9858585,0xf3d5d5d5,0xffe6e6e6,0xf8cdcdcd,0x8c828282,0x2030303,0x0,0x0,0x0,0x0,0xdcaaaaaa,0xffd0d0d0,0xffd2d2d2,0xffcecece, - 0xffc5c5c5,0xffa3a3a3,0xffe8e8e8,0xfffbfbfb,0xfff4f4f4,0xffeaeaea,0xffe0e0e0,0x6f767676,0x0,0x0,0x0,0x0,0x7e848484,0xffc3c3c3, - 0xffc3c3c3,0xffbfbfbf,0xffaeaeae,0xffaaaaaa,0xfff1f1f1,0xfff2f2f2,0xffefefef,0xffe6e6e6,0xffe0e0e0,0xcba6a6a6,0x0,0x0,0x0,0xc3f3f3f, - 0xb8858585,0xff8f8f8f,0xff969696,0xff919191,0xff787878,0xffa5a5a5,0xffe7e7e7,0xffe8e8e8,0xffe5e5e5,0xffe1e1e1,0xffdcdcdc,0xd4a6a6a6,0x0,0x0, - 0x0,0xa1959595,0xffdbdbdb,0xffe3e3e3,0xff999999,0xff7a7a7a,0xffb9b9b9,0xffb5b5b5,0xffdedede,0xffe0e0e0,0xffdfdfdf,0xffdbdbdb,0xffd1d1d1,0x8e898989, - 0x0,0x0,0x28363636,0xfcb2b2b2,0xffdadada,0xffededed,0xfff5f5f5,0xffd5d5d5,0xfff5f5f5,0xffcbcbcb,0xffb7b7b7,0xffd2d2d2,0xffd3d3d3,0xffc8c8c8, - 0xffb2b2b2,0x78979797,0x0,0x0,0x694b4b4b,0xffafafaf,0xffc8c8c8,0xffd1d1d1,0xffd8d8d8,0xffdbdbdb,0xffb9b9b9,0xffd7d7d7,0xffe4e4e4,0xffc3c3c3, - 0xffa0a0a0,0xffb9b9b9,0xffd2d2d2,0xffdbdbdb,0x5e979797,0x0,0x70434343,0xff9c9c9c,0xffadadad,0xffb6b6b6,0xffbbbbbb,0xffbbbbbb,0xffb0b0b0,0xffdfdfdf, - 0xfff5f5f5,0xfff8f8f8,0xfff2f2f2,0xfff8f8f8,0xfff6f6f6,0xffe3e3e3,0xe6bababa,0x90b0b0b,0x30232323,0xfb767676,0xff939393,0xff9a9a9a,0xff9f9f9f,0xff969696, - 0xffbbbbbb,0xffdadada,0xffe3e3e3,0xffe8e8e8,0xffeaeaea,0xffe9e9e9,0xffe5e5e5,0xffdedede,0xffc8c8c8,0x41363636,0x0,0x5a2e2e2e,0xde5b5b5b,0xfe707070, - 0xff7a7a7a,0xff727272,0xffb3b3b3,0xffcbcbcb,0xffd1d1d1,0xffd6d6d6,0xffd8d8d8,0xffd7d7d7,0xffd3d3d3,0xffcecece,0xffbfbfbf,0x57424242,0x0,0x0, - 0x4000000,0x20050505,0x33070707,0x3b181818,0xf2959595,0xffbababa,0xffbfbfbf,0xffc3c3c3,0xffc5c5c5,0xffc4c4c4,0xffc1c1c1,0xffbcbcbc,0xfe9f9f9f,0x321d1d1d, - 0x0,0x0,0x0,0x0,0x0,0x0,0x5c5f5f5f,0xf08a8a8a,0xffa7a7a7,0xffb0b0b0,0xffb2b2b2,0xffb0b0b0,0xffa9a9a9,0xf98e8e8e, - 0x874c4c4c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf101010,0x4a2b2b2b,0x65424242,0x6c4a4a4a,0x67444444, - 0x542e2e2e,0x200f0f0f,0x0,0x0 -}; - -static const QRgb others_data[] = { - 0x0,0x0,0x0,0xa804618,0x5d95643a,0x77a77c52,0x3d855126,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x17964f11,0xd2cfb190,0xfff8efdf,0xffffeccb,0xfeedce98,0x909b703f,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0xa0d29e66,0xfffff7e3,0xfffff8ec,0xffffedce,0xffffe0a9,0xfff5cd88,0x4c6f4316,0x11f72300, - 0x35fb2b00,0x17f82200,0x0,0x0,0x0,0x0,0x0,0xc15b00,0xe4ebbc7d,0xffffeac4,0xffffecca,0xffffe5b9,0xfffedb9e,0xfff4d38d, - 0xd9c76844,0xf3f6b8b4,0xfffcdad0,0xf8f5b3a6,0x8cba524a,0x2070000,0x0,0x0,0x0,0x0,0xdce9b56b,0xfffedda3,0xffffdea6,0xfffedb9e, - 0xfff8d592,0xffdf9f67,0xfffadad6,0xfffffaf8,0xfffef0ea,0xfffee2d6,0xfffed4c3,0x6fac4f41,0x0,0x0,0x0,0x0,0x7ecd933c,0xfff7d390, - 0xfff6d390,0xfff3d08b,0xffe6c377,0xffe29c73,0xfffeece4,0xfffeeee7,0xfffee9e0,0xfffddecf,0xfff9d8c8,0xcbd0927d,0x0,0x0,0x0,0xc007f00, - 0xb85db05a,0xffbbae64,0xffd4ab58,0xffd0a952,0xffba9636,0xffd9a571,0xfffddfd2,0xfffee0d3,0xfffdddce,0xfffbd8c8,0xfff6d2c2,0xd4d3927a,0x0,0x0, - 0x0,0xa171b973,0xffd4e9ce,0xffd4f2d5,0xffb2a680,0xffdb301a,0xff9cde94,0xffd3c097,0xfffbd4c2,0xfffad7c6,0xfff9d6c6,0xfff6d2c0,0xfff8c2ab,0x8ec26d51, - 0x0,0x0,0x28026b11,0xfc9ed391,0xffd4efc6,0xffeaf8e2,0xfff2fcee,0xffe5cdc6,0xfff4fcee,0xffb5cbe1,0xffd19da5,0xfff9c2ab,0xfff8c5ae,0xfff9b398, - 0xffd6918f,0x785982d5,0x0,0x0,0x691d792e,0xff9edc82,0xffbdeaa7,0xffc8edb6,0xffd0f0c0,0xffd4f2c4,0xffa8cac2,0xffbdccf2,0xffcfdefa,0xffbcb5d2, - 0xff9a91b0,0xffaba8ca,0xffaaccfb,0xffc4d1f2,0x5e6184ce,0x0,0x70196d2d,0xff88d663,0xff9dde7c,0xffa8e28a,0xffaee493,0xffb0e493,0xff89add8,0xffc6dbf8, - 0xffebf5ff,0xfff1f7ff,0xffe6f3ff,0xfff2f8ff,0xffeef6ff,0xffcfe0f8,0xe694b1e1,0x9000317,0x30004626,0xfb57b03d,0xff7ed651,0xff86d75e,0xff8cd966,0xff7cc16b, - 0xff84aff2,0xffb6dafe,0xffc8e4ff,0xffd2eaff,0xffd6ebff,0xffd4eaff,0xffcce6ff,0xffbee0ff,0xff96c2fb,0x410e1f5e,0x0,0x5a104c2a,0xde3b882f,0xfe51aa37, - 0xff5cb83c,0xff4e9c49,0xff70a8f6,0xff98cdff,0xffa4d3ff,0xffaed7ff,0xffb1d8ff,0xffb0d8ff,0xffa8d4ff,0xff9dcfff,0xff81bcfe,0x57132571,0x0,0x0, - 0x4000001,0x2000020a,0x3300080f,0x3b000d31,0xf24a83e0,0xff76bdff,0xff80c2ff,0xff88c5ff,0xff8cc6ff,0xff8ac6ff,0xff84c2ff,0xff7abeff,0xfe5694e9,0x32030738, - 0x0,0x0,0x0,0x0,0x0,0x0,0x5c1429ab,0xf03d77d8,0xff57a3f7,0xff62b0fe,0xff65b2ff,0xff63b1fe,0xff5aa6f9,0xf9427edb, - 0x87152a83,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf000021,0x4a020554,0x650b167a,0x6c0e1d86,0x670c187d, - 0x5403065a,0x2000001e,0x0,0x0 -}; - -static const QRgb user_green_data[] = { - 0x0,0x0,0x0,0x0,0x5029,0x6c1c6e21,0xe332aa3b,0xf83ac841,0xf838c83f,0xda369a3b,0x5a145819,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x7e1a6c1e,0xff32da39,0xff3de341,0xff3ee045,0xff3ee042,0xff3de345,0xff27d930,0x68125817, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f013105,0xf721a328,0xff22de27,0xff23dd27,0xff26dc26,0xff26dc2a,0xff22de27, - 0xff22de27,0xee268c2b,0x12001402,0x0,0x0,0x0,0x0,0x0,0x0,0x5c0b590f,0xff19b51d,0xff1ecc1e,0xff1dd31d,0xff22d41e, - 0xff1ed41e,0xff1cd21c,0xff1dcb21,0xff18b01b,0x4d093d0d,0x0,0x0,0x0,0x0,0x0,0x0,0x640f5f13,0xff18bc18,0xff1ec61a, - 0xff1ed119,0xff22d519,0xff22d519,0xff22ce1a,0xff1fc31b,0xff16be1a,0x5a0e4211,0x0,0x0,0x0,0x0,0x0,0x0,0x38033507, - 0xff1db91d,0xff21d818,0xff24e616,0xff2aec16,0xff2aec16,0xff24e416,0xff21d418,0xfd20b020,0x35031b05,0x0,0x0,0x0,0x0,0x0, - 0x0,0x2000000,0xbb2a702c,0xff2df018,0xff3af41c,0xff48f620,0xff46fa1c,0xff39f21a,0xff23ef13,0xb929632c,0x4000000,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x2e012703,0xfc279129,0xff3fe729,0xff5ff537,0xff5bf632,0xff2ef11f,0xf6298f2e,0x29010d02,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x6000e07,0xc41f7721,0xff1ee01e,0xff29dd2d,0xff22de27,0xff22de27,0xff2bdf34,0xff1ddf21,0xab227226, - 0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x6d136117,0xff1bc31b,0xff1ee01e,0xff24e020,0xff25e220,0xff25e220,0xff20e020, - 0xff20dc20,0xff1bbf1e,0x561b571f,0x0,0x0,0x0,0x0,0x0,0x8001205,0xe2268e29,0xff1eca1a,0xff23d41a,0xff23d81a,0xff23d81a, - 0xff23d81a,0xff23d81a,0xff24d11b,0xff1fc71b,0xd12a882c,0x4000000,0x0,0x0,0x0,0x0,0x4a0e5012,0xff1cc818,0xff21d119,0xff25db17, - 0xff25e117,0xff24e616,0xff24e616,0xff27df19,0xff21da18,0xff22cf19,0xff18c418,0x3a173d19,0x0,0x0,0x0,0x0,0x982b732c,0xff1ed915, - 0xff25dd17,0xff28ec14,0xff32f018,0xff34f21a,0xff32f218,0xff2af016,0xff28ea14,0xff20db17,0xff1bd317,0x85316f34,0x0,0x0,0x0,0x0, - 0xbf318131,0xff22e818,0xff2aea16,0xff39ef1b,0xff44fa1a,0xff4dfa1e,0xff4dfa1e,0xff3ff71b,0xff30f016,0xff2ae616,0xff20e616,0xb3337936,0x0,0x0, - 0x0,0x0,0x51134b16,0xed369834,0xff2ef11f,0xff54f828,0xff67fc2c,0xff6bfb33,0xff6ffc30,0xff5ffc28,0xff48f925,0xff30f41c,0xec33a135,0x561b3d1e, - 0x0,0x0,0x0,0x0,0x0,0x18000802,0x60113b14,0x9d315f33,0xbb417143,0xc6467848,0xc6467a48,0xbc417942,0x9e3c663e,0x64224225, - 0x1c020604,0x0,0x0,0x0 -}; - -static const QRgb user_grey_data[] = { - 0x0,0x0,0x0,0x0,0x404040,0x6c6e6e6e,0xe3b0b0b0,0xf8cecece,0xf8cccccc,0xdaa6a6a6,0x5a575757,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x7e6b6b6b,0xffd6d6d6,0xffe6e6e6,0xffe4e4e4,0xffe4e4e4,0xffe6e6e6,0xffcccccc,0x68555555, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f282828,0xf79d9d9d,0xffcccccc,0xffcdcdcd,0xffcecece,0xffcecece,0xffcccccc, - 0xffcccccc,0xee8f8f8f,0x12101010,0x0,0x0,0x0,0x0,0x0,0x0,0x5c515151,0xffa5a5a5,0xffbbbbbb,0xffc0c0c0,0xffc1c1c1, - 0xffc1c1c1,0xffbfbfbf,0xffbababa,0xffa0a0a0,0x4d383838,0x0,0x0,0x0,0x0,0x0,0x0,0x64585858,0xffaaaaaa,0xffb4b4b4, - 0xffbcbcbc,0xffbfbfbf,0xffbfbfbf,0xffbababa,0xffb2b2b2,0xffa9a9a9,0x5a404040,0x0,0x0,0x0,0x0,0x0,0x0,0x382e2e2e, - 0xffababab,0xffc0c0c0,0xffc9c9c9,0xffcfcfcf,0xffcecece,0xffc8c8c8,0xffbdbdbd,0xfda6a6a6,0x35181818,0x0,0x0,0x0,0x0,0x0, - 0x0,0x2000000,0xbb7c7c7c,0xffd3d3d3,0xffd9d9d9,0xffdfdfdf,0xffdedede,0xffd7d7d7,0xffcecece,0xb9717171,0x4000000,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x2e202020,0xfc939393,0xffdadada,0xfff0f0f0,0xffededed,0xffdadada,0xf6949494,0x290c0c0c,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x60c0c0c,0xc4787878,0xffcbcbcb,0xffd2d2d2,0xffcccccc,0xffcccccc,0xffd4d4d4,0xffc9c9c9,0xab777777, - 0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x6d5d5d5d,0xffb2b2b2,0xffcbcbcb,0xffcccccc,0xffcecece,0xffcecece,0xffcccccc, - 0xffcacaca,0xffafafaf,0x565c5c5c,0x0,0x0,0x0,0x0,0x0,0x80f0f0f,0xe2909090,0xffb7b7b7,0xffbebebe,0xffc1c1c1,0xffc1c1c1, - 0xffc1c1c1,0xffc1c1c1,0xffbdbdbd,0xffb5b5b5,0xd18f8f8f,0x4000000,0x0,0x0,0x0,0x0,0x4a4c4c4c,0xffb3b3b3,0xffbbbbbb,0xffc2c2c2, - 0xffc7c7c7,0xffc9c9c9,0xffc9c9c9,0xffc6c6c6,0xffc1c1c1,0xffb9b9b9,0xffb0b0b0,0x3a434343,0x0,0x0,0x0,0x0,0x987e7e7e,0xffbfbfbf, - 0xffc4c4c4,0xffcdcdcd,0xffd3d3d3,0xffd6d6d6,0xffd5d5d5,0xffd1d1d1,0xffcbcbcb,0xffc2c2c2,0xffbbbbbb,0x85808080,0x0,0x0,0x0,0x0, - 0xbf8e8e8e,0xffcccccc,0xffcccccc,0xffd5d5d5,0xffdddddd,0xffe0e0e0,0xffe0e0e0,0xffdbdbdb,0xffd2d2d2,0xffcacaca,0xffcacaca,0xb38a8a8a,0x0,0x0, - 0x0,0x0,0x514b4b4b,0xeda4a4a4,0xffdadada,0xffe7e7e7,0xffededed,0xfff1f1f1,0xfff0f0f0,0xffeaeaea,0xffe4e4e4,0xffdadada,0xeca9a9a9,0x56474747, - 0x0,0x0,0x0,0x0,0x0,0x18070707,0x603e3e3e,0x9d747474,0xbb8e8e8e,0xc6989898,0xc69a9a9a,0xbc959595,0x9e828282,0x64505050, - 0x1c070707,0x0,0x0,0x0 -}; - -static const QRgb user_data[] = { - 0x0,0x0,0x0,0x0,0x7f,0x6c2c68af,0xe384abdb,0xf8b2ccea,0xf8aecae9,0xda7ba3d1,0x5a20508d,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x7e2a66ac,0xffb8d4f3,0xffd2e5f9,0xffd0e3f8,0xffcfe3f8,0xffd3e5f9,0xffa7c9f0,0x681d4e8c, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f02244d,0xf75c9ade,0xffa6cbf2,0xffa7ccf2,0xffa9cef2,0xffa9cdf2,0xffa6ccf2, - 0xffa6ccf2,0xee4d8bd0,0x12000d1f,0x0,0x0,0x0,0x0,0x0,0x0,0x5c124c8f,0xff60a4ea,0xff88bcee,0xff8fc1f0,0xff92c4f0, - 0xff92c3f0,0xff8ec0f0,0xff85baee,0xff579fe9,0x4d0f3460,0x0,0x0,0x0,0x0,0x0,0x0,0x64185598,0xff67acec,0xff7ab8ee, - 0xff87c1f1,0xff8cc5f2,0xff8cc5f2,0xff84c0f0,0xff76b6ed,0xff63a9ee,0x5a173d69,0x0,0x0,0x0,0x0,0x0,0x0,0x38052a56, - 0xff6caee9,0xff8cc6f3,0xff9cd2f6,0xffa5d8f8,0xffa4d7f8,0xff99d0f6,0xff88c3f2,0xfd68a7e4,0x3505152b,0x0,0x0,0x0,0x0,0x0, - 0x0,0x2000000,0xbb447bb3,0xffabdbfa,0xffb6e4fc,0xffc0ecfe,0xffbeebfe,0xffb3e2fb,0xffa2d6f9,0xb9426e9f,0x4000000,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x2e011c3e,0xfc5491d2,0xffbce2f8,0xffe1f6fe,0xffdcf5fe,0xffb9e0fb,0xf65790d0,0x29010b17,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x6000017,0xc43276be,0xffa2cbf3,0xffb0d1f3,0xffa6cbf2,0xffa6cbf2,0xffb4d2f4,0xff9ec9f3,0xab3774b7, - 0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x6d1f599b,0xff76b3ed,0xffa3ccf3,0xffa5cff3,0xffa7d0f4,0xffa7d0f4,0xffa5cef3, - 0xffa2ccf2,0xff71afed,0x562c578c,0x0,0x0,0x0,0x0,0x0,0x800071e,0xe24f8fd0,0xff7ebaef,0xff8bc4f1,0xff90c7f2,0xff8fc7f2, - 0xff8fc6f2,0xff8fc6f2,0xff89c2f0,0xff7bb8ee,0xd1538dca,0x4000000,0x0,0x0,0x0,0x0,0x4a164781,0xff77b8ef,0xff85c2f1,0xff90caf4, - 0xff98cff5,0xff9cd2f6,0xff9bd1f6,0xff97cef5,0xff8ec8f3,0xff82bff0,0xff72b2ee,0x3a244062,0x0,0x0,0x0,0x0,0x98447db7,0xff8ac5f4, - 0xff94ccf4,0xffa1d6f8,0xffabddfa,0xffb0e0fb,0xffafe0fb,0xffa8dbfa,0xff9ed4f7,0xff90c9f4,0xff83c0f3,0x854d7cb2,0x0,0x0,0x0,0x0, - 0xbf5a8fc1,0xffa1d2f6,0xffa0d6f7,0xffafe0fa,0xffbceafe,0xffc2eefe,0xffc2eefe,0xffb9e8fd,0xffaaddfa,0xff9ed3f6,0xff9dd0f6,0xb35a88ba,0x0,0x0, - 0x0,0x0,0x511f4776,0xed77a7d1,0xffb8e0fb,0xffcff1fe,0xffdaf8ff,0xffe2f9ff,0xffe0f9ff,0xffd5f6ff,0xffcaeefe,0xffb8e1fc,0xec7ca9d6,0x562c4462, - 0x0,0x0,0x0,0x0,0x0,0x1800030d,0x601b3a61,0x9d4f7198,0xbb6e8cad,0xc67d96b3,0xc67d98b6,0xbc7494b5,0x9e6180a3,0x64364c69, - 0x1c040409,0x0,0x0,0x0 -}; - -static const QRgb yes_data[] = { - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x11049c00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x1005a200,0x800ba600,0xd512a700,0xe1009d00,0x34007700,0x1000000,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x8009500,0x78009b00,0xf0039f03,0xe2009800,0x46003700,0xbb009300,0xeb11a111,0x35006f00,0x1000000,0x0,0x0, - 0x0,0x0,0x0,0x8008d00,0x70009300,0xe819ab19,0xff3ec63e,0xd4099109,0x45002c00,0xf000000,0x6f008900,0xff33d633,0xeb0a9e0a,0x35006800, - 0x1000000,0x0,0x0,0x4008900,0x6c008a00,0xe8099e09,0xff2cd52c,0xff3bd93b,0xcb048404,0x3c001c00,0xc000000,0x0,0x28007a00,0xff0abc0a, - 0xff10f410,0xeb019701,0x35006100,0x5006d00,0x60008100,0xdc009800,0xff06d206,0xff13fd13,0xff11ce11,0xc2017801,0x32000b00,0xa000000,0x0,0x0, - 0x1000000,0xde009100,0xff00f700,0xff00eb00,0xeb008e00,0xde008700,0xff00c400,0xff00f500,0xff00f700,0xff00c100,0xae006700,0x30000b00,0x8000000,0x0, - 0x0,0x0,0x0,0x97007100,0xff00dc00,0xff00eb00,0xff00e500,0xff00e700,0xff00eb00,0xff00eb00,0xff00a800,0xa2005c00,0x29000000,0x6000000, - 0x0,0x0,0x0,0x0,0x0,0x4c006600,0xff00af00,0xff00de00,0xff00de00,0xff00de00,0xff00dc00,0xff009600,0x96005100,0x24000000, - 0x5000000,0x0,0x0,0x0,0x0,0x0,0x0,0xa004e00,0xf8008200,0xff00d200,0xff00d200,0xff00ce00,0xfc008700,0x80004100, - 0x21000000,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbb005f00,0xff00c300,0xff00c100,0xf6007500, - 0x76003800,0x1d000000,0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6f005800,0xff009700, - 0xf4006d00,0x6c003200,0x19000000,0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x28005300,0xed005900,0x5a002800,0x16000000,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x1000000,0x15000000,0x12000000,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0 -}; - -static const QRgb yespartial_data[] = { - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x114e4e4e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x10515151,0x80535353,0xd5535353,0xe14e4e4e,0x343b3b3b,0x1000000,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x84a4a4a,0x784d4d4d,0x9e515151,0xe24c4c4c,0x461b1b1b,0xbb494949,0xeb595959,0x35373737,0x1000000,0x0,0x0, - 0x0,0x0,0x0,0x8464646,0x70494949,0xe8626262,0x93828282,0xc34d4d4d,0x45161616,0xf000000,0x6f444444,0x8c848484,0xcf545454,0x35343434, - 0x1000000,0x0,0x0,0x4444444,0x6c454545,0xe5535353,0x57808080,0x5e8a8a8a,0xcb444444,0x3c0e0e0e,0xc000000,0x0,0x283d3d3d,0xa7636363, - 0x32828282,0xeb4c4c4c,0x35303030,0x5363636,0x60404040,0xdc4c4c4c,0x756c6c6c,0x2b888888,0x7b6f6f6f,0xc23c3c3c,0x32050505,0xa000000,0x0,0x0, - 0x1000000,0xde484848,0x3c7b7b7b,0x1f757575,0xeb474747,0xde434343,0x80626262,0x3c7a7a7a,0x337b7b7b,0x56606060,0xae333333,0x30050505,0x8000000,0x0, - 0x0,0x0,0x0,0x97383838,0x4c6e6e6e,0xa757575,0x3727272,0x24737373,0x2b757575,0x27757575,0x75545454,0x952e2e2e,0x29000000,0x6000000, - 0x0,0x0,0x0,0x0,0x0,0x4c333333,0x8e575757,0x1c6f6f6f,0x46f6f6f,0xb6f6f6f,0x2b6e6e6e,0x994b4b4b,0x85282828,0x24000000, - 0x5000000,0x0,0x0,0x0,0x0,0x0,0x0,0xa272727,0xdc414141,0x3d696969,0x11696969,0x1e676767,0x91434343,0x77202020, - 0x21000000,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbb2f2f2f,0x5d616161,0x36606060,0x893a3a3a, - 0x761c1c1c,0x1d000000,0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6f2c2c2c,0x9a4b4b4b, - 0x9b363636,0x6c191919,0x19000000,0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x28292929,0xed2c2c2c,0x5a141414,0x16000000,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x1000000,0x15000000,0x12000000,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, - 0x0,0x0,0x0,0x0 -}; - -static struct EmbedImage { - int width, height, depth; - const unsigned char *data; - int numColors; - const QRgb *colorTable; - bool alpha; - const char *name; -} embed_image_vec[] = { - { 16, 16, 32, (const unsigned char*)group_grey_data, 0, 0, TRUE, "group-grey" }, - { 16, 16, 32, (const unsigned char*)group_data, 0, 0, TRUE, "group" }, - { 16, 16, 32, (const unsigned char*)mask_data, 0, 0, TRUE, "mask" }, - { 16, 16, 32, (const unsigned char*)others_grey_data, 0, 0, TRUE, "others-grey" }, - { 16, 16, 32, (const unsigned char*)others_data, 0, 0, TRUE, "others" }, - { 16, 16, 32, (const unsigned char*)user_green_data, 0, 0, TRUE, "user-green" }, - { 16, 16, 32, (const unsigned char*)user_grey_data, 0, 0, TRUE, "user-grey" }, - { 16, 16, 32, (const unsigned char*)user_data, 0, 0, TRUE, "user" }, - { 16, 16, 32, (const unsigned char*)yes_data, 0, 0, TRUE, "yes" }, - { 16, 16, 32, (const unsigned char*)yespartial_data, 0, 0, TRUE, "yespartial" }, - { 0, 0, 0, 0, 0, 0, 0, 0 } -}; - -static const TQImage& qembed_findImage( const TQString& name ) -{ - static TQDict<TQImage> dict; - TQImage* img = dict.find( name ); - if ( !img ) { - for ( int i = 0; embed_image_vec[i].data; i++ ) { - if ( strcmp(embed_image_vec[i].name, name.latin1()) == 0 ) { - img = new TQImage((uchar*)embed_image_vec[i].data, - embed_image_vec[i].width, - embed_image_vec[i].height, - embed_image_vec[i].depth, - (QRgb*)embed_image_vec[i].colorTable, - embed_image_vec[i].numColors, - TQImage::BigEndian ); - if ( embed_image_vec[i].alpha ) - img->setAlphaBuffer( TRUE ); - dict.insert( name, img ); - break; - } - } - if ( !img ) { - static TQImage dummy; - return dummy; - } - } - return *img; -} - -#endif -#endif diff --git a/kio/kfile/kacleditwidget.cpp b/kio/kfile/kacleditwidget.cpp deleted file mode 100644 index 7f253f8c5..000000000 --- a/kio/kfile/kacleditwidget.cpp +++ /dev/null @@ -1,1054 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005 by Sean Harmer <sh@rama.homelinux.org> * - * Till Adam <adam@kde.org> * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 2 of the * - * License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - ***************************************************************************/ - - -#include "kacleditwidget.h" -#include "kacleditwidget_p.h" - -#ifdef USE_POSIX_ACL - -#include <tqpainter.h> -#include <tqptrlist.h> -#include <tqvbox.h> -#include <tqhbox.h> -#include <tqpushbutton.h> -#include <tqvbuttongroup.h> -#include <tqradiobutton.h> -#include <tqcombobox.h> -#include <tqlabel.h> -#include <tqcheckbox.h> -#include <tqlayout.h> -#include <tqwidgetstack.h> -#include <tqheader.h> - -#include <klocale.h> -#include <kfileitem.h> -#include <kdebug.h> -#include <kdialog.h> -#include <kdialogbase.h> - -#ifdef HAVE_ACL_LIBACL_H -# include <acl/libacl.h> -#endif -extern "C" { -#include <pwd.h> -#include <grp.h> -} -#include <assert.h> - -#include "images.h" - -static struct { - const char* label; - const char* pixmapName; - TQPixmap* pixmap; -} s_itemAttributes[] = { - { I18N_NOOP( "Owner" ), "user-grey", 0 }, - { I18N_NOOP( "Owning Group" ), "group-grey", 0 }, - { I18N_NOOP( "Others" ), "others-grey", 0 }, - { I18N_NOOP( "Mask" ), "mask", 0 }, - { I18N_NOOP( "Named User" ), "user", 0 }, - { I18N_NOOP( "Named Group" ), "group", 0 }, -}; - -KACLEditWidget::KACLEditWidget( TQWidget *parent, const char *name ) - :TQWidget( parent, name ) -{ - TQHBox *hbox = new TQHBox( parent ); - hbox->setSpacing( KDialog::spacingHint() ); - m_listView = new KACLListView( hbox, "acl_listview" ); - connect( m_listView, TQT_SIGNAL( selectionChanged() ), - this, TQT_SLOT( slotUpdateButtons() ) ); - TQVBox *vbox = new TQVBox( hbox ); - vbox->setSpacing( KDialog::spacingHint() ); - m_AddBtn = new TQPushButton( i18n( "Add Entry..." ), vbox, "add_entry_button" ); - connect( m_AddBtn, TQT_SIGNAL( clicked() ), m_listView, TQT_SLOT( slotAddEntry() ) ); - m_EditBtn = new TQPushButton( i18n( "Edit Entry..." ), vbox, "edit_entry_button" ); - connect( m_EditBtn, TQT_SIGNAL( clicked() ), m_listView, TQT_SLOT( slotEditEntry() ) ); - m_DelBtn = new TQPushButton( i18n( "Delete Entry" ), vbox, "delete_entry_button" ); - connect( m_DelBtn, TQT_SIGNAL( clicked() ), m_listView, TQT_SLOT( slotRemoveEntry() ) ); - TQWidget *spacer = new TQWidget( vbox ); - spacer->setSizePolicy( TQSizePolicy::Minimum, TQSizePolicy::Expanding ); - slotUpdateButtons(); -} - -void KACLEditWidget::slotUpdateButtons() -{ - bool atLeastOneIsNotDeletable = false; - bool atLeastOneIsNotAllowedToChangeType = false; - int selectedCount = 0; - TQListViewItemIterator it( m_listView, TQListViewItemIterator::Selected ); - while ( KACLListViewItem *item = dynamic_cast<KACLListViewItem*>( it.current() ) ) { - ++it; ++selectedCount; - if ( !item->isDeletable() ) - atLeastOneIsNotDeletable = true; - if ( !item->isAllowedToChangeType() ) - atLeastOneIsNotAllowedToChangeType = true; - } - m_EditBtn->setEnabled( selectedCount && !atLeastOneIsNotAllowedToChangeType ); - m_DelBtn->setEnabled( selectedCount && !atLeastOneIsNotDeletable ); -} - -KACL KACLEditWidget::getACL() const -{ - return m_listView->getACL(); -} - -KACL KACLEditWidget::getDefaultACL() const -{ - return m_listView->getDefaultACL(); -} - -void KACLEditWidget::setACL( const KACL &acl ) -{ - return m_listView->setACL( acl ); -} - -void KACLEditWidget::setDefaultACL( const KACL &acl ) -{ - return m_listView->setDefaultACL( acl ); -} - -void KACLEditWidget::setAllowDefaults( bool value ) -{ - m_listView->setAllowDefaults( value ); -} - -void KACLEditWidget::setReadOnly( bool on ) -{ - m_listView->setEnabled( !on ); - m_AddBtn->setEnabled( !on ); - if ( !on ) - slotUpdateButtons(); -} - -KACLListViewItem::KACLListViewItem( TQListView* parent, - KACLListView::EntryType _type, - unsigned short _value, bool defaults, - const TQString& _qualifier ) - : KListViewItem( parent, parent->lastItem() ), // we want to append - type( _type ), value( _value ), isDefault( defaults ), - qualifier( _qualifier ), isPartial( false ) -{ - m_pACLListView = dynamic_cast<KACLListView*>( parent ); - repaint(); -} - - -KACLListViewItem::~ KACLListViewItem() -{ - -} - -TQString KACLListViewItem::key( int, bool ) const -{ - TQString key; - if ( !isDefault ) - key = "A"; - else - key = "B"; - switch ( type ) - { - case KACLListView::User: - key += "A"; - break; - case KACLListView::Group: - key += "B"; - break; - case KACLListView::Others: - key += "C"; - break; - case KACLListView::Mask: - key += "D"; - break; - case KACLListView::NamedUser: - key += "E" + text( 1 ); - break; - case KACLListView::NamedGroup: - key += "F" + text( 1 ); - break; - default: - key += text( 0 ); - break; - } - return key; -} - -void KACLListViewItem::paintCell( TQPainter* p, const TQColorGroup &cg, - int column, int width, int alignment ) -{ - TQColorGroup mycg = cg; - if ( isDefault ) { - mycg.setColor( TQColorGroup::Text, TQColor( 0, 0, 255 ) ); - } - if ( isPartial ) { - TQFont font = p->font(); - font.setItalic( true ); - mycg.setColor( TQColorGroup::Text, TQColor( 100, 100, 100 ) ); - p->setFont( font ); - } - KListViewItem::paintCell( p, mycg, column, width, alignment ); - - KACLListViewItem *below =0; - if ( itemBelow() ) - below = static_cast<KACLListViewItem*>( itemBelow() ); - const bool lastUser = type == KACLListView::NamedUser && below && below->type == KACLListView::NamedGroup; - const bool lastNonDefault = !isDefault && below && below->isDefault; - if ( type == KACLListView::Mask || lastUser || lastNonDefault ) - { - p->setPen( TQPen( Qt::gray, 0, TQPen::DotLine ) ); - if ( type == KACLListView::Mask ) - p->drawLine( 0, 0, width - 1, 0 ); - p->drawLine( 0, height() - 1, width - 1, height() - 1 ); - } -} - - -void KACLListViewItem::updatePermPixmaps() -{ - unsigned int partialPerms = value; - - if ( value & ACL_READ ) - setPixmap( 2, m_pACLListView->getYesPixmap() ); - else if ( partialPerms & ACL_READ ) - setPixmap( 2, m_pACLListView->getYesPartialPixmap() ); - else - setPixmap( 2, TQPixmap() ); - - if ( value & ACL_WRITE ) - setPixmap( 3, m_pACLListView->getYesPixmap() ); - else if ( partialPerms & ACL_WRITE ) - setPixmap( 3, m_pACLListView->getYesPartialPixmap() ); - else - setPixmap( 3, TQPixmap() ); - - if ( value & ACL_EXECUTE ) - setPixmap( 4, m_pACLListView->getYesPixmap() ); - else if ( partialPerms & ACL_EXECUTE ) - setPixmap( 4, m_pACLListView->getYesPartialPixmap() ); - else - setPixmap( 4, TQPixmap() ); -} - -void KACLListViewItem::repaint() -{ - int idx = 0; - switch ( type ) - { - case KACLListView::User: - idx = KACLListView::OWNER_IDX; - break; - case KACLListView::Group: - idx = KACLListView::GROUP_IDX; - break; - case KACLListView::Others: - idx = KACLListView::OTHERS_IDX; - break; - case KACLListView::Mask: - idx = KACLListView::MASK_IDX; - break; - case KACLListView::NamedUser: - idx = KACLListView::NAMED_USER_IDX; - break; - case KACLListView::NamedGroup: - idx = KACLListView::NAMED_GROUP_IDX; - break; - default: - idx = KACLListView::OWNER_IDX; - break; - } - setText( 0, i18n(s_itemAttributes[idx].label) ); - setPixmap( 0, *s_itemAttributes[idx].pixmap ); - if ( isDefault ) - setText( 0, text( 0 ) + i18n( " (Default)" ) ); - setText( 1, qualifier ); - // Set the pixmaps for which of the perms are set - updatePermPixmaps(); -} - -void KACLListViewItem::calcEffectiveRights() -{ - TQString strEffective = TQString( "---" ); - - // Do we need to worry about the mask entry? It applies to named users, - // owning group, and named groups - if ( m_pACLListView->hasMaskEntry() - && ( type == KACLListView::NamedUser - || type == KACLListView::Group - || type == KACLListView::NamedGroup ) - && !isDefault ) - { - - strEffective[0] = ( m_pACLListView->maskPermissions() & value & ACL_READ ) ? 'r' : '-'; - strEffective[1] = ( m_pACLListView->maskPermissions() & value & ACL_WRITE ) ? 'w' : '-'; - strEffective[2] = ( m_pACLListView->maskPermissions() & value & ACL_EXECUTE ) ? 'x' : '-'; -/* - // What about any partial perms? - if ( maskPerms & partialPerms & ACL_READ || // Partial perms on entry - maskPartialPerms & perms & ACL_READ || // Partial perms on mask - maskPartialPerms & partialPerms & ACL_READ ) // Partial perms on mask and entry - strEffective[0] = 'R'; - if ( maskPerms & partialPerms & ACL_WRITE || // Partial perms on entry - maskPartialPerms & perms & ACL_WRITE || // Partial perms on mask - maskPartialPerms & partialPerms & ACL_WRITE ) // Partial perms on mask and entry - strEffective[1] = 'W'; - if ( maskPerms & partialPerms & ACL_EXECUTE || // Partial perms on entry - maskPartialPerms & perms & ACL_EXECUTE || // Partial perms on mask - maskPartialPerms & partialPerms & ACL_EXECUTE ) // Partial perms on mask and entry - strEffective[2] = 'X'; -*/ - } - else - { - // No, the effective value are just the value in this entry - strEffective[0] = ( value & ACL_READ ) ? 'r' : '-'; - strEffective[1] = ( value & ACL_WRITE ) ? 'w' : '-'; - strEffective[2] = ( value & ACL_EXECUTE ) ? 'x' : '-'; - - /* - // What about any partial perms? - if ( partialPerms & ACL_READ ) - strEffective[0] = 'R'; - if ( partialPerms & ACL_WRITE ) - strEffective[1] = 'W'; - if ( partialPerms & ACL_EXECUTE ) - strEffective[2] = 'X'; - */ - } - setText( 5, strEffective ); -} - -bool KACLListViewItem::isDeletable() const -{ - bool isMaskAndDeletable = false; - if (type == KACLListView::Mask ) { - if ( !isDefault && m_pACLListView->maskCanBeDeleted() ) - isMaskAndDeletable = true; - else if ( isDefault && m_pACLListView->defaultMaskCanBeDeleted() ) - isMaskAndDeletable = true; - } - return type != KACLListView::User && - type != KACLListView::Group && - type != KACLListView::Others && - ( type != KACLListView::Mask || isMaskAndDeletable ); -} - -bool KACLListViewItem::isAllowedToChangeType() const -{ - return type != KACLListView::User && - type != KACLListView::Group && - type != KACLListView::Others && - type != KACLListView::Mask; -} - -void KACLListViewItem::togglePerm( acl_perm_t perm ) -{ - value ^= perm; // Toggle the perm - if ( type == KACLListView::Mask && !isDefault ) { - m_pACLListView->setMaskPermissions( value ); - } - calcEffectiveRights(); - updatePermPixmaps(); -/* - // If the perm is in the partial perms then remove it. i.e. Once - // a user changes a partial perm it then applies to all selected files. - if ( m_pEntry->m_partialPerms & perm ) - m_pEntry->m_partialPerms ^= perm; - - m_pEntry->setPartialEntry( false ); - // Make sure that all entries have their effective rights calculated if - // we are changing the ACL_MASK entry. - if ( type == Mask ) - { - m_pACLListView->setMaskPartialPermissions( m_pEntry->m_partialPerms ); - m_pACLListView->setMaskPermissions( value ); - m_pACLListView->calculateEffectiveRights(); - } -*/ -} - - - -EditACLEntryDialog::EditACLEntryDialog( KACLListView *listView, KACLListViewItem *item, - const TQStringList &users, - const TQStringList &groups, - const TQStringList &defaultUsers, - const TQStringList &defaultGroups, - int allowedTypes, int allowedDefaultTypes, - bool allowDefaults ) - : KDialogBase( listView, "edit_entry_dialog", true, - i18n( "Edit ACL Entry" ), KDialogBase::Ok|KDialogBase::Cancel, - KDialogBase::Ok, false ), - m_listView( listView ), m_item( item ), m_users( users ), m_groups( groups ), - m_defaultUsers( defaultUsers ), m_defaultGroups( defaultGroups ), - m_allowedTypes( allowedTypes ), m_allowedDefaultTypes( allowedDefaultTypes ), - m_defaultCB( 0 ) -{ - TQWidget *page = new TQWidget( this ); - setMainWidget( page ); - TQVBoxLayout *mainLayout = new TQVBoxLayout( page, 0, spacingHint(), "mainLayout" ); - m_buttonGroup = new TQVButtonGroup( i18n("Entry Type"), page, "bg" ); - - if ( allowDefaults ) { - m_defaultCB = new TQCheckBox( i18n("Default for new files in this folder"), page, "defaultCB" ); - mainLayout->addWidget( m_defaultCB ); - connect( m_defaultCB, TQT_SIGNAL( toggled( bool ) ), - this, TQT_SLOT( slotUpdateAllowedUsersAndGroups() ) ); - connect( m_defaultCB, TQT_SIGNAL( toggled( bool ) ), - this, TQT_SLOT( slotUpdateAllowedTypes() ) ); - - } - - mainLayout->addWidget( m_buttonGroup ); - - TQRadioButton *ownerType = new TQRadioButton( i18n("Owner"), m_buttonGroup, "ownerType" ); - m_buttonGroup->insert( ownerType, KACLListView::User ); - TQRadioButton *owningGroupType = new TQRadioButton( i18n("Owning Group"), m_buttonGroup, "owningGroupType" ); - m_buttonGroup->insert( owningGroupType, KACLListView::Group ); - TQRadioButton *othersType = new TQRadioButton( i18n("Others"), m_buttonGroup, "othersType" ); - m_buttonGroup->insert( othersType, KACLListView::Others ); - TQRadioButton *maskType = new TQRadioButton( i18n("Mask"), m_buttonGroup, "maskType" ); - m_buttonGroup->insert( maskType, KACLListView::Mask ); - TQRadioButton *namedUserType = new TQRadioButton( i18n("Named User"), m_buttonGroup, "namesUserType" ); - m_buttonGroup->insert( namedUserType, KACLListView::NamedUser ); - TQRadioButton *namedGroupType = new TQRadioButton( i18n("Named Group"), m_buttonGroup, "namedGroupType" ); - m_buttonGroup->insert( namedGroupType, KACLListView::NamedGroup ); - - connect( m_buttonGroup, TQT_SIGNAL( clicked( int ) ), - this, TQT_SLOT( slotSelectionChanged( int ) ) ); - - m_widgetStack = new TQWidgetStack( page ); - mainLayout->addWidget( m_widgetStack ); - - TQHBox *usersBox = new TQHBox( m_widgetStack ); - m_widgetStack->addWidget( usersBox, KACLListView::NamedUser ); - - TQHBox *groupsBox = new TQHBox( m_widgetStack ); - m_widgetStack->addWidget( groupsBox, KACLListView::NamedGroup ); - - TQLabel *usersLabel = new TQLabel( i18n( "User: " ), usersBox ); - m_usersCombo = new TQComboBox( false, usersBox, "users" ); - usersLabel->setBuddy( m_usersCombo ); - - TQLabel *groupsLabel = new TQLabel( i18n( "Group: " ), groupsBox ); - m_groupsCombo = new TQComboBox( false, groupsBox, "groups" ); - groupsLabel->setBuddy( m_groupsCombo ); - - if ( m_item ) { - m_buttonGroup->setButton( m_item->type ); - if ( m_defaultCB ) - m_defaultCB->setChecked( m_item->isDefault ); - slotUpdateAllowedTypes(); - slotSelectionChanged( m_item->type ); - slotUpdateAllowedUsersAndGroups(); - if ( m_item->type == KACLListView::NamedUser ) { - m_usersCombo->setCurrentText( m_item->qualifier ); - } else if ( m_item->type == KACLListView::NamedGroup ) { - m_groupsCombo->setCurrentText( m_item->qualifier ); - } - } else { - // new entry, preselect "named user", arguably the most common one - m_buttonGroup->setButton( KACLListView::NamedUser ); - slotUpdateAllowedTypes(); - slotSelectionChanged( KACLListView::NamedUser ); - slotUpdateAllowedUsersAndGroups(); - } - incInitialSize( TQSize( 100, 0 ) ); -} - -void EditACLEntryDialog::slotUpdateAllowedTypes() -{ - int allowedTypes = m_allowedTypes; - if ( m_defaultCB && m_defaultCB->isChecked() ) { - allowedTypes = m_allowedDefaultTypes; - } - for ( int i=1; i < KACLListView::AllTypes; i=i*2 ) { - if ( allowedTypes & i ) - m_buttonGroup->find( i )->show(); - else - m_buttonGroup->find( i )->hide(); - } -} - -void EditACLEntryDialog::slotUpdateAllowedUsersAndGroups() -{ - const TQString oldUser = m_usersCombo->currentText(); - const TQString oldGroup = m_groupsCombo->currentText(); - m_usersCombo->clear(); - m_groupsCombo->clear(); - if ( m_defaultCB && m_defaultCB->isChecked() ) { - m_usersCombo->insertStringList( m_defaultUsers ); - if ( m_defaultUsers.find( oldUser ) != m_defaultUsers.end() ) - m_usersCombo->setCurrentText( oldUser ); - m_groupsCombo->insertStringList( m_defaultGroups ); - if ( m_defaultGroups.find( oldGroup ) != m_defaultGroups.end() ) - m_groupsCombo->setCurrentText( oldGroup ); - } else { - m_usersCombo->insertStringList( m_users ); - if ( m_users.find( oldUser ) != m_users.end() ) - m_usersCombo->setCurrentText( oldUser ); - m_groupsCombo->insertStringList( m_groups ); - if ( m_groups.find( oldGroup ) != m_groups.end() ) - m_groupsCombo->setCurrentText( oldGroup ); - } -} -void EditACLEntryDialog::slotOk() -{ - KACLListView::EntryType type = static_cast<KACLListView::EntryType>( m_buttonGroup->selectedId() ); - - TQString qualifier; - if ( type == KACLListView::NamedUser ) - qualifier = m_usersCombo->currentText(); - if ( type == KACLListView::NamedGroup ) - qualifier = m_groupsCombo->currentText(); - - if ( !m_item ) { - m_item = new KACLListViewItem( m_listView, type, ACL_READ | ACL_WRITE | ACL_EXECUTE, false, qualifier ); - } else { - m_item->type = type; - m_item->qualifier = qualifier; - } - if ( m_defaultCB ) - m_item->isDefault = m_defaultCB->isChecked(); - m_item->repaint(); - - KDialogBase::slotOk(); -} - -void EditACLEntryDialog::slotSelectionChanged( int id ) -{ - switch ( id ) { - case KACLListView::User: - case KACLListView::Group: - case KACLListView::Others: - case KACLListView::Mask: - m_widgetStack->setEnabled( false ); - break; - case KACLListView::NamedUser: - m_widgetStack->setEnabled( true ); - m_widgetStack->raiseWidget( KACLListView::NamedUser ); - break; - case KACLListView::NamedGroup: - m_widgetStack->setEnabled( true ); - m_widgetStack->raiseWidget( KACLListView::NamedGroup ); - break; - default: - break; - } -} - - -KACLListView::KACLListView( TQWidget* parent, const char* name ) - : KListView( parent, name ), - m_hasMask( false ), m_allowDefaults( false ) -{ - // Add the columns - addColumn( i18n( "Type" ) ); - addColumn( i18n( "Name" ) ); - addColumn( i18n( "read permission", "r" ) ); - addColumn( i18n( "write permission", "w" ) ); - addColumn( i18n( "execute permission", "x" ) ); - addColumn( i18n( "Effective" ) ); - - header()->setClickEnabled( false ); - - // Load the avatars - for ( int i=0; i < LAST_IDX; ++i ) { - s_itemAttributes[i].pixmap = new TQPixmap( qembed_findImage( s_itemAttributes[i].pixmapName ) ); - } - m_yesPixmap = new TQPixmap( qembed_findImage( "yes" ) ); - m_yesPartialPixmap = new TQPixmap( qembed_findImage( "yespartial" ) ); - - setSelectionMode( TQListView::Extended ); - - // fill the lists of all legal users and groups - struct passwd *user = 0; - setpwent(); - while ( ( user = getpwent() ) != 0 ) { - m_allUsers << TQString::fromLatin1( user->pw_name ); - } - endpwent(); - - struct group *gr = 0; - setgrent(); - while ( ( gr = getgrent() ) != 0 ) { - m_allGroups << TQString::fromLatin1( gr->gr_name ); - } - endgrent(); - m_allUsers.sort(); - m_allGroups.sort(); -} - - -KACLListView::~KACLListView() -{ - for ( int i=0; i < LAST_IDX; ++i ) { - delete s_itemAttributes[i].pixmap; - } - delete m_yesPixmap; - delete m_yesPartialPixmap; -} - -TQStringList KACLListView::allowedUsers( bool defaults, KACLListViewItem *allowedItem ) -{ - TQStringList allowedUsers = m_allUsers; - TQListViewItemIterator it( this ); - while ( it.current() ) { - const KACLListViewItem *item = static_cast<const KACLListViewItem*>( *it ); - ++it; - if ( !item->type == NamedUser || item->isDefault != defaults ) continue; - if ( allowedItem && item == allowedItem && allowedItem->isDefault == defaults ) continue; - allowedUsers.remove( item->qualifier ); - } - return allowedUsers; -} - -TQStringList KACLListView::allowedGroups( bool defaults, KACLListViewItem *allowedItem ) -{ - TQStringList allowedGroups = m_allGroups; - TQListViewItemIterator it( this ); - while ( it.current() ) { - const KACLListViewItem *item = static_cast<const KACLListViewItem*>( *it ); - ++it; - if ( !item->type == NamedGroup || item->isDefault != defaults ) continue; - if ( allowedItem && item == allowedItem && allowedItem->isDefault == defaults ) continue; - allowedGroups.remove( item->qualifier ); - } - return allowedGroups; -} - -void KACLListView::fillItemsFromACL( const KACL &pACL, bool defaults ) -{ - // clear out old entries of that ilk - TQListViewItemIterator it( this ); - while ( KACLListViewItem *item = static_cast<KACLListViewItem*>( it.current() ) ) { - ++it; - if ( item->isDefault == defaults ) - delete item; - } - KACLListViewItem *item = - new KACLListViewItem( this, User, pACL.ownerPermissions(), defaults ); - - item = new KACLListViewItem( this, Group, pACL.owningGroupPermissions(), defaults ); - - item = new KACLListViewItem( this, Others, pACL.othersPermissions(), defaults ); - - bool hasMask = false; - unsigned short mask = pACL.maskPermissions( hasMask ); - if ( hasMask ) { - item = new KACLListViewItem( this, Mask, mask, defaults ); - } - - // read all named user entries - const ACLUserPermissionsList &userList = pACL.allUserPermissions(); - ACLUserPermissionsConstIterator itu = userList.begin(); - while ( itu != userList.end() ) { - new KACLListViewItem( this, NamedUser, (*itu).second, defaults, (*itu).first ); - ++itu; - } - - // and now all named groups - const ACLUserPermissionsList &groupList = pACL.allGroupPermissions(); - ACLUserPermissionsConstIterator itg = groupList.begin(); - while ( itg != groupList.end() ) { - new KACLListViewItem( this, NamedGroup, (*itg).second, defaults, (*itg).first ); - ++itg; - } -} - -void KACLListView::setACL( const KACL &acl ) -{ - if ( !acl.isValid() ) return; - // Remove any entries left over from displaying a previous ACL - m_ACL = acl; - fillItemsFromACL( m_ACL ); - - m_mask = acl.maskPermissions( m_hasMask ); - calculateEffectiveRights(); -} - -void KACLListView::setDefaultACL( const KACL &acl ) -{ - if ( !acl.isValid() ) return; - m_defaultACL = acl; - fillItemsFromACL( m_defaultACL, true ); - calculateEffectiveRights(); -} - -KACL KACLListView::itemsToACL( bool defaults ) const -{ - KACL newACL( 0 ); - bool atLeastOneEntry = false; - ACLUserPermissionsList users; - ACLGroupPermissionsList groups; - TQListViewItemIterator it( const_cast<KACLListView*>( this ) ); - while ( TQListViewItem* qlvi = it.current() ) { - ++it; - const KACLListViewItem* item = static_cast<KACLListViewItem*>( qlvi ); - if ( item->isDefault != defaults ) continue; - atLeastOneEntry = true; - switch ( item->type ) { - case User: - newACL.setOwnerPermissions( item->value ); - break; - case Group: - newACL.setOwningGroupPermissions( item->value ); - break; - case Others: - newACL.setOthersPermissions( item->value ); - break; - case Mask: - newACL.setMaskPermissions( item->value ); - break; - case NamedUser: - users.append( qMakePair( item->text( 1 ), item->value ) ); - break; - case NamedGroup: - groups.append( qMakePair( item->text( 1 ), item->value ) ); - break; - default: - break; - } - } - if ( atLeastOneEntry ) { - newACL.setAllUserPermissions( users ); - newACL.setAllGroupPermissions( groups ); - if ( newACL.isValid() ) - return newACL; - } - return KACL(); -} - -KACL KACLListView::getACL() -{ - return itemsToACL( false ); -} - - -KACL KACLListView::getDefaultACL() -{ - return itemsToACL( true ); -} - -void KACLListView::contentsMousePressEvent( TQMouseEvent * e ) -{ - TQListViewItem *clickedItem = itemAt( contentsToViewport( e->pos() ) ); - if ( !clickedItem ) return; - // if the click is on an as yet unselected item, select it first - if ( !clickedItem->isSelected() ) - KListView::contentsMousePressEvent( e ); - - if ( !currentItem() ) return; - int column = header()->sectionAt( e->x() ); - acl_perm_t perm; - switch ( column ) - { - case 2: - perm = ACL_READ; - break; - case 3: - perm = ACL_WRITE; - break; - case 4: - perm = ACL_EXECUTE; - break; - default: - return KListView::contentsMousePressEvent( e ); - } - KACLListViewItem* referenceItem = static_cast<KACLListViewItem*>( clickedItem ); - unsigned short referenceHadItSet = referenceItem->value & perm; - TQListViewItemIterator it( this ); - while ( KACLListViewItem* item = static_cast<KACLListViewItem*>( it.current() ) ) { - ++it; - if ( !item->isSelected() ) continue; - // toggle those with the same value as the clicked item, leave the others - if ( referenceHadItSet == ( item->value & perm ) ) - item->togglePerm( perm ); - } -} - -void KACLListView::entryClicked( TQListViewItem* pItem, const TQPoint& /*pt*/, int col ) -{ - if ( !pItem ) return; - - TQListViewItemIterator it( this ); - while ( KACLListViewItem* item = static_cast<KACLListViewItem*>( it.current() ) ) { - ++it; - if ( !item->isSelected() ) continue; - switch ( col ) - { - case 2: - item->togglePerm( ACL_READ ); - break; - case 3: - item->togglePerm( ACL_WRITE ); - break; - case 4: - item->togglePerm( ACL_EXECUTE ); - break; - - default: - ; // Do nothing - } - } - /* - // Has the user changed one of the required entries in a default ACL? - if ( m_pACL->aclType() == ACL_TYPE_DEFAULT && - ( col == 2 || col == 3 || col == 4 ) && - ( pACLItem->entryType() == ACL_USER_OBJ || - pACLItem->entryType() == ACL_GROUP_OBJ || - pACLItem->entryType() == ACL_OTHER ) ) - { - // Mark the required entries as no longer being partial entries. - // That is, they will get applied to all selected directories. - KACLListViewItem* pUserObj = findACLEntryByType( this, ACL_USER_OBJ ); - pUserObj->entry()->setPartialEntry( false ); - - KACLListViewItem* pGroupObj = findACLEntryByType( this, ACL_GROUP_OBJ ); - pGroupObj->entry()->setPartialEntry( false ); - - KACLListViewItem* pOther = findACLEntryByType( this, ACL_OTHER ); - pOther->entry()->setPartialEntry( false ); - - update(); - } - */ -} - - -void KACLListView::calculateEffectiveRights() -{ - TQListViewItemIterator it( this ); - KACLListViewItem* pItem; - while ( ( pItem = dynamic_cast<KACLListViewItem*>( it.current() ) ) != 0 ) - { - ++it; - pItem->calcEffectiveRights(); - } -} - - -unsigned short KACLListView::maskPermissions() const -{ - return m_mask; -} - - -void KACLListView::setMaskPermissions( unsigned short maskPerms ) -{ - m_mask = maskPerms; - calculateEffectiveRights(); -} - - -acl_perm_t KACLListView::maskPartialPermissions() const -{ - // return m_pMaskEntry->m_partialPerms; - return 0; -} - - -void KACLListView::setMaskPartialPermissions( acl_perm_t /*maskPartialPerms*/ ) -{ - //m_pMaskEntry->m_partialPerms = maskPartialPerms; - calculateEffectiveRights(); -} - -bool KACLListView::hasDefaultEntries() const -{ - TQListViewItemIterator it( const_cast<KACLListView*>( this ) ); - while ( it.current() ) { - const KACLListViewItem *item = static_cast<const KACLListViewItem*>( it.current() ); - ++it; - if ( item->isDefault ) return true; - } - return false; -} - -const KACLListViewItem* KACLListView::findDefaultItemByType( EntryType type ) const -{ - return findItemByType( type, true ); -} - -const KACLListViewItem* KACLListView::findItemByType( EntryType type, bool defaults ) const -{ - TQListViewItemIterator it( const_cast<KACLListView*>( this ) ); - while ( it.current() ) { - const KACLListViewItem *item = static_cast<const KACLListViewItem*>( it.current() ); - ++it; - if ( item->isDefault == defaults && item->type == type ) { - return item; - } - } - return 0; -} - - -unsigned short KACLListView::calculateMaskValue( bool defaults ) const -{ - // KACL auto-adds the relevant maks entries, so we can simply query - bool dummy; - return itemsToACL( defaults ).maskPermissions( dummy ); -} - -void KACLListView::slotAddEntry() -{ - int allowedTypes = NamedUser | NamedGroup; - if ( !m_hasMask ) - allowedTypes |= Mask; - int allowedDefaultTypes = NamedUser | NamedGroup; - if ( !findDefaultItemByType( Mask ) ) - allowedDefaultTypes |= Mask; - if ( !hasDefaultEntries() ) - allowedDefaultTypes |= User | Group; - EditACLEntryDialog dlg( this, 0, - allowedUsers( false ), allowedGroups( false ), - allowedUsers( true ), allowedGroups( true ), - allowedTypes, allowedDefaultTypes, m_allowDefaults ); - dlg.exec(); - KACLListViewItem *item = dlg.item(); - if ( !item ) return; // canceled - if ( item->type == Mask && !item->isDefault ) { - m_hasMask = true; - m_mask = item->value; - } - if ( item->isDefault && !hasDefaultEntries() ) { - // first default entry, fill in what is needed - if ( item->type != User ) { - unsigned short v = findDefaultItemByType( User )->value; - new KACLListViewItem( this, User, v, true ); - } - if ( item->type != Group ) { - unsigned short v = findDefaultItemByType( Group )->value; - new KACLListViewItem( this, Group, v, true ); - } - if ( item->type != Others ) { - unsigned short v = findDefaultItemByType( Others )->value; - new KACLListViewItem( this, Others, v, true ); - } - } - const KACLListViewItem *defaultMaskItem = findDefaultItemByType( Mask ); - if ( item->isDefault && !defaultMaskItem ) { - unsigned short v = calculateMaskValue( true ); - new KACLListViewItem( this, Mask, v, true ); - } - if ( !item->isDefault && !m_hasMask && - ( item->type == Group - || item->type == NamedUser - || item->type == NamedGroup ) ) { - // auto-add a mask entry - unsigned short v = calculateMaskValue( false ); - new KACLListViewItem( this, Mask, v, false ); - m_hasMask = true; - m_mask = v; - } - calculateEffectiveRights(); - sort(); - setCurrentItem( item ); - // TQListView doesn't seem to emit, in this case, and we need to update - // the buttons... - if ( childCount() == 1 ) - emit currentChanged( item ); -} - -void KACLListView::slotEditEntry() -{ - TQListViewItem * current = currentItem(); - if ( !current ) return; - KACLListViewItem *item = static_cast<KACLListViewItem*>( current ); - int allowedTypes = item->type | NamedUser | NamedGroup; - bool itemWasMask = item->type == Mask; - if ( !m_hasMask || itemWasMask ) - allowedTypes |= Mask; - int allowedDefaultTypes = item->type | NamedUser | NamedGroup; - if ( !findDefaultItemByType( Mask ) ) - allowedDefaultTypes |= Mask; - if ( !hasDefaultEntries() ) - allowedDefaultTypes |= User | Group; - - EditACLEntryDialog dlg( this, item, - allowedUsers( false, item ), allowedGroups( false, item ), - allowedUsers( true, item ), allowedGroups( true, item ), - allowedTypes, allowedDefaultTypes, m_allowDefaults ); - dlg.exec(); - if ( itemWasMask && item->type != Mask ) { - m_hasMask = false; - m_mask = 0; - } - if ( !itemWasMask && item->type == Mask ) { - m_mask = item->value; - m_hasMask = true; - } - calculateEffectiveRights(); - sort(); -} - -void KACLListView::slotRemoveEntry() -{ - TQListViewItemIterator it( this, TQListViewItemIterator::Selected ); - while ( it.current() ) { - KACLListViewItem *item = static_cast<KACLListViewItem*>( it.current() ); - ++it; - /* First check if it's a mask entry and if so, make sure that there is - * either no name user or group entry, which means the mask can be - * removed, or don't remove it, but reset it. That is allowed. */ - if ( item->type == Mask ) { - bool itemWasDefault = item->isDefault; - if ( !itemWasDefault && maskCanBeDeleted() ) { - m_hasMask= false; - m_mask = 0; - delete item; - } else if ( itemWasDefault && defaultMaskCanBeDeleted() ) { - delete item; - } else { - item->value = 0; - item->repaint(); - } - if ( !itemWasDefault ) - calculateEffectiveRights(); - } else { - // for the base permissions, disable them, which is what libacl does - if ( !item->isDefault && - ( item->type == User - || item->type == Group - || item->type == Others ) ) { - item->value = 0; - item->repaint(); - } else { - delete item; - } - } - } -} - -bool KACLListView::maskCanBeDeleted() const -{ - return !findItemByType( NamedUser ) && !findItemByType( NamedGroup ); -} - -bool KACLListView::defaultMaskCanBeDeleted() const -{ - return !findDefaultItemByType( NamedUser ) && !findDefaultItemByType( NamedGroup ); -} - -#include "kacleditwidget.moc" -#include "kacleditwidget_p.moc" -#endif -// vim:set ts=8 sw=4: diff --git a/kio/kfile/kacleditwidget.h b/kio/kfile/kacleditwidget.h deleted file mode 100644 index d0f30f60a..000000000 --- a/kio/kfile/kacleditwidget.h +++ /dev/null @@ -1,65 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005 by Sean Harmer <sh@rama.homelinux.org> * - * Till Adam <adam@kde.org> * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 2 of the * - * License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - ***************************************************************************/ -#ifndef KACLEDITWIDGET_H -#define KACLEDITWIDGET_H - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#ifdef Q_MOC_RUN -#define USE_POSIX_ACL -#endif // Q_MOC_RUN - -#ifdef USE_POSIX_ACL - -#include <klistview.h> -#include <kacl.h> -#include <kfileitem.h> - -class KACLListViewItem; -class KACLListView; -class TQPushButton; - -class KACLEditWidget : TQWidget -{ - Q_OBJECT - -public: - KACLEditWidget( TQWidget *parent = 0, const char *name = 0 ); - KACL getACL() const; - KACL getDefaultACL() const; - void setACL( const KACL & ); - void setDefaultACL( const KACL & ); - void setAllowDefaults( bool value ); - void setReadOnly( bool value ); -private slots: - void slotUpdateButtons(); - -private: - KACLListView* m_listView; - TQPushButton *m_AddBtn; - TQPushButton *m_EditBtn; - TQPushButton *m_DelBtn; -}; - - -#endif -#endif diff --git a/kio/kfile/kacleditwidget_p.h b/kio/kfile/kacleditwidget_p.h deleted file mode 100644 index 166725638..000000000 --- a/kio/kfile/kacleditwidget_p.h +++ /dev/null @@ -1,206 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005 by Sean Harmer <sh@rama.homelinux.org> * - * Till Adam <adam@kde.org> * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 2 of the * - * License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - ***************************************************************************/ -#ifndef KACLEDITWIDGET_P_H -#define KACLEDITWIDGET_P_H - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#ifdef Q_MOC_RUN -#define USE_POSIX_ACL -#endif // Q_MOC_RUN - -#ifdef USE_POSIX_ACL -#include <klistview.h> -#include <sys/acl.h> -#include <kacl.h> -#include <kfileitem.h> -#include <kdialogbase.h> -#include <tqpixmap.h> -#include <tqcombobox.h> - -class KACLListViewItem; -class TQPushButton; -class TQVButtonGroup; -class KACLListView; -class TQWidgetStack; -class TQCheckBox; - -/** -@author Sean Harmer -*/ -class KACLListView : public KListView -{ - Q_OBJECT - - friend class KACLListViewItem; -public: - enum Types - { - OWNER_IDX = 0, - GROUP_IDX, - OTHERS_IDX, - MASK_IDX, - NAMED_USER_IDX, - NAMED_GROUP_IDX, - LAST_IDX - }; - enum EntryType { User = 1, - Group = 2, - Others = 4, - Mask = 8, - NamedUser = 16, - NamedGroup = 32, - AllTypes = 63 }; - - KACLListView( TQWidget* parent = 0, const char* name = 0 ); - ~KACLListView(); - - bool hasMaskEntry() const { return m_hasMask; } - bool hasDefaultEntries() const; - bool allowDefaults() const { return m_allowDefaults; } - void setAllowDefaults( bool v ) { m_allowDefaults = v; } - unsigned short maskPermissions() const; - void setMaskPermissions( unsigned short maskPerms ); - acl_perm_t maskPartialPermissions() const; - void setMaskPartialPermissions( acl_perm_t maskPerms ); - - bool maskCanBeDeleted() const; - bool defaultMaskCanBeDeleted() const; - - const KACLListViewItem* findDefaultItemByType( EntryType type ) const; - const KACLListViewItem* findItemByType( EntryType type, - bool defaults = false ) const; - unsigned short calculateMaskValue( bool defaults ) const; - void calculateEffectiveRights(); - - TQStringList allowedUsers( bool defaults, KACLListViewItem *allowedItem = 0 ); - TQStringList allowedGroups( bool defaults, KACLListViewItem *allowedItem = 0 ); - - const KACL getACL() const { return getACL(); } - KACL getACL(); - - const KACL getDefaultACL() const { return getDefaultACL(); } - KACL getDefaultACL(); - - TQPixmap getYesPixmap() const { return *m_yesPixmap; } - TQPixmap getYesPartialPixmap() const { return *m_yesPartialPixmap; } - -public slots: - void slotAddEntry(); - void slotEditEntry(); - void slotRemoveEntry(); - void setACL( const KACL &anACL ); - void setDefaultACL( const KACL &anACL ); - -protected slots: - void entryClicked( TQListViewItem* pItem, const TQPoint& pt, int col ); -protected: - void contentsMousePressEvent( TQMouseEvent * e ); - -private: - void fillItemsFromACL( const KACL &pACL, bool defaults = false ); - KACL itemsToACL( bool defaults ) const; - - KACL m_ACL; - KACL m_defaultACL; - unsigned short m_mask; - bool m_hasMask; - bool m_allowDefaults; - TQStringList m_allUsers; - TQStringList m_allGroups; - TQPixmap* m_yesPixmap; - TQPixmap* m_yesPartialPixmap; -}; - -class EditACLEntryDialog : public KDialogBase -{ - Q_OBJECT - -public: - EditACLEntryDialog( KACLListView *listView, KACLListViewItem *item, - const TQStringList &users, - const TQStringList &groups, - const TQStringList &defaultUsers, - const TQStringList &defaultGroups, - int allowedTypes = KACLListView::AllTypes, - int allowedDefaultTypes = KACLListView::AllTypes, - bool allowDefault = false ); - KACLListViewItem* item() const { return m_item; } -public slots: - void slotOk(); - void slotSelectionChanged( int id ); -private slots: - void slotUpdateAllowedUsersAndGroups(); - void slotUpdateAllowedTypes(); -private: - KACLListView *m_listView; - KACLListViewItem *m_item; - TQStringList m_users; - TQStringList m_groups; - TQStringList m_defaultUsers; - TQStringList m_defaultGroups; - int m_allowedTypes; - int m_allowedDefaultTypes; - TQVButtonGroup *m_buttonGroup; - TQComboBox *m_usersCombo; - TQComboBox *m_groupsCombo; - TQWidgetStack *m_widgetStack; - TQCheckBox *m_defaultCB; -}; - - -class KACLListViewItem : public KListViewItem -{ -public: - KACLListViewItem( TQListView* parent, KACLListView::EntryType type, - unsigned short value, - bool defaultEntry, - const TQString& qualifier = TQString::null ); - virtual ~KACLListViewItem(); - virtual TQString key( int column, bool ascending ) const; - - void calcEffectiveRights(); - - bool isDeletable() const; - bool isAllowedToChangeType() const; - - void togglePerm( acl_perm_t perm ); - - virtual void paintCell( TQPainter *p, const TQColorGroup &cg, - int column, int width, int alignment ); - - void updatePermPixmaps(); - void repaint(); - - KACLListView::EntryType type; - unsigned short value; - bool isDefault; - TQString qualifier; - bool isPartial; - -private: - KACLListView* m_pACLListView; -}; - - -#endif -#endif diff --git a/kio/kfile/kcombiview.cpp b/kio/kfile/kcombiview.cpp deleted file mode 100644 index 3f199fb92..000000000 --- a/kio/kfile/kcombiview.cpp +++ /dev/null @@ -1,371 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 1998 Stephan Kulow <coolo@kde.org> - 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -// $Id$ - -#include <assert.h> - -#include "kfileitem.h" -#include "kcombiview.h" -#include "kfileiconview.h" -#include "kfiledetailview.h" -#include "config-kfile.h" - -#include <tqevent.h> - -#include <tqdir.h> - -#include <kapplication.h> -#include <kconfig.h> -#include <kdebug.h> -#include <kglobal.h> - -#include <tqvaluelist.h> - -KCombiView::KCombiView( TQWidget *parent, const char *name) - : TQSplitter( parent, name), - KFileView(), - right(0), - m_lastViewForNextItem(0), - m_lastViewForPrevItem(0) -{ - left = new KFileIconView( this, "left" ); - left->setAcceptDrops(false); - left->viewport()->setAcceptDrops(false); - left->setGridX( 160 ); - left->KFileView::setViewMode( Directories ); - left->setArrangement( TQIconView::LeftToRight ); - left->setParentView( this ); - left->setAcceptDrops(false); - left->installEventFilter( this ); - - connect( sig, TQT_SIGNAL( sortingChanged( TQDir::SortSpec ) ), - TQT_SLOT( slotSortingChanged( TQDir::SortSpec ) )); -} - -KCombiView::~KCombiView() -{ - delete right; -} - -void KCombiView::setRight(KFileView *view) -{ - delete right; - right = view; - right->KFileView::setViewMode( Files ); - setViewName( right->viewName() ); - - TQValueList<int> lst; - lst << left->gridX() + 2 * left->spacing(); - setSizes( lst ); - setResizeMode( left, TQSplitter::KeepSize ); - - right->setParentView( this ); - right->widget()->setAcceptDrops(acceptDrops()); - right->setDropOptions(dropOptions()); - right->widget()->installEventFilter( this ); -} - - -void KCombiView::insertItem( KFileItem *item ) -{ - KFileView::insertItem( item ); - - if ( item->isDir() ) { - left->updateNumbers( item ); - left->insertItem( item ); - } - else { - right->updateNumbers( item ); - right->insertItem( item ); - } -} - -void KCombiView::setSorting( TQDir::SortSpec sort ) -{ - if ( !right ) - kdFatal() << "You need to call setRight( someview ) before!" << endl; - right->setSorting( sort ); - left->setSorting( sort ); - - KFileView::setSorting( right->sorting() ); -} - -void KCombiView::clearView() -{ - left->clearView(); - if ( right ) - right->clearView(); -} - -void KCombiView::updateView( bool b ) -{ - left->updateView( b ); - if ( right ) - right->updateView( b ); -} - -void KCombiView::updateView( const KFileItem *i ) -{ - left->updateView( i ); - if ( right ) - right->updateView( i ); -} - -void KCombiView::removeItem( const KFileItem *i ) -{ - left->removeItem( i ); - if ( right ) - right->removeItem( i ); - KFileView::removeItem( i ); -} - -void KCombiView::listingCompleted() -{ - left->listingCompleted(); - if ( right ) - right->listingCompleted(); -} - -void KCombiView::clear() -{ - KFileView::clear(); - left->KFileView::clear(); - if ( right ) - right->clear(); -} - -void KCombiView::clearSelection() -{ - left->clearSelection(); - if ( right ) - right->clearSelection(); -} - -void KCombiView::selectAll() -{ - left->selectAll(); - if ( right ) - right->selectAll(); -} - -void KCombiView::invertSelection() -{ - left->invertSelection(); - if ( right ) - right->invertSelection(); -} - -bool KCombiView::isSelected( const KFileItem *item ) const -{ - assert( right ); // for performance reasons no if ( right ) check. - return (right->isSelected( item ) || left->isSelected( item )); -} - -void KCombiView::setSelectionMode( KFile::SelectionMode sm ) -{ - // I think the left view (directories should always be in - // Single-Mode, right? - // left->setSelectionMode( sm ); - if ( !right ) - kdFatal() << "You need to call setRight( someview ) before!" << endl; - right->setSelectionMode( sm ); -} - -void KCombiView::setSelected( const KFileItem *item, bool enable ) -{ - left->setSelected( item, enable ); - if ( right ) - right->setSelected( item, enable ); -} - -void KCombiView::setCurrentItem( const KFileItem *item ) -{ - left->setCurrentItem( item ); - if ( right ) - right->setCurrentItem( item ); -} - -KFileItem * KCombiView::currentFileItem() const -{ - // we can actually have two current items, one in each view. So we simply - // prefer the fileview's item over the directory's. - // Smarter: if the right view has focus, prefer that over the left. - if ( !right ) - return left->currentFileItem(); - - KFileView *preferredView = focusView( right ); - KFileItem *item = preferredView->currentFileItem(); - if ( !item && preferredView != left ) - item = left->currentFileItem(); - - return item; -} - -void KCombiView::ensureItemVisible(const KFileItem *item) -{ - left->ensureItemVisible( item ); - if ( right ) - right->ensureItemVisible( item ); -} - -KFileItem * KCombiView::firstFileItem() const -{ - if ( !right ) - return left->firstFileItem(); - - KFileView *preferredView = focusView( left ); - KFileView *otherView = (preferredView == left) ? right : left; - KFileItem *item = preferredView->firstFileItem(); - if ( !item ) - item = otherView->firstFileItem(); - - return item; -} - -KFileItem * KCombiView::nextItem( const KFileItem *fileItem ) const -{ - if ( !right ) - return left->nextItem( fileItem ); - - KFileView *preferredView = focusView( left ); - KFileView *otherView = (preferredView == left) ? right : left; - KFileItem *item = preferredView->nextItem( fileItem ); - - if ( item ) - m_lastViewForNextItem = preferredView; - else { // no item, check other view - // when changing from one to another view, we need to continue - // with the next view's first item! - if ( m_lastViewForNextItem != otherView ) { - m_lastViewForNextItem = otherView; - return otherView->firstFileItem(); - } - - item = otherView->nextItem( fileItem ); - m_lastViewForNextItem = otherView; - } - - return item; -} - -KFileItem * KCombiView::prevItem( const KFileItem *fileItem ) const -{ - if ( !right ) - return left->nextItem( fileItem ); - - KFileView *preferredView = focusView( left ); - KFileView *otherView = (preferredView == left) ? right : left; - KFileItem *item = preferredView->prevItem( fileItem ); - if ( item ) - m_lastViewForPrevItem = preferredView; - - else { // no item, check other view - // when changing from one to another view, we need to continue - // with the next view's last item! - if ( m_lastViewForPrevItem != otherView ) { - fileItem = otherView->firstFileItem(); - while ( otherView->nextItem( fileItem ) ) // find the last item - fileItem = otherView->nextItem( fileItem ); - } - - item = otherView->prevItem( fileItem ); - m_lastViewForPrevItem = otherView; - } - - return item; -} - -void KCombiView::slotSortingChanged( TQDir::SortSpec sorting ) -{ - KFileView::setSorting( sorting ); -} - -KFileView *KCombiView::focusView( KFileView *preferred ) const -{ - TQWidget *w = focusWidget(); - KFileView *other = (right == preferred) ? left : right; - return (preferred && w == preferred->widget()) ? preferred : other; -} - -void KCombiView::readConfig( TDEConfig *config, const TQString& group ) -{ - left->readConfig( config, group ); - if ( right ) - right->readConfig( config, group ); -} - -void KCombiView::writeConfig( TDEConfig *config, const TQString& group ) -{ - left->writeConfig( config, group ); - if ( right ) - right->writeConfig( config, group ); -} - -KActionCollection * KCombiView::actionCollection() const -{ - return focusView( right )->actionCollection(); -} - -void KCombiView::setAcceptDrops(bool b) -{ - left->setAcceptDrops(b); - if (right) - right->widget()->setAcceptDrops(b); - TQSplitter::setAcceptDrops(b); -} - -void KCombiView::setDropOptions_impl(int options) -{ - KFileView::setDropOptions_impl(options); - left->setDropOptions(options); - if (right) - right->setDropOptions(options); -} - -void KCombiView::virtual_hook( int id, void* data ) -{ - switch(id) { - case VIRTUAL_SET_DROP_OPTIONS: - setDropOptions_impl(*(int *)data); - break; - default: - KFileView::virtual_hook( id, data ); - } -} - -bool KCombiView::eventFilter( TQObject *o, TQEvent *e ) -{ - int type = e->type(); - - // only the focused view may have a selection - if ( type == TQEvent::FocusIn ) - { - if ( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(left) ) - right->clearSelection(); - else if ( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(right->widget()) ) - left->clearSelection(); - } - - return TQSplitter::eventFilter( o, e ); -} - -#include "kcombiview.moc" - diff --git a/kio/kfile/kcombiview.h b/kio/kfile/kcombiview.h deleted file mode 100644 index 5d56b8257..000000000 --- a/kio/kfile/kcombiview.h +++ /dev/null @@ -1,133 +0,0 @@ -/* -*- c++ -*- - This file is part of the KDE libraries - Copyright (C) 1998 Stephan Kulow <coolo@kde.org> - 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef _KCOMBIVIEW_H -#define _KCOMBIVIEW_H - -#include <tqsplitter.h> -#include <klocale.h> - -#include <kfile.h> -#include <kfileview.h> - -class KFileIconView; -class TQEvent; -class TQIconViewItem; - -/** - * This view is designed to combine two KFileViews into one widget, to show - * directories on the left side and files on the right side. - * - * Methods like selectedItems() to query status _only_ work on the right side, - * i.e. on the files. - * - * After creating the KCombiView, you need to supply the view shown in the - * right, (see setRight()). Available KFileView implementations are - * KFileIconView and KFileDetailView. - * - * Most of the below methods are just implementations of the baseclass - * KFileView, so look there for documentation. - * - * @see KFileView - * @see KFileIconView - * @see KFileDetailView - * @see KDirOperator - */ -class TDEIO_EXPORT KCombiView : public TQSplitter, - public KFileView -{ - Q_OBJECT - -public: - KCombiView( TQWidget *parent, const char *name); - virtual ~KCombiView(); - - virtual TQWidget *widget() { return this; } - virtual void clearView(); - - virtual void updateView( bool ); - virtual void updateView(const KFileItem*); - virtual void removeItem( const KFileItem * ); - virtual void listingCompleted(); - - /** - * Sets the view to be shown in the right. You need to call this before - * doing anything else with this widget. - */ - void setRight(KFileView *view); - - virtual void setSelectionMode( KFile::SelectionMode sm ); - - virtual void setSelected(const KFileItem *, bool); - virtual bool isSelected( const KFileItem * ) const; - virtual void clearSelection(); - virtual void selectAll(); - virtual void invertSelection(); - - virtual void setCurrentItem( const KFileItem * ); - virtual KFileItem * currentFileItem() const; - virtual KFileItem * firstFileItem() const; - virtual KFileItem * nextItem( const KFileItem * ) const; - virtual KFileItem * prevItem( const KFileItem * ) const; - - virtual void insertItem( KFileItem *i ); - virtual void clear(); - - virtual void setSorting( TQDir::SortSpec sort ); - - virtual void readConfig( TDEConfig *, const TQString& group = TQString::null ); - virtual void writeConfig( TDEConfig *, const TQString& group = TQString::null); - - void ensureItemVisible( const KFileItem * ); - - virtual KActionCollection * actionCollection() const; - - virtual void setAcceptDrops(bool b); - -protected: - KFileIconView *left; - KFileView *right; - -protected slots: - void slotSortingChanged( TQDir::SortSpec ); - -private: - KFileView *focusView( KFileView *preferred ) const; - - // in nextItem() and prevItem(), we have to switch views, when the first - // view returns 0L. So we need to remember which view was used in the - // previous call to next/prevItem(). Yes, it's a hack, but it works for - // some cases at least. - mutable KFileView *m_lastViewForNextItem; - mutable KFileView *m_lastViewForPrevItem; - -protected: - virtual bool eventFilter( TQObject *o, TQEvent *e ); - void setDropOptions_impl(int options); - - virtual void virtual_hook( int id, void* data ); -private: - class KCombiViewPrivate; - KCombiViewPrivate *d; - -}; - -#endif diff --git a/kio/kfile/kcustommenueditor.cpp b/kio/kfile/kcustommenueditor.cpp deleted file mode 100644 index 2049860d1..000000000 --- a/kio/kfile/kcustommenueditor.cpp +++ /dev/null @@ -1,242 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2002 Waldo Bastian (bastian@kde.org) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <tqhbox.h> -#include <tqregexp.h> -#include <tqimage.h> -#include <tqpushbutton.h> -#include <tqdir.h> - -#include <kbuttonbox.h> -#include <klocale.h> -#include <kglobal.h> -#include <kiconloader.h> -#include <klistview.h> -#include <kservice.h> -#include <kstandarddirs.h> -#include <kconfigbase.h> -#include <kopenwith.h> - -#include "kcustommenueditor.h" - -class KCustomMenuEditor::Item : public TQListViewItem -{ -public: - Item(TQListView *parent, KService::Ptr service) - : TQListViewItem(parent), - s(service) - { - init(); - } - - Item(TQListViewItem *parent, KService::Ptr service) - : TQListViewItem(parent), - s(service) - { - init(); - } - - void init() - { - TQString serviceName = s->name(); - - // item names may contain ampersands. To avoid them being converted - // to accelators, replace them with two ampersands. - serviceName.replace("&", "&&"); - - TQPixmap normal = TDEGlobal::instance()->iconLoader()->loadIcon(s->icon(), KIcon::Small, - 0, KIcon::DefaultState, 0L, true); - - // make sure they are not larger than 16x16 - if (normal.width() > 16 || normal.height() > 16) { - TQImage tmp = normal.convertToImage(); - tmp = tmp.smoothScale(16, 16); - normal.convertFromImage(tmp); - } - setText(0, serviceName); - setPixmap(0, normal); - } - - KService::Ptr s; -}; - -class KCustomMenuEditor::KCustomMenuEditorPrivate -{ -public: - TQPushButton * pbRemove; - TQPushButton * pbMoveUp; - TQPushButton * pbMoveDown; -}; - -KCustomMenuEditor::KCustomMenuEditor(TQWidget *parent) - : KDialogBase(parent, "custommenueditor", true, i18n("Menu Editor"), Ok|Cancel, Ok, true), - m_listView(0) -{ - d = new KCustomMenuEditorPrivate; - TQHBox *page = makeHBoxMainWidget(); - m_listView = new KListView(page); - m_listView->addColumn(i18n("Menu")); - m_listView->setFullWidth(true); - m_listView->setSorting(-1); - KButtonBox *buttonBox = new KButtonBox(page, Qt::Vertical); - buttonBox->addButton(i18n("New..."), TQT_TQOBJECT(this), TQT_SLOT(slotNewItem())); - d->pbRemove=buttonBox->addButton(i18n("Remove"), TQT_TQOBJECT(this), TQT_SLOT(slotRemoveItem())); - d->pbMoveUp=buttonBox->addButton(i18n("Move Up"), TQT_TQOBJECT(this), TQT_SLOT(slotMoveUp())); - d->pbMoveDown=buttonBox->addButton(i18n("Move Down"), TQT_TQOBJECT(this), TQT_SLOT(slotMoveDown())); - buttonBox->layout(); - connect( m_listView, TQT_SIGNAL( selectionChanged () ), this, TQT_SLOT( refreshButton() ) ); - refreshButton(); -} - -KCustomMenuEditor::~KCustomMenuEditor() -{ - delete d; - d=0; -} - -void KCustomMenuEditor::refreshButton() -{ - TQListViewItem *item = m_listView->currentItem(); - d->pbRemove->setEnabled( item ); - d->pbMoveUp->setEnabled( item && item->itemAbove() ); - d->pbMoveDown->setEnabled( item && item->itemBelow() ); -} - -void -KCustomMenuEditor::load(TDEConfigBase *cfg) -{ - cfg->setGroup(TQString::null); - int count = cfg->readNumEntry("NrOfItems"); - TQListViewItem *last = 0; - for(int i = 0; i < count; i++) - { - TQString entry = cfg->readPathEntry(TQString("Item%1").arg(i+1)); - if (entry.isEmpty()) - continue; - - // Try KSycoca first. - KService::Ptr menuItem = KService::serviceByDesktopPath( entry ); - if (!menuItem) - menuItem = KService::serviceByDesktopName( entry ); - if (!menuItem) - menuItem = new KService( entry ); - - if (!menuItem->isValid()) - continue; - - TQListViewItem *item = new Item(m_listView, menuItem); - item->moveItem(last); - last = item; - } -} - -void -KCustomMenuEditor::save(TDEConfigBase *cfg) -{ - // First clear the whole config file. - TQStringList groups = cfg->groupList(); - for(TQStringList::ConstIterator it = groups.begin(); - it != groups.end(); ++it) - { - cfg->deleteGroup(*it); - } - - cfg->setGroup(TQString::null); - Item * item = (Item *) m_listView->firstChild(); - int i = 0; - while(item) - { - i++; - TQString path = item->s->desktopEntryPath(); - if (TQDir::isRelativePath(path) || TQDir::isRelativePath(TDEGlobal::dirs()->relativeLocation("xdgdata-apps", path))) - path = item->s->desktopEntryName(); - cfg->writePathEntry(TQString("Item%1").arg(i), path); - item = (Item *) item->nextSibling(); - } - cfg->writeEntry("NrOfItems", i); -} - -void -KCustomMenuEditor::slotNewItem() -{ - TQListViewItem *item = m_listView->currentItem(); - - KOpenWithDlg dlg(this); - dlg.setSaveNewApplications(true); - - if (dlg.exec()) - { - KService::Ptr s = dlg.service(); - if (s && s->isValid()) - { - Item *newItem = new Item(m_listView, s); - newItem->moveItem(item); - } - refreshButton(); - } -} - -void -KCustomMenuEditor::slotRemoveItem() -{ - TQListViewItem *item = m_listView->currentItem(); - if (!item) - return; - - delete item; - refreshButton(); -} - -void -KCustomMenuEditor::slotMoveUp() -{ - TQListViewItem *item = m_listView->currentItem(); - if (!item) - return; - - TQListViewItem *searchItem = m_listView->firstChild(); - while(searchItem) - { - TQListViewItem *next = searchItem->nextSibling(); - if (next == item) - { - searchItem->moveItem(item); - break; - } - searchItem = next; - } - refreshButton(); -} - -void -KCustomMenuEditor::slotMoveDown() -{ - TQListViewItem *item = m_listView->currentItem(); - if (!item) - return; - - TQListViewItem *after = item->nextSibling(); - if (!after) - return; - - item->moveItem( after ); - refreshButton(); -} - -#include "kcustommenueditor.moc" diff --git a/kio/kfile/kcustommenueditor.h b/kio/kfile/kcustommenueditor.h deleted file mode 100644 index 108e9c477..000000000 --- a/kio/kfile/kcustommenueditor.h +++ /dev/null @@ -1,67 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2002 Waldo Bastian (bastian@kde.org) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; version 2 - of the License. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ -#ifndef _KCUSTOMMENUEDITOR_H_ -#define _KCUSTOMMENUEDITOR_H_ - -#include <kdialogbase.h> - -class KListView; -class TDEConfigBase; - - /* - * Dialog for editing custom menus. - * - * @author Waldo Bastian (bastian@kde.org) - * @since 3.1 - */ -class TDEIO_EXPORT KCustomMenuEditor : public KDialogBase -{ - Q_OBJECT -public: - /** - * Create a dialog for editing a custom menu - */ - KCustomMenuEditor(TQWidget *parent); - ~KCustomMenuEditor(); - /** - * load the custom menu - */ - void load(TDEConfigBase *); - - /** - * save the custom menu - */ - void save(TDEConfigBase *); - -public slots: - void slotNewItem(); - void slotRemoveItem(); - void slotMoveUp(); - void slotMoveDown(); - void refreshButton(); - -protected: - class Item; - KListView *m_listView; - - class KCustomMenuEditorPrivate; - KCustomMenuEditorPrivate *d; -}; - -#endif diff --git a/kio/kfile/kdiroperator.cpp b/kio/kfile/kdiroperator.cpp deleted file mode 100644 index 1b7e11356..000000000 --- a/kio/kfile/kdiroperator.cpp +++ /dev/null @@ -1,1740 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 1999,2000 Stephan Kulow <coolo@kde.org> - 1999,2000,2001,2002,2003 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <unistd.h> - -#include <tqdir.h> -#include <tqapplication.h> -#include <tqdialog.h> -#include <tqlabel.h> -#include <tqlayout.h> -#include <tqpushbutton.h> -#include <tqpopupmenu.h> -#include <tqregexp.h> -#include <tqtimer.h> -#include <tqvbox.h> - -#include <kaction.h> -#include <kapplication.h> -#include <kdebug.h> -#include <kdialog.h> -#include <kdialogbase.h> -#include <kdirlister.h> -#include <kinputdialog.h> -#include <klocale.h> -#include <kmessagebox.h> -#include <kpopupmenu.h> -#include <kprogress.h> -#include <kstdaction.h> -#include <kio/job.h> -#include <kio/jobclasses.h> -#include <kio/netaccess.h> -#include <kio/previewjob.h> -#include <kio/renamedlg.h> -#include <kpropertiesdialog.h> -#include <kservicetypefactory.h> -#include <kstdaccel.h> -#include <kde_file.h> - -#include "config-kfile.h" -#include "kcombiview.h" -#include "kdiroperator.h" -#include "kfiledetailview.h" -#include "kfileiconview.h" -#include "kfilepreview.h" -#include "kfileview.h" -#include "kfileitem.h" -#include "kfilemetapreview.h" - - -template class TQPtrStack<KURL>; -template class TQDict<KFileItem>; - - -class KDirOperator::KDirOperatorPrivate -{ -public: - KDirOperatorPrivate() { - onlyDoubleClickSelectsFiles = false; - progressDelayTimer = 0L; - dirHighlighting = false; - config = 0L; - dropOptions = 0; - } - - ~KDirOperatorPrivate() { - delete progressDelayTimer; - } - - bool dirHighlighting; - TQString lastURL; // used for highlighting a directory on cdUp - bool onlyDoubleClickSelectsFiles; - TQTimer *progressDelayTimer; - KActionSeparator *viewActionSeparator; - int dropOptions; - - TDEConfig *config; - TQString configGroup; -}; - -KDirOperator::KDirOperator(const KURL& _url, - TQWidget *parent, const char* _name) - : TQWidget(parent, _name), - dir(0), - m_fileView(0), - progress(0) -{ - myPreview = 0L; - myMode = KFile::File; - m_viewKind = KFile::Simple; - mySorting = static_cast<TQDir::SortSpec>(TQDir::Name | TQDir::DirsFirst); - d = new KDirOperatorPrivate; - - if (_url.isEmpty()) { // no dir specified -> current dir - TQString strPath = TQDir::currentDirPath(); - strPath.append('/'); - currUrl = KURL(); - currUrl.setProtocol(TQString::fromLatin1("file")); - currUrl.setPath(strPath); - } - else { - currUrl = _url; - if ( currUrl.protocol().isEmpty() ) - currUrl.setProtocol(TQString::fromLatin1("file")); - - currUrl.addPath("/"); // make sure we have a trailing slash! - } - - setDirLister( new KDirLister( true ) ); - - connect(&myCompletion, TQT_SIGNAL(match(const TQString&)), - TQT_SLOT(slotCompletionMatch(const TQString&))); - - progress = new KProgress(this, "progress"); - progress->adjustSize(); - progress->move(2, height() - progress->height() -2); - - d->progressDelayTimer = new TQTimer( this, "progress delay timer" ); - connect( d->progressDelayTimer, TQT_SIGNAL( timeout() ), - TQT_SLOT( slotShowProgress() )); - - myCompleteListDirty = false; - - backStack.setAutoDelete( true ); - forwardStack.setAutoDelete( true ); - - // action stuff - setupActions(); - setupMenu(); - - setFocusPolicy(TQ_WheelFocus); -} - -KDirOperator::~KDirOperator() -{ - resetCursor(); - if ( m_fileView ) - { - if ( d->config ) - m_fileView->writeConfig( d->config, d->configGroup ); - - delete m_fileView; - m_fileView = 0L; - } - - delete myPreview; - delete dir; - delete d; -} - - -void KDirOperator::setSorting( TQDir::SortSpec spec ) -{ - if ( m_fileView ) - m_fileView->setSorting( spec ); - mySorting = spec; - updateSortActions(); -} - -void KDirOperator::resetCursor() -{ - TQApplication::restoreOverrideCursor(); - progress->hide(); -} - -void KDirOperator::insertViewDependentActions() -{ - // If we have a new view actionCollection(), insert its actions - // into viewActionMenu. - - if( !m_fileView ) - return; - - if ( (viewActionMenu->popupMenu()->count() == 0) || // Not yet initialized or... - (viewActionCollection != m_fileView->actionCollection()) ) // ...changed since. - { - if (viewActionCollection) - { - disconnect( viewActionCollection, TQT_SIGNAL( inserted( KAction * )), - this, TQT_SLOT( slotViewActionAdded( KAction * ))); - disconnect( viewActionCollection, TQT_SIGNAL( removed( KAction * )), - this, TQT_SLOT( slotViewActionRemoved( KAction * ))); - } - - viewActionMenu->popupMenu()->clear(); -// viewActionMenu->insert( shortAction ); -// viewActionMenu->insert( detailedAction ); -// viewActionMenu->insert( actionSeparator ); - viewActionMenu->insert( myActionCollection->action( "short view" ) ); - viewActionMenu->insert( myActionCollection->action( "detailed view" ) ); - viewActionMenu->insert( actionSeparator ); - viewActionMenu->insert( showHiddenAction ); -// viewActionMenu->insert( myActionCollection->action( "single" )); - viewActionMenu->insert( separateDirsAction ); - // Warning: adjust slotViewActionAdded() and slotViewActionRemoved() - // when you add/remove actions here! - - viewActionCollection = m_fileView->actionCollection(); - if (!viewActionCollection) - return; - - if ( !viewActionCollection->isEmpty() ) - { - viewActionMenu->insert( d->viewActionSeparator ); - - // first insert the normal actions, then the grouped ones - TQStringList groups = viewActionCollection->groups(); - groups.prepend( TQString::null ); // actions without group - TQStringList::ConstIterator git = groups.begin(); - KActionPtrList list; - KAction *sep = actionCollection()->action("separator"); - for ( ; git != groups.end(); ++git ) - { - if ( git != groups.begin() ) - viewActionMenu->insert( sep ); - - list = viewActionCollection->actions( *git ); - KActionPtrList::ConstIterator it = list.begin(); - for ( ; it != list.end(); ++it ) - viewActionMenu->insert( *it ); - } - } - - connect( viewActionCollection, TQT_SIGNAL( inserted( KAction * )), - TQT_SLOT( slotViewActionAdded( KAction * ))); - connect( viewActionCollection, TQT_SIGNAL( removed( KAction * )), - TQT_SLOT( slotViewActionRemoved( KAction * ))); - } -} - -void KDirOperator::activatedMenu( const KFileItem *, const TQPoint& pos ) -{ - setupMenu(); - updateSelectionDependentActions(); - - actionMenu->popup( pos ); -} - -void KDirOperator::updateSelectionDependentActions() -{ - bool hasSelection = m_fileView && m_fileView->selectedItems() && - !m_fileView->selectedItems()->isEmpty(); - myActionCollection->action( "trash" )->setEnabled( hasSelection ); - myActionCollection->action( "delete" )->setEnabled( hasSelection ); - myActionCollection->action( "properties" )->setEnabled( hasSelection ); -} - -void KDirOperator::setPreviewWidget(const TQWidget *w) -{ - if(w != 0L) - m_viewKind = (m_viewKind | KFile::PreviewContents); - else - m_viewKind = (m_viewKind & ~KFile::PreviewContents); - - delete myPreview; - myPreview = w; - - KToggleAction *preview = static_cast<KToggleAction*>(myActionCollection->action("preview")); - preview->setEnabled( w != 0L ); - preview->setChecked( w != 0L ); - setView( static_cast<KFile::FileView>(m_viewKind) ); -} - -int KDirOperator::numDirs() const -{ - return m_fileView ? m_fileView->numDirs() : 0; -} - -int KDirOperator::numFiles() const -{ - return m_fileView ? m_fileView->numFiles() : 0; -} - -void KDirOperator::slotDetailedView() -{ - KFile::FileView view = static_cast<KFile::FileView>( (m_viewKind & ~KFile::Simple) | KFile::Detail ); - setView( view ); -} - -void KDirOperator::slotSimpleView() -{ - KFile::FileView view = static_cast<KFile::FileView>( (m_viewKind & ~KFile::Detail) | KFile::Simple ); - setView( view ); -} - -void KDirOperator::slotToggleHidden( bool show ) -{ - dir->setShowingDotFiles( show ); - updateDir(); - if ( m_fileView ) - m_fileView->listingCompleted(); -} - -void KDirOperator::slotSeparateDirs() -{ - if (separateDirsAction->isChecked()) - { - KFile::FileView view = static_cast<KFile::FileView>( m_viewKind | KFile::SeparateDirs ); - setView( view ); - } - else - { - KFile::FileView view = static_cast<KFile::FileView>( m_viewKind & ~KFile::SeparateDirs ); - setView( view ); - } -} - -void KDirOperator::slotDefaultPreview() -{ - m_viewKind = m_viewKind | KFile::PreviewContents; - if ( !myPreview ) { - myPreview = new KFileMetaPreview( this ); - (static_cast<KToggleAction*>( myActionCollection->action("preview") ))->setChecked(true); - } - - setView( static_cast<KFile::FileView>(m_viewKind) ); -} - -void KDirOperator::slotSortByName() -{ - int sorting = (m_fileView->sorting()) & ~TQDir::SortByMask; - m_fileView->setSorting( static_cast<TQDir::SortSpec>( sorting | TQDir::Name )); - mySorting = m_fileView->sorting(); - caseInsensitiveAction->setEnabled( true ); -} - -void KDirOperator::slotSortBySize() -{ - int sorting = (m_fileView->sorting()) & ~TQDir::SortByMask; - m_fileView->setSorting( static_cast<TQDir::SortSpec>( sorting | TQDir::Size )); - mySorting = m_fileView->sorting(); - caseInsensitiveAction->setEnabled( false ); -} - -void KDirOperator::slotSortByDate() -{ - int sorting = (m_fileView->sorting()) & ~TQDir::SortByMask; - m_fileView->setSorting( static_cast<TQDir::SortSpec>( sorting | TQDir::Time )); - mySorting = m_fileView->sorting(); - caseInsensitiveAction->setEnabled( false ); -} - -void KDirOperator::slotSortReversed() -{ - if ( m_fileView ) - m_fileView->sortReversed(); -} - -void KDirOperator::slotToggleDirsFirst() -{ - TQDir::SortSpec sorting = m_fileView->sorting(); - if ( !KFile::isSortDirsFirst( sorting ) ) - m_fileView->setSorting( static_cast<TQDir::SortSpec>( sorting | TQDir::DirsFirst )); - else - m_fileView->setSorting( static_cast<TQDir::SortSpec>( sorting & ~TQDir::DirsFirst)); - mySorting = m_fileView->sorting(); -} - -void KDirOperator::slotToggleIgnoreCase() -{ - TQDir::SortSpec sorting = m_fileView->sorting(); - if ( !KFile::isSortCaseInsensitive( sorting ) ) - m_fileView->setSorting( static_cast<TQDir::SortSpec>( sorting | TQDir::IgnoreCase )); - else - m_fileView->setSorting( static_cast<TQDir::SortSpec>( sorting & ~TQDir::IgnoreCase)); - mySorting = m_fileView->sorting(); -} - -void KDirOperator::mkdir() -{ - bool ok; - TQString where = url().pathOrURL(); - TQString name = i18n( "New Folder" ); - if ( url().isLocalFile() && TQFileInfo( url().path(+1) + name ).exists() ) - name = TDEIO::RenameDlg::suggestName( url(), name ); - - TQString dir = KInputDialog::getText( i18n( "New Folder" ), - i18n( "Create new folder in:\n%1" ).arg( where ), - name, &ok, this); - if (ok) - mkdir( TDEIO::encodeFileName( dir ), true ); -} - -bool KDirOperator::mkdir( const TQString& directory, bool enterDirectory ) -{ - // Creates "directory", relative to the current directory (currUrl). - // The given path may contain any number directories, existant or not. - // They will all be created, if possible. - - bool writeOk = false; - bool exists = false; - KURL url( currUrl ); - - TQStringList dirs = TQStringList::split( TQDir::separator(), directory ); - TQStringList::ConstIterator it = dirs.begin(); - - for ( ; it != dirs.end(); ++it ) - { - url.addPath( *it ); - exists = TDEIO::NetAccess::exists( url, false, 0 ); - writeOk = !exists && TDEIO::NetAccess::mkdir( url, topLevelWidget() ); - } - - if ( exists ) // url was already existant - { - KMessageBox::sorry(viewWidget(), i18n("A file or folder named %1 already exists.").arg(url.pathOrURL())); - enterDirectory = false; - } - else if ( !writeOk ) { - KMessageBox::sorry(viewWidget(), i18n("You do not have permission to " - "create that folder." )); - } - else if ( enterDirectory ) { - setURL( url, true ); - } - - return writeOk; -} - -TDEIO::DeleteJob * KDirOperator::del( const KFileItemList& items, - bool ask, bool showProgress ) -{ - return del( items, this, ask, showProgress ); -} - -TDEIO::DeleteJob * KDirOperator::del( const KFileItemList& items, - TQWidget *parent, - bool ask, bool showProgress ) -{ - if ( items.isEmpty() ) { - KMessageBox::information( parent, - i18n("You did not select a file to delete."), - i18n("Nothing to Delete") ); - return 0L; - } - - KURL::List urls; - TQStringList files; - KFileItemListIterator it( items ); - - for ( ; it.current(); ++it ) { - KURL url = (*it)->url(); - urls.append( url ); - if ( url.isLocalFile() ) - files.append( url.path() ); - else - files.append( url.prettyURL() ); - } - - bool doIt = !ask; - if ( ask ) { - int ret; - if ( items.count() == 1 ) { - ret = KMessageBox::warningContinueCancel( parent, - i18n( "<qt>Do you really want to delete\n <b>'%1'</b>?</qt>" ) - .arg( files.first() ), - i18n("Delete File"), - KStdGuiItem::del(), "AskForDelete" ); - } - else - ret = KMessageBox::warningContinueCancelList( parent, - i18n("Do you really want to delete this item?", "Do you really want to delete these %n items?", items.count() ), - files, - i18n("Delete Files"), - KStdGuiItem::del(), "AskForDelete" ); - doIt = (ret == KMessageBox::Continue); - } - - if ( doIt ) { - TDEIO::DeleteJob *job = TDEIO::del( urls, false, showProgress ); - job->setWindow (topLevelWidget()); - job->setAutoErrorHandlingEnabled( true, parent ); - return job; - } - - return 0L; -} - -void KDirOperator::deleteSelected() -{ - if ( !m_fileView ) - return; - - const KFileItemList *list = m_fileView->selectedItems(); - if ( list ) - del( *list ); -} - -TDEIO::CopyJob * KDirOperator::trash( const KFileItemList& items, - TQWidget *parent, - bool ask, bool showProgress ) -{ - if ( items.isEmpty() ) { - KMessageBox::information( parent, - i18n("You did not select a file to trash."), - i18n("Nothing to Trash") ); - return 0L; - } - - KURL::List urls; - TQStringList files; - KFileItemListIterator it( items ); - - for ( ; it.current(); ++it ) { - KURL url = (*it)->url(); - urls.append( url ); - if ( url.isLocalFile() ) - files.append( url.path() ); - else - files.append( url.prettyURL() ); - } - - bool doIt = !ask; - if ( ask ) { - int ret; - if ( items.count() == 1 ) { - ret = KMessageBox::warningContinueCancel( parent, - i18n( "<qt>Do you really want to trash\n <b>'%1'</b>?</qt>" ) - .arg( files.first() ), - i18n("Trash File"), - KGuiItem(i18n("to trash", "&Trash"),"edittrash"), "AskForTrash" ); - } - else - ret = KMessageBox::warningContinueCancelList( parent, - i18n("translators: not called for n == 1", "Do you really want to trash these %n items?", items.count() ), - files, - i18n("Trash Files"), - KGuiItem(i18n("to trash", "&Trash"),"edittrash"), "AskForTrash" ); - doIt = (ret == KMessageBox::Continue); - } - - if ( doIt ) { - TDEIO::CopyJob *job = TDEIO::trash( urls, showProgress ); - job->setWindow (topLevelWidget()); - job->setAutoErrorHandlingEnabled( true, parent ); - return job; - } - - return 0L; -} - -void KDirOperator::trashSelected(KAction::ActivationReason reason, TQt::ButtonState state) -{ - if ( !m_fileView ) - return; - - if ( reason == KAction::PopupMenuActivation && ( state & ShiftButton ) ) { - deleteSelected(); - return; - } - - const KFileItemList *list = m_fileView->selectedItems(); - if ( list ) - trash( *list, this ); -} - -void KDirOperator::close() -{ - resetCursor(); - pendingMimeTypes.clear(); - myCompletion.clear(); - myDirCompletion.clear(); - myCompleteListDirty = true; - dir->stop(); -} - -void KDirOperator::checkPath(const TQString &, bool /*takeFiles*/) // SLOT -{ -#if 0 - // copy the argument in a temporary string - TQString text = _txt; - // it's unlikely to happen, that at the beginning are spaces, but - // for the end, it happens quite often, I guess. - text = text.stripWhiteSpace(); - // if the argument is no URL (the check is quite fragil) and it's - // no absolute path, we add the current directory to get a correct url - if (text.find(':') < 0 && text[0] != '/') - text.insert(0, currUrl); - - // in case we have a selection defined and someone patched the file- - // name, we check, if the end of the new name is changed. - if (!selection.isNull()) { - int position = text.findRev('/'); - ASSERT(position >= 0); // we already inserted the current dir in case - TQString filename = text.mid(position + 1, text.length()); - if (filename != selection) - selection = TQString::null; - } - - KURL u(text); // I have to take care of entered URLs - bool filenameEntered = false; - - if (u.isLocalFile()) { - // the empty path is kind of a hack - KFileItem i("", u.path()); - if (i.isDir()) - setURL(text, true); - else { - if (takeFiles) - if (acceptOnlyExisting && !i.isFile()) - warning("you entered an invalid URL"); - else - filenameEntered = true; - } - } else - setURL(text, true); - - if (filenameEntered) { - filename_ = u.url(); - emit fileSelected(filename_); - - TQApplication::restoreOverrideCursor(); - - accept(); - } -#endif - kdDebug(kfile_area) << "TODO KDirOperator::checkPath()" << endl; -} - -void KDirOperator::setURL(const KURL& _newurl, bool clearforward) -{ - KURL newurl; - - if ( !_newurl.isValid() ) - newurl.setPath( TQDir::homeDirPath() ); - else - newurl = _newurl; - - TQString pathstr = newurl.path(+1); - newurl.setPath(pathstr); - - // already set - if ( newurl.equals( currUrl, true ) ) - return; - - if ( !isReadable( newurl ) ) { - // maybe newurl is a file? check its parent directory - newurl.cd(TQString::fromLatin1("..")); - if ( !isReadable( newurl ) ) { - resetCursor(); - KMessageBox::error(viewWidget(), - i18n("The specified folder does not exist " - "or was not readable.")); - return; - } - } - - if (clearforward) { - // autodelete should remove this one - backStack.push(new KURL(currUrl)); - forwardStack.clear(); - } - - d->lastURL = currUrl.url(-1); - currUrl = newurl; - - pathChanged(); - emit urlEntered(newurl); - - // enable/disable actions - forwardAction->setEnabled( !forwardStack.isEmpty() ); - backAction->setEnabled( !backStack.isEmpty() ); - upAction->setEnabled( !isRoot() ); - - openURL( newurl ); -} - -void KDirOperator::updateDir() -{ - dir->emitChanges(); - if ( m_fileView ) - m_fileView->listingCompleted(); -} - -void KDirOperator::rereadDir() -{ - pathChanged(); - openURL( currUrl, false, true ); -} - - -bool KDirOperator::openURL( const KURL& url, bool keep, bool reload ) -{ - bool result = dir->openURL( url, keep, reload ); - if ( !result ) // in that case, neither completed() nor canceled() will be emitted by KDL - slotCanceled(); - - return result; -} - -// Protected -void KDirOperator::pathChanged() -{ - if (!m_fileView) - return; - - pendingMimeTypes.clear(); - m_fileView->clear(); - myCompletion.clear(); - myDirCompletion.clear(); - - // it may be, that we weren't ready at this time - TQApplication::restoreOverrideCursor(); - - // when TDEIO::Job emits finished, the slot will restore the cursor - TQApplication::setOverrideCursor( tqwaitCursor ); - - if ( !isReadable( currUrl )) { - KMessageBox::error(viewWidget(), - i18n("The specified folder does not exist " - "or was not readable.")); - if (backStack.isEmpty()) - home(); - else - back(); - } -} - -void KDirOperator::slotRedirected( const KURL& newURL ) -{ - currUrl = newURL; - pendingMimeTypes.clear(); - myCompletion.clear(); - myDirCompletion.clear(); - myCompleteListDirty = true; - emit urlEntered( newURL ); -} - -// Code pinched from kfm then hacked -void KDirOperator::back() -{ - if ( backStack.isEmpty() ) - return; - - forwardStack.push( new KURL(currUrl) ); - - KURL *s = backStack.pop(); - - setURL(*s, false); - delete s; -} - -// Code pinched from kfm then hacked -void KDirOperator::forward() -{ - if ( forwardStack.isEmpty() ) - return; - - backStack.push(new KURL(currUrl)); - - KURL *s = forwardStack.pop(); - setURL(*s, false); - delete s; -} - -KURL KDirOperator::url() const -{ - return currUrl; -} - -void KDirOperator::cdUp() -{ - KURL tmp(currUrl); - tmp.cd(TQString::fromLatin1("..")); - setURL(tmp, true); -} - -void KDirOperator::home() -{ - KURL u; - u.setPath( TQDir::homeDirPath() ); - setURL(u, true); -} - -void KDirOperator::clearFilter() -{ - dir->setNameFilter( TQString::null ); - dir->clearMimeFilter(); - checkPreviewSupport(); -} - -void KDirOperator::setNameFilter(const TQString& filter) -{ - dir->setNameFilter(filter); - checkPreviewSupport(); -} - -void KDirOperator::setMimeFilter( const TQStringList& mimetypes ) -{ - dir->setMimeFilter( mimetypes ); - checkPreviewSupport(); -} - -bool KDirOperator::checkPreviewSupport() -{ - KToggleAction *previewAction = static_cast<KToggleAction*>( myActionCollection->action( "preview" )); - - bool hasPreviewSupport = false; - TDEConfig *kc = TDEGlobal::config(); - TDEConfigGroupSaver cs( kc, ConfigGroup ); - if ( kc->readBoolEntry( "Show Default Preview", true ) ) - hasPreviewSupport = checkPreviewInternal(); - - previewAction->setEnabled( hasPreviewSupport ); - return hasPreviewSupport; -} - -bool KDirOperator::checkPreviewInternal() const -{ - TQStringList supported = TDEIO::PreviewJob::supportedMimeTypes(); - // no preview support for directories? - if ( dirOnlyMode() && supported.findIndex( "inode/directory" ) == -1 ) - return false; - - TQStringList mimeTypes = dir->mimeFilters(); - TQStringList nameFilter = TQStringList::split( " ", dir->nameFilter() ); - - if ( mimeTypes.isEmpty() && nameFilter.isEmpty() && !supported.isEmpty() ) - return true; - else { - TQRegExp r; - r.setWildcard( true ); // the "mimetype" can be "image/*" - - if ( !mimeTypes.isEmpty() ) { - TQStringList::Iterator it = supported.begin(); - - for ( ; it != supported.end(); ++it ) { - r.setPattern( *it ); - - TQStringList result = mimeTypes.grep( r ); - if ( !result.isEmpty() ) { // matches! -> we want previews - return true; - } - } - } - - if ( !nameFilter.isEmpty() ) { - // find the mimetypes of all the filter-patterns and - KServiceTypeFactory *fac = KServiceTypeFactory::self(); - TQStringList::Iterator it1 = nameFilter.begin(); - for ( ; it1 != nameFilter.end(); ++it1 ) { - if ( (*it1) == "*" ) { - return true; - } - - KMimeType *mt = fac->findFromPattern( *it1 ); - if ( !mt ) - continue; - TQString mime = mt->name(); - delete mt; - - // the "mimetypes" we get from the PreviewJob can be "image/*" - // so we need to check in wildcard mode - TQStringList::Iterator it2 = supported.begin(); - for ( ; it2 != supported.end(); ++it2 ) { - r.setPattern( *it2 ); - if ( r.search( mime ) != -1 ) { - return true; - } - } - } - } - } - - return false; -} - -KFileView* KDirOperator::createView( TQWidget* parent, KFile::FileView view ) -{ - KFileView* new_view = 0L; - bool separateDirs = KFile::isSeparateDirs( view ); - bool preview = ( KFile::isPreviewInfo(view) || KFile::isPreviewContents( view ) ); - - if ( separateDirs || preview ) { - KCombiView *combi = 0L; - if (separateDirs) - { - combi = new KCombiView( parent, "combi view" ); - combi->setOnlyDoubleClickSelectsFiles(d->onlyDoubleClickSelectsFiles); - } - - KFileView* v = 0L; - if ( KFile::isSimpleView( view ) ) - v = createView( combi, KFile::Simple ); - else - v = createView( combi, KFile::Detail ); - - v->setOnlyDoubleClickSelectsFiles(d->onlyDoubleClickSelectsFiles); - - if (combi) - combi->setRight( v ); - - if (preview) - { - KFilePreview* pView = new KFilePreview( combi ? combi : v, parent, "preview" ); - pView->setOnlyDoubleClickSelectsFiles(d->onlyDoubleClickSelectsFiles); - new_view = pView; - } - else - new_view = combi; - } - else if ( KFile::isDetailView( view ) && !preview ) { - new_view = new KFileDetailView( parent, "detail view"); - new_view->setViewName( i18n("Detailed View") ); - } - else /* if ( KFile::isSimpleView( view ) && !preview ) */ { - KFileIconView *iconView = new KFileIconView( parent, "simple view"); - new_view = iconView; - new_view->setViewName( i18n("Short View") ); - } - - new_view->widget()->setAcceptDrops(acceptDrops()); - return new_view; -} - -void KDirOperator::setAcceptDrops(bool b) -{ - if (m_fileView) - m_fileView->widget()->setAcceptDrops(b); - TQWidget::setAcceptDrops(b); -} - -void KDirOperator::setDropOptions(int options) -{ - d->dropOptions = options; - if (m_fileView) - m_fileView->setDropOptions(options); -} - -void KDirOperator::setView( KFile::FileView view ) -{ - bool separateDirs = KFile::isSeparateDirs( view ); - bool preview=( KFile::isPreviewInfo(view) || KFile::isPreviewContents( view ) ); - - if (view == KFile::Default) { - if ( KFile::isDetailView( (KFile::FileView) defaultView ) ) - view = KFile::Detail; - else - view = KFile::Simple; - - separateDirs = KFile::isSeparateDirs( static_cast<KFile::FileView>(defaultView) ); - preview = ( KFile::isPreviewInfo( static_cast<KFile::FileView>(defaultView) ) || - KFile::isPreviewContents( static_cast<KFile::FileView>(defaultView) ) ) - && myActionCollection->action("preview")->isEnabled(); - - if ( preview ) { // instantiates KFileMetaPreview and calls setView() - m_viewKind = defaultView; - slotDefaultPreview(); - return; - } - else if ( !separateDirs ) - separateDirsAction->setChecked(true); - } - - // if we don't have any files, we can't separate dirs from files :) - if ( (mode() & KFile::File) == 0 && - (mode() & KFile::Files) == 0 ) { - separateDirs = false; - separateDirsAction->setEnabled( false ); - } - - m_viewKind = static_cast<int>(view) | (separateDirs ? KFile::SeparateDirs : 0); - view = static_cast<KFile::FileView>(m_viewKind); - - KFileView *new_view = createView( this, view ); - if ( preview ) { - // we keep the preview-_widget_ around, but not the KFilePreview. - // KFilePreview::setPreviewWidget handles the reparenting for us - static_cast<KFilePreview*>(new_view)->setPreviewWidget(myPreview, url()); - } - - setView( new_view ); -} - - -void KDirOperator::connectView(KFileView *view) -{ - // TODO: do a real timer and restart it after that - pendingMimeTypes.clear(); - bool listDir = true; - - if ( dirOnlyMode() ) - view->setViewMode(KFileView::Directories); - else - view->setViewMode(KFileView::All); - - if ( myMode & KFile::Files ) - view->setSelectionMode( KFile::Extended ); - else - view->setSelectionMode( KFile::Single ); - - if (m_fileView) - { - if ( d->config ) // save and restore the views' configuration - { - m_fileView->writeConfig( d->config, d->configGroup ); - view->readConfig( d->config, d->configGroup ); - } - - // transfer the state from old view to new view - view->clear(); - view->addItemList( *m_fileView->items() ); - listDir = false; - - if ( m_fileView->widget()->hasFocus() ) - view->widget()->setFocus(); - - KFileItem *oldCurrentItem = m_fileView->currentFileItem(); - if ( oldCurrentItem ) { - view->setCurrentItem( oldCurrentItem ); - view->setSelected( oldCurrentItem, false ); - view->ensureItemVisible( oldCurrentItem ); - } - - const KFileItemList *oldSelected = m_fileView->selectedItems(); - if ( !oldSelected->isEmpty() ) { - KFileItemListIterator it( *oldSelected ); - for ( ; it.current(); ++it ) - view->setSelected( it.current(), true ); - } - - m_fileView->widget()->hide(); - delete m_fileView; - } - - else - { - if ( d->config ) - view->readConfig( d->config, d->configGroup ); - } - - m_fileView = view; - m_fileView->setDropOptions(d->dropOptions); - viewActionCollection = 0L; - KFileViewSignaler *sig = view->signaler(); - - connect(sig, TQT_SIGNAL( activatedMenu(const KFileItem *, const TQPoint& ) ), - this, TQT_SLOT( activatedMenu(const KFileItem *, const TQPoint& ))); - connect(sig, TQT_SIGNAL( dirActivated(const KFileItem *) ), - this, TQT_SLOT( selectDir(const KFileItem*) ) ); - connect(sig, TQT_SIGNAL( fileSelected(const KFileItem *) ), - this, TQT_SLOT( selectFile(const KFileItem*) ) ); - connect(sig, TQT_SIGNAL( fileHighlighted(const KFileItem *) ), - this, TQT_SLOT( highlightFile(const KFileItem*) )); - connect(sig, TQT_SIGNAL( sortingChanged( TQDir::SortSpec ) ), - this, TQT_SLOT( slotViewSortingChanged( TQDir::SortSpec ))); - connect(sig, TQT_SIGNAL( dropped(const KFileItem *, TQDropEvent*, const KURL::List&) ), - this, TQT_SIGNAL( dropped(const KFileItem *, TQDropEvent*, const KURL::List&)) ); - - if ( reverseAction->isChecked() != m_fileView->isReversed() ) - slotSortReversed(); - - updateViewActions(); - m_fileView->widget()->resize(size()); - m_fileView->widget()->show(); - - if ( listDir ) { - TQApplication::setOverrideCursor( tqwaitCursor ); - openURL( currUrl ); - } - else - view->listingCompleted(); -} - -KFile::Mode KDirOperator::mode() const -{ - return myMode; -} - -void KDirOperator::setMode(KFile::Mode m) -{ - if (myMode == m) - return; - - myMode = m; - - dir->setDirOnlyMode( dirOnlyMode() ); - - // reset the view with the different mode - setView( static_cast<KFile::FileView>(m_viewKind) ); -} - -void KDirOperator::setView(KFileView *view) -{ - if ( view == m_fileView ) { - return; - } - - setFocusProxy(view->widget()); - view->setSorting( mySorting ); - view->setOnlyDoubleClickSelectsFiles( d->onlyDoubleClickSelectsFiles ); - connectView(view); // also deletes the old view - - emit viewChanged( view ); -} - -void KDirOperator::setDirLister( KDirLister *lister ) -{ - if ( lister == dir ) // sanity check - return; - - delete dir; - dir = lister; - - dir->setAutoUpdate( true ); - - TQWidget* mainWidget = topLevelWidget(); - dir->setMainWindow (mainWidget); - kdDebug (kfile_area) << "mainWidget=" << mainWidget << endl; - - connect( dir, TQT_SIGNAL( percent( int )), - TQT_SLOT( slotProgress( int ) )); - connect( dir, TQT_SIGNAL(started( const KURL& )), TQT_SLOT(slotStarted())); - connect( dir, TQT_SIGNAL(newItems(const KFileItemList &)), - TQT_SLOT(insertNewFiles(const KFileItemList &))); - connect( dir, TQT_SIGNAL(completed()), TQT_SLOT(slotIOFinished())); - connect( dir, TQT_SIGNAL(canceled()), TQT_SLOT(slotCanceled())); - connect( dir, TQT_SIGNAL(deleteItem(KFileItem *)), - TQT_SLOT(itemDeleted(KFileItem *))); - connect( dir, TQT_SIGNAL(redirection( const KURL& )), - TQT_SLOT( slotRedirected( const KURL& ))); - connect( dir, TQT_SIGNAL( clear() ), TQT_SLOT( slotClearView() )); - connect( dir, TQT_SIGNAL( refreshItems( const KFileItemList& ) ), - TQT_SLOT( slotRefreshItems( const KFileItemList& ) ) ); -} - -void KDirOperator::insertNewFiles(const KFileItemList &newone) -{ - if ( newone.isEmpty() || !m_fileView ) - return; - - myCompleteListDirty = true; - m_fileView->addItemList( newone ); - emit updateInformation(m_fileView->numDirs(), m_fileView->numFiles()); - - KFileItem *item; - KFileItemListIterator it( newone ); - - while ( (item = it.current()) ) { - // highlight the dir we come from, if possible - if ( d->dirHighlighting && item->isDir() && - item->url().url(-1) == d->lastURL ) { - m_fileView->setCurrentItem( item ); - m_fileView->ensureItemVisible( item ); - } - - ++it; - } - - TQTimer::singleShot(200, this, TQT_SLOT(resetCursor())); -} - -void KDirOperator::selectDir(const KFileItem *item) -{ - setURL(item->url(), true); -} - -void KDirOperator::itemDeleted(KFileItem *item) -{ - pendingMimeTypes.removeRef( item ); - if ( m_fileView ) - { - m_fileView->removeItem( static_cast<KFileItem *>( item )); - emit updateInformation(m_fileView->numDirs(), m_fileView->numFiles()); - } -} - -void KDirOperator::selectFile(const KFileItem *item) -{ - TQApplication::restoreOverrideCursor(); - - emit fileSelected( item ); -} - -void KDirOperator::setCurrentItem( const TQString& filename ) -{ - if ( m_fileView ) { - const KFileItem *item = 0L; - - if ( !filename.isNull() ) - item = static_cast<KFileItem *>(dir->findByName( filename )); - - m_fileView->clearSelection(); - if ( item ) { - m_fileView->setCurrentItem( item ); - m_fileView->setSelected( item, true ); - m_fileView->ensureItemVisible( item ); - } - } -} - -TQString KDirOperator::makeCompletion(const TQString& string) -{ - if ( string.isEmpty() ) { - m_fileView->clearSelection(); - return TQString::null; - } - - prepareCompletionObjects(); - return myCompletion.makeCompletion( string ); -} - -TQString KDirOperator::makeDirCompletion(const TQString& string) -{ - if ( string.isEmpty() ) { - m_fileView->clearSelection(); - return TQString::null; - } - - prepareCompletionObjects(); - return myDirCompletion.makeCompletion( string ); -} - -void KDirOperator::prepareCompletionObjects() -{ - if ( !m_fileView ) - return; - - if ( myCompleteListDirty ) { // create the list of all possible completions - KFileItemListIterator it( *(m_fileView->items()) ); - for( ; it.current(); ++it ) { - KFileItem *item = it.current(); - - myCompletion.addItem( item->name() ); - if ( item->isDir() ) - myDirCompletion.addItem( item->name() ); - } - myCompleteListDirty = false; - } -} - -void KDirOperator::slotCompletionMatch(const TQString& match) -{ - setCurrentItem( match ); - emit completion( match ); -} - -void KDirOperator::setupActions() -{ - myActionCollection = new KActionCollection( topLevelWidget(), TQT_TQOBJECT(this), "KDirOperator::myActionCollection" ); - - actionMenu = new KActionMenu( i18n("Menu"), myActionCollection, "popupMenu" ); - upAction = KStdAction::up( TQT_TQOBJECT(this), TQT_SLOT( cdUp() ), myActionCollection, "up" ); - upAction->setText( i18n("Parent Folder") ); - backAction = KStdAction::back( TQT_TQOBJECT(this), TQT_SLOT( back() ), myActionCollection, "back" ); - forwardAction = KStdAction::forward( TQT_TQOBJECT(this), TQT_SLOT(forward()), myActionCollection, "forward" ); - homeAction = KStdAction::home( TQT_TQOBJECT(this), TQT_SLOT( home() ), myActionCollection, "home" ); - homeAction->setText(i18n("Home Folder")); - reloadAction = KStdAction::redisplay( TQT_TQOBJECT(this), TQT_SLOT(rereadDir()), myActionCollection, "reload" ); - actionSeparator = new KActionSeparator( myActionCollection, "separator" ); - d->viewActionSeparator = new KActionSeparator( myActionCollection, - "viewActionSeparator" ); - mkdirAction = new KAction( i18n("New Folder..."), 0, - TQT_TQOBJECT(this), TQT_SLOT( mkdir() ), myActionCollection, "mkdir" ); - KAction* trash = new KAction( i18n( "Move to Trash" ), "edittrash", Key_Delete, myActionCollection, "trash" ); - connect( trash, TQT_SIGNAL( activated( KAction::ActivationReason, TQt::ButtonState ) ), - this, TQT_SLOT( trashSelected( KAction::ActivationReason, TQt::ButtonState ) ) ); - new KAction( i18n( "Delete" ), "editdelete", SHIFT+Key_Delete, TQT_TQOBJECT(this), - TQT_SLOT( deleteSelected() ), myActionCollection, "delete" ); - mkdirAction->setIcon( TQString::fromLatin1("folder_new") ); - reloadAction->setText( i18n("Reload") ); - reloadAction->setShortcut( KStdAccel::shortcut( KStdAccel::Reload )); - - - // the sort menu actions - sortActionMenu = new KActionMenu( i18n("Sorting"), myActionCollection, "sorting menu"); - byNameAction = new KRadioAction( i18n("By Name"), 0, - TQT_TQOBJECT(this), TQT_SLOT( slotSortByName() ), - myActionCollection, "by name" ); - byDateAction = new KRadioAction( i18n("By Date"), 0, - TQT_TQOBJECT(this), TQT_SLOT( slotSortByDate() ), - myActionCollection, "by date" ); - bySizeAction = new KRadioAction( i18n("By Size"), 0, - TQT_TQOBJECT(this), TQT_SLOT( slotSortBySize() ), - myActionCollection, "by size" ); - reverseAction = new KToggleAction( i18n("Reverse"), 0, - TQT_TQOBJECT(this), TQT_SLOT( slotSortReversed() ), - myActionCollection, "reversed" ); - - TQString sortGroup = TQString::fromLatin1("sort"); - byNameAction->setExclusiveGroup( sortGroup ); - byDateAction->setExclusiveGroup( sortGroup ); - bySizeAction->setExclusiveGroup( sortGroup ); - - - dirsFirstAction = new KToggleAction( i18n("Folders First"), 0, - myActionCollection, "dirs first"); - caseInsensitiveAction = new KToggleAction(i18n("Case Insensitive"), 0, - myActionCollection, "case insensitive" ); - - connect( dirsFirstAction, TQT_SIGNAL( toggled( bool ) ), - TQT_SLOT( slotToggleDirsFirst() )); - connect( caseInsensitiveAction, TQT_SIGNAL( toggled( bool ) ), - TQT_SLOT( slotToggleIgnoreCase() )); - - - - // the view menu actions - viewActionMenu = new KActionMenu( i18n("&View"), myActionCollection, "view menu" ); - connect( viewActionMenu->popupMenu(), TQT_SIGNAL( aboutToShow() ), - TQT_SLOT( insertViewDependentActions() )); - - shortAction = new KRadioAction( i18n("Short View"), "view_multicolumn", - KShortcut(), myActionCollection, "short view" ); - detailedAction = new KRadioAction( i18n("Detailed View"), "view_detailed", - KShortcut(), myActionCollection, "detailed view" ); - - showHiddenAction = new KToggleAction( i18n("Show Hidden Files"), KShortcut(), - myActionCollection, "show hidden" ); -// showHiddenAction->setCheckedState( i18n("Hide Hidden Files") ); - separateDirsAction = new KToggleAction( i18n("Separate Folders"), KShortcut(), - TQT_TQOBJECT(this), - TQT_SLOT(slotSeparateDirs()), - myActionCollection, "separate dirs" ); - KToggleAction *previewAction = new KToggleAction(i18n("Show Preview"), - "thumbnail", KShortcut(), - myActionCollection, - "preview" ); - previewAction->setCheckedState(i18n("Hide Preview")); - connect( previewAction, TQT_SIGNAL( toggled( bool )), - TQT_SLOT( togglePreview( bool ))); - - - TQString viewGroup = TQString::fromLatin1("view"); - shortAction->setExclusiveGroup( viewGroup ); - detailedAction->setExclusiveGroup( viewGroup ); - - connect( shortAction, TQT_SIGNAL( activated() ), - TQT_SLOT( slotSimpleView() )); - connect( detailedAction, TQT_SIGNAL( activated() ), - TQT_SLOT( slotDetailedView() )); - connect( showHiddenAction, TQT_SIGNAL( toggled( bool ) ), - TQT_SLOT( slotToggleHidden( bool ) )); - - new KAction( i18n("Properties"), KShortcut(ALT+Key_Return), TQT_TQOBJECT(this), - TQT_SLOT(slotProperties()), myActionCollection, "properties" ); -} - -void KDirOperator::setupMenu() -{ - setupMenu(AllActions); -} - -void KDirOperator::setupMenu(int whichActions) -{ - // first fill the submenus (sort and view) - sortActionMenu->popupMenu()->clear(); - sortActionMenu->insert( byNameAction ); - sortActionMenu->insert( byDateAction ); - sortActionMenu->insert( bySizeAction ); - sortActionMenu->insert( actionSeparator ); - sortActionMenu->insert( reverseAction ); - sortActionMenu->insert( dirsFirstAction ); - sortActionMenu->insert( caseInsensitiveAction ); - - // now plug everything into the popupmenu - actionMenu->popupMenu()->clear(); - if (whichActions & NavActions) - { - actionMenu->insert( upAction ); - actionMenu->insert( backAction ); - actionMenu->insert( forwardAction ); - actionMenu->insert( homeAction ); - actionMenu->insert( actionSeparator ); - } - - if (whichActions & FileActions) - { - actionMenu->insert( mkdirAction ); - if (currUrl.isLocalFile() && !(TDEApplication::keyboardMouseState() & TQt::ShiftButton)) - actionMenu->insert( myActionCollection->action( "trash" ) ); - TDEConfig *globalconfig = TDEGlobal::config(); - TDEConfigGroupSaver cs( globalconfig, TQString::fromLatin1("KDE") ); - if (!currUrl.isLocalFile() || (TDEApplication::keyboardMouseState() & TQt::ShiftButton) || - globalconfig->readBoolEntry("ShowDeleteCommand", false)) - actionMenu->insert( myActionCollection->action( "delete" ) ); - actionMenu->insert( actionSeparator ); - } - - if (whichActions & SortActions) - { - actionMenu->insert( sortActionMenu ); - actionMenu->insert( actionSeparator ); - } - - if (whichActions & ViewActions) - { - actionMenu->insert( viewActionMenu ); - actionMenu->insert( actionSeparator ); - } - - if (whichActions & FileActions) - { - actionMenu->insert( myActionCollection->action( "properties" ) ); - } -} - -void KDirOperator::updateSortActions() -{ - if ( KFile::isSortByName( mySorting ) ) - byNameAction->setChecked( true ); - else if ( KFile::isSortByDate( mySorting ) ) - byDateAction->setChecked( true ); - else if ( KFile::isSortBySize( mySorting ) ) - bySizeAction->setChecked( true ); - - dirsFirstAction->setChecked( KFile::isSortDirsFirst( mySorting ) ); - caseInsensitiveAction->setChecked( KFile::isSortCaseInsensitive(mySorting) ); - caseInsensitiveAction->setEnabled( KFile::isSortByName( mySorting ) ); - - if ( m_fileView ) - reverseAction->setChecked( m_fileView->isReversed() ); -} - -void KDirOperator::updateViewActions() -{ - KFile::FileView fv = static_cast<KFile::FileView>( m_viewKind ); - - separateDirsAction->setChecked( KFile::isSeparateDirs( fv ) && - separateDirsAction->isEnabled() ); - - shortAction->setChecked( KFile::isSimpleView( fv )); - detailedAction->setChecked( KFile::isDetailView( fv )); -} - -void KDirOperator::readConfig( TDEConfig *kc, const TQString& group ) -{ - if ( !kc ) - return; - TQString oldGroup = kc->group(); - if ( !group.isEmpty() ) - kc->setGroup( group ); - - defaultView = 0; - int sorting = 0; - - TQString viewStyle = kc->readEntry( TQString::fromLatin1("View Style"), - TQString::fromLatin1("Simple") ); - if ( viewStyle == TQString::fromLatin1("Detail") ) - defaultView |= KFile::Detail; - else - defaultView |= KFile::Simple; - if ( kc->readBoolEntry( TQString::fromLatin1("Separate Directories"), - DefaultMixDirsAndFiles ) ) - defaultView |= KFile::SeparateDirs; - if ( kc->readBoolEntry(TQString::fromLatin1("Show Preview"), false)) - defaultView |= KFile::PreviewContents; - - if ( kc->readBoolEntry( TQString::fromLatin1("Sort case insensitively"), - DefaultCaseInsensitive ) ) - sorting |= TQDir::IgnoreCase; - if ( kc->readBoolEntry( TQString::fromLatin1("Sort directories first"), - DefaultDirsFirst ) ) - sorting |= TQDir::DirsFirst; - - - TQString name = TQString::fromLatin1("Name"); - TQString sortBy = kc->readEntry( TQString::fromLatin1("Sort by"), name ); - if ( sortBy == name ) - sorting |= TQDir::Name; - else if ( sortBy == TQString::fromLatin1("Size") ) - sorting |= TQDir::Size; - else if ( sortBy == TQString::fromLatin1("Date") ) - sorting |= TQDir::Time; - - mySorting = static_cast<TQDir::SortSpec>( sorting ); - setSorting( mySorting ); - - - if ( kc->readBoolEntry( TQString::fromLatin1("Show hidden files"), - DefaultShowHidden ) ) { - showHiddenAction->setChecked( true ); - dir->setShowingDotFiles( true ); - } - if ( kc->readBoolEntry( TQString::fromLatin1("Sort reversed"), - DefaultSortReversed ) ) - reverseAction->setChecked( true ); - - kc->setGroup( oldGroup ); -} - -void KDirOperator::writeConfig( TDEConfig *kc, const TQString& group ) -{ - if ( !kc ) - return; - - const TQString oldGroup = kc->group(); - - if ( !group.isEmpty() ) - kc->setGroup( group ); - - TQString sortBy = TQString::fromLatin1("Name"); - if ( KFile::isSortBySize( mySorting ) ) - sortBy = TQString::fromLatin1("Size"); - else if ( KFile::isSortByDate( mySorting ) ) - sortBy = TQString::fromLatin1("Date"); - kc->writeEntry( TQString::fromLatin1("Sort by"), sortBy ); - - kc->writeEntry( TQString::fromLatin1("Sort reversed"), - reverseAction->isChecked() ); - kc->writeEntry( TQString::fromLatin1("Sort case insensitively"), - caseInsensitiveAction->isChecked() ); - kc->writeEntry( TQString::fromLatin1("Sort directories first"), - dirsFirstAction->isChecked() ); - - // don't save the separate dirs or preview when an application specific - // preview is in use. - bool appSpecificPreview = false; - if ( myPreview ) { - TQWidget *preview = const_cast<TQWidget*>( myPreview ); // grmbl - KFileMetaPreview *tmp = dynamic_cast<KFileMetaPreview*>( preview ); - appSpecificPreview = (tmp == 0L); - } - - if ( !appSpecificPreview ) { - if ( separateDirsAction->isEnabled() ) - kc->writeEntry( TQString::fromLatin1("Separate Directories"), - separateDirsAction->isChecked() ); - - KToggleAction *previewAction = static_cast<KToggleAction*>(myActionCollection->action("preview")); - if ( previewAction->isEnabled() ) { - bool hasPreview = previewAction->isChecked(); - kc->writeEntry( TQString::fromLatin1("Show Preview"), hasPreview ); - } - } - - kc->writeEntry( TQString::fromLatin1("Show hidden files"), - showHiddenAction->isChecked() ); - - KFile::FileView fv = static_cast<KFile::FileView>( m_viewKind ); - TQString style; - if ( KFile::isDetailView( fv ) ) - style = TQString::fromLatin1("Detail"); - else if ( KFile::isSimpleView( fv ) ) - style = TQString::fromLatin1("Simple"); - kc->writeEntry( TQString::fromLatin1("View Style"), style ); - - kc->setGroup( oldGroup ); -} - - -void KDirOperator::resizeEvent( TQResizeEvent * ) -{ - if (m_fileView) - m_fileView->widget()->resize( size() ); - - if ( TQT_BASE_OBJECT(progress->parent()) == TQT_BASE_OBJECT(this) ) // might be reparented into a statusbar - progress->move(2, height() - progress->height() -2); -} - -void KDirOperator::setOnlyDoubleClickSelectsFiles( bool enable ) -{ - d->onlyDoubleClickSelectsFiles = enable; - if ( m_fileView ) - m_fileView->setOnlyDoubleClickSelectsFiles( enable ); -} - -bool KDirOperator::onlyDoubleClickSelectsFiles() const -{ - return d->onlyDoubleClickSelectsFiles; -} - -void KDirOperator::slotStarted() -{ - progress->setProgress( 0 ); - // delay showing the progressbar for one second - d->progressDelayTimer->start( 1000, true ); -} - -void KDirOperator::slotShowProgress() -{ - progress->raise(); - progress->show(); - TQApplication::flushX(); -} - -void KDirOperator::slotProgress( int percent ) -{ - progress->setProgress( percent ); - // we have to redraw this as fast as possible - if ( progress->isVisible() ) - TQApplication::flushX(); -} - - -void KDirOperator::slotIOFinished() -{ - d->progressDelayTimer->stop(); - slotProgress( 100 ); - progress->hide(); - emit finishedLoading(); - resetCursor(); - - if ( m_fileView ) - m_fileView->listingCompleted(); -} - -void KDirOperator::slotCanceled() -{ - emit finishedLoading(); - resetCursor(); - - if ( m_fileView ) - m_fileView->listingCompleted(); -} - -KProgress * KDirOperator::progressBar() const -{ - return progress; -} - -void KDirOperator::clearHistory() -{ - backStack.clear(); - backAction->setEnabled( false ); - forwardStack.clear(); - forwardAction->setEnabled( false ); -} - -void KDirOperator::slotViewActionAdded( KAction *action ) -{ - if ( viewActionMenu->popupMenu()->count() == 5 ) // need to add a separator - viewActionMenu->insert( d->viewActionSeparator ); - - viewActionMenu->insert( action ); -} - -void KDirOperator::slotViewActionRemoved( KAction *action ) -{ - viewActionMenu->remove( action ); - - if ( viewActionMenu->popupMenu()->count() == 6 ) // remove the separator - viewActionMenu->remove( d->viewActionSeparator ); -} - -void KDirOperator::slotViewSortingChanged( TQDir::SortSpec sort ) -{ - mySorting = sort; - updateSortActions(); -} - -void KDirOperator::setEnableDirHighlighting( bool enable ) -{ - d->dirHighlighting = enable; -} - -bool KDirOperator::dirHighlighting() const -{ - return d->dirHighlighting; -} - -void KDirOperator::slotProperties() -{ - if ( m_fileView ) { - const KFileItemList *list = m_fileView->selectedItems(); - if ( !list->isEmpty() ) - (void) new KPropertiesDialog( *list, this, "props dlg", true); - } -} - -void KDirOperator::slotClearView() -{ - if ( m_fileView ) - m_fileView->clearView(); -} - -// ### temporary code -#include <dirent.h> -bool KDirOperator::isReadable( const KURL& url ) -{ - if ( !url.isLocalFile() ) - return true; // what else can we say? - - KDE_struct_stat buf; - TQString ts = url.path(+1); - bool readable = ( KDE_stat( TQFile::encodeName( ts ), &buf) == 0 ); - if (readable) { // further checks - DIR *test; - test = opendir( TQFile::encodeName( ts )); // we do it just to test here - readable = (test != 0); - if (test) - closedir(test); - } - return readable; -} - -void KDirOperator::togglePreview( bool on ) -{ - if ( on ) - slotDefaultPreview(); - else - setView( (KFile::FileView) (m_viewKind & ~(KFile::PreviewContents|KFile::PreviewInfo)) ); -} - -void KDirOperator::slotRefreshItems( const KFileItemList& items ) -{ - if ( !m_fileView ) - return; - - KFileItemListIterator it( items ); - for ( ; it.current(); ++it ) - m_fileView->updateView( it.current() ); -} - -void KDirOperator::setViewConfig( TDEConfig *config, const TQString& group ) -{ - d->config = config; - d->configGroup = group; -} - -TDEConfig * KDirOperator::viewConfig() -{ - return d->config; -} - -TQString KDirOperator::viewConfigGroup() const -{ - return d->configGroup; -} - -void KDirOperator::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -#include "kdiroperator.moc" diff --git a/kio/kfile/kdiroperator.h b/kio/kfile/kdiroperator.h deleted file mode 100644 index 3dbd42759..000000000 --- a/kio/kfile/kdiroperator.h +++ /dev/null @@ -1,950 +0,0 @@ -// -*- c++ -*- -/* This file is part of the KDE libraries - Copyright (C) 1999 Stephan Kulow <coolo@kde.org> - 2000,2001 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ -#ifndef KDIROPERATOR_H_ -#define KDIROPERATOR_H_ - -#include <tqwidget.h> -#include <tqptrstack.h> - -#include <kaction.h> -#include <kcompletion.h> -#include <kdirlister.h> -#include <kfileview.h> -#include <kfileitem.h> -#include <kfile.h> - -class TQPopupMenu; -class TQTimer; - -class KAction; -class KDirLister; -class KToggleAction; -class KActionSeparator; -class KActionMenu; -class TQWidgetStack; -class KProgress; -namespace TDEIO { - class CopyJob; - class DeleteJob; -} - -/** - * This widget works as a network transparent filebrowser. You specify a URL - * to display and this url will be loaded via KDirLister. The user can - * browse through directories, highlight and select files, delete or rename - * files. - * - * It supports different views, e.g. a detailed view (see KFileDetailView), - * a simple icon view (see KFileIconView), a combination of two views, - * separating directories and files ( KCombiView). - * - * Additionally, a preview view is available (see KFilePreview), which can - * show either a simple or detailed view and additionally a preview widget - * (see setPreviewWidget()). KImageFilePreview is one implementation - * of a preview widget, that displays previews for all supported filetypes - * utilizing TDEIO::PreviewJob. - * - * Currently, those classes don't support Drag&Drop out of the box -- there - * you have to use your own view-classes. You can use some DnD-aware views - * from Bj�n Sahlstr� <bjorn@kbear.org> until they will be integrated - * into this library. See http://devel-home.kde.org/~pfeiffer/DnD-classes.tar.gz - * - * This widget is the one used in the KFileDialog. - * - * Basic usage is like this: - * \code - * KDirOperator *op = new KDirOperator( KURL( "file:/home/gis" ), this ); - * // some signals you might be interested in - * connect(op, TQT_SIGNAL(urlEntered(const KURL&)), - * TQT_SLOT(urlEntered(const KURL&))); - * connect(op, TQT_SIGNAL(fileHighlighted(const KFileItem *)), - * TQT_SLOT(fileHighlighted(const KFileItem *))); - * connect(op, TQT_SIGNAL(fileSelected(const KFileItem *)), - * TQT_SLOT(fileSelected(const KFileItem *))); - * connect(op, TQT_SIGNAL(finishedLoading()), - * TQT_SLOT(slotLoadingFinished())); - * - * op->readConfig( TDEGlobal::config(), "Your KDiroperator ConfigGroup" ); - * op->setView(KFile::Default); - * \endcode - * - * This will create a childwidget of 'this' showing the directory contents - * of /home/gis in the default-view. The view is determined by the readConfig() - * call, which will read the KDirOperator settings, the user left your program - * with (and which you saved with op->writeConfig()). - * - * @short A widget for displaying files and browsing directories. - * @author Stephan Kulow <coolo@kde.org>, Carsten Pfeiffer <pfeiffer@kde.org> - */ -class TDEIO_EXPORT KDirOperator : public TQWidget -{ - Q_OBJECT - - public: - /** - * The various action types. These values can be or'd together - * @since 3.1 - */ - enum ActionTypes { SortActions = 1, - ViewActions = 2, - NavActions = 4, - FileActions = 8, - AllActions = 15 }; - /** - * Constructs the KDirOperator with no initial view. As the views are - * configurable, call readConfig() to load the user's configuration - * and then setView to explicitly set a view. - * - * This constructor doesn't start loading the url, setView will do it. - */ - KDirOperator(const KURL& urlName = KURL(), - TQWidget *parent = 0, const char* name = 0); - /** - * Destroys the KDirOperator. - */ - virtual ~KDirOperator(); - - /** - * Enables/disables showing hidden files. - */ - // ### KDE4: make virtual - void setShowHiddenFiles ( bool s ) { showHiddenAction->setChecked( s ); } - - /** - * @returns true when hidden files are shown or false otherwise. - */ - bool showHiddenFiles () const { return showHiddenAction->isChecked(); } - - /** - * Stops loading immediately. You don't need to call this, usually. - */ - void close(); - /// Reimplemented to avoid "hidden virtual" warnings - virtual bool close( bool alsoDelete ) { return TQWidget::close( alsoDelete ); } - - /** - * Sets a filter like "*.cpp *.h *.o". Only files matching that filter - * will be shown. Call updateDir() to apply it. - * - * @see KDirLister::setNameFilter - * @see nameFilter - */ - void setNameFilter(const TQString& filter); - - /** - * @returns the current namefilter. - * @see setNameFilter - */ - const TQString& nameFilter() const { return dir->nameFilter(); } - - /** - * Sets a list of mimetypes as filter. Only files of those mimetypes - * will be shown. - * - * Example: - * \code - * TQStringList filter; - * filter << "text/html" << "image/png" << "inode/directory"; - * dirOperator->setMimefilter( filter ); - * \endcode - * - * Node: Without the mimetype inode/directory, only files would be shown. - * Call updateDir() to apply it. - * - * @see KDirLister::setMimeFilter - * @see mimeFilter - */ - void setMimeFilter( const TQStringList& mimetypes ); - - /** - * @returns the current mime filter. - */ - TQStringList mimeFilter() const { return dir->mimeFilters(); } - - /** - * Clears both the namefilter and mimetype filter, so that all files and - * directories will be shown. Call updateDir() to apply it. - * - * @see setMimeFilter - * @see setNameFilter - */ - void clearFilter(); - - /** - * @returns the current url - */ - KURL url() const; - - /** - * Sets a new url to list. - * @param clearforward specifies whether the "forward" history should be cleared. - * @param url the URL to set - */ - // ### KDE4: make virtual - void setURL(const KURL& url, bool clearforward); - - /** - * Clears the current selection and attempts to set @p filename - * the current file. filename is just the name, no path or url. - */ - void setCurrentItem( const TQString& filename ); - - /** - * Sets a new KFileView to be used for showing and browsing files. - * Note: this will read the current url() to fill the view. - * - * @see KFileView - * @see KFileIconView - * @see KFileDetailView - * @see KCombiView - * @see view - */ - // ### KDE4: make virtual - void setView(KFileView *view); - - /** - * @returns the currently used view. - * @see setView - */ - KFileView * view() const { return m_fileView; } - - /** - * Returns the widget of the current view. 0L if there is no view/widget. - * (KFileView itself is not a widget.) - */ - TQWidget * viewWidget() const { return m_fileView ? m_fileView->widget() : 0L; } - - /** - * Sets one of the predefined fileviews - * @see KFile::FileView - */ - // ### KDE4: make virtual - void setView(KFile::FileView view); - - /** - * Sets the way to sort files and directories. - */ - void setSorting( TQDir::SortSpec ); - - /** - * @returns the current way of sorting files and directories - */ - TQDir::SortSpec sorting() const { return mySorting; } - - /** - * @returns true if we are displaying the root directory of the current url - */ - bool isRoot() const { return url().path() == TQChar('/'); } - - /** - * @returns the object listing the directory - */ - KDirLister *dirLister() const { return dir; } - - /** - * @returns the progress widget, that is shown during directory listing. - * You can for example reparent() it to put it into a statusbar. - */ - KProgress * progressBar() const; - - /** - * Sets the listing/selection mode for the views, an OR'ed combination of - * @li File - * @li Directory - * @li Files - * @li ExistingOnly - * @li LocalOnly - * - * You cannot mix File and Files of course, as the former means - * single-selection mode, the latter multi-selection. - */ - // ### KDE4: make virtual - void setMode( KFile::Mode m ); - /** - * @returns the listing/selection mode. - */ - KFile::Mode mode() const; - - /** - * Sets a preview-widget to be shown next to the file-view. - * The ownership of @p w is transferred to KDirOperator, so don't - * delete it yourself! - */ - // ### KDE4: make virtual - void setPreviewWidget(const TQWidget *w); - - /** - * @returns a list of all currently selected items. If there is no view, - * then 0L is returned. - */ - const KFileItemList * selectedItems() const { - return ( m_fileView ? m_fileView->selectedItems() : 0L ); - } - - /** - * @returns true if @p item is currently selected, or false otherwise. - */ - inline bool isSelected( const KFileItem *item ) const { - return ( m_fileView ? m_fileView->isSelected( item ) : false ); - } - - /** - * @returns the number of directories in the currently listed url. - * Returns 0 if there is no view. - */ - int numDirs() const; - - /** - * @returns the number of files in the currently listed url. - * Returns 0 if there is no view. - */ - int numFiles() const; - - /** - * @returns a KCompletion object, containing all filenames and - * directories of the current directory/URL. - * You can use it to insert it into a KLineEdit or KComboBox - * Note: it will only contain files, after prepareCompletionObjects() - * has been called. It will be implicitly called from makeCompletion() - * or makeDirCompletion() - */ - KCompletion * completionObject() const { - return const_cast<KCompletion *>( &myCompletion ); - } - - /** - * @returns a KCompletion object, containing only all directories of the - * current directory/URL. - * You can use it to insert it into a KLineEdit or KComboBox - * Note: it will only contain directories, after - * prepareCompletionObjects() has been called. It will be implicitly - * called from makeCompletion() or makeDirCompletion() - */ - KCompletion *dirCompletionObject() const { - return const_cast<KCompletion *>( &myDirCompletion ); - } - - /** - * an accessor to a collection of all available Actions. The actions - * are static, they will be there all the time (no need to connect to - * the signals KActionCollection::inserted() or removed(). - * - * There are the following actions: - * - * @li popupMenu : an ActionMenu presenting a popupmenu with all actions - * @li up : changes to the parent directory - * @li back : goes back to the previous directory - * @li forward : goes forward in the history - * @li home : changes to the user's home directory - * @li reload : reloads the current directory - * @li separator : a separator - * @li mkdir : opens a dialog box to create a directory - * @li delete : deletes the selected files/directories - * @li sorting menu : an ActionMenu containing all sort-options - * @li by name : sorts by name - * @li by date : sorts by date - * @li by size : sorts by size - * @li reversed : reverses the sort order - * @li dirs first : sorts directories before files - * @li case insensitive : sorts case insensitively - * @li view menu : an ActionMenu containing all actions concerning the view - * @li short view : shows a simple fileview - * @li detailed view : shows a detailed fileview (dates, permissions ,...) - * @li show hidden : shows hidden files - * @li separate dirs : shows directories in a separate pane - * @li preview : shows a preview next to the fileview - * @li single : hides the separate view for directories or the preview - * @li properties : shows a KPropertiesDialog for the selected files - * - * The short and detailed view are in an exclusive group. The sort-by - * actions are in an exclusive group as well. Also the "separate dirs", - * "preview" and "single" actions are in an exclusive group. - * - * You can e.g. use - * \code - * actionCollection()->action( "up" )->plug( someToolBar ); - * \endcode - * to add a button into a toolbar, which makes the dirOperator change to - * its parent directory. - * - * @returns all available Actions - */ - KActionCollection * actionCollection() const { return myActionCollection; } - - /** - * Sets the config object and the to be used group in KDirOperator. This - * will be used to store the view's configuration via - * KFileView::writeConfig() (and for KFileView::readConfig()). - * If you don't set this, the views cannot save and restore their - * configuration. - * - * Usually you call this right after KDirOperator creation so that the view - * instantiation can make use of it already. - * - * Note that KDirOperator does NOT take ownership of that object (typically - * it's TDEGlobal::config() anyway. - * - * @see viewConfig - * @see viewConfigGroup - * @since 3.1 - */ - // ### KDE4: make virtual - void setViewConfig( TDEConfig *config, const TQString& group ); - - /** - * Returns the TDEConfig object used for saving and restoring view's - * configuration. - * @returns the TDEConfig object used for saving and restoring view's - * configuration. - * @since 3.1 - */ - TDEConfig *viewConfig(); - - /** - * Returns the group name used for saving and restoring view's - * configuration. - * @returns the group name used for saving and restoring view's - * configuration. - * @since 3.1 - */ - TQString viewConfigGroup() const; - - /** - * Reads the default settings for a view, i.e. the default KFile::FileView. - * Also reads the sorting and whether hidden files should be shown. - * Note: the default view will not be set - you have to call - * \code - * setView( KFile::Default ) - * \endcode - * to apply it. - * - * @see setView - * @see setViewConfig - * @see writeConfig - */ - virtual void readConfig( TDEConfig *, const TQString& group = TQString::null ); - - /** - * Saves the current settings like sorting, simple or detailed view. - * - * @see readConfig - * @see setViewConfig - */ - virtual void writeConfig( TDEConfig *, const TQString& group = TQString::null ); - - - /** - * This is a KFileDialog specific hack: we want to select directories with - * single click, but not files. But as a generic class, we have to be able - * to select files on single click as well. - * - * This gives us the opportunity to do both. - * - * The default is false, set it to true if you don't want files selected - * with single click. - */ - void setOnlyDoubleClickSelectsFiles( bool enable ); - - /** - * @returns whether files (not directories) should only be select()ed by - * double-clicks. - * @see setOnlyDoubleClickSelectsFiles - */ - bool onlyDoubleClickSelectsFiles() const; - - /** - * Creates the given directory/url. If it is a relative path, - * it will be completed with the current directory. - * If enterDirectory is true, the directory will be entered after a - * successful operation. If unsuccessful, a messagebox will be presented - * to the user. - * @returns true if the directory could be created. - */ - // ### KDE4: make virtual and turn TQString into KURL - bool mkdir( const TQString& directory, bool enterDirectory = true ); - - /** - * Starts and returns a TDEIO::DeleteJob to delete the given @p items. - * - * @param items the list of items to be deleted - * @param ask specifies whether a confirmation dialog should be shown - * @param showProgress passed to the DeleteJob to show a progress dialog - */ - // ### KDE4: make virtual - TDEIO::DeleteJob * del( const KFileItemList& items, - bool ask = true, bool showProgress = true ); - - /** - * Starts and returns a TDEIO::DeleteJob to delete the given @p items. - * - * @param items the list of items to be deleted - * @param parent the parent widget used for the confirmation dialog - * @param ask specifies whether a confirmation dialog should be shown - * @param showProgress passed to the DeleteJob to show a progress dialog - * @since 3.1 - */ - // ### KDE4: make virtual - TDEIO::DeleteJob * del( const KFileItemList& items, TQWidget *parent, - bool ask = true, bool showProgress = true ); - - /** - * Clears the forward and backward history. - */ - void clearHistory(); - - /** - * When going up in the directory hierarchy, KDirOperator can highlight - * the directory that was just left. - * - * I.e. when you go from /home/gis/src to /home/gis, the item "src" will - * be made the current item. - * - * Default is off, because this behavior introduces bug #136630. - * Don't enable until this bug is fixed. - */ - // ### KDE4: make virtual - void setEnableDirHighlighting( bool enable ); - - /** - * @returns whether the last directory will be made the current item - * when going up in the directory hierarchy. - * - * Default is false. - */ - bool dirHighlighting() const; - - /** - * @returns true if we are in directory-only mode, that is, no files are - * shown. - */ - bool dirOnlyMode() const { return dirOnlyMode( myMode ); } - - static bool dirOnlyMode( uint mode ) { - return ( (mode & KFile::Directory) && - (mode & (KFile::File | KFile::Files)) == 0 ); - } - - /** - * Sets up the action menu. - * @param whichActions is an value of OR'd ActionTypes that controls which actions to show in the action menu - */ - void setupMenu(int whichActions); - - /** - * Reimplemented - allow dropping of files if @p b is true - * @param b true if the widget should allow dropping of files - */ - virtual void setAcceptDrops(bool b); - - /** - * Sets the options for dropping files. - * @see KFileView::DropOptions - * @since 3.2 - */ - // ### KDE4: make virtual - void setDropOptions(int options); - - /** - * Starts and returns a TDEIO::CopyJob to trash the given @p items. - * - * @param items the list of items to be trashed - * @param parent the parent widget used for the confirmation dialog - * @param ask specifies whether a confirmation dialog should be shown - * @param showProgress passed to the CopyJob to show a progress dialog - * @since 3.4 - */ - // ### KDE4: make virtual - TDEIO::CopyJob * trash( const KFileItemList& items, TQWidget *parent, - bool ask = true, bool showProgress = true ); - -protected: - /** - * A view factory for creating predefined fileviews. Called internally by setView - * , but you can also call it directly. Reimplement this if you depend on self defined fileviews. - * @param parent is the TQWidget to be set as parent - * @param view is the predefined view to be set, note: this can be several ones OR:ed together. - * @returns the created KFileView - * @see KFileView - * @see KCombiView - * @see KFileDetailView - * @see KFileIconView - * @see KFilePreview - * @see KFile::FileView - * @see setView - */ - virtual KFileView* createView( TQWidget* parent, KFile::FileView view ); - /** - * Sets a custom KDirLister to list directories. - */ - // ### KDE4: make virtual - void setDirLister( KDirLister *lister ); - - virtual void resizeEvent( TQResizeEvent * ); - - /** - * Sets up all the actions. Called from the constructor, you usually - * better not call this. - */ - void setupActions(); - - /** - * Updates the sorting-related actions to comply with the current sorting - * @see sorting - */ - void updateSortActions(); - - /** - * Updates the view-related actions to comply with the current - * KFile::FileView - */ - void updateViewActions(); - - /** - * Sets up the context-menu with all the necessary actions. Called from the - * constructor, you usually don't need to call this. - * @since 3.1 - */ - void setupMenu(); - - /** - * Synchronizes the completion objects with the entries of the - * currently listed url. - * - * Automatically called from makeCompletion() and - * makeDirCompletion() - */ - void prepareCompletionObjects(); - - /** - * Checks if there support from TDEIO::PreviewJob for the currently - * shown files, taking mimeFilter() and nameFilter() into account - * Enables/disables the preview-action accordingly. - */ - bool checkPreviewSupport(); - -public slots: - /** - * Goes one step back in the history and opens that url. - */ - // ### KDE4: make virtual - void back(); - - /** - * Goes one step forward in the history and opens that url. - */ - // ### KDE4: make virtual - void forward(); - - /** - * Enters the home directory. - */ - // ### KDE4: make virtual - void home(); - - /** - * Goes one directory up from the current url. - */ - // ### KDE4: make virtual - void cdUp(); - - /** - * to update the view after changing the settings - */ - void updateDir(); - - /** - * Re-reads the current url. - */ - // ### KDE4: make virtual - void rereadDir(); - - /** - * Opens a dialog to create a new directory. - */ - // ### KDE4: make virtual - void mkdir(); - - /** - * Deletes the currently selected files/directories. - */ - // ### KDE4: make virtual - void deleteSelected(); - - /** - * Enables/disables actions that are selection dependent. Call this e.g. - * when you are about to show a popup menu using some of KDirOperators - * actions. - */ - void updateSelectionDependentActions(); - - /** - * Tries to complete the given string (only completes files). - */ - TQString makeCompletion(const TQString&); - - /** - * Tries to complete the given string (only completes directores). - */ - TQString makeDirCompletion(const TQString&); - - /** - * Trashes the currently selected files/directories. - * @since 3.4 - */ - // ### KDE4: make virtual - void trashSelected(KAction::ActivationReason, TQt::ButtonState); - -protected slots: - /** - * Restores the normal cursor after showing the busy-cursor. Also hides - * the progressbar. - */ - void resetCursor(); - - /** - * Called after setURL() to load the directory, update the history, - * etc. - */ - void pathChanged(); - - /** - * Adds a new list of KFileItems to the view - * (coming from KDirLister) - */ - void insertNewFiles(const KFileItemList &newone); - - /** - * Removes the given KFileItem item from the view (usually called from - * KDirLister). - */ - void itemDeleted(KFileItem *); - - /** - * Enters the directory specified by the given @p item. - */ - // ### KDE4: make virtual - void selectDir(const KFileItem *item ); - - /** - * Emits fileSelected( item ) - */ - void selectFile(const KFileItem *item); - - /** - * Emits fileHighlighted( i ) - */ - void highlightFile(const KFileItem* i) { emit fileHighlighted( i ); } - - /** - * Called upon right-click to activate the popupmenu. - */ - virtual void activatedMenu( const KFileItem *, const TQPoint& pos ); - - /** - * Changes sorting to sort by name - */ - void sortByName() { byNameAction->setChecked( true ); } - - /** - * Changes sorting to sort by size - */ - void sortBySize() { bySizeAction->setChecked( true ); } - - /** - * Changes sorting to sort by date - */ - void sortByDate() { byDateAction->setChecked( true ); } - - /** - * Changes sorting to reverse sorting - */ - void sortReversed() { reverseAction->setChecked( !reverseAction->isChecked() ); } - - /** - * Toggles showing directories first / having them sorted like files. - */ - void toggleDirsFirst() { dirsFirstAction->setChecked( !dirsFirstAction->isChecked() ); } - - /** - * Toggles case sensitive / case insensitive sorting - */ - void toggleIgnoreCase() { caseInsensitiveAction->setChecked( !caseInsensitiveAction->isChecked() ); } - - /** - * Tries to make the given @p match as current item in the view and emits - * completion( match ) - */ - void slotCompletionMatch(const TQString& match); - -signals: - void urlEntered(const KURL& ); - void updateInformation(int files, int dirs); - void completion(const TQString&); - void finishedLoading(); - - /** - * Emitted whenever the current fileview is changed, either by an explicit - * call to setView() or by the user selecting a different view thru - * the GUI. - */ - void viewChanged( KFileView * newView ); - - /** - * Emitted when a file is highlighted or generally the selection changes in - * multiselection mode. In the latter case, @p item is 0L. You can access - * the selected items with selectedItems(). - */ - void fileHighlighted( const KFileItem *item ); - void dirActivated( const KFileItem *item ); - void fileSelected( const KFileItem *item ); - /** - * Emitted when files are dropped. Dropping files is disabled by - * default. You need to enable it with setAcceptDrops() - * @param item the item on which the drop occurred or 0. - * @param event the drop event itself. - * @param urls the urls that where dropped. - * @since 3.2 - */ - void dropped(const KFileItem *item, TQDropEvent*event, const KURL::List&urls); -private: - /** - * Contains all URLs you can reach with the back button. - */ - TQPtrStack<KURL> backStack; - - /** - * Contains all URLs you can reach with the forward button. - */ - TQPtrStack<KURL> forwardStack; - - KDirLister *dir; - KURL currUrl; - - KCompletion myCompletion; - KCompletion myDirCompletion; - bool myCompleteListDirty; - TQDir::SortSpec mySorting; - - /** - * Checks whether we preview support is available for the current - * mimetype/namefilter - */ - bool checkPreviewInternal() const; - - /** - * takes action on the new location. If it's a directory, change - * into it, if it's a file, correct the name, etc. - */ - void checkPath(const TQString& txt, bool takeFiles = false); - - void connectView(KFileView *); - - bool openURL( const KURL& url, bool keep = false, bool reload = false ); - - KFileView *m_fileView; - KFileItemList pendingMimeTypes; - - // the enum KFile::FileView as an int - int m_viewKind; - int defaultView; - - KFile::Mode myMode; - KProgress *progress; - - const TQWidget *myPreview; // temporary pointer for the preview widget - - // actions for the popupmenus - // ### clean up all those -- we have them all in the actionMenu! - KActionMenu *actionMenu; - - KAction *backAction; - KAction *forwardAction; - KAction *homeAction; - KAction *upAction; - KAction *reloadAction; - KActionSeparator *actionSeparator; - KAction *mkdirAction; - - KActionMenu *sortActionMenu; - KRadioAction *byNameAction; - KRadioAction *byDateAction; - KRadioAction *bySizeAction; - KToggleAction *reverseAction; - KToggleAction *dirsFirstAction; - KToggleAction *caseInsensitiveAction; - - KActionMenu *viewActionMenu; - KRadioAction *shortAction; - KRadioAction *detailedAction; - KToggleAction *showHiddenAction; - KToggleAction *separateDirsAction; - - KActionCollection *myActionCollection; - KActionCollection *viewActionCollection; - -private slots: - /** - * @internal - */ - void slotDetailedView(); - void slotSimpleView(); - void slotToggleHidden( bool ); - - void slotSeparateDirs(); - void slotDefaultPreview(); - void togglePreview( bool ); - - void slotSortByName(); - void slotSortBySize(); - void slotSortByDate(); - void slotSortReversed(); - void slotToggleDirsFirst(); - void slotToggleIgnoreCase(); - - void slotStarted(); - void slotProgress( int ); - void slotShowProgress(); - void slotIOFinished(); - void slotCanceled(); - void slotRedirected( const KURL& ); - - void slotViewActionAdded( KAction * ); - void slotViewActionRemoved( KAction * ); - void slotViewSortingChanged( TQDir::SortSpec ); - - void slotClearView(); - void slotRefreshItems( const KFileItemList& items ); - - void slotProperties(); - - void insertViewDependentActions(); - -private: - static bool isReadable( const KURL& url ); - -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KDirOperatorPrivate; - KDirOperatorPrivate *d; -}; - -#endif diff --git a/kio/kfile/kdirselectdialog.cpp b/kio/kfile/kdirselectdialog.cpp deleted file mode 100644 index 48dd3a2e4..000000000 --- a/kio/kfile/kdirselectdialog.cpp +++ /dev/null @@ -1,481 +0,0 @@ -/* - Copyright (C) 2001,2002 Carsten Pfeiffer <pfeiffer@kde.org> - Copyright (C) 2001 Michael Jarrett <michaelj@corel.com> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <tqdir.h> -#include <tqlayout.h> -#include <tqpopupmenu.h> -#include <tqstringlist.h> -#include <tqvaluestack.h> - -#include <kactionclasses.h> -#include <kapplication.h> -#include <kcombobox.h> -#include <kconfig.h> -#include <kfiledialog.h> -#include <kfilespeedbar.h> -#include <kglobalsettings.h> -#include <kiconloader.h> -#include <klocale.h> -#include <kprotocolinfo.h> -#include <krecentdirs.h> -#include <kshell.h> -#include <kurl.h> -#include <kurlcompletion.h> -#include <kurlpixmapprovider.h> -#include <kinputdialog.h> -#include <kio/netaccess.h> -#include <kio/renamedlg.h> -#include <kmessagebox.h> - -#include "kfiletreeview.h" -#include "kdirselectdialog.h" - -// ### add mutator for treeview! - -class KDirSelectDialog::KDirSelectDialogPrivate -{ -public: - KDirSelectDialogPrivate() - { - urlCombo = 0L; - branch = 0L; - comboLocked = false; - } - - KFileSpeedBar *speedBar; - KHistoryCombo *urlCombo; - KFileTreeBranch *branch; - TQString recentDirClass; - KURL startURL; - TQValueStack<KURL> dirsToList; - - bool comboLocked : 1; -}; - -static KURL rootUrl(const KURL &url) -{ - KURL root = url; - root.setPath( "/" ); - - if (!kapp->authorizeURLAction("list", KURL(), root)) - { - root = KURL::fromPathOrURL( TQDir::homeDirPath() ); - if (!kapp->authorizeURLAction("list", KURL(), root)) - { - root = url; - } - } - return root; -} - -KDirSelectDialog::KDirSelectDialog(const TQString &startDir, bool localOnly, - TQWidget *parent, const char *name, - bool modal) - : KDialogBase( parent, name, modal, i18n("Select Folder"), - Ok|Cancel|User1, Ok, false, - KGuiItem( i18n("New Folder..."), "folder_new" ) ), - m_localOnly( localOnly ) -{ - d = new KDirSelectDialogPrivate; - d->branch = 0L; - - TQFrame *page = makeMainWidget(); - TQHBoxLayout *hlay = new TQHBoxLayout( page, 0, spacingHint() ); - m_mainLayout = new TQVBoxLayout(); - d->speedBar = new KFileSpeedBar( page, "speedbar" ); - connect( d->speedBar, TQT_SIGNAL( activated( const KURL& )), - TQT_SLOT( setCurrentURL( const KURL& )) ); - hlay->addWidget( d->speedBar, 0 ); - hlay->addLayout( m_mainLayout, 1 ); - - // Create dir list - m_treeView = new KFileTreeView( page ); - m_treeView->addColumn( i18n("Folders") ); - m_treeView->setColumnWidthMode( 0, TQListView::Maximum ); - m_treeView->setResizeMode( TQListView::AllColumns ); - - d->urlCombo = new KHistoryCombo( page, "url combo" ); - d->urlCombo->setTrapReturnKey( true ); - d->urlCombo->setPixmapProvider( new KURLPixmapProvider() ); - KURLCompletion *comp = new KURLCompletion(); - comp->setMode( KURLCompletion::DirCompletion ); - d->urlCombo->setCompletionObject( comp, true ); - d->urlCombo->setAutoDeleteCompletionObject( true ); - d->urlCombo->setDuplicatesEnabled( false ); - connect( d->urlCombo, TQT_SIGNAL( textChanged( const TQString& ) ), - TQT_SLOT( slotComboTextChanged( const TQString& ) )); - - m_contextMenu = new TQPopupMenu( this ); - KAction* newFolder = new KAction( i18n("New Folder..."), "folder_new", 0, TQT_TQOBJECT(this), TQT_SLOT( slotMkdir() ), TQT_TQOBJECT(this)); - newFolder->plug(m_contextMenu); - m_contextMenu->insertSeparator(); - m_showHiddenFolders = new KToggleAction ( i18n( "Show Hidden Folders" ), 0, TQT_TQOBJECT(this), - TQT_SLOT( slotShowHiddenFoldersToggled() ), TQT_TQOBJECT(this)); - m_showHiddenFolders->plug(m_contextMenu); - - d->startURL = KFileDialog::getStartURL( startDir, d->recentDirClass ); - if ( localOnly && !d->startURL.isLocalFile() ) - { - d->startURL = KURL(); - TQString docPath = TDEGlobalSettings::documentPath(); - if (TQDir(docPath).exists()) - d->startURL.setPath( docPath ); - else - d->startURL.setPath( TQDir::homeDirPath() ); - } - - KURL root = rootUrl(d->startURL); - - m_startDir = d->startURL.url(); - - d->branch = createBranch( root ); - - readConfig( TDEGlobal::config(), "DirSelect Dialog" ); - - m_mainLayout->addWidget( m_treeView, 1 ); - m_mainLayout->addWidget( d->urlCombo, 0 ); - - connect( m_treeView, TQT_SIGNAL( currentChanged( TQListViewItem * )), - TQT_SLOT( slotCurrentChanged() )); - connect( m_treeView, TQT_SIGNAL( contextMenu( KListView *, TQListViewItem *, const TQPoint & )), - TQT_SLOT( slotContextMenu( KListView *, TQListViewItem *, const TQPoint & ))); - - connect( d->urlCombo, TQT_SIGNAL( activated( const TQString& )), - TQT_SLOT( slotURLActivated( const TQString& ))); - connect( d->urlCombo, TQT_SIGNAL( returnPressed( const TQString& )), - TQT_SLOT( slotURLActivated( const TQString& ))); - - setCurrentURL( d->startURL ); -} - - -KDirSelectDialog::~KDirSelectDialog() -{ - delete d; -} - -void KDirSelectDialog::setCurrentURL( const KURL& url ) -{ - if ( !url.isValid() ) - return; - - KURL root = rootUrl(url); - - d->startURL = url; - if ( !d->branch || - url.protocol() != d->branch->url().protocol() || - url.host() != d->branch->url().host() ) - { - if ( d->branch ) - { - // removing the root-item causes the currentChanged() signal to be - // emitted, but we don't want to update the location-combo yet. - d->comboLocked = true; - view()->removeBranch( d->branch ); - d->comboLocked = false; - } - - d->branch = createBranch( root ); - } - - d->branch->disconnect( TQT_SIGNAL( populateFinished( KFileTreeViewItem * )), - this, TQT_SLOT( slotNextDirToList( KFileTreeViewItem *))); - connect( d->branch, TQT_SIGNAL( populateFinished( KFileTreeViewItem * )), - TQT_SLOT( slotNextDirToList( KFileTreeViewItem * ) )); - - KURL dirToList = root; - d->dirsToList.clear(); - TQString path = url.path(+1); - int pos = path.length(); - - if ( path.isEmpty() ) // e.g. ftp://host.com/ -> just list the root dir - d->dirsToList.push( root ); - - else - { - while ( pos > 0 ) - { - pos = path.findRev( '/', pos -1 ); - if ( pos >= 0 ) - { - dirToList.setPath( path.left( pos +1 ) ); - d->dirsToList.push( dirToList ); -// tqDebug( "List: %s", dirToList.url().latin1()); - } - } - } - - if ( !d->dirsToList.isEmpty() ) - openNextDir( d->branch->root() ); -} - -void KDirSelectDialog::openNextDir( KFileTreeViewItem * /*parent*/ ) -{ - if ( !d->branch ) - return; - - KURL url = d->dirsToList.pop(); - - KFileTreeViewItem *item = view()->findItem( d->branch, url.path().mid(1)); - if ( item ) - { - if ( !item->isOpen() ) - item->setOpen( true ); - else // already open -> go to next one - slotNextDirToList( item ); - } -// else -// tqDebug("###### openNextDir: item not found!"); -} - -void KDirSelectDialog::slotNextDirToList( KFileTreeViewItem *item ) -{ - // scroll to make item the topmost item - view()->ensureItemVisible( item ); - TQRect r = view()->itemRect( item ); - if ( r.isValid() ) - { - int x, y; - view()->viewportToContents( view()->contentsX(), r.y(), x, y ); - view()->setContentsPos( x, y ); - } - - if ( !d->dirsToList.isEmpty() ) - openNextDir( item ); - else - { - d->branch->disconnect( TQT_SIGNAL( populateFinished( KFileTreeViewItem * )), - this, TQT_SLOT( slotNextDirToList( KFileTreeViewItem *))); - view()->setCurrentItem( item ); - item->setSelected( true ); - } -} - -void KDirSelectDialog::readConfig( TDEConfig *config, const TQString& group ) -{ - d->urlCombo->clear(); - - TDEConfigGroup conf( config, group ); - d->urlCombo->setHistoryItems( conf.readPathListEntry( "History Items" )); - - TQSize defaultSize( 400, 450 ); - resize( conf.readSizeEntry( "DirSelectDialog Size", &defaultSize )); -} - -void KDirSelectDialog::saveConfig( TDEConfig *config, const TQString& group ) -{ - TDEConfigGroup conf( config, group ); - conf.writePathEntry( "History Items", d->urlCombo->historyItems(), ',', - true, true); - conf.writeEntry( "DirSelectDialog Size", size(), true, true ); - - d->speedBar->save( config ); - - config->sync(); -} - -void KDirSelectDialog::slotUser1() -{ - slotMkdir(); -} - -void KDirSelectDialog::accept() -{ - KFileTreeViewItem *item = m_treeView->currentKFileTreeViewItem(); - if ( !item ) - return; - - if ( !d->recentDirClass.isEmpty() ) - { - KURL dir = item->url(); - if ( !item->isDir() ) - dir = dir.upURL(); - - KRecentDirs::add(d->recentDirClass, dir.url()); - } - - d->urlCombo->addToHistory( item->url().prettyURL() ); - KFileDialog::setStartDir( url() ); - - KDialogBase::accept(); - saveConfig( TDEGlobal::config(), "DirSelect Dialog" ); -} - - -KURL KDirSelectDialog::url() const -{ - return m_treeView->currentURL(); -} - -void KDirSelectDialog::slotCurrentChanged() -{ - if ( d->comboLocked ) - return; - - KFileTreeViewItem *current = view()->currentKFileTreeViewItem(); - KURL u = current ? current->url() : (d->branch ? d->branch->rootUrl() : KURL()); - - if ( u.isValid() ) - { - if ( u.isLocalFile() ) - d->urlCombo->setEditText( u.path() ); - - else // remote url - d->urlCombo->setEditText( u.prettyURL() ); - } - else - d->urlCombo->setEditText( TQString::null ); -} - -void KDirSelectDialog::slotURLActivated( const TQString& text ) -{ - if ( text.isEmpty() ) - return; - - KURL url = KURL::fromPathOrURL( text ); - d->urlCombo->addToHistory( url.prettyURL() ); - - if ( localOnly() && !url.isLocalFile() ) - return; // ### messagebox - - KURL oldURL = m_treeView->currentURL(); - if ( oldURL.isEmpty() ) - oldURL = KURL::fromPathOrURL( m_startDir ); - - setCurrentURL( url ); -} - -KFileTreeBranch * KDirSelectDialog::createBranch( const KURL& url ) -{ - TQString title = url.isLocalFile() ? url.path() : url.prettyURL(); - KFileTreeBranch *branch = view()->addBranch( url, title, m_showHiddenFolders->isChecked() ); - branch->setChildRecurse( false ); - view()->setDirOnlyMode( branch, true ); - - return branch; -} - -void KDirSelectDialog::slotComboTextChanged( const TQString& text ) -{ - if ( d->branch ) - { - KURL url = KURL::fromPathOrURL( KShell::tildeExpand( text ) ); - KFileTreeViewItem *item = d->branch->findTVIByURL( url ); - if ( item ) - { - view()->setCurrentItem( item ); - view()->setSelected( item, true ); - view()->ensureItemVisible( item ); - return; - } - } - - TQListViewItem *item = view()->currentItem(); - if ( item ) - { - item->setSelected( false ); - // 2002/12/27, deselected item is not repainted, so force it - item->repaint(); - } -} - -void KDirSelectDialog::slotContextMenu( KListView *, TQListViewItem *, const TQPoint& pos ) -{ - m_contextMenu->popup( pos ); -} - -void KDirSelectDialog::slotMkdir() -{ - bool ok; - TQString where = url().pathOrURL(); - TQString name = i18n( "New Folder" ); - if ( url().isLocalFile() && TQFileInfo( url().path(+1) + name ).exists() ) - name = TDEIO::RenameDlg::suggestName( url(), name ); - - TQString directory = TDEIO::encodeFileName( KInputDialog::getText( i18n( "New Folder" ), - i18n( "Create new folder in:\n%1" ).arg( where ), - name, &ok, this)); - if (!ok) - return; - - bool selectDirectory = true; - bool writeOk = false; - bool exists = false; - KURL folderurl( url() ); - - TQStringList dirs = TQStringList::split( TQDir::separator(), directory ); - TQStringList::ConstIterator it = dirs.begin(); - - for ( ; it != dirs.end(); ++it ) - { - folderurl.addPath( *it ); - exists = TDEIO::NetAccess::exists( folderurl, false, 0 ); - writeOk = !exists && TDEIO::NetAccess::mkdir( folderurl, topLevelWidget() ); - } - - if ( exists ) // url was already existant - { - TQString which = folderurl.isLocalFile() ? folderurl.path() : folderurl.prettyURL(); - KMessageBox::sorry(this, i18n("A file or folder named %1 already exists.").arg(which)); - selectDirectory = false; - } - else if ( !writeOk ) { - KMessageBox::sorry(this, i18n("You do not have permission to create that folder." )); - } - else if ( selectDirectory ) { - setCurrentURL( folderurl ); - } -} - -void KDirSelectDialog::slotShowHiddenFoldersToggled() -{ - KURL currentURL = url(); - - d->comboLocked = true; - view()->removeBranch( d->branch ); - d->comboLocked = false; - - KURL root = rootUrl(d->startURL); - d->branch = createBranch( root ); - - setCurrentURL( currentURL ); -} - -// static -KURL KDirSelectDialog::selectDirectory( const TQString& startDir, - bool localOnly, - TQWidget *parent, - const TQString& caption) -{ - KDirSelectDialog myDialog( startDir, localOnly, parent, - "kdirselect dialog", true ); - - if ( !caption.isNull() ) - myDialog.setCaption( caption ); - - if ( myDialog.exec() == TQDialog::Accepted ) - return TDEIO::NetAccess::mostLocalURL(myDialog.url(),parent); - else - return KURL(); -} - -void KDirSelectDialog::virtual_hook( int id, void* data ) -{ KDialogBase::virtual_hook( id, data ); } - -#include "kdirselectdialog.moc" diff --git a/kio/kfile/kdirselectdialog.h b/kio/kfile/kdirselectdialog.h deleted file mode 100644 index 746064c68..000000000 --- a/kio/kfile/kdirselectdialog.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - Copyright (C) 2001 Michael Jarrett <michaelj@corel.com> - Copyright (C) 2001 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef KDIRSELECTDIALOG_H -#define KDIRSELECTDIALOG_H - -#include <kdialogbase.h> -#include <kurl.h> - -class TQPopupMenu; -class TQVBoxLayout; -class TDEConfig; -class KFileTreeBranch; -class KFileTreeView; -class KFileTreeViewItem; -class KToggleAction; - -/** - * A pretty dialog for a KDirSelect control for selecting directories. - * @author Michael Jarrett <michaelj@corel.com> - * @see KFileDialog - */ -class TDEIO_EXPORT KDirSelectDialog : public KDialogBase -{ - Q_OBJECT - -public: - /** - * The constructor. Creates a dialog to select a directory (url). - * @internal use the static selectDirectory function - * @param startDir the directory, initially shown - * @param localOnly unused. You can only select paths below the startDir - * @param parent the parent for the dialog, usually 0L - * @param name the TQObject::name - * @param modal if the dialog is modal or not - */ - KDirSelectDialog(const TQString& startDir = TQString::null, - bool localOnly = false, - TQWidget *parent = 0L, - const char *name = 0, bool modal = false); - - /** - */ - ~KDirSelectDialog(); - - /** - * Returns the currently-selected URL, or a blank URL if none is selected. - * @return The currently-selected URL, if one was selected. - */ - KURL url() const; - - KFileTreeView * view() const { return m_treeView; } - - bool localOnly() const { return m_localOnly; } - - /** - * Creates a KDirSelectDialog, and returns the result. - * @param startDir the directory, initially shown - * The tree will display this directory and subdirectories of it. - * @param localOnly unused. You can only select paths below the startDir - * @param parent the parent widget to use for the dialog, or NULL to create a parent-less dialog - * @param caption the caption to use for the dialog, or TQString::null for the default caption - * @return The URL selected, or an empty URL if the user canceled - * or no URL was selected. - */ - static KURL selectDirectory( const TQString& startDir = TQString::null, - bool localOnly = false, TQWidget *parent = 0L, - const TQString& caption = TQString::null); - - /** - * @return The path for the root node - */ - TQString startDir() const { return m_startDir; } - -public slots: - void setCurrentURL( const KURL& url ); - -protected slots: - virtual void slotUser1(); - -protected: - virtual void accept(); - - // Layouts protected so that subclassing is easy - TQVBoxLayout *m_mainLayout; - TQString m_startDir; - -private slots: - void slotCurrentChanged(); - void slotURLActivated( const TQString& ); - void slotNextDirToList( KFileTreeViewItem *dirItem ); - void slotComboTextChanged( const TQString& text ); - void slotContextMenu( KListView *, TQListViewItem *, const TQPoint & ); - void slotShowHiddenFoldersToggled(); - void slotMkdir(); - -private: - void readConfig( TDEConfig *config, const TQString& group ); - void saveConfig( TDEConfig *config, const TQString& group ); - void openNextDir( KFileTreeViewItem *parent ); - KFileTreeBranch * createBranch( const KURL& url ); - - KFileTreeView *m_treeView; - TQPopupMenu *m_contextMenu; - KToggleAction *m_showHiddenFolders; - bool m_localOnly; - -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KDirSelectDialogPrivate; - KDirSelectDialogPrivate *d; -}; - -#endif diff --git a/kio/kfile/kdirsize.cpp b/kio/kfile/kdirsize.cpp deleted file mode 100644 index 14936679a..000000000 --- a/kio/kfile/kdirsize.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2000 David Faure <faure@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include "kdirsize.h" -#include <kdebug.h> -#include <kglobal.h> -#include <tqapplication.h> -#include <tqtimer.h> -#include <config-kfile.h> - -using namespace TDEIO; - -KDirSize::KDirSize( const KURL & directory ) - : TDEIO::Job(false /*No GUI*/), m_bAsync(true), m_totalSize(0L), m_totalFiles(0L), m_totalSubdirs(0L) -{ - startNextJob( directory ); -} - -KDirSize::KDirSize( const KFileItemList & lstItems ) - : TDEIO::Job(false /*No GUI*/), m_bAsync(true), m_totalSize(0L), m_totalFiles(0L), m_totalSubdirs(0L), m_lstItems(lstItems) -{ - TQTimer::singleShot( 0, this, TQT_SLOT(processList()) ); -} - -void KDirSize::processList() -{ - while (!m_lstItems.isEmpty()) - { - KFileItem * item = m_lstItems.first(); - m_lstItems.removeFirst(); - if ( !item->isLink() ) - { - if ( item->isDir() ) - { - kdDebug(kfile_area) << "KDirSize::processList dir -> listing" << endl; - KURL url = item->url(); - startNextJob( url ); - return; // we'll come back later, when this one's finished - } - else - { - m_totalSize += item->size(); -// no long long with kdDebug() -// kdDebug(kfile_area) << "KDirSize::processList file -> " << m_totalSize << endl; - } - } - } - kdDebug(kfile_area) << "KDirSize::processList finished" << endl; - if ( !m_bAsync ) - tqApp->exit_loop(); - emitResult(); -} - -void KDirSize::startNextJob( const KURL & url ) -{ - TDEIO::ListJob * listJob = TDEIO::listRecursive( url, false /* no GUI */ ); - connect( listJob, TQT_SIGNAL(entries( TDEIO::Job *, - const TDEIO::UDSEntryList& )), - TQT_SLOT( slotEntries( TDEIO::Job*, - const TDEIO::UDSEntryList& ))); - addSubjob( listJob ); -} - -void KDirSize::slotEntries( TDEIO::Job*, const TDEIO::UDSEntryList & list ) -{ - static const TQString& dot = TDEGlobal::staticQString( "." ); - static const TQString& dotdot = TDEGlobal::staticQString( ".." ); - TDEIO::UDSEntryListConstIterator it = list.begin(); - TDEIO::UDSEntryListConstIterator end = list.end(); - for (; it != end; ++it) { - TDEIO::UDSEntry::ConstIterator it2 = (*it).begin(); - TDEIO::filesize_t size = 0; - bool isLink = false; - bool isDir = false; - TQString name; - for( ; it2 != (*it).end(); it2++ ) { - switch( (*it2).m_uds ) { - case TDEIO::UDS_NAME: - name = (*it2).m_str; - break; - case TDEIO::UDS_LINK_DEST: - isLink = !(*it2).m_str.isEmpty(); - break; - case TDEIO::UDS_SIZE: - size = ((*it2).m_long); - break; - case TDEIO::UDS_FILE_TYPE: - isDir = S_ISDIR((*it2).m_long); - break; - default: - break; - } - } - if ( name == dot ) - m_totalSize += size; - else if ( name != dotdot ) - { - if (!isLink) - m_totalSize += size; - if (!isDir) - m_totalFiles++; - else - m_totalSubdirs++; - //kdDebug(kfile_area) << name << ":" << size << endl; - } - } -} - -//static -KDirSize * KDirSize::dirSizeJob( const KURL & directory ) -{ - return new KDirSize( directory ); // useless - but consistent with other jobs -} - -//static -KDirSize * KDirSize::dirSizeJob( const KFileItemList & lstItems ) -{ - return new KDirSize( lstItems ); -} - -//static -TDEIO::filesize_t KDirSize::dirSize( const KURL & directory ) -{ - KDirSize * dirSize = dirSizeJob( directory ); - dirSize->setSync(); - tqApp->enter_loop(); - return dirSize->totalSize(); -} - - -void KDirSize::slotResult( TDEIO::Job * job ) -{ - kdDebug(kfile_area) << " KDirSize::slotResult( TDEIO::Job * job ) m_lstItems:" << m_lstItems.count() << endl; - if ( !m_lstItems.isEmpty() ) - { - subjobs.remove(job); // Remove job, but don't kill this job. - processList(); - } - else - { - if ( !m_bAsync ) - tqApp->exit_loop(); - TDEIO::Job::slotResult( job ); - } -} - -void KDirSize::virtual_hook( int id, void* data ) -{ TDEIO::Job::virtual_hook( id, data ); } - -#include "kdirsize.moc" diff --git a/kio/kfile/kdirsize.h b/kio/kfile/kdirsize.h deleted file mode 100644 index b0f2c8fc2..000000000 --- a/kio/kfile/kdirsize.h +++ /dev/null @@ -1,106 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2000 David Faure <faure@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef __KDIRSIZE_H -#define __KDIRSIZE_H - -#include <kio/job.h> -#include <kfileitem.h> - -/** - * Computes a directory size (similar to "du", but doesn't give the same results - * since we simply sum up the dir and file sizes, whereas du speaks disk blocks) - */ -class TDEIO_EXPORT KDirSize : public TDEIO::Job -{ - Q_OBJECT -protected: - KDirSize( const KURL & directory ); - KDirSize( const KFileItemList & lstItems ); - ~KDirSize() {} - -public: - /** - * @return the size we found - */ - TDEIO::filesize_t totalSize() const { return m_totalSize; } - - /** - * @return the total number of files (counting symlinks to files, sockets - * and character devices as files) in this directory and all sub-directories - * @since 3.3 - */ - TDEIO::filesize_t totalFiles() const { return m_totalFiles; } - - /** - * @return the total number of sub-directories found (not including the - * directory the search started from and treating symlinks to directories - * as directories) - * @since 3.3 - */ - TDEIO::filesize_t totalSubdirs() const { return m_totalSubdirs; } - - /** - * Asynchronous method. Connect to the result signal. - * This one lists a single directory. - */ - static KDirSize * dirSizeJob( const KURL & directory ); - - /** - * Asynchronous method. Connect to the result signal. - * This one lists the items from @p lstItems. - * The reason we asks for items instead of just urls, is so that - * we directly know if the item is a file or a directory, - * and in case of a file, we already have its size. - */ - static KDirSize * dirSizeJob( const KFileItemList & lstItems ); - - /** - * Synchronous method - you get the result as soon as - * the call returns. - */ - static TDEIO::filesize_t dirSize( const KURL & directory ); - -protected: - /** - * @internal - */ - void setSync() { m_bAsync = false; } - - void startNextJob( const KURL & url ); - -protected slots: - - virtual void slotResult( TDEIO::Job *job ); - void slotEntries( TDEIO::Job * , const TDEIO::UDSEntryList &); - void processList(); - -private: - bool m_bAsync; - TDEIO::filesize_t m_totalSize; - TDEIO::filesize_t m_totalFiles; - TDEIO::filesize_t m_totalSubdirs; - KFileItemList m_lstItems; -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KDirSize* d; -}; - -#endif diff --git a/kio/kfile/kdiskfreesp.cpp b/kio/kfile/kdiskfreesp.cpp deleted file mode 100644 index 18245bdcd..000000000 --- a/kio/kfile/kdiskfreesp.cpp +++ /dev/null @@ -1,169 +0,0 @@ -/* - * kdiskfreesp.cpp - * - * Copyright (c) 1999 Michael Kropfberger <michael.kropfberger@gmx.net> - * - * Requires the Qt widget libraries, available at no cost at - * http://www.troll.no/ - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "kdiskfreesp.h" -#include <tqfile.h> -#include <tqtextstream.h> - -#include <kdebug.h> -#include <kprocess.h> -#include <kio/global.h> -#include <config-kfile.h> - -#include "kdiskfreesp.moc" - -#define DF_COMMAND "df" -#define DF_ARGS "-k" -#define NO_FS_TYPE true - -#define BLANK ' ' -#define FULL_PERCENT 95.0 - -/*************************************************************************** - * constructor -**/ -KDiskFreeSp::KDiskFreeSp(TQObject *parent, const char *name) - : TQObject(parent,name) -{ - dfProc = new TDEProcess(); TQ_CHECK_PTR(dfProc); - dfProc->setEnvironment("LANGUAGE", "C"); - connect( dfProc, TQT_SIGNAL(receivedStdout(TDEProcess *, char *, int) ), - this, TQT_SLOT (receivedDFStdErrOut(TDEProcess *, char *, int)) ); - connect(dfProc,TQT_SIGNAL(processExited(TDEProcess *) ), - this, TQT_SLOT(dfDone() ) ); - - readingDFStdErrOut=false; -} - - -/*************************************************************************** - * destructor -**/ -KDiskFreeSp::~KDiskFreeSp() -{ - delete dfProc; -} - -/*************************************************************************** - * is called, when the df-command writes on StdOut -**/ -void KDiskFreeSp::receivedDFStdErrOut(TDEProcess *, char *data, int len) -{ - TQCString tmp(data,len+1); // adds a zero-byte - dfStringErrOut.append(tmp); -} - -/*************************************************************************** - * reads the df-commands results -**/ -int KDiskFreeSp::readDF( const TQString & mountPoint ) -{ - if (readingDFStdErrOut || dfProc->isRunning()) - return -1; - m_mountPoint = mountPoint; - dfStringErrOut=""; // yet no data received - dfProc->clearArguments(); - (*dfProc) << TQString::fromLocal8Bit(DF_COMMAND) << TQString::fromLocal8Bit(DF_ARGS); - if (!dfProc->start( TDEProcess::NotifyOnExit, TDEProcess::AllOutput )) - kdError() << "could not execute ["<< DF_COMMAND << "]" << endl; - return 1; -} - - -/*************************************************************************** - * is called, when the df-command has finished -**/ -void KDiskFreeSp::dfDone() -{ - readingDFStdErrOut=true; - - TQTextStream t (dfStringErrOut, IO_ReadOnly); - TQString s=t.readLine(); - if ( (s.isEmpty()) || ( s.left(10) != TQString::fromLatin1("Filesystem") ) ) - kdError() << "Error running df command... got [" << s << "]" << endl; - while ( !t.eof() ) { - TQString u,v; - s=t.readLine(); - s=s.simplifyWhiteSpace(); - if ( !s.isEmpty() ) { - //kdDebug(kfile_area) << "GOT: [" << s << "]" << endl; - - if (s.find(BLANK)<0) // devicename was too long, rest in next line - if ( !t.eof() ) { // just appends the next line - v=t.readLine(); - s=s.append(v); - s=s.simplifyWhiteSpace(); - //kdDebug(kfile_area) << "SPECIAL GOT: [" << s << "]" << endl; - }//if silly linefeed - - //kdDebug(kfile_area) << "[" << s << "]" << endl; - - //TQString deviceName = s.left(s.find(BLANK)); - s=s.remove(0,s.find(BLANK)+1 ); - //kdDebug(kfile_area) << " DeviceName: [" << deviceName << "]" << endl; - - if (!NO_FS_TYPE) - s=s.remove(0,s.find(BLANK)+1 ); // eat fs type - - u=s.left(s.find(BLANK)); - unsigned long kBSize = u.toULong(); - s=s.remove(0,s.find(BLANK)+1 ); - //kdDebug(kfile_area) << " Size: [" << kBSize << "]" << endl; - - u=s.left(s.find(BLANK)); - unsigned long kBUsed = u.toULong(); - s=s.remove(0,s.find(BLANK)+1 ); - //kdDebug(kfile_area) << " Used: [" << kBUsed << "]" << endl; - - u=s.left(s.find(BLANK)); - unsigned long kBAvail = u.toULong(); - s=s.remove(0,s.find(BLANK)+1 ); - //kdDebug(kfile_area) << " Avail: [" << kBAvail << "]" << endl; - - - s=s.remove(0,s.find(BLANK)+1 ); // delete the capacity 94% - TQString mountPoint = s.stripWhiteSpace(); - //kdDebug(kfile_area) << " MountPoint: [" << mountPoint << "]" << endl; - - if ( mountPoint == m_mountPoint ) - { - //kdDebug(kfile_area) << "Found mount point. Emitting" << endl; - emit foundMountPoint( mountPoint, kBSize, kBUsed, kBAvail ); - emit foundMountPoint( kBSize, kBUsed, kBAvail, mountPoint ); // sic! - } - }//if not header - }//while further lines available - - readingDFStdErrOut=false; - emit done(); - delete this; -} - -KDiskFreeSp * KDiskFreeSp::findUsageInfo( const TQString & path ) -{ - KDiskFreeSp * job = new KDiskFreeSp; - TQString mountPoint = TDEIO::findPathMountPoint( path ); - job->readDF( mountPoint ); - return job; -} diff --git a/kio/kfile/kdiskfreesp.h b/kio/kfile/kdiskfreesp.h deleted file mode 100644 index 5ffa47d9a..000000000 --- a/kio/kfile/kdiskfreesp.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * kdiskfreesp.h - * - * Copyright (c) 1999 Michael Kropfberger <michael.kropfberger@gmx.net> - * - * Requires the Qt widget libraries, available at no cost at - * http://www.troll.no/ - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - - -#ifndef __KDISKFREESP_H__ -#define __KDISKFREESP_H__ - -#include <tqobject.h> -#include <tqstring.h> - -#include <tdelibs_export.h> - -class TDEProcess; - -/** - * This class parses the output of "df" to find the disk usage - * information for a given partition (mount point). - */ -class TDEIO_EXPORT KDiskFreeSp : public TQObject -{ Q_OBJECT -public: - KDiskFreeSp( TQObject *parent=0, const char *name=0 ); - /** - * Destructor - this object autodeletes itself when it's done - */ - ~KDiskFreeSp(); - /** - * Call this to fire a search on the disk usage information - * for @p mountPoint. foundMountPoint will be emitted - * if this mount point is found, with the info requested. - * done is emitted in any case. - */ - int readDF( const TQString & mountPoint ); - - /** - * Call this to fire a search on the disk usage information - * for the mount point containing @p path. - * foundMountPoint will be emitted - * if this mount point is found, with the info requested. - * done is emitted in any case. - */ - static KDiskFreeSp * findUsageInfo( const TQString & path ); - -signals: - void foundMountPoint( const TQString & mountPoint, unsigned long kBSize, unsigned long kBUsed, unsigned long kBAvail ); - - // This one is a hack around a weird (compiler?) bug. In the former signal, - // the slot in KPropsDlg would get 0L, 0L as the last two parameters. - // When using const ulong& instead, all is ok. - void foundMountPoint( const unsigned long&, const unsigned long&, const unsigned long&, const TQString& ); - void done(); - -private slots: - void receivedDFStdErrOut(TDEProcess *, char *data, int len); - void dfDone(); - -private: - TDEProcess *dfProc; - TQCString dfStringErrOut; - TQString m_mountPoint; - bool readingDFStdErrOut; - class KDiskFreeSpPrivate; - KDiskFreeSpPrivate * d; -}; -/***************************************************************************/ - - -#endif diff --git a/kio/kfile/kencodingfiledialog.cpp b/kio/kfile/kencodingfiledialog.cpp deleted file mode 100644 index 183023cf5..000000000 --- a/kio/kfile/kencodingfiledialog.cpp +++ /dev/null @@ -1,223 +0,0 @@ -// -*- c++ -*- -/* This file is part of the KDE libraries - Copyright (C) 2003 Joseph Wenninger <jowenn@kde.org> - 2003 Andras Mantia <amantia@freemail.hu> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include "config-kfile.h" - -#include "kencodingfiledialog.h" -#include <kcombobox.h> -#include <ktoolbar.h> -#include <kglobal.h> -#include <klocale.h> -#include <kcharsets.h> -#include <tqtextcodec.h> -#include <kdiroperator.h> -#include <krecentdocument.h> - -struct KEncodingFileDialogPrivate -{ - KComboBox *encoding; -}; - -KEncodingFileDialog::KEncodingFileDialog(const TQString& startDir, const TQString& encoding , const TQString& filter, - const TQString& caption, KFileDialog::OperationMode type, TQWidget *parent, const char* name, bool modal) - : KFileDialog(startDir,filter,parent,name,modal), d(new KEncodingFileDialogPrivate) -{ - setCaption(caption); - - setOperationMode( type ); - - KToolBar *tb = toolBar(); - tb->insertSeparator(); - int index = tb->insertCombo(TQStringList(), -1 /*id*/, false /*writable*/, 0 /*signal*/, 0 /*receiver*/, 0 /*slot*/ ); - d->encoding = tb->getCombo( tb->idAt( index ) ); - if ( !d->encoding ) - return; - - d->encoding->clear (); - TQString sEncoding = encoding; - if (sEncoding.isEmpty()) - sEncoding = TQString::fromLatin1(TDEGlobal::locale()->encoding()); - - TQStringList encodings (TDEGlobal::charsets()->availableEncodingNames()); - int insert = 0; - for (uint i=0; i < encodings.count(); i++) - { - bool found = false; - TQTextCodec *codecForEnc = TDEGlobal::charsets()->codecForName(encodings[i], found); - - if (found) - { - d->encoding->insertItem (encodings[i]); - if ( (codecForEnc->name() == sEncoding) || (encodings[i] == sEncoding) ) - { - d->encoding->setCurrentItem(insert); - } - - insert++; - } - } - - -} - -KEncodingFileDialog::~KEncodingFileDialog() -{ - delete d; -} - - -TQString KEncodingFileDialog::selectedEncoding() const -{ - if (d->encoding) - return d->encoding->currentText(); - else - return TQString::null; -} - - -KEncodingFileDialog::Result KEncodingFileDialog::getOpenFileNameAndEncoding(const TQString& encoding, - const TQString& startDir, - const TQString& filter, - TQWidget *parent, const TQString& caption) -{ - KEncodingFileDialog dlg(startDir, encoding,filter,caption.isNull() ? i18n("Open") : caption,Opening,parent, - "filedialog", true); - - dlg.setMode( KFile::File | KFile::LocalOnly ); - dlg.ops->clearHistory(); - dlg.exec(); - - Result res; - res.fileNames<<dlg.selectedFile(); - res.encoding=dlg.selectedEncoding(); - return res; -} - -KEncodingFileDialog::Result KEncodingFileDialog::getOpenFileNamesAndEncoding(const TQString& encoding, - const TQString& startDir, - const TQString& filter, - TQWidget *parent, - const TQString& caption) -{ - KEncodingFileDialog dlg(startDir, encoding,filter,caption.isNull() ? i18n("Open") : caption,Opening,parent, - "filedialog", true); - dlg.setMode(KFile::Files | KFile::LocalOnly); - dlg.ops->clearHistory(); - dlg.exec(); - - Result res; - res.fileNames=dlg.selectedFiles(); - res.encoding=dlg.selectedEncoding(); - return res; -} - -KEncodingFileDialog::Result KEncodingFileDialog::getOpenURLAndEncoding(const TQString& encoding, const TQString& startDir, - const TQString& filter, TQWidget *parent, const TQString& caption) -{ - KEncodingFileDialog dlg(startDir, encoding,filter,caption.isNull() ? i18n("Open") : caption,Opening,parent, - "filedialog", true); - - dlg.setMode( KFile::File ); - dlg.ops->clearHistory(); - dlg.exec(); - - Result res; - res.URLs<<dlg.selectedURL(); - res.encoding=dlg.selectedEncoding(); - return res; -} - -KEncodingFileDialog::Result KEncodingFileDialog::getOpenURLsAndEncoding(const TQString& encoding, const TQString& startDir, - const TQString& filter, - TQWidget *parent, - const TQString& caption) -{ - KEncodingFileDialog dlg(startDir, encoding,filter,caption.isNull() ? i18n("Open") : caption,Opening,parent, - "filedialog", true); - - dlg.setMode(KFile::Files); - dlg.ops->clearHistory(); - dlg.exec(); - - Result res; - res.URLs=dlg.selectedURLs(); - res.encoding=dlg.selectedEncoding(); - return res; -} - - -KEncodingFileDialog::Result KEncodingFileDialog::getSaveFileNameAndEncoding(const TQString& encoding, - const TQString& dir, - const TQString& filter, - TQWidget *parent, - const TQString& caption) -{ - bool specialDir = dir.at(0) == ':'; - KEncodingFileDialog dlg(specialDir?dir:TQString::null, encoding,filter,caption.isNull() ? i18n("Save As") : caption, - Saving,parent, "filedialog", true); - - if ( !specialDir ) - dlg.setSelection( dir ); // may also be a filename - dlg.exec(); - - TQString filename = dlg.selectedFile(); - if (!filename.isEmpty()) - KRecentDocument::add(filename); - - Result res; - res.fileNames<<filename; - res.encoding=dlg.selectedEncoding(); - return res; -} - - -KEncodingFileDialog::Result KEncodingFileDialog::getSaveURLAndEncoding(const TQString& encoding, - const TQString& dir, const TQString& filter, - TQWidget *parent, const TQString& caption) -{ - bool specialDir = dir.at(0) == ':'; - KEncodingFileDialog dlg(specialDir?dir:TQString::null, encoding,filter,caption.isNull() ? i18n("Save As") : - caption, Saving,parent, "filedialog", true); - - if ( !specialDir ) - dlg.setSelection( dir ); // may also be a filename - - dlg.exec(); - - KURL url = dlg.selectedURL(); - if (url.isValid()) - KRecentDocument::add( url ); - - Result res; - res.URLs<<url; - res.encoding=dlg.selectedEncoding(); - return res; -} - - - -void KEncodingFileDialog::virtual_hook( int id, void* data ) -{ - KFileDialog::virtual_hook( id, data ); -} - - -#include "kencodingfiledialog.moc" diff --git a/kio/kfile/kencodingfiledialog.h b/kio/kfile/kencodingfiledialog.h deleted file mode 100644 index 95daca6ce..000000000 --- a/kio/kfile/kencodingfiledialog.h +++ /dev/null @@ -1,313 +0,0 @@ -// -*- c++ -*- -/* This file is part of the KDE libraries - Copyright (C) 2003 Joseph Wenninger <jowenn@kde.org> - 2003 Andras Mantia <amantia@freemail.hu> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef __KENCODINGFILEDIALOG_H__ -#define __KENCODINGFILEDIALOG_H__ - -#include <kfiledialog.h> - -struct KEncodingFileDialogPrivate; - -/** - * Provides a user (and developer) friendly way to - * select files with support for choosing encoding - * - * - * The dialog has been designed to allow applications to customise it - * by subclassing. It uses geometry management to ensure that subclasses - * can easily add children that will be incorporated into the layout. - */ - -class TDEIO_EXPORT KEncodingFileDialog : public KFileDialog -{ - Q_OBJECT - -public: - class Result { - public: - TQStringList fileNames; - KURL::List URLs; - TQString encoding; - }; - - /** - * Constructs a file dialog for text files with encoding selection possibility. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * - * @param encoding The encoding shown in the encoding combo. If it's - * TQString::null, the global default encoding will be shown. - * - * @param filter This is a space separated list of shell globs. - * You can set the text to be displayed for the glob, and - * provide multiple globs. See setFilter() for details on - * how to do this... - * - * @param caption The caption of the dialog - * - * @param type This can either be - * @li Opening (open dialog, the default setting) - * @li Saving - * @param parent The parent widget of this dialog - * @param name The name of this object - * @param modal Whether to create a modal dialog or not - * - * @since 3.2 - */ - KEncodingFileDialog (const TQString& startDir = TQString::null, - const TQString& encoding = TQString::null, - const TQString& filter = TQString::null, - const TQString& caption = TQString::null, KFileDialog::OperationMode type = KFileDialog::Opening, - TQWidget *parent= 0, const char *name="", bool modal = true); - /** - * Destructs the file dialog. - */ - ~KEncodingFileDialog(); - - - /** - * @returns The selected encoding if the constructor with the encoding parameter was used, otherwise TQString::null. - */ - TQString selectedEncoding() const; - - - /** - * Creates a modal file dialog and return the selected - * filename or an empty string if none was chosen additionally a chosen - * encoding value is returned. - * - * Note that with - * this method the user must select an existing filename. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param encoding The encoding shown in the encoding combo. - * @param filter This is a space separated list of shell globs. - * You can set the text to be displayed for the glob, and - * provide multiple globs. See setFilter() for details on - * how to do this... - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static Result getOpenFileNameAndEncoding(const TQString& encoding=TQString::null, - const TQString& startDir= TQString::null, - const TQString& filter= TQString::null, - TQWidget *parent= 0, - const TQString& caption = TQString::null); - - /** - * Creates a modal file dialog and returns the selected encoding and the selected - * filenames or an empty list if none was chosen. - * - * Note that with - * this method the user must select an existing filename. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param encoding The encoding shown in the encoding combo. - * @param filter This is a space separated list of shell globs. - * You can set the text to be displayed for the glob, and - * provide multiple globs. See setFilter() for details on - * how to do this. - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static Result getOpenFileNamesAndEncoding(const TQString& encoding=TQString::null, - const TQString& startDir= TQString::null, - const TQString& filter= TQString::null, - TQWidget *parent = 0, - const TQString& caption= TQString::null); - - /** - * Creates a modal file dialog and returns the selected encoding and - * URL or an empty string if none was chosen. - * - * Note that with - * this method the user must select an existing URL. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param encoding The encoding shown in the encoding combo. - * @param filter This is a space separated list of shell globs. - * You can set the text to be displayed for the glob, and - * provide multiple globs. See setFilter() for details on - * how to do this... - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static Result getOpenURLAndEncoding(const TQString& encoding=TQString::null, - const TQString& startDir = TQString::null, - const TQString& filter= TQString::null, - TQWidget *parent= 0, - const TQString& caption = TQString::null); - - - - - /** - * Creates a modal file dialog and returns the selected encoding - * URLs or an empty list if none was chosen. - * - * Note that with - * this method the user must select an existing filename. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param encoding The encoding shown in the encoding combo. - * @param filter This is a space separated list of shell globs. - * You can set the text to be displayed for the glob, and - * provide multiple globs. See setFilter() for details on - * how to do this... - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static Result getOpenURLsAndEncoding(const TQString& encoding=TQString::null, - const TQString& startDir= TQString::null, - const TQString& filter= TQString::null, - TQWidget *parent = 0, - const TQString& caption= TQString::null); - - - - /** - * Creates a modal file dialog and returns the selected encoding and - * filename or an empty string if none was chosen. - * - * Note that with this - * method the user need not select an existing filename. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li a relative path or a filename determining the - * directory to start in and the file to be selected. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param encoding The encoding shown in the encoding combo. - * @param filter This is a space separated list of shell globs. - * You can set the text to be displayed for the glob, and - * provide multiple globs. See setFilter() for details on - * how to do this... - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static Result getSaveFileNameAndEncoding(const TQString& encoding=TQString::null, - const TQString& startDir=TQString::null, - const TQString& filter= TQString::null, - TQWidget *parent= 0, - const TQString& caption = TQString::null); - - - /** - * Creates a modal file dialog and returns the selected encoding and - * filename or an empty string if none was chosen. - * - * Note that with this - * method the user need not select an existing filename. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li a relative path or a filename determining the - * directory to start in and the file to be selected. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param encoding The encoding shown in the encoding combo. - * @param filter This is a space separated list of shell globs. - * You can set the text to be displayed for the glob, and - * provide multiple globs. See setFilter() for details on - * how to do this... - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static Result getSaveURLAndEncoding(const TQString& encoding=TQString::null, - const TQString& startDir= TQString::null, - const TQString& filter= TQString::null, - TQWidget *parent= 0, - const TQString& caption = TQString::null); - - - -protected: - virtual void virtual_hook( int id, void* data ); -private: - KEncodingFileDialogPrivate *d; -}; - -#endif diff --git a/kio/kfile/kfile.h b/kio/kfile/kfile.h deleted file mode 100644 index 7209a1d25..000000000 --- a/kio/kfile/kfile.h +++ /dev/null @@ -1,129 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - version 2, License as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ -#ifndef KFILE_H -#define KFILE_H - -#include <tqdir.h> - -#include "tdelibs_export.h" - -/** - * KFile is a class which provides a namespace for some enumerated - * values associated with the kfile library. You will never need to - * construct a KFile object itself. - */ - -class TDEIO_EXPORT KFile -{ -public: - /** - * Modes of operation for the dialog. - * @li @p File - Get a single file name from the user. - * @li @p Directory - Get a directory name from the user. - * @li @p Files - Get multiple file names from the user. - * @li @p ExistingOnly - Never return a filename which does not exist yet - * @li @p LocalOnly - Don't return remote filenames - */ - enum Mode { - File = 1, - Directory = 2, - Files = 4, - ExistingOnly = 8, - LocalOnly = 16, - ModeMax = 65536 - }; - - enum FileView { - Default = 0, - Simple = 1, - Detail = 2, - SeparateDirs = 4, - PreviewContents = 8, - PreviewInfo = 16, - FileViewMax = 65536 - }; - - enum SelectionMode { - Single = 1, - Multi = 2, - Extended = 4, - NoSelection = 8 - }; - - - // - // some bittests - // - - - // sorting specific - - // grr, who had the idea to set TQDir::Name to 0x0? - static bool isSortByName( const TQDir::SortSpec& sort ) { - return (sort & TQDir::Time) != TQDir::Time && - (sort & TQDir::Size) != TQDir::Size; - } - - static bool isSortBySize( const TQDir::SortSpec& sort ) { - return (sort & TQDir::Size) == TQDir::Size; - } - - static bool isSortByDate( const TQDir::SortSpec& sort ) { - return (sort & TQDir::Time) == TQDir::Time; - } - - static bool isSortDirsFirst( const TQDir::SortSpec& sort ) { - return (sort & TQDir::DirsFirst) == TQDir::DirsFirst; - } - - static bool isSortCaseInsensitive( const TQDir::SortSpec& sort ) { - return (sort & TQDir::IgnoreCase) == TQDir::IgnoreCase; - } - - - // view specific - static bool isDefaultView( const FileView& view ) { - return (view & Default) == Default; - } - - static bool isSimpleView( const FileView& view ) { - return (view & Simple) == Simple; - } - - static bool isDetailView( const FileView& view ) { - return (view & Detail) == Detail; - } - - static bool isSeparateDirs( const FileView& view ) { - return (view & SeparateDirs) == SeparateDirs; - } - - static bool isPreviewContents( const FileView& view ) { - return (view & PreviewContents) == PreviewContents; - } - - /** - * @since 3.1 - */ - static bool isPreviewInfo( const FileView& view ) { - return (view & PreviewInfo) == PreviewInfo; - } - -}; - -#endif // KFILE_H diff --git a/kio/kfile/kfilebookmarkhandler.cpp b/kio/kfile/kfilebookmarkhandler.cpp deleted file mode 100644 index f78fe2547..000000000 --- a/kio/kfile/kfilebookmarkhandler.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation, version 2. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <stdio.h> -#include <stdlib.h> - -#include <kbookmarkimporter.h> -#include <kbookmarkdombuilder.h> -#include <kpopupmenu.h> -#include <kstandarddirs.h> - -#include "kfiledialog.h" -#include "kfilebookmarkhandler.h" - -KFileBookmarkHandler::KFileBookmarkHandler( KFileDialog *dialog ) - : TQObject( dialog, "KFileBookmarkHandler" ), - KBookmarkOwner(), - m_dialog( dialog ) -{ - m_menu = new KPopupMenu( dialog, "bookmark menu" ); - - TQString file = locate( "data", "kfile/bookmarks.xml" ); - if ( file.isEmpty() ) - file = locateLocal( "data", "kfile/bookmarks.xml" ); - - KBookmarkManager *manager = KBookmarkManager::managerForFile( file, false); - - // import old bookmarks - if ( !KStandardDirs::exists( file ) ) { - TQString oldFile = locate( "data", "kfile/bookmarks.html" ); - if ( !oldFile.isEmpty() ) - importOldBookmarks( oldFile, manager ); - } - - manager->setUpdate( true ); - manager->setShowNSBookmarks( false ); - - m_bookmarkMenu = new KBookmarkMenu( manager, this, m_menu, - dialog->actionCollection(), true ); -} - -KFileBookmarkHandler::~KFileBookmarkHandler() -{ - delete m_bookmarkMenu; -} - -TQString KFileBookmarkHandler::currentURL() const -{ - return m_dialog->baseURL().url(); -} - -void KFileBookmarkHandler::importOldBookmarks( const TQString& path, - KBookmarkManager *manager ) -{ - KBookmarkDomBuilder *builder = new KBookmarkDomBuilder( manager->root(), manager ); - KNSBookmarkImporter importer( path ); - builder->connectImporter( &importer ); - importer.parseNSBookmarks(); - delete builder; - manager->save(); -} - -void KFileBookmarkHandler::virtual_hook( int id, void* data ) -{ KBookmarkOwner::virtual_hook( id, data ); } - -#include "kfilebookmarkhandler.moc" diff --git a/kio/kfile/kfilebookmarkhandler.h b/kio/kfile/kfilebookmarkhandler.h deleted file mode 100644 index 9b615c87e..000000000 --- a/kio/kfile/kfilebookmarkhandler.h +++ /dev/null @@ -1,63 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation, version 2. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef KFILEBOOKMARKHANDLER_H -#define KFILEBOOKMARKHANDLER_H - -#include <kbookmarkmanager.h> -#include <kbookmarkmenu.h> - -class TQTextStream; -class KPopupMenu; - - -class TDEIO_EXPORT KFileBookmarkHandler : public TQObject, public KBookmarkOwner -{ - Q_OBJECT - -public: - KFileBookmarkHandler( KFileDialog *dialog ); - ~KFileBookmarkHandler(); - - TQPopupMenu * popupMenu(); - - // KBookmarkOwner interface: - virtual void openBookmarkURL( const TQString& url ) { emit openURL( url ); } - virtual TQString currentURL() const; - - KPopupMenu *menu() const { return m_menu; } - -signals: - void openURL( const TQString& url ); - -private: - void importOldBookmarks( const TQString& path, KBookmarkManager *manager ); - - KFileDialog *m_dialog; - KPopupMenu *m_menu; - KBookmarkMenu *m_bookmarkMenu; - -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KFileBookmarkHandlerPrivate; - KFileBookmarkHandlerPrivate *d; -}; - - -#endif // KFILEBOOKMARKHANDLER_H diff --git a/kio/kfile/kfiledetailview.cpp b/kio/kfile/kfiledetailview.cpp deleted file mode 100644 index da61d0a9f..000000000 --- a/kio/kfile/kfiledetailview.cpp +++ /dev/null @@ -1,686 +0,0 @@ -// -*- c++ -*- -/* This file is part of the KDE libraries - Copyright (C) 1997 Stephan Kulow <coolo@kde.org> - 2000, 2001 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <tqevent.h> -#include <tqkeycode.h> -#include <tqheader.h> -#include <tqpainter.h> -#include <tqpixmap.h> - -#include <kapplication.h> -#include <kfileitem.h> -#include <kglobal.h> -#include <kglobalsettings.h> -#include <kiconloader.h> -#include <kicontheme.h> -#include <klocale.h> -#include <kdebug.h> -#include <kurldrag.h> - -#include "kfiledetailview.h" -#include "config-kfile.h" - -#define COL_NAME 0 -#define COL_SIZE 1 -#define COL_DATE 2 -#define COL_PERM 3 -#define COL_OWNER 4 -#define COL_GROUP 5 - -class KFileDetailView::KFileDetailViewPrivate -{ -public: - KFileDetailViewPrivate() : dropItem(0) - { } - - KFileListViewItem *dropItem; - TQTimer autoOpenTimer; -}; - -KFileDetailView::KFileDetailView(TQWidget *parent, const char *name) - : KListView(parent, name), KFileView(), d(new KFileDetailViewPrivate()) -{ - // this is always the static section, not the index depending on column order - m_sortingCol = COL_NAME; - m_blockSortingSignal = false; - setViewName( i18n("Detailed View") ); - - addColumn( i18n( "Name" ) ); - addColumn( i18n( "Size" ) ); - addColumn( i18n( "Date" ) ); - addColumn( i18n( "Permissions" ) ); - addColumn( i18n( "Owner" ) ); - addColumn( i18n( "Group" ) ); - setShowSortIndicator( true ); - setAllColumnsShowFocus( true ); - setDragEnabled(true); - - connect( header(), TQT_SIGNAL( clicked(int)), - TQT_SLOT(slotSortingChanged(int) )); - - - connect( this, TQT_SIGNAL( returnPressed(TQListViewItem *) ), - TQT_SLOT( slotActivate( TQListViewItem *) ) ); - - connect( this, TQT_SIGNAL( clicked(TQListViewItem *, const TQPoint&, int)), - TQT_SLOT( selected( TQListViewItem *) ) ); - connect( this, TQT_SIGNAL( doubleClicked(TQListViewItem *, const TQPoint&, int)), - TQT_SLOT( slotActivate( TQListViewItem *) ) ); - - connect( this, TQT_SIGNAL(contextMenuRequested( TQListViewItem *, - const TQPoint &, int )), - this, TQT_SLOT( slotActivateMenu( TQListViewItem *, const TQPoint& ))); - - KFile::SelectionMode sm = KFileView::selectionMode(); - switch ( sm ) { - case KFile::Multi: - TQListView::setSelectionMode( TQListView::Multi ); - break; - case KFile::Extended: - TQListView::setSelectionMode( TQListView::Extended ); - break; - case KFile::NoSelection: - TQListView::setSelectionMode( TQListView::NoSelection ); - break; - default: // fall through - case KFile::Single: - TQListView::setSelectionMode( TQListView::Single ); - break; - } - - // for highlighting - if ( sm == KFile::Multi || sm == KFile::Extended ) - connect( this, TQT_SIGNAL( selectionChanged() ), - TQT_SLOT( slotSelectionChanged() )); - else - connect( this, TQT_SIGNAL( selectionChanged( TQListViewItem * ) ), - TQT_SLOT( highlighted( TQListViewItem * ) )); - - // DND - connect( &(d->autoOpenTimer), TQT_SIGNAL( timeout() ), - this, TQT_SLOT( slotAutoOpen() )); - - setSorting( sorting() ); - - m_resolver = - new KMimeTypeResolver<KFileListViewItem,KFileDetailView>( this ); -} - -KFileDetailView::~KFileDetailView() -{ - delete m_resolver; - delete d; -} - -void KFileDetailView::readConfig( TDEConfig *config, const TQString& group ) -{ - restoreLayout( config, group ); -} - -void KFileDetailView::writeConfig( TDEConfig *config, const TQString& group ) -{ - saveLayout( config, group ); -} - -void KFileDetailView::setSelected( const KFileItem *info, bool enable ) -{ - if ( !info ) - return; - - // we can only hope that this casts works - KFileListViewItem *item = (KFileListViewItem*)info->extraData( this ); - - if ( item ) - KListView::setSelected( item, enable ); -} - -void KFileDetailView::setCurrentItem( const KFileItem *item ) -{ - if ( !item ) - return; - KFileListViewItem *it = (KFileListViewItem*) item->extraData( this ); - if ( it ) - KListView::setCurrentItem( it ); -} - -KFileItem * KFileDetailView::currentFileItem() const -{ - KFileListViewItem *current = static_cast<KFileListViewItem*>( currentItem() ); - if ( current ) - return current->fileInfo(); - - return 0L; -} - -void KFileDetailView::clearSelection() -{ - KListView::clearSelection(); -} - -void KFileDetailView::selectAll() -{ - if (KFileView::selectionMode() == KFile::NoSelection || - KFileView::selectionMode() == KFile::Single) - return; - - KListView::selectAll( true ); -} - -void KFileDetailView::invertSelection() -{ - KListView::invertSelection(); -} - -void KFileDetailView::slotActivateMenu (TQListViewItem *item,const TQPoint& pos ) -{ - if ( !item ) { - sig->activateMenu( 0, pos ); - return; - } - KFileListViewItem *i = (KFileListViewItem*) item; - sig->activateMenu( i->fileInfo(), pos ); -} - -void KFileDetailView::clearView() -{ - m_resolver->m_lstPendingMimeIconItems.clear(); - KListView::clear(); -} - -void KFileDetailView::insertItem( KFileItem *i ) -{ - KFileView::insertItem( i ); - - KFileListViewItem *item = new KFileListViewItem( (TQListView*) this, i ); - - setSortingKey( item, i ); - - i->setExtraData( this, item ); - - if ( !i->isMimeTypeKnown() ) - m_resolver->m_lstPendingMimeIconItems.append( item ); -} - -void KFileDetailView::slotActivate( TQListViewItem *item ) -{ - if ( !item ) - return; - - const KFileItem *fi = ( (KFileListViewItem*)item )->fileInfo(); - if ( fi ) - sig->activate( fi ); -} - -void KFileDetailView::selected( TQListViewItem *item ) -{ - if ( !item ) - return; - - if ( TDEGlobalSettings::singleClick() ) { - const KFileItem *fi = ( (KFileListViewItem*)item )->fileInfo(); - if ( fi && (fi->isDir() || !onlyDoubleClickSelectsFiles()) ) - sig->activate( fi ); - } -} - -void KFileDetailView::highlighted( TQListViewItem *item ) -{ - if ( !item ) - return; - - const KFileItem *fi = ( (KFileListViewItem*)item )->fileInfo(); - if ( fi ) - sig->highlightFile( fi ); -} - - -void KFileDetailView::setSelectionMode( KFile::SelectionMode sm ) -{ - disconnect( this, TQT_SIGNAL( selectionChanged() )); - disconnect( this, TQT_SIGNAL( selectionChanged( TQListViewItem * ) )); - - KFileView::setSelectionMode( sm ); - - switch ( KFileView::selectionMode() ) { - case KFile::Multi: - TQListView::setSelectionMode( TQListView::Multi ); - break; - case KFile::Extended: - TQListView::setSelectionMode( TQListView::Extended ); - break; - case KFile::NoSelection: - TQListView::setSelectionMode( TQListView::NoSelection ); - break; - default: // fall through - case KFile::Single: - TQListView::setSelectionMode( TQListView::Single ); - break; - } - - if ( sm == KFile::Multi || sm == KFile::Extended ) - connect( this, TQT_SIGNAL( selectionChanged() ), - TQT_SLOT( slotSelectionChanged() )); - else - connect( this, TQT_SIGNAL( selectionChanged( TQListViewItem * )), - TQT_SLOT( highlighted( TQListViewItem * ))); -} - -bool KFileDetailView::isSelected( const KFileItem *i ) const -{ - if ( !i ) - return false; - - KFileListViewItem *item = (KFileListViewItem*) i->extraData( this ); - return (item && item->isSelected()); -} - - -void KFileDetailView::updateView( bool b ) -{ - if ( !b ) - return; - - TQListViewItemIterator it( (TQListView*)this ); - for ( ; it.current(); ++it ) { - KFileListViewItem *item=static_cast<KFileListViewItem *>(it.current()); - item->setPixmap( 0, item->fileInfo()->pixmap(KIcon::SizeSmall) ); - } -} - -void KFileDetailView::updateView( const KFileItem *i ) -{ - if ( !i ) - return; - - KFileListViewItem *item = (KFileListViewItem*) i->extraData( this ); - if ( !item ) - return; - - item->init(); - setSortingKey( item, i ); - - //item->repaint(); // only repaints if visible -} - -void KFileDetailView::setSortingKey( KFileListViewItem *item, - const KFileItem *i ) -{ - // see also setSorting() - TQDir::SortSpec spec = KFileView::sorting(); - - if ( spec & TQDir::Time ) - item->setKey( sortingKey( i->time( TDEIO::UDS_MODIFICATION_TIME ), - i->isDir(), spec )); - else if ( spec & TQDir::Size ) - item->setKey( sortingKey( i->size(), i->isDir(), spec )); - - else // Name or Unsorted - item->setKey( sortingKey( i->text(), i->isDir(), spec )); -} - - -void KFileDetailView::removeItem( const KFileItem *i ) -{ - if ( !i ) - return; - - KFileListViewItem *item = (KFileListViewItem*) i->extraData( this ); - m_resolver->m_lstPendingMimeIconItems.remove( item ); - delete item; - - KFileView::removeItem( i ); -} - -void KFileDetailView::slotSortingChanged( int col ) -{ - // col is the section here, not the index! - - TQDir::SortSpec sort = sorting(); - int sortSpec = -1; - bool reversed = (col == m_sortingCol) && (sort & TQDir::Reversed) == 0; - m_sortingCol = col; - - switch( col ) { - case COL_NAME: - sortSpec = (sort & ~TQDir::SortByMask | TQDir::Name); - break; - case COL_SIZE: - sortSpec = (sort & ~TQDir::SortByMask | TQDir::Size); - break; - case COL_DATE: - sortSpec = (sort & ~TQDir::SortByMask | TQDir::Time); - break; - - // the following columns have no equivalent in TQDir, so we set it - // to TQDir::Unsorted and remember the column (m_sortingCol) - case COL_OWNER: - case COL_GROUP: - case COL_PERM: - // grmbl, TQDir::Unsorted == SortByMask. - sortSpec = (sort & ~TQDir::SortByMask);// | TQDir::Unsorted; - break; - default: - break; - } - - if ( reversed ) - sortSpec |= TQDir::Reversed; - else - sortSpec &= ~TQDir::Reversed; - - if ( sort & TQDir::IgnoreCase ) - sortSpec |= TQDir::IgnoreCase; - else - sortSpec &= ~TQDir::IgnoreCase; - - - KFileView::setSorting( static_cast<TQDir::SortSpec>( sortSpec ) ); - - KFileItem *item; - KFileItemListIterator it( *items() ); - - if ( sortSpec & TQDir::Time ) { - for ( ; (item = it.current()); ++it ) - viewItem(item)->setKey( sortingKey( item->time( TDEIO::UDS_MODIFICATION_TIME ), item->isDir(), sortSpec )); - } - - else if ( sortSpec & TQDir::Size ) { - for ( ; (item = it.current()); ++it ) - viewItem(item)->setKey( sortingKey( item->size(), item->isDir(), - sortSpec )); - } - else { // Name or Unsorted -> use column text - for ( ; (item = it.current()); ++it ) { - KFileListViewItem *i = viewItem( item ); - i->setKey( sortingKey( i->text(m_sortingCol), item->isDir(), - sortSpec )); - } - } - - KListView::setSorting( m_sortingCol, !reversed ); - KListView::sort(); - - if ( !m_blockSortingSignal ) - sig->changeSorting( static_cast<TQDir::SortSpec>( sortSpec ) ); -} - - -void KFileDetailView::setSorting( TQDir::SortSpec spec ) -{ - int col = 0; - if ( spec & TQDir::Time ) - col = COL_DATE; - else if ( spec & TQDir::Size ) - col = COL_SIZE; - else if ( spec & TQDir::Unsorted ) - col = m_sortingCol; - else - col = COL_NAME; - - // inversed, because slotSortingChanged will reverse it - if ( spec & TQDir::Reversed ) - spec = (TQDir::SortSpec) (spec & ~TQDir::Reversed); - else - spec = (TQDir::SortSpec) (spec | TQDir::Reversed); - - m_sortingCol = col; - KFileView::setSorting( (TQDir::SortSpec) spec ); - - - // don't emit sortingChanged() when called via setSorting() - m_blockSortingSignal = true; // can't use blockSignals() - slotSortingChanged( col ); - m_blockSortingSignal = false; -} - -void KFileDetailView::ensureItemVisible( const KFileItem *i ) -{ - if ( !i ) - return; - - KFileListViewItem *item = (KFileListViewItem*) i->extraData( this ); - - if ( item ) - KListView::ensureItemVisible( item ); -} - -// we're in multiselection mode -void KFileDetailView::slotSelectionChanged() -{ - sig->highlightFile( 0L ); -} - -KFileItem * KFileDetailView::firstFileItem() const -{ - KFileListViewItem *item = static_cast<KFileListViewItem*>( firstChild() ); - if ( item ) - return item->fileInfo(); - return 0L; -} - -KFileItem * KFileDetailView::nextItem( const KFileItem *fileItem ) const -{ - if ( fileItem ) { - KFileListViewItem *item = viewItem( fileItem ); - if ( item && item->itemBelow() ) - return ((KFileListViewItem*) item->itemBelow())->fileInfo(); - else - return 0L; - } - else - return firstFileItem(); -} - -KFileItem * KFileDetailView::prevItem( const KFileItem *fileItem ) const -{ - if ( fileItem ) { - KFileListViewItem *item = viewItem( fileItem ); - if ( item && item->itemAbove() ) - return ((KFileListViewItem*) item->itemAbove())->fileInfo(); - else - return 0L; - } - else - return firstFileItem(); -} - -void KFileDetailView::keyPressEvent( TQKeyEvent *e ) -{ - KListView::keyPressEvent( e ); - - if ( e->key() == Key_Return || e->key() == Key_Enter ) { - if ( e->state() & ControlButton ) - e->ignore(); - else - e->accept(); - } -} - -// -// mimetype determination on demand -// -void KFileDetailView::mimeTypeDeterminationFinished() -{ - // anything to do? -} - -void KFileDetailView::determineIcon( KFileListViewItem *item ) -{ - (void) item->fileInfo()->determineMimeType(); - updateView( item->fileInfo() ); -} - -void KFileDetailView::listingCompleted() -{ - m_resolver->start(); -} - -TQDragObject *KFileDetailView::dragObject() -{ - // create a list of the URL:s that we want to drag - KURL::List urls; - KFileItemListIterator it( * KFileView::selectedItems() ); - for ( ; it.current(); ++it ){ - urls.append( (*it)->url() ); - } - TQPixmap pixmap; - if( urls.count() > 1 ) - pixmap = DesktopIcon( "tdemultiple", KIcon::SizeSmall ); - if( pixmap.isNull() ) - pixmap = currentFileItem()->pixmap( KIcon::SizeSmall ); - - TQPoint hotspot; - hotspot.setX( pixmap.width() / 2 ); - hotspot.setY( pixmap.height() / 2 ); - TQDragObject* myDragObject = new KURLDrag( urls, widget() ); - myDragObject->setPixmap( pixmap, hotspot ); - return myDragObject; -} - -void KFileDetailView::slotAutoOpen() -{ - d->autoOpenTimer.stop(); - if( !d->dropItem ) - return; - - KFileItem *fileItem = d->dropItem->fileInfo(); - if (!fileItem) - return; - - if( fileItem->isFile() ) - return; - - if ( fileItem->isDir() || fileItem->isLink()) - sig->activate( fileItem ); -} - -bool KFileDetailView::acceptDrag(TQDropEvent* e) const -{ - return KURLDrag::canDecode( e ) && - (e->source()!= const_cast<KFileDetailView*>(this)) && - ( e->action() == TQDropEvent::Copy - || e->action() == TQDropEvent::Move - || e->action() == TQDropEvent::Link ); -} - -void KFileDetailView::contentsDragEnterEvent( TQDragEnterEvent *e ) -{ - if ( ! acceptDrag( e ) ) { // can we decode this ? - e->ignore(); // No - return; - } - e->acceptAction(); // Yes - - if ((dropOptions() & AutoOpenDirs) == 0) - return; - - KFileListViewItem *item = dynamic_cast<KFileListViewItem*>(itemAt( contentsToViewport( e->pos() ) )); - if ( item ) { // are we over an item ? - d->dropItem = item; - d->autoOpenTimer.start( autoOpenDelay() ); // restart timer - } - else - { - d->dropItem = 0; - d->autoOpenTimer.stop(); - } -} - -void KFileDetailView::contentsDragMoveEvent( TQDragMoveEvent *e ) -{ - if ( ! acceptDrag( e ) ) { // can we decode this ? - e->ignore(); // No - return; - } - e->acceptAction(); // Yes - - if ((dropOptions() & AutoOpenDirs) == 0) - return; - - KFileListViewItem *item = dynamic_cast<KFileListViewItem*>(itemAt( contentsToViewport( e->pos() ) )); - if ( item ) { // are we over an item ? - if (d->dropItem != item) - { - d->dropItem = item; - d->autoOpenTimer.start( autoOpenDelay() ); // restart timer - } - } - else - { - d->dropItem = 0; - d->autoOpenTimer.stop(); - } -} - -void KFileDetailView::contentsDragLeaveEvent( TQDragLeaveEvent * ) -{ - d->dropItem = 0; - d->autoOpenTimer.stop(); -} - -void KFileDetailView::contentsDropEvent( TQDropEvent *e ) -{ - d->dropItem = 0; - d->autoOpenTimer.stop(); - - if ( ! acceptDrag( e ) ) { // can we decode this ? - e->ignore(); // No - return; - } - e->acceptAction(); // Yes - - KFileListViewItem *item = dynamic_cast<KFileListViewItem*>(itemAt( contentsToViewport( e->pos() ) )); - KFileItem * fileItem = 0; - if (item) - fileItem = item->fileInfo(); - - emit dropped(e, fileItem); - - KURL::List urls; - if (KURLDrag::decode( e, urls ) && !urls.isEmpty()) - { - emit dropped(e, urls, fileItem ? fileItem->url() : KURL()); - sig->dropURLs(fileItem, e, urls); - } -} - - -///////////////////////////////////////////////////////////////// - - -void KFileListViewItem::init() -{ - KFileListViewItem::setPixmap( COL_NAME, inf->pixmap(KIcon::SizeSmall)); - - setText( COL_NAME, inf->text() ); - setText( COL_SIZE, TDEGlobal::locale()->formatNumber( inf->size(), 0)); - setText( COL_DATE, inf->timeString() ); - setText( COL_PERM, inf->permissionsString() ); - setText( COL_OWNER, inf->user() ); - setText( COL_GROUP, inf->group() ); -} - - -void KFileDetailView::virtual_hook( int id, void* data ) -{ KListView::virtual_hook( id, data ); - KFileView::virtual_hook( id, data ); } - -#include "kfiledetailview.moc" diff --git a/kio/kfile/kfiledetailview.h b/kio/kfile/kfiledetailview.h deleted file mode 100644 index 37e71720f..000000000 --- a/kio/kfile/kfiledetailview.h +++ /dev/null @@ -1,219 +0,0 @@ -// -*- c++ -*- -/* This file is part of the KDE libraries - Copyright (C) 1997 Stephan Kulow <coolo@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef KFILEDETAILVIEW_H -#define KFILEDETAILVIEW_H - -class KFileItem; -class TQWidget; -class TQKeyEvent; - -#include <klistview.h> -#include <kmimetyperesolver.h> - -#include "kfileview.h" - -/** - * An item for the listiew, that has a reference to its corresponding - * KFileItem. - */ -class TDEIO_EXPORT KFileListViewItem : public KListViewItem -{ -public: - KFileListViewItem( TQListView *parent, const TQString &text, - const TQPixmap &icon, KFileItem *fi ) - : KListViewItem( parent, text ), inf( fi ) { - setPixmap( 0, icon ); - setText( 0, text ); - } - - /** - * @since 3.1 - */ - KFileListViewItem( TQListView *parent, KFileItem *fi ) - : KListViewItem( parent ), inf( fi ) { - init(); - } - - KFileListViewItem( TQListView *parent, const TQString &text, - const TQPixmap &icon, KFileItem *fi, - TQListViewItem *after) - : KListViewItem( parent, after ), inf( fi ) { - setPixmap( 0, icon ); - setText( 0, text ); - } - ~KFileListViewItem() { - inf->removeExtraData( listView() ); - } - - /** - * @returns the corresponding KFileItem - */ - KFileItem *fileInfo() const { - return inf; - } - - virtual TQString key( int /*column*/, bool /*ascending*/ ) const { - return m_key; - } - - void setKey( const TQString& key ) { m_key = key; } - - TQRect rect() const - { - TQRect r = listView()->itemRect(this); - return TQRect( listView()->viewportToContents( r.topLeft() ), - TQSize( r.width(), r.height() ) ); - } - - /** - * @since 3.1 - */ - void init(); - -private: - KFileItem *inf; - TQString m_key; - -private: - class KFileListViewItemPrivate; - KFileListViewItemPrivate *d; - -}; - -/** - * A list-view capable of showing KFileItem'. Used in the filedialog - * for example. Most of the documentation is in KFileView class. - * - * @see KDirOperator - * @see KCombiView - * @see KFileIconView - */ -class TDEIO_EXPORT KFileDetailView : public KListView, public KFileView -{ - Q_OBJECT - -public: - KFileDetailView(TQWidget *parent, const char *name); - virtual ~KFileDetailView(); - - virtual TQWidget *widget() { return this; } - virtual void clearView(); - virtual void setAutoUpdate( bool ) {} // ### unused. remove in KDE4 - - virtual void setSelectionMode( KFile::SelectionMode sm ); - - virtual void updateView( bool ); - virtual void updateView(const KFileItem*); - virtual void removeItem( const KFileItem *); - virtual void listingCompleted(); - - virtual void setSelected(const KFileItem *, bool); - virtual bool isSelected(const KFileItem *i) const; - virtual void clearSelection(); - virtual void selectAll(); - virtual void invertSelection(); - - virtual void setCurrentItem( const KFileItem * ); - virtual KFileItem * currentFileItem() const; - virtual KFileItem * firstFileItem() const; - virtual KFileItem * nextItem( const KFileItem * ) const; - virtual KFileItem * prevItem( const KFileItem * ) const; - - virtual void insertItem( KFileItem *i ); - - // implemented to get noticed about sorting changes (for sortingIndicator) - virtual void setSorting( TQDir::SortSpec ); - - void ensureItemVisible( const KFileItem * ); - - // for KMimeTypeResolver - void mimeTypeDeterminationFinished(); - void determineIcon( KFileListViewItem *item ); - TQScrollView *scrollWidget() const { return (TQScrollView*) this; } - - virtual void readConfig( TDEConfig *, const TQString& group = TQString::null ); - virtual void writeConfig( TDEConfig *, const TQString& group = TQString::null); - -signals: - /** - * The user dropped something. - * @p fileItem points to the item dropped on or can be 0 if the - * user dropped on empty space. - * @since 3.2 - */ - void dropped(TQDropEvent *event, KFileItem *fileItem); - /** - * The user dropped the URLs @p urls. - * @p url points to the item dropped on or can be empty if the - * user dropped on empty space. - * @since 3.2 - */ - void dropped(TQDropEvent *event, const KURL::List &urls, const KURL &url); - -protected: - virtual void keyPressEvent( TQKeyEvent * ); - - // DND support - virtual TQDragObject *dragObject(); - virtual void contentsDragEnterEvent( TQDragEnterEvent *e ); - virtual void contentsDragMoveEvent( TQDragMoveEvent *e ); - virtual void contentsDragLeaveEvent( TQDragLeaveEvent *e ); - virtual void contentsDropEvent( TQDropEvent *ev ); - virtual bool acceptDrag(TQDropEvent* e ) const; - - int m_sortingCol; - -protected slots: - void slotSelectionChanged(); - -private slots: - void slotSortingChanged( int ); - void selected( TQListViewItem *item ); - void slotActivate( TQListViewItem *item ); - void highlighted( TQListViewItem *item ); - void slotActivateMenu ( TQListViewItem *item, const TQPoint& pos ); - void slotAutoOpen(); - -private: - virtual void insertItem(TQListViewItem *i) { KListView::insertItem(i); } - virtual void setSorting(int i, bool b) { KListView::setSorting(i, b); } - virtual void setSelected(TQListViewItem *i, bool b) { KListView::setSelected(i, b); } - - inline KFileListViewItem * viewItem( const KFileItem *item ) const { - if ( item ) - return (KFileListViewItem *) item->extraData( this ); - return 0L; - } - - void setSortingKey( KFileListViewItem *item, const KFileItem *i ); - - - bool m_blockSortingSignal; - KMimeTypeResolver<KFileListViewItem,KFileDetailView> *m_resolver; - -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KFileDetailViewPrivate; - KFileDetailViewPrivate *d; -}; - -#endif // KFILEDETAILVIEW_H diff --git a/kio/kfile/kfiledialog.cpp b/kio/kfile/kfiledialog.cpp deleted file mode 100644 index 1538d5dbc..000000000 --- a/kio/kfile/kfiledialog.cpp +++ /dev/null @@ -1,2380 +0,0 @@ -// -*- c++ -*- -/* This file is part of the KDE libraries - Copyright (C) 1997, 1998 Richard Moore <rich@kde.org> - 1998 Stephan Kulow <coolo@kde.org> - 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - 1999,2000,2001,2002,2003 Carsten Pfeiffer <pfeiffer@kde.org> - 2003 Clarence Dang <dang@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include "kfiledialog.h" - -#include <unistd.h> -#include <stdlib.h> -#include <stdio.h> - -#include <tqptrcollection.h> -#include <tqcheckbox.h> -#include <tqcombobox.h> -#include <tqlabel.h> -#include <tqlayout.h> -#include <tqlineedit.h> -#include <tqptrlist.h> -#include <tqpixmap.h> -#include <tqtextcodec.h> -#include <tqtooltip.h> -#include <tqtimer.h> -#include <tqwhatsthis.h> -#include <tqfiledialog.h> - -#include <kaccel.h> -#include <kaction.h> -#include <kapplication.h> -#include <kcharsets.h> -#include <kcmdlineargs.h> -#include <kcompletionbox.h> -#include <kconfig.h> -#include <kdebug.h> -#include <kglobal.h> -#include <kglobalsettings.h> -#include <kiconloader.h> -#include <kimageio.h> -#include <kio/job.h> -#include <kio/netaccess.h> -#include <kio/scheduler.h> -#include <kio/kservicetypefactory.h> -#include <klocale.h> -#include <kmessagebox.h> -#include <kmimetype.h> -#include <kpopupmenu.h> -#include <kprotocolinfo.h> -#include <kpushbutton.h> -#include <krecentdirs.h> -#include <kshell.h> -#include <kstandarddirs.h> -#include <kstdguiitem.h> -#include <kstaticdeleter.h> -#include <ktoolbar.h> -#include <ktoolbarbutton.h> -#include <kurl.h> -#include <kurlcombobox.h> -#include <kurlcompletion.h> -#include <kuser.h> - -#include "config-kfile.h" -#include "kpreviewwidgetbase.h" - -#include <kdirselectdialog.h> -#include <kfileview.h> -#include <krecentdocument.h> -#include <kfilefiltercombo.h> -#include <kdiroperator.h> -#include <kimagefilepreview.h> - -#include <kfilespeedbar.h> -#include <kfilebookmarkhandler.h> - -#ifdef Q_WS_X11 -#include <X11/Xlib.h> -#include <fixx11h.h> -#endif - -enum Buttons { HOTLIST_BUTTON, - PATH_COMBO, CONFIGURE_BUTTON }; - -template class TQPtrList<TDEIO::StatJob>; - -namespace { - static void silenceQToolBar(TQtMsgType, const char *) - { - } -} - -struct KFileDialogPrivate -{ - // the last selected url - KURL url; - - // the selected filenames in multiselection mode -- FIXME - TQString filenames; - - // the name of the filename set by setSelection - TQString selection; - - // now following all kind of widgets, that I need to rebuild - // the geometry management - TQBoxLayout *boxLayout; - TQWidget *mainWidget; - - TQLabel *locationLabel; - - // @deprecated remove in KDE4 - TQLabel *filterLabel; - KURLComboBox *pathCombo; - KPushButton *okButton, *cancelButton; - KFileSpeedBar *urlBar; - TQHBoxLayout *urlBarLayout; - TQWidget *customWidget; - - // Automatically Select Extension stuff - TQCheckBox *autoSelectExtCheckBox; - bool autoSelectExtChecked; // whether or not the _user_ has checked the above box - TQString extension; // current extension for this filter - - TQPtrList<TDEIO::StatJob> statJobs; - - KURL::List urlList; //the list of selected urls - - TQStringList mimetypes; //the list of possible mimetypes to save as - - // indicates if the location edit should be kept or cleared when changing - // directories - bool keepLocation :1; - - // the KDirOperators view is set in KFileDialog::show(), so to avoid - // setting it again and again, we have this nice little boolean :) - bool hasView :1; - - bool hasDefaultFilter :1; // necessary for the operationMode - KFileDialog::OperationMode operationMode; - - // The file class used for KRecentDirs - TQString fileClass; - - KFileBookmarkHandler *bookmarkHandler; - - // the ID of the path drop down so subclasses can place their custom widgets properly - int m_pathComboIndex; -}; - -KURL *KFileDialog::lastDirectory; // to set the start path - -static KStaticDeleter<KURL> ldd; - -KFileDialog::KFileDialog(const TQString& startDir, const TQString& filter, - TQWidget *parent, const char* name, bool modal) - : KDialogBase( parent, name, modal, TQString::null, 0 ) -{ - init( startDir, filter, 0 ); -} - -KFileDialog::KFileDialog(const TQString& startDir, const TQString& filter, - TQWidget *parent, const char* name, bool modal, TQWidget* widget) - : KDialogBase( parent, name, modal, TQString::null, 0 ) -{ - init( startDir, filter, widget ); -} - - -KFileDialog::~KFileDialog() -{ - hide(); - - TDEConfig *config = TDEGlobal::config(); - - if (d->urlBar) - d->urlBar->save( config ); - - config->sync(); - - delete d->bookmarkHandler; // Should be deleted before ops! - delete ops; - delete d; -} - -void KFileDialog::setLocationLabel(const TQString& text) -{ - d->locationLabel->setText(text); -} - -void KFileDialog::setFilter(const TQString& filter) -{ - int pos = filter.find('/'); - - // Check for an un-escaped '/', if found - // interpret as a MIME filter. - - if (pos > 0 && filter[pos - 1] != '\\') { - TQStringList filters = TQStringList::split( " ", filter ); - setMimeFilter( filters ); - return; - } - - // Strip the escape characters from - // escaped '/' characters. - - TQString copy (filter); - for (pos = 0; (pos = copy.find("\\/", pos)) != -1; ++pos) - copy.remove(pos, 1); - - ops->clearFilter(); - filterWidget->setFilter(copy); - ops->setNameFilter(filterWidget->currentFilter()); - d->hasDefaultFilter = false; - filterWidget->setEditable( true ); - - updateAutoSelectExtension (); -} - -TQString KFileDialog::currentFilter() const -{ - return filterWidget->currentFilter(); -} - -// deprecated -void KFileDialog::setFilterMimeType(const TQString &label, - const KMimeType::List &types, - const KMimeType::Ptr &defaultType) -{ - d->mimetypes.clear(); - d->filterLabel->setText(label); - - KMimeType::List::ConstIterator it; - for( it = types.begin(); it != types.end(); ++it) - d->mimetypes.append( (*it)->name() ); - - setMimeFilter( d->mimetypes, defaultType->name() ); -} - -void KFileDialog::setMimeFilter( const TQStringList& mimeTypes, - const TQString& defaultType ) -{ - d->mimetypes = mimeTypes; - filterWidget->setMimeFilter( mimeTypes, defaultType ); - - TQStringList types = TQStringList::split(" ", filterWidget->currentFilter()); - types.append( TQString::fromLatin1( "inode/directory" )); - ops->clearFilter(); - ops->setMimeFilter( types ); - d->hasDefaultFilter = !defaultType.isEmpty(); - filterWidget->setEditable( !d->hasDefaultFilter || - d->operationMode != Saving ); - - updateAutoSelectExtension (); -} - -void KFileDialog::clearFilter() -{ - d->mimetypes.clear(); - filterWidget->setFilter( TQString::null ); - ops->clearFilter(); - d->hasDefaultFilter = false; - filterWidget->setEditable( true ); - - updateAutoSelectExtension (); -} - -TQString KFileDialog::currentMimeFilter() const -{ - int i = filterWidget->currentItem(); - if (filterWidget->showsAllTypes()) - i--; - - if ((i >= 0) && (i < (int) d->mimetypes.count())) - return d->mimetypes[i]; - return TQString::null; // The "all types" item has no mimetype -} - -KMimeType::Ptr KFileDialog::currentFilterMimeType() -{ - return KMimeType::mimeType( currentMimeFilter() ); -} - -void KFileDialog::setPreviewWidget(const TQWidget *w) { - ops->setPreviewWidget(w); - ops->clearHistory(); - d->hasView = true; -} - -void KFileDialog::setPreviewWidget(const KPreviewWidgetBase *w) { - ops->setPreviewWidget(w); - ops->clearHistory(); - d->hasView = true; -} - -KURL KFileDialog::getCompleteURL(const TQString &_url) -{ - TQString url = KShell::tildeExpand(_url); - KURL u; - - if ( KURL::isRelativeURL(url) ) // only a full URL isn't relative. Even /path is. - { - if (!url.isEmpty() && !TQDir::isRelativePath(url) ) // absolute path - u.setPath( url ); - else - { - u = ops->url(); - u.addPath( url ); // works for filenames and relative paths - u.cleanPath(); // fix "dir/.." - } - } - else // complete URL - u = url; - - return u; -} - -// FIXME: check for "existing" flag here? -void KFileDialog::slotOk() -{ - kdDebug(kfile_area) << "slotOK\n"; - - // a list of all selected files/directories (if any) - // can only be used if the user didn't type any filenames/urls himself - const KFileItemList *items = ops->selectedItems(); - - if ( (mode() & KFile::Directory) != KFile::Directory ) { - if ( locationEdit->currentText().stripWhiteSpace().isEmpty() ) { - if ( !items || items->isEmpty() ) - { - TQString msg; - if ( d->operationMode == Saving ) - msg = i18n("Please specify the filename to save to."); - else - msg = i18n("Please select the file to open."); - KMessageBox::information(this, msg); - return; - } - - // weird case: the location edit is empty, but there are - // highlighted files - else { - - bool multi = (mode() & KFile::Files) != 0; - KFileItemListIterator it( *items ); - TQString endQuote = TQString::fromLatin1("\" "); - TQString name, files; - while ( it.current() ) { - name = (*it)->name(); - if ( multi ) { - name.prepend( '"' ); - name.append( endQuote ); - } - - files.append( name ); - ++it; - } - setLocationText( files ); - return; - } - } - } - - bool dirOnly = ops->dirOnlyMode(); - - // we can use our kfileitems, no need to parse anything - if ( items && !locationEdit->lineEdit()->edited() && - !(items->isEmpty() && !dirOnly) ) { - - d->urlList.clear(); - d->filenames = TQString::null; - - if ( dirOnly ) { - d->url = ops->url(); - } - else { - if ( !(mode() & KFile::Files) ) {// single selection - d->url = items->getFirst()->url(); - } - - else { // multi (dirs and/or files) - d->url = ops->url(); - KFileItemListIterator it( *items ); - while ( it.current() ) { - d->urlList.append( (*it)->url() ); - ++it; - } - } - } - - KURL url = TDEIO::NetAccess::mostLocalURL(d->url,topLevelWidget()); - if ( (mode() & KFile::LocalOnly) == KFile::LocalOnly && - !url.isLocalFile() ) { -// ### after message freeze, add message for directories! - KMessageBox::sorry( d->mainWidget, - i18n("You can only select local files."), - i18n("Remote Files Not Accepted") ); - return; - } - - d->url = url; - accept(); - return; - } - - - KURL selectedURL; - - if ( (mode() & KFile::Files) == KFile::Files ) {// multiselection mode - TQString locationText = locationEdit->currentText(); - if ( locationText.contains( '/' )) { - // relative path? -> prepend the current directory - KURL u( ops->url(), KShell::tildeExpand(locationText)); - if ( u.isValid() ) - selectedURL = u; - else - selectedURL = ops->url(); - } - else // simple filename -> just use the current URL - selectedURL = ops->url(); - } - - else { - selectedURL = getCompleteURL(locationEdit->currentText()); - - // appendExtension() may change selectedURL - appendExtension (selectedURL); - } - - if ( !selectedURL.isValid() ) { - KMessageBox::sorry( d->mainWidget, i18n("%1\ndoes not appear to be a valid URL.\n").arg(d->url.url()), i18n("Invalid URL") ); - return; - } - - KURL url = TDEIO::NetAccess::mostLocalURL(selectedURL,topLevelWidget()); - if ( (mode() & KFile::LocalOnly) == KFile::LocalOnly && - !url.isLocalFile() ) { - KMessageBox::sorry( d->mainWidget, - i18n("You can only select local files."), - i18n("Remote Files Not Accepted") ); - return; - } - - d->url = url; - - // d->url is a correct URL now - - if ( (mode() & KFile::Directory) == KFile::Directory ) { - kdDebug(kfile_area) << "Directory" << endl; - bool done = true; - if ( d->url.isLocalFile() ) { - if ( locationEdit->currentText().stripWhiteSpace().isEmpty() ) { - TQFileInfo info( d->url.path() ); - if ( info.isDir() ) { - d->filenames = TQString::null; - d->urlList.clear(); - d->urlList.append( d->url ); - accept(); - } - else if (!info.exists() && (mode() & KFile::File) != KFile::File) { - // directory doesn't exist, create and enter it - if ( ops->mkdir( d->url.url(), true )) - return; - else - accept(); - } - else { // d->url is not a directory, - // maybe we are in File(s) | Directory mode - if ( (mode() & KFile::File) == KFile::File || - (mode() & KFile::Files) == KFile::Files ) - done = false; - } - } - else // Directory mode, with file[s]/dir[s] selected - { - if ( mode() & KFile::ExistingOnly ) - { - if ( ops->dirOnlyMode() ) - { - KURL fullURL(d->url, locationEdit->currentText()); - if ( TQFile::exists( fullURL.path() ) ) - { - d->url = fullURL; - d->filenames = TQString::null; - d->urlList.clear(); - accept(); - return; - } - else // doesn't exist -> reject - return; - } - } - - d->filenames = locationEdit->currentText(); - accept(); // what can we do? - } - - } - else { // FIXME: remote directory, should we allow that? -// tqDebug( "**** Selected remote directory: %s", d->url.url().latin1()); - d->filenames = TQString::null; - d->urlList.clear(); - d->urlList.append( d->url ); - - if ( mode() & KFile::ExistingOnly ) - done = false; - else - accept(); - } - - if ( done ) - return; - } - - if (!kapp->authorizeURLAction("open", KURL(), d->url)) - { - TQString msg = TDEIO::buildErrorString(TDEIO::ERR_ACCESS_DENIED, d->url.prettyURL()); - KMessageBox::error( d->mainWidget, msg); - return; - } - - TDEIO::StatJob *job = 0L; - d->statJobs.clear(); - d->filenames = KShell::tildeExpand(locationEdit->currentText()); - - if ( (mode() & KFile::Files) == KFile::Files && - !locationEdit->currentText().contains( '/' )) { - kdDebug(kfile_area) << "Files\n"; - KURL::List list = parseSelectedURLs(); - for ( KURL::List::ConstIterator it = list.begin(); - it != list.end(); ++it ) - { - if (!kapp->authorizeURLAction("open", KURL(), *it)) - { - TQString msg = TDEIO::buildErrorString(TDEIO::ERR_ACCESS_DENIED, (*it).prettyURL()); - KMessageBox::error( d->mainWidget, msg); - return; - } - } - for ( KURL::List::ConstIterator it = list.begin(); - it != list.end(); ++it ) - { - job = TDEIO::stat( *it, !(*it).isLocalFile() ); - job->setWindow (topLevelWidget()); - TDEIO::Scheduler::scheduleJob( job ); - d->statJobs.append( job ); - connect( job, TQT_SIGNAL( result(TDEIO::Job *) ), - TQT_SLOT( slotStatResult( TDEIO::Job *) )); - } - return; - } - - job = TDEIO::stat(d->url,!d->url.isLocalFile()); - job->setWindow (topLevelWidget()); - d->statJobs.append( job ); - connect(job, TQT_SIGNAL(result(TDEIO::Job*)), TQT_SLOT(slotStatResult(TDEIO::Job*))); -} - - -static bool isDirectory (const TDEIO::UDSEntry &t) -{ - bool isDir = false; - - for (TDEIO::UDSEntry::ConstIterator it = t.begin(); - it != t.end(); - it++) - { - if ((*it).m_uds == TDEIO::UDS_FILE_TYPE) - { - isDir = S_ISDIR ((mode_t) ((*it).m_long)); - break; - } - } - - return isDir; -} - -// FIXME : count all errors and show messagebox when d->statJobs.count() == 0 -// in case of an error, we cancel the whole operation (clear d->statJobs and -// don't call accept) -void KFileDialog::slotStatResult(TDEIO::Job* job) -{ - kdDebug(kfile_area) << "slotStatResult" << endl; - TDEIO::StatJob *sJob = static_cast<TDEIO::StatJob *>( job ); - - if ( !d->statJobs.removeRef( sJob ) ) { - return; - } - - int count = d->statJobs.count(); - - // errors mean in general, the location is no directory ;/ - // Can we be sure that it is exististant at all? (pfeiffer) - if (sJob->error() && count == 0 && !ops->dirOnlyMode()) - { - accept(); - return; - } - - TDEIO::UDSEntry t = sJob->statResult(); - if (isDirectory (t)) - { - if ( ops->dirOnlyMode() ) - { - d->filenames = TQString::null; - d->urlList.clear(); - accept(); - } - else // in File[s] mode, directory means error -> cd into it - { - if ( count == 0 ) { - locationEdit->clearEdit(); - locationEdit->lineEdit()->setEdited( false ); - setURL( sJob->url() ); - } - } - d->statJobs.clear(); - return; - } - else if ( ops->dirOnlyMode() ) - { - return; // ### error message? - } - - kdDebug(kfile_area) << "filename " << sJob->url().url() << endl; - - if ( count == 0 ) - accept(); -} - -void KFileDialog::accept() -{ - setResult( TQDialog::Accepted ); // parseSelectedURLs() checks that - - *lastDirectory = ops->url(); - if (!d->fileClass.isEmpty()) - KRecentDirs::add(d->fileClass, ops->url().url()); - - // clear the topmost item, we insert it as full path later on as item 1 - locationEdit->changeItem( TQString::null, 0 ); - - KURL::List list = selectedURLs(); - TQValueListConstIterator<KURL> it = list.begin(); - for ( ; it != list.end(); ++it ) { - const KURL& url = *it; - // we strip the last slash (-1) because KURLComboBox does that as well - // when operating in file-mode. If we wouldn't , dupe-finding wouldn't - // work. - TQString file = url.isLocalFile() ? url.path(-1) : url.prettyURL(-1); - - // remove dupes - for ( int i = 1; i < locationEdit->count(); i++ ) { - if ( locationEdit->text( i ) == file ) { - locationEdit->removeItem( i-- ); - break; - } - } - locationEdit->insertItem( file, 1 ); - } - - TDEConfig *config = TDEGlobal::config(); - config->setForceGlobal( true ); - writeConfig( config, ConfigGroup ); - config->setForceGlobal( false ); - - saveRecentFiles( config ); - config->sync(); - - KDialogBase::accept(); - - addToRecentDocuments(); - - if ( (mode() & KFile::Files) != KFile::Files ) // single selection - emit fileSelected(d->url.url()); - - ops->close(); - emit okClicked(); -} - - -void KFileDialog::fileHighlighted(const KFileItem *i) -{ - if (i && i->isDir()) - return; - - - if ( (ops->mode() & KFile::Files) != KFile::Files ) { - if ( !i ) - return; - - d->url = i->url(); - - if ( !locationEdit->hasFocus() ) { // don't disturb while editing - setLocationText( i->name() ); - } - emit fileHighlighted(d->url.url()); - } - - else { - multiSelectionChanged(); - emit selectionChanged(); - } -} - -void KFileDialog::fileSelected(const KFileItem *i) -{ - if (i && i->isDir()) - return; - - if ( (ops->mode() & KFile::Files) != KFile::Files ) { - if ( !i ) - return; - - d->url = i->url(); - setLocationText( i->name() ); - } - else { - multiSelectionChanged(); - emit selectionChanged(); - } - slotOk(); -} - - -// I know it's slow to always iterate thru the whole filelist -// (ops->selectedItems()), but what can we do? -void KFileDialog::multiSelectionChanged() -{ - if ( locationEdit->hasFocus() ) // don't disturb - return; - - locationEdit->lineEdit()->setEdited( false ); - KFileItem *item; - const KFileItemList *list = ops->selectedItems(); - if ( !list ) { - locationEdit->clearEdit(); - return; - } - - static const TQString &begin = TDEGlobal::staticQString(" \""); - KFileItemListIterator it ( *list ); - TQString text; - while ( (item = it.current()) ) { - text.append( begin ).append( item->name() ).append( '\"' ); - ++it; - } - - setLocationText( text.stripWhiteSpace() ); -} - -void KFileDialog::setLocationText( const TQString& text ) -{ - // setCurrentItem() will cause textChanged() being emitted, - // so slotLocationChanged() will be called. Make sure we don't clear - // the KDirOperator's view-selection in there - disconnect( locationEdit, TQT_SIGNAL( textChanged( const TQString& ) ), - this, TQT_SLOT( slotLocationChanged( const TQString& ) ) ); - locationEdit->setCurrentItem( 0 ); - connect( locationEdit, TQT_SIGNAL( textChanged( const TQString& ) ), - TQT_SLOT( slotLocationChanged( const TQString& )) ); - locationEdit->setEditText( text ); - - // don't change selection when user has clicked on an item - if ( d->operationMode == Saving && !locationEdit->isVisible()) - setNonExtSelection(); -} - -static const char autocompletionWhatsThisText[] = I18N_NOOP("<p>While typing in the text area, you may be presented " - "with possible matches. " - "This feature can be controlled by clicking with the right mouse button " - "and selecting a preferred mode from the <b>Text Completion</b> menu.") "</qt>"; -void KFileDialog::updateLocationWhatsThis (void) -{ - TQString whatsThisText; - if (d->operationMode == KFileDialog::Saving) - { - whatsThisText = "<qt>" + i18n("This is the name to save the file as.") + - i18n (autocompletionWhatsThisText); - } - else if (ops->mode() & KFile::Files) - { - whatsThisText = "<qt>" + i18n("This is the list of files to open. More than " - "one file can be specified by listing several " - "files, separated by spaces.") + - i18n (autocompletionWhatsThisText); - } - else - { - whatsThisText = "<qt>" + i18n("This is the name of the file to open.") + - i18n (autocompletionWhatsThisText); - } - - TQWhatsThis::add(d->locationLabel, whatsThisText); - TQWhatsThis::add(locationEdit, whatsThisText); -} - -void KFileDialog::init(const TQString& startDir, const TQString& filter, TQWidget* widget) -{ - initStatic(); - d = new KFileDialogPrivate(); - - d->boxLayout = 0; - d->keepLocation = false; - d->operationMode = Opening; - d->bookmarkHandler = 0; - d->hasDefaultFilter = false; - d->hasView = false; - d->mainWidget = new TQWidget( this, "KFileDialog::mainWidget"); - setMainWidget( d->mainWidget ); - d->okButton = new KPushButton( KStdGuiItem::ok(), d->mainWidget ); - d->okButton->setDefault( true ); - d->cancelButton = new KPushButton(KStdGuiItem::cancel(), d->mainWidget); - connect( d->okButton, TQT_SIGNAL( clicked() ), TQT_SLOT( slotOk() )); - connect( d->cancelButton, TQT_SIGNAL( clicked() ), TQT_SLOT( slotCancel() )); - d->customWidget = widget; - d->autoSelectExtCheckBox = 0; // delayed loading - d->autoSelectExtChecked = false; - d->urlBar = 0; // delayed loading - - TQtMsgHandler oldHandler = tqInstallMsgHandler( silenceQToolBar ); - toolbar = new KToolBar( d->mainWidget, "KFileDialog::toolbar", true); - toolbar->setFlat(true); - tqInstallMsgHandler( oldHandler ); - - d->pathCombo = new KURLComboBox( KURLComboBox::Directories, true, - toolbar, "path combo" ); - TQToolTip::add( d->pathCombo, i18n("Current location") ); - TQWhatsThis::add( d->pathCombo, "<qt>" + i18n("This is the currently listed location. " - "The drop-down list also lists commonly used locations. " - "This includes standard locations, such as your home folder, as well as " - "locations that have been visited recently.") + i18n (autocompletionWhatsThisText)); - - KURL u; - u.setPath( TQDir::rootDirPath() ); - TQString text = i18n("Root Folder: %1").arg( u.path() ); - d->pathCombo->addDefaultURL( u, - KMimeType::pixmapForURL( u, 0, KIcon::Small ), - text ); - - u.setPath( TQDir::homeDirPath() ); - text = i18n("Home Folder: %1").arg( u.path( +1 ) ); - d->pathCombo->addDefaultURL( u, KMimeType::pixmapForURL( u, 0, KIcon::Small ), - text ); - - KURL docPath; - docPath.setPath( TDEGlobalSettings::documentPath() ); - if ( (u.path(+1) != docPath.path(+1)) && - TQDir(docPath.path(+1)).exists() ) - { - text = i18n("Documents: %1").arg( docPath.path( +1 ) ); - d->pathCombo->addDefaultURL( docPath, - KMimeType::pixmapForURL( docPath, 0, KIcon::Small ), - text ); - } - - u.setPath( TDEGlobalSettings::desktopPath() ); - text = i18n("Desktop: %1").arg( u.path( +1 ) ); - d->pathCombo->addDefaultURL( u, - KMimeType::pixmapForURL( u, 0, KIcon::Small ), - text ); - - d->url = getStartURL( startDir, d->fileClass ); - d->selection = d->url.url(); - - // If local, check it exists. If not, go up until it exists. - if ( d->url.isLocalFile() ) - { - if ( !TQFile::exists( d->url.path() ) ) - { - d->url = d->url.upURL(); - TQDir dir( d->url.path() ); - while ( !dir.exists() ) - { - d->url = d->url.upURL(); - dir.setPath( d->url.path() ); - } - } - } - - ops = new KDirOperator(d->url, d->mainWidget, "KFileDialog::ops"); - ops->setOnlyDoubleClickSelectsFiles( true ); - connect(ops, TQT_SIGNAL(urlEntered(const KURL&)), - TQT_SLOT(urlEntered(const KURL&))); - connect(ops, TQT_SIGNAL(fileHighlighted(const KFileItem *)), - TQT_SLOT(fileHighlighted(const KFileItem *))); - connect(ops, TQT_SIGNAL(fileSelected(const KFileItem *)), - TQT_SLOT(fileSelected(const KFileItem *))); - connect(ops, TQT_SIGNAL(finishedLoading()), - TQT_SLOT(slotLoadingFinished())); - - ops->setupMenu(KDirOperator::SortActions | - KDirOperator::FileActions | - KDirOperator::ViewActions); - KActionCollection *coll = ops->actionCollection(); - - // plug nav items into the toolbar - coll->action( "up" )->plug( toolbar ); - coll->action( "up" )->setWhatsThis(i18n("<qt>Click this button to enter the parent folder.<p>" - "For instance, if the current location is file:/home/%1 clicking this " - "button will take you to file:/home.</qt>").arg( KUser().loginName() )); - coll->action( "back" )->plug( toolbar ); - coll->action( "back" )->setWhatsThis(i18n("Click this button to move backwards one step in the browsing history.")); - coll->action( "forward" )->plug( toolbar ); - coll->action( "forward" )->setWhatsThis(i18n("Click this button to move forward one step in the browsing history.")); - coll->action( "reload" )->plug( toolbar ); - coll->action( "reload" )->setWhatsThis(i18n("Click this button to reload the contents of the current location.")); - coll->action( "mkdir" )->setShortcut(Key_F10); - coll->action( "mkdir" )->plug( toolbar ); - coll->action( "mkdir" )->setWhatsThis(i18n("Click this button to create a new folder.")); - - KToggleAction *showSidebarAction = - new KToggleAction(i18n("Show Quick Access Navigation Panel"), Key_F9, coll,"toggleSpeedbar"); - showSidebarAction->setCheckedState(i18n("Hide Quick Access Navigation Panel")); - connect( showSidebarAction, TQT_SIGNAL( toggled( bool ) ), - TQT_SLOT( toggleSpeedbar( bool )) ); - - KToggleAction *showBookmarksAction = - new KToggleAction(i18n("Show Bookmarks"), 0, coll, "toggleBookmarks"); - showBookmarksAction->setCheckedState(i18n("Hide Bookmarks")); - connect( showBookmarksAction, TQT_SIGNAL( toggled( bool ) ), - TQT_SLOT( toggleBookmarks( bool )) ); - - KActionMenu *menu = new KActionMenu( i18n("Configure"), "configure", TQT_TQOBJECT(this), "extra menu" ); - menu->setWhatsThis(i18n("<qt>This is the configuration menu for the file dialog. " - "Various options can be accessed from this menu including: <ul>" - "<li>how files are sorted in the list</li>" - "<li>types of view, including icon and list</li>" - "<li>showing of hidden files</li>" - "<li>the Quick Access navigation panel</li>" - "<li>file previews</li>" - "<li>separating folders from files</li></ul></qt>")); - menu->insert( coll->action( "sorting menu" )); - menu->insert( coll->action( "separator" )); - coll->action( "short view" )->setShortcut(Key_F6); - menu->insert( coll->action( "short view" )); - coll->action( "detailed view" )->setShortcut(Key_F7); - menu->insert( coll->action( "detailed view" )); - menu->insert( coll->action( "separator" )); - coll->action( "show hidden" )->setShortcut(Key_F8); - menu->insert( coll->action( "show hidden" )); - menu->insert( showSidebarAction ); - menu->insert( showBookmarksAction ); - coll->action( "preview" )->setShortcut(Key_F11); - menu->insert( coll->action( "preview" )); - coll->action( "separate dirs" )->setShortcut(Key_F12); - menu->insert( coll->action( "separate dirs" )); - - menu->setDelayed( false ); - connect( menu->popupMenu(), TQT_SIGNAL( aboutToShow() ), - ops, TQT_SLOT( updateSelectionDependentActions() )); - menu->plug( toolbar ); - - //Insert a separator. - KToolBarSeparator* spacerWidget = new KToolBarSeparator(Qt::Horizontal, false /*no line*/, - toolbar); - d->m_pathComboIndex = toolbar->insertWidget(-1, -1, spacerWidget); - toolbar->insertWidget(PATH_COMBO, 0, d->pathCombo); - - - toolbar->setItemAutoSized (PATH_COMBO); - toolbar->setIconText(KToolBar::IconOnly); - toolbar->setBarPos(KToolBar::Top); - toolbar->setMovingEnabled(false); - toolbar->adjustSize(); - - KURLCompletion *pathCompletionObj = new KURLCompletion( KURLCompletion::DirCompletion ); - d->pathCombo->setCompletionObject( pathCompletionObj ); - d->pathCombo->setAutoDeleteCompletionObject( true ); - - connect( d->pathCombo, TQT_SIGNAL( urlActivated( const KURL& )), - this, TQT_SLOT( enterURL( const KURL& ) )); - connect( d->pathCombo, TQT_SIGNAL( returnPressed( const TQString& )), - this, TQT_SLOT( enterURL( const TQString& ) )); - - TQString whatsThisText; - - // the Location label/edit - d->locationLabel = new TQLabel(i18n("&Location:"), d->mainWidget); - locationEdit = new KURLComboBox(KURLComboBox::Files, true, - d->mainWidget, "LocationEdit"); - locationEdit->setSizePolicy(TQSizePolicy(TQSizePolicy::Expanding, TQSizePolicy::Fixed)); - connect( locationEdit, TQT_SIGNAL( textChanged( const TQString& ) ), - TQT_SLOT( slotLocationChanged( const TQString& )) ); - - updateLocationWhatsThis (); - d->locationLabel->setBuddy(locationEdit); - - locationEdit->setFocus(); - KURLCompletion *fileCompletionObj = new KURLCompletion( KURLCompletion::FileCompletion ); - TQString dir = d->url.url(+1); - pathCompletionObj->setDir( dir ); - fileCompletionObj->setDir( dir ); - locationEdit->setCompletionObject( fileCompletionObj ); - locationEdit->setAutoDeleteCompletionObject( true ); - connect( fileCompletionObj, TQT_SIGNAL( match( const TQString& ) ), - TQT_SLOT( fileCompletion( const TQString& )) ); - - connect( locationEdit, TQT_SIGNAL( returnPressed() ), - this, TQT_SLOT( slotOk())); - connect(locationEdit, TQT_SIGNAL( activated( const TQString& )), - this, TQT_SLOT( locationActivated( const TQString& ) )); - - // the Filter label/edit - whatsThisText = i18n("<qt>This is the filter to apply to the file list. " - "File names that do not match the filter will not be shown.<p>" - "You may select from one of the preset filters in the " - "drop down menu, or you may enter a custom filter " - "directly into the text area.<p>" - "Wildcards such as * and ? are allowed.</qt>"); - d->filterLabel = new TQLabel(i18n("&Filter:"), d->mainWidget); - TQWhatsThis::add(d->filterLabel, whatsThisText); - filterWidget = new KFileFilterCombo(d->mainWidget, - "KFileDialog::filterwidget"); - filterWidget->setSizePolicy(TQSizePolicy(TQSizePolicy::Expanding, TQSizePolicy::Fixed)); - TQWhatsThis::add(filterWidget, whatsThisText); - setFilter(filter); - d->filterLabel->setBuddy(filterWidget); - connect(filterWidget, TQT_SIGNAL(filterChanged()), TQT_SLOT(slotFilterChanged())); - - // the Automatically Select Extension checkbox - // (the text, visibility etc. is set in updateAutoSelectExtension(), which is called by readConfig()) - d->autoSelectExtCheckBox = new TQCheckBox (d->mainWidget); - connect(d->autoSelectExtCheckBox, TQT_SIGNAL(clicked()), TQT_SLOT(slotAutoSelectExtClicked())); - - initGUI(); // activate GM - - TDEConfig* config = TDEGlobal::config(); - readRecentFiles( config ); - - adjustSize(); - - ops->setViewConfig( config, ConfigGroup ); - readConfig( config, ConfigGroup ); - setSelection(d->selection); -} - -void KFileDialog::initSpeedbar() -{ - d->urlBar = new KFileSpeedBar( d->mainWidget, "url bar" ); - connect( d->urlBar, TQT_SIGNAL( activated( const KURL& )), - TQT_SLOT( enterURL( const KURL& )) ); - - // need to set the current url of the urlbar manually (not via urlEntered() - // here, because the initial url of KDirOperator might be the same as the - // one that will be set later (and then urlEntered() won't be emitted). - // ### REMOVE THIS when KDirOperator's initial URL (in the c'tor) is gone. - d->urlBar->setCurrentItem( d->url ); - - d->urlBarLayout->insertWidget( 0, d->urlBar ); -} - -void KFileDialog::initGUI() -{ - delete d->boxLayout; // deletes all sub layouts - - d->boxLayout = new TQVBoxLayout( d->mainWidget, 0, KDialog::spacingHint()); - d->boxLayout->addWidget(toolbar, AlignTop); - - d->urlBarLayout = new TQHBoxLayout( d->boxLayout ); // needed for the urlBar that may appear - TQVBoxLayout *vbox = new TQVBoxLayout( d->urlBarLayout ); - - vbox->addWidget(ops, 4); - vbox->addSpacing(3); - - TQGridLayout* lafBox= new TQGridLayout(2, 3, KDialog::spacingHint()); - - lafBox->addWidget(d->locationLabel, 0, 0, Qt::AlignVCenter); - lafBox->addWidget(locationEdit, 0, 1, Qt::AlignVCenter); - lafBox->addWidget(d->okButton, 0, 2, Qt::AlignVCenter); - - lafBox->addWidget(d->filterLabel, 1, 0, Qt::AlignVCenter); - lafBox->addWidget(filterWidget, 1, 1, Qt::AlignVCenter); - lafBox->addWidget(d->cancelButton, 1, 2, Qt::AlignVCenter); - - lafBox->setColStretch(1, 4); - - vbox->addLayout(TQT_TQLAYOUT(lafBox), 0); - vbox->addSpacing(3); - - // add the Automatically Select Extension checkbox - vbox->addWidget (d->autoSelectExtCheckBox); - vbox->addSpacing (3); - - setTabOrder(ops, d->autoSelectExtCheckBox); - setTabOrder (d->autoSelectExtCheckBox, locationEdit); - setTabOrder(locationEdit, filterWidget); - setTabOrder(filterWidget, d->okButton); - setTabOrder(d->okButton, d->cancelButton); - setTabOrder(d->cancelButton, d->pathCombo); - setTabOrder(d->pathCombo, ops); - - // If a custom widget was specified... - if ( d->customWidget != 0 ) - { - // ...add it to the dialog, below the filter list box. - - // Change the parent so that this widget is a child of the main widget - d->customWidget->reparent( d->mainWidget, TQPoint() ); - - vbox->addWidget( d->customWidget ); - vbox->addSpacing(3); - - // FIXME: This should adjust the tab orders so that the custom widget - // comes after the Cancel button. The code appears to do this, but the result - // somehow screws up the tab order of the file path combo box. Not a major - // problem, but ideally the tab order with a custom widget should be - // the same as the order without one. - setTabOrder(d->cancelButton, d->customWidget); - setTabOrder(d->customWidget, d->pathCombo); - } - else - { - setTabOrder(d->cancelButton, d->pathCombo); - } - - setTabOrder(d->pathCombo, ops); -} - -void KFileDialog::slotFilterChanged() -{ - TQString filter = filterWidget->currentFilter(); - ops->clearFilter(); - - if ( filter.find( '/' ) > -1 ) { - TQStringList types = TQStringList::split( " ", filter ); - types.prepend( "inode/directory" ); - ops->setMimeFilter( types ); - } - else - ops->setNameFilter( filter ); - - ops->updateDir(); - - updateAutoSelectExtension (); - - emit filterChanged( filter ); -} - - -void KFileDialog::setURL(const KURL& url, bool clearforward) -{ - d->selection = TQString::null; - ops->setURL( url, clearforward); -} - -// Protected -void KFileDialog::urlEntered(const KURL& url) -{ - TQString filename = locationEdit->currentText(); - d->selection = TQString::null; - - if ( d->pathCombo->count() != 0 ) { // little hack - d->pathCombo->setURL( url ); - } - - if (url.protocol()=="beagle" && url.path()=="/") { - d->pathCombo->setEditText("beagle:/<"+i18n("search term")+">"); - d->pathCombo->lineEdit()->setSelection(8,255); - d->pathCombo->setFocus(); - } - - locationEdit->blockSignals( true ); - locationEdit->setCurrentItem( 0 ); - if ( d->keepLocation ) - locationEdit->setEditText( filename ); - - locationEdit->blockSignals( false ); - - TQString dir = url.url(+1); - static_cast<KURLCompletion*>( d->pathCombo->completionObject() )->setDir( dir ); - static_cast<KURLCompletion*>( locationEdit->completionObject() )->setDir( dir ); - - if ( d->urlBar ) - d->urlBar->setCurrentItem( url ); -} - -void KFileDialog::locationActivated( const TQString& url ) -{ - // This guard prevents any URL _typed_ by the user from being interpreted - // twice (by returnPressed/slotOk and here, activated/locationActivated) - // after the user presses Enter. Without this, _both_ setSelection and - // slotOk would "u.addPath( url )" ...so instead we leave it up to just - // slotOk.... - if (!locationEdit->lineEdit()->edited()) - setSelection( url ); -} - -void KFileDialog::enterURL( const KURL& url) -{ - setURL( url ); -} - -void KFileDialog::enterURL( const TQString& url ) -{ - setURL( KURL::fromPathOrURL( KURLCompletion::replacedPath( url, true, true )) ); -} - -void KFileDialog::toolbarCallback(int) // SLOT -{ - /* - * yes, nothing uses this anymore. - * it used to be used to show the configure dialog - */ -} - - -void KFileDialog::setSelection(const TQString& url) -{ - kdDebug(kfile_area) << "setSelection " << url << endl; - - if (url.isEmpty()) { - d->selection = TQString::null; - return; - } - - KURL u = getCompleteURL(url); - if (!u.isValid()) { // if it still is - kdWarning() << url << " is not a correct argument for setSelection!" << endl; - return; - } - - if (!KProtocolInfo::supportsListing(u)) { - locationEdit->lineEdit()->setEdited( true ); - return; - } - - /* we strip the first / from the path to avoid file://usr which means - * / on host usr - */ - KFileItem i(KFileItem::Unknown, KFileItem::Unknown, u, true ); - // KFileItem i(u.path()); - if ( i.isDir() && u.isLocalFile() && TQFile::exists( u.path() ) ) { - // trust isDir() only if the file is - // local (we cannot stat non-local urls) and if it exists! - // (as KFileItem does not check if the file exists or not - // -> the statbuffer is undefined -> isDir() is unreliable) (Simon) - setURL(u, true); - } - else { - TQString filename = u.url(); - int sep = filename.findRev('/'); - if (sep >= 0) { // there is a / in it - if ( KProtocolInfo::supportsListing( u )) { - KURL dir(u); - dir.setQuery( TQString::null ); - dir.setFileName( TQString::null ); - setURL(dir, true ); - } - - // filename must be decoded, or "name with space" would become - // "name%20with%20space", so we use KURL::fileName() - filename = u.fileName(); - kdDebug(kfile_area) << "filename " << filename << endl; - d->selection = filename; - setLocationText( filename ); - - // tell the line edit that it has been edited - // otherwise we won't know this was set by the user - // and it will be ignored if there has been an - // auto completion. this caused bugs where automcompletion - // would start, the user would pick something from the - // history and then hit Ok only to get the autocompleted - // selection. OOOPS. - locationEdit->lineEdit()->setEdited( true ); - } - - d->url = ops->url(); - d->url.addPath(filename); - } -} - -void KFileDialog::slotLoadingFinished() -{ - if ( !d->selection.isNull() ) - ops->setCurrentItem( d->selection ); -} - -// ### remove in KDE4 -void KFileDialog::pathComboChanged( const TQString& ) -{ -} -void KFileDialog::dirCompletion( const TQString& ) // SLOT -{ -} -void KFileDialog::fileCompletion( const TQString& match ) -{ - if ( match.isEmpty() && ops->view() ) - ops->view()->clearSelection(); - else - ops->setCurrentItem( match ); -} - -void KFileDialog::slotLocationChanged( const TQString& text ) -{ - if ( text.isEmpty() && ops->view() ) - ops->view()->clearSelection(); - - updateFilter(); -} - -void KFileDialog::updateStatusLine(int /* dirs */, int /* files */) -{ - kdWarning() << "KFileDialog::updateStatusLine is deprecated! The status line no longer exists. Do not try and use it!" << endl; -} - -TQString KFileDialog::getOpenFileName(const TQString& startDir, - const TQString& filter, - TQWidget *parent, const TQString& caption) -{ - KFileDialog dlg(startDir, filter, parent, "filedialog", true); - dlg.setOperationMode( Opening ); - - dlg.setMode( KFile::File | KFile::LocalOnly ); - dlg.setCaption(caption.isNull() ? i18n("Open") : caption); - - dlg.ops->clearHistory(); - dlg.exec(); - - return dlg.selectedFile(); -} - -TQString KFileDialog::getOpenFileNameWId(const TQString& startDir, - const TQString& filter, - WId parent_id, const TQString& caption) -{ - TQWidget* parent = TQT_TQWIDGET(TQWidget::find( parent_id )); - KFileDialog dlg(startDir, filter, parent, "filedialog", true); -#ifdef Q_WS_X11 - if( parent == NULL && parent_id != 0 ) - XSetTransientForHint( tqt_xdisplay(), dlg.winId(), parent_id ); -#else - // TODO -#endif - - dlg.setOperationMode( KFileDialog::Opening ); - - dlg.setMode( KFile::File | KFile::LocalOnly ); - dlg.setCaption(caption.isNull() ? i18n("Open") : caption); - - dlg.ops->clearHistory(); - dlg.exec(); - - return dlg.selectedFile(); -} - -TQStringList KFileDialog::getOpenFileNames(const TQString& startDir, - const TQString& filter, - TQWidget *parent, - const TQString& caption) -{ - KFileDialog dlg(startDir, filter, parent, "filedialog", true); - dlg.setOperationMode( Opening ); - - dlg.setCaption(caption.isNull() ? i18n("Open") : caption); - dlg.setMode(KFile::Files | KFile::LocalOnly); - dlg.ops->clearHistory(); - dlg.exec(); - - return dlg.selectedFiles(); -} - -KURL KFileDialog::getOpenURL(const TQString& startDir, const TQString& filter, - TQWidget *parent, const TQString& caption) -{ - KFileDialog dlg(startDir, filter, parent, "filedialog", true); - dlg.setOperationMode( Opening ); - - dlg.setCaption(caption.isNull() ? i18n("Open") : caption); - dlg.setMode( KFile::File ); - dlg.ops->clearHistory(); - dlg.exec(); - - return dlg.selectedURL(); -} - -KURL::List KFileDialog::getOpenURLs(const TQString& startDir, - const TQString& filter, - TQWidget *parent, - const TQString& caption) -{ - KFileDialog dlg(startDir, filter, parent, "filedialog", true); - dlg.setOperationMode( Opening ); - - dlg.setCaption(caption.isNull() ? i18n("Open") : caption); - dlg.setMode(KFile::Files); - dlg.ops->clearHistory(); - dlg.exec(); - - return dlg.selectedURLs(); -} - -KURL KFileDialog::getExistingURL(const TQString& startDir, - TQWidget *parent, - const TQString& caption) -{ - return KDirSelectDialog::selectDirectory(startDir, false, parent, caption); -} - -TQString KFileDialog::getExistingDirectory(const TQString& startDir, - TQWidget *parent, - const TQString& caption) -{ -#ifdef Q_WS_WIN - return TQFileDialog::getExistingDirectory(startDir, parent, "getExistingDirectory", - caption, true, true); -#else - KURL url = KDirSelectDialog::selectDirectory(startDir, true, parent, - caption); - if ( url.isValid() ) - return url.path(); - - return TQString::null; -#endif -} - -KURL KFileDialog::getImageOpenURL( const TQString& startDir, TQWidget *parent, - const TQString& caption) -{ - TQStringList mimetypes = KImageIO::mimeTypes( KImageIO::Reading ); - KFileDialog dlg(startDir, - mimetypes.join(" "), - parent, "filedialog", true); - dlg.setOperationMode( Opening ); - dlg.setCaption( caption.isNull() ? i18n("Open") : caption ); - dlg.setMode( KFile::File ); - - KImageFilePreview *ip = new KImageFilePreview( &dlg ); - dlg.setPreviewWidget( ip ); - dlg.exec(); - - return dlg.selectedURL(); -} - -KURL KFileDialog::selectedURL() const -{ - if ( result() == TQDialog::Accepted ) - return d->url; - else - return KURL(); -} - -KURL::List KFileDialog::selectedURLs() const -{ - KURL::List list; - if ( result() == TQDialog::Accepted ) { - if ( (ops->mode() & KFile::Files) == KFile::Files ) - list = parseSelectedURLs(); - else - list.append( d->url ); - } - return list; -} - - -KURL::List& KFileDialog::parseSelectedURLs() const -{ - if ( d->filenames.isEmpty() ) { - return d->urlList; - } - - d->urlList.clear(); - if ( d->filenames.contains( '/' )) { // assume _one_ absolute filename - static const TQString &prot = TDEGlobal::staticQString(":/"); - KURL u; - if ( d->filenames.find( prot ) != -1 ) - u = d->filenames; - else - u.setPath( d->filenames ); - - if ( u.isValid() ) - d->urlList.append( u ); - else - KMessageBox::error( d->mainWidget, - i18n("The chosen filenames do not\n" - "appear to be valid."), - i18n("Invalid Filenames") ); - } - - else - d->urlList = tokenize( d->filenames ); - - d->filenames = TQString::null; // indicate that we parsed that one - - return d->urlList; -} - - -// FIXME: current implementation drawback: a filename can't contain quotes -KURL::List KFileDialog::tokenize( const TQString& line ) const -{ - KURL::List urls; - KURL u( ops->url() ); - TQString name; - - int count = line.contains( '"' ); - if ( count == 0 ) { // no " " -> assume one single file - u.setFileName( line ); - if ( u.isValid() ) - urls.append( u ); - - return urls; - } - - if ( (count % 2) == 1 ) { // odd number of " -> error - TQWidget *that = const_cast<KFileDialog *>(this); - KMessageBox::sorry(that, i18n("The requested filenames\n" - "%1\n" - "do not appear to be valid;\n" - "make sure every filename is enclosed in double quotes.").arg(line), - i18n("Filename Error")); - return urls; - } - - int start = 0; - int index1 = -1, index2 = -1; - while ( true ) { - index1 = line.find( '"', start ); - index2 = line.find( '"', index1 + 1 ); - - if ( index1 < 0 ) - break; - - // get everything between the " " - name = line.mid( index1 + 1, index2 - index1 - 1 ); - u.setFileName( name ); - if ( u.isValid() ) - urls.append( u ); - - start = index2 + 1; - } - return urls; -} - - -TQString KFileDialog::selectedFile() const -{ - if ( result() == TQDialog::Accepted ) - { - KURL url = TDEIO::NetAccess::mostLocalURL(d->url,topLevelWidget()); - if (url.isLocalFile()) - return url.path(); - else { - KMessageBox::sorry( d->mainWidget, - i18n("You can only select local files."), - i18n("Remote Files Not Accepted") ); - } - } - return TQString::null; -} - -TQStringList KFileDialog::selectedFiles() const -{ - TQStringList list; - KURL url; - - if ( result() == TQDialog::Accepted ) { - if ( (ops->mode() & KFile::Files) == KFile::Files ) { - KURL::List urls = parseSelectedURLs(); - TQValueListConstIterator<KURL> it = urls.begin(); - while ( it != urls.end() ) { - url = TDEIO::NetAccess::mostLocalURL(*it,topLevelWidget()); - if ( url.isLocalFile() ) - list.append( url.path() ); - ++it; - } - } - - else { // single-selection mode - if ( d->url.isLocalFile() ) - list.append( d->url.path() ); - } - } - - return list; -} - -KURL KFileDialog::baseURL() const -{ - return ops->url(); -} - -TQString KFileDialog::getSaveFileName(const TQString& dir, const TQString& filter, - TQWidget *parent, - const TQString& caption) -{ - bool specialDir = dir.at(0) == ':'; - KFileDialog dlg( specialDir ? dir : TQString::null, filter, parent, "filedialog", true); - if ( !specialDir ) - dlg.setSelection( dir ); // may also be a filename - - dlg.setOperationMode( Saving ); - dlg.setCaption(caption.isNull() ? i18n("Save As") : caption); - - dlg.exec(); - - TQString filename = dlg.selectedFile(); - if (!filename.isEmpty()) - KRecentDocument::add(filename); - - return filename; -} - -TQString KFileDialog::getSaveFileNameWId(const TQString& dir, const TQString& filter, - WId parent_id, - const TQString& caption) -{ - bool specialDir = dir.at(0) == ':'; - TQWidget* parent = TQT_TQWIDGET(TQWidget::find( parent_id )); - KFileDialog dlg( specialDir ? dir : TQString::null, filter, parent, "filedialog", true); -#ifdef Q_WS_X11 - if( parent == NULL && parent_id != 0 ) - XSetTransientForHint(tqt_xdisplay(), dlg.winId(), parent_id); -#else - // TODO -#endif - - if ( !specialDir ) - dlg.setSelection( dir ); // may also be a filename - - dlg.setOperationMode( KFileDialog::Saving); - dlg.setCaption(caption.isNull() ? i18n("Save As") : caption); - - dlg.exec(); - - TQString filename = dlg.selectedFile(); - if (!filename.isEmpty()) - KRecentDocument::add(filename); - - return filename; -} - -KURL KFileDialog::getSaveURL(const TQString& dir, const TQString& filter, - TQWidget *parent, const TQString& caption) -{ - bool specialDir = dir.at(0) == ':'; - KFileDialog dlg(specialDir ? dir : TQString::null, filter, parent, "filedialog", true); - if ( !specialDir ) - dlg.setSelection( dir ); // may also be a filename - - dlg.setCaption(caption.isNull() ? i18n("Save As") : caption); - dlg.setOperationMode( Saving ); - - dlg.exec(); - - KURL url = dlg.selectedURL(); - if (url.isValid()) - KRecentDocument::add( url ); - - return url; -} - -void KFileDialog::show() -{ - if ( !d->hasView ) { // delayed view-creation - ops->setView(KFile::Default); - ops->clearHistory(); - d->hasView = true; - } - - KDialogBase::show(); -} - -void KFileDialog::setMode( KFile::Mode m ) -{ - ops->setMode(m); - if ( ops->dirOnlyMode() ) { - filterWidget->setDefaultFilter( i18n("*|All Folders") ); - } - else { - filterWidget->setDefaultFilter( i18n("*|All Files") ); - } - - updateAutoSelectExtension (); -} - -void KFileDialog::setMode( unsigned int m ) -{ - setMode(static_cast<KFile::Mode>( m )); -} - -KFile::Mode KFileDialog::mode() const -{ - return ops->mode(); -} - - -void KFileDialog::readConfig( TDEConfig *kc, const TQString& group ) -{ - if ( !kc ) - return; - - TQString oldGroup = kc->group(); - if ( !group.isEmpty() ) - kc->setGroup( group ); - - ops->readConfig( kc, group ); - - KURLComboBox *combo = d->pathCombo; - combo->setURLs( kc->readPathListEntry( RecentURLs ), KURLComboBox::RemoveTop ); - combo->setMaxItems( kc->readNumEntry( RecentURLsNumber, - DefaultRecentURLsNumber ) ); - combo->setURL( ops->url() ); - autoDirectoryFollowing = kc->readBoolEntry( AutoDirectoryFollowing, - DefaultDirectoryFollowing ); - - TDEGlobalSettings::Completion cm = (TDEGlobalSettings::Completion) - kc->readNumEntry( PathComboCompletionMode, - TDEGlobalSettings::completionMode() ); - if ( cm != TDEGlobalSettings::completionMode() ) - combo->setCompletionMode( cm ); - - cm = (TDEGlobalSettings::Completion) - kc->readNumEntry( LocationComboCompletionMode, - TDEGlobalSettings::completionMode() ); - if ( cm != TDEGlobalSettings::completionMode() ) - locationEdit->setCompletionMode( cm ); - - // show or don't show the speedbar - toggleSpeedbar( kc->readBoolEntry(ShowSpeedbar, true) ); - - // show or don't show the bookmarks - toggleBookmarks( kc->readBoolEntry(ShowBookmarks, false) ); - - // does the user want Automatically Select Extension? - d->autoSelectExtChecked = kc->readBoolEntry (AutoSelectExtChecked, DefaultAutoSelectExtChecked); - updateAutoSelectExtension (); - - int w1 = minimumSize().width(); - int w2 = toolbar->sizeHint().width() + 10; - if (w1 < w2) - setMinimumWidth(w2); - - TQSize size = configDialogSize( group ); - resize( size ); - kc->setGroup( oldGroup ); -} - -void KFileDialog::writeConfig( TDEConfig *kc, const TQString& group ) -{ - if ( !kc ) - return; - - TQString oldGroup = kc->group(); - if ( !group.isEmpty() ) - kc->setGroup( group ); - - kc->writePathEntry( RecentURLs, d->pathCombo->urls() ); - saveDialogSize( group, true ); - kc->writeEntry( PathComboCompletionMode, static_cast<int>(d->pathCombo->completionMode()) ); - kc->writeEntry( LocationComboCompletionMode, static_cast<int>(locationEdit->completionMode()) ); - kc->writeEntry( ShowSpeedbar, d->urlBar && !d->urlBar->isHidden() ); - kc->writeEntry( ShowBookmarks, d->bookmarkHandler != 0 ); - kc->writeEntry( AutoSelectExtChecked, d->autoSelectExtChecked ); - - ops->writeConfig( kc, group ); - kc->setGroup( oldGroup ); -} - - -void KFileDialog::readRecentFiles( TDEConfig *kc ) -{ - TQString oldGroup = kc->group(); - kc->setGroup( ConfigGroup ); - - locationEdit->setMaxItems( kc->readNumEntry( RecentFilesNumber, - DefaultRecentURLsNumber ) ); - locationEdit->setURLs( kc->readPathListEntry( RecentFiles ), - KURLComboBox::RemoveBottom ); - locationEdit->insertItem( TQString::null, 0 ); // dummy item without pixmap - locationEdit->setCurrentItem( 0 ); - - kc->setGroup( oldGroup ); -} - -void KFileDialog::saveRecentFiles( TDEConfig *kc ) -{ - TQString oldGroup = kc->group(); - kc->setGroup( ConfigGroup ); - - kc->writePathEntry( RecentFiles, locationEdit->urls() ); - - kc->setGroup( oldGroup ); -} - -KPushButton * KFileDialog::okButton() const -{ - return d->okButton; -} - -KPushButton * KFileDialog::cancelButton() const -{ - return d->cancelButton; -} - -KURLBar * KFileDialog::speedBar() -{ - return d->urlBar; -} - -void KFileDialog::slotCancel() -{ - ops->close(); - KDialogBase::slotCancel(); - - TDEConfig *config = TDEGlobal::config(); - config->setForceGlobal( true ); - writeConfig( config, ConfigGroup ); - config->setForceGlobal( false ); -} - -void KFileDialog::setKeepLocation( bool keep ) -{ - d->keepLocation = keep; -} - -bool KFileDialog::keepsLocation() const -{ - return d->keepLocation; -} - -void KFileDialog::setOperationMode( OperationMode mode ) -{ - d->operationMode = mode; - d->keepLocation = (mode == Saving); - filterWidget->setEditable( !d->hasDefaultFilter || mode != Saving ); - if ( mode == Opening ) - d->okButton->setGuiItem( KGuiItem( i18n("&Open"), "fileopen") ); - else if ( mode == Saving ) { - d->okButton->setGuiItem( KStdGuiItem::save() ); - setNonExtSelection(); - } - else - d->okButton->setGuiItem( KStdGuiItem::ok() ); - updateLocationWhatsThis (); - updateAutoSelectExtension (); -} - -KFileDialog::OperationMode KFileDialog::operationMode() const -{ - return d->operationMode; -} - -void KFileDialog::slotAutoSelectExtClicked() -{ - kdDebug (kfile_area) << "slotAutoSelectExtClicked(): " - << d->autoSelectExtCheckBox->isChecked () << endl; - - // whether the _user_ wants it on/off - d->autoSelectExtChecked = d->autoSelectExtCheckBox->isChecked (); - - // update the current filename's extension - updateLocationEditExtension (d->extension /* extension hasn't changed */); -} - -static TQString getExtensionFromPatternList (const TQStringList &patternList) -{ - TQString ret; - kdDebug (kfile_area) << "\tgetExtension " << patternList << endl; - - TQStringList::ConstIterator patternListEnd = patternList.end (); - for (TQStringList::ConstIterator it = patternList.begin (); - it != patternListEnd; - it++) - { - kdDebug (kfile_area) << "\t\ttry: \'" << (*it) << "\'" << endl; - - // is this pattern like "*.BMP" rather than useless things like: - // - // README - // *. - // *.* - // *.JP*G - // *.JP? - if ((*it).startsWith ("*.") && - (*it).length () > 2 && - (*it).find ('*', 2) < 0 && (*it).find ('?', 2) < 0) - { - ret = (*it).mid (1); - break; - } - } - - return ret; -} - -static TQString stripUndisplayable (const TQString &string) -{ - TQString ret = string; - - ret.remove (':'); - ret.remove ('&'); - - return ret; -} - - -TQString KFileDialog::currentFilterExtension (void) -{ - return d->extension; -} - -void KFileDialog::updateAutoSelectExtension (void) -{ - if (!d->autoSelectExtCheckBox) return; - - // - // Figure out an extension for the Automatically Select Extension thing - // (some Windows users apparently don't know what to do when confronted - // with a text file called "COPYING" but do know what to do with - // COPYING.txt ...) - // - - kdDebug (kfile_area) << "Figure out an extension: " << endl; - TQString lastExtension = d->extension; - d->extension = TQString::null; - - // Automatically Select Extension is only valid if the user is _saving_ a _file_ - if ((operationMode () == Saving) && (mode () & KFile::File)) - { - // - // Get an extension from the filter - // - - TQString filter = currentFilter (); - if (!filter.isEmpty ()) - { - // e.g. "*.cpp" - if (filter.find ('/') < 0) - { - d->extension = getExtensionFromPatternList (TQStringList::split (" ", filter)).lower (); - kdDebug (kfile_area) << "\tsetFilter-style: pattern ext=\'" - << d->extension << "\'" << endl; - } - // e.g. "text/html" - else - { - KMimeType::Ptr mime = KMimeType::mimeType (filter); - - // first try X-TDE-NativeExtension - TQString nativeExtension = mime->property ("X-TDE-NativeExtension").toString (); - if (nativeExtension.at (0) == '.') - { - d->extension = nativeExtension.lower (); - kdDebug (kfile_area) << "\tsetMimeFilter-style: native ext=\'" - << d->extension << "\'" << endl; - } - - // no X-TDE-NativeExtension - if (d->extension.isEmpty ()) - { - d->extension = getExtensionFromPatternList (mime->patterns ()).lower (); - kdDebug (kfile_area) << "\tsetMimeFilter-style: pattern ext=\'" - << d->extension << "\'" << endl; - } - } - } - - - // - // GUI: checkbox - // - - TQString whatsThisExtension; - if (!d->extension.isEmpty ()) - { - // remember: sync any changes to the string with below - d->autoSelectExtCheckBox->setText (i18n ("Automatically select filename e&xtension (%1)").arg (d->extension)); - whatsThisExtension = i18n ("the extension <b>%1</b>").arg (d->extension); - - d->autoSelectExtCheckBox->setEnabled (true); - d->autoSelectExtCheckBox->setChecked (d->autoSelectExtChecked); - } - else - { - // remember: sync any changes to the string with above - d->autoSelectExtCheckBox->setText (i18n ("Automatically select filename e&xtension")); - whatsThisExtension = i18n ("a suitable extension"); - - d->autoSelectExtCheckBox->setChecked (false); - d->autoSelectExtCheckBox->setEnabled (false); - } - - const TQString locationLabelText = stripUndisplayable (d->locationLabel->text ()); - const TQString filterLabelText = stripUndisplayable (d->filterLabel->text ()); - TQWhatsThis::add (d->autoSelectExtCheckBox, - "<qt>" + - i18n ( - "This option enables some convenient features for " - "saving files with extensions:<br>" - "<ol>" - "<li>Any extension specified in the <b>%1</b> text " - "area will be updated if you change the file type " - "to save in.<br>" - "<br></li>" - "<li>If no extension is specified in the <b>%2</b> " - "text area when you click " - "<b>Save</b>, %3 will be added to the end of the " - "filename (if the filename does not already exist). " - "This extension is based on the file type that you " - "have chosen to save in.<br>" - "<br>" - "If you do not want TDE to supply an extension for the " - "filename, you can either turn this option off or you " - "can suppress it by adding a period (.) to the end of " - "the filename (the period will be automatically " - "removed)." - "</li>" - "</ol>" - "If unsure, keep this option enabled as it makes your " - "files more manageable." - ) - .arg (locationLabelText) - .arg (locationLabelText) - .arg (whatsThisExtension) - + "</qt>" - ); - - d->autoSelectExtCheckBox->show (); - - - // update the current filename's extension - updateLocationEditExtension (lastExtension); - } - // Automatically Select Extension not valid - else - { - d->autoSelectExtCheckBox->setChecked (false); - d->autoSelectExtCheckBox->hide (); - } -} - -// Updates the extension of the filename specified in locationEdit if the -// Automatically Select Extension feature is enabled. -// (this prevents you from accidently saving "file.kwd" as RTF, for example) -void KFileDialog::updateLocationEditExtension (const TQString &lastExtension) -{ - if (!d->autoSelectExtCheckBox->isChecked () || d->extension.isEmpty ()) - return; - - TQString urlStr = locationEdit->currentText (); - if (urlStr.isEmpty ()) - return; - - KURL url = getCompleteURL (urlStr); - kdDebug (kfile_area) << "updateLocationEditExtension (" << url << ")" << endl; - - const int fileNameOffset = urlStr.findRev ('/') + 1; - TQString fileName = urlStr.mid (fileNameOffset); - - const int dot = fileName.findRev ('.'); - const int len = fileName.length (); - if (dot > 0 && // has an extension already and it's not a hidden file - // like ".hidden" (but we do accept ".hidden.ext") - dot != len - 1 // and not deliberately suppressing extension - ) - { - // exists? - TDEIO::UDSEntry t; - if (TDEIO::NetAccess::stat (url, t, topLevelWidget())) - { - kdDebug (kfile_area) << "\tfile exists" << endl; - - if (isDirectory (t)) - { - kdDebug (kfile_area) << "\tisDir - won't alter extension" << endl; - return; - } - - // --- fall through --- - } - - - // - // try to get rid of the current extension - // - - // catch "double extensions" like ".tar.gz" - if (lastExtension.length () && fileName.endsWith (lastExtension)) - fileName.truncate (len - lastExtension.length ()); - // can only handle "single extensions" - else - fileName.truncate (dot); - - // add extension - const TQString newText = urlStr.left (fileNameOffset) + fileName + d->extension; - if ( newText != locationEdit->currentText() ) - { - locationEdit->setCurrentText (urlStr.left (fileNameOffset) + fileName + d->extension); - locationEdit->lineEdit()->setEdited (true); - } - } -} - -// Updates the filter if the extension of the filename specified in locationEdit is changed -// (this prevents you from accidently saving "file.kwd" as RTF, for example) -void KFileDialog::updateFilter () -{ - if ((operationMode() == Saving) && (mode() & KFile::File) ) { - const TQString urlStr = locationEdit->currentText (); - if (urlStr.isEmpty ()) - return; - - KMimeType::Ptr mime = KMimeType::findByPath(urlStr, 0, true); - if (mime && mime->name() != KMimeType::defaultMimeType()) { - if (filterWidget->currentFilter() != mime->name() && - filterWidget->filters.findIndex(mime->name()) != -1) { - filterWidget->setCurrentFilter(mime->name()); - } - } - } -} - -// applies only to a file that doesn't already exist -void KFileDialog::appendExtension (KURL &url) -{ - if (!d->autoSelectExtCheckBox->isChecked () || d->extension.isEmpty ()) - return; - - TQString fileName = url.fileName (); - if (fileName.isEmpty ()) - return; - - kdDebug (kfile_area) << "appendExtension(" << url << ")" << endl; - - const int len = fileName.length (); - const int dot = fileName.findRev ('.'); - - const bool suppressExtension = (dot == len - 1); - const bool unspecifiedExtension = (dot <= 0); - - // don't TDEIO::NetAccess::Stat if unnecessary - if (!(suppressExtension || unspecifiedExtension)) - return; - - // exists? - TDEIO::UDSEntry t; - if (TDEIO::NetAccess::stat (url, t, topLevelWidget())) - { - kdDebug (kfile_area) << "\tfile exists - won't append extension" << endl; - return; - } - - // suppress automatically append extension? - if (suppressExtension) - { - // - // Strip trailing dot - // This allows lazy people to have autoSelectExtCheckBox->isChecked - // but don't want a file extension to be appended - // e.g. "README." will make a file called "README" - // - // If you really want a name like "README.", then type "README.." - // and the trailing dot will be removed (or just stop being lazy and - // turn off this feature so that you can type "README.") - // - kdDebug (kfile_area) << "\tstrip trailing dot" << endl; - url.setFileName (fileName.left (len - 1)); - } - // evilmatically append extension :) if the user hasn't specified one - else if (unspecifiedExtension) - { - kdDebug (kfile_area) << "\tappending extension \'" << d->extension << "\'..." << endl; - url.setFileName (fileName + d->extension); - kdDebug (kfile_area) << "\tsaving as \'" << url << "\'" << endl; - } -} - - -// adds the selected files/urls to 'recent documents' -void KFileDialog::addToRecentDocuments() -{ - int m = ops->mode(); - - if ( m & KFile::LocalOnly ) { - TQStringList files = selectedFiles(); - TQStringList::ConstIterator it = files.begin(); - for ( ; it != files.end(); ++it ) - KRecentDocument::add( *it ); - } - - else { // urls - KURL::List urls = selectedURLs(); - KURL::List::ConstIterator it = urls.begin(); - for ( ; it != urls.end(); ++it ) { - if ( (*it).isValid() ) - KRecentDocument::add( *it ); - } - } -} - -KActionCollection * KFileDialog::actionCollection() const -{ - return ops->actionCollection(); -} - -void KFileDialog::keyPressEvent( TQKeyEvent *e ) -{ - if ( e->key() == Key_Escape ) - { - e->accept(); - d->cancelButton->animateClick(); - } - else - KDialogBase::keyPressEvent( e ); -} - -void KFileDialog::toggleSpeedbar( bool show ) -{ - if ( show ) - { - if ( !d->urlBar ) - initSpeedbar(); - - d->urlBar->show(); - - // check to see if they have a home item defined, if not show the home button - KURLBarItem *urlItem = static_cast<KURLBarItem*>( d->urlBar->listBox()->firstItem() ); - KURL homeURL; - homeURL.setPath( TQDir::homeDirPath() ); - while ( urlItem ) - { - if ( homeURL.equals( urlItem->url(), true ) ) - { - ops->actionCollection()->action( "home" )->unplug( toolbar ); - break; - } - - urlItem = static_cast<KURLBarItem*>( urlItem->next() ); - } - } - else - { - if (d->urlBar) - d->urlBar->hide(); - - if ( !ops->actionCollection()->action( "home" )->isPlugged( toolbar ) ) - ops->actionCollection()->action( "home" )->plug( toolbar, 3 ); - } - - static_cast<KToggleAction *>(actionCollection()->action("toggleSpeedbar"))->setChecked( show ); -} - -void KFileDialog::toggleBookmarks(bool show) -{ - if (show) - { - if (d->bookmarkHandler) - { - return; - } - - d->bookmarkHandler = new KFileBookmarkHandler( this ); - connect( d->bookmarkHandler, TQT_SIGNAL( openURL( const TQString& )), - TQT_SLOT( enterURL( const TQString& ))); - - toolbar->insertButton(TQString::fromLatin1("bookmark"), - (int)HOTLIST_BUTTON, true, - i18n("Bookmarks"), 5); - toolbar->getButton(HOTLIST_BUTTON)->setPopup(d->bookmarkHandler->menu(), - true); - TQWhatsThis::add(toolbar->getButton(HOTLIST_BUTTON), - i18n("<qt>This button allows you to bookmark specific locations. " - "Click on this button to open the bookmark menu where you may add, " - "edit or select a bookmark.<p>" - "These bookmarks are specific to the file dialog, but otherwise operate " - "like bookmarks elsewhere in TDE.</qt>")); - } - else if (d->bookmarkHandler) - { - delete d->bookmarkHandler; - d->bookmarkHandler = 0; - toolbar->removeItem(HOTLIST_BUTTON); - } - - static_cast<KToggleAction *>(actionCollection()->action("toggleBookmarks"))->setChecked( show ); -} - -int KFileDialog::pathComboIndex() -{ - return d->m_pathComboIndex; -} - -// static -void KFileDialog::initStatic() -{ - if ( lastDirectory ) - return; - - lastDirectory = ldd.setObject(lastDirectory, new KURL()); -} - -// static -KURL KFileDialog::getStartURL( const TQString& startDir, - TQString& recentDirClass ) -{ - initStatic(); - - recentDirClass = TQString::null; - KURL ret; - - bool useDefaultStartDir = startDir.isEmpty(); - if ( !useDefaultStartDir ) - { - if (startDir[0] == ':') - { - recentDirClass = startDir; - ret = KURL::fromPathOrURL( KRecentDirs::dir(recentDirClass) ); - } - else - { - ret = TDECmdLineArgs::makeURL( TQFile::encodeName(startDir) ); - // If we won't be able to list it (e.g. http), then use default - if ( !KProtocolInfo::supportsListing( ret ) ) - useDefaultStartDir = true; - } - } - - if ( useDefaultStartDir ) - { - if (lastDirectory->isEmpty()) { - lastDirectory->setPath(TDEGlobalSettings::documentPath()); - KURL home; - home.setPath( TQDir::homeDirPath() ); - // if there is no docpath set (== home dir), we prefer the current - // directory over it. We also prefer the homedir when our CWD is - // different from our homedirectory or when the document dir - // does not exist - if ( lastDirectory->path(+1) == home.path(+1) || - TQDir::currentDirPath() != TQDir::homeDirPath() || - !TQDir(lastDirectory->path(+1)).exists() ) - lastDirectory->setPath(TQDir::currentDirPath()); - } - ret = *lastDirectory; - } - - return ret; -} - -void KFileDialog::setStartDir( const KURL& directory ) -{ - initStatic(); - if ( directory.isValid() ) - *lastDirectory = directory; -} - -void KFileDialog::setNonExtSelection() -{ - // Enhanced rename: Don't highlight the file extension. - TQString pattern, filename = locationEdit->currentText().stripWhiteSpace(); - KServiceTypeFactory::self()->findFromPattern( filename, &pattern ); - - if ( !pattern.isEmpty() && pattern.at( 0 ) == '*' && pattern.find( '*' , 1 ) == -1 ) - locationEdit->lineEdit()->setSelection( 0, filename.length() - pattern.stripWhiteSpace().length()+1 ); - else - { - int lastDot = filename.findRev( '.' ); - if ( lastDot > 0 ) - locationEdit->lineEdit()->setSelection( 0, lastDot ); - } -} - -void KFileDialog::virtual_hook( int id, void* data ) -{ KDialogBase::virtual_hook( id, data ); } - - -#include "kfiledialog.moc" diff --git a/kio/kfile/kfiledialog.h b/kio/kfile/kfiledialog.h deleted file mode 100644 index 2f986d351..000000000 --- a/kio/kfile/kfiledialog.h +++ /dev/null @@ -1,989 +0,0 @@ -// -*- c++ -*- -/* This file is part of the KDE libraries - Copyright (C) 1997, 1998 Richard Moore <rich@kde.org> - 1998 Stephan Kulow <coolo@kde.org> - 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - 2000,2001 Carsten Pfeiffer <pfeiffer@kde.org> - 2001 Frerich Raabe <raabe@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef __KFILEDIALOG_H__ -#define __KFILEDIALOG_H__ - -#include <tqstring.h> - -#include <kdialogbase.h> -#include <kfile.h> -#include <kurl.h> -#include <kmimetype.h> -#include <kio/jobclasses.h> - -class TQCheckBox; -class TQHBoxLayout; -class TQGridLayout; -class TQLabel; -class TQPopupMenu; -class TQVBoxLayout; - -class KActionCollection; -class KDirOperator; -class KURLBar; -class KURLComboBox; -class KFileFilterCombo; -class KFileView; -class KFileItem; -class KPushButton; -class KToolBar; -class KPreviewWidgetBase; - -struct KFileDialogPrivate; - -/** - * Provides a user (and developer) friendly way to - * select files and directories. - * - * The widget can be used as a drop in replacement for the - * TQFileDialog widget, but has greater functionality and a nicer GUI. - * - * You will usually want to use one of the static methods - * getOpenFileName(), getSaveFileName(), getOpenURL() - * or for multiple files getOpenFileNames() or getOpenURLs(). - * - * The dialog has been designed to allow applications to customise it - * by subclassing. It uses geometry management to ensure that subclasses - * can easily add children that will be incorporated into the layout. - * - * \image html kfiledialog.png "KDE File Dialog" - * - * @short A file selection dialog. - * - * @author Richard J. Moore <rich@kde.org>, Carsten Pfeiffer <pfeiffer@kde.org> - */ -class TDEIO_EXPORT KFileDialog : public KDialogBase -{ - Q_OBJECT - -public: - - /** - * Defines some default behavior of the filedialog. - * E.g. in mode @p Opening and @p Saving, the selected files/urls will - * be added to the "recent documents" list. The Saving mode also implies - * setKeepLocation() being set. - * - * @p Other means that no default actions are performed. - * - * @see setOperationMode - * @see operationMode - */ - enum OperationMode { Other = 0, Opening, Saving }; - - /** - * Constructs a file dialog. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * - * @param filter A shell glob or a mime-type-filter that specifies - * which files to display. - * @param parent The parent widget of this dialog - * @param name The name of this object - * @param modal Whether to create a modal dialog or not - * See setFilter() for details on how to use this argument. - * - */ - KFileDialog(const TQString& startDir, const TQString& filter, - TQWidget *parent, const char *name, - bool modal); - - /** - * Constructs a file dialog. - * - * The parameters here are identical to the first constructor except - * for the addition of a TQWidget parameter. - * - * Historical note: The original version of KFileDialog did not have this extra - * parameter. It was added later, and, in order to maintain binary compatibility, - * it was placed in a new constructor instead of added to the original one. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * - * @param filter A shell glob or a mime-type-filter that specifies - * which files to display. - * See setFilter() for details on how to use this argument. - * - * @param widget A widget, or a widget of widgets, for displaying custom - * data in the dialog. This can be used, for example, to - * display a check box with the caption "Open as read-only". - * When creating this widget, you don't need to specify a parent, - * since the widget's parent will be set automatically by KFileDialog. - * @param parent The parent widget of this dialog - * @param name The name of this object - * @param modal Whether to create a modal dialog or not - * @since 3.1 - */ - KFileDialog(const TQString& startDir, const TQString& filter, - TQWidget *parent, const char *name, - bool modal, TQWidget* widget); - - - /** - * Destructs the file dialog. - */ - ~KFileDialog(); - - /** - * @returns The selected fully qualified filename. - */ - KURL selectedURL() const; - - /** - * @returns The list of selected URLs. - */ - KURL::List selectedURLs() const; - - /** - * @returns the currently shown directory. - */ - KURL baseURL() const; - - /** - * Returns the full path of the selected file in the local filesystem. - * (Local files only) - */ - TQString selectedFile() const; - - /** - * Returns a list of all selected local files. - */ - TQStringList selectedFiles() const; - - /** - * Sets the directory to view. - * - * @param url URL to show. - * @param clearforward Indicates whether the forward queue - * should be cleared. - */ - void setURL(const KURL &url, bool clearforward = true); - - /** - * Sets the file name to preselect to @p name - * - * This takes absolute URLs and relative file names. - */ - void setSelection(const TQString& name); - - /** - * Sets the operational mode of the filedialog to @p Saving, @p Opening - * or @p Other. This will set some flags that are specific to loading - * or saving files. E.g. setKeepLocation() makes mostly sense for - * a save-as dialog. So setOperationMode( KFileDialog::Saving ); sets - * setKeepLocation for example. - * - * The mode @p Saving, together with a default filter set via - * setMimeFilter() will make the filter combobox read-only. - * - * The default mode is @p Opening. - * - * Call this method right after instantiating KFileDialog. - * - * @see operationMode - * @see KFileDialog::OperationMode - */ - void setOperationMode( KFileDialog::OperationMode ); - - /** - * @returns the current operation mode, Opening, Saving or Other. Default - * is Other. - * - * @see operationMode - * @see KFileDialog::OperationMode - */ - OperationMode operationMode() const; - - /** - * Sets whether the filename/url should be kept when changing directories. - * This is for example useful when having a predefined filename where - * the full path for that file is searched. - * - * This is implicitly set when operationMode() is KFileDialog::Saving - * - * getSaveFileName() and getSaveURL() set this to true by default, so that - * you can type in the filename and change the directory without having - * to type the name again. - */ - void setKeepLocation( bool keep ); - - /** - * @returns whether the contents of the location edit are kept when - * changing directories. - */ - bool keepsLocation() const; - - /** - * Sets the filter to be used to @p filter. - * - * You can set more - * filters for the user to select separated by '\n'. Every - * filter entry is defined through namefilter|text to diplay. - * If no | is found in the expression, just the namefilter is - * shown. Examples: - * - * \code - * kfile->setFilter("*.cpp|C++ Source Files\n*.h|Header files"); - * kfile->setFilter("*.cpp"); - * kfile->setFilter("*.cpp|Sources (*.cpp)"); - * kfile->setFilter("*.cpp|" + i18n("Sources (*.cpp)")); - * kfile->setFilter("*.cpp *.cc *.C|C++ Source Files\n*.h *.H|Header files"); - * \endcode - * - * Note: The text to display is not parsed in any way. So, if you - * want to show the suffix to select by a specific filter, you must - * repeat it. - * - * If the filter contains an unescaped '/', a mimetype-filter is assumed. - * If you would like a '/' visible in your filter it can be escaped with - * a '\'. You can specify multiple mimetypes like this (separated with - * space): - * - * \code - * kfile->setFilter( "image/png text/html text/plain" ); - * kfile->setFilter( "*.cue|CUE\\/BIN Files (*.cue)" ); - * \endcode - * - * @see filterChanged - * @see setMimeFilter - */ - void setFilter(const TQString& filter); - - /** - * Returns the current filter as entered by the user or one of the - * predefined set via setFilter(). - * - * @see setFilter() - * @see filterChanged() - */ - TQString currentFilter() const; - - /** - * Sets the filter up to specify the output type. - * - * @param label the label to use instead of "Filter:" - * @param types a list of mimetypes that can be used as output format - * @param defaultType the default mimetype to use as output format. - * - * Do not use in conjunction with setFilter() - * @deprecated - */ - void setFilterMimeType(const TQString &label, const KMimeType::List &types, const KMimeType::Ptr &defaultType) KDE_DEPRECATED; - - /** - * Returns the mimetype for the desired output format. - * - * This is only valid if setFilterMimeType() has been called - * previously. - * - * @see setFilterMimeType() - */ - KMimeType::Ptr currentFilterMimeType(); - - /** - * Sets the filter up to specify the output type. - * - * @param types a list of mimetypes that can be used as output format - * @param defaultType the default mimetype to use as output format, if any. - * If @p defaultType is set, it will be set as the current item. - * Otherwise, a first item showing all the mimetypes will be created. - * Typically, @p defaultType should be empty for loading and set for saving. - * - * Do not use in conjunction with setFilter() - */ - void setMimeFilter( const TQStringList& types, - const TQString& defaultType = TQString::null ); - - /** - * The mimetype for the desired output format. - * - * This is only valid if setMimeFilter() has been called - * previously. - * - * @see setMimeFilter() - */ - TQString currentMimeFilter() const; - - /** - * Clears any mime- or namefilter. Does not reload the directory. - */ - void clearFilter(); - - /** - * @deprecated - * Add a preview widget and enter the preview mode. - * - * In this mode - * the dialog is split and the right part contains your widget. - * This widget has to inherit TQWidget and it has to implement - * a slot showPreview(const KURL &); which is called - * every time the file changes. You may want to look at - * koffice/lib/kofficecore/koFilterManager.cc for some hints :) - * - * Ownership is transferred to KFileDialog. You need to create the - * preview-widget with "new", i.e. on the heap. - */ - void setPreviewWidget(const TQWidget *w) KDE_DEPRECATED; - - /** - * Adds a preview widget and enters the preview mode. - * - * In this mode the dialog is split and the right part contains your - * preview widget. - * - * Ownership is transferred to KFileDialog. You need to create the - * preview-widget with "new", i.e. on the heap. - * - * @param w The widget to be used for the preview. - */ - void setPreviewWidget(const KPreviewWidgetBase *w); - - /** - * Creates a modal file dialog and return the selected - * filename or an empty string if none was chosen. - * - * Note that with - * this method the user must select an existing filename. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param filter This is a space separated list of shell globs. - * You can set the text to be displayed for the glob, and - * provide multiple globs. See setFilter() for details on - * how to do this... - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static TQString getOpenFileName(const TQString& startDir= TQString::null, - const TQString& filter= TQString::null, - TQWidget *parent= 0, - const TQString& caption = TQString::null); - - - /** - * Use this version only if you have no TQWidget available as - * parent widget. This can be the case if the parent widget is - * a widget in another process or if the parent widget is a - * non-Qt widget. For example, in a GTK program. - * - * @since 3.4 - */ - static TQString getOpenFileNameWId(const TQString& startDir, - const TQString& filter, - WId parent_id, const TQString& caption); - - /** - * Creates a modal file dialog and returns the selected - * filenames or an empty list if none was chosen. - * - * Note that with - * this method the user must select an existing filename. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param filter This is a space separated list of shell globs. - * You can set the text to be displayed for the glob, and - * provide multiple globs. See setFilter() for details on - * how to do this... - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static TQStringList getOpenFileNames(const TQString& startDir= TQString::null, - const TQString& filter= TQString::null, - TQWidget *parent = 0, - const TQString& caption= TQString::null); - - - - /** - * Creates a modal file dialog and returns the selected - * URL or an empty string if none was chosen. - * - * Note that with - * this method the user must select an existing URL. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param filter This is a space separated list of shell globs. - * You can set the text to be displayed for the glob, and - * provide multiple globs. See setFilter() for details on - * how to do this... - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static KURL getOpenURL(const TQString& startDir = TQString::null, - const TQString& filter= TQString::null, - TQWidget *parent= 0, - const TQString& caption = TQString::null); - - - - /** - * Creates a modal file dialog and returns the selected - * URLs or an empty list if none was chosen. - * - * Note that with - * this method the user must select an existing filename. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param filter This is a space separated list of shell globs. - * You can set the text to be displayed for the glob, and - * provide multiple globs. See setFilter() for details on - * how to do this... - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static KURL::List getOpenURLs(const TQString& startDir= TQString::null, - const TQString& filter= TQString::null, - TQWidget *parent = 0, - const TQString& caption= TQString::null); - - - - /** - * Creates a modal file dialog and returns the selected - * filename or an empty string if none was chosen. - * - * Note that with this - * method the user need not select an existing filename. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li a relative path or a filename determining the - * directory to start in and the file to be selected. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param filter This is a space separated list of shell globs. - * You can set the text to be displayed for the glob, and - * provide multiple globs. See setFilter() for details on - * how to do this... - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static TQString getSaveFileName(const TQString& startDir= TQString::null, - const TQString& filter= TQString::null, - TQWidget *parent= 0, - const TQString& caption = TQString::null); - - - /** - * This function accepts the window id of the parent window, instead - * of TQWidget*. It should be used only when necessary. - * @since 3.4 - */ - static TQString getSaveFileNameWId(const TQString& dir, const TQString& filter, - WId parent_id, - const TQString& caption); - - /** - * Creates a modal file dialog and returns the selected - * filename or an empty string if none was chosen. - * - * Note that with this - * method the user need not select an existing filename. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li a relative path or a filename determining the - * directory to start in and the file to be selected. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param filter This is a space separated list of shell globs. - * You can set the text to be displayed for the glob, and - * provide multiple globs. See setFilter() for details on - * how to do this... - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static KURL getSaveURL(const TQString& startDir= TQString::null, - const TQString& filter= TQString::null, - TQWidget *parent= 0, - const TQString& caption = TQString::null); - - - /** - * Creates a modal file dialog and returns the selected - * directory or an empty string if none was chosen. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static TQString getExistingDirectory(const TQString & startDir = TQString::null, - TQWidget * parent = 0, - const TQString& caption= TQString::null); - - /** - * Creates a modal file dialog and returns the selected - * directory or an empty string if none was chosen. - * - * Contrary to getExistingDirectory(), this method allows the - * selection of a remote directory. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - * @since 3.1 - */ - static KURL getExistingURL(const TQString & startDir = TQString::null, - TQWidget * parent = 0, - const TQString& caption= TQString::null); - /** - * Creates a modal file dialog with an image previewer and returns the - * selected url or an empty string if none was chosen. - * - * @param startDir This can either be - * @li The URL of the directory to start in. - * @li TQString::null to start in the current working - * directory, or the last directory where a file has been - * selected. - * @li ':<keyword>' to start in the directory last used - * by a filedialog in the same application that specified - * the same keyword. - * @li '::<keyword>' to start in the directory last used - * by a filedialog in any application that specified the - * same keyword. - * @param parent The widget the dialog will be centered on initially. - * @param caption The name of the dialog widget. - */ - static KURL getImageOpenURL( const TQString& startDir = TQString::null, - TQWidget *parent = 0, - const TQString& caption = TQString::null ); - virtual void show(); - - /** - * Convenient overload of the other setMode(unsigned int) method. - */ - void setMode( KFile::Mode m ); - - /** - * Sets the mode of the dialog. - * - * The mode is defined as (in kfile.h): - * \code - * enum Mode { - * File = 1, - * Directory = 2, - * Files = 4, - * ExistingOnly = 8, - * LocalOnly = 16 - * }; - * \endcode - * You can OR the values, e.g. - * \code - * KFile::Mode mode = static_cast<KFile::Mode>( KFile::Files | - * KFile::ExistingOnly | - * KFile::LocalOnly ); - * setMode( mode ); - * \endcode - */ - void setMode( unsigned int m ); - - /** - * Returns the mode of the filedialog. - * @see setMode() - */ - KFile::Mode mode() const; - - /** - * Sets the text to be displayed in front of the selection. - * - * The default is "Location". - * Most useful if you want to make clear what - * the location is used for. - */ - void setLocationLabel(const TQString& text); - - /** - * Returns a pointer to the toolbar. - * - * You can use this to insert custom - * items into it, e.g.: - * \code - * yourAction = new KAction( i18n("Your Action"), 0, - * this, TQT_SLOT( yourSlot() ), - * this, "action name" ); - * yourAction->plug( kfileDialog->toolBar() ); - * \endcode - */ - KToolBar *toolBar() const { return toolbar; } - - /** - * @returns a pointer to the OK-Button in the filedialog. You may use it - * e.g. to set a custom text to it. - */ - KPushButton *okButton() const; - - /** - * @returns a pointer to the Cancel-Button in the filedialog. You may use - * it e.g. to set a custom text to it. - */ - KPushButton *cancelButton() const; - - /** - * @returns the KURLBar object used as the "speed bar". You can add custom - * entries to it like that: - * \code - * KURLBar *urlBar = fileDialog->speedBar(); - * if ( urlBar ) - * urlBar->insertDynamicItem( someURL, i18n("The URL's description") ); - * \endcode - * - * Note that this method may return a null-pointer if the user configured - * to not use the speed-bar. - * @see KURLBar - * @see KURLBar::insertDynamicItem - * @since 3.2 - */ - KURLBar *speedBar(); - - /** - * @returns a pointer to the action collection, holding all the used - * KActions. - */ - KActionCollection *actionCollection() const; - - /** - * @returns the index of the path combobox so when inserting widgets into - * the dialog (e.g. subclasses) they can do so without hardcoding in an index - */ - int pathComboIndex(); - - /** - * This method implements the logic to determine the user's default directory - * to be listed. E.g. the documents direcory, home directory or a recently - * used directory. - * @param startDir A url/directory, to be used. May use the ':' and '::' syntax - * as documented in the KFileDialog() constructor. - * @param recentDirClass If the ':' or '::' syntax is used, recentDirClass - * will contain the string to be used later for KRecentDir::dir() - * @return The URL that should be listed by default (e.g. by KFileDialog or - * KDirSelectDialog). - * @since 3.1 - */ - static KURL getStartURL( const TQString& startDir, TQString& recentDirClass ); - - /** - * @internal - * Used by KDirSelectDialog to share the dialog's start directory. - */ - static void setStartDir( const KURL& directory ); - -signals: - /** - * Emitted when the user selects a file. It is only emitted in single- - * selection mode. The best way to get notified about selected file(s) - * is to connect to the okClicked() signal inherited from KDialogBase - * and call selectedFile(), selectedFiles(), - * selectedURL() or selectedURLs(). - */ - void fileSelected(const TQString&); - - /** - * Emitted when the user highlights a file. - */ - void fileHighlighted(const TQString&); - - /** - * Emitted when the user hilights one or more files in multiselection mode. - * - * Note: fileHighlighted() or fileSelected() are @em not - * emitted in multiselection mode. You may use selectedItems() to - * ask for the current highlighted items. - * @see fileSelected - */ - void selectionChanged(); - - /** - * Emitted when the filter changed, i.e. the user entered an own filter - * or chose one of the predefined set via setFilter(). - * - * @param filter contains the new filter (only the extension part, - * not the explanation), i.e. "*.cpp" or "*.cpp *.cc". - * - * @see setFilter() - * @see currentFilter() - */ - void filterChanged( const TQString& filter ); - -protected: - KToolBar *toolbar; - - static KURL *lastDirectory; - - KURLComboBox *locationEdit; - - KFileFilterCombo *filterWidget; - - /** - * Reimplemented to animate the cancel button. - */ - virtual void keyPressEvent( TQKeyEvent *e ); - - /** - * Perform basic initialization tasks. Called by constructors. - * @since 3.1 - */ - void init(const TQString& startDir, const TQString& filter, TQWidget* widget); - - /** - * rebuild geometry management. - * - */ - virtual void initGUI(); - - /** - * called when an item is highlighted/selected in multiselection mode. - * handles setting the locationEdit. - */ - void multiSelectionChanged(); - - /** - * Reads configuration and applies it (size, recent directories, ...) - */ - virtual void readConfig( TDEConfig *, const TQString& group = TQString::null ); - - /** - * Saves the current configuration - */ - virtual void writeConfig( TDEConfig *, const TQString& group = TQString::null ); - - /** - * Reads the recent used files and inserts them into the location combobox - */ - virtual void readRecentFiles( TDEConfig * ); - - /** - * Saves the entries from the location combobox. - */ - virtual void saveRecentFiles( TDEConfig * ); - - /** - * Parses the string "line" for files. If line doesn't contain any ", the - * whole line will be interpreted as one file. If the number of " is odd, - * an empty list will be returned. Otherwise, all items enclosed in " " - * will be returned as correct urls. - */ - KURL::List tokenize(const TQString& line) const; - - /** - * Returns the absolute version of the URL specified in locationEdit. - * @since 3.2 - */ - KURL getCompleteURL(const TQString&); - - /** - * Returns the filename extension associated with the currentFilter(). - * TQString::null is returned if an extension is not available or if - * operationMode() != Saving. - * @since 3.2 - */ - TQString currentFilterExtension(); - - /** - * Updates the currentFilterExtension and the availability of the - * Automatically Select Extension Checkbox (visible if operationMode() - * == Saving and enabled if an extension _will_ be associated with the - * currentFilter(), _after_ this call). You should call this after - * filterWidget->setCurrentItem(). - * @since 3.2 - */ - void updateAutoSelectExtension(); - - -protected slots: - void urlEntered( const KURL& ); - void enterURL( const KURL& url ); - void enterURL( const TQString& url ); - void locationActivated( const TQString& url ); - - /** - * @deprecated, - */ - // ### remove in KDE4 - void toolbarCallback(int); - /** - * @deprecated - */ - // ### remove in KDE4 - void pathComboChanged( const TQString& ); - /** - * @deprecated - */ - // ### remove in KDE4 - void dirCompletion( const TQString& ); - - void slotFilterChanged(); - void fileHighlighted(const KFileItem *i); - void fileSelected(const KFileItem *i); - void slotStatResult(TDEIO::Job* job); - void slotLoadingFinished(); - - void fileCompletion( const TQString& ); - /** - * @since 3.1 - */ - void toggleSpeedbar( bool ); - - /** - * @since 3.4 - */ - void toggleBookmarks(bool show); - - /** - * @deprecated - */ - virtual void updateStatusLine(int dirs, int files); - - virtual void slotOk(); - virtual void accept(); - virtual void slotCancel(); - - void slotAutoSelectExtClicked(); - void addToRecentDocuments(); - void initSpeedbar(); - -private slots: - void slotLocationChanged( const TQString& text ); - -private: - KFileDialog(const KFileDialog&); - KFileDialog operator=(const KFileDialog&); - - void setLocationText( const TQString& text ); - void updateLocationWhatsThis(); - - void appendExtension(KURL &url); - void updateLocationEditExtension(const TQString &); - void updateFilter(); - - static void initStatic(); - - void setNonExtSelection(); - -protected: - KDirOperator *ops; - bool autoDirectoryFollowing; - - KURL::List& parseSelectedURLs() const; - -protected: - virtual void virtual_hook( int id, void* data ); -private: - KFileDialogPrivate *d; -}; - -#endif diff --git a/kio/kfile/kfilefiltercombo.cpp b/kio/kfile/kfilefiltercombo.cpp deleted file mode 100644 index 12a51db8e..000000000 --- a/kio/kfile/kfilefiltercombo.cpp +++ /dev/null @@ -1,203 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) Stephan Kulow <coolo@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <klocale.h> -#include <kdebug.h> -#include <kstaticdeleter.h> -#include <config-kfile.h> - -#include "kfilefiltercombo.h" - -class KFileFilterCombo::KFileFilterComboPrivate -{ -public: - KFileFilterComboPrivate() { - hasAllSupportedFiles = false; - defaultFilter = i18n("*|All Files"); - isMimeFilter = false; - } - - // when we have more than 3 mimefilters and no default-filter, - // we don't show the comments of all mimefilters in one line, - // instead we show "All supported files". We have to translate - // that back to the list of mimefilters in currentFilter() tho. - bool hasAllSupportedFiles; - // true when setMimeFilter was called - bool isMimeFilter; - TQString lastFilter; - TQString defaultFilter; -}; - -KFileFilterCombo::KFileFilterCombo( TQWidget *parent, const char *name) - : KComboBox(true, parent, name), d( new KFileFilterComboPrivate ) -{ - setTrapReturnKey( true ); - setInsertionPolicy(NoInsertion); - connect( this, TQT_SIGNAL( activated( int )), this, TQT_SIGNAL( filterChanged() )); - connect( this, TQT_SIGNAL( returnPressed() ), this, TQT_SIGNAL( filterChanged() )); - connect( this, TQT_SIGNAL( filterChanged() ), TQT_SLOT( slotFilterChanged() )); - m_allTypes = false; -} - -KFileFilterCombo::~KFileFilterCombo() -{ - delete d; -} - -void KFileFilterCombo::setFilter(const TQString& filter) -{ - clear(); - filters.clear(); - d->hasAllSupportedFiles = false; - - if (!filter.isEmpty()) { - TQString tmp = filter; - int index = tmp.find('\n'); - while (index > 0) { - filters.append(tmp.left(index)); - tmp = tmp.mid(index + 1); - index = tmp.find('\n'); - } - filters.append(tmp); - } - else - filters.append( d->defaultFilter ); - - TQStringList::ConstIterator it; - TQStringList::ConstIterator end(filters.end()); - for (it = filters.begin(); it != end; ++it) { - int tab = (*it).find('|'); - insertItem((tab < 0) ? *it : - (*it).mid(tab + 1)); - } - - d->lastFilter = currentText(); - d->isMimeFilter = false; -} - -TQString KFileFilterCombo::currentFilter() const -{ - TQString f = currentText(); - if (f == text(currentItem())) { // user didn't edit the text - f = *filters.at(currentItem()); - if ( d->isMimeFilter || (currentItem() == 0 && d->hasAllSupportedFiles) ) { - return f; // we have a mimetype as filter - } - } - - int tab = f.find('|'); - if (tab < 0) - return f; - else - return f.left(tab); -} - -void KFileFilterCombo::setCurrentFilter( const TQString& filter ) -{ - int pos = 0; - for( TQStringList::ConstIterator it = filters.begin(); - it != filters.end(); - ++it, ++pos ) { - if( *it == filter ) { - setCurrentItem( pos ); - filterChanged(); - return; - } - } - setCurrentText( filter ); - filterChanged(); -} - -void KFileFilterCombo::setMimeFilter( const TQStringList& types, - const TQString& defaultType ) -{ - clear(); - filters.clear(); - TQString delim = TQString::fromLatin1(", "); - d->hasAllSupportedFiles = false; - - m_allTypes = defaultType.isEmpty() && (types.count() > 1); - - TQString allComments, allTypes; - int i = 0; - for(TQStringList::ConstIterator it = types.begin(); it != types.end(); ++it, ++i) - { - if ( m_allTypes && it != types.begin() ) { - allComments += delim; - allTypes += ' '; - } - - kdDebug(kfile_area) << *it << endl; - KMimeType::Ptr type = KMimeType::mimeType( *it ); - filters.append( type->name() ); - if ( m_allTypes ) - { - allTypes += type->name(); - allComments += type->comment(); - } - insertItem( type->comment() ); - if ( type->name() == defaultType ) - setCurrentItem( i ); - } - - if ( m_allTypes ) - { - if ( i < 3 ) // show the mime-comments of at max 3 types - insertItem( allComments, 0 ); - else { - insertItem( i18n("All Supported Files"), 0 ); - d->hasAllSupportedFiles = true; - } - - filters.prepend( allTypes ); - } - - d->lastFilter = currentText(); - d->isMimeFilter = true; -} - -void KFileFilterCombo::slotFilterChanged() -{ - d->lastFilter = currentText(); -} - -bool KFileFilterCombo::eventFilter( TQObject *o, TQEvent *e ) -{ - if ( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(lineEdit()) && e->type() == TQEvent::FocusOut ) { - if ( currentText() != d->lastFilter ) - emit filterChanged(); - } - - return KComboBox::eventFilter( o, e ); -} - -void KFileFilterCombo::setDefaultFilter( const TQString& filter ) -{ - d->defaultFilter = filter; -} - -TQString KFileFilterCombo::defaultFilter() const -{ - return d->defaultFilter; -} - -void KFileFilterCombo::virtual_hook( int id, void* data ) -{ KComboBox::virtual_hook( id, data ); } - -#include "kfilefiltercombo.moc" diff --git a/kio/kfile/kfilefiltercombo.h b/kio/kfile/kfilefiltercombo.h deleted file mode 100644 index 589376d0c..000000000 --- a/kio/kfile/kfilefiltercombo.h +++ /dev/null @@ -1,104 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) Stephan Kulow <coolo@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef KFILEFILTERCOMBO_H -#define KFILEFILTERCOMBO_H - -#include <tqstringlist.h> -#include <tqptrdict.h> - -#include <kcombobox.h> -#include <kmimetype.h> - -class KFileFilterComboPrivate; - -class TDEIO_EXPORT KFileFilterCombo : public KComboBox -{ - Q_OBJECT - - public: - KFileFilterCombo(TQWidget *parent= 0, const char *name= 0); - ~KFileFilterCombo(); - - void setFilter(const TQString& filter); - - /** - * @returns the current filter, either something like "*.cpp *.h" - * or the current mimetype, like "text/html", or a list of those, like - " "text/html text/plain image/png", all separated with one space. - */ - TQString currentFilter() const; - - /** - * Sets the current filter. Filter must match one of the filter items - * passed before to this widget. - * @since 3.4 - */ - void setCurrentFilter( const TQString& filter ); - - /** - * Sets a list of mimetypes. - * If @p defaultType is set, it will be set as the current item. - * Otherwise, a first item showing all the mimetypes will be created. - */ - void setMimeFilter( const TQStringList& types, const TQString& defaultType ); - - /** - * @return true if the filter's first item is the list of all mimetypes - */ - bool showsAllTypes() const { return m_allTypes; } - - /** - * This method allows you to set a default-filter, that is used when an - * empty filter is set. Make sure you call this before calling - * setFilter(). - * - * By default, this is set to i18n("*|All Files") - * @see defaultFilter - */ - void setDefaultFilter( const TQString& filter ); - - /** - * @return the default filter, used when an empty filter is set. - * @see setDefaultFilter - */ - TQString defaultFilter() const; - - protected: - virtual bool eventFilter( TQObject *o, TQEvent *e ); - -// KDE4: those variables are private. filters() was added - TQStringList filters; - bool m_allTypes; - - signals: - void filterChanged(); - -private slots: - void slotFilterChanged(); - -protected: - virtual void virtual_hook( int id, void* data ); -private: - friend class KFileDialog; // gone in KDE4 - class KFileFilterComboPrivate; - KFileFilterComboPrivate *d; -}; - -#endif diff --git a/kio/kfile/kfileiconview.cpp b/kio/kfile/kfileiconview.cpp deleted file mode 100644 index f0ef11bfe..000000000 --- a/kio/kfile/kfileiconview.cpp +++ /dev/null @@ -1,943 +0,0 @@ -// -*- c++ -*- -/* This file is part of the KDE libraries - Copyright (C) 1997 Stephan Kulow <coolo@kde.org> - 2000,2001,2002 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ -#include <tqt.h> - -#include <tqfontmetrics.h> -#include <tqkeycode.h> -#include <tqlabel.h> -#include <tqpainter.h> -#include <tqpixmap.h> -#include <tqregexp.h> -#include <tqtimer.h> -#include <tqtooltip.h> - -#include <kaction.h> -#include <kapplication.h> -#include <klocale.h> -#include <kfileitem.h> -#include <kiconeffect.h> -#include <kglobalsettings.h> -#include <kurldrag.h> -#include <kio/previewjob.h> - -#include "kfileiconview.h" -#include "config-kfile.h" - -#define DEFAULT_PREVIEW_SIZE 60 -#define DEFAULT_SHOW_PREVIEWS false -#define DEFAULT_VIEW_MODE "SmallColumns" - -KFileIconViewItem::~KFileIconViewItem() -{ - fileInfo()->removeExtraData( iconView() ); -} - -class KFileIconView::KFileIconViewPrivate -{ -public: - KFileIconViewPrivate( KFileIconView *parent ) { - previewIconSize = 60; - job = 0; - dropItem = 0; - - noArrangement = false; - ignoreMaximumSize = false; - smallColumns = new KRadioAction( i18n("Small Icons"), 0, TQT_TQOBJECT(parent), - TQT_SLOT( slotSmallColumns() ), - parent->actionCollection(), - "small columns" ); - - largeRows = new KRadioAction( i18n("Large Icons"), 0, TQT_TQOBJECT(parent), - TQT_SLOT( slotLargeRows() ), - parent->actionCollection(), - "large rows" ); - - smallColumns->setExclusiveGroup(TQString::fromLatin1("IconView mode")); - largeRows->setExclusiveGroup(TQString::fromLatin1("IconView mode")); - - previews = new KToggleAction( i18n("Thumbnail Previews"), 0, - parent->actionCollection(), - "show previews" ); - zoomIn = KStdAction::zoomIn( TQT_TQOBJECT(parent), TQT_SLOT( zoomIn() ), - parent->actionCollection(), "zoomIn" ); - zoomOut = KStdAction::zoomOut( TQT_TQOBJECT(parent), TQT_SLOT( zoomOut() ), - parent->actionCollection(), "zoomOut" ); - - previews->setGroup("previews"); - zoomIn->setGroup("previews"); - zoomOut->setGroup("previews"); - - connect( previews, TQT_SIGNAL( toggled( bool )), - parent, TQT_SLOT( slotPreviewsToggled( bool ))); - - connect( &previewTimer, TQT_SIGNAL( timeout() ), - parent, TQT_SLOT( showPreviews() )); - connect( &autoOpenTimer, TQT_SIGNAL( timeout() ), - parent, TQT_SLOT( slotAutoOpen() )); - } - - ~KFileIconViewPrivate() { - if ( job ) - job->kill(); - } - - KRadioAction *smallColumns, *largeRows; - KAction *zoomIn, *zoomOut; - KToggleAction *previews; - TDEIO::PreviewJob *job; - KFileIconViewItem *dropItem; - TQTimer previewTimer; - TQTimer autoOpenTimer; - TQStringList previewMimeTypes; - int previewIconSize; - bool noArrangement :1; - bool ignoreMaximumSize :1; -}; - -KFileIconView::KFileIconView(TQWidget *parent, const char *name) - : KIconView(parent, name), KFileView() -{ - d = new KFileIconViewPrivate( this ); - - setViewName( i18n("Icon View") ); - - toolTip = 0; - setResizeMode( Adjust ); - setMaxItemWidth( 300 ); - setWordWrapIconText( false ); - setArrangement( TopToBottom ); - setAutoArrange( true ); - setItemsMovable( false ); - setMode( KIconView::Select ); - KIconView::setSorting( true ); - // as long as TQIconView only shows tooltips when the cursor is over the - // icon (and not the text), we have to create our own tooltips - setShowToolTips( false ); - slotSmallColumns(); - d->smallColumns->setChecked( true ); - - connect( this, TQT_SIGNAL( returnPressed(TQIconViewItem *) ), - TQT_SLOT( slotActivate( TQIconViewItem *) ) ); - - // we want single click _and_ double click (as convenience) - connect( this, TQT_SIGNAL( clicked(TQIconViewItem *, const TQPoint&) ), - TQT_SLOT( selected( TQIconViewItem *) ) ); - connect( this, TQT_SIGNAL( doubleClicked(TQIconViewItem *, const TQPoint&) ), - TQT_SLOT( slotActivate( TQIconViewItem *) ) ); - - connect( this, TQT_SIGNAL( onItem( TQIconViewItem * ) ), - TQT_SLOT( showToolTip( TQIconViewItem * ) ) ); - connect( this, TQT_SIGNAL( onViewport() ), - TQT_SLOT( removeToolTip() ) ); - connect( this, TQT_SIGNAL( contextMenuRequested(TQIconViewItem*,const TQPoint&)), - TQT_SLOT( slotActivateMenu( TQIconViewItem*, const TQPoint& ) ) ); - - KFile::SelectionMode sm = KFileView::selectionMode(); - switch ( sm ) { - case KFile::Multi: - TQIconView::setSelectionMode( TQIconView::Multi ); - break; - case KFile::Extended: - TQIconView::setSelectionMode( TQIconView::Extended ); - break; - case KFile::NoSelection: - TQIconView::setSelectionMode( TQIconView::NoSelection ); - break; - default: // fall through - case KFile::Single: - TQIconView::setSelectionMode( TQIconView::Single ); - break; - } - - if ( sm == KFile::Multi || sm == KFile::Extended ) - connect( this, TQT_SIGNAL( selectionChanged() ), - TQT_SLOT( slotSelectionChanged() )); - else - connect( this, TQT_SIGNAL( selectionChanged( TQIconViewItem * )), - TQT_SLOT( highlighted( TQIconViewItem * ))); - - viewport()->installEventFilter( this ); - - // for mimetype resolving - m_resolver = new KMimeTypeResolver<KFileIconViewItem,KFileIconView>(this); -} - -KFileIconView::~KFileIconView() -{ - delete m_resolver; - removeToolTip(); - delete d; -} - -void KFileIconView::readConfig( TDEConfig *kc, const TQString& group ) -{ - TQString gr = group.isEmpty() ? TQString("KFileIconView") : group; - TDEConfigGroupSaver cs( kc, gr ); - TQString small = TQString::fromLatin1("SmallColumns"); - d->previewIconSize = kc->readNumEntry( "Preview Size", DEFAULT_PREVIEW_SIZE ); - d->previews->setChecked( kc->readBoolEntry( "ShowPreviews", DEFAULT_SHOW_PREVIEWS ) ); - - if ( kc->readEntry("ViewMode", DEFAULT_VIEW_MODE ) == small ) { - d->smallColumns->setChecked( true ); - slotSmallColumns(); - } - else { - d->largeRows->setChecked( true ); - slotLargeRows(); - } - - if ( d->previews->isChecked() ) - showPreviews(); -} - -void KFileIconView::writeConfig( TDEConfig *kc, const TQString& group ) -{ - TQString gr = group.isEmpty() ? TQString("KFileIconView") : group; - TDEConfigGroupSaver cs( kc, gr ); - - TQString viewMode = d->smallColumns->isChecked() ? - TQString::fromLatin1("SmallColumns") : - TQString::fromLatin1("LargeRows"); - if(!kc->hasDefault( "ViewMode" ) && viewMode == DEFAULT_VIEW_MODE ) - kc->revertToDefault( "ViewMode" ); - else - kc->writeEntry( "ViewMode", viewMode ); - - int previewsIconSize = d->previewIconSize; - if(!kc->hasDefault( "Preview Size" ) && previewsIconSize == DEFAULT_PREVIEW_SIZE ) - kc->revertToDefault( "Preview Size" ); - else - kc->writeEntry( "Preview Size", previewsIconSize ); - - bool showPreviews = d->previews->isChecked(); - if(!kc->hasDefault( "ShowPreviews" ) && showPreviews == DEFAULT_SHOW_PREVIEWS ) - kc->revertToDefault( "ShowPreviews" ); - else - kc->writeEntry( "ShowPreviews", showPreviews ); -} - -void KFileIconView::removeToolTip() -{ - delete toolTip; - toolTip = 0; -} - -void KFileIconView::showToolTip( TQIconViewItem *item ) -{ - delete toolTip; - toolTip = 0; - - if ( !item ) - return; - - int w = maxItemWidth() - ( itemTextPos() == TQIconView::Bottom ? 0 : - item->pixmapRect().width() ) - 4; - if ( fontMetrics().width( item->text() ) >= w ) { - toolTip = new TQLabel( TQString::fromLatin1(" %1 ").arg(item->text()), 0, - "myToolTip", - (WFlags)(WStyle_StaysOnTop | WStyle_Customize | WStyle_NoBorder | WStyle_Tool | WX11BypassWM) ); - toolTip->setFrameStyle( TQFrame::Plain | TQFrame::Box ); - toolTip->setLineWidth( 1 ); - toolTip->setAlignment( AlignLeft | AlignTop ); - toolTip->move( TQCursor::pos() + TQPoint( 14, 14 ) ); - toolTip->adjustSize(); - TQRect screen = TQApplication::desktop()->screenGeometry( - TQApplication::desktop()->screenNumber(TQCursor::pos())); - if (toolTip->x()+toolTip->width() > screen.right()) { - toolTip->move(toolTip->x()+screen.right()-toolTip->x()-toolTip->width(), toolTip->y()); - } - if (toolTip->y()+toolTip->height() > screen.bottom()) { - toolTip->move(toolTip->x(), screen.bottom()-toolTip->y()-toolTip->height()+toolTip->y()); - } - toolTip->setFont( TQToolTip::font() ); - toolTip->setPalette( TQToolTip::palette(), true ); - toolTip->show(); - } -} - -void KFileIconView::slotActivateMenu( TQIconViewItem* item, const TQPoint& pos ) -{ - if ( !item ) { - sig->activateMenu( 0, pos ); - return; - } - KFileIconViewItem *i = (KFileIconViewItem*) item; - sig->activateMenu( i->fileInfo(), pos ); -} - -void KFileIconView::hideEvent( TQHideEvent *e ) -{ - removeToolTip(); - KIconView::hideEvent( e ); -} - -void KFileIconView::keyPressEvent( TQKeyEvent *e ) -{ - KIconView::keyPressEvent( e ); - - // ignore Ctrl-Return so that the dialog can catch it. - if ( (e->state() & ControlButton) && - (e->key() == Key_Return || e->key() == Key_Enter) ) - e->ignore(); -} - -void KFileIconView::setSelected( const KFileItem *info, bool enable ) -{ - KFileIconViewItem *item = viewItem( info ); - if ( item ) - KIconView::setSelected( item, enable, true ); -} - -void KFileIconView::selectAll() -{ - if (KFileView::selectionMode() == KFile::NoSelection || - KFileView::selectionMode() == KFile::Single) - return; - - KIconView::selectAll( true ); -} - -void KFileIconView::clearSelection() -{ - KIconView::clearSelection(); -} - -void KFileIconView::invertSelection() -{ - KIconView::invertSelection(); -} - -void KFileIconView::clearView() -{ - m_resolver->m_lstPendingMimeIconItems.clear(); - - KIconView::clear(); - stopPreview(); -} - -void KFileIconView::insertItem( KFileItem *i ) -{ - KFileView::insertItem( i ); - - TQIconView* qview = static_cast<TQIconView*>( this ); - // Since creating and initializing an item leads to a repaint, - // we disable updates on the IconView for a while. - qview->setUpdatesEnabled( false ); - KFileIconViewItem *item = new KFileIconViewItem( qview, i ); - initItem( item, i, true ); - qview->setUpdatesEnabled( true ); - - if ( !i->isMimeTypeKnown() ) - m_resolver->m_lstPendingMimeIconItems.append( item ); - - i->setExtraData( this, item ); -} - -void KFileIconView::slotActivate( TQIconViewItem *item ) -{ - if ( !item ) - return; - const KFileItem *fi = ( (KFileIconViewItem*)item )->fileInfo(); - if ( fi ) - sig->activate( fi ); -} - -void KFileIconView::selected( TQIconViewItem *item ) -{ - if ( !item || (TDEApplication::keyboardMouseState() & (ShiftButton | ControlButton)) != 0 ) - return; - - if ( TDEGlobalSettings::singleClick() ) { - const KFileItem *fi = ( (KFileIconViewItem*)item )->fileInfo(); - if ( fi && (fi->isDir() || !onlyDoubleClickSelectsFiles()) ) - sig->activate( fi ); - } -} - -void KFileIconView::setCurrentItem( const KFileItem *item ) -{ - KFileIconViewItem *it = viewItem( item ); - if ( it ) - KIconView::setCurrentItem( it ); -} - -KFileItem * KFileIconView::currentFileItem() const -{ - KFileIconViewItem *current = static_cast<KFileIconViewItem*>( currentItem() ); - if ( current ) - return current->fileInfo(); - - return 0L; -} - -void KFileIconView::highlighted( TQIconViewItem *item ) -{ - if ( !item ) - return; - const KFileItem *fi = ( (KFileIconViewItem*)item )->fileInfo(); - if ( fi ) - sig->highlightFile( fi ); -} - -void KFileIconView::setSelectionMode( KFile::SelectionMode sm ) -{ - disconnect( TQT_SIGNAL( selectionChanged() ), this ); - disconnect( TQT_SIGNAL( selectionChanged( TQIconViewItem * )), this ); - - KFileView::setSelectionMode( sm ); - switch ( KFileView::selectionMode() ) { - case KFile::Multi: - TQIconView::setSelectionMode( TQIconView::Multi ); - break; - case KFile::Extended: - TQIconView::setSelectionMode( TQIconView::Extended ); - break; - case KFile::NoSelection: - TQIconView::setSelectionMode( TQIconView::NoSelection ); - break; - default: // fall through - case KFile::Single: - TQIconView::setSelectionMode( TQIconView::Single ); - break; - } - - if ( sm == KFile::Multi || sm == KFile::Extended ) - connect( this, TQT_SIGNAL( selectionChanged() ), - TQT_SLOT( slotSelectionChanged() )); - else - connect( this, TQT_SIGNAL( selectionChanged( TQIconViewItem * )), - TQT_SLOT( highlighted( TQIconViewItem * ))); -} - -bool KFileIconView::isSelected( const KFileItem *i ) const -{ - KFileIconViewItem *item = viewItem( i ); - return (item && item->isSelected()); -} - -void KFileIconView::updateView( bool b ) -{ - if ( !b ) - return; // eh? - - KFileIconViewItem *item = static_cast<KFileIconViewItem*>(TQIconView::firstItem()); - if ( item ) { - do { - if ( d->previews->isChecked() ) { - if ( canPreview( item->fileInfo() ) ) - item->setPixmapSize( TQSize( d->previewIconSize, d->previewIconSize ) ); - } - else { - // unset pixmap size (used for previews) - if ( !item->pixmapSize().isNull() ) - item->setPixmapSize( TQSize( 0, 0 ) ); - } - // recalculate item parameters but avoid an in-place repaint - item->setPixmap( (item->fileInfo())->pixmap( myIconSize ), true, false ); - item = static_cast<KFileIconViewItem *>(item->nextItem()); - } while ( item != 0L ); - } -} - -void KFileIconView::updateView( const KFileItem *i ) -{ - KFileIconViewItem *item = viewItem( i ); - if ( item ) - initItem( item, i, true ); -} - -void KFileIconView::removeItem( const KFileItem *i ) -{ - if ( !i ) - return; - - if ( d->job ) - d->job->removeItem( i ); - - KFileIconViewItem *item = viewItem( i ); - m_resolver->m_lstPendingMimeIconItems.remove( item ); - delete item; - - KFileView::removeItem( i ); -} - -void KFileIconView::setIconSize( int size ) -{ - myIconSize = size; - updateIcons(); -} - -void KFileIconView::setPreviewSize( int size ) -{ - if ( size < 30 ) - size = 30; // minimum - - d->previewIconSize = size; - if ( d->previews->isChecked() ) - showPreviews(); -} - -void KFileIconView::setIgnoreMaximumSize(bool ignoreSize) -{ - d->ignoreMaximumSize = ignoreSize; -} - -void KFileIconView::updateIcons() -{ - updateView( true ); - arrangeItemsInGrid(); -} - -void KFileIconView::ensureItemVisible( const KFileItem *i ) -{ - KFileIconViewItem *item = viewItem( i ); - if ( item ) - KIconView::ensureItemVisible( item ); -} - -void KFileIconView::slotSelectionChanged() -{ - sig->highlightFile( 0L ); -} - -void KFileIconView::slotSmallColumns() -{ - // setItemTextPos(), setArrangement(), setWordWrapIconText() and - // setIconSize() all call arrangeItemsInGrid() :( Prevent this. - d->noArrangement = true; // stop arrangeItemsInGrid()! - - // Make sure to uncheck previews if selected - if ( d->previews->isChecked() ) - { - stopPreview(); - d->previews->setChecked( false ); - } - setGridX( -1 ); - setMaxItemWidth( 300 ); - setItemTextPos( Right ); - setArrangement( TopToBottom ); - setWordWrapIconText( false ); - setSpacing( 0 ); - - d->noArrangement = false; // now we can arrange - setIconSize( KIcon::SizeSmall ); -} - -void KFileIconView::slotLargeRows() -{ - // setItemTextPos(), setArrangement(), setWordWrapIconText() and - // setIconSize() all call arrangeItemsInGrid() :( Prevent this. - d->noArrangement = true; // stop arrangeItemsInGrid()! - - setGridX( TDEGlobal::iconLoader()->currentSize( KIcon::Desktop ) + 50 ); - setItemTextPos( Bottom ); - setArrangement( LeftToRight ); - setWordWrapIconText( true ); - setSpacing( 5 ); // default in QIconView - - d->noArrangement = false; // now we can arrange - setIconSize( KIcon::SizeMedium ); -} - -void KFileIconView::stopPreview() -{ - if ( d->job ) { - d->job->kill(); - d->job = 0L; - } -} - -void KFileIconView::slotPreviewsToggled( bool on ) -{ - if ( on ) - showPreviews(); - else { - stopPreview(); - slotLargeRows(); - } -} - -void KFileIconView::showPreviews() -{ - if ( d->previewMimeTypes.isEmpty() ) - d->previewMimeTypes = TDEIO::PreviewJob::supportedMimeTypes(); - - stopPreview(); - d->previews->setChecked( true ); - - if ( !d->largeRows->isChecked() ) { - d->largeRows->setChecked( true ); - slotLargeRows(); // also sets the icon size and updates the grid - } - else { - updateIcons(); - } - - d->job = TDEIO::filePreview(*items(), d->previewIconSize,d->previewIconSize); - d->job->setIgnoreMaximumSize(d->ignoreMaximumSize); - - connect( d->job, TQT_SIGNAL( result( TDEIO::Job * )), - this, TQT_SLOT( slotPreviewResult( TDEIO::Job * ))); - connect( d->job, TQT_SIGNAL( gotPreview( const KFileItem*, const TQPixmap& )), - TQT_SLOT( gotPreview( const KFileItem*, const TQPixmap& ) )); -// connect( d->job, TQT_SIGNAL( failed( const KFileItem* )), -// this, TQT_SLOT( slotFailed( const KFileItem* ) )); -} - -void KFileIconView::slotPreviewResult( TDEIO::Job *job ) -{ - if ( job == d->job ) - d->job = 0L; -} - -void KFileIconView::gotPreview( const KFileItem *item, const TQPixmap& pix ) -{ - KFileIconViewItem *it = viewItem( item ); - if ( it ) - if( item->overlays() & KIcon::HiddenOverlay ) - { - TQPixmap p( pix ); - - KIconEffect::semiTransparent( p ); - it->setPixmap( p ); - } - else - it->setPixmap( pix ); -} - -bool KFileIconView::canPreview( const KFileItem *item ) const -{ - TQStringList::Iterator it = d->previewMimeTypes.begin(); - TQRegExp r; - r.setWildcard( true ); - - for ( ; it != d->previewMimeTypes.end(); ++it ) { - TQString type = *it; - // the "mimetype" can be "image/*" - if ( type.at( type.length() - 1 ) == '*' ) { - r.setPattern( type ); - if ( r.search( item->mimetype() ) != -1 ) - return true; - } - else - if ( item->mimetype() == type ) - return true; - } - - return false; -} - -KFileItem * KFileIconView::firstFileItem() const -{ - KFileIconViewItem *item = static_cast<KFileIconViewItem*>( firstItem() ); - if ( item ) - return item->fileInfo(); - return 0L; -} - -KFileItem * KFileIconView::nextItem( const KFileItem *fileItem ) const -{ - if ( fileItem ) { - KFileIconViewItem *item = viewItem( fileItem ); - if ( item && item->nextItem() ) - return ((KFileIconViewItem*) item->nextItem())->fileInfo(); - } - return 0L; -} - -KFileItem * KFileIconView::prevItem( const KFileItem *fileItem ) const -{ - if ( fileItem ) { - KFileIconViewItem *item = viewItem( fileItem ); - if ( item && item->prevItem() ) - return ((KFileIconViewItem*) item->prevItem())->fileInfo(); - } - return 0L; -} - -void KFileIconView::setSorting( TQDir::SortSpec spec ) -{ - KFileView::setSorting( spec ); - KFileItemListIterator it( *items() ); - - KFileItem *item; - - if ( spec & TQDir::Time ) { - for ( ; (item = it.current()); ++it ) - // warning, time_t is often signed -> cast it - viewItem(item)->setKey( sortingKey( (unsigned long)item->time( TDEIO::UDS_MODIFICATION_TIME ), item->isDir(), spec )); - } - - else if ( spec & TQDir::Size ) { - for ( ; (item = it.current()); ++it ) - viewItem(item)->setKey( sortingKey( item->size(), item->isDir(), - spec )); - } - else { // Name or Unsorted - for ( ; (item = it.current()); ++it ) - viewItem(item)->setKey( sortingKey( item->text(), item->isDir(), - spec )); - } - - KIconView::setSorting( true, !isReversed() ); - sort( !isReversed() ); -} - -// -// mimetype determination on demand -// -void KFileIconView::mimeTypeDeterminationFinished() -{ - // anything to do? -} - -void KFileIconView::determineIcon( KFileIconViewItem *item ) -{ - (void) item->fileInfo()->determineMimeType(); - updateView( item->fileInfo() ); -} - -void KFileIconView::listingCompleted() -{ - arrangeItemsInGrid(); - - // TQIconView doesn't set the current item automatically, so we have to do - // that. We don't want to emit selectionChanged() tho. - if ( !currentItem() ) { - bool block = signalsBlocked(); - blockSignals( true ); - TQIconViewItem *item = viewItem( firstFileItem() ); - KIconView::setCurrentItem( item ); - KIconView::setSelected( item, false ); - blockSignals( block ); - } - - m_resolver->start( d->previews->isChecked() ? 0 : 10 ); -} - -// need to remove our tooltip, eventually -bool KFileIconView::eventFilter( TQObject *o, TQEvent *e ) -{ - if ( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(viewport()) || TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(this) ) { - int type = e->type(); - if ( type == TQEvent::Leave || - type == TQEvent::FocusOut ) - removeToolTip(); - } - - return KIconView::eventFilter( o, e ); -} - -///////////////////////////////////////////////////////////////// - -// ### workaround for Qt3 Bug -void KFileIconView::showEvent( TQShowEvent *e ) -{ - KIconView::showEvent( e ); -} - - -void KFileIconView::initItem( KFileIconViewItem *item, const KFileItem *i, - bool updateTextAndPixmap ) -{ - if ( d->previews->isChecked() && canPreview( i ) ) - item->setPixmapSize( TQSize( d->previewIconSize, d->previewIconSize ) ); - - if ( updateTextAndPixmap ) - { - // this causes a repaint of the item, which we want to avoid during - // directory listing, when all items are created. We want to paint all - // items at once, not every single item in that case. - item->setText( i->text() , false, false ); - item->setPixmap( i->pixmap( myIconSize ) ); - } - - // see also setSorting() - TQDir::SortSpec spec = KFileView::sorting(); - - if ( spec & TQDir::Time ) - // warning, time_t is often signed -> cast it - item->setKey( sortingKey( (unsigned long) i->time( TDEIO::UDS_MODIFICATION_TIME ), - i->isDir(), spec )); - else if ( spec & TQDir::Size ) - item->setKey( sortingKey( i->size(), i->isDir(), spec )); - - else // Name or Unsorted - item->setKey( sortingKey( i->text(), i->isDir(), spec )); - - //tqDebug("** key for: %s: %s", i->text().latin1(), item->key().latin1()); - - if ( d->previews->isChecked() ) - d->previewTimer.start( 10, true ); -} - -void KFileIconView::arrangeItemsInGrid( bool update ) -{ - if ( d->noArrangement ) - return; - - KIconView::arrangeItemsInGrid( update ); -} - -void KFileIconView::zoomIn() -{ - setPreviewSize( d->previewIconSize + 30 ); -} - -void KFileIconView::zoomOut() -{ - setPreviewSize( d->previewIconSize - 30 ); -} - -TQDragObject *KFileIconView::dragObject() -{ - // create a list of the URL:s that we want to drag - KURL::List urls; - KFileItemListIterator it( * KFileView::selectedItems() ); - for ( ; it.current(); ++it ){ - urls.append( (*it)->url() ); - } - TQPixmap pixmap; - if( urls.count() > 1 ) - pixmap = DesktopIcon( "tdemultiple", iconSize() ); - if( pixmap.isNull() ) - pixmap = currentFileItem()->pixmap( iconSize() ); - - TQPoint hotspot; - hotspot.setX( pixmap.width() / 2 ); - hotspot.setY( pixmap.height() / 2 ); - TQDragObject* myDragObject = new KURLDrag( urls, widget() ); - myDragObject->setPixmap( pixmap, hotspot ); - return myDragObject; -} - -void KFileIconView::slotAutoOpen() -{ - d->autoOpenTimer.stop(); - if( !d->dropItem ) - return; - - KFileItem *fileItem = d->dropItem->fileInfo(); - if (!fileItem) - return; - - if( fileItem->isFile() ) - return; - - if ( fileItem->isDir() || fileItem->isLink()) - sig->activate( fileItem ); -} - -bool KFileIconView::acceptDrag(TQDropEvent* e) const -{ - return KURLDrag::canDecode( e ) && - (e->source()!=const_cast<KFileIconView*>(this)) && - ( e->action() == TQDropEvent::Copy - || e->action() == TQDropEvent::Move - || e->action() == TQDropEvent::Link ); -} - -void KFileIconView::contentsDragEnterEvent( TQDragEnterEvent *e ) -{ - if ( ! acceptDrag( e ) ) { // can we decode this ? - e->ignore(); // No - return; - } - e->acceptAction(); // Yes - - if ((dropOptions() & AutoOpenDirs) == 0) - return; - - KFileIconViewItem *item = dynamic_cast<KFileIconViewItem*>(findItem( contentsToViewport( e->pos() ) )); - if ( item ) { // are we over an item ? - d->dropItem = item; - d->autoOpenTimer.start( autoOpenDelay() ); // restart timer - } - else - { - d->dropItem = 0; - d->autoOpenTimer.stop(); - } -} - -void KFileIconView::contentsDragMoveEvent( TQDragMoveEvent *e ) -{ - if ( ! acceptDrag( e ) ) { // can we decode this ? - e->ignore(); // No - return; - } - e->acceptAction(); // Yes - - if ((dropOptions() & AutoOpenDirs) == 0) - return; - - KFileIconViewItem *item = dynamic_cast<KFileIconViewItem*>(findItem( contentsToViewport( e->pos() ) )); - if ( item ) { // are we over an item ? - if (d->dropItem != item) - { - d->dropItem = item; - d->autoOpenTimer.start( autoOpenDelay() ); // restart timer - } - } - else - { - d->dropItem = 0; - d->autoOpenTimer.stop(); - } -} - -void KFileIconView::contentsDragLeaveEvent( TQDragLeaveEvent * ) -{ - d->dropItem = 0; - d->autoOpenTimer.stop(); -} - -void KFileIconView::contentsDropEvent( TQDropEvent *e ) -{ - d->dropItem = 0; - d->autoOpenTimer.stop(); - - if ( ! acceptDrag( e ) ) { // can we decode this ? - e->ignore(); // No - return; - } - e->acceptAction(); // Yes - - KFileIconViewItem *item = dynamic_cast<KFileIconViewItem*>(findItem( contentsToViewport( e->pos() ) )); - KFileItem * fileItem = 0; - if (item) - fileItem = item->fileInfo(); - - emit dropped(e, fileItem); - - KURL::List urls; - if (KURLDrag::decode( e, urls ) && !urls.isEmpty()) - { - emit dropped(e, urls, fileItem ? fileItem->url() : KURL()); - sig->dropURLs(fileItem, e, urls); - } -} - -void KFileIconView::virtual_hook( int id, void* data ) -{ KIconView::virtual_hook( id, data ); - KFileView::virtual_hook( id, data ); } - -#include "kfileiconview.moc" diff --git a/kio/kfile/kfileiconview.h b/kio/kfile/kfileiconview.h deleted file mode 100644 index 98afc0a6e..000000000 --- a/kio/kfile/kfileiconview.h +++ /dev/null @@ -1,267 +0,0 @@ -// -*- c++ -*- -/* This file is part of the KDE libraries - Copyright (C) 1997 Stephan Kulow <coolo@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef KFILEICONVIEW_H -#define KFILEICONVIEW_H - -#include <tqt.h> - -#include <kiconview.h> -#include <kiconloader.h> -#include <kfileview.h> -#include <kmimetyperesolver.h> -#include <kfile.h> - -class KFileItem; -class TQWidget; -class TQLabel; - -/** - * An item for the iconview, that has a reference to its corresponding - * KFileItem. - */ -class TDEIO_EXPORT KFileIconViewItem : public KIconViewItem -{ -public: - KFileIconViewItem( TQIconView *parent, const TQString &text, - const TQPixmap &pixmap, - KFileItem *fi ) - : KIconViewItem( parent, text, pixmap ), inf( fi ) {} - /** - * @since 3.1 - */ - KFileIconViewItem( TQIconView *parent, KFileItem *fi ) - : KIconViewItem( parent ), inf( fi ) {} - - virtual ~KFileIconViewItem(); - - /** - * @returns the corresponding KFileItem - */ - KFileItem *fileInfo() const { - return inf; - } - -private: - KFileItem *inf; - -private: - class KFileIconViewItemPrivate; - KFileIconViewItemPrivate *d; - -}; - -namespace TDEIO { - class Job; -} - -/** - * An icon-view capable of showing KFileItem's. Used in the filedialog - * for example. Most of the documentation is in KFileView class. - * - * @see KDirOperator - * @see KCombiView - * @see KFileDetailView - */ -class TDEIO_EXPORT KFileIconView : public KIconView, public KFileView -{ - Q_OBJECT - -public: - KFileIconView(TQWidget *parent, const char *name); - virtual ~KFileIconView(); - - virtual TQWidget *widget() { return this; } - virtual void clearView(); - virtual void setAutoUpdate( bool ) {} // ### unused. remove in KDE4 - - virtual void updateView( bool ); - virtual void updateView(const KFileItem*); - virtual void removeItem(const KFileItem*); - - virtual void listingCompleted(); - - virtual void insertItem( KFileItem *i ); - virtual void setSelectionMode( KFile::SelectionMode sm ); - - virtual void setSelected(const KFileItem *, bool); - virtual bool isSelected(const KFileItem *i) const; - virtual void clearSelection(); - virtual void selectAll(); - virtual void invertSelection(); - - virtual void setCurrentItem( const KFileItem * ); - virtual KFileItem * currentFileItem() const; - virtual KFileItem * firstFileItem() const; - virtual KFileItem * nextItem( const KFileItem * ) const; - virtual KFileItem * prevItem( const KFileItem * ) const; - - /** - * Sets the size of the icons to show. Defaults to KIcon::SizeSmall. - */ - void setIconSize( int size ); - - /** - * Sets the size of the previews. Defaults to KIcon::SizeLarge. - */ - void setPreviewSize( int size ); - - /** - * Disables the "Maximum file size" configuration option for previews - * - * Set this before calling showPreviews() - * - * @since 3.4 - **/ - void setIgnoreMaximumSize(bool ignoreSize=true); - - /** - * @returns the current size used for icons. - */ - int iconSize() const { return myIconSize; } - - void ensureItemVisible( const KFileItem * ); - - virtual void setSorting(TQDir::SortSpec sort); - - virtual void readConfig( TDEConfig *, const TQString& group = TQString::null ); - virtual void writeConfig( TDEConfig *, const TQString& group = TQString::null); - - // for KMimeTypeResolver - void mimeTypeDeterminationFinished(); - void determineIcon( KFileIconViewItem *item ); - TQScrollView *scrollWidget() const { return (TQScrollView*) this; } - void setAcceptDrops(bool b) - { - KIconView::setAcceptDrops(b); - viewport()->setAcceptDrops(b); - } - -public slots: - /** - * Starts loading previews for all files shown and shows them. Switches - * into 'large rows' mode, if that isn't the current mode yet. - * - * @sa setIgnoreMaximumSize - */ - void showPreviews(); - - void zoomIn(); - - void zoomOut(); - - /** - * Reimplemented for performance reasons. - * @since 3.1 - */ - virtual void arrangeItemsInGrid( bool updated = true ); - -protected: - /** - * Reimplemented to not let TQIconView eat return-key events - */ - virtual void keyPressEvent( TQKeyEvent * ); - - /** - * Reimplemented to remove an eventual tooltip - */ - virtual void hideEvent( TQHideEvent * ); - - // ### workaround for Qt3 bug (see #35080) - virtual void showEvent( TQShowEvent * ); - - virtual bool eventFilter( TQObject *o, TQEvent *e ); - - // DND support - virtual TQDragObject *dragObject(); - virtual void contentsDragEnterEvent( TQDragEnterEvent *e ); - virtual void contentsDragMoveEvent( TQDragMoveEvent *e ); - virtual void contentsDragLeaveEvent( TQDragLeaveEvent *e ); - virtual void contentsDropEvent( TQDropEvent *ev ); - - // KDE4: Make virtual - bool acceptDrag(TQDropEvent* e ) const; - -private slots: - void selected( TQIconViewItem *item ); - void slotActivate( TQIconViewItem * ); - void highlighted( TQIconViewItem *item ); - void showToolTip( TQIconViewItem *item ); - void removeToolTip(); - void slotActivateMenu( TQIconViewItem *, const TQPoint& ); - void slotSelectionChanged(); - - void slotSmallColumns(); - void slotLargeRows(); - void slotPreviewsToggled( bool ); - - void slotPreviewResult( TDEIO::Job * ); - void gotPreview( const KFileItem *item, const TQPixmap& pix ); - void slotAutoOpen(); - -signals: - /** - * The user dropped something. - * @p fileItem points to the item dropped on or can be 0 if the - * user dropped on empty space. - * @since 3.2 - */ - void dropped(TQDropEvent *event, KFileItem *fileItem); - /** - * The user dropped the URLs @p urls. - * @p url points to the item dropped on or can be empty if the - * user dropped on empty space. - * @since 3.2 - */ - void dropped(TQDropEvent *event, const KURL::List &urls, const KURL &url); - -private: - KMimeTypeResolver<KFileIconViewItem,KFileIconView> *m_resolver; - - TQLabel *toolTip; - int th; - int myIconSize; - - virtual void insertItem(TQIconViewItem *a, TQIconViewItem *b) { KIconView::insertItem(a, b); } - virtual void setSelectionMode(TQIconView::SelectionMode m) { KIconView::setSelectionMode(m); } - virtual void setSelected(TQIconViewItem *i, bool a, bool b) { KIconView::setSelected(i, a, b); } - - bool canPreview( const KFileItem * ) const; - void stopPreview(); - - void updateIcons(); - - inline KFileIconViewItem * viewItem( const KFileItem *item ) const { - if ( item ) - return (KFileIconViewItem *) item->extraData( this ); - return 0L; - } - - void initItem(KFileIconViewItem *item, const KFileItem *i, - bool updateTextAndPixmap ); - -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KFileIconViewPrivate; - KFileIconViewPrivate *d; -}; - -#endif // KFILESIMPLEVIEW_H diff --git a/kio/kfile/kfilemetainfowidget.cpp b/kio/kfile/kfilemetainfowidget.cpp deleted file mode 100644 index c4df4a15d..000000000 --- a/kio/kfile/kfilemetainfowidget.cpp +++ /dev/null @@ -1,375 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2001,2002 Rolf Magnus <ramagnus@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - - $Id$ - */ - -#include "kfilemetainfowidget.h" - -#include <keditcl.h> -#include <klocale.h> -#include <knuminput.h> -#include <kcombobox.h> -#include <klineedit.h> -#include <kstringvalidator.h> -#include <kdebug.h> - -#include <tqlabel.h> -#include <tqcheckbox.h> -#include <tqspinbox.h> -#include <tqdatetimeedit.h> -#include <tqpixmap.h> -#include <tqimage.h> -#include <tqlayout.h> -#include <tqvalidator.h> - -/* - Widgets used for different types: - - bool : QCheckBox - int : QSpinBox - TQString : KComboBox if the validator is a KStringListValidator, else lineedit - TQDateTime : QDateTimeEdit - -*/ - -KFileMetaInfoWidget::KFileMetaInfoWidget(KFileMetaInfoItem item, - TQValidator* val, - TQWidget* parent, const char* name) - : TQWidget(parent, name), - m_value(item.value()), - m_item(item), - m_validator(val) -{ - init(item, ReadWrite); -} - -KFileMetaInfoWidget::KFileMetaInfoWidget(KFileMetaInfoItem item, - Mode mode, - TQValidator* val, - TQWidget* parent, const char* name) - : TQWidget(parent, name), - m_value(item.value()), - m_item(item), - m_validator(val) -{ - init(item, mode); -} - -void KFileMetaInfoWidget::init(KFileMetaInfoItem item, Mode mode) -{ - kdDebug(7033) << "*** item " << m_item.key() - << " is a " << value().typeName() << endl; - - if (m_item.isEditable() && !(mode & ReadOnly)) - m_widget = makeWidget(); - else - switch (m_value.type()) - { - case TQVariant::Image : - m_widget = new TQLabel(this, "info image"); - static_cast<TQLabel*>(m_widget)->setPixmap(TQPixmap(m_value.toImage())); - break; - case TQVariant::Pixmap : - m_widget = new TQLabel(this, "info pixmap"); - static_cast<TQLabel*>(m_widget)->setPixmap(m_value.toPixmap()); - break; - default: - m_widget = new TQLabel(item.string(true), this, "info label"); - } - - (new TQHBoxLayout(this))->addWidget(m_widget); -} - -KFileMetaInfoWidget::~KFileMetaInfoWidget() -{ -} - -TQWidget* KFileMetaInfoWidget::makeWidget() -{ - TQString valClass; - TQWidget* w; - - switch (m_value.type()) - { - case TQVariant::Invalid: // no type - // just make a label - w = new TQLabel(i18n("<Error>"), this, "label"); - break; - - case TQVariant::Int: // an int - case TQVariant::UInt: // an unsigned int - w = makeIntWidget(); - break; - - case TQVariant::Bool: // a bool - w = makeBoolWidget(); - break; - - case TQVariant::Double: // a double - w = makeDoubleWidget(); - break; - - - case TQVariant::Date: // a QDate - w = makeDateWidget(); - break; - - case TQVariant::Time: // a QTime - w = makeTimeWidget(); - break; - - case TQVariant::DateTime: // a QDateTime - w = makeDateTimeWidget(); - break; - -#if 0 - case TQVariant::Size: // a QSize - case TQVariant::String: // a QString - case TQVariant::List: // a QValueList - case TQVariant::Map: // a QMap - case TQVariant::StringList: // a QStringList - case TQVariant::Font: // a QFont - case TQVariant::Pixmap: // a QPixmap - case TQVariant::Brush: // a QBrush - case TQVariant::Rect: // a QRect - case TQVariant::Color: // a QColor - case TQVariant::Palette: // a QPalette - case TQVariant::ColorGroup: // a QColorGroup - case TQVariant::IconSet: // a QIconSet - case TQVariant::Point: // a QPoint - case TQVariant::Image: // a QImage - case TQVariant::CString: // a QCString - case TQVariant::PointArray: // a QPointArray - case TQVariant::Region: // a QRegion - case TQVariant::Bitmap: // a QBitmap - case TQVariant::Cursor: // a QCursor - case TQVariant::ByteArray: // a QByteArray - case TQVariant::BitArray: // a QBitArray - case TQVariant::SizePolicy: // a QSizePolicy - case TQVariant::KeySequence: // a QKeySequence -#endif - default: - w = makeStringWidget(); - } - - kdDebug(7033) << "*** item " << m_item.key() - << "is a " << m_item.value().typeName() << endl; - if (m_validator) - kdDebug(7033) << " and validator is a " << m_validator->className() << endl; - - kdDebug(7033) << "*** created a " << w->className() << " for it\n"; - - return w; -} - -// **************************************************************** -// now the different methods to make the widgets for specific types -// **************************************************************** - -TQWidget* KFileMetaInfoWidget::makeBoolWidget() -{ - TQCheckBox* cb = new TQCheckBox(this, "metainfo bool widget"); - cb->setChecked(m_item.value().toBool()); - connect(cb, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotChanged(bool))); - return cb; -} - -TQWidget* KFileMetaInfoWidget::makeIntWidget() -{ - TQSpinBox* sb = new TQSpinBox(this, "metainfo integer widget"); - sb->setValue(m_item.value().toInt()); - - if (m_validator) - { - if (m_validator->inherits(TQINTVALIDATOR_OBJECT_NAME_STRING)) - { - sb->setMinValue(static_cast<TQIntValidator*>(m_validator)->bottom()); - sb->setMaxValue(static_cast<TQIntValidator*>(m_validator)->top()); - } - reparentValidator(sb, m_validator); - sb->setValidator(m_validator); - } - - // make sure that an uint cannot be set to a value < 0 - if (m_item.type() == TQVariant::UInt) - sb->setMinValue(QMAX(sb->minValue(), 0)); - - connect(sb, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(slotChanged(int))); - return sb; -} - -TQWidget* KFileMetaInfoWidget::makeDoubleWidget() -{ - KDoubleNumInput* dni = new KDoubleNumInput(m_item.value().toDouble(), - this, "metainfo double widget"); - - - if (m_validator) - { - if (m_validator->inherits("QDoubleValidator")) - { - dni->setMinValue(static_cast<TQDoubleValidator*>(m_validator)->bottom()); - dni->setMaxValue(static_cast<TQDoubleValidator*>(m_validator)->top()); - } - reparentValidator(dni, m_validator); - } - - connect(dni, TQT_SIGNAL(valueChanged(double)), this, TQT_SLOT(slotChanged(double))); - return dni; -} - -TQWidget* KFileMetaInfoWidget::makeStringWidget() -{ - if (m_validator && m_validator->inherits("KStringListValidator")) - { - KComboBox* b = new KComboBox(true, this, "metainfo combobox"); - KStringListValidator* val = static_cast<KStringListValidator*> - (m_validator); - b->insertStringList(val->stringList()); - b->setCurrentText(m_item.value().toString()); - connect(b, TQT_SIGNAL(activated(const TQString &)), this, TQT_SLOT(slotComboChanged(const TQString &))); - b->setValidator(val); - reparentValidator(b, val); - return b; - } - - if ( m_item.attributes() & KFileMimeTypeInfo::MultiLine ) { - KEdit *edit = new KEdit( this ); - edit->setText( m_item.value().toString() ); - connect( edit, TQT_SIGNAL( textChanged() ), - this, TQT_SLOT( slotMultiLineEditChanged() )); - // can't use a validator with a TQTextEdit, but we may need to delete it - if ( m_validator ) - reparentValidator( edit, m_validator ); - return edit; - } - - KLineEdit* e = new KLineEdit(m_item.value().toString(), this); - if (m_validator) - { - e->setValidator(m_validator); - reparentValidator(e, m_validator); - } - connect(e, TQT_SIGNAL(textChanged(const TQString&)), - this, TQT_SLOT(slotLineEditChanged(const TQString&))); - return e; -} - -TQWidget* KFileMetaInfoWidget::makeDateWidget() -{ - TQWidget *e = new TQDateEdit(m_item.value().toDate(), this); - connect(e, TQT_SIGNAL(valueChanged(const TQDate&)), - this, TQT_SLOT(slotDateChanged(const TQDate&))); - return e; -} - -TQWidget* KFileMetaInfoWidget::makeTimeWidget() -{ - return new TQTimeEdit(m_item.value().toTime(), this); -} - -TQWidget* KFileMetaInfoWidget::makeDateTimeWidget() -{ - return new TQDateTimeEdit(m_item.value().toDateTime(), this); -} - -void KFileMetaInfoWidget::reparentValidator( TQWidget *widget, - TQValidator *validator ) -{ - if ( !validator->parent() ) - widget->insertChild( validator ); -} - -// **************************************************************** -// now the slots that let us get notified if the value changed in the child -// **************************************************************** - -void KFileMetaInfoWidget::slotChanged(bool value) -{ - Q_ASSERT(m_widget->inherits(TQCOMBOBOX_OBJECT_NAME_STRING)); - m_value = TQVariant(value); - emit valueChanged(m_value); - m_dirty = true; -} - -void KFileMetaInfoWidget::slotChanged(int value) -{ - Q_ASSERT(m_widget->inherits(TQSPINBOX_OBJECT_NAME_STRING)); - m_value = TQVariant(value); - emit valueChanged(m_value); - m_dirty = true; -} - -void KFileMetaInfoWidget::slotChanged(double value) -{ - Q_ASSERT(m_widget->inherits("KDoubleNumInput")); - m_value = TQVariant(value); - emit valueChanged(m_value); - m_dirty = true; -} - -void KFileMetaInfoWidget::slotComboChanged(const TQString &value) -{ - Q_ASSERT(m_widget->inherits("KComboBox")); - m_value = TQVariant(value); - emit valueChanged(m_value); - m_dirty = true; -} - -void KFileMetaInfoWidget::slotLineEditChanged(const TQString& value) -{ - Q_ASSERT(m_widget->inherits("KLineEdit")); - m_value = TQVariant(value); - emit valueChanged(m_value); - m_dirty = true; -} - -// that may be a little expensive for long texts, but what can we do? -void KFileMetaInfoWidget::slotMultiLineEditChanged() -{ - Q_ASSERT(m_widget->inherits(TQTEXTEDIT_OBJECT_NAME_STRING)); - m_value = TQVariant( static_cast<const TQTextEdit*>( sender() )->text() ); - emit valueChanged(m_value); - m_dirty = true; -} - -void KFileMetaInfoWidget::slotDateChanged(const TQDate& value) -{ - Q_ASSERT(m_widget->inherits(TQDATEEDIT_OBJECT_NAME_STRING)); - m_value = TQVariant(value); - emit valueChanged(m_value); - m_dirty = true; -} - -void KFileMetaInfoWidget::slotTimeChanged(const TQTime& value) -{ - Q_ASSERT(m_widget->inherits(TQTIMEEDIT_OBJECT_NAME_STRING)); - m_value = TQVariant(value); - emit valueChanged(m_value); - m_dirty = true; -} - -void KFileMetaInfoWidget::slotDateTimeChanged(const TQDateTime& value) -{ - Q_ASSERT(m_widget->inherits(TQDATETIMEEDIT_OBJECT_NAME_STRING)); - m_value = TQVariant(value); - emit valueChanged(m_value); - m_dirty = true; -} - -#include "kfilemetainfowidget.moc" diff --git a/kio/kfile/kfilemetainfowidget.h b/kio/kfile/kfilemetainfowidget.h deleted file mode 100644 index a42846bea..000000000 --- a/kio/kfile/kfilemetainfowidget.h +++ /dev/null @@ -1,95 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2001,2002 Rolf Magnus <ramagnus@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - - */ - -#ifndef __KFILEMETAINFOWIDGET_H__ -#define __KFILEMETAINFOWIDGET_H__ - -#include <tqwidget.h> -#include <tqvariant.h> -#include <kfilemetainfo.h> - -/*! - * A widget to display file meta infos (like id3 for mp3) - */ -class TDEIO_EXPORT KFileMetaInfoWidget: public TQWidget -{ - Q_OBJECT -public: - enum Mode - { - ReadOnly = 1, ///Only display the meta infos, and do not permit the user to edit them - ReadWrite = 0, ///Permits user to edit the displayed meta-info - Reserve = 0xff - }; - - KFileMetaInfoWidget(KFileMetaInfoItem item, TQValidator* val = 0, - TQWidget* parent = 0, const char* name = 0); - - KFileMetaInfoWidget(KFileMetaInfoItem item, Mode mode, TQValidator* val = 0, - TQWidget* parent = 0, const char* name = 0); - - virtual ~KFileMetaInfoWidget(); - - bool apply() - { - return m_item.isEditable() && m_item.setValue(m_value); - } - - void setValue(const TQVariant& value) { m_value = value; } - TQVariant value()const { return m_value; } - TQValidator* validator() const { return m_validator; } - KFileMetaInfoItem item()const { return m_item; } - -signals: - void valueChanged(const TQVariant& value); - -protected: - void reparentValidator(TQWidget *widget, TQValidator *validator); - virtual TQWidget* makeWidget(); - - TQWidget* makeBoolWidget(); - TQWidget* makeIntWidget(); - TQWidget* makeDoubleWidget(); - TQWidget* makeStringWidget(); - TQWidget* makeDateWidget(); - TQWidget* makeTimeWidget(); - TQWidget* makeDateTimeWidget(); - -private slots: - void slotChanged(bool value); - void slotChanged(int value); - void slotChanged(double value); - void slotComboChanged(const TQString &value); - void slotLineEditChanged(const TQString& value); - void slotMultiLineEditChanged(); - void slotDateChanged(const TQDate& value); - void slotTimeChanged(const TQTime& value); - void slotDateTimeChanged(const TQDateTime& value); - -private: - void init(KFileMetaInfoItem item, Mode mode); - - TQVariant m_value; // the value will be saved here until apply() is called - KFileMetaInfoItem m_item; - TQWidget* m_widget; - TQValidator* m_validator; - bool m_dirty : 1; -}; - -#endif diff --git a/kio/kfile/kfilemetapreview.cpp b/kio/kfile/kfilemetapreview.cpp deleted file mode 100644 index 155e1194c..000000000 --- a/kio/kfile/kfilemetapreview.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* - * This file is part of the KDE project. - * Copyright (C) 2003 Carsten Pfeiffer <pfeiffer@kde.org> - * - * You can Freely distribute this program under the GNU Library General Public - * License. See the file "COPYING" for the exact licensing terms. - */ - -#include "kfilemetapreview.h" - -#include <tqlayout.h> - -#include <kio/previewjob.h> -#include <klibloader.h> -#include <kimagefilepreview.h> -#include <kmimetype.h> - -bool KFileMetaPreview::s_tryAudioPreview = true; - -KFileMetaPreview::KFileMetaPreview( TQWidget *parent, const char *name ) - : KPreviewWidgetBase( parent, name ), - haveAudioPreview( false ) -{ - TQHBoxLayout *layout = new TQHBoxLayout( this, 0, 0 ); - m_stack = new TQWidgetStack( this ); - layout->addWidget( m_stack ); - - // ### -// m_previewProviders.setAutoDelete( true ); - initPreviewProviders(); -} - -KFileMetaPreview::~KFileMetaPreview() -{ -} - -void KFileMetaPreview::initPreviewProviders() -{ - m_previewProviders.clear(); - // hardcoded so far - - // image previews - KImageFilePreview *imagePreview = new KImageFilePreview( m_stack ); - (void) m_stack->addWidget( imagePreview ); - m_stack->raiseWidget( imagePreview ); - resize( imagePreview->sizeHint() ); - - TQStringList mimeTypes = imagePreview->supportedMimeTypes(); - TQStringList::ConstIterator it = mimeTypes.begin(); - for ( ; it != mimeTypes.end(); ++it ) - { -// tqDebug(".... %s", (*it).latin1()); - m_previewProviders.insert( *it, imagePreview ); - } -} - -KPreviewWidgetBase * KFileMetaPreview::previewProviderFor( const TQString& mimeType ) -{ -// tqDebug("### looking for: %s", mimeType.latin1()); - // often the first highlighted item, where we can be sure, there is no plugin - // (this "folders reflect icons" is a konq-specific thing, right?) - if ( mimeType == "inode/directory" ) - return 0L; - - KPreviewWidgetBase *provider = m_previewProviders.find( mimeType ); - if ( provider ) - return provider; - -//tqDebug("#### didn't find anything for: %s", mimeType.latin1()); - - if ( s_tryAudioPreview && - !mimeType.startsWith("text/") && !mimeType.startsWith("image/") ) - { - if ( !haveAudioPreview ) - { - KPreviewWidgetBase *audioPreview = createAudioPreview( m_stack ); - if ( audioPreview ) - { - haveAudioPreview = true; - (void) m_stack->addWidget( audioPreview ); - TQStringList mimeTypes = audioPreview->supportedMimeTypes(); - TQStringList::ConstIterator it = mimeTypes.begin(); - for ( ; it != mimeTypes.end(); ++it ) - m_previewProviders.insert( *it, audioPreview ); - } - } - } - - // with the new mimetypes from the audio-preview, try again - provider = m_previewProviders.find( mimeType ); - if ( provider ) - return provider; - - // ### mimetype may be image/* for example, try that - int index = mimeType.find( '/' ); - if ( index > 0 ) - { - provider = m_previewProviders.find( mimeType.left( index + 1 ) + "*" ); - if ( provider ) - return provider; - } - - KMimeType::Ptr mimeInfo = KMimeType::mimeType( mimeType ); - if ( mimeInfo ) - { - // check mime type inheritance - TQString parentMimeType = mimeInfo->parentMimeType(); - while ( !parentMimeType.isEmpty() ) - { - provider = m_previewProviders.find( parentMimeType ); - if ( provider ) - return provider; - - KMimeType::Ptr parentMimeInfo = KMimeType::mimeType( parentMimeType ); - if ( !parentMimeInfo ) break; - - parentMimeType = parentMimeInfo->parentMimeType(); - } - - // check X-TDE-Text property - TQVariant textProperty = mimeInfo->property( "X-TDE-text" ); - if ( textProperty.isValid() && textProperty.type() == TQVariant::Bool ) - { - if ( textProperty.toBool() ) - { - provider = m_previewProviders.find( "text/plain" ); - if ( provider ) - return provider; - - provider = m_previewProviders.find( "text/*" ); - if ( provider ) - return provider; - } - } - } - - return 0L; -} - -void KFileMetaPreview::showPreview(const KURL &url) -{ - KMimeType::Ptr mt = KMimeType::findByURL( url ); - KPreviewWidgetBase *provider = previewProviderFor( mt->name() ); - if ( provider ) - { - if ( provider != m_stack->visibleWidget() ) // stop the previous preview - clearPreview(); - - m_stack->setEnabled( true ); - m_stack->raiseWidget( provider ); - provider->showPreview( url ); - } - else - { - clearPreview(); - m_stack->setEnabled( false ); - } -} - -void KFileMetaPreview::clearPreview() -{ - if ( m_stack->visibleWidget() ) - static_cast<KPreviewWidgetBase*>( m_stack->visibleWidget() )->clearPreview(); -} - -void KFileMetaPreview::addPreviewProvider( const TQString& mimeType, - KPreviewWidgetBase *provider ) -{ - m_previewProviders.insert( mimeType, provider ); -} - -void KFileMetaPreview::clearPreviewProviders() -{ - TQDictIterator<KPreviewWidgetBase> it( m_previewProviders ); - for ( ; it.current(); ++it ) - m_stack->removeWidget( it.current() ); - - m_previewProviders.clear(); -} - -// static -KPreviewWidgetBase * KFileMetaPreview::createAudioPreview( TQWidget *parent ) -{ - KLibFactory *factory = KLibLoader::self()->factory( "kfileaudiopreview" ); - if ( !factory ) - { - s_tryAudioPreview = false; - return 0L; - } - - return dynamic_cast<KPreviewWidgetBase*>( factory->create( TQT_TQOBJECT(parent), "kfileaudiopreview" )); -} - -void KFileMetaPreview::virtual_hook( int, void* ) {} - -#include "kfilemetapreview.moc" diff --git a/kio/kfile/kfilemetapreview.h b/kio/kfile/kfilemetapreview.h deleted file mode 100644 index f26cd29b5..000000000 --- a/kio/kfile/kfilemetapreview.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * This file is part of the KDE project. - * Copyright (C) 2003 Carsten Pfeiffer <pfeiffer@kde.org> - * - * You can Freely distribute this program under the GNU Library General Public - * License. See the file "COPYING" for the exact licensing terms. - */ - -#ifndef KFILEMETAPREVIEW_H -#define KFILEMETAPREVIEW_H - -#include <tqdict.h> -#include <tqwidgetstack.h> - -#include <kpreviewwidgetbase.h> -#include <kurl.h> - -class TDEIO_EXPORT KFileMetaPreview : public KPreviewWidgetBase -{ - Q_OBJECT - -public: - KFileMetaPreview(TQWidget *parent, const char *name = 0); - ~KFileMetaPreview(); - - virtual void addPreviewProvider( const TQString& mimeType, - KPreviewWidgetBase *provider ); - virtual void clearPreviewProviders(); - -public slots: - virtual void showPreview(const KURL &url); - virtual void clearPreview(); - -protected: - virtual KPreviewWidgetBase *previewProviderFor( const TQString& mimeType ); - -protected: - virtual void virtual_hook( int id, void* data ); - -private: - void initPreviewProviders(); - - TQWidgetStack *m_stack; - TQDict<KPreviewWidgetBase> m_previewProviders; - bool haveAudioPreview; - - // may return 0L - static KPreviewWidgetBase * createAudioPreview( TQWidget *parent ); - static bool s_tryAudioPreview; - -private: - class KFileMetaPreviewPrivate; - KFileMetaPreviewPrivate *d; -}; - -#endif // KFILEMETAPREVIEW_H diff --git a/kio/kfile/kfilepreview.cpp b/kio/kfile/kfilepreview.cpp deleted file mode 100644 index 04124570b..000000000 --- a/kio/kfile/kfilepreview.cpp +++ /dev/null @@ -1,279 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 1998 Stephan Kulow <coolo@kde.org> - 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - 2000 Werner Trobin <wtrobin@carinthia.com> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <kaction.h> -#include <kfilepreview.h> -#include <kfilepreview.moc> -#include <klocale.h> - -#include <tqlabel.h> - -#include "config-kfile.h" - -KFilePreview::KFilePreview(KFileView *view, TQWidget *parent, const char *name) - : TQSplitter(parent, name), KFileView() -{ - if ( view ) - init( view ); - else - init( new KFileIconView( (TQSplitter*) this, "left" )); -} - - -KFilePreview::KFilePreview(TQWidget *parent, const char *name) : - TQSplitter(parent, name), KFileView() -{ - init( new KFileIconView((TQSplitter*)this, "left") ); -} - -KFilePreview::~KFilePreview() -{ - // Why copy the actions in the first place? --ellis, 13 Jan 02. - //// don't delete the view's actions (inserted into our collection)! - //for ( uint i = 0; i < left->actionCollection()->count(); i++ ) - // actionCollection()->take( left->actionCollection()->action( i )); - - // don't delete the preview, we can reuse it - // (it will get deleted by ~KDirOperator) - if ( preview && preview->parentWidget() == this ) { - preview->reparent(0L, 0, TQPoint(0, 0), false); - } -} - -void KFilePreview::init( KFileView *view ) -{ - setViewName( i18n("Preview") ); - - left = 0L; - setFileView( view ); - - preview = new TQWidget((TQSplitter*)this, "preview"); - TQString tmp = i18n("No preview available."); - TQLabel *l = new TQLabel(tmp, preview); - l->setMinimumSize(l->sizeHint()); - l->move(10, 5); - preview->setMinimumWidth(l->sizeHint().width()+20); - setResizeMode(preview, TQSplitter::KeepSize); - - // Why copy the actions? --ellis, 13 Jan 02. - //for ( uint i = 0; i < view->actionCollection()->count(); i++ ) - // actionCollection()->insert( view->actionCollection()->action( i )); -} - -void KFilePreview::setFileView( KFileView *view ) -{ - Q_ASSERT( view ); - - // Why copy the actions? --ellis, 13 Jan 02. - //if ( left ) { // remove any previous actions - // for ( uint i = 0; i < left->actionCollection()->count(); i++ ) - // actionCollection()->take( left->actionCollection()->action( i )); - //} - - delete left; - view->widget()->reparent( this, TQPoint(0,0) ); - view->KFileView::setViewMode(All); - view->setParentView(this); - view->setSorting( sorting() ); - left = view; - - connect( left->signaler(), TQT_SIGNAL( fileHighlighted(const KFileItem*) ), - TQT_SLOT( slotHighlighted( const KFileItem * ))); - - // Why copy the actions? --ellis, 13 Jan 02. - //for ( uint i = 0; i < view->actionCollection()->count(); i++ ) - // actionCollection()->insert( view->actionCollection()->action( i )); -} - -// this url parameter is useless... it's the url of the current directory. -// what for? -void KFilePreview::setPreviewWidget(const TQWidget *w, const KURL &) -{ - left->setOnlyDoubleClickSelectsFiles( onlyDoubleClickSelectsFiles() ); - - if (w) { - connect(this, TQT_SIGNAL( showPreview(const KURL &) ), - w, TQT_SLOT( showPreview(const KURL &) )); - connect( this, TQT_SIGNAL( clearPreview() ), - w, TQT_SLOT( clearPreview() )); - } - else { - preview->hide(); - return; - } - - delete preview; - preview = const_cast<TQWidget*>(w); - preview->reparent((TQSplitter*)this, 0, TQPoint(0, 0), true); - preview->resize(preview->sizeHint()); - preview->show(); -} - -void KFilePreview::insertItem(KFileItem *item) -{ - KFileView::insertItem( item ); - left->insertItem(item); -} - -void KFilePreview::setSorting( TQDir::SortSpec sort ) -{ - left->setSorting( sort ); - KFileView::setSorting( left->sorting() ); -} - -void KFilePreview::clearView() -{ - left->clearView(); - emit clearPreview(); -} - -void KFilePreview::updateView(bool b) -{ - left->updateView(b); - if(preview) - preview->repaint(b); -} - -void KFilePreview::updateView(const KFileItem *i) -{ - left->updateView(i); -} - -void KFilePreview::removeItem(const KFileItem *i) -{ - if ( left->isSelected( i ) ) - emit clearPreview(); - - left->removeItem(i); - KFileView::removeItem( i ); -} - -void KFilePreview::listingCompleted() -{ - left->listingCompleted(); -} - -void KFilePreview::clear() -{ - KFileView::clear(); - left->KFileView::clear(); -} - -void KFilePreview::clearSelection() -{ - left->clearSelection(); - emit clearPreview(); -} - -void KFilePreview::selectAll() -{ - left->selectAll(); -} - -void KFilePreview::invertSelection() -{ - left->invertSelection(); -} - -bool KFilePreview::isSelected( const KFileItem *i ) const -{ - return left->isSelected( i ); -} - -void KFilePreview::setSelectionMode(KFile::SelectionMode sm) { - left->setSelectionMode( sm ); -} - -void KFilePreview::setSelected(const KFileItem *item, bool enable) { - left->setSelected( item, enable ); -} - -void KFilePreview::setCurrentItem( const KFileItem *item ) -{ - left->setCurrentItem( item ); -} - -KFileItem * KFilePreview::currentFileItem() const -{ - return left->currentFileItem(); -} - -void KFilePreview::slotHighlighted(const KFileItem* item) -{ - if ( item ) - emit showPreview( item->url() ); - - else { // item = 0 -> multiselection mode - const KFileItemList *items = selectedItems(); - if ( items->count() == 1 ) - emit showPreview( items->getFirst()->url() ); - else - emit clearPreview(); - } - - // the preview widget appears and takes some space of the left view, - // so we may have to scroll to make the current item visible - left->ensureItemVisible(item); - } - -void KFilePreview::ensureItemVisible(const KFileItem *item) -{ - left->ensureItemVisible(item); -} - -KFileItem * KFilePreview::firstFileItem() const -{ - return left->firstFileItem(); -} - -KFileItem * KFilePreview::nextItem( const KFileItem *item ) const -{ - return left->nextItem( item ); -} - -KFileItem * KFilePreview::prevItem( const KFileItem *item ) const -{ - return left->prevItem( item ); -} - -KActionCollection * KFilePreview::actionCollection() const -{ - if ( left ) - return left->actionCollection(); - else { - kdWarning() << "KFilePreview::actionCollection(): called before setFileView()." << endl; //ellis - return KFileView::actionCollection(); - } -} - -void KFilePreview::readConfig( TDEConfig *config, const TQString& group ) -{ - left->readConfig( config, group ); -} - -void KFilePreview::writeConfig( TDEConfig *config, const TQString& group ) -{ - left->writeConfig( config, group ); -} - -void KFilePreview::virtual_hook( int id, void* data ) -{ KFileView::virtual_hook( id, data ); } - diff --git a/kio/kfile/kfilepreview.h b/kio/kfile/kfilepreview.h deleted file mode 100644 index af6fe13d2..000000000 --- a/kio/kfile/kfilepreview.h +++ /dev/null @@ -1,122 +0,0 @@ -/* -*- c++ -*- - This file is part of the KDE libraries - Copyright (C) 1998 Stephan Kulow <coolo@kde.org> - 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - 2000 Werner Trobin <wtrobin@carinthia.com> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef _KFILEPREVIEW_H -#define _KFILEPREVIEW_H - -#include <tqsplitter.h> -#include <tqwidget.h> -#include <tqstring.h> - -#include <kurl.h> -#include <kfileitem.h> -#include <kfileiconview.h> -#include <kfiledetailview.h> -#include <kfile.h> - -/*! - * This KFileView is an empbedded preview for some file types. - */ -class TDEIO_EXPORT KFilePreview : public TQSplitter, public KFileView -{ - Q_OBJECT - -public: - KFilePreview(TQWidget *parent, const char *name); - KFilePreview(KFileView *view, TQWidget *parent, const char *name); - virtual ~KFilePreview(); - - virtual TQWidget *widget() { return this; } - virtual void clearView(); - - /** - * Delets the current view and sets the view to the given @p view. - * The view is reparented to have this as parent, if necessary. - */ - void setFileView(KFileView *view); - - /** - * @returns the current fileview - */ - KFileView* fileView() const { return left; } - - virtual void updateView( bool ); - virtual void updateView(const KFileItem*); - virtual void removeItem(const KFileItem*); - virtual void listingCompleted(); - - virtual void setSelectionMode( KFile::SelectionMode sm ); - - virtual void setSelected(const KFileItem *, bool); - virtual bool isSelected( const KFileItem * ) const; - virtual void clearSelection(); - virtual void selectAll(); - virtual void invertSelection(); - - virtual void insertItem(KFileItem *); - virtual void clear(); - - virtual void setCurrentItem( const KFileItem * ); - virtual KFileItem * currentFileItem() const; - virtual KFileItem * firstFileItem() const; - virtual KFileItem * nextItem( const KFileItem * ) const; - virtual KFileItem * prevItem( const KFileItem * ) const; - - virtual void setSorting( TQDir::SortSpec sort ); - - virtual void readConfig( TDEConfig *, const TQString& group = TQString::null ); - virtual void writeConfig( TDEConfig *, const TQString& group = TQString::null); - - /** - * This overrides KFileView::actionCollection() by returning - * the actionCollection() of the KFileView (member left) it contains. - * This means that KFilePreview will never create a KActionCollection - * object of its own. - */ - virtual KActionCollection * actionCollection() const; - - void ensureItemVisible(const KFileItem *); - - void setPreviewWidget(const TQWidget *w, const KURL &u); - -protected slots: - virtual void slotHighlighted( const KFileItem * ); - -signals: - void showPreview(const KURL &); - void clearPreview(); - -private: - void init( KFileView *view ); - - KFileView *left; - TQWidget *preview; - TQString viewname; - -protected: - /** \internal */ - virtual void virtual_hook( int id, void* data ); -private: - class KFilePreviewPrivate; - KFilePreviewPrivate *d; -}; -#endif diff --git a/kio/kfile/kfilesharedlg.cpp b/kio/kfile/kfilesharedlg.cpp deleted file mode 100644 index e9b4c2673..000000000 --- a/kio/kfile/kfilesharedlg.cpp +++ /dev/null @@ -1,325 +0,0 @@ -/* This file is part of the KDE project - Copyright (c) 2001 David Faure <david@mandrakesoft.com> - Copyright (c) 2001 Laurent Montel <lmontel@mandrakesoft.com> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include "kfilesharedlg.h" -#include <tqvbox.h> -#include <tqlabel.h> -#include <tqdir.h> -#include <tqradiobutton.h> -#include <tqbuttongroup.h> -#include <tqlayout.h> -#include <tqlineedit.h> -#include <kprocess.h> -#include <kprocio.h> -#include <klocale.h> -#include <kglobalsettings.h> -#include <kstandarddirs.h> -#include <kdebug.h> -#include <stdio.h> -#include <stdlib.h> -#include <errno.h> -#include <kio/kfileshare.h> -#include <kseparator.h> -#include <tqpushbutton.h> -#include <kapplication.h> -#include <ksimpleconfig.h> -#include <kmessagebox.h> - -class KFileSharePropsPlugin::Private -{ -public: - TQVBox *m_vBox; - TDEProcess *m_configProc; - bool m_bAllShared; - bool m_bAllUnshared; - bool m_bAllReadOnly; -}; - -KFileSharePropsPlugin::KFileSharePropsPlugin( KPropertiesDialog *_props ) - : KPropsDlgPlugin( _props ) -{ - d = new Private; - d->m_vBox = _props->addVBoxPage( i18n("&Share") ); - d->m_configProc = 0; - properties->setFileSharingPage(d->m_vBox); - m_widget = 0L; - init(); -} - -KFileSharePropsPlugin::~KFileSharePropsPlugin() -{ - if (d->m_configProc) - d->m_configProc->detach(); // Detach to prevent that we kill the process - delete d; -} - -bool KFileSharePropsPlugin::supports( const KFileItemList& items ) -{ - // Do not show dialog if in advanced mode, - // because the advanced dialog is shown already. - if (KFileShare::shareMode() == KFileShare::Advanced) { - kdDebug() << "KFileSharePropsPlugin::supports: false because sharemode is advanced" << endl; - return false; - } - - KFileItemListIterator it( items ); - for ( ; it.current(); ++it ) - { - bool isLocal = ( *it )->isLocalFile(); - // We only support local dirs - if ( !(*it)->isDir() || !isLocal ) - return false; - // And sharing the trash doesn't make sense - if ( isLocal && (*it)->url().path( 1 ) == TDEGlobalSettings::trashPath() ) - return false; - } - return true; -} - -void KFileSharePropsPlugin::init() -{ - // We store the main widget, so that it's possible (later) to call init() - // more than once, to update the page if something changed (e.g. after - // the user has been authorized) - delete m_widget; - m_rbShare = 0L; - m_rbUnShare = 0L; - m_rbSharerw = 0L; - m_widget = new TQWidget( d->m_vBox ); - TQVBoxLayout * vbox = new TQVBoxLayout( m_widget ); - //TQHBoxLayout * hbox = new TQHBoxLayout( vbox ); - - switch ( KFileShare::authorization() ) { - case KFileShare::Authorized: - { - // Check if all selected dirs are in $HOME - TQString home = TQDir::homeDirPath(); - if ( home[home.length()-1] != '/' ) - home += '/'; - bool ok = true; - KFileItemList items = properties->items(); - // We have 3 possibilities: all shared, all unshared (ro,rw), or mixed. - d->m_bAllShared = true; - d->m_bAllUnshared = true; - d->m_bAllReadOnly = true; - KFileItemListIterator it( items ); - for ( ; it.current() && ok; ++it ) { - TQString path = (*it)->url().path(); - // 0 => not shared - // 1 => shared read only - // 3 => shared writeable - int dirStatus = KFileShare::isDirectoryShared( path ); - if ( !path.startsWith( home ) ) - ok = false; - if ( dirStatus == 1 ) { - d->m_bAllUnshared = false; - } - else if ( dirStatus == 3 ) { - d->m_bAllUnshared = false; - d->m_bAllReadOnly = false; - } - else { - d->m_bAllReadOnly = false; - } - } - if ( !ok ) - { - vbox->addWidget( new TQLabel( i18n( "Only folders in your home folder can be shared."), - m_widget ), 0 ); - } - else - { - // Everything ok, show the share/unshare GUI - vbox->setSpacing( KDialog::spacingHint() ); - vbox->setMargin( KDialog::marginHint() ); - - TQButtonGroup *rbGroup = new TQButtonGroup( m_widget ); - rbGroup->hide(); - m_rbUnShare = new TQRadioButton( i18n("Not shared"), m_widget ); - connect( m_rbUnShare, TQT_SIGNAL( toggled(bool) ), TQT_SIGNAL( changed() ) ); - vbox->addWidget( m_rbUnShare, 0 ); - rbGroup->insert( m_rbUnShare ); - - m_rbShare = new TQRadioButton( i18n("Shared - read only for others"), m_widget ); - connect( m_rbShare, TQT_SIGNAL( toggled(bool) ), TQT_SIGNAL( changed() ) ); - vbox->addWidget( m_rbShare, 0 ); - rbGroup->insert( m_rbShare ); - - m_rbSharerw = new TQRadioButton( i18n("Shared - writeable for others"), m_widget ); - connect( m_rbSharerw, TQT_SIGNAL( toggled(bool) ), TQT_SIGNAL( changed() ) ); - vbox->addWidget( m_rbSharerw, 0 ); - rbGroup->insert( m_rbSharerw ); - - //TQLabel *testlabel1 = new TQLabel(i18n("Enter Samba Share Name here"),m_widget); - //m_leSmbShareName = new TQLineEdit(m_widget); - //m_leSmbShareName->setMaxLength(12); - - //hbox->addWidget( testlabel1, 0 ); - //hbox->addWidget( m_leSmbShareName ); - //vbox->addLayout( hbox ); - - // Activate depending on status - if ( d->m_bAllShared ) - m_rbSharerw->setChecked(true); - if ( d->m_bAllUnshared ) - m_rbUnShare->setChecked(true); - if ( d->m_bAllReadOnly ) - m_rbShare->setChecked(true); - - // Some help text - TQLabel *label = new TQLabel( i18n("Sharing this folder makes it available under Linux/UNIX (NFS) and Windows (Samba).") , m_widget ); - label->setAlignment( TQt::AlignAuto | TQt::AlignVCenter | TQt::WordBreak ); - vbox->addWidget( label, 0 ); - - KSeparator* sep=new KSeparator(m_widget); - vbox->addWidget( sep, 0 ); - label = new TQLabel( i18n("You can also reconfigure file sharing authorization.") , m_widget ); - label->setAlignment( TQt::AlignAuto | TQt::AlignVCenter | TQt::WordBreak ); - vbox->addWidget( label, 0 ); - m_pbConfig = new TQPushButton( i18n("Configure File Sharing..."), m_widget ); - connect( m_pbConfig, TQT_SIGNAL( clicked() ), TQT_SLOT( slotConfigureFileSharing() ) ); - vbox->addWidget( m_pbConfig, 0, Qt::AlignHCenter ); - - vbox->addStretch( 10 ); - - if( !KFileShare::sambaActive() && !KFileShare::nfsActive()) - m_widget->setEnabled( false ); - } - } - break; - case KFileShare::ErrorNotFound: - vbox->addWidget( new TQLabel( i18n("Error running 'filesharelist'. Check if installed and in $PATH or /usr/sbin."), - m_widget ), 0 ); - break; - case KFileShare::UserNotAllowed: - { - vbox->setSpacing( 10 ); - if (KFileShare::sharingEnabled()) { - vbox->addWidget( new TQLabel( i18n("You need to be authorized to share folders."), - m_widget ), 0 ); - } else { - vbox->addWidget( new TQLabel( i18n("File sharing is disabled."), - m_widget ), 0 ); - } - TQHBoxLayout* hBox = new TQHBoxLayout( (TQWidget *)0L ); - vbox->addLayout( hBox, 0 ); - m_pbConfig = new TQPushButton( i18n("Configure File Sharing..."), m_widget ); - connect( m_pbConfig, TQT_SIGNAL( clicked() ), TQT_SLOT( slotConfigureFileSharing() ) ); - hBox->addWidget( m_pbConfig, 0, Qt::AlignHCenter ); - vbox->addStretch( 10 ); // align items on top - break; - } - case KFileShare::NotInitialized: - kdWarning() << "KFileShare Authorization still NotInitialized after calling authorization() - impossible" << endl; - break; - } - m_widget->show(); // In case the dialog was shown already. -} - -void KFileSharePropsPlugin::slotConfigureFileSharing() -{ - if (d->m_configProc) return; - - d->m_configProc = new TDEProcess(this); - (*d->m_configProc) << KStandardDirs::findExe("tdesu") << locate("exe", "kcmshell") << "fileshare"; - if (!d->m_configProc->start( TDEProcess::NotifyOnExit )) - { - delete d->m_configProc; - d->m_configProc = 0; - return; - } - connect(d->m_configProc, TQT_SIGNAL(processExited(TDEProcess *)), - this, TQT_SLOT(slotConfigureFileSharingDone())); - m_pbConfig->setEnabled(false); -} - -void KFileSharePropsPlugin::slotConfigureFileSharingDone() -{ - delete d->m_configProc; - d->m_configProc = 0; - KFileShare::readConfig(); - KFileShare::readShareList(); - init(); -} - -void KFileSharePropsPlugin::applyChanges() -{ - kdDebug() << "KFileSharePropsPlugin::applyChanges" << endl; - if ( m_rbShare && m_rbUnShare && m_rbSharerw ) - { - bool share = m_rbShare->isChecked(); - - if (share && d->m_bAllShared) - return; // Nothing to do - if (!share && d->m_bAllUnshared) - return; // Nothing to do - - KFileItemList items = properties->items(); - KFileItemListIterator it( items ); - bool ok = true; - for ( ; it.current() && ok; ++it ) { - TQString path = (*it)->url().path(); - ok = SuSEsetShared( path, share, m_rbSharerw->isChecked() ); - if (!ok) { - if (share) - KMessageBox::detailedError(properties, - i18n("Sharing folder '%1' failed.").arg(path), - i18n("An error occurred while trying to share folder '%1'. " - "Make sure that the Perl script 'fileshareset' is set suid root.") - .arg(path)); - else - KMessageBox::error(properties, - i18n("Unsharing folder '%1' failed.").arg(path), - i18n("An error occurred while trying to unshare folder '%1'. " - "Make sure that the Perl script 'fileshareset' is set suid root.") - .arg(path)); - - properties->abortApplying(); - break; - } - } - - // Get the change back into our cached info - KFileShare::readShareList(); - } -} - -bool KFileSharePropsPlugin::setShared( const TQString& path, bool shared ) -{ - return SuSEsetShared( path, shared, true ); -} - -bool KFileSharePropsPlugin::SuSEsetShared( const TQString& path, bool shared, bool readonly ) -{ - kdDebug() << "KFileSharePropsPlugin::setShared " << path << "," - << shared << readonly << endl; - return KFileShare::SuSEsetShared( path, shared, readonly ); -} - -TQWidget* KFileSharePropsPlugin::page() const -{ - return d->m_vBox; -} - -#include "kfilesharedlg.moc" - -//TODO: do we need to monitor /etc/security/fileshare.conf ? -// if the user is added to the 'fileshare' group, we wouldn't be notified -// Of course the config module can notify us. -// TODO: listen to such notifications ;) diff --git a/kio/kfile/kfilesharedlg.h b/kio/kfile/kfilesharedlg.h deleted file mode 100644 index e7998ad66..000000000 --- a/kio/kfile/kfilesharedlg.h +++ /dev/null @@ -1,70 +0,0 @@ -/* This file is part of the KDE project - Copyright (c) 2001 David Faure <david@mandrakesoft.com> - Copyright (c) 2001 Laurent Montel <lmontel@mandrakesoft.com> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef kfilesharedlg_h -#define kfilesharedlg_h - -#include <kpropertiesdialog.h> -class TQVBoxLayout; -class TQRadioButton; -class TQPushButton; - -/** - * This plugin provides a page to KPropsDlg, showing the "file sharing" options - * @author David Faure <david@mandrakesoft.com> - * @since 3.1 - */ -class TDEIO_EXPORT KFileSharePropsPlugin : public KPropsDlgPlugin -{ - Q_OBJECT -public: - KFileSharePropsPlugin( KPropertiesDialog *_props ); - virtual ~KFileSharePropsPlugin(); - - /** - * Apply all changes to the file. - * This function is called when the user presses 'Ok'. The last plugin inserted - * is called first. - */ - virtual void applyChanges(); - - static bool supports( const KFileItemList& items ); - - TQWidget* page() const; - -protected slots: - void slotConfigureFileSharing(); - void slotConfigureFileSharingDone(); - -private: - void init(); - bool setShared( const TQString&path, bool shared ); - bool SuSEsetShared( const TQString&path, bool shared, bool readonly ); - - TQWidget *m_widget; - TQRadioButton *m_rbShare; - TQRadioButton *m_rbSharerw; - TQRadioButton *m_rbUnShare; - //TQLineEdit *m_leSmbShareName; - TQPushButton *m_pbConfig; - class Private; - Private *d; -}; - -#endif diff --git a/kio/kfile/kfilespeedbar.cpp b/kio/kfile/kfilespeedbar.cpp deleted file mode 100644 index 567d929eb..000000000 --- a/kio/kfile/kfilespeedbar.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation, version 2. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include "kfilespeedbar.h" -#include "config-kfile.h" - -#include <tqdir.h> -#include <tqfile.h> -#include <tqtextcodec.h> -#include <tqtextstream.h> - -#include <kconfig.h> -#include <kglobal.h> -#include <kglobalsettings.h> -#include <klocale.h> -#include <kprotocolinfo.h> -#include <kstandarddirs.h> -#include <kurl.h> - -KFileSpeedBar::KFileSpeedBar( TQWidget *parent, const char *name ) - : KURLBar( true, parent, name ) -{ - TDEConfig *config = TDEGlobal::config(); - TDEConfigGroupSaver cs( config, ConfigGroup ); - m_initializeSpeedbar = config->readBoolEntry( "Set speedbar defaults", - true ); - setIconSize(KIcon::SizeSmallMedium); - readConfig( TDEGlobal::config(), "KFileDialog Speedbar" ); - - if ( m_initializeSpeedbar ) - { - KURL u; - u.setPath( TDEGlobalSettings::desktopPath() ); - insertItem( u, i18n("Desktop"), false ); - -//TODO: win32 - if ((TDEGlobalSettings::documentPath() != (TQDir::homeDirPath()+"/")) && - TQDir(TDEGlobalSettings::documentPath()).exists()) - { - u.setPath( TDEGlobalSettings::documentPath() ); - insertItem( u, i18n("Documents"), false, "folder_txt" ); - } - - u.setPath( TQDir::homeDirPath() ); - insertItem( u, i18n("Home Folder"), false, - "folder_home" ); - - u = "media:/"; - if ( KProtocolInfo::isKnownProtocol( u ) ) - insertItem( u, i18n("Storage Media"), false, - KProtocolInfo::icon( "media" ) ); - - if ( TQFile::exists( TQDir::homeDirPath()+"/.config/user-dirs.dirs" ) ) - { - TQString download, music, pictures, videos, templates, publicShares; - - TQFile f( TQDir::homeDirPath()+"/.config/user-dirs.dirs" ); - if (!f.open(IO_ReadOnly)) - return; - - TQTextStream s( &f ); - s.setCodec( TQTextCodec::codecForLocale() ); - - // read the xdg user dirs - TQString line = s.readLine(); - while (!line.isNull()) - { - if (line.startsWith("XDG_DOWNLOAD_DIR=")) - download = line.remove("XDG_DOWNLOAD_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - else if (line.startsWith("XDG_MUSIC_DIR=")) - music = line.remove("XDG_MUSIC_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - else if (line.startsWith("XDG_PICTURES_DIR=")) - pictures = line.remove("XDG_PICTURES_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - else if (line.startsWith("XDG_VIDEOS_DIR=")) - videos = line.remove("XDG_VIDEOS_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - else if (line.startsWith("XDG_TEMPLATES_DIR=")) - templates = line.remove("XDG_TEMPLATES_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - else if (line.startsWith("XDG_PUBLICSHARES_DIR=")) - publicShares = line.remove("XDG_PUBLICSHARES_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - - line = s.readLine(); - } - // now add in the speedbar - if (!download.isEmpty()) - insertItem( download, i18n( "Download" ), false, "folder_html" ); - if (!music.isEmpty()) - insertItem( music, i18n( "Music" ), false, "folder_sound" ); - if (!pictures.isEmpty()) - insertItem( pictures, i18n( "Pictures" ), false, "folder_image" ); - if (!videos.isEmpty()) - insertItem( videos, i18n( "Videos" ), false, "folder_video" ); - if (!templates.isEmpty()) - insertItem( templates, i18n( "Templates" ), false, "folder_video" ); - if (!publicShares.isEmpty()) - insertItem( publicShares, i18n( "Public" ), false, "folder_video" ); - } - - u = "remote:/"; - if ( KProtocolInfo::isKnownProtocol( u ) ) - insertItem( u, i18n("Network Folders"), false, - KProtocolInfo::icon( "remote" ) ); - } -} - -KFileSpeedBar::~KFileSpeedBar() -{ -} - -void KFileSpeedBar::save( TDEConfig *config ) -{ - if ( m_initializeSpeedbar && isModified() ) - { - TDEConfigGroup conf( config, ConfigGroup ); - // write to kdeglobals - conf.writeEntry( "Set speedbar defaults", false, true, true ); - } - - writeConfig( config, "KFileDialog Speedbar" ); -} - -TQSize KFileSpeedBar::sizeHint() const -{ - TQSize sizeHint = KURLBar::sizeHint(); - int ems = fontMetrics().width("mmmmmmmmmmmm"); - if (sizeHint.width() < ems) - { - sizeHint.setWidth(ems); - } - return sizeHint; -} - -#include "kfilespeedbar.moc" diff --git a/kio/kfile/kfilespeedbar.h b/kio/kfile/kfilespeedbar.h deleted file mode 100644 index d1c2a689e..000000000 --- a/kio/kfile/kfilespeedbar.h +++ /dev/null @@ -1,41 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation, version 2. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef KFILESPEEDBAR_H -#define KFILESPEEDBAR_H - -#include <kurlbar.h> - -class TDEConfig; - -class TDEIO_EXPORT KFileSpeedBar : public KURLBar -{ - Q_OBJECT -public: - KFileSpeedBar( TQWidget *parent = 0, const char *name = 0 ); - ~KFileSpeedBar(); - - virtual void save( TDEConfig *config ); - virtual TQSize sizeHint() const; - -private: - bool m_initializeSpeedbar : 1; - -}; - -#endif // KFILESPEEDBAR_H diff --git a/kio/kfile/kfiletreebranch.cpp b/kio/kfile/kfiletreebranch.cpp deleted file mode 100644 index 352bd875e..000000000 --- a/kio/kfile/kfiletreebranch.cpp +++ /dev/null @@ -1,528 +0,0 @@ -/* This file is part of the KDEproject - Copyright (C) 2000 David Faure <faure@kde.org> - 2000 Carsten Pfeiffer <pfeiffer@kde.org> - 2002 Klaas Freitag <freitag@suse.de> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <tqfile.h> - -#include <kfileitem.h> -#include <kdebug.h> -#include <kde_file.h> - -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> - -#include "kfiletreeviewitem.h" -#include "kfiletreebranch.h" - - -/* --- KFileTreeViewToplevelItem --- */ -KFileTreeBranch::KFileTreeBranch( KFileTreeView *parent, const KURL& url, - const TQString& name, - const TQPixmap& pix, bool showHidden, - KFileTreeViewItem *branchRoot ) - - : KDirLister( false ), - m_root( branchRoot ), - m_startURL( url ), - m_name ( name ), - m_rootIcon( pix ), - m_openRootIcon( pix ), - m_recurseChildren(true), - m_showExtensions(true) -{ - kdDebug( 250) << "Creating branch for url " << url.prettyURL() << endl; - - /* if non exists, create one */ - if( ! branchRoot ) - { - m_root = new KFileTreeViewItem( parent, - new KFileItem( url, "inode/directory", - S_IFDIR ), - this ); - } - - m_root->setExpandable( true ); - m_root->setPixmap( 0, pix ); - m_root->setText( 0, name ); - - setShowingDotFiles( showHidden ); - - connect( this, TQT_SIGNAL( refreshItems(const KFileItemList&)), - this, TQT_SLOT ( slotRefreshItems( const KFileItemList& ))); - - connect( this, TQT_SIGNAL( newItems(const KFileItemList&)), - this, TQT_SLOT ( addItems( const KFileItemList& ))); - - connect( this, TQT_SIGNAL( completed(const KURL& )), - this, TQT_SLOT(slCompleted(const KURL&))); - - connect( this, TQT_SIGNAL( started( const KURL& )), - this, TQT_SLOT( slotListerStarted( const KURL& ))); - - connect( this, TQT_SIGNAL( deleteItem( KFileItem* )), - this, TQT_SLOT( slotDeleteItem( KFileItem* ))); - - connect( this, TQT_SIGNAL( canceled(const KURL&) ), - this, TQT_SLOT( slotCanceled(const KURL&) )); - - connect( this, TQT_SIGNAL( clear()), - this, TQT_SLOT( slotDirlisterClear())); - - connect( this, TQT_SIGNAL( clear(const KURL&)), - this, TQT_SLOT( slotDirlisterClearURL(const KURL&))); - - connect( this, TQT_SIGNAL( redirection( const KURL& , const KURL& ) ), - this, TQT_SLOT( slotRedirect( const KURL&, const KURL& ))); - - m_openChildrenURLs.append( url ); -} - -void KFileTreeBranch::setOpenPixmap( const TQPixmap& pix ) -{ - m_openRootIcon = pix; - - if( root()->isOpen()) - { - root()->setPixmap( 0, pix ); - } -} - -void KFileTreeBranch::slotListerStarted( const KURL &url ) -{ - /* set the parent correct if it is zero. */ - kdDebug( 250) << "Starting to list " << url.prettyURL() << endl; -} - - -KFileTreeViewItem *KFileTreeBranch::parentKFTVItem( KFileItem *item ) -{ - KFileTreeViewItem *parent = 0; - - if( ! item ) return 0; - - /* If it is a directory, check, if it exists in the dict. If not, go one up - * and check again. - */ - KURL url = item->url(); - // kdDebug(250) << "Item's url is " << url.prettyURL() << endl; - KURL dirUrl( url ); - dirUrl.setFileName( TQString::null ); - // kdDebug(250) << "Directory url is " << dirUrl.prettyURL() << endl; - - parent = findTVIByURL( dirUrl ); - // kdDebug(250) << "Returning as parent item <" << parent << ">" << endl; - return( parent ); -} - - -void KFileTreeBranch::slotRefreshItems( const KFileItemList& list ) -{ - KFileItemListIterator it( list ); - kdDebug(250) << "Refreshing " << list.count() << " items !" << endl; - KFileItem *currItem; - KFileTreeViewItem *item = 0; - - while ( (currItem = it.current()) != 0 ) - { - item = findTVIByURL(currItem->url()); - if (item) { - item->setPixmap(0, item->fileItem()->pixmap( KIcon::SizeSmall )); - item->setText( 0, item->fileItem()->text()); - } - ++it; - } -} - -void KFileTreeBranch::addItems( const KFileItemList& list ) -{ - KFileItemListIterator it( list ); - kdDebug(250) << "Adding " << list.count() << " items !" << endl; - KFileItem *currItem; - KFileTreeViewItemList treeViewItList; - KFileTreeViewItem *parentItem = 0; - - while ( (currItem = it.current()) != 0 ) - { - parentItem = parentKFTVItem( currItem ); - - - /* Only create a new KFileTreeViewItem if it does not yet exist */ - KFileTreeViewItem *newKFTVI = - static_cast<KFileTreeViewItem *>(currItem->extraData( this )); - - if( ! newKFTVI ) - { - newKFTVI = createTreeViewItem( parentItem, currItem ); - if (!newKFTVI) - { - // TODO: Don't fail if parentItem == 0 - ++it; - continue; - } - currItem->setExtraData( this, newKFTVI ); - - /* Cut off the file extension in case it is not a directory */ - if( !m_showExtensions && !currItem->isDir() ) /* Need to cut the extension */ - { - TQString name = currItem->text(); - int mPoint = name.findRev( '.' ); - if( mPoint > 0 ) - name = name.left( mPoint ); - newKFTVI->setText( 0, name ); - } - } - - /* Now try to find out if there are children for dirs in the treeview */ - /* This stats a directory on the local file system and checks the */ - /* hardlink entry in the stat-buf. This works only for local directories. */ - if( dirOnlyMode() && !m_recurseChildren && currItem->isLocalFile( ) && currItem->isDir() ) - { - KURL url = currItem->url(); - TQString filename = url.directory( false, true ) + url.fileName(); - /* do the stat trick of Carsten. The problem is, that the hardlink - * count only contains directory links. Thus, this method only seem - * to work in dir-only mode */ - kdDebug(250) << "Doing stat on " << filename << endl; - KDE_struct_stat statBuf; - if( KDE_stat( TQFile::encodeName( filename ), &statBuf ) == 0 ) - { - int hardLinks = statBuf.st_nlink; /* Count of dirs */ - kdDebug(250) << "stat succeeded, hardlinks: " << hardLinks << endl; - // If the link count is > 2, the directory likely has subdirs. If it's < 2 - // it's something weird like a mounted SMB share. In that case we don't know - // if there are subdirs, thus show it as expandable. - - if( hardLinks != 2 ) - { - newKFTVI->setExpandable(true); - } - else - { - newKFTVI->setExpandable(false); - } - if( hardLinks >= 2 ) // "Normal" directory with subdirs - { - kdDebug(250) << "Emitting for " << url.prettyURL() << endl; - emit( directoryChildCount( newKFTVI, hardLinks-2)); // parentItem, hardLinks-1 )); - } - } - else - { - kdDebug(250) << "stat of " << filename << " failed !" << endl; - } - } - ++it; - - treeViewItList.append( newKFTVI ); - } - - emit newTreeViewItems( this, treeViewItList ); -} - -KFileTreeViewItem* KFileTreeBranch::createTreeViewItem( KFileTreeViewItem *parent, - KFileItem *fileItem ) -{ - KFileTreeViewItem *tvi = 0; - if( parent && fileItem ) - { - tvi = new KFileTreeViewItem( parent, - fileItem, - this ); - } - else - { - kdDebug(250) << "createTreeViewItem: Have no parent" << endl; - } - return( tvi ); -} - -void KFileTreeBranch::setChildRecurse( bool t ) -{ - m_recurseChildren = t; - if( t == false ) - m_openChildrenURLs.clear(); -} - - -void KFileTreeBranch::setShowExtensions( bool visible ) -{ - m_showExtensions = visible; -} - -bool KFileTreeBranch::showExtensions( ) const -{ - return( m_showExtensions ); -} - -/* - * The signal that tells that a directory was deleted may arrive before the signal - * for its children arrive. Thus, we must walk through the children of a dir and - * remove them before removing the dir itself. - */ -void KFileTreeBranch::slotDeleteItem( KFileItem *it ) -{ - if( !it ) return; - kdDebug(250) << "Slot Delete Item hitted for " << it->url().prettyURL() << endl; - - KFileTreeViewItem *kfti = static_cast<KFileTreeViewItem*>(it->extraData(this)); - - if( kfti ) - { - kdDebug( 250 ) << "Child count: " << kfti->childCount() << endl; - if( kfti->childCount() > 0 ) - { - KFileTreeViewItem *child = static_cast<KFileTreeViewItem*>(kfti->firstChild()); - - while( child ) - { - kdDebug(250) << "Calling child to be deleted !" << endl; - KFileTreeViewItem *nextChild = static_cast<KFileTreeViewItem*>(child->nextSibling()); - slotDeleteItem( child->fileItem()); - child = nextChild; - } - } - - kdDebug(250) << "Found corresponding KFileTreeViewItem" << endl; - if( m_lastFoundURL.equals(it->url(), true )) - { - m_lastFoundURL = KURL(); - m_lastFoundItem = 0L; - } - delete( kfti ); - } - else - { - kdDebug(250) << "Error: kfiletreeviewitem: "<< kfti << endl; - } -} - - -void KFileTreeBranch::slotCanceled( const KURL& url ) -{ - // ### anything else to do? - // remove the url from the childrento-recurse-list - m_openChildrenURLs.remove( url); - - // stop animations etc. - KFileTreeViewItem *item = findTVIByURL(url); - if (!item) return; // Uh oh... - emit populateFinished(item); -} - -void KFileTreeBranch::slotDirlisterClear() -{ - kdDebug(250)<< "*** Clear all !" << endl; - /* this slots needs to clear all listed items, but NOT the root item */ - if( m_root ) - deleteChildrenOf( m_root ); -} - -void KFileTreeBranch::slotDirlisterClearURL( const KURL& url ) -{ - kdDebug(250)<< "*** Clear for URL !" << url.prettyURL() << endl; - KFileItem *item = findByURL( url ); - if( item ) - { - KFileTreeViewItem *ftvi = - static_cast<KFileTreeViewItem *>(item->extraData( this )); - deleteChildrenOf( ftvi ); - } -} - -void KFileTreeBranch::deleteChildrenOf( TQListViewItem *parent ) -{ - // for some strange reason, slotDirlisterClearURL() sometimes calls us - // with a 0L parent. - if ( !parent ) - return; - - while ( parent->firstChild() ) - delete parent->firstChild(); -} - -void KFileTreeBranch::slotRedirect( const KURL& oldUrl, const KURL&newUrl ) -{ - if( oldUrl.equals( m_startURL, true )) - { - m_startURL = newUrl; - } -} - -KFileTreeViewItem* KFileTreeBranch::findTVIByURL( const KURL& url ) -{ - KFileTreeViewItem *resultItem = 0; - - if( m_startURL.equals(url, true) ) - { - kdDebug(250) << "findByURL: Returning root as a parent !" << endl; - resultItem = m_root; - } - else if( m_lastFoundURL.equals( url, true )) - { - kdDebug(250) << "findByURL: Returning from lastFoundURL!" << endl; - resultItem = m_lastFoundItem; - } - else - { - kdDebug(250) << "findByURL: searching by dirlister: " << url.url() << endl; - - KFileItem *it = findByURL( url ); - - if( it ) - { - resultItem = static_cast<KFileTreeViewItem*>(it->extraData(this)); - m_lastFoundItem = resultItem; - m_lastFoundURL = url; - } - } - - return( resultItem ); -} - - -void KFileTreeBranch::slCompleted( const KURL& url ) -{ - kdDebug(250) << "SlotCompleted hit for " << url.prettyURL() << endl; - KFileTreeViewItem *currParent = findTVIByURL( url ); - if( ! currParent ) return; - - kdDebug(250) << "current parent " << currParent << " is already listed: " - << currParent->alreadyListed() << endl; - - emit( populateFinished(currParent)); - emit( directoryChildCount(currParent, currParent->childCount())); - - /* This is a walk through the children of the last populated directory. - * Here we start the dirlister on every child of the dir and wait for its - * finish. When it has finished, we go to the next child. - * This must be done for non local file systems in dirOnly- and Full-Mode - * and for local file systems only in full mode, because the stat trick - * (see addItem-Method) does only work for dirs, not for files in the directory. - */ - /* Set bit that the parent dir was listed completely */ - currParent->setListed(true); - - kdDebug(250) << "recurseChildren: " << m_recurseChildren << endl; - kdDebug(250) << "isLocalFile: " << m_startURL.isLocalFile() << endl; - kdDebug(250) << "dirOnlyMode: " << dirOnlyMode() << endl; - - - if( m_recurseChildren && (!m_startURL.isLocalFile() || ! dirOnlyMode()) ) - { - bool wantRecurseUrl = false; - /* look if the url is in the list for url to recurse */ - for ( KURL::List::Iterator it = m_openChildrenURLs.begin(); - it != m_openChildrenURLs.end(); ++it ) - { - /* it is only interesting that the url _is_in_ the list. */ - if( (*it).equals( url, true ) ) - wantRecurseUrl = true; - } - - KFileTreeViewItem *nextChild = 0; - kdDebug(250) << "Recursing " << url.prettyURL() << "? " << wantRecurseUrl << endl; - - if( wantRecurseUrl && currParent ) - { - - /* now walk again through the tree and populate the children to get +-signs */ - /* This is the starting point. The visible folder has finished, - processing the children has not yet started */ - nextChild = static_cast<KFileTreeViewItem*> - (static_cast<TQListViewItem*>(currParent)->firstChild()); - - if( ! nextChild ) - { - /* This happens if there is no child at all */ - kdDebug( 250 ) << "No children to recuse" << endl; - } - - /* Since we have listed the children to recurse, we can remove the entry - * in the list of the URLs to see the children. - */ - m_openChildrenURLs.remove(url); - } - - if( nextChild ) /* This implies that idx > -1 */ - { - /* Next child is defined. We start a dirlister job on every child item - * which is a directory to find out how much children are in the child - * of the last opened dir - */ - - /* Skip non directory entries */ - while( nextChild ) - { - if( nextChild->isDir() && ! nextChild->alreadyListed()) - { - KFileItem *kfi = nextChild->fileItem(); - if( kfi && kfi->isReadable()) - { - KURL recurseUrl = kfi->url(); - kdDebug(250) << "Starting to recurse NOW " << recurseUrl.prettyURL() << endl; - openURL( recurseUrl, true ); - } - } - nextChild = static_cast<KFileTreeViewItem*>(static_cast<TQListViewItem*>(nextChild->nextSibling())); - // kdDebug(250) << "Next child " << m_nextChild << endl; - } - } - } - else - { - kdDebug(250) << "skipping to recurse in complete-slot" << endl; - } -} - -/* This slot is called when a treeviewitem is expanded in the gui */ -bool KFileTreeBranch::populate( const KURL& url, KFileTreeViewItem *currItem ) -{ - bool ret = false; - if( ! currItem ) - return ret; - - kdDebug(250) << "Populating <" << url.prettyURL() << ">" << endl; - - /* Add this url to the list of urls to recurse for children */ - if( m_recurseChildren ) - { - m_openChildrenURLs.append( url ); - kdDebug(250) << "Appending to list " << url.prettyURL() << endl; - } - - if( ! currItem->alreadyListed() ) - { - /* start the lister */ - ret = openURL( url, true ); - } - else - { - kdDebug(250) << "Children already existing in treeview!" << endl; - slCompleted( url ); - ret = true; - } - return ret; -} - -void KFileTreeBranch::virtual_hook( int id, void* data ) -{ KDirLister::virtual_hook( id, data ); } - -#include "kfiletreebranch.moc" - diff --git a/kio/kfile/kfiletreebranch.h b/kio/kfile/kfiletreebranch.h deleted file mode 100644 index 31e6dcfc0..000000000 --- a/kio/kfile/kfiletreebranch.h +++ /dev/null @@ -1,242 +0,0 @@ - -/* This file is part of the KDE project - Copyright (C) 2000 David Faure <faure@kde.org> - 2000 Carsten Pfeiffer <pfeiffer@kde.org> - 2001 Klaas Freitag <freitag@suse.de> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef kfile_tree_branch_h -#define kfile_tree_branch_h - -#include <tqdict.h> -#include <tqlistview.h> - -#include <kfileitem.h> -#include <kio/global.h> -#include <kdirlister.h> -#include <kio/job.h> -#include <kfiletreeviewitem.h> - -class KURL; -class KFileTreeView; - - -/** - * This is the branch class of the KFileTreeView, which represents one - * branch in the treeview. Every branch has a root which is an url. The branch - * lists the files under the root. Every branch uses its own dirlister and can - * have its own filter etc. - * - * @short Branch object for KFileTreeView object. - * - */ - -class TDEIO_EXPORT KFileTreeBranch : public KDirLister -{ - Q_OBJECT -public: - /** - * constructs a branch for KFileTreeView. Does not yet start to list it. - * @param url start url of the branch. - * @param name the name of the branch, which is displayed in the first column of the treeview. - * @param pix is a pixmap to display as an icon of the branch. - * @param showHidden flag to make hidden files visible or not. - * @param branchRoot is the KFileTreeViewItem to use as the root of the - * branch, with the default 0 meaning to let KFileTreeBranch create - * it for you. - */ - KFileTreeBranch( KFileTreeView*, const KURL& url, const TQString& name, - const TQPixmap& pix, bool showHidden = false, - KFileTreeViewItem *branchRoot = 0 ); - - /** - * @returns the root url of the branch. - */ - KURL rootUrl() const { return( m_startURL ); } - - /** - * sets a KFileTreeViewItem as root widget for the branch. - * That must be created outside of the branch. All KFileTreeViewItems - * the branch is allocating will become children of that object. - * @param r the KFileTreeViewItem to become the root item. - */ - virtual void setRoot( KFileTreeViewItem *r ){ m_root = r; }; - - /** - * @returns the root item. - */ - KFileTreeViewItem *root( ) { return( m_root );} - - /** - * @returns the name of the branch. - */ - TQString name() const { return( m_name ); } - - /** - * sets the name of the branch. - */ - virtual void setName( const TQString n ) { m_name = n; }; - - /* - * returns the current root item pixmap set in the constructor. The root - * item pixmap defaults to the icon for directories. - * @see openPixmap() - */ - const TQPixmap& pixmap(){ return(m_rootIcon); } - - /* - * returns the current root item pixmap set by setOpenPixmap() - * which is displayed if the branch is expanded. - * The root item pixmap defaults to the icon for directories. - * @see pixmap() - * Note that it depends on KFileTreeView::showFolderOpenPximap weather - * open pixmap are displayed or not. - */ - const TQPixmap& openPixmap() { return(m_openRootIcon); } - - /** - * @returns whether the items in the branch show their file extensions in the - * tree or not. See setShowExtensions for more information. - */ - bool showExtensions( ) const; - - /** - * sets the root of the branch open or closed. - */ - void setOpen( bool setopen = true ) - { if( root() ) root()->setOpen( setopen ); } - - /** - * sets if children recursion is wanted or not. If this is switched off, the - * child directories of a just opened directory are not listed internally. - * That means that it can not be determined if the sub directories are - * expandable or not. If this is switched off there will be no call to - * setExpandable. - * @param t set to true to switch on child recursion - */ - void setChildRecurse( bool t=true ); - - /** - * @returns if child recursion is on or off. - * @see setChildRecurse - */ - bool childRecurse() - { return m_recurseChildren; } - -public slots: - /** - * populates a branch. This method must be called after a branch was added - * to a KFileTreeView using method addBranch. - * @param url is the url of the root item where the branch starts. - * @param currItem is the current parent. - */ - virtual bool populate( const KURL &url, KFileTreeViewItem* currItem ); - - /** - * sets printing of the file extensions on or off. If you pass false to this - * slot, all items of this branch will not show their file extensions in the - * tree. - * @param visible flags if the extensions should be visible or not. - */ - virtual void setShowExtensions( bool visible = true ); - - void setOpenPixmap( const TQPixmap& pix ); - -protected: - /** - * allocates a KFileTreeViewItem for the branch - * for new items. - */ - virtual KFileTreeViewItem *createTreeViewItem( KFileTreeViewItem *parent, - KFileItem *fileItem ); - -public: - /** - * find the according KFileTreeViewItem by an url - */ - virtual KFileTreeViewItem *findTVIByURL( const KURL& ); - -signals: - /** - * emitted with the item of a directory which was finished to populate - */ - void populateFinished( KFileTreeViewItem * ); - - /** - * emitted with a list of new or updated KFileTreeViewItem which were - * found in a branch. Note that this signal is emitted very often and may slow - * down the performance of the treeview ! - */ - void newTreeViewItems( KFileTreeBranch*, const KFileTreeViewItemList& ); - - /** - * emitted with the exact count of children for a directory. - */ - void directoryChildCount( KFileTreeViewItem* item, int count ); - -private slots: - void slotRefreshItems( const KFileItemList& ); - void addItems( const KFileItemList& ); - void slCompleted( const KURL& ); - void slotCanceled( const KURL& ); - void slotListerStarted( const KURL& ); - void slotDeleteItem( KFileItem* ); - void slotDirlisterClear(); - void slotDirlisterClearURL( const KURL& url ); - void slotRedirect( const KURL& oldUrl, const KURL&newUrl ); - -private: - KFileTreeViewItem *parentKFTVItem( KFileItem *item ); - static void deleteChildrenOf( TQListViewItem *parent ); - - KFileTreeViewItem *m_root; - KURL m_startURL; - TQString m_name; - TQPixmap m_rootIcon; - TQPixmap m_openRootIcon; - - /* this list holds the url's which children are opened. */ - KURL::List m_openChildrenURLs; - - - /* The next two members are used for caching purposes in findTVIByURL. */ - KURL m_lastFoundURL; - KFileTreeViewItem *m_lastFoundItem; - - bool m_recurseChildren :1; - bool m_showExtensions :1; - -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KFileTreeBranchPrivate; - KFileTreeBranchPrivate *d; -}; - - -/** - * List of KFileTreeBranches - */ -typedef TQPtrList<KFileTreeBranch> KFileTreeBranchList; - -/** - * Iterator for KFileTreeBranchLists - */ -typedef TQPtrListIterator<KFileTreeBranch> KFileTreeBranchIterator; - -#endif - diff --git a/kio/kfile/kfiletreeview.cpp b/kio/kfile/kfiletreeview.cpp deleted file mode 100644 index 0b8504fd6..000000000 --- a/kio/kfile/kfiletreeview.cpp +++ /dev/null @@ -1,677 +0,0 @@ -/* This file is part of the KDEproject - Copyright (C) 2000 David Faure <faure@kde.org> - 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <tqapplication.h> -#include <tqheader.h> -#include <tqtimer.h> -#include <kdebug.h> -#include <kdirnotify_stub.h> -#include <kglobalsettings.h> -#include <kfileitem.h> -#include <kfileview.h> -#include <kmimetype.h> -#include <kstandarddirs.h> -#include <stdlib.h> -#include <assert.h> -#include <kio/job.h> -#include <kio/global.h> -#include <kurldrag.h> -#include <kiconloader.h> - - -#include "kfiletreeview.h" -#include "kfiletreebranch.h" -#include "kfiletreeviewitem.h" - -KFileTreeView::KFileTreeView( TQWidget *parent, const char *name ) - : KListView( parent, name ), - m_wantOpenFolderPixmaps( true ), - m_toolTip( this ) -{ - setDragEnabled(true); - setSelectionModeExt( KListView::Single ); - - m_animationTimer = new TQTimer( this ); - connect( m_animationTimer, TQT_SIGNAL( timeout() ), - this, TQT_SLOT( slotAnimation() ) ); - - m_currentBeforeDropItem = 0; - m_dropItem = 0; - - m_autoOpenTimer = new TQTimer( this ); - connect( m_autoOpenTimer, TQT_SIGNAL( timeout() ), - this, TQT_SLOT( slotAutoOpenFolder() ) ); - - /* The executed-Slot only opens a path, while the expanded-Slot populates it */ - connect( this, TQT_SIGNAL( executed( TQListViewItem * ) ), - this, TQT_SLOT( slotExecuted( TQListViewItem * ) ) ); - connect( this, TQT_SIGNAL( expanded ( TQListViewItem *) ), - this, TQT_SLOT( slotExpanded( TQListViewItem *) )); - connect( this, TQT_SIGNAL( collapsed( TQListViewItem *) ), - this, TQT_SLOT( slotCollapsed( TQListViewItem* ))); - - - /* connections from the konqtree widget */ - connect( this, TQT_SIGNAL( selectionChanged() ), - this, TQT_SLOT( slotSelectionChanged() ) ); - connect( this, TQT_SIGNAL( onItem( TQListViewItem * )), - this, TQT_SLOT( slotOnItem( TQListViewItem * ) ) ); - connect( this, TQT_SIGNAL(itemRenamed(TQListViewItem*, const TQString &, int)), - this, TQT_SLOT(slotItemRenamed(TQListViewItem*, const TQString &, int))); - - - m_bDrag = false; - m_branches.setAutoDelete( true ); - - m_openFolderPixmap = DesktopIcon( "folder_open",KIcon::SizeSmall,KIcon::ActiveState ); -} - -KFileTreeView::~KFileTreeView() -{ - // we must make sure that the KFileTreeViewItems are deleted _before_ the - // branches are deleted. Otherwise, the KFileItems would be destroyed - // and the KFileTreeViewItems had dangling pointers to them. - hide(); - clear(); - m_branches.clear(); // finally delete the branches and KFileItems -} - - -bool KFileTreeView::isValidItem( TQListViewItem *item) -{ - if (!item) - return false; - TQPtrList<TQListViewItem> lst; - TQListViewItemIterator it( this ); - while ( it.current() ) - { - if ( it.current() == item ) - return true; - ++it; - } - return false; -} - -void KFileTreeView::contentsDragEnterEvent( TQDragEnterEvent *ev ) -{ - if ( ! acceptDrag( ev ) ) - { - ev->ignore(); - return; - } - ev->acceptAction(); - m_currentBeforeDropItem = selectedItem(); - - TQListViewItem *item = itemAt( contentsToViewport( ev->pos() ) ); - if( item ) - { - m_dropItem = item; - m_autoOpenTimer->start( KFileView::autoOpenDelay() ); - } - else - { - m_dropItem = 0; -} -} - -void KFileTreeView::contentsDragMoveEvent( TQDragMoveEvent *e ) -{ - if( ! acceptDrag( e ) ) - { - e->ignore(); - return; - } - e->acceptAction(); - - - TQListViewItem *afterme; - TQListViewItem *parent; - - findDrop( e->pos(), parent, afterme ); - - // "afterme" is 0 when aiming at a directory itself - TQListViewItem *item = afterme ? afterme : parent; - - if( item && item->isSelectable() ) - { - setSelected( item, true ); - if( item != m_dropItem ) { - m_autoOpenTimer->stop(); - m_dropItem = item; - m_autoOpenTimer->start( KFileView::autoOpenDelay() ); - } - } - else - { - m_autoOpenTimer->stop(); - m_dropItem = 0; - } -} - -void KFileTreeView::contentsDragLeaveEvent( TQDragLeaveEvent * ) -{ - // Restore the current item to what it was before the dragging (#17070) - if ( isValidItem(m_currentBeforeDropItem) ) - { - setSelected( m_currentBeforeDropItem, true ); - ensureItemVisible( m_currentBeforeDropItem ); - } - else if ( isValidItem(m_dropItem) ) - setSelected( m_dropItem, false ); // no item selected - m_currentBeforeDropItem = 0; - m_dropItem = 0; - -} - -void KFileTreeView::contentsDropEvent( TQDropEvent *e ) -{ - - m_autoOpenTimer->stop(); - m_dropItem = 0; - - kdDebug(250) << "contentsDropEvent !" << endl; - if( ! acceptDrag( e ) ) { - e->ignore(); - return; - } - - e->acceptAction(); - TQListViewItem *afterme; - TQListViewItem *parent; - findDrop(e->pos(), parent, afterme); - - //kdDebug(250) << " parent=" << (parent?parent->text(0):TQString::null) - // << " afterme=" << (afterme?afterme->text(0):TQString::null) << endl; - - if (e->source() == viewport() && itemsMovable()) - movableDropEvent(parent, afterme); - else - { - emit dropped(e, afterme); - emit dropped(this, e, afterme); - emit dropped(e, parent, afterme); - emit dropped(this, e, parent, afterme); - - KURL::List urls; - KURLDrag::decode( e, urls ); - emit dropped( this, e, urls ); - - KURL parentURL; - if( parent ) - parentURL = static_cast<KFileTreeViewItem*>(parent)->url(); - else - // can happen when dropping above the root item - // Should we choose the first branch in such a case ?? - return; - - emit dropped( urls, parentURL ); - emit dropped( this , e, urls, parentURL ); - } -} - -bool KFileTreeView::acceptDrag(TQDropEvent* e ) const -{ - - bool ancestOK= acceptDrops(); - // kdDebug(250) << "Do accept drops: " << ancestOK << endl; - ancestOK = ancestOK && itemsMovable(); - // kdDebug(250) << "acceptDrag: " << ancestOK << endl; - // kdDebug(250) << "canDecode: " << KURLDrag::canDecode(e) << endl; - // kdDebug(250) << "action: " << e->action() << endl; - - /* KListView::acceptDrag(e); */ - /* this is what KListView does: - * acceptDrops() && itemsMovable() && (e->source()==viewport()); - * ask acceptDrops and itemsMovable, but not the third - */ - return ancestOK && KURLDrag::canDecode( e ) && - // Why this test? All DnDs are one of those AFAIK (DF) - ( e->action() == TQDropEvent::Copy - || e->action() == TQDropEvent::Move - || e->action() == TQDropEvent::Link ); -} - - - -TQDragObject * KFileTreeView::dragObject() -{ - - KURL::List urls; - const TQPtrList<TQListViewItem> fileList = selectedItems(); - TQPtrListIterator<TQListViewItem> it( fileList ); - for ( ; it.current(); ++it ) - { - urls.append( static_cast<KFileTreeViewItem*>(it.current())->url() ); - } - TQPoint hotspot; - TQPixmap pixmap; - if( urls.count() > 1 ){ - pixmap = DesktopIcon( "tdemultiple", 16 ); - } - if( pixmap.isNull() ) - pixmap = currentKFileTreeViewItem()->fileItem()->pixmap( 16 ); - hotspot.setX( pixmap.width() / 2 ); - hotspot.setY( pixmap.height() / 2 ); - TQDragObject* dragObject = new KURLDrag( urls, this ); - if( dragObject ) - dragObject->setPixmap( pixmap, hotspot ); - return dragObject; -} - - - -void KFileTreeView::slotCollapsed( TQListViewItem *item ) -{ - KFileTreeViewItem *kftvi = static_cast<KFileTreeViewItem*>(item); - kdDebug(250) << "hit slotCollapsed" << endl; - if( kftvi && kftvi->isDir()) - { - item->setPixmap( 0, itemIcon(kftvi)); - } -} - -void KFileTreeView::slotExpanded( TQListViewItem *item ) -{ - kdDebug(250) << "slotExpanded here !" << endl; - - if( ! item ) return; - - KFileTreeViewItem *it = static_cast<KFileTreeViewItem*>(item); - KFileTreeBranch *branch = it->branch(); - - /* Start the animation for the branch object */ - if( it->isDir() && branch && item->childCount() == 0 ) - { - /* check here if the branch really needs to be populated again */ - kdDebug(250 ) << "starting to open " << it->url().prettyURL() << endl; - startAnimation( it ); - bool branchAnswer = branch->populate( it->url(), it ); - kdDebug(250) << "Branches answer: " << branchAnswer << endl; - if( ! branchAnswer ) - { - kdDebug(250) << "ERR: Could not populate!" << endl; - stopAnimation( it ); - } - } - - /* set a pixmap 'open folder' */ - if( it->isDir() && isOpen( item ) ) - { - kdDebug(250)<< "Setting open Pixmap" << endl; - item->setPixmap( 0, itemIcon( it )); // 0, m_openFolderPixmap ); - } -} - - - -void KFileTreeView::slotExecuted( TQListViewItem *item ) -{ - if ( !item ) - return; - /* This opens the dir and causes the Expanded-slot to be called, - * which strolls through the children. - */ - if( static_cast<KFileTreeViewItem*>(item)->isDir()) - { - item->setOpen( !item->isOpen() ); - } -} - - -void KFileTreeView::slotAutoOpenFolder() -{ - m_autoOpenTimer->stop(); - - if ( !isValidItem(m_dropItem) || m_dropItem->isOpen() ) - return; - - m_dropItem->setOpen( true ); - m_dropItem->repaint(); -} - - -void KFileTreeView::slotSelectionChanged() -{ - if ( !m_dropItem ) // don't do this while the dragmove thing - { - } -} - - -KFileTreeBranch* KFileTreeView::addBranch( const KURL &path, const TQString& name, - bool showHidden ) -{ - const TQPixmap& folderPix = KMimeType::mimeType("inode/directory")->pixmap( KIcon::Desktop,KIcon::SizeSmall ); - - return addBranch( path, name, folderPix, showHidden); -} - -KFileTreeBranch* KFileTreeView::addBranch( const KURL &path, const TQString& name, - const TQPixmap& pix, bool showHidden ) -{ - kdDebug(250) << "adding another root " << path.prettyURL() << endl; - - /* Open a new branch */ - KFileTreeBranch *newBranch = new KFileTreeBranch( this, path, name, pix, - showHidden ); - return addBranch(newBranch); -} - -KFileTreeBranch *KFileTreeView::addBranch(KFileTreeBranch *newBranch) -{ - connect( newBranch, TQT_SIGNAL(populateFinished( KFileTreeViewItem* )), - this, TQT_SLOT( slotPopulateFinished( KFileTreeViewItem* ))); - - connect( newBranch, TQT_SIGNAL( newTreeViewItems( KFileTreeBranch*, - const KFileTreeViewItemList& )), - this, TQT_SLOT( slotNewTreeViewItems( KFileTreeBranch*, - const KFileTreeViewItemList& ))); - - m_branches.append( newBranch ); - return( newBranch ); -} - -KFileTreeBranch *KFileTreeView::branch( const TQString& searchName ) -{ - KFileTreeBranch *branch = 0; - TQPtrListIterator<KFileTreeBranch> it( m_branches ); - - while ( (branch = it.current()) != 0 ) { - ++it; - TQString bname = branch->name(); - kdDebug(250) << "This is the branches name: " << bname << endl; - if( bname == searchName ) - { - kdDebug(250) << "Found branch " << bname << " and return ptr" << endl; - return( branch ); - } - } - return ( 0L ); -} - -KFileTreeBranchList& KFileTreeView::branches() -{ - return( m_branches ); -} - - -bool KFileTreeView::removeBranch( KFileTreeBranch *branch ) -{ - if(m_branches.contains(branch)) - { - delete (branch->root()); - m_branches.remove( branch ); - return true; - } - else - { - return false; - } -} - -void KFileTreeView::setDirOnlyMode( KFileTreeBranch* branch, bool bom ) -{ - if( branch ) - { - branch->setDirOnlyMode( bom ); - } -} - - -void KFileTreeView::slotPopulateFinished( KFileTreeViewItem *it ) -{ - if( it && it->isDir()) - stopAnimation( it ); -} - -void KFileTreeView::slotNewTreeViewItems( KFileTreeBranch* branch, const KFileTreeViewItemList& itemList ) -{ - if( ! branch ) return; - kdDebug(250) << "hitting slotNewTreeViewItems" << endl; - - /* Sometimes it happens that new items should become selected, i.e. if the user - * creates a new dir, he probably wants it to be selected. This can not be done - * right after creating the directory or file, because it takes some time until - * the item appears here in the treeview. Thus, the creation code sets the member - * m_neUrlToSelect to the required url. If this url appears here, the item becomes - * selected and the member nextUrlToSelect will be cleared. - */ - if( ! m_nextUrlToSelect.isEmpty() ) - { - KFileTreeViewItemListIterator it( itemList ); - - bool end = false; - for( ; !end && it.current(); ++it ) - { - KURL url = (*it)->url(); - - if( m_nextUrlToSelect.equals(url, true )) // ignore trailing / on dirs - { - setCurrentItem( static_cast<TQListViewItem*>(*it) ); - m_nextUrlToSelect = KURL(); - end = true; - } - } - } -} - -TQPixmap KFileTreeView::itemIcon( KFileTreeViewItem *item, int gap ) const -{ - TQPixmap pix; - kdDebug(250) << "Setting icon for column " << gap << endl; - - if( item ) - { - /* Check if it is a branch root */ - KFileTreeBranch *brnch = item->branch(); - if( item == brnch->root() ) - { - pix = brnch->pixmap(); - if( m_wantOpenFolderPixmaps && brnch->root()->isOpen() ) - { - pix = brnch->openPixmap(); - } - } - else - { - // TODO: different modes, user Pixmaps ? - pix = item->fileItem()->pixmap( KIcon::SizeSmall ); // , KIcon::DefaultState); - - /* Only if it is a dir and the user wants open dir pixmap and it is open, - * change the fileitem's pixmap to the open folder pixmap. */ - if( item->isDir() && m_wantOpenFolderPixmaps ) - { - if( isOpen( static_cast<TQListViewItem*>(item))) - pix = m_openFolderPixmap; - } - } - } - - return pix; -} - - -void KFileTreeView::slotAnimation() -{ - MapCurrentOpeningFolders::Iterator it = m_mapCurrentOpeningFolders.begin(); - MapCurrentOpeningFolders::Iterator end = m_mapCurrentOpeningFolders.end(); - for (; it != end;) - { - KFileTreeViewItem *item = it.key(); - if (!isValidItem(item)) - { - ++it; - m_mapCurrentOpeningFolders.remove(item); - continue; - } - - uint & iconNumber = it.data().iconNumber; - TQString icon = TQString::fromLatin1( it.data().iconBaseName ).append( TQString::number( iconNumber ) ); - // kdDebug(250) << "Loading icon " << icon << endl; - item->setPixmap( 0, DesktopIcon( icon,KIcon::SizeSmall,KIcon::ActiveState )); // KFileTreeViewFactory::instance() ) ); - - iconNumber++; - if ( iconNumber > it.data().iconCount ) - iconNumber = 1; - - ++it; - } -} - - -void KFileTreeView::startAnimation( KFileTreeViewItem * item, const char * iconBaseName, uint iconCount ) -{ - /* TODO: allow specific icons */ - if( ! item ) - { - kdDebug(250) << " startAnimation Got called without valid item !" << endl; - return; - } - - m_mapCurrentOpeningFolders.insert( item, - AnimationInfo( iconBaseName, - iconCount, - itemIcon(item, 0) ) ); - if ( !m_animationTimer->isActive() ) - m_animationTimer->start( 50 ); -} - -void KFileTreeView::stopAnimation( KFileTreeViewItem * item ) -{ - if( ! item ) return; - - kdDebug(250) << "Stoping Animation !" << endl; - - MapCurrentOpeningFolders::Iterator it = m_mapCurrentOpeningFolders.find(item); - if ( it != m_mapCurrentOpeningFolders.end() ) - { - if( item->isDir() && isOpen( item) ) - { - kdDebug(250) << "Setting folder open pixmap !" << endl; - item->setPixmap( 0, itemIcon( item )); - } - else - { - item->setPixmap( 0, it.data().originalPixmap ); - } - m_mapCurrentOpeningFolders.remove( item ); - } - else - { - if( item ) - kdDebug(250)<< "StopAnimation - could not find item " << item->url().prettyURL()<< endl; - else - kdDebug(250)<< "StopAnimation - item is zero !" << endl; - } - if (m_mapCurrentOpeningFolders.isEmpty()) - m_animationTimer->stop(); -} - -KFileTreeViewItem * KFileTreeView::currentKFileTreeViewItem() const -{ - return static_cast<KFileTreeViewItem *>( selectedItem() ); -} - -KURL KFileTreeView::currentURL() const -{ - KFileTreeViewItem *item = currentKFileTreeViewItem(); - if ( item ) - return currentKFileTreeViewItem()->url(); - else - return KURL(); -} - -void KFileTreeView::slotOnItem( TQListViewItem *item ) -{ - KFileTreeViewItem *i = static_cast<KFileTreeViewItem *>( item ); - if( i ) - { - const KURL url = i->url(); - if ( url.isLocalFile() ) - emit onItem( url.path() ); - else - emit onItem( url.prettyURL() ); - } -} - -void KFileTreeView::slotItemRenamed(TQListViewItem* item, const TQString &name, int col) -{ - (void) item; - kdDebug(250) << "Do not bother: " << name << col << endl; -} - -KFileTreeViewItem *KFileTreeView::findItem( const TQString& branchName, const TQString& relUrl ) -{ - KFileTreeBranch *br = branch( branchName ); - return( findItem( br, relUrl )); -} - -KFileTreeViewItem *KFileTreeView::findItem( KFileTreeBranch* brnch, const TQString& relUrl ) -{ - KFileTreeViewItem *ret = 0; - if( brnch ) - { - KURL url = brnch->rootUrl(); - - if( ! relUrl.isEmpty() && TQDir::isRelativePath(relUrl) ) - { - TQString partUrl( relUrl ); - - if( partUrl.endsWith("/")) - partUrl.truncate( relUrl.length()-1 ); - - url.addPath( partUrl ); - - kdDebug(250) << "assembled complete dir string " << url.prettyURL() << endl; - - KFileItem *fi = brnch->findByURL( url ); - if( fi ) - { - ret = static_cast<KFileTreeViewItem*>( fi->extraData( brnch )); - kdDebug(250) << "Found item !" <<ret << endl; - } - } - else - { - ret = brnch->root(); - } - } - return( ret ); -} - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - - -void KFileTreeViewToolTip::maybeTip( const TQPoint & ) -{ -#if 0 - TQListViewItem *item = m_view->itemAt( point ); - if ( item ) { - TQString text = static_cast<KFileViewItem*>( item )->toolTipText(); - if ( !text.isEmpty() ) - tip ( m_view->itemRect( item ), text ); - } -#endif -} - -void KFileTreeView::virtual_hook( int id, void* data ) -{ KListView::virtual_hook( id, data ); } - -#include "kfiletreeview.moc" diff --git a/kio/kfile/kfiletreeview.h b/kio/kfile/kfiletreeview.h deleted file mode 100644 index f28f0f01e..000000000 --- a/kio/kfile/kfiletreeview.h +++ /dev/null @@ -1,273 +0,0 @@ -/* This file is part of the KDE project - Copyright (C) 2000 David Faure <faure@kde.org> - 2000 Carsten Pfeiffer <pfeiffer@kde.org> - 2002 Klaas Freitag <freitag@suse.de> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef kfile_tree_view_h -#define kfile_tree_view_h - -#include <tqmap.h> -#include <tqpoint.h> -#include <tqpixmap.h> -#include <tqstrlist.h> -#include <tqtooltip.h> - -#include <klistview.h> -#include <kdirnotify.h> -#include <kio/job.h> -#include <kfiletreeviewitem.h> -#include <kfiletreebranch.h> - -class TQTimer; - - - -class TDEIO_EXPORT KFileTreeViewToolTip : public TQToolTip -{ -public: - KFileTreeViewToolTip( TQListView *view ) : TQToolTip( view ), m_view( view ) {} - -protected: - virtual void maybeTip( const TQPoint & ); - -private: - TQListView *m_view; -}; - - -/** - * The filetreeview offers a treeview on the file system which behaves like - * a QTreeView showing files and/or directories in the file system. - * - * KFileTreeView is able to handle more than one URL, represented by - * KFileTreeBranch. - * - * Typical usage: - * 1. create a KFileTreeView fitting in your layout and add columns to it - * 2. call addBranch to create one or more branches - * 3. retrieve the root item with KFileTreeBranch::root() and set it open - * if desired. That starts the listing. - */ -class TDEIO_EXPORT KFileTreeView : public KListView -{ - Q_OBJECT -public: - KFileTreeView( TQWidget *parent, const char *name = 0 ); - virtual ~KFileTreeView(); - - /** - * @return the current (i.e. selected) item - */ - KFileTreeViewItem * currentKFileTreeViewItem() const; - - /** - * @return the URL of the current selected item. - */ - KURL currentURL() const; - - /** - * Adds a branch to the treeview item. - * - * This high-level function creates the branch, adds it to the treeview and - * connects some signals. Note that directory listing does not start until - * a branch is expanded either by opening the root item by user or by setOpen - * on the root item. - * - * @returns a pointer to the new branch or zero - * @param path is the base url of the branch - * @param name is the name of the branch, which will be the text for column 0 - * @param showHidden says if hidden files and directories should be visible - */ - KFileTreeBranch* addBranch( const KURL &path, const TQString& name, bool showHidden = false ); - - /** - * same as the function above but with a pixmap to set for the branch. - */ - virtual KFileTreeBranch* addBranch( const KURL &path, const TQString& name , - const TQPixmap& pix, bool showHidden = false ); - - /** - * same as the function above but letting the user create the branch. - */ - virtual KFileTreeBranch* addBranch( KFileTreeBranch * ); - - /** - * removes the branch from the treeview. - * @param branch is a pointer to the branch - * @returns true on success. - */ - virtual bool removeBranch( KFileTreeBranch *branch ); - - /** - * @returns a pointer to the KFileTreeBranch in the KFileTreeView or zero on failure. - * @param searchName is the name of a branch - */ - KFileTreeBranch *branch( const TQString& searchName ); - - - /** - * @returns a list of pointers to all existing branches in the treeview. - **/ - KFileTreeBranchList& branches(); - - /** - * set the directory mode for branches. If true is passed, only directories will be loaded. - * @param branch is a pointer to a KFileTreeBranch - */ - virtual void setDirOnlyMode( KFileTreeBranch *branch, bool ); - - /** - * searches a branch for a KFileTreeViewItem identified by the relative url given as - * second parameter. The method adds the branches base url to the relative path and finds - * the item. - * @returns a pointer to the item or zero if the item does not exist. - * @param brnch is a pointer to the branch to search in - * @param relUrl is the branch relativ url - */ - KFileTreeViewItem *findItem( KFileTreeBranch* brnch, const TQString& relUrl ); - - /** - * see method above, differs only in the first parameter. Finds the branch by its name. - */ - KFileTreeViewItem *findItem( const TQString& branchName, const TQString& relUrl ); - - /** - * @returns a flag indicating if extended folder pixmaps are displayed or not. - */ - bool showFolderOpenPixmap() const { return m_wantOpenFolderPixmaps; }; - -public slots: - - /** - * set the flag to show 'extended' folder icons on or off. If switched on, folders will - * have an open folder pixmap displayed if their children are visible, and the standard - * closed folder pixmap (from mimetype folder) if they are closed. - * If switched off, the plain mime pixmap is displayed. - * @param showIt = false displays mime type pixmap only - */ - virtual void setShowFolderOpenPixmap( bool showIt = true ) - { m_wantOpenFolderPixmaps = showIt; } - -protected: - /** - * @returns true if we can decode the drag and support the action - */ - - virtual bool acceptDrag(TQDropEvent* event) const; - virtual TQDragObject * dragObject(); - - virtual void startAnimation( KFileTreeViewItem* item, const char * iconBaseName = "kde", uint iconCount = 6 ); - virtual void stopAnimation( KFileTreeViewItem* item ); - virtual void contentsDragEnterEvent( TQDragEnterEvent *e ); - virtual void contentsDragMoveEvent( TQDragMoveEvent *e ); - virtual void contentsDragLeaveEvent( TQDragLeaveEvent *e ); - virtual void contentsDropEvent( TQDropEvent *ev ); - -protected slots: - virtual void slotNewTreeViewItems( KFileTreeBranch*, - const KFileTreeViewItemList& ); - - virtual void slotSetNextUrlToSelect( const KURL &url ) - { m_nextUrlToSelect = url; } - - virtual TQPixmap itemIcon( KFileTreeViewItem*, int gap = 0 ) const; - -private slots: - void slotExecuted( TQListViewItem * ); - void slotExpanded( TQListViewItem * ); - void slotCollapsed( TQListViewItem *item ); - - void slotSelectionChanged(); - - void slotAnimation(); - - void slotAutoOpenFolder(); - - void slotOnItem( TQListViewItem * ); - void slotItemRenamed(TQListViewItem*, const TQString &, int); - - void slotPopulateFinished( KFileTreeViewItem* ); - - -signals: - - void onItem( const TQString& ); - /* New signals if you like it ? */ - void dropped( TQWidget*, TQDropEvent* ); - void dropped( TQWidget*, TQDropEvent*, KURL::List& ); - void dropped( KURL::List&, KURL& ); - // The drop event allows to differentiate between move and copy - void dropped( TQWidget*, TQDropEvent*, KURL::List&, KURL& ); - - void dropped( TQDropEvent *e, TQListViewItem * after); - void dropped(KFileTreeView *, TQDropEvent *, TQListViewItem *); - void dropped(TQDropEvent *e, TQListViewItem * parent, TQListViewItem * after); - void dropped(KFileTreeView *, TQDropEvent *, TQListViewItem *, TQListViewItem *); - -protected: - KURL m_nextUrlToSelect; - - -private: - // Returns whether item is still a valid item in the tree - bool isValidItem( TQListViewItem *item); - void clearTree(); - - - /* List that holds the branches */ - KFileTreeBranchList m_branches; - - - struct AnimationInfo - { - AnimationInfo( const char * _iconBaseName, uint _iconCount, const TQPixmap & _originalPixmap ) - : iconBaseName(_iconBaseName), iconCount(_iconCount), iconNumber(1), originalPixmap(_originalPixmap) {} - AnimationInfo() : iconCount(0) {} - TQCString iconBaseName; - uint iconCount; - uint iconNumber; - TQPixmap originalPixmap; - }; - typedef TQMap<KFileTreeViewItem *, AnimationInfo> MapCurrentOpeningFolders; - MapCurrentOpeningFolders m_mapCurrentOpeningFolders; - - - TQTimer *m_animationTimer; - - TQPoint m_dragPos; - bool m_bDrag; - - bool m_wantOpenFolderPixmaps; // Flag weather the folder should have open-folder pixmaps - - TQListViewItem *m_currentBeforeDropItem; // The item that was current before the drag-enter event happened - TQListViewItem *m_dropItem; // The item we are moving the mouse over (during a drag) - TQStrList m_lstDropFormats; - TQPixmap m_openFolderPixmap; - TQTimer *m_autoOpenTimer; - - KFileTreeViewToolTip m_toolTip; - - -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KFileTreeViewPrivate; - KFileTreeViewPrivate *d; -}; - -#endif diff --git a/kio/kfile/kfiletreeviewitem.cpp b/kio/kfile/kfiletreeviewitem.cpp deleted file mode 100644 index 17e2d9abe..000000000 --- a/kio/kfile/kfiletreeviewitem.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/* This file is part of the KDEproject - Copyright (C) 2000 David Faure <faure@kde.org> - 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <kdebug.h> -#include <kfileitem.h> -#include <kicontheme.h> - -#include "kfiletreeviewitem.h" - -/* --- KFileTreeViewItem --- */ -/* - */ -KFileTreeViewItem::KFileTreeViewItem( KFileTreeViewItem *parent, - KFileItem* item, - KFileTreeBranch *brnch ) - : KListViewItem( parent ), - m_kfileitem( item ), - m_branch( brnch ), - m_wasListed(false) -{ - setPixmap(0, item->pixmap( KIcon::SizeSmall )); - setText( 0, item->text()); - -} - -KFileTreeViewItem::KFileTreeViewItem( KFileTreeView* parent, - KFileItem* item, - KFileTreeBranch *brnch ) - :KListViewItem( (TQListView*)parent ), - m_kfileitem(item ), - m_branch( brnch ), - m_wasListed(false) -{ - setPixmap(0, item->pixmap( KIcon::SizeSmall )); - setText( 0, item->text()); -} - -KFileTreeViewItem::~KFileTreeViewItem() -{ - if ( m_kfileitem ) - m_kfileitem->removeExtraData( m_branch ); -} - -bool KFileTreeViewItem::alreadyListed() const -{ - return m_wasListed; -} - -void KFileTreeViewItem::setListed( bool wasListed ) -{ - m_wasListed = wasListed; -} - -KURL KFileTreeViewItem::url() const -{ - return m_kfileitem ? m_kfileitem->url() : KURL(); -} - -TQString KFileTreeViewItem::path() const -{ - return m_kfileitem ? m_kfileitem->url().path() : TQString::null; -} - -bool KFileTreeViewItem::isDir() const -{ - return m_kfileitem ? m_kfileitem->isDir() : false; -} diff --git a/kio/kfile/kfiletreeviewitem.h b/kio/kfile/kfiletreeviewitem.h deleted file mode 100644 index 0fefc5dc1..000000000 --- a/kio/kfile/kfiletreeviewitem.h +++ /dev/null @@ -1,106 +0,0 @@ -/* This file is part of the KDE project - Copyright (C) 2000 David Faure <faure@kde.org> - 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef kfile_tree_view_item_h -#define kfile_tree_view_item_h - -#include <tqptrlist.h> -#include <klistview.h> - -#include <kfileitem.h> -#include <kio/global.h> -#include <kdirlister.h> -#include <kio/job.h> - -class KURL; -class KFileTreeView; -class KFileTreeBranch; -class KFileTreeItem; - - -/** - * An item for a KFileTreeView that knows about its own KFileItem. - */ -class TDEIO_EXPORT KFileTreeViewItem : public KListViewItem -{ -public: - KFileTreeViewItem( KFileTreeViewItem*, KFileItem*, KFileTreeBranch * ); - KFileTreeViewItem( KFileTreeView*, KFileItem*, KFileTreeBranch * ); - ~KFileTreeViewItem(); - - /** - * @return the KFileTreeBranch the item is sorted in. - */ - KFileTreeBranch* branch() const { return m_branch; } - - /** - * @return the KFileItem the viewitem is representing. - */ - KFileItem *fileItem() const { return m_kfileitem; } - - /** - * @return the path of the item. - */ - TQString path() const; - - /** - * @return the items KURL - */ - KURL url() const; - - /** - * @return if the item represents a directory - */ - bool isDir() const; - - /** - * @return if this directory was already seen by a KDirLister. - */ - bool alreadyListed() const; - - /** - * set the flag if the directory was already listed. - */ - void setListed( bool wasListed ); - -protected: - -private: - - KFileItem *m_kfileitem; - KFileTreeBranch *m_branch; - bool m_wasListed; - class KFileTreeViewItemPrivate; - KFileTreeViewItemPrivate *d; -}; - - -/** - * List of KFileTreeViewItems - */ -typedef TQPtrList<KFileTreeViewItem> KFileTreeViewItemList; - -/** - * Iterator for KFileTreeViewItemList - */ -typedef TQPtrListIterator<KFileTreeViewItem> KFileTreeViewItemListIterator; - - -#endif - diff --git a/kio/kfile/kfileview.cpp b/kio/kfile/kfileview.cpp deleted file mode 100644 index a62b8aa50..000000000 --- a/kio/kfile/kfileview.cpp +++ /dev/null @@ -1,429 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 1998 Stephan Kulow <coolo@kde.org> - 1998 Daniel Grana <grana@ie.iwi.unibe.ch> - 2001 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <assert.h> -#include <stdlib.h> - -#include <kaction.h> -#include <kapplication.h> -#include <kdebug.h> -#include <kglobal.h> -#include <klocale.h> -#include <kstandarddirs.h> - -#include "config-kfile.h" -#include "kfileview.h" - -#ifdef Unsorted // the "I hate X.h" modus -#undef Unsorted -#endif - -TQDir::SortSpec KFileView::defaultSortSpec = static_cast<TQDir::SortSpec>(TQDir::Name | TQDir::IgnoreCase | TQDir::DirsFirst); - -class KFileView::KFileViewPrivate -{ -public: - KFileViewPrivate() - { - actions = 0; - dropOptions = 0; - } - - ~KFileViewPrivate() - { - if( actions ) { - actions->clear(); // so that the removed() signal is emitted! - delete actions; - } - } - - TQGuardedPtr<KActionCollection> actions; - int dropOptions; -}; - - -KFileView::KFileView() -{ - d = new KFileViewPrivate(); - m_sorting = KFileView::defaultSortSpec; - - sig = new KFileViewSignaler(); - sig->setName("view-signaller"); - - m_selectedList = 0L; - filesNumber = 0; - dirsNumber = 0; - - view_mode = All; - selection_mode = KFile::Single; - m_viewName = i18n("Unknown View"); - - myOnlyDoubleClickSelectsFiles = false; - m_itemList.setAutoDelete( false ); // just references -} - -KFileView::~KFileView() -{ - delete d; - delete sig; - delete m_selectedList; -} - -void KFileView::setParentView(KFileView *parent) -{ - if ( parent ) { // pass all signals right to our parent - TQObject::connect(sig, TQT_SIGNAL( activatedMenu(const KFileItem *, - const TQPoint& ) ), - parent->sig, TQT_SIGNAL( activatedMenu(const KFileItem *, - const TQPoint& ))); - TQObject::connect(sig, TQT_SIGNAL( dirActivated(const KFileItem *)), - parent->sig, TQT_SIGNAL( dirActivated(const KFileItem*))); - TQObject::connect(sig, TQT_SIGNAL( fileSelected(const KFileItem *)), - parent->sig, TQT_SIGNAL( fileSelected(const KFileItem*))); - TQObject::connect(sig, TQT_SIGNAL( fileHighlighted(const KFileItem *) ), - parent->sig,TQT_SIGNAL(fileHighlighted(const KFileItem*))); - TQObject::connect(sig, TQT_SIGNAL( sortingChanged( TQDir::SortSpec ) ), - parent->sig, TQT_SIGNAL(sortingChanged( TQDir::SortSpec))); - TQObject::connect(sig, TQT_SIGNAL( dropped(const KFileItem *, TQDropEvent*, const KURL::List&) ), - parent->sig, TQT_SIGNAL(dropped(const KFileItem *, TQDropEvent*, const KURL::List&))); - } -} - -bool KFileView::updateNumbers(const KFileItem *i) -{ - if (!( viewMode() & Files ) && i->isFile()) - return false; - - if (!( viewMode() & Directories ) && i->isDir()) - return false; - - if (i->isDir()) - dirsNumber++; - else - filesNumber++; - - return true; -} - -void qt_qstring_stats(); - -// filter out files if we're in directory mode and count files/directories -// and insert into the view -void KFileView::addItemList(const KFileItemList& list) -{ - KFileItem *tmp; - - for (KFileItemListIterator it(list); (tmp = it.current()); ++it) - { - if (!updateNumbers(tmp)) - continue; - - insertItem( tmp ); - } - -#ifdef Q2HELPER - qt_qstring_stats(); -#endif -} - -void KFileView::insertItem( KFileItem * ) -{ -} - -void KFileView::setSorting(TQDir::SortSpec new_sort) -{ - m_sorting = new_sort; -} - -void KFileView::clear() -{ - m_itemList.clear(); - filesNumber = 0; - dirsNumber = 0; - clearView(); -} - -void KFileView::sortReversed() -{ - int spec = sorting(); - - setSorting( static_cast<TQDir::SortSpec>( spec ^ TQDir::Reversed ) ); -} - -#if 0 -int KFileView::compareItems(const KFileItem *fi1, const KFileItem *fi2) const -{ - static const TQString &dirup = TDEGlobal::staticQString(".."); - bool bigger = true; - bool keepFirst = false; - bool dirsFirst = ((m_sorting & TQDir::DirsFirst) == TQDir::DirsFirst); - - if (fi1 == fi2) - return 0; - - // .. is always bigger, independent of the sort criteria - if ( fi1->name() == dirup ) { - bigger = false; - keepFirst = dirsFirst; - } - else if ( fi2->name() == dirup ) { - bigger = true; - keepFirst = dirsFirst; - } - - else { - if ( fi1->isDir() != fi2->isDir() && dirsFirst ) { - bigger = fi2->isDir(); - keepFirst = true; - } - else { - - TQDir::SortSpec sort = static_cast<TQDir::SortSpec>(m_sorting & TQDir::SortByMask); - - //if (fi1->isDir() || fi2->isDir()) - // sort = static_cast<TQDir::SortSpec>(KFileView::defaultSortSpec & TQDir::SortByMask); - - switch (sort) { - case TQDir::Name: - default: -sort_by_name: - if ( (m_sorting & TQDir::IgnoreCase) == TQDir::IgnoreCase ) - bigger = (fi1->name( true ) > fi2->name( true )); - else - bigger = (fi1->name() > fi2->name()); - break; - case TQDir::Time: - { - time_t t1 = fi1->time( TDEIO::UDS_MODIFICATION_TIME ); - time_t t2 = fi2->time( TDEIO::UDS_MODIFICATION_TIME ); - if ( t1 != t2 ) { - bigger = (t1 > t2); - break; - } - - // Sort by name if both items have the same timestamp. - // Don't honor the reverse flag tho. - else { - keepFirst = true; - goto sort_by_name; - } - } - case TQDir::Size: - { - TDEIO::filesize_t s1 = fi1->size(); - TDEIO::filesize_t s2 = fi2->size(); - if ( s1 != s2 ) { - bigger = (s1 > s2); - break; - } - - // Sort by name if both items have the same size. - // Don't honor the reverse flag tho. - else { - keepFirst = true; - goto sort_by_name; - } - } - case TQDir::Unsorted: - bigger = true; // nothing - break; - } - } - } - - if (reversed && !keepFirst ) // don't reverse dirs to the end! - bigger = !bigger; - - return (bigger ? 1 : -1); -} -#endif - -void KFileView::updateView(bool f) -{ - widget()->repaint(f); -} - -void KFileView::updateView(const KFileItem *) -{ -} - -void KFileView::setCurrentItem(const TQString &filename ) -{ - if (!filename.isNull()) { - KFileItem *item; - for ( (item = firstFileItem()); item; item = nextItem( item ) ) { - if (item->name() == filename) { - setCurrentItem( item ); - return; - } - } - } - - kdDebug(kfile_area) << "setCurrentItem: no match found: " << filename << endl; -} - -const KFileItemList * KFileView::items() const -{ - KFileItem *item = 0L; - - // only ever use m_itemList in this method! - m_itemList.clear(); - for ( (item = firstFileItem()); item; item = nextItem( item ) ) - m_itemList.append( item ); - - return &m_itemList; -} - - -const KFileItemList * KFileView::selectedItems() const -{ - if ( !m_selectedList ) - m_selectedList = new KFileItemList; - - m_selectedList->clear(); - - KFileItem *item; - for ( (item = firstFileItem()); item; item = nextItem( item ) ) { - if ( isSelected( item ) ) - m_selectedList->append( item ); - } - - return m_selectedList; -} - -void KFileView::selectAll() -{ - if (selection_mode == KFile::NoSelection || selection_mode== KFile::Single) - return; - - KFileItem *item = 0L; - for ( (item = firstFileItem()); item; item = nextItem( item ) ) - setSelected( item, true ); -} - - -void KFileView::invertSelection() -{ - KFileItem *item = 0L; - for ( (item = firstFileItem()); item; item = nextItem( item ) ) - setSelected( item, !isSelected( item ) ); -} - - -void KFileView::setSelectionMode( KFile::SelectionMode sm ) -{ - selection_mode = sm; -} - -KFile::SelectionMode KFileView::selectionMode() const -{ - return selection_mode; -} - -void KFileView::setViewMode( ViewMode vm ) -{ - view_mode = vm; -} - -void KFileView::removeItem( const KFileItem *item ) -{ - if ( !item ) - return; - - if ( item->isDir() ) - dirsNumber--; - else - filesNumber--; - - if ( m_selectedList ) - m_selectedList->removeRef( item ); -} - -void KFileView::listingCompleted() -{ - // empty default impl. -} - -KActionCollection * KFileView::actionCollection() const -{ - if ( !d->actions ) - d->actions = new KActionCollection( widget(), "KFileView::d->actions" ); - return d->actions; -} - -void KFileView::readConfig( TDEConfig *, const TQString& ) -{ -} - -void KFileView::writeConfig( TDEConfig *, const TQString& ) -{ -} - -TQString KFileView::sortingKey( const TQString& value, bool isDir, int sortSpec ) -{ - bool reverse = sortSpec & TQDir::Reversed; - bool dirsFirst = sortSpec & TQDir::DirsFirst; - char start = (isDir && dirsFirst) ? (reverse ? '2' : '0') : '1'; - TQString result = (sortSpec & TQDir::IgnoreCase) ? value.lower() : value; - return result.prepend( start ); -} - -TQString KFileView::sortingKey( TDEIO::filesize_t value, bool isDir, int sortSpec) -{ - bool reverse = sortSpec & TQDir::Reversed; - bool dirsFirst = sortSpec & TQDir::DirsFirst; - char start = (isDir && dirsFirst) ? (reverse ? '2' : '0') : '1'; - return TDEIO::number( value ).rightJustify( 24, '0' ).prepend( start ); -} - -void KFileView::setDropOptions(int options) -{ - virtual_hook(VIRTUAL_SET_DROP_OPTIONS, &options); // Virtual call -} - -void KFileView::setDropOptions_impl(int options) -{ - d->dropOptions = options; -} - -int KFileView::dropOptions() -{ - return d->dropOptions; -} - -int KFileView::autoOpenDelay() -{ - return (TQApplication::startDragTime() * 3) / 2; -} - -void KFileView::virtual_hook( int id, void* data) -{ - switch(id) { - case VIRTUAL_SET_DROP_OPTIONS: - setDropOptions_impl(*(int *)data); - break; - default: - /*BASE::virtual_hook( id, data );*/ - break; - } -} - -#include "kfileview.moc" diff --git a/kio/kfile/kfileview.h b/kio/kfile/kfileview.h deleted file mode 100644 index 7e88fc9d8..000000000 --- a/kio/kfile/kfileview.h +++ /dev/null @@ -1,444 +0,0 @@ -// -*- c++ -*- -/* This file is part of the KDE libraries - Copyright (C) 1997 Stephan Kulow <coolo@kde.org> - Copyright (C) 2001 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef KFILEVIEW_H -#define KFILEVIEW_H - -class TQPoint; -class KActionCollection; - -#include <tqwidget.h> - -#include "kfileitem.h" -#include "kfile.h" - -/** - * internal class to make easier to use signals possible - * @internal - **/ -class TDEIO_EXPORT KFileViewSignaler : public TQObject -{ - Q_OBJECT - -public: - /** - * Call this method when an item is selected (depends on single click / - * double click configuration). Emits the appropriate signal. - **/ - void activate( const KFileItem *item ) { - if ( item->isDir() ) - emit dirActivated( item ); - else - emit fileSelected( item ); - } - /** - * emits the highlighted signal for item. Call this in your view class - * whenever the selection changes. - */ - void highlightFile(const KFileItem *i) { emit fileHighlighted(i); } - - void activateMenu( const KFileItem *i, const TQPoint& pos ) { - emit activatedMenu( i, pos ); - } - - void changeSorting( TQDir::SortSpec sorting ) { - emit sortingChanged( sorting ); - } - - void dropURLs(const KFileItem *i, TQDropEvent*e, const KURL::List&urls) { - emit dropped(i, e, urls); - } - -signals: - void dirActivated(const KFileItem*); - - void sortingChanged( TQDir::SortSpec ); - - /** - * the item maybe be 0L, indicating that we're in multiselection mode and - * the selection has changed. - */ - void fileHighlighted(const KFileItem*); - void fileSelected(const KFileItem*); - void activatedMenu( const KFileItem *i, const TQPoint& ); - void dropped(const KFileItem *, TQDropEvent*, const KURL::List&); -}; - -/** - * This class defines an interface to all file views. Its intent is - * to allow to switch the view of the files in the selector very easily. - * It defines some pure virtual functions, that must be implemented to - * make a file view working. - * - * Since this class is not a widget, but it's meant to be added to other - * widgets, its most important function is widget. This should return - * a pointer to the implemented widget. - * - * @short A base class for views of the KDE file selector - * @author Stephan Kulow <coolo@kde.org> - **/ -class TDEIO_EXPORT KFileView { - -public: - KFileView(); - - /** - * Destructor - */ - virtual ~KFileView(); - - /** - * inserts a list of items. - **/ - void addItemList(const KFileItemList &list); - - /** - * a pure virtual function to get a TQWidget, that can be added to - * other widgets. This function is needed to make it possible for - * derived classes to derive from other widgets. - **/ - virtual TQWidget *widget() = 0; - - /** - * ### As const-method, to be fixed in 3.0 - */ - TQWidget *widget() const { return const_cast<KFileView*>(this)->widget(); } - - /** - * Sets @p filename the current item in the view, if available. - */ - void setCurrentItem( const TQString &filename ); - - /** - * Reimplement this to set @p item the current item in the view, e.g. - * the item having focus. - */ - virtual void setCurrentItem( const KFileItem *item ) = 0; - - /** - * @returns the "current" KFileItem, e.g. where the cursor is. - * Returns 0L when there is no current item (e.g. in an empty view). - * Subclasses have to implement this. - */ - virtual KFileItem *currentFileItem() const = 0; - - /** - * Clears the view and all item lists. - */ - virtual void clear(); - - /** - * does a repaint of the view. - * - * The default implementation calls - * \code - * widget()->repaint(f) - * \endcode - **/ - virtual void updateView(bool f = true); - - virtual void updateView(const KFileItem*); - - /** - * Removes an item from the list; has to be implemented by the view. - * Call KFileView::removeItem( item ) after removing it. - */ - virtual void removeItem(const KFileItem *item); - - /** - * This hook is called when all items of the currently listed directory - * are listed and inserted into the view, i.e. there won't come any new - * items anymore. - */ - virtual void listingCompleted(); - - /** - * Returns the sorting order of the internal list. Newly added files - * are added through this sorting. - */ - TQDir::SortSpec sorting() const { return m_sorting; } - - /** - * Sets the sorting order of the view. - * - * Default is TQDir::Name | TQDir::IgnoreCase | TQDir::DirsFirst - * Override this in your subclass and sort accordingly (usually by - * setting the sorting-key for every item and telling QIconView - * or TQListView to sort. - * - * A view may choose to use a different sorting than TQDir::Name, Time - * or Size. E.g. to sort by mimetype or any possible string. Set the - * sorting to TQDir::Unsorted for that and do the rest internally. - * - * @see sortingKey - */ - virtual void setSorting(TQDir::SortSpec sort); - - /** - * Tells whether the current items are in reversed order (shortcut to - * sorting() & TQDir::Reversed). - */ - bool isReversed() const { return (m_sorting & TQDir::Reversed); } - - void sortReversed(); - - /** - * @returns the number of dirs and files - **/ - uint count() const { return filesNumber + dirsNumber; } - - /** - * @returns the number of files. - **/ - uint numFiles() const { return filesNumber; } - - /** - * @returns the number of directories - **/ - uint numDirs() const { return dirsNumber; } - - virtual void setSelectionMode( KFile::SelectionMode sm ); - virtual KFile::SelectionMode selectionMode() const; - - enum ViewMode { - Files = 1, - Directories = 2, - All = Files | Directories - }; - virtual void setViewMode( ViewMode vm ); - virtual ViewMode viewMode() const { return view_mode; } - - /** - * @returns the localized name of the view, which could be displayed - * somewhere, e.g. in a menu, where the user can choose between views. - * @see setViewName - */ - TQString viewName() const { return m_viewName; } - - /** - * Sets the name of the view, which could be displayed somewhere. - * E.g. "Image Preview". - */ - void setViewName( const TQString& name ) { m_viewName = name; } - - virtual void setParentView(KFileView *parent); - - /** - * The derived view must implement this function to add - * the file in the widget. - * - * Make sure to call this implementation, i.e. - * KFileView::insertItem( i ); - * - */ - virtual void insertItem( KFileItem *i); - - /** - * pure virtual function, that should be implemented to clear - * the view. At this moment the list is already empty - **/ - virtual void clearView() = 0; - - /** - * pure virtual function, that should be implemented to make item i - * visible, i.e. by scrolling the view appropriately. - */ - virtual void ensureItemVisible( const KFileItem *i ) = 0; - - /** - * Clears any selection, unhighlights everything. Must be implemented by - * the view. - */ - virtual void clearSelection() = 0; - - /** - * Selects all items. You may want to override this, if you can implement - * it more efficiently than calling setSelected() with every item. - * This works only in Multiselection mode of course. - */ - virtual void selectAll(); - - /** - * Inverts the current selection, i.e. selects all items, that were up to - * now not selected and deselects the other. - */ - virtual void invertSelection(); - - /** - * Tells the view that it should highlight the item. - * This function must be implemented by the view. - **/ - virtual void setSelected(const KFileItem *, bool enable) = 0; - - /** - * @returns whether the given item is currently selected. - * Must be implemented by the view. - */ - virtual bool isSelected( const KFileItem * ) const = 0; - - /** - * @returns all currently highlighted items. - */ - const KFileItemList * selectedItems() const; - - /** - * @returns all items currently available in the current sort-order - */ - const KFileItemList * items() const; - - virtual KFileItem * firstFileItem() const = 0; - virtual KFileItem * nextItem( const KFileItem * ) const = 0; - virtual KFileItem * prevItem( const KFileItem * ) const = 0; - - /** - * This is a KFileDialog specific hack: we want to select directories with - * single click, but not files. But as a generic class, we have to be able - * to select files on single click as well. - * - * This gives us the opportunity to do both. - * - * Every view has to decide when to call select( item ) when a file was - * single-clicked, based on onlyDoubleClickSelectsFiles(). - */ - void setOnlyDoubleClickSelectsFiles( bool enable ) { - myOnlyDoubleClickSelectsFiles = enable; - } - - /** - * @returns whether files (not directories) should only be select()ed by - * double-clicks. - * @see setOnlyDoubleClickSelectsFiles - */ - bool onlyDoubleClickSelectsFiles() const { - return myOnlyDoubleClickSelectsFiles; - } - - /** - * increases the number of dirs and files. - * @returns true if the item fits the view mode - */ - bool updateNumbers(const KFileItem *i); - - /** - * @returns the view-specific action-collection. Every view should - * add its actions here (if it has any) to make them available to - * e.g. the KDirOperator's popup-menu. - */ - virtual KActionCollection * actionCollection() const; - - KFileViewSignaler * signaler() const { return sig; } - - virtual void readConfig( TDEConfig *, const TQString& group = TQString::null ); - virtual void writeConfig( TDEConfig *, const TQString& group = TQString::null); - - /** - * Various options for drag and drop support. - * These values can be or'd together. - * @li @p AutoOpenDirs Automatically open directory after hovering above it - * for a short while while dragging. - * @since 3.2 - */ - enum DropOptions { - AutoOpenDirs = 1 - }; - /** - * Specify DND options. See DropOptions for details. - * All options are disabled by default. - * @since 3.2 - */ - // KDE 4: Make virtual - void setDropOptions(int options); - - /** - * Returns the DND options in effect. - * See DropOptions for details. - * @since 3.2 - */ - int dropOptions(); - - /** - * This method calculates a TQString from the given parameters, that is - * suitable for sorting with e.g. TQIconView or TQListView. Their - * Item-classes usually have a setKey( const TQString& ) method or a virtual - * method TQString key() that is used for sorting. - * - * @param value Any string that should be used as sort criterion - * @param isDir Tells whether the key is computed for an item representing - * a directory (directories are usually sorted before files) - * @param sortSpec An ORed combination of TQDir::SortSpec flags. - * Currently, the values IgnoreCase, Reversed and - * DirsFirst are taken into account. - */ - static TQString sortingKey( const TQString& value, bool isDir, int sortSpec); - - /** - * An overloaded method that takes not a TQString, but a number as sort - * criterion. You can use this for file-sizes or dates/times for example. - * If you use a time_t, you need to cast that to TDEIO::filesize_t because - * of ambiguity problems. - */ - static TQString sortingKey( TDEIO::filesize_t value, bool isDir,int sortSpec); - - /** - * @internal - * delay before auto opening a directory - */ - static int autoOpenDelay(); - -protected: - /** - * @internal - * class to distribute the signals - **/ - KFileViewSignaler *sig; - -private: - static TQDir::SortSpec defaultSortSpec; - TQDir::SortSpec m_sorting; - TQString m_viewName; - - /** - * counters - **/ - uint filesNumber; - uint dirsNumber; - - ViewMode view_mode; - KFile::SelectionMode selection_mode; - - // never use! It's only guaranteed to contain valid items in the items() - // method! - mutable KFileItemList m_itemList; - - mutable KFileItemList *m_selectedList; - bool myOnlyDoubleClickSelectsFiles; - -protected: - virtual void virtual_hook( int id, void* data ); - /* @internal for virtual_hook */ - enum { VIRTUAL_SET_DROP_OPTIONS = 1 }; - void setDropOptions_impl(int options); -private: - class KFileViewPrivate; - KFileViewPrivate *d; -}; - -#endif // KFILEINFOLISTWIDGET_H diff --git a/kio/kfile/kicondialog.cpp b/kio/kfile/kicondialog.cpp deleted file mode 100644 index dfbf47d0d..000000000 --- a/kio/kfile/kicondialog.cpp +++ /dev/null @@ -1,772 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 - * - * This file is part of the KDE project, module kfile. - * Copyright (C) 2000 Geert Jansen <jansen@kde.org> - * (C) 2000 Kurt Granroth <granroth@kde.org> - * (C) 1997 Christoph Neerfeld <chris@kde.org> - * (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org> - * - * This is free software; it comes under the GNU Library General - * Public License, version 2. See the file "COPYING.LIB" for the - * exact licensing terms. - */ - -#include "kicondialog.h" - -#include <config.h> - -#include <assert.h> - -#include <kiconviewsearchline.h> - -#include <kapplication.h> -#include <klocale.h> -#include <kglobal.h> -#include <kstandarddirs.h> -#include <kiconloader.h> -#include <kprogress.h> -#include <kiconview.h> -#include <kfiledialog.h> -#include <kimagefilepreview.h> - -#include <tqlayout.h> -#include <tqstring.h> -#include <tqstringlist.h> -#include <tqsortedlist.h> -#include <tqimage.h> -#include <tqpixmap.h> -#include <tqlabel.h> -#include <tqcombobox.h> -#include <tqtimer.h> -#include <tqbuttongroup.h> -#include <tqradiobutton.h> -#include <tqfileinfo.h> -#include <tqtoolbutton.h> -#include <tqwhatsthis.h> - -#ifdef HAVE_LIBART -#include <svgicons/ksvgiconengine.h> -#include <svgicons/ksvgiconpainter.h> -#endif - -class KIconCanvas::KIconCanvasPrivate -{ - public: - KIconCanvasPrivate() { m_bLoading = false; } - ~KIconCanvasPrivate() {} - bool m_bLoading; -}; - -/** - * Helper class for sorting icon paths by icon name - */ -class IconPath : public TQString -{ -protected: - TQString m_iconName; - -public: - IconPath(const TQString &ip) : TQString (ip) - { - int n = findRev('/'); - m_iconName = (n==-1) ? static_cast<TQString>(*this) : mid(n+1); - } - - - IconPath() : TQString () - { } - - bool operator== (const IconPath &ip) const - { return m_iconName == ip.m_iconName; } - - bool operator< (const IconPath &ip) const - { return m_iconName < ip.m_iconName; } - -}; - -/* - * KIconCanvas: Iconview for the iconloader dialog. - */ - -KIconCanvas::KIconCanvas(TQWidget *parent, const char *name) - : KIconView(parent, name) -{ - d = new KIconCanvasPrivate; - mpTimer = new TQTimer(this); - connect(mpTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotLoadFiles())); - connect(this, TQT_SIGNAL(currentChanged(TQIconViewItem *)), - TQT_SLOT(slotCurrentChanged(TQIconViewItem *))); - setGridX(80); - setWordWrapIconText(false); - setShowToolTips(true); -} - -KIconCanvas::~KIconCanvas() -{ - delete mpTimer; - delete d; -} - -void KIconCanvas::loadFiles(const TQStringList& files) -{ - clear(); - mFiles = files; - emit startLoading(mFiles.count()); - mpTimer->start(10, true); // #86680 - d->m_bLoading = false; -} - -void KIconCanvas::slotLoadFiles() -{ - setResizeMode(Fixed); - TQApplication::setOverrideCursor(tqwaitCursor); - - // disable updates to not trigger paint events when adding child items - setUpdatesEnabled( false ); - -#ifdef HAVE_LIBART - KSVGIconEngine *svgEngine = new KSVGIconEngine(); -#endif - - d->m_bLoading = true; - int i; - TQStringList::ConstIterator it; - uint emitProgress = 10; // so we will emit it once in the beginning - TQStringList::ConstIterator end(mFiles.end()); - for (it=mFiles.begin(), i=0; it!=end; ++it, i++) - { - // Calling kapp->processEvents() makes the iconview flicker like hell - // (it's being repainted once for every new item), so we don't do this. - // Instead, we directly repaint the progress bar without going through - // the event-loop. We do that just once for every 10th item so that - // the progress bar doesn't flicker in turn. (pfeiffer) - if ( emitProgress >= 10 ) { - emit progress(i); - emitProgress = 0; - } - - emitProgress++; -// kapp->processEvents(); - if ( !d->m_bLoading ) // user clicked on a button that will load another set of icons - break; - TQImage img; - - // Use the extension as the format. Works for XPM and PNG, but not for SVG - TQString path= *it; - TQString ext = path.right(3).upper(); - - if (ext != "SVG" && ext != "VGZ") - img.load(*it); -#ifdef HAVE_LIBART - else - if (svgEngine->load(60, 60, *it)) - img = *svgEngine->painter()->image(); -#endif - - if (img.isNull()) - continue; - if (img.width() > 60 || img.height() > 60) - { - if (img.width() > img.height()) - { - int height = (int) ((60.0 / img.width()) * img.height()); - img = img.smoothScale(60, height); - } else - { - int width = (int) ((60.0 / img.height()) * img.width()); - img = img.smoothScale(width, 60); - } - } - TQPixmap pm; - pm.convertFromImage(img); - TQFileInfo fi(*it); - TQIconViewItem *item = new TQIconViewItem(this, fi.baseName(), pm); - item->setKey(*it); - item->setDragEnabled(false); - item->setDropEnabled(false); - } - -#ifdef HAVE_LIBART - delete svgEngine; -#endif - - // enable updates since we have to draw the whole view now - setUpdatesEnabled( true ); - - TQApplication::restoreOverrideCursor(); - d->m_bLoading = false; - emit finished(); - setResizeMode(Adjust); -} - -TQString KIconCanvas::getCurrent() const -{ - if (!currentItem()) - return TQString::null; - return currentItem()->key(); -} - -void KIconCanvas::stopLoading() -{ - d->m_bLoading = false; -} - -void KIconCanvas::slotCurrentChanged(TQIconViewItem *item) -{ - emit nameChanged((item != 0L) ? item->text() : TQString::null); -} - -class KIconDialog::KIconDialogPrivate -{ - public: - KIconDialogPrivate() { - m_bStrictIconSize = true; - m_bLockUser = false; - m_bLockCustomDir = false; - searchLine = 0; - } - ~KIconDialogPrivate() {} - bool m_bStrictIconSize, m_bLockUser, m_bLockCustomDir; - TQString custom; - TQString customLocation; - KIconViewSearchLine *searchLine; -}; - -/* - * KIconDialog: Dialog for selecting icons. Both system and user - * specified icons can be chosen. - */ - -KIconDialog::KIconDialog(TQWidget *parent, const char *name) - : KDialogBase(parent, name, true, i18n("Select Icon"), Ok|Cancel, Ok) -{ - d = new KIconDialogPrivate; - mpLoader = TDEGlobal::iconLoader(); - init(); -} - -KIconDialog::KIconDialog(KIconLoader *loader, TQWidget *parent, - const char *name) - : KDialogBase(parent, name, true, i18n("Select Icon"), Ok|Cancel, Ok) -{ - d = new KIconDialogPrivate; - mpLoader = loader; - init(); -} - -void KIconDialog::init() -{ - mGroupOrSize = KIcon::Desktop; - mContext = KIcon::Any; - mType = 0; - mFileList = TDEGlobal::dirs()->findAllResources("appicon", TQString::fromLatin1("*.png")); - - TQWidget *main = new TQWidget( this ); - setMainWidget(main); - - TQVBoxLayout *top = new TQVBoxLayout(main); - top->setSpacing( spacingHint() ); - - TQButtonGroup *bgroup = new TQButtonGroup(0, Qt::Vertical, i18n("Icon Source"), main); - bgroup->layout()->setSpacing(KDialog::spacingHint()); - bgroup->layout()->setMargin(KDialog::marginHint()); - top->addWidget(bgroup); - connect(bgroup, TQT_SIGNAL(clicked(int)), TQT_SLOT(slotButtonClicked(int))); - TQGridLayout *grid = new TQGridLayout(bgroup->layout(), 3, 2); - mpRb1 = new TQRadioButton(i18n("S&ystem icons:"), bgroup); - grid->addWidget(mpRb1, 1, 0); - mpCombo = new TQComboBox(bgroup); - connect(mpCombo, TQT_SIGNAL(activated(int)), TQT_SLOT(slotContext(int))); - grid->addWidget(mpCombo, 1, 1); - mpRb2 = new TQRadioButton(i18n("O&ther icons:"), bgroup); - grid->addWidget(mpRb2, 2, 0); - mpBrowseBut = new TQPushButton(i18n("&Browse..."), bgroup); - grid->addWidget(mpBrowseBut, 2, 1); - - // - // ADD SEARCHLINE - // - TQHBoxLayout *searchLayout = new TQHBoxLayout(0, 0, KDialog::spacingHint()); - top->addLayout(searchLayout); - - TQToolButton *clearSearch = new TQToolButton(main); - clearSearch->setTextLabel(i18n("Clear Search"), true); - clearSearch->setIconSet(SmallIconSet(TQApplication::reverseLayout() ? "clear_left" :"locationbar_erase")); - searchLayout->addWidget(clearSearch); - - TQLabel *searchLabel = new TQLabel(i18n("&Search:"), main); - searchLayout->addWidget(searchLabel); - - d->searchLine = new KIconViewSearchLine(main, "searchLine"); - searchLayout->addWidget(d->searchLine); - searchLabel->setBuddy(d->searchLine); - - - // signals and slots connections - connect(clearSearch, TQT_SIGNAL(clicked()), d->searchLine, TQT_SLOT(clear())); - - TQString wtstr = i18n("Search interactively for icon names (e.g. folder)."); - TQWhatsThis::add(searchLabel, wtstr); - TQWhatsThis::add(d->searchLine, wtstr); - - - mpCanvas = new KIconCanvas(main); - connect(mpCanvas, TQT_SIGNAL(executed(TQIconViewItem *)), TQT_SLOT(slotAcceptIcons())); - connect(mpCanvas, TQT_SIGNAL(returnPressed(TQIconViewItem *)), TQT_SLOT(slotAcceptIcons())); - mpCanvas->setMinimumSize(400, 125); - top->addWidget(mpCanvas); - d->searchLine->setIconView(mpCanvas); - - mpProgress = new KProgress(main); - top->addWidget(mpProgress); - connect(mpCanvas, TQT_SIGNAL(startLoading(int)), TQT_SLOT(slotStartLoading(int))); - connect(mpCanvas, TQT_SIGNAL(progress(int)), TQT_SLOT(slotProgress(int))); - connect(mpCanvas, TQT_SIGNAL(finished()), TQT_SLOT(slotFinished())); - - // When pressing Ok or Cancel, stop loading icons - connect(this, TQT_SIGNAL(hidden()), mpCanvas, TQT_SLOT(stopLoading())); - - static const char* const context_text[] = { - I18N_NOOP( "Actions" ), - I18N_NOOP( "Animations" ), - I18N_NOOP( "Applications" ), - I18N_NOOP( "Categories" ), - I18N_NOOP( "Devices" ), - I18N_NOOP( "Emblems" ), - I18N_NOOP( "Emotes" ), - I18N_NOOP( "Filesystems" ), - I18N_NOOP( "International" ), - I18N_NOOP( "Mimetypes" ), - I18N_NOOP( "Places" ), - I18N_NOOP( "Status" ) }; - static const KIcon::Context context_id[] = { - KIcon::Action, - KIcon::Animation, - KIcon::Application, - KIcon::Category, - KIcon::Device, - KIcon::Emblem, - KIcon::Emote, - KIcon::FileSystem, - KIcon::International, - KIcon::MimeType, - KIcon::Place, - KIcon::StatusIcon }; - mNumContext = 0; - int cnt = sizeof( context_text ) / sizeof( context_text[ 0 ] ); - // check all 3 arrays have same sizes - assert( cnt == sizeof( context_id ) / sizeof( context_id[ 0 ] ) - && cnt == sizeof( mContextMap ) / sizeof( mContextMap[ 0 ] )); - for( int i = 0; - i < cnt; - ++i ) - { - if( mpLoader->hasContext( context_id[ i ] )) - { - mpCombo->insertItem(i18n( context_text[ i ] )); - mContextMap[ mNumContext++ ] = context_id[ i ]; - } - } - mpCombo->setFixedSize(mpCombo->sizeHint()); - - mpBrowseBut->setFixedWidth(mpCombo->width()); - - // Make the dialog a little taller - incInitialSize(TQSize(0,100)); -} - - -KIconDialog::~KIconDialog() -{ - delete d; -} - -void KIconDialog::slotAcceptIcons() -{ - d->custom=TQString::null; - slotOk(); -} - -void KIconDialog::showIcons() -{ - mpCanvas->clear(); - TQStringList filelist; - if (mType == 0) - if (d->m_bStrictIconSize) - filelist=mpLoader->queryIcons(mGroupOrSize, mContext); - else - filelist=mpLoader->queryIconsByContext(mGroupOrSize, mContext); - else if ( !d->customLocation.isNull() ) - filelist=mpLoader->queryIconsByDir( d->customLocation ); - else - filelist=mFileList; - - TQSortedList <IconPath>iconlist; - iconlist.setAutoDelete(true); - TQStringList::Iterator it; - for( it = filelist.begin(); it != filelist.end(); ++it ) - iconlist.append(new IconPath(*it)); - - iconlist.sort(); - filelist.clear(); - - for ( IconPath *ip=iconlist.first(); ip != 0; ip=iconlist.next() ) - filelist.append(*ip); - - d->searchLine->clear(); - mpCanvas->loadFiles(filelist); -} - -void KIconDialog::setStrictIconSize(bool b) -{ - d->m_bStrictIconSize=b; -} - -bool KIconDialog::strictIconSize() const -{ - return d->m_bStrictIconSize; -} - -void KIconDialog::setIconSize( int size ) -{ - // see KIconLoader, if you think this is weird - if ( size == 0 ) - mGroupOrSize = KIcon::Desktop; // default Group - else - mGroupOrSize = -size; // yes, KIconLoader::queryIconsByContext is weird -} - -int KIconDialog::iconSize() const -{ - // 0 or any other value ==> mGroupOrSize is a group, so we return 0 - return (mGroupOrSize < 0) ? -mGroupOrSize : 0; -} - -#ifndef KDE_NO_COMPAT -TQString KIconDialog::selectIcon(KIcon::Group group, KIcon::Context context, bool user) -{ - setup( group, context, false, 0, user ); - return openDialog(); -} -#endif - -void KIconDialog::setup(KIcon::Group group, KIcon::Context context, - bool strictIconSize, int iconSize, bool user ) -{ - d->m_bStrictIconSize = strictIconSize; - mGroupOrSize = (iconSize == 0) ? group : -iconSize; - mType = user ? 1 : 0; - mpRb1->setChecked(!user); - mpRb2->setChecked(user); - mpCombo->setEnabled(!user); - mpBrowseBut->setEnabled(user); - setContext( context ); -} - -void KIconDialog::setup(KIcon::Group group, KIcon::Context context, - bool strictIconSize, int iconSize, bool user, - bool lockUser, bool lockCustomDir ) -{ - d->m_bStrictIconSize = strictIconSize; - d->m_bLockUser = lockUser; - d->m_bLockCustomDir = lockCustomDir; - mGroupOrSize = (iconSize == 0) ? group : -iconSize; - mType = user ? 1 : 0; - mpRb1->setChecked(!user); - mpRb1->setEnabled( !lockUser || !user ); - mpRb2->setChecked(user); - mpRb2->setEnabled( !lockUser || user ); - mpCombo->setEnabled(!user); - mpBrowseBut->setEnabled( user && !lockCustomDir ); - setContext( context ); -} - -void KIconDialog::setContext( KIcon::Context context ) -{ - mContext = context; - for( int i = 0; - i < mNumContext; - ++i ) - if( mContextMap[ i ] == context ) - { - mpCombo->setCurrentItem( i ); - return; - } -} - -void KIconDialog::setCustomLocation( const TQString& location ) -{ - d->customLocation = location; -} - -TQString KIconDialog::openDialog() -{ - showIcons(); - - if ( exec() == Accepted ) - { - if (!d->custom.isNull()) - return d->custom; - TQString name = mpCanvas->getCurrent(); - if (name.isEmpty() || (mType == 1)) - return name; - TQFileInfo fi(name); - return fi.baseName(); - } - return TQString::null; -} - -void KIconDialog::showDialog() -{ - setModal(false); - showIcons(); - show(); -} - -void KIconDialog::slotOk() -{ - TQString name; - if (!d->custom.isNull()) - { - name = d->custom; - } - else - { - name = mpCanvas->getCurrent(); - if (!name.isEmpty() && (mType != 1)) - { - TQFileInfo fi(name); - name = fi.baseName(); - } - } - - emit newIconName(name); - KDialogBase::slotOk(); -} - -TQString KIconDialog::getIcon(KIcon::Group group, KIcon::Context context, - bool strictIconSize, int iconSize, bool user, - TQWidget *parent, const TQString &caption) -{ - KIconDialog dlg(parent, "icon dialog"); - dlg.setup( group, context, strictIconSize, iconSize, user ); - if (!caption.isNull()) - dlg.setCaption(caption); - - return dlg.openDialog(); -} - -void KIconDialog::slotButtonClicked(int id) -{ - TQString file; - - switch (id) - { - case 0: - if(mType!=0) - { - mType = 0; - mpBrowseBut->setEnabled(false); - mpCombo->setEnabled(true); - showIcons(); - } - break; - - case 1: - if(mType!=1) - { - mType = 1; - mpBrowseBut->setEnabled( !d->m_bLockCustomDir ); - mpCombo->setEnabled(false); - showIcons(); - } - break; - case 2: - { - // Create a file dialog to select a PNG, XPM or SVG file, - // with the image previewer shown. - // KFileDialog::getImageOpenURL doesn't allow svg. - KFileDialog dlg(TQString::null, i18n("*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)"), - this, "filedialog", true); - dlg.setOperationMode( KFileDialog::Opening ); - dlg.setCaption( i18n("Open") ); - dlg.setMode( KFile::File ); - - KImageFilePreview *ip = new KImageFilePreview( &dlg ); - dlg.setPreviewWidget( ip ); - dlg.exec(); - - file = dlg.selectedFile(); - if (!file.isEmpty()) - { - d->custom = file; - if ( mType == 1 ) - d->customLocation = TQFileInfo( file ).dirPath( true ); - slotOk(); - } - } - break; - } -} - -void KIconDialog::slotContext(int id) -{ - mContext = static_cast<KIcon::Context>( mContextMap[ id ] ); - showIcons(); -} - -void KIconDialog::slotStartLoading(int steps) -{ - if (steps < 10) - mpProgress->hide(); - else - { - mpProgress->setTotalSteps(steps); - mpProgress->setProgress(0); - mpProgress->show(); - } -} - -void KIconDialog::slotProgress(int p) -{ - mpProgress->setProgress(p); - // commented out the following since setProgress already paints ther - // progress bar. ->repaint() only makes it flicker - //mpProgress->repaint(); -} - -void KIconDialog::slotFinished() -{ - mpProgress->hide(); -} - -class KIconButton::KIconButtonPrivate -{ - public: - KIconButtonPrivate() { - m_bStrictIconSize = false; - iconSize = 0; // let KIconLoader choose the default - } - ~KIconButtonPrivate() {} - bool m_bStrictIconSize; - int iconSize; -}; - - -/* - * KIconButton: A "choose icon" pushbutton. - */ - -KIconButton::KIconButton(TQWidget *parent, const char *name) - : TQPushButton(parent, name) -{ - init( TDEGlobal::iconLoader() ); -} - -KIconButton::KIconButton(KIconLoader *loader, - TQWidget *parent, const char *name) - : TQPushButton(parent, name) -{ - init( loader ); -} - -void KIconButton::init( KIconLoader *loader ) -{ - d = new KIconButtonPrivate; - mGroup = KIcon::Desktop; - mContext = KIcon::Application; - mbUser = false; - - mpLoader = loader; - mpDialog = 0L; - connect(this, TQT_SIGNAL(clicked()), TQT_SLOT(slotChangeIcon())); -} - -KIconButton::~KIconButton() -{ - delete mpDialog; - delete d; -} - -void KIconButton::setStrictIconSize(bool b) -{ - d->m_bStrictIconSize=b; -} - -bool KIconButton::strictIconSize() const -{ - return d->m_bStrictIconSize; -} - -void KIconButton::setIconSize( int size ) -{ - d->iconSize = size; -} - -int KIconButton::iconSize() const -{ - return d->iconSize; -} - -void KIconButton::setIconType(KIcon::Group group, KIcon::Context context, bool user) -{ - mGroup = group; - mContext = context; - mbUser = user; -} - -void KIconButton::setIcon(const TQString& icon) -{ - mIcon = icon; - setIconSet(mpLoader->loadIconSet(mIcon, mGroup, d->iconSize)); - - if (!mpDialog) - { - mpDialog = new KIconDialog(mpLoader, this); - connect(mpDialog, TQT_SIGNAL(newIconName(const TQString&)), TQT_SLOT(newIconName(const TQString&))); - } - - if ( mbUser ) - mpDialog->setCustomLocation( TQFileInfo( mpLoader->iconPath(mIcon, mGroup, true) ).dirPath( true ) ); -} - -void KIconButton::resetIcon() -{ - mIcon = TQString::null; - setIconSet(TQIconSet()); -} - -void KIconButton::slotChangeIcon() -{ - if (!mpDialog) - { - mpDialog = new KIconDialog(mpLoader, this); - connect(mpDialog, TQT_SIGNAL(newIconName(const TQString&)), TQT_SLOT(newIconName(const TQString&))); - } - - mpDialog->setup( mGroup, mContext, d->m_bStrictIconSize, d->iconSize, mbUser ); - mpDialog->showDialog(); -} - -void KIconButton::newIconName(const TQString& name) -{ - if (name.isEmpty()) - return; - - TQIconSet iconset = mpLoader->loadIconSet(name, mGroup, d->iconSize); - setIconSet(iconset); - mIcon = name; - - if ( mbUser ) - mpDialog->setCustomLocation( TQFileInfo( mpLoader->iconPath(mIcon, mGroup, true) ).dirPath( true ) ); - - emit iconChanged(name); -} - -void KIconCanvas::virtual_hook( int id, void* data ) -{ KIconView::virtual_hook( id, data ); } - -void KIconDialog::virtual_hook( int id, void* data ) -{ KDialogBase::virtual_hook( id, data ); } - -#include "kicondialog.moc" diff --git a/kio/kfile/kicondialog.h b/kio/kfile/kicondialog.h deleted file mode 100644 index 30d9f1579..000000000 --- a/kio/kfile/kicondialog.h +++ /dev/null @@ -1,350 +0,0 @@ -/* vi: ts=8 sts=4 sw=4 - * - * This file is part of the KDE project, module kfile. - * Copyright (C) 2000 Geert Jansen <jansen@kde.org> - * (C) 2000 Kurt Granroth <granroth@kde.org> - * (C) 1997 Christoph Neerfeld <chris@kde.org> - * (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org> - * - * This is free software; it comes under the GNU Library General - * Public License, version 2. See the file "COPYING.LIB" for the - * exact licensing terms. - */ - -#ifndef __KIconDialog_h__ -#define __KIconDialog_h__ - -#include <tqstring.h> -#include <tqstringlist.h> -#include <tqpushbutton.h> - -#include <kicontheme.h> -#include <kdialogbase.h> -#include <kiconview.h> - -class TQComboBox; -class TQTimer; -class TQKeyEvent; -class TQRadioButton; -class KProgress; -class KIconLoader; - -/** - * Icon canvas for KIconDialog. - */ -class TDEIO_EXPORT KIconCanvas: public KIconView -{ - Q_OBJECT - -public: - KIconCanvas(TQWidget *parent=0L, const char *name=0L); - ~KIconCanvas(); - - /** - * Load icons into the canvas. - */ - void loadFiles(const TQStringList& files); - - /** - * Returns the current icon. - */ - TQString getCurrent() const; - -public slots: - void stopLoading(); - -signals: - /** - * Emitted when the current icon has changed. - */ - void nameChanged(TQString); - /* KDE 4: Make it const TQString & */ - - void startLoading(int); - void progress(int); - void finished(); - -private slots: - void slotLoadFiles(); - void slotCurrentChanged(TQIconViewItem *item); - -private: - TQStringList mFiles; - TQTimer *mpTimer; - KIconLoader *mpLoader; // unused - -protected: - virtual void virtual_hook( int id, void* data ); - -private: - class KIconCanvasPrivate; - KIconCanvasPrivate *d; -}; - - -/** - * Dialog for interactive selection of icons. Use the function - * getIcon() let the user select an icon. - * - * @short An icon selection dialog. - */ -class TDEIO_EXPORT KIconDialog: public KDialogBase -{ - Q_OBJECT - -public: - /** - * Constructs an icon selection dialog using the global iconloader. - */ - KIconDialog(TQWidget *parent=0L, const char *name=0L); - /** - * Constructs an icon selection dialog using a specific iconloader. - */ - KIconDialog(KIconLoader *loader, TQWidget *parent=0, - const char *name=0); - /** - * Destructs the dialog. - */ - ~KIconDialog(); - - /** - * Sets a strict icon size policy for allowed icons. When true, - * only icons of the specified group's size in getIcon() are shown. - * When false, icons not available at the desired group's size will - * also be selectable. - */ - void setStrictIconSize(bool b); - /** - * Returns true if a strict icon size policy is set. - */ - bool strictIconSize() const; - /** - * sets a custom icon directory - * @since 3.1 - */ - void setCustomLocation( const TQString& location ); - - /** - * Sets the size of the icons to be shown / selected. - * @see KIcon::StdSizes - * @see iconSize - */ - void setIconSize(int size); - - /** - * Returns the iconsize set via setIconSize() or 0, if the default - * iconsize will be used. - */ - int iconSize() const; - -#ifndef KDE_NO_COMPAT - /** - * @deprecated in KDE 3.0, use the static method getIcon instead. - */ - TQString selectIcon(KIcon::Group group=KIcon::Desktop, KIcon::Context - context=KIcon::Application, bool user=false); -#endif - - /** - * Allows you to set the same parameters as in the class method - * getIcon(). - */ - void setup( KIcon::Group group, - KIcon::Context context = KIcon::Application, - bool strictIconSize = false, int iconSize = 0, - bool user = false ); - - /** - * Allows you to set the same parameters as in the class method - * getIcon(), as well as two additional parameters to lock - * the choice between system and user dirs and to lock the custom user - * dir itself. - * - * @since 3.3 - */ - - void setup( KIcon::Group group, KIcon::Context context, - bool strictIconSize, int iconSize, bool user, bool lockUser, - bool lockCustomDir ); - - /** - * exec()utes this modal dialog and returns the name of the selected icon, - * or TQString::null if the dialog was aborted. - * @returns the name of the icon, suitable for loading with KIconLoader. - * @see getIcon - */ - TQString openDialog(); - - /** - * show()es this dialog and emits a newIcon(const TQString&) signal when - * successful. TQString::null will be emitted if the dialog was aborted. - */ - void showDialog(); - - /** - * Pops up the dialog an lets the user select an icon. - * - * @param group The icon group this icon is intended for. Providing the - * group shows the icons in the dialog with the same appearance as when - * used outside the dialog. - * @param context The initial icon context. Initially, the icons having - * this context are shown in the dialog. The user can change this. - * @param strictIconSize When true, only icons of the specified group's size - * are shown, otherwise icon not available in the desired group's size - * will also be selectable. - * @param iconSize the size of the icons -- the default of the icongroup - * if set to 0 - * @param user Begin with the "user icons" instead of "system icons". - * @param parent The parent widget of the dialog. - * @param caption The caption to use for the dialog. - * @return The name of the icon, suitable for loading with KIconLoader. - * @version New in 3.0 - */ - static TQString getIcon(KIcon::Group group=KIcon::Desktop, - KIcon::Context context=KIcon::Application, - bool strictIconSize=false, int iconSize = 0, - bool user=false, TQWidget *parent=0, - const TQString &caption=TQString::null); - -signals: - void newIconName(const TQString&); - -protected slots: - void slotOk(); - -private slots: - void slotButtonClicked(int); - void slotContext(int); - void slotStartLoading(int); - void slotProgress(int); - void slotFinished(); - void slotAcceptIcons(); -private: - void init(); - void showIcons(); - void setContext( KIcon::Context context ); - - int mGroupOrSize; - KIcon::Context mContext; - int mType; - - TQStringList mFileList; - TQComboBox *mpCombo; - TQPushButton *mpBrowseBut; - TQRadioButton *mpRb1, *mpRb2; - KProgress *mpProgress; - KIconLoader *mpLoader; - KIconCanvas *mpCanvas; - int mNumContext; - KIcon::Context mContextMap[ 12 ]; // must match KIcon::Context size, code has assert - -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KIconDialogPrivate; - KIconDialogPrivate *d; -}; - - -/** - * A pushbutton for choosing an icon. Pressing on the button will open a - * KIconDialog for the user to select an icon. The current icon will be - * displayed on the button. - * - * @see KIconDialog - * @short A push button that allows selection of an icon. - */ -class TDEIO_EXPORT KIconButton: public TQPushButton -{ - Q_OBJECT - TQ_PROPERTY( TQString icon READ icon WRITE setIcon RESET resetIcon ) - TQ_PROPERTY( int iconSize READ iconSize WRITE setIconSize) - TQ_PROPERTY( bool strictIconSize READ strictIconSize WRITE setStrictIconSize ) - -public: - /** - * Constructs a KIconButton using the global iconloader. - */ - KIconButton(TQWidget *parent=0L, const char *name=0L); - - /** - * Constructs a KIconButton using a specific KIconLoader. - */ - KIconButton(KIconLoader *loader, TQWidget *parent, const char *name=0L); - /** - * Destructs the button. - */ - ~KIconButton(); - - /** - * Sets a strict icon size policy for allowed icons. When true, - * only icons of the specified group's size in setIconType are allowed, - * and only icons of that size will be shown in the icon dialog. - */ - void setStrictIconSize(bool b); - /** - * Returns true if a strict icon size policy is set. - */ - bool strictIconSize() const; - - /** - * Sets the icon group and context. Use KIcon::NoGroup if you want to - * allow icons for any group in the given context. - */ - void setIconType(KIcon::Group group, KIcon::Context context, bool user=false); - - /** - * Sets the button's initial icon. - */ - void setIcon(const TQString& icon); - - /** - * Resets the icon (reverts to an empty button). - */ - void resetIcon(); - - /** - * Returns the name of the selected icon. - */ - TQString icon() const { return mIcon; } - - /** - * Sets the size of the icon to be shown / selected. - * @see KIcon::StdSizes - * @see iconSize - */ - void setIconSize( int size ); - - /** - * Returns the iconsize set via setIconSize() or 0, if the default - * iconsize will be used. - */ - int iconSize() const; - -signals: - /** - * Emitted when the icon has changed. - */ - void iconChanged(TQString icon); - /* KDE 4: Make it const TQString & */ - -private slots: - void slotChangeIcon(); - void newIconName(const TQString& name); - -private: - void init( KIconLoader *loader ); - - bool mbUser; - KIcon::Group mGroup; - KIcon::Context mContext; - - TQString mIcon; - KIconDialog *mpDialog; - KIconLoader *mpLoader; - class KIconButtonPrivate; - KIconButtonPrivate *d; -}; - - -#endif // __KIconDialog_h__ diff --git a/kio/kfile/kimagefilepreview.cpp b/kio/kfile/kimagefilepreview.cpp deleted file mode 100644 index 0cc0ef2a7..000000000 --- a/kio/kfile/kimagefilepreview.cpp +++ /dev/null @@ -1,187 +0,0 @@ -/* - * This file is part of the KDE project - * Copyright (C) 2001 Martin R. Jones <mjones@kde.org> - * 2001 Carsten Pfeiffer <pfeiffer@kde.org> - * - * You can Freely distribute this program under the GNU Library General Public - * License. See the file "COPYING" for the exact licensing terms. - */ - -#include <tqlayout.h> -#include <tqlabel.h> -#include <tqcombobox.h> -#include <tqcheckbox.h> -#include <tqwhatsthis.h> -#include <tqtimer.h> - -#include <kapplication.h> -#include <kconfig.h> -#include <kglobal.h> -#include <kiconloader.h> -#include <kpushbutton.h> -#include <kstandarddirs.h> -#include <kdebug.h> -#include <klocale.h> -#include <kfiledialog.h> -#include <kfileitem.h> -#include <kio/previewjob.h> - -#include "kimagefilepreview.h" -#include "config-kfile.h" - -/**** KImageFilePreview ****/ - -KImageFilePreview::KImageFilePreview( TQWidget *parent ) - : KPreviewWidgetBase( parent ), - m_job( 0L ) -{ - TDEConfig *config = TDEGlobal::config(); - TDEConfigGroupSaver cs( config, ConfigGroup ); - autoMode = config->readBoolEntry( "Automatic Preview", true ); - - TQVBoxLayout *vb = new TQVBoxLayout( this, 0, KDialog::spacingHint() ); - - imageLabel = new TQLabel( this ); - imageLabel->setFrameStyle( TQFrame::NoFrame ); - imageLabel->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter ); - imageLabel->setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Expanding) ); - vb->addWidget( imageLabel ); - - TQHBoxLayout *hb = new TQHBoxLayout( 0 ); - vb->addLayout( hb ); - - autoPreview = new TQCheckBox( i18n("&Automatic preview"), this ); - autoPreview->setChecked( autoMode ); - hb->addWidget( autoPreview ); - connect( autoPreview, TQT_SIGNAL(toggled(bool)), TQT_SLOT(toggleAuto(bool)) ); - - previewButton = new KPushButton( SmallIconSet("thumbnail"), i18n("&Preview"), this ); - hb->addWidget( previewButton ); - connect( previewButton, TQT_SIGNAL(clicked()), TQT_SLOT(showPreview()) ); - - timer = new TQTimer( this ); - connect( timer, TQT_SIGNAL(timeout()), TQT_SLOT(showPreview()) ); - - setSupportedMimeTypes( TDEIO::PreviewJob::supportedMimeTypes() ); -} - -KImageFilePreview::~KImageFilePreview() -{ - if ( m_job ) - m_job->kill(); - - TDEConfig *config = TDEGlobal::config(); - TDEConfigGroupSaver cs( config, ConfigGroup ); - config->writeEntry( "Automatic Preview", autoPreview->isChecked() ); -} - -void KImageFilePreview::showPreview() -{ - // Pass a copy since clearPreview() will clear currentURL - KURL url = currentURL; - showPreview( url, true ); -} - -// called via KPreviewWidgetBase interface -void KImageFilePreview::showPreview( const KURL& url ) -{ - showPreview( url, false ); -} - -void KImageFilePreview::showPreview( const KURL &url, bool force ) -{ - if ( !url.isValid() ) { - clearPreview(); - return; - } - - if ( url != currentURL || force ) - { - clearPreview(); - currentURL = url; - - if ( autoMode || force ) - { - int w = imageLabel->contentsRect().width() - 4; - int h = imageLabel->contentsRect().height() - 4; - - m_job = createJob( url, w, h ); - if ( force ) // explicitly requested previews shall always be generated! - m_job->setIgnoreMaximumSize( true ); - - connect( m_job, TQT_SIGNAL( result( TDEIO::Job * )), - this, TQT_SLOT( slotResult( TDEIO::Job * ))); - connect( m_job, TQT_SIGNAL( gotPreview( const KFileItem*, - const TQPixmap& )), - TQT_SLOT( gotPreview( const KFileItem*, const TQPixmap& ) )); - - connect( m_job, TQT_SIGNAL( failed( const KFileItem* )), - this, TQT_SLOT( slotFailed( const KFileItem* ) )); - } - } -} - -void KImageFilePreview::toggleAuto( bool a ) -{ - autoMode = a; - if ( autoMode ) - { - // Pass a copy since clearPreview() will clear currentURL - KURL url = currentURL; - showPreview( url, true ); - } -} - -void KImageFilePreview::resizeEvent( TQResizeEvent * ) -{ - timer->start( 100, true ); // forces a new preview -} - -TQSize KImageFilePreview::sizeHint() const -{ - return TQSize( 20, 200 ); // otherwise it ends up huge??? -} - -TDEIO::PreviewJob * KImageFilePreview::createJob( const KURL& url, int w, int h ) -{ - KURL::List urls; - urls.append( url ); - return TDEIO::filePreview( urls, w, h, 0, 0, true, false ); -} - -void KImageFilePreview::gotPreview( const KFileItem* item, const TQPixmap& pm ) -{ - if ( item->url() == currentURL ) // should always be the case - imageLabel->setPixmap( pm ); -} - -void KImageFilePreview::slotFailed( const KFileItem* item ) -{ - if ( item->isDir() ) - imageLabel->clear(); - else if ( item->url() == currentURL ) // should always be the case - imageLabel->setPixmap( SmallIcon( "file_broken", KIcon::SizeLarge, - KIcon::DisabledState )); -} - -void KImageFilePreview::slotResult( TDEIO::Job *job ) -{ - if ( job == m_job ) - m_job = 0L; -} - -void KImageFilePreview::clearPreview() -{ - if ( m_job ) { - m_job->kill(); - m_job = 0L; - } - - imageLabel->clear(); - currentURL = KURL(); -} - -void KImageFilePreview::virtual_hook( int id, void* data ) -{ KPreviewWidgetBase::virtual_hook( id, data ); } - -#include "kimagefilepreview.moc" diff --git a/kio/kfile/kimagefilepreview.h b/kio/kfile/kimagefilepreview.h deleted file mode 100644 index 0604e08f0..000000000 --- a/kio/kfile/kimagefilepreview.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * - * This file is part of the KDE project. - * Copyright (C) 2001 Martin R. Jones <mjones@kde.org> - * 2001 Carsten Pfeiffer <pfeiffer@kde.org> - * - * You can Freely distribute this program under the GNU Library General Public - * License. See the file "COPYING" for the exact licensing terms. - */ - -#ifndef KIMAGEFILEPREVIEW_H -#define KIMAGEFILEPREVIEW_H - -#include <tqpixmap.h> - -#include <kurl.h> -#include <kpreviewwidgetbase.h> - -class TQCheckBox; -class TQPushButton; -class TQLabel; -class TQTimer; - -class KFileDialog; -class KFileItem; -namespace TDEIO { class Job; class PreviewJob; } - -/** - * Image preview widget for the file dialog. - */ -class TDEIO_EXPORT KImageFilePreview : public KPreviewWidgetBase -{ - Q_OBJECT - - public: - KImageFilePreview(TQWidget *parent); - ~KImageFilePreview(); - - virtual TQSize sizeHint() const; - - public slots: - virtual void showPreview(const KURL &url); - virtual void clearPreview(); - - protected slots: - void showPreview(); - void showPreview( const KURL& url, bool force ); - - void toggleAuto(bool); - virtual void gotPreview( const KFileItem*, const TQPixmap& ); - - protected: - virtual void resizeEvent(TQResizeEvent *e); - virtual TDEIO::PreviewJob * createJob( const KURL& url, - int w, int h ); - - private slots: - void slotResult( TDEIO::Job * ); - virtual void slotFailed( const KFileItem* ); - - private: - bool autoMode; - KURL currentURL; - TQTimer *timer; - TQLabel *imageLabel; - TQLabel *infoLabel; - TQCheckBox *autoPreview; - TQPushButton *previewButton; - TDEIO::PreviewJob *m_job; - protected: - virtual void virtual_hook( int id, void* data ); - private: - class KImageFilePreviewPrivate; - KImageFilePreviewPrivate *d; -}; - -#endif // KIMAGEFILEPREVIEW_H diff --git a/kio/kfile/kmetaprops.cpp b/kio/kfile/kmetaprops.cpp deleted file mode 100644 index c349693e5..000000000 --- a/kio/kfile/kmetaprops.cpp +++ /dev/null @@ -1,268 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2001,2002 Rolf Magnus <ramagnus@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - - $Id$ - */ - -#include "kmetaprops.h" - -#include <kdebug.h> -#include <kfilemetainfowidget.h> -#include <kfilemetainfo.h> -#include <kglobal.h> -#include <kglobalsettings.h> -#include <klocale.h> -#include <kprotocolinfo.h> - -#include <tqvalidator.h> -#include <tqlayout.h> -#include <tqlabel.h> -#include <tqfileinfo.h> -#include <tqdatetime.h> -#include <tqstylesheet.h> -#include <tqvgroupbox.h> - -#undef Bool - -class MetaPropsScrollView : public TQScrollView -{ -public: - MetaPropsScrollView(TQWidget* parent = 0, const char* name = 0) - : TQScrollView(parent, name) - { - setFrameStyle(TQFrame::NoFrame); - m_frame = new TQFrame(viewport(), "MetaPropsScrollView::m_frame"); - m_frame->setFrameStyle(TQFrame::NoFrame); - addChild(m_frame, 0, 0); - }; - - TQFrame* frame() {return m_frame;}; - -protected: - virtual void viewportResizeEvent(TQResizeEvent* ev) - { - TQScrollView::viewportResizeEvent(ev); - m_frame->resize( kMax(m_frame->sizeHint().width(), ev->size().width()), - kMax(m_frame->sizeHint().height(), ev->size().height())); - }; - -private: - TQFrame* m_frame; -}; - -class KFileMetaPropsPlugin::KFileMetaPropsPluginPrivate -{ -public: - KFileMetaPropsPluginPrivate() {} - ~KFileMetaPropsPluginPrivate() {} - - TQFrame* m_frame; - TQGridLayout* m_framelayout; - KFileMetaInfo m_info; -// TQPushButton* m_add; - TQPtrList<KFileMetaInfoWidget> m_editWidgets; -}; - -KFileMetaPropsPlugin::KFileMetaPropsPlugin(KPropertiesDialog* props) - : KPropsDlgPlugin(props) -{ - d = new KFileMetaPropsPluginPrivate; - - KFileItem * fileitem = properties->item(); - kdDebug(250) << "KFileMetaPropsPlugin constructor" << endl; - - d->m_info = fileitem->metaInfo(); - if (!d->m_info.isValid()) - { - d->m_info = KFileMetaInfo(properties->kurl().path(-1)); - fileitem->setMetaInfo(d->m_info); - } - - if ( properties->items().count() > 1 ) - { - // not yet supported - // we should allow setting values for a list of files. Itt makes sense - // in some cases, like the album of a list of mp3s - return; - } - - createLayout(); - - setDirty(true); -} - -void KFileMetaPropsPlugin::createLayout() -{ - TQFileInfo file_info(properties->item()->url().path()); - - kdDebug(250) << "KFileMetaPropsPlugin::createLayout" << endl; - - // is there any valid and non-empty info at all? - if ( !d->m_info.isValid() || (d->m_info.preferredKeys()).isEmpty() ) - return; - - // now get a list of groups - KFileMetaInfoProvider* prov = KFileMetaInfoProvider::self(); - TQStringList groupList = d->m_info.preferredGroups(); - - const KFileMimeTypeInfo* mtinfo = prov->mimeTypeInfo(d->m_info.mimeType()); - if (!mtinfo) - { - kdDebug(7034) << "no mimetype info there\n"; - return; - } - - // let the dialog create the page frame - TQFrame* topframe = properties->addPage(i18n("&Meta Info")); - topframe->setFrameStyle(TQFrame::NoFrame); - TQVBoxLayout* tmp = new TQVBoxLayout(topframe); - - // create a scroll view in the page - MetaPropsScrollView* view = new MetaPropsScrollView(topframe); - - tmp->addWidget(view); - - d->m_frame = view->frame(); - - TQVBoxLayout *toplayout = new TQVBoxLayout(d->m_frame); - toplayout->setSpacing(KDialog::spacingHint()); - - for (TQStringList::Iterator git=groupList.begin(); - git!=groupList.end(); ++git) - { - kdDebug(7033) << *git << endl; - - TQStringList itemList = d->m_info.group(*git).preferredKeys(); - if (itemList.isEmpty()) - continue; - - TQGroupBox *groupBox = new TQGroupBox(2, Qt::Horizontal, - TQStyleSheet::escape(mtinfo->groupInfo(*git)->translatedName()), - d->m_frame); - - toplayout->addWidget(groupBox); - - TQValueList<KFileMetaInfoItem> readItems; - TQValueList<KFileMetaInfoItem> editItems; - - for (TQStringList::Iterator iit = itemList.begin(); - iit!=itemList.end(); ++iit) - { - KFileMetaInfoItem item = d->m_info[*git][*iit]; - if ( !item.isValid() ) continue; - - bool editable = file_info.isWritable() && item.isEditable(); - - if (editable) - editItems.append( item ); - else - readItems.append( item ); - } - - KFileMetaInfoWidget* w = 0L; - // then first add the editable items to the layout - for (TQValueList<KFileMetaInfoItem>::Iterator iit= editItems.begin(); - iit!=editItems.end(); ++iit) - { - TQLabel* l = new TQLabel((*iit).translatedKey() + ":", groupBox); - l->setAlignment( AlignAuto | AlignTop | ExpandTabs ); - TQValidator* val = mtinfo->createValidator(*git, (*iit).key()); - if (!val) kdDebug(7033) << "didn't get a validator for " << *git << "/" << (*iit).key() << endl; - w = new KFileMetaInfoWidget(*iit, val, groupBox); - d->m_editWidgets.append( w ); - connect(w, TQT_SIGNAL(valueChanged(const TQVariant&)), this, TQT_SIGNAL(changed())); - } - - // and then the read only items - for (TQValueList<KFileMetaInfoItem>::Iterator iit= readItems.begin(); - iit!=readItems.end(); ++iit) - { - TQLabel* l = new TQLabel((*iit).translatedKey() + ":", groupBox); - l->setAlignment( AlignAuto | AlignTop | ExpandTabs ); - (new KFileMetaInfoWidget(*iit, KFileMetaInfoWidget::ReadOnly, 0L, groupBox)); - } - } - - toplayout->addStretch(1); - - // the add key (disabled until fully implemented) -/* d->m_add = new TQPushButton(i18n("&Add"), topframe); - d->m_add->setSizePolicy(TQSizePolicy(TQSizePolicy::Fixed, - TQSizePolicy::Fixed)); - connect(d->m_add, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotAdd())); - tmp->addWidget(d->m_add); - - // if nothing can be added, deactivate it - if ( !d->m_info.supportsVariableKeys() ) - { - // if supportedKeys() does contain anything not in preferredKeys, - // we have something addable - - TQStringList sk = d->m_info.supportedKeys(); - d->m_add->setEnabled(false); - for (TQStringList::Iterator it = sk.begin(); it!=sk.end(); ++it) - { - if ( l.find(*it)==l.end() ) - { - d->m_add->setEnabled(true); - kdDebug(250) << "**first addable key is " << (*it).latin1() << "**" <<endl; - break; - } - kdDebug(250) << "**already existing key is " << (*it).latin1() << "**" <<endl; - } - } */ -} - -/*void KFileMetaPropsPlugin::slotAdd() -{ - // add a lineedit for the name - - - - // insert the item in the list - -}*/ - -KFileMetaPropsPlugin::~KFileMetaPropsPlugin() -{ - delete d; -} - -bool KFileMetaPropsPlugin::supports( KFileItemList _items ) -{ -#ifdef _GNUC -#warning TODO: Add support for more than one item -#endif - if (KExecPropsPlugin::supports(_items) || KURLPropsPlugin::supports(_items)) - return false; // Having both is redundant. - - bool metaDataEnabled = TDEGlobalSettings::showFilePreview(_items.first()->url()); - return _items.count() == 1 && metaDataEnabled; -} - -void KFileMetaPropsPlugin::applyChanges() -{ - kdDebug(250) << "applying changes" << endl; - // insert the fields that changed into the info object - - TQPtrListIterator<KFileMetaInfoWidget> it( d->m_editWidgets ); - KFileMetaInfoWidget* w; - for (; (w = it.current()); ++it) w->apply(); - d->m_info.applyChanges(properties->kurl().path()); -} - -#include "kmetaprops.moc" diff --git a/kio/kfile/kmetaprops.h b/kio/kfile/kmetaprops.h deleted file mode 100644 index c842499dd..000000000 --- a/kio/kfile/kmetaprops.h +++ /dev/null @@ -1,69 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2001,2002 Rolf Magnus <ramagnus@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - - */ - -#ifndef __KMETAPROPS_H__ -#define __KMETAPROPS_H__ -#include <kpropertiesdialog.h> - - -class KFileMetaInfoItem; - -/*! - * 'MetaProps plugin - * In this plugin you can modify meta information like id3 tags of mp3 files - */ -class TDEIO_EXPORT KFileMetaPropsPlugin : public KPropsDlgPlugin -{ - Q_OBJECT -public: - /** - * Constructor - */ - KFileMetaPropsPlugin( KPropertiesDialog *_props ); - virtual ~KFileMetaPropsPlugin(); - - virtual void applyChanges(); - - /** - * Tests whether the file specified by _items has a 'MetaInfo' plugin. - */ - static bool supports( KFileItemList _items ); - -private: - void createLayout(); - - TQWidget* makeBoolWidget(const KFileMetaInfoItem& item, TQWidget* parent); - TQWidget* makeIntWidget(const KFileMetaInfoItem& item, TQWidget* parent, - TQString& valClass); - TQWidget* makeStringWidget(const KFileMetaInfoItem& item, TQWidget* parent, - TQString& valClass); - TQWidget* makeDateTimeWidget(const KFileMetaInfoItem& item, TQWidget* parent, - TQString& valClass); - -private slots: - // Code disabled until the "Add" button is implemented -// void slotAdd(); - -private: - - class KFileMetaPropsPluginPrivate; - KFileMetaPropsPluginPrivate *d; -}; - -#endif diff --git a/kio/kfile/knotifydialog.cpp b/kio/kfile/knotifydialog.cpp deleted file mode 100644 index 088f9be54..000000000 --- a/kio/kfile/knotifydialog.cpp +++ /dev/null @@ -1,1191 +0,0 @@ -/* - Copyright (C) 2000,2002 Carsten Pfeiffer <pfeiffer@kde.org> - Copyright (C) 2002 Neil Stevens <neil@qualityassistant.com> - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation; - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library, If not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*/ - -#include <dcopclient.h> - -#include <kaboutdata.h> -#include <kapplication.h> -#include <kaudioplayer.h> -#include <kcombobox.h> -#include <kconfig.h> -#include <kcursor.h> -#include <kdebug.h> -#include <kfiledialog.h> -#include <kiconloader.h> -#include <kicontheme.h> -#include <klineedit.h> -#include <klocale.h> -#include <kmessagebox.h> -#include <knotifyclient.h> -#include <knotifydialog.h> -#include <kstandarddirs.h> -#include <kurlrequester.h> -#include <kio/netaccess.h> - -#include <tqcheckbox.h> -#include <tqgroupbox.h> -#include <tqheader.h> -#include <tqlabel.h> -#include <tqlistview.h> -#include <tqlayout.h> -#include <tqptrlist.h> -#include <tqpushbutton.h> -#include <tqstring.h> -#include <tqtooltip.h> -#include <tqtimer.h> -#include <tqvbox.h> -#include <tqwhatsthis.h> - -using namespace KNotify; - -enum -{ - COL_EXECUTE = 0, - COL_STDERR = 1, - COL_MESSAGE = 2, - COL_LOGFILE = 3, - COL_SOUND = 4, - COL_TASKBAR = 5, - COL_EVENT = 6 -}; - -// -// I don't feel like subclassing KComboBox and find ways to insert that into -// the .ui file... -// -namespace KNotify -{ - class SelectionCombo - { - public: - // - // Mind the order in fill() and type() - // - static void fill( KComboBox *combo ) - { - combo->insertItem( i18n("Sounds") ); - combo->insertItem( i18n("Logging") ); - combo->insertItem( i18n("Program Execution") ); - combo->insertItem( i18n("Message Windows") ); - combo->insertItem( i18n("Passive Windows") ); - combo->insertItem( i18n("Standard Error Output") ); - combo->insertItem( i18n("Taskbar") ); - } - - static int type( KComboBox *combo ) - { - switch( combo->currentItem() ) - { - case 0: - return KNotifyClient::Sound; - case 1: - return KNotifyClient::Logfile; - case 2: - return KNotifyClient::Execute; - case 3: - return KNotifyClient::Messagebox; - case 4: - return KNotifyClient::PassivePopup; - case 5: - return KNotifyClient::Stderr; - case 6: - return KNotifyClient::Taskbar; - } - - return KNotifyClient::None; - } - }; - - // Needed for displaying tooltips in the listview's QHeader - class KNotifyToolTip : public TQToolTip - { - public: - KNotifyToolTip( TQHeader *header ) - : TQToolTip( header ) - { - m_tips[COL_EXECUTE] = i18n("Execute a program"); - m_tips[COL_STDERR] = i18n("Print to Standard error output"); - m_tips[COL_MESSAGE] = i18n("Display a messagebox"); - m_tips[COL_LOGFILE] = i18n("Log to a file"); - m_tips[COL_SOUND] = i18n("Play a sound"); - m_tips[COL_TASKBAR] = i18n("Flash the taskbar entry"); - } - virtual ~KNotifyToolTip() {} - - protected: - virtual void maybeTip ( const TQPoint& p ) - { - TQHeader *header = static_cast<TQHeader*>( parentWidget() ); - int section = 0; - - if ( header->orientation() == Qt::Horizontal ) - section= header->sectionAt( p.x() ); - else - section= header->sectionAt( p.y() ); - - if ( ( section < 0 ) || ( static_cast<uint>( section ) >= (sizeof(m_tips) / sizeof(TQString)) ) ) - return; - - tip( header->sectionRect( section ), m_tips[section] ); - } - - private: - TQString m_tips[6]; - }; - -} - - -int KNotifyDialog::configure( TQWidget *parent, const char *name, - const TDEAboutData *aboutData ) -{ - KNotifyDialog dialog( parent, name, true, aboutData ); - return dialog.exec(); -} - -KNotifyDialog::KNotifyDialog( TQWidget *parent, const char *name, bool modal, - const TDEAboutData *aboutData ) - : KDialogBase(parent, name, modal, i18n("Notification Settings"), - Ok | Apply | Cancel | Default, Ok, true ) -{ - TQVBox *box = makeVBoxMainWidget(); - - m_notifyWidget = new KNotifyWidget( box, "knotify widget" ); - - if ( aboutData ) - addApplicationEvents( aboutData->appName() ); - - connect( this, TQT_SIGNAL( okClicked() ), m_notifyWidget, TQT_SLOT( save() )); - connect( this, TQT_SIGNAL( applyClicked() ), m_notifyWidget, TQT_SLOT( save() )); -} - -KNotifyDialog::~KNotifyDialog() -{ -} - -void KNotifyDialog::addApplicationEvents( const char *appName ) -{ - addApplicationEvents( TQString::fromUtf8( appName ) + - TQString::fromLatin1( "/eventsrc" ) ); -} - -void KNotifyDialog::addApplicationEvents( const TQString& path ) -{ - Application *app = m_notifyWidget->addApplicationEvents( path ); - if ( app ) - { - m_notifyWidget->addVisibleApp( app ); - m_notifyWidget->sort(); - } -} - -void KNotifyDialog::clearApplicationEvents() -{ - m_notifyWidget->clear(); -} - -void KNotifyDialog::slotDefault() -{ - m_notifyWidget->resetDefaults( true ); // ask user -} - - -////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////// - - -class KNotifyWidget::Private -{ -public: - TQPixmap pixmaps[6]; - KNotifyToolTip *toolTip; -}; - -// simple access to all knotify-handled applications -KNotifyWidget::KNotifyWidget( TQWidget *parent, const char *name, - bool handleAllApps ) - : KNotifyWidgetBase( parent, name ? name : "KNotifyWidget" ) -{ - d = new Private; - - m_allApps.setAutoDelete( true ); - - if ( !handleAllApps ) - { - m_affectAllApps->hide(); - m_playerButton->hide(); - } - - SelectionCombo::fill( m_comboEnable ); - SelectionCombo::fill( m_comboDisable ); - - m_listview->setFullWidth( true ); - m_listview->setAllColumnsShowFocus( true ); - - TQPixmap pexec = SmallIcon("exec"); - TQPixmap pstderr = SmallIcon("terminal"); - TQPixmap pmessage = SmallIcon("info"); - TQPixmap plogfile = SmallIcon("log"); - TQPixmap psound = SmallIcon("sound"); - TQPixmap ptaskbar = SmallIcon("kicker"); - - d->pixmaps[COL_EXECUTE] = pexec; - d->pixmaps[COL_STDERR] = pstderr; - d->pixmaps[COL_MESSAGE] = pmessage; - d->pixmaps[COL_LOGFILE] = plogfile; - d->pixmaps[COL_SOUND] = psound; - d->pixmaps[COL_TASKBAR] = ptaskbar; - - int w = KIcon::SizeSmall + 6; - - TQHeader *header = m_listview->header(); - header->setLabel( COL_EXECUTE, pexec, TQString::null, w ); - header->setLabel( COL_STDERR, pstderr, TQString::null, w ); - header->setLabel( COL_MESSAGE, pmessage, TQString::null, w ); - header->setLabel( COL_LOGFILE, plogfile, TQString::null, w ); - header->setLabel( COL_SOUND, psound, TQString::null, w ); - header->setLabel( COL_TASKBAR, ptaskbar, TQString::null, w ); - - d->toolTip = new KNotifyToolTip( header ); - - m_playButton->setIconSet( SmallIconSet( "player_play" ) ); - connect( m_playButton, TQT_SIGNAL( clicked() ), TQT_SLOT( playSound() )); - - connect( m_listview, TQT_SIGNAL( currentChanged( TQListViewItem * ) ), - TQT_SLOT( slotEventChanged( TQListViewItem * ) )); - connect( m_listview, TQT_SIGNAL(clicked( TQListViewItem *, const TQPoint&, int)), - TQT_SLOT( slotItemClicked( TQListViewItem *, const TQPoint&, int ))); - - connect( m_playSound, TQT_SIGNAL( toggled( bool )), - TQT_SLOT( soundToggled( bool )) ); - connect( m_logToFile, TQT_SIGNAL( toggled( bool )), - TQT_SLOT( loggingToggled( bool )) ); - connect( m_execute, TQT_SIGNAL( toggled( bool )), - TQT_SLOT( executeToggled( bool )) ); - connect( m_messageBox, TQT_SIGNAL( toggled( bool )), - TQT_SLOT( messageBoxChanged() ) ); - connect( m_passivePopup, TQT_SIGNAL( toggled( bool )), - TQT_SLOT( messageBoxChanged() ) ); - connect( m_stderr, TQT_SIGNAL( toggled( bool )), - TQT_SLOT( stderrToggled( bool ) ) ); - connect( m_taskbar, TQT_SIGNAL( toggled( bool )), - TQT_SLOT( taskbarToggled( bool ) ) ); - - connect( m_soundPath, TQT_SIGNAL( textChanged( const TQString& )), - TQT_SLOT( soundFileChanged( const TQString& ))); - connect( m_logfilePath, TQT_SIGNAL( textChanged( const TQString& )), - TQT_SLOT( logfileChanged( const TQString& ) )); - connect( m_executePath, TQT_SIGNAL( textChanged( const TQString& )), - TQT_SLOT( commandlineChanged( const TQString& ) )); - - connect( m_soundPath, TQT_SIGNAL( openFileDialog( KURLRequester * )), - TQT_SLOT( openSoundDialog( KURLRequester * ))); - connect( m_logfilePath, TQT_SIGNAL( openFileDialog( KURLRequester * )), - TQT_SLOT( openLogDialog( KURLRequester * ))); - connect( m_executePath, TQT_SIGNAL( openFileDialog( KURLRequester * )), - TQT_SLOT( openExecDialog( KURLRequester * ))); - - connect( m_extension, TQT_SIGNAL( clicked() ), - TQT_SLOT( toggleAdvanced()) ); - - connect( m_buttonEnable, TQT_SIGNAL( clicked() ), TQT_SLOT( enableAll() )); - connect( m_buttonDisable, TQT_SIGNAL( clicked() ), TQT_SLOT( enableAll() )); - - TQString whatsThis = i18n("<qt>You may use the following macros<br>" - "in the commandline:<br>" - "<b>%e</b>: for the event name,<br>" - "<b>%a</b>: for the name of the application that sent the event,<br>" - "<b>%s</b>: for the notification message,<br>" - "<b>%w</b>: for the numeric window ID where the event originated,<br>" - "<b>%i</b>: for the numeric event ID."); - TQWhatsThis::add( m_execute, whatsThis ); - TQWhatsThis::add( m_executePath, whatsThis ); - - showAdvanced( false ); - - slotEventChanged( 0L ); // disable widgets by default -} - -KNotifyWidget::~KNotifyWidget() -{ - delete d->toolTip; - delete d; -} - -void KNotifyWidget::toggleAdvanced() -{ - showAdvanced( m_logToFile->isHidden() ); -} - -void KNotifyWidget::showAdvanced( bool show ) -{ - if ( show ) - { - m_extension->setText( i18n("Advanced <<") ); - TQToolTip::add( m_extension, i18n("Hide advanced options") ); - - m_logToFile->show(); - m_logfilePath->show(); - m_execute->show(); - m_executePath->show(); - m_messageBox->show(); - m_passivePopup->show(); - m_stderr->show(); - m_taskbar->show(); - - m_passivePopup->setEnabled( m_messageBox->isChecked() ); - m_actionsBoxLayout->setSpacing( KDialog::spacingHint() ); - } - else - { - m_extension->setText( i18n("Advanced >>") ); - TQToolTip::add( m_extension, i18n("Show advanced options") ); - - m_logToFile->hide(); - m_logfilePath->hide(); - m_execute->hide(); - m_executePath->hide(); - m_messageBox->hide(); - m_passivePopup->hide(); - m_stderr->hide(); - m_taskbar->hide(); - - m_actionsBoxLayout->setSpacing( 0 ); - } -} - -Application * KNotifyWidget::addApplicationEvents( const TQString& path ) -{ - kdDebug() << "**** knotify: adding path: " << path << endl; - TQString relativePath = path; - - if ( path.at(0) == '/' && KStandardDirs::exists( path ) ) - relativePath = makeRelative( path ); - - if ( !relativePath.isEmpty() ) - { - Application *app = new Application( relativePath ); - m_allApps.append( app ); - return app; - } - - return 0L; -} - -void KNotifyWidget::clear() -{ - clearVisible(); - m_allApps.clear(); -} - -void KNotifyWidget::clearVisible() -{ - m_visibleApps.clear(); - m_listview->clear(); - slotEventChanged( 0L ); // disable widgets -} - -void KNotifyWidget::showEvent( TQShowEvent *e ) -{ - selectItem( m_listview->firstChild() ); - KNotifyWidgetBase::showEvent( e ); -} - -void KNotifyWidget::slotEventChanged( TQListViewItem *item ) -{ - bool on = (item != 0L); - - m_actionsBox->setEnabled( on ); - m_controlsBox->setEnabled( on ); - - if ( !on ) - return; - - ListViewItem *lit = static_cast<ListViewItem*>( item ); - updateWidgets( lit ); -} - -void KNotifyWidget::updateWidgets( ListViewItem *item ) -{ - bool enable; - bool checked; - - blockSignals( true ); // don't emit changed() signals - - const Event& event = item->event(); - - // sound settings - m_playButton->setEnabled( !event.soundfile.isEmpty() ); - m_soundPath->setURL( event.soundfile ); - enable = (event.dontShow & KNotifyClient::Sound) == 0; - checked = enable && !event.soundfile.isEmpty() && - (event.presentation & KNotifyClient::Sound); - m_playSound->setEnabled( enable ); - m_playSound->setChecked( checked ); - m_soundPath->setEnabled( checked ); - - - // logfile settings - m_logfilePath->setURL( event.logfile ); - enable = (event.dontShow & KNotifyClient::Logfile) == 0; - checked = enable && !event.logfile.isEmpty() && - (event.presentation & KNotifyClient::Logfile); - m_logToFile->setEnabled( enable ); - m_logToFile->setChecked( checked ); - m_logfilePath->setEnabled( checked ); - - - // execute program settings - m_executePath->setURL( event.commandline ); - enable = (event.dontShow & KNotifyClient::Execute) == 0; - checked = enable && !event.commandline.isEmpty() && - (event.presentation & KNotifyClient::Execute); - m_execute->setEnabled( enable ); - m_execute->setChecked( checked ); - m_executePath->setEnabled( checked ); - - - // other settings - m_messageBox->setChecked(event.presentation & (KNotifyClient::Messagebox | KNotifyClient::PassivePopup)); - enable = (event.dontShow & KNotifyClient::Messagebox) == 0; - m_messageBox->setEnabled( enable ); - - m_passivePopup->setChecked(event.presentation & KNotifyClient::PassivePopup); - enable = (event.dontShow & KNotifyClient::PassivePopup) == 0; - m_passivePopup->setEnabled( enable ); - - m_stderr->setChecked( event.presentation & KNotifyClient::Stderr ); - enable = (event.dontShow & KNotifyClient::Stderr) == 0; - m_stderr->setEnabled( enable ); - - m_taskbar->setChecked(event.presentation & KNotifyClient::Taskbar); - enable = (event.dontShow & KNotifyClient::Taskbar) == 0; - m_taskbar->setEnabled( enable ); - - updatePixmaps( item ); - - blockSignals( false ); -} - -void KNotifyWidget::updatePixmaps( ListViewItem *item ) -{ - TQPixmap emptyPix; - Event &event = item->event(); - - bool doIt = (event.presentation & KNotifyClient::Execute) && - !event.commandline.isEmpty(); - item->setPixmap( COL_EXECUTE, doIt ? d->pixmaps[COL_EXECUTE] : emptyPix ); - - doIt = (event.presentation & KNotifyClient::Sound) && - !event.soundfile.isEmpty(); - item->setPixmap( COL_SOUND, doIt ? d->pixmaps[COL_SOUND] : emptyPix ); - - doIt = (event.presentation & KNotifyClient::Logfile) && - !event.logfile.isEmpty(); - item->setPixmap( COL_LOGFILE, doIt ? d->pixmaps[COL_LOGFILE] : emptyPix ); - - item->setPixmap( COL_MESSAGE, - (event.presentation & - (KNotifyClient::Messagebox | KNotifyClient::PassivePopup)) ? - d->pixmaps[COL_MESSAGE] : emptyPix ); - - item->setPixmap( COL_STDERR, - (event.presentation & KNotifyClient::Stderr) ? - d->pixmaps[COL_STDERR] : emptyPix ); - item->setPixmap( COL_TASKBAR, - (event.presentation & KNotifyClient::Taskbar) ? - d->pixmaps[COL_TASKBAR] : emptyPix ); -} - -void KNotifyWidget::addVisibleApp( Application *app ) -{ - if ( !app || (m_visibleApps.findRef( app ) != -1) ) - return; - - m_visibleApps.append( app ); - addToView( app->eventList() ); - - TQListViewItem *item = m_listview->selectedItem(); - if ( !item ) - item = m_listview->firstChild(); - - selectItem( item ); -} - -void KNotifyWidget::addToView( const EventList& events ) -{ - ListViewItem *item = 0L; - - EventListIterator it( events ); - - for ( ; it.current(); ++it ) - { - Event *event = it.current(); - item = new ListViewItem( m_listview, event ); - - if ( (event->presentation & KNotifyClient::Execute) && - !event->commandline.isEmpty() ) - item->setPixmap( COL_EXECUTE, d->pixmaps[COL_EXECUTE] ); - if ( (event->presentation & KNotifyClient::Sound) && - !event->soundfile.isEmpty() ) - item->setPixmap( COL_SOUND, d->pixmaps[COL_SOUND] ); - if ( (event->presentation & KNotifyClient::Logfile) && - !event->logfile.isEmpty() ) - item->setPixmap( COL_LOGFILE, d->pixmaps[COL_LOGFILE] ); - if ( event->presentation & (KNotifyClient::Messagebox|KNotifyClient::PassivePopup) ) - item->setPixmap( COL_MESSAGE, d->pixmaps[COL_MESSAGE] ); - if ( event->presentation & KNotifyClient::Stderr ) - item->setPixmap( COL_STDERR, d->pixmaps[COL_STDERR] ); - if ( event->presentation & KNotifyClient::Taskbar ) - item->setPixmap( COL_TASKBAR, d->pixmaps[COL_TASKBAR] ); - } -} - -void KNotifyWidget::widgetChanged( TQListViewItem *item, - int what, bool on, TQWidget *buddy ) -{ - if ( signalsBlocked() ) - return; - - if ( buddy ) - buddy->setEnabled( on ); - - Event &e = static_cast<ListViewItem*>( item )->event(); - if ( on ) - { - e.presentation |= what; - if ( buddy ) - buddy->setFocus(); - } - else - e.presentation &= ~what; - - emit changed( true ); -} - -void KNotifyWidget::soundToggled( bool on ) -{ - TQListViewItem *item = m_listview->currentItem(); - if ( !item ) - return; - bool doIcon = on && !m_soundPath->url().isEmpty(); - item->setPixmap( COL_SOUND, doIcon ? d->pixmaps[COL_SOUND] : TQPixmap() ); - widgetChanged( item, KNotifyClient::Sound, on, m_soundPath ); -} - -void KNotifyWidget::loggingToggled( bool on ) -{ - TQListViewItem *item = m_listview->currentItem(); - if ( !item ) - return; - bool doIcon = on && !m_logfilePath->url().isEmpty(); - item->setPixmap(COL_LOGFILE, doIcon ? d->pixmaps[COL_LOGFILE] : TQPixmap()); - widgetChanged( item, KNotifyClient::Logfile, on, m_logfilePath ); -} - -void KNotifyWidget::executeToggled( bool on ) -{ - TQListViewItem *item = m_listview->currentItem(); - if ( !item ) - return; - bool doIcon = on && !m_executePath->url().isEmpty(); - item->setPixmap(COL_EXECUTE, doIcon ? d->pixmaps[COL_EXECUTE] : TQPixmap()); - widgetChanged( item, KNotifyClient::Execute, on, m_executePath ); -} - -void KNotifyWidget::messageBoxChanged() -{ - if ( signalsBlocked() ) - return; - - m_passivePopup->setEnabled( m_messageBox->isChecked() ); - - TQListViewItem *item = m_listview->currentItem(); - if ( !item ) - return; - - bool on = m_passivePopup->isEnabled(); - item->setPixmap( COL_MESSAGE, on ? d->pixmaps[COL_MESSAGE] : TQPixmap() ); - - Event &e = static_cast<ListViewItem*>( item )->event(); - - if ( m_messageBox->isChecked() ) { - if ( m_passivePopup->isChecked() ) { - e.presentation |= KNotifyClient::PassivePopup; - e.presentation &= ~KNotifyClient::Messagebox; - } - else { - e.presentation &= ~KNotifyClient::PassivePopup; - e.presentation |= KNotifyClient::Messagebox; - } - } - else { - e.presentation &= ~KNotifyClient::Messagebox; - e.presentation &= ~KNotifyClient::PassivePopup; - } - - emit changed( true ); -} - -void KNotifyWidget::stderrToggled( bool on ) -{ - TQListViewItem *item = m_listview->currentItem(); - if ( !item ) - return; - item->setPixmap( COL_STDERR, on ? d->pixmaps[COL_STDERR] : TQPixmap() ); - widgetChanged( item, KNotifyClient::Stderr, on ); -} - -void KNotifyWidget::taskbarToggled( bool on ) -{ - TQListViewItem *item = m_listview->currentItem(); - if ( !item ) - return; - item->setPixmap( COL_TASKBAR, on ? d->pixmaps[COL_TASKBAR] : TQPixmap() ); - widgetChanged( item, KNotifyClient::Taskbar, on ); -} - -void KNotifyWidget::soundFileChanged( const TQString& text ) -{ - if ( signalsBlocked() ) - return; - - TQListViewItem *item = m_listview->currentItem(); - if ( !item ) - return; - - m_playButton->setEnabled( !text.isEmpty() ); - - currentEvent()->soundfile = text; - bool ok = !text.isEmpty() && m_playSound->isChecked(); - item->setPixmap( COL_SOUND, ok ? d->pixmaps[COL_SOUND] : TQPixmap() ); - - emit changed( true ); -} - -void KNotifyWidget::logfileChanged( const TQString& text ) -{ - if ( signalsBlocked() ) - return; - - TQListViewItem *item = m_listview->currentItem(); - if ( !item ) - return; - - currentEvent()->logfile = text; - bool ok = !text.isEmpty() && m_logToFile->isChecked(); - item->setPixmap( COL_LOGFILE, ok ? d->pixmaps[COL_LOGFILE] : TQPixmap() ); - - emit changed( true ); -} - -void KNotifyWidget::commandlineChanged( const TQString& text ) -{ - if ( signalsBlocked() ) - return; - - TQListViewItem *item = m_listview->currentItem(); - if ( !item ) - return; - - currentEvent()->commandline = text; - bool ok = !text.isEmpty() && m_execute->isChecked(); - item->setPixmap( COL_EXECUTE, ok ? d->pixmaps[COL_EXECUTE] : TQPixmap() ); - - emit changed( true ); -} - -void KNotifyWidget::slotItemClicked( TQListViewItem *item, const TQPoint&, - int col ) -{ - if ( !item || !item->isSelected() ) - return; - - Event *event = currentEvent(); - if ( !event ) - return; // very unlikely, but safety first - - bool doShowAdvanced = false; - - switch( col ) - { - case COL_EXECUTE: - m_execute->toggle(); - m_executePath->setFocus(); - doShowAdvanced = true; - break; - case COL_STDERR: - m_stderr->toggle(); - break; - case COL_TASKBAR: - m_taskbar->toggle(); - break; - case COL_MESSAGE: - m_passivePopup->setChecked( true ); // default to passive popups - m_messageBox->toggle(); - break; - case COL_LOGFILE: - m_logToFile->toggle(); - m_logfilePath->setFocus(); - doShowAdvanced = true; - break; - case COL_SOUND: - m_playSound->toggle(); - break; - default: // do nothing - break; - } - - if ( doShowAdvanced && !m_logToFile->isVisible() ) - { - showAdvanced( true ); - m_listview->ensureItemVisible( m_listview->currentItem() ); - } -} - -void KNotifyWidget::sort( bool ascending ) -{ - m_listview->setSorting( COL_EVENT, ascending ); - m_listview->sort(); -} - -void KNotifyWidget::selectItem( TQListViewItem *item ) -{ - if ( item ) - { - m_listview->setCurrentItem( item ); - item->setSelected( true ); - slotEventChanged( item ); - } -} - -void KNotifyWidget::resetDefaults( bool ask ) -{ - if ( ask ) - { - if ( KMessageBox::warningContinueCancel(this, - i18n("This will cause the notifications " - "to be reset to their defaults."), - i18n("Are You Sure?"), - i18n("&Reset")) - != KMessageBox::Continue) - return; - } - - reload( true ); // defaults - emit changed( true ); -} - -void KNotifyWidget::reload( bool revertToDefaults ) -{ - m_listview->clear(); - ApplicationListIterator it( m_visibleApps ); - for ( ; it.current(); ++it ) - { - it.current()->reloadEvents( revertToDefaults ); - addToView( it.current()->eventList() ); - } - - m_listview->sort(); - selectItem( m_listview->firstChild() ); -} - -void KNotifyWidget::save() -{ - kdDebug() << "save\n"; - - ApplicationListIterator it( m_allApps ); - while ( it.current() ) - { - (*it)->save(); - ++it; - } - - if ( kapp ) - { - if ( !kapp->dcopClient()->isAttached() ) - kapp->dcopClient()->attach(); - kapp->dcopClient()->send("knotify", "", "reconfigure()", TQString("")); - } - - emit changed( false ); -} - -// returns e.g. "twin/eventsrc" from a given path -// "/opt/trinity/share/apps/twin/eventsrc" -TQString KNotifyWidget::makeRelative( const TQString& fullPath ) -{ - int slash = fullPath.findRev( '/' ) - 1; - slash = fullPath.findRev( '/', slash ); - - if ( slash < 0 ) - return TQString::null; - - return fullPath.mid( slash+1 ); -} - -Event * KNotifyWidget::currentEvent() -{ - TQListViewItem *current = m_listview->currentItem(); - if ( !current ) - return 0L; - - return &static_cast<ListViewItem*>( current )->event(); -} - -void KNotifyWidget::openSoundDialog( KURLRequester *requester ) -{ - // only need to init this once - requester->disconnect( TQT_SIGNAL( openFileDialog( KURLRequester * )), - this, TQT_SLOT( openSoundDialog( KURLRequester * ))); - - KFileDialog *fileDialog = requester->fileDialog(); - fileDialog->setCaption( i18n("Select Sound File") ); - TQStringList filters; - filters << "audio/x-wav" << "audio/x-mp3" << "application/ogg" - << "audio/x-adpcm"; - fileDialog->setMimeFilter( filters ); - - // find the first "sound"-resource that contains files - const Application *app = currentEvent()->application(); - TQStringList soundDirs = - TDEGlobal::dirs()->findDirs("data", app->appName() + "/sounds"); - soundDirs += TDEGlobal::dirs()->resourceDirs( "sound" ); - - if ( !soundDirs.isEmpty() ) { - KURL soundURL; - TQDir dir; - dir.setFilter( TQDir::Files | TQDir::Readable ); - TQStringList::ConstIterator it = soundDirs.begin(); - while ( it != soundDirs.end() ) { - dir = *it; - if ( dir.isReadable() && dir.count() > 2 ) { - soundURL.setPath( *it ); - fileDialog->setURL( soundURL ); - break; - } - ++it; - } - } -} - -void KNotifyWidget::openLogDialog( KURLRequester *requester ) -{ - // only need to init this once - requester->disconnect( TQT_SIGNAL( openFileDialog( KURLRequester * )), - this, TQT_SLOT( openLogDialog( KURLRequester * ))); - - KFileDialog *fileDialog = requester->fileDialog(); - fileDialog->setCaption( i18n("Select Log File") ); - TQStringList filters; - filters << "text/x-log" << "text/plain"; - fileDialog->setMimeFilter( filters ); -} - -void KNotifyWidget::openExecDialog( KURLRequester *requester ) -{ - // only need to init this once - requester->disconnect( TQT_SIGNAL( openFileDialog( KURLRequester * )), - this, TQT_SLOT( openExecDialog( KURLRequester * ))); - - - KFileDialog *fileDialog = requester->fileDialog(); - fileDialog->setCaption( i18n("Select File to Execute") ); - TQStringList filters; - filters << "application/x-executable" << "application/x-shellscript" - << "application/x-perl" << "application/x-python"; - fileDialog->setMimeFilter( filters ); -} - -void KNotifyWidget::playSound() -{ - TQString soundPath = m_soundPath->url(); - if (!TDEIO::NetAccess::exists( m_soundPath->url(), true, 0 )) { - bool foundSound=false; - - // find the first "sound"-resource that contains files - const Application *app = currentEvent()->application(); - TQStringList soundDirs = TDEGlobal::dirs()->findDirs("data", app->appName() + "/sounds"); - soundDirs += TDEGlobal::dirs()->resourceDirs( "sound" ); - - if ( !soundDirs.isEmpty() ) { - TQDir dir; - dir.setFilter( TQDir::Files | TQDir::Readable ); - TQStringList::ConstIterator it = soundDirs.begin(); - while ( it != soundDirs.end() ) { - dir = *it; - if ( dir.isReadable() && dir.count() > 2 && - TDEIO::NetAccess::exists( *it + m_soundPath->url(), true, 0 )) { - foundSound=true; - soundPath = *it + m_soundPath->url(); - break; - } - ++it; - } - } - if ( !foundSound ) { - KMessageBox::sorry(this, i18n("The specified file does not exist." )); - return; - } - } - KAudioPlayer::play( soundPath ); -} - -void KNotifyWidget::enableAll() -{ - bool enable = (sender() == m_buttonEnable); - enableAll( SelectionCombo::type(enable ? m_comboEnable : m_comboDisable), - enable ); -} - -void KNotifyWidget::enableAll( int what, bool enable ) -{ - if ( m_listview->childCount() == 0 ) - return; - - bool affectAll = m_affectAllApps->isChecked(); // multi-apps mode - - ApplicationListIterator appIt( affectAll ? m_allApps : m_visibleApps ); - for ( ; appIt.current(); ++appIt ) - { - const EventList& events = appIt.current()->eventList(); - EventListIterator it( events ); - for ( ; it.current(); ++it ) - { - if ( enable ) - it.current()->presentation |= what; - else - it.current()->presentation &= ~what; - } - } - - // now make the listview reflect the changes - TQListViewItemIterator it( m_listview->firstChild() ); - for ( ; it.current(); ++it ) - { - ListViewItem *item = static_cast<ListViewItem*>( it.current() ); - updatePixmaps( item ); - } - - TQListViewItem *item = m_listview->currentItem(); - if ( !item ) - item = m_listview->firstChild(); - selectItem( item ); - - emit changed( true ); -} - - -////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////// - - -// -// path must be "appname/eventsrc", i.e. a relative path -// -Application::Application( const TQString &path ) -{ - TQString config_file = path; - config_file[config_file.find('/')] = '.'; - m_events = 0L; - config = new TDEConfig(config_file, false, false); - kc = new TDEConfig(path, true, false, "data"); - kc->setGroup( TQString::fromLatin1("!Global!") ); - m_icon = kc->readEntry(TQString::fromLatin1("IconName"), - TQString::fromLatin1("misc")); - m_description = kc->readEntry( TQString::fromLatin1("Comment"), - i18n("No description available") ); - - int index = path.find( '/' ); - if ( index >= 0 ) - m_appname = path.left( index ); - else - kdDebug() << "Cannot determine application name from path: " << path << endl; -} - -Application::~Application() -{ - delete config; - delete kc; - delete m_events; -} - - -const EventList& Application::eventList() -{ - if ( !m_events ) { - m_events = new EventList; - m_events->setAutoDelete( true ); - reloadEvents(); - } - - return *m_events; -} - - -void Application::save() -{ - if ( !m_events ) - return; - - EventListIterator it( *m_events ); - Event *e; - while ( (e = it.current()) ) { - config->setGroup( e->configGroup ); - config->writeEntry( "presentation", e->presentation ); - config->writePathEntry( "soundfile", e->soundfile ); - config->writePathEntry( "logfile", e->logfile ); - config->writePathEntry( "commandline", e->commandline ); - - ++it; - } - config->sync(); -} - - -void Application::reloadEvents( bool revertToDefaults ) -{ - if ( m_events ) - m_events->clear(); - else - { - m_events = new EventList; - m_events->setAutoDelete( true ); - } - - Event *e = 0L; - - TQString global = TQString::fromLatin1("!Global!"); - TQString default_group = TQString::fromLatin1("<default>"); - TQString name = TQString::fromLatin1("Name"); - TQString comment = TQString::fromLatin1("Comment"); - - TQStringList conflist = kc->groupList(); - TQStringList::ConstIterator it = conflist.begin(); - - while ( it != conflist.end() ) { - if ( (*it) != global && (*it) != default_group ) { // event group - kc->setGroup( *it ); - - e = new Event( this ); - e->name = kc->readEntry( name ); - e->description = kc->readEntry( comment ); - e->dontShow = kc->readNumEntry("nopresentation", 0 ); - e->configGroup = *it; - if ( e->name.isEmpty() && e->description.isEmpty() ) - delete e; - else { // load the event - if( !e->name.isEmpty() && e->description.isEmpty() ) - e->description = e->name; - // default to passive popups over plain messageboxes - int default_rep = kc->readNumEntry("default_presentation", - 0 | KNotifyClient::PassivePopup); - TQString default_logfile = kc->readPathEntry("default_logfile"); - TQString default_soundfile = kc->readPathEntry("default_sound"); - TQString default_commandline = kc->readPathEntry("default_commandline"); - - config->setGroup(*it); - - if ( revertToDefaults ) - { - e->presentation = default_rep; - e->logfile = default_logfile; - e->soundfile = default_soundfile; - e->commandline = default_commandline; - } - - else - { - e->presentation = config->readNumEntry("presentation", - default_rep); - e->logfile = config->readPathEntry("logfile", - default_logfile); - e->soundfile = config->readPathEntry("soundfile", - default_soundfile); - e->commandline = config->readPathEntry("commandline", - default_commandline); - } - - m_events->append( e ); - } - } - - ++it; - } - - return; -} - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -ListViewItem::ListViewItem( TQListView *view, Event *event ) - : TQListViewItem( view ), - m_event( event ) -{ - setText( COL_EVENT, event->text() ); -} - -int ListViewItem::compare ( TQListViewItem * i, int col, bool ascending ) const -{ - ListViewItem *item = static_cast<ListViewItem*>( i ); - int myPres = m_event->presentation; - int otherPres = item->event().presentation; - - int action = 0; - - switch ( col ) - { - case COL_EVENT: // use default sorting - return TQListViewItem::compare( i, col, ascending ); - - case COL_EXECUTE: - action = KNotifyClient::Execute; - break; - case COL_LOGFILE: - action = KNotifyClient::Logfile; - break; - case COL_MESSAGE: - action = (KNotifyClient::Messagebox | KNotifyClient::PassivePopup); - break; - case COL_SOUND: - action = KNotifyClient::Sound; - break; - case COL_STDERR: - action = KNotifyClient::Stderr; - break; - case COL_TASKBAR: - action = KNotifyClient::Taskbar; - break; - } - - if ( (myPres & action) == (otherPres & action) ) - { - // default sorting by event - return TQListViewItem::compare( i, COL_EVENT, true ); - } - - if ( myPres & action ) - return -1; - if ( otherPres & action ) - return 1; - - return 0; -} - -#include "knotifydialog.moc" diff --git a/kio/kfile/knotifydialog.h b/kio/kfile/knotifydialog.h deleted file mode 100644 index 9bb3210ea..000000000 --- a/kio/kfile/knotifydialog.h +++ /dev/null @@ -1,341 +0,0 @@ -/* - Copyright (C) 2000,2002 Carsten Pfeiffer <pfeiffer@kde.org> - Copyright (C) 2002 Neil Stevens <neil@qualityassistant.com> - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation; - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library, If not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*/ - -#ifndef KNOTIFYDIALOG_H -#define KNOTIFYDIALOG_H - -#include <klistview.h> -#include <kdialogbase.h> -#include <kinstance.h> -#include <kglobal.h> - -#include "knotifywidgetbase.h" - -class TQShowEvent; - -namespace KNotify -{ - class KNotifyWidget; -} - -/** - * KNotifyDialog presents an interface for configuring an application's - * KNotify events. - * - * Rather than requiring the user to wade through the entire list of - * applications' events in KControl, your application can make the list - * of its own notifications available here. - * - * Typical usage is calling the static configure() method: - * \code - * (void) KNotifyDialog::configure( someParentWidget ); - * \endcode - * - * @since 3.1 - * @author Carsten Pfeiffer <pfeiffer@kde.org> - */ -class TDEIO_EXPORT KNotifyDialog : public KDialogBase -{ - Q_OBJECT - -public: - /** - * If you want a non-modal dialog, you need to instantiate KNotifyDialog - * yourself instead of using the configure() method. - * - * KDE4.0 modal default will be false. - * - * @param parent The parent widget for the dialog - * @param name The widget name - * @param modal If true, this will be a modal dialog, otherwise non-modal. - * @param aboutData A pointer to a TDEAboutData object. TDEAboutData::appName() - * will be used to find the KNotify events (in the eventsrc file). - * Set this to 0L if you want to add all events yourself with - * addApplicationEvents(). - */ - KNotifyDialog( TQWidget *parent = 0, const char *name = 0, - bool modal = true, - const TDEAboutData *aboutData = - TDEGlobal::instance()->aboutData() ); - /** - * Destroys the KNotifyDialog - */ - virtual ~KNotifyDialog(); - - /** - * Convenience method to create exec() a modal KNotifyDialog. - * - * @param parent The parent widget for the dialog - * @param name The widget name - * @param aboutData A pointer to a TDEAboutData object. TDEAboutData::appName() - * will be used to find the KNotify events (in the eventsrc file). - * @see exec for the return values. - * @return The value of TQDialog::exec() - */ - static int configure( TQWidget *parent = 0, const char *name = 0, - const TDEAboutData *aboutData = TDEGlobal::instance()->aboutData() ); - - /** - * With this method, you can add the KNotify events of one eventsrc - * files to the view. - * KNotifyDialog can handle events for multiple applications (i.e. eventsrc files). - * Successive calls with a different @p appName will add them. - * @param appName The application's name, i.e. the name passed to the - * TDEApplication constructor or TDEAboutData. - * @see clearApplicationEvents() - */ - virtual void addApplicationEvents( const char *appName ); - - /** - * With this method, you can add the KNotify events of one eventsrc - * files to the view. - * KNotifyDialog can handle events for multiple applications (i.e. eventsrc files). - * Successive calls with a different @p path will add them. - * @param path The absolute or relative path to the eventsrc file to be configured. - * A relative path would be e.g. "twin/eventsrc". - * @see clearApplicationEvents() - */ - virtual void addApplicationEvents( const TQString& path ); - - /** - * Removes all the events added with addApplicationEvents() - * @see addApplicationEvents() - */ - virtual void clearApplicationEvents(); - -private slots: - void slotDefault(); - -private: - enum - { - COL_FILENAME = 1 - }; - - void updateView(); - - KNotify::KNotifyWidget * m_notifyWidget; - - class Private; - Private *d; -}; - - -namespace KNotify -{ - class Application; - class Event; - class ListViewItem; - typedef TQPtrList<Event> EventList; - typedef TQPtrListIterator<Application> ApplicationListIterator; - typedef TQPtrListIterator<Event> EventListIterator; - - /** - * @internal - */ - class TDEIO_EXPORT Application - { - public: - Application( const TQString &path ); - ~Application(); - - TQString text() const { return m_description; } - TQString icon() const { return m_icon; } - const EventList& eventList(); - void reloadEvents( bool revertToDefaults = false ); - void save(); - - TQString appName() const { return m_appname; } - - private: - TQString m_icon; - TQString m_description; - TQString m_appname; - EventList *m_events; - - TDEConfig *kc; // The file that defines the events. - TDEConfig *config; // The file that contains the settings for the events - }; - - - class TDEIO_EXPORT ApplicationList : public TQPtrList<Application> - { - virtual int compareItems ( TQPtrCollection::Item item1, - TQPtrCollection::Item item2 ) - { - return (static_cast<Application*>( item1 )->text() >= - static_cast<Application*>( item2 )->text()) ? 1 : -1; - } - }; - - /** - * @internal - */ - class TDEIO_EXPORT KNotifyWidget : public KNotifyWidgetBase - { - Q_OBJECT - - public: - KNotifyWidget( TQWidget* parent = 0, const char* name = 0, - bool handleAllApps = false ); - ~KNotifyWidget(); - - KListView * eventsView() { - return m_listview; - } - - void addVisibleApp( Application *app ); - ApplicationList& visibleApps() { return m_visibleApps; } - ApplicationList& allApps() { return m_allApps; } - - /** - * Returns 0L if no application events could be found - * The returned pointer must be freed by the caller (easiest done - * by putting it into an ApplicationList with setAutoDelete( true )). - */ - Application * addApplicationEvents( const TQString& path ); - - void resetDefaults( bool ask ); - void sort( bool ascending = true ); - - public slots: - /** - * Clears the view and all the Application events. - */ - virtual void clear(); - /** - * Clears only the view and the visible Application events. - * E.g. useful if you want to set new visible events with - * addVisibleApp() - */ - virtual void clearVisible(); - virtual void save(); - virtual void showAdvanced( bool show ); - void toggleAdvanced(); - - - signals: - void changed( bool hasChanges ); - - protected: - /** - * May return 0L, if there is no current event selected. - */ - Event * currentEvent(); - virtual void showEvent( TQShowEvent * ); - virtual void enableAll( int what, bool enable ); - - void reload( bool revertToDefaults = false ); - - protected slots: - void playSound(); - - private slots: - void slotItemClicked( TQListViewItem *item, const TQPoint& point, - int col ); - void slotEventChanged( TQListViewItem * ); - void soundToggled( bool on ); - void loggingToggled( bool on ); - void executeToggled( bool on ); - void messageBoxChanged(); - void stderrToggled( bool on ); - void taskbarToggled( bool on ); - - void soundFileChanged( const TQString& text ); - void logfileChanged( const TQString& text ); - void commandlineChanged( const TQString& text ); - - void openSoundDialog( KURLRequester * ); - void openLogDialog( KURLRequester * ); - void openExecDialog( KURLRequester * ); - - void enableAll(); - - private: - void updateWidgets( ListViewItem *item ); - void updatePixmaps( ListViewItem *item ); - - static TQString makeRelative( const TQString& ); - void addToView( const EventList& events ); - void widgetChanged( TQListViewItem *item, - int what, bool on, TQWidget *buddy = 0L ); - void selectItem( TQListViewItem *item ); - - ApplicationList m_visibleApps; - ApplicationList m_allApps; - - class Private; - Private *d; - - }; - - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - - - /** - * @internal - */ - class Event - { - friend class Application; - - public: - TQString text() const { return description; } - - int presentation; - int dontShow; - TQString logfile; - TQString soundfile; - TQString commandline; - - const Application *application() const { return m_app; } - - private: - Event( const Application *app ) { - presentation = 0; - dontShow = 0; - m_app = app; - } - TQString name; - TQString description; - TQString configGroup; - - const Application *m_app; - }; - - /** - * @internal - */ - class ListViewItem : public TQListViewItem - { - public: - ListViewItem( TQListView *view, Event *event ); - - Event& event() { return *m_event; } - virtual int compare (TQListViewItem * i, int col, bool ascending) const; - - private: - Event * m_event; - }; - -} - - -#endif diff --git a/kio/kfile/knotifywidgetbase.ui b/kio/kfile/knotifywidgetbase.ui deleted file mode 100644 index d3c3103ff..000000000 --- a/kio/kfile/knotifywidgetbase.ui +++ /dev/null @@ -1,469 +0,0 @@ -<!DOCTYPE UI><UI version="3.2" stdsetdef="1"> -<class>KNotifyWidgetBase</class> -<widget class="TQWidget"> - <property name="name"> - <cstring>KNotifyWidgetBase</cstring> - </property> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>487</width> - <height>531</height> - </rect> - </property> - <vbox> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <property name="margin"> - <number>0</number> - </property> - <widget class="KListView"> - <column> - <property name="text"> - <string></string> - </property> - <property name="clickable"> - <bool>true</bool> - </property> - <property name="resizable"> - <bool>false</bool> - </property> - </column> - <column> - <property name="text"> - <string></string> - </property> - <property name="clickable"> - <bool>true</bool> - </property> - <property name="resizable"> - <bool>false</bool> - </property> - </column> - <column> - <property name="text"> - <string></string> - </property> - <property name="clickable"> - <bool>true</bool> - </property> - <property name="resizable"> - <bool>false</bool> - </property> - </column> - <column> - <property name="text"> - <string></string> - </property> - <property name="clickable"> - <bool>true</bool> - </property> - <property name="resizable"> - <bool>false</bool> - </property> - </column> - <column> - <property name="text"> - <string></string> - </property> - <property name="clickable"> - <bool>true</bool> - </property> - <property name="resizable"> - <bool>false</bool> - </property> - </column> - <column> - <property name="text"> - <string></string> - </property> - <property name="clickable"> - <bool>true</bool> - </property> - <property name="resizable"> - <bool>false</bool> - </property> - </column> - <column> - <property name="text"> - <string>Events</string> - </property> - <property name="clickable"> - <bool>true</bool> - </property> - <property name="resizable"> - <bool>true</bool> - </property> - </column> - <property name="name"> - <cstring>m_listview</cstring> - </property> - <property name="sizePolicy"> - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>7</vsizetype> - <horstretch>10</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - <widget class="TQGroupBox"> - <property name="name"> - <cstring>m_controlsBox</cstring> - </property> - <property name="title"> - <string>Quick Controls</string> - </property> - <grid> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <widget class="TQCheckBox" row="0" column="0" rowspan="1" colspan="4"> - <property name="name"> - <cstring>m_affectAllApps</cstring> - </property> - <property name="text"> - <string>Apply to &all applications</string> - </property> - </widget> - <spacer row="1" column="0" rowspan="2" colspan="1"> - <property name="name"> - <cstring>Spacer3_2</cstring> - </property> - <property name="orientation"> - <enum>Horizontal</enum> - </property> - <property name="sizeType"> - <enum>Fixed</enum> - </property> - <property name="sizeHint"> - <size> - <width>30</width> - <height>20</height> - </size> - </property> - </spacer> - <spacer row="2" column="3"> - <property name="name"> - <cstring>Spacer17</cstring> - </property> - <property name="orientation"> - <enum>Horizontal</enum> - </property> - <property name="sizeType"> - <enum>Expanding</enum> - </property> - <property name="sizeHint"> - <size> - <width>318</width> - <height>16</height> - </size> - </property> - </spacer> - <widget class="TQPushButton" row="2" column="1"> - <property name="name"> - <cstring>m_buttonDisable</cstring> - </property> - <property name="text"> - <string>Turn O&ff All</string> - </property> - <property name="toolTip" stdset="0"> - <string>Allows you to change the behavior for all events at once</string> - </property> - </widget> - <widget class="TQPushButton" row="1" column="1"> - <property name="name"> - <cstring>m_buttonEnable</cstring> - </property> - <property name="text"> - <string>Turn O&n All</string> - </property> - <property name="toolTip" stdset="0"> - <string>Allows you to change the behavior for all events at once</string> - </property> - </widget> - <widget class="KComboBox" row="1" column="2"> - <property name="name"> - <cstring>m_comboEnable</cstring> - </property> - </widget> - <widget class="KComboBox" row="2" column="2"> - <property name="name"> - <cstring>m_comboDisable</cstring> - </property> - </widget> - </grid> - </widget> - <widget class="TQGroupBox"> - <property name="name"> - <cstring>m_actionsBox</cstring> - </property> - <property name="title"> - <string>Actions</string> - </property> - <grid> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <widget class="TQCheckBox" row="5" column="0" rowspan="1" colspan="3"> - <property name="name"> - <cstring>m_stderr</cstring> - </property> - <property name="text"> - <string>Print a message to standard &error output</string> - </property> - </widget> - <widget class="TQCheckBox" row="3" column="0" rowspan="1" colspan="3"> - <property name="name"> - <cstring>m_messageBox</cstring> - </property> - <property name="text"> - <string>Show a &message in a pop-up window</string> - </property> - </widget> - <widget class="TQCheckBox" row="2" column="0" rowspan="1" colspan="2"> - <property name="name"> - <cstring>m_execute</cstring> - </property> - <property name="text"> - <string>E&xecute a program:</string> - </property> - </widget> - <widget class="TQLayoutWidget" row="0" column="0" rowspan="1" colspan="2"> - <property name="name"> - <cstring>Layout25</cstring> - </property> - <hbox> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <widget class="TQCheckBox"> - <property name="name"> - <cstring>m_playSound</cstring> - </property> - <property name="text"> - <string>Play a &sound:</string> - </property> - </widget> - <widget class="TQPushButton"> - <property name="name"> - <cstring>m_playButton</cstring> - </property> - <property name="text"> - <string></string> - </property> - <property name="toolTip" stdset="0"> - <string>Test the Sound</string> - </property> - </widget> - </hbox> - </widget> - <widget class="TQCheckBox" row="6" column="0" rowspan="1" colspan="3"> - <property name="name"> - <cstring>m_taskbar</cstring> - </property> - <property name="text"> - <string>Mark &taskbar entry</string> - </property> - </widget> - <widget class="TQCheckBox" row="1" column="0" rowspan="1" colspan="2"> - <property name="name"> - <cstring>m_logToFile</cstring> - </property> - <property name="text"> - <string>&Log to a file:</string> - </property> - </widget> - <spacer row="4" column="0"> - <property name="name"> - <cstring>Spacer3</cstring> - </property> - <property name="orientation"> - <enum>Horizontal</enum> - </property> - <property name="sizeType"> - <enum>Fixed</enum> - </property> - <property name="sizeHint"> - <size> - <width>30</width> - <height>20</height> - </size> - </property> - </spacer> - <widget class="KURLRequester" row="2" column="2"> - <property name="name"> - <cstring>m_executePath</cstring> - </property> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="sizePolicy"> - <sizepolicy> - <hsizetype>1</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>1</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - <widget class="KURLRequester" row="1" column="2"> - <property name="name"> - <cstring>m_logfilePath</cstring> - </property> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="sizePolicy"> - <sizepolicy> - <hsizetype>1</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>1</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - <widget class="KURLRequester" row="0" column="2"> - <property name="name"> - <cstring>m_soundPath</cstring> - </property> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="sizePolicy"> - <sizepolicy> - <hsizetype>1</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - <widget class="TQCheckBox" row="4" column="1" rowspan="1" colspan="2"> - <property name="name"> - <cstring>m_passivePopup</cstring> - </property> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="text"> - <string>&Use a passive window that does not interrupt other work</string> - </property> - </widget> - </grid> - </widget> - <widget class="TQLayoutWidget"> - <property name="name"> - <cstring>Layout8</cstring> - </property> - <hbox> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <widget class="TQPushButton"> - <property name="name"> - <cstring>m_extension</cstring> - </property> - <property name="sizePolicy"> - <sizepolicy> - <hsizetype>4</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>Less Options</string> - </property> - <property name="toggleButton"> - <bool>false</bool> - </property> - </widget> - <spacer> - <property name="name"> - <cstring>Spacer7</cstring> - </property> - <property name="orientation"> - <enum>Horizontal</enum> - </property> - <property name="sizeType"> - <enum>Expanding</enum> - </property> - <property name="sizeHint"> - <size> - <width>20</width> - <height>0</height> - </size> - </property> - </spacer> - <widget class="TQPushButton"> - <property name="name"> - <cstring>m_playerButton</cstring> - </property> - <property name="text"> - <string>Player Settings</string> - </property> - </widget> - </hbox> - </widget> - </vbox> -</widget> -<connections> - <connection> - <sender>m_messageBox</sender> - <signal>toggled(bool)</signal> - <receiver>m_passivePopup</receiver> - <slot>setEnabled(bool)</slot> - </connection> - <connection> - <sender>m_execute</sender> - <signal>toggled(bool)</signal> - <receiver>m_executePath</receiver> - <slot>setEnabled(bool)</slot> - </connection> - <connection> - <sender>m_playSound</sender> - <signal>toggled(bool)</signal> - <receiver>m_soundPath</receiver> - <slot>setEnabled(bool)</slot> - </connection> - <connection> - <sender>m_logToFile</sender> - <signal>toggled(bool)</signal> - <receiver>m_logfilePath</receiver> - <slot>setEnabled(bool)</slot> - </connection> -</connections> -<tabstops> - <tabstop>m_listview</tabstop> - <tabstop>m_playSound</tabstop> - <tabstop>m_playButton</tabstop> - <tabstop>m_soundPath</tabstop> - <tabstop>m_logToFile</tabstop> - <tabstop>m_logfilePath</tabstop> - <tabstop>m_execute</tabstop> - <tabstop>m_executePath</tabstop> - <tabstop>m_messageBox</tabstop> - <tabstop>m_passivePopup</tabstop> - <tabstop>m_stderr</tabstop> - <tabstop>m_affectAllApps</tabstop> - <tabstop>m_buttonEnable</tabstop> - <tabstop>m_comboEnable</tabstop> - <tabstop>m_buttonDisable</tabstop> - <tabstop>m_comboDisable</tabstop> - <tabstop>m_extension</tabstop> - <tabstop>m_playerButton</tabstop> -</tabstops> -<includes> - <include location="global" impldecl="in implementation">kdialog.h</include> - <include location="global" impldecl="in implementation">klistview.h</include> - <include location="global" impldecl="in implementation">kurlrequester.h</include> - <include location="global" impldecl="in implementation">klineedit.h</include> - <include location="global" impldecl="in implementation">kpushbutton.h</include> - <include location="global" impldecl="in implementation">kcombobox.h</include> -</includes> -<layoutdefaults spacing="6" margin="11"/> -<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/> -</UI> diff --git a/kio/kfile/kopenwith.cpp b/kio/kfile/kopenwith.cpp deleted file mode 100644 index 691487730..000000000 --- a/kio/kfile/kopenwith.cpp +++ /dev/null @@ -1,851 +0,0 @@ -/* This file is part of the KDE libraries - - Copyright (C) 1997 Torben Weis <weis@stud.uni-frankfurt.de> - Copyright (C) 1999 Dirk Mueller <mueller@kde.org> - Portions copyright (C) 1999 Preston Brown <pbrown@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <tqfile.h> -#include <tqdir.h> -#include <tqdialog.h> -#include <tqimage.h> -#include <tqpixmap.h> -#include <tqlabel.h> -#include <tqlayout.h> -#include <tqpushbutton.h> -#include <tqtoolbutton.h> -#include <tqcheckbox.h> -#include <tqtooltip.h> -#include <tqstyle.h> -#include <tqwhatsthis.h> - -#include <kapplication.h> -#include <kbuttonbox.h> -#include <kcombobox.h> -#include <kdesktopfile.h> -#include <kdialog.h> -#include <kglobal.h> -#include <klineedit.h> -#include <klocale.h> -#include <kiconloader.h> -#include <kmimemagic.h> -#include <krun.h> -#include <kstandarddirs.h> -#include <kstringhandler.h> -#include <kuserprofile.h> -#include <kurlcompletion.h> -#include <kurlrequester.h> -#include <dcopclient.h> -#include <kmimetype.h> -#include <kservicegroup.h> -#include <klistview.h> -#include <tdesycoca.h> -#include <kstdguiitem.h> - -#include "kopenwith.h" -#include "kopenwith_p.h" - -#include <kdebug.h> -#include <assert.h> -#include <stdlib.h> - -#define SORT_SPEC (TQDir::DirsFirst | TQDir::Name | TQDir::IgnoreCase) - - -// ---------------------------------------------------------------------- - -KAppTreeListItem::KAppTreeListItem( KListView* parent, const TQString & name, - const TQPixmap& pixmap, bool parse, bool dir, const TQString &p, const TQString &c ) - : TQListViewItem( parent, name ) -{ - init(pixmap, parse, dir, p, c); -} - - -// ---------------------------------------------------------------------- - -KAppTreeListItem::KAppTreeListItem( TQListViewItem* parent, const TQString & name, - const TQPixmap& pixmap, bool parse, bool dir, const TQString &p, const TQString &c ) - : TQListViewItem( parent, name ) -{ - init(pixmap, parse, dir, p, c); -} - - -// ---------------------------------------------------------------------- - -void KAppTreeListItem::init(const TQPixmap& pixmap, bool parse, bool dir, const TQString &_path, const TQString &_exec) -{ - setPixmap(0, pixmap); - parsed = parse; - directory = dir; - path = _path; // relative path - exec = _exec; -} - - -/* Ensures that directories sort before non-directories */ -int KAppTreeListItem::compare(TQListViewItem *i, int col, bool ascending) const -{ - KAppTreeListItem *other = dynamic_cast<KAppTreeListItem *>(i); - - // Directories sort first - if (directory && !other->directory) - return -1; - - else if (!directory && other->directory) - return 1; - - else // both directories or both not - return TQListViewItem::compare(i, col, ascending); -} - -// ---------------------------------------------------------------------- -// Ensure that case is ignored -TQString KAppTreeListItem::key(int column, bool /*ascending*/) const -{ - return text(column).upper(); -} - -void KAppTreeListItem::activate() -{ - if ( directory ) - setOpen(!isOpen()); -} - -void KAppTreeListItem::setOpen( bool o ) -{ - if( o && !parsed ) { // fill the children before opening - ((TDEApplicationTree *) parent())->addDesktopGroup( path, this ); - parsed = true; - } - TQListViewItem::setOpen( o ); -} - -bool KAppTreeListItem::isDirectory() -{ - return directory; -} - -// ---------------------------------------------------------------------- - -TDEApplicationTree::TDEApplicationTree( TQWidget *parent ) - : KListView( parent ), currentitem(0) -{ - addColumn( i18n("Known Applications") ); - setRootIsDecorated( true ); - - addDesktopGroup( TQString::null ); - cleanupTree(); - - connect( this, TQT_SIGNAL( currentChanged(TQListViewItem*) ), - TQT_SLOT( slotItemHighlighted(TQListViewItem*) ) ); - connect( this, TQT_SIGNAL( selectionChanged(TQListViewItem*) ), - TQT_SLOT( slotSelectionChanged(TQListViewItem*) ) ); -} - -// ---------------------------------------------------------------------- - -bool TDEApplicationTree::isDirSel() -{ - if (!currentitem) return false; // if currentitem isn't set - return currentitem->isDirectory(); -} - -// ---------------------------------------------------------------------- - -static TQPixmap appIcon(const TQString &iconName) -{ - TQPixmap normal = TDEGlobal::iconLoader()->loadIcon(iconName, KIcon::Small, 0, KIcon::DefaultState, 0L, true); - // make sure they are not larger than 20x20 - if (normal.width() > 20 || normal.height() > 20) - { - TQImage tmp = normal.convertToImage(); - tmp = tmp.smoothScale(20, 20); - normal.convertFromImage(tmp); - } - return normal; -} - -void TDEApplicationTree::addDesktopGroup( const TQString &relPath, KAppTreeListItem *item) -{ - KServiceGroup::Ptr root = KServiceGroup::group(relPath); - if (!root || !root->isValid()) return; - - KServiceGroup::List list = root->entries(); - - KAppTreeListItem * newItem; - for( KServiceGroup::List::ConstIterator it = list.begin(); - it != list.end(); it++) - { - TQString icon; - TQString text; - TQString relPath; - TQString exec; - bool isDir = false; - KSycocaEntry *p = (*it); - if (p->isType(KST_KService)) - { - KService *service = static_cast<KService *>(p); - - if (service->noDisplay()) - continue; - - icon = service->icon(); - text = service->name(); - exec = service->exec(); - } - else if (p->isType(KST_KServiceGroup)) - { - KServiceGroup *serviceGroup = static_cast<KServiceGroup *>(p); - - if (serviceGroup->noDisplay() || serviceGroup->childCount() == 0) - continue; - - icon = serviceGroup->icon(); - text = serviceGroup->caption(); - relPath = serviceGroup->relPath(); - isDir = true; - } - else - { - kdWarning(250) << "KServiceGroup: Unexpected object in list!" << endl; - continue; - } - - TQPixmap pixmap = appIcon( icon ); - - if (item) - newItem = new KAppTreeListItem( item, text, pixmap, false, isDir, - relPath, exec ); - else - newItem = new KAppTreeListItem( this, text, pixmap, false, isDir, - relPath, exec ); - if (isDir) - newItem->setExpandable( true ); - } -} - - -// ---------------------------------------------------------------------- - -void TDEApplicationTree::slotItemHighlighted(TQListViewItem* i) -{ - // i may be 0 (see documentation) - if(!i) - return; - - KAppTreeListItem *item = (KAppTreeListItem *) i; - - currentitem = item; - - if( (!item->directory ) && (!item->exec.isEmpty()) ) - emit highlighted( item->text(0), item->exec ); -} - - -// ---------------------------------------------------------------------- - -void TDEApplicationTree::slotSelectionChanged(TQListViewItem* i) -{ - // i may be 0 (see documentation) - if(!i) - return; - - KAppTreeListItem *item = (KAppTreeListItem *) i; - - currentitem = item; - - if( ( !item->directory ) && (!item->exec.isEmpty() ) ) - emit selected( item->text(0), item->exec ); -} - -// ---------------------------------------------------------------------- - -void TDEApplicationTree::resizeEvent( TQResizeEvent * e) -{ - setColumnWidth(0, width()-TQApplication::style().pixelMetric(TQStyle::PM_ScrollBarExtent) - -2*TQApplication::style().pixelMetric(TQStyle::PM_DefaultFrameWidth)); - KListView::resizeEvent(e); -} - -// Prune empty directories from the tree -void TDEApplicationTree::cleanupTree() -{ - TQListViewItem *item=firstChild(); - while(item!=0) - { - if(item->isExpandable()) - { - TQListViewItem *temp=item->itemBelow(); - if(item->text(0)!=i18n("Applications")) - item->setOpen(false); - item=temp; - continue; - } - item=item->itemBelow(); - } -} - -/*************************************************************** - * - * KOpenWithDlg - * - ***************************************************************/ -class KOpenWithDlgPrivate -{ -public: - KOpenWithDlgPrivate() : saveNewApps(false) { }; - TQPushButton* ok; - bool saveNewApps; - KService::Ptr curService; -}; - -KOpenWithDlg::KOpenWithDlg( const KURL::List& _urls, TQWidget* parent ) - :TQDialog( parent, "openwith", true ) -{ - setCaption( i18n( "Open With" ) ); - TQString text; - if( _urls.count() == 1 ) - { - text = i18n("<qt>Select the program that should be used to open <b>%1</b>. " - "If the program is not listed, enter the name or click " - "the browse button.</qt>").arg( _urls.first().fileName() ); - } - else - // Should never happen ?? - text = i18n( "Choose the name of the program with which to open the selected files." ); - setServiceType( _urls ); - init( text, TQString() ); -} - -KOpenWithDlg::KOpenWithDlg( const KURL::List& _urls, const TQString&_text, - const TQString& _value, TQWidget *parent) - :TQDialog( parent, "openwith", true ) -{ - TQString caption = KStringHandler::csqueeze( _urls.first().prettyURL() ); - if (_urls.count() > 1) - caption += TQString::fromLatin1("..."); - setCaption(caption); - setServiceType( _urls ); - init( _text, _value ); -} - -KOpenWithDlg::KOpenWithDlg( const TQString &serviceType, const TQString& value, - TQWidget *parent) - :TQDialog( parent, "openwith", true ) -{ - setCaption(i18n("Choose Application for %1").arg(serviceType)); - TQString text = i18n("<qt>Select the program for the file type: <b>%1</b>. " - "If the program is not listed, enter the name or click " - "the browse button.</qt>").arg(serviceType); - qServiceType = serviceType; - init( text, value ); - if (remember) - remember->hide(); -} - -KOpenWithDlg::KOpenWithDlg( TQWidget *parent) - :TQDialog( parent, "openwith", true ) -{ - setCaption(i18n("Choose Application")); - TQString text = i18n("<qt>Select a program. " - "If the program is not listed, enter the name or click " - "the browse button.</qt>"); - qServiceType = TQString::null; - init( text, TQString::null ); -} - -void KOpenWithDlg::setServiceType( const KURL::List& _urls ) -{ - if ( _urls.count() == 1 ) - { - qServiceType = KMimeType::findByURL( _urls.first())->name(); - if (qServiceType == TQString::fromLatin1("application/octet-stream")) - qServiceType = TQString::null; - } - else - qServiceType = TQString::null; -} - -void KOpenWithDlg::init( const TQString& _text, const TQString& _value ) -{ - d = new KOpenWithDlgPrivate; - bool bReadOnly = kapp && !kapp->authorize("shell_access"); - m_terminaldirty = false; - m_pTree = 0L; - m_pService = 0L; - d->curService = 0L; - - TQBoxLayout *topLayout = new TQVBoxLayout( this, KDialog::marginHint(), - KDialog::spacingHint() ); - label = new TQLabel( _text, this ); - topLayout->addWidget(label); - - TQHBoxLayout* hbox = new TQHBoxLayout(topLayout); - - TQToolButton *clearButton = new TQToolButton( this ); - clearButton->setIconSet( BarIcon( "locationbar_erase" ) ); - clearButton->setFixedSize( clearButton->sizeHint() ); - connect( clearButton, TQT_SIGNAL( clicked() ), TQT_SLOT( slotClear() ) ); - TQToolTip::add( clearButton, i18n( "Clear input field" ) ); - - hbox->addWidget( clearButton ); - - if (!bReadOnly) - { - // init the history combo and insert it into the URL-Requester - KHistoryCombo *combo = new KHistoryCombo(); - combo->setDuplicatesEnabled( false ); - TDEConfig *kc = TDEGlobal::config(); - TDEConfigGroupSaver ks( kc, TQString::fromLatin1("Open-with settings") ); - int max = kc->readNumEntry( TQString::fromLatin1("Maximum history"), 15 ); - combo->setMaxCount( max ); - int mode = kc->readNumEntry(TQString::fromLatin1("CompletionMode"), - TDEGlobalSettings::completionMode()); - combo->setCompletionMode((TDEGlobalSettings::Completion)mode); - TQStringList list = kc->readListEntry( TQString::fromLatin1("History") ); - combo->setHistoryItems( list, true ); - edit = new KURLRequester( combo, this ); - } - else - { - clearButton->hide(); - edit = new KURLRequester( this ); - edit->lineEdit()->setReadOnly(true); - edit->button()->hide(); - } - - edit->setURL( _value ); - TQWhatsThis::add(edit,i18n( - "Following the command, you can have several place holders which will be replaced " - "with the actual values when the actual program is run:\n" - "%f - a single file name\n" - "%F - a list of files; use for applications that can open several local files at once\n" - "%u - a single URL\n" - "%U - a list of URLs\n" - "%d - the directory of the file to open\n" - "%D - a list of directories\n" - "%i - the icon\n" - "%m - the mini-icon\n" - "%c - the comment")); - - hbox->addWidget(edit); - - if ( edit->comboBox() ) { - KURLCompletion *comp = new KURLCompletion( KURLCompletion::ExeCompletion ); - edit->comboBox()->setCompletionObject( comp ); - edit->comboBox()->setAutoDeleteCompletionObject( true ); - } - - connect ( edit, TQT_SIGNAL(returnPressed()), TQT_SLOT(slotOK()) ); - connect ( edit, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotTextChanged()) ); - - m_pTree = new TDEApplicationTree( this ); - topLayout->addWidget(m_pTree); - - connect( m_pTree, TQT_SIGNAL( selected( const TQString&, const TQString& ) ), - TQT_SLOT( slotSelected( const TQString&, const TQString& ) ) ); - connect( m_pTree, TQT_SIGNAL( highlighted( const TQString&, const TQString& ) ), - TQT_SLOT( slotHighlighted( const TQString&, const TQString& ) ) ); - connect( m_pTree, TQT_SIGNAL( doubleClicked(TQListViewItem*) ), - TQT_SLOT( slotDbClick() ) ); - - terminal = new TQCheckBox( i18n("Run in &terminal"), this ); - if (bReadOnly) - terminal->hide(); - connect(terminal, TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotTerminalToggled(bool))); - - topLayout->addWidget(terminal); - - TQBoxLayout* nocloseonexitLayout = new TQHBoxLayout( 0, 0, KDialog::spacingHint() ); - TQSpacerItem* spacer = new TQSpacerItem( 20, 0, TQSizePolicy::Fixed, TQSizePolicy::Minimum ); - nocloseonexitLayout->addItem( spacer ); - - nocloseonexit = new TQCheckBox( i18n("&Do not close when command exits"), this ); - nocloseonexit->setChecked( false ); - nocloseonexit->setDisabled( true ); - - // check to see if we use konsole if not disable the nocloseonexit - // because we don't know how to do this on other terminal applications - TDEConfigGroup confGroup( TDEGlobal::config(), TQString::fromLatin1("General") ); - TQString preferredTerminal = confGroup.readPathEntry("TerminalApplication", TQString::fromLatin1("konsole")); - - if (bReadOnly || preferredTerminal != "konsole") - nocloseonexit->hide(); - - nocloseonexitLayout->addWidget( nocloseonexit ); - topLayout->addLayout( nocloseonexitLayout ); - - if (!qServiceType.isNull()) - { - remember = new TQCheckBox(i18n("&Remember application association for this type of file"), this); - // remember->setChecked(true); - topLayout->addWidget(remember); - } - else - remember = 0L; - - // Use KButtonBox for the aligning pushbuttons nicely - KButtonBox* b = new KButtonBox( this ); - b->addStretch( 2 ); - - d->ok = b->addButton( KStdGuiItem::ok() ); - d->ok->setDefault( true ); - connect( d->ok, TQT_SIGNAL( clicked() ), TQT_SLOT( slotOK() ) ); - - TQPushButton* cancel = b->addButton( KStdGuiItem::cancel() ); - connect( cancel, TQT_SIGNAL( clicked() ), TQT_SLOT( reject() ) ); - - b->layout(); - topLayout->addWidget( b ); - - //edit->setText( _value ); - // This is what caused "can't click on items before clicking on Name header". - // Probably due to the resizeEvent handler using width(). - //resize( minimumWidth(), sizeHint().height() ); - edit->setFocus(); - slotTextChanged(); -} - - -// ---------------------------------------------------------------------- - -KOpenWithDlg::~KOpenWithDlg() -{ - delete d; - d = 0; -} - -// ---------------------------------------------------------------------- - -void KOpenWithDlg::slotClear() -{ - edit->setURL(TQString::null); - edit->setFocus(); -} - - -// ---------------------------------------------------------------------- - -void KOpenWithDlg::slotSelected( const TQString& /*_name*/, const TQString& _exec ) -{ - kdDebug(250)<<"KOpenWithDlg::slotSelected"<<endl; - KService::Ptr pService = d->curService; - edit->setURL( _exec ); // calls slotTextChanged :( - d->curService = pService; -} - - -// ---------------------------------------------------------------------- - -void KOpenWithDlg::slotHighlighted( const TQString& _name, const TQString& ) -{ - kdDebug(250)<<"KOpenWithDlg::slotHighlighted"<<endl; - qName = _name; - d->curService = KService::serviceByName( qName ); - if (!m_terminaldirty) - { - // ### indicate that default value was restored - terminal->setChecked(d->curService->terminal()); - TQString terminalOptions = d->curService->terminalOptions(); - nocloseonexit->setChecked( (terminalOptions.contains( "--noclose" ) > 0) ); - m_terminaldirty = false; // slotTerminalToggled changed it - } -} - -// ---------------------------------------------------------------------- - -void KOpenWithDlg::slotTextChanged() -{ - kdDebug(250)<<"KOpenWithDlg::slotTextChanged"<<endl; - // Forget about the service - d->curService = 0L; - d->ok->setEnabled( !edit->url().isEmpty()); -} - -// ---------------------------------------------------------------------- - -void KOpenWithDlg::slotTerminalToggled(bool) -{ - // ### indicate that default value was overridden - m_terminaldirty = true; - nocloseonexit->setDisabled( ! terminal->isChecked() ); -} - -// ---------------------------------------------------------------------- - -void KOpenWithDlg::slotDbClick() -{ - if (m_pTree->isDirSel() ) return; // check if a directory is selected - slotOK(); -} - -void KOpenWithDlg::setSaveNewApplications(bool b) -{ - d->saveNewApps = b; -} - -void KOpenWithDlg::slotOK() -{ - TQString typedExec(edit->url()); - TQString fullExec(typedExec); - - TQString serviceName; - TQString initialServiceName; - TQString preferredTerminal; - m_pService = d->curService; - if (!m_pService) { - // No service selected - check the command line - - // Find out the name of the service from the command line, removing args and paths - serviceName = KRun::binaryName( typedExec, true ); - if (serviceName.isEmpty()) - { - // TODO add a KMessageBox::error here after the end of the message freeze - return; - } - initialServiceName = serviceName; - kdDebug(250) << "initialServiceName=" << initialServiceName << endl; - int i = 1; // We have app, app-2, app-3... Looks better for the user. - bool ok = false; - // Check if there's already a service by that name, with the same Exec line - do { - kdDebug(250) << "looking for service " << serviceName << endl; - KService::Ptr serv = KService::serviceByDesktopName( serviceName ); - ok = !serv; // ok if no such service yet - // also ok if we find the exact same service (well, "kwrite" == "kwrite %U" - if ( serv && serv->type() == "Application") - { - TQString exec = serv->exec(); - fullExec = exec; - exec.replace("%u", "", false); - exec.replace("%f", "", false); - exec.replace("-caption %c", ""); - exec.replace("-caption \"%c\"", ""); - exec.replace("%i", ""); - exec.replace("%m", ""); - exec = exec.simplifyWhiteSpace(); - if (exec == typedExec) - { - ok = true; - m_pService = serv; - kdDebug(250) << k_funcinfo << "OK, found identical service: " << serv->desktopEntryPath() << endl; - } - } - if (!ok) // service was found, but it was different -> keep looking - { - ++i; - serviceName = initialServiceName + "-" + TQString::number(i); - } - } - while (!ok); - } - if ( m_pService ) - { - // Existing service selected - serviceName = m_pService->name(); - initialServiceName = serviceName; - fullExec = m_pService->exec(); - } - - if (terminal->isChecked()) - { - TDEConfigGroup confGroup( TDEGlobal::config(), TQString::fromLatin1("General") ); - preferredTerminal = confGroup.readPathEntry("TerminalApplication", TQString::fromLatin1("konsole")); - m_command = preferredTerminal; - // only add --noclose when we are sure it is konsole we're using - if (preferredTerminal == "konsole" && nocloseonexit->isChecked()) - m_command += TQString::fromLatin1(" --noclose"); - m_command += TQString::fromLatin1(" -e "); - m_command += edit->url(); - kdDebug(250) << "Setting m_command to " << m_command << endl; - } - if ( m_pService && terminal->isChecked() != m_pService->terminal() ) - m_pService = 0L; // It's not exactly this service we're running - - bool bRemember = remember && remember->isChecked(); - - if ( !bRemember && m_pService) - { - accept(); - return; - } - - if (!bRemember && !d->saveNewApps) - { - // Create temp service - m_pService = new KService(initialServiceName, fullExec, TQString::null); - if (terminal->isChecked()) - { - m_pService->setTerminal(true); - // only add --noclose when we are sure it is konsole we're using - if (preferredTerminal == "konsole" && nocloseonexit->isChecked()) - m_pService->setTerminalOptions("--noclose"); - } - accept(); - return; - } - - // if we got here, we can't seem to find a service for what they - // wanted. The other possibility is that they have asked for the - // association to be remembered. Create/update service. - - TQString newPath; - TQString oldPath; - TQString menuId; - if (m_pService) - { - oldPath = m_pService->desktopEntryPath(); - newPath = m_pService->locateLocal(); - menuId = m_pService->menuId(); - kdDebug(250) << "Updating exitsing service " << m_pService->desktopEntryPath() << " ( " << newPath << " ) " << endl; - } - else - { - newPath = KService::newServicePath(false /* hidden */, serviceName, &menuId); - kdDebug(250) << "Creating new service " << serviceName << " ( " << newPath << " ) " << endl; - } - - int maxPreference = 1; - if (!qServiceType.isEmpty()) - { - KServiceTypeProfile::OfferList offerList = KServiceTypeProfile::offers( qServiceType ); - if (!offerList.isEmpty()) - maxPreference = offerList.first().preference(); - } - - KDesktopFile *desktop = 0; - if (!oldPath.isEmpty() && (oldPath != newPath)) - { - KDesktopFile orig(oldPath, true); - desktop = orig.copyTo(newPath); - } - else - { - desktop = new KDesktopFile(newPath); - } - desktop->writeEntry("Type", TQString::fromLatin1("Application")); - desktop->writeEntry("Name", initialServiceName); - desktop->writePathEntry("Exec", fullExec); - if (terminal->isChecked()) - { - desktop->writeEntry("Terminal", true); - // only add --noclose when we are sure it is konsole we're using - if (preferredTerminal == "konsole" && nocloseonexit->isChecked()) - desktop->writeEntry("TerminalOptions", "--noclose"); - } - else - { - desktop->writeEntry("Terminal", false); - } - desktop->writeEntry("InitialPreference", maxPreference + 1); - - - if (bRemember || d->saveNewApps) - { - TQStringList mimeList = desktop->readListEntry("MimeType", ';'); - if (!qServiceType.isEmpty() && !mimeList.contains(qServiceType)) - mimeList.append(qServiceType); - desktop->writeEntry("MimeType", mimeList, ';'); - - if ( !qServiceType.isEmpty() ) - { - // Also make sure the "auto embed" setting for this mimetype is off - KDesktopFile mimeDesktop( locateLocal( "mime", qServiceType + ".desktop" ) ); - mimeDesktop.writeEntry( "X-TDE-AutoEmbed", false ); - mimeDesktop.sync(); - } - } - - // write it all out to the file - desktop->sync(); - delete desktop; - - KService::rebuildKSycoca(this); - - m_pService = KService::serviceByMenuId( menuId ); - - Q_ASSERT( m_pService ); - - accept(); -} - -TQString KOpenWithDlg::text() const -{ - if (!m_command.isEmpty()) - return m_command; - else - return edit->url(); -} - -void KOpenWithDlg::hideNoCloseOnExit() -{ - // uncheck the checkbox because the value could be used when "Run in Terminal" is selected - nocloseonexit->setChecked( false ); - nocloseonexit->hide(); -} - -void KOpenWithDlg::hideRunInTerminal() -{ - terminal->hide(); - hideNoCloseOnExit(); -} - -void KOpenWithDlg::accept() -{ - KHistoryCombo *combo = static_cast<KHistoryCombo*>( edit->comboBox() ); - if ( combo ) { - combo->addToHistory( edit->url() ); - - TDEConfig *kc = TDEGlobal::config(); - TDEConfigGroupSaver ks( kc, TQString::fromLatin1("Open-with settings") ); - kc->writeEntry( TQString::fromLatin1("History"), combo->historyItems() ); - kc->writeEntry(TQString::fromLatin1("CompletionMode"), - combo->completionMode()); - // don't store the completion-list, as it contains all of KURLCompletion's - // executables - kc->sync(); - } - - TQDialog::accept(); -} - - -/////////////// - -#ifndef KDE_NO_COMPAT -bool KFileOpenWithHandler::displayOpenWithDialog( const KURL::List& urls ) -{ - KOpenWithDlg l( urls, i18n("Open with:"), TQString::null, 0L ); - if ( l.exec() ) - { - KService::Ptr service = l.service(); - if ( !!service ) - return KRun::run( *service, urls ); - - kdDebug(250) << "No service set, running " << l.text() << endl; - return KRun::run( l.text(), urls ); - } - return false; -} -#endif - -#include "kopenwith.moc" -#include "kopenwith_p.moc" - diff --git a/kio/kfile/kopenwith.h b/kio/kfile/kopenwith.h deleted file mode 100644 index 90c43ceb1..000000000 --- a/kio/kfile/kopenwith.h +++ /dev/null @@ -1,209 +0,0 @@ -// -/* This file is part of the KDE libraries - Copyright (C) 2000 David Faure <faure@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ -#ifndef __open_with_h__ -#define __open_with_h__ - -#include <tqdialog.h> - -#include <kurl.h> -#include <krun.h> -#include <kservice.h> - -class TDEApplicationTree; -class KURLRequester; - -class TQWidget; -class TQCheckBox; -class TQPushButton; -class TQLabel; - -class KOpenWithDlgPrivate; - -/* ------------------------------------------------------------------------- */ -/** - * "Open with" dialog box. - * Used automatically by KRun, and used by libkonq. - * - * @author David Faure <faure@kde.org> - */ -class TDEIO_EXPORT KOpenWithDlg : public TQDialog //#TODO: Use KDialogBase for KDE4 -{ - Q_OBJECT -public: - - /** - * Create a dialog that asks for a application to open a given - * URL(s) with. - * - * @param urls the URLs that should be opened. The list can be empty, - * if the dialog is used to choose an application but not for some particular URLs. - * @param parent parent widget - */ - KOpenWithDlg( const KURL::List& urls, TQWidget *parent = 0L ); - - /** - * Create a dialog that asks for a application to open a given - * URL(s) with. - * - * @param urls is the URL that should be opened - * @param text appears as a label on top of the entry box. - * @param value is the initial value of the line - * @param parent parent widget - */ - KOpenWithDlg( const KURL::List& urls, const TQString& text, const TQString& value, - TQWidget *parent = 0L ); - - /** - * Create a dialog to select a service for a given service type. - * Note that this dialog doesn't apply to URLs. - * - * @param serviceType the service type we want to choose an application for. - * @param value is the initial value of the line - * @param parent parent widget - */ - KOpenWithDlg( const TQString& serviceType, const TQString& value, - TQWidget *parent = 0L ); - - /** - * Create a dialog to select an application - * Note that this dialog doesn't apply to URLs. - * - * @param parent parent widget - * @since 3.1 - */ - KOpenWithDlg( TQWidget *parent = 0L ); - - /** - * Destructor - */ - ~KOpenWithDlg(); - - /** - * @return the text the user entered - */ - TQString text() const; - /** - * Hide the "Do not &close when command exits" Checkbox - */ - void hideNoCloseOnExit(); - /** - * Hide the "Run in &terminal" Checkbox - */ - void hideRunInTerminal(); - /** - * @return the chosen service in the application tree - * Can be null, if the user typed some text and didn't select a service. - */ - KService::Ptr service() const { return m_pService; } - /** - * Set whether a new .desktop file should be created if the user selects an - * application for which no corresponding .desktop file can be found. - * - * Regardless of this setting a new .desktop file may still be created if - * the user has chosen to remember the file association. - * - * The default is false: no .desktop files are created. - * @since 3.2 - */ - void setSaveNewApplications(bool b); - -public slots: - /** - * The slot for clearing the edit widget - */ - void slotClear(); - void slotSelected( const TQString&_name, const TQString& _exec ); - void slotHighlighted( const TQString& _name, const TQString& _exec ); - void slotTextChanged(); - void slotTerminalToggled(bool); - void slotDbClick(); - void slotOK(); - -protected slots: - /** - * Reimplemented from TQDialog::accept() to save history of the combobox - */ - virtual void accept(); - -protected: - - /** - * Determine service type from URLs - */ - void setServiceType( const KURL::List& _urls ); - - /** - * Create a dialog that asks for a application to open a given - * URL(s) with. - * - * @param text appears as a label on top of the entry box. - * @param value is the initial value of the line - */ - void init( const TQString& text, const TQString& value ); - - KURLRequester * edit; - TQString m_command; - - TDEApplicationTree* m_pTree; - TQLabel *label; - - TQString qName, qServiceType; - bool m_terminaldirty; - TQCheckBox *terminal, *remember, *nocloseonexit; - TQPushButton *UNUSED; - TQPushButton *UNUSED2; - - KService::Ptr m_pService; - - KOpenWithDlgPrivate *d; -}; - -/* ------------------------------------------------------------------------- */ - -#ifndef KDE_NO_COMPAT -/** - * This class handles the displayOpenWithDialog call, made by KRun - * when it has no idea what to do with a URL. - * It displays the open-with dialog box. - * - * If you use KRun you _need_ to create an instance of KFileOpenWithHandler - * (except if you can make sure you only use it for executables or - * Type=Application desktop files) - * - * - */ -class TDEIO_EXPORT_DEPRECATED KFileOpenWithHandler : public KOpenWithHandler -{ -public: - KFileOpenWithHandler() : KOpenWithHandler() {} - virtual ~KFileOpenWithHandler() {} - - /** - * Opens an open-with dialog box for @p urls - * @returns true if the operation succeeded - */ - virtual bool displayOpenWithDialog( const KURL::List& urls ); -}; -#endif - - -/* ------------------------------------------------------------------------- */ - -#endif diff --git a/kio/kfile/kopenwith_p.h b/kio/kfile/kopenwith_p.h deleted file mode 100644 index 8231da27d..000000000 --- a/kio/kfile/kopenwith_p.h +++ /dev/null @@ -1,101 +0,0 @@ -// -/* This file is part of the KDE libraries - Copyright (C) 2000 David Faure <faure@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ -#ifndef __open_with_p_h__ -#define __open_with_p_h__ - -#include <kurl.h> -#include <klistview.h> - -class KURLRequester; - -class TQWidget; -class TQCheckBox; -class TQPushButton; -class TQLabel; -class TQStringList; - - -/* ------------------------------------------------------------------------- */ - -/** - * @internal - */ -class KAppTreeListItem : public TQListViewItem -{ - bool parsed; - bool directory; - TQString path; - TQString exec; - -protected: - int compare(TQListViewItem *i, int col, bool ascending ) const; - TQString key(int column, bool ascending) const; - - void init(const TQPixmap& pixmap, bool parse, bool dir, const TQString &_path, const TQString &exec); - -public: - KAppTreeListItem( KListView* parent, const TQString & name, const TQPixmap& pixmap, - bool parse, bool dir, const TQString &p, const TQString &c ); - KAppTreeListItem( TQListViewItem* parent, const TQString & name, const TQPixmap& pixmap, - bool parse, bool dir, const TQString &p, const TQString &c ); - bool isDirectory(); - -protected: - virtual void activate(); - virtual void setOpen( bool o ); - - friend class TDEApplicationTree; -}; - -/* ------------------------------------------------------------------------- */ - -/** - * @internal - */ -class TDEApplicationTree : public KListView -{ - Q_OBJECT -public: - TDEApplicationTree( TQWidget *parent ); - - /** - * Add a group of .desktop/.kdelnk entries - */ - void addDesktopGroup( const TQString &relPath, KAppTreeListItem *item = 0 ); - - bool isDirSel(); - -protected: - void resizeEvent( TQResizeEvent *_ev ); - KAppTreeListItem* currentitem; - void cleanupTree(); - -public slots: - void slotItemHighlighted(TQListViewItem* i); - void slotSelectionChanged(TQListViewItem* i); - -signals: - void selected( const TQString& _name, const TQString& _exec ); - void highlighted( const TQString& _name, const TQString& _exec ); -}; - -/* ------------------------------------------------------------------------- */ - -#endif diff --git a/kio/kfile/kpreviewprops.cpp b/kio/kfile/kpreviewprops.cpp deleted file mode 100644 index 3672f4387..000000000 --- a/kio/kfile/kpreviewprops.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2005 Stephan Binner <binner@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - - */ - -#include "kpreviewprops.h" - -#include <tqlayout.h> - -#include <kfilemetapreview.h> -#include <kglobalsettings.h> -#include <klocale.h> - -class KPreviewPropsPlugin::KPreviewPropsPluginPrivate -{ -public: - KPreviewPropsPluginPrivate() {} - ~KPreviewPropsPluginPrivate() {} -}; - -KPreviewPropsPlugin::KPreviewPropsPlugin(KPropertiesDialog* props) - : KPropsDlgPlugin(props) -{ - d = new KPreviewPropsPluginPrivate; - - if (properties->items().count()>1) - return; - - createLayout(); -} - -void KPreviewPropsPlugin::createLayout() -{ - // let the dialog create the page frame - TQFrame* topframe = properties->addPage(i18n("P&review")); - topframe->setFrameStyle(TQFrame::NoFrame); - - TQVBoxLayout* tmp = new TQVBoxLayout(topframe, 0, 0); - - preview = new KFileMetaPreview(topframe); - - tmp->addWidget(preview) ; - connect( properties, TQT_SIGNAL( aboutToShowPage( TQWidget * ) ), TQT_SLOT( aboutToShowPage( TQWidget* ) ) ); -} - -KPreviewPropsPlugin::~KPreviewPropsPlugin() -{ - delete d; -} - -bool KPreviewPropsPlugin::supports( KFileItemList _items ) -{ - if ( _items.count() != 1) - return false; - if( !TDEGlobalSettings::showFilePreview(_items.first()->url())) - return false; - KMimeType::Ptr mt = KMimeType::findByURL( _items.first()->url() ); - if ( mt->inherits("inode/directory") || mt->name() == "application/octet-stream" ) - return false; - - //TODO Copy everything of KFileMetaPreview::previewProviderFor() ? - - return true; -} - -void KPreviewPropsPlugin::aboutToShowPage( TQWidget* widget ) -{ - if ( TQT_TQOBJECT(widget) != TQT_TQOBJECT(preview->parent()) ) - return; - - disconnect( properties, TQT_SIGNAL( aboutToShowPage( TQWidget * ) ), this, TQT_SLOT( aboutToShowPage( TQWidget* ) ) ); - preview->showPreview(properties->item()->url()); -} - -#include "kpreviewprops.moc" diff --git a/kio/kfile/kpreviewprops.h b/kio/kfile/kpreviewprops.h deleted file mode 100644 index d934af22a..000000000 --- a/kio/kfile/kpreviewprops.h +++ /dev/null @@ -1,57 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2005 Stephan Binner <binner@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - - */ - -#ifndef __KPREVIEWPROPS_H__ -#define __KPREVIEWPROPS_H__ - -#include <kpropertiesdialog.h> - -class KFileMetaPreview; - -/*! - * PreviewProps plugin - * This plugin displays a preview of the given file - * @since 3.5 - */ -class TDEIO_EXPORT KPreviewPropsPlugin : public KPropsDlgPlugin -{ - Q_OBJECT - -public: - - KPreviewPropsPlugin( KPropertiesDialog *_props ); - virtual ~KPreviewPropsPlugin(); - - /** - * Tests whether a preview for the first item should be shown - */ - static bool supports( KFileItemList _items ); - -private slots: - void aboutToShowPage( TQWidget* ); - -private: - KFileMetaPreview* preview; - void createLayout(); - - class KPreviewPropsPluginPrivate; - KPreviewPropsPluginPrivate *d; -}; - -#endif diff --git a/kio/kfile/kpreviewwidgetbase.cpp b/kio/kfile/kpreviewwidgetbase.cpp deleted file mode 100644 index 979da919e..000000000 --- a/kio/kfile/kpreviewwidgetbase.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * This file is part of the KDE project. - * Copyright (C) 2003 Carsten Pfeiffer <pfeiffer@kde.org> - * - * You can Freely distribute this program under the GNU Library General Public - * License. See the file "COPYING" for the exact licensing terms. - */ - -#include "kpreviewwidgetbase.h" -#include <tqstringlist.h> - -class KPreviewWidgetBase::KPreviewWidgetBasePrivate -{ -public: - TQStringList supportedMimeTypes; -}; - -TQPtrDict<KPreviewWidgetBase::KPreviewWidgetBasePrivate> * KPreviewWidgetBase::s_private; - -KPreviewWidgetBase::KPreviewWidgetBase( TQWidget *parent, const char *name ) - : TQWidget( parent, name ) -{ - if ( !s_private ) - s_private = new TQPtrDict<KPreviewWidgetBasePrivate>(); - - s_private->insert( this, new KPreviewWidgetBasePrivate() ); -} - -KPreviewWidgetBase::~KPreviewWidgetBase() -{ - s_private->remove( this ); - if ( s_private->isEmpty() ) - { - delete s_private; - s_private = 0L; - } -} - -void KPreviewWidgetBase::setSupportedMimeTypes( const TQStringList& mimeTypes ) -{ - d()->supportedMimeTypes = mimeTypes; -} - -TQStringList KPreviewWidgetBase::supportedMimeTypes() const -{ - return d()->supportedMimeTypes; -} - -#include "kpreviewwidgetbase.moc" diff --git a/kio/kfile/kpreviewwidgetbase.h b/kio/kfile/kpreviewwidgetbase.h deleted file mode 100644 index 3597070ee..000000000 --- a/kio/kfile/kpreviewwidgetbase.h +++ /dev/null @@ -1,92 +0,0 @@ -/* This file is part of the KDE libraries - * Copyright (C) 2001 Frerich Raabe <raabe@kde.org> - * 2003 Carsten Pfeiffer <pfeiffer@kde.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifndef __KPREVIEWWIDGETBASE_H__ -#define __KPREVIEWWIDGETBASE_H__ - -#include <tqptrdict.h> -#include <tqwidget.h> - -#include <tdelibs_export.h> - -class KURL; - -/** - * Abstract baseclass for all preview widgets which shall be used via - * KFileDialog::setPreviewWidget(const KPreviewWidgetBase *). - * Ownership will be transferred to KFileDialog, so you have to create - * the preview with "new" and let KFileDialog delete it. - * - * Just derive your custom preview widget from KPreviewWidgetBase and implement - * all the pure virtual methods. The slot showPreview(const KURL &) is called - * every time the file selection changes. - * - * @short Abstract baseclass for all preview widgets. - * @author Frerich Raabe <raabe@kde.org> - */ -class TDEIO_EXPORT KPreviewWidgetBase : public TQWidget -{ - Q_OBJECT - -public: - /** - * Constructor. Construct the user interface of your preview widget here - * and pass the KFileDialog this preview widget is going to be used in as - * the parent. - * - * @param parent The KFileDialog this preview widget is going to be used in - * @param name The internal name of this object - */ - KPreviewWidgetBase(TQWidget *parent, const char *name=0); - ~KPreviewWidgetBase(); - -public slots: - /** - * This slot is called every time the user selects another file in the - * file dialog. Implement the stuff necessary to reflect the change here. - * - * @param url The URL of the currently selected file. - */ - virtual void showPreview(const KURL &url) = 0; - - /** - * Reimplement this to clear the preview. This is called when e.g. the - * selection is cleared or when multiple selections exist, or the directory - * is changed. - */ - virtual void clearPreview() = 0; - - TQStringList supportedMimeTypes() const; - -protected: - void setSupportedMimeTypes( const TQStringList& mimeTypes ); - -protected: - virtual void virtual_hook( int, void* ) {}; - -private: - class KPreviewWidgetBasePrivate; - KPreviewWidgetBasePrivate * d() const { - return s_private->find( const_cast<KPreviewWidgetBase*>( this ) ); - } - static TQPtrDict<KPreviewWidgetBasePrivate> * s_private; -}; - -#endif diff --git a/kio/kfile/kpropertiesdesktopadvbase.ui b/kio/kfile/kpropertiesdesktopadvbase.ui deleted file mode 100644 index fd8e39781..000000000 --- a/kio/kfile/kpropertiesdesktopadvbase.ui +++ /dev/null @@ -1,280 +0,0 @@ - -<!DOCTYPE UI><UI version="3.2" stdsetdef="1"> -<class>KPropertiesDesktopAdvBase</class> -<widget class="TQWidget"> - <property name="name"> - <cstring>widget11</cstring> - </property> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>463</width> - <height>294</height> - </rect> - </property> - <vbox> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <property name="margin"> - <number>0</number> - </property> - <widget class="TQButtonGroup"> - <property name="name"> - <cstring>buttonGroup2</cstring> - </property> - <property name="title"> - <string>Terminal</string> - </property> - <grid> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <spacer row="1" column="0" rowspan="2" colspan="1"> - <property name="name"> - <cstring>spacer3</cstring> - </property> - <property name="orientation"> - <enum>Horizontal</enum> - </property> - <property name="sizeType"> - <enum>Minimum</enum> - </property> - <property name="sizeHint"> - <size> - <width>20</width> - <height>20</height> - </size> - </property> - </spacer> - <widget class="TQCheckBox" row="0" column="0" rowspan="1" colspan="3"> - <property name="name"> - <cstring>terminalCheck</cstring> - </property> - <property name="text"> - <string>&Run in terminal</string> - </property> - <property name="whatsThis" stdset="0"> - <string>Check this option if the application you want to run is a text mode application or if you want the information that is provided by the terminal emulator window.</string> - </property> - </widget> - <widget class="TQLabel" row="2" column="1"> - <property name="name"> - <cstring>terminalEditLabel</cstring> - </property> - <property name="text"> - <string>&Terminal options:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>terminalEdit</cstring> - </property> - </widget> - <widget class="TQCheckBox" row="1" column="1" rowspan="1" colspan="2"> - <property name="name"> - <cstring>terminalCloseCheck</cstring> - </property> - <property name="text"> - <string>Do not &close when command exits</string> - </property> - <property name="whatsThis" stdset="0"> - <string>Check this option if the text mode application offers relevant information on exit. Keeping the terminal emulator open allows you to retrieve this information.</string> - </property> - </widget> - <widget class="KLineEdit" row="2" column="2"> - <property name="name"> - <cstring>terminalEdit</cstring> - </property> - </widget> - </grid> - </widget> - <widget class="TQButtonGroup"> - <property name="name"> - <cstring>buttonGroup2_2</cstring> - </property> - <property name="title"> - <string>User</string> - </property> - <grid> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <widget class="TQCheckBox" row="0" column="0" rowspan="1" colspan="3"> - <property name="name"> - <cstring>suidCheck</cstring> - </property> - <property name="text"> - <string>Ru&n as a different user</string> - </property> - <property name="whatsThis" stdset="0"> - <string>Check this option if you want to run this application with a different user id. Every process has a different user id associated with it. This id code determines file access and other permissions. The password of the user is required to use this option.</string> - </property> - </widget> - <spacer row="1" column="0"> - <property name="name"> - <cstring>spacer3_2</cstring> - </property> - <property name="orientation"> - <enum>Horizontal</enum> - </property> - <property name="sizeType"> - <enum>Minimum</enum> - </property> - <property name="sizeHint"> - <size> - <width>20</width> - <height>20</height> - </size> - </property> - </spacer> - <widget class="TQLabel" row="1" column="1"> - <property name="name"> - <cstring>suidEditLabel</cstring> - </property> - <property name="text"> - <string>&Username:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>suidEdit</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string>Enter the user name you want to run the application as.</string> - </property> - </widget> - <widget class="KLineEdit" row="1" column="2"> - <property name="name"> - <cstring>suidEdit</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string>Enter the user name you want to run the application as here.</string> - </property> - </widget> - </grid> - </widget> - <widget class="TQButtonGroup"> - <property name="name"> - <cstring>buttonGroup4</cstring> - </property> - <property name="title"> - <string>Startup</string> - </property> - <grid> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <widget class="TQCheckBox" row="0" column="0" rowspan="1" colspan="3"> - <property name="name"> - <cstring>startupInfoCheck</cstring> - </property> - <property name="text"> - <string>Enable &launch feedback</string> - </property> - <property name="whatsThis" stdset="0"> - <string>Check this option if you want to make clear that your application has started. This visual feedback may appear as a busy cursor or in the taskbar.</string> - </property> - </widget> - <widget class="TQCheckBox" row="1" column="0" rowspan="1" colspan="3"> - <property name="name"> - <cstring>systrayCheck</cstring> - </property> - <property name="text"> - <string>&Place in system tray</string> - </property> - <property name="whatsThis" stdset="0"> - <string>Check this option if you want to have a system tray handle for your application.</string> - </property> - </widget> - <widget class="TQLabel" row="2" column="0"> - <property name="name"> - <cstring>textLabel12</cstring> - </property> - <property name="text"> - <string>&DCOP registration:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>dcopCombo</cstring> - </property> - </widget> - <widget class="TQComboBox" row="2" column="1"> - <item> - <property name="text"> - <string>None</string> - </property> - </item> - <item> - <property name="text"> - <string>Multiple Instances</string> - </property> - </item> - <item> - <property name="text"> - <string>Single Instance</string> - </property> - </item> - <item> - <property name="text"> - <string>Run Until Finished</string> - </property> - </item> - <property name="name"> - <cstring>dcopCombo</cstring> - </property> - </widget> - <spacer row="2" column="2"> - <property name="name"> - <cstring>spacer33</cstring> - </property> - <property name="orientation"> - <enum>Horizontal</enum> - </property> - <property name="sizeType"> - <enum>Expanding</enum> - </property> - <property name="sizeHint"> - <size> - <width>50</width> - <height>20</height> - </size> - </property> - </spacer> - </grid> - </widget> - </vbox> -</widget> -<connections> - <connection> - <sender>terminalCheck</sender> - <signal>toggled(bool)</signal> - <receiver>terminalCloseCheck</receiver> - <slot>setEnabled(bool)</slot> - </connection> - <connection> - <sender>terminalCheck</sender> - <signal>toggled(bool)</signal> - <receiver>terminalEdit</receiver> - <slot>setEnabled(bool)</slot> - </connection> - <connection> - <sender>terminalCheck</sender> - <signal>toggled(bool)</signal> - <receiver>terminalEditLabel</receiver> - <slot>setEnabled(bool)</slot> - </connection> - <connection> - <sender>suidCheck</sender> - <signal>toggled(bool)</signal> - <receiver>suidEdit</receiver> - <slot>setEnabled(bool)</slot> - </connection> - <connection> - <sender>suidCheck</sender> - <signal>toggled(bool)</signal> - <receiver>suidEditLabel</receiver> - <slot>setEnabled(bool)</slot> - </connection> -</connections> -<includes> - <include location="global" impldecl="in implementation">klineedit.h</include> -</includes> -<layoutdefaults spacing="6" margin="11"/> -</UI> diff --git a/kio/kfile/kpropertiesdesktopbase.ui b/kio/kfile/kpropertiesdesktopbase.ui deleted file mode 100644 index a0894dc70..000000000 --- a/kio/kfile/kpropertiesdesktopbase.ui +++ /dev/null @@ -1,316 +0,0 @@ -<!DOCTYPE UI><UI version="3.2" stdsetdef="1"> -<class>KPropertiesDesktopBase</class> -<widget class="TQWidget"> - <property name="name"> - <cstring>KPropertiesDesktopBase</cstring> - </property> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>449</width> - <height>304</height> - </rect> - </property> - <grid> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <property name="margin"> - <number>0</number> - </property> - <spacer row="5" column="3" rowspan="1" colspan="2"> - <property name="name"> - <cstring>spacer6</cstring> - </property> - <property name="orientation"> - <enum>Vertical</enum> - </property> - <property name="sizeType"> - <enum>Minimum</enum> - </property> - <property name="sizeHint"> - <size> - <width>20</width> - <height>16</height> - </size> - </property> - </spacer> - <widget class="TQLabel" row="6" column="0" rowspan="1" colspan="7"> - <property name="name"> - <cstring>textLabel7</cstring> - </property> - <property name="text"> - <string>&Supported file types:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>filetypeList</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string><qt><p>This list should show the types of file that your application can handle. This list is organized by <u>mimetypes</u>.</p> -<p>MIME, Multipurpose Internet (e)Mail Extension, is a standard protocol for identifying the type of data based on filename extensions and correspondent <u>mimetypes</u>. Example: the "bmp" part that comes after the dot in flower.bmp indicates that it is a specific kind of image, <u>image/x-bmp</u>. To know which application should open each type of file, the system should be informed about the abilities of each application to handle these extensions and mimetypes.</p> -<p>If you want to associate this application with one or more mimetypes that are not in this list, click on the button <b>Add</b> below. If there are one or more filetypes that this application cannot handle, you may want to remove them from the list clicking on the button <b>Remove</b> below.</p></qt></string> - </property> - </widget> - <widget class="KListView" row="7" column="0" rowspan="1" colspan="7"> - <column> - <property name="text"> - <string>Mimetype</string> - </property> - <property name="clickable"> - <bool>true</bool> - </property> - <property name="resizable"> - <bool>true</bool> - </property> - </column> - <column> - <property name="text"> - <string>Description</string> - </property> - <property name="clickable"> - <bool>true</bool> - </property> - <property name="resizable"> - <bool>true</bool> - </property> - </column> - <property name="name"> - <cstring>filetypeList</cstring> - </property> - <property name="sizePolicy"> - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>7</vsizetype> - <horstretch>0</horstretch> - <verstretch>1</verstretch> - </sizepolicy> - </property> - <property name="fullWidth"> - <bool>true</bool> - </property> - <property name="whatsThis" stdset="0"> - <string><qt><p>This list should show the types of file that your application can handle. This list is organized by <u>mimetypes</u>.</p> -<p>MIME, Multipurpose Internet (e)Mail Extension, is a standard protocol for identifying the type of data based on filename extensions and correspondent <u>mimetypes</u>. Example: the "bmp" part that comes after the dot in flower.bmp indicates that it is a specific kind of image, <u>image/x-bmp</u>. To know which application should open each type of file, the system should be informed about the abilities of each application to handle these extensions and mimetypes.</p> -<p>If you want to associate this application with one or more mimetypes that are not in this list, click on the button <b>Add</b> below. If there are one or more filetypes that this application cannot handle, you may want to remove them from the list clicking on the button <b>Remove</b> below.</p></qt></string> - </property> - </widget> - <widget class="TQLabel" row="0" column="0" rowspan="1" colspan="2"> - <property name="name"> - <cstring>nameLabel</cstring> - </property> - <property name="text"> - <string>&Name:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>nameEdit</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string>Type the name you want to give to this application here. This application will appear under this name in the applications menu and in the panel.</string> - </property> - </widget> - <widget class="KLineEdit" row="0" column="2" rowspan="1" colspan="5"> - <property name="name"> - <cstring>nameEdit</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string>Type the name you want to give to this application here. This application will appear under this name in the applications menu and in the panel.</string> - </property> - </widget> - <widget class="TQLabel" row="1" column="0" rowspan="1" colspan="2"> - <property name="name"> - <cstring>textLabel2</cstring> - </property> - <property name="text"> - <string>&Description:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>genNameEdit</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string>Type the description of this application, based on its use, here. Examples: a dial up application (KPPP) would be "Dial up tool".</string> - </property> - </widget> - <widget class="KLineEdit" row="1" column="2" rowspan="1" colspan="5"> - <property name="name"> - <cstring>genNameEdit</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string>Type the description of this application, based on its use, here. Examples: a dial up application (KPPP) would be "Dial up tool".</string> - </property> - </widget> - <widget class="TQLabel" row="2" column="0" rowspan="1" colspan="2"> - <property name="name"> - <cstring>textLabel3</cstring> - </property> - <property name="text"> - <string>Comm&ent:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>commentEdit</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string>Type any comment you think is useful here.</string> - </property> - </widget> - <widget class="KLineEdit" row="2" column="2" rowspan="1" colspan="5"> - <property name="name"> - <cstring>commentEdit</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string>Type any comment you think is useful here.</string> - </property> - </widget> - <widget class="TQLabel" row="3" column="0" rowspan="1" colspan="2"> - <property name="name"> - <cstring>textLabel4</cstring> - </property> - <property name="text"> - <string>Co&mmand:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>commandEdit</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string>Type the command to start this application here. - -Following the command, you can have several place holders which will be replaced with the actual values when the actual program is run: -%f - a single file name -%F - a list of files; use for applications that can open several local files at once -%u - a single URL -%U - a list of URLs -%d - the directory of the file to open -%D - a list of directories -%i - the icon -%m - the mini-icon -%c - the caption</string> - </property> - </widget> - <widget class="KLineEdit" row="3" column="2" rowspan="1" colspan="4"> - <property name="name"> - <cstring>commandEdit</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string>Type the command to start this application here. - -Following the command, you can have several place holders which will be replaced with the actual values when the actual program is run: -%f - a single file name -%F - a list of files; use for applications that can open several local files at once -%u - a single URL -%U - a list of URLs -%d - the directory of the file to open -%D - a list of directories -%i - the icon -%m - the mini-icon -%c - the caption</string> - </property> - </widget> - <widget class="TQPushButton" row="3" column="6"> - <property name="name"> - <cstring>browseButton</cstring> - </property> - <property name="text"> - <string>&Browse...</string> - </property> - <property name="whatsThis" stdset="0"> - <string>Click here to browse your file system in order to find the desired executable.</string> - </property> - </widget> - <widget class="TQLabel" row="4" column="0" rowspan="1" colspan="2"> - <property name="name"> - <cstring>textLabel5</cstring> - </property> - <property name="text"> - <string>&Work path:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>pathEdit</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string>Sets the working directory for your application.</string> - </property> - </widget> - <widget class="KURLRequester" row="4" column="2" rowspan="1" colspan="5"> - <property name="name"> - <cstring>pathEdit</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string>Sets the working directory for your application.</string> - </property> - </widget> - <widget class="TQPushButton" row="8" column="0"> - <property name="name"> - <cstring>addFiletypeButton</cstring> - </property> - <property name="text"> - <string>Add...</string> - </property> - <property name="whatsThis" stdset="0"> - <string>Click on this button if you want to add a type of file (mimetype) that your application can handle.</string> - </property> - </widget> - <spacer row="8" column="1" rowspan="1" colspan="2"> - <property name="name"> - <cstring>spacer31_2</cstring> - </property> - <property name="orientation"> - <enum>Horizontal</enum> - </property> - <property name="sizeType"> - <enum>MinimumExpanding</enum> - </property> - <property name="sizeHint"> - <size> - <width>53</width> - <height>20</height> - </size> - </property> - </spacer> - <widget class="TQPushButton" row="8" column="3"> - <property name="name"> - <cstring>delFiletypeButton</cstring> - </property> - <property name="text"> - <string>Remove</string> - </property> - <property name="whatsThis" stdset="0"> - <string>If you want to remove a type of file (mimetype) that your application cannot handle, select the mimetype in the list above and click on this button.</string> - </property> - </widget> - <spacer row="8" column="4"> - <property name="name"> - <cstring>spacer31_3</cstring> - </property> - <property name="orientation"> - <enum>Horizontal</enum> - </property> - <property name="sizeType"> - <enum>MinimumExpanding</enum> - </property> - <property name="sizeHint"> - <size> - <width>53</width> - <height>20</height> - </size> - </property> - </spacer> - <widget class="TQPushButton" row="8" column="5" rowspan="1" colspan="2"> - <property name="name"> - <cstring>advancedButton</cstring> - </property> - <property name="text"> - <string>Ad&vanced Options</string> - </property> - <property name="whatsThis" stdset="0"> - <string>Click here to modify the way this application will run, launch feedback, DCOP options or to run it as a different user.</string> - </property> - </widget> - </grid> -</widget> -<includes> - <include location="global" impldecl="in implementation">klineedit.h</include> - <include location="global" impldecl="in implementation">kurlrequester.h</include> - <include location="global" impldecl="in implementation">klistview.h</include> -</includes> -<layoutdefaults spacing="6" margin="11"/> -</UI> diff --git a/kio/kfile/kpropertiesdialog.cpp b/kio/kfile/kpropertiesdialog.cpp deleted file mode 100644 index 0b1f6c05b..000000000 --- a/kio/kfile/kpropertiesdialog.cpp +++ /dev/null @@ -1,4170 +0,0 @@ -/* This file is part of the KDE project - - Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> - Copyright (c) 1999, 2000 Preston Brown <pbrown@kde.org> - Copyright (c) 2000 Simon Hausmann <hausmann@kde.org> - Copyright (c) 2000 David Faure <faure@kde.org> - Copyright (c) 2003 Waldo Bastian <bastian@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -/* - * kpropertiesdialog.cpp - * View/Edit Properties of files, locally or remotely - * - * some FilePermissionsPropsPlugin-changes by - * Henner Zeller <zeller@think.de> - * some layout management by - * Bertrand Leconte <B.Leconte@mail.dotcom.fr> - * the rest of the layout management, bug fixes, adaptation to libkio, - * template feature by - * David Faure <faure@kde.org> - * More layout, cleanups, and fixes by - * Preston Brown <pbrown@kde.org> - * Plugin capability, cleanups and port to KDialogBase by - * Simon Hausmann <hausmann@kde.org> - * KDesktopPropsPlugin by - * Waldo Bastian <bastian@kde.org> - */ - -#include <config.h> -extern "C" { -#include <pwd.h> -#include <grp.h> -#include <time.h> -#include <sys/types.h> -} -#include <unistd.h> -#include <errno.h> -#include <assert.h> -#include <algorithm> -#include <functional> - -#include <tqfile.h> -#include <tqdir.h> -#include <tqlabel.h> -#include <tqpushbutton.h> -#include <tqcheckbox.h> -#include <tqstrlist.h> -#include <tqstringlist.h> -#include <tqtextstream.h> -#include <tqpainter.h> -#include <tqlayout.h> -#include <tqcombobox.h> -#include <tqgroupbox.h> -#include <tqwhatsthis.h> -#include <tqtooltip.h> -#include <tqstyle.h> -#include <tqprogressbar.h> -#include <tqvbox.h> -#include <tqvaluevector.h> - -#ifdef USE_POSIX_ACL -extern "C" { -#include <sys/param.h> -#ifdef HAVE_SYS_MOUNT_H -#include <sys/mount.h> -#endif -#ifdef HAVE_SYS_XATTR_H -#include <sys/xattr.h> -#endif -} -#endif - -#include <kapplication.h> -#include <kdialog.h> -#include <kdirsize.h> -#include <kdirwatch.h> -#include <kdirnotify_stub.h> -#include <kdiskfreesp.h> -#include <kdebug.h> -#include <kdesktopfile.h> -#include <kicondialog.h> -#include <kurl.h> -#include <kurlrequester.h> -#include <klocale.h> -#include <kglobal.h> -#include <kglobalsettings.h> -#include <kstandarddirs.h> -#include <kio/job.h> -#include <kio/chmodjob.h> -#include <kio/renamedlg.h> -#include <kio/netaccess.h> -#include <kio/kservicetypefactory.h> -#include <kfiledialog.h> -#include <kmimetype.h> -#include <kmountpoint.h> -#include <kiconloader.h> -#include <kmessagebox.h> -#include <kservice.h> -#include <kcompletion.h> -#include <klineedit.h> -#include <kseparator.h> -#include <ksqueezedtextlabel.h> -#include <klibloader.h> -#include <ktrader.h> -#include <tdeparts/componentfactory.h> -#include <kmetaprops.h> -#include <kpreviewprops.h> -#include <kprocess.h> -#include <krun.h> -#include <klistview.h> -#include <kacl.h> -#include "kfilesharedlg.h" - -#include "kpropertiesdesktopbase.h" -#include "kpropertiesdesktopadvbase.h" -#include "kpropertiesmimetypebase.h" -#ifdef USE_POSIX_ACL -#include "kacleditwidget.h" -#endif - -#include "kpropertiesdialog.h" - -#ifdef Q_WS_WIN -# include <win32_utils.h> -#endif - -static TQString nameFromFileName(TQString nameStr) -{ - if ( nameStr.endsWith(".desktop") ) - nameStr.truncate( nameStr.length() - 8 ); - if ( nameStr.endsWith(".kdelnk") ) - nameStr.truncate( nameStr.length() - 7 ); - // Make it human-readable (%2F => '/', ...) - nameStr = TDEIO::decodeFileName( nameStr ); - return nameStr; -} - -mode_t KFilePermissionsPropsPlugin::fperm[3][4] = { - {S_IRUSR, S_IWUSR, S_IXUSR, S_ISUID}, - {S_IRGRP, S_IWGRP, S_IXGRP, S_ISGID}, - {S_IROTH, S_IWOTH, S_IXOTH, S_ISVTX} - }; - -class KPropertiesDialog::KPropertiesDialogPrivate -{ -public: - KPropertiesDialogPrivate() - { - m_aborted = false; - fileSharePage = 0; - } - ~KPropertiesDialogPrivate() - { - } - bool m_aborted:1; - TQWidget* fileSharePage; -}; - -KPropertiesDialog::KPropertiesDialog (KFileItem* item, - TQWidget* parent, const char* name, - bool modal, bool autoShow) - : KDialogBase (KDialogBase::Tabbed, i18n( "Properties for %1" ).arg(TDEIO::decodeFileName(item->url().fileName())), - KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, - parent, name, modal) -{ - d = new KPropertiesDialogPrivate; - assert( item ); - m_items.append( new KFileItem(*item) ); // deep copy - - m_singleUrl = item->url(); - assert(!m_singleUrl.isEmpty()); - - init (modal, autoShow); -} - -KPropertiesDialog::KPropertiesDialog (const TQString& title, - TQWidget* parent, const char* name, bool modal) - : KDialogBase (KDialogBase::Tabbed, i18n ("Properties for %1").arg(title), - KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, - parent, name, modal) -{ - d = new KPropertiesDialogPrivate; - - init (modal, false); -} - -KPropertiesDialog::KPropertiesDialog (KFileItemList _items, - TQWidget* parent, const char* name, - bool modal, bool autoShow) - : KDialogBase (KDialogBase::Tabbed, - // TODO: replace <never used> with "Properties for 1 item". It's very confusing how it has to be translated otherwise - // (empty translation before the "\n" is not allowed by msgfmt...) - _items.count()>1 ? i18n( "<never used>","Properties for %n Selected Items",_items.count()) : - i18n( "Properties for %1" ).arg(TDEIO::decodeFileName(_items.first()->url().fileName())), - KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, - parent, name, modal) -{ - d = new KPropertiesDialogPrivate; - - assert( !_items.isEmpty() ); - m_singleUrl = _items.first()->url(); - assert(!m_singleUrl.isEmpty()); - - KFileItemListIterator it ( _items ); - // Deep copy - for ( ; it.current(); ++it ) - m_items.append( new KFileItem( **it ) ); - - init (modal, autoShow); -} - -#ifndef KDE_NO_COMPAT -KPropertiesDialog::KPropertiesDialog (const KURL& _url, mode_t /* _mode is now unused */, - TQWidget* parent, const char* name, - bool modal, bool autoShow) - : KDialogBase (KDialogBase::Tabbed, - i18n( "Properties for %1" ).arg(TDEIO::decodeFileName(_url.fileName())), - KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, - parent, name, modal), - m_singleUrl( _url ) -{ - d = new KPropertiesDialogPrivate; - - TDEIO::UDSEntry entry; - - TDEIO::NetAccess::stat(_url, entry, parent); - - m_items.append( new KFileItem( entry, _url ) ); - init (modal, autoShow); -} -#endif - -KPropertiesDialog::KPropertiesDialog (const KURL& _url, - TQWidget* parent, const char* name, - bool modal, bool autoShow) - : KDialogBase (KDialogBase::Tabbed, - i18n( "Properties for %1" ).arg(TDEIO::decodeFileName(_url.fileName())), - KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, - parent, name, modal), - m_singleUrl( _url ) -{ - d = new KPropertiesDialogPrivate; - - TDEIO::UDSEntry entry; - - TDEIO::NetAccess::stat(_url, entry, parent); - - m_items.append( new KFileItem( entry, _url ) ); - init (modal, autoShow); -} - -KPropertiesDialog::KPropertiesDialog (const KURL& _tempUrl, const KURL& _currentDir, - const TQString& _defaultName, - TQWidget* parent, const char* name, - bool modal, bool autoShow) - : KDialogBase (KDialogBase::Tabbed, - i18n( "Properties for %1" ).arg(TDEIO::decodeFileName(_tempUrl.fileName())), - KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, - parent, name, modal), - - m_singleUrl( _tempUrl ), - m_defaultName( _defaultName ), - m_currentDir( _currentDir ) -{ - d = new KPropertiesDialogPrivate; - - assert(!m_singleUrl.isEmpty()); - - // Create the KFileItem for the _template_ file, in order to read from it. - m_items.append( new KFileItem( KFileItem::Unknown, KFileItem::Unknown, m_singleUrl ) ); - init (modal, autoShow); -} - -bool KPropertiesDialog::showDialog(KFileItem* item, TQWidget* parent, - const char* name, bool modal) -{ -#ifdef Q_WS_WIN - TQString localPath = item->localPath(); - if (!localPath.isEmpty()) - return showWin32FilePropertyDialog(localPath); -#endif - new KPropertiesDialog(item, parent, name, modal); - return true; -} - -bool KPropertiesDialog::showDialog(const KURL& _url, TQWidget* parent, - const char* name, bool modal) -{ -#ifdef Q_WS_WIN - if (_url.isLocalFile()) - return showWin32FilePropertyDialog( _url.path() ); -#endif - new KPropertiesDialog(_url, parent, name, modal); - return true; -} - -bool KPropertiesDialog::showDialog(const KFileItemList& _items, TQWidget* parent, - const char* name, bool modal) -{ - if (_items.count()==1) - return KPropertiesDialog::showDialog(_items.getFirst(), parent, name, modal); - new KPropertiesDialog(_items, parent, name, modal); - return true; -} - -void KPropertiesDialog::init (bool modal, bool autoShow) -{ - m_pageList.setAutoDelete( true ); - m_items.setAutoDelete( true ); - - insertPages(); - - if (autoShow) - { - if (!modal) - show(); - else - exec(); - } -} - -void KPropertiesDialog::showFileSharingPage() -{ - if (d->fileSharePage) { - showPage( pageIndex( d->fileSharePage)); - } -} - -void KPropertiesDialog::setFileSharingPage(TQWidget* page) { - d->fileSharePage = page; -} - - -void KPropertiesDialog::setFileNameReadOnly( bool ro ) -{ - KPropsDlgPlugin *it; - - for ( it=m_pageList.first(); it != 0L; it=m_pageList.next() ) - { - KFilePropsPlugin* plugin = dynamic_cast<KFilePropsPlugin*>(it); - if ( plugin ) { - plugin->setFileNameReadOnly( ro ); - break; - } - } -} - -void KPropertiesDialog::slotStatResult( TDEIO::Job * ) -{ -} - -KPropertiesDialog::~KPropertiesDialog() -{ - m_pageList.clear(); - delete d; -} - -void KPropertiesDialog::insertPlugin (KPropsDlgPlugin* plugin) -{ - connect (plugin, TQT_SIGNAL (changed ()), - plugin, TQT_SLOT (setDirty ())); - - m_pageList.append (plugin); -} - -bool KPropertiesDialog::canDisplay( KFileItemList _items ) -{ - // TODO: cache the result of those calls. Currently we parse .desktop files far too many times - return KFilePropsPlugin::supports( _items ) || - KFilePermissionsPropsPlugin::supports( _items ) || - KDesktopPropsPlugin::supports( _items ) || - KBindingPropsPlugin::supports( _items ) || - KURLPropsPlugin::supports( _items ) || - KDevicePropsPlugin::supports( _items ) || - KFileMetaPropsPlugin::supports( _items ) || - KPreviewPropsPlugin::supports( _items ); -} - -void KPropertiesDialog::slotOk() -{ - KPropsDlgPlugin *page; - d->m_aborted = false; - - KFilePropsPlugin * filePropsPlugin = 0L; - if ( m_pageList.first()->isA("KFilePropsPlugin") ) - filePropsPlugin = static_cast<KFilePropsPlugin *>(m_pageList.first()); - - // If any page is dirty, then set the main one (KFilePropsPlugin) as - // dirty too. This is what makes it possible to save changes to a global - // desktop file into a local one. In other cases, it doesn't hurt. - for ( page = m_pageList.first(); page != 0L; page = m_pageList.next() ) - if ( page->isDirty() && filePropsPlugin ) - { - filePropsPlugin->setDirty(); - break; - } - - // Apply the changes in the _normal_ order of the tabs now - // This is because in case of renaming a file, KFilePropsPlugin will call - // KPropertiesDialog::rename, so other tab will be ok with whatever order - // BUT for file copied from templates, we need to do the renaming first ! - for ( page = m_pageList.first(); page != 0L && !d->m_aborted; page = m_pageList.next() ) - if ( page->isDirty() ) - { - kdDebug( 250 ) << "applying changes for " << page->className() << endl; - page->applyChanges(); - // applyChanges may change d->m_aborted. - } - else - kdDebug( 250 ) << "skipping page " << page->className() << endl; - - if ( !d->m_aborted && filePropsPlugin ) - filePropsPlugin->postApplyChanges(); - - if ( !d->m_aborted ) - { - emit applied(); - emit propertiesClosed(); - deleteLater(); - accept(); - } // else, keep dialog open for user to fix the problem. -} - -void KPropertiesDialog::slotCancel() -{ - emit canceled(); - emit propertiesClosed(); - - deleteLater(); - done( Rejected ); -} - -void KPropertiesDialog::insertPages() -{ - if (m_items.isEmpty()) - return; - - if ( KFilePropsPlugin::supports( m_items ) ) - { - KPropsDlgPlugin *p = new KFilePropsPlugin( this ); - insertPlugin (p); - } - - if ( KFilePermissionsPropsPlugin::supports( m_items ) ) - { - KPropsDlgPlugin *p = new KFilePermissionsPropsPlugin( this ); - insertPlugin (p); - } - - if ( KDesktopPropsPlugin::supports( m_items ) ) - { - KPropsDlgPlugin *p = new KDesktopPropsPlugin( this ); - insertPlugin (p); - } - - if ( KBindingPropsPlugin::supports( m_items ) ) - { - KPropsDlgPlugin *p = new KBindingPropsPlugin( this ); - insertPlugin (p); - } - - if ( KURLPropsPlugin::supports( m_items ) ) - { - KPropsDlgPlugin *p = new KURLPropsPlugin( this ); - insertPlugin (p); - } - - if ( KDevicePropsPlugin::supports( m_items ) ) - { - KPropsDlgPlugin *p = new KDevicePropsPlugin( this ); - insertPlugin (p); - } - - if ( KFileMetaPropsPlugin::supports( m_items ) ) - { - KPropsDlgPlugin *p = new KFileMetaPropsPlugin( this ); - insertPlugin (p); - } - - if ( KPreviewPropsPlugin::supports( m_items ) ) - { - KPropsDlgPlugin *p = new KPreviewPropsPlugin( this ); - insertPlugin (p); - } - - if ( kapp->authorizeKAction("sharefile") && - KFileSharePropsPlugin::supports( m_items ) ) - { - KPropsDlgPlugin *p = new KFileSharePropsPlugin( this ); - insertPlugin (p); - } - - //plugins - - if ( m_items.count() != 1 ) - return; - - KFileItem *item = m_items.first(); - TQString mimetype = item->mimetype(); - - if ( mimetype.isEmpty() ) - return; - - TQString query = TQString::fromLatin1( - "('KPropsDlg/Plugin' in ServiceTypes) and " - "((not exist [X-TDE-Protocol]) or " - " ([X-TDE-Protocol] == '%1' ) )" ).arg(item->url().protocol()); - - kdDebug( 250 ) << "trader query: " << query << endl; - KTrader::OfferList offers = KTrader::self()->query( mimetype, query ); - KTrader::OfferList::ConstIterator it = offers.begin(); - KTrader::OfferList::ConstIterator end = offers.end(); - for (; it != end; ++it ) - { - KPropsDlgPlugin *plugin = KParts::ComponentFactory - ::createInstanceFromLibrary<KPropsDlgPlugin>( (*it)->library().local8Bit().data(), - TQT_TQOBJECT(this), - (*it)->name().latin1() ); - if ( !plugin ) - continue; - - insertPlugin( plugin ); - } -} - -void KPropertiesDialog::updateUrl( const KURL& _newUrl ) -{ - Q_ASSERT( m_items.count() == 1 ); - kdDebug(250) << "KPropertiesDialog::updateUrl (pre)" << _newUrl.url() << endl; - KURL newUrl = _newUrl; - emit saveAs(m_singleUrl, newUrl); - kdDebug(250) << "KPropertiesDialog::updateUrl (post)" << newUrl.url() << endl; - - m_singleUrl = newUrl; - m_items.first()->setURL( newUrl ); - assert(!m_singleUrl.isEmpty()); - // If we have an Desktop page, set it dirty, so that a full file is saved locally - // Same for a URL page (because of the Name= hack) - for ( TQPtrListIterator<KPropsDlgPlugin> it(m_pageList); it.current(); ++it ) - if ( it.current()->isA("KExecPropsPlugin") || // KDE4 remove me - it.current()->isA("KURLPropsPlugin") || - it.current()->isA("KDesktopPropsPlugin")) - { - //kdDebug(250) << "Setting page dirty" << endl; - it.current()->setDirty(); - break; - } -} - -void KPropertiesDialog::rename( const TQString& _name ) -{ - Q_ASSERT( m_items.count() == 1 ); - kdDebug(250) << "KPropertiesDialog::rename " << _name << endl; - KURL newUrl; - // if we're creating from a template : use currentdir - if ( !m_currentDir.isEmpty() ) - { - newUrl = m_currentDir; - newUrl.addPath( _name ); - } - else - { - TQString tmpurl = m_singleUrl.url(); - if ( tmpurl.at(tmpurl.length() - 1) == '/') - // It's a directory, so strip the trailing slash first - tmpurl.truncate( tmpurl.length() - 1); - newUrl = tmpurl; - newUrl.setFileName( _name ); - } - updateUrl( newUrl ); -} - -void KPropertiesDialog::abortApplying() -{ - d->m_aborted = true; -} - -class KPropsDlgPlugin::KPropsDlgPluginPrivate -{ -public: - KPropsDlgPluginPrivate() - { - } - ~KPropsDlgPluginPrivate() - { - } - - bool m_bDirty; -}; - -KPropsDlgPlugin::KPropsDlgPlugin( KPropertiesDialog *_props ) -: TQObject( _props, 0L ) -{ - d = new KPropsDlgPluginPrivate; - properties = _props; - fontHeight = 2*properties->fontMetrics().height(); - d->m_bDirty = false; -} - -KPropsDlgPlugin::~KPropsDlgPlugin() -{ - delete d; -} - -bool KPropsDlgPlugin::isDesktopFile( KFileItem * _item ) -{ - // only local files - bool isLocal; - KURL url = _item->mostLocalURL( isLocal ); - if ( !isLocal ) - return false; - - // only regular files - if ( !S_ISREG( _item->mode() ) ) - return false; - - TQString t( url.path() ); - - // only if readable - FILE *f = fopen( TQFile::encodeName(t), "r" ); - if ( f == 0L ) - return false; - fclose(f); - - // return true if desktop file - return ( (_item->mimetype() == "application/x-desktop") - || (_item->mimetype() == "media/builtin-mydocuments") - || (_item->mimetype() == "media/builtin-mycomputer") - || (_item->mimetype() == "media/builtin-mynetworkplaces") - || (_item->mimetype() == "media/builtin-printers") - || (_item->mimetype() == "media/builtin-trash") - || (_item->mimetype() == "media/builtin-webbrowser") ); -} - -void KPropsDlgPlugin::setDirty( bool b ) -{ - d->m_bDirty = b; -} - -void KPropsDlgPlugin::setDirty() -{ - d->m_bDirty = true; -} - -bool KPropsDlgPlugin::isDirty() const -{ - return d->m_bDirty; -} - -void KPropsDlgPlugin::applyChanges() -{ - kdWarning(250) << "applyChanges() not implemented in page !" << endl; -} - -/////////////////////////////////////////////////////////////////////////////// - -class KFilePropsPlugin::KFilePropsPluginPrivate -{ -public: - KFilePropsPluginPrivate() - { - dirSizeJob = 0L; - dirSizeUpdateTimer = 0L; - m_lined = 0; - m_freeSpaceLabel = 0; - } - ~KFilePropsPluginPrivate() - { - if ( dirSizeJob ) - dirSizeJob->kill(); - } - - KDirSize * dirSizeJob; - TQTimer *dirSizeUpdateTimer; - TQFrame *m_frame; - bool bMultiple; - bool bIconChanged; - bool bKDesktopMode; - bool bDesktopFile; - TQLabel *m_freeSpaceLabel; - TQString mimeType; - TQString oldFileName; - KLineEdit* m_lined; -}; - -KFilePropsPlugin::KFilePropsPlugin( KPropertiesDialog *_props ) - : KPropsDlgPlugin( _props ) -{ - d = new KFilePropsPluginPrivate; - d->bMultiple = (properties->items().count() > 1); - d->bIconChanged = false; - d->bKDesktopMode = (TQCString(tqApp->name()) == "kdesktop"); // nasty heh? - d->bDesktopFile = KDesktopPropsPlugin::supports(properties->items()); - kdDebug(250) << "KFilePropsPlugin::KFilePropsPlugin bMultiple=" << d->bMultiple << endl; - - // We set this data from the first item, and we'll - // check that the other items match against it, resetting when not. - bool isLocal; - KFileItem * item = properties->item(); - KURL url = item->mostLocalURL( isLocal ); - bool isReallyLocal = item->url().isLocalFile(); - bool bDesktopFile = isDesktopFile(item); - kdDebug() << "url=" << url << " bDesktopFile=" << bDesktopFile << " isLocal=" << isLocal << " isReallyLocal=" << isReallyLocal << endl; - mode_t mode = item->mode(); - bool hasDirs = item->isDir() && !item->isLink(); - bool hasRoot = url.path() == TQString::fromLatin1("/"); - TQString iconStr = KMimeType::iconForURL(url, mode); - TQString directory = properties->kurl().directory(); - TQString protocol = properties->kurl().protocol(); - TQString mimeComment = item->mimeComment(); - d->mimeType = item->mimetype(); - bool hasTotalSize; - TDEIO::filesize_t totalSize = item->size(hasTotalSize); - TQString magicMimeComment; - if ( isLocal ) { - KMimeType::Ptr magicMimeType = KMimeType::findByFileContent( url.path() ); - if ( magicMimeType->name() != KMimeType::defaultMimeType() ) - magicMimeComment = magicMimeType->comment(); - } - - // Those things only apply to 'single file' mode - TQString filename = TQString::null; - bool isTrash = false; - bool isDevice = false; - m_bFromTemplate = false; - - // And those only to 'multiple' mode - uint iDirCount = hasDirs ? 1 : 0; - uint iFileCount = 1-iDirCount; - - d->m_frame = properties->addPage (i18n("&General")); - - TQVBoxLayout *vbl = new TQVBoxLayout( d->m_frame, 0, - KDialog::spacingHint(), "vbl"); - TQGridLayout *grid = new TQGridLayout(0, 3); // unknown rows - grid->setColStretch(0, 0); - grid->setColStretch(1, 0); - grid->setColStretch(2, 1); - grid->addColSpacing(1, KDialog::spacingHint()); - vbl->addLayout(TQT_TQLAYOUT(grid)); - int curRow = 0; - - if ( !d->bMultiple ) - { - TQString path; - if ( !m_bFromTemplate ) { - isTrash = ( properties->kurl().protocol().find( "trash", 0, false)==0 ); - if ( properties->kurl().protocol().find("device", 0, false)==0) - isDevice = true; - // Extract the full name, but without file: for local files - if ( isReallyLocal ) - path = properties->kurl().path(); - else - path = properties->kurl().prettyURL(); - } else { - path = properties->currentDir().path(1) + properties->defaultName(); - directory = properties->currentDir().prettyURL(); - } - - if (KExecPropsPlugin::supports(properties->items()) || // KDE4 remove me - d->bDesktopFile || - KBindingPropsPlugin::supports(properties->items())) { - determineRelativePath( path ); - } - - // Extract the file name only - filename = properties->defaultName(); - if ( filename.isEmpty() ) { // no template - filename = item->name(); // this gives support for UDS_NAME, e.g. for kio_trash or kio_system - } else { - m_bFromTemplate = true; - setDirty(); // to enforce that the copy happens - } - d->oldFileName = filename; - - // Make it human-readable - filename = nameFromFileName( filename ); - - if ( d->bKDesktopMode && d->bDesktopFile ) { - KDesktopFile config( url.path(), true /* readonly */ ); - if ( config.hasKey( "Name" ) ) { - filename = config.readName(); - } - } - - oldName = filename; - } - else - { - // Multiple items: see what they have in common - KFileItemList items = properties->items(); - KFileItemListIterator it( items ); - for ( ++it /*no need to check the first one again*/ ; it.current(); ++it ) - { - KURL url = (*it)->url(); - kdDebug(250) << "KFilePropsPlugin::KFilePropsPlugin " << url.prettyURL() << endl; - // The list of things we check here should match the variables defined - // at the beginning of this method. - if ( url.isLocalFile() != isLocal ) - isLocal = false; // not all local - if ( bDesktopFile && isDesktopFile(*it) != bDesktopFile ) - bDesktopFile = false; // not all desktop files - if ( (*it)->mode() != mode ) - mode = (mode_t)0; - if ( KMimeType::iconForURL(url, mode) != iconStr ) - iconStr = "tdemultiple"; - if ( url.directory() != directory ) - directory = TQString::null; - if ( url.protocol() != protocol ) - protocol = TQString::null; - if ( !mimeComment.isNull() && (*it)->mimeComment() != mimeComment ) - mimeComment = TQString::null; - if ( isLocal && !magicMimeComment.isNull() ) { - KMimeType::Ptr magicMimeType = KMimeType::findByFileContent( url.path() ); - if ( magicMimeType->comment() != magicMimeComment ) - magicMimeComment = TQString::null; - } - - if ( url.path() == TQString::fromLatin1("/") ) - hasRoot = true; - if ( (*it)->isDir() && !(*it)->isLink() ) - { - iDirCount++; - hasDirs = true; - } - else - { - iFileCount++; - bool hasSize; - totalSize += (*it)->size(hasSize); - hasTotalSize = hasTotalSize || hasSize; - } - } - } - - if (!isReallyLocal && !protocol.isEmpty()) - { - directory += ' '; - directory += '('; - directory += protocol; - directory += ')'; - } - - if ( !isDevice && !isTrash && (bDesktopFile || S_ISDIR(mode)) && !d->bMultiple /*not implemented for multiple*/ ) - { - KIconButton *iconButton = new KIconButton( d->m_frame ); - int bsize = 66 + 2 * iconButton->style().pixelMetric(TQStyle::PM_ButtonMargin); - iconButton->setFixedSize(bsize, bsize); - iconButton->setIconSize(48); - iconButton->setStrictIconSize(false); - // This works for everything except Device icons on unmounted devices - // So we have to really open .desktop files - TQString iconStr = KMimeType::findByURL( url, mode )->icon( url, isLocal ); - if ( bDesktopFile && isLocal ) - { - KDesktopFile config( url.path(), true ); - config.setDesktopGroup(); - iconStr = config.readEntry( "Icon" ); - if ( config.hasDeviceType() ) - iconButton->setIconType( KIcon::Desktop, KIcon::Device ); - else - iconButton->setIconType( KIcon::Desktop, KIcon::Application ); - } else - iconButton->setIconType( KIcon::Desktop, KIcon::Place ); - iconButton->setIcon(iconStr); - iconArea = iconButton; - connect( iconButton, TQT_SIGNAL( iconChanged(TQString) ), - this, TQT_SLOT( slotIconChanged() ) ); - } else { - TQLabel *iconLabel = new TQLabel( d->m_frame ); - int bsize = 66 + 2 * iconLabel->style().pixelMetric(TQStyle::PM_ButtonMargin); - iconLabel->setFixedSize(bsize, bsize); - iconLabel->setPixmap( TDEGlobal::iconLoader()->loadIcon( iconStr, KIcon::Desktop, 48) ); - iconArea = iconLabel; - } - grid->addWidget(iconArea, curRow, 0, Qt::AlignLeft); - - if (d->bMultiple || isTrash || isDevice || hasRoot) - { - TQLabel *lab = new TQLabel(d->m_frame ); - if ( d->bMultiple ) - lab->setText( TDEIO::itemsSummaryString( iFileCount + iDirCount, iFileCount, iDirCount, 0, false ) ); - else - lab->setText( filename ); - nameArea = lab; - } else - { - d->m_lined = new KLineEdit( d->m_frame ); - d->m_lined->setText(filename); - nameArea = d->m_lined; - d->m_lined->setFocus(); - - // Enhanced rename: Don't highlight the file extension. - TQString pattern; - KServiceTypeFactory::self()->findFromPattern( filename, &pattern ); - if (!pattern.isEmpty() && pattern.at(0)=='*' && pattern.find('*',1)==-1) - d->m_lined->setSelection(0, filename.length()-pattern.stripWhiteSpace().length()+1); - else - { - int lastDot = filename.findRev('.'); - if (lastDot > 0) - d->m_lined->setSelection(0, lastDot); - } - - connect( d->m_lined, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SLOT( nameFileChanged(const TQString & ) ) ); - } - - grid->addWidget(nameArea, curRow++, 2); - - KSeparator* sep = new KSeparator( KSeparator::HLine, d->m_frame); - grid->addMultiCellWidget(sep, curRow, curRow, 0, 2); - ++curRow; - - TQLabel *l; - if ( !mimeComment.isEmpty() && !isDevice && !isTrash) - { - l = new TQLabel(i18n("Type:"), d->m_frame ); - - grid->addWidget(l, curRow, 0); - - TQHBox *box = new TQHBox(d->m_frame); - box->setSpacing(20); - l = new TQLabel(mimeComment, box ); - -#ifdef Q_WS_X11 - //TODO: wrap for win32 or mac? - TQPushButton *button = new TQPushButton(box); - - TQIconSet iconSet = SmallIconSet(TQString::fromLatin1("configure")); - TQPixmap pixMap = iconSet.pixmap( TQIconSet::Small, TQIconSet::Normal ); - button->setIconSet( iconSet ); - button->setFixedSize( pixMap.width()+8, pixMap.height()+8 ); - if ( d->mimeType == KMimeType::defaultMimeType() ) - TQToolTip::add(button, i18n("Create new file type")); - else - TQToolTip::add(button, i18n("Edit file type")); - - connect( button, TQT_SIGNAL( clicked() ), TQT_SLOT( slotEditFileType() )); - - if (!kapp->authorizeKAction("editfiletype")) - button->hide(); -#endif - - grid->addWidget(box, curRow++, 2); - } - - if ( !magicMimeComment.isEmpty() && magicMimeComment != mimeComment ) - { - l = new TQLabel(i18n("Contents:"), d->m_frame ); - grid->addWidget(l, curRow, 0); - - l = new TQLabel(magicMimeComment, d->m_frame ); - grid->addWidget(l, curRow++, 2); - } - - if ( !directory.isEmpty() ) - { - l = new TQLabel( i18n("Location:"), d->m_frame ); - grid->addWidget(l, curRow, 0); - - l = new KSqueezedTextLabel( d->m_frame ); - l->setText( directory ); - grid->addWidget(l, curRow++, 2); - } - - if( hasDirs || hasTotalSize ) { - l = new TQLabel(i18n("Size:"), d->m_frame ); - grid->addWidget(l, curRow, 0); - - m_sizeLabel = new TQLabel( d->m_frame ); - grid->addWidget( m_sizeLabel, curRow++, 2 ); - } else { - m_sizeLabel = 0; - } - - if ( !hasDirs ) // Only files [and symlinks] - { - if(hasTotalSize) { - m_sizeLabel->setText(TDEIO::convertSizeWithBytes(totalSize)); - } - - m_sizeDetermineButton = 0L; - m_sizeStopButton = 0L; - } - else // Directory - { - TQHBoxLayout * sizelay = new TQHBoxLayout(KDialog::spacingHint()); - grid->addLayout( sizelay, curRow++, 2 ); - - // buttons - m_sizeDetermineButton = new TQPushButton( i18n("Calculate"), d->m_frame ); - m_sizeStopButton = new TQPushButton( i18n("Stop"), d->m_frame ); - connect( m_sizeDetermineButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotSizeDetermine() ) ); - connect( m_sizeStopButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotSizeStop() ) ); - sizelay->addWidget(m_sizeDetermineButton, 0); - sizelay->addWidget(m_sizeStopButton, 0); - sizelay->addStretch(10); // so that the buttons don't grow horizontally - - // auto-launch for local dirs only, and not for '/' - if ( isLocal && !hasRoot ) - { - m_sizeDetermineButton->setText( i18n("Refresh") ); - slotSizeDetermine(); - } - else - m_sizeStopButton->setEnabled( false ); - } - - if (!d->bMultiple && item->isLink()) { - l = new TQLabel(i18n("Points to:"), d->m_frame ); - grid->addWidget(l, curRow, 0); - - l = new KSqueezedTextLabel(item->linkDest(), d->m_frame ); - grid->addWidget(l, curRow++, 2); - } - - if (!d->bMultiple) // Dates for multiple don't make much sense... - { - TQDateTime dt; - bool hasTime; - time_t tim = item->time(TDEIO::UDS_CREATION_TIME, hasTime); - if ( hasTime ) - { - l = new TQLabel(i18n("Created:"), d->m_frame ); - grid->addWidget(l, curRow, 0); - - dt.setTime_t( tim ); - l = new TQLabel(TDEGlobal::locale()->formatDateTime(dt), d->m_frame ); - grid->addWidget(l, curRow++, 2); - } - - tim = item->time(TDEIO::UDS_MODIFICATION_TIME, hasTime); - if ( hasTime ) - { - l = new TQLabel(i18n("Modified:"), d->m_frame ); - grid->addWidget(l, curRow, 0); - - dt.setTime_t( tim ); - l = new TQLabel(TDEGlobal::locale()->formatDateTime(dt), d->m_frame ); - grid->addWidget(l, curRow++, 2); - } - - tim = item->time(TDEIO::UDS_ACCESS_TIME, hasTime); - if ( hasTime ) - { - l = new TQLabel(i18n("Accessed:"), d->m_frame ); - grid->addWidget(l, curRow, 0); - - dt.setTime_t( tim ); - l = new TQLabel(TDEGlobal::locale()->formatDateTime(dt), d->m_frame ); - grid->addWidget(l, curRow++, 2); - } - } - - if ( isLocal && hasDirs ) // only for directories - { - sep = new KSeparator( KSeparator::HLine, d->m_frame); - grid->addMultiCellWidget(sep, curRow, curRow, 0, 2); - ++curRow; - - TQString mountPoint = TDEIO::findPathMountPoint( url.path() ); - - if (mountPoint != "/") - { - l = new TQLabel(i18n("Mounted on:"), d->m_frame ); - grid->addWidget(l, curRow, 0); - - l = new KSqueezedTextLabel( mountPoint, d->m_frame ); - grid->addWidget( l, curRow++, 2 ); - } - - l = new TQLabel(i18n("Free disk space:"), d->m_frame ); - grid->addWidget(l, curRow, 0); - - d->m_freeSpaceLabel = new TQLabel( d->m_frame ); - grid->addWidget( d->m_freeSpaceLabel, curRow++, 2 ); - - KDiskFreeSp * job = new KDiskFreeSp; - connect( job, TQT_SIGNAL( foundMountPoint( const unsigned long&, const unsigned long&, - const unsigned long&, const TQString& ) ), - this, TQT_SLOT( slotFoundMountPoint( const unsigned long&, const unsigned long&, - const unsigned long&, const TQString& ) ) ); - job->readDF( mountPoint ); - } - - vbl->addStretch(1); -} - -// TQString KFilePropsPlugin::tabName () const -// { -// return i18n ("&General"); -// } - -void KFilePropsPlugin::setFileNameReadOnly( bool ro ) -{ - if ( d->m_lined ) - { - d->m_lined->setReadOnly( ro ); - if (ro) - { - // Don't put the initial focus on the line edit when it is ro - TQPushButton *button = properties->actionButton(KDialogBase::Ok); - if (button) - button->setFocus(); - } - } -} - -void KFilePropsPlugin::slotEditFileType() -{ -#ifdef Q_WS_X11 - TQString mime; - if ( d->mimeType == KMimeType::defaultMimeType() ) { - int pos = d->oldFileName.findRev( '.' ); - if ( pos != -1 ) - mime = "*" + d->oldFileName.mid(pos); - else - mime = "*"; - } - else - mime = d->mimeType; - //TODO: wrap for win32 or mac? - TQString keditfiletype = TQString::fromLatin1("keditfiletype"); - KRun::runCommand( keditfiletype - + " --parent " + TQString::number( (ulong)properties->topLevelWidget()->winId()) - + " " + TDEProcess::quote(mime), - keditfiletype, keditfiletype /*unused*/); -#endif -} - -void KFilePropsPlugin::slotIconChanged() -{ - d->bIconChanged = true; - emit changed(); -} - -void KFilePropsPlugin::nameFileChanged(const TQString &text ) -{ - properties->enableButtonOK(!text.isEmpty()); - emit changed(); -} - -void KFilePropsPlugin::determineRelativePath( const TQString & path ) -{ - // now let's make it relative - TQStringList dirs; - if (KBindingPropsPlugin::supports(properties->items())) - { - m_sRelativePath =TDEGlobal::dirs()->relativeLocation("mime", path); - if (m_sRelativePath.startsWith("/")) - m_sRelativePath = TQString::null; - } - else - { - m_sRelativePath =TDEGlobal::dirs()->relativeLocation("apps", path); - if (m_sRelativePath.startsWith("/")) - { - m_sRelativePath =TDEGlobal::dirs()->relativeLocation("xdgdata-apps", path); - if (m_sRelativePath.startsWith("/")) - m_sRelativePath = TQString::null; - else - m_sRelativePath = path; - } - } - if ( m_sRelativePath.isEmpty() ) - { - if (KBindingPropsPlugin::supports(properties->items())) - kdWarning(250) << "Warning : editing a mimetype file out of the mimetype dirs!" << endl; - } -} - -void KFilePropsPlugin::slotFoundMountPoint( const TQString&, - unsigned long kBSize, - unsigned long /*kBUsed*/, - unsigned long kBAvail ) -{ - d->m_freeSpaceLabel->setText( - // xgettext:no-c-format -- Don't warn about translating the %1 out of %2 part. - i18n("Available space out of total partition size (percent used)", "%1 out of %2 (%3% used)") - .arg(TDEIO::convertSizeFromKB(kBAvail)) - .arg(TDEIO::convertSizeFromKB(kBSize)) - .arg( 100 - (int)(100.0 * kBAvail / kBSize) )); -} - -// attention: copy&paste below, due to compiler bug -// it doesn't like those unsigned long parameters -- unsigned long& are ok :-/ -void KFilePropsPlugin::slotFoundMountPoint( const unsigned long& kBSize, - const unsigned long& /*kBUsed*/, - const unsigned long& kBAvail, - const TQString& ) -{ - d->m_freeSpaceLabel->setText( - // xgettext:no-c-format -- Don't warn about translating the %1 out of %2 part. - i18n("Available space out of total partition size (percent used)", "%1 out of %2 (%3% used)") - .arg(TDEIO::convertSizeFromKB(kBAvail)) - .arg(TDEIO::convertSizeFromKB(kBSize)) - .arg( 100 - (int)(100.0 * kBAvail / kBSize) )); -} - -void KFilePropsPlugin::slotDirSizeUpdate() -{ - TDEIO::filesize_t totalSize = d->dirSizeJob->totalSize(); - TDEIO::filesize_t totalFiles = d->dirSizeJob->totalFiles(); - TDEIO::filesize_t totalSubdirs = d->dirSizeJob->totalSubdirs(); - m_sizeLabel->setText( i18n("Calculating... %1 (%2)\n%3, %4") - .arg(TDEIO::convertSize(totalSize)) - .arg(TDEGlobal::locale()->formatNumber(totalSize, 0)) - .arg(i18n("1 file","%n files",totalFiles)) - .arg(i18n("1 sub-folder","%n sub-folders",totalSubdirs))); -} - -void KFilePropsPlugin::slotDirSizeFinished( TDEIO::Job * job ) -{ - if (job->error()) - m_sizeLabel->setText( job->errorString() ); - else - { - TDEIO::filesize_t totalSize = static_cast<KDirSize*>(job)->totalSize(); - TDEIO::filesize_t totalFiles = static_cast<KDirSize*>(job)->totalFiles(); - TDEIO::filesize_t totalSubdirs = static_cast<KDirSize*>(job)->totalSubdirs(); - m_sizeLabel->setText( TQString::fromLatin1("%1 (%2)\n%3, %4") - .arg(TDEIO::convertSize(totalSize)) - .arg(TDEGlobal::locale()->formatNumber(totalSize, 0)) - .arg(i18n("1 file","%n files",totalFiles)) - .arg(i18n("1 sub-folder","%n sub-folders",totalSubdirs))); - } - m_sizeStopButton->setEnabled(false); - // just in case you change something and try again :) - m_sizeDetermineButton->setText( i18n("Refresh") ); - m_sizeDetermineButton->setEnabled(true); - d->dirSizeJob = 0L; - delete d->dirSizeUpdateTimer; - d->dirSizeUpdateTimer = 0L; -} - -void KFilePropsPlugin::slotSizeDetermine() -{ - m_sizeLabel->setText( i18n("Calculating...") ); - kdDebug(250) << " KFilePropsPlugin::slotSizeDetermine() properties->item()=" << properties->item() << endl; - kdDebug(250) << " URL=" << properties->item()->url().url() << endl; - d->dirSizeJob = KDirSize::dirSizeJob( properties->items() ); - d->dirSizeUpdateTimer = new TQTimer(this); - connect( d->dirSizeUpdateTimer, TQT_SIGNAL( timeout() ), - TQT_SLOT( slotDirSizeUpdate() ) ); - d->dirSizeUpdateTimer->start(500); - connect( d->dirSizeJob, TQT_SIGNAL( result( TDEIO::Job * ) ), - TQT_SLOT( slotDirSizeFinished( TDEIO::Job * ) ) ); - m_sizeStopButton->setEnabled(true); - m_sizeDetermineButton->setEnabled(false); - - // also update the "Free disk space" display - if ( d->m_freeSpaceLabel ) - { - bool isLocal; - KFileItem * item = properties->item(); - KURL url = item->mostLocalURL( isLocal ); - TQString mountPoint = TDEIO::findPathMountPoint( url.path() ); - - KDiskFreeSp * job = new KDiskFreeSp; - connect( job, TQT_SIGNAL( foundMountPoint( const unsigned long&, const unsigned long&, - const unsigned long&, const TQString& ) ), - this, TQT_SLOT( slotFoundMountPoint( const unsigned long&, const unsigned long&, - const unsigned long&, const TQString& ) ) ); - job->readDF( mountPoint ); - } -} - -void KFilePropsPlugin::slotSizeStop() -{ - if ( d->dirSizeJob ) - { - m_sizeLabel->setText( i18n("Stopped") ); - d->dirSizeJob->kill(); - d->dirSizeJob = 0; - } - if ( d->dirSizeUpdateTimer ) - d->dirSizeUpdateTimer->stop(); - - m_sizeStopButton->setEnabled(false); - m_sizeDetermineButton->setEnabled(true); -} - -KFilePropsPlugin::~KFilePropsPlugin() -{ - delete d; -} - -bool KFilePropsPlugin::supports( KFileItemList /*_items*/ ) -{ - return true; -} - -// Don't do this at home -void tqt_enter_modal( TQWidget *widget ); -void tqt_leave_modal( TQWidget *widget ); - -void KFilePropsPlugin::applyChanges() -{ - if ( d->dirSizeJob ) - slotSizeStop(); - - kdDebug(250) << "KFilePropsPlugin::applyChanges" << endl; - - if (nameArea->inherits(TQLINEEDIT_OBJECT_NAME_STRING)) - { - TQString n = ((TQLineEdit *) nameArea)->text(); - // Remove trailing spaces (#4345) - while ( n[n.length()-1].isSpace() ) - n.truncate( n.length() - 1 ); - if ( n.isEmpty() ) - { - KMessageBox::sorry( properties, i18n("The new file name is empty.")); - properties->abortApplying(); - return; - } - - // Do we need to rename the file ? - kdDebug(250) << "oldname = " << oldName << endl; - kdDebug(250) << "newname = " << n << endl; - if ( oldName != n || m_bFromTemplate ) { // true for any from-template file - TDEIO::Job * job = 0L; - KURL oldurl = properties->kurl(); - - TQString newFileName = TDEIO::encodeFileName(n); - if (d->bDesktopFile && !newFileName.endsWith(".desktop") && !newFileName.endsWith(".kdelnk")) - newFileName += ".desktop"; - - // Tell properties. Warning, this changes the result of properties->kurl() ! - properties->rename( newFileName ); - - // Update also relative path (for apps and mimetypes) - if ( !m_sRelativePath.isEmpty() ) - determineRelativePath( properties->kurl().path() ); - - kdDebug(250) << "New URL = " << properties->kurl().url() << endl; - kdDebug(250) << "old = " << oldurl.url() << endl; - - // Don't remove the template !! - if ( !m_bFromTemplate ) // (normal renaming) - job = TDEIO::move( oldurl, properties->kurl() ); - else // Copying a template - job = TDEIO::copy( oldurl, properties->kurl() ); - - connect( job, TQT_SIGNAL( result( TDEIO::Job * ) ), - TQT_SLOT( slotCopyFinished( TDEIO::Job * ) ) ); - connect( job, TQT_SIGNAL( renamed( TDEIO::Job *, const KURL &, const KURL & ) ), - TQT_SLOT( slotFileRenamed( TDEIO::Job *, const KURL &, const KURL & ) ) ); - // wait for job - TQWidget dummy(0,0,(WFlags)(WType_Dialog|WShowModal)); - tqt_enter_modal(&dummy); - tqApp->enter_loop(); - tqt_leave_modal(&dummy); - return; - } - properties->updateUrl(properties->kurl()); - // Update also relative path (for apps and mimetypes) - if ( !m_sRelativePath.isEmpty() ) - determineRelativePath( properties->kurl().path() ); - } - - // No job, keep going - slotCopyFinished( 0L ); -} - -void KFilePropsPlugin::slotCopyFinished( TDEIO::Job * job ) -{ - kdDebug(250) << "KFilePropsPlugin::slotCopyFinished" << endl; - if (job) - { - // allow apply() to return - tqApp->exit_loop(); - if ( job->error() ) - { - job->showErrorDialog( d->m_frame ); - // Didn't work. Revert the URL to the old one - properties->updateUrl( static_cast<TDEIO::CopyJob*>(job)->srcURLs().first() ); - properties->abortApplying(); // Don't apply the changes to the wrong file ! - return; - } - } - - assert( properties->item() ); - assert( !properties->item()->url().isEmpty() ); - - // Save the file where we can -> usually in ~/.trinity/... - if (KBindingPropsPlugin::supports(properties->items()) && !m_sRelativePath.isEmpty()) - { - KURL newURL; - newURL.setPath( locateLocal("mime", m_sRelativePath) ); - properties->updateUrl( newURL ); - } - else if (d->bDesktopFile && !m_sRelativePath.isEmpty()) - { - kdDebug(250) << "KFilePropsPlugin::slotCopyFinished " << m_sRelativePath << endl; - KURL newURL; - newURL.setPath( KDesktopFile::locateLocal(m_sRelativePath) ); - kdDebug(250) << "KFilePropsPlugin::slotCopyFinished path=" << newURL.path() << endl; - properties->updateUrl( newURL ); - } - - if ( d->bKDesktopMode && d->bDesktopFile ) { - // Renamed? Update Name field - if ( d->oldFileName != properties->kurl().fileName() || m_bFromTemplate ) { - KDesktopFile config( properties->kurl().path() ); - TQString nameStr = nameFromFileName(properties->kurl().fileName()); - config.writeEntry( "Name", nameStr ); - config.writeEntry( "Name", nameStr, true, false, true ); - } - } -} - -void KFilePropsPlugin::applyIconChanges() -{ - KIconButton *iconButton = ::tqqt_cast<KIconButton *>( iconArea ); - if ( !iconButton || !d->bIconChanged ) - return; - // handle icon changes - only local files (or pseudo-local) for now - // TODO: Use KTempFile and TDEIO::file_copy with overwrite = true - KURL url = properties->kurl(); - url = TDEIO::NetAccess::mostLocalURL( url, properties ); - if (url.isLocalFile()) { - TQString path; - - if (S_ISDIR(properties->item()->mode())) - { - path = url.path(1) + TQString::fromLatin1(".directory"); - // don't call updateUrl because the other tabs (i.e. permissions) - // apply to the directory, not the .directory file. - } - else - path = url.path(); - - // Get the default image - TQString str = KMimeType::findByURL( url, - properties->item()->mode(), - true )->KServiceType::icon(); - // Is it another one than the default ? - TQString sIcon; - if ( str != iconButton->icon() ) - sIcon = iconButton->icon(); - // (otherwise write empty value) - - kdDebug(250) << "**" << path << "**" << endl; - TQFile f( path ); - - // If default icon and no .directory file -> don't create one - if ( !sIcon.isEmpty() || f.exists() ) - { - if ( !f.open( IO_ReadWrite ) ) { - KMessageBox::sorry( 0, i18n("<qt>Could not save properties. You do not " - "have sufficient access to write to <b>%1</b>.</qt>").arg(path)); - return; - } - f.close(); - - KDesktopFile cfg(path); - kdDebug(250) << "sIcon = " << (sIcon) << endl; - kdDebug(250) << "str = " << (str) << endl; - cfg.writeEntry( "Icon", sIcon ); - cfg.sync(); - } - } -} - -void KFilePropsPlugin::slotFileRenamed( TDEIO::Job *, const KURL &, const KURL & newUrl ) -{ - // This is called in case of an existing local file during the copy/move operation, - // if the user chooses Rename. - properties->updateUrl( newUrl ); -} - -void KFilePropsPlugin::postApplyChanges() -{ - // Save the icon only after applying the permissions changes (#46192) - applyIconChanges(); - - KURL::List lst; - KFileItemList items = properties->items(); - for ( KFileItemListIterator it( items ); it.current(); ++it ) - lst.append((*it)->url()); - KDirNotify_stub allDirNotify("*", "KDirNotify*"); - allDirNotify.FilesChanged( lst ); -} - -class KFilePermissionsPropsPlugin::KFilePermissionsPropsPluginPrivate -{ -public: - KFilePermissionsPropsPluginPrivate() - { - } - ~KFilePermissionsPropsPluginPrivate() - { - } - - TQFrame *m_frame; - TQCheckBox *cbRecursive; - TQLabel *explanationLabel; - TQComboBox *ownerPermCombo, *groupPermCombo, *othersPermCombo; - TQCheckBox *extraCheckbox; - mode_t partialPermissions; - KFilePermissionsPropsPlugin::PermissionsMode pmode; - bool canChangePermissions; - bool isIrregular; - bool hasExtendedACL; - KACL extendedACL; - KACL defaultACL; - bool fileSystemSupportsACLs; -}; - -#define UniOwner (S_IRUSR|S_IWUSR|S_IXUSR) -#define UniGroup (S_IRGRP|S_IWGRP|S_IXGRP) -#define UniOthers (S_IROTH|S_IWOTH|S_IXOTH) -#define UniRead (S_IRUSR|S_IRGRP|S_IROTH) -#define UniWrite (S_IWUSR|S_IWGRP|S_IWOTH) -#define UniExec (S_IXUSR|S_IXGRP|S_IXOTH) -#define UniSpecial (S_ISUID|S_ISGID|S_ISVTX) - -// synced with PermissionsTarget -const mode_t KFilePermissionsPropsPlugin::permissionsMasks[3] = {UniOwner, UniGroup, UniOthers}; -const mode_t KFilePermissionsPropsPlugin::standardPermissions[4] = { 0, UniRead, UniRead|UniWrite, (mode_t)-1 }; - -// synced with PermissionsMode and standardPermissions -const char *KFilePermissionsPropsPlugin::permissionsTexts[4][4] = { - { I18N_NOOP("Forbidden"), - I18N_NOOP("Can Read"), - I18N_NOOP("Can Read & Write"), - 0 }, - { I18N_NOOP("Forbidden"), - I18N_NOOP("Can View Content"), - I18N_NOOP("Can View & Modify Content"), - 0 }, - { 0, 0, 0, 0}, // no texts for links - { I18N_NOOP("Forbidden"), - I18N_NOOP("Can View Content & Read"), - I18N_NOOP("Can View/Read & Modify/Write"), - 0 } -}; - - -KFilePermissionsPropsPlugin::KFilePermissionsPropsPlugin( KPropertiesDialog *_props ) - : KPropsDlgPlugin( _props ) -{ - d = new KFilePermissionsPropsPluginPrivate; - d->cbRecursive = 0L; - grpCombo = 0L; grpEdit = 0; - usrEdit = 0L; - TQString path = properties->kurl().path(-1); - TQString fname = properties->kurl().fileName(); - bool isLocal = properties->kurl().isLocalFile(); - bool isTrash = ( properties->kurl().protocol().find("trash", 0, false)==0 ); - bool IamRoot = (geteuid() == 0); - - KFileItem * item = properties->item(); - bool isLink = item->isLink(); - bool isDir = item->isDir(); // all dirs - bool hasDir = item->isDir(); // at least one dir - permissions = item->permissions(); // common permissions to all files - d->partialPermissions = permissions; // permissions that only some files have (at first we take everything) - d->isIrregular = isIrregular(permissions, isDir, isLink); - strOwner = item->user(); - strGroup = item->group(); - d->hasExtendedACL = item->ACL().isExtended() || item->defaultACL().isValid(); - d->extendedACL = item->ACL(); - d->defaultACL = item->defaultACL(); - d->fileSystemSupportsACLs = false; - - if ( properties->items().count() > 1 ) - { - // Multiple items: see what they have in common - KFileItemList items = properties->items(); - KFileItemListIterator it( items ); - for ( ++it /*no need to check the first one again*/ ; it.current(); ++it ) - { - if (!d->isIrregular) - d->isIrregular |= isIrregular((*it)->permissions(), - (*it)->isDir() == isDir, - (*it)->isLink() == isLink); - d->hasExtendedACL = d->hasExtendedACL || (*it)->hasExtendedACL(); - if ( (*it)->isLink() != isLink ) - isLink = false; - if ( (*it)->isDir() != isDir ) - isDir = false; - hasDir |= (*it)->isDir(); - if ( (*it)->permissions() != permissions ) - { - permissions &= (*it)->permissions(); - d->partialPermissions |= (*it)->permissions(); - } - if ( (*it)->user() != strOwner ) - strOwner = TQString::null; - if ( (*it)->group() != strGroup ) - strGroup = TQString::null; - } - } - - if (isLink) - d->pmode = PermissionsOnlyLinks; - else if (isDir) - d->pmode = PermissionsOnlyDirs; - else if (hasDir) - d->pmode = PermissionsMixed; - else - d->pmode = PermissionsOnlyFiles; - - // keep only what's not in the common permissions - d->partialPermissions = d->partialPermissions & ~permissions; - - bool isMyFile = false; - - if (isLocal && !strOwner.isEmpty()) { // local files, and all owned by the same person - struct passwd *myself = getpwuid( geteuid() ); - if ( myself != 0L ) - { - isMyFile = (strOwner == TQString::fromLocal8Bit(myself->pw_name)); - } else - kdWarning() << "I don't exist ?! geteuid=" << geteuid() << endl; - } else { - //We don't know, for remote files, if they are ours or not. - //So we let the user change permissions, and - //TDEIO::chmod will tell, if he had no right to do it. - isMyFile = true; - } - - d->canChangePermissions = (isMyFile || IamRoot) && (!isLink); - - - // create GUI - - d->m_frame = properties->addPage(i18n("&Permissions")); - - TQBoxLayout *box = new TQVBoxLayout( d->m_frame, 0, KDialog::spacingHint() ); - - TQWidget *l; - TQLabel *lbl; - TQGroupBox *gb; - TQGridLayout *gl; - TQPushButton* pbAdvancedPerm = 0; - - /* Group: Access Permissions */ - gb = new TQGroupBox ( 0, Qt::Vertical, i18n("Access Permissions"), d->m_frame ); - gb->layout()->setSpacing(KDialog::spacingHint()); - gb->layout()->setMargin(KDialog::marginHint()); - box->addWidget (gb); - - gl = new TQGridLayout (gb->layout(), 7, 2); - gl->setColStretch(1, 1); - - l = d->explanationLabel = new TQLabel( "", gb ); - if (isLink) - d->explanationLabel->setText(i18n("This file is a link and does not have permissions.", - "All files are links and do not have permissions.", - properties->items().count())); - else if (!d->canChangePermissions) - d->explanationLabel->setText(i18n("Only the owner can change permissions.")); - gl->addMultiCellWidget(l, 0, 0, 0, 1); - - lbl = new TQLabel( i18n("O&wner:"), gb); - gl->addWidget(lbl, 1, 0); - l = d->ownerPermCombo = new TQComboBox(gb); - lbl->setBuddy(l); - gl->addWidget(l, 1, 1); - connect(l, TQT_SIGNAL( highlighted(int) ), this, TQT_SIGNAL( changed() )); - TQWhatsThis::add(l, i18n("Specifies the actions that the owner is allowed to do.")); - - lbl = new TQLabel( i18n("Gro&up:"), gb); - gl->addWidget(lbl, 2, 0); - l = d->groupPermCombo = new TQComboBox(gb); - lbl->setBuddy(l); - gl->addWidget(l, 2, 1); - connect(l, TQT_SIGNAL( highlighted(int) ), this, TQT_SIGNAL( changed() )); - TQWhatsThis::add(l, i18n("Specifies the actions that the members of the group are allowed to do.")); - - lbl = new TQLabel( i18n("O&thers:"), gb); - gl->addWidget(lbl, 3, 0); - l = d->othersPermCombo = new TQComboBox(gb); - lbl->setBuddy(l); - gl->addWidget(l, 3, 1); - connect(l, TQT_SIGNAL( highlighted(int) ), this, TQT_SIGNAL( changed() )); - TQWhatsThis::add(l, i18n("Specifies the actions that all users, who are neither " - "owner nor in the group, are allowed to do.")); - - if (!isLink) { - l = d->extraCheckbox = new TQCheckBox(hasDir ? - i18n("Only own&er can rename and delete folder content") : - i18n("Is &executable"), - gb ); - connect( d->extraCheckbox, TQT_SIGNAL( clicked() ), this, TQT_SIGNAL( changed() ) ); - gl->addWidget(l, 4, 1); - TQWhatsThis::add(l, hasDir ? i18n("Enable this option to allow only the folder's owner to " - "delete or rename the contained files and folders. Other " - "users can only add new files, which requires the 'Modify " - "Content' permission.") - : i18n("Enable this option to mark the file as executable. This only makes " - "sense for programs and scripts. It is required when you want to " - "execute them.")); - - TQLayoutItem *spacer = TQT_TQLAYOUTITEM(new TQSpacerItem(0, 20, TQSizePolicy::Minimum, TQSizePolicy::Expanding)); - gl->addMultiCell(spacer, 5, 5, 0, 1); - - pbAdvancedPerm = new TQPushButton(i18n("A&dvanced Permissions"), gb); - gl->addMultiCellWidget(pbAdvancedPerm, 6, 6, 0, 1, Qt::AlignRight); - connect(pbAdvancedPerm, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotShowAdvancedPermissions() )); - } - else - d->extraCheckbox = 0; - - - /**** Group: Ownership ****/ - gb = new TQGroupBox ( 0, Qt::Vertical, i18n("Ownership"), d->m_frame ); - gb->layout()->setSpacing(KDialog::spacingHint()); - gb->layout()->setMargin(KDialog::marginHint()); - box->addWidget (gb); - - gl = new TQGridLayout (gb->layout(), 4, 3); - gl->addRowSpacing(0, 10); - - /*** Set Owner ***/ - l = new TQLabel( i18n("User:"), gb ); - gl->addWidget (l, 1, 0); - - /* GJ: Don't autocomplete more than 1000 users. This is a kind of random - * value. Huge sites having 10.000+ user have a fair chance of using NIS, - * (possibly) making this unacceptably slow. - * OTOH, it is nice to offer this functionality for the standard user. - */ - int i, maxEntries = 1000; - struct passwd *user; - struct group *ge; - - /* File owner: For root, offer a KLineEdit with autocompletion. - * For a user, who can never chown() a file, offer a TQLabel. - */ - if (IamRoot && isLocal) - { - usrEdit = new KLineEdit( gb ); - KCompletion *kcom = usrEdit->completionObject(); - kcom->setOrder(KCompletion::Sorted); - setpwent(); - for (i=0; ((user = getpwent()) != 0L) && (i < maxEntries); i++) - kcom->addItem(TQString::fromLatin1(user->pw_name)); - endpwent(); - usrEdit->setCompletionMode((i < maxEntries) ? TDEGlobalSettings::CompletionAuto : - TDEGlobalSettings::CompletionNone); - usrEdit->setText(strOwner); - gl->addWidget(usrEdit, 1, 1); - connect( usrEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - } - else - { - l = new TQLabel(strOwner, gb); - gl->addWidget(l, 1, 1); - } - - /*** Set Group ***/ - - TQStringList groupList; - TQCString strUser; - user = getpwuid(geteuid()); - if (user != 0L) - strUser = user->pw_name; - -#ifdef Q_OS_UNIX - setgrent(); - for (i=0; ((ge = getgrent()) != 0L) && (i < maxEntries); i++) - { - if (IamRoot) - groupList += TQString::fromLatin1(ge->gr_name); - else - { - /* pick the groups to which the user belongs */ - char ** members = ge->gr_mem; - char * member; - while ((member = *members) != 0L) { - if (strUser == member) { - groupList += TQString::fromLocal8Bit(ge->gr_name); - break; - } - ++members; - } - } - } - endgrent(); -#endif //Q_OS_UNIX - - /* add the effective Group to the list .. */ - ge = getgrgid (getegid()); - if (ge) { - TQString name = TQString::fromLatin1(ge->gr_name); - if (name.isEmpty()) - name.setNum(ge->gr_gid); - if (groupList.find(name) == groupList.end()) - groupList += name; - } - - bool isMyGroup = groupList.contains(strGroup); - - /* add the group the file currently belongs to .. - * .. if its not there already - */ - if (!isMyGroup) - groupList += strGroup; - - l = new TQLabel( i18n("Group:"), gb ); - gl->addWidget (l, 2, 0); - - /* Set group: if possible to change: - * - Offer a KLineEdit for root, since he can change to any group. - * - Offer a TQComboBox for a normal user, since he can change to a fixed - * (small) set of groups only. - * If not changeable: offer a TQLabel. - */ - if (IamRoot && isLocal) - { - grpEdit = new KLineEdit(gb); - KCompletion *kcom = new KCompletion; - kcom->setItems(groupList); - grpEdit->setCompletionObject(kcom, true); - grpEdit->setAutoDeleteCompletionObject( true ); - grpEdit->setCompletionMode(TDEGlobalSettings::CompletionAuto); - grpEdit->setText(strGroup); - gl->addWidget(grpEdit, 2, 1); - connect( grpEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - } - else if ((groupList.count() > 1) && isMyFile && isLocal) - { - grpCombo = new TQComboBox(gb, "combogrouplist"); - grpCombo->insertStringList(groupList); - grpCombo->setCurrentItem(groupList.findIndex(strGroup)); - gl->addWidget(grpCombo, 2, 1); - connect( grpCombo, TQT_SIGNAL( activated( int ) ), - this, TQT_SIGNAL( changed() ) ); - } - else - { - l = new TQLabel(strGroup, gb); - gl->addWidget(l, 2, 1); - } - - gl->setColStretch(2, 10); - - // "Apply recursive" checkbox - if ( hasDir && !isLink && !isTrash ) - { - d->cbRecursive = new TQCheckBox( i18n("Apply changes to all subfolders and their contents"), d->m_frame ); - connect( d->cbRecursive, TQT_SIGNAL( clicked() ), this, TQT_SIGNAL( changed() ) ); - box->addWidget( d->cbRecursive ); - } - - updateAccessControls(); - - - if ( isTrash || !d->canChangePermissions ) - { - //don't allow to change properties for file into trash - enableAccessControls(false); - if ( pbAdvancedPerm && !d->hasExtendedACL ) - pbAdvancedPerm->setEnabled(false); - } - - box->addStretch (10); -} - -#ifdef USE_POSIX_ACL -static bool fileSystemSupportsACL( const TQCString& pathCString ) -{ - bool fileSystemSupportsACLs = false; -#ifdef Q_OS_FREEBSD - struct statfs buf; - fileSystemSupportsACLs = ( statfs( pathCString.data(), &buf ) == 0 ) && ( buf.f_flags & MNT_ACLS ); -#else - fileSystemSupportsACLs = - getxattr( pathCString.data(), "system.posix_acl_access", NULL, 0 ) >= 0 -#ifdef ENODATA - || (errno == ENODATA) -#endif -#ifdef ENOATTR - || (errno == ENOATTR) -#endif - ; -#endif - return fileSystemSupportsACLs; -} -#endif - - -void KFilePermissionsPropsPlugin::slotShowAdvancedPermissions() { - - bool isDir = (d->pmode == PermissionsOnlyDirs) || (d->pmode == PermissionsMixed); - KDialogBase dlg(properties, 0, true, i18n("Advanced Permissions"), - KDialogBase::Ok|KDialogBase::Cancel); - - TQLabel *l, *cl[3]; - TQGroupBox *gb; - TQGridLayout *gl; - - TQVBox *mainVBox = dlg.makeVBoxMainWidget(); - - // Group: Access Permissions - gb = new TQGroupBox ( 0, Qt::Vertical, i18n("Access Permissions"), mainVBox ); - gb->layout()->setSpacing(KDialog::spacingHint()); - gb->layout()->setMargin(KDialog::marginHint()); - - gl = new TQGridLayout (gb->layout(), 6, 6); - gl->addRowSpacing(0, 10); - - TQValueVector<TQWidget*> theNotSpecials; - - l = new TQLabel(i18n("Class"), gb ); - gl->addWidget(l, 1, 0); - theNotSpecials.append( l ); - - if (isDir) - l = new TQLabel( i18n("Show\nEntries"), gb ); - else - l = new TQLabel( i18n("Read"), gb ); - gl->addWidget (l, 1, 1); - theNotSpecials.append( l ); - TQString readWhatsThis; - if (isDir) - readWhatsThis = i18n("This flag allows viewing the content of the folder."); - else - readWhatsThis = i18n("The Read flag allows viewing the content of the file."); - TQWhatsThis::add(l, readWhatsThis); - - if (isDir) - l = new TQLabel( i18n("Write\nEntries"), gb ); - else - l = new TQLabel( i18n("Write"), gb ); - gl->addWidget (l, 1, 2); - theNotSpecials.append( l ); - TQString writeWhatsThis; - if (isDir) - writeWhatsThis = i18n("This flag allows adding, renaming and deleting of files. " - "Note that deleting and renaming can be limited using the Sticky flag."); - else - writeWhatsThis = i18n("The Write flag allows modifying the content of the file."); - TQWhatsThis::add(l, writeWhatsThis); - - TQString execWhatsThis; - if (isDir) { - l = new TQLabel( i18n("Enter folder", "Enter"), gb ); - execWhatsThis = i18n("Enable this flag to allow entering the folder."); - } - else { - l = new TQLabel( i18n("Exec"), gb ); - execWhatsThis = i18n("Enable this flag to allow executing the file as a program."); - } - TQWhatsThis::add(l, execWhatsThis); - theNotSpecials.append( l ); - // GJ: Add space between normal and special modes - TQSize size = l->sizeHint(); - size.setWidth(size.width() + 15); - l->setFixedSize(size); - gl->addWidget (l, 1, 3); - - l = new TQLabel( i18n("Special"), gb ); - gl->addMultiCellWidget(l, 1, 1, 4, 5); - TQString specialWhatsThis; - if (isDir) - specialWhatsThis = i18n("Special flag. Valid for the whole folder, the exact " - "meaning of the flag can be seen in the right hand column."); - else - specialWhatsThis = i18n("Special flag. The exact meaning of the flag can be seen " - "in the right hand column."); - TQWhatsThis::add(l, specialWhatsThis); - - cl[0] = new TQLabel( i18n("User"), gb ); - gl->addWidget (cl[0], 2, 0); - theNotSpecials.append( cl[0] ); - - cl[1] = new TQLabel( i18n("Group"), gb ); - gl->addWidget (cl[1], 3, 0); - theNotSpecials.append( cl[1] ); - - cl[2] = new TQLabel( i18n("Others"), gb ); - gl->addWidget (cl[2], 4, 0); - theNotSpecials.append( cl[2] ); - - l = new TQLabel(i18n("Set UID"), gb); - gl->addWidget(l, 2, 5); - TQString setUidWhatsThis; - if (isDir) - setUidWhatsThis = i18n("If this flag is set, the owner of this folder will be " - "the owner of all new files."); - else - setUidWhatsThis = i18n("If this file is an executable and the flag is set, it will " - "be executed with the permissions of the owner."); - TQWhatsThis::add(l, setUidWhatsThis); - - l = new TQLabel(i18n("Set GID"), gb); - gl->addWidget(l, 3, 5); - TQString setGidWhatsThis; - if (isDir) - setGidWhatsThis = i18n("If this flag is set, the group of this folder will be " - "set for all new files."); - else - setGidWhatsThis = i18n("If this file is an executable and the flag is set, it will " - "be executed with the permissions of the group."); - TQWhatsThis::add(l, setGidWhatsThis); - - l = new TQLabel(i18n("File permission", "Sticky"), gb); - gl->addWidget(l, 4, 5); - TQString stickyWhatsThis; - if (isDir) - stickyWhatsThis = i18n("If the Sticky flag is set on a folder, only the owner " - "and root can delete or rename files. Otherwise everybody " - "with write permissions can do this."); - else - stickyWhatsThis = i18n("The Sticky flag on a file is ignored on Linux, but may " - "be used on some systems"); - TQWhatsThis::add(l, stickyWhatsThis); - - mode_t aPermissions, aPartialPermissions; - mode_t dummy1, dummy2; - - if (!d->isIrregular) { - switch (d->pmode) { - case PermissionsOnlyFiles: - getPermissionMasks(aPartialPermissions, - dummy1, - aPermissions, - dummy2); - break; - case PermissionsOnlyDirs: - case PermissionsMixed: - getPermissionMasks(dummy1, - aPartialPermissions, - dummy2, - aPermissions); - break; - case PermissionsOnlyLinks: - aPermissions = UniRead | UniWrite | UniExec | UniSpecial; - aPartialPermissions = 0; - break; - } - } - else { - aPermissions = permissions; - aPartialPermissions = d->partialPermissions; - } - - // Draw Checkboxes - TQCheckBox *cba[3][4]; - for (int row = 0; row < 3 ; ++row) { - for (int col = 0; col < 4; ++col) { - TQCheckBox *cb = new TQCheckBox( gb ); - if ( col != 3 ) theNotSpecials.append( cb ); - cba[row][col] = cb; - cb->setChecked(aPermissions & fperm[row][col]); - if ( aPartialPermissions & fperm[row][col] ) - { - cb->setTristate(); - cb->setNoChange(); - } - else if (d->cbRecursive && d->cbRecursive->isChecked()) - cb->setTristate(); - - cb->setEnabled( d->canChangePermissions ); - gl->addWidget (cb, row+2, col+1); - switch(col) { - case 0: - TQWhatsThis::add(cb, readWhatsThis); - break; - case 1: - TQWhatsThis::add(cb, writeWhatsThis); - break; - case 2: - TQWhatsThis::add(cb, execWhatsThis); - break; - case 3: - switch(row) { - case 0: - TQWhatsThis::add(cb, setUidWhatsThis); - break; - case 1: - TQWhatsThis::add(cb, setGidWhatsThis); - break; - case 2: - TQWhatsThis::add(cb, stickyWhatsThis); - break; - } - break; - } - } - } - gl->setColStretch(6, 10); - -#ifdef USE_POSIX_ACL - KACLEditWidget *extendedACLs = 0; - - // FIXME make it work with partial entries - if ( properties->items().count() == 1 ) { - TQCString pathCString = TQFile::encodeName( properties->item()->url().path() ); - d->fileSystemSupportsACLs = fileSystemSupportsACL( pathCString ); - } - if ( d->fileSystemSupportsACLs ) { - std::for_each( theNotSpecials.begin(), theNotSpecials.end(), std::mem_fun( &TQWidget::hide ) ); - extendedACLs = new KACLEditWidget( mainVBox ); - if ( d->extendedACL.isValid() && d->extendedACL.isExtended() ) - extendedACLs->setACL( d->extendedACL ); - else - extendedACLs->setACL( KACL( aPermissions ) ); - - if ( d->defaultACL.isValid() ) - extendedACLs->setDefaultACL( d->defaultACL ); - - if ( properties->items().first()->isDir() ) - extendedACLs->setAllowDefaults( true ); - if ( !d->canChangePermissions ) - extendedACLs->setReadOnly( true ); - - } -#endif - if (dlg.exec() != KDialogBase::Accepted) - return; - - mode_t andPermissions = mode_t(~0); - mode_t orPermissions = 0; - for (int row = 0; row < 3; ++row) - for (int col = 0; col < 4; ++col) { - switch (cba[row][col]->state()) - { - case TQCheckBox::On: - orPermissions |= fperm[row][col]; - //fall through - case TQCheckBox::Off: - andPermissions &= ~fperm[row][col]; - break; - default: // NoChange - break; - } - } - - d->isIrregular = false; - KFileItemList items = properties->items(); - for (KFileItemListIterator it(items); it.current(); ++it) { - if (isIrregular(((*it)->permissions() & andPermissions) | orPermissions, - (*it)->isDir(), (*it)->isLink())) { - d->isIrregular = true; - break; - } - } - - permissions = orPermissions; - d->partialPermissions = andPermissions; - -#ifdef USE_POSIX_ACL - // override with the acls, if present - if ( extendedACLs ) { - d->extendedACL = extendedACLs->getACL(); - d->defaultACL = extendedACLs->getDefaultACL(); - d->hasExtendedACL = d->extendedACL.isExtended() || d->defaultACL.isValid(); - permissions = d->extendedACL.basePermissions(); - permissions |= ( andPermissions | orPermissions ) & ( S_ISUID|S_ISGID|S_ISVTX ); - } -#endif - - updateAccessControls(); - emit changed(); -} - -// TQString KFilePermissionsPropsPlugin::tabName () const -// { -// return i18n ("&Permissions"); -// } - -KFilePermissionsPropsPlugin::~KFilePermissionsPropsPlugin() -{ - delete d; -} - -bool KFilePermissionsPropsPlugin::supports( KFileItemList _items ) -{ - KFileItemList::const_iterator it = _items.constBegin(); - for ( ; it != _items.constEnd(); ++it ) { - KFileItem *item = *it; - if( !item->user().isEmpty() || !item->group().isEmpty() ) - return true; - } - return false; -} - -// sets a combo box in the Access Control frame -void KFilePermissionsPropsPlugin::setComboContent(TQComboBox *combo, PermissionsTarget target, - mode_t permissions, mode_t partial) { - combo->clear(); - if (d->pmode == PermissionsOnlyLinks) { - combo->insertItem(i18n("Link")); - combo->setCurrentItem(0); - return; - } - - mode_t tMask = permissionsMasks[target]; - int textIndex; - for (textIndex = 0; standardPermissions[textIndex] != (mode_t)-1; textIndex++) - if ((standardPermissions[textIndex]&tMask) == (permissions&tMask&(UniRead|UniWrite))) - break; - Q_ASSERT(standardPermissions[textIndex] != (mode_t)-1); // must not happen, would be irreglar - - for (int i = 0; permissionsTexts[(int)d->pmode][i]; i++) - combo->insertItem(i18n(permissionsTexts[(int)d->pmode][i])); - - if (partial & tMask & ~UniExec) { - combo->insertItem(i18n("Varying (No Change)")); - combo->setCurrentItem(3); - } - else - combo->setCurrentItem(textIndex); -} - -// permissions are irregular if they cant be displayed in a combo box. -bool KFilePermissionsPropsPlugin::isIrregular(mode_t permissions, bool isDir, bool isLink) { - if (isLink) // links are always ok - return false; - - mode_t p = permissions; - if (p & (S_ISUID | S_ISGID)) // setuid/setgid -> irregular - return true; - if (isDir) { - p &= ~S_ISVTX; // ignore sticky on dirs - - // check supported flag combinations - mode_t p0 = p & UniOwner; - if ((p0 != 0) && (p0 != (S_IRUSR | S_IXUSR)) && (p0 != UniOwner)) - return true; - p0 = p & UniGroup; - if ((p0 != 0) && (p0 != (S_IRGRP | S_IXGRP)) && (p0 != UniGroup)) - return true; - p0 = p & UniOthers; - if ((p0 != 0) && (p0 != (S_IROTH | S_IXOTH)) && (p0 != UniOthers)) - return true; - return false; - } - if (p & S_ISVTX) // sticky on file -> irregular - return true; - - // check supported flag combinations - mode_t p0 = p & UniOwner; - bool usrXPossible = !p0; // true if this file could be an executable - if (p0 & S_IXUSR) { - if ((p0 == S_IXUSR) || (p0 == (S_IWUSR | S_IXUSR))) - return true; - usrXPossible = true; - } - else if (p0 == S_IWUSR) - return true; - - p0 = p & UniGroup; - bool grpXPossible = !p0; // true if this file could be an executable - if (p0 & S_IXGRP) { - if ((p0 == S_IXGRP) || (p0 == (S_IWGRP | S_IXGRP))) - return true; - grpXPossible = true; - } - else if (p0 == S_IWGRP) - return true; - if (p0 == 0) - grpXPossible = true; - - p0 = p & UniOthers; - bool othXPossible = !p0; // true if this file could be an executable - if (p0 & S_IXOTH) { - if ((p0 == S_IXOTH) || (p0 == (S_IWOTH | S_IXOTH))) - return true; - othXPossible = true; - } - else if (p0 == S_IWOTH) - return true; - - // check that there either all targets are executable-compatible, or none - return (p & UniExec) && !(usrXPossible && grpXPossible && othXPossible); -} - -// enables/disabled the widgets in the Access Control frame -void KFilePermissionsPropsPlugin::enableAccessControls(bool enable) { - d->ownerPermCombo->setEnabled(enable); - d->groupPermCombo->setEnabled(enable); - d->othersPermCombo->setEnabled(enable); - if (d->extraCheckbox) - d->extraCheckbox->setEnabled(enable); - if ( d->cbRecursive ) - d->cbRecursive->setEnabled(enable); -} - -// updates all widgets in the Access Control frame -void KFilePermissionsPropsPlugin::updateAccessControls() { - setComboContent(d->ownerPermCombo, PermissionsOwner, - permissions, d->partialPermissions); - setComboContent(d->groupPermCombo, PermissionsGroup, - permissions, d->partialPermissions); - setComboContent(d->othersPermCombo, PermissionsOthers, - permissions, d->partialPermissions); - - switch(d->pmode) { - case PermissionsOnlyLinks: - enableAccessControls(false); - break; - case PermissionsOnlyFiles: - enableAccessControls(d->canChangePermissions && !d->isIrregular && !d->hasExtendedACL); - if (d->canChangePermissions) - d->explanationLabel->setText(d->isIrregular || d->hasExtendedACL ? - i18n("This file uses advanced permissions", - "These files use advanced permissions.", - properties->items().count()) : ""); - if (d->partialPermissions & UniExec) { - d->extraCheckbox->setTristate(); - d->extraCheckbox->setNoChange(); - } - else { - d->extraCheckbox->setTristate(false); - d->extraCheckbox->setChecked(permissions & UniExec); - } - break; - case PermissionsOnlyDirs: - enableAccessControls(d->canChangePermissions && !d->isIrregular && !d->hasExtendedACL); - // if this is a dir, and we can change permissions, don't dis-allow - // recursive, we can do that for ACL setting. - if ( d->cbRecursive ) - d->cbRecursive->setEnabled( d->canChangePermissions && !d->isIrregular ); - - if (d->canChangePermissions) - d->explanationLabel->setText(d->isIrregular || d->hasExtendedACL ? - i18n("This folder uses advanced permissions.", - "These folders use advanced permissions.", - properties->items().count()) : ""); - if (d->partialPermissions & S_ISVTX) { - d->extraCheckbox->setTristate(); - d->extraCheckbox->setNoChange(); - } - else { - d->extraCheckbox->setTristate(false); - d->extraCheckbox->setChecked(permissions & S_ISVTX); - } - break; - case PermissionsMixed: - enableAccessControls(d->canChangePermissions && !d->isIrregular && !d->hasExtendedACL); - if (d->canChangePermissions) - d->explanationLabel->setText(d->isIrregular || d->hasExtendedACL ? - i18n("These files use advanced permissions.") : ""); - break; - if (d->partialPermissions & S_ISVTX) { - d->extraCheckbox->setTristate(); - d->extraCheckbox->setNoChange(); - } - else { - d->extraCheckbox->setTristate(false); - d->extraCheckbox->setChecked(permissions & S_ISVTX); - } - break; - } -} - -// gets masks for files and dirs from the Access Control frame widgets -void KFilePermissionsPropsPlugin::getPermissionMasks(mode_t &andFilePermissions, - mode_t &andDirPermissions, - mode_t &orFilePermissions, - mode_t &orDirPermissions) { - andFilePermissions = mode_t(~UniSpecial); - andDirPermissions = mode_t(~(S_ISUID|S_ISGID)); - orFilePermissions = 0; - orDirPermissions = 0; - if (d->isIrregular) - return; - - mode_t m = standardPermissions[d->ownerPermCombo->currentItem()]; - if (m != (mode_t) -1) { - orFilePermissions |= m & UniOwner; - if ((m & UniOwner) && - ((d->pmode == PermissionsMixed) || - ((d->pmode == PermissionsOnlyFiles) && (d->extraCheckbox->state() == TQButton::NoChange)))) - andFilePermissions &= ~(S_IRUSR | S_IWUSR); - else { - andFilePermissions &= ~(S_IRUSR | S_IWUSR | S_IXUSR); - if ((m & S_IRUSR) && (d->extraCheckbox->state() == TQButton::On)) - orFilePermissions |= S_IXUSR; - } - - orDirPermissions |= m & UniOwner; - if (m & S_IRUSR) - orDirPermissions |= S_IXUSR; - andDirPermissions &= ~(S_IRUSR | S_IWUSR | S_IXUSR); - } - - m = standardPermissions[d->groupPermCombo->currentItem()]; - if (m != (mode_t) -1) { - orFilePermissions |= m & UniGroup; - if ((m & UniGroup) && - ((d->pmode == PermissionsMixed) || - ((d->pmode == PermissionsOnlyFiles) && (d->extraCheckbox->state() == TQButton::NoChange)))) - andFilePermissions &= ~(S_IRGRP | S_IWGRP); - else { - andFilePermissions &= ~(S_IRGRP | S_IWGRP | S_IXGRP); - if ((m & S_IRGRP) && (d->extraCheckbox->state() == TQButton::On)) - orFilePermissions |= S_IXGRP; - } - - orDirPermissions |= m & UniGroup; - if (m & S_IRGRP) - orDirPermissions |= S_IXGRP; - andDirPermissions &= ~(S_IRGRP | S_IWGRP | S_IXGRP); - } - - m = standardPermissions[d->othersPermCombo->currentItem()]; - if (m != (mode_t) -1) { - orFilePermissions |= m & UniOthers; - if ((m & UniOthers) && - ((d->pmode == PermissionsMixed) || - ((d->pmode == PermissionsOnlyFiles) && (d->extraCheckbox->state() == TQButton::NoChange)))) - andFilePermissions &= ~(S_IROTH | S_IWOTH); - else { - andFilePermissions &= ~(S_IROTH | S_IWOTH | S_IXOTH); - if ((m & S_IROTH) && (d->extraCheckbox->state() == TQButton::On)) - orFilePermissions |= S_IXOTH; - } - - orDirPermissions |= m & UniOthers; - if (m & S_IROTH) - orDirPermissions |= S_IXOTH; - andDirPermissions &= ~(S_IROTH | S_IWOTH | S_IXOTH); - } - - if (((d->pmode == PermissionsMixed) || (d->pmode == PermissionsOnlyDirs)) && - (d->extraCheckbox->state() != TQButton::NoChange)) { - andDirPermissions &= ~S_ISVTX; - if (d->extraCheckbox->state() == TQButton::On) - orDirPermissions |= S_ISVTX; - } -} - -void KFilePermissionsPropsPlugin::applyChanges() -{ - mode_t orFilePermissions; - mode_t orDirPermissions; - mode_t andFilePermissions; - mode_t andDirPermissions; - - if (!d->canChangePermissions) - return; - - if (!d->isIrregular) - getPermissionMasks(andFilePermissions, - andDirPermissions, - orFilePermissions, - orDirPermissions); - else { - orFilePermissions = permissions; - andFilePermissions = d->partialPermissions; - orDirPermissions = permissions; - andDirPermissions = d->partialPermissions; - } - - TQString owner, group; - if (usrEdit) - owner = usrEdit->text(); - if (grpEdit) - group = grpEdit->text(); - else if (grpCombo) - group = grpCombo->currentText(); - - if (owner == strOwner) - owner = TQString::null; // no change - - if (group == strGroup) - group = TQString::null; - - bool recursive = d->cbRecursive && d->cbRecursive->isChecked(); - bool permissionChange = false; - - KFileItemList files, dirs; - KFileItemList items = properties->items(); - for (KFileItemListIterator it(items); it.current(); ++it) { - if ((*it)->isDir()) { - dirs.append(*it); - if ((*it)->permissions() != (((*it)->permissions() & andDirPermissions) | orDirPermissions)) - permissionChange = true; - } - else if ((*it)->isFile()) { - files.append(*it); - if ((*it)->permissions() != (((*it)->permissions() & andFilePermissions) | orFilePermissions)) - permissionChange = true; - } - } - - const bool ACLChange = ( d->extendedACL != properties->item()->ACL() ); - const bool defaultACLChange = ( d->defaultACL != properties->item()->defaultACL() ); - - if ( owner.isEmpty() && group.isEmpty() && !recursive - && !permissionChange && !ACLChange && !defaultACLChange ) - return; - - TDEIO::Job * job; - if (files.count() > 0) { - job = TDEIO::chmod( files, orFilePermissions, ~andFilePermissions, - owner, group, false ); - if ( ACLChange && d->fileSystemSupportsACLs ) - job->addMetaData( "ACL_STRING", d->extendedACL.isValid()?d->extendedACL.asString():"ACL_DELETE" ); - if ( defaultACLChange && d->fileSystemSupportsACLs ) - job->addMetaData( "DEFAULT_ACL_STRING", d->defaultACL.isValid()?d->defaultACL.asString():"ACL_DELETE" ); - - connect( job, TQT_SIGNAL( result( TDEIO::Job * ) ), - TQT_SLOT( slotChmodResult( TDEIO::Job * ) ) ); - // Wait for job - TQWidget dummy(0,0,(WFlags)(WType_Dialog|WShowModal)); - tqt_enter_modal(&dummy); - tqApp->enter_loop(); - tqt_leave_modal(&dummy); - } - if (dirs.count() > 0) { - job = TDEIO::chmod( dirs, orDirPermissions, ~andDirPermissions, - owner, group, recursive ); - if ( ACLChange && d->fileSystemSupportsACLs ) - job->addMetaData( "ACL_STRING", d->extendedACL.isValid()?d->extendedACL.asString():"ACL_DELETE" ); - if ( defaultACLChange && d->fileSystemSupportsACLs ) - job->addMetaData( "DEFAULT_ACL_STRING", d->defaultACL.isValid()?d->defaultACL.asString():"ACL_DELETE" ); - - connect( job, TQT_SIGNAL( result( TDEIO::Job * ) ), - TQT_SLOT( slotChmodResult( TDEIO::Job * ) ) ); - // Wait for job - TQWidget dummy(0,0,(WFlags)(WType_Dialog|WShowModal)); - tqt_enter_modal(&dummy); - tqApp->enter_loop(); - tqt_leave_modal(&dummy); - } -} - -void KFilePermissionsPropsPlugin::slotChmodResult( TDEIO::Job * job ) -{ - kdDebug(250) << "KFilePermissionsPropsPlugin::slotChmodResult" << endl; - if (job->error()) - job->showErrorDialog( d->m_frame ); - // allow apply() to return - tqApp->exit_loop(); -} - - - - -class KURLPropsPlugin::KURLPropsPluginPrivate -{ -public: - KURLPropsPluginPrivate() - { - } - ~KURLPropsPluginPrivate() - { - } - - TQFrame *m_frame; -}; - -KURLPropsPlugin::KURLPropsPlugin( KPropertiesDialog *_props ) - : KPropsDlgPlugin( _props ) -{ - d = new KURLPropsPluginPrivate; - d->m_frame = properties->addPage(i18n("U&RL")); - TQVBoxLayout *layout = new TQVBoxLayout(d->m_frame, 0, KDialog::spacingHint()); - - TQLabel *l; - l = new TQLabel( d->m_frame, "Label_1" ); - l->setText( i18n("URL:") ); - layout->addWidget(l); - - URLEdit = new KURLRequester( d->m_frame, "URL Requester" ); - layout->addWidget(URLEdit); - - TQString path = properties->kurl().path(); - - TQFile f( path ); - if ( !f.open( IO_ReadOnly ) ) - return; - f.close(); - - KSimpleConfig config( path ); - config.setDesktopGroup(); - URLStr = config.readPathEntry( "URL" ); - - if ( !URLStr.isNull() ) - URLEdit->setURL( URLStr ); - - connect( URLEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - - layout->addStretch (1); -} - -KURLPropsPlugin::~KURLPropsPlugin() -{ - delete d; -} - -// TQString KURLPropsPlugin::tabName () const -// { -// return i18n ("U&RL"); -// } - -bool KURLPropsPlugin::supports( KFileItemList _items ) -{ - if ( _items.count() != 1 ) - return false; - KFileItem * item = _items.first(); - // check if desktop file - if ( !KPropsDlgPlugin::isDesktopFile( item ) ) - return false; - - // open file and check type - KDesktopFile config( item->url().path(), true /* readonly */ ); - return config.hasLinkType(); -} - -void KURLPropsPlugin::applyChanges() -{ - TQString path = properties->kurl().path(); - - TQFile f( path ); - if ( !f.open( IO_ReadWrite ) ) { - KMessageBox::sorry( 0, i18n("<qt>Could not save properties. You do not have " - "sufficient access to write to <b>%1</b>.</qt>").arg(path)); - return; - } - f.close(); - - KSimpleConfig config( path ); - config.setDesktopGroup(); - config.writeEntry( "Type", TQString::fromLatin1("Link")); - config.writePathEntry( "URL", URLEdit->url() ); - // Users can't create a Link .desktop file with a Name field, - // but distributions can. Update the Name field in that case. - if ( config.hasKey("Name") ) - { - TQString nameStr = nameFromFileName(properties->kurl().fileName()); - config.writeEntry( "Name", nameStr ); - config.writeEntry( "Name", nameStr, true, false, true ); - - } -} - - -/* ---------------------------------------------------- - * - * KBindingPropsPlugin - * - * -------------------------------------------------- */ - -class KBindingPropsPlugin::KBindingPropsPluginPrivate -{ -public: - KBindingPropsPluginPrivate() - { - } - ~KBindingPropsPluginPrivate() - { - } - - TQFrame *m_frame; -}; - -KBindingPropsPlugin::KBindingPropsPlugin( KPropertiesDialog *_props ) : KPropsDlgPlugin( _props ) -{ - d = new KBindingPropsPluginPrivate; - d->m_frame = properties->addPage(i18n("A&ssociation")); - patternEdit = new KLineEdit( d->m_frame, "LineEdit_1" ); - commentEdit = new KLineEdit( d->m_frame, "LineEdit_2" ); - mimeEdit = new KLineEdit( d->m_frame, "LineEdit_3" ); - - TQBoxLayout *mainlayout = new TQVBoxLayout(d->m_frame, 0, KDialog::spacingHint()); - TQLabel* tmpQLabel; - - tmpQLabel = new TQLabel( d->m_frame, "Label_1" ); - tmpQLabel->setText( i18n("Pattern ( example: *.html;*.htm )") ); - tmpQLabel->setMinimumSize(tmpQLabel->sizeHint()); - mainlayout->addWidget(tmpQLabel, 1); - - //patternEdit->setGeometry( 10, 40, 210, 30 ); - //patternEdit->setText( "" ); - patternEdit->setMaxLength( 512 ); - patternEdit->setMinimumSize( patternEdit->sizeHint() ); - patternEdit->setFixedHeight( fontHeight ); - mainlayout->addWidget(patternEdit, 1); - - tmpQLabel = new TQLabel( d->m_frame, "Label_2" ); - tmpQLabel->setText( i18n("Mime Type") ); - tmpQLabel->setMinimumSize(tmpQLabel->sizeHint()); - mainlayout->addWidget(tmpQLabel, 1); - - //mimeEdit->setGeometry( 10, 160, 210, 30 ); - mimeEdit->setMaxLength( 256 ); - mimeEdit->setMinimumSize( mimeEdit->sizeHint() ); - mimeEdit->setFixedHeight( fontHeight ); - mainlayout->addWidget(mimeEdit, 1); - - tmpQLabel = new TQLabel( d->m_frame, "Label_3" ); - tmpQLabel->setText( i18n("Comment") ); - tmpQLabel->setMinimumSize(tmpQLabel->sizeHint()); - mainlayout->addWidget(tmpQLabel, 1); - - //commentEdit->setGeometry( 10, 100, 210, 30 ); - commentEdit->setMaxLength( 256 ); - commentEdit->setMinimumSize( commentEdit->sizeHint() ); - commentEdit->setFixedHeight( fontHeight ); - mainlayout->addWidget(commentEdit, 1); - - cbAutoEmbed = new TQCheckBox( i18n("Left click previews"), d->m_frame, "cbAutoEmbed" ); - mainlayout->addWidget(cbAutoEmbed, 1); - - mainlayout->addStretch (10); - mainlayout->activate(); - - TQFile f( _props->kurl().path() ); - if ( !f.open( IO_ReadOnly ) ) - return; - f.close(); - - KSimpleConfig config( _props->kurl().path() ); - config.setDesktopGroup(); - TQString patternStr = config.readEntry( "Patterns" ); - TQString iconStr = config.readEntry( "Icon" ); - TQString commentStr = config.readEntry( "Comment" ); - m_sMimeStr = config.readEntry( "MimeType" ); - - if ( !patternStr.isEmpty() ) - patternEdit->setText( patternStr ); - if ( !commentStr.isEmpty() ) - commentEdit->setText( commentStr ); - if ( !m_sMimeStr.isEmpty() ) - mimeEdit->setText( m_sMimeStr ); - cbAutoEmbed->setTristate(); - if ( config.hasKey( "X-TDE-AutoEmbed" ) ) - cbAutoEmbed->setChecked( config.readBoolEntry( "X-TDE-AutoEmbed" ) ); - else - cbAutoEmbed->setNoChange(); - - connect( patternEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - connect( commentEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - connect( mimeEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - connect( cbAutoEmbed, TQT_SIGNAL( toggled( bool ) ), - this, TQT_SIGNAL( changed() ) ); -} - -KBindingPropsPlugin::~KBindingPropsPlugin() -{ - delete d; -} - -// TQString KBindingPropsPlugin::tabName () const -// { -// return i18n ("A&ssociation"); -// } - -bool KBindingPropsPlugin::supports( KFileItemList _items ) -{ - if ( _items.count() != 1 ) - return false; - KFileItem * item = _items.first(); - // check if desktop file - if ( !KPropsDlgPlugin::isDesktopFile( item ) ) - return false; - - // open file and check type - KDesktopFile config( item->url().path(), true /* readonly */ ); - return config.hasMimeTypeType(); -} - -void KBindingPropsPlugin::applyChanges() -{ - TQString path = properties->kurl().path(); - TQFile f( path ); - - if ( !f.open( IO_ReadWrite ) ) - { - KMessageBox::sorry( 0, i18n("<qt>Could not save properties. You do not have " - "sufficient access to write to <b>%1</b>.</qt>").arg(path)); - return; - } - f.close(); - - KSimpleConfig config( path ); - config.setDesktopGroup(); - config.writeEntry( "Type", TQString::fromLatin1("MimeType") ); - - config.writeEntry( "Patterns", patternEdit->text() ); - config.writeEntry( "Comment", commentEdit->text() ); - config.writeEntry( "Comment", - commentEdit->text(), true, false, true ); // for compat - config.writeEntry( "MimeType", mimeEdit->text() ); - if ( cbAutoEmbed->state() == TQButton::NoChange ) - config.deleteEntry( "X-TDE-AutoEmbed", false ); - else - config.writeEntry( "X-TDE-AutoEmbed", cbAutoEmbed->isChecked() ); - config.sync(); -} - -/* ---------------------------------------------------- - * - * KDevicePropsPlugin - * - * -------------------------------------------------- */ - -class KDevicePropsPlugin::KDevicePropsPluginPrivate -{ -public: - KDevicePropsPluginPrivate() - { - } - ~KDevicePropsPluginPrivate() - { - } - - TQFrame *m_frame; - TQStringList mountpointlist; - TQLabel *m_freeSpaceText; - TQLabel *m_freeSpaceLabel; - TQProgressBar *m_freeSpaceBar; -}; - -KDevicePropsPlugin::KDevicePropsPlugin( KPropertiesDialog *_props ) : KPropsDlgPlugin( _props ) -{ - d = new KDevicePropsPluginPrivate; - d->m_frame = properties->addPage(i18n("De&vice")); - - TQStringList devices; - KMountPoint::List mountPoints = KMountPoint::possibleMountPoints(); - - for(KMountPoint::List::ConstIterator it = mountPoints.begin(); - it != mountPoints.end(); ++it) - { - KMountPoint *mp = *it; - TQString mountPoint = mp->mountPoint(); - TQString device = mp->mountedFrom(); - kdDebug()<<"mountPoint :"<<mountPoint<<" device :"<<device<<" mp->mountType() :"<<mp->mountType()<<endl; - - if ((mountPoint != "-") && (mountPoint != "none") && !mountPoint.isEmpty() - && device != "none") - { - devices.append( device + TQString::fromLatin1(" (") - + mountPoint + TQString::fromLatin1(")") ); - m_devicelist.append(device); - d->mountpointlist.append(mountPoint); - } - } - - TQGridLayout *layout = new TQGridLayout( d->m_frame, 0, 2, 0, - KDialog::spacingHint()); - layout->setColStretch(1, 1); - - TQLabel* label; - label = new TQLabel( d->m_frame ); - label->setText( devices.count() == 0 ? - i18n("Device (/dev/fd0):") : // old style - i18n("Device:") ); // new style (combobox) - layout->addWidget(label, 0, 0); - - device = new TQComboBox( true, d->m_frame, "ComboBox_device" ); - device->insertStringList( devices ); - layout->addWidget(device, 0, 1); - connect( device, TQT_SIGNAL( activated( int ) ), - this, TQT_SLOT( slotActivated( int ) ) ); - - readonly = new TQCheckBox( d->m_frame, "CheckBox_readonly" ); - readonly->setText( i18n("Read only") ); - layout->addWidget(readonly, 1, 1); - - label = new TQLabel( d->m_frame ); - label->setText( i18n("File system:") ); - layout->addWidget(label, 2, 0); - - TQLabel *fileSystem = new TQLabel( d->m_frame ); - layout->addWidget(fileSystem, 2, 1); - - label = new TQLabel( d->m_frame ); - label->setText( devices.count()==0 ? - i18n("Mount point (/mnt/floppy):") : // old style - i18n("Mount point:")); // new style (combobox) - layout->addWidget(label, 3, 0); - - mountpoint = new TQLabel( d->m_frame, "LineEdit_mountpoint" ); - - layout->addWidget(mountpoint, 3, 1); - - // show disk free - d->m_freeSpaceText = new TQLabel(i18n("Free disk space:"), d->m_frame ); - layout->addWidget(d->m_freeSpaceText, 4, 0); - - d->m_freeSpaceLabel = new TQLabel( d->m_frame ); - layout->addWidget( d->m_freeSpaceLabel, 4, 1 ); - - d->m_freeSpaceBar = new TQProgressBar( d->m_frame, "freeSpaceBar" ); - layout->addMultiCellWidget(d->m_freeSpaceBar, 5, 5, 0, 1); - - // we show it in the slot when we know the values - d->m_freeSpaceText->hide(); - d->m_freeSpaceLabel->hide(); - d->m_freeSpaceBar->hide(); - - KSeparator* sep = new KSeparator( KSeparator::HLine, d->m_frame); - layout->addMultiCellWidget(sep, 6, 6, 0, 1); - - unmounted = new KIconButton( d->m_frame ); - int bsize = 66 + 2 * unmounted->style().pixelMetric(TQStyle::PM_ButtonMargin); - unmounted->setFixedSize(bsize, bsize); - unmounted->setIconType(KIcon::Desktop, KIcon::Device); - layout->addWidget(unmounted, 7, 0); - - label = new TQLabel( i18n("Unmounted Icon"), d->m_frame ); - layout->addWidget(label, 7, 1); - - layout->setRowStretch(8, 1); - - TQString path( _props->kurl().path() ); - - TQFile f( path ); - if ( !f.open( IO_ReadOnly ) ) - return; - f.close(); - - KSimpleConfig config( path ); - config.setDesktopGroup(); - TQString deviceStr = config.readEntry( "Dev" ); - TQString mountPointStr = config.readEntry( "MountPoint" ); - bool ro = config.readBoolEntry( "ReadOnly", false ); - TQString unmountedStr = config.readEntry( "UnmountIcon" ); - - fileSystem->setText( i18n(config.readEntry("FSType").local8Bit()) ); - - device->setEditText( deviceStr ); - if ( !deviceStr.isEmpty() ) { - // Set default options for this device (first matching entry) - int index = m_devicelist.findIndex(deviceStr); - if (index != -1) - { - //kdDebug(250) << "found it " << index << endl; - slotActivated( index ); - } - } - - if ( !mountPointStr.isEmpty() ) - { - mountpoint->setText( mountPointStr ); - updateInfo(); - } - - readonly->setChecked( ro ); - - if ( unmountedStr.isEmpty() ) - unmountedStr = KMimeType::defaultMimeTypePtr()->KServiceType::icon(); // default icon - - unmounted->setIcon( unmountedStr ); - - connect( device, TQT_SIGNAL( activated( int ) ), - this, TQT_SIGNAL( changed() ) ); - connect( device, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - connect( readonly, TQT_SIGNAL( toggled( bool ) ), - this, TQT_SIGNAL( changed() ) ); - connect( unmounted, TQT_SIGNAL( iconChanged( TQString ) ), - this, TQT_SIGNAL( changed() ) ); - - connect( device, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SLOT( slotDeviceChanged() ) ); -} - -KDevicePropsPlugin::~KDevicePropsPlugin() -{ - delete d; -} - -// TQString KDevicePropsPlugin::tabName () const -// { -// return i18n ("De&vice"); -// } - -void KDevicePropsPlugin::updateInfo() -{ - // we show it in the slot when we know the values - d->m_freeSpaceText->hide(); - d->m_freeSpaceLabel->hide(); - d->m_freeSpaceBar->hide(); - - if ( !mountpoint->text().isEmpty() ) - { - KDiskFreeSp * job = new KDiskFreeSp; - connect( job, TQT_SIGNAL( foundMountPoint( const unsigned long&, const unsigned long&, - const unsigned long&, const TQString& ) ), - this, TQT_SLOT( slotFoundMountPoint( const unsigned long&, const unsigned long&, - const unsigned long&, const TQString& ) ) ); - - job->readDF( mountpoint->text() ); - } -} - -void KDevicePropsPlugin::slotActivated( int index ) -{ - // Update mountpoint so that it matches the device that was selected in the combo - device->setEditText( m_devicelist[index] ); - mountpoint->setText( d->mountpointlist[index] ); - - updateInfo(); -} - -void KDevicePropsPlugin::slotDeviceChanged() -{ - // Update mountpoint so that it matches the typed device - int index = m_devicelist.findIndex( device->currentText() ); - if ( index != -1 ) - mountpoint->setText( d->mountpointlist[index] ); - else - mountpoint->setText( TQString::null ); - - updateInfo(); -} - -void KDevicePropsPlugin::slotFoundMountPoint( const unsigned long& kBSize, - const unsigned long& /*kBUsed*/, - const unsigned long& kBAvail, - const TQString& ) -{ - d->m_freeSpaceText->show(); - d->m_freeSpaceLabel->show(); - - int percUsed = 100 - (int)(100.0 * kBAvail / kBSize); - - d->m_freeSpaceLabel->setText( - // xgettext:no-c-format -- Don't warn about translating the %1 out of %2 part. - i18n("Available space out of total partition size (percent used)", "%1 out of %2 (%3% used)") - .arg(TDEIO::convertSizeFromKB(kBAvail)) - .arg(TDEIO::convertSizeFromKB(kBSize)) - .arg( 100 - (int)(100.0 * kBAvail / kBSize) )); - - d->m_freeSpaceBar->setProgress(percUsed, 100); - d->m_freeSpaceBar->show(); -} - -bool KDevicePropsPlugin::supports( KFileItemList _items ) -{ - if ( _items.count() != 1 ) - return false; - KFileItem * item = _items.first(); - // check if desktop file - if ( !KPropsDlgPlugin::isDesktopFile( item ) ) - return false; - // open file and check type - KDesktopFile config( item->url().path(), true /* readonly */ ); - return config.hasDeviceType(); -} - -void KDevicePropsPlugin::applyChanges() -{ - TQString path = properties->kurl().path(); - TQFile f( path ); - if ( !f.open( IO_ReadWrite ) ) - { - KMessageBox::sorry( 0, i18n("<qt>Could not save properties. You do not have sufficient " - "access to write to <b>%1</b>.</qt>").arg(path)); - return; - } - f.close(); - - KSimpleConfig config( path ); - config.setDesktopGroup(); - config.writeEntry( "Type", TQString::fromLatin1("FSDevice") ); - - config.writeEntry( "Dev", device->currentText() ); - config.writeEntry( "MountPoint", mountpoint->text() ); - - config.writeEntry( "UnmountIcon", unmounted->icon() ); - kdDebug(250) << "unmounted->icon() = " << unmounted->icon() << endl; - - config.writeEntry( "ReadOnly", readonly->isChecked() ); - - config.sync(); -} - - -/* ---------------------------------------------------- - * - * KDesktopPropsPlugin - * - * -------------------------------------------------- */ - - -KDesktopPropsPlugin::KDesktopPropsPlugin( KPropertiesDialog *_props ) - : KPropsDlgPlugin( _props ) -{ - TQFrame *frame = properties->addPage(i18n("&Application")); - TQVBoxLayout *mainlayout = new TQVBoxLayout( frame, 0, KDialog::spacingHint() ); - - w = new KPropertiesDesktopBase(frame); - mainlayout->addWidget(w); - - bool bKDesktopMode = (TQCString(tqApp->name()) == "kdesktop"); // nasty heh? - - if (bKDesktopMode) - { - // Hide Name entry - w->nameEdit->hide(); - w->nameLabel->hide(); - } - - w->pathEdit->setMode(KFile::Directory | KFile::LocalOnly); - w->pathEdit->lineEdit()->setAcceptDrops(false); - - connect( w->nameEdit, TQT_SIGNAL( textChanged( const TQString & ) ), this, TQT_SIGNAL( changed() ) ); - connect( w->genNameEdit, TQT_SIGNAL( textChanged( const TQString & ) ), this, TQT_SIGNAL( changed() ) ); - connect( w->commentEdit, TQT_SIGNAL( textChanged( const TQString & ) ), this, TQT_SIGNAL( changed() ) ); - connect( w->commandEdit, TQT_SIGNAL( textChanged( const TQString & ) ), this, TQT_SIGNAL( changed() ) ); - connect( w->pathEdit, TQT_SIGNAL( textChanged( const TQString & ) ), this, TQT_SIGNAL( changed() ) ); - - connect( w->browseButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotBrowseExec() ) ); - connect( w->addFiletypeButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotAddFiletype() ) ); - connect( w->delFiletypeButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotDelFiletype() ) ); - connect( w->advancedButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotAdvanced() ) ); - - // now populate the page - TQString path = _props->kurl().path(); - TQFile f( path ); - if ( !f.open( IO_ReadOnly ) ) - return; - f.close(); - - KDesktopFile config( path ); - TQString nameStr = config.readName(); - TQString genNameStr = config.readGenericName(); - TQString commentStr = config.readComment(); - TQString commandStr = config.readPathEntry( "Exec" ); - if (commandStr.left(12) == "ksystraycmd ") - { - commandStr.remove(0, 12); - m_systrayBool = true; - } - else - m_systrayBool = false; - - m_origCommandStr = commandStr; - TQString pathStr = config.readPathEntry( "Path" ); - m_terminalBool = config.readBoolEntry( "Terminal" ); - m_terminalOptionStr = config.readEntry( "TerminalOptions" ); - m_suidBool = config.readBoolEntry( "X-TDE-SubstituteUID" ); - m_suidUserStr = config.readEntry( "X-TDE-Username" ); - if( config.hasKey( "StartupNotify" )) - m_startupBool = config.readBoolEntry( "StartupNotify", true ); - else - m_startupBool = config.readBoolEntry( "X-TDE-StartupNotify", true ); - m_dcopServiceType = config.readEntry("X-DCOP-ServiceType").lower(); - - TQStringList mimeTypes = config.readListEntry( "MimeType", ';' ); - - if ( nameStr.isEmpty() || bKDesktopMode ) { - // We'll use the file name if no name is specified - // because we _need_ a Name for a valid file. - // But let's do it in apply, not here, so that we pick up the right name. - setDirty(); - } - if ( !bKDesktopMode ) - w->nameEdit->setText(nameStr); - - w->genNameEdit->setText( genNameStr ); - w->commentEdit->setText( commentStr ); - w->commandEdit->setText( commandStr ); - w->pathEdit->lineEdit()->setText( pathStr ); - w->filetypeList->setAllColumnsShowFocus(true); - - KMimeType::Ptr defaultMimetype = KMimeType::defaultMimeTypePtr(); - for(TQStringList::ConstIterator it = mimeTypes.begin(); - it != mimeTypes.end(); ) - { - KMimeType::Ptr p = KMimeType::mimeType(*it); - ++it; - TQString preference; - if (it != mimeTypes.end()) - { - bool numeric; - (*it).toInt(&numeric); - if (numeric) - { - preference = *it; - ++it; - } - } - if (p && (p != defaultMimetype)) - { - new TQListViewItem(w->filetypeList, p->name(), p->comment(), preference); - } - } - -} - -KDesktopPropsPlugin::~KDesktopPropsPlugin() -{ -} - -void KDesktopPropsPlugin::slotSelectMimetype() -{ - TQListView *w = (TQListView*)sender(); - TQListViewItem *item = w->firstChild(); - while(item) - { - if (item->isSelected()) - w->setSelected(item, false); - item = item->nextSibling(); - } -} - -void KDesktopPropsPlugin::slotAddFiletype() -{ - KDialogBase dlg(w, "KPropertiesMimetypes", true, - i18n("Add File Type for %1").arg(properties->kurl().fileName()), - KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok); - - KGuiItem okItem(i18n("&Add"), TQString::null /* no icon */, - i18n("Add the selected file types to\nthe list of supported file types."), - i18n("Add the selected file types to\nthe list of supported file types.")); - dlg.setButtonOK(okItem); - - KPropertiesMimetypeBase *mw = new KPropertiesMimetypeBase(&dlg); - - dlg.setMainWidget(mw); - - { - mw->listView->setRootIsDecorated(true); - mw->listView->setSelectionMode(TQListView::Extended); - mw->listView->setAllColumnsShowFocus(true); - mw->listView->setFullWidth(true); - mw->listView->setMinimumSize(500,400); - - connect(mw->listView, TQT_SIGNAL(selectionChanged()), - this, TQT_SLOT(slotSelectMimetype())); - connect(mw->listView, TQT_SIGNAL(doubleClicked( TQListViewItem *, const TQPoint &, int )), - &dlg, TQT_SLOT( slotOk())); - - TQMap<TQString,TQListViewItem*> majorMap; - TQListViewItem *majorGroup; - KMimeType::List mimetypes = KMimeType::allMimeTypes(); - TQValueListIterator<KMimeType::Ptr> it(mimetypes.begin()); - for (; it != mimetypes.end(); ++it) { - TQString mimetype = (*it)->name(); - if (mimetype == KMimeType::defaultMimeType()) - continue; - int index = mimetype.find("/"); - TQString maj = mimetype.left(index); - TQString min = mimetype.mid(index+1); - - TQMapIterator<TQString,TQListViewItem*> mit = majorMap.find( maj ); - if ( mit == majorMap.end() ) { - majorGroup = new TQListViewItem( mw->listView, maj ); - majorGroup->setExpandable(true); - mw->listView->setOpen(majorGroup, true); - majorMap.insert( maj, majorGroup ); - } - else - { - majorGroup = mit.data(); - } - - TQListViewItem *item = new TQListViewItem(majorGroup, min, (*it)->comment()); - item->setPixmap(0, (*it)->pixmap(KIcon::Small, IconSize(KIcon::Small))); - } - TQMapIterator<TQString,TQListViewItem*> mit = majorMap.find( "all" ); - if ( mit != majorMap.end()) - { - mw->listView->setCurrentItem(mit.data()); - mw->listView->ensureItemVisible(mit.data()); - } - } - - if (dlg.exec() == KDialogBase::Accepted) - { - KMimeType::Ptr defaultMimetype = KMimeType::defaultMimeTypePtr(); - TQListViewItem *majorItem = mw->listView->firstChild(); - while(majorItem) - { - TQString major = majorItem->text(0); - - TQListViewItem *minorItem = majorItem->firstChild(); - while(minorItem) - { - if (minorItem->isSelected()) - { - TQString mimetype = major + "/" + minorItem->text(0); - KMimeType::Ptr p = KMimeType::mimeType(mimetype); - if (p && (p != defaultMimetype)) - { - mimetype = p->name(); - bool found = false; - TQListViewItem *item = w->filetypeList->firstChild(); - while (item) - { - if (mimetype == item->text(0)) - { - found = true; - break; - } - item = item->nextSibling(); - } - if (!found) { - new TQListViewItem(w->filetypeList, p->name(), p->comment()); - emit changed(); - } - } - } - minorItem = minorItem->nextSibling(); - } - - majorItem = majorItem->nextSibling(); - } - - } -} - -void KDesktopPropsPlugin::slotDelFiletype() -{ - delete w->filetypeList->currentItem(); - emit changed(); -} - -void KDesktopPropsPlugin::checkCommandChanged() -{ - if (KRun::binaryName(w->commandEdit->text(), true) != - KRun::binaryName(m_origCommandStr, true)) - { - TQString m_origCommandStr = w->commandEdit->text(); - m_dcopServiceType= TQString::null; // Reset - } -} - -void KDesktopPropsPlugin::applyChanges() -{ - kdDebug(250) << "KDesktopPropsPlugin::applyChanges" << endl; - TQString path = properties->kurl().path(); - - TQFile f( path ); - - if ( !f.open( IO_ReadWrite ) ) { - KMessageBox::sorry( 0, i18n("<qt>Could not save properties. You do not have " - "sufficient access to write to <b>%1</b>.</qt>").arg(path)); - return; - } - f.close(); - - // If the command is changed we reset certain settings that are strongly - // coupled to the command. - checkCommandChanged(); - - KSimpleConfig config( path ); - config.setDesktopGroup(); - config.writeEntry( "Type", TQString::fromLatin1("Application")); - config.writeEntry( "Comment", w->commentEdit->text() ); - config.writeEntry( "Comment", w->commentEdit->text(), true, false, true ); // for compat - config.writeEntry( "GenericName", w->genNameEdit->text() ); - config.writeEntry( "GenericName", w->genNameEdit->text(), true, false, true ); // for compat - - if (m_systrayBool) - config.writePathEntry( "Exec", w->commandEdit->text().prepend("ksystraycmd ") ); - else - config.writePathEntry( "Exec", w->commandEdit->text() ); - config.writePathEntry( "Path", w->pathEdit->lineEdit()->text() ); - - // Write mimeTypes - TQStringList mimeTypes; - for( TQListViewItem *item = w->filetypeList->firstChild(); - item; item = item->nextSibling() ) - { - TQString preference = item->text(2); - mimeTypes.append(item->text(0)); - if (!preference.isEmpty()) - mimeTypes.append(preference); - } - - config.writeEntry( "MimeType", mimeTypes, ';' ); - - if ( !w->nameEdit->isHidden() ) { - TQString nameStr = w->nameEdit->text(); - config.writeEntry( "Name", nameStr ); - config.writeEntry( "Name", nameStr, true, false, true ); - } - - config.writeEntry("Terminal", m_terminalBool); - config.writeEntry("TerminalOptions", m_terminalOptionStr); - config.writeEntry("X-TDE-SubstituteUID", m_suidBool); - config.writeEntry("X-TDE-Username", m_suidUserStr); - config.writeEntry("StartupNotify", m_startupBool); - config.writeEntry("X-DCOP-ServiceType", m_dcopServiceType); - config.sync(); - - // KSycoca update needed? - TQString sycocaPath = TDEGlobal::dirs()->relativeLocation("apps", path); - bool updateNeeded = !sycocaPath.startsWith("/"); - if (!updateNeeded) - { - sycocaPath = TDEGlobal::dirs()->relativeLocation("xdgdata-apps", path); - updateNeeded = !sycocaPath.startsWith("/"); - } - if (updateNeeded) - KService::rebuildKSycoca(w); -} - - -void KDesktopPropsPlugin::slotBrowseExec() -{ - KURL f = KFileDialog::getOpenURL( TQString::null, - TQString::null, w ); - if ( f.isEmpty() ) - return; - - if ( !f.isLocalFile()) { - KMessageBox::sorry(w, i18n("Only executables on local file systems are supported.")); - return; - } - - TQString path = f.path(); - KRun::shellQuote( path ); - w->commandEdit->setText( path ); -} - -void KDesktopPropsPlugin::slotAdvanced() -{ - KDialogBase dlg(w, "KPropertiesDesktopAdv", true, - i18n("Advanced Options for %1").arg(properties->kurl().fileName()), - KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok); - KPropertiesDesktopAdvBase *w = new KPropertiesDesktopAdvBase(&dlg); - - dlg.setMainWidget(w); - - // If the command is changed we reset certain settings that are strongly - // coupled to the command. - checkCommandChanged(); - - // check to see if we use konsole if not do not add the nocloseonexit - // because we don't know how to do this on other terminal applications - TDEConfigGroup confGroup( TDEGlobal::config(), TQString::fromLatin1("General") ); - TQString preferredTerminal = confGroup.readPathEntry("TerminalApplication", - TQString::fromLatin1("konsole")); - - bool terminalCloseBool = false; - - if (preferredTerminal == "konsole") - { - terminalCloseBool = (m_terminalOptionStr.contains( "--noclose" ) > 0); - w->terminalCloseCheck->setChecked(terminalCloseBool); - m_terminalOptionStr.replace( "--noclose", ""); - } - else - { - w->terminalCloseCheck->hide(); - } - - w->terminalCheck->setChecked(m_terminalBool); - w->terminalEdit->setText(m_terminalOptionStr); - w->terminalCloseCheck->setEnabled(m_terminalBool); - w->terminalEdit->setEnabled(m_terminalBool); - w->terminalEditLabel->setEnabled(m_terminalBool); - - w->suidCheck->setChecked(m_suidBool); - w->suidEdit->setText(m_suidUserStr); - w->suidEdit->setEnabled(m_suidBool); - w->suidEditLabel->setEnabled(m_suidBool); - - w->startupInfoCheck->setChecked(m_startupBool); - w->systrayCheck->setChecked(m_systrayBool); - - if (m_dcopServiceType == "unique") - w->dcopCombo->setCurrentItem(2); - else if (m_dcopServiceType == "multi") - w->dcopCombo->setCurrentItem(1); - else if (m_dcopServiceType == "wait") - w->dcopCombo->setCurrentItem(3); - else - w->dcopCombo->setCurrentItem(0); - - // Provide username completion up to 1000 users. - KCompletion *kcom = new KCompletion; - kcom->setOrder(KCompletion::Sorted); - struct passwd *pw; - int i, maxEntries = 1000; - setpwent(); - for (i=0; ((pw = getpwent()) != 0L) && (i < maxEntries); i++) - kcom->addItem(TQString::fromLatin1(pw->pw_name)); - endpwent(); - if (i < maxEntries) - { - w->suidEdit->setCompletionObject(kcom, true); - w->suidEdit->setAutoDeleteCompletionObject( true ); - w->suidEdit->setCompletionMode(TDEGlobalSettings::CompletionAuto); - } - else - { - delete kcom; - } - - connect( w->terminalEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - connect( w->terminalCloseCheck, TQT_SIGNAL( toggled( bool ) ), - this, TQT_SIGNAL( changed() ) ); - connect( w->terminalCheck, TQT_SIGNAL( toggled( bool ) ), - this, TQT_SIGNAL( changed() ) ); - connect( w->suidCheck, TQT_SIGNAL( toggled( bool ) ), - this, TQT_SIGNAL( changed() ) ); - connect( w->suidEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - connect( w->startupInfoCheck, TQT_SIGNAL( toggled( bool ) ), - this, TQT_SIGNAL( changed() ) ); - connect( w->systrayCheck, TQT_SIGNAL( toggled( bool ) ), - this, TQT_SIGNAL( changed() ) ); - connect( w->dcopCombo, TQT_SIGNAL( highlighted( int ) ), - this, TQT_SIGNAL( changed() ) ); - - if ( dlg.exec() == TQDialog::Accepted ) - { - m_terminalOptionStr = w->terminalEdit->text().stripWhiteSpace(); - m_terminalBool = w->terminalCheck->isChecked(); - m_suidBool = w->suidCheck->isChecked(); - m_suidUserStr = w->suidEdit->text().stripWhiteSpace(); - m_startupBool = w->startupInfoCheck->isChecked(); - m_systrayBool = w->systrayCheck->isChecked(); - - if (w->terminalCloseCheck->isChecked()) - { - m_terminalOptionStr.append(" --noclose"); - } - - switch(w->dcopCombo->currentItem()) - { - case 1: m_dcopServiceType = "multi"; break; - case 2: m_dcopServiceType = "unique"; break; - case 3: m_dcopServiceType = "wait"; break; - default: m_dcopServiceType = "none"; break; - } - } -} - -bool KDesktopPropsPlugin::supports( KFileItemList _items ) -{ - if ( _items.count() != 1 ) - return false; - KFileItem * item = _items.first(); - // check if desktop file - if ( !KPropsDlgPlugin::isDesktopFile( item ) ) - return false; - // open file and check type - KDesktopFile config( item->url().path(), true /* readonly */ ); - return config.hasApplicationType() && kapp->authorize("run_desktop_files") && kapp->authorize("shell_access"); -} - -void KPropertiesDialog::virtual_hook( int id, void* data ) -{ KDialogBase::virtual_hook( id, data ); } - -void KPropsDlgPlugin::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - - - - - -/** - * The following code is obsolete and only kept for binary compatibility - * To be removed in KDE 4 - */ - -class KExecPropsPlugin::KExecPropsPluginPrivate -{ -public: - KExecPropsPluginPrivate() - { - } - ~KExecPropsPluginPrivate() - { - } - - TQFrame *m_frame; - TQCheckBox *nocloseonexitCheck; -}; - -KExecPropsPlugin::KExecPropsPlugin( KPropertiesDialog *_props ) - : KPropsDlgPlugin( _props ) -{ - d = new KExecPropsPluginPrivate; - d->m_frame = properties->addPage(i18n("E&xecute")); - TQVBoxLayout * mainlayout = new TQVBoxLayout( d->m_frame, 0, - KDialog::spacingHint()); - - // Now the widgets in the top layout - - TQLabel* l; - l = new TQLabel( i18n( "Comman&d:" ), d->m_frame ); - mainlayout->addWidget(l); - - TQHBoxLayout * hlayout; - hlayout = new TQHBoxLayout(KDialog::spacingHint()); - mainlayout->addLayout(hlayout); - - execEdit = new KLineEdit( d->m_frame ); - TQWhatsThis::add(execEdit,i18n( - "Following the command, you can have several place holders which will be replaced " - "with the actual values when the actual program is run:\n" - "%f - a single file name\n" - "%F - a list of files; use for applications that can open several local files at once\n" - "%u - a single URL\n" - "%U - a list of URLs\n" - "%d - the folder of the file to open\n" - "%D - a list of folders\n" - "%i - the icon\n" - "%m - the mini-icon\n" - "%c - the caption")); - hlayout->addWidget(execEdit, 1); - - l->setBuddy( execEdit ); - - execBrowse = new TQPushButton( d->m_frame ); - execBrowse->setText( i18n("&Browse...") ); - hlayout->addWidget(execBrowse); - - // The groupbox about swallowing - TQGroupBox* tmpQGroupBox; - tmpQGroupBox = new TQGroupBox( i18n("Panel Embedding"), d->m_frame ); - tmpQGroupBox->setColumnLayout( 0, Qt::Horizontal ); - - mainlayout->addWidget(tmpQGroupBox); - - TQGridLayout *grid = new TQGridLayout(tmpQGroupBox->layout(), 2, 2); - grid->setSpacing( KDialog::spacingHint() ); - grid->setColStretch(1, 1); - - l = new TQLabel( i18n( "&Execute on click:" ), tmpQGroupBox ); - grid->addWidget(l, 0, 0); - - swallowExecEdit = new KLineEdit( tmpQGroupBox ); - grid->addWidget(swallowExecEdit, 0, 1); - - l->setBuddy( swallowExecEdit ); - - l = new TQLabel( i18n( "&Window title:" ), tmpQGroupBox ); - grid->addWidget(l, 1, 0); - - swallowTitleEdit = new KLineEdit( tmpQGroupBox ); - grid->addWidget(swallowTitleEdit, 1, 1); - - l->setBuddy( swallowTitleEdit ); - - // The groupbox about run in terminal - - tmpQGroupBox = new TQGroupBox( d->m_frame ); - tmpQGroupBox->setColumnLayout( 0, Qt::Horizontal ); - - mainlayout->addWidget(tmpQGroupBox); - - grid = new TQGridLayout(tmpQGroupBox->layout(), 3, 2); - grid->setSpacing( KDialog::spacingHint() ); - grid->setColStretch(1, 1); - - terminalCheck = new TQCheckBox( tmpQGroupBox ); - terminalCheck->setText( i18n("&Run in terminal") ); - grid->addMultiCellWidget(terminalCheck, 0, 0, 0, 1); - - // check to see if we use konsole if not do not add the nocloseonexit - // because we don't know how to do this on other terminal applications - TDEConfigGroup confGroup( TDEGlobal::config(), TQString::fromLatin1("General") ); - TQString preferredTerminal = confGroup.readPathEntry("TerminalApplication", - TQString::fromLatin1("konsole")); - - int posOptions = 1; - d->nocloseonexitCheck = 0L; - if (preferredTerminal == "konsole") - { - posOptions = 2; - d->nocloseonexitCheck = new TQCheckBox( tmpQGroupBox ); - d->nocloseonexitCheck->setText( i18n("Do not &close when command exits") ); - grid->addMultiCellWidget(d->nocloseonexitCheck, 1, 1, 0, 1); - } - - terminalLabel = new TQLabel( i18n( "&Terminal options:" ), tmpQGroupBox ); - grid->addWidget(terminalLabel, posOptions, 0); - - terminalEdit = new KLineEdit( tmpQGroupBox ); - grid->addWidget(terminalEdit, posOptions, 1); - - terminalLabel->setBuddy( terminalEdit ); - - // The groupbox about run with substituted uid. - - tmpQGroupBox = new TQGroupBox( d->m_frame ); - tmpQGroupBox->setColumnLayout( 0, Qt::Horizontal ); - - mainlayout->addWidget(tmpQGroupBox); - - grid = new TQGridLayout(tmpQGroupBox->layout(), 2, 2); - grid->setSpacing(KDialog::spacingHint()); - grid->setColStretch(1, 1); - - suidCheck = new TQCheckBox(tmpQGroupBox); - suidCheck->setText(i18n("Ru&n as a different user")); - grid->addMultiCellWidget(suidCheck, 0, 0, 0, 1); - - suidLabel = new TQLabel(i18n( "&Username:" ), tmpQGroupBox); - grid->addWidget(suidLabel, 1, 0); - - suidEdit = new KLineEdit(tmpQGroupBox); - grid->addWidget(suidEdit, 1, 1); - - suidLabel->setBuddy( suidEdit ); - - mainlayout->addStretch(1); - - // now populate the page - TQString path = _props->kurl().path(); - TQFile f( path ); - if ( !f.open( IO_ReadOnly ) ) - return; - f.close(); - - KSimpleConfig config( path ); - config.setDollarExpansion( false ); - config.setDesktopGroup(); - execStr = config.readPathEntry( "Exec" ); - swallowExecStr = config.readPathEntry( "SwallowExec" ); - swallowTitleStr = config.readEntry( "SwallowTitle" ); - termBool = config.readBoolEntry( "Terminal" ); - termOptionsStr = config.readEntry( "TerminalOptions" ); - suidBool = config.readBoolEntry( "X-TDE-SubstituteUID" ); - suidUserStr = config.readEntry( "X-TDE-Username" ); - - if ( !swallowExecStr.isNull() ) - swallowExecEdit->setText( swallowExecStr ); - if ( !swallowTitleStr.isNull() ) - swallowTitleEdit->setText( swallowTitleStr ); - - if ( !execStr.isNull() ) - execEdit->setText( execStr ); - - if ( d->nocloseonexitCheck ) - { - d->nocloseonexitCheck->setChecked( (termOptionsStr.contains( "--noclose" ) > 0) ); - termOptionsStr.replace( "--noclose", ""); - } - if ( !termOptionsStr.isNull() ) - terminalEdit->setText( termOptionsStr ); - - terminalCheck->setChecked( termBool ); - enableCheckedEdit(); - - suidCheck->setChecked( suidBool ); - suidEdit->setText( suidUserStr ); - enableSuidEdit(); - - // Provide username completion up to 1000 users. - KCompletion *kcom = new KCompletion; - kcom->setOrder(KCompletion::Sorted); - struct passwd *pw; - int i, maxEntries = 1000; - setpwent(); - for (i=0; ((pw = getpwent()) != 0L) && (i < maxEntries); i++) - kcom->addItem(TQString::fromLatin1(pw->pw_name)); - endpwent(); - if (i < maxEntries) - { - suidEdit->setCompletionObject(kcom, true); - suidEdit->setAutoDeleteCompletionObject( true ); - suidEdit->setCompletionMode(TDEGlobalSettings::CompletionAuto); - } - else - { - delete kcom; - } - - connect( swallowExecEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - connect( swallowTitleEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - connect( execEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - connect( terminalEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - if (d->nocloseonexitCheck) - connect( d->nocloseonexitCheck, TQT_SIGNAL( toggled( bool ) ), - this, TQT_SIGNAL( changed() ) ); - connect( terminalCheck, TQT_SIGNAL( toggled( bool ) ), - this, TQT_SIGNAL( changed() ) ); - connect( suidCheck, TQT_SIGNAL( toggled( bool ) ), - this, TQT_SIGNAL( changed() ) ); - connect( suidEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - - connect( execBrowse, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotBrowseExec() ) ); - connect( terminalCheck, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableCheckedEdit() ) ); - connect( suidCheck, TQT_SIGNAL( clicked() ), this, TQT_SLOT( enableSuidEdit() ) ); - -} - -KExecPropsPlugin::~KExecPropsPlugin() -{ - delete d; -} - -void KExecPropsPlugin::enableCheckedEdit() -{ - bool checked = terminalCheck->isChecked(); - terminalLabel->setEnabled( checked ); - if (d->nocloseonexitCheck) - d->nocloseonexitCheck->setEnabled( checked ); - terminalEdit->setEnabled( checked ); -} - -void KExecPropsPlugin::enableSuidEdit() -{ - bool checked = suidCheck->isChecked(); - suidLabel->setEnabled( checked ); - suidEdit->setEnabled( checked ); -} - -bool KExecPropsPlugin::supports( KFileItemList _items ) -{ - if ( _items.count() != 1 ) - return false; - KFileItem * item = _items.first(); - // check if desktop file - if ( !KPropsDlgPlugin::isDesktopFile( item ) ) - return false; - // open file and check type - KDesktopFile config( item->url().path(), true /* readonly */ ); - return config.hasApplicationType() && kapp->authorize("run_desktop_files") && kapp->authorize("shell_access"); -} - -void KExecPropsPlugin::applyChanges() -{ - kdDebug(250) << "KExecPropsPlugin::applyChanges" << endl; - TQString path = properties->kurl().path(); - - TQFile f( path ); - - if ( !f.open( IO_ReadWrite ) ) { - KMessageBox::sorry( 0, i18n("<qt>Could not save properties. You do not have " - "sufficient access to write to <b>%1</b>.</qt>").arg(path)); - return; - } - f.close(); - - KSimpleConfig config( path ); - config.setDesktopGroup(); - config.writeEntry( "Type", TQString::fromLatin1("Application")); - config.writePathEntry( "Exec", execEdit->text() ); - config.writePathEntry( "SwallowExec", swallowExecEdit->text() ); - config.writeEntry( "SwallowTitle", swallowTitleEdit->text() ); - config.writeEntry( "Terminal", terminalCheck->isChecked() ); - TQString temp = terminalEdit->text(); - if (d->nocloseonexitCheck ) - if ( d->nocloseonexitCheck->isChecked() ) - temp += TQString::fromLatin1("--noclose "); - temp = temp.stripWhiteSpace(); - config.writeEntry( "TerminalOptions", temp ); - config.writeEntry( "X-TDE-SubstituteUID", suidCheck->isChecked() ); - config.writeEntry( "X-TDE-Username", suidEdit->text() ); -} - - -void KExecPropsPlugin::slotBrowseExec() -{ - KURL f = KFileDialog::getOpenURL( TQString::null, - TQString::null, d->m_frame ); - if ( f.isEmpty() ) - return; - - if ( !f.isLocalFile()) { - KMessageBox::sorry(d->m_frame, i18n("Only executables on local file systems are supported.")); - return; - } - - TQString path = f.path(); - KRun::shellQuote( path ); - execEdit->setText( path ); -} - -class TDEApplicationPropsPlugin::TDEApplicationPropsPluginPrivate -{ -public: - TDEApplicationPropsPluginPrivate() - { - m_kdesktopMode = TQCString(tqApp->name()) == "kdesktop"; // nasty heh? - } - ~TDEApplicationPropsPluginPrivate() - { - } - - TQFrame *m_frame; - bool m_kdesktopMode; -}; - -TDEApplicationPropsPlugin::TDEApplicationPropsPlugin( KPropertiesDialog *_props ) - : KPropsDlgPlugin( _props ) -{ - d = new TDEApplicationPropsPluginPrivate; - d->m_frame = properties->addPage(i18n("&Application")); - TQVBoxLayout *toplayout = new TQVBoxLayout( d->m_frame, 0, KDialog::spacingHint()); - - TQIconSet iconSet; - TQPixmap pixMap; - - addExtensionButton = new TQPushButton( TQString::null, d->m_frame ); - iconSet = SmallIconSet( "back" ); - addExtensionButton->setIconSet( iconSet ); - pixMap = iconSet.pixmap( TQIconSet::Small, TQIconSet::Normal ); - addExtensionButton->setFixedSize( pixMap.width()+8, pixMap.height()+8 ); - connect( addExtensionButton, TQT_SIGNAL( clicked() ), - TQT_SLOT( slotAddExtension() ) ); - - delExtensionButton = new TQPushButton( TQString::null, d->m_frame ); - iconSet = SmallIconSet( "forward" ); - delExtensionButton->setIconSet( iconSet ); - delExtensionButton->setFixedSize( pixMap.width()+8, pixMap.height()+8 ); - connect( delExtensionButton, TQT_SIGNAL( clicked() ), - TQT_SLOT( slotDelExtension() ) ); - - TQLabel *l; - - TQGridLayout *grid = new TQGridLayout(2, 2); - grid->setColStretch(1, 1); - toplayout->addLayout(TQT_TQLAYOUT(grid)); - - if ( d->m_kdesktopMode ) - { - // in kdesktop the name field comes from the first tab - nameEdit = 0L; - } - else - { - l = new TQLabel(i18n("Name:"), d->m_frame, "Label_4" ); - grid->addWidget(l, 0, 0); - - nameEdit = new KLineEdit( d->m_frame, "LineEdit_3" ); - grid->addWidget(nameEdit, 0, 1); - } - - l = new TQLabel(i18n("Description:"), d->m_frame, "Label_5" ); - grid->addWidget(l, 1, 0); - - genNameEdit = new KLineEdit( d->m_frame, "LineEdit_4" ); - grid->addWidget(genNameEdit, 1, 1); - - l = new TQLabel(i18n("Comment:"), d->m_frame, "Label_3" ); - grid->addWidget(l, 2, 0); - - commentEdit = new KLineEdit( d->m_frame, "LineEdit_2" ); - grid->addWidget(commentEdit, 2, 1); - - l = new TQLabel(i18n("File types:"), d->m_frame); - toplayout->addWidget(l, 0, AlignLeft); - - grid = new TQGridLayout(4, 3); - grid->setColStretch(0, 1); - grid->setColStretch(2, 1); - grid->setRowStretch( 0, 1 ); - grid->setRowStretch( 3, 1 ); - toplayout->addLayout(TQT_TQLAYOUT(grid), 2); - - extensionsList = new TQListBox( d->m_frame ); - extensionsList->setSelectionMode( TQListBox::Extended ); - grid->addMultiCellWidget(extensionsList, 0, 3, 0, 0); - - grid->addWidget(addExtensionButton, 1, 1); - grid->addWidget(delExtensionButton, 2, 1); - - availableExtensionsList = new TQListBox( d->m_frame ); - availableExtensionsList->setSelectionMode( TQListBox::Extended ); - grid->addMultiCellWidget(availableExtensionsList, 0, 3, 2, 2); - - TQString path = properties->kurl().path() ; - TQFile f( path ); - if ( !f.open( IO_ReadOnly ) ) - return; - f.close(); - - KDesktopFile config( path ); - TQString commentStr = config.readComment(); - TQString genNameStr = config.readGenericName(); - - TQStringList selectedTypes = config.readListEntry( "ServiceTypes" ); - // For compatibility with KDE 1.x - selectedTypes += config.readListEntry( "MimeType", ';' ); - - TQString nameStr = config.readName(); - if ( nameStr.isEmpty() || d->m_kdesktopMode ) { - // We'll use the file name if no name is specified - // because we _need_ a Name for a valid file. - // But let's do it in apply, not here, so that we pick up the right name. - setDirty(); - } - - commentEdit->setText( commentStr ); - genNameEdit->setText( genNameStr ); - if ( nameEdit ) - nameEdit->setText( nameStr ); - - selectedTypes.sort(); - TQStringList::Iterator sit = selectedTypes.begin(); - for( ; sit != selectedTypes.end(); ++sit ) { - if ( !((*sit).isEmpty()) ) - extensionsList->insertItem( *sit ); - } - - KMimeType::List mimeTypes = KMimeType::allMimeTypes(); - TQValueListIterator<KMimeType::Ptr> it2 = mimeTypes.begin(); - for ( ; it2 != mimeTypes.end(); ++it2 ) - addMimeType ( (*it2)->name() ); - - updateButton(); - - connect( extensionsList, TQT_SIGNAL( highlighted( int ) ), - this, TQT_SLOT( updateButton() ) ); - connect( availableExtensionsList, TQT_SIGNAL( highlighted( int ) ), - this, TQT_SLOT( updateButton() ) ); - - connect( addExtensionButton, TQT_SIGNAL( clicked() ), - this, TQT_SIGNAL( changed() ) ); - connect( delExtensionButton, TQT_SIGNAL( clicked() ), - this, TQT_SIGNAL( changed() ) ); - if ( nameEdit ) - connect( nameEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - connect( commentEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - connect( genNameEdit, TQT_SIGNAL( textChanged( const TQString & ) ), - this, TQT_SIGNAL( changed() ) ); - connect( availableExtensionsList, TQT_SIGNAL( selected( int ) ), - this, TQT_SIGNAL( changed() ) ); - connect( extensionsList, TQT_SIGNAL( selected( int ) ), - this, TQT_SIGNAL( changed() ) ); -} - -TDEApplicationPropsPlugin::~TDEApplicationPropsPlugin() -{ - delete d; -} - -// TQString TDEApplicationPropsPlugin::tabName () const -// { -// return i18n ("&Application"); -// } - -void TDEApplicationPropsPlugin::updateButton() -{ - addExtensionButton->setEnabled(availableExtensionsList->currentItem()>-1); - delExtensionButton->setEnabled(extensionsList->currentItem()>-1); -} - -void TDEApplicationPropsPlugin::addMimeType( const TQString & name ) -{ - // Add a mimetype to the list of available mime types if not in the extensionsList - - bool insert = true; - - for ( uint i = 0; i < extensionsList->count(); i++ ) - if ( extensionsList->text( i ) == name ) - insert = false; - - if ( insert ) - { - availableExtensionsList->insertItem( name ); - availableExtensionsList->sort(); - } -} - -bool TDEApplicationPropsPlugin::supports( KFileItemList _items ) -{ - // same constraints as KExecPropsPlugin : desktop file with Type = Application - return KExecPropsPlugin::supports( _items ); -} - -void TDEApplicationPropsPlugin::applyChanges() -{ - TQString path = properties->kurl().path(); - - TQFile f( path ); - - if ( !f.open( IO_ReadWrite ) ) { - KMessageBox::sorry( 0, i18n("<qt>Could not save properties. You do not " - "have sufficient access to write to <b>%1</b>.</qt>").arg(path)); - return; - } - f.close(); - - KSimpleConfig config( path ); - config.setDesktopGroup(); - config.writeEntry( "Type", TQString::fromLatin1("Application")); - config.writeEntry( "Comment", commentEdit->text() ); - config.writeEntry( "Comment", commentEdit->text(), true, false, true ); // for compat - config.writeEntry( "GenericName", genNameEdit->text() ); - config.writeEntry( "GenericName", genNameEdit->text(), true, false, true ); // for compat - - TQStringList selectedTypes; - for ( uint i = 0; i < extensionsList->count(); i++ ) - selectedTypes.append( extensionsList->text( i ) ); - - config.writeEntry( "MimeType", selectedTypes, ';' ); - config.writeEntry( "ServiceTypes", "" ); - // hmm, actually it should probably be the contrary (but see also typeslistitem.cpp) - - TQString nameStr = nameEdit ? nameEdit->text() : TQString::null; - if ( nameStr.isEmpty() ) // nothing entered, or widget not existing at all (kdesktop mode) - nameStr = nameFromFileName(properties->kurl().fileName()); - - config.writeEntry( "Name", nameStr ); - config.writeEntry( "Name", nameStr, true, false, true ); - - config.sync(); -} - -void TDEApplicationPropsPlugin::slotAddExtension() -{ - TQListBoxItem *item = availableExtensionsList->firstItem(); - TQListBoxItem *nextItem; - - while ( item ) - { - nextItem = item->next(); - - if ( item->isSelected() ) - { - extensionsList->insertItem( item->text() ); - availableExtensionsList->removeItem( availableExtensionsList->index( item ) ); - } - - item = nextItem; - } - - extensionsList->sort(); - updateButton(); -} - -void TDEApplicationPropsPlugin::slotDelExtension() -{ - TQListBoxItem *item = extensionsList->firstItem(); - TQListBoxItem *nextItem; - - while ( item ) - { - nextItem = item->next(); - - if ( item->isSelected() ) - { - availableExtensionsList->insertItem( item->text() ); - extensionsList->removeItem( extensionsList->index( item ) ); - } - - item = nextItem; - } - - availableExtensionsList->sort(); - updateButton(); -} - - - -#include "kpropertiesdialog.moc" diff --git a/kio/kfile/kpropertiesdialog.h b/kio/kfile/kpropertiesdialog.h deleted file mode 100644 index 3f6d48c6a..000000000 --- a/kio/kfile/kpropertiesdialog.h +++ /dev/null @@ -1,918 +0,0 @@ -/* This file is part of the KDE project - Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> - Copyright (c) 1999, 2000 Preston Brown <pbrown@kde.org> - Copyright (c) 2000 Simon Hausmann <hausmann@kde.org> - Copyright (c) 2000 David Faure <faure@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -/* - * This file holds the definitions for all classes used to - * display a properties dialog. - */ - -#ifndef __propsdlg_h -#define __propsdlg_h - -#include <tqstring.h> -#include <tqptrlist.h> - -#include <kdemacros.h> -#include <kurl.h> -#include <kfileitem.h> -#include <kdialogbase.h> - -class TQLineEdit; -class TQCheckBox; -class TQPushButton; -class KLineEdit; -class KURLRequester; -class TQButton; -class KIconButton; -class KPropsDlgPlugin; -class TQComboBox; - -#define KPropsPage KPropsDlgPlugin - -namespace TDEIO { class Job; } - -/** - * The main properties dialog class. - * A Properties Dialog is a dialog which displays various information - * about a particular file or URL, or several files or URLs. - * This main class holds various related classes, which are instantiated in - * the form of tab entries in the tabbed dialog that this class provides. - * The various tabs themselves will let the user view, and sometimes change, - * information about the file or URL. - * - * \image html kpropertiesdialog.png "Typical KProperties Dialog" - * - * This class must be created with (void)new KPropertiesDialog(...) - * It will take care of deleting itself. - * - * If you are looking for more flexibility, see KFileMetaInfo and - * KFileMetaInfoWidget. - */ -class TDEIO_EXPORT KPropertiesDialog : public KDialogBase -{ - Q_OBJECT - -public: - - /** - * Determine whether there are any property pages available for the - * given file items. - * @param _items the list of items to check. - * @return true if there are any property pages, otherwise false. - */ - static bool canDisplay( KFileItemList _items ); - - /** - * Brings up a Properties dialog, as shown above. - * This is the normal constructor for - * file-manager type applications, where you have a KFileItem instance - * to work with. Normally you will use this - * method rather than the one below. - * - * @param item file item whose properties should be displayed. - * @param parent is the parent of the dialog widget. - * @param name is the internal name. - * @param modal tells the dialog whether it should be modal. - * @param autoShow tells the dialog whether it should show itself automatically. - */ - KPropertiesDialog( KFileItem * item, - TQWidget* parent = 0L, const char* name = 0L, - bool modal = false, bool autoShow = true); - - /** - * \overload - * - * You use this constructor for cases where you have a number of items, - * rather than a single item. Be careful which methods you use - * when passing a list of files or URLs, since some of them will only - * work on the first item in a list. - * - * @param _items list of file items whose properties should be displayed. - * @param parent is the parent of the dialog widget. - * @param name is the internal name. - * @param modal tells the dialog whether it should be modal. - * @param autoShow tells the dialog whether it should show itself automatically. - */ - KPropertiesDialog( KFileItemList _items, - TQWidget *parent = 0L, const char* name = 0L, - bool modal = false, bool autoShow = true); - -#ifndef KDE_NO_COMPAT - /** - * @deprecated You should use the following constructor instead of this one. - * The only change that is required is to delete the _mode argument. - * - * @param _url the URL whose properties should be displayed - * @param _mode unused. - * @param parent is the parent of the dialog widget. - * @param name is the internal name. - * @param modal tells the dialog whether it should be modal. - * @param autoShow tells the dialog whether it should show itself automatically. */ - KPropertiesDialog( const KURL& _url, mode_t _mode, - TQWidget* parent = 0L, const char* name = 0L, - bool modal = false, bool autoShow = true) KDE_DEPRECATED; -#endif - - /** - * Brings up a Properties dialog. Convenience constructor for - * non-file-manager applications, where you have a KURL rather than a - * KFileItem or KFileItemList. - * - * @param _url the URL whose properties should be displayed - * @param parent is the parent of the dialog widget. - * @param name is the internal name. - * @param modal tells the dialog whether it should be modal. - * IMPORTANT: This constructor, together with modal=true, leads to a grave - * display bug (due to TDEIO::stat() being run before the dialog has all the - * necessary information). Do not use this combination for now. - * For local files with a known mimetype, simply create a KFileItem and pass - * it to the other constructor. - * - * @param autoShow tells the dialog whethr it should show itself automatically. - */ - KPropertiesDialog( const KURL& _url, - TQWidget* parent = 0L, const char* name = 0L, - bool modal = false, bool autoShow = true); - - /** - * Creates a properties dialog for a new .desktop file (whose name - * is not known yet), based on a template. Special constructor for - * "File / New" in file-manager type applications. - * - * @param _tempUrl template used for reading only - * @param _currentDir directory where the file will be written to - * @param _defaultName something to put in the name field, - * like mimetype.desktop - * @param parent is the parent of the dialog widget. - * @param name is the internal name. - * @param modal tells the dialog whether it should be modal. - * @param autoShow tells the dialog whethr it should show itself automatically. - */ - KPropertiesDialog( const KURL& _tempUrl, const KURL& _currentDir, - const TQString& _defaultName, - TQWidget* parent = 0L, const char* name = 0L, - bool modal = false, bool autoShow = true); - - /** - * Creates an empty properties dialog (for applications that want use - * a standard dialog, but for things not doable via the plugin-mechanism). - * - * @param title is the string display as the "filename" in the caption of the dialog. - * @param parent is the parent of the dialog widget. - * @param name is the internal name. - * @param modal tells the dialog whether it should be modal. - */ - KPropertiesDialog (const TQString& title, - TQWidget* parent = 0L, const char* name = 0L, bool modal = false); - - /** - * Cleans up the properties dialog and frees any associated resources, - * including the dialog itself. Note that when a properties dialog is - * closed it cleans up and deletes itself. - */ - virtual ~KPropertiesDialog(); - - /** - * Immediately displays a Properties dialog using constructor with - * the same parameters. - * On MS Windows, if @p item points to a local file, native (non modal) property - * dialog is displayed (@p parent and @p modal are ignored in this case). - * - * @return true on succesfull dialog displaying (can be false on win32). - * @since 3.4 - */ - static bool showDialog(KFileItem* item, TQWidget* parent = 0, - const char* name = 0, bool modal = false); - - /** - * Immediately displays a Properties dialog using constructor with - * the same parameters. - * On MS Windows, if @p _url points to a local file, native (non modal) property - * dialog is displayed (@p parent and @p modal are ignored in this case). - * - * @return true on succesfull dialog displaying (can be false on win32). - * @since 3.4 - */ - static bool showDialog(const KURL& _url, TQWidget* parent = 0, - const char* name = 0, bool modal = false); - - /** - * Immediately displays a Properties dialog using constructor with - * the same parameters. - * On MS Windows, if @p _items has one element and this element points - * to a local file, native (non modal) property dialog is displayed - * (@p parent and @p modal are ignored in this case). - * - * @return true on succesfull dialog displaying (can be false on win32). - * @since 3.4 - */ - static bool showDialog(const KFileItemList& _items, TQWidget* parent = 0, - const char* name = 0, bool modal = false); - - /** - * Adds a "3rd party" properties plugin to the dialog. Useful - * for extending the properties mechanism. - * - * To create a new plugin type, inherit from the base class KPropsDlgPlugin - * and implement all the methods. If you define a service .desktop file - * for your plugin, you do not need to call insertPlugin(). - * - * @param plugin is a pointer to the KPropsDlgPlugin. The Properties - * dialog will do destruction for you. The KPropsDlgPlugin \b must - * have been created with the KPropertiesDialog as its parent. - * @see KPropsDlgPlugin - */ - void insertPlugin (KPropsDlgPlugin *plugin); - - /** - * The URL of the file that has its properties being displayed. - * This is only valid if the KPropertiesDialog was created/shown - * for one file or URL. - * - * @return a parsed URL. - */ - const KURL& kurl() const { return m_singleUrl; } - - /** - * @return the file item for which the dialog is shown - * - * Warning: this method returns the first item of the list. - * This means that you should use this only if you are sure the dialog is used - * for a single item. Otherwise, you probably want items() instead. - */ - KFileItem *item() { return m_items.first(); } - - /** - * @return the items for which the dialog is shown - */ - KFileItemList items() const { return m_items; } - - /** - * @return a pointer to the dialog - * @deprecated KPropertiesDialog directly inherits from KDialogBase, so use \a this instead - */ - KDE_DEPRECATED KDialogBase* dialog() { return this; } - /** - * @return a pointer to the dialog - * @deprecated KPropertiesDialog directly inherits from KDialogBase, so use \a this instead - */ - KDE_DEPRECATED const KDialogBase* dialog() const { return this; } - - /** - * If the dialog is being built from a template, this method - * returns the current directory. If no template, it returns TQString::null. - * See the template form of the constructor. - * - * @return the current directory or TQString::null - */ - const KURL& currentDir() const { return m_currentDir; } - - /** - * If the dialog is being built from a template, this method - * returns the default name. If no template, it returns TQString::null. - * See the template form of the constructor. - * @return the default name or TQString::null - */ - const TQString& defaultName() const { return m_defaultName; } - - /** - * Updates the item URL (either called by rename or because - * a global apps/mimelnk desktop file is being saved) - * Can only be called if the dialog applies to a single file or URL. - * @param _newUrl the new URL - */ - void updateUrl( const KURL& _newUrl ); - - /** - * Renames the item to the specified name. This can only be called if - * the dialog applies to a single file or URL. - * @param _name new filename, encoded. - * \see FilePropsDlgPlugin::applyChanges - */ - void rename( const TQString& _name ); - - /** - * To abort applying changes. - */ - void abortApplying(); - - /** - * Shows the page that was previously set by - * setFileSharingPage(), or does nothing if no page - * was set yet. - * \see setFileSharingPage - * @since 3.1 - */ - void showFileSharingPage(); - - /** - * Sets the file sharing page. - * This page is shown when calling showFileSharingPage(). - * - * @param page the page to set - * \see showFileSharingPage - * @since 3.3 - */ - void setFileSharingPage(TQWidget* page); - - /** - * Call this to make the filename lineedit readonly, to prevent the user - * from renaming the file. - * \param ro true if the lineedit should be read only - * @since 3.2 - */ - void setFileNameReadOnly( bool ro ); - -public slots: - /** - * Called when the user presses 'Ok'. - */ - virtual void slotOk(); // Deletes the PropertiesDialog instance - /** - * Called when the user presses 'Cancel'. - */ - virtual void slotCancel(); // Deletes the PropertiesDialog instance - -signals: - /** - * This signal is emitted when the Properties Dialog is closed (for - * example, with OK or Cancel buttons) - */ - void propertiesClosed(); - - /** - * This signal is emitted when the properties changes are applied (for - * example, with the OK button) - */ - void applied(); - - /** - * This signal is emitted when the properties changes are aborted (for - * example, with the Cancel button) - */ - - void canceled(); - /** - * Emitted before changes to @p oldUrl are saved as @p newUrl. - * The receiver may change @p newUrl to point to an alternative - * save location. - */ - void saveAs(const KURL &oldUrl, KURL &newUrl); - -private: - - /** - * Common initialization for all constructors - */ - void init (bool modal = false, bool autoShow = true); - - /** - * Inserts all pages in the dialog. - */ - void insertPages(); - - /** - * The URL of the props dialog (when shown for only one file) - */ - KURL m_singleUrl; - - /** - * List of items this props dialog is shown for - */ - KFileItemList m_items; - - /** - * For templates - */ - TQString m_defaultName; - KURL m_currentDir; - - /** - * List of all plugins inserted ( first one first ) - */ - TQPtrList<KPropsDlgPlugin> m_pageList; - -private slots: - void slotStatResult( TDEIO::Job * ); // No longer used -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KPropertiesDialogPrivate; - KPropertiesDialogPrivate *d; -}; - -/** - * A Plugin in the Properties dialog - * This is an abstract class. You must inherit from this class - * to build a new kind of tabbed page for the KPropertiesDialog. - * A plugin in itself is just a library containing code, not a dialog's page. - * It's up to the plugin to insert pages into the parent dialog. - * - * To make a plugin available, define a service that implements the KPropsDlg/Plugin - * servicetype, as well as the mimetypes for which the plugin should be created. - * For instance, ServiceTypes=KPropsDlg/Plugin,text/html,application/x-mymimetype. - * - * You can also include X-TDE-Protocol=file if you want that plugin - * to be loaded only for local files, for instance. - */ -class TDEIO_EXPORT KPropsDlgPlugin : public TQObject -{ - Q_OBJECT -public: - /** - * Constructor - * To insert tabs into the properties dialog, use the add methods provided by - * KDialogBase (the properties dialog is a KDialogBase). - */ - KPropsDlgPlugin( KPropertiesDialog *_props ); - virtual ~KPropsDlgPlugin(); - - /** - * Applies all changes to the file. - * This function is called when the user presses 'Ok'. The last plugin inserted - * is called first. - */ - virtual void applyChanges(); - - /** - * Convenience method for most ::supports methods - * @return true if the file is a local, regular, readable, desktop file - */ - static bool isDesktopFile( KFileItem * _item ); - - void setDirty( bool b ); - bool isDirty() const; - -public slots: - void setDirty(); // same as setDirty( true ) - -signals: - /** - * Emit this signal when the user changed anything in the plugin's tabs. - * The hosting PropertiesDialog will call applyChanges only if the - * PropsPlugin has emitted this signal before. - */ - void changed(); - -protected: - /** - * Pointer to the dialog - */ - KPropertiesDialog *properties; - - int fontHeight; -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KPropsDlgPluginPrivate; - KPropsDlgPluginPrivate *d; -}; - -/** - * 'General' plugin - * This plugin displays the name of the file, its size and access times. - * @internal - */ -class TDEIO_EXPORT KFilePropsPlugin : public KPropsDlgPlugin -{ - Q_OBJECT -public: - /** - * Constructor - */ - KFilePropsPlugin( KPropertiesDialog *_props ); - virtual ~KFilePropsPlugin(); - - /** - * Applies all changes made. This plugin must be always the first - * plugin in the dialog, since this function may rename the file which - * may confuse other applyChanges functions. - */ - virtual void applyChanges(); - - /** - * Tests whether the files specified by _items need a 'General' plugin. - */ - static bool supports( KFileItemList _items ); - - /** - * Called after all plugins applied their changes - */ - void postApplyChanges(); - - void setFileNameReadOnly( bool ro ); - -protected slots: - void slotEditFileType(); - void slotCopyFinished( TDEIO::Job * ); - void slotFileRenamed( TDEIO::Job *, const KURL &, const KURL & ); - void slotDirSizeUpdate(); - void slotDirSizeFinished( TDEIO::Job * ); - void slotFoundMountPoint( const TQString& mp, unsigned long kBSize, - unsigned long kBUsed, unsigned long kBAvail ); - void slotSizeStop(); - void slotSizeDetermine(); - -private slots: - // workaround for compiler bug - void slotFoundMountPoint( const unsigned long& kBSize, const unsigned long& - kBUsed, const unsigned long& kBAvail, const TQString& mp ); - void nameFileChanged(const TQString &text ); - void slotIconChanged(); - -private: - void determineRelativePath( const TQString & path ); - void applyIconChanges(); - - TQWidget *iconArea; - TQWidget *nameArea; - - TQLabel *m_sizeLabel; - TQPushButton *m_sizeDetermineButton; - TQPushButton *m_sizeStopButton; - - TQString m_sRelativePath; - bool m_bFromTemplate; - - /** - * The initial filename - */ - TQString oldName; - - class KFilePropsPluginPrivate; - KFilePropsPluginPrivate *d; -}; - -/** - * 'Permissions' plugin - * In this plugin you can modify permissions and change - * the owner of a file. - * @internal - */ -class TDEIO_EXPORT KFilePermissionsPropsPlugin : public KPropsDlgPlugin -{ - Q_OBJECT -public: - enum PermissionsMode { - PermissionsOnlyFiles = 0, - PermissionsOnlyDirs = 1, - PermissionsOnlyLinks = 2, - PermissionsMixed = 3 - }; - - enum PermissionsTarget { - PermissionsOwner = 0, - PermissionsGroup = 1, - PermissionsOthers = 2 - }; - - /** - * Constructor - */ - KFilePermissionsPropsPlugin( KPropertiesDialog *_props ); - virtual ~KFilePermissionsPropsPlugin(); - - virtual void applyChanges(); - - /** - * Tests whether the file specified by _items needs a 'Permissions' plugin. - */ - static bool supports( KFileItemList _items ); - -private slots: - - void slotChmodResult( TDEIO::Job * ); - void slotShowAdvancedPermissions(); - -private: - void setComboContent(TQComboBox *combo, PermissionsTarget target, - mode_t permissions, mode_t partial); - bool isIrregular(mode_t permissions, bool isDir, bool isLink); - void enableAccessControls(bool enable); - void updateAccessControls(); - void getPermissionMasks(mode_t &andFilePermissions, - mode_t &andDirPermissions, - mode_t &orFilePermissions, - mode_t &orDirPermissions); - - static const mode_t permissionsMasks[3]; - static const mode_t standardPermissions[4]; - static const char *permissionsTexts[4][4]; - - // unused, for binary compatibility! - TQCheckBox *permBox[3][4]; - - TQComboBox *grpCombo; - - KLineEdit *usrEdit, *grpEdit; - - /** - * Old permissions - */ - mode_t permissions; - /** - * Old group - */ - TQString strGroup; - /** - * Old owner - */ - TQString strOwner; - - // unused, for compatibility - static mode_t fperm[3][4]; - - class KFilePermissionsPropsPluginPrivate; - KFilePermissionsPropsPluginPrivate *d; -}; - - -/** - * Used to edit the files containing - * [Desktop Entry] - * URL=.... - * - * Such files are used to represent a program in kicker and konqueror. - * @internal - */ -class TDEIO_EXPORT KURLPropsPlugin : public KPropsDlgPlugin -{ - Q_OBJECT -public: - /** - * Constructor - */ - KURLPropsPlugin( KPropertiesDialog *_props ); - virtual ~KURLPropsPlugin(); - - virtual void applyChanges(); - - static bool supports( KFileItemList _items ); - -private: - KURLRequester *URLEdit; - KIconButton *iconBox; - - TQString URLStr; - TQString iconStr; - - TQPixmap pixmap; - TQString pixmapFile; -private: - class KURLPropsPluginPrivate; - KURLPropsPluginPrivate *d; -}; - - -/** - * Used to edit the files containing - * [Desktop Entry] - * Type=MimeType - * @internal - */ -class TDEIO_EXPORT KBindingPropsPlugin : public KPropsDlgPlugin -{ - Q_OBJECT -public: - /** - * Constructor - */ - KBindingPropsPlugin( KPropertiesDialog *_props ); - virtual ~KBindingPropsPlugin(); - - virtual void applyChanges(); - static bool supports( KFileItemList _items ); - -private: - - TQLineEdit *commentEdit; - TQLineEdit *patternEdit; - TQLineEdit *mimeEdit; - TQString m_sMimeStr; - - TQCheckBox * cbAutoEmbed; - - class KBindingPropsPluginPrivate; - KBindingPropsPluginPrivate *d; -}; - -/** - * Properties plugin for device .desktop files - * @internal - */ -class TDEIO_EXPORT KDevicePropsPlugin : public KPropsDlgPlugin -{ - Q_OBJECT -public: - KDevicePropsPlugin( KPropertiesDialog *_props ); - virtual ~KDevicePropsPlugin(); - - virtual void applyChanges(); - - static bool supports( KFileItemList _items ); - -private slots: - void slotActivated( int ); - void slotDeviceChanged(); - void slotFoundMountPoint( const unsigned long& kBSize, - const unsigned long& /*kBUsed*/, - const unsigned long& kBAvail, - const TQString& ); - -private: - void updateInfo(); - -private: - TQComboBox* device; - TQLabel* mountpoint; - TQCheckBox* readonly; - void* unused; - //KIconButton* mounted; - KIconButton* unmounted; - - TQStringList m_devicelist; - int indexDevice; - int indexMountPoint; - int indexFSType; - - TQPixmap pixmap; - TQString pixmapFile; - - class KDevicePropsPluginPrivate; - KDevicePropsPluginPrivate *d; -}; - -class KPropertiesDesktopBase; - -/** - * Used to edit the files containing - * [Desktop Entry] - * Type=Application - * - * Such files are used to represent a program in kicker and konqueror. - * @internal - */ -class TDEIO_EXPORT KDesktopPropsPlugin : public KPropsDlgPlugin -{ - Q_OBJECT -public: - /** - * Constructor - */ - KDesktopPropsPlugin( KPropertiesDialog *_props ); - virtual ~KDesktopPropsPlugin(); - - virtual void applyChanges(); - - static bool supports( KFileItemList _items ); - -public slots: - void slotAddFiletype(); - void slotDelFiletype(); - void slotBrowseExec(); - void slotAdvanced(); - void slotSelectMimetype(); - -private: - void checkCommandChanged(); - -private: - KPropertiesDesktopBase* w; - - TQString m_origCommandStr; - TQString m_terminalOptionStr; - TQString m_suidUserStr; - TQString m_dcopServiceType; - bool m_terminalBool; - bool m_terminalCloseBool; - bool m_suidBool; - bool m_startupBool; - bool m_systrayBool; - - class KDesktopPropsPluginPrivate; - KDesktopPropsPluginPrivate *d; -}; - -/** - * Used to edit the files containing - * [Desktop Entry] - * Type=Application - * - * Such files are used to represent a program in kicker and konqueror. - * @internal - * @deprecated replaced with KDesktopPropsPlugin - */ - /// Remove in KDE4 -class TDEIO_EXPORT_DEPRECATED KExecPropsPlugin : public KPropsDlgPlugin -{ - Q_OBJECT -public: - /** - * Constructor - */ - KExecPropsPlugin( KPropertiesDialog *_props ); - virtual ~KExecPropsPlugin(); - - virtual void applyChanges(); - - static bool supports( KFileItemList _items ); - -public slots: - void slotBrowseExec(); - -private slots: - void enableCheckedEdit(); - void enableSuidEdit(); - -private: - - TQLabel *terminalLabel; - TQLabel *suidLabel; - KLineEdit *execEdit; - TQCheckBox *terminalCheck; - TQCheckBox *suidCheck; - KLineEdit *terminalEdit; - KLineEdit *suidEdit; - KLineEdit *swallowExecEdit; - KLineEdit *swallowTitleEdit; - TQButton *execBrowse; - - TQString execStr; - TQString swallowExecStr; - TQString swallowTitleStr; - TQString termOptionsStr; - bool termBool; - bool suidBool; - TQString suidUserStr; - - class KExecPropsPluginPrivate; - KExecPropsPluginPrivate *d; -}; - -/** - * Used to edit the files containing - * [Desktop Entry] - * Type=Application - * - * Such files are used to represent a program in kicker and konqueror. - * @internal - * @deprecated replaced with KDesktopPropsPlugin - */ - /// Remove in KDE4 -class TDEIO_EXPORT_DEPRECATED TDEApplicationPropsPlugin : public KPropsDlgPlugin -{ - Q_OBJECT -public: - /** - * Constructor - */ - TDEApplicationPropsPlugin( KPropertiesDialog *_props ); - virtual ~TDEApplicationPropsPlugin(); - - virtual void applyChanges(); - - static bool supports( KFileItemList _items ); - -public slots: - void slotDelExtension(); - void slotAddExtension(); - -private slots: - void updateButton(); - -private: - void addMimeType( const TQString & name ); - - TQLineEdit *commentEdit; - TQLineEdit *genNameEdit; - TQLineEdit *nameEdit; - TQListBox *extensionsList; - TQListBox *availableExtensionsList; - TQPushButton *addExtensionButton; - TQPushButton *delExtensionButton; - - class TDEApplicationPropsPluginPrivate; - TDEApplicationPropsPluginPrivate *d; -}; - -#endif - diff --git a/kio/kfile/kpropertiesmimetypebase.ui b/kio/kfile/kpropertiesmimetypebase.ui deleted file mode 100644 index df7c796da..000000000 --- a/kio/kfile/kpropertiesmimetypebase.ui +++ /dev/null @@ -1,70 +0,0 @@ -<!DOCTYPE UI><UI version="3.2" stdsetdef="1"> -<class>KPropertiesMimetypeBase</class> -<widget class="TQWidget"> - <property name="name"> - <cstring>widget2</cstring> - </property> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>265</width> - <height>213</height> - </rect> - </property> - <vbox> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <property name="margin"> - <number>0</number> - </property> - <widget class="TQLabel"> - <property name="name"> - <cstring>textLabel1</cstring> - </property> - <property name="text"> - <string>Select one or more file types to add:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>listView</cstring> - </property> - </widget> - <widget class="KListView"> - <column> - <property name="text"> - <string>Mimetype</string> - </property> - <property name="clickable"> - <bool>true</bool> - </property> - <property name="resizable"> - <bool>true</bool> - </property> - </column> - <column> - <property name="text"> - <string>Description</string> - </property> - <property name="clickable"> - <bool>true</bool> - </property> - <property name="resizable"> - <bool>true</bool> - </property> - </column> - <property name="name"> - <cstring>listView</cstring> - </property> - <property name="whatsThis" stdset="0"> - <string><qt><p>Select one or more types of file that your application can handle here. This list is organized by <u>mimetypes</u>.</p> -<p>MIME, Multipurpose Internet (e)Mail Extension, is a standard protocol for identifying the type of data based on filename extensions and correspondent <u>mimetypes</u>. Example: the "bmp" part that comes after the dot in flower.bmp indicates that it is a specific kind of image, <u>image/x-bmp</u>. To know which application should open each type of file, the system should be informed about the abilities of each application to handle these extensions and mimetypes.</p></string> - </property> - </widget> - </vbox> -</widget> -<includes> - <include location="global" impldecl="in implementation">klistview.h</include> -</includes> -<layoutdefaults spacing="6" margin="11"/> -</UI> diff --git a/kio/kfile/kpropsdlg.h b/kio/kfile/kpropsdlg.h deleted file mode 100644 index 502a346e9..000000000 --- a/kio/kfile/kpropsdlg.h +++ /dev/null @@ -1,4 +0,0 @@ -// This is now called kpropertiesdialog.h -#ifndef KDE_NO_COMPAT -#include <kpropertiesdialog.h> -#endif diff --git a/kio/kfile/kpropsdlgplugin.desktop b/kio/kfile/kpropsdlgplugin.desktop deleted file mode 100644 index f74e3895e..000000000 --- a/kio/kfile/kpropsdlgplugin.desktop +++ /dev/null @@ -1,87 +0,0 @@ -[Desktop Entry] -Type=ServiceType -X-TDE-ServiceType=KPropsDlg/Plugin -Comment=Plugin for the Properties Dialog -Comment[af]=Inprop module vir die Eienskappe Dialoog -Comment[ar]=ملØÙ‚ لمربع Øوار خصائص -Comment[az]=SeçənÉ™klÉ™r RabitÉ™ Qutusu Üçün ÆlavÉ™ -Comment[bg]=ПриÑтавка за диалога "ИнформациÑ" -Comment[bn]=বৈশিষà§à¦Ÿà§à¦¯à¦¾à¦¬à¦²à§€ ডায়ালগ-à¦à¦° জনà§à¦¯ পà§à¦²à¦¾à¦—-ইন -Comment[br]=Adveziant evit kendiviz ar perzhioù -Comment[bs]=Dodatak za Properties dijalog -Comment[ca]=Connector per al dià leg de les propietats -Comment[cs]=Modul pro dialog vlastnostà -Comment[csb]=Plugins dialogòwégò òkna Swòjiznë -Comment[cy]=Ategyn am yr Ymgom Priodweddau -Comment[da]=Plugin til egenskabsdialog -Comment[de]=Erweiterung für den Eigenschaften-Dialog -Comment[el]=Î Ïόσθετο για το Διάλογο ιδιοτήτων -Comment[en_GB]=Plugin for the Properties Dialogue -Comment[eo]=Internaĵo por la Eco-dialogo -Comment[es]=Plugin para el diálogo de propiedades -Comment[et]=Omaduste dialoogi plugin -Comment[eu]=Propietateen elkarrizketa-koadroaren plugin-a -Comment[fa]=وصله برای Ù…Øاورۀ ویژگیها -Comment[fi]=Lisäosa asetusikkunalle -Comment[fr]=Module externe pour la boîte de dialogue des propriétés -Comment[fy]=Plugin foar de 'Eigenskippen'-dialooch -Comment[gl]=Plugin para o Diálogo de Propriedades -Comment[he]=תוסף לדו־שיח המ××¤×™×™× ×™× -Comment[hi]=विशेषता संवाद के लिठपà¥à¤²à¤—इन -Comment[hr]=Dodatak dijaloga 'Svojstva' -Comment[hu]=BeépülÅ‘ modul a tulajdonságok párbeszédablakhoz -Comment[id]=Plugin untuk Dialog Properties -Comment[is]=Ãforrit fyrir stillingarforritið -Comment[it]=Plugin per la finestra delle proprietà -Comment[ja]=è¨å®šãƒ€ã‚¤ã‚¢ãƒã‚°ãƒ—ラグイン -Comment[ka]=პáƒáƒ áƒáƒ›áƒ”ტრების გáƒáƒ›áƒáƒ თვის დიáƒáƒšáƒáƒ’ის მáƒáƒ“ული -Comment[kk]=ҚаÑиеттер диалогтың модулі -Comment[km]=កម្មវិធី​ជំនួយ​ážáž¶áž„​ក្នុង​សម្រាប់​ប្រអប់ លក្ážážŽáŸˆâ€‹ážŸáž˜áŸ’áž”ážáŸ’ážáž· -Comment[ko]=대화창 íŠ¹ì„±ì„ ìœ„í•œ í”ŒëŸ¬ê·¸ì¸ -Comment[lb]=Plugin fir den Eegeschaften-Dialog -Comment[lt]=Priedas savybių dialogui -Comment[lv]=ĪpaÅ¡Ä«bu Dialoga Iespraudnis -Comment[mk]=Приклучок за дијалогот за ÑвојÑтва -Comment[mn]=Шинж чанарууд диалогийн Plugin -Comment[ms]=Plugmasuk untuk Dialog Ciri-ciri -Comment[mt]=Plugin għad-djalogu tal-propjetajiet -Comment[nb]=Programtillegg for dialogvinduet for egenskaper -Comment[nds]=Plugin för den Egenschappen-Dialoog -Comment[ne]=विशेषता संवादका लागि पà¥à¤²à¤—इन -Comment[nl]=Plugin voor de 'Eigenschappen'-dialoog -Comment[nn]=Tillegg til eigenskapar-dialogen -Comment[nso]=Tsenyo ya Poledisano ya Dithoto -Comment[oc]=Branquament pel dialeg de propietats -Comment[pa]=ਵਿਸ਼ੇਸਤਾ ਵਾਰਤਾਲਾਪ ਲਈ ਪਲੱਗਿੰਨ -Comment[pl]=Wtyczka do okna dialogowego WÅ‚aÅ›ciwoÅ›ci -Comment[pt]='Plugin' para o diálogo de propriedades -Comment[pt_BR]=Plug-in para a janela de Propriedades -Comment[ro]=Modul pentru dialogul de proprietăţi -Comment[ru]=Модуль Ð´Ð»Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð° наÑтроек -Comment[rw]=Icomeka ry'Ikiganiro cy'Ibiranga -Comment[se]=Lassemoduvla ieÅ¡vuoÄ‘ahtaláseža várás -Comment[sk]=modul pre ialóg Ãlastnosti -Comment[sl]=Vstavek za pogovorno okno z lastnostmi -Comment[sq]=Shtojcë për Dialogun e Rekuizitave -Comment[sr]=Прикључак за дијалог Ñа ÑвојÑтвима -Comment[sr@Latn]=PrikljuÄak za dijalog sa svojstvima -Comment[sv]=Insticksprogram för egenskapsdialogen -Comment[ta]=பணà¯à®ªà¯à®•à®³à¯ உரையாடலà¯à®•à¯à®•à®¾à®© சொரà¯à®•à¯à®ªà¯à®ªà¯Šà®°à¯à®³à¯ -Comment[te]=లకà±à°·à°£à°¾à°² సంà°à°¾à°·à°£ కొరకౠపà±à°²à°—ినౠ-Comment[tg]=ШтепÑели барои ХуÑуÑиÑтҳои Тирезаи Диалогӣ Ðндохтан -Comment[th]=ปลั๊à¸à¸à¸´à¸™à¸ªà¸³à¸«à¸£à¸±à¸šà¸à¸¥à¹ˆà¸à¸‡à¸„ุณสมบัติ -Comment[tr]=Özellikler Ä°letiÅŸim Kutusu İçin Eklenti -Comment[tt]=Caylaw Dialogı öçen Östämä -Comment[uk]=Втулок Ð´Ð»Ñ Ð´Ñ–Ð°Ð»Ð¾Ð³Ñƒ влаÑтивоÑтей -Comment[uz]=Xossalar dialogi uchun plagin -Comment[uz@cyrillic]=ХоÑÑалар диалоги учун плагин -Comment[ven]=U pulaga ha zwishumiswa zwa nyambedzano -Comment[vi]=Bá»™ cầm phÃt cho há»™p thoại đặc tả. -Comment[xh]=Iplagi yangaphakathi Yezinto zobumnini Zencoko yababini -Comment[zh_CN]=属性对è¯çš„æ’件 -Comment[zh_HK]=屬性å°è©±ç›’çš„å¤–æŽ›ç¨‹å¼ -Comment[zh_TW]=屬性å°è©±ç›’çš„å¤–æŽ›ç¨‹å¼ -Comment[zu]=I-plugin Yengxoxo Yezinkomba zobunini - -[PropertyDef::X-TDE-Protocol] -Type=TQString diff --git a/kio/kfile/krecentdirs.cpp b/kio/kfile/krecentdirs.cpp deleted file mode 100644 index 6f4a01f3b..000000000 --- a/kio/kfile/krecentdirs.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- c++ -*- - * Copyright (C)2000 Waldo Bastian <bastian@kde.org> - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -#include <krecentdirs.h> -#include <ksimpleconfig.h> -#include <kstandarddirs.h> -#include <kglobalsettings.h> - -#define MAX_DIR_HISTORY 3 - -static void recentdirs_done(TDEConfig *config) -{ - if (config == TDEGlobal::config()) - { - config->sync(); - } - else - { - delete config; - } -} - -static TDEConfig *recentdirs_readList(TQString &key, TQStringList &result, bool readOnly) -{ - TDEConfig *config; - if ((key.length() < 2) || (key[0] != ':')) - key = ":default"; - if (key[1] == ':') - { - key = key.mid(2); - config = new KSimpleConfig(TQString::fromLatin1("krecentdirsrc"), readOnly); - } - else - { - key = key.mid(1); - config = TDEGlobal::config(); - config->setGroup(TQString::fromLatin1("Recent Dirs")); - } - - result=config->readPathListEntry(key); - if (result.isEmpty()) - { - result.append(TDEGlobalSettings::documentPath()); - } - return config; -} - -TQStringList KRecentDirs::list(const TQString &fileClass) -{ - TQString key = fileClass; - TQStringList result; - recentdirs_done(recentdirs_readList(key, result, true)); - return result; -} - -TQString KRecentDirs::dir(const TQString &fileClass) -{ - TQStringList result = list(fileClass); - return result[0]; -} - -void KRecentDirs::add(const TQString &fileClass, const TQString &directory) -{ - TQString key = fileClass; - TQStringList result; - TDEConfig *config = recentdirs_readList(key, result, false); - // make sure the dir is first in history - result.remove(directory); - result.prepend(directory); - while(result.count() > MAX_DIR_HISTORY) - result.remove(result.fromLast()); - config->writePathEntry(key, result); - recentdirs_done(config); -} - diff --git a/kio/kfile/krecentdirs.h b/kio/kfile/krecentdirs.h deleted file mode 100644 index 774655e51..000000000 --- a/kio/kfile/krecentdirs.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- - * Copyright (C)2000 Waldo Bastian <bastian@kde.org> - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -#ifndef __KRECENTDIRS_H -#define __KRECENTDIRS_H - -#include <tqstringlist.h> - -#include <tdelibs_export.h> - -/** - * The goal of this class is to make sure that, when the user needs to - * specify a file via the file selection dialog, this dialog will start - * in the directory most likely to contain the desired files. - * - * This works as follows: Each time the file selection dialog is - * shown, the programmer can specify a "file-class". The file-dialog will - * then start with the directory associated with this file-class. When - * the dialog closes, the directory currently shown in the file-dialog - * will be associated with the file-class. - * - * A file-class can either start with ':' or with '::'. If it starts with - * a single ':' the file-class is specific to the current application. - * If the file-class starts with '::' it is global to all applications. - */ -class TDEIO_EXPORT KRecentDirs -{ -public: - /** - * Returns a list of directories associated with this file-class. - * The most recently used directory is at the front of the list. - */ - static TQStringList list(const TQString &fileClass); - - /** - * Returns the most recently used directory accociated with this file-class. - */ - static TQString dir(const TQString &fileClass); - - /** - * Associates @p directory with @p fileClass - */ - static void add(const TQString &fileClass, const TQString &directory); -}; - -#endif diff --git a/kio/kfile/krecentdocument.cpp b/kio/kfile/krecentdocument.cpp deleted file mode 100644 index 1ec4a98c8..000000000 --- a/kio/kfile/krecentdocument.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* -*- c++ -*- - * Copyright (C)2000 Daniel M. Duley <mosfet@kde.org> - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -#include <krecentdocument.h> -#include <ksimpleconfig.h> -#include <kstandarddirs.h> -#include <kapplication.h> -#include <kurl.h> -#include <kdebug.h> -#include <kmimetype.h> -#include <kdesktopfile.h> -#include <tqdir.h> -#include <tqfileinfo.h> -#include <tqtextstream.h> -#include <tqstringlist.h> -#include <tqregexp.h> - -#include <sys/types.h> -#include <utime.h> - -TQString KRecentDocument::recentDocumentDirectory() -{ - // need to change this path, not sure where - return locateLocal("data", TQString::fromLatin1("RecentDocuments/")); -} - -TQStringList KRecentDocument::recentDocuments() -{ - TQDir d(recentDocumentDirectory(), "*.desktop", TQDir::Time, - TQDir::Files | TQDir::Readable | TQDir::Hidden); - - if (!d.exists()) - d.mkdir(recentDocumentDirectory()); - - TQStringList list = d.entryList(); - TQStringList fullList; - - for (TQStringList::ConstIterator it = list.begin(); it != list.end(); ++it) { - TQString pathDesktop = d.absFilePath( *it ); - KDesktopFile tmpDesktopFile( pathDesktop, false); - KURL urlDesktopFile(tmpDesktopFile.readURL()); - if( urlDesktopFile.isLocalFile() && !TQFile(urlDesktopFile.path()).exists()) - d.remove(pathDesktop); - else - fullList.append( pathDesktop ); - } - - return fullList; -} - -void KRecentDocument::add(const KURL& url) -{ - KRecentDocument::add(url, tqApp->argv()[0]); // ### argv[0] might not match the service filename! -} - -void KRecentDocument::add(const KURL& url, const TQString& desktopEntryName) -{ - if ( url.isLocalFile() && !TDEGlobal::dirs()->relativeLocation("tmp", url.path()).startsWith("/")) - return; - - TQString openStr = url.url(); - openStr.replace( TQRegExp("\\$"), "$$" ); // Desktop files with type "Link" are $-variable expanded - - kdDebug(250) << "KRecentDocument::add for " << openStr << endl; - TDEConfig *config = TDEGlobal::config(); - TQString oldGrp = config->group(); - config->setGroup(TQString::fromLatin1("RecentDocuments")); - bool useRecent = config->readBoolEntry(TQString::fromLatin1("UseRecent"), true); - int maxEntries = config->readNumEntry(TQString::fromLatin1("MaxEntries"), 10); - - config->setGroup(oldGrp); - if(!useRecent) - return; - - TQString path = recentDocumentDirectory(); - - TQString dStr = path + url.fileName(); - - TQString ddesktop = dStr + TQString::fromLatin1(".desktop"); - - int i=1; - // check for duplicates - while(TQFile::exists(ddesktop)){ - // see if it points to the same file and application - KSimpleConfig tmp(ddesktop); - tmp.setDesktopGroup(); - if(tmp.readEntry(TQString::fromLatin1("X-TDE-LastOpenedWith")) - == desktopEntryName) - { - utime(TQFile::encodeName(ddesktop), NULL); - return; - } - // if not append a (num) to it - ++i; - if ( i > maxEntries ) - break; - ddesktop = dStr + TQString::fromLatin1("[%1].desktop").arg(i); - } - - TQDir dir(path); - // check for max entries, delete oldest files if exceeded - TQStringList list = dir.entryList(TQDir::Files | TQDir::Hidden, TQDir::Time | TQDir::Reversed); - i = list.count(); - if(i > maxEntries-1){ - TQStringList::Iterator it; - it = list.begin(); - while(i > maxEntries-1){ - TQFile::remove(dir.absPath() + TQString::fromLatin1("/") + (*it)); - --i, ++it; - } - } - - // create the applnk - KSimpleConfig conf(ddesktop); - conf.setDesktopGroup(); - conf.writeEntry( TQString::fromLatin1("Type"), TQString::fromLatin1("Link") ); - conf.writePathEntry( TQString::fromLatin1("URL"), openStr ); - // If you change the line below, change the test in the above loop - conf.writeEntry( TQString::fromLatin1("X-TDE-LastOpenedWith"), desktopEntryName ); - TQString name = url.fileName(); - if (name.isEmpty()) - name = openStr; - conf.writeEntry( TQString::fromLatin1("Name"), name ); - conf.writeEntry( TQString::fromLatin1("Icon"), KMimeType::iconForURL( url ) ); -} - -void KRecentDocument::add(const TQString &openStr, bool isUrl) -{ - if( isUrl ) { - add( KURL( openStr ) ); - } else { - KURL url; - url.setPath( openStr ); - add( url ); - } -} - -void KRecentDocument::clear() -{ - TQStringList list = recentDocuments(); - TQDir dir; - for(TQStringList::Iterator it = list.begin(); it != list.end() ; ++it) - dir.remove(*it); -} - -int KRecentDocument::maximumItems() -{ - TDEConfig *config = TDEGlobal::config(); - TDEConfigGroupSaver sa(config, TQString::fromLatin1("RecentDocuments")); - return config->readNumEntry(TQString::fromLatin1("MaxEntries"), 10); -} - - diff --git a/kio/kfile/krecentdocument.h b/kio/kfile/krecentdocument.h deleted file mode 100644 index 968559968..000000000 --- a/kio/kfile/krecentdocument.h +++ /dev/null @@ -1,105 +0,0 @@ -/* -*- c++ -*- - * Copyright (C)2000 Daniel M. Duley <mosfet@kde.org> - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -#ifndef __KRECENTDOCUMENT_H -#define __KRECENTDOCUMENT_H - -#include <tqstring.h> -#include <kurl.h> - -/** - * Manage the "Recent Document Menu" entries displayed by - * applications such as Kicker and Konqueror. - * - * These entries are automatically generated .desktop files pointing - * to the current application and document. You should call the - * static add() method whenever the user opens or saves a new - * document if you want it to show up in the menu. - * - * You don't have to worry about this if you are using any - * KFileDialog derived class to open and save documents, as it - * already calls this class. User defined limits on the maximum - * number of documents to save, etc... are all automatically handled. - * - * @author Daniel M. Duley <mosfet@kde.org> - */ -class TDEIO_EXPORT KRecentDocument -{ -public: - - /** - * - * Return a list of absolute paths to recent document .desktop files, - * sorted by date. - * - */ - static TQStringList recentDocuments(); - - /** - * Add a new item to the Recent Document menu. - * - * @param url The url to add. - */ - static void add(const KURL& url); - - /** - * Add a new item to the Recent Document menu, specifying the application to open it with. - * The above add() method uses argv[0] for the app name, which isn't always flexible enough. - * This method is used when an application launches another one to open a document. - * - * @param url The url to add. - * @param desktopEntryName The desktopEntryName of the service to use for opening this document. - */ - static void add(const KURL& url, const TQString& desktopEntryName); - - /** - * - * Add a new item to the Recent Document menu. Calls add( url ). - * - * @param documentStr The full path to the document or URL to add. - * @param isURL Set to @p true if @p documentStr is an URL and not a local file path. - */ - static void add(const TQString &documentStr, bool isURL = false); - - /** - * Clear the recent document menu of all entries. - */ - static void clear(); - - /** - * Returns the maximum amount of recent document entries allowed. - */ - static int maximumItems(); - - /** - * Returns the path to the directory where recent document .desktop files - * are stored. - */ - static TQString recentDocumentDirectory(); -}; - -#endif diff --git a/kio/kfile/kurlbar.cpp b/kio/kfile/kurlbar.cpp deleted file mode 100644 index 95f30ee24..000000000 --- a/kio/kfile/kurlbar.cpp +++ /dev/null @@ -1,1049 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2001,2002,2003 Carsten Pfeiffer <pfeiffer@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation, version 2. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <unistd.h> - -#include <tqapplication.h> -#include <tqcheckbox.h> -#include <tqdrawutil.h> -#include <tqfontmetrics.h> -#include <tqlabel.h> -#include <tqgrid.h> -#include <tqpainter.h> -#include <tqpopupmenu.h> -#include <tqstyle.h> -#include <tqvbox.h> -#include <tqwhatsthis.h> - -#include <kaboutdata.h> -#include <kconfig.h> -#include <kdebug.h> -#include <kglobal.h> -#include <kicondialog.h> -#include <kiconloader.h> -#include <kinstance.h> -#include <klineedit.h> -#include <klocale.h> -#include <kmimetype.h> -#include <kprotocolinfo.h> -#include <kstringhandler.h> -#include <kurldrag.h> -#include <kurlrequester.h> -#include <kio/global.h> -#include <kio/netaccess.h> - -#include "kurlbar.h" - -/** - * Handles tooltips in the KURLBar - * @internal - */ -class KURLBarToolTip : public TQToolTip -{ -public: - KURLBarToolTip( TQListBox *view ) : TQToolTip( view ), m_view( view ) {} - -protected: - virtual void maybeTip( const TQPoint& point ) { - TQListBoxItem *item = m_view->itemAt( point ); - if ( item ) { - TQString text = static_cast<KURLBarItem*>( item )->toolTip(); - if ( !text.isEmpty() ) - tip( m_view->itemRect( item ), text ); - } - } - -private: - TQListBox *m_view; -}; - - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -class KURLBarItem::KURLBarItemPrivate -{ -public: - KURLBarItemPrivate() - { - isPersistent = true; - } - - bool isPersistent; -}; - -KURLBarItem::KURLBarItem( KURLBar *parent, - const KURL& url, bool persistent, const TQString& description, - const TQString& icon, KIcon::Group group ) - : TQListBoxPixmap( KIconLoader::unknown() /*, parent->listBox()*/ ), - m_url( url ), - m_pixmap( 0L ), - m_parent( parent ), - m_appLocal( true ) -{ - init( icon, group, description, persistent ); -} - -KURLBarItem::KURLBarItem( KURLBar *parent, - const KURL& url, const TQString& description, - const TQString& icon, KIcon::Group group ) - : TQListBoxPixmap( KIconLoader::unknown() /*, parent->listBox()*/ ), - m_url( url ), - m_pixmap( 0L ), - m_parent( parent ), - m_appLocal( true ) -{ - init( icon, group, description, true /*persistent*/ ); -} - -void KURLBarItem::init( const TQString& icon, KIcon::Group group, - const TQString& description, bool persistent ) -{ - d = new KURLBarItemPrivate; - d->isPersistent = persistent; - - setCustomHighlighting( true ); - setIcon( icon, group ); - setDescription( description ); -} - -KURLBarItem::~KURLBarItem() -{ - delete d; -} - -void KURLBarItem::setURL( const KURL& url ) -{ - m_url = url; - if ( m_description.isEmpty() ) - setText( url.fileName() ); -} - -void KURLBarItem::setIcon( const TQString& icon, KIcon::Group group ) -{ - m_icon = icon; - m_group = group; - - if ( icon.isEmpty() ) - m_pixmap = KMimeType::pixmapForURL( m_url, 0, group, iconSize() ); - else - m_pixmap = TDEGlobal::iconLoader()->loadIcon( icon, group, iconSize(), - KIcon::DefaultState ); -} - -void KURLBarItem::setDescription( const TQString& desc ) -{ - m_description = desc; - setText( desc.isEmpty() ? m_url.fileName() : desc ); -} - -void KURLBarItem::setApplicationLocal( bool local ) -{ - if ( !local && !isPersistent() ) - { - kdWarning() << "KURLBar: dynamic (non-persistent) items can not be global." << endl; - return; - } - - m_appLocal = local; -} - -void KURLBarItem::setToolTip( const TQString& tip ) -{ - m_toolTip = tip; -} - -TQString KURLBarItem::toolTip() const -{ - return m_toolTip.isEmpty() ? m_url.prettyURL() : m_toolTip; -} - -int KURLBarItem::iconSize() const -{ - return m_parent->iconSize(); -} - -void KURLBarItem::paint( TQPainter *p ) -{ - TQListBox *box = listBox(); - int w = width( box ); - static const int margin = KDialog::spacingHint(); - - // draw sunken selection - if ( isCurrent() || isSelected() ) { - int h = height( box ); - - TQBrush brush = box->colorGroup().brush( TQColorGroup::Highlight ); - p->fillRect( 0, 0, w, h, brush ); - TQPen pen = p->pen(); - TQPen oldPen = pen; - pen.setColor( box->colorGroup().mid() ); - p->setPen( pen ); - - p->drawPoint( 0, 0 ); - p->drawPoint( 0, h - 1 ); - p->drawPoint( w - 1, 0 ); - p->drawPoint( w - 1, h - 1 ); - - p->setPen( oldPen ); - } - - if ( m_parent->iconSize() < KIcon::SizeMedium ) { - // small icon -> draw icon next to text - - // ### mostly cut & paste of TQListBoxPixmap::paint() until Qt 3.1 - // (where it will properly use pixmap() instead of the internal pixmap) - const TQPixmap *pm = pixmap(); - int yPos = QMAX( 0, (height(box) - pm->height())/2 ); - - p->drawPixmap( margin, yPos, *pm ); - if ( !text().isEmpty() ) { - TQFontMetrics fm = p->fontMetrics(); - if ( pm->height() < fm.height() ) - yPos = fm.ascent() + fm.leading()/2; - else - yPos = pm->height()/2 - fm.height()/2 + fm.ascent(); - - yPos += margin; - int stringWidth = box->width() - pm->width() - 2 - (margin * 2); - TQString visibleText = KStringHandler::rPixelSqueeze( text(), fm, stringWidth ); - int xPos = pm->width() + margin + 2; - - if ( isCurrent() || isSelected() ) { - p->setPen( box->colorGroup().highlight().dark(115) ); - p->drawText( xPos + ( TQApplication::reverseLayout() ? -1 : 1), - yPos + 1, visibleText ); - p->setPen( box->colorGroup().highlightedText() ); - } - - p->drawText( xPos, yPos, visibleText ); - } - // end cut & paste (modulo pixmap centering) - } - - else { - // big icons -> draw text below icon - int y = margin; - const TQPixmap *pm = pixmap(); - - if ( !pm->isNull() ) { - int x = (w - pm->width()) / 2; - x = QMAX( x, margin ); - p->drawPixmap( x, y, *pm ); - } - - if ( !text().isEmpty() ) { - TQFontMetrics fm = p->fontMetrics(); - y += pm->height() + fm.height() - fm.descent(); - - int stringWidth = box->width() - (margin * 2); - TQString visibleText = KStringHandler::rPixelSqueeze( text(), fm, stringWidth ); - int x = (w - fm.width( visibleText )) / 2; - x = QMAX( x, margin ); - - if ( isCurrent() || isSelected() ) { - p->setPen( box->colorGroup().highlight().dark(115) ); - p->drawText( x + ( TQApplication::reverseLayout() ? -1 : 1), - y + 1, visibleText ); - p->setPen( box->colorGroup().highlightedText() ); - } - - p->drawText( x, y, visibleText ); - } - } -} - -TQSize KURLBarItem::sizeHint() const -{ - int wmin = 0; - int hmin = 0; - const KURLBarListBox *lb =static_cast<const KURLBarListBox*>(listBox()); - - if ( m_parent->iconSize() < KIcon::SizeMedium ) { - wmin = TQListBoxPixmap::width( lb ) + KDialog::spacingHint() * 2; - hmin = TQListBoxPixmap::height( lb ) + KDialog::spacingHint() * 2; - } - else { - wmin = QMAX(lb->fontMetrics().width(text()), pixmap()->width()) + KDialog::spacingHint() * 2; - hmin = lb->fontMetrics().lineSpacing() + pixmap()->height() + KDialog::spacingHint() * 2; - } - - if ( lb->isVertical() ) - wmin = QMIN( wmin, lb->viewport()->sizeHint().width() ); - else - hmin = QMIN( hmin, lb->viewport()->sizeHint().height() ); - - return TQSize( wmin, hmin ); -} - -int KURLBarItem::width( const TQListBox *lb ) const -{ - if ( static_cast<const KURLBarListBox *>( lb )->isVertical() ) - return QMAX( sizeHint().width(), lb->viewport()->width() ); - else - return sizeHint().width(); -} - -int KURLBarItem::height( const TQListBox *lb ) const -{ - if ( static_cast<const KURLBarListBox *>( lb )->isVertical() ) - return sizeHint().height(); - else - return QMAX( sizeHint().height(), lb->viewport()->height() ); -} - -bool KURLBarItem::isPersistent() const -{ - return d->isPersistent; -} - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - -class KURLBar::KURLBarPrivate -{ -public: - KURLBarPrivate() - { - currentURL.setPath( TQDir::homeDirPath() ); - defaultIconSize = 0; - } - - int defaultIconSize; - KURL currentURL; -}; - - -KURLBar::KURLBar( bool useGlobalItems, TQWidget *parent, const char *name, WFlags f ) - : TQFrame( parent, name, f ), - m_activeItem( 0L ), - m_useGlobal( useGlobalItems ), - m_isModified( false ), - m_isImmutable( false ), - m_listBox( 0L ), - m_iconSize( KIcon::SizeMedium ) -{ - d = new KURLBarPrivate(); - - setListBox( 0L ); - setSizePolicy( TQSizePolicy( isVertical() ? - TQSizePolicy::Maximum : - TQSizePolicy::Preferred, - isVertical() ? - TQSizePolicy::Preferred : - TQSizePolicy::Maximum )); - TQWhatsThis::add(this, i18n("<qt>The <b>Quick Access</b> panel provides easy access to commonly used file locations.<p>" - "Clicking on one of the shortcut entries will take you to that location.<p>" - "By right clicking on an entry you can add, edit and remove shortcuts.</qt>")); -} - -KURLBar::~KURLBar() -{ - delete d; -} - -KURLBarItem * KURLBar::insertItem(const KURL& url, const TQString& description, - bool applicationLocal, - const TQString& icon, KIcon::Group group ) -{ - KURLBarItem *item = new KURLBarItem(this, url, description, icon, group); - item->setApplicationLocal( applicationLocal ); - m_listBox->insertItem( item ); - return item; -} - -KURLBarItem * KURLBar::insertDynamicItem(const KURL& url, const TQString& description, - const TQString& icon, KIcon::Group group ) -{ - KURLBarItem *item = new KURLBarItem(this, url, false, description, icon, group); - m_listBox->insertItem( item ); - return item; -} - -void KURLBar::setOrientation( Qt::Orientation orient ) -{ - m_listBox->setOrientation( orient ); - setSizePolicy( TQSizePolicy( isVertical() ? - TQSizePolicy::Maximum : - TQSizePolicy::Preferred, - isVertical() ? - TQSizePolicy::Preferred : - TQSizePolicy::Maximum )); -} - -Qt::Orientation KURLBar::orientation() const -{ - return m_listBox->orientation(); -} - -void KURLBar::setListBox( KURLBarListBox *view ) -{ - delete m_listBox; - - if ( !view ) { - m_listBox = new KURLBarListBox( this, "urlbar listbox" ); - setOrientation( Qt::Vertical ); - } - else { - m_listBox = view; - if ( m_listBox->parentWidget() != this ) - m_listBox->reparent( this, TQPoint(0,0) ); - m_listBox->resize( width(), height() ); - } - - m_listBox->setSelectionMode( KListBox::Single ); - paletteChange( palette() ); - m_listBox->setFocusPolicy( TQ_TabFocus ); - - connect( m_listBox, TQT_SIGNAL( mouseButtonClicked( int, TQListBoxItem *, const TQPoint & ) ), - TQT_SLOT( slotSelected( int, TQListBoxItem * ))); - connect( m_listBox, TQT_SIGNAL( dropped( TQDropEvent * )), - this, TQT_SLOT( slotDropped( TQDropEvent * ))); - connect( m_listBox, TQT_SIGNAL( contextMenuRequested( TQListBoxItem *, - const TQPoint& )), - TQT_SLOT( slotContextMenuRequested( TQListBoxItem *, const TQPoint& ))); - connect( m_listBox, TQT_SIGNAL( returnPressed( TQListBoxItem * ) ), - TQT_SLOT( slotSelected( TQListBoxItem * ) )); -} - -void KURLBar::setIconSize( int size ) -{ - if ( size == m_iconSize ) - return; - - m_iconSize = size; - - // reload the icons with the new size - KURLBarItem *item = static_cast<KURLBarItem*>( m_listBox->firstItem() ); - while ( item ) { - item->setIcon( item->icon(), item->iconGroup() ); - item = static_cast<KURLBarItem*>( item->next() ); - } - - resize( sizeHint() ); - updateGeometry(); -} - -void KURLBar::clear() -{ - m_listBox->clear(); -} - -void KURLBar::resizeEvent( TQResizeEvent *e ) -{ - TQFrame::resizeEvent( e ); - m_listBox->resize( width(), height() ); -} - -void KURLBar::paletteChange( const TQPalette & ) -{ - TQPalette pal = palette(); - TQColor gray = pal.color( TQPalette::Normal, TQColorGroup::Background ); - TQColor selectedTextColor = pal.color( TQPalette::Normal, TQColorGroup::BrightText ); - TQColor foreground = pal.color( TQPalette::Normal, TQColorGroup::Foreground ); - pal.setColor( TQPalette::Normal, TQColorGroup::Base, gray ); - pal.setColor( TQPalette::Normal, TQColorGroup::HighlightedText, selectedTextColor ); - pal.setColor( TQPalette::Normal, TQColorGroup::Text, foreground ); - pal.setColor( TQPalette::Inactive, TQColorGroup::Base, gray ); - pal.setColor( TQPalette::Inactive, TQColorGroup::HighlightedText, selectedTextColor ); - pal.setColor( TQPalette::Inactive, TQColorGroup::Text, foreground ); - - setPalette( pal ); -} - -TQSize KURLBar::sizeHint() const -{ - return m_listBox->sizeHint(); - -#if 0 - // this code causes vertical and or horizontal scrollbars appearing - // depending on the text, font, moonphase and earth rotation. Just using - // m_listBox->sizeHint() fixes this (although the widget can then be - // resized to a smaller size so that scrollbars appear). - int w = 0; - int h = 0; - KURLBarItem *item; - bool vertical = isVertical(); - - for ( item = static_cast<KURLBarItem*>( m_listBox->firstItem() ); - item; - item = static_cast<KURLBarItem*>( item->next() ) ) { - - TQSize sh = item->sizeHint(); - - if ( vertical ) { - w = QMAX( w, sh.width() ); - h += sh.height(); - } - else { - w += sh.width(); - h = QMAX( h, sh.height() ); - } - } - -// if ( vertical && m_listBox->verticalScrollBar()->isVisible() ) -// w += m_listBox->verticalScrollBar()->width(); -// else if ( !vertical && m_listBox->horizontalScrollBar()->isVisible() ) -// h += m_listBox->horizontalScrollBar()->height(); - - if ( w == 0 && h == 0 ) - return TQSize( 100, 200 ); - else - return TQSize( 6 + w, h ); -#endif -} - -TQSize KURLBar::minimumSizeHint() const -{ - TQSize s = sizeHint(); // ### - int w = s.width() + m_listBox->verticalScrollBar()->width(); - int h = s.height() + m_listBox->horizontalScrollBar()->height(); - return TQSize( w, h ); -} - -void KURLBar::slotSelected( int button, TQListBoxItem *item ) -{ - if ( button != Qt::LeftButton ) - return; - - slotSelected( item ); -} - -void KURLBar::slotSelected( TQListBoxItem *item ) -{ - if ( item && item != m_activeItem ) - m_activeItem = static_cast<KURLBarItem*>( item ); - - if ( m_activeItem ) { - m_listBox->setCurrentItem( m_activeItem ); - emit activated( m_activeItem->url() ); - } -} - -void KURLBar::setCurrentItem( const KURL& url ) -{ - d->currentURL = url; - - TQString u = url.url(-1); - - if ( m_activeItem && m_activeItem->url().url(-1) == u ) - return; - - bool hasURL = false; - TQListBoxItem *item = m_listBox->firstItem(); - while ( item ) { - if ( static_cast<KURLBarItem*>( item )->url().url(-1) == u ) { - m_activeItem = static_cast<KURLBarItem*>( item ); - m_listBox->setCurrentItem( item ); - m_listBox->setSelected( item, true ); - hasURL = true; - break; - } - item = item->next(); - } - - if ( !hasURL ) { - m_activeItem = 0L; - m_listBox->clearSelection(); - } -} - -KURLBarItem * KURLBar::currentItem() const -{ - TQListBoxItem *item = m_listBox->item( m_listBox->currentItem() ); - if ( item ) - return static_cast<KURLBarItem *>( item ); - return 0L; -} - -KURL KURLBar::currentURL() const -{ - KURLBarItem *item = currentItem(); - return item ? item->url() : KURL(); -} - -void KURLBar::readConfig( TDEConfig *appConfig, const TQString& itemGroup ) -{ - m_isImmutable = appConfig->groupIsImmutable( itemGroup ); - TDEConfigGroupSaver cs( appConfig, itemGroup ); - d->defaultIconSize = m_iconSize; - m_iconSize = appConfig->readNumEntry( "Speedbar IconSize", m_iconSize ); - - if ( m_useGlobal ) { // read global items - TDEConfig *globalConfig = TDEGlobal::config(); - TDEConfigGroupSaver cs( globalConfig, (TQString)(itemGroup +" (Global)")); - int num = globalConfig->readNumEntry( "Number of Entries" ); - for ( int i = 0; i < num; i++ ) { - readItem( i, globalConfig, false ); - } - } - - // read application local items - int num = appConfig->readNumEntry( "Number of Entries" ); - for ( int i = 0; i < num; i++ ) { - readItem( i, appConfig, true ); - } -} - -void KURLBar::readItem( int i, TDEConfig *config, bool applicationLocal ) -{ - TQString number = TQString::number( i ); - KURL url = KURL::fromPathOrURL( config->readPathEntry( TQString("URL_") + number )); - if ( !url.isValid() || !KProtocolInfo::isKnownProtocol( url )) - return; // nothing we could do. - - TQString description = config->readEntry( TQString("Description_") + number ); - - if (description.isEmpty() && url.protocol()=="beagle") { - TDEIO::UDSEntry uds; - const KURL kurl("beagle:?beagled-status"); - if (!TDEIO::NetAccess::stat(kurl, uds)) - return; - - description = i18n("Desktop Search"); - } - - insertItem( url, - description, - applicationLocal, - config->readEntry( TQString("Icon_") + number ), - static_cast<KIcon::Group>( - config->readNumEntry( TQString("IconGroup_") + number )) ); -} - -void KURLBar::writeConfig( TDEConfig *config, const TQString& itemGroup ) -{ - TDEConfigGroupSaver cs1( config, itemGroup ); - if(!config->hasDefault("Speedbar IconSize") && m_iconSize == d->defaultIconSize ) - config->revertToDefault("Speedbar IconSize"); - else - config->writeEntry( "Speedbar IconSize", m_iconSize ); - - if ( !m_isModified ) - return; - - int i = 0; - int numLocal = 0; - KURLBarItem *item = static_cast<KURLBarItem*>( m_listBox->firstItem() ); - - while ( item ) - { - if ( item->isPersistent() ) // we only save persistent items - { - if ( item->applicationLocal() ) - { - writeItem( item, numLocal, config, false ); - numLocal++; - } - - i++; - } - item = static_cast<KURLBarItem*>( item->next() ); - } - config->writeEntry("Number of Entries", numLocal); - - - // write the global entries to kdeglobals, if any - bool haveGlobalEntries = (i > numLocal); - if ( m_useGlobal && haveGlobalEntries ) { - config->setGroup( itemGroup + " (Global)" ); - - int numGlobals = 0; - item = static_cast<KURLBarItem*>( m_listBox->firstItem() ); - - while ( item ) - { - if ( item->isPersistent() ) // we only save persistent items - { - if ( !item->applicationLocal() ) - { - writeItem( item, numGlobals, config, true ); - numGlobals++; - } - } - - item = static_cast<KURLBarItem*>( item->next() ); - } - config->writeEntry("Number of Entries", numGlobals, true, true); - } - - m_isModified = false; -} - -void KURLBar::writeItem( KURLBarItem *item, int i, TDEConfig *config, - bool global ) -{ - if ( !item->isPersistent() ) - return; - - TQString Description = "Description_"; - TQString URL = "URL_"; - TQString Icon = "Icon_"; - TQString IconGroup = "IconGroup_"; - - TQString number = TQString::number( i ); - config->writePathEntry( URL + number, item->url().prettyURL(), true, global ); - - config->writeEntry( Description + number, item->description(),true,global); - config->writeEntry( Icon + number, item->icon(), true, global ); - config->writeEntry( IconGroup + number, item->iconGroup(), true, global ); -} - - -void KURLBar::slotDropped( TQDropEvent *e ) -{ - KURL::List urls; - if ( KURLDrag::decode( e, urls ) ) { - KURL url; - TQString description; - TQString icon; - bool appLocal = false; - - KURL::List::Iterator it = urls.begin(); - for ( ; it != urls.end(); ++it ) { - (void) insertItem( *it, description, appLocal, icon ); - m_isModified = true; - updateGeometry(); - } - } -} - -void KURLBar::slotContextMenuRequested( TQListBoxItem *_item, const TQPoint& pos ) -{ - if (m_isImmutable) - return; - - KURLBarItem *item = dynamic_cast<KURLBarItem*>( _item ); - - static const int IconSize = 10; - static const int AddItem = 20; - static const int EditItem = 30; - static const int RemoveItem = 40; - - KURL lastURL = m_activeItem ? m_activeItem->url() : KURL(); - - bool smallIcons = m_iconSize < KIcon::SizeMedium; - TQPopupMenu *popup = new TQPopupMenu(); - popup->insertItem( smallIcons ? - i18n("&Large Icons") : i18n("&Small Icons"), - IconSize ); - popup->insertSeparator(); - - if (item != 0L && item->isPersistent()) - { - popup->insertItem(SmallIconSet("edit"), i18n("&Edit Entry..."), EditItem); - popup->insertSeparator(); - } - - popup->insertItem(SmallIconSet("filenew"), i18n("&Add Entry..."), AddItem); - - if (item != 0L && item->isPersistent()) - { - popup->insertItem( SmallIconSet("editdelete"), i18n("&Remove Entry"), - RemoveItem ); - } - - int result = popup->exec( pos ); - switch ( result ) { - case IconSize: - setIconSize( smallIcons ? KIcon::SizeMedium : KIcon::SizeSmallMedium ); - m_listBox->triggerUpdate( true ); - break; - case AddItem: - addNewItem(); - break; - case EditItem: - editItem( static_cast<KURLBarItem *>( item ) ); - break; - case RemoveItem: - delete item; - m_isModified = true; - break; - default: // abort - break; - } - - // reset current item - m_activeItem = 0L; - setCurrentItem( lastURL ); -} - -bool KURLBar::addNewItem() -{ - KURLBarItem *item = new KURLBarItem( this, d->currentURL, - i18n("Enter a description") ); - if ( editItem( item ) ) { - m_listBox->insertItem( item ); - return true; - } - - delete item; - return false; -} - -bool KURLBar::editItem( KURLBarItem *item ) -{ - if ( !item || !item->isPersistent() ) // should never happen tho - return false; - - KURL url = item->url(); - TQString description = item->description(); - TQString icon = item->icon(); - bool appLocal = item->applicationLocal(); - - if ( KURLBarItemDialog::getInformation( m_useGlobal, - url, description, - icon, appLocal, - m_iconSize, this )) - { - item->setURL( url ); - item->setDescription( description ); - item->setIcon( icon ); - item->setApplicationLocal( appLocal ); - m_listBox->triggerUpdate( true ); - m_isModified = true; - updateGeometry(); - return true; - } - - return false; -} - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - - -KURLBarListBox::KURLBarListBox( TQWidget *parent, const char *name ) - : KListBox( parent, name ) -{ - m_toolTip = new KURLBarToolTip( this ); - setAcceptDrops( true ); - viewport()->setAcceptDrops( true ); -} - -KURLBarListBox::~KURLBarListBox() -{ - delete m_toolTip; -} - -void KURLBarListBox::paintEvent( TQPaintEvent* ) -{ - TQPainter p(this); - p.setPen( colorGroup().mid() ); - p.drawRect( 0, 0, width(), height() ); -} - -TQDragObject * KURLBarListBox::dragObject() -{ - KURL::List urls; - KURLBarItem *item = static_cast<KURLBarItem*>( firstItem() ); - - while ( item ) { - if ( item->isSelected() ) - urls.append( item->url() ); - item = static_cast<KURLBarItem*>( item->next() ); - } - - if ( !urls.isEmpty() ) // ### use custom drag-object with description etc.? - return new KURLDrag( urls, this, "urlbar drag" ); - - return 0L; -} - -void KURLBarListBox::contentsDragEnterEvent( TQDragEnterEvent *e ) -{ - e->accept( KURLDrag::canDecode( e )); -} - -void KURLBarListBox::contentsDropEvent( TQDropEvent *e ) -{ - emit dropped( e ); -} - -void KURLBarListBox::contextMenuEvent( TQContextMenuEvent *e ) -{ - if (e) - { - emit contextMenuRequested( itemAt( e->globalPos() ), e->globalPos() ); - e->consume(); // Consume the event to avoid multiple contextMenuEvent calls... - } -} - -void KURLBarListBox::setOrientation( Qt::Orientation orient ) -{ - if ( orient == Qt::Vertical ) { - setColumnMode( 1 ); - setRowMode( Variable ); - } - else { - setRowMode( 1 ); - setColumnMode( Variable ); - } - - m_orientation = orient; -} - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - - -bool KURLBarItemDialog::getInformation( bool allowGlobal, KURL& url, - TQString& description, TQString& icon, - bool& appLocal, int iconSize, - TQWidget *parent ) -{ - KURLBarItemDialog *dialog = new KURLBarItemDialog( allowGlobal, url, - description, icon, - appLocal, - iconSize, parent ); - if ( dialog->exec() == TQDialog::Accepted ) { - // set the return parameters - url = dialog->url(); - description = dialog->description(); - icon = dialog->icon(); - appLocal = dialog->applicationLocal(); - - delete dialog; - return true; - } - - delete dialog; - return false; -} - -KURLBarItemDialog::KURLBarItemDialog( bool allowGlobal, const KURL& url, - const TQString& description, - TQString icon, bool appLocal, - int iconSize, - TQWidget *parent, const char *name ) - : KDialogBase( parent, name, true, - i18n("Edit Quick Access Entry"), Ok | Cancel, Ok, true ) -{ - TQVBox *box = new TQVBox( this ); - TQString text = i18n("<qt><b>Please provide a description, URL and icon for this Quick Access entry.</b></br></qt>"); - TQLabel *label = new TQLabel( text, box ); - box->setSpacing( spacingHint() ); - - TQGrid *grid = new TQGrid( 2, box ); - grid->setSpacing( spacingHint() ); - - TQString whatsThisText = i18n("<qt>This is the text that will appear in the Quick Access panel.<p>" - "The description should consist of one or two words " - "that will help you remember what this entry refers to.</qt>"); - label = new TQLabel( i18n("&Description:"), grid ); - m_edit = new KLineEdit( grid, "description edit" ); - m_edit->setText( description.isEmpty() ? url.fileName() : description ); - label->setBuddy( m_edit ); - TQWhatsThis::add( label, whatsThisText ); - TQWhatsThis::add( m_edit, whatsThisText ); - - whatsThisText = i18n("<qt>This is the location associated with the entry. Any valid URL may be used. For example:<p>" - "%1<br>http://www.kde.org<br>ftp://ftp.kde.org/pub/kde/stable<p>" - "By clicking on the button next to the text edit box you can browse to an " - "appropriate URL.</qt>").arg(TQDir::homeDirPath()); - label = new TQLabel( i18n("&URL:"), grid ); - m_urlEdit = new KURLRequester( url.prettyURL(), grid ); - m_urlEdit->setMode( KFile::Directory ); - label->setBuddy( m_urlEdit ); - TQWhatsThis::add( label, whatsThisText ); - TQWhatsThis::add( m_urlEdit, whatsThisText ); - - whatsThisText = i18n("<qt>This is the icon that will appear in the Quick Access panel.<p>" - "Click on the button to select a different icon.</qt>"); - label = new TQLabel( i18n("Choose an &icon:"), grid ); - m_iconButton = new KIconButton( grid, "icon button" ); - m_iconButton->setIconSize( iconSize ); - if ( icon.isEmpty() ) - icon = KMimeType::iconForURL( url ); - m_iconButton->setIcon( icon ); - label->setBuddy( m_iconButton ); - TQWhatsThis::add( label, whatsThisText ); - TQWhatsThis::add( m_iconButton, whatsThisText ); - - if ( allowGlobal ) { - TQString appName; - if ( TDEGlobal::instance()->aboutData() ) - appName = TDEGlobal::instance()->aboutData()->programName(); - if ( appName.isEmpty() ) - appName = TQString::fromLatin1( TDEGlobal::instance()->instanceName() ); - m_appLocal = new TQCheckBox( i18n("&Only show when using this application (%1)").arg( appName ), box ); - m_appLocal->setChecked( appLocal ); - TQWhatsThis::add( m_appLocal, - i18n("<qt>Select this setting if you want this " - "entry to show only when using the current application (%1).<p>" - "If this setting is not selected, the entry will be available in all " - "applications.</qt>") - .arg(appName)); - } - else - m_appLocal = 0L; - connect(m_urlEdit->lineEdit(),TQT_SIGNAL(textChanged ( const TQString & )),this,TQT_SLOT(urlChanged(const TQString & ))); - m_edit->setFocus(); - setMainWidget( box ); -} - -KURLBarItemDialog::~KURLBarItemDialog() -{ -} - -void KURLBarItemDialog::urlChanged(const TQString & text ) -{ - enableButtonOK( !text.isEmpty() ); -} - -KURL KURLBarItemDialog::url() const -{ - TQString text = m_urlEdit->url(); - KURL u; - if ( text.at(0) == '/' ) - u.setPath( text ); - else - u = text; - - return u; -} - -TQString KURLBarItemDialog::description() const -{ - return m_edit->text(); -} - -TQString KURLBarItemDialog::icon() const -{ - return m_iconButton->icon(); -} - -bool KURLBarItemDialog::applicationLocal() const -{ - if ( !m_appLocal ) - return true; - - return m_appLocal->isChecked(); -} - -void KURLBarItem::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -void KURLBar::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -void KURLBarListBox::virtual_hook( int id, void* data ) -{ KListBox::virtual_hook( id, data ); } - - -#include "kurlbar.moc" diff --git a/kio/kfile/kurlbar.h b/kio/kfile/kurlbar.h deleted file mode 100644 index 32c05ec58..000000000 --- a/kio/kfile/kurlbar.h +++ /dev/null @@ -1,660 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2001,2002,2003 Carsten Pfeiffer <pfeiffer@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation, version 2. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef KURLBAR_H -#define KURLBAR_H - -#include <tqevent.h> -#include <tqframe.h> -#include <tqtooltip.h> - -#include <kdialogbase.h> -#include <kicontheme.h> -#include <klistbox.h> -#include <kurl.h> - -class TDEConfig; -class KURLBar; - -/** - * An item to be used in KURLBar / KURLBarListBox. All the properties - * (url, icon, description, tooltip) can be changed dynamically. - * - * @author Carsten Pfeiffer <pfeiffer@kde.org> - * @see KURLBar - * @see KURLBarListBox - */ -class TDEIO_EXPORT KURLBarItem : public TQListBoxPixmap -{ -public: - /** - * Creates a KURLBarItem to be used in the @p parent KURLBar. You need - * to insert the item into the listbox manually, if you don't use - * KURLBar::insertItem(). - * - * If description is empty, it will try to use the filename/directory - * of @p url, which will be shown as text of the item. - * @p url will be used as tooltip, unless you set a different tip with - * setToolTip(). - * @p persistent specifies whether this item is a persistent item or a - * dynamic item, that is not saved with KURLBar::writeConfig(). - * @since 3.2 - */ - KURLBarItem( KURLBar *parent, const KURL& url, bool persistent, - const TQString& description = TQString::null, - const TQString& icon = TQString::null, - KIcon::Group group = KIcon::Panel ); - - /** - * Creates a persistent KURLBarItem to be used in the @p parent KURLBar. You need - * to insert the item into the listbox manually, if you don't use - * KURLBar::insertItem(). - * - * If description is empty, it will try to use the filename/directory - * of @p url, which will be shown as text of the item. - * @p url will be used as tooltip, unless you set a different tip with - * setToolTip(). - * @p persistent specifies whether this item is a persistent item or a - * dynamic item, that is not saved with KURLBar::writeConfig(). - */ - KURLBarItem( KURLBar *parent, const KURL& url, - const TQString& description = TQString::null, - const TQString& icon = TQString::null, - KIcon::Group group = KIcon::Panel ); - - /** - * Destroys the item - */ - ~KURLBarItem(); - - /** - * Sets @p url for this item. Also updates the visible text to the - * filename/directory of the url, if no description is set. - * @see url - */ - void setURL( const KURL& url ); - /** - * @p sets the icon for this item. See KIconLoader for a description - * of the icon groups. - * @see icon - */ - void setIcon( const TQString& icon, KIcon::Group group = KIcon::Panel ); - /** - * Sets the description of this item that will be shown as item-text. - * @see description - */ - void setDescription( const TQString& desc ); - /** - * Sets a tooltip to be used for this item. - * @see toolTip - */ - void setToolTip( const TQString& tip ); - - /** - * returns the preferred size of this item - * @since 3.1 - */ - TQSize sizeHint() const; - - /** - * returns the width of this item. - */ - virtual int width( const TQListBox * ) const; - /** - * returns the height of this item. - */ - virtual int height( const TQListBox * ) const; - - /** - * returns the url of this item. - * @see setURL - */ - const KURL& url() const { return m_url; } - /** - * returns the description of this item. - * @see setDescription - */ - const TQString& description() const { return m_description; } - /** - * returns the icon of this item. - * @see setIcon - */ - const TQString& icon() const { return m_icon; } - /** - * returns the tooltip of this item. - * @see setToolTip - */ - TQString toolTip() const; - /** - * returns the icon-group of this item (determines icon-effects). - * @see setIcon - */ - KIcon::Group iconGroup() const { return m_group; } - /** - * returns the pixmap of this item. - */ - virtual const TQPixmap * pixmap() const { return &m_pixmap; } - - /** - * Makes this item a local or global one. This has only an effect - * on persistent items of course. - * @see isPersistent - * @see applicationLocal - */ - void setApplicationLocal( bool local ); - - /** - * returns whether this is a global item or a local one. KURLBar - * can differentiate between global and local items (only for the current - * application) for easy extensiblity. - * @see setApplicationLocal - */ - bool applicationLocal() const { return m_appLocal; } - - /** - * returns whether this item is persistent (via KURLBar::writeConfig() - * and KURLBar::readConfig()) or not. - * @since 3.2 - */ - bool isPersistent() const; - -protected: - virtual void paint( TQPainter *p ); - -private: - int iconSize() const; - void init( const TQString& icon, KIcon::Group group, - const TQString& description, bool persistent ); - - KURL m_url; - TQString m_description; - TQString m_icon; - TQString m_toolTip; - TQPixmap m_pixmap; - KIcon::Group m_group; - KURLBar *m_parent; - bool m_appLocal :1; - -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KURLBarItemPrivate; - KURLBarItemPrivate *d; -}; - - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - - -class KURLBarListBox; - -/** - * KURLBar is a widget that displays icons together with a description. They - * can be arranged either horizontally or vertically. Clicking on an item - * will cause the activated() signal to be emitted. The user can edit - * existing items by choosing "Edit entry" in the contextmenu. He can also - * remove or add new entries (via drag&drop or the context menu). - * - * KURLBar offers the methods readConfig() and writeConfig() to - * read and write the configuration of all the entries. It can differentiate - * between global and local entries -- global entries will be saved in the - * global configuration (kdeglobals), while local entries will be saved in - * your application's TDEConfig object. - * - * Due to the configurability, you usually only insert some default entries - * once and then solely use the read and writeConfig methods to preserve the - * user's configuration. - * - * The widget has a "current" item, that is visualized to differentiate it - * from others. - * - * @author Carsten Pfeiffer <pfeiffer@kde.org> - * @short A URL-bar widget, as used in the KFileDialog - */ -class TDEIO_EXPORT KURLBar : public TQFrame -{ - Q_OBJECT - -public: - /** - * Constructs a KURLBar. Set @p useGlobalItems to true if you want to - * allow global/local item separation. - */ - KURLBar( bool useGlobalItems, - TQWidget *parent = 0, const char *name = 0, WFlags f = 0 ); - /** - * Destroys the KURLBar. - */ - ~KURLBar(); - - /** - * Inserts a new item into the KURLBar and returns the created - * KURLBarItem. - * - * @p url the url of the item - * @p description the description of the item (shown in the view) - * @p applicationLocal whether this should be a global or a local item - * @p icon an icon -- if empty, the default icon for the url will be used - * @p group the icon-group for using icon-effects - */ - virtual KURLBarItem * insertItem( const KURL& url, - const TQString& description, - bool applicationLocal = true, - const TQString& icon = TQString::null, - KIcon::Group group = KIcon::Panel ); - /** - * Inserts a new dynamic item into the KURLBar and returns the created - * KURLBarItem. - * - * @p url the url of the item - * @p description the description of the item (shown in the view) - * @p icon an icon -- if empty, the default icon for the url will be used - * @p group the icon-group for using icon-effects - * @since 3.2 - */ - virtual KURLBarItem * insertDynamicItem( const KURL& url, - const TQString& description, - const TQString& icon = TQString::null, - KIcon::Group group = KIcon::Panel ); - /** - * The items can be arranged either vertically in one column or - * horizontally in one row. - * @see orientation - */ - virtual void setOrientation( Qt::Orientation orient ); - /** - * @returns the current orientation mode. - * @see setOrientation - */ - Orientation orientation() const; - - /** - * Allows to set a custom KURLBarListBox. - * Note: The previous listbox will be deleted. Items of the previous - * listbox will not be moved to the new box. - * @see listBox - */ - virtual void setListBox( KURLBarListBox * ); - /** - * @returns the KURLBarListBox that is used. - * @see setListBox - */ - KURLBarListBox *listBox() const { return m_listBox; } - - /** - * Sets the default iconsize to be used for items inserted with - * insertItem. By default KIcon::SizeMedium. - * @see iconsize - */ - virtual void setIconSize( int size ); - /** - * @returns the default iconsize used for items inserted with - * insertItem. By default KIcon::SizeMedium - * @see setIconSize - */ - int iconSize() const { return m_iconSize; } - - /** - * Clears the view, removes all items. - */ - virtual void clear(); - - /** - * @returns a proper sizehint, depending on the orientation and the number - * of items available. - */ - virtual TQSize sizeHint() const; - - /** - * @returns a proper minimum size (reimplemented) - */ - virtual TQSize minimumSizeHint() const; - - /** - * Call this method to read a saved configuration from @p config, - * inside the group @p itemGroup. All items in there will be restored. - * The reading of every item is delegated to the readItem() method. - */ - virtual void readConfig( TDEConfig *config, const TQString& itemGroup ); - /** - * Call this method to save the current configuration into @p config, - * inside the group @p iconGroup. The writeItem() method is used - * to save each item. - */ - virtual void writeConfig( TDEConfig *config, const TQString& itemGroup ); - - /** - * Called from readConfig() to read the i'th from @p config. - * After reading a KURLBarItem is created and initialized with the read - * values (as well as the given @p applicationLocal). - */ - virtual void readItem( int i, TDEConfig *config, bool applicationLocal ); - /** - * Called from writeConfig() to save the KURLBarItem @p item as the - * i'th entry in the config-object. - * @p global tell whether it should be saved in the global configuration - * or not (using TDEConfig::writeEntry( key, value, true, global ) ). - */ - virtual void writeItem( KURLBarItem *item, int i, TDEConfig *, bool global ); - - /** - * @returns the current KURLBarItem, or 0L if none. - * @see setCurrentItem - * @see currentURL - */ - KURLBarItem * currentItem() const; - /** - * @returns the url of the current item or an invalid url, if there is - * no current item. - * @see currentItem - * @see setCurrentItem - */ - KURL currentURL() const; - - /** - * @returns true when the urlbar was modified by the user (e.g. by - * editing/adding/removing one or more entries). Will be reset to false - * after calling writeConfig(). - */ - bool isModified() const { return m_isModified; } - - /** - * @returns true when the urlbar may not be modified by the user - */ - bool isImmutable() const { return m_isImmutable; } - - /** - * @returns true if the bar is in vertical mode. - */ - bool isVertical() const { return orientation() == Qt::Vertical; } - -public slots: - /** - * Makes the item with the url @p url the current item. Does nothing - * if no item with that url is available. - * @see currentItem - * @see currentURL - */ - virtual void setCurrentItem( const KURL& url ); - -signals: - /** - * This signal is emitted when the user activated an item, e.g., by - * clicking on it. - */ - void activated( const KURL& url ); - -protected: - /** - * Pops up a KURLBarItemDialog to let the user add a new item. - * Uses editItem() to do the job. - * @returns false if the user aborted the dialog and no item is added. - */ - virtual bool addNewItem(); - /** - * Pops up a KURLBarItemDialog to let the user edit the properties - * of @p item. Invoked e.g. by addNewItem(), when the user drops - * a url onto the bar or from the contextmenu. - * @returns false if the user aborted the dialog and @p item is not - * changed. - */ - virtual bool editItem( KURLBarItem *item ); - - virtual void resizeEvent( TQResizeEvent * ); - - virtual void paletteChange( const TQPalette & ); - - /** - * The currently active item. - */ - KURLBarItem * m_activeItem; - /** - * Whether we support global entries or just local ones. - */ - bool m_useGlobal :1; - - /** - * Whether the urlbar was modified by the user (e.g. by - * editing/adding/removing an item). - */ - bool m_isModified :1; - - /** - * Whether the urlbar may be modified by the user. - * If immutable is true, the urlbar can not be modified. - */ - bool m_isImmutable :1; - -protected slots: - /** - * Reimplemented to show a contextmenu, allowing the user to add, edit - * or remove items, or change the iconsize. - */ - virtual void slotContextMenuRequested( TQListBoxItem *, const TQPoint& pos ); - /** - * Called when an item has been selected. Emits the activated() - * signal. - */ - virtual void slotSelected( TQListBoxItem * ); - - /** - * Called when a url was dropped onto the bar to show a - * KURLBarItemDialog. - */ - virtual void slotDropped( TQDropEvent * ); - -private slots: - void slotSelected( int button, TQListBoxItem * ); - -private: - KURLBarListBox *m_listBox; - int m_iconSize; - - -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KURLBarPrivate; - KURLBarPrivate *d; -}; - - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - - -class TQDragObject; -class KURLBarToolTip; - -/** - * This is the listbox used in KURLBar. It is a subclass of KListBox to support - * drag & drop and to set up the row / column mode. - * - * The widget has just one row or one column, depending on orientation(). - * - * @author Carsten Pfeiffer <pfeiffer@kde.org> - */ -class TDEIO_EXPORT KURLBarListBox : public KListBox -{ - Q_OBJECT - -public: - /** - * Constructs a KURLBarListBox. - */ - KURLBarListBox( TQWidget *parent = 0, const char *name = 0 ); - /** - * Destroys the box. - */ - ~KURLBarListBox(); - - /** - * Sets the orientation of the widget. Horizontal means, all items are - * arranged in one row. Vertical means, all items are arranged in one - * column. - * @see orientation - */ - virtual void setOrientation( Qt::Orientation orient ); - /** - * @returns the current orientation. - * @see setOrientation - */ - Qt::Orientation orientation() const { return m_orientation; } - - bool isVertical() const { return m_orientation == Qt::Vertical; } - -signals: - /** - * Emitted when a drop-event happened. - */ - void dropped( TQDropEvent *e ); - -protected: - /** - * @returns a suitable TQDragObject when an item is dragged. - */ - virtual TQDragObject * dragObject(); - - virtual void contentsDragEnterEvent( TQDragEnterEvent * ); - virtual void contentsDropEvent( TQDropEvent * ); - virtual void contextMenuEvent( TQContextMenuEvent * ); - virtual void paintEvent( TQPaintEvent* ); - -private: - Qt::Orientation m_orientation; - KURLBarToolTip *m_toolTip; - -protected: - virtual void virtual_hook( int id, void* data ); -private: - class KURLBarListBoxPrivate; - KURLBarListBoxPrivate *d; -}; - - -/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// - - -class TQCheckBox; -class KIconButton; -class KLineEdit; -class KURLRequester; - -/** - * A dialog that allows editing entries of a KURLBar ( KURLBarItem). - * The dialog offers to configure a given url, description and icon. - * See the class-method getInformation() for easy usage. - * - * @author Carsten Pfeiffer <pfeiffer@kde.org> - */ -class TDEIO_EXPORT KURLBarItemDialog : public KDialogBase -{ - Q_OBJECT - -public: - /** - * A convenience method to show the dialog and retrieve all the - * properties via the given parameters. The parameters are used to - * initialize the dialog and then return the user-configured values. - * - * See the KURLBarItem constructor for the parameter description. - */ - static bool getInformation( bool allowGlobal, KURL& url, - TQString& description, TQString& icon, - bool& appLocal, int iconSize, - TQWidget *parent = 0 ); - - /** - * Constructs a KURLBarItemDialog. - * - * @p allowGlobal if you set this to true, the dialog will have a checkbox - * for the user to decide if he wants the entry to be - * available globally or just for the current application. - * @p url the url of the item - * @p description a short, translated description of the item - * @p icon an icon for the item - * @p appLocal tells whether the item should be local for this application - * or be available globally - * @p iconSize determines the size of the icon that is shown/selectable - * @p parent the parent-widget for the dialog - * - * If you leave the icon empty, the default icon for the given url will be - * used (KMimeType::pixmapForURL()). - */ - KURLBarItemDialog( bool allowGlobal, const KURL& url, - const TQString& description, TQString icon, - bool appLocal = true, - int iconSize = KIcon::SizeMedium, - TQWidget *parent = 0, const char *name = 0 ); - /** - * Destroys the dialog. - */ - ~KURLBarItemDialog(); - - /** - * @returns the configured url - */ - KURL url() const; - - /** - * @returns the configured description - */ - TQString description() const; - - /** - * @returns the configured icon - */ - TQString icon() const; - - /** - * @returns whether the item should be local to the application or global. - * If allowGlobal was set to false in the constructor, this will always - * return true. - */ - bool applicationLocal() const; - -protected: - /** - * The KURLRequester used for editing the url - */ - KURLRequester * m_urlEdit; - /** - * The KLineEdit used for editing the description - */ - KLineEdit * m_edit; - /** - * The KIconButton to configure the icon - */ - KIconButton * m_iconButton; - /** - * The TQCheckBox to modify the local/global setting - */ - TQCheckBox * m_appLocal; - -public slots: - void urlChanged(const TQString & ); - -private: - class KURLBarItemDialogPrivate; - KURLBarItemDialogPrivate *d; -}; - - -#endif // KURLBAR_H diff --git a/kio/kfile/kurlcombobox.cpp b/kio/kfile/kurlcombobox.cpp deleted file mode 100644 index e01be4548..000000000 --- a/kio/kfile/kurlcombobox.cpp +++ /dev/null @@ -1,363 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2000,2001 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2, as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <tqdir.h> -#include <tqlistbox.h> - -#include <kdebug.h> -#include <kglobal.h> -#include <kiconloader.h> -#include <klocale.h> -#include <kmimetype.h> - -#include <kurlcombobox.h> - -class KURLComboBox::KURLComboBoxPrivate -{ -public: - KURLComboBoxPrivate() { - dirpix = SmallIcon(TQString::fromLatin1("folder")); - } - - TQPixmap dirpix; -}; - - -KURLComboBox::KURLComboBox( Mode mode, TQWidget *parent, const char *name ) - : KComboBox( parent, name ) -{ - init( mode ); -} - - -KURLComboBox::KURLComboBox( Mode mode, bool rw, TQWidget *parent, - const char *name ) - : KComboBox( rw, parent, name ) -{ - init( mode ); -} - - -KURLComboBox::~KURLComboBox() -{ - delete d; -} - - -void KURLComboBox::init( Mode mode ) -{ - d = new KURLComboBoxPrivate(); - - myMode = mode; - urlAdded = false; - myMaximum = 10; // default - itemList.setAutoDelete( true ); - defaultList.setAutoDelete( true ); - setInsertionPolicy( NoInsertion ); - setTrapReturnKey( true ); - setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed )); - - opendirPix = SmallIcon(TQString::fromLatin1("folder_open")); - - connect( this, TQT_SIGNAL( activated( int )), TQT_SLOT( slotActivated( int ))); -} - - -TQStringList KURLComboBox::urls() const -{ - kdDebug(250) << "::urls()" << endl; - //static const TQString &fileProt = TDEGlobal::staticQString("file:"); - TQStringList list; - TQString url; - for ( int i = defaultList.count(); i < count(); i++ ) { - url = text( i ); - if ( !url.isEmpty() ) { - //if ( url.at(0) == '/' ) - // list.append( url.prepend( fileProt ) ); - //else - list.append( url ); - } - } - - return list; -} - - -void KURLComboBox::addDefaultURL( const KURL& url, const TQString& text ) -{ - addDefaultURL( url, getPixmap( url ), text ); -} - - -void KURLComboBox::addDefaultURL( const KURL& url, const TQPixmap& pix, - const TQString& text ) -{ - KURLComboItem *item = new KURLComboItem; - item->url = url; - item->pixmap = pix; - if ( text.isEmpty() ) - if ( url.isLocalFile() ) - item->text = url.path( myMode ); - else - item->text = url.prettyURL( myMode ); - else - item->text = text; - - defaultList.append( item ); -} - - -void KURLComboBox::setDefaults() -{ - clear(); - itemMapper.clear(); - - KURLComboItem *item; - for ( unsigned int id = 0; id < defaultList.count(); id++ ) { - item = defaultList.at( id ); - insertURLItem( item ); - } -} - -void KURLComboBox::setURLs( TQStringList urls ) -{ - setURLs( urls, RemoveBottom ); -} - -void KURLComboBox::setURLs( TQStringList urls, OverLoadResolving remove ) -{ - setDefaults(); - itemList.clear(); - - if ( urls.isEmpty() ) - return; - - TQStringList::Iterator it = urls.begin(); - - // kill duplicates - TQString text; - while ( it != urls.end() ) { - while ( urls.contains( *it ) > 1 ) { - it = urls.remove( it ); - continue; - } - ++it; - } - - // limit to myMaximum items - /* Note: overload is an (old) C++ keyword, some compilers (KCC) choke - on that, so call it Overload (capital 'O'). (matz) */ - int Overload = urls.count() - myMaximum + defaultList.count(); - while ( Overload > 0 ) { - urls.remove((remove == RemoveBottom) ? urls.fromLast() : urls.begin()); - Overload--; - } - - it = urls.begin(); - - KURLComboItem *item = 0L; - KURL u; - - while ( it != urls.end() ) { - if ( (*it).isEmpty() ) { - ++it; - continue; - } - u = KURL::fromPathOrURL( *it ); - - // Don't restore if file doesn't exist anymore - if (u.isLocalFile() && !TQFile::exists(u.path())) { - ++it; - continue; - } - - item = new KURLComboItem; - item->url = u; - item->pixmap = getPixmap( u ); - - if ( u.isLocalFile() ) - item->text = u.path( myMode ); // don't show file:/ - else - item->text = *it; - - insertURLItem( item ); - itemList.append( item ); - ++it; - } -} - - -void KURLComboBox::setURL( const KURL& url ) -{ - if ( url.isEmpty() ) - return; - - blockSignals( true ); - - // check for duplicates - TQMap<int,const KURLComboItem*>::ConstIterator mit = itemMapper.begin(); - TQString urlToInsert = url.url(-1); - while ( mit != itemMapper.end() ) { - if ( urlToInsert == mit.data()->url.url(-1) ) { - setCurrentItem( mit.key() ); - - if ( myMode == Directories ) - updateItem( mit.data(), mit.key(), opendirPix ); - - blockSignals( false ); - return; - } - ++mit; - } - - // not in the combo yet -> create a new item and insert it - - // first remove the old item - if ( urlAdded ) { - itemList.removeLast(); - urlAdded = false; - } - - setDefaults(); - - TQPtrListIterator<KURLComboItem> it( itemList ); - for( ; it.current(); ++it ) - insertURLItem( it.current() ); - - KURLComboItem *item = new KURLComboItem; - item->url = url; - item->pixmap = getPixmap( url ); - if ( url.isLocalFile() ) - item->text = url.path( myMode ); - else - item->text = url.prettyURL( myMode ); - kdDebug(250) << "setURL: text=" << item->text << endl; - - int id = count(); - TQString text = /*isEditable() ? item->url.prettyURL( myMode ) : */ item->text; - - if ( myMode == Directories ) - KComboBox::insertItem( opendirPix, text, id ); - else - KComboBox::insertItem( item->pixmap, text, id ); - itemMapper.insert( id, item ); - itemList.append( item ); - - setCurrentItem( id ); - urlAdded = true; - blockSignals( false ); -} - - -void KURLComboBox::slotActivated( int index ) -{ - const KURLComboItem *item = itemMapper[ index ]; - - if ( item ) { - setURL( item->url ); - emit urlActivated( item->url ); - } -} - - -void KURLComboBox::insertURLItem( const KURLComboItem *item ) -{ -// kdDebug(250) << "insertURLItem " << item->text << endl; - int id = count(); - KComboBox::insertItem( item->pixmap, item->text, id ); - itemMapper.insert( id, item ); -} - - -void KURLComboBox::setMaxItems( int max ) -{ - myMaximum = max; - - if ( count() > myMaximum ) { - int oldCurrent = currentItem(); - - setDefaults(); - - TQPtrListIterator<KURLComboItem> it( itemList ); - int Overload = itemList.count() - myMaximum + defaultList.count(); - for ( int i = 0; i <= Overload; i++ ) - ++it; - - for( ; it.current(); ++it ) - insertURLItem( it.current() ); - - if ( count() > 0 ) { // restore the previous currentItem - if ( oldCurrent >= count() ) - oldCurrent = count() -1; - setCurrentItem( oldCurrent ); - } - } -} - - -void KURLComboBox::removeURL( const KURL& url, bool checkDefaultURLs ) -{ - TQMap<int,const KURLComboItem*>::ConstIterator mit = itemMapper.begin(); - while ( mit != itemMapper.end() ) { - if ( url.url(-1) == mit.data()->url.url(-1) ) { - if ( !itemList.remove( mit.data() ) && checkDefaultURLs ) - defaultList.remove( mit.data() ); - } - ++mit; - } - - blockSignals( true ); - setDefaults(); - TQPtrListIterator<KURLComboItem> it( itemList ); - while ( it.current() ) { - insertURLItem( *it ); - ++it; - } - blockSignals( false ); -} - - -TQPixmap KURLComboBox::getPixmap( const KURL& url ) const -{ - if ( myMode == Directories ) - return d->dirpix; - else - return KMimeType::pixmapForURL( url, 0, KIcon::Small ); -} - - -// updates "item" with pixmap "pixmap" and sets the URL instead of text -// works around a Qt bug. -void KURLComboBox::updateItem( const KURLComboItem *item, - int index, const TQPixmap& pixmap ) -{ - // TQComboBox::changeItem() doesn't honor the pixmap when - // using an editable combobox, so we just remove and insert - if ( editable() ) { - removeItem( index ); - insertItem( pixmap, - item->url.isLocalFile() ? item->url.path( myMode ) : - item->url.prettyURL( myMode ), - index ); - } - else - changeItem( pixmap, item->text, index ); -} - - -#include "kurlcombobox.moc" diff --git a/kio/kfile/kurlcombobox.h b/kio/kfile/kurlcombobox.h deleted file mode 100644 index a1fd9182d..000000000 --- a/kio/kfile/kurlcombobox.h +++ /dev/null @@ -1,229 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2000 Carsten Pfeiffer <pfeiffer@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2, as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef KURLCOMBOBOX_H -#define KURLCOMBOBOX_H - -#include <tqevent.h> -#include <tqptrlist.h> -#include <tqmap.h> -#include <tqpixmap.h> -#include <tqstringlist.h> - -#include <kcombobox.h> -#include <kurl.h> - -/** - * This combobox shows a number of recent URLs/directories, as well as some - * default directories. - * It will manage the default dirs root-directory, home-directory and - * Desktop-directory, as well as a number of URLs set via setURLs() - * and one additional entry to be set via setURL(). - * - * @short A combo box showing a number of recent URLs/directories - * @author Carsten Pfeiffer <pfeiffer@kde.org> - */ -class TDEIO_EXPORT KURLComboBox : public KComboBox -{ - Q_OBJECT - TQ_PROPERTY(TQStringList urls READ urls WRITE setURLs DESIGNABLE true) - TQ_PROPERTY(int maxItems READ maxItems WRITE setMaxItems DESIGNABLE true) - -public: - /** - * This enum describes which kind of items is shown in the combo box. - */ - enum Mode { Files = -1, Directories = 1, Both = 0 }; - /** - * This Enumeration is used in setURL() to determine which items - * will be removed when the given list is larger than maxItems(). - * - * @li RemoveTop means that items will be removed from top - * @li RemoveBottom means, that items will be removed from the bottom - */ - enum OverLoadResolving { RemoveTop, RemoveBottom }; - - /** - * Constructs a KURLComboBox. - * @param mode is either Files, Directories or Both and controls the - * following behavior: - * @li Files all inserted URLs will be treated as files, therefore the - * url shown in the combo will never show a trailing / - * the icon will be the one associated with the file's mimetype. - * @li Directories all inserted URLs will be treated as directories, will - * have a trailing slash in the combobox. The current - * directory will show the "open folder" icon, other - * directories the "folder" icon. - * @li Both Don't mess with anything, just show the url as given. - * @param parent The parent object of this widget. - * @param name The name of this widget. - */ - KURLComboBox( Mode mode, TQWidget *parent=0, const char *name=0 ); - KURLComboBox( Mode mode, bool rw, TQWidget *parent=0, const char *name=0 ); - /** - * Destructs the combo box. - */ - ~KURLComboBox(); - - /** - * Sets the current url. This combo handles exactly one url additionally - * to the default items and those set via setURLs(). So you can call - * setURL() as often as you want, it will always replace the previous one - * set via setURL(). - * If @p url is already in the combo, the last item will stay there - * and the existing item becomes the current item. - * The current item will always have the open-directory-pixmap as icon. - * - * Note that you won't receive any signals, e.g. textChanged(), - * returnPressed() or activated() upon calling this method. - */ - void setURL( const KURL& url ); - - /** - * Inserts @p urls into the combobox below the "default urls" (see - * addDefaultURL). - * - * If the list of urls contains more items than maxItems, the first items - * will be stripped. - */ - void setURLs( TQStringList urls ); - - /** - * Inserts @p urls into the combobox below the "default urls" (see - * addDefaultURL). - * - * If the list of urls contains more items than maxItems, the @p remove - * parameter determines whether the first or last items will be stripped. - */ - void setURLs( TQStringList urls, OverLoadResolving remove ); - - /** - * @returns a list of all urls currently handled. The list contains at most - * maxItems() items. - * Use this to save the list of urls in a config-file and reinsert them - * via setURLs() next time. - * Note that all default urls set via addDefaultURL() are not - * returned, they will automatically be set via setURLs() or setURL(). - * You will always get fully qualified urls, i.e. with protocol like - * file:/ - */ - TQStringList urls() const; - - /** - * Sets how many items should be handled and displayed by the combobox. - * @see maxItems - */ - void setMaxItems( int ); - - /** - * @returns the maximum of items the combobox handles. - * @see setMaxItems - */ - int maxItems() const { return myMaximum; } - - /** - * Adds a url that will always be shown in the combobox, it can't be - * "rotated away". Default urls won't be returned in urls() and don't - * have to be set via setURLs(). - * If you want to specify a special pixmap, use the overloaded method with - * the pixmap parameter. - * Default URLs will be inserted into the combobox by setDefaults() - */ - void addDefaultURL( const KURL& url, const TQString& text = TQString::null ); - - /** - * Adds a url that will always be shown in the combobox, it can't be - * "rotated away". Default urls won't be returned in urls() and don't - * have to be set via setURLs(). - * If you don't need to specify a pixmap, use the overloaded method without - * the pixmap parameter. - * Default URLs will be inserted into the combobox by setDefaults() - */ - void addDefaultURL( const KURL& url, const TQPixmap& pix, - const TQString& text = TQString::null ); - - /** - * Clears all items and inserts the default urls into the combo. Will be - * called implicitly upon the first call to setURLs() or setURL() - * @see addDefaultURL - */ - void setDefaults(); - - /** - * Removes any occurrence of @p url. If @p checkDefaultURLs is false - * default-urls won't be removed. - */ - void removeURL( const KURL& url, bool checkDefaultURLs = true ); - -signals: - /** - * Emitted when an item was clicked at. - * @param url is the url of the now current item. If it is a local url, - * it won't have a protocol (file:/), otherwise it will. - */ - void urlActivated( const KURL& url ); - - -protected slots: - void slotActivated( int ); - - -protected: - struct _KURLComboItem { - TQString text; - KURL url; - TQPixmap pixmap; - }; - typedef _KURLComboItem KURLComboItem; - TQPtrList<KURLComboItem> itemList; - TQPtrList<KURLComboItem> defaultList; - TQMap<int,const KURLComboItem*> itemMapper; - - void init( Mode mode ); - void insertURLItem( const KURLComboItem * ); - - /** - * Uses KMimeType::pixmapForURL() to return a proper pixmap for @p url. - * In directory mode, a folder icon is always returned. - */ - TQPixmap getPixmap( const KURL& url ) const; - - /** - * Updates @p item with @p pixmap and sets the url instead of the text - * of the KURLComboItem. - * Also works around a Qt bug. - */ - void updateItem( const KURLComboItem *item, int index, const TQPixmap& pix); - - TQPixmap opendirPix; - int firstItemIndex; - - -private: - bool urlAdded; - int myMaximum; - Mode myMode; // can be used as parameter to KUR::path( int ) or url( int ) - // to specify if we want a trailing slash or not - -private: - class KURLComboBoxPrivate; - KURLComboBoxPrivate *d; -}; - - -#endif // KURLCOMBOBOX_H diff --git a/kio/kfile/kurlrequester.cpp b/kio/kfile/kurlrequester.cpp deleted file mode 100644 index 99e6e96f0..000000000 --- a/kio/kfile/kurlrequester.cpp +++ /dev/null @@ -1,430 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 1999,2000,2001 Carsten Pfeiffer <pfeiffer@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2, as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - - -#include <sys/stat.h> -#include <unistd.h> - -#include <tqstring.h> -#include <tqtooltip.h> -#include <tqapplication.h> - -#include <kaccel.h> -#include <kcombobox.h> -#include <kdebug.h> -#include <kdialog.h> -#include <kdirselectdialog.h> -#include <kfiledialog.h> -#include <kglobal.h> -#include <kiconloader.h> -#include <klineedit.h> -#include <klocale.h> -#include <kurlcompletion.h> -#include <kurldrag.h> -#include <kprotocolinfo.h> - -#include "kurlrequester.h" - - -class KURLDragPushButton : public KPushButton -{ -public: - KURLDragPushButton( TQWidget *parent, const char *name=0 ) - : KPushButton( parent, name ) { - setDragEnabled( true ); - } - ~KURLDragPushButton() {} - - void setURL( const KURL& url ) { - m_urls.clear(); - m_urls.append( url ); - } - - /* not needed so far - void setURLs( const KURL::List& urls ) { - m_urls = urls; - } - const KURL::List& urls() const { return m_urls; } - */ - -protected: - virtual TQDragObject *dragObject() { - if ( m_urls.isEmpty() ) - return 0L; - - TQDragObject *drag = new KURLDrag( m_urls, this, "url drag" ); - return drag; - } - -private: - KURL::List m_urls; - -}; - - -/* -************************************************************************* -*/ - -class KURLRequester::KURLRequesterPrivate -{ -public: - KURLRequesterPrivate() { - edit = 0L; - combo = 0L; - fileDialogMode = KFile::File | KFile::ExistingOnly | KFile::LocalOnly; - } - - void setText( const TQString& text ) { - if ( combo ) - { - if (combo->editable()) - { - combo->setEditText( text ); - } - else - { - combo->insertItem( text ); - combo->setCurrentItem( combo->count()-1 ); - } - } - else - { - edit->setText( text ); - } - } - - void connectSignals( TQObject *receiver ) { - TQObject *sender; - if ( combo ) - sender = TQT_TQOBJECT(combo); - else - sender = TQT_TQOBJECT(edit); - - connect( sender, TQT_SIGNAL( textChanged( const TQString& )), - receiver, TQT_SIGNAL( textChanged( const TQString& ))); - connect( sender, TQT_SIGNAL( returnPressed() ), - receiver, TQT_SIGNAL( returnPressed() )); - connect( sender, TQT_SIGNAL( returnPressed( const TQString& ) ), - receiver, TQT_SIGNAL( returnPressed( const TQString& ) )); - } - - void setCompletionObject( KCompletion *comp ) { - if ( combo ) - combo->setCompletionObject( comp ); - else - edit->setCompletionObject( comp ); - } - - /** - * replaces ~user or $FOO, if necessary - */ - TQString url() { - TQString txt = combo ? combo->currentText() : edit->text(); - KURLCompletion *comp; - if ( combo ) - comp = dynamic_cast<KURLCompletion*>(combo->completionObject()); - else - comp = dynamic_cast<KURLCompletion*>(edit->completionObject()); - - if ( comp ) - return comp->replacedPath( txt ); - else - return txt; - } - - KLineEdit *edit; - KComboBox *combo; - int fileDialogMode; - TQString fileDialogFilter; -}; - - - -KURLRequester::KURLRequester( TQWidget *editWidget, TQWidget *parent, - const char *name ) - : TQHBox( parent, name ) -{ - d = new KURLRequesterPrivate; - - // must have this as parent - editWidget->reparent( this, 0, TQPoint(0,0) ); - d->edit = dynamic_cast<KLineEdit*>( editWidget ); - d->combo = dynamic_cast<KComboBox*>( editWidget ); - - init(); -} - - -KURLRequester::KURLRequester( TQWidget *parent, const char *name ) - : TQHBox( parent, name ) -{ - d = new KURLRequesterPrivate; - init(); -} - - -KURLRequester::KURLRequester( const TQString& url, TQWidget *parent, - const char *name ) - : TQHBox( parent, name ) -{ - d = new KURLRequesterPrivate; - init(); - setKURL( KURL::fromPathOrURL( url ) ); -} - - -KURLRequester::~KURLRequester() -{ - delete myCompletion; - delete myFileDialog; - delete d; -} - - -void KURLRequester::init() -{ - myFileDialog = 0L; - myShowLocalProt = false; - - if ( !d->combo && !d->edit ) - d->edit = new KLineEdit( this, "line edit" ); - - myButton = new KURLDragPushButton( this, "kfile button"); - TQIconSet iconSet = SmallIconSet(TQString::fromLatin1("fileopen")); - TQPixmap pixMap = iconSet.pixmap( TQIconSet::Small, TQIconSet::Normal ); - myButton->setIconSet( iconSet ); - myButton->setFixedSize( pixMap.width()+8, pixMap.height()+8 ); - TQToolTip::add(myButton, i18n("Open file dialog")); - - connect( myButton, TQT_SIGNAL( pressed() ), TQT_SLOT( slotUpdateURL() )); - - setSpacing( KDialog::spacingHint() ); - - TQWidget *widget = d->combo ? (TQWidget*) d->combo : (TQWidget*) d->edit; - widget->installEventFilter( this ); - setFocusProxy( widget ); - - d->connectSignals( TQT_TQOBJECT(this) ); - connect( myButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotOpenDialog() )); - - myCompletion = new KURLCompletion(); - d->setCompletionObject( myCompletion ); - - KAccel *accel = new KAccel( this ); - accel->insert( KStdAccel::Open, TQT_TQOBJECT(this), TQT_SLOT( slotOpenDialog() )); - accel->readSettings(); -} - - -void KURLRequester::setURL( const TQString& url ) -{ - if ( myShowLocalProt ) - { - d->setText( url ); - } - else - { - // ### This code is broken (e.g. for paths with '#') - if ( url.startsWith("file://") ) - d->setText( url.mid( 7 ) ); - else if ( url.startsWith("file:") ) - d->setText( url.mid( 5 ) ); - else - d->setText( url ); - } -} - -void KURLRequester::setKURL( const KURL& url ) -{ - if ( myShowLocalProt ) - d->setText( url.url() ); - else - d->setText( url.pathOrURL() ); -} - -void KURLRequester::setCaption( const TQString& caption ) -{ - TQWidget::setCaption( caption ); - if (myFileDialog) - myFileDialog->setCaption( caption ); -} - -TQString KURLRequester::url() const -{ - return d->url(); -} - -void KURLRequester::slotOpenDialog() -{ - KURL newurl; - if ( (d->fileDialogMode & KFile::Directory) && !(d->fileDialogMode & KFile::File) || - /* catch possible fileDialog()->setMode( KFile::Directory ) changes */ - (myFileDialog && ( (myFileDialog->mode() & KFile::Directory) && - (myFileDialog->mode() & (KFile::File | KFile::Files)) == 0 ) ) ) - { - newurl = KDirSelectDialog::selectDirectory(url(), d->fileDialogMode & KFile::LocalOnly); - if ( !newurl.isValid() ) - { - return; - } - } - else - { - emit openFileDialog( this ); - - KFileDialog *dlg = fileDialog(); - if ( !d->url().isEmpty() ) { - KURL u( url() ); - // If we won't be able to list it (e.g. http), then don't try :) - if ( KProtocolInfo::supportsListing( u ) ) - dlg->setSelection( u.url() ); - } - - if ( dlg->exec() != TQDialog::Accepted ) - { - return; - } - - newurl = dlg->selectedURL(); - } - - setKURL( newurl ); - emit urlSelected( d->url() ); -} - -void KURLRequester::setMode(uint mode) -{ - Q_ASSERT( (mode & KFile::Files) == 0 ); - d->fileDialogMode = mode; - if ( (mode & KFile::Directory) && !(mode & KFile::File) ) - myCompletion->setMode( KURLCompletion::DirCompletion ); - - if (myFileDialog) - myFileDialog->setMode( d->fileDialogMode ); -} - -unsigned int KURLRequester::mode() const -{ - return d->fileDialogMode; -} - -void KURLRequester::setFilter(const TQString &filter) -{ - d->fileDialogFilter = filter; - if (myFileDialog) - myFileDialog->setFilter( d->fileDialogFilter ); -} - -TQString KURLRequester::filter( ) const -{ - return d->fileDialogFilter; -} - - -KFileDialog * KURLRequester::fileDialog() const -{ - if ( !myFileDialog ) { - TQWidget *p = parentWidget(); - myFileDialog = new KFileDialog( TQString::null, d->fileDialogFilter, p, - "file dialog", true ); - - myFileDialog->setMode( d->fileDialogMode ); - myFileDialog->setCaption( caption() ); - } - - return myFileDialog; -} - - -void KURLRequester::setShowLocalProtocol( bool b ) -{ - if ( myShowLocalProt == b ) - return; - - myShowLocalProt = b; - setKURL( url() ); -} - -void KURLRequester::clear() -{ - d->setText( TQString::null ); -} - -KLineEdit * KURLRequester::lineEdit() const -{ - return d->edit; -} - -KComboBox * KURLRequester::comboBox() const -{ - return d->combo; -} - -void KURLRequester::slotUpdateURL() -{ - // bin compat, myButton is declared as QPushButton - KURL u; - u = KURL( KURL( TQDir::currentDirPath() + '/' ), url() ); - (static_cast<KURLDragPushButton *>( myButton ))->setURL( u ); -} - -bool KURLRequester::eventFilter( TQObject *obj, TQEvent *ev ) -{ - if ( ( TQT_BASE_OBJECT(d->edit) == TQT_BASE_OBJECT(obj) ) || ( TQT_BASE_OBJECT(d->combo) == TQT_BASE_OBJECT(obj) ) ) - { - if (( ev->type() == TQEvent::FocusIn ) || ( ev->type() == TQEvent::FocusOut )) - // Forward focusin/focusout events to the urlrequester; needed by file form element in tdehtml - TQApplication::sendEvent( this, ev ); - } - return TQWidget::eventFilter( obj, ev ); -} - -KPushButton * KURLRequester::button() const -{ - return myButton; -} - -KEditListBox::CustomEditor KURLRequester::customEditor() -{ - setSizePolicy(TQSizePolicy( TQSizePolicy::Preferred, - TQSizePolicy::Fixed)); - - KLineEdit *edit = d->edit; - if ( !edit && d->combo ) - edit = dynamic_cast<KLineEdit*>( d->combo->lineEdit() ); - -#ifndef NDEBUG - if ( !edit ) - kdWarning() << "KURLRequester's lineedit is not a KLineEdit!??\n"; -#endif - - KEditListBox::CustomEditor editor( this, edit ); - return editor; -} - -void KURLRequester::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -KURLComboRequester::KURLComboRequester( TQWidget *parent, - const char *name ) - : KURLRequester( new KComboBox(false), parent, name) -{ -} - -#include "kurlrequester.moc" diff --git a/kio/kfile/kurlrequester.h b/kio/kfile/kurlrequester.h deleted file mode 100644 index aa2f6894b..000000000 --- a/kio/kfile/kurlrequester.h +++ /dev/null @@ -1,301 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 1999,2000,2001 Carsten Pfeiffer <pfeiffer@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2, as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - - -#ifndef KURLREQUESTER_H -#define KURLREQUESTER_H - -#include <tqhbox.h> - -#include <keditlistbox.h> -#include <kfile.h> -#include <kpushbutton.h> -#include <kurl.h> - -class KComboBox; -class KFileDialog; -class KLineEdit; -class KURLCompletion; -class KURLDragPushButton; - -class TQString; -class TQTimer; - -/** - * This class is a widget showing a lineedit and a button, which invokes a - * filedialog. File name completion is available in the lineedit. - * - * The defaults for the filedialog are to ask for one existing local file, i.e. - * KFileDialog::setMode( KFile::File | KFile::ExistingOnly | KFile::LocalOnly ) - * The default filter is "*", i.e. show all files, and the start directory is - * the current working directory, or the last directory where a file has been - * selected. - * - * You can change this behavior by using setMode() or setFilter(). - * - * \image html kurlrequester.png "KDE URL Requester" - * - * @short A widget to request a filename/url from the user - * @author Carsten Pfeiffer <pfeiffer@kde.org> - */ -class TDEIO_EXPORT KURLRequester : public TQHBox -{ - Q_OBJECT - TQ_PROPERTY( TQString url READ url WRITE setURL ) - TQ_PROPERTY( bool showLocalProtocol READ showLocalProtocol WRITE setShowLocalProtocol ) - TQ_PROPERTY( TQString filter READ filter WRITE setFilter ) - TQ_PROPERTY( uint mode READ mode WRITE setMode ) - -public: - /** - * Constructs a KURLRequester widget. - */ - KURLRequester( TQWidget *parent=0, const char *name=0 ); - - /** - * Constructs a KURLRequester widget with the initial URL @p url. - * // TODO KDE4: Use KURL instead - */ - KURLRequester( const TQString& url, TQWidget *parent=0, const char *name=0 ); - - /** - * Special constructor, which creates a KURLRequester widget with a custom - * edit-widget. The edit-widget can be either a KComboBox or a KLineEdit - * (or inherited thereof). Note: for geometry management reasons, the - * edit-widget is reparented to have the KURLRequester as parent. - */ - KURLRequester( TQWidget *editWidget, TQWidget *parent, const char *name=0 ); - /** - * Destructs the KURLRequester. - */ - ~KURLRequester(); - - /** - * @returns the current url in the lineedit. May be malformed, if the user - * entered something weird. ~user or environment variables are substituted - * for local files. - * // TODO KDE4: Use KURL so that the result is properly defined - */ - TQString url() const; - - /** - * Enables/disables showing file:/ in the lineedit, when a local file has - * been selected in the filedialog or was set via setURL(). - * Default is false, not showing file:/ - * @see showLocalProtocol - */ - void setShowLocalProtocol( bool b ); - - /** - * Sets the mode of the file dialog. - * Note: you can only select one file with the filedialog, - * so KFile::Files doesn't make much sense. - * @see KFileDialog::setMode() - */ - void setMode( uint m ); - - /** - * Returns the current mode - * @see KFileDialog::mode() - * @since 3.3 - */ - uint mode() const; - - - /** - * Sets the filter for the file dialog. - * @see KFileDialog::setFilter() - */ - void setFilter( const TQString& filter ); - - /** - * Returns the current filter for the file dialog. - * @see KFileDialog::filter() - * @since 3.3 - */ - TQString filter() const; - - /** - * @returns whether local files will be prefixed with file:/ in the - * lineedit - * @see setShowLocalProtocol - */ - bool showLocalProtocol() const { return myShowLocalProt; } - // ## KDE4: there's no reason to keep this, it should always be false - - /** - * @returns a pointer to the filedialog - * You can use this to customize the dialog, e.g. to specify a filter. - * Never returns 0L. - * - * Remove in KDE4? KURLRequester should use KDirSelectDialog for - * (mode & KFile::Directory) && !(mode & KFile::File) - */ - virtual KFileDialog * fileDialog() const; - - /** - * @returns a pointer to the lineedit, either the default one, or the - * special one, if you used the special constructor. - * - * It is provided so that you can e.g. set an own completion object - * (e.g. KShellCompletion) into it. - */ - KLineEdit * lineEdit() const; - - /** - * @returns a pointer to the combobox, in case you have set one using the - * special constructor. Returns 0L otherwise. - */ - KComboBox * comboBox() const; - - /** - * @returns a pointer to the pushbutton. It is provided so that you can - * specify an own pixmap or a text, if you really need to. - */ - KPushButton * button() const; - - /** - * @returns the KURLCompletion object used in the lineedit/combobox. - */ - KURLCompletion *completionObject() const { return myCompletion; } - - /** - * @returns an object, suitable for use with KEditListBox. It allows you - * to put this KURLRequester into a KEditListBox. - * Basically, do it like this: - * \code - * KURLRequester *req = new KURLRequester( someWidget ); - * [...] - * KEditListBox *editListBox = new KEditListBox( i18n("Some Title"), req->customEditor(), someWidget ); - * \endcode - * @since 3.1 - */ - KEditListBox::CustomEditor customEditor(); - -public slots: - /** - * Sets the url in the lineedit to @p url. Depending on the state of - * showLocalProtocol(), file:/ on local files will be shown or not. - * @since 3.1 - * // TODO KDE4: Use KURL instead - */ - void setURL( const TQString& url ); - - /** - * Sets the url in the lineedit to @p url. - * @since 3.4 - * // TODO KDE4: rename to setURL - */ - void setKURL( const KURL& url ); - - /** - * Sets the caption of the file dialog. - * @since 3.1 - */ - virtual void setCaption( const TQString& caption ); - - /** - * Clears the lineedit/combobox. - */ - void clear(); - -signals: - // forwards from LineEdit - /** - * Emitted when the text in the lineedit changes. - * The parameter contains the contents of the lineedit. - * @since 3.1 - */ - void textChanged( const TQString& ); - - /** - * Emitted when return or enter was pressed in the lineedit. - */ - void returnPressed(); - - /** - * Emitted when return or enter was pressed in the lineedit. - * The parameter contains the contents of the lineedit. - */ - void returnPressed( const TQString& ); - - /** - * Emitted before the filedialog is going to open. Connect - * to this signal to "configure" the filedialog, e.g. set the - * filefilter, the mode, a preview-widget, etc. It's usually - * not necessary to set a URL for the filedialog, as it will - * get set properly from the editfield contents. - * - * If you use multiple KURLRequesters, you can connect all of them - * to the same slot and use the given KURLRequester pointer to know - * which one is going to open. - */ - void openFileDialog( KURLRequester * ); - - /** - * Emitted when the user changed the URL via the file dialog. - * The parameter contains the contents of the lineedit. - * // TODO KDE4: Use KURL instead - */ - void urlSelected( const TQString& ); - -protected: - void init(); - - KURLCompletion * myCompletion; - - -private: - KURLDragPushButton * myButton; - bool myShowLocalProt; - mutable KFileDialog * myFileDialog; - - -protected slots: - /** - * Called when the button is pressed to open the filedialog. - * Also called when KStdAccel::Open (default is Ctrl-O) is pressed. - */ - void slotOpenDialog(); - -private slots: - void slotUpdateURL(); - -protected: - virtual void virtual_hook( int id, void* data ); - bool eventFilter( TQObject *obj, TQEvent *ev ); -private: - class KURLRequesterPrivate; - KURLRequesterPrivate *d; -}; - -/** - * URL requester with a combo box, for use in Designer - */ -class TDEIO_EXPORT KURLComboRequester : public KURLRequester -{ - Q_OBJECT -public: - /** - * Constructs a KURLRequester widget with a combobox. - */ - KURLComboRequester( TQWidget *parent=0, const char *name=0 ); -}; - - -#endif // KURLREQUESTER_H diff --git a/kio/kfile/kurlrequesterdlg.cpp b/kio/kfile/kurlrequesterdlg.cpp deleted file mode 100644 index 19409afdc..000000000 --- a/kio/kfile/kurlrequesterdlg.cpp +++ /dev/null @@ -1,135 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2000 Wilco Greven <greven@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - - -#include <sys/stat.h> -#include <unistd.h> - -#include <tqlabel.h> -#include <tqlayout.h> -#include <tqstring.h> -#include <tqtoolbutton.h> - -#include <kaccel.h> -#include <kfiledialog.h> -#include <kglobal.h> -#include <kiconloader.h> -#include <klineedit.h> -#include <klocale.h> -#include <krecentdocument.h> -#include <kurl.h> -#include <kurlrequester.h> - -#include "kurlrequesterdlg.h" - - -KURLRequesterDlg::KURLRequesterDlg( const TQString& urlName, TQWidget *parent, - const char *name, bool modal ) - : KDialogBase( Plain, TQString::null, Ok|Cancel|User1, Ok, parent, name, - modal, true, KStdGuiItem::clear() ) -{ - initDialog(i18n( "Location:" ), urlName); -} - -KURLRequesterDlg::KURLRequesterDlg( const TQString& urlName, const TQString& _text, TQWidget *parent, const char *name, bool modal ) - : KDialogBase( Plain, TQString::null, Ok|Cancel|User1, Ok, parent, name, - modal, true, KStdGuiItem::clear() ) -{ - initDialog(_text, urlName); -} - -KURLRequesterDlg::~KURLRequesterDlg() -{ -} - -void KURLRequesterDlg::initDialog(const TQString &text,const TQString &urlName) -{ - TQVBoxLayout * topLayout = new TQVBoxLayout( plainPage(), 0, - spacingHint() ); - - TQLabel * label = new TQLabel( text , plainPage() ); - topLayout->addWidget( label ); - - urlRequester_ = new KURLRequester( urlName, plainPage(), "urlRequester" ); - urlRequester_->setMinimumWidth( urlRequester_->sizeHint().width() * 3 ); - topLayout->addWidget( urlRequester_ ); - urlRequester_->setFocus(); - connect( urlRequester_->lineEdit(), TQT_SIGNAL(textChanged(const TQString&)), - TQT_SLOT(slotTextChanged(const TQString&)) ); - bool state = !urlName.isEmpty(); - enableButtonOK( state ); - enableButton( KDialogBase::User1, state ); - /* - KFile::Mode mode = static_cast<KFile::Mode>( KFile::File | - KFile::ExistingOnly ); - urlRequester_->setMode( mode ); - */ - connect( this, TQT_SIGNAL( user1Clicked() ), TQT_SLOT( slotClear() ) ); -} - -void KURLRequesterDlg::slotTextChanged(const TQString & text) -{ - bool state = !text.stripWhiteSpace().isEmpty(); - enableButtonOK( state ); - enableButton( KDialogBase::User1, state ); -} - -void KURLRequesterDlg::slotClear() -{ - urlRequester_->clear(); -} - -KURL KURLRequesterDlg::selectedURL() const -{ - if ( result() == TQDialog::Accepted ) - return KURL::fromPathOrURL( urlRequester_->url() ); - else - return KURL(); -} - - -KURL KURLRequesterDlg::getURL(const TQString& dir, TQWidget *parent, - const TQString& caption) -{ - KURLRequesterDlg dlg(dir, parent, "filedialog", true); - - dlg.setCaption(caption.isNull() ? i18n("Open") : caption); - - dlg.exec(); - - const KURL& url = dlg.selectedURL(); - if (url.isValid()) - KRecentDocument::add(url); - - return url; -} - -KFileDialog * KURLRequesterDlg::fileDialog() -{ - return urlRequester_->fileDialog(); -} - -KURLRequester * KURLRequesterDlg::urlRequester() -{ - return urlRequester_; -} - -#include "kurlrequesterdlg.moc" - -// vim:ts=4:sw=4:tw=78 diff --git a/kio/kfile/kurlrequesterdlg.h b/kio/kfile/kurlrequesterdlg.h deleted file mode 100644 index 07b70d745..000000000 --- a/kio/kfile/kurlrequesterdlg.h +++ /dev/null @@ -1,114 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2000 Wilco Greven <greven@kde.org> - - library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - - -#ifndef KURLREQUESTERDIALOG_H -#define KURLREQUESTERDIALOG_H - -#include <kdialogbase.h> -#include <kurl.h> - -class KURLCompletion; -class KURLRequester; -class KFileDialog; -/** - * Dialog in which a user can enter a filename or url. It is a dialog - * encapsulating KURLRequester. The API is derived from - * KFileDialog. - * - * @short Simple dialog to enter a filename/url. - * @author Wilco Greven <greven@kde.org> - */ -class TDEIO_EXPORT KURLRequesterDlg : public KDialogBase -{ - Q_OBJECT - -public: - /** - * Constructs a KURLRequesterDlg. - * - * @param url The url of the directory to start in. Use TQString::null - * to start in the current working directory, or the last - * directory where a file has been selected. - * @param parent The parent object of this widget. - * @param name The name of this widget. - * @param modal Specifies whether the dialog should be opened as modal - * or not. - */ - KURLRequesterDlg( const TQString& url, TQWidget *parent, - const char *name, bool modal = true ); - - /** - * Constructs a KURLRequesterDlg. - * - * @param url The url of the directory to start in. Use TQString::null - * to start in the current working directory, or the last - * directory where a file has been selected. - * @param text Text of the label - * @param parent The parent object of this widget. - * @param name The name of this widget. - * @param modal Specifies whether the dialog should be opened as modal - * or not. - */ - KURLRequesterDlg( const TQString& url, const TQString& text, - TQWidget *parent, const char *name, bool modal=true ); - /** - * Destructs the dialog. - */ - ~KURLRequesterDlg(); - - /** - * Returns the fully qualified filename. - */ - KURL selectedURL() const; - - /** - * Creates a modal dialog, executes it and returns the selected URL. - * - * @param url This specifies the initial path of the input line. - * @param parent The widget the dialog will be centered on initially. - * @param caption The caption to use for the dialog. - */ - static KURL getURL(const TQString& url = TQString::null, - TQWidget *parent= 0, const TQString& caption = TQString::null); - - /** - * Returns a pointer to the file dialog used by the KURLRequester. - */ - KFileDialog * fileDialog(); - /** - * Returns a pointer to the KURLRequester. - */ - KURLRequester *urlRequester(); - -private slots: - void slotClear(); - void slotTextChanged(const TQString &); -private: - void initDialog(const TQString &text, const TQString &url); - KURLRequester *urlRequester_; - - class KURLRequesterDlgPrivate; - KURLRequesterDlgPrivate *d; - -}; - -#endif // KURLREQUESTERDIALOG_H - -// vim:ts=4:sw=4:tw=78 diff --git a/kio/kfile/tests/Makefile.am b/kio/kfile/tests/Makefile.am deleted file mode 100644 index 9689f7a27..000000000 --- a/kio/kfile/tests/Makefile.am +++ /dev/null @@ -1,41 +0,0 @@ -# This file is part of the KDE libraries -# Copyright (C) 1996-1997 Matthias Kalle Dalheimer (kalle@kde.org) -# (C) 1997-1998 Stephan Kulow (coolo@kde.org) - -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. - -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. - -# You should have received a copy of the GNU Library General Public License -# along with this library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. - -INCLUDES = $(all_includes) - -AM_LDFLAGS = $(QT_LDFLAGS) $(X_LDFLAGS) $(KDE_RPATH) - -check_PROGRAMS = kfstest kurlrequestertest kfiletreeviewtest \ - kopenwithtest kdirselectdialogtest kicondialogtest \ - knotifytest kcustommenueditortest - -# noinst_HEADERS = - -METASOURCES = AUTO - -LDADD = $(LIB_KIO) -kcustommenueditortest_SOURCES = kcustommenueditortest.cpp -kurlrequestertest_SOURCES = kurlrequestertest.cpp -kfstest_SOURCES = kfstest.cpp kfdtest.cpp -kfiletreeviewtest_SOURCES = kfiletreeviewtest.cpp -kopenwithtest_SOURCES = kopenwithtest.cpp -kdirselectdialogtest_SOURCES = kdirselectdialogtest.cpp -kicondialogtest_SOURCES = kicondialogtest.cpp -knotifytest_SOURCES = knotifytest.cpp - diff --git a/kio/kfile/tests/kcustommenueditortest.cpp b/kio/kfile/tests/kcustommenueditortest.cpp deleted file mode 100644 index 1fc6da496..000000000 --- a/kio/kfile/tests/kcustommenueditortest.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "kcustommenueditor.h" -#include <kapplication.h> -#include <klocale.h> -#include <kconfig.h> - -int main(int argc, char** argv) -{ - KLocale::setMainCatalogue("tdelibs"); - TDEApplication app(argc, argv, "KCustomMenuEditorTest"); - KCustomMenuEditor editor(0); - TDEConfig *cfg = new TDEConfig("kdesktop_custom_menu2"); - editor.load(cfg); - if (editor.exec()) - { - editor.save(cfg); - cfg->sync(); - } -} - diff --git a/kio/kfile/tests/kdirselectdialogtest.cpp b/kio/kfile/tests/kdirselectdialogtest.cpp deleted file mode 100644 index 3d15c47d0..000000000 --- a/kio/kfile/tests/kdirselectdialogtest.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include <kapplication.h> -#include <kdirselectdialog.h> -#include <kmessagebox.h> -#include <kurl.h> - -int main( int argc, char **argv ) -{ - TDEApplication app(argc, argv, "kdirselectdialogtest"); - - KURL u = KDirSelectDialog::selectDirectory( (argc >= 1) ? argv[1] : TQString::null ); - if ( u.isValid() ) - KMessageBox::information( 0L, - TQString::fromLatin1("You selected the url: %1") - .arg( u.prettyURL() ), "Selected URL" ); - - return 0; -} diff --git a/kio/kfile/tests/kfdtest.cpp b/kio/kfile/tests/kfdtest.cpp deleted file mode 100644 index 867b9b4a8..000000000 --- a/kio/kfile/tests/kfdtest.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include "kfdtest.h" - -#include <tqstringlist.h> -#include <kfiledialog.h> -#include <kapplication.h> -#include <kmessagebox.h> -#include <tqtimer.h> - -KFDTest::KFDTest( const TQString& startDir, TQObject *parent, const char *name ) - : TQObject( parent, name ), - m_startDir( startDir ) -{ - TQTimer::singleShot( 1000, this, TQT_SLOT( doit() )); -} - -void KFDTest::doit() -{ - KFileDialog *dlg = new KFileDialog( m_startDir, TQString::null, 0L, - "file dialog", true ); - dlg->setMode( KFile::File); - dlg->setOperationMode( KFileDialog::Saving ); - TQStringList filter; - filter << "all/allfiles" << "text/plain"; - dlg->setMimeFilter( filter, "all/allfiles" ); - - if ( dlg->exec() == KDialog::Accepted ) - { - KMessageBox::information(0, TQString::fromLatin1("You selected the file: %1").arg( dlg->selectedURL().prettyURL() )); - } - -// tqApp->quit(); -} - -#include "kfdtest.moc" diff --git a/kio/kfile/tests/kfdtest.h b/kio/kfile/tests/kfdtest.h deleted file mode 100644 index 6c59550b8..000000000 --- a/kio/kfile/tests/kfdtest.h +++ /dev/null @@ -1,28 +0,0 @@ -/**************************************************************************** -** $Id$ -** -** Copyright (C) 2003 Carsten Pfeiffer <pfeiffer@kde.org> -** -****************************************************************************/ - -#ifndef KFDTEST_H -#define KFDTEST_H - -#include <tqobject.h> - -class KFDTest : public TQObject -{ - Q_OBJECT - -public: - KFDTest( const TQString& startDir, TQObject *parent = 0, const char *name = 0); - -public slots: - void doit(); - -private: - TQString m_startDir; -}; - - -#endif // KFDTEST_H diff --git a/kio/kfile/tests/kfiletreeviewtest.cpp b/kio/kfile/tests/kfiletreeviewtest.cpp deleted file mode 100644 index cf28557f8..000000000 --- a/kio/kfile/tests/kfiletreeviewtest.cpp +++ /dev/null @@ -1,165 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2001 Klaas Freitag <freitag@suse.de> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <tqdir.h> - -#include <kglobal.h> -#include <kiconloader.h> -#include <kmainwindow.h> -#include <kapplication.h> -#include <kurl.h> -#include <kdebug.h> -#include <kstatusbar.h> - -#include <kfiletreeview.h> -#include "kfiletreeviewtest.h" - - -#include "kfiletreeviewtest.moc" - -testFrame::testFrame():KMainWindow(0,"Test FileTreeView"), - dirOnlyMode(false) - -{ - treeView = new KFileTreeView( this ); - treeView->setDragEnabled( true ); - treeView->setAcceptDrops( true ); - treeView->setDropVisualizer( true ); - - - /* Connect to see the status bar */ - KStatusBar* sta = statusBar(); - connect( treeView, TQT_SIGNAL( onItem( const TQString& )), - sta, TQT_SLOT( message( const TQString& ))); - - connect( treeView, TQT_SIGNAL( dropped( TQWidget*, TQDropEvent*, KURL::List& )), - this, TQT_SLOT( urlsDropped( TQWidget*, TQDropEvent*, KURL::List& ))); - - connect( treeView, TQT_SIGNAL( dropped( KURL::List&, KURL& )), this, - TQT_SLOT( copyURLs( KURL::List&, KURL& ))); - - treeView->addColumn( "File" ); - treeView->addColumn( "ChildCount" ); - setCentralWidget( treeView ); - resize( 600, 400 ); - - showPath( KURL::fromPathOrURL( TQDir::homeDirPath() )); -} - -void testFrame::showPath( const KURL &url ) -{ - TQString fname = "TestBranch"; // url.fileName (); - /* try a user icon */ - KIconLoader *loader = TDEGlobal::iconLoader(); - TQPixmap pix = loader->loadIcon( "contents2", KIcon::Small ); - TQPixmap pixOpen = loader->loadIcon( "contents", KIcon::Small ); - - KFileTreeBranch *nb = treeView->addBranch( url, fname, pix ); - - if( nb ) - { - if( dirOnlyMode ) treeView->setDirOnlyMode( nb, true ); - nb->setOpenPixmap( pixOpen ); - - connect( nb, TQT_SIGNAL(populateFinished(KFileTreeViewItem*)), - this, TQT_SLOT(slotPopulateFinished(KFileTreeViewItem*))); - connect( nb, TQT_SIGNAL( directoryChildCount( KFileTreeViewItem *, int )), - this, TQT_SLOT( slotSetChildCount( KFileTreeViewItem*, int ))); - // nb->setChildRecurse(false ); - - nb->setOpen(true); - } - - -} - -void testFrame::urlsDropped( TQWidget* , TQDropEvent* , KURL::List& list ) -{ - KURL::List::ConstIterator it = list.begin(); - for ( ; it != list.end(); ++it ) { - kdDebug() << "Url dropped: " << (*it).prettyURL() << endl; - } -} - -void testFrame::copyURLs( KURL::List& list, KURL& to ) -{ - KURL::List::ConstIterator it = list.begin(); - kdDebug() << "Copy to " << to.prettyURL() << endl; - for ( ; it != list.end(); ++it ) { - kdDebug() << "Url: " << (*it).prettyURL() << endl; - } - -} - - -void testFrame::slotPopulateFinished(KFileTreeViewItem *item ) -{ - if( item ) - { -#if 0 - int cc = item->childCount(); - - kdDebug() << "setting column 2 of treeview with count " << cc << endl; - - item->setText( 1, TQString::number( cc )); -#endif - } - else - { - kdDebug() << "slotPopFinished for uninitalised item" << endl; - } -} - -void testFrame::slotSetChildCount( KFileTreeViewItem *item, int c ) -{ - if( item ) - item->setText(1, TQString::number( c )); -} - -int main(int argc, char **argv) -{ - TDEApplication a(argc, argv, "kfiletreeviewtest"); - TQString name1; - TQStringList names; - - TQString argv1; - testFrame *tf; - - tf = new testFrame(); - a.setMainWidget( tf ); - - if (argc > 1) - { - for( int i = 1; i < argc; i++ ) - { - argv1 = TQString::fromLatin1(argv[i]); - kdDebug() << "Opening " << argv1 << endl; - if( argv1 == "-d" ) - tf->setDirOnly(); - else - { - KURL u( argv1 ); - tf->showPath( u ); - } - } - } - tf->show(); - int ret = a.exec(); - return( ret ); -} diff --git a/kio/kfile/tests/kfiletreeviewtest.h b/kio/kfile/tests/kfiletreeviewtest.h deleted file mode 100644 index 4ae791ce5..000000000 --- a/kio/kfile/tests/kfiletreeviewtest.h +++ /dev/null @@ -1,42 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2001 Klaas Freitag <freitag@suse.de> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef KFILETREEVIEWTEST -#define KFILETREEVIEWTEST - -class testFrame: public KMainWindow -{ - Q_OBJECT -public: - testFrame(); - void showPath( const KURL & ); - void setDirOnly( ) { dirOnlyMode = true; } -public slots: - void slotPopulateFinished(KFileTreeViewItem *); - void slotSetChildCount( KFileTreeViewItem *item, int c ); - - void urlsDropped( TQWidget*, TQDropEvent*, KURL::List& ); - void copyURLs( KURL::List& list, KURL& to ); -private: - KFileTreeView *treeView; - bool dirOnlyMode; -}; - - -#endif diff --git a/kio/kfile/tests/kfstest.cpp b/kio/kfile/tests/kfstest.cpp deleted file mode 100644 index b0ecabcc6..000000000 --- a/kio/kfile/tests/kfstest.cpp +++ /dev/null @@ -1,183 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 1997, 1998 Richard Moore <rich@kde.org> - 1998 Stephan Kulow <coolo@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <unistd.h> -#include <stdlib.h> -#include <unistd.h> -#include <stdlib.h> -#include <sys/stat.h> -#include <tqdir.h> -#include <tqlayout.h> -#include <tqstringlist.h> -#include <tqwidget.h> - -#include <kfiledialog.h> -#include <kfileiconview.h> -#include <kmessagebox.h> -#include <kconfig.h> -#include <kapplication.h> -#include <kurl.h> -#include <kurlbar.h> -#include <kdiroperator.h> -#include <kfile.h> -#include <kdebug.h> -#include <kicondialog.h> - -#include "kfdtest.h" - -int main(int argc, char **argv) -{ - TDEApplication a(argc, argv, "kfstest"); - TQString name1; - TQStringList names; - - TQString argv1; - TQString startDir; - if (argc > 1) - argv1 = TQString::fromLatin1(argv[1]); - if ( argc > 2 ) - startDir = TQString::fromLatin1( argv[2]); - - if (argv1 == TQString::fromLatin1("diroperator")) { - KDirOperator *op = new KDirOperator(startDir, 0, "operator"); - op->setViewConfig( TDEGlobal::config(), "TestGroup" ); - op->setView(KFile::Simple); - op->show(); - a.setMainWidget(op); - a.exec(); - } - - else if (argv1 == TQString::fromLatin1("justone")) { - TQString name = KFileDialog::getOpenFileName(startDir); - tqDebug("filename=%s",name.latin1()); - } - - else if (argv1 == TQString::fromLatin1("existingURL")) { - KURL url = KFileDialog::getExistingURL(); - tqDebug("URL=%s",url.url().latin1()); - name1 = url.url(); - } - - else if (argv1 == TQString::fromLatin1("preview")) { - KURL u = KFileDialog::getImageOpenURL(); - tqDebug("filename=%s", u.url().latin1()); - } - - else if (argv1 == TQString::fromLatin1("preselect")) { - names = KFileDialog::getOpenFileNames(TQString::fromLatin1("/etc/passwd")); - TQStringList::Iterator it = names.begin(); - while ( it != names.end() ) { - tqDebug("selected file: %s", (*it).latin1()); - ++it; - } - } - - else if (argv1 == TQString::fromLatin1("dirs")) - name1 = KFileDialog::getExistingDirectory(); - - else if (argv1 == TQString::fromLatin1("heap")) { - KFileDialog *dlg = new KFileDialog( startDir, TQString::null, 0L, - "file dialog", true ); - dlg->setMode( KFile::File); - dlg->setOperationMode( KFileDialog::Saving ); - TQStringList filter; - filter << "all/allfiles" << "text/plain"; - dlg->setMimeFilter( filter, "all/allfiles" ); - KURLBar *urlBar = dlg->speedBar(); - if ( urlBar ) - { - urlBar->insertDynamicItem( KURL("ftp://ftp.kde.org"), - TQString::fromLatin1("KDE FTP Server") ); - } - - if ( dlg->exec() == KDialog::Accepted ) - name1 = dlg->selectedURL().url(); - } - - else if ( argv1 == TQString::fromLatin1("eventloop") ) - { - KFDTest *test = new KFDTest( startDir ); - return a.exec(); - } - - else if (argv1 == TQString::fromLatin1("save")) { - KURL u = KFileDialog::getSaveURL(); -// TQString(TQDir::homeDirPath() + TQString::fromLatin1("/testfile")), -// TQString::null, 0L); - name1 = u.url(); - } - - else if (argv1 == TQString::fromLatin1("icon")) { - KIconDialog dlg; - TQString icon = dlg.selectIcon(); - kdDebug() << icon << endl; - } - -// else if ( argv1 == TQString::fromLatin1("dirselect") ) { -// KURL url; -// url.setPath( "/" ); -// KURL selected = KDirSelectDialog::selectDirectory( url ); -// name1 = selected.url(); -// tqDebug("*** selected: %s", selected.url().latin1()); -// } - - else { - KFileDialog dlg(startDir, - TQString::fromLatin1("*|All Files\n" - "*.lo *.o *.la|All libtool Files"), - 0, 0, true); -// dlg.setFilter( "*.tdevelop" ); - dlg.setMode( (KFile::Mode) (KFile::Files | - KFile::Directory | - KFile::ExistingOnly | - KFile::LocalOnly) ); -// TQStringList filter; -// filter << "text/plain" << "text/html" << "image/png"; -// dlg.setMimeFilter( filter ); -// KMimeType::List types; -// types.append( KMimeType::mimeType( "text/plain" ) ); -// types.append( KMimeType::mimeType( "text/html" ) ); -// dlg.setFilterMimeType( "Filetypes:", types, types.first() ); - if ( dlg.exec() == TQDialog::Accepted ) { - KURL::List list = dlg.selectedURLs(); - KURL::List::ConstIterator it = list.begin(); - tqDebug("*** selectedURLs(): "); - while ( it != list.end() ) { - name1 = (*it).url(); - tqDebug(" -> %s", name1.latin1()); - ++it; - } - tqDebug("*** selectedFile: %s", dlg.selectedFile().latin1()); - tqDebug("*** selectedURL: %s", dlg.selectedURL().url().latin1()); - tqDebug("*** selectedFiles: "); - TQStringList l = dlg.selectedFiles(); - TQStringList::Iterator it2 = l.begin(); - while ( it2 != l.end() ) { - tqDebug(" -> %s", (*it2).latin1()); - ++it2; - } - } - } - - if (!(name1.isNull())) - KMessageBox::information(0, TQString::fromLatin1("You selected the file " ) + name1, - TQString::fromLatin1("Your Choice")); - return 0; -} diff --git a/kio/kfile/tests/kicondialogtest.cpp b/kio/kfile/tests/kicondialogtest.cpp deleted file mode 100644 index b2c56e159..000000000 --- a/kio/kfile/tests/kicondialogtest.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include <kapplication.h> -#include <kicondialog.h> - -int main( int argc, char **argv ) -{ - TDEApplication app( argc, argv, "kicondialogtest" ); - -// KIconDialog::getIcon(); - - KIconButton button; - app.setMainWidget( &button ); - button.show(); - - - return app.exec(); -} - -/* vim: et sw=4 - */ diff --git a/kio/kfile/tests/knotifytest.cpp b/kio/kfile/tests/knotifytest.cpp deleted file mode 100644 index 0493b59b4..000000000 --- a/kio/kfile/tests/knotifytest.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include <kapplication.h> -#include <knotifydialog.h> - -int main( int argc, char **argv ) -{ - TDEApplication app( argc, argv, "knotifytest" ); - KNotifyDialog *dlg = new KNotifyDialog(); - dlg->addApplicationEvents( "twin" ); - return dlg->exec(); -} diff --git a/kio/kfile/tests/kopenwithtest.cpp b/kio/kfile/tests/kopenwithtest.cpp deleted file mode 100644 index f78b1830b..000000000 --- a/kio/kfile/tests/kopenwithtest.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 2002 Dirk Mueller <mueller@kde.org> - Copyright (C) 2003 David Faure <faure@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <kapplication.h> -#include <tqwidget.h> -#include <tqstringlist.h> -#include <tqdir.h> -#include <kopenwith.h> -#include <kurl.h> -#include <kdebug.h> - -int main(int argc, char **argv) -{ - TDEApplication app(argc, argv, "kopenwithtest"); - KURL::List list; - - list += KURL("file:///tmp/testfile.txt"); - - // Test with one URL - KOpenWithDlg* dlg = new KOpenWithDlg(list, "OpenWith_Text", "OpenWith_Value", 0); - if(dlg->exec()) { - kdDebug() << "Dialog ended successfully\ntext: " << dlg->text() << endl; - } - else - kdDebug() << "Dialog was canceled." << endl; - delete dlg; - - // Test with two URLs - list += KURL("http://www.kde.org/index.html"); - dlg = new KOpenWithDlg(list, "OpenWith_Text", "OpenWith_Value", 0); - if(dlg->exec()) { - kdDebug() << "Dialog ended successfully\ntext: " << dlg->text() << endl; - } - else - kdDebug() << "Dialog was canceled." << endl; - delete dlg; - - // Test with a mimetype - TQString mimetype = "text/plain"; - dlg = new KOpenWithDlg( mimetype, "kedit", 0); - if(dlg->exec()) { - kdDebug() << "Dialog ended successfully\ntext: " << dlg->text() << endl; - } - else - kdDebug() << "Dialog was canceled." << endl; - delete dlg; - - return 0; -} - diff --git a/kio/kfile/tests/kurlrequestertest.cpp b/kio/kfile/tests/kurlrequestertest.cpp deleted file mode 100644 index 0e4851cfb..000000000 --- a/kio/kfile/tests/kurlrequestertest.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include <kapplication.h> -#include <keditlistbox.h> -#include <kurlrequester.h> -#include <kurlrequesterdlg.h> - -int main( int argc, char **argv ) -{ - TDEApplication app( argc, argv, "kurlrequestertest" ); - KURL url = KURLRequesterDlg::getURL( "ftp://ftp.kde.org" ); - tqDebug( "Selected url: %s", url.url().latin1()); - - KURLRequester *req = new KURLRequester(); - KEditListBox *el = new KEditListBox( TQString::fromLatin1("Test"), req->customEditor() ); - el->show(); - return app.exec(); -} |