⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 useractionlistview.cpp

📁 LINUX 下, 以 QT/KDE 写的档案管理员
💻 CPP
字号:
//// C++ Implementation: useractionlistview//// Description: ////// Author: Jonas Bähr, (C) 2006//// Copyright: See COPYING file that comes with this distribution////#include "useractionlistview.h"#include <klocale.h>#include <kiconloader.h>#include <qptrlist.h>#include <qdom.h>#include "../krusader.h"#include "../UserAction/kraction.h"#include "../UserAction/useraction.h"#define COL_TITLE	0#define COL_NAME	1///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////     UserActionListView    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////UserActionListView::UserActionListView( QWidget * parent, const char * name ) : KListView( parent, name ){   addColumn( i18n("Title") );   //addColumn( i18n("Identifier") );   setResizeMode( QListView::AllColumns );   setRootIsDecorated( true );   setSelectionMode( QListView::Extended ); // normaly select single items but one may use Ctrl or Shift to select multiple   setSorting( COL_TITLE );   update();}UserActionListView::~UserActionListView(){}QSize UserActionListView::sizeHint() const {   return QSize(200, 400);}void UserActionListView::update() {   clear();   UserAction::KrActionList list = krUserAction->actionList();   for ( KrAction* action = list.first(); action; action = list.next() )      insertAction( action );   //sort(); // this is done automaticly}void UserActionListView::update( KrAction* action ) {   UserActionListViewItem* item = findActionItem( action );   if ( item ) {      // deleting & re-inserting is _much_easyer then tracking all possible cases of category changes!      bool current = ( item == currentItem() );      bool selected = item->isSelected();      delete item;      item = insertAction( action );      if ( current )         setCurrentItem( item );      if ( selected )         setSelected( item, true );   }}UserActionListViewItem* UserActionListView::insertAction( KrAction* action ) {   if ( ! action )      return 0;   UserActionListViewItem* item;   if ( action->category().isEmpty() )      item = new UserActionListViewItem( this, action );   else {      QListViewItem* categoryItem = findCategoryItem( action->category() );      if ( ! categoryItem ) {         categoryItem = new KListViewItem( this, action->category() ); // create the new category item it not already present         categoryItem->setSelectable( false );      }      item = new UserActionListViewItem( categoryItem, action );   }   item->setAction( action );   return item;}QListViewItem* UserActionListView::findCategoryItem( const QString& category ) {   for ( QListViewItem* item = firstChild(); item; item = item->nextSibling() )      if ( item->text( COL_TITLE ) == category && item->text( COL_NAME ).isEmpty() ) // because actions must have a name, items without name haveto be categories         return item;   return 0;}UserActionListViewItem* UserActionListView::findActionItem( const KrAction* action ) {   for ( QListViewItemIterator it( this ); it.current(); ++it ) {      if ( UserActionListViewItem* item = dynamic_cast<UserActionListViewItem*>( it.current() ) ) {         if ( item->action() == action )            return item;      }   } //for   return 0;}KrAction * UserActionListView::currentAction() const {   if ( UserActionListViewItem* item = dynamic_cast<UserActionListViewItem*>( currentItem() ) )      return item->action();   else      return 0;}void UserActionListView::setCurrentAction( const KrAction* action) {   UserActionListViewItem* item = findActionItem( action );   if ( item ) {      setCurrentItem( item );//       setSelected( item, true );//       repaintItem( item );   }}void UserActionListView::setFirstActionCurrent() {  for ( QListViewItemIterator it( this ); it.current(); ++it ) {    if ( UserActionListViewItem* item = dynamic_cast<UserActionListViewItem*>( it.current() ) ) {      setCurrentItem( item );      break;    }  } //for}void UserActionListView::setCurrentItem( QListViewItem* item ) {   if ( ! item )      return;   ensureItemVisible( item );   QListView::setCurrentItem( item );}QDomDocument UserActionListView::dumpSelectedActions( QDomDocument* mergeDoc ) const {   QPtrList<QListViewItem> list = selectedItems();   QDomDocument doc;   if ( mergeDoc )      doc = *mergeDoc;   else      doc = UserAction::createEmptyDoc();   QDomElement root = doc.documentElement();   for ( QListViewItem* item = list.first(); item; item = list.next() )      if ( UserActionListViewItem* actionItem = dynamic_cast<UserActionListViewItem*>( item ) )         root.appendChild( actionItem->action()->xmlDump( doc ) );   return doc;}void UserActionListView::removeSelectedActions() {   QPtrList<QListViewItem> list = selectedItems();   for ( QListViewItem* item = list.first(); item; item = list.next() )      if ( UserActionListViewItem* actionItem = dynamic_cast<UserActionListViewItem*>( item ) ) {         delete actionItem->action(); // remove the action itself         delete actionItem; // remove the action from the list      } // if}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////     UserActionListViewItem    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////UserActionListViewItem::UserActionListViewItem( QListView* view, KrAction* action ) : KListViewItem( view ){   setAction( action );}UserActionListViewItem::UserActionListViewItem( QListViewItem* item, KrAction * action ) : KListViewItem( item ){   setAction( action );}UserActionListViewItem::~UserActionListViewItem() {/*   // remove category-item if the last member ofthiscategory disappears   if ( QListViewItem* item = dynamic_cast<QListViewItem*>( parent() ) ) {      if ( item->childCount() <= 1 )         item->deleteLater(); // not possible since not inherited from QObject   }*/}void UserActionListViewItem::setAction( KrAction * action ) {   if ( ! action )      return;   _action = action;   update();}KrAction * UserActionListViewItem::action() const {   return _action;}void UserActionListViewItem::update() {   if ( ! _action )      return;   if ( ! _action->icon().isEmpty() )      setPixmap( COL_TITLE, KGlobal::iconLoader()->loadIcon( _action->icon(), KIcon::Small ) );   setText( COL_TITLE, _action->text() );   setText( COL_NAME, _action->name() );}int UserActionListViewItem::compare( QListViewItem* i, int col, bool ascending ) const {// FIXME some how this only produces bullshit :-///   if ( i->text( COL_NAME ).isEmpty() ) { // categories only have titles//      //kdDebug() << "this->title: " << text(COL_TITLE) << " |=|   i->title: " << i->text(COL_TITLE)  << endl;//       return ( ascending ? -1 : 1 ); // <0 means this is smaller then i//    }//    else      return QListViewItem::compare( i, col, ascending );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -