static bool OpenStatusWindow( const char *title ) /***********************************************/ { gui_text_metrics metrics; // int i; gui_rect rect; // for( i = STAT_BLANK; i < sizeof( Messages ) / sizeof( Messages[0] ); ++i ) { // Messages[i] = GetVariableStrVal( Messages[i] ); // } GUIGetDlgTextMetrics( &metrics ); CharSize.x = metrics.avg.x; CharSize.y = 5 * metrics.avg.y / 4; GUITruncToPixel( &CharSize ); StatusInfo.parent = MainWnd; StatusInfo.title = GUIStrDup( title, NULL ); StatusInfo.rect.width = STATUS_WIDTH * CharSize.x; StatusInfo.rect.height = STATUS_HEIGHT * CharSize.y; GUIGetClientRect( MainWnd, &rect ); if( GUIIsGUI() ) { StatusInfo.rect.y = BitMapBottom; } else { StatusInfo.rect.y = (GUIScale.y - StatusInfo.rect.height) / 2; } if( StatusInfo.rect.y > rect.height - StatusInfo.rect.height ) { StatusInfo.rect.y = rect.height - StatusInfo.rect.height; } StatusInfo.rect.x = (GUIScale.x - StatusInfo.rect.width) / 2; StatusBarLen = 0; StatusWnd = GUICreateWindow( &StatusInfo ); GUIGetClientRect( StatusWnd, &StatusRect ); Cancel.parent = StatusWnd; Cancel.text = LIT( Cancel ); Cancel.rect.height = 7 * CharSize.y / 4; Cancel.rect.width = (strlen( Cancel.text ) + 4) * CharSize.x; Cancel.rect.x = (StatusRect.width - Cancel.rect.width) / 2; Cancel.rect.y = CANNERY_ROW * CharSize.y; StatusBarRect.x = BAR_INDENT * CharSize.x; StatusBarRect.width = StatusRect.width - 2 * BAR_INDENT * CharSize.x; StatusBarRect.y = STATUS_ROW * CharSize.y; StatusBarRect.height = CharSize.y; #ifndef _UI StatusBarRect.y -= CharSize.y / 2; StatusBarRect.height += CharSize.y; #endif StatusBarLen = StatusBarRect.width / CharSize.x; if( !GUIAddControl( &Cancel, &ToolPlain, &ToolStandout ) ) { SetupError( "IDS_CONTROLERROR" ); return( false ); } return( true ); }
static bool CreateFloatingToolbar( gui_window *wnd, gui_ord height ) { gui_text_metrics metrics; int i; int loc; gui_rect client; gui_rect size; toolbarinfo *tbar; gui_colour_set *plain; gui_colour_set *standout; tbar = wnd->tbinfo; tbar->fixed = false; GUIGetTextMetrics( wnd, &metrics ); if( height == 0 ) { height = 2 * metrics.avg.y; } height += 2 * metrics.avg.y; GUIGetClientRect( wnd, &size ); FloatingToolbar.parent = wnd; FloatingToolbar.title = LIT( Floating_Toolbar ); FloatingToolbar.menu->label = LIT( XFix_Toolbar ); FloatingToolbar.menu->hinttext = LIT( Fix_Toolbar_Hint ); FloatingToolbar.rect.height = height; FloatingToolbar.rect.width = size.width; FloatingToolbar.num_attrs = GUIGetNumWindowColours( wnd ); FloatingToolbar.colours = GUIGetWindowColours( wnd ); FloatingToolbar.colours[GUI_FRAME_INACTIVE] = FloatingToolbar.colours[GUI_FRAME_ACTIVE]; tbar->floattoolbar = GUICreateWindow( &FloatingToolbar ); GUIMemFree( FloatingToolbar.colours ); FloatingToolbar.colours = NULL; Button.parent = tbar->floattoolbar; loc = 0; if( tbar->has_colours ) { plain = &tbar->plain; standout = &tbar->standout; } else { plain = NULL; standout = NULL; } for( i = 0; i < tbar->num_items; i++ ) { Button.text = tbar->info[i].label; Button.id = tbar->info[i].id; Button.rect.x = loc; Button.rect.width = ( strlen( Button.text ) + 4 ) * metrics.avg.x; Button.rect.height = metrics.avg.y * 2; loc += Button.rect.width; if( !GUIAddControl( &Button, plain, standout ) ) { GUIDestroyWnd( tbar->floattoolbar ); return( false ); } } GUIGetClientRect( tbar->floattoolbar, &client ); GUIGetRect( tbar->floattoolbar, &size ); size.width += loc - client.width; GUIResizeWindow( tbar->floattoolbar, &size ); GUIShowWindow( tbar->floattoolbar ); return( true ); }