flu_choice_group.cpp
来自「ncbi源码」· C++ 代码 · 共 171 行
CPP
171 行
/* * =========================================================================== * PRODUCTION $Log: Flu_Choice_Group.cpp,v $ * PRODUCTION Revision 1000.1 2004/06/01 21:05:34 gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2 * PRODUCTION * =========================================================================== *//* * These files were imported into NCBI's CVS directly from FLU version 2.9.1. * Modifications to the source are listed below. * * ========================================================================== * $Log: Flu_Choice_Group.cpp,v $ * Revision 1000.1 2004/06/01 21:05:34 gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2 * * Revision 1.2 2004/05/21 22:27:51 gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.1 2004/03/11 13:51:39 dicuccio * Imported FLU version 2.9.1. Altered export specifiers to match NCBI layout. * Altered include paths to match NCBI toolkit layout. * * ========================================================================== */// $Id: Flu_Choice_Group.cpp,v 1000.1 2004/06/01 21:05:34 gouriano Exp $/*************************************************************** * FLU - FLTK Utility Widgets * Copyright (C) 2002 Ohio Supercomputer Center, Ohio State University * * This file and its content is protected by a software license. * You should have received a copy of this license with this file. * If not, please contact the Ohio Supercomputer Center immediately: * Attn: Jason Bryan Re: FLU 1224 Kinnear Rd, Columbus, Ohio 43212 * ***************************************************************/#include <ncbi_pch.hpp>#include <gui/widgets/FLU/Flu_Choice_Group.h>#include <stdlib.h>#define MAX( x, y ) ( (x)>(y) ? (x) : (y) )#define MIN( x, y ) ( (x)<(y) ? (x) : (y) )Flu_Choice_Group :: Flu_Choice_Group( int x, int y, int w, int h, const char *l ) : Fl_Group( x, y, w, h ){ selected = NULL; choice = new Fl_Choice( 0, 0, 0, 0 ); choice->callback( _choiceCB, this ); box( FL_EMBOSSED_BOX ); align( FL_ALIGN_LEFT | FL_ALIGN_INSIDE );}void Flu_Choice_Group :: choiceCB(){ value( choice->value() ); do_callback();}int Flu_Choice_Group :: value(){ if( children() == 1 ) return -1; for( int i = 1; i < children(); i++ ) if( child(i) == selected ) return i-1; return -1;}void Flu_Choice_Group :: value( int v ){ v++; if( v >= 1 && v < children() ) value( child(v) );}int Flu_Choice_Group :: value( Fl_Widget *newvalue ){ int ret = -1; selected = NULL; choice->clear(); for( int i = 1; i < children(); i++ ) { choice->add( child(i)->label() ); child(i)->labeltype( FL_NO_LABEL ); if( child(i) == newvalue ) { ret = i-1; child(i)->show(); choice->value( ret ); selected = child(i); } else child(i)->hide(); child(i)->redraw(); } redraw(); if( parent() ) parent()->redraw(); return ret;}void Flu_Choice_Group :: draw(){ int i; // make sure the selected child is still a child bool found = false; for( i = 1; i < children(); i++ ) if( child(i) == selected ) { found = true; break; } if( !found ) selected = NULL; if( !selected && children() > 1 ) value( child(1) ); int lblW = 0, lblH = 0, X; for( i = 1; i < children(); i++ ) { int W = 0, H; fl_measure( child(i)->label(), W, H ); if( W > lblW ) lblW = W; if( H > lblH ) lblH = H; } lblW += 26; lblH += 6; // align the label if( align() & FL_ALIGN_LEFT ) X = 4; else if( align() & FL_ALIGN_RIGHT ) X = w() - lblW - 8; else X = w()/2 - lblW/2 - 2; // draw the main group box fl_draw_box( box(), x(), y()+lblH/2, w(), h()-lblH/2, color() ); // clip and draw the children fl_clip( x()+2, y()+lblH+1, w()-4, h()-lblH-3 ); choice->hide(); draw_children(); choice->show(); fl_pop_clip(); // clear behind the button and draw it fl_color( color() ); fl_rectf( x()+X, y(), lblW+4, lblH ); fl_color( labelcolor() ); choice->resize( x()+X+2, y(), lblW, lblH ); draw_child( *choice );}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?