Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

gWavMerger Class Reference

#include <gWavMerger.h>

Collaboration diagram for gWavMerger:

Collaboration graph
[legend]
List of all members.

Public Methods

 gWavMerger ()
 ~gWavMerger ()
virtual void init (int *argc_, char *argv_[], const char *help_info_)
virtual void initServer ()
virtual void processServer ()
int get_exit_value () const
void set_exit_value (int v_)
MainWindowget_main_window ()
bool timer_cb ()
string wavjoin_options () const

Private Attributes

int m_exit_value
string m_gtk_options
string m_wavjoin_options
int m_log_level
MainWindowm_main_win
Gnome::Main * m_kit

Static Private Attributes

const int TIMEOUT = 500

Constructor & Destructor Documentation

gWavMerger::gWavMerger  
 

Description: Trim command-line arguments set

Definition at line 73 of file gWavMerger.cpp.

References m_gtk_options, m_log_level, and m_wavjoin_options.

00074     : m_exit_value (0), 
00075       m_log_level (-1),         // not set
00076       m_main_win (NULL),
00077       m_kit (NULL)
00078 {
00079     // ---Configuration---
00080     rm_opt ('f', "config-file"  );
00081     rm_opt ('n', "instance"     );
00082     rm_opt ('p', "port"         );
00083 
00084     // ---Process bookkeeping---
00085     rm_opt ('b', "daemon"       );
00086     rm_opt ('l', "pidfile"      );
00087     m_ommit_pidflock_flag = 0;  // skip PID file creation step
00088     
00089     /*
00090      * Disable all debugging. You can control these options from
00091      * ~/.gnome/gwavmerger configuration file.
00092      */
00093     m_debug_mask = 0x0;
00094     m_log_file = "/dev/null";
00095 
00096     add_opt (0, "gtk-options",     &m_gtk_options);
00097     add_opt (0, "wavjoin-options", &m_wavjoin_options);
00098     add_opt (0, "log-level",       &m_log_level);
00099 }

gWavMerger::~gWavMerger  
 

Definition at line 102 of file gWavMerger.cpp.

References m_main_win.

00103 {
00104     delete m_main_win;
00105 //    delete m_kit;
00106 }


Member Function Documentation

int gWavMerger::get_exit_value   const [inline]
 

Definition at line 46 of file gWavMerger.h.

References m_exit_value.

Referenced by main.

00046 { return m_exit_value; }

MainWindow* gWavMerger::get_main_window   [inline]
 

Definition at line 48 of file gWavMerger.h.

References m_main_win.

00048 { return m_main_win; }

void gWavMerger::init int *    argc_,
char *    argv_[],
const char *    help_info_
[virtual]
 

Name: init()

Description:

Read configuration from [options] secion of GNOME configuration file, ~/.gnome[2]/gwavmerger, and populate command-line options. They might be overwritten by command-line arguments supplied in argv_. Call GenServer::init() to start initialization.

Note: Gnome configuration directory name depends on its version. For Gnome1.2, the name is ~/.gnome; for Gnome2, it is ~/.gnome2.

Definition at line 137 of file gWavMerger.cpp.

References m_gtk_options, m_log_level, m_wavjoin_options, and split_pair.

Referenced by main.

