kcombiview.cpp00001
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 <qevent.h>
00032
00033 #include <qdir.h>
00034
00035 #include <kapplication.h>
00036 #include <kconfig.h>
00037 #include <kdebug.h>
00038 #include <kglobal.h>
00039
00040 #include <qvaluelist.h>
00041
00042 KCombiView::KCombiView( QWidget *parent, const char *name)
00043 : QSplitter( parent, name),
00044 KFileView(),
00045 right(0),
00046 m_lastViewForNextItem(0),
00047 m_lastViewForPrevItem(0)
00048 {
00049 left = new KFileIconView( this, "left" );
00050 left->setAcceptDrops(false);
00051 left->viewport()->setAcceptDrops(false);
00052 left->setGridX( 160 );
00053 left->KFileView::setViewMode( Directories );
00054 left->setArrangement( QIconView::LeftToRight );
00055 left->setParentView( this );
00056 left->setAcceptDrops(false);
00057 left->installEventFilter( this );
00058
00059 connect( sig, SIGNAL( sortingChanged( QDir::SortSpec ) ),
00060 SLOT( slotSortingChanged( QDir::SortSpec ) ));
00061 }
00062
00063 KCombiView::~KCombiView()
00064 {
00065 delete right;
00066 }
00067
00068 void KCombiView::setRight(KFileView *view)
00069 {
00070 delete right;
00071 right = view;
00072 right->KFileView::setViewMode( Files );
00073 setViewName( right->viewName() );
00074
00075 QValueList<int> lst;
00076 lst << left->gridX() + 2 * left->spacing();
00077 setSizes( lst );
00078 setResizeMode( left, QSplitter::KeepSize );
00079
00080 right->setParentView( this );
00081 right->widget()->setAcceptDrops(acceptDrops());
00082 right->setDropOptions(dropOptions());
00083 right->widget()->installEventFilter( this );
00084 }
00085
00086
00087 void KCombiView::insertItem( KFileItem *item )
00088 {
00089 KFileView::insertItem( item );
00090
00091 if ( item->isDir() ) {
00092 left->updateNumbers( item );
00093 left->insertItem( item );
00094 }
00095 else {
00096 right->updateNumbers( item );
00097 right->insertItem( item );
00098 }
00099 }
00100
00101 void KCombiView::setSorting( QDir::SortSpec sort )
00102 {
00103 if ( !right )
00104 kdFatal() << "You need to call setRight( someview ) before!" << endl;
00105 right->setSorting( sort );
00106 left->setSorting( sort );
00107
00108 KFileView::setSorting( right->sorting() );
00109 }
00110
00111 void KCombiView::clearView()
00112 {
00113 left->clearView();
00114 if ( right )
00115 right->clearView();
00116 }
00117
00118 void KCombiView::updateView( bool b )
00119 {
00120 left->updateView( b );
00121 if ( right )
00122 right->updateView( b );
00123 }
00124
00125 void KCombiView::updateView( const KFileItem *i )
00126 {
00127 left->updateView( i );
00128 if ( right )
00129 right->updateView( i );
00130 }
00131
00132 void KCombiView::removeItem( const KFileItem *i )
00133 {
00134 left->removeItem( i );
00135 if ( right )
00136 right->removeItem( i );
00137 KFileView::removeItem( i );
00138 }
00139
00140 void KCombiView::listingCompleted()
00141 {
00142 left->listingCompleted();
00143 if ( right )
00144 right->listingCompleted();
00145 }
00146
00147 void KCombiView::clear()
00148 {
00149 KFileView::clear();
00150 left->KFileView::clear();
00151 if ( right )
00152 right->clear();
00153 }
00154
00155 void KCombiView::clearSelection()
00156 {
00157 left->clearSelection();
00158 if ( right )
00159 right->clearSelection();
00160 }
00161
00162 void KCombiView::selectAll()
00163 {
00164 left->selectAll();
00165 if ( right )
00166 right->selectAll();
00167 }
00168
00169 void KCombiView::invertSelection()
00170 {
00171 left->invertSelection();
00172 if ( right )
00173 right->invertSelection();
00174 }
00175
00176 bool KCombiView::isSelected( const KFileItem *item ) const
00177 {
00178 assert( right );
00179 return (right->isSelected( item ) || left->isSelected( item ));
00180 }
00181
00182 void KCombiView::setSelectionMode( KFile::SelectionMode sm )
00183 {
00184
00185
00186
00187 if ( !right )
00188 kdFatal() << "You need to call setRight( someview ) before!" << endl;
00189 right->setSelectionMode( sm );
00190 }
00191
00192 void KCombiView::setSelected( const KFileItem *item, bool enable )
00193 {
00194 left->setSelected( item, enable );
00195 if ( right )
00196 right->setSelected( item, enable );
00197 }
00198
00199 void KCombiView::setCurrentItem( const KFileItem *item )
00200 {
00201 left->setCurrentItem( item );
00202 if ( right )
00203 right->setCurrentItem( item );
00204 }
00205
00206 KFileItem * KCombiView::currentFileItem() const
00207 {
00208
00209
00210
00211 if ( !right )
00212 return left->currentFileItem();
00213
00214 KFileView *preferredView = focusView( right );
00215 KFileItem *item = preferredView->currentFileItem();
00216 if ( !item && preferredView != left )
00217 item = left->currentFileItem();
00218
00219 return item;
00220 }
00221
00222 void KCombiView::ensureItemVisible(const KFileItem *item)
00223 {
00224 left->ensureItemVisible( item );
00225 if ( right )
00226 right->ensureItemVisible( item );
00227 }
00228
00229 KFileItem * KCombiView::firstFileItem() const
00230 {
00231 if ( !right )
00232 return left->firstFileItem();
00233
00234 KFileView *preferredView = focusView( left );
00235 KFileView *otherView = (preferredView == left) ? right : left;
00236 KFileItem *item = preferredView->firstFileItem();
00237 if ( !item )
00238 item = otherView->firstFileItem();
00239
00240 return item;
00241 }
00242
00243 KFileItem * KCombiView::nextItem( const KFileItem *fileItem ) const
00244 {
00245 if ( !right )
00246 return left->nextItem( fileItem );
00247
00248 KFileView *preferredView = focusView( left );
00249 KFileView *otherView = (preferredView == left) ? right : left;
00250 KFileItem *item = preferredView->nextItem( fileItem );
00251
00252 if ( item )
00253 m_lastViewForNextItem = preferredView;
00254 else {
00255
00256
00257 if ( m_lastViewForNextItem != otherView ) {
00258 m_lastViewForNextItem = otherView;
00259 return otherView->firstFileItem();
00260 }
00261
00262 item = otherView->nextItem( fileItem );
00263 m_lastViewForNextItem = otherView;
00264 }
00265
00266 return item;
00267 }
00268
00269 KFileItem * KCombiView::prevItem( const KFileItem *fileItem ) const
00270 {
00271 if ( !right )
00272 return left->nextItem( fileItem );
00273
00274 KFileView *preferredView = focusView( left );
00275 KFileView *otherView = (preferredView == left) ? right : left;
00276 KFileItem *item = preferredView->prevItem( fileItem );
00277 if ( item )
00278 m_lastViewForPrevItem = preferredView;
00279
00280 else {
00281
00282
00283 if ( m_lastViewForPrevItem != otherView ) {
00284 fileItem = otherView->firstFileItem();
00285 while ( otherView->nextItem( fileItem ) )
00286 fileItem = otherView->nextItem( fileItem );
00287 }
00288
00289 item = otherView->prevItem( fileItem );
00290 m_lastViewForPrevItem = otherView;
00291 }
00292
00293 return item;
00294 }
00295
00296 void KCombiView::slotSortingChanged( QDir::SortSpec sorting )
00297 {
00298 KFileView::setSorting( sorting );
00299 }
00300
00301 KFileView *KCombiView::focusView( KFileView *preferred ) const
00302 {
00303 QWidget *w = focusWidget();
00304 KFileView *other = (right == preferred) ? left : right;
00305 return (preferred && w == preferred->widget()) ? preferred : other;
00306 }
00307
00308 void KCombiView::readConfig( KConfig *config, const QString& group )
00309 {
00310 left->readConfig( config, group );
00311 if ( right )
00312 right->readConfig( config, group );
00313 }
00314
00315 void KCombiView::writeConfig( KConfig *config, const QString& group )
00316 {
00317 left->writeConfig( config, group );
00318 if ( right )
00319 right->writeConfig( config, group );
00320 }
00321
00322 KActionCollection * KCombiView::actionCollection() const
00323 {
00324 return focusView( right )->actionCollection();
00325 }
00326
00327 void KCombiView::setAcceptDrops(bool b)
00328 {
00329 left->setAcceptDrops(b);
00330 if (right)
00331 right->widget()->setAcceptDrops(b);
00332 QSplitter::setAcceptDrops(b);
00333 }
00334
00335 void KCombiView::setDropOptions_impl(int options)
00336 {
00337 KFileView::setDropOptions_impl(options);
00338 left->setDropOptions(options);
00339 if (right)
00340 right->setDropOptions(options);
00341 }
00342
00343 void KCombiView::virtual_hook( int id, void* data )
00344 {
00345 switch(id) {
00346 case VIRTUAL_SET_DROP_OPTIONS:
00347 setDropOptions_impl(*(int *)data);
00348 break;
00349 default:
00350 KFileView::virtual_hook( id, data );
00351 }
00352 }
00353
00354 bool KCombiView::eventFilter( QObject *o, QEvent *e )
00355 {
00356 int type = e->type();
00357
00358
00359 if ( type == QEvent::FocusIn )
00360 {
00361 if ( o == left )
00362 right->clearSelection();
00363 else if ( o == right->widget() )
00364 left->clearSelection();
00365 }
00366
00367 return QSplitter::eventFilter( o, e );
00368 }
00369
00370 #include "kcombiview.moc"
00371
|