]> SALOME platform Git repositories - modules/gui.git/blob - src/ObjBrowser/OB_ListItem.cxx
Salome HOME
1e100dcb052d5fc0ea436a8bf3877d92c2e3db40
[modules/gui.git] / src / ObjBrowser / OB_ListItem.cxx
1 #include "OB_ListItem.h"
2
3 #include "OB_ListView.h"
4
5 #include <SUIT_DataObject.h>
6
7 #include <qpainter.h>
8 #include <qwmatrix.h>
9
10 #include <iostream>
11 using namespace std;
12
13 /*!
14     Class: ListItem
15     Descr: base template class
16 */
17
18 template<class T>
19 ListItemF<T>::ListItemF( T& theT, SUIT_DataObject* obj ) :
20 myT( theT ),
21 myObject( obj )
22 {
23 }
24
25 template<class T>
26 void ListItemF<T>::paintC( QPainter* p, QColorGroup& cg, int c, int w, int align )
27
28 //  QColorGroup colorGrp( cg );
29   if ( myObject )
30   {
31     if ( myObject->color( SUIT_DataObject::Text ).isValid() )
32       cg.setColor( QColorGroup::Text, myObject->color( SUIT_DataObject::Text ) );
33     if ( myObject->color( SUIT_DataObject::Base ).isValid() )
34       cg.setColor( QColorGroup::Base, myObject->color( SUIT_DataObject::Base ) );
35     if ( myObject->color( SUIT_DataObject::Foreground ).isValid() )
36       cg.setColor( QColorGroup::Foreground, myObject->color( SUIT_DataObject::Foreground ) );
37     if ( myObject->color( SUIT_DataObject::Background ).isValid() )
38       cg.setColor( QColorGroup::Background, myObject->color( SUIT_DataObject::Background ) );
39     if ( myObject->color( SUIT_DataObject::Highlight ).isValid() )
40       cg.setColor( QColorGroup::Highlight, myObject->color( SUIT_DataObject::Highlight ) );
41     if ( myObject->color( SUIT_DataObject::HighlightedText ).isValid() )
42       cg.setColor( QColorGroup::HighlightedText, myObject->color( SUIT_DataObject::HighlightedText ) );
43   }
44
45   
46   p->fillRect( 0, 0, w, myT.height(), cg.brush( QColorGroup::Base ) );
47   //int itemW = myT.width( p->fontMetrics(), myT.listView(), c );
48     
49   //myT.paintCell( p, colorGrp, c, itemW,  align );
50 }
51
52 template<class T>
53 void ListItemF<T>::paintFoc( QPainter* p, QColorGroup& cg, const QRect& r )
54 {
55   QRect rect = r;
56   rect.setWidth( myT.width( p->fontMetrics(), myT.listView(), 0 ) );
57   //myT.paintFocus( p, cg, rect );
58 }
59
60 template<class T>
61 void ListItemF<T>::setSel( bool s )
62 {
63   QListView* lv = myT.listView();
64   if ( s && lv && lv->inherits( "OB_ListView" ) )
65   {
66     OB_ListView* objlv = (OB_ListView*)lv;
67     s = s && objlv->isOk( &myT );
68   }
69
70   //myT.setSelected( s );
71 }
72
73 template<class T>
74 void ListItemF<T>::update()
75 {
76   SUIT_DataObject* obj = dataObject();
77   if ( !obj )
78     return;
79
80   myT.setText( 0, obj->name() );
81
82   int aIconW = obj->icon().width();
83   if ( aIconW > 0 )
84   {
85     if ( aIconW > 20 )
86     {
87       QWMatrix aM;
88       double aScale = 20.0 / aIconW;
89       aM.scale( aScale, aScale );
90       myT.setPixmap( 0, obj->icon().xForm( aM ) );
91     }
92     else
93       myT.setPixmap( 0, obj->icon() );
94   }
95
96   myT.setDragEnabled( obj->isDragable() );
97   myT.setDropEnabled( true );
98 }
99
100 /*!
101     Class: OB_ListItem
102     Descr: List view item for OB_Browser.
103 */
104
105 OB_ListItem::OB_ListItem( SUIT_DataObject* obj, QListView* parent )
106 : ListItemF<QListViewItem>( *this, obj ),
107  QListViewItem(parent)
108 {
109         update();
110 }
111
112 OB_ListItem::OB_ListItem( SUIT_DataObject* obj, QListViewItem* parent )
113 : ListItemF<QListViewItem>( *this, obj),
114  QListViewItem(parent)
115 {
116         update();
117 }
118
119 OB_ListItem::OB_ListItem( SUIT_DataObject* obj, QListView* parent, QListViewItem* after )
120 : ListItemF<QListViewItem>( *this, obj),
121 QListViewItem(parent, after )
122 {
123         update();
124 }
125
126 OB_ListItem::OB_ListItem( SUIT_DataObject* obj, QListViewItem* parent, QListViewItem* after )
127 : ListItemF<QListViewItem>( *this,obj),
128 QListViewItem(parent, after )
129 {
130         update();
131 }
132
133 OB_ListItem::~OB_ListItem()
134 {
135 }
136
137 void OB_ListItem::setSelected( bool s )
138 {
139         setSel( s );
140         QListViewItem::setSelected( s );
141 }
142
143 void OB_ListItem::paintFocus( QPainter* p, const QColorGroup& cg, const QRect& r )
144 {
145   QColorGroup col_group( cg );
146         paintFoc( p, col_group, r );
147
148   QRect R( r );
149   if ( listView() && !listView()->allColumnsShowFocus() )
150     R.setWidth( width( p->fontMetrics(), listView(), 0 ) );
151
152   QListViewItem::paintFocus( p, col_group, R );
153 }
154
155 void OB_ListItem::paintCell( QPainter* p, const QColorGroup& cg, int c, int w, int align )
156 {
157   QColorGroup col_group( cg );
158         paintC( p, col_group, c ,w, align );
159
160   int W = w;
161   if ( listView() && !listView()->allColumnsShowFocus() )
162     W = width( p->fontMetrics(), listView(), c );
163
164         QListViewItem::paintCell( p, col_group, c, W, align );
165 }
166
167 int OB_ListItem::RTTI()
168 {
169   return 1000;
170 }
171
172 int OB_ListItem::rtti() const
173 {
174   return RTTI();
175 }
176
177 /*!
178     Class: OB_CheckListItem
179     Descr: Check list view item for OB_Browser.
180 */
181
182 OB_CheckListItem::OB_CheckListItem( SUIT_DataObject* obj, QListView* parent, Type type )
183 : ListItemF<QCheckListItem>( *this, obj),
184 QCheckListItem( parent, "", type )
185 {
186         update();
187 }
188
189 OB_CheckListItem::OB_CheckListItem( SUIT_DataObject* obj, QListViewItem* parent, Type type )
190 : ListItemF<QCheckListItem>( *this, obj),
191 QCheckListItem( parent, "", type )
192 {
193         update();
194 }
195
196 OB_CheckListItem::OB_CheckListItem( SUIT_DataObject* obj, QListView* parent, QListViewItem* after, Type type )
197 : ListItemF<QCheckListItem>( *this, obj),
198 #if defined(QT_VERSION) && QT_VERSION >= 0x030101
199  QCheckListItem( parent, after, "", type )
200 #else
201  QCheckListItem( parent, "", type )
202 #endif
203 {
204         update();
205 }
206
207 OB_CheckListItem::OB_CheckListItem( SUIT_DataObject* obj, QListViewItem* parent, QListViewItem* after, Type type )
208 : ListItemF<QCheckListItem>( *this, obj),
209 #if defined(QT_VERSION) && QT_VERSION >= 0x030101
210  QCheckListItem( parent, after, "", type )
211 #else
212  QCheckListItem( parent, "", type )
213 #endif
214 {
215         update();
216 }
217
218 OB_CheckListItem::~OB_CheckListItem()
219 {
220 }
221
222 void OB_CheckListItem::setSelected( bool s )
223 {
224         setSel( s );
225         QCheckListItem::setSelected( s );
226 }
227
228 void OB_CheckListItem::paintFocus( QPainter* p, const QColorGroup& cg, const QRect& r )
229 {
230   QColorGroup col_group( cg );
231         paintFoc( p, col_group, r );
232
233   QRect R( r );
234   if ( listView() && !listView()->allColumnsShowFocus() )
235     R.setWidth( width( p->fontMetrics(), listView(), 0 ) );
236
237         QCheckListItem::paintFocus( p, col_group, R );
238 }
239
240 void OB_CheckListItem::paintCell( QPainter* p, const QColorGroup& cg, int c, int w, int align )
241 {
242   QColorGroup col_group( cg );
243         paintC( p, col_group, c ,w, align );
244
245   int W = w;
246   if ( listView() && !listView()->allColumnsShowFocus() )
247     W = width( p->fontMetrics(), listView(), c );
248
249   QCheckListItem::paintCell( p, col_group, c, W, align );
250 }
251
252 int OB_CheckListItem::RTTI()
253 {
254   return OB_ListItem::RTTI() + 1;
255 }
256
257 int OB_CheckListItem::rtti() const
258 {
259   return RTTI();
260 }
261
262 void OB_CheckListItem::stateChange( bool on )
263 {
264   QCheckListItem::stateChange( on );
265
266   if ( dataObject() )
267     dataObject()->setOn( on );
268 }