00138 {
00139     trace ("gWavMerger::init");
00140 
00141     register char token;
00142     const int size = 256;
00143     char line [size];
00144     bool parsing_options_section = false;
00145 
00146     gchar* s = NULL;
00147     gboolean b = false;
00148     gint i = 0;
00149 
00155     string localrc (ASSA::Utils::strenv ("$HOME/.gnome2/gwavmerger"));
00156     string defaultrc (GWMDATADIR);
00157     defaultrc += "/gwavmerger";
00158     std::ifstream infile;
00159 
00160     if (::access (localrc.c_str (), R_OK) < 0) {
00161         DL((TRACE,"No ~/.gnome2/gwavmerger found.\n"));
00162         DL((TRACE,"Installing from default.\n"));
00163 
00164         if (::access (defaultrc.c_str (), R_OK) == 0) {
00165             string cmd ("cp -p ");
00166             cmd += defaultrc + " " + localrc;
00167             if (::system (cmd.c_str ()) < 0) {
00168                 goto done;
00169             }
00170         }
00171         else {
00172             DL((TRACE,"Default configuration file is missing!\n"));
00173         }
00174     }
00175     infile.open (localrc.c_str (), std::ios::in);
00176     if (!infile.is_open ()) {
00177         goto done;
00178     }
00179 
00180     for (token = infile.peek (); token != EOF; token = infile.peek ()) {
00181         while (token == '#' || token == '\n') {
00182             infile.getline (line, size, '\n');
00183             token = infile.peek ();
00184         }
00185         if (token == '[') {
00186             infile.getline (line, size, '\n');
00187             parsing_options_section = (line == string ("[options]"));
00188         }
00189         else {
00190             if (parsing_options_section) {
00191                 infile.getline (line, size, '\n');
00192                 std::string name, value;
00193                 split_pair (line, '=', name, value);
00194                 
00195                 if (name == "gtk_options") {
00196                     m_gtk_options = value;
00197                 }
00198                 else if ( name == "wavjoin_options") {
00199                     m_wavjoin_options = value;
00200                 }
00201                 else if ( name == "log_file") {
00202                     m_log_file = value;
00203                 }
00204                 else if ( name == "log_stdout") {
00205                     m_log_stdout_flag = (value == "1");
00206                 }
00207                 else if ( name == "log_size") {
00208                     m_log_size = strtol (value.c_str (), NULL, 16); ;
00209                 }
00210     
00211                 else if ( name == "mask") {
00212                     m_debug_mask = strtol (value.c_str (), NULL, 16);
00213                 }
00214     
00215                 else if ( name == "log_level") {
00216                     m_log_level =  strtol (value.c_str (), NULL, 16);
00217                 }
00218             }
00219             else {
00220                 infile.getline (line, size, '\n');
00221             }
00222         }
00223     }
00224 
00225  done:
00226     ASSA::GenServer::init (argc_, argv_, help_info_);
00227 
00228     /*
00229       TRACE    = 0x01
00230       APP      = 0x02
00231       USR1     = 0x04
00232       USR2     = 0x08
00233       USR3     = 0x10
00234       ALL_APPS = 0x1F
00235       ERROR    = 0x20
00236       FORK     = 0x40000
00237     */
00238 
00239     if (m_log_level >= 0) {
00240         switch (m_log_level) {
00241         case 5:
00242             m_debug_mask = ALL; // Log message flood!
00243         case 4:  
00244             m_debug_mask = 0x40023; // APP_APPS+FORK+ERRORS
00245             break;
00246         case 3:  
00247             m_debug_mask = 0x23; // APP+TRACE+ERRORS
00248             break;
00249         case 2:     
00250             m_debug_mask = 0x21; // TRACE+ERRORS
00251             break;
00252         case 1: 
00253             m_debug_mask = 0x22; // APP+ERRORS
00254             break;
00255         case 0:
00256         default:
00257             m_debug_mask = 0x0;
00258         }
00259 
00260     }
00261 
00262     LOGGER->enable_groups (m_debug_mask);
00263     infile.close ();
00264 }

void gWavMerger::initServer   [virtual]
 

Name: initServer()

Description:

Perform application-level initialization. All GTK+ options are grouped together with {-g, --gtk-options STRING}. We feed the entire group to Gnome::Main() as command-line arguments.

Note: The first argument would always be the program name.

Definition at line 279 of file gWavMerger.cpp.

References m_gtk_options, m_kit, m_log_level, m_main_win, m_wavjoin_options, PACKAGE, TIMEOUT, timer_cb, and VERSION.

Referenced by main.

