CodeLite Initializaion analysis - 初始化流程分析(1)

china-03_03 转载请注明出处,该文章来源于cbforge.com by Bryan Wu. 的主应用程序类实现在文件 /liteeditor/app.cpp中,系统初始化时,从继承的App类会调用OnInit成员函数,bool App::OnInit()

  1. If it is Linux or MAC system, block signal pipe first;
  2. wxSocketBase::Initialize();
  3. 打开fatal exception handler,假如系统crash,会调用::OnFatalException,在此处可以采集一些调试信息;
  4. InitXmlResource:通过wxMemoryFSHandler加载资源文件到内存,包括很多PNG文件和xml文件;
  5. 调用wxCmdLineParser解析命令行参数,命令行描述如下:

    假如是h,会打印帮助并推出,如果有b,重新设置basedir。static const wxCmdLineEntryDesc cmdLineDesc[] = {
        {wxCMD_LINE_SWITCH, “v“, “version”, “Print current version”, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
        {wxCMD_LINE_SWITCH, “h“, “help”, “Print usage”, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
        {wxCMD_LINE_OPTION, “l“, “line”, “Open the file at a given line number”, wxCMD_LINE_VAL_NUMBER, wxCMD_LINE_PARAM_OPTIONAL },
        {wxCMD_LINE_OPTION, “b“, “basedir”,  “The base directory of CodeLite”, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
        {wxCMD_LINE_PARAM,  NULL, NULL, “Input file”, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE|wxCMD_LINE_PARAM_OPTIONAL },
        {wxCMD_LINE_NONE }
    };

     

  6. 设置各种目录,包括homeDir,installPath,CurDir,StartupDir等;
  7. Load Menu resource, rc/menu.xrc
  8. Initialize the configuration file locater,ConfFileLocator::Instance()->Initialize
  9. 初始化Manager类,该类从 template而来;
  10. read the last frame size from the configuration file and initialise editor configuration files;
  11. 加入SingleInstance为真,我们需要通过调用wxSingleInstanceChecker来检查CodeLite运行实例是否唯一;
  12. Update PATH environment variable with the install directory and MinGW default installation (if exists)
  13. 显示,图片存储在 /images/splashscreen.png(可选,配置在GeneralInfo中)
  14. 重头戏来了,Frame::Initialize,初始化Frame中会包括很多内容,下面详述;
  15. update the accelerators table;
  16. 显示由第14步初始化的Frame并置为top window;
  17. 刚才第5步中解析的结果中如果有line,和input file,会依次打开并跳转至line-1行;
  18. 最后一步:通过wxLogMessage打印Install path和Startup Path信息,Over。

以下是对第14步中提到的Frame的Initialize分析,class Frame : public

  1. initialize the environment variable configuration manager:EnvironmentConfig;
  2. validate the frame loaded pos & size;
  3. new Frame,创建Frame实例;主要代码如下

    CreateGUIControls(); 主要的创建部分代码,会在另外一篇文章中详细分析(ide.cbforge.com by Bryan Wu),待续…

    ManagerST::Get();    // Dummy call

    //allow the main frame to receive files by drag and drop
    SetDropTarget( new FileDropTarget() );

    // Start the search thread
    SearchThreadST::Get()->SetNotifyWindow(this);
    SearchThreadST::Get()->Start(WXTHREAD_MIN_PRIORITY);

    // start the job queue
    JobQueueSingleton::Instance()->Start(5);

    // the single instance job is a presisstent job, so the pool will contain only 4 available threads
    JobQueueSingleton::Instance()->PushJob(new SingleInstanceThreadJob(this, ManagerST::Get()->GetStarupDirectory()));

    //start the editor creator thread
    m_timer = new wxTimer(this, FrameTimerId);
    m_timer->Start(1000);

  4. change all .db files under the startup directory to be .tags
  5. add the welcome page if enabled
  6. LoadPlugins,非常重要的一步,关于加载插件会在另外一篇文章中详细分析(ide.cbforge.com by Bryan Wu.),待续…
  7. Create the file explorer,Over。

在Frame中包括几个重要的Pane:

  1. MainBook:其中包括NavBar, Notebook(container for pages),QuickFindBar等,打开文件并显示在这个Pane中;
  2. OutputPane:FindResultsTab,ReplaceInFilesPanel,BuildTab,ErrorsTab,ShellTab,DebugTab,TaskPanel…
  3. WorkspacePane:WindowStack,OpenWindowsPanel, FileExplorer,WorkspaceTab
  4. DebuggerPane:LocalVarsTree,SimpleTable,ThreadListPanel,MemoryView等
Share and Enjoy:
  • Print this article!
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • RSS
  • Slashdot
  • Technorati
  • TwitThis

Related posts:

  1. CodeLite Plugin Internal(2)-Load: 插件加载分析
  2. CodeLite Plugin Internal(1) – IPlugin interface
  3. Debugging With CodeLite - CodeLite调试简介
  4. CodeLite IDE介绍
  5. C::B IDE的命令行参数
  6. Setting up Code::Blocks to work with SDL - 多媒体编程库
  7. A rough guide for wxWidgets programming
  8. CodeLite代码分析之 – Create New Project流程
  9. 删除工程中svn文件的脚本(Ruby版和Python版)
  10. CodeLite to CodeInsight task 1: Internationalization

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word

Contact us

Admin: Bryan Wu