//
// The contents of this file are subject to the Mozilla Public License
// Version 1.0 (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.mozilla.org/MPL/
//
// Software distributed under the License is distributed on an "AS IS"
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
// the License for the specific language governing rights and limitations
// under the License.
//
// The Original Code is CPhone, a cross platform voip gui.
//
// The Initial Developer of the Original Code is Derek Smithies.
//
// Copyright (C) 2002 Indranet Technologies Ltd,
// http://www.indranet-technologies.com
// All Rights Reserved.
//
// Contributor(s): _______________
/*
*
* $Log: mainwindowSub.h,v $
* Revision 1.9 2004/06/02 04:56:43 dereksmithies
* Bring up to date with CVS as of today, Uses codec plugins now.
* You may need to set the PWLIBPLUGINPATH environment variable.
*
* Revision 1.8 2004/04/23 05:09:59 dereksmithies
* Fixes so it works with latest openh323 lib, and not lock X display.
*
* Revision 1.7 2003/09/02 03:37:32 dereksmithies
* Add statistics, new icons, toolbuttons (icon + name)
*
* Revision 1.6 2003/08/26 04:48:02 dereksmithies
* Fixes to get statistics working right, add icons, add ok,cancel,apply buttons
*
* Revision 1.5 2003/08/07 23:56:38 dereksmithies
* Main Program Icon always comes up at the end of a call.
*
* Revision 1.4 2003/05/20 03:32:28 dereksmithies
* Better handling of ixj handset states, and call progress states.
*
* Revision 1.3 2003/05/09 03:08:24 dereksmithies
* Fix Microtelco handling, and message display
*
* Revision 1.2 2003/04/04 04:37:49 dereksmithies
* Major upgrade.
* Ixj & microtelco support added. Fix threading issues.
*
* Revision 1.1.1.1 2002/05/12 22:55:05 dereksmithies
* Initial release.
*
*
*
*
*/
#ifndef MAINUI_H
#define MAINUI_H
#include "mainwindow.h"
#include "cpendpoint.h"
#include <ptlib.h>
#include <h323.h>
#include <qevent.h>
#define MAIN_UI_UP (QEvent::User + 100)
#define CALL_ANSWER_RESPONSE_YES (QEvent::User + 200)
#define CALL_ANSWER_RESPONSE_NO (QEvent::User + 300)
#define CALL_ANSWER_RESPONSE_TMO (QEvent::User + 400)
#define CALL_ANSWER_INITIATE (QEvent::User + 500)
#define CUSTOM_EVENT_DIE (QEvent::User + 1000)
#define CUSTOM_EVENT_MESSAGE (QEvent::User + 1100)
class MainUi : public FormMainWindow, H323EndPoint
{
PCLASSINFO(MainUi, H323EndPoint);
public:
MainUi();
~MainUi();
/** Determines the default settings of
everything, and sets it appropriately.
Does this by opening each of the descendant forms,
which reads each parameter (with a default setting available*/
void InitialiseConfiguration();
PVideoOutputDevice *GetDisplayModule (BOOL isEncoding, BOOL isFlipped);
void AudioClicked_slot();
void ConnectClicked_slot();
void ExitClicked_slot();
void SettingsClicked_slot();
void VideoClicked_slot();
void OpenStatistics_slot();
void QueryCallAnswer(PString remoteNode);
void SetDisplayString(QString message);
void DisplayInfoMessage(char *message);
void DisplayInfoMessage(PString message);
void DisplayInfoMessage(QString message);
void DisplayCriticalError(char * message);
void DisplayCriticalError(PString message);
void DisplayCriticalError(QString message);
void closeEvent(QCloseEvent *e);
void customEvent(QCustomEvent *e);
void timerEvent(QTimerEvent *);
void OnConnectionEstablished(PString message);
void OnConnectionCleared(PString message);
void OnConnectionEstablished(BOOL isEstablished);
void SendDieMessageToWindow(enum WindowName name);
void StopCallAnswer();
BOOL SetEchoCancellation(PString newLevel);
const PString & GetLocalUserName() const
{ return H323EndPoint::GetLocalUserName(); }
void TranslateTCPAddress(PIPSocket::Address &localAddr, const PIPSocket::Address &remoteAddr);
// overrides from H323EndPoint
virtual H323Connection * CreateConnection(unsigned callReference);
virtual BOOL OnIncomingCall(H323Connection &, const H323SignalPDU &, H323SignalPDU &);
virtual void OnConnectionEstablished(H323Connection &, const PString &);
virtual void OnConnectionCleared(H323Connection &, const PString &);
virtual BOOL OpenAudioChannel(H323Connection &, BOOL, unsigned, H323AudioCodec &);
virtual BOOL OpenVideoChannel(H323Connection &, BOOL, H323VideoCodec &);
// Functions that are added to the base H323EndPoint class.
BOOL InitialiseVoipSettings(void);
BOOL SearchForAGatekeeper(PString gkName="");
BOOL SetDisableSilenceDetection(BOOL disableSilence);
BOOL WaitingForACall();
PString GetCurrentCallToken() const { return currentCallToken; }
CpVideoChannel *GetReceiveVideoChannel() { return receiveVideoChannel; }
CpVideoChannel *GetTransmitVideoChannel() { return transmitVideoChannel; }
void SetCodecFrames(const PString & fmt, unsigned frames);
void AddAllCapabilities();
void RebuildCapabilityTable();
void StartTerminationProcess();
void ExitCurrentCall();
void UpdateToolButtonConnect(BOOL isEstablished);
void GetVideoFrameSizeSetting(unsigned &newFrameWidth, unsigned &newFrameHeight);
void MakeOutgoingCall(const PString &, const PString &);
void OnNoAnswerTimeout();
void StartCall(const PString & str);
void ReorderCapabilities();
void UpdateUdpPorts();
PStringToString GetInterfaceAddressList();
void UpdateUserName();
void DisplayMessage(QString message);
void UpdateNatTraversalAddress();
void DisplayMessage(PString message);
void DisplayMessage(char * message);
BOOL CreateLocalVideoDisplayThread();
BOOL DeleteLocalVideoDisplayThread();
BOOL InitialiseVideoDisplay();
void DeleteVideoDisplay();
BOOL DisplayLocalIsNow(BOOL doDisplayLocal);
BOOL AttachPlayerReaderToVideoChannel(BOOL isEncoding);
AudioOptions audioOpts;
ConnectOptions connectOpts;
VideoOptions videoOpts;
QImage *cPhoneIcon;
void AnswerCall(H323Connection::AnswerCallResponse response);
PStringArray GetAvailableDeviceNames();
PStringArray GetAvailableIxjDeviceNames() { return ixjCardNames; }
PStringArray GetAvailableEchoCancNames();
void SetSoundChannelBufferDepth(unsigned int newDepth);
void SetAudioJitterDelay(unsigned int low, unsigned int high);
virtual BOOL SetSoundChannelRecordDevice(const PString &newDevice);
virtual BOOL SetSoundChannelPlayDevice(const PString &newDevice);
H323Connection::AnswerCallResponse AnswerCallConditional(const PString & caller,
PString newCallToken);
H323Connection *GetCurrentConnectionWithLock();
#ifdef HAS_IXJ
LidHandlerThread lidThread;
#endif
enum States {
epNoTone, /*0*/
epDialTone, /*1*/
epAnsweringCall, /*2*/
epConnectingCall, /*3*/
epWaitingForAnswer,/*4*/
epCallInProgress, /*5*/
epCallHungup, /*6*/
epStateIllegal,
};
protected:
States epState;
public:
BOOL IsWaitingForAnswer() { return epState == epWaitingForAnswer; }
BOOL IsInCall() { return epState == epCallInProgress; }
States GetEpState() { return epState; }
BOOL MicroTelcoActivate(BOOL doActivate);
BOOL InitialiseGatekeeper();
PString GetGatekeeperName();
PString GetGatekeeperRegistrationMessage();
void HandleHandsetDown(BOOL isDown);
protected:
// only used internally
QString remoteComputer;
LocalVideoDisplayThread * localVideoThread;
PIPSocket::Address masqAddress;
BOOL SetSoundDevice(const char *, PSoundChannel::Directions);
CpVideoChannel *receiveVideoChannel;
CpVideoChannel *transmitVideoChannel;
PString currentCallToken;
PString setupInformation;
BOOL firstErrorOpenAudioChannel;
BOOL applicationIsExiting;
PStringArray soundCardNames;
PStringArray ixjCardNames;
friend class CpConnection;
};
////////////////////////////////////////////////////////////////////////////////
class MessageCustomEvent : public QCustomEvent
{
public:
MessageCustomEvent(int id, QString newTitle, QString newMessage) : QCustomEvent(id)
{ message = newMessage; title = newTitle; };
QString GetMessage() { return message; }
QString GetTitle() { return title; }
protected:
QString message;
QString title;
};
#endif // MAINUI_H
syntax highlighted by Code2HTML, v. 0.9.1