1 /*************************************************************************** 2 begin : Mon Feb 15 2010 3 copyright : (C) 2010 by Martin Preuss 4 email : martin@libchipcard.de 5 6 *************************************************************************** 7 * Please see toplevel file COPYING for license details * 8 ***************************************************************************/ 9 10 11 #include <gwen-gui-cpp/cppwidget.hpp> 12 13 14 class Qt4_W_ListBox: public Qt4_W_Widget { 15 public: Qt4_W_ListBox(GWEN_WIDGET * w)16 Qt4_W_ListBox(GWEN_WIDGET *w):Qt4_W_Widget(w) { 17 } 18 19 20 ~Qt4_W_ListBox()21 ~Qt4_W_ListBox() { 22 } 23 24 25 setup()26 virtual int setup() { 27 QTreeWidget *qw; 28 uint32_t flags; 29 GWEN_WIDGET *wParent; 30 QSizePolicy::Policy hpolicy=QSizePolicy::Minimum; 31 QSizePolicy::Policy vpolicy=QSizePolicy::Minimum; 32 QT4_GuiDialog *qtDialog; 33 34 flags=GWEN_Widget_GetFlags(_widget); 35 wParent=GWEN_Widget_Tree_GetParent(_widget); 36 37 qw=new QTreeWidget(); 38 qw->setAllColumnsShowFocus(true); 39 qw->setSortingEnabled(true); 40 qw->setRootIsDecorated(false); 41 qw->setItemsExpandable(false); 42 qw->setSelectionBehavior(QAbstractItemView::SelectRows); 43 44 /* handle flags */ 45 if (flags & GWEN_WIDGET_FLAGS_FILLX) 46 hpolicy=QSizePolicy::Expanding; 47 if (flags & GWEN_WIDGET_FLAGS_FILLY) 48 vpolicy=QSizePolicy::Expanding; 49 qw->setSizePolicy(hpolicy, vpolicy); 50 51 GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw); 52 53 qtDialog=dynamic_cast<QT4_GuiDialog*>(getDialog()); 54 assert(qtDialog); 55 56 qw->connect(qw, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), 57 qtDialog->getMainWindow(), 58 SLOT(slotActivated())); 59 60 if (wParent) 61 GWEN_Widget_AddChildGuiWidget(wParent, _widget); 62 return 0; 63 } 64 65 66 setIntProperty(GWEN_DIALOG_PROPERTY prop,int index,int value,int doSignal)67 int setIntProperty(GWEN_DIALOG_PROPERTY prop, 68 int index, 69 int value, 70 int doSignal) { 71 QTreeWidget *qw; 72 73 qw=(QTreeWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); 74 assert(qw); 75 76 switch(prop) { 77 case GWEN_DialogProperty_ClearValues: 78 qw->clear(); 79 return 0; 80 81 case GWEN_DialogProperty_Value: { 82 QTreeWidgetItem *item; 83 84 item=qw->topLevelItem(index); 85 86 if (item==NULL) { 87 DBG_ERROR(GWEN_LOGDOMAIN, "Value %d out of range", value); 88 return GWEN_ERROR_INVALID; 89 } 90 91 qw->setCurrentItem(item); 92 return 0; 93 } 94 95 case GWEN_DialogProperty_ColumnWidth: 96 qw->setColumnWidth(index, value); 97 return 0; 98 99 case GWEN_DialogProperty_SelectionMode: 100 switch(value) { 101 case GWEN_Dialog_SelectionMode_None: 102 qw->setSelectionMode(QAbstractItemView::NoSelection); 103 return 0; 104 case GWEN_Dialog_SelectionMode_Single: 105 qw->setSelectionMode(QAbstractItemView::SingleSelection); 106 return 0; 107 case GWEN_Dialog_SelectionMode_Multi: 108 qw->setSelectionMode(QAbstractItemView::ExtendedSelection); 109 return 0; 110 ; 111 } 112 DBG_ERROR(GWEN_LOGDOMAIN, "Unknown SelectionMode %d", value); 113 return GWEN_ERROR_INVALID; 114 115 case GWEN_DialogProperty_SortDirection: 116 switch(value) { 117 case GWEN_DialogSortDirection_None: 118 qw->sortByColumn(-1, Qt::AscendingOrder); 119 break; 120 case GWEN_DialogSortDirection_Up: 121 qw->sortByColumn(index, Qt::AscendingOrder); 122 break; 123 case GWEN_DialogSortDirection_Down: 124 qw->sortByColumn(index, Qt::DescendingOrder); 125 break; 126 } 127 return 0; 128 129 case GWEN_DialogProperty_Sort: { 130 int c; 131 132 c=qw->sortColumn(); 133 if (c!=-1) { 134 QHeaderView *h; 135 136 h=qw->header(); 137 qw->sortItems(c, h->sortIndicatorOrder()); 138 } 139 return 0; 140 } 141 142 default: 143 return Qt4_W_Widget::setIntProperty(prop, index, value, doSignal); 144 } 145 }; 146 147 148 getIntProperty(GWEN_DIALOG_PROPERTY prop,int index,int defaultValue)149 int getIntProperty(GWEN_DIALOG_PROPERTY prop, 150 int index, 151 int defaultValue) { 152 QTreeWidget *qw; 153 154 qw=(QTreeWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); 155 assert(qw); 156 157 switch(prop) { 158 case GWEN_DialogProperty_Value: { 159 QTreeWidgetItem *item; 160 int i=-1; 161 162 item=qw->currentItem(); 163 while(item) { 164 item=qw->itemAbove(item); 165 i++; 166 } 167 168 return i; 169 } 170 171 case GWEN_DialogProperty_ColumnWidth: 172 return qw->columnWidth(index); 173 174 case GWEN_DialogProperty_SelectionMode: 175 switch(qw->selectionMode()) { 176 case QAbstractItemView::NoSelection: 177 return GWEN_Dialog_SelectionMode_None; 178 case QAbstractItemView::SingleSelection: 179 return GWEN_Dialog_SelectionMode_Single; 180 case QAbstractItemView::ExtendedSelection: 181 return GWEN_Dialog_SelectionMode_Multi; 182 default: 183 break; 184 } 185 DBG_ERROR(GWEN_LOGDOMAIN, "Unknown SelectionMode %d", 186 qw->selectionMode()); 187 return GWEN_ERROR_INVALID; 188 189 case GWEN_DialogProperty_SortDirection: 190 if (qw->sortColumn()!=index) 191 return GWEN_DialogSortDirection_None; 192 else { 193 switch(qw->header()->sortIndicatorOrder()) { 194 case Qt::AscendingOrder: 195 return GWEN_DialogSortDirection_Up; 196 case Qt::DescendingOrder: 197 return GWEN_DialogSortDirection_Down; 198 default: 199 return GWEN_DialogSortDirection_None; 200 } 201 } 202 break; 203 204 default: 205 return Qt4_W_Widget::getIntProperty(prop, index, defaultValue); 206 } 207 }; 208 209 210 setCharProperty(GWEN_DIALOG_PROPERTY prop,int index,const char * value,int doSignal)211 int setCharProperty(GWEN_DIALOG_PROPERTY prop, 212 int index, 213 const char *value, 214 int doSignal) { 215 QTreeWidget *qw; 216 QString text; 217 218 qw=(QTreeWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); 219 assert(qw); 220 221 if (value) 222 text=QT4_Gui::extractHtml(value); 223 224 switch(prop) { 225 case GWEN_DialogProperty_Title: { 226 QString str; 227 QString t; 228 QStringList sl; 229 int n=0; 230 231 /* remove all columns */ 232 qw->header()->reset(); 233 234 str=text; 235 while(!(t=str.section('\t', n, n)).isEmpty()) { 236 sl+=t; 237 n++; 238 } 239 qw->setHeaderLabels(sl); 240 return 0; 241 } 242 243 case GWEN_DialogProperty_ClearValues: 244 qw->clear(); 245 return 0; 246 247 case GWEN_DialogProperty_AddValue: { 248 QString t; 249 int n=0; 250 QStringList sl; 251 252 QString str=text; 253 while(!(t=str.section('\t', n, n)).isEmpty()) { 254 sl+=t; 255 n++; 256 } 257 (void)new QTreeWidgetItem(qw, sl); 258 return 0; 259 } 260 261 default: 262 return Qt4_W_Widget::setCharProperty(prop, index, value, doSignal); 263 } 264 }; 265 266 267 getCharProperty(GWEN_DIALOG_PROPERTY prop,int index,const char * defaultValue)268 const char *getCharProperty(GWEN_DIALOG_PROPERTY prop, 269 int index, 270 const char *defaultValue) { 271 QTreeWidget *qw; 272 QString str; 273 274 qw=(QTreeWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL); 275 assert(qw); 276 277 switch(prop) { 278 case GWEN_DialogProperty_Title: { 279 QTreeWidgetItem *item; 280 281 item=qw->headerItem(); 282 if (item) { 283 int i; 284 285 for (i=0; i<qw->columnCount(); i++) { 286 if (i) 287 str+='\t'; 288 str+=item->text(i); 289 } 290 if (str.isEmpty()) 291 return defaultValue; 292 else { 293 GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_TITLE, str.toUtf8()); 294 return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_TITLE); 295 } 296 } 297 return defaultValue; 298 } 299 300 case GWEN_DialogProperty_Value: { 301 QTreeWidgetItem *item; 302 int i; 303 304 item=qw->topLevelItem(index); 305 306 if (item==NULL) { 307 DBG_ERROR(GWEN_LOGDOMAIN, "Value %d out of range", index); 308 return defaultValue; 309 } 310 311 for (i=0; i<qw->columnCount(); i++) { 312 if (i) 313 str+='\t'; 314 str+=item->text(i); 315 } 316 if (str.isEmpty()) 317 return defaultValue; 318 else { 319 GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_VALUE, str.toUtf8()); 320 return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_VALUE); 321 } 322 } 323 324 default: 325 return Qt4_W_Widget::getCharProperty(prop, index, defaultValue); 326 } 327 }; 328 329 }; 330 331 332 333 334 335 336 337