~ubuntu-branches/ubuntu/vivid/ekiga/vivid-proposed

« back to all changes in this revision

Viewing changes to lib/engine/framework/kickstart.h

  • Committer: Bazaar Package Importer
  • Author(s): Kilian Krause
  • Date: 2011-07-17 00:24:50 UTC
  • mfrom: (5.1.5 upstream) (7.1.7 sid)
  • Revision ID: james.westby@ubuntu.com-20110717002450-ytg3wsrc1ptd3153
Tags: 3.3.1-1
* New upstream release.
 - Required libpt-dev 2.10 and libopal-dev 3.10
* Fix debian/watch to catch new version
* Remove libnotify0.7.patch - included upstream
* Add libboost-dev and libboost-signals-dev to Build-Depends
* debian/rules: Don't install *.la files for new internal shared libs
* Fix Vcs URIs to point to correct desktop/experimental/ekiga tree

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
/*
 
3
 * Ekiga -- A VoIP and Video-Conferencing application
 
4
 * Copyright (C) 2000-2009 Damien Sandras <dsandras@seconix.com>
 
5
 
 
6
 * This program is free software; you can  redistribute it and/or modify
 
7
 * it under the terms of the GNU General Public License as published by
 
8
 * the Free Software Foundation; either version 2 of the License, or (at
 
9
 * your option) any later version. This program is distributed in the hope
 
10
 * that it will be useful, but WITHOUT ANY WARRANTY; without even the
 
11
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
12
 * See the GNU General Public License for more details.
 
13
 *
 
14
 * You should have received a copy of the GNU General Public License along
 
15
 * with this program; if not, write to the Free Software Foundation, Inc.,
 
16
 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 
17
 *
 
18
 * Ekiga is licensed under the GPL license and as a special exception, you
 
19
 * have permission to link or otherwise combine this program with the
 
20
 * programs OPAL, OpenH323 and PWLIB, and distribute the combination, without
 
21
 * applying the requirements of the GNU GPL to the OPAL, OpenH323 and PWLIB
 
22
 * programs, as long as you do follow the requirements of the GNU GPL for all
 
23
 * the rest of the software thus combined.
 
24
 */
 
25
 
 
26
 
 
27
/*
 
28
 *                         kickstart.h  -  description
 
29
 *                         ------------------------------------------
 
30
 *   begin                : written in 2009 by Julien Puydt
 
31
 *   copyright            : (c) 2009 by Julien Puydt
 
32
 *   description          : declaration of a kickstart object
 
33
 *
 
34
 */
 
35
 
 
36
#ifndef __KICKSTART_H__
 
37
#define __KICKSTART_H__
 
38
 
 
39
/* We want the engine startup to be as automatic as possible -- in particular,
 
40
 * it should handle dependancies as transparently as possible so external
 
41
 * plugins work correctly.
 
42
 *
 
43
 * This kickstart object works like this : some objects are registered to it,
 
44
 * and are responsible of initializing a portion of code. Those objects are
 
45
 * called sparks, and have basically three states :
 
46
 * - blank -- they haven't managed to initialize anything yet ;
 
47
 * - partial -- they have initialized something, but could do more ;
 
48
 * - full -- they have initialized all they could.
 
49
 *
 
50
 * This means that a spark object will have a method which will try to
 
51
 * initialize more, and a method which will tell in which state it is : indeed,
 
52
 * the kickstart object will need to know when it reached a point where all
 
53
 * sparks have done as much as they could, so we need a strictly increasing
 
54
 * function up until then.
 
55
 *
 
56
 * We want the following to be guaranteed by each Spark implementation :
 
57
 * - if try_initialize_more returns 'true', then the state should be at least
 
58
 * partial ;
 
59
 * - try_initialize_more shouldn't return 'true' if no new service could be
 
60
 * registered ;
 
61
 * - states should always evolve as BLANK -> PARTIAL -> FULL : no coming back!
 
62
 */
 
63
 
 
64
#include "services.h"
 
65
 
 
66
namespace Ekiga
 
67
{
 
68
 
 
69
  struct Spark
 
70
  {
 
71
    typedef enum { BLANK, PARTIAL, FULL } state;
 
72
 
 
73
    virtual ~Spark () {}
 
74
 
 
75
    virtual bool try_initialize_more (ServiceCore& core,
 
76
                                      int* argc,
 
77
                                      char** argv[]) = 0;
 
78
 
 
79
    virtual state get_state () const = 0;
 
80
 
 
81
    // this method is useful for debugging purposes
 
82
    virtual const std::string get_name () const = 0;
 
83
  };
 
84
 
 
85
  class KickStart
 
86
  {
 
87
  public:
 
88
 
 
89
    KickStart ();
 
90
 
 
91
    ~KickStart ();
 
92
 
 
93
    void add_spark (boost::shared_ptr<Spark>& spark);
 
94
 
 
95
    /* try to do more with the known blank/partial sparks */
 
96
    void kick (Ekiga::ServiceCore& core,
 
97
               int* argc,
 
98
               char** argv[]);
 
99
 
 
100
  private:
 
101
    std::list<boost::shared_ptr<Spark> > blanks;
 
102
    std::list<boost::shared_ptr<Spark> > partials;
 
103
  };
 
104
};
 
105
 
 
106
#endif