icon_tray.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:8k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: icon_tray.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:14:12  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: icon_tray.cpp,v 1000.1 2004/06/01 21:14:12 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors:  Mike DiCuccio
  35.  *
  36.  * File Description:
  37.  *    CIconTray -- icon manager widget
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include "icon_tray.hpp"
  41. #include <FL/Enumerations.H>
  42. #include <FL/Fl_Pixmap.H>
  43. #include <FL/Fl_Box.H>
  44. BEGIN_NCBI_SCOPE
  45. //
  46. // our icon image
  47. //
  48. static const char* sc_icon_xpm[] = {
  49.     "48 48 18 1",
  50.     "  c None",
  51.     ". c #336699",
  52.     "+ c #4D79A6",
  53.     "@ c #7396B9",
  54.     "# c #99B3CC",
  55.     "$ c #CCD9E5",
  56.     "% c #E5ECF2",
  57.     "& c #FFFFFF",
  58.     "* c #A5BCD2",
  59.     "= c #40709F",
  60.     "- c #F2F5F9",
  61.     "; c #D9E2EC",
  62.     "> c #BFCFDF",
  63.     ", c #668CB3",
  64.     "' c #B2C5D9",
  65.     ") c #8DA9C6",
  66.     "! c #80A0BF",
  67.     "~ c #5983AC",
  68.     "................................................",
  69.     "................................................",
  70.     "................................................",
  71.     "................................................",
  72.     "................................................",
  73.     "................................................",
  74.     "..................+@#$%&&.......................",
  75.     "...............@*%&&&&&&&.......................",
  76.     "............=#%&&&&&&&&&&.......................",
  77.     "...........#-&&&&&&&&&&&&.......................",
  78.     ".........=;&&&&&&&&-$>###.......................",
  79.     ".........$&&&&&;#,=..........+@.................",
  80.     ".........&&&&'+...............+#)=..............",
  81.     ".........&&&)...................,$#=............",
  82.     ".........%&&=....................='-!...........",
  83.     ".........,&&!......................!&>=.........",
  84.     "..........,--~......................'&;=........",
  85.     "...........+$-,.....................+&&$........",
  86.     ".............@%#....................,&&&........",
  87.     "...............!>,.................,-&&&........",
  88.     ".................,!~............+!$&&&&-........",
  89.     ".........................=,,)#$%&&&&&&&@........",
  90.     "...................~!*$%&&&&&&&&&&&&&%~.........",
  91.     "...............+!>-&&&&&&&&&&&&&&&&%!...........",
  92.     ".............!>&&&&&&&&&&&&&&&&&-'@.............",
  93.     "...........,%&&&&&&&&&&&&&&&->#~................",
  94.     "..........*&&&&&&&&&&$$*#!,=....................",
  95.     ".........#&&&&&->),=............................",
  96.     ".........-&&&%!..............~!~................",
  97.     ".........&&&;=.................@'!..............",
  98.     ".........$&&@...................=*%,............",
  99.     ".........~-&*.....................,-$+..........",
  100.     "..........~-&~.....................~--~.........",
  101.     "...........+$-,.....................)&-~........",
  102.     ".............!%#....................+&&%........",
  103.     "...............!>,..................#&&&........",
  104.     ".................,),..............+>&&&&........",
  105.     "..............................=,#;&&&&&>........",
  106.     "........................###>$-&&&&&&&&;=........",
  107.     "........................&&&&&&&&&&&&-#..........",
  108.     "........................&&&&&&&&&&%#=...........",
  109.     "........................&&&&&&&;*~..............",
  110.     "........................&&%$#@=.................",
  111.     "................................................",
  112.     "................................................",
  113.     "................................................",
  114.     "................................................",
  115.     "................................................"
  116. };
  117. CIconTray::CIconTray(int x, int y, int w, int h, const char* label)
  118.     : Fl_Pack(x, y, w, h, label)
  119. {
  120.     type(HORIZONTAL);
  121. }
  122. void CIconTray::Add(CChildFrame* frame)
  123. {
  124.     // first, we hide the window
  125.     frame->hide();
  126.     // now, create a new icon group
  127.     // create a group for the icon
  128.     Fl_Group* icon_group = new Fl_Group(0, 0, 72, 72,
  129.                                         frame->GetTitle()->label());
  130.     icon_group->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM | FL_ALIGN_INSIDE);
  131.     icon_group->labelfont(FL_HELVETICA);
  132.     icon_group->labelsize(12);
  133.     icon_group->box(FL_NO_BOX);
  134.     icon_group->resizable(NULL);
  135.     icon_group->callback((Fl_Callback*)&CIconTray::x_StaticCB_Maximize, frame);
  136.     // create an image for the icon itself
  137.     int x_offs = (72 - 48) / 2;
  138.     int y_offs = (72 - 12 - 48) / 2;
  139.     Fl_Group* group = new Fl_Group(x_offs - Fl::box_dx(FL_THIN_UP_BOX),
  140.                                    y_offs - Fl::box_dx(FL_THIN_UP_BOX),
  141.                                    48 + Fl::box_dw(FL_THIN_UP_BOX),
  142.                                    48 + Fl::box_dh(FL_THIN_UP_BOX));
  143.     group->box(FL_THIN_UP_BOX);
  144.     group->clear_visible_focus();
  145.     Fl_Box* icon = new Fl_Box(x_offs, y_offs, 48, 48);
  146.     icon->image(new Fl_Pixmap(sc_icon_xpm));
  147.     icon->clear_visible_focus();
  148.     group->end();
  149.     // add the icon group to the next column
  150.     if (m_Columns.size() == 0  ||
  151.         (m_Columns.back()->children() * 72 + 72 > h()) ) {
  152.         Fl_Pack* pack = new Fl_Pack(0, 0, 72, h());
  153.         pack->type(VERTICAL);
  154.         m_Columns.push_back(pack);
  155.         add(pack);
  156.     }
  157.     m_Columns.back()->add(icon_group);
  158.     icon_group->show();
  159.     m_GroupIdx[icon_group] = frame;
  160. }
  161. void CIconTray::Remove(CChildFrame* frame)
  162. {
  163.     _TRACE("CIconTray::Remove(CChildFrame)");
  164.     // restore the window to visibility
  165.     frame->show();
  166.     // and remove from the pack
  167. }
  168. void CIconTray::x_Remove(Fl_Group* icon_group)
  169. {
  170.     _TRACE("CIconTray::Remove(Fl_Group)");
  171.     TGroupIdx::iterator iter = m_GroupIdx.find(icon_group);
  172.     if (iter != m_GroupIdx.end()) {
  173.         Remove(iter->second);
  174.     }
  175. }
  176. void CIconTray::x_StaticCB_Maximize(Fl_Widget* w, void* data)
  177. {
  178.     _TRACE("CIconTray callback...");
  179.     if ( !data  ||  !Fl::event_clicks() ) {
  180.         return;
  181.     }
  182.     CIconTray* tray = reinterpret_cast<CIconTray*> (data);
  183.     tray->x_Remove((Fl_Group*)w);
  184. }
  185. END_NCBI_SCOPE
  186. /*
  187.  * ===========================================================================
  188.  * $Log: icon_tray.cpp,v $
  189.  * Revision 1000.1  2004/06/01 21:14:12  gouriano
  190.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  191.  *
  192.  * Revision 1.4  2004/05/21 22:27:56  gorelenk
  193.  * Added PCH ncbi_pch.hpp
  194.  *
  195.  * Revision 1.3  2003/03/17 19:48:52  dicuccio
  196.  * Fixed xpm specifications to make WorkShop compiler happy.
  197.  *
  198.  * Revision 1.2  2003/03/07 17:49:25  dicuccio
  199.  * Small clean-ups.  Added description for each class.
  200.  *
  201.  * Revision 1.1  2003/03/07 17:36:08  dicuccio
  202.  * Initial revision
  203.  *
  204.  * ===========================================================================
  205.  */