10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Copyright 2012 Google Inc. 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Author: thorcarpenter@google.com (Thor Carpenter) 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Defines variant class ScreencastId that combines WindowId and DesktopId. 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifndef TALK_MEDIA_BASE_SCREENCASTID_H_ 70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define TALK_MEDIA_BASE_SCREENCASTID_H_ 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <string> 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <vector> 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 122a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/window.h" 132a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/windowpicker.h" 140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace cricket { 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass ScreencastId; 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtypedef std::vector<ScreencastId> ScreencastIdList; 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Used for identifying a window or desktop to be screencast. 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass ScreencastId { 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enum Type { INVALID, WINDOW, DESKTOP }; 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Default constructor indicates invalid ScreencastId. 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ScreencastId() : type_(INVALID) {} 272a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org explicit ScreencastId(const rtc::WindowId& id) 280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : type_(WINDOW), window_(id) { 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 302a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org explicit ScreencastId(const rtc::DesktopId& id) 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : type_(DESKTOP), desktop_(id) { 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Type type() const { return type_; } 352a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org const rtc::WindowId& window() const { return window_; } 362a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org const rtc::DesktopId& desktop() const { return desktop_; } 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Title is an optional parameter. 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& title() const { return title_; } 400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void set_title(const std::string& desc) { title_ = desc; } 410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool IsValid() const { 430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (type_ == INVALID) { 440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return false; 450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (type_ == WINDOW) { 460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return window_.IsValid(); 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return desktop_.IsValid(); 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool IsWindow() const { return type_ == WINDOW; } 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool IsDesktop() const { return type_ == DESKTOP; } 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool EqualsId(const ScreencastId& other) const { 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (type_ != other.type_) { 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return false; 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (type_ == INVALID) { 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return true; 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (type_ == WINDOW) { 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return window_.Equals(other.window()); 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return desktop_.Equals(other.desktop()); 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // T is assumed to be WindowDescription or DesktopDescription. 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org template<class T> 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static cricket::ScreencastIdList Convert(const std::vector<T>& list) { 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ScreencastIdList screencast_list; 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org screencast_list.reserve(list.size()); 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org for (typename std::vector<T>::const_iterator it = list.begin(); 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org it != list.end(); ++it) { 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ScreencastId id(it->id()); 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org id.set_title(it->title()); 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org screencast_list.push_back(id); 750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return screencast_list; 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Type type_; 812a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::WindowId window_; 822a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::DesktopId desktop_; 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string title_; // Optional. 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace cricket 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif // TALK_MEDIA_BASE_SCREENCASTID_H_ 89