📄 krdetailedview.cpp
字号:
int cl = -1; if ( mode & KrViewProperties::Name ) cl = COLUMN( Name ); else if ( mode & KrViewProperties::Ext ) cl = COLUMN( Extention ); else if ( mode & KrViewProperties::Size ) cl = COLUMN( Size ); else if ( mode & KrViewProperties::Type ) cl = COLUMN( Mime ); else if ( mode & KrViewProperties::Modified ) cl = COLUMN( DateTime ); else if ( mode & KrViewProperties::Permissions ) cl = COLUMN( Permissions ); else if ( mode & KrViewProperties::KrPermissions ) cl = COLUMN( KrPermissions ); else if ( mode & KrViewProperties::Owner ) cl = COLUMN( Owner ); else if ( mode & KrViewProperties::Group ) cl = COLUMN( Group ); setSorting( cl, ascending ); KListView::sort();}void KrDetailedView::slotClicked( QListViewItem *item ) { if ( !item ) return ; if ( !modifierPressed ) { if ( singleClicked && !renameTimer.isActive() ) { KConfig * config = KGlobal::config(); config->setGroup( "KDE" ); int doubleClickInterval = config->readNumEntry( "DoubleClickInterval", 400 ); int msecsFromLastClick = clickTime.msecsTo( QTime::currentTime() ); if ( msecsFromLastClick > doubleClickInterval && msecsFromLastClick < 5 * doubleClickInterval ) { singleClicked = false; renameTimer.start( doubleClickInterval, true ); return ; } } CANCEL_TWO_CLICK_RENAME; singleClicked = true; clickTime = QTime::currentTime(); clickedItem = item; }}void KrDetailedView::slotDoubleClicked( QListViewItem *item ) { CANCEL_TWO_CLICK_RENAME; if ( !item ) return ; QString tmp = dynamic_cast<KrViewItem*>( item ) ->name(); op()->emitExecuted(tmp);}void KrDetailedView::prepareForActive() { KrView::prepareForActive(); setFocus(); slotItemDescription( currentItem() );}void KrDetailedView::prepareForPassive() { KrView::prepareForPassive(); CANCEL_TWO_CLICK_RENAME; if ( renameLineEdit() ->isVisible() ) renameLineEdit() ->clearFocus(); KConfigGroupSaver grpSvr( _config, "Look&Feel" ); if ( _config->readBoolEntry( "New Style Quicksearch", _NewStyleQuicksearch ) ) { if ( MAIN_VIEW ) { if ( ACTIVE_PANEL ) { if ( ACTIVE_PANEL->quickSearch ) { if ( ACTIVE_PANEL->quickSearch->isShown() ) { stopQuickSearch( 0 ); } } } } }}void KrDetailedView::slotItemDescription( QListViewItem * item ) { KrViewItem * it = static_cast<KrDetailedViewItem*>( item ); if ( !it ) return ; QString desc = it->description(); op()->emitItemDescription(desc);}void KrDetailedView::handleQuickSearchEvent( QKeyEvent * e ) { switch ( e->key() ) { case Key_Insert: { QKeyEvent ev = QKeyEvent( QKeyEvent::KeyPress, Key_Space, 0, 0 ); KListView::keyPressEvent( & ev ); ev = QKeyEvent( QKeyEvent::KeyPress, Key_Down, 0, 0 ); keyPressEvent( & ev ); break; } case Key_Home: { QListView::setCurrentItem( firstChild() ); QKeyEvent ev = QKeyEvent( QKeyEvent::KeyPress, Key_Down, 0, 0 ); keyPressEvent( & ev ); break; } case Key_End: { QListView::setCurrentItem( firstChild() ); QKeyEvent ev = QKeyEvent( QKeyEvent::KeyPress, Key_Up, 0, 0 ); keyPressEvent( & ev ); break; } }}void KrDetailedView::slotCurrentChanged( QListViewItem * item ) { CANCEL_TWO_CLICK_RENAME; if ( !item ) return ; _nameToMakeCurrent = static_cast<KrDetailedViewItem*>( item ) ->name();}void KrDetailedView::contentsMousePressEvent( QMouseEvent * e ) { bool callDefaultHandler = true, processEvent = true, selectionChanged = false; pressedItem = 0; QListViewItem * oldCurrent = currentItem(); QListViewItem *newCurrent = itemAt( contentsToViewport( e->pos() ) ); if (e->button() == RightButton) { if (KrSelectionMode::getSelectionHandler()->rightButtonSelects() || (((e->state() & ShiftButton) || (e->state() & ControlButton))) && KrSelectionMode::getSelectionHandler()->shiftCtrlRightButtonSelects()) { if (KrSelectionMode::getSelectionHandler()->rightButtonPreservesSelection() && !(e->state() & ShiftButton) && !(e->state() & ControlButton) && !(e->state() & AltButton)) { if (newCurrent) { if (KrSelectionMode::getSelectionHandler()->showContextMenu() >= 0) { swushSelects = !newCurrent->isSelected(); lastSwushPosition = newCurrent; } newCurrent->setSelected(!newCurrent->isSelected()); newCurrent->repaint(); selectionChanged = true; } callDefaultHandler = false; processEvent = false; e->accept(); } if( !KrSelectionMode::getSelectionHandler()->rightButtonPreservesSelection() && KrSelectionMode::getSelectionHandler()->showContextMenu() >= 0) { if( (e->state() & ControlButton) && !(e->state() & AltButton) ) { if( newCurrent ) { newCurrent->setSelected(!newCurrent->isSelected()); newCurrent->repaint(); selectionChanged = true; callDefaultHandler = false; e->accept(); } } else if( !(e->state() & ControlButton) && !(e->state() & AltButton) ) { clearSelection(); if( newCurrent ) { newCurrent->setSelected( true ); newCurrent->repaint(); } selectionChanged = true; callDefaultHandler = false; e->accept(); } } } else { callDefaultHandler = false; processEvent = false; e->accept(); } } if (e->button() == LeftButton) { dragStartPos = e->pos(); if (KrSelectionMode::getSelectionHandler()->leftButtonSelects() || (((e->state() & ShiftButton) || (e->state() & ControlButton))) && KrSelectionMode::getSelectionHandler()->shiftCtrlLeftButtonSelects()) { if (KrSelectionMode::getSelectionHandler()->leftButtonPreservesSelection() && !(e->state() & ShiftButton) && !(e->state() & ControlButton) && !(e->state() & AltButton)) { if (newCurrent) { newCurrent->setSelected(!newCurrent->isSelected()); newCurrent->repaint(); selectionChanged = true; } callDefaultHandler = false; processEvent = false; e->accept(); } } else { callDefaultHandler = false; processEvent = false; e->accept(); } } modifierPressed = false; if ( (e->state() & ShiftButton) || (e->state() & ControlButton) || (e->state() & AltButton) ) { CANCEL_TWO_CLICK_RENAME; modifierPressed = true; } // stop quick search in case a mouse click occured KConfigGroupSaver grpSvr( _config, "Look&Feel" ); if ( _config->readBoolEntry( "New Style Quicksearch", _NewStyleQuicksearch ) ) { if ( MAIN_VIEW ) { if ( ACTIVE_PANEL ) { if ( ACTIVE_PANEL->quickSearch ) { if ( ACTIVE_PANEL->quickSearch->isShown() ) { stopQuickSearch( 0 ); } } } } } if ( !_focused ) op()->emitNeedFocus(); if (processEvent && ( (e->state() & ShiftButton) || (e->state() & ControlButton) || (e->state() & AltButton) ) && !KrSelectionMode::getSelectionHandler()->useQTSelection()){ if ( oldCurrent && newCurrent && oldCurrent != newCurrent && e->state() & ShiftButton ) { int oldPos = oldCurrent->itemPos(); int newPos = newCurrent->itemPos(); QListViewItem *top = 0, *bottom = 0; if ( oldPos > newPos ) { top = newCurrent; bottom = oldCurrent; } else { top = oldCurrent; bottom = newCurrent; } QListViewItemIterator it( top ); for ( ; it.current(); ++it ) { if ( !it.current() ->isSelected() ) { it.current() ->setSelected( true ); selectionChanged = true; } if ( it.current() == bottom ) break; } QListView::setCurrentItem( newCurrent ); callDefaultHandler = false; } } if (selectionChanged) updateView(); // don't call triggerUpdate directly! // QListViewItem * i = itemAt( contentsToViewport( e->pos() ) ); if (callDefaultHandler) { dragStartPos = QPoint( -1, -1 ); QString name = QString::null; // will the file be deleted by the mouse event? if( newCurrent ) // save the name of the file name = static_cast<KrDetailedViewItem*>( newCurrent ) ->name(); KListView::contentsMousePressEvent( e ); if( name.isEmpty() || _dict.find( name ) == 0 ) // is the file still valid? newCurrent = 0; // if not, don't do any crash... } else { // emitting the missing signals from QListView::contentsMousePressEvent(); // the right click signal is not emitted as it is used for selection QPoint vp = contentsToViewport( e->pos() ); if( !newCurrent || ( newCurrent && newCurrent->isEnabled() ) ) { emit pressed( pressedItem = newCurrent ); emit pressed( newCurrent, viewport()->mapToGlobal( vp ), 0 ); } emit mouseButtonPressed( e->button(), newCurrent, viewport()->mapToGlobal( vp ), 0 ); } // if (i != 0) // comment in, if click sould NOT select // setSelected(i, FALSE); if (newCurrent) QListView::setCurrentItem(newCurrent); if ( ACTIVE_PANEL->quickSearch->isShown() ) { ACTIVE_PANEL->quickSearch->hide(); ACTIVE_PANEL->quickSearch->clear(); krDirUp->setEnabled( true ); } if ( OTHER_PANEL->quickSearch->isShown() ) { OTHER_PANEL->quickSearch->hide(); OTHER_PANEL->quickSearch->clear(); krDirUp->setEnabled( true ); }}void KrDetailedView::contentsMouseReleaseEvent( QMouseEvent * e ) { if (e->button() == RightButton) contextMenuTimer.stop(); KListView::contentsMouseReleaseEvent( e ); if( pressedItem ) { QPoint vp = contentsToViewport( e->pos() ); QListViewItem *newCurrent = itemAt( vp ); if( pressedItem == newCurrent ) { // emitting the missing signals from QListView::contentsMouseReleaseEvent(); // the right click signal is not emitted as it is used for selection if( !newCurrent || ( newCurrent && newCurrent->isEnabled() ) ) { emit clicked( newCurrent ); emit clicked( newCurrent, viewport()->mapToGlobal( vp ), 0 ); } emit mouseButtonClicked( e->button(), newCurrent, viewport()->mapToGlobal( vp ), 0 ); } pressedItem = 0; }}void KrDetailedView::contentsMouseMoveEvent ( QMouseEvent * e ) { if ( ( singleClicked || renameTimer.isActive() ) && itemAt( contentsToViewport( e->pos() ) ) != clickedItem ) CANCEL_TWO_CLICK_RENAME; if ( dragStartPos != QPoint( -1, -1 ) && e->state() & LeftButton && ( dragStartPos - e->pos() ).manhattanLength() > QApplication::startDragDistance() ) startDrag(); if (KrSelectionMode::getSelectionHandler()->rightButtonPreservesSelection() && KrSelectionMode::getSelectionHandler()->rightButtonSelects() && KrSelectionMode::getSelectionHandler()->showContextMenu() >= 0 && e->state() == Qt::RightButton) { QListViewItem *newItem = itemAt( contentsToViewport( e->pos() ) ); e->accept(); if (newItem != lastSwushPosition && newItem) { // is the new item above or below the previous one? QListViewItem * above = newItem; QListViewItem * below = newItem; for (;(above || below) && above != lastSwushPosition && below != lastSwushPosition;) { if (above) above = above->itemAbove(); if (below) below = below->itemBelow(); } if (above && (above == lastSwushPosition)) { for (; above != newItem; above = above->itemBelow()) above->setSelected(swushSelects); newItem->setSelected(swushSelects); lastSwushPosition = newItem; updateView(); } else if (below && (below == lastSwushPosition)) { for (; below != newItem; below = below->itemAbove()) below->setSelected(swushSelects); newItem->setSelected(swushSelects); lastSwushPosition = newItem; updateView(); } contextMenuTimer.stop(); } // emitting the missing signals from QListView::contentsMouseMoveEvent(); if( newItem ) emit onItem( newItem ); else emit onViewport(); } else KListView::contentsMouseMoveEvent( e );}void KrDetailedView::contentsWheelEvent( QWheelEvent * e ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -