Salome HOME
PAL10125 - by double click on reference original object becomes selected
[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         setSel(s);
139         QListViewItem::setSelected(s);
140 }
141
142 void OB_ListItem::paintFocus( QPainter* p, const QColorGroup& cg, const QRect& r ){
143   QColorGroup col_group( cg );
144         paintFoc(p, col_group, r);
145         QListViewItem::paintFocus(p, col_group, r);
146 }
147
148 void OB_ListItem::paintCell( QPainter* p, const QColorGroup& cg, int c, int w, int align ) {
149   QColorGroup col_group( cg );
150         paintC(p, col_group, c ,w, align);
151         QListViewItem::paintCell( p, col_group, c, w, align);
152 }
153
154 int OB_ListItem::RTTI()
155 {
156   return 1000;
157 }
158
159 int OB_ListItem::rtti() const
160 {
161   return RTTI();
162 }
163
164 /*!
165     Class: OB_CheckListItem
166     Descr: Check list view item for OB_Browser.
167 */
168
169 OB_CheckListItem::OB_CheckListItem( SUIT_DataObject* obj, QListView* parent, Type type )
170 : ListItemF<QCheckListItem>( *this, obj),
171 QCheckListItem( parent, "", type )
172 {
173         update();
174 }
175
176 OB_CheckListItem::OB_CheckListItem( SUIT_DataObject* obj, QListViewItem* parent, Type type )
177 : ListItemF<QCheckListItem>( *this, obj),
178 QCheckListItem( parent, "", type )
179 {
180         update();
181 }
182
183 OB_CheckListItem::OB_CheckListItem( SUIT_DataObject* obj, QListView* parent, QListViewItem* after, Type type )
184 : ListItemF<QCheckListItem>( *this, obj),
185 #if defined(QT_VERSION) && QT_VERSION >= 0x030101
186  QCheckListItem( parent, after, "", type )
187 #else
188  QCheckListItem( parent, "", type )
189 #endif
190 {
191         update();
192 }
193
194 OB_CheckListItem::OB_CheckListItem( SUIT_DataObject* obj, QListViewItem* parent, QListViewItem* after, Type type )
195 : ListItemF<QCheckListItem>( *this, obj),
196 #if defined(QT_VERSION) && QT_VERSION >= 0x030101
197  QCheckListItem( parent, after, "", type )
198 #else
199  QCheckListItem( parent, "", type )
200 #endif
201 {
202         update();
203 }
204
205 OB_CheckListItem::~OB_CheckListItem()
206 {
207 }
208
209 void OB_CheckListItem::setSelected( bool s ) {
210         setSel(s);
211         QCheckListItem::setSelected(s);
212 }
213
214 void OB_CheckListItem::paintFocus( QPainter* p, const QColorGroup& cg, const QRect& r ){
215   QColorGroup col_group( cg );
216         paintFoc(p, col_group, r);
217         QCheckListItem::paintFocus(p, col_group, r);
218 }
219
220 void OB_CheckListItem::paintCell( QPainter* p, const QColorGroup& cg, int c, int w, int align ) {
221   QColorGroup col_group( cg );
222         paintC(p, col_group, c ,w, align);
223         QCheckListItem::paintCell(p, col_group, c, w, align);
224 }
225
226 int OB_CheckListItem::RTTI()
227 {
228   return OB_ListItem::RTTI() + 1;
229 }
230
231 int OB_CheckListItem::rtti() const
232 {
233   return RTTI();
234 }
235
236 void OB_CheckListItem::stateChange( bool on )
237 {
238   QCheckListItem::stateChange( on );
239
240   if ( dataObject() )
241     dataObject()->setOn( on );
242 }