extern char *GetWndFont( a_window *wnd ) { if( WndHasClass( wnd ) ) { if( WndFontInfo[WndClass( wnd )] != NULL ) { return( WndFontInfo[WndClass( wnd )] ); } } return( WndFontInfo[WND_ALL] ); }
extern void WndResizeHook( a_window *wnd ) { gui_rect rect; if( WndIsMaximized( wnd ) || WndIsMinimized( wnd ) ) return; if( !WndHasClass( wnd ) ) return; WndGetRect( wnd, &rect ); WndRectToPos( &rect, &WndPosition[WndClass( wnd )], WndMainClientSize() ); }
extern void WndFontHook( a_window *wnd ) { char *font; if( !WndHasClass( wnd ) ) return; font = WndGetFontInfo( wnd ); if( font != NULL ) { SetFont( WndClass( wnd ), font ); } }
void WndMainResized( void ) { a_window *wnd; gui_rect rect; if( _IsOff( SW_DETACHABLE_WINDOWS ) ) { WndGetRect( WndMain, &WndMainRect ); for( wnd = WndNext( NULL ); wnd != NULL; wnd = WndNext( wnd ) ) { if( !WndHasClass( wnd ) ) continue; WndPosToRect( &WndPosition[WndClass( wnd )], &rect, WndMainClientSize() ); WndResizeWindow( wnd, &rect ); } } }
void ProcPendingPaint( void ) { gui_colour_set *set; a_window *wnd; if( _IsOff( SW_PENDING_REPAINT ) ) return; _SwitchOff( SW_PENDING_REPAINT ); for( wnd = WndNext( NULL ); wnd != NULL; wnd = WndNext( wnd ) ) { if( WndHasClass( wnd ) ) { set = WndClassColour[WndClass( wnd )]; } else { set = NULL; } if( set == NULL ) { set = WndClassColour[WND_ALL]; } if( set == NULL ) { set = WndColours; } WndSetFontInfo( wnd, GetWndFont( wnd ) ); WndSetColours( wnd, WndNumColours, set ); } }
void ConfigDisp( void ) { a_window *wnd, *scan; char buff[20]; char buff2[20]; a_window *head, *next; int h; wnd_class_wv wndclass; gui_rect rect; ReqEOC(); GetCmdEntry( WndNameTab, WND_ALL, buff ); GetCmdEntry( DispOptions, CLOSE, buff2 ); Format( TxtBuff, "%s %s /%s", GetCmdName( CMD_DISPLAY ), buff, buff2 ); WndDlgTxt( TxtBuff ); if( WndHaveStatusWindow() ) { GetCmdEntry( MiscTab, MISC_STATUS, buff ); Format( TxtBuff, "%s %s", GetCmdName( CMD_DISPLAY ), buff ); WndDlgTxt( TxtBuff ); } if( WndHaveToolBar() ) { h = WndToolHeight(); GetCmdEntry( MiscTab, MISC_TOOL, buff ); GetCmdEntry( DispOptions, WndToolFixed() ? FIXED : FLOATING, buff2 ); Format( TxtBuff, "%s %s /%s %d", GetCmdName( CMD_DISPLAY ), buff, buff2, h ); WndDlgTxt( TxtBuff ); } for( wndclass = 0; wndclass < WND_NUM_CLASSES; ++wndclass ) { if( wndclass == WND_ALL ) continue; if( WndFindClass( NULL, wndclass ) != NULL ) continue; WndPosToRect( &WndPosition[wndclass], &rect, &WndScreen ); if( rect.width == 0 ) continue; if( rect.height == 0 ) continue; PrintPosition( CLOSE, wndclass, &rect, buff, buff2 ); } head = WndNext( NULL ); if( head == NULL ) return; // traverse in reverse order so that windows get created in correct order for( wnd = head; (next = WndNext( wnd )) != NULL; wnd = next ) ; for( ;; ) { if( WndHasClass( wnd ) ) { wndclass = WndClass( wnd ); switch( wndclass ) { case WND_ALL: break; case WND_BINARY: case WND_FILE: case WND_MEMORY: WndResizeHook( wnd ); WndPosToRect( &WndPosition[wndclass], &rect, &WndScreen ); PrintPosition( CLOSE, wndclass, &rect, buff, buff2 ); break; case WND_VARIABLE: case WND_TMPFILE: break; default: WndResizeHook( wnd ); WndPosToRect( &WndPosition[wndclass], &rect, &WndScreen ); PrintPosition( OPEN, wndclass, &rect, buff, buff2 ); break; } } if( wnd == head ) break; for( scan = head; (next = WndNext( scan )) != wnd; scan = next ) ; wnd = scan; } }
static void ProcSize( wnd_class_wv wndclass ) { gui_rect size; disp_optn optn; a_window *wnd; a_window *next; gui_coord min; bool coord_specified; gui_rect def_rect; optn = GetOption(); if( optn == FLOATING || optn == FIXED ) { Error( ERR_LOC, LIT_ENG( ERR_BAD_OPTION ), GetCmdName( CMD_DISPLAY ) ); } size.x = OptExpr( -1 ); size.y = -1; size.width = -1; size.height = -1; if( CurrToken == T_COMMA ) { Scan(); size.y = OptExpr( -1 ); if( CurrToken == T_COMMA ) { Scan(); size.width = OptExpr( -1 ); if( CurrToken == T_COMMA ) { Scan(); size.height = OptExpr( -1 ); } } } ReqEOC(); GUIGetMinSize( &min ); if( size.x != -1 || size.y != -1 || size.width != -1 || size.height != -1 ) { coord_specified = true; } else { coord_specified = false; } WndPosToRect( &WndPosition[wndclass], &def_rect, &WndScreen ); size.x = range( size.x, 0, WndScreen.x, def_rect.x ); size.y = range( size.y, 0, WndScreen.y, def_rect.y ); if( size.x + size.width > WndScreen.x ) size.width = WndScreen.x - size.x; if( size.y + size.height > WndScreen.y ) size.height = WndScreen.y - size.y; size.width = range( size.width, min.x, WndScreen.x, def_rect.width ); size.height = range( size.height, min.y, WndScreen.y, def_rect.height ); if( coord_specified ) { WndRectToPos( &size, &WndPosition[wndclass], &WndScreen ); } if( wndclass == WND_CURRENT ) { wnd = WndFindActive(); } else { wnd = WndFindClass( NULL, wndclass ); } switch( optn ) { case OPEN: case NEW: if( optn == NEW || wnd == NULL ) { WndOpenTab[wndclass](); } else { WndRestoreToFront( wnd ); WndPosToRect( &WndPosition[wndclass], &size, WndMainClientSize() ); WndResizeWindow( wnd, &size ); } break; case CLOSE: if( wndclass == WND_ALL ) { for( wnd = WndNext( NULL ); wnd != NULL; wnd = next ) { next = WndNext( wnd ); if( WndHasClass( wnd ) ) WndClose( wnd ); } } else { if( wnd != NULL ) { WndClose( wnd ); } } break; case MINIMIZE: if( wnd == NULL ) wnd = WndOpenTab[wndclass](); WndMinimizeWindow( wnd ); break; case MAXIMIZE: if( wnd == NULL ) wnd = WndOpenTab[wndclass](); WndMaximizeWindow( wnd ); break; case RESTORE: if( wnd == NULL ) wnd = WndOpenTab[wndclass](); WndRestoreWindow( wnd ); break; } }