diff options
author | George Hazan <ghazan@miranda.im> | 2016-12-27 20:40:35 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2016-12-27 20:40:35 +0300 |
commit | 3c0c4ec799f35eb99215758f99491583033c5741 (patch) | |
tree | 465e516f7dc5aa6ba7b8f952601b44c967c68d14 | |
parent | e191ad15875a046f7a243596fe92e99f88cea072 (diff) |
first version of options dialog
-rw-r--r-- | protocols/Discord/res/discord.rc | 22 | ||||
-rw-r--r-- | protocols/Discord/src/main.cpp | 2 | ||||
-rw-r--r-- | protocols/Discord/src/options.cpp | 72 | ||||
-rw-r--r-- | protocols/Discord/src/proto.cpp | 65 | ||||
-rw-r--r-- | protocols/Discord/src/proto.h | 16 | ||||
-rw-r--r-- | protocols/Discord/src/resource.h | 7 | ||||
-rw-r--r-- | protocols/Discord/src/stdafx.h | 9 |
7 files changed, 178 insertions, 15 deletions
diff --git a/protocols/Discord/res/discord.rc b/protocols/Discord/res/discord.rc index 75f3bfe2e9..41366bcd7b 100644 --- a/protocols/Discord/res/discord.rc +++ b/protocols/Discord/res/discord.rc @@ -55,5 +55,27 @@ END IDI_MAIN ICON "discord.ico" IDI_OFFLINE ICON "offline.ico" +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_OPTIONS_ACCOUNT DIALOGEX 0, 0, 305, 190 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + GROUPBOX "User details",IDC_STATIC,7,7,291,62 + LTEXT "E-mail:",IDC_STATIC,17,20,61,8,0,WS_EX_RIGHT + EDITTEXT IDC_USERNAME,84,18,123,13,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,17,36,61,8,0,WS_EX_RIGHT + EDITTEXT IDC_PASSWORD,84,34,123,13,ES_PASSWORD | ES_AUTOHSCROLL + + GROUPBOX "Contacts",IDC_STATIC,7,77,291,88 + LTEXT "Default group:",IDC_STATIC,17,91,61,8,0,WS_EX_RIGHT + EDITTEXT IDC_GROUP,84,89,123,13,ES_AUTOHSCROLL +END + #endif // English (United States) resources + ///////////////////////////////////////////////////////////////////////////// diff --git a/protocols/Discord/src/main.cpp b/protocols/Discord/src/main.cpp index 06e922e49d..9779dd8817 100644 --- a/protocols/Discord/src/main.cpp +++ b/protocols/Discord/src/main.cpp @@ -55,7 +55,7 @@ extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = { MIID_PROTOC static PROTO_INTERFACE* protoInit(const char *proto_name, const wchar_t *username) { - return new DiscordProto(proto_name, username); + return new ÑDiscordProto(proto_name, username); } static int protoUninit(PROTO_INTERFACE *proto) diff --git a/protocols/Discord/src/options.cpp b/protocols/Discord/src/options.cpp new file mode 100644 index 0000000000..6b9fe9b497 --- /dev/null +++ b/protocols/Discord/src/options.cpp @@ -0,0 +1,72 @@ +/* +Copyright © 2016 Miranda NG team + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program 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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "stdafx.h" + +class CDiscardAccountOptions : public CProtoDlgBase<ÑDiscordProto> +{ + CCtrlEdit m_edGroup, m_edUserName, m_edPassword; + +public: + CDiscardAccountOptions(ÑDiscordProto *ppro) : + CProtoDlgBase<ÑDiscordProto>(ppro, IDD_OPTIONS_ACCOUNT), + m_edGroup(this, IDC_GROUP), + m_edUserName(this, IDC_USERNAME), + m_edPassword(this, IDC_PASSWORD) + {} + + virtual void OnInitDialog() override + { + ptrW buf(m_proto->getWStringA(DB_KEY_EMAIL)); + if (buf) + m_edUserName.SetText(buf); + + buf = m_proto->getWStringA(DB_KEY_PASSWORD); + if (buf) + m_edPassword.SetText(buf); + + buf = m_proto->getWStringA(DB_KEY_GROUP); + m_edGroup.SetText(buf ? buf : DB_KEYVAL_GROUP); + } + + virtual void OnApply() override + { + ptrW buf(m_edUserName.GetText()); + m_proto->setWString(DB_KEY_EMAIL, buf); + + buf = m_edPassword.GetText(); + m_proto->setWString(DB_KEY_PASSWORD, buf); + + buf = m_edGroup.GetText(); + m_proto->setWString(DB_KEY_GROUP, buf); + } +}; + +int ÑDiscordProto::OnOptionsInit(WPARAM wParam, LPARAM) +{ + OPTIONSDIALOGPAGE odp = { 0 }; + odp.hInstance = g_hInstance; + odp.szTitle.w = m_tszUserName; + odp.flags = ODPF_UNICODE; + odp.szGroup.w = LPGENW("Network"); + + odp.position = 1; + odp.szTab.w = LPGENW("Account"); + odp.pDialog = new CDiscardAccountOptions(this); + Options_AddPage(wParam, &odp); + return 0; +} diff --git a/protocols/Discord/src/proto.cpp b/protocols/Discord/src/proto.cpp index 73651f7b7f..c0af3fe2bd 100644 --- a/protocols/Discord/src/proto.cpp +++ b/protocols/Discord/src/proto.cpp @@ -1,6 +1,5 @@ /* -Copyright © 2012-16 Miranda NG team -Copyright © 2009 Jim Porter +Copyright © 2016 Miranda NG team This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,24 +17,72 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "stdafx.h" -DiscordProto::DiscordProto(const char *proto_name, const wchar_t *username) : - PROTO<DiscordProto>(proto_name, username) +ÑDiscordProto::ÑDiscordProto(const char *proto_name, const wchar_t *username) : + PROTO<ÑDiscordProto>(proto_name, username) { - CreateProtoService(PS_GETNAME, &DiscordProto::GetName); - CreateProtoService(PS_GETSTATUS, &DiscordProto::GetStatus); + // Services + CreateProtoService(PS_GETNAME, &ÑDiscordProto::GetName); + CreateProtoService(PS_GETSTATUS, &ÑDiscordProto::GetStatus); + + // Events + HookProtoEvent(ME_OPT_INITIALISE, &ÑDiscordProto::OnOptionsInit); } -DiscordProto::~DiscordProto() +ÑDiscordProto::~ÑDiscordProto() { } -INT_PTR DiscordProto::GetName(WPARAM wParam, LPARAM lParam) +DWORD_PTR ÑDiscordProto::GetCaps(int type, MCONTACT) +{ + switch (type) { + case PFLAGNUM_1: + return PF1_IM | PF1_MODEMSGRECV | PF1_SERVERCLIST; + case PFLAGNUM_2: + return PF2_ONLINE; + case PFLAGNUM_3: + return PF2_ONLINE; + case PFLAGNUM_4: + return PF4_NOCUSTOMAUTH | PF4_AVATARS; + case PFLAG_UNIQUEIDTEXT: + return (DWORD_PTR)"E-mail"; + case PFLAG_UNIQUEIDSETTING: + return (DWORD_PTR)DB_KEY_EMAIL; + } + return 0; +} + +INT_PTR ÑDiscordProto::GetName(WPARAM wParam, LPARAM lParam) { mir_strncpy((char*)lParam, m_szModuleName, (int)wParam); return 0; } -INT_PTR DiscordProto::GetStatus(WPARAM, LPARAM) +INT_PTR ÑDiscordProto::GetStatus(WPARAM, LPARAM) { return m_iStatus; } + +///////////////////////////////////////////////////////////////////////////////////////// + +int ÑDiscordProto::OnModulesLoaded(WPARAM, LPARAM) +{ + return 0; +} + +int ÑDiscordProto::OnPreShutdown(WPARAM, LPARAM) +{ + return 0; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +int ÑDiscordProto::OnEvent(PROTOEVENTTYPE event, WPARAM wParam, LPARAM lParam) +{ + switch (event) { + case EV_PROTO_ONLOAD: return OnModulesLoaded(wParam, lParam); + case EV_PROTO_ONEXIT: return OnPreShutdown(wParam, lParam); + case EV_PROTO_ONOPTIONS: return OnOptionsInit(wParam, lParam); + } + + return 1; +} diff --git a/protocols/Discord/src/proto.h b/protocols/Discord/src/proto.h index 1da95e1c3d..e0c7e2c073 100644 --- a/protocols/Discord/src/proto.h +++ b/protocols/Discord/src/proto.h @@ -1,12 +1,22 @@ -class DiscordProto : public PROTO<DiscordProto> +class ÑDiscordProto : public PROTO<ÑDiscordProto> { public: - DiscordProto(const char*,const wchar_t*); - ~DiscordProto(); + ÑDiscordProto(const char*,const wchar_t*); + ~ÑDiscordProto(); + + // PROTO_INTERFACE + virtual DWORD_PTR __cdecl GetCaps(int, MCONTACT = 0) override; + + virtual int __cdecl OnEvent(PROTOEVENTTYPE, WPARAM, LPARAM) override; // Services INT_PTR __cdecl GetName(WPARAM, LPARAM); INT_PTR __cdecl GetStatus(WPARAM, LPARAM); + + // Events + int __cdecl OnModulesLoaded(WPARAM, LPARAM); + int __cdecl OnPreShutdown(WPARAM, LPARAM); + int __cdecl OnOptionsInit(WPARAM, LPARAM); }; diff --git a/protocols/Discord/src/resource.h b/protocols/Discord/src/resource.h index f1e2a41867..44d79b91ae 100644 --- a/protocols/Discord/src/resource.h +++ b/protocols/Discord/src/resource.h @@ -5,6 +5,11 @@ #define IDI_MAIN 101 #define IDI_OFFLINE 102 +#define IDD_OPTIONS_ACCOUNT 103 + +#define IDC_PASSWORD 1001 +#define IDC_USERNAME 1002 +#define IDC_GROUP 1003 // Next default values for new objects // @@ -12,7 +17,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 103 #define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_CONTROL_VALUE 1004 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/protocols/Discord/src/stdafx.h b/protocols/Discord/src/stdafx.h index 0289445912..414b542c0f 100644 --- a/protocols/Discord/src/stdafx.h +++ b/protocols/Discord/src/stdafx.h @@ -30,6 +30,7 @@ #include <m_protosvc.h> #include <m_protoint.h> #include <m_skin.h> +#include <m_gui.h> #include <m_system.h> #include <m_userinfo.h> #include <m_icolib.h> @@ -41,4 +42,10 @@ extern HINSTANCE g_hInstance; #include "version.h" -#include "proto.h"
\ No newline at end of file +#include "proto.h" + +#define DB_KEY_EMAIL "Email" +#define DB_KEY_PASSWORD "Password" + +#define DB_KEY_GROUP "GroupName" +#define DB_KEYVAL_GROUP L"Discord" |