summaryrefslogtreecommitdiff
path: root/game/client/steampublishedfiles/publish_file_dialog.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/steampublishedfiles/publish_file_dialog.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/steampublishedfiles/publish_file_dialog.h')
-rw-r--r--game/client/steampublishedfiles/publish_file_dialog.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/game/client/steampublishedfiles/publish_file_dialog.h b/game/client/steampublishedfiles/publish_file_dialog.h
new file mode 100644
index 0000000..f6aaa93
--- /dev/null
+++ b/game/client/steampublishedfiles/publish_file_dialog.h
@@ -0,0 +1,213 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef PUBLISH_FILE_DIALOG_H
+#define PUBLISH_FILE_DIALOG_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <vgui_controls/Frame.h>
+#include <vgui_controls/ImageList.h>
+#include <vgui_controls/SectionedListPanel.h>
+#include <vgui_controls/PHandle.h>
+#include <vgui_controls/BitmapImagePanel.h>
+#include <filesystem.h>
+#include "vgui/MouseCode.h"
+#include "vgui/IScheme.h"
+#include "steam/steam_api.h"
+#include "utlmap.h"
+#include "bitmap/bitmap.h"
+#include "workshop/ugc_utils.h"
+
+struct PublishedFileDetails_t
+{
+ SteamUGCDetails_t publishedFileDetails;
+ const char *lpszFilename;
+};
+
+#define APPID_PORTAL2 852
+
+using namespace vgui;
+
+class CBitmapPanel;
+
+enum FileOpenMode_t {
+ FILEOPEN_NONE,
+ FILEOPEN_MAIN_FILE,
+ FILEOPEN_PREVIEW
+};
+
+struct EntityToTagMap_t
+{
+ const char *lpszEntityName;
+ const char *lpszTagName;
+ const char *lpszKey;
+ const char *lpszValue;
+};
+
+enum PublishedFileDetailsField_t
+{
+ PFILE_FIELD_TITLE = (1<<0),
+ PFILE_FIELD_DESCRIPTION = (1<<1),
+ PFILE_FIELD_FILE = (1<<2),
+ PFILE_FIELD_PREVIEW = (1<<3),
+};
+
+enum eFilterType_t
+{
+ IMPORT_FILTER_NONE = 0,
+ IMPORT_FILTER_COSMETIC,
+ IMPORT_FILTER_OTHER,
+ IMPORT_FILTER_MAP,
+};
+
+// TODO: Move to P2 version
+#define TAG_GAME_MODE_SINGLEPLAYER "Singleplayer"
+#define TAG_GAME_MODE_COOP "Co-Op"
+//
+
+// This is the size for the preview for P2 map preview images
+#define PREVIEW_WIDTH 225
+#define PREVIEW_HEIGHT 152
+
+//-----------------------------------------------------------------------------
+// Purpose: Main dialog for media browser
+//-----------------------------------------------------------------------------
+class CPrepareFileThread;
+class CFilePublishDialog : public Frame
+{
+ DECLARE_CLASS_SIMPLE( CFilePublishDialog, Frame );
+
+public:
+
+ enum ErrorCode_t
+ {
+ kNoError,
+ kFailedToPublishFile,
+ kFailedToUpdateFile,
+ kFailedToPrepareFile,
+ kSteamCloudNotAvailable,
+ kSteamExceededCloudQuota,
+ kFailedToWriteToSteamCloud,
+ kFileNotFound,
+ kNeedTitleAndDescription,
+ kFailedFileValidation,
+ kFailedFileTooLarge,
+ kFailedFileNotFound,
+ kFailedUserModifiedFile,
+ kInvalidMapName
+ };
+
+ enum StatusCode_t
+ {
+ kPublishing,
+ kUpdating,
+ };
+
+ CFilePublishDialog( Panel *parent, const char *name, PublishedFileDetails_t *pDetails );
+ virtual ~CFilePublishDialog();
+
+ virtual void PerformLayout();
+
+ virtual void SetFile( const char *lpszFilename, bool bImported = false );
+
+protected:
+ virtual void OnCommand( const char *command );
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
+ virtual void OnTick( void );
+
+ // Override these functions to publish files for different app types
+ virtual ErrorCode_t ValidateFile( const char *lpszFilename );
+ virtual AppId_t GetTargetAppID( void ) { return APPID_PORTAL2; }
+ virtual unsigned int DesiredPreviewHeight( void ) { return PREVIEW_HEIGHT; }
+ virtual unsigned int DesiredPreviewWidth( void ) { return PREVIEW_WIDTH; }
+ // Decides which type to use for publishing this file
+ virtual EWorkshopFileType WorkshipFileTypeForFile( const char *pszFileName ) { return k_EWorkshopFileTypeCommunity; }
+ virtual bool BForceSquarePreviewImage( void ) { return false; } // Force preview images to be square
+ virtual const char *GetPreviewFileTypes( void ) { return "*.jpg"; }
+ virtual const char *GetPreviewFileTypeDescriptions( void ) { return "JPEG Files (*.jpg)"; }
+ virtual const char *GetFileTypes( eFilterType_t eType = IMPORT_FILTER_NONE ) { return "*.bsp"; }
+ virtual const char *GetFileTypeDescriptions( eFilterType_t eType = IMPORT_FILTER_NONE ) { return "BSP Files (*.bsp)"; }
+ virtual const char *GetResFile() const { return "PublishFileDialog.res"; }
+ virtual void ErrorMessage( ErrorCode_t errorCode, KeyValues *pkvTokens = NULL );
+ virtual void PopulateTags( SteamParamStringArray_t &strArray ) {}
+ virtual const char* GetStatusString( StatusCode_t statusCode );
+ virtual void ShowStatusWindow( StatusCode_t statusCode );
+ virtual void HideStatusWindow( void );
+
+ virtual void PopulateEditFields( void );
+ void DownloadPreviewImage( void );
+
+ void SetPublishButtonState( void );
+
+ bool UpdateFile( void );
+ bool UpdateFileInternal( void );
+ void GetPreviewFilename( char *szOut, size_t outLen );
+
+ bool PublishFile();
+ void SetPreviewImage( const char *lpszFilename );
+
+ void PerformSquarize();
+ Bitmap_t &GetPreviewBitmap();
+
+ void ErrorMessage( const char *lpszText );
+
+ void StartPrepareFile();
+
+ void OnFilePrepared( bool bSucceeded );
+
+ inline bool IsSourceImageSquare() const
+ {
+ // We must know the size
+ Assert( m_imgSource.IsValid() );
+ return
+ m_imgSource.Width()*99 < m_imgSource.Height()*100
+ && m_imgSource.Height()*99 < m_imgSource.Width()*100;
+ }
+
+ FileOpenMode_t m_fileOpenMode;
+
+ bool m_bValidFile;
+ bool m_bValidJpeg;
+
+ CBitmapPanel *m_pCroppedTextureImagePanel;
+
+ Bitmap_t m_imgSource; // original resolution and aspect
+ Bitmap_t m_imgSquare;
+ Bitmap_t m_imgTemp;
+
+ PublishedFileId_t m_nFileID;
+ PublishedFileDetails_t m_FileDetails;
+ unsigned int m_nFileDetailsChanges;
+
+ vgui::MessageBox *m_pStatusBox;
+ vgui::TextEntry *m_pFileTitle;
+ vgui::TextEntry *m_pFileDescription;
+ vgui::Label *m_pFilename;
+ vgui::Button *m_pPublishButton;
+
+ CCallResult<CFilePublishDialog, CreateItemResult_t> m_callbackCreateItem;
+ void Steam_OnCreateItem( CreateItemResult_t *pResult, bool bError );
+
+ CCallResult<CFilePublishDialog, SubmitItemUpdateResult_t> m_callbackPublishFile;
+ void Steam_OnPublishFile( SubmitItemUpdateResult_t *pResult, bool bError );
+
+ // TODO Switch to using the auto-downloaded ISteamUGC previews
+ CUGCFileRequest m_UGCPreviewFileRequest;
+ bool m_bPreviewDownloadPending;
+ bool m_bAddingNewFile;
+
+ CPrepareFileThread *m_pPrepareFileThread;
+
+ MESSAGE_FUNC_CHARPTR( OnFileSelected, "FileSelected", fullpath );
+};
+
+
+extern CFilePublishDialog *g_pSteamFilePublishDialog;
+
+
+#endif // PUBLISH_FILE_DIALOG_H