📄 dining_gui.c
字号:
#include "dining_gui.h"extern "C" {# include <stdlib.h>};Dining::Dining(QApplication *a,int nr) : QWidget( 0,"guiDiner" ), dining(nr){ int i; app = a; eating = new _state[nr]; for( i=0;i<nr;i++ ) eating[i] = Sleeping;}Dining::~Dining(){}voidDining::paintEvent(QPaintEvent *p_ev){ int i; for( i=0;i<dining::nr();i++ ) { paintDish( i ); paintFork( i ); }}voidDining::showForks(int p_nr){ int lfork,rfork; lfork = p_nr-1 >= 0 ? p_nr-1 : nr()-1; rfork = lfork+1 >= nr() ? 0 : lfork+1; paintFork(lfork); paintFork(rfork);}boolDining::get_forks(int p_no){ bool rv; rv = dining::get_forks(p_no); eating[p_no] = ( rv ? Eating : Looking ); paintDish(p_no); showForks(p_no); return rv;}voidDining::put_forks(int p_nr){ dining::put_forks(p_nr); eating[p_nr] = Sleeping; paintDish(p_nr); showForks(p_nr);}voidDining::finished(int p_nr){ eating[p_nr] = Gone; dining::finished(p_nr); paintDish(p_nr); showForks(p_nr);}voidDining::getvalues(int no,double& degr,int& w,int& h, int& nr){ nr = dining::nr(); h = height()/nr; w = width()/nr; degr = 360/nr;}voidDining::paintDish(int p_no){ QPainter p; double degrees; int w,h,nr,r; getvalues(p_no,degrees,w,h,nr); r = ( h>w ? w:h ); gui_access.lock(); p.begin( this ); p.translate( width()/2,height()/2 ); p.rotate( (degrees*p_no)+(degrees/w*r) ); switch( eating[p_no] ) { case Eating: p.setPen( black ); break; case Sleeping: p.setPen( yellow ); break; case Looking: p.setPen( blue ); break; default: p.setPen( colorGroup().color(QColorGroup::Background) ); } p.drawArc(r,r,r,r,0,360*16); p.end(); gui_access.unlock();}voidDining::paintFork(int p_no){ QPainter p; double degrees; int w,h,nr,r; getvalues(p_no,degrees,w,h,nr); r = ( h>w ? w:h ); gui_access.lock(); p.begin( this ); p.translate( width()/2,height()/2 ); p.rotate( (degrees*p_no)+(degrees/2) ); if ( dining::isLocked(p_no) ) p.eraseRect(0,3*h/2,5,h); else p.drawRect(0,3*h/2,5,h); p.end(); if ( app ) app->wakeUpGuiThread(); gui_access.unlock();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -