diff --git a/src/global.h b/src/global.h index 79b1b869..bad0eeb2 100755 --- a/src/global.h +++ b/src/global.h @@ -46,6 +46,9 @@ #define VERSION "4.0.0cvs" #define APP_NAME "llcon" +// Windows registry key name of auto run entry for the server +#define AUTORUN_SERVER_REG_NAME "llcon server" + // default names of the ini-file for client and server #define DEFAULT_INI_FILE_NAME "llcon.ini" #define DEFAULT_INI_FILE_NAME_SERVER "llconserver.ini" diff --git a/src/llconserverdlg.cpp b/src/llconserverdlg.cpp index b7a4e449..d6eefa6f 100755 --- a/src/llconserverdlg.cpp +++ b/src/llconserverdlg.cpp @@ -27,6 +27,7 @@ /* Implementation *************************************************************/ CLlconServerDlg::CLlconServerDlg ( CServer* pNServP, + const bool bStartMinimized, QWidget* parent, Qt::WindowFlags f ) : QDialog ( parent, f ), @@ -37,18 +38,6 @@ CLlconServerDlg::CLlconServerDlg ( CServer* pNServP, setupUi ( this ); - -// TEST -#ifdef _WIN32 -/* -QSettings RegSettings ( "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", - QSettings::NativeFormat ); -RegSettings.setValue ( "llcon server", - QCoreApplication::applicationFilePath().replace ( "/", "\\" ) ); -*/ -#endif - - // Add help text to controls ----------------------------------------------- // client list ListViewClients->setWhatsThis ( tr ( "Client List: The client list " @@ -117,6 +106,16 @@ RegSettings.setValue ( "llcon server", "Country where the server is located combo box" ) ); + +// TODO does not work! +// act on "start minimized" flag +if ( bStartMinimized ) +{ + hide(); +} + + + // check if system tray icon can be used bSystemTrayIconAvaialbe = SystemTrayIcon.isSystemTrayAvailable(); @@ -218,6 +217,26 @@ ListViewClients->setMinimumHeight ( 140 ); cbRegisterServer->setCheckState ( Qt::Unchecked ); } + // update start minimized check box (only available for Windows) +#ifndef _WIN32 + cbStartOnOSStart->setVisible ( false ); +#else + const bool bCurAutoStartMinState = pServer->GetAutoRunMinimized(); + + if ( bCurAutoStartMinState ) + { + cbStartOnOSStart->setCheckState ( Qt::Checked ); + } + else + { + cbStartOnOSStart->setCheckState ( Qt::Unchecked ); + } + + // modify registry according to setting (this is just required in case a + // user has changed the registry by hand) + ModifyAutoStartEntry ( bCurAutoStartMinState ); +#endif + // update GUI dependencies UpdateGUIDependencies(); @@ -247,6 +266,9 @@ ListViewClients->setMinimumHeight ( 140 ); QObject::connect ( cbDefaultCentralServer, SIGNAL ( stateChanged ( int ) ), this, SLOT ( OnDefaultCentralServerStateChanged ( int ) ) ); + QObject::connect ( cbStartOnOSStart, SIGNAL ( stateChanged ( int ) ), + this, SLOT ( OnStartOnOSStartStateChanged ( int ) ) ); + // line edits QObject::connect ( LineEditCentralServerAddress, SIGNAL ( editingFinished() ), @@ -282,6 +304,15 @@ ListViewClients->setMinimumHeight ( 140 ); Timer.start ( GUI_CONTRL_UPDATE_TIME ); } +void CLlconServerDlg::OnStartOnOSStartStateChanged ( int value ) +{ + const bool bCurAutoStartMinState = ( value == Qt::Checked ); + + // update registry and server setting (for ini file) + pServer->SetAutoRunMinimized ( bCurAutoStartMinState ); + ModifyAutoStartEntry ( bCurAutoStartMinState ); +} + void CLlconServerDlg::OnDefaultCentralServerStateChanged ( int value ) { // apply new setting to the server and update it @@ -471,6 +502,47 @@ void CLlconServerDlg::UpdateSystemTrayIcon ( const bool bIsActive ) } } +void CLlconServerDlg::ModifyAutoStartEntry ( const bool bDoAutoStart ) +{ +// auto start is currently only supported for Windows +#ifdef _WIN32 + // init settings object so that it points to the correct place in the + // Windows registry for the auto run entry + QSettings RegSettings ( "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", + QSettings::NativeFormat ); + + // create start string of auto run entry + QString strRegValue = + QCoreApplication::applicationFilePath().replace ( "/", "\\" ) + + " --startminimized"; +#endif + + if ( bDoAutoStart ) + { +#ifdef _WIN32 + // ckeck if registry entry is correctly present, if not, correct + const bool bWriteRegValue = strRegValue.compare ( + RegSettings.value ( AUTORUN_SERVER_REG_NAME ).toString() ); + + if ( bWriteRegValue ) + { + // write reg key in the registry + RegSettings.setValue ( AUTORUN_SERVER_REG_NAME, strRegValue ); + } +#endif + } + else + { +#ifdef _WIN32 + // delete reg key if present + if ( RegSettings.contains ( AUTORUN_SERVER_REG_NAME ) ) + { + RegSettings.remove ( AUTORUN_SERVER_REG_NAME ); + } +#endif + } +} + void CLlconServerDlg::changeEvent ( QEvent* pEvent ) { // if we have a system tray icon, we make the window invisible if it is diff --git a/src/llconserverdlg.h b/src/llconserverdlg.h index e2e84345..0dc50cdc 100755 --- a/src/llconserverdlg.h +++ b/src/llconserverdlg.h @@ -58,6 +58,7 @@ class CLlconServerDlg : public QDialog, private Ui_CLlconServerDlgBase public: CLlconServerDlg ( CServer* pNServP, + const bool bStartMinimized, QWidget* parent = 0, Qt::WindowFlags f = 0 ); @@ -68,6 +69,7 @@ protected: void UpdateGUIDependencies(); void UpdateSystemTrayIcon ( const bool bIsActive ); void ShowWindowInForeground() { showNormal(); raise(); } + void ModifyAutoStartEntry ( const bool bDoAutoStart ); QTimer Timer; CServer* pServer; @@ -86,6 +88,7 @@ protected: public slots: void OnRegisterServerStateChanged ( int value ); void OnDefaultCentralServerStateChanged ( int value ); + void OnStartOnOSStartStateChanged ( int value ); void OnLineEditCentralServerAddressEditingFinished(); void OnLineEditServerNameTextChanged ( const QString& strNewName ); void OnLineEditLocationCityTextChanged ( const QString& strNewCity ); diff --git a/src/llconserverdlgbase.ui b/src/llconserverdlgbase.ui index d2f06167..b34d803a 100755 --- a/src/llconserverdlgbase.ui +++ b/src/llconserverdlgbase.ui @@ -6,7 +6,7 @@ 0 0 588 - 378 + 386 @@ -51,10 +51,17 @@ + + + + Start Minimized on Windows Start + + + - Register My Server at Central Server + Register My Server in the Server List at the Central Server diff --git a/src/main.cpp b/src/main.cpp index 76c19569..a8dc5022 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -55,6 +55,7 @@ int main ( int argc, char** argv ) // arguments bool bIsClient = true; bool bUseGUI = true; + bool bStartMinimized = false; bool bConnectOnStartup = false; bool bDisalbeLEDs = false; quint16 iPortNumber = LLCON_DEFAULT_PORT_NUMBER; @@ -95,6 +96,18 @@ int main ( int argc, char** argv ) } + // Start minimized ----------------------------------------------------- + if ( GetFlagArgument ( argv, + i, + "-z", + "--startminimized" ) ) + { + bStartMinimized = true; + tsConsole << "- start minimized enabled" << endl; + continue; + } + + // Disable LEDs flag --------------------------------------------------- if ( GetFlagArgument ( argv, i, @@ -361,6 +374,7 @@ int main ( int argc, char** argv ) // GUI object for the server CLlconServerDlg ServerDlg ( &Server, + bStartMinimized, 0, Qt::Window ); @@ -419,6 +433,7 @@ QString UsageArguments ( char **argv ) "\nRecognized options:\n" " -s, --server start server\n" " -n, --nogui disable GUI (server only)\n" + " -z, --startminimized start minimizied (server only)\n" " -l, --log enable logging, set file name\n" " -i, --inifile initialization file name (client only)\n" " -p, --port local port number (server only)\n" diff --git a/src/server.cpp b/src/server.cpp index 65b9d17a..a6fb689f 100755 --- a/src/server.cpp +++ b/src/server.cpp @@ -176,7 +176,8 @@ CServer::CServer ( const QString& strLoggingFileName, ServerListManager ( iPortNumber, strCentralServer, strServerInfo, - &ConnLessProtocol ) + &ConnLessProtocol ), + bAutoRunMinimized ( false ) { int i; diff --git a/src/server.h b/src/server.h index 0b9a48d9..d2c5eea4 100755 --- a/src/server.h +++ b/src/server.h @@ -165,6 +165,13 @@ public: QLocale::Country GetServerCountry() { return ServerListManager.GetServerCountry(); } + + // GUI settings ------------------------------------------------------------ + void SetAutoRunMinimized ( const bool NAuRuMin ) + { bAutoRunMinimized = NAuRuMin; } + + bool GetAutoRunMinimized() { return bAutoRunMinimized; } + protected: // access functions for actual channels bool IsConnected ( const int iChanNum ) @@ -224,6 +231,9 @@ protected: // server list CServerListManager ServerListManager; + // GUI settings + bool bAutoRunMinimized; + signals: void Started(); void Stopped(); diff --git a/src/settings.cpp b/src/settings.cpp index 4cee262c..60f68f0e 100755 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -231,6 +231,12 @@ void CSettings::ReadIniFile ( const QString& sFileName ) { pServer->SetServerCountry ( static_cast ( iValue ) ); } + + // start minimized on OS start + if ( GetFlagIniSet ( IniXMLDocument, "server", "autostartmin", bValue ) ) + { + pServer->SetAutoRunMinimized ( bValue ); + } } } @@ -352,6 +358,10 @@ void CSettings::WriteIniFile ( const QString& sFileName ) // country SetNumericIniSet ( IniXMLDocument, "server", "country", static_cast ( pServer->GetServerCountry() ) ); + + // start minimized on OS start + SetFlagIniSet ( IniXMLDocument, "server", "autostartmin", + pServer->GetAutoRunMinimized() ); } // prepare file name for storing initialization data in XML file and store