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;
}
Example #2
0
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;
}
Example #3
0
//一个新的显示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);
    */
}
Example #4
0
//一个新的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);
}
Example #5
0
// 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);
*/
}
Example #6
0
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);
    }*/

}