⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewer_window_base.hpp

📁 ncbi源码
💻 HPP
字号:
/* * =========================================================================== * PRODUCTION $Log: viewer_window_base.hpp,v $ * PRODUCTION Revision 1000.1  2004/04/12 17:34:57  gouriano * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.26 * PRODUCTION * =========================================================================== *//*  $Id: viewer_window_base.hpp,v 1000.1 2004/04/12 17:34:57 gouriano Exp $* ===========================================================================**                            PUBLIC DOMAIN NOTICE*               National Center for Biotechnology Information**  This software/database is a "United States Government Work" under the*  terms of the United States Copyright Act.  It was written as part of*  the author's official duties as a United States Government employee and*  thus cannot be copyrighted.  This software/database is freely available*  to the public for use. The National Library of Medicine and the U.S.*  Government have not placed any restriction on its use or reproduction.**  Although all reasonable efforts have been taken to ensure the accuracy*  and reliability of the software and data, the NLM and the U.S.*  Government do not and cannot warrant the performance or results that*  may be obtained by using this software or data. The NLM and the U.S.*  Government disclaim all warranties, express or implied, including*  warranties of performance, merchantability or fitness for any particular*  purpose.**  Please cite the author in any work or product based on this material.** ===========================================================================** Authors:  Paul Thiessen** File Description:*      base GUI functionality for viewers** ===========================================================================*/#ifndef CN3D_VIEWER_WINDOW_BASE__HPP#define CN3D_VIEWER_WINDOW_BASE__HPP#include <corelib/ncbistd.hpp>#ifdef __WXMSW__#include <windows.h>#include <wx/msw/winundef.h>#endif#include <wx/wx.h>#include "block_multiple_alignment.hpp"#include "sequence_viewer_widget.hpp"BEGIN_SCOPE(Cn3D)class ViewerBase;class SequenceDisplay;class MoleculeIdentifier;// this must be included in the event table for the derived class, so that the base class's// menu item callbacks are accessible#define INCLUDE_VIEWER_WINDOW_BASE_EVENTS \    EVT_MENU_RANGE(MID_SHOW_TITLES, MID_HIDE_TITLES,    ViewerWindowBase::OnTitleView) \    EVT_MENU_RANGE(MID_ENABLE_EDIT, MID_SYNC_STRUCS_ON, ViewerWindowBase::OnEditMenu) \    EVT_MENU_RANGE(MID_SELECT_RECT, MID_DRAG_HORIZ,     ViewerWindowBase::OnMouseMode) \    EVT_MENU_RANGE(MID_LEFT,        MID_SPLIT,          ViewerWindowBase::OnJustification) \    EVT_MENU      (MID_SHOW_GEOM_VLTNS,                 ViewerWindowBase::OnShowGeomVltns) \    EVT_MENU      (MID_FIND_PATTERN,                    ViewerWindowBase::OnFindPattern)class ViewerWindowBase : public wxFrame{    friend class SequenceDisplay;public:    // displays a new alignment, and whether to enable the editor and column selection    void NewDisplay(SequenceDisplay *display, bool enableSelectByColumn);    // if 'prompt', ask if user wants to save edits; return value indicates whether program    // should continue after this dialog - i.e., returns false if user hits 'cancel';    // program should then abort the operation that engendered this function call.    // 'canCancel' tells whether or not a 'cancel' button is even displayed - thus    // if 'canCancel' is false, the function will always return true.    virtual bool SaveDialog(bool prompt, bool canCancel) = 0;    // updates alignment (e.g. if width or # rows has changed); doesn't change scroll    void UpdateDisplay(SequenceDisplay *display);    // scroll to specific column    void ScrollToColumn(int column) { viewerWidget->ScrollTo(column, -1); }    void ScrollToRow(int row) { viewerWidget->ScrollTo(-1, row); }    // scroll so that this cell is visible, if it's not already    void MakeCellVisible(int column, int row) { viewerWidget->MakeCharacterVisible(column, row); }    void MakeSequenceVisible(const MoleculeIdentifier *identifier);    // set the font for the characters from registry values; refreshes automatically.    void SetupFontFromRegistry(void);    // communicates to the derived class that the user wants to turn on/off the editor;    // should return true if derived class wants to allow the state change    virtual bool RequestEditorEnable(bool enable) { return false; }    virtual void EnableDerivedEditorMenuItems(bool enable) { }    // allows the derived class to set up special mouse/cursor modes, e.g. for delete row    virtual void CancelDerivedSpecialModesExcept(int id) { }    // override to set customized window title    virtual void SetWindowTitle(void) = 0;    // menu callbacks    void OnTitleView(wxCommandEvent& event);    void OnEditMenu(wxCommandEvent& event);    void OnMouseMode(wxCommandEvent& event);    void OnJustification(wxCommandEvent& event);    void OnShowGeomVltns(wxCommandEvent& event);    void OnFindPattern(wxCommandEvent& event);protected:    // menu identifiers    enum {        // view menu        MID_SHOW_TITLES,        MID_HIDE_TITLES,        MID_SHOW_GEOM_VLTNS,        MID_FIND_PATTERN,        // edit menu        MID_ENABLE_EDIT,        MID_UNDO,        MID_REDO,        MID_SPLIT_BLOCK,        MID_MERGE_BLOCKS,        MID_CREATE_BLOCK,        MID_DELETE_BLOCK,        MID_SYNC_STRUCS,        MID_SYNC_STRUCS_ON,        // mouse mode        MID_SELECT_RECT,        MID_SELECT_COLS,        MID_SELECT_ROWS,        MID_DRAG_HORIZ,        // unaligned justification        MID_LEFT,        MID_RIGHT,        MID_CENTER,        MID_SPLIT,        // so derived classes can use non-conflicting MID's        START_VIEWER_WINDOW_DERIVED_MID    };    // can't instantiate base class    ViewerWindowBase(ViewerBase *parentViewer,        const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize);    virtual ~ViewerWindowBase(void);    SequenceViewerWidget *viewerWidget;    ViewerBase *viewer;    void EnableBaseEditorMenuItems(bool enabled);    // so derived classes can add menu stuff    wxMenuBar *menuBar;    wxMenu *viewMenu, *editMenu, *mouseModeMenu, *justificationMenu;    SequenceViewerWidget::eMouseMode prevMouseMode;    BlockMultipleAlignment::eUnalignedJustification currentJustification;    void SplitBlockOff(void)    {        menuBar->Check(MID_SPLIT_BLOCK, false);        SetCursor(wxNullCursor);    }    void MergeBlocksOff(void)    {        menuBar->Check(MID_MERGE_BLOCKS, false);        viewerWidget->SetMouseMode(prevMouseMode);        SetCursor(wxNullCursor);    }    void CreateBlockOff(void)    {        menuBar->Check(MID_CREATE_BLOCK, false);        viewerWidget->SetMouseMode(prevMouseMode);        SetCursor(wxNullCursor);    }    void DeleteBlockOff(void)    {        menuBar->Check(MID_DELETE_BLOCK, false);        SetCursor(wxNullCursor);    }    void CancelBaseSpecialModesExcept(int id)    {        if (id != MID_SPLIT_BLOCK && DoSplitBlock()) SplitBlockOff();        if (id != MID_MERGE_BLOCKS && DoMergeBlocks()) MergeBlocksOff();        if (id != MID_CREATE_BLOCK && DoCreateBlock()) CreateBlockOff();        if (id != MID_DELETE_BLOCK && DoDeleteBlock()) DeleteBlockOff();    }    void CancelAllSpecialModesExcept(int id)    {        CancelBaseSpecialModesExcept(id);        CancelDerivedSpecialModesExcept(id);    }    virtual SequenceViewerWidget::eMouseMode GetMouseModeForCreateAndMerge(void) = 0;public:    BlockMultipleAlignment::eUnalignedJustification GetCurrentJustification(void) const        { return currentJustification; }    void Refresh(void) { viewerWidget->Refresh(false); }    void KillWindow(void)    {        viewer = NULL;        viewerWidget->AttachAlignment(NULL);        Destroy();    }    bool EditorIsOn(void) const { return menuBar->IsChecked(MID_ENABLE_EDIT); }    void EnableUndo(bool enabled) { menuBar->Enable(MID_UNDO, enabled); }    void EnableRedo(bool enabled) { menuBar->Enable(MID_REDO, enabled); }    bool DoSplitBlock(void) const { return menuBar->IsChecked(MID_SPLIT_BLOCK); }    bool DoMergeBlocks(void) const { return menuBar->IsChecked(MID_MERGE_BLOCKS); }    bool DoCreateBlock(void) const { return menuBar->IsChecked(MID_CREATE_BLOCK); }    bool DoDeleteBlock(void) const { return menuBar->IsChecked(MID_DELETE_BLOCK); }    void SyncStructures(void) { Command(MID_SYNC_STRUCS); }    bool AlwaysSyncStructures(void) const { return menuBar->IsChecked(MID_SYNC_STRUCS_ON); }};END_SCOPE(Cn3D)#endif // CN3D_VIEWER_WINDOW_BASE__HPP/** ---------------------------------------------------------------------------* $Log: viewer_window_base.hpp,v $* Revision 1000.1  2004/04/12 17:34:57  gouriano* PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.26** Revision 1.26  2004/02/19 17:05:22  thiessen* remove cn3d/ from include paths; add pragma to disable annoying msvc warning** Revision 1.25  2003/02/03 19:20:09  thiessen* format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros** Revision 1.24  2002/10/13 22:58:08  thiessen* add redo ability to editor** Revision 1.23  2002/10/07 13:29:32  thiessen* add double-click -> show row to taxonomy tree** Revision 1.22  2002/09/09 13:38:23  thiessen* separate save and save-as** Revision 1.21  2002/08/15 22:13:19  thiessen* update for wx2.3.2+ only; add structure pick dialog; fix MultitextDialog bug** Revision 1.20  2002/06/05 15:59:38  thiessen* fix for Solaris** Revision 1.19  2002/06/05 14:28:43  thiessen* reorganize handling of window titles** Revision 1.18  2002/05/17 19:10:27  thiessen* preliminary range restriction for BLAST/PSSM** Revision 1.17  2002/02/05 18:53:26  thiessen* scroll to residue in sequence windows when selected in structure window** Revision 1.16  2001/12/06 23:13:47  thiessen* finish import/align new sequences into single-structure data; many small tweaks** Revision 1.15  2001/08/14 17:17:48  thiessen* add user font selection, store in registry** Revision 1.14  2001/07/23 20:08:38  thiessen* add regex pattern search** Revision 1.13  2001/06/04 14:33:55  thiessen* add proximity sort; highlight sequence on browser launch** Revision 1.12  2001/05/25 19:08:14  thiessen* fix GTK window redraw bug** Revision 1.11  2001/05/23 17:43:29  thiessen* change dialog implementation to wxDesigner; interface changes** Revision 1.10  2001/04/12 18:35:01  thiessen* fix merge GUI bug/typo** Revision 1.9  2001/04/05 22:54:52  thiessen* change bg color handling ; show geometry violations** Revision 1.8  2001/04/04 00:27:22  thiessen* major update - add merging, threader GUI controls** Revision 1.7  2001/03/30 03:07:09  thiessen* add threader score calculation & sorting** Revision 1.6  2001/03/22 00:32:37  thiessen* initial threading working (PSSM only); free color storage in undo stack** Revision 1.5  2001/03/17 14:06:53  thiessen* more workarounds for namespace/#define conflicts** Revision 1.4  2001/03/13 01:24:17  thiessen* working undo system for >1 alignment (e.g., update window)** Revision 1.3  2001/03/09 15:48:44  thiessen* major changes to add initial update viewer** Revision 1.2  2001/03/02 03:26:36  thiessen* fix dangling pointer upon app close** Revision 1.1  2001/03/01 20:15:30  thiessen* major rearrangement of sequence viewer code into base and derived classes**/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -