00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <gwen-gui-cpp/cppwidget.hpp>
00012
00013
00014 class Qt4_W_ListBox: public Qt4_W_Widget {
00015 public:
00016 Qt4_W_ListBox(GWEN_WIDGET *w):Qt4_W_Widget(w) {
00017 }
00018
00019
00020
00021 ~Qt4_W_ListBox() {
00022 }
00023
00024
00025
00026 virtual int setup() {
00027 QTreeWidget *qw;
00028 uint32_t flags;
00029 GWEN_WIDGET *wParent;
00030 QSizePolicy::Policy hpolicy=QSizePolicy::Minimum;
00031 QSizePolicy::Policy vpolicy=QSizePolicy::Minimum;
00032 QT4_GuiDialog *qtDialog;
00033
00034 flags=GWEN_Widget_GetFlags(_widget);
00035 wParent=GWEN_Widget_Tree_GetParent(_widget);
00036
00037 qw=new QTreeWidget();
00038 qw->setAllColumnsShowFocus(true);
00039 qw->setSortingEnabled(true);
00040 qw->setRootIsDecorated(false);
00041 qw->setItemsExpandable(false);
00042 qw->setSelectionBehavior(QAbstractItemView::SelectRows);
00043
00044
00045 if (flags & GWEN_WIDGET_FLAGS_FILLX)
00046 hpolicy=QSizePolicy::Expanding;
00047 if (flags & GWEN_WIDGET_FLAGS_FILLY)
00048 vpolicy=QSizePolicy::Expanding;
00049 qw->setSizePolicy(hpolicy, vpolicy);
00050
00051 GWEN_Widget_SetImplData(_widget, QT4_DIALOG_WIDGET_REAL, (void*) qw);
00052
00053 qtDialog=dynamic_cast<QT4_GuiDialog*>(getDialog());
00054 assert(qtDialog);
00055
00056 qw->connect(qw, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)),
00057 qtDialog->getMainWindow(),
00058 SLOT(slotActivated()));
00059
00060 if (wParent)
00061 GWEN_Widget_AddChildGuiWidget(wParent, _widget);
00062 return 0;
00063 }
00064
00065
00066
00067 int setIntProperty(GWEN_DIALOG_PROPERTY prop,
00068 int index,
00069 int value,
00070 int doSignal) {
00071 QTreeWidget *qw;
00072
00073 qw=(QTreeWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL);
00074 assert(qw);
00075
00076 switch(prop) {
00077 case GWEN_DialogProperty_ClearValues:
00078 qw->clear();
00079 return 0;
00080
00081 case GWEN_DialogProperty_Value: {
00082 QTreeWidgetItem *item;
00083
00084 item=qw->topLevelItem(index);
00085
00086 if (item==NULL) {
00087 DBG_ERROR(GWEN_LOGDOMAIN, "Value %d out of range", value);
00088 return GWEN_ERROR_INVALID;
00089 }
00090
00091 qw->setCurrentItem(item);
00092 return 0;
00093 }
00094
00095 case GWEN_DialogProperty_ColumnWidth:
00096 qw->setColumnWidth(index, value);
00097 return 0;
00098
00099 case GWEN_DialogProperty_SelectionMode:
00100 switch(value) {
00101 case GWEN_Dialog_SelectionMode_None:
00102 qw->setSelectionMode(QAbstractItemView::NoSelection);
00103 return 0;
00104 case GWEN_Dialog_SelectionMode_Single:
00105 qw->setSelectionMode(QAbstractItemView::SingleSelection);
00106 return 0;
00107 case GWEN_Dialog_SelectionMode_Multi:
00108 qw->setSelectionMode(QAbstractItemView::ExtendedSelection);
00109 return 0;
00110 ;
00111 }
00112 DBG_ERROR(GWEN_LOGDOMAIN, "Unknown SelectionMode %d", value);
00113 return GWEN_ERROR_INVALID;
00114
00115 case GWEN_DialogProperty_SortDirection:
00116 switch(value) {
00117 case GWEN_DialogSortDirection_None:
00118 qw->sortByColumn(-1, Qt::AscendingOrder);
00119 break;
00120 case GWEN_DialogSortDirection_Up:
00121 qw->sortByColumn(index, Qt::AscendingOrder);
00122 break;
00123 case GWEN_DialogSortDirection_Down:
00124 qw->sortByColumn(index, Qt::DescendingOrder);
00125 break;
00126 }
00127 return 0;
00128
00129 case GWEN_DialogProperty_Sort: {
00130 int c;
00131
00132 c=qw->sortColumn();
00133 if (c!=-1) {
00134 QHeaderView *h;
00135
00136 h=qw->header();
00137 qw->sortItems(c, h->sortIndicatorOrder());
00138 }
00139 return 0;
00140 }
00141
00142 default:
00143 return Qt4_W_Widget::setIntProperty(prop, index, value, doSignal);
00144 }
00145 };
00146
00147
00148
00149 int getIntProperty(GWEN_DIALOG_PROPERTY prop,
00150 int index,
00151 int defaultValue) {
00152 QTreeWidget *qw;
00153
00154 qw=(QTreeWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL);
00155 assert(qw);
00156
00157 switch(prop) {
00158 case GWEN_DialogProperty_Value: {
00159 QTreeWidgetItem *item;
00160 int i=-1;
00161
00162 item=qw->currentItem();
00163 while(item) {
00164 item=qw->itemAbove(item);
00165 i++;
00166 }
00167
00168 return i;
00169 }
00170
00171 case GWEN_DialogProperty_ColumnWidth:
00172 return qw->columnWidth(index);
00173
00174 case GWEN_DialogProperty_SelectionMode:
00175 switch(qw->selectionMode()) {
00176 case QAbstractItemView::NoSelection:
00177 return GWEN_Dialog_SelectionMode_None;
00178 case QAbstractItemView::SingleSelection:
00179 return GWEN_Dialog_SelectionMode_Single;
00180 case QAbstractItemView::ExtendedSelection:
00181 return GWEN_Dialog_SelectionMode_Multi;
00182 default:
00183 break;
00184 }
00185 DBG_ERROR(GWEN_LOGDOMAIN, "Unknown SelectionMode %d",
00186 qw->selectionMode());
00187 return GWEN_ERROR_INVALID;
00188
00189 case GWEN_DialogProperty_SortDirection:
00190 if (qw->sortColumn()!=index)
00191 return GWEN_DialogSortDirection_None;
00192 else {
00193 switch(qw->header()->sortIndicatorOrder()) {
00194 case Qt::AscendingOrder:
00195 return GWEN_DialogSortDirection_Up;
00196 case Qt::DescendingOrder:
00197 return GWEN_DialogSortDirection_Down;
00198 default:
00199 return GWEN_DialogSortDirection_None;
00200 }
00201 }
00202 break;
00203
00204 default:
00205 return Qt4_W_Widget::getIntProperty(prop, index, defaultValue);
00206 }
00207 };
00208
00209
00210
00211 int setCharProperty(GWEN_DIALOG_PROPERTY prop,
00212 int index,
00213 const char *value,
00214 int doSignal) {
00215 QTreeWidget *qw;
00216 QString text;
00217
00218 qw=(QTreeWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL);
00219 assert(qw);
00220
00221 if (value)
00222 text=QT4_Gui::extractHtml(value);
00223
00224 switch(prop) {
00225 case GWEN_DialogProperty_Title: {
00226 QString str;
00227 QString t;
00228 QStringList sl;
00229 int n=0;
00230
00231
00232 qw->header()->reset();
00233
00234 str=text;
00235 while(!(t=str.section('\t', n, n)).isEmpty()){
00236 sl+=t;
00237 n++;
00238 }
00239 qw->setHeaderLabels(sl);
00240 return 0;
00241 }
00242
00243 case GWEN_DialogProperty_ClearValues:
00244 qw->clear();
00245 return 0;
00246
00247 case GWEN_DialogProperty_AddValue: {
00248 QString str;
00249 QString t;
00250 int n=0;
00251 QStringList sl;
00252 QTreeWidgetItem *item;
00253
00254 str=text;
00255 while(!(t=str.section('\t', n, n)).isEmpty()){
00256 sl+=t;
00257 n++;
00258 }
00259 item=new QTreeWidgetItem(qw, sl);
00260 return 0;
00261 }
00262
00263 default:
00264 return Qt4_W_Widget::setCharProperty(prop, index, value, doSignal);
00265 }
00266 };
00267
00268
00269
00270 const char *getCharProperty(GWEN_DIALOG_PROPERTY prop,
00271 int index,
00272 const char *defaultValue) {
00273 QTreeWidget *qw;
00274 QString str;
00275
00276 qw=(QTreeWidget*) GWEN_Widget_GetImplData(_widget, QT4_DIALOG_WIDGET_REAL);
00277 assert(qw);
00278
00279 switch(prop) {
00280 case GWEN_DialogProperty_Title: {
00281 QTreeWidgetItem *item;
00282
00283 item=qw->headerItem();
00284 if (item) {
00285 int i;
00286
00287 for (i=0; i<qw->columnCount(); i++) {
00288 if (i)
00289 str+='\t';
00290 str+=item->text(i);
00291 }
00292 if (str.isEmpty())
00293 return defaultValue;
00294 else {
00295 GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_TITLE, str.toUtf8());
00296 return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_TITLE);
00297 }
00298 }
00299 return defaultValue;
00300 }
00301
00302 case GWEN_DialogProperty_Value: {
00303 QTreeWidgetItem *item;
00304 int i;
00305
00306 item=qw->topLevelItem(index);
00307
00308 if (item==NULL) {
00309 DBG_ERROR(GWEN_LOGDOMAIN, "Value %d out of range", index);
00310 return defaultValue;
00311 }
00312
00313 for (i=0; i<qw->columnCount(); i++) {
00314 if (i)
00315 str+='\t';
00316 str+=item->text(i);
00317 }
00318 if (str.isEmpty())
00319 return defaultValue;
00320 else {
00321 GWEN_Widget_SetText(_widget, QT4_DIALOG_STRING_VALUE, str.toUtf8());
00322 return GWEN_Widget_GetText(_widget, QT4_DIALOG_STRING_VALUE);
00323 }
00324 }
00325
00326 default:
00327 return Qt4_W_Widget::getCharProperty(prop, index, defaultValue);
00328 }
00329 };
00330
00331 };
00332
00333
00334
00335
00336
00337
00338