// // Backcall routine called at creation of the brow widget // Enable event, create nodeclasses and insert the root objects. // int CLogNav::init_brow_cb(FlowCtx* fctx, void* client_data) { int start_idx = 1; CLogNav* clognav = (CLogNav*)client_data; BrowCtx* ctx = (BrowCtx*)fctx; clognav->brow = new CLogNavBrow(ctx, (void*)clognav); clognav->brow->brow_setup(); clognav->brow->create_nodeclasses(); clognav->get_files(); clognav->read(&start_idx, 1); // View last items brow_tObject last; int sts; sts = brow_GetLast(clognav->brow->ctx, &last); if (ODD(sts)) brow_CenterObject(clognav->brow->ctx, last, 0.9); return 1; }
void MsgList::remove_oldest() { brow_tObject last; brow_GetLast( brow->ctx, &last); brow_DeleteNode( brow->ctx, last); }
void CoLogWNav::show( char categories[][20], char *item) { brow_SetNodraw( brow->ctx); CoLog::dget( categories, item, item_cb, this); brow_ResetNodraw( brow->ctx); brow_Redraw( brow->ctx, 0); // View last items brow_tObject last; int sts; sts = brow_GetLast( brow->ctx, &last); if ( ODD(sts)) brow_CenterObject( brow->ctx, last, 0.9); }
// // Callbacks from brow // int CLogNav::brow_cb(FlowCtx* ctx, flow_tEvent event) { CLogNav* clognav; ItemMsg* item; if (event->event == flow_eEvent_ObjectDeleted) { brow_GetUserData(event->object.object, (void**)&item); delete item; return 1; } brow_GetCtxUserData((BrowCtx*)ctx, (void**)&clognav); switch (event->event) { case flow_eEvent_Key_Up: { brow_tNode* node_list; int node_count; brow_tObject object; int sts; brow_GetSelectedNodes(clognav->brow->ctx, &node_list, &node_count); if (!node_count) { sts = brow_GetLastVisible(clognav->brow->ctx, &object); if (EVEN(sts)) return 1; } else { if (!brow_IsVisible( clognav->brow->ctx, node_list[0], flow_eVisible_Partial)) { sts = brow_GetLastVisible(clognav->brow->ctx, &object); if (EVEN(sts)) return 1; } else { sts = brow_GetPrevious(clognav->brow->ctx, node_list[0], &object); if (EVEN(sts)) { sts = brow_GetLast(clognav->brow->ctx, &object); if (EVEN(sts)) { if (node_count) free(node_list); return 1; } } } } brow_SelectClear(clognav->brow->ctx); brow_SetInverse(object, 1); brow_SelectInsert(clognav->brow->ctx, object); if (!brow_IsVisible(clognav->brow->ctx, object, flow_eVisible_Full)) brow_CenterObject(clognav->brow->ctx, object, 0.25); if (node_count) free(node_list); break; } case flow_eEvent_Key_Down: { brow_tNode* node_list; int node_count; brow_tObject object; int sts; brow_GetSelectedNodes(clognav->brow->ctx, &node_list, &node_count); if (!node_count) { sts = brow_GetFirstVisible(clognav->brow->ctx, &object); if (EVEN(sts)) return 1; } else { if (!brow_IsVisible( clognav->brow->ctx, node_list[0], flow_eVisible_Partial)) { sts = brow_GetFirstVisible(clognav->brow->ctx, &object); if (EVEN(sts)) return 1; } else { sts = brow_GetNext(clognav->brow->ctx, node_list[0], &object); if (EVEN(sts)) { sts = brow_GetFirst(clognav->brow->ctx, &object); if (EVEN(sts)) { if (node_count) free(node_list); return 1; } } } } brow_SelectClear(clognav->brow->ctx); brow_SetInverse(object, 1); brow_SelectInsert(clognav->brow->ctx, object); if (!brow_IsVisible(clognav->brow->ctx, object, flow_eVisible_Full)) brow_CenterObject(clognav->brow->ctx, object, 0.75); if (node_count) free(node_list); break; } case flow_eEvent_Key_PageDown: { brow_Page(clognav->brow->ctx, 0.9); break; } case flow_eEvent_Key_PageUp: { brow_Page(clognav->brow->ctx, -0.9); break; } case flow_eEvent_ScrollDown: { brow_Page(clognav->brow->ctx, 0.1); break; } case flow_eEvent_ScrollUp: { brow_Page(clognav->brow->ctx, -0.1); break; } case flow_eEvent_SelectClear: brow_ResetSelectInverse(clognav->brow->ctx); break; case flow_eEvent_MB1Click: // Select switch (event->object.object_type) { case flow_eObjectType_Node: if (brow_FindSelectedObject(clognav->brow->ctx, event->object.object)) { brow_SelectClear(clognav->brow->ctx); } else { brow_SelectClear(clognav->brow->ctx); brow_SetInverse(event->object.object, 1); brow_SelectInsert(clognav->brow->ctx, event->object.object); } break; default: brow_SelectClear(clognav->brow->ctx); } break; case flow_eEvent_MB3Down: { brow_SetClickSensitivity(clognav->brow->ctx, flow_mSensitivity_MB3Press); break; } default:; } return 1; }
// // Callbacks from brow // static int subgraphs_brow_cb( FlowCtx *ctx, flow_tEvent event) { SubGraphs *subgraphs; ItemSubGraph *item; if ( event->event == flow_eEvent_ObjectDeleted) { brow_GetUserData( event->object.object, (void **)&item); delete item; return 1; } brow_GetCtxUserData( (BrowCtx *)ctx, (void **) &subgraphs); subgraphs->message( ' ', null_str); switch ( event->event) { case flow_eEvent_Key_Up: { brow_tNode *node_list; int node_count; brow_tObject object; int sts; brow_GetSelectedNodes( subgraphs->brow->ctx, &node_list, &node_count); if ( !node_count) { sts = brow_GetLast( subgraphs->brow->ctx, &object); if ( EVEN(sts)) return 1; } else { sts = brow_GetPrevious( subgraphs->brow->ctx, node_list[0], &object); if ( EVEN(sts)) { sts = brow_GetLast( subgraphs->brow->ctx, &object); if ( EVEN(sts)) { if ( node_count) free( node_list); return 1; } } } brow_SelectClear( subgraphs->brow->ctx); brow_SetInverse( object, 1); brow_SelectInsert( subgraphs->brow->ctx, object); if ( !brow_IsVisible( subgraphs->brow->ctx, object, flow_eVisible_Full)) brow_CenterObject( subgraphs->brow->ctx, object, 0.25); if ( node_count) free( node_list); break; } case flow_eEvent_Key_Down: { brow_tNode *node_list; int node_count; brow_tObject object; int sts; brow_GetSelectedNodes( subgraphs->brow->ctx, &node_list, &node_count); if ( !node_count) { sts = brow_GetFirst( subgraphs->brow->ctx, &object); if ( EVEN(sts)) return 1; } else { sts = brow_GetNext( subgraphs->brow->ctx, node_list[0], &object); if ( EVEN(sts)) { sts = brow_GetFirst( subgraphs->brow->ctx, &object); if ( EVEN(sts)) { if ( node_count) free( node_list); return 1; } } } brow_SelectClear( subgraphs->brow->ctx); brow_SetInverse( object, 1); brow_SelectInsert( subgraphs->brow->ctx, object); if ( !brow_IsVisible( subgraphs->brow->ctx, object, flow_eVisible_Full)) brow_CenterObject( subgraphs->brow->ctx, object, 0.75); if ( node_count) free( node_list); break; } case flow_eEvent_SelectClear: brow_ResetSelectInverse( subgraphs->brow->ctx); break; case flow_eEvent_MB1Click: // Select switch ( event->object.object_type) { case flow_eObjectType_Node: if ( brow_FindSelectedObject( subgraphs->brow->ctx, event->object.object)) { brow_SelectClear( subgraphs->brow->ctx); } else { brow_SelectClear( subgraphs->brow->ctx); brow_SetInverse( event->object.object, 1); brow_SelectInsert( subgraphs->brow->ctx, event->object.object); } break; default: brow_SelectClear( subgraphs->brow->ctx); } break; case flow_eEvent_Key_Return: case flow_eEvent_Key_Right: { brow_tNode *node_list; int node_count; brow_GetSelectedNodes( subgraphs->brow->ctx, &node_list, &node_count); if ( !node_count) break; brow_GetUserData( node_list[0], (void **)&item); free( node_list); switch( item->type) { case subgraphs_eItemType_SubGraph: break; default: ; } break; } case flow_eEvent_Key_PF4: case flow_eEvent_Key_Left: { brow_tNode *node_list; int node_count; brow_GetSelectedNodes( subgraphs->brow->ctx, &node_list, &node_count); if ( !node_count) break; if ( !node_count) break; brow_GetUserData( node_list[0], (void **)&item); switch( item->type) { case subgraphs_eItemType_SubGraph: break; default: ; } brow_SelectClear( subgraphs->brow->ctx); brow_SetInverse( node_list[0], 1); brow_SelectInsert( subgraphs->brow->ctx, node_list[0]); if ( !brow_IsVisible( subgraphs->brow->ctx, node_list[0], flow_eVisible_Full)) brow_CenterObject( subgraphs->brow->ctx, node_list[0], 0.25); free( node_list); break; } case flow_eEvent_MB1DoubleClick: switch ( event->object.object_type) { case flow_eObjectType_Node: brow_GetUserData( event->object.object, (void **)&item); switch( item->type) { case subgraphs_eItemType_SubGraph: subgraphs->edit_attributes( item->nodeclass); break; default: ; } break; default: ; } break; default: ; } return 1; }