/*************************************************************************** * Copyright (C) 2006 by Marco Martin * * notmart@gmail.com * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the Lesser GNU General Public * * License as published by the Free Software Foundation; * * either version 2 of the License, or (at your option) * * any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef TASTYLISTVIEW_H #define TASTYLISTVIEW_H #include #include #include #include #include #include #include #include #include class TastyListView; //the space reserved for the action icon (bookmark, remove bookmark etc /** @author Marco Martin */ class TastyListViewToolTip: public TQToolTip { public: TastyListViewToolTip( TQWidget *parent, TastyListView *tListView ); void maybeTip( const TQPoint &pos ); private: TastyListView *listView; }; /** @author Marco Martin */ class TastyListView : public TDEListView { Q_OBJECT private: bool highLightGroups; TQTimer *onItemTimer; TQListViewItem *underCursorItem; TQListViewItem *openItem; bool mouseDown; bool easyOpen; int actionIconSize; int actionIconSpace; TastyListViewToolTip *listItemTip; public: TastyListView( TQWidget * parent = 0, const char * name = 0); ~TastyListView(); bool getHighLightGroups(){ return highLightGroups;} void setHighLightGroups(bool highLight){highLightGroups = highLight;} bool getEasyOpen(){ return easyOpen;} void setEasyOpen(bool easy){easyOpen = easy;} void startDrag(); void setActionIconSize(int newSize){ actionIconSize = newSize; actionIconSpace = newSize*2; } int getActionIconSize(){return actionIconSize;} int getActionIconSpace(){return actionIconSpace;} TQListViewItem * getOpenItem(){ return openItem;} void setOpenItem( TQListViewItem * listItem ){openItem = listItem;} public slots: virtual void clear(){openItem = underCursorItem = NULL; TDEListView::clear();} protected: virtual void leaveEvent( TQEvent * e ); virtual void contentsMouseMoveEvent( TQMouseEvent * e ); virtual void contentsMouseReleaseEvent( TQMouseEvent * e ); virtual void keyPressEvent( TQKeyEvent * e ); private slots: void slotOnItem( TQListViewItem * listItem ); void slotTimeout(); signals: //Using own signal instead of clicked() in order to avoid launching two times the same app :-) void activated(TQListViewItem *, const TQPoint &, int ); }; /** @author Marco Martin */ class TastyListViewItem : public TDEListViewItem { //Q_OBJECT friend class TastyListView; public: typedef enum { Service, ServiceGroup, DesktopFile, Empty }Type; typedef enum { AddBookMark, RemoveBookMark, OpenGroup, Expand, Collapse, NoAction }ActionType; TastyListViewItem( TastyListView * parent ); TastyListViewItem( TastyListViewItem * parent ); TastyListViewItem( TastyListView * parent, TastyListViewItem * after, TQString label1 ); TastyListViewItem( TastyListViewItem * parent, TastyListViewItem * after, TQString label1 ); TastyListViewItem( TastyListView * parent, TastyListViewItem * after ); TastyListViewItem( TastyListViewItem * parent, TastyListViewItem * after ); TastyListViewItem( TastyListView * parent, TQString label1 ); TastyListViewItem( TastyListViewItem * parent, TQString label1 ); ~TastyListViewItem(); //TQString text(int column) const {return cellText;} TQString getCellText(int column) const {return cellText;} //TastyListViewItem *parent(); void paintCell ( TQPainter * p, const TQColorGroup & cg, int column, int width, int align ); Type getType(){return itemType;} void setType( Type newItemType ){itemType = newItemType;} ActionType getActionType(){return actionType;} void setActionType( ActionType newActionType ){ actionType = newActionType;loadPixmap();} void loadPixmap(); void setPath( TQString newPath){ path = newPath;} TQString getPath(){return path;} void setDeskopEntryPath( TQString newPath){ desktopEntryPath = newPath;} TQString getDeskopEntryPath(){return desktopEntryPath;} TQString getSubText(){return subText;} bool xOnDecoration( int x ) { TQListView *lv = listView(); if( !lv ) return false; return !( x > lv->header()->sectionPos( lv->header()->mapToIndex( 0 ) ) + lv->treeStepSize() * ( depth() + ( lv->rootIsDecorated() ? 1 : 0) ) + lv->itemMargin() || x < lv->header()->sectionPos( lv->header()->mapToIndex( 0 ) ) );} void setSubText(TQString text) //FIXME: add the column {if(cellText.isEmpty())cellText=TDEListViewItem::text(0); TDEListViewItem::setText(0,cellText+text);subText = TQString(text);} void setText(int column, const TQString & text ) {TDEListViewItem::setText(column, cellText+text); cellText = text;} void setDisplaySubText( bool display ){ displaySubText = display; } bool hasEllipsis(){return ellipsis;} void setHighLight( bool newHighLight ){highLight=newHighLight;} bool isHighLight(){return highLight;} void setMenuId( TQString newMenuId ){ menuId = newMenuId;} TQString getMenuId(){ return menuId; } TQString key( int column, bool ascending ) const; int width( const TQFontMetrics & fm, const TQListView * lv, int c ) { TastyListView *tlv = dynamic_cast( listView() ); if( tlv ) return TDEListViewItem::width(fm, lv, c) + tlv->getActionIconSpace(); else return TDEListViewItem::width(fm, lv, c); } protected: virtual void setup(); private: Type itemType; ActionType actionType; TQString path; TQString desktopEntryPath; TQString cellText; TQString subText; TQString menuId; bool ellipsis; bool highLight; bool displaySubText; TQPixmap actionPix; TDEIconLoader *iconLoader; void commonConstructor(); //a tiny reimplementation of max... int max(int a, int b){return (a>b?a:b);} }; #endif