kcombiview.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <assert.h>
00024
00025 #include "kfileitem.h"
00026 #include "kcombiview.h"
00027 #include "kfileiconview.h"
00028 #include "kfiledetailview.h"
00029 #include "config-kfile.h"
00030
00031 #include <qpainter.h>
00032 #include <qlistbox.h>
00033
00034 #include <qdir.h>
00035
00036 #include <kapplication.h>
00037 #include <kconfig.h>
00038 #include <kdebug.h>
00039 #include <kglobal.h>
00040
00041 #include <qvaluelist.h>
00042
00043 KCombiView::KCombiView( QWidget *parent, const char *name)
00044 : QSplitter( parent, name),
00045 KFileView(),
00046 right(0),
00047 m_lastViewForNextItem(0),
00048 m_lastViewForPrevItem(0)
00049 {
00050 left = new KFileIconView( this, "left" );
00051 left->setGridX( 160 );
00052 left->KFileView::setViewMode( Directories );
00053 left->setArrangement( QIconView::LeftToRight );
00054 left->setParentView( this );
00055
00056 connect( sig, SIGNAL( sortingChanged( QDir::SortSpec ) ),
00057 SLOT( slotSortingChanged( QDir::SortSpec ) ));
00058 }
00059
00060 KCombiView::~KCombiView()
00061 {
00062 delete right;
00063 }
00064
00065 void KCombiView::setRight(KFileView *view)
00066 {
00067 delete right;
00068 right = view;
00069 right->KFileView::setViewMode( Files );
00070 setViewName( right->viewName() );
00071
00072 QValueList<int> lst;
00073 lst << left->gridX() + 2 * left->spacing();
00074 setSizes( lst );
00075 setResizeMode( left, QSplitter::KeepSize );
00076
00077 right->setParentView( this );
00078 }
00079
00080 void KCombiView::insertItem( KFileItem *item )
00081 {
00082 KFileView::insertItem( item );
00083
00084 if ( item->isDir() ) {
00085 left->updateNumbers( item );
00086 left->insertItem( item );
00087 }
00088 else {
00089 right->updateNumbers( item );
00090 right->insertItem( item );
00091 }
00092 }
00093
00094 void KCombiView::setSorting( QDir::SortSpec sort )
00095 {
00096 if ( !right )
00097 kdFatal() << "You need to call setRight( someview ) before!" << endl;
00098 right->setSorting( sort );
00099 left->setSorting( sort );
00100
00101 KFileView::setSorting( right->sorting() );
00102 }
00103
00104 void KCombiView::clearView()
00105 {
00106 left->clearView();
00107 if ( right )
00108 right->clearView();
00109 }
00110
00111 void KCombiView::updateView( bool b )
00112 {
00113 left->updateView( b );
00114 if ( right )
00115 right->updateView( b );
00116 }
00117
00118 void KCombiView::updateView( const KFileItem *i )
00119 {
00120 left->updateView( i );
00121 if ( right )
00122 right->updateView( i );
00123 }
00124
00125 void KCombiView::removeItem( const KFileItem *i )
00126 {
00127 left->removeItem( i );
00128 if ( right )
00129 right->removeItem( i );
00130 KFileView::removeItem( i );
00131 }
00132
00133 void KCombiView::listingCompleted()
00134 {
00135 left->listingCompleted();
00136 if ( right )
00137 right->listingCompleted();
00138 }
00139
00140 void KCombiView::clear()
00141 {
00142 KFileView::clear();
00143 left->KFileView::clear();
00144 if ( right )
00145 right->clear();
00146 }
00147
00148 void KCombiView::clearSelection()
00149 {
00150 left->clearSelection();
00151 if ( right )
00152 right->clearSelection();
00153 }
00154
00155 void KCombiView::selectAll()
00156 {
00157 left->selectAll();
00158 if ( right )
00159 right->selectAll();
00160 }
00161
00162 void KCombiView::invertSelection()
00163 {
00164 left->invertSelection();
00165 if ( right )
00166 right->invertSelection();
00167 }
00168
00169 bool KCombiView::isSelected( const KFileItem *item ) const
00170 {
00171 assert( right );
00172 return (right->isSelected( item ) || left->isSelected( item ));
00173 }
00174
00175 void KCombiView::setSelectionMode( KFile::SelectionMode sm )
00176 {
00177
00178
00179
00180 if ( !right )
00181 kdFatal() << "You need to call setRight( someview ) before!" << endl;
00182 right->setSelectionMode( sm );
00183 }
00184
00185 void KCombiView::setSelected( const KFileItem *item, bool enable )
00186 {
00187 left->setSelected( item, enable );
00188 if ( right )
00189 right->setSelected( item, enable );
00190 }
00191
00192 void KCombiView::setCurrentItem( const KFileItem *item )
00193 {
00194 left->setCurrentItem( item );
00195 if ( right )
00196 right->setCurrentItem( item );
00197 }
00198
00199 KFileItem * KCombiView::currentFileItem() const
00200 {
00201
00202
00203
00204 if ( !right )
00205 return left->currentFileItem();
00206
00207 KFileView *preferredView = focusView( right );
00208 KFileItem *item = preferredView->currentFileItem();
00209 if ( !item && preferredView != left )
00210 item = left->currentFileItem();
00211
00212 return item;
00213 }
00214
00215 void KCombiView::ensureItemVisible(const KFileItem *item)
00216 {
00217 left->ensureItemVisible( item );
00218 if ( right )
00219 right->ensureItemVisible( item );
00220 }
00221
00222 KFileItem * KCombiView::firstFileItem() const
00223 {
00224 if ( !right )
00225 return left->firstFileItem();
00226
00227 KFileView *preferredView = focusView( left );
00228 KFileView *otherView = (preferredView == left) ? right : left;
00229 KFileItem *item = preferredView->firstFileItem();
00230 if ( !item )
00231 item = otherView->firstFileItem();
00232
00233 return item;
00234 }
00235
00236 KFileItem * KCombiView::nextItem( const KFileItem *fileItem ) const
00237 {
00238 if ( !right )
00239 return left->nextItem( fileItem );
00240
00241 KFileView *preferredView = focusView( left );
00242 KFileView *otherView = (preferredView == left) ? right : left;
00243 KFileItem *item = preferredView->nextItem( fileItem );
00244
00245 if ( item )
00246 m_lastViewForNextItem = preferredView;
00247 else {
00248
00249
00250 if ( m_lastViewForNextItem != otherView ) {
00251 m_lastViewForNextItem = otherView;
00252 return otherView->firstFileItem();
00253 }
00254
00255 item = otherView->nextItem( fileItem );
00256 m_lastViewForNextItem = otherView;
00257 }
00258
00259 return item;
00260 }
00261
00262 KFileItem * KCombiView::prevItem( const KFileItem *fileItem ) const
00263 {
00264 if ( !right )
00265 return left->nextItem( fileItem );
00266
00267 KFileView *preferredView = focusView( left );
00268 KFileView *otherView = (preferredView == left) ? right : left;
00269 KFileItem *item = preferredView->prevItem( fileItem );
00270 if ( item )
00271 m_lastViewForPrevItem = preferredView;
00272
00273 else {
00274
00275
00276 if ( m_lastViewForPrevItem != otherView ) {
00277 fileItem = otherView->firstFileItem();
00278 while ( otherView->nextItem( fileItem ) )
00279 fileItem = otherView->nextItem( fileItem );
00280 }
00281
00282 item = otherView->prevItem( fileItem );
00283 m_lastViewForPrevItem = otherView;
00284 }
00285
00286 return item;
00287 }
00288
00289 void KCombiView::slotSortingChanged( QDir::SortSpec sorting )
00290 {
00291 KFileView::setSorting( sorting );
00292 }
00293
00294 KFileView *KCombiView::focusView( KFileView *preferred ) const
00295 {
00296 QWidget *w = focusWidget();
00297 KFileView *other = (right == preferred) ? left : right;
00298 return (preferred && w == preferred->widget()) ? preferred : other;
00299 }
00300
00301 void KCombiView::readConfig( KConfig *config, const QString& group )
00302 {
00303 left->readConfig( config, group );
00304 if ( right )
00305 right->readConfig( config, group );
00306 }
00307
00308 void KCombiView::writeConfig( KConfig *config, const QString& group )
00309 {
00310 left->writeConfig( config, group );
00311 if ( right )
00312 right->writeConfig( config, group );
00313 }
00314
00315 KActionCollection * KCombiView::actionCollection() const
00316 {
00317 return focusView( right )->actionCollection();
00318 }
00319
00320 void KCombiView::virtual_hook( int id, void* data )
00321 { KFileView::virtual_hook( id, data ); }
00322
00323
00324 #include "kcombiview.moc"
00325
This file is part of the documentation for kdelibs Version 3.1.4.