示例#1
0
//add icons according to the icon list mode
void addIconsByListMode(const ICONLIST_MODE iListMode)
{
    addIcon( iconID_pen );//normal
    
    //to keep the icons order.
    if( ICONLIST_UNFLDSIZE==iListMode )
    {
        addIcons(s_PenList[LIST_INDEX_ICONLOW], ARRAYSIZE(s_PenList[LIST_INDEX_ICONLOW]));
    }
    else
    {
        addIcon( getIconfromPenSize(getPenSize(), LIST_INDEX_ICON) );  
    }
        
    if( ICONLIST_UNFLDCOLOR==iListMode )
    {
        addIcons(s_ColorList[LIST_INDEX_ICONLOW], ARRAYSIZE(s_ColorList[LIST_INDEX_ICONLOW]));
    }
    else
    {
        addIcon( getIconfromPenColor(getPenColor(), LIST_INDEX_ICON) );
    }
    
    addIcons(s_InitIcons,ARRAYSIZE(s_InitIcons));
    //always disable keyboard and tagging currently
    disableIcon(iconID_keyboard);
    disableIcon(iconID_tagging);
}
void SelectionRectGraphicsWidget::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget /*= 0 */ )
{
  QColor basecolor(getBaseColor());

  QPen pen(getPenColor());
  pen.setWidth(0);
  painter->setPen(pen);
  basecolor.setAlphaF(0.2);
  painter->setBrush(basecolor);

  painter->drawRect(mapRectFromParent(geometry()));
}
示例#3
0
//draw icons and set status by current mode.   
void drawIconsByMode(int iTotalPage)
{
    // freeze toolbar 
    tbDisableUpdate(toolbarChannel, ER_SCRIBBLE_UA_ID);
    
    // clear the toolbar
    tbClearIconSet(toolbarChannel, ER_SCRIBBLE_UA_ID);
    switch ( getOperationMode() )
    {
        case MODE_INVALID:
            addIconsByListMode(ICONS_FLDALL);
            break;
        case MODE_DRAW:
            addIconsByListMode(ICONS_FLDALL);
            activeIcon( iconID_pen );           
            break;
        case MODE_SELSIZE:
            addIconsByListMode(ICONLIST_UNFLDSIZE);
            activeIcon( getIconfromPenSize(getPenSize(), LIST_INDEX_ICONLOW) ); 
            activeIcon( iconID_pen );          
            break;
        case MODE_SELCOLOR:
            addIconsByListMode(ICONLIST_UNFLDCOLOR);
            activeIcon( getIconfromPenColor(getPenColor(), LIST_INDEX_ICONLOW) );
            activeIcon( iconID_pen );           
            break;
        case MODE_ERASE:
            addIconsByListMode(ICONS_FLDALL);
            activeIcon( iconID_eraseline );           
            break;
        case MODE_DELPAGE:
            addIconsByListMode(ICONS_FLDALL);
            activeIcon( iconID_trashcan );           
            break;
        default:
            SB_ERRORPRINTF("Error Mode[%d]\n", getOperationMode());
            return;
    }
    if( iTotalPage<=1 )
    {
        disableIcon(iconID_trashcan);
    }
    
    // redraw toolbar now
    tbEnableUpdate(toolbarChannel, ER_SCRIBBLE_UA_ID);
}
示例#4
0
/* make_html_label:
 * Return non-zero if problem parsing HTML. In this case, use object name.
 */
