diff options
Diffstat (limited to 'sysui')
-rw-r--r-- | sysui/source/win32/QuickStart/QuickStart.cpp | 380 | ||||
-rw-r--r-- | sysui/source/win32/QuickStart/QuickStart.h | 12 | ||||
-rw-r--r-- | sysui/source/win32/QuickStart/StdAfx.h | 33 | ||||
-rw-r--r-- | sysui/source/win32/QuickStart/makefile.mk | 102 | ||||
-rw-r--r-- | sysui/source/win32/QuickStart/resource.h | 32 |
5 files changed, 559 insertions, 0 deletions
diff --git a/sysui/source/win32/QuickStart/QuickStart.cpp b/sysui/source/win32/QuickStart/QuickStart.cpp new file mode 100644 index 000000000000..d473043b9646 --- /dev/null +++ b/sysui/source/win32/QuickStart/QuickStart.cpp @@ -0,0 +1,380 @@ +// QuickStart.cpp : Defines the entry point for the application. +// + +#include "stdafx.h" +#include "resource.h" + +#define MY_TASKBAR_NOTIFICATION WM_USER+1 + +#define MAX_LOADSTRING 100 + +// message used to communicate with soffice +#define TERMINATIONVETO_MESSAGE "SO TerminationVeto" +#define TERMINATE_MESSAGE "SO Terminate" +#define LISTENER_WINDOWCLASS "SO Listener Class" +static UINT aTerminationVetoMessage = 0x7FFF; +static UINT aTerminateMessage = 0x7FFF; +static HMENU popupMenu = NULL; +static bool bTerminateVeto = true; + +#define UPDATE_TIMER 1 + +// Global Variables: +HINSTANCE hInst; // current instance +TCHAR szTitle[MAX_LOADSTRING]; // The title bar text +TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text + +TCHAR szExitString[MAX_LOADSTRING]; +TCHAR szTooltipString[MAX_LOADSTRING]; + +// Foward declarations of functions included in this code module: +ATOM MyRegisterClass(HINSTANCE hInstance); +BOOL InitInstance(HINSTANCE, int); +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); + +bool SofficeRuns() +{ + // check for soffice by searching the communication window + return ( FindWindowEx( NULL, NULL, LISTENER_WINDOWCLASS, NULL ) == NULL ) ? false : true; +} + +bool launchSoffice( ) +{ + if ( !SofficeRuns() ) + { + UINT ret = WinExec( "h:\\office60.630b\\program\\swriter.exe -bean", SW_SHOW ); +// UINT ret = WinExec( "swriter.exe -bean", SW_SHOW ); // looks in the same directory + if ( ret < 32 ) + return false; + + // wait until we can communicate + int retry = 30; + while (retry-- && !SofficeRuns() ) + Sleep(1000); + + return SofficeRuns(); + } + else + return true; +} + +void NotifyListener( HWND hWnd ) +{ + static HICON hIconActive=NULL; + //static HICON hIconInActive=NULL; + + if( !hIconActive ) + { + hIconActive = (HICON)LoadImage( GetModuleHandle( NULL ), MAKEINTRESOURCE( ICON_ACTIVE ), + IMAGE_ICON, GetSystemMetrics( SM_CXSMICON ), GetSystemMetrics( SM_CYSMICON ), + LR_DEFAULTCOLOR | LR_SHARED ); + +/* hIconInActive = (HICON)LoadImage( GetModuleHandle( NULL ), MAKEINTRESOURCE( ICON_INACTIVE ), + IMAGE_ICON, GetSystemMetrics( SM_CXSMICON ), GetSystemMetrics( SM_CYSMICON ), + LR_DEFAULTCOLOR | LR_SHARED ); + */ + } + + NOTIFYICONDATA nid; + nid.cbSize = sizeof(NOTIFYICONDATA); + nid.hWnd = hWnd; + nid.uID = IDM_QUICKSTART; +// nid.hIcon = bTerminateVeto ? hIconActive : hIconInActive; +// strcpy(nid.szTip, bTerminateVeto ? STRING_QUICKSTARTACTIVE : STRING_QUICKSTARTINACTIVE); + nid.hIcon = hIconActive; + strcpy(nid.szTip, szTooltipString); + nid.uFlags = NIF_TIP|NIF_ICON; + + // update systray + Shell_NotifyIcon( NIM_MODIFY, &nid ); + //CheckMenuItem( popupMenu, IDM_QUICKSTART, bTerminateVeto ? MF_CHECKED : MF_UNCHECKED ); + + // notify listener + SendMessage( HWND_BROADCAST, aTerminationVetoMessage, (WORD) bTerminateVeto, 0L ); +} + + + +int APIENTRY WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow) +{ + // TODO: Place code here. + MSG msg; + HACCEL hAccelTable; + aTerminationVetoMessage = RegisterWindowMessage( TERMINATIONVETO_MESSAGE ); + aTerminateMessage = RegisterWindowMessage( TERMINATE_MESSAGE ); + + // Initialize global strings + LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); + LoadString(hInstance, IDC_QUICKSTART, szWindowClass, MAX_LOADSTRING); + + LoadString(hInstance, IDS_EXIT, szExitString, MAX_LOADSTRING); + LoadString(hInstance, IDS_TOOLTIP, szTooltipString, MAX_LOADSTRING); + + MyRegisterClass(hInstance); + + // Perform application initialization: + if (!InitInstance (hInstance, nCmdShow)) + { + return FALSE; + } + + hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_QUICKSTART); + + // Main message loop: + while (GetMessage(&msg, NULL, 0, 0)) + { + if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + return msg.wParam; +} + + + +// +// FUNCTION: MyRegisterClass() +// +// PURPOSE: Registers the window class. +// +// COMMENTS: +// +// This function and its usage is only necessary if you want this code +// to be compatible with Win32 systems prior to the 'RegisterClassEx' +// function that was added to Windows 95. It is important to call this function +// so that the application will get 'well formed' small icons associated +// with it. +// +ATOM MyRegisterClass(HINSTANCE hInstance) +{ + WNDCLASSEX wcex; + + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = (WNDPROC)WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_QUICKSTART); + wcex.hCursor = LoadCursor(NULL, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wcex.lpszMenuName = (LPCSTR)IDC_QUICKSTART; + wcex.lpszClassName = szWindowClass; + wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); + + return RegisterClassEx(&wcex); +} + +// +// FUNCTION: InitInstance(HANDLE, int) +// +// PURPOSE: Saves instance handle and creates main window +// +// COMMENTS: +// +// In this function, we save the instance handle in a global variable and +// create and display the main program window. +// +BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) +{ + HWND hWnd; + + hInst = hInstance; // Store instance handle in our global variable + + hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); + + if (!hWnd) + { + return FALSE; + } + + nCmdShow = SW_HIDE; // hide main window, we only need the taskbar icon + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + + return TRUE; +} + +// +// FUNCTION: WndProc(HWND, unsigned, WORD, LONG) +// +// PURPOSE: Processes messages for the main window. +// +// WM_COMMAND - process the application menu +// WM_PAINT - Paint the main window +// WM_DESTROY - post a quit message and return +// +// +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_CREATE: + { + // make sure soffice runs + if( !launchSoffice() ) + return -1; + + // create popup menu + popupMenu = CreatePopupMenu(); + static int count=0; + + // Add my items + MENUITEMINFO mi; + mi.cbSize = sizeof(MENUITEMINFO); + mi.fMask=MIIM_TYPE|MIIM_STATE|MIIM_ID; + mi.fType=MFT_STRING; + mi.fState=MFS_ENABLED|MFS_DEFAULT; + mi.wID = IDM_QUICKSTART; + mi.hSubMenu=NULL; + mi.hbmpChecked=NULL; + mi.hbmpUnchecked=NULL; + mi.dwItemData=NULL; + mi.dwTypeData = "QuickStart"; + mi.cch = strlen(mi.dwTypeData); +// InsertMenuItem(popupMenu, count++, TRUE, &mi); + + mi.cbSize = sizeof(MENUITEMINFO); + mi.fMask=MIIM_TYPE|MIIM_STATE|MIIM_ID; + mi.fType=MFT_STRING; + mi.fState=MFS_ENABLED; + mi.wID = IDM_ABOUT; + mi.hSubMenu=NULL; + mi.hbmpChecked=NULL; + mi.hbmpUnchecked=NULL; + mi.dwItemData=NULL; + mi.dwTypeData = "Info..."; + mi.cch = strlen(mi.dwTypeData); +// InsertMenuItem(popupMenu, count++, TRUE, &mi); + + mi.cbSize = sizeof(MENUITEMINFO); + mi.fMask=MIIM_TYPE; + mi.fType=MFT_SEPARATOR; + mi.hSubMenu=NULL; + mi.hbmpChecked=NULL; + mi.hbmpUnchecked=NULL; + mi.dwItemData=NULL; +// InsertMenuItem(popupMenu, count++, TRUE, &mi); + + mi.cbSize = sizeof(MENUITEMINFO); + mi.fMask=MIIM_TYPE|MIIM_STATE|MIIM_ID; + mi.fType=MFT_STRING; + mi.fState=MFS_ENABLED; + mi.wID = IDM_EXIT; + mi.hSubMenu=NULL; + mi.hbmpChecked=NULL; + mi.hbmpUnchecked=NULL; + mi.dwItemData=NULL; + mi.dwTypeData = szExitString; + mi.cch = strlen(mi.dwTypeData); + InsertMenuItem(popupMenu, count++, TRUE, &mi); + + // add taskbar icon + NOTIFYICONDATA nid; + nid.cbSize = sizeof(NOTIFYICONDATA); + nid.hWnd = hWnd; + nid.uID = IDM_QUICKSTART; + nid.uFlags = NIF_MESSAGE; + nid.uCallbackMessage=MY_TASKBAR_NOTIFICATION; + Shell_NotifyIcon(NIM_ADD, &nid); + + // and update state + NotifyListener( hWnd ); + + // check for soffice + SetTimer(hWnd, UPDATE_TIMER, 3000, NULL); + } + break; + + case MY_TASKBAR_NOTIFICATION: // message from taskbar + switch(lParam) + { +/* + case WM_LBUTTONDBLCLK: + bTerminateVeto = bTerminateVeto ? false : true; + NotifyListener( hWnd ); + break; + */ + + case WM_LBUTTONDOWN: + case WM_RBUTTONDOWN: + { + POINT pt; + GetCursorPos(&pt); + SetForegroundWindow( hWnd ); + int m = TrackPopupMenuEx(popupMenu, TPM_RETURNCMD|TPM_LEFTALIGN|TPM_RIGHTBUTTON, + pt.x, pt.y, hWnd, NULL); + // BUGFIX: See Q135788 (PRB: Menus for Notification Icons Don't Work Correctly) + PostMessage(hWnd, NULL, 0, 0); + switch(m) + { + case IDM_QUICKSTART: + bTerminateVeto = bTerminateVeto ? false : true; + NotifyListener( hWnd ); + break; + case IDM_ABOUT: + DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); + break; + case IDM_EXIT: + DestroyWindow(hWnd); + break; + } + } + break; + } + break; + + case WM_TIMER: + if( wParam == UPDATE_TIMER ) + { + // update state + NotifyListener( hWnd ); + } + break; + + case WM_DESTROY: + // try to terminate office + SendMessage( HWND_BROADCAST, aTerminateMessage, 0, 0L ); + + // delete taskbar icon + NOTIFYICONDATA nid; + nid.cbSize=sizeof(NOTIFYICONDATA); + nid.hWnd = hWnd; + nid.uID = IDM_QUICKSTART; + Shell_NotifyIcon(NIM_DELETE, &nid); + + PostQuitMessage(0); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + return 0; +} + +// Mesage handler for about box. +LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG: + return TRUE; + + case WM_COMMAND: + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) + { + EndDialog(hDlg, LOWORD(wParam)); + return TRUE; + } + break; + } + return FALSE; +} diff --git a/sysui/source/win32/QuickStart/QuickStart.h b/sysui/source/win32/QuickStart/QuickStart.h new file mode 100644 index 000000000000..d0afd98ec430 --- /dev/null +++ b/sysui/source/win32/QuickStart/QuickStart.h @@ -0,0 +1,12 @@ + +#if !defined(AFX_QUICKSTART_H__7D38EE02_7699_4CF0_AFF9_FD92E05CC009__INCLUDED_) +#define AFX_QUICKSTART_H__7D38EE02_7699_4CF0_AFF9_FD92E05CC009__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include "resource.h" + + +#endif // !defined(AFX_QUICKSTART_H__7D38EE02_7699_4CF0_AFF9_FD92E05CC009__INCLUDED_) diff --git a/sysui/source/win32/QuickStart/StdAfx.h b/sysui/source/win32/QuickStart/StdAfx.h new file mode 100644 index 000000000000..b1433e84cdad --- /dev/null +++ b/sysui/source/win32/QuickStart/StdAfx.h @@ -0,0 +1,33 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_) +#define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + + +// Windows Header Files: +#include <windows.h> +#include <shellapi.h> + +// C RunTime Header Files +#include <stdlib.h> +#include <malloc.h> +#include <memory.h> +#include <tchar.h> + +// Local Header Files + +// TODO: reference additional headers your program requires here + +//{{AFX_INSERT_LOCATION}} +// Microsoft Visual C++ will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_) diff --git a/sysui/source/win32/QuickStart/makefile.mk b/sysui/source/win32/QuickStart/makefile.mk new file mode 100644 index 000000000000..29c8df4bc43c --- /dev/null +++ b/sysui/source/win32/QuickStart/makefile.mk @@ -0,0 +1,102 @@ +#************************************************************************* +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.1 $ +# +# last change: $Author: ssa $ $Date: 2001-05-04 13:58:56 $ +# +# The Contents of this file are made available subject to the terms of +# either of the following licenses +# +# - GNU Lesser General Public License Version 2.1 +# - Sun Industry Standards Source License Version 1.1 +# +# Sun Microsystems Inc., October, 2000 +# +# GNU Lesser General Public License Version 2.1 +# ============================================= +# Copyright 2000 by Sun Microsystems, Inc. +# 901 San Antonio Road, Palo Alto, CA 94303, USA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License version 2.1, as published by the Free Software Foundation. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# +# Sun Industry Standards Source License Version 1.1 +# ================================================= +# The contents of this file are subject to the Sun Industry Standards +# Source License Version 1.1 (the "License"); You may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at http://www.openoffice.org/license.html. +# +# Software provided under this License is provided on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, +# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. +# See the License for the specific provisions governing your rights and +# obligations concerning the Software. +# +# The Initial Developer of the Original Code is: Sun Microsystems, Inc. +# +# Copyright: 2000 by Sun Microsystems, Inc. +# +# All Rights Reserved. +# +# Contributor(s): _______________________________________ +# +# +# +#************************************************************************* + +PRJ=..$/..$/.. + +PRJNAME=sysui +TARGET=quickstart +LIBTARGET=NO +ENABLE_EXCEPTIONS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +# --- Resources ---------------------------------------------------- + +RCFILES=QuickStart.rc + +# --- Files -------------------------------------------------------- + +OBJFILES=$(OBJ)$/QuickStart.obj + +APP1OBJS=$(OBJFILES) + +APP1NOSAL=TRUE + +APP1TARGET=$(TARGET) + +APP1STDLIBS=shell32.lib\ + ole32.lib\ + gdi32.lib\ + oleaut32.lib\ + tools32.lib\ + comdlg32.lib\ + kernel32.lib\ + comsupp.lib\ + oleaut32.lib + +APP1RES=$(RES)$/$(TARGET).res + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk diff --git a/sysui/source/win32/QuickStart/resource.h b/sysui/source/win32/QuickStart/resource.h new file mode 100644 index 000000000000..d34beb00c5c9 --- /dev/null +++ b/sysui/source/win32/QuickStart/resource.h @@ -0,0 +1,32 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by QUICKSTART.RC +// +#define IDR_MAINFRAME 128 +#define IDD_QUICKSTART_DIALOG 102 +#define IDD_ABOUTBOX 103 +#define IDS_APP_TITLE 103 +#define IDM_ABOUT 104 +#define IDM_EXIT 105 +#define IDS_HELLO 106 +#define IDI_QUICKSTART 107 +#define IDI_SMALL 108 +#define IDC_QUICKSTART 109 +#define IDM_QUICKSTART 110 +#define IDS_TOOLTIP 111 +#define IDS_EXIT 112 +#define ICON_ACTIVE 1 +#define ICON_INACTIVE 2 +#define IDC_MYICON 3 +#define IDC_STATIC -1 +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS + +#define _APS_NEXT_RESOURCE_VALUE 129 +#define _APS_NEXT_COMMAND_VALUE 32771 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 113 +#endif +#endif |