00280 {
00281     trace("gWavMerger::initServer");
00282     ASSA::Log::disable_timestamp ();
00283 
00284     DL((ALL,"gtk_options = \"%s\"\n",     m_gtk_options.c_str ()));
00285     DL((ALL,"wavjoin_options = \"%s\"\n", m_wavjoin_options.c_str ()));
00286     DL((ALL,"log_stdout  = %s\n",     m_log_stdout_flag ? "true" : "false"));
00287     DL((ALL,"log_file    = \"%s\"\n",     m_log_file.c_str ()));
00288     DL((ALL,"log_size    = %d\n",         m_log_size));
00289     DL((ALL,"log_level   = \"%d\"\n",     m_log_level));
00290     DL((ALL,"mask        = 0x%X\n",       m_debug_mask));
00291 
00292     int gtk_argc = 0;
00293     char** gtk_argv = NULL;
00294 
00295     ASSA::SigAction old_chld_act;
00296     struct sigaction* sa;
00297 
00298     old_chld_act.retrieve_action (SIGCHLD);
00299     sa = old_chld_act;
00300     m_gtk_options = "gwavmerger " + m_gtk_options;
00301 
00302     ASSA::CmdLineOpts::str_to_argv (m_gtk_options, gtk_argc, gtk_argv);
00303 
00304 /*
00305 gnomemm call 
00306 
00307 Main::Main(const Glib::ustring& app_id, 
00308            const Glib::ustring& app_version,
00309            const ModuleInfo& module_info,
00310            int argc, 
00311            char** argv,
00312            const struct poptOption* options,  // GNOME_PARAM_POPT_TABLE, ?
00313            int flags, 
00314            poptContext* return_ctx);
00315 
00316 translates into
00317 
00318 GnomeProgram* pProgram  = 
00319 gnome_program_init(app_id_, 
00320                    app_version_,
00321                    module_info.gobj(),
00322                    argc, 
00323                    argv,
00324                    GNOME_PARAM_POPT_TABLE, options,
00325                    GNOME_PARAM_POPT_FLAGS, flags,
00326                    0);
00327 
00328 libgnome manual describes it as:
00329 
00330 GnomeProgram* 
00331 gnome_program_init(const char *app_id,
00332                    const char *app_version,
00333                    const GnomeModuleInfo *module_info,
00334                    int argc,
00335                    char **argv,
00336                    const char *first_property_name,
00337                    ...);
00338 
00339 
00340 What I was suggested instead is to call is the following to make
00341 Yelp working:
00342 
00343 gnome_program_init (app_id, 
00344                     version, 
00345                     LIBGNOMEUI_MODULE, 
00346                     nargs, 
00347                     args,
00348                     GNOME_PROGRAM_STANDARD_PROPERTIES, 
00349                     NULL);
00350 
00351 or GNOME_PARAM_APP_DATADIR, DATADIR
00352 
00353 */
00354 
00355     m_kit = new Gnome::Main (PACKAGE, VERSION, 
00356                              Gnome::UI::module_info_get (),
00357                              gtk_argc, gtk_argv);
00358 
00359 #if SUSPEND
00360     gnome_program_init (PACKAGE, VERSION, 
00361                         LIBGNOMEUI_MODULE,
00362                         gtk_argc, gtk_argv, 
00363                         GNOME_PARAM_APP_DATADIR, DATADIR, 
00364                         NULL);
00365 #endif
00366     ASSA::CmdLineOpts::free_argv (gtk_argv);
00367 
00368     DL((APP,"AppModuleName = \"%s\"\n", 
00369         Gnome::UI::module_info_get ().get_name ().c_str ()));
00370 
00374     ASSA::SigAction ignore (SIG_IGN);
00375     ignore.register_action (SIGCHLD, &old_chld_act);
00376 
00377     m_main_win = new MainWindow;
00378     
00379     SigC::Slot0<bool> tslot = slot (*this, &gWavMerger::timer_cb);
00380     SigC::Connection conn = Glib::signal_timeout().connect (tslot, TIMEOUT);
00381 
00382     DL((APP,"\n= Environment variables set by Autoconfig: =\n"
00383         "\tGWMDATADIR = \"%s\"\n"
00384         "\tDATADIR    = \"%s\"\n"
00385         "\tPACKAGE    = \"%s\"\n"
00386         "\tVERSION    = \"%s\"\n\n",
00387         GWMDATADIR, DATADIR, PACKAGE, VERSION));
00388 
00389 #if 0
00390 
00392     Glib::ustring ustr;
00393     Glib::ustring file ("gwavmerger.xml");
00394     Glib::RefPtr<Gnome::Program> prog = Gnome::Program::get ();
00395 
00396     ustr = prog->locate_file (Gnome::FILE_DOMAIN_DATADIR, file);
00397     DL((APP,"FILE_DOMAIN_DATADIR:gwavmerger = \"%s\"\n", ustr.c_str ()));
00398 
00399     ustr = prog->locate_file (Gnome::FILE_DOMAIN_APP_DATADIR, file);
00400     DL((APP,"FILE_DOMAIN_APP_DATADIR:gwavmerger = \"%s\"\n", ustr.c_str ()));
00401 #endif
00402         
00403     DL((APP,"Service has been initialized\n"));
00404 }

