summaryrefslogtreecommitdiff
path: root/indra/newview/llviewermenufile.h
blob: 6b628f07de0a64e4518a5621ad9f70e8f522eedc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/**
 * @file llviewermenufile.h
 * @brief "File" menu in the main menu bar.
 *
 * $LicenseInfo:firstyear=2002&license=viewerlgpl$
 * Second Life Viewer Source Code
 * Copyright (C) 2010, Linden Research, Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation;
 * version 2.1 of the License only.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 * $/LicenseInfo$
 */

#ifndef LLVIEWERMENUFILE_H
#define LLVIEWERMENUFILE_H

#include "llfoldertype.h"
#include "llassetstorage.h"
#include "llinventorytype.h"
#include "llfilepicker.h"
#include "llthread.h"
#include <queue>

#include "llviewerassetupload.h"

class LLTransactionID;
class LLPluginClassMedia;


void init_menu_file();


LLUUID upload_new_resource(
    const std::string& src_filename,
    std::string name,
    std::string desc,
    S32 compression_info,
    LLFolderType::EType destination_folder_type,
    LLInventoryType::EType inv_type,
    U32 next_owner_perms,
    U32 group_perms,
    U32 everyone_perms,
    const std::string& display_name,
    LLAssetStorage::LLStoreAssetCallback callback,
    S32 expected_upload_cost,
    void *userdata,
    bool show_inventory = true);

void upload_new_resource(
    LLResourceUploadInfo::ptr_t &uploadInfo,
    LLAssetStorage::LLStoreAssetCallback callback = LLAssetStorage::LLStoreAssetCallback(),
    void *userdata = NULL);

bool get_bulk_upload_expected_cost(
    const std::vector<std::string>& filenames,
    bool allow_2k,
    S32& total_cost,
    S32& file_count,
    S32& bvh_count,
    S32& textures_2k_count);

void do_bulk_upload(std::vector<std::string> filenames, bool allow_2k);

void close_all_windows();

//consider moving all file pickers below to more suitable place
class LLFilePickerThread : public LLThread
{ //multi-threaded file picker (runs system specific file picker in background and calls "notify" from main thread)
public:

    static std::queue<LLFilePickerThread*> sDeadQ;
    static LLMutex* sMutex;

    static void initClass();
    static void cleanupClass();
    static void clearDead();

    std::vector<std::string> mResponses;
    std::string mProposedName;

    LLFilePicker::ELoadFilter mLoadFilter;
    LLFilePicker::ESaveFilter mSaveFilter;
    bool mIsSaveDialog;
    bool mIsGetMultiple;

    LLFilePickerThread(LLFilePicker::ELoadFilter filter, bool get_multiple = false)
        : LLThread("file picker"), mLoadFilter(filter), mIsSaveDialog(false), mIsGetMultiple(get_multiple)
    {
    }

    LLFilePickerThread(LLFilePicker::ESaveFilter filter, const std::string &proposed_name)
        : LLThread("file picker"), mSaveFilter(filter), mIsSaveDialog(true), mProposedName(proposed_name)
    {
    }

    void getFile();

    virtual void run();
    void runModeless();
    static void modelessStringCallback(bool success, std::string &response, void *user_data);
    static void modelessVectorCallback(bool success, std::vector<std::string> &responses, void *user_data);

    virtual void notify(const std::vector<std::string>& filenames) = 0;
};


class LLFilePickerReplyThread : public LLFilePickerThread
{
public:

    typedef boost::signals2::signal<void(const std::vector<std::string>& filenames, LLFilePicker::ELoadFilter load_filter, LLFilePicker::ESaveFilter save_filter)> file_picked_signal_t;

    static void startPicker(const file_picked_signal_t::slot_type& cb, LLFilePicker::ELoadFilter filter, bool get_multiple, const file_picked_signal_t::slot_type& failure_cb = file_picked_signal_t());
    static void startPicker(const file_picked_signal_t::slot_type& cb, LLFilePicker::ESaveFilter filter, const std::string &proposed_name, const file_picked_signal_t::slot_type& failure_cb = file_picked_signal_t());

    virtual void notify(const std::vector<std::string>& filenames);

private:
    LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ELoadFilter filter, bool get_multiple, const file_picked_signal_t::slot_type& failure_cb = file_picked_signal_t());
    LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ESaveFilter filter, const std::string &proposed_name, const file_picked_signal_t::slot_type& failure_cb = file_picked_signal_t());
    ~LLFilePickerReplyThread();

private:
    LLFilePicker::ELoadFilter   mLoadFilter;
    LLFilePicker::ESaveFilter   mSaveFilter;
    file_picked_signal_t*       mFilePickedSignal;
    file_picked_signal_t*       mFailureSignal;
};

class LLMediaFilePicker : public LLFilePickerThread
{
public:
    LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple);
    LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, const std::string &proposed_name);

    virtual void notify(const std::vector<std::string>& filenames);

private:
    std::shared_ptr<LLPluginClassMedia> mPlugin;
};


#endif