MainObject::MainObject(QObject *parent,const char *name) :QObject(parent,name) { // // Read Command Options // RDCmdSwitch *cmd= new RDCmdSwitch(qApp->argc(),qApp->argv(),"ripcd",RIPCD_USAGE); delete cmd; // // Load Local Configs // ripcd_config=new RDConfig(RD_CONF_FILE); ripcd_config->load(); // // Make sure we're the only instance running // if(RDCheckDaemon(RD_RIPCD_PID)) { LogLine(RDConfig::LogErr, "ERROR ripcd aborting - multiple instances not allowed"); exit(1); } // // Initialize Data Structures // debug=false; for(int i=0;i<RIPCD_MAX_CONNECTIONS;i++) { socket[i]=NULL; istate[i]=0; argnum[i]=0; argptr[i]=0; auth[i]=false; } for(int i=0;i<MAX_MATRICES;i++) { for(int j=0;j<MAX_GPIO_PINS;j++) { ripcd_gpi_state[i][j]=false; ripcd_gpo_state[i][j]=false; } } ripc_onair_flag=false; server=new RipcdSocket(RIPCD_TCP_PORT,0,this,"socket"); if(!server->ok()) { exit(1); } connect(server,SIGNAL(connection(int)),this,SLOT(newConnection(int))); // // Macro Timers // QSignalMapper *mapper=new QSignalMapper(this,"macro_timer_mapper"); connect(mapper,SIGNAL(mapped(int)),this,SLOT(macroTimerData(int))); for(int i=0;i<RD_MAX_MACRO_TIMERS;i++) { ripc_macro_cart[i]=0; ripc_macro_timer[i]=new QTimer(this); mapper->setMapping(ripc_macro_timer[i],i); connect(ripc_macro_timer[i],SIGNAL(timeout()),mapper,SLOT(map())); } // // Open Database // QString err (tr("ripcd: ")); ripcd_db = RDInitDb (&err); if(!ripcd_db) { printf ("%s\n",err.ascii()); exit (1); } connect (RDDbStatus(),SIGNAL(logText(RDConfig::LogPriority,const QString &)), this,SLOT(log(RDConfig::LogPriority,const QString &))); // // CAE Connection // rdcae=new RDCae(parent,name); rdcae->connectHost("localhost",CAED_TCP_PORT,ripcd_config->password()); // // Station // rdstation=new RDStation(ripcd_config->stationName()); rdstation->setUserName(rdstation->defaultName()); ripcd_host_addr=rdstation->address(); if(qApp->argc()==1) { RDDetach(ripcd_config->logCoreDumpDirectory()); } else { debug=true; } ::signal(SIGCHLD,SigHandler); ::signal(SIGTERM,SigHandler); ::signal(SIGINT,SigHandler); if(!RDWritePid(RD_PID_DIR,"ripcd.pid",ripcd_config->uid())) { printf("ripcd: can't write pid file\n"); exit(1); } // // The RML Sockets // ripcd_rml_send=new QSocketDevice(QSocketDevice::Datagram); ripcd_rml_echo=new QSocketDevice(QSocketDevice::Datagram); ripcd_rml_echo->bind(QHostAddress(),RD_RML_ECHO_PORT); ripcd_rml_echo->setBlocking(false); ripcd_rml_noecho=new QSocketDevice(QSocketDevice::Datagram); ripcd_rml_noecho->bind(QHostAddress(),RD_RML_NOECHO_PORT); ripcd_rml_noecho->setBlocking(false); ripcd_rml_reply=new QSocketDevice(QSocketDevice::Datagram); ripcd_rml_reply->bind(QHostAddress(),RD_RML_REPLY_PORT); ripcd_rml_reply->setBlocking(false); LoadGpiTable(); // // Initialize local RMLs // LoadLocalMacros(); // // Start RML Polling // QTimer *timer=new QTimer(this,"timer"); timer->changeInterval(RIPCD_RML_READ_INTERVAL); connect(timer,SIGNAL(timeout()),this,SLOT(readRml())); timer->start(true); // // Database Backup Timer // databaseBackup(); ripcd_backup_timer=new QTimer(this,"ripcd_backup_timer"); connect(ripcd_backup_timer,SIGNAL(timeout()),this,SLOT(databaseBackup())); ripcd_backup_timer->start(86400000); // // Maintenance Routine Timer // srandom(QTime::currentTime().msec()); ripcd_maint_timer=new QTimer(this,"ripcd_maint_timer"); connect(ripcd_maint_timer,SIGNAL(timeout()),this,SLOT(checkMaintData())); int interval=GetMaintInterval(); ripcd_maint_timer->start(interval); LogLine(RDConfig::LogInfo,"started"); }
void NMainMenuBar::setupFileMenu() { QFont f = global.getGuiFont(QFont()); this->setFont(f); fileMenu = this->addMenu(tr("&File")); fileMenu->setFont(f); emailAction = new QAction(tr("Email Note"), this); emailAction->setToolTip(tr("Email a copy of this note")); connect(emailAction, SIGNAL(triggered()), parent, SLOT(emailNote())); setupShortcut(emailAction, QString("File_Email")); fileMenu->addAction(emailAction); printPreviewAction = new QAction(tr("Print Preview Note"), this); printPreviewAction->setToolTip(tr("Print preview of this note")); connect(printPreviewAction, SIGNAL(triggered()), parent, SLOT(printPreviewNote())); setupShortcut(printPreviewAction, QString("File_Print_Preview")); fileMenu->addAction(printPreviewAction); //printPreviewAction->setVisible(false); // for some reason images don't show up in print preview, so this is useless. Check again in Qt5 printAction = new QAction(tr("&Print Note"), this); printAction->setToolTip(tr("Print this note")); connect(printAction, SIGNAL(triggered()), parent, SLOT(printNote())); setupShortcut(printAction, QString("File_Print")); fileMenu->addAction(printAction); fileMenu->addSeparator(); backupDatabaseAction = new QAction(tr("&Backup Database"), this); backupDatabaseAction->setToolTip(tr("Backup database to a file")); connect(backupDatabaseAction, SIGNAL(triggered()), parent, SLOT(databaseBackup())); setupShortcut(backupDatabaseAction, QString("File_Backup_Database")); fileMenu->addAction(backupDatabaseAction); restoreDatabaseAction = new QAction(tr("&Restore Database"), this); restoreDatabaseAction->setToolTip(tr("Restore from a backup")); connect(restoreDatabaseAction, SIGNAL(triggered()), parent, SLOT(databaseRestore())); setupShortcut(restoreDatabaseAction, QString("File_Restore_Database")); fileMenu->addAction(restoreDatabaseAction); fileMenu->addSeparator(); exportNoteAction = new QAction(tr("&Export to NixNote Export"), this); exportNoteAction->setToolTip(tr("Export selected notes to a NNEX file")); connect(exportNoteAction, SIGNAL(triggered()), parent, SLOT(noteExport())); setupShortcut(exportNoteAction, QString("File_Note_Export")); fileMenu->addAction(exportNoteAction); exportAsPdfAction = new QAction(tr("&Export notes as PDF"), this); exportAsPdfAction->setToolTip(tr("Export selected notes to a PDF file")); connect(exportAsPdfAction, SIGNAL(triggered()), parent, SLOT(onExportAsPdf())); setupShortcut(exportAsPdfAction, QString("File_Note_Export_Pdf")); fileMenu->addAction(exportAsPdfAction); importNoteAction = new QAction(tr("&Import notes"), this); importNoteAction->setToolTip(tr("Import notes from an export file")); connect(importNoteAction, SIGNAL(triggered()), parent, SLOT(noteImport())); setupShortcut(importNoteAction, QString("File_Note_Import")); fileMenu->addAction(importNoteAction); fileMenu->addSeparator(); QList<QString> names = global.accountsManager->nameList(); QList<int> ids = global.accountsManager->idList(); QList<QPair<int, QString>> pairList; for (int i = 0; i < ids.size(); i++) { pairList.append(QPair<int, QString>(ids[i], names[i])); } qSort(pairList.begin(), pairList.end(), QPairFirstComparer()); for (int i = 0; i < ids.size(); i++) { QAction *accountAction = new QAction(pairList[i].second + " - (" + QString::number(pairList[i].first) + ")", this); accountAction->setData(pairList[i].first); accountAction->setCheckable(true); if (global.accountsManager->currentId == pairList[i].first) accountAction->setChecked(true); else { accountAction->setText( tr("Switch to ") + pairList[i].second + " - (" + QString::number(pairList[i].first) + ")"); } fileMenu->addAction(accountAction); connect(accountAction, SIGNAL(triggered()), parent, SLOT(switchUser())); userAccountActions.append(accountAction); } addUserAction = new QAction(tr("&Add Another User..."), this); fileMenu->addAction(addUserAction); connect(addUserAction, SIGNAL(triggered()), parent, SLOT(addAnotherUser())); userMaintenanceAction = new QAction(tr("&User Account Maintenance"), this); fileMenu->addAction(userMaintenanceAction); connect(userMaintenanceAction, SIGNAL(triggered()), parent, SLOT(userMaintenance())); fileMenu->addSeparator(); openCloseAction = new QAction(tr("&Open/Close Notebooks"), this); openCloseAction->setToolTip(tr("Open/Close Notebooks")); connect(openCloseAction, SIGNAL(triggered()), parent, SLOT(openCloseNotebooks())); setupShortcut(quitAction, QString("File_Notebook_OpenClose")); fileMenu->addAction(openCloseAction); fileMenu->addSeparator(); quitAction = new QAction(tr("Quit"), this); quitAction->setToolTip(tr("Quit the program")); connect(quitAction, SIGNAL(triggered()), parent, SLOT(quitNixNote())); quitAction->setShortcut(QKeySequence::Close); quitAction->setIcon(QIcon::fromTheme("exit")); setupShortcut(quitAction, QString("File_Exit")); fileMenu->addAction(quitAction); QString menuCss = global.getThemeCss("menuCss"); if (menuCss != "") this->setStyleSheet(menuCss); }