void gWavMerger::processServer   [virtual]
 

Name: processServer()

Description: Main event loop - runs until user clicks on Exit button.

Definition at line 413 of file gWavMerger.cpp.

References m_kit, and REACTOR.

Referenced by main.

00414 {
00415     trace("gWavMerger::processServer");
00416 
00417     m_kit->run ();  // Calling Gtk::Main::quit () terminates Gtk event loop
00418     REACTOR->stopReactor ();
00419 
00420     /* From Gtk man page:
00421      *  "Terminate the program and return the given exit code to the caller. 
00422      *   This function will shut down the GUI and free all resources allocated 
00423      *   for GTK."
00424      *
00425      * I don't think that's entirely true. MergeDialog is managed and
00426      * I don't see its detructor being called ever (not that I care).
00427      *
00428      */ 
00429     gtk_exit (0);
00430 }

void gWavMerger::set_exit_value int    v_ [inline]
 

Definition at line 47 of file gWavMerger.h.

References m_exit_value.

00047 { m_exit_value = v_;   }

bool gWavMerger::timer_cb  
 

Name: timer_cb() Description: Run Reactor's event loop.

Definition at line 114 of file gWavMerger.cpp.

References REACTOR.

Referenced by initServer.

00115 {
00116     ASSA::TimeVal timeout (0.01);
00117     REACTOR->waitForEvents (&timeout);
00118     return true;
00119 }

string gWavMerger::wavjoin_options   const [inline]
 

Definition at line 51 of file gWavMerger.h.

References m_wavjoin_options.

00051 { return m_wavjoin_options; }


Member Data Documentation

int gWavMerger::m_exit_value [private]
 

Definition at line 56 of file gWavMerger.h.

Referenced by get_exit_value, and set_exit_value.

string gWavMerger::m_gtk_options [private]
 

Definition at line 57 of file gWavMerger.h.

Referenced by gWavMerger, init, and initServer.

Gnome::Main* gWavMerger::m_kit [private]
 

Definition at line 62 of file gWavMerger.h.

Referenced by initServer, and processServer.

int gWavMerger::m_log_level [private]
 

Definition at line 59 of file gWavMerger.h.

Referenced by gWavMerger, init, and initServer.

MainWindow* gWavMerger::m_main_win [private]
 

Definition at line 61 of file gWavMerger.h.

Referenced by get_main_window, initServer, and ~gWavMerger.

string gWavMerger::m_wavjoin_options [private]
 

Definition at line 58 of file gWavMerger.h.

Referenced by gWavMerger, init, initServer, and wavjoin_options.

const int gWavMerger::TIMEOUT = 500 [static, private]
 

Definition at line 44 of file gWavMerger.cpp.

Referenced by initServer.


The documentation for this class was generated from the following files:
Generated on Tue Feb 11 23:05:32 2003 for gwavmerger by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002