diff --git a/App.xaml.cpp b/App.xaml.cpp index 275592a730265fbe7fd6fcdda1d8f028c558bb12..e3f6a8de9fb463a4d06645bb97beddebc0b1735a 100644 --- a/App.xaml.cpp +++ b/App.xaml.cpp @@ -17,6 +17,7 @@ **************************************************************************/ #include "pch.h" +#include "LoadingPage.xaml.h" #include "MainPage.xaml.h" using namespace Windows::ApplicationModel::Core; @@ -45,20 +46,16 @@ App::OnLaunched(LaunchActivatedEventArgs^ e) rootFrame = ref new Frame(); if (rootFrame->Content == nullptr) - rootFrame->Navigate(TypeName(MainPage::typeid), e->Arguments); + rootFrame->Navigate(TypeName(Views::LoadingPage::typeid), e->Arguments); Window::Current->Content = rootFrame; Window::Current->Activate(); } else - rootFrame->Navigate(TypeName(MainPage::typeid), e->Arguments); + rootFrame->Navigate(TypeName(Views::LoadingPage::typeid), e->Arguments); CoreApplication::GetCurrentView()->TitleBar->ExtendViewIntoTitleBar = true; ApplicationView::GetForCurrentView()->TitleBar->ButtonBackgroundColor = Colors::LightBlue; ApplicationView::GetForCurrentView()->TitleBar->ButtonInactiveBackgroundColor = Colors::LightBlue; ApplicationView::GetForCurrentView()->TitleBar->ForegroundColor = Colors::White; ApplicationView::GetForCurrentView()->TitleBar->ButtonForegroundColor = Colors::White; - - /* summon the daemon */ - //RingD::instance->startDaemon(); //disabled on purpose - } \ No newline at end of file diff --git a/LoadingPage.xaml b/LoadingPage.xaml new file mode 100644 index 0000000000000000000000000000000000000000..b1b3b8454979f08094e7fc16b4d1956066a59c88 --- /dev/null +++ b/LoadingPage.xaml @@ -0,0 +1,29 @@ +<!-- ********************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: Jäger Nicolas<nicolas.jager@savoirfairelinux.com> * +* * +* 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 3 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/> . * +*********************************************************************** --> +<Page + x:Class="RingClientUWP.Views.LoadingPage" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d"> + + <Grid> + <TextBlock Text="loading page"/> + </Grid> +</Page> diff --git a/LoadingPage.xaml.cpp b/LoadingPage.xaml.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b0263ee70e9b35f42a603b1faf0e766a74b77267 --- /dev/null +++ b/LoadingPage.xaml.cpp @@ -0,0 +1,67 @@ +/************************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com> * +* Author: Traczyk Andreas <traczyk.andreas@savoirfairelinux.com> * +* * +* 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 3 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 "pch.h" + +#include "LoadingPage.xaml.h" + +#include "MainPage.xaml.h" +#include "Wizard.xaml.h" + +using namespace RingClientUWP; +using namespace RingClientUWP::Views; +using namespace RingClientUWP::ViewModel; + +using namespace Platform; +using namespace Windows::ApplicationModel::Core; +using namespace Windows::Foundation; +using namespace Windows::Foundation::Collections; +using namespace Windows::UI::ViewManagement; +using namespace Windows::UI::Xaml; +using namespace Windows::UI::Xaml::Controls; +using namespace Windows::UI::Xaml::Controls::Primitives; +using namespace Windows::UI::Core; +using namespace Windows::UI::Xaml::Data; +using namespace Windows::UI::Xaml::Input; +using namespace Windows::UI::Xaml::Interop; +using namespace Windows::UI::Xaml::Navigation; +using namespace Windows::ApplicationModel::Activation; +using namespace Windows::Graphics::Display; +using namespace Windows::System; + +LoadingPage::LoadingPage() +{ + InitializeComponent(); + + Utils::fileExists(ApplicationData::Current->LocalFolder, ".config\\dring.yml") + .then([this](bool config_exists) + { + if (config_exists) { + RingD::instance->hasConfig = true; + this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, ref new Windows::UI::Core::DispatchedHandler([this] () { + this->Frame->Navigate(Windows::UI::Xaml::Interop::TypeName(MainPage::typeid)); + })); + } + else { + RingD::instance->hasConfig = false; + this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, ref new Windows::UI::Core::DispatchedHandler([this] () { + this->Frame->Navigate(Windows::UI::Xaml::Interop::TypeName(Wizard::typeid)); + })); + } + }); +} diff --git a/LoadingPage.xaml.h b/LoadingPage.xaml.h new file mode 100644 index 0000000000000000000000000000000000000000..9c31a90956d34a36eebf6012e608c69d9d5d11ee --- /dev/null +++ b/LoadingPage.xaml.h @@ -0,0 +1,31 @@ +#pragma once +/************************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com> * +* * +* 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 3 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 "LoadingPage.g.h" + +namespace RingClientUWP +{ +namespace Views +{ +public ref class LoadingPage sealed +{ +public: + LoadingPage(); +}; +} +} \ No newline at end of file diff --git a/MainPage.xaml.cpp b/MainPage.xaml.cpp index d0e1d25b29f5d6ffb7173deb618c9e77fcd05e0b..aa7c13d6656e59907481f73523fcec952634dcc0 100644 --- a/MainPage.xaml.cpp +++ b/MainPage.xaml.cpp @@ -98,3 +98,9 @@ RingClientUWP::MainPage::showFrame(Windows::UI::Xaml::Controls::Frame^ frame) dynamic_cast<MessageTextPage^>(_messageTextFrame_->Content)->updatePageContent(); } } + +void +RingClientUWP::MainPage::OnNavigatedTo(NavigationEventArgs ^ e) +{ + RingD::instance->startDaemon(); +} \ No newline at end of file diff --git a/MainPage.xaml.h b/MainPage.xaml.h index e2a9e0fd2954ee1709cce1564c49f38fe44870ba..7b9691bcd05c6ed235b1a219572f4c01207086bc 100644 --- a/MainPage.xaml.h +++ b/MainPage.xaml.h @@ -31,6 +31,7 @@ public: MainPage(); protected: + virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override; virtual void OnKeyDown(KeyRoutedEventArgs^ e) override; private: void _toggleSmartBoxButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); diff --git a/Package.appxmanifest b/Package.appxmanifest index 7ac7bedacf129a8bdab923551a8f99c60f1bb82d..d3ec44c53e834b0bf267f6d9c28e42d34883b249 100644 --- a/Package.appxmanifest +++ b/Package.appxmanifest @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp"> - <Identity Name="2385953f-9019-423d-aa82-d1bbacfa258b" Publisher="CN=user" Version="1.0.0.0" /> + <Identity Name="00000000-0000-0000-0000-000000000000" Publisher="CN=user" Version="1.0.0.0" /> <mp:PhoneIdentity PhoneProductId="2385953f-9019-423d-aa82-d1bbacfa258b" PhonePublisherId="00000000-0000-0000-0000-000000000000" /> <Properties> <DisplayName>ring-client-uwp</DisplayName> diff --git a/RingConsolePanel.xaml.cpp b/RingConsolePanel.xaml.cpp index 798b79450ad381e534478fdba4b2f69a95c0616f..797e023a503c00ebda8df0375169a866146da786 100644 --- a/RingConsolePanel.xaml.cpp +++ b/RingConsolePanel.xaml.cpp @@ -1,116 +1,116 @@ -/************************************************************************** -* Copyright (C) 2016 by Savoir-faire Linux * -* Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com> * -* * -* 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 3 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 "pch.h" - -#include "RingConsolePanel.xaml.h" - -using namespace RingClientUWP; -using namespace RingClientUWP::Views; -using namespace Windows::ApplicationModel::Core; -using namespace Windows::UI::Core; -using namespace Windows::UI::Xaml::Documents; - -RingConsolePanel::RingConsolePanel() -{ - InitializeComponent(); - - RingDebug::instance->messageToScreen += ref new debugMessageToScreen([this](Platform::String^ message) { - output(message); - }); -} - -void -RingConsolePanel::output(Platform::String^ message) -{ - try { - Run^ inlineText = ref new Run(); - inlineText->Text = message; - Paragraph^ paragraph = ref new Paragraph(); - paragraph->Inlines->Append(inlineText); - _debugWindowOutput_->Blocks->Append(paragraph); - _scrollView_->UpdateLayout(); - _scrollView_->ScrollToVerticalOffset(_scrollView_->ScrollableHeight); - } - catch (Platform::Exception^ e) { - return; - } -} - -void RingConsolePanel::_btnSendDbgCmd__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) -{ - sendCommand(); -} - - -void RingConsolePanel::_sendDbgCmd__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e) -{ - if (e->Key == Windows::System::VirtualKey::Enter && _tBoxDbg_->Text != "") { - sendCommand(); - } - else if (e->Key == Windows::System::VirtualKey::PageUp) { - - if (historyLevel < 1) - return; - if (historyLevel == historyCmds.Size) - currentCmd = _tBoxDbg_->Text; - historyLevel--; - _tBoxDbg_->Text = historyCmds.GetAt(historyLevel); - - } - else if (e->Key == Windows::System::VirtualKey::PageDown) { - if (historyLevel < historyCmds.Size) { - _tBoxDbg_->Text = historyCmds.GetAt(historyLevel); - historyLevel++; - - } - else { - _tBoxDbg_->Text = currentCmd; - } - return; - } -} - -/*\ ADD EACH NEW COMMAND TO THE HELP LIST \*/ -void RingConsolePanel::sendCommand() -{ - auto cmdInput = _tBoxDbg_->Text; - addCommandToHistory(); - historyLevel++; - _tBoxDbg_->Text = ""; - currentCmd = ""; - historyLevel = historyCmds.Size; - - if (cmdInput == "") { - return; - } - else if (cmdInput == "help") { - MSG_(">> Help :"); - MSG_("use PgUp/PgDown for crawling commands history."); - return; - } - - std::wstring wStr(cmdInput->Begin()); - std::string result(wStr.begin(), wStr.end()); - - MSG_(">> error, command \'" + result + "\' not found"); -} - -void RingConsolePanel::addCommandToHistory() -{ - historyCmds.Append(_tBoxDbg_->Text); +/************************************************************************** +* Copyright (C) 2016 by Savoir-faire Linux * +* Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com> * +* * +* 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 3 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 "pch.h" + +#include "RingConsolePanel.xaml.h" + +using namespace RingClientUWP; +using namespace RingClientUWP::Views; +using namespace Windows::ApplicationModel::Core; +using namespace Windows::UI::Core; +using namespace Windows::UI::Xaml::Documents; + +RingConsolePanel::RingConsolePanel() +{ + InitializeComponent(); + + RingDebug::instance->messageToScreen += ref new debugMessageToScreen([this](Platform::String^ message) { + output(message); + }); +} + +void +RingConsolePanel::output(Platform::String^ message) +{ + try { + Run^ inlineText = ref new Run(); + inlineText->Text = message; + Paragraph^ paragraph = ref new Paragraph(); + paragraph->Inlines->Append(inlineText); + _debugWindowOutput_->Blocks->Append(paragraph); + _scrollView_->UpdateLayout(); + _scrollView_->ScrollToVerticalOffset(_scrollView_->ScrollableHeight); + } + catch (Platform::Exception^ e) { + return; + } +} + +void RingConsolePanel::_btnSendDbgCmd__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +{ + sendCommand(); +} + + +void RingConsolePanel::_sendDbgCmd__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e) +{ + if (e->Key == Windows::System::VirtualKey::Enter && _tBoxDbg_->Text != "") { + sendCommand(); + } + else if (e->Key == Windows::System::VirtualKey::PageUp) { + + if (historyLevel < 1) + return; + if (historyLevel == historyCmds.Size) + currentCmd = _tBoxDbg_->Text; + historyLevel--; + _tBoxDbg_->Text = historyCmds.GetAt(historyLevel); + + } + else if (e->Key == Windows::System::VirtualKey::PageDown) { + if (historyLevel < historyCmds.Size) { + _tBoxDbg_->Text = historyCmds.GetAt(historyLevel); + historyLevel++; + + } + else { + _tBoxDbg_->Text = currentCmd; + } + return; + } +} + +/*\ ADD EACH NEW COMMAND TO THE HELP LIST \*/ +void RingConsolePanel::sendCommand() +{ + auto cmdInput = _tBoxDbg_->Text; + addCommandToHistory(); + historyLevel++; + _tBoxDbg_->Text = ""; + currentCmd = ""; + historyLevel = historyCmds.Size; + + if (cmdInput == "") { + return; + } + else if (cmdInput == "help") { + MSG_(">> Help :"); + MSG_("use PgUp/PgDown for crawling commands history."); + return; + } + + std::wstring wStr(cmdInput->Begin()); + std::string result(wStr.begin(), wStr.end()); + + MSG_(">> error, command \'" + result + "\' not found"); +} + +void RingConsolePanel::addCommandToHistory() +{ + historyCmds.Append(_tBoxDbg_->Text); } diff --git a/RingD.cpp b/RingD.cpp index 68bac893a92553e125d7f284c0077ec8a866e3a5..0cc1a990f8b31bd538a33977acfa912ace23dd05 100644 --- a/RingD.cpp +++ b/RingD.cpp @@ -33,9 +33,6 @@ using namespace Windows::UI::Core; using namespace RingClientUWP; -CoreDispatcher^ g_dispatcher; -bool has_config; - void DebugOutputWrapper(const std::string& str) { @@ -45,101 +42,88 @@ DebugOutputWrapper(const std::string& str) void RingClientUWP::RingD::startDaemon() { - g_dispatcher = CoreApplication::MainView->CoreWindow->Dispatcher; - - Utils::fileExists(ApplicationData::Current->LocalFolder, ".config\\dring.yml") - .then([this](bool config_exists) + create_task([&]() { - if (!config_exists) { - has_config = false; - } - else { - has_config = true; - } - }) - .then([this]() { - create_task([&]() - { - using SharedCallback = std::shared_ptr<DRing::CallbackWrapperBase>; - using namespace std::placeholders; - - std::map<std::string, SharedCallback> callHandlers = { - // use IncomingCall only to register the call client sided, use StateChange to determine the impact on the UI - DRing::exportable_callback<DRing::CallSignal::IncomingCall>([this]( - const std::string& accountId, - const std::string& callId, - const std::string& from) - { - MSG_("<IncomingCall>"); - MSG_("accountId = " + accountId); - MSG_("callId = " + callId); - MSG_("from = " + from); - }), - DRing::exportable_callback<DRing::CallSignal::StateChange>([this]( - const std::string& callId, - const std::string& state, - int code) - { - MSG_("<StateChange>"); - MSG_("callId = " + callId); - MSG_("state = " + state); - MSG_("code = " + std::to_string(code)); - }), - DRing::exportable_callback<DRing::ConfigurationSignal::IncomingAccountMessage>([this]( - const std::string& accountId, - const std::string& from, - const std::map<std::string, std::string>& payloads) - { - MSG_("<IncomingAccountMessage>"); - MSG_("accountId = " + accountId); - MSG_("from = " + from); + using SharedCallback = std::shared_ptr<DRing::CallbackWrapperBase>; + using namespace std::placeholders; + + std::map<std::string, SharedCallback> callHandlers = { + // use IncomingCall only to register the call client sided, use StateChange to determine the impact on the UI + DRing::exportable_callback<DRing::CallSignal::IncomingCall>([this]( + const std::string& accountId, + const std::string& callId, + const std::string& from) + { + MSG_("<IncomingCall>"); + MSG_("accountId = " + accountId); + MSG_("callId = " + callId); + MSG_("from = " + from); + }), + DRing::exportable_callback<DRing::CallSignal::StateChange>([this]( + const std::string& callId, + const std::string& state, + int code) + { + MSG_("<StateChange>"); + MSG_("callId = " + callId); + MSG_("state = " + state); + MSG_("code = " + std::to_string(code)); + }), + DRing::exportable_callback<DRing::ConfigurationSignal::IncomingAccountMessage>([this]( + const std::string& accountId, + const std::string& from, + const std::map<std::string, std::string>& payloads) + { + MSG_("<IncomingAccountMessage>"); + MSG_("accountId = " + accountId); + MSG_("from = " + from); - for (auto i : payloads) { - MSG_("payload = " + i.second); - auto payload = Utils::toPlatformString(i.second); - } - }) - }; + for (auto i : payloads) { + MSG_("payload = " + i.second); + auto payload = Utils::toPlatformString(i.second); + } + }) + }; - registerCallHandlers(callHandlers); + registerCallHandlers(callHandlers); - std::map<std::string, SharedCallback> dringDebugOutHandler; - dringDebugOutHandler.insert(DRing::exportable_callback<DRing::Debug::MessageSend> - (std::bind(&DebugOutputWrapper, _1))); - registerCallHandlers(dringDebugOutHandler); + std::map<std::string, SharedCallback> dringDebugOutHandler; + dringDebugOutHandler.insert(DRing::exportable_callback<DRing::Debug::MessageSend> + (std::bind(&DebugOutputWrapper, _1))); + registerCallHandlers(dringDebugOutHandler); - std::map<std::string, SharedCallback> getAppPathHandler = + std::map<std::string, SharedCallback> getAppPathHandler = + { + DRing::exportable_callback<DRing::ConfigurationSignal::GetAppDataPath> + ([this](std::vector<std::string>* paths){ + paths->emplace_back(localFolder_); + }) + }; + registerCallHandlers(getAppPathHandler); + + DRing::init(static_cast<DRing::InitFlag>(DRing::DRING_FLAG_CONSOLE_LOG | + DRing::DRING_FLAG_DEBUG | + DRing::DRING_FLAG_AUTOANSWER)); + + if (!DRing::start()) { + ERR_("\ndaemon didn't start.\n"); + return; + } + else { + if (!hasConfig) { - DRing::exportable_callback<DRing::ConfigurationSignal::GetAppDataPath> - ([this](std::vector<std::string>* paths) { - paths->emplace_back(localFolder_); - }) - }; - registerCallHandlers(getAppPathHandler); - - DRing::init(static_cast<DRing::InitFlag>(DRing::DRING_FLAG_CONSOLE_LOG | - DRing::DRING_FLAG_DEBUG | - DRing::DRING_FLAG_AUTOANSWER)); - - if (!DRing::start()) { - ERR_("\ndaemon didn't start.\n"); - return; + std::map<std::string, std::string> test_details; + test_details.insert(std::make_pair(ring::Conf::CONFIG_ACCOUNT_ALIAS, accountName)); + test_details.insert(std::make_pair(ring::Conf::CONFIG_ACCOUNT_TYPE,"RING")); + DRing::addAccount(test_details); } - else { - // if there is no config, create a default RING account - if (!has_config) { - std::map<std::string, std::string> test_details; - test_details.insert(std::make_pair(ring::Conf::CONFIG_ACCOUNT_ALIAS, "default")); - test_details.insert(std::make_pair(ring::Conf::CONFIG_ACCOUNT_TYPE, "RING")); - DRing::addAccount(test_details); - } - while (true) { - DRing::pollEvents(); - Sleep(1000); - } - DRing::fini(); + // if there is no config, create a default RING account + while (true) { + DRing::pollEvents(); + Sleep(1000); } - }); + DRing::fini(); + } }); } diff --git a/RingD.h b/RingD.h index e049dd01e29908f3168ce7e8e8e362a14e0091e0..6556fa45202d1d9a05f3693b8df67cb2fa753bea 100644 --- a/RingD.h +++ b/RingD.h @@ -45,15 +45,17 @@ public: /* properties */ + /* functions */ + internal: void startDaemon(); - void stopDaemon(); + bool hasConfig; + std::string accountName; private: RingD(); // singleton std::string localFolder_; bool daemonRunning_ = false; - }; } \ No newline at end of file diff --git a/Styles.xaml b/Styles.xaml index 4afe023f18d5c1159cbdde9034839c843f9bf8d3..9afeebe28532161fd4ffaea61524158ac650348b 100644 --- a/Styles.xaml +++ b/Styles.xaml @@ -1,6 +1,7 @@ <!-- ********************************************************************** * Copyright (C) 2016 by Savoir-faire Linux * * Author: Jäger Nicolas<nicolas.jager@savoirfairelinux.com> * +* Author: Traczyk Andreas<andreas.traczyk@savoirfairelinux.com> * * * * 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 * @@ -82,7 +83,7 @@ <Style x:Key="ButtonStyle2" TargetType="Button"> <Setter Property="Width" - Value="50"/> + Value="400"/> <Setter Property="Height" Value="30"/> <Setter Property="FontFamily" @@ -107,6 +108,13 @@ <Setter Property="FontSize" Value="70"/> </Style> + <Style x:Key="ButtonStyle4" + TargetType="Button"> + <Setter Property="Foreground" + Value="White"/> + <Setter Property="Background" + Value="LightBlue"/> + </Style> <Style x:Key="ToggleButtonStyle1" TargetType="ToggleButton"> <Setter Property="Width" diff --git a/Wizard.xaml b/Wizard.xaml new file mode 100644 index 0000000000000000000000000000000000000000..372beea3f943020dbfb8d77b2ade3aa1d94e1ffe --- /dev/null +++ b/Wizard.xaml @@ -0,0 +1,144 @@ +<Page + x:Class="RingClientUWP.Views.Wizard" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:RingClientUWP" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d"> + + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="32"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Rectangle Fill="LightBlue" + Grid.Row="0"/> + <StackPanel Grid.Row="1" Width="400"> + <Rectangle Height="50"/> + <StackPanel Height="auto" + Background="LightBlue" + Grid.Column="0"> + <TextBlock x:Name="_showCreateAccountMenuTitle_" + Text="Create New Account" + Foreground="White" + FontSize="30" + HorizontalAlignment="Center"/> + <Button x:Name="_showCreateAccountMenuBtn_" + Content="Create New Account" + Visibility="Collapsed" + HorizontalAlignment="Center" + Style="{StaticResource ButtonStyle4}" + Click="_showCreateAccountMenuBtn__Click"/> + <Grid x:Name="_accountCreationMenuGrid_" + Background="LightBlue" + Visibility="Visible"> + <Grid.RowDefinitions> + <RowDefinition Height="auto"/> + <RowDefinition Height="30"/> + </Grid.RowDefinitions> + <StackPanel Orientation="Vertical" + Grid.Row="0" + Background="#FFE4F1F9"> + <Button x:Name="_avatarWebcamCaptureBtn_" + Margin="0,10,0,0" + VerticalAlignment="Center" + Content="" + Style="{StaticResource ButtonStyle3}" + HorizontalAlignment="Center"/> + <!-- RING account. --> + <StackPanel x:Name="_ringAccountCreationStack_" + Visibility="Visible"> + <TextBox x:Name="_aliasTextBox_" + Margin="10" + PlaceholderText="Enter your username"/> + <PasswordBox Margin="10" + PlaceholderText="Enter your password"/> + <PasswordBox Margin="10,10,10,20" + PlaceholderText="Repeat your Password"/> + </StackPanel> + <!-- SIP account. --> + <StackPanel x:Name="_sipAccountCreationStack_" + Visibility="Collapsed"> + <TextBox Margin="10" + PlaceholderText="Enter hostname"/> + <TextBox Margin="10" + PlaceholderText="Enter your username"/> + <PasswordBox Margin="10" + PlaceholderText="Enter your password"/> + <PasswordBox Margin="10" + PlaceholderText="Repeat your Password"/> + </StackPanel> + </StackPanel> + <!-- buttons yes/no to create the new account. --> + <Grid Grid.Row="1"> + <StackPanel Orientation="Horizontal" + HorizontalAlignment="Center"> + <Button x:Name="_createAccountYes_" + Grid.Row="1" + VerticalAlignment="Center" + HorizontalAlignment="Center" + Content="" + Click="_createAccountYes__Click" + Style="{StaticResource ButtonStyle2}"/> + </StackPanel> + </Grid> + </Grid> + </StackPanel> + <Rectangle Height="50"/> + <!-- add account. --> + <StackPanel Height="auto" + Background="LightBlue" + Grid.Column="2"> + <TextBlock x:Name="_showAddAccountMenuTitle_" + Text="Add Existing Account" + Foreground="White" + Visibility="Collapsed" + FontSize="30" + HorizontalAlignment="Center"/> + <Button x:Name="_showAddAccountMenuBtn_" + Visibility="Visible" + Content="Add Existing Account" + HorizontalAlignment="Center" + Style="{StaticResource ButtonStyle4}" + Click="_showAddAccountMenuBtn__Click"/> + <Grid x:Name="_accountAddMenuGrid_" + Visibility="Collapsed" + Background="LightBlue"> + <Grid.RowDefinitions> + <RowDefinition Height="auto"/> + <RowDefinition Height="30"/> + </Grid.RowDefinitions> + <!-- add account. --> + <StackPanel Background="#FFE4F1F9"> + <TextBox x:Name="_PINTextBox_" + Margin="10" + PlaceholderText="Enter PIN"/> + <PasswordBox Margin="10" + PlaceholderText="Enter your password"/> + </StackPanel> + <!-- buttons yes/no to add the account. --> + <Grid Grid.Row="1"> + <StackPanel Orientation="Horizontal" + HorizontalAlignment="Center"> + <Button x:Name="_addAccountYes_" + Grid.Row="1" + VerticalAlignment="Center" + HorizontalAlignment="Center" + Content="" + Style="{StaticResource ButtonStyle2}"/> + </StackPanel> + </Grid> + </Grid> + </StackPanel> + <!--</Grid>--> + </StackPanel> + </Grid> + + + + + + + +</Page> diff --git a/Wizard.xaml.cpp b/Wizard.xaml.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ec0f977c57159f11e910b17950170dd112a98b33 --- /dev/null +++ b/Wizard.xaml.cpp @@ -0,0 +1,65 @@ +#include "pch.h" + +#include "Wizard.xaml.h" + +#include "MainPage.xaml.h" + +using namespace RingClientUWP::Views; + +using namespace Concurrency; +using namespace Platform; +using namespace Windows::Devices::Enumeration; +using namespace Windows::Foundation; +using namespace Windows::Foundation::Collections; +using namespace Windows::UI::Xaml; +using namespace Windows::UI::Xaml::Controls; +using namespace Windows::UI::Xaml::Controls::Primitives; +using namespace Windows::UI::Xaml::Data; +using namespace Windows::UI::Xaml::Input; +using namespace Windows::UI::Xaml::Media; +using namespace Windows::UI::Xaml::Navigation; +using namespace Windows::Media::Capture; + +Wizard::Wizard() +{ + InitializeComponent(); +} + +void +Wizard::_createAccountYes__Click(Object^ sender, RoutedEventArgs^ e) +{ + auto alias = _aliasTextBox_->Text; + if (alias->IsEmpty()) + alias = "windows user"; + std::wstring wstr(alias->Begin()); + std::string str(wstr.begin(), wstr.end()); + RingD::instance->hasConfig = false; + RingD::instance->accountName = std::string(wstr.begin(), wstr.end()); + this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, ref new Windows::UI::Core::DispatchedHandler([this] () { + this->Frame->Navigate(Windows::UI::Xaml::Interop::TypeName(RingClientUWP::MainPage::typeid)); + })); +} + +void +Wizard::_showCreateAccountMenuBtn__Click(Object^ sender, RoutedEventArgs^ e) +{ + _accountAddMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; + _showAddAccountMenuTitle_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; + _showAddAccountMenuBtn_->Visibility = Windows::UI::Xaml::Visibility::Visible; + + _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; + _showCreateAccountMenuTitle_->Visibility = Windows::UI::Xaml::Visibility::Visible; + _showCreateAccountMenuBtn_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; +} + +void +Wizard::_showAddAccountMenuBtn__Click(Object^ sender, RoutedEventArgs^ e) +{ + _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; + _showCreateAccountMenuTitle_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; + _showCreateAccountMenuBtn_->Visibility = Windows::UI::Xaml::Visibility::Visible; + + _accountAddMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; + _showAddAccountMenuTitle_->Visibility = Windows::UI::Xaml::Visibility::Visible; + _showAddAccountMenuBtn_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; +} \ No newline at end of file diff --git a/Wizard.xaml.h b/Wizard.xaml.h new file mode 100644 index 0000000000000000000000000000000000000000..70792c536e13a08309c55c9a6e93739478c28dec --- /dev/null +++ b/Wizard.xaml.h @@ -0,0 +1,21 @@ +#pragma once + +#include "Wizard.g.h" + +namespace RingClientUWP +{ +namespace Views +{ + +public ref class Wizard sealed +{ +public: + Wizard(); +private: + void _createAccountYes__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void _showCreateAccountMenuBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void _showAddAccountMenuBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); +}; + +} +} \ No newline at end of file diff --git a/ring-client-uwp.vcxproj b/ring-client-uwp.vcxproj index 922bb4a51eb8ef442c55483da4e0b0e0ce63882e..091de7b107f9abfd0dace276864f3ee5cf856b2a 100644 --- a/ring-client-uwp.vcxproj +++ b/ring-client-uwp.vcxproj @@ -162,6 +162,9 @@ <ClInclude Include="AccountsViewModel.h" /> <ClInclude Include="Contact.h" /> <ClInclude Include="ContactsViewModel.h" /> + <ClInclude Include="LoadingPage.xaml.h"> + <DependentUpon>LoadingPage.xaml</DependentUpon> + </ClInclude> <ClInclude Include="MessageTextPage.xaml.h"> <DependentUpon>MessageTextPage.xaml</DependentUpon> </ClInclude> @@ -187,11 +190,15 @@ <ClInclude Include="WelcomePage.xaml.h"> <DependentUpon>WelcomePage.xaml</DependentUpon> </ClInclude> + <ClInclude Include="Wizard.xaml.h"> + <DependentUpon>Wizard.xaml</DependentUpon> + </ClInclude> </ItemGroup> <ItemGroup> <ApplicationDefinition Include="App.xaml"> <SubType>Designer</SubType> </ApplicationDefinition> + <Page Include="LoadingPage.xaml" /> <Page Include="MainPage.xaml"> <SubType>Designer</SubType> </Page> @@ -201,6 +208,7 @@ <Page Include="Styles.xaml" /> <Page Include="VideoPage.xaml" /> <Page Include="WelcomePage.xaml" /> + <Page Include="Wizard.xaml" /> </ItemGroup> <ItemGroup> <AppxManifest Include="Package.appxmanifest"> @@ -249,6 +257,9 @@ </ClCompile> <ClCompile Include="Contact.cpp" /> <ClCompile Include="ContactsViewModel.cpp" /> + <ClCompile Include="LoadingPage.xaml.cpp"> + <DependentUpon>LoadingPage.xaml</DependentUpon> + </ClCompile> <ClCompile Include="MainPage.xaml.cpp"> <DependentUpon>MainPage.xaml</DependentUpon> </ClCompile> @@ -277,6 +288,9 @@ <ClCompile Include="WelcomePage.xaml.cpp"> <DependentUpon>WelcomePage.xaml</DependentUpon> </ClCompile> + <ClCompile Include="Wizard.xaml.cpp"> + <DependentUpon>Wizard.xaml</DependentUpon> + </ClCompile> </ItemGroup> <ItemGroup> <PRIResource Include="localization\Fr-fr\Resources.resw" /> diff --git a/ring-client-uwp.vcxproj.filters b/ring-client-uwp.vcxproj.filters index c8f7a7cb1d6367aeffbad5a671294b61f605e8a8..3e2c984305e3bf32842f06652e4cd59bc8848e98 100644 --- a/ring-client-uwp.vcxproj.filters +++ b/ring-client-uwp.vcxproj.filters @@ -170,6 +170,10 @@ <Page Include="MessageTextPage.xaml"> <Filter>Views</Filter> </Page> + <Page Include="LoadingPage.xaml"> + <Filter>Views</Filter> + </Page> + <Page Include="Wizard.xaml" /> </ItemGroup> <ItemGroup> <PRIResource Include="localization\US-en\Resources.resw">