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