summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Schäfer <ssa@openoffice.org>2001-05-04 12:58:56 +0000
committerStephan Schäfer <ssa@openoffice.org>2001-05-04 12:58:56 +0000
commitf024d67db82ab25c481782d0130d264208e37851 (patch)
tree9558c655a269c31fb5bf1058c60ff3c3817d4deb
parent4ceda05e6554821728d7ee0d9f34cc087577c53f (diff)
initial release
-rw-r--r--sysui/source/win32/QuickStart/QuickStart.cpp380
-rw-r--r--sysui/source/win32/QuickStart/QuickStart.h12
-rw-r--r--sysui/source/win32/QuickStart/StdAfx.h33
-rw-r--r--sysui/source/win32/QuickStart/makefile.mk102
-rw-r--r--sysui/source/win32/QuickStart/resource.h32
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