int make_html_label(graph_t *g, textlabel_t * lp, void *obj)
{
    int rv;
    int wd2, ht2;
    box box;
    htmllabel_t *lbl;
    htmlenv_t env;

    env.obj = obj;
    switch (agobjkind(obj)) {
    case AGGRAPH:
	env.g = ((Agraph_t *) obj)->root;
	break;
    case AGNODE:
	env.g = ((Agnode_t *) obj)->graph;
	break;
    case AGEDGE:
	env.g = ((Agedge_t *) obj)->head->graph;
	break;
    }
    env.finfo.size = lp->fontsize;
    env.finfo.name = lp->fontname;
    env.finfo.color = lp->fontcolor;

    lbl = parseHTML(lp->text, &rv, GD_charset(env.g));
    if (!lbl) {
	/* Parse of label failed; revert to simple text label */
	agxbuf xb;
	unsigned char buf[SMALLBUF];
	agxbinit(&xb, SMALLBUF, buf);
	lp->html = FALSE;
	lp->text = strdup(nameOf(obj, &xb));
	size_label(env.g, lp);
	agxbfree(&xb);
	return rv;
    }

    if (lbl->kind == HTML_TBL) {
	lbl->u.tbl->data.pencolor = getPenColor(obj);
	rv |= size_html_tbl(g, lbl->u.tbl, NULL, &env);
	wd2 = (lbl->u.tbl->data.box.UR.x + 1) / 2;
	ht2 = (lbl->u.tbl->data.box.UR.y + 1) / 2;
	box = boxof(-wd2, -ht2, wd2, ht2);
	pos_html_tbl(lbl->u.tbl, box, BOTTOM | RIGHT | TOP | LEFT);
	lp->dimen.x = box.UR.x - box.LL.x;
	lp->dimen.y = box.UR.y - box.LL.y;
    } else {
	rv |= size_html_txt(g, lbl->u.txt, &env);
	wd2 = (lbl->u.txt->box.UR.x + 1) / 2;
	ht2 = (lbl->u.txt->box.UR.y + 1) / 2;
	box = boxof(-wd2, -ht2, wd2, ht2);
	lbl->u.txt->box = box;
	lp->dimen.x = box.UR.x - box.LL.x;
	lp->dimen.y = box.UR.y - box.LL.y;
    }

    lp->u.html = lbl;

    /* If the label is a table, replace label text because this may
     * be used for the title and alt fields in image maps.
     */
    if (lbl->kind == HTML_TBL) {
	free (lp->text);
	lp->text = strdup ("<TABLE>");
    }

    return rv;
}
示例#5
0
/* make_html_label:
 * Return non-zero if problem parsing HTML. In this case, use object name.
 */
int make_html_label(void *obj, textlabel_t * lp)
{
    int rv;
    double wd2, ht2;
    boxf box;
    graph_t *g;
    htmllabel_t *lbl;
    htmlenv_t env;
    char *s;

    env.obj = obj;
    switch (agobjkind(obj)) {
#ifdef WITH_CGRAPH
    case AGRAPH:
#else
    case AGGRAPH:
#endif
        env.g = ((Agraph_t *) obj)->root;
        break;
    case AGNODE:
        env.g = agraphof(((Agnode_t *) obj));
        break;
    case AGEDGE:
        env.g = agraphof(aghead (((Agedge_t *) obj)));
        break;
    }
    g = env.g->root;

    env.finfo.size = lp->fontsize;
    env.finfo.name = lp->fontname;
    env.finfo.color = lp->fontcolor;
    lbl = parseHTML(lp->text, &rv, GD_charset(env.g));
    if (!lbl) {
	/* Parse of label failed; revert to simple text label */
	agxbuf xb;
	unsigned char buf[SMALLBUF];
	agxbinit(&xb, SMALLBUF, buf);
	lp->html = FALSE;
	lp->text = strdup(nameOf(obj, &xb));
	switch (lp->charset) {
	case CHAR_LATIN1:
	    s = latin1ToUTF8(lp->text);
	    break;
	default: /* UTF8 */
	    s = htmlEntityUTF8(lp->text, env.g);
	    break;
	}
	free(lp->text);
	lp->text = s;
	make_simple_label(g, lp);
	agxbfree(&xb);
	return rv;
    }

    if (lbl->kind == HTML_TBL) {
	if (! lbl->u.tbl->data.pencolor && getPenColor(obj))
	    lbl->u.tbl->data.pencolor = strdup(getPenColor(obj));
	rv |= size_html_tbl(g, lbl->u.tbl, NULL, &env);
	wd2 = (lbl->u.tbl->data.box.UR.x + 1) / 2;
	ht2 = (lbl->u.tbl->data.box.UR.y + 1) / 2;
	box = boxfof(-wd2, -ht2, wd2, ht2);
	pos_html_tbl(lbl->u.tbl, box, BOTTOM | RIGHT | TOP | LEFT);
	lp->dimen.x = box.UR.x - box.LL.x;
	lp->dimen.y = box.UR.y - box.LL.y;
    } else {
	rv |= size_html_txt(g, lbl->u.txt, &env);
	wd2 = (lbl->u.txt->box.UR.x + 1) / 2;
	ht2 = (lbl->u.txt->box.UR.y + 1) / 2;
	box = boxfof(-wd2, -ht2, wd2, ht2);
	lbl->u.txt->box = box;
	lp->dimen.x = box.UR.x - box.LL.x;
	lp->dimen.y = box.UR.y - box.LL.y;
    }

    lp->u.html = lbl;

    /* If the label is a table, replace label text because this may
     * be used for the title and alt fields in image maps.
     */
    if (lbl->kind == HTML_TBL) {
	free (lp->text);
	lp->text = strdup ("<TABLE>");
    }

    return rv;
}
示例#6
0
void toolbar_key_selected(int iconID, int iconState,PScribbleUICtx pScribbleUICtx)
{
    if( iconState_grey==iconState )
    {
        return;//donothing.
    }
    
    SB_IPCPRINTF("\n====iconID=%d[mode=%d,pensize=%d,color=%d]\n",
                 iconID,getOperationMode(),getPenSize(),getPenColor());
  
    gboolean bNeedFlushWithFullQlt=FALSE;
    //need full update when return from erase mode.
    if( getOperationMode()== MODE_ERASE)
    {
        //every erase stroke ,we do it, so it's useless
        //core_redrawBgAndStrks(pScribbleUICtx);
        bNeedFlushWithFullQlt=TRUE;
    }		
    //we should add deal to pageup/pagedown
    switch (iconID)
    {
        case iconID_pen:
            //we switch by whether or not user is drawing
            if( !toolbar_is_drawing() ) 
            {
                setOperationMode(MODE_DRAW);
            }
            else 
            {
                setOperationMode(MODE_INVALID);
            } 
            break;
        case iconID_pen1pixel:
        case iconID_pen3pixel:
        case iconID_pen5pixel:
        case iconID_pen7pixel:
            //enter select mode
            setOperationMode(MODE_SELSIZE);
            break;
        case iconID_pen1pixelLow:
        case iconID_pen3pixelLow:
        case iconID_pen5pixelLow:
        case iconID_pen7pixelLow:
            //confirm the select                
            setPenSize(getPenSizefromIcon(iconID));
            setOperationMode(MODE_DRAW);
            break;
        case iconID_penwhite://WHITE
        case iconID_penlightgrey://LIGHT_GRAY
        case iconID_pendarkgrey://DARK_GRAY
        case iconID_penblack://BLACK
            //enter select mode
            setOperationMode(MODE_SELCOLOR);
            break;
        case iconID_penwhiteLow://WHITE
        case iconID_penlightgreyLow://LIGHT_GRAY
        case iconID_pendarkgreyLow://DARK_GRAY
        case iconID_penblackLow://BLACK
            //confirm the select                
            setPenColor(getPenColorfromIcon(iconID));
            setOperationMode(MODE_DRAW);
            break;
        case iconID_eraseline:
            if( MODE_ERASE==getOperationMode())
            {
                setOperationMode(MODE_DRAW);
            }
            else
            {
                setOperationMode(MODE_ERASE);
            }             
            break;
        case iconID_trashcan://delete page
            if(MODE_DELPAGE==getOperationMode())
            {                
                setOperationMode(MODE_DRAW);
                if(ispagedel_confirmed)
                {
		            //delete page
                    delOnepage(pScribbleUICtx);   
                    ispagedel_confirmed=FALSE;                    
                    return;//tool bar will be updated when jumping
                }  
                ispagedel_confirmed=FALSE;                  
            }
            else
            {
                SB_IPCPRINTF("enter MODE_DELPAGE\n");
                setOperationMode(MODE_DELPAGE);
                ispagedel_confirmed=FALSE;
            }
            break;
        case iconID_npage:
            addOnepage(pScribbleUICtx);
            return;//tool bar will be updated when jumping
        default:
            SB_IPCPRINTF("Unknown iconID [%d]\n", iconID);
            return;
    }
    
    drawIconsByMode(getTotalPage(&pScribbleUICtx->fileManager));
    //flush the pixmap to gdk_buffer,but now every stroke is flush,so it's useless.
    //flushPixMap(pScribbleUICtx);
    if(bNeedFlushWithFullQlt)
    {
        display_update_request_screen_refresh
                (MAIN_WINDOW_EXPOSE_LEVEL,(gpointer)dmQFull);
    }
    else
    {
        display_update_request_screen_refresh
                (MAIN_WINDOW_EXPOSE_LEVEL,(gpointer)dmQTyping);
    }
    SB_IPCPRINTF("\n===end===[mode=%d,pensize=%d,color=%d]\n",
                 getOperationMode(),getPenSize(),getPenColor());
    return;
}