static int drawTypeIcon(QPainter *painter, const QStyleOptionViewItem &styleOption, const QModelIndex &modelIndex, NavigatorTreeModel *navigatorTreeModel ) { int pixmapSize = 16; if (navigatorTreeModel->hasNodeForIndex(modelIndex)) { ModelNode modelNode = navigatorTreeModel->nodeForIndex(modelIndex); // If no icon is present, leave an empty space of 24 pixels anyway QPixmap pixmap = getTypeIcon(modelNode).pixmap(pixmapSize, pixmapSize); painter->drawPixmap(styleOption.rect.x() +1 , styleOption.rect.y() + 2, pixmap); } return pixmapSize; }
CMdiSubWindow * _newScreen(QString name, int x, int y, INT16U width, INT16U height , INT8U spaceWidth, INT8U dotWidth, INT8U color) { //-------------- CMdiSubWindow *subWin = new CMdiSubWindow; subWin->setWindowIcon(getTypeIcon(SCREEN_PROPERTY)); w->screenArea = new CscreenArea(subWin, width, height, color); w->screenArea->parentWin = subWin; w->screenArea->screenPara.Base_Para.Width = width; w->screenArea->screenPara.Base_Para.Height = height; w->screenArea->screenPara.Base_Para.Color = color; w->screenArea->dotWidth = dotWidth; w->screenArea->spaceWidth = spaceWidth; w->screenArea->setFixedSize(width * (dotWidth + spaceWidth), height * (dotWidth + spaceWidth)); for(int i =0; i<MAX_AREA_NUM;i++) { w->screenArea->pArea[i]->screenPara.Base_Para.Color = color; w->screenArea->pArea[i]->dotWidth = dotWidth; w->screenArea->pArea[i]->spaceWidth = spaceWidth; } //w->screenArea->setGeometry(10,10,Screen_Para.Base_Para.Width+8, Screen_Para.Base_Para.Height+34); subWin->setWidget(w->screenArea); //subWin->setAttribute(Qt::WA_DeleteOnClose); //subWin->setWindowFlags(Qt::WindowMinimizeButtonHint); w->mdiArea->addSubWindow(subWin); subWin->setWindowTitle(name); //subWin->setGeometry(x,y,width,height); //resize(Screen_Para.Base_Para.Width, Screen_Para.Base_Para.Height); //subWin->resize(width + 8,height + 34); subWin->move(x,y); //subWin->setFixedSize(subWin->size()); subWin->setFixedSize(subWin->sizeHint()); subWin->setWindowFlags(subWin->windowFlags() &~ (Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint)); //subWin->setSystemMenu(0); //此调用可以删除弹出菜单,但不知有没有副作用 subWin->show(); return subWin; }
//一个新的显示file void CprogManage::newFile(int fileType, int subType) { QTreeWidgetItem *curItem; QTreeWidgetItem *parentItem; QString QStr; int i,size,type; int max = 0,tmp; curItem = treeWidget->currentItem(); //当前被选中的项 if(curItem == (QTreeWidgetItem *)0) { QMessageBox::information(w, tr("提示"), tr("请先在节目管理栏选择一个分区"),tr("确定")); return; } type = checkItemType(curItem); //该项目是哪种? if(type == PROG_PROPERTY || type == SCREEN_PROPERTY) { QMessageBox::information(w, tr("提示"), tr("请先在节目管理栏选择一个分区"),tr("确定")); return; } else if(type == AREA_PROPERTY) //area型 parentItem = curItem; else { parentItem = curItem ->parent(); } //计算该节目下目前有的文件数 int fileNum = 0; QTreeWidgetItem *progItem = parentItem->parent(); //节目item for(i = 0; i < progItem->childCount(); i ++) //分区数 { fileNum += progItem->child(i)->childCount(); } if(fileNum >= MAX_FILE_NUM) { QMessageBox::information(w, tr("提示"), tr("当前节目播放文件数已经达到上限") + QString::number(MAX_FILE_NUM),tr("确定")); return; } debug("cur prog file num = %d", fileNum); //----------------- QStr = (parentItem ->data(0,Qt::UserRole)).toString(); QStr = QStr + "/" + QString(tr("file")); settings.beginGroup(QStr); QStringList groups = settings.childGroups(); //area列表 size = groups.size(); /* if(size >= MAX_FILE_NUM) { settings.endGroup(); QMessageBox::information(w, tr("提示"), tr("当前分区文件数达到上限!"),tr("确定")); return; } */ for(i = 0; i < size; i ++) { tmp = groups.at(i).toInt(); if(tmp > max) max=tmp; } max++; settings.beginGroup(fixWidthNumber(max)); settings.setValue("type", fileType); settings.setValue("subType", subType); settings.setValue("setFlag", 0); //没有设过参数 settings.setValue("checkState", true); settings.endGroup(); settings.endGroup(); //w->setCurSettingsStr(QStr + "/" + QString::number(max)); QTreeWidgetItem* item = new QTreeWidgetItem(parentItem,QStringList(QString::number(max))); item->setData(0, Qt::UserRole, QVariant(QStr + "/" + fixWidthNumber(max))); item->setCheckState(0, Qt::Checked); QIcon icon = getTypeIcon((subType > 0)?subType:fileType); item->setIcon(0,icon); parentItem->addChild(item); //w->progManage->clickItem(item, 0); w->progManage->treeWidget->setCurrentItem(item); //新建表格 if(fileType EQ PIC_PROPERTY && subType EQ PIC_TABLE_PROPERTY) { //w->progManage->clickItem(); w->property->picProperty->edit->showInit(); //w->property->picProperty->edit->edit(); w->property->picProperty->edit->tableNew(); } /* updateItemSubIndex(item); updateTextHead(item->parent()); treeWidget->setCurrentItem(item); saveCurItem(item); //w->property->stackedWidget->setCurrentIndex(fileType); //w->property->setSettingsToWidget(QStr + "/" + QString::number(max), fileType); w->property->updateProperty(item); w->screenArea->updateShowArea(item);// progSettingsInit(QStr); */ }
//一个新的area窗口 // program/01/ void CprogManage::newArea() { QTreeWidgetItem *curItem; QTreeWidgetItem *parentItem; QString QStr; int i,size,type,index; int max = 0,tmp; curItem = treeWidget->currentItem(); //当前被选中的项 if(curItem == (QTreeWidgetItem *)0) { QMessageBox::information(w, tr("提示"), tr("请在节目管理栏选定一个节目"),tr("确定")); return; } /* settings.beginGroup("screen"); int xLen = settings.value("width").toInt(); int yLen = settings.value("height").toInt(); settings.endGroup(); */ int xLen = Screen_Para.Base_Para.Width; int yLen = Screen_Para.Base_Para.Height; type = checkItemType(curItem); //该项目是哪种? if(type == SCREEN_PROPERTY) { QMessageBox::information(w, tr("提示"), tr("请在节目管理栏选定一个节目"),tr("确定")); return; } //找到该分区对应的节目的treeWidgetItem if(type == PROG_PROPERTY) parentItem = curItem; else if(type == AREA_PROPERTY) parentItem = curItem->parent(); else { parentItem = (curItem ->parent())->parent(); } QStr = (parentItem ->data(0,Qt::UserRole)).toString(); QStr = QStr + "/" + QString(tr("area")); settings.beginGroup(QStr); QStringList groups = settings.childGroups(); //area列表 size = groups.size(); if(size >= Card_Para.Max_Area_Num) { settings.endGroup(); QMessageBox::information(w, tr("提示"), tr("当前节目分区数达到上限!"),tr("确定")); return; } for(i = 0; i < size; i ++) { tmp = groups.at(i).toInt(); if(tmp > max) max=tmp; } max++; //检查是否有足够的Area index = w->screenArea->checkEnoughArea(); if(index <= 0) return; else index --; //初始化分区属性 settings.beginGroup(fixWidthNumber(max)); settings.setValue("subIndex", 0); //子项索引 settings.setValue("name", QString("new area")); settings.setValue("type", AREA_PROPERTY); settings.setValue("subType", AREA_PROPERTY); settings.setValue("setFlag", 0); //没有设过参数 settings.setValue("index", index); settings.setValue("x", size*(xLen / 20)); //该分区的起点x settings.setValue("y", size*(yLen / 20)); //该分区的起点y settings.setValue("width", xLen / 2); //该分区的宽度 settings.setValue("height", yLen / 2); //该分区的长度 settings.setValue("checkState", true); settings.endGroup(); settings.endGroup(); QTreeWidgetItem* item = new QTreeWidgetItem(parentItem,QStringList(QString::number(size + 1)+tr("分区"))); item->setData(0, Qt::UserRole, QVariant(QStr + "/" + fixWidthNumber(max))); item->setCheckState(0, Qt::Checked); QIcon icon = getTypeIcon(AREA_PROPERTY); item->setIcon(0,icon); //w->setCurSettingsStr(QStr + "/" + QString::number(max)); parentItem->addChild(item); /* treeWidget->setCurrentItem(item); saveCurItem(item); updateItemSubIndex(item); updateTextHead(item->parent()); //w->property->stackedWidget->setCurrentIndex(AREA_PROPERTY); //w->property->setSettingsToWidget(QStr + "/" + QString::number(max), AREA_PROPERTY); w->property->updateProperty(item); w->screenArea->updateShowArea(item);//w->getCurSettingsStr());//显示一个分区,该分区之前处于隐藏状态 */ //w->progManage->clickItem(item, 0); w->progManage->treeWidget->setCurrentItem(item); }
// program/01 void CprogManage::newProg() { int i,size,type; int max = 0,tmp; QTreeWidgetItem *parentItem,*curItem; curItem = treeWidget->currentItem(); //当前被选中的项 if(curItem == (QTreeWidgetItem *)0) { QMessageBox::information(w, tr("提示"), tr("请在节目管理栏选定一个屏幕"),tr("确定")); return; } type = checkItemType(curItem); //该项目是哪种? //找到该分区对应的节目的treeWidgetItem if(type == SCREEN_PROPERTY) parentItem = curItem; else if(type == PROG_PROPERTY) parentItem = curItem->parent(); else if(type == AREA_PROPERTY) parentItem = curItem->parent()->parent(); else { parentItem = (curItem ->parent())->parent()->parent(); } if(parentItem EQ (QTreeWidgetItem *)0) { ASSERT_FAILED(); QMessageBox::information(w, tr("提示"), tr("请在节目管理栏选定一个屏幕"),tr("确定")); return; } QString QStr = (parentItem ->data(0,Qt::UserRole)).toString(); QStr = QStr + "/program"; settings.beginGroup(QStr); //设置settings到program下面 QStringList groups = settings.childGroups(); //所有节目的列表 size = groups.size(); if(size >= MAX_PROG_NUM) { settings.endGroup(); QMessageBox::information(w, tr("提示"), tr("当前屏幕节目数达到上限!"),tr("确定")); return; } //qDebug("groups size = %d", size); for(i = 0; i < size; i ++) { tmp = groups.at(i).toInt(); if(tmp > max) max=tmp; } max++; //qDebug("new prog %d",max); settings.beginGroup(fixWidthNumber(max)); settings.setValue("subIndex", 0); //当前子分区 settings.setValue("name", QString("new prog")); settings.setValue("type", PROG_PROPERTY); settings.setValue("subType", 0); settings.setValue("setFlag", 0); //没有设过参数 //按日期定时 settings.setValue("dateTimerCheck", 0); settings.setValue("startYear", 2010); settings.setValue("startMonth", 1); settings.setValue("startDay", 1); settings.setValue("endYear", 2010); settings.setValue("endMonth", 1); settings.setValue("endDay", 1); //按星期定时 settings.setValue("weekTimerCheck", 0); settings.setValue("w0", 0); settings.setValue("w1", 0); settings.setValue("w2", 0); settings.setValue("w3", 0); settings.setValue("w4", 0); settings.setValue("w5", 0); settings.setValue("w6", 0); //按时间定时 settings.setValue("timeCheck", 0); settings.setValue("startHour", 0); settings.setValue("startMin", 0); settings.setValue("endHour", 0); settings.setValue("endMin", 0); //定长播放 settings.setValue("playMode", 0); settings.setValue("playTime", 60); settings.setValue("playCount", 1); //边框选择 settings.setValue("borderCheck", 0); settings.setValue("width", 1); settings.setValue("speed", 1); settings.setValue("style", 1); settings.setValue("color", 1); settings.setValue("checkState", true); //qDebug("progs size = %d", settings.childGroups().size()); settings.endGroup(); settings.endGroup(); QTreeWidgetItem* item = new QTreeWidgetItem(parentItem,QStringList(QString::number(size + 1)+tr("节目"))); item->setData(0, Qt::UserRole, QStr + "/" + fixWidthNumber(max)); item->setCheckState(0, Qt::Checked); QIcon icon = getTypeIcon(PROG_PROPERTY); item->setIcon(0,icon); //parentItem->addChild(item); //treeWidget->addTopLevelItem(item); //treeWidget->setCurrentItem(item); //saveCurItem(item); //当前点钟的 //w->progManage->clickItem(item, 0); w->progManage->treeWidget->setCurrentItem(item); /* updateTextHead(parentItem); w->property->updateProperty(item); w->screenArea->updateShowArea(item);// progSettingsInit(QStr); */ }
void CprogManage::newScreen() { //QTreeWidgetItem *curItem; //QTreeWidgetItem *parentItem; QString QStr; int i,size;//,type,index; int max = 0,tmp; if(verifyPSW() EQ 0) return; /* CinputPSWDialog *pswInput = new CinputPSWDialog(this); //pswInput->setOkButtonText(tr("确定")); pswInput->exec(); */ QStr = "screen";//QStr + "/" + QString(tr("area")); settings.beginGroup(QStr); QStringList groups = settings.childGroups(); //area列表 size = groups.size(); for(i = 0; i < size; i ++) { tmp = groups.at(i).toInt(); if(tmp > max) max=tmp; } max++; //初始化分区属性 settings.beginGroup(fixWidthNumber(max)); settings.setValue("screenIndex", 1);//value("screenIndex").toString() settings.setValue("checkState", true); settings.setValue("spaceWidth", 1); settings.setValue("dotWidth", 2); settings.endGroup(); settings.endGroup(); // QTreeWidgetItem* item = new QTreeWidgetItem(treeWidget,QStringList(QString::number(size + 1)+tr("屏幕"))); item->setData(0, Qt::UserRole, QVariant(QStr + "/" + fixWidthNumber(max))); item->setCheckState(0, Qt::Checked); QIcon icon = getTypeIcon(SCREEN_PROPERTY); item->setIcon(0,icon); treeWidget->addTopLevelItem(item); /*CMdiSubWindow * subWin =*/ _newScreen(QString::number(size + 1) + tr("屏幕"), 0, 0, DEF_SCN_WIDTH, DEF_SCN_HEIGHT,1, 2, DEF_SCN_COLOR); w->screenArea->screenItem = item; w->progManage->treeWidget->setCurrentItem(item); //--------------- QString str = w->screenArea->getCurrentScreenStr(); //当前屏幕str QDialog *facParaWin = new QDialog(this); QHBoxLayout *hLayout = new QHBoxLayout(facParaWin); facParaWin->setWindowTitle(tr("新建屏幕")); CcomTest *comTest = new CcomTest(facParaWin); CfacScreenProperty *facScreenProperty = new CfacScreenProperty(NEW_SCN, comTest, facParaWin); //facScreenProperty->setSettingsToWidget(str); hLayout->addWidget(facScreenProperty); hLayout->addWidget(comTest); facParaWin->setLayout(hLayout); facParaWin->setAttribute(Qt::WA_DeleteOnClose); connect(facScreenProperty->endButton, SIGNAL(clicked()), facParaWin, SLOT(close())); facParaWin->exec(); //-------------------- //判断参数是否被加载,没有被加载则删除已经生成的窗口 settings.beginGroup(str); settings.beginGroup("facPara"); int setFlag = settings.value("setFlag").toInt(); //是否加载设置了屏幕参数? settings.endGroup(); settings.endGroup(); if(setFlag EQ 0) //没有加载参数则删除上面建的屏幕 { w->progManage->_deleteItem(0); //删除上面创建的屏幕 } //读取屏幕参数 //getScreenParaFromSettings(QStr + "/" + QString::number(max), Screen_Para); /* else { //subWin->resize(width + 8, height + 34);//setGeometry(0,0, width +8, height + 34); subWin->setFixedSize(width + 8, height + 34); }*/ }