Blender V5.0
info_ops.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2008 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include <cstring>
10#include <fmt/format.h>
11
12#include "DNA_space_types.h"
14
15#include "MEM_guardedalloc.h"
16
17#include "BLT_translation.hh"
18
19#include "BKE_bpath.hh"
20#include "BKE_context.hh"
21#include "BKE_global.hh"
22#include "BKE_image.hh"
23#include "BKE_lib_id.hh"
24#include "BKE_library.hh"
25#include "BKE_main.hh"
26#include "BKE_packedFile.hh"
27#include "BKE_report.hh"
28#include "BKE_screen.hh"
29
30#include "WM_api.hh"
31#include "WM_types.hh"
32
33#include "UI_interface.hh"
35
36#include "RNA_access.hh"
37#include "RNA_define.hh"
38
39#include "info_intern.hh"
40
41/* -------------------------------------------------------------------- */
44
53
55{
56 /* identifiers */
57 ot->name = "Pack Linked Libraries";
58 ot->idname = "FILE_OT_pack_libraries";
59 ot->description =
60 "Store all data-blocks linked from other .blend files in the current .blend file. "
61 "Library references are preserved so the linked data-blocks can be unpacked again";
62
63 /* API callbacks. */
64 ot->exec = pack_libraries_exec;
65
66 /* flags */
68}
69
80
82
83/* -------------------------------------------------------------------- */
86
88 wmOperator *op,
89 const wmEvent * /*event*/)
90{
92 op,
93 IFACE_("Restore Packed Linked Data to Their Original Locations"),
94 IFACE_("Will create directories so that all paths are valid."),
95 IFACE_("Unpack"),
97 false);
98}
99
101{
102 /* identifiers */
103 ot->name = "Unpack Linked Libraries";
104 ot->idname = "FILE_OT_unpack_libraries";
105 ot->description = "Restore all packed linked data-blocks to their original locations";
106
107 /* API callbacks. */
108 ot->invoke = unpack_libraries_invoke;
110
111 /* flags */
113}
114
116
117/* -------------------------------------------------------------------- */
120
122{
123 Main *bmain = CTX_data_main(C);
124
125 if (G.fileflags & G_FILE_AUTOPACK) {
126 G.fileflags &= ~G_FILE_AUTOPACK;
127 }
128 else {
129 BKE_packedfile_pack_all(bmain, op->reports, true);
130 G.fileflags |= G_FILE_AUTOPACK;
131 }
132
133 return OPERATOR_FINISHED;
134}
135
137{
138 /* identifiers */
139 ot->name = "Automatically Pack Resources";
140 ot->idname = "FILE_OT_autopack_toggle";
141 ot->description = "Automatically pack all external files into the .blend file";
142
143 /* API callbacks. */
144 ot->exec = autopack_toggle_exec;
145
146 /* flags */
148}
149
151
152/* -------------------------------------------------------------------- */
155
157{
158 Main *bmain = CTX_data_main(C);
159
160 BKE_packedfile_pack_all(bmain, op->reports, true);
161
163
164 return OPERATOR_FINISHED;
165}
166
168{
169 Main *bmain = CTX_data_main(C);
170 Image *ima;
171
172 /* First check for dirty images. */
173 for (ima = static_cast<Image *>(bmain->images.first); ima;
174 ima = static_cast<Image *>(ima->id.next))
175 {
176 if (BKE_image_is_dirty(ima)) {
177 break;
178 }
179 }
180
181 if (ima) {
183 C,
184 op,
185 IFACE_("Pack all used external files into this .blend file"),
186 IFACE_("Warning: Some images are modified and these changes will be lost."),
187 IFACE_("Pack"),
189 false);
190 }
191
192 return pack_all_exec(C, op);
193}
194
196{
197 /* identifiers */
198 ot->name = "Pack Resources";
199 ot->idname = "FILE_OT_pack_all";
200 ot->description = "Pack all used external files into this .blend";
201
202 /* API callbacks. */
203 ot->exec = pack_all_exec;
204 ot->invoke = pack_all_invoke;
205
206 /* flags */
208}
209
211
212/* -------------------------------------------------------------------- */
215
217 {PF_USE_LOCAL, "USE_LOCAL", 0, "Use files in current directory (create when necessary)", ""},
219 "WRITE_LOCAL",
220 0,
221 "Write files to current directory (overwrite existing files)",
222 ""},
224 "USE_ORIGINAL",
225 0,
226 "Use files in original location (create when necessary)",
227 ""},
229 "WRITE_ORIGINAL",
230 0,
231 "Write files to original location (overwrite existing files)",
232 ""},
233 {PF_KEEP, "KEEP", 0, "Disable auto-pack, keep all packed files", ""},
234 {PF_REMOVE, "REMOVE", 0, "Remove Pack", ""},
235 /* {PF_ASK, "ASK", 0, "Ask for each file", ""}, */
236 {0, nullptr, 0, nullptr, nullptr},
237};
238
240{
241 Main *bmain = CTX_data_main(C);
242 ePF_FileStatus method = ePF_FileStatus(RNA_enum_get(op->ptr, "method"));
243
244 if (method != PF_KEEP) {
245 WM_cursor_wait(true);
246 BKE_packedfile_unpack_all(bmain, op->reports, method); /* XXX PF_ASK can't work here */
247 WM_cursor_wait(false);
248 }
249 G.fileflags &= ~G_FILE_AUTOPACK;
251
252 return OPERATOR_FINISHED;
253}
254
256{
257 Main *bmain = CTX_data_main(C);
258 uiPopupMenu *pup;
259 uiLayout *layout;
260
262
263 if (count.total() == 0) {
264 BKE_report(op->reports, RPT_WARNING, "No packed files to unpack");
265 G.fileflags &= ~G_FILE_AUTOPACK;
266 return OPERATOR_CANCELLED;
267 }
268
269 const std::string title = fmt::format(
270 fmt::runtime(IFACE_("Unpack - Files: {}, Bakes: {}")), count.individual_files, count.bakes);
271
272 pup = UI_popup_menu_begin(C, title.c_str(), ICON_NONE);
273 layout = UI_popup_menu_layout(pup);
274
276 layout->op_enum("FILE_OT_unpack_all", "method");
277
278 UI_popup_menu_end(C, pup);
279
280 return OPERATOR_INTERFACE;
281}
282
284{
285 /* identifiers */
286 ot->name = "Unpack Resources";
287 ot->idname = "FILE_OT_unpack_all";
288 ot->description = "Unpack all files packed into this .blend to external ones";
289
290 /* API callbacks. */
291 ot->exec = unpack_all_exec;
292 ot->invoke = unpack_all_invoke;
293
294 /* flags */
296
297 /* properties */
299 ot->srna, "method", unpack_all_method_items, PF_USE_LOCAL, "Method", "How to unpack");
300}
301
303
304/* -------------------------------------------------------------------- */
307
309 {PF_USE_LOCAL, "USE_LOCAL", 0, "Use file from current directory (create when necessary)", ""},
311 "WRITE_LOCAL",
312 0,
313 "Write file to current directory (overwrite existing file)",
314 ""},
316 "USE_ORIGINAL",
317 0,
318 "Use file in original location (create when necessary)",
319 ""},
321 "WRITE_ORIGINAL",
322 0,
323 "Write file to original location (overwrite existing file)",
324 ""},
325 /* {PF_ASK, "ASK", 0, "Ask for each file", ""}, */
326 {0, nullptr, 0, nullptr, nullptr},
327};
328
330{
331 Main *bmain = CTX_data_main(C);
332 ID *id;
333 char idname[MAX_ID_NAME - 2];
334 int type = RNA_int_get(op->ptr, "id_type");
335 ePF_FileStatus method = ePF_FileStatus(RNA_enum_get(op->ptr, "method"));
336
337 RNA_string_get(op->ptr, "id_name", idname);
338 id = BKE_libblock_find_name(bmain, type, idname);
339
340 if (id == nullptr) {
341 BKE_report(op->reports, RPT_WARNING, "No packed file");
342 return OPERATOR_CANCELLED;
343 }
344
345 if (!ID_IS_EDITABLE(id)) {
346 BKE_report(op->reports, RPT_WARNING, "Data-block using this packed file is not editable");
347 return OPERATOR_CANCELLED;
348 }
349
350 if (method != PF_KEEP) {
351 WM_cursor_wait(true);
352 BKE_packedfile_id_unpack(bmain, id, op->reports, method); /* XXX PF_ASK can't work here */
353 WM_cursor_wait(false);
354 }
355
356 G.fileflags &= ~G_FILE_AUTOPACK;
357
358 return OPERATOR_FINISHED;
359}
360
362{
363 uiPopupMenu *pup;
364 uiLayout *layout;
365
366 pup = UI_popup_menu_begin(C, IFACE_("Unpack"), ICON_NONE);
367 layout = UI_popup_menu_layout(pup);
368
370 layout->op_enum(op->type->idname,
371 "method",
372 static_cast<IDProperty *>(op->ptr->data),
375
376 UI_popup_menu_end(C, pup);
377
378 return OPERATOR_INTERFACE;
379}
380
382{
383 /* identifiers */
384 ot->name = "Unpack Item";
385 ot->idname = "FILE_OT_unpack_item";
386 ot->description = "Unpack this file to an external file";
387
388 /* API callbacks. */
389 ot->exec = unpack_item_exec;
390 ot->invoke = unpack_item_invoke;
391
392 /* flags */
393 ot->flag = OPTYPE_UNDO;
394
395 /* properties */
397 ot->srna, "method", unpack_item_method_items, PF_USE_LOCAL, "Method", "How to unpack");
399 ot->srna, "id_name", nullptr, BKE_ST_MAXNAME, "ID Name", "Name of ID block to unpack");
400 RNA_def_int(ot->srna,
401 "id_type",
402 ID_IM,
403 0,
404 INT_MAX,
405 "ID Type",
406 "Identifier type of ID block",
407 0,
408 INT_MAX);
409}
410
412
413/* -------------------------------------------------------------------- */
416
418{
419 Main *bmain = CTX_data_main(C);
420 const char *blendfile_path = BKE_main_blendfile_path(bmain);
421
422 if (blendfile_path[0] == '\0') {
423 BKE_report(op->reports, RPT_WARNING, "Cannot set relative paths with an unsaved blend file");
424 return OPERATOR_CANCELLED;
425 }
426
427 BPathSummary summary;
428 BKE_bpath_relative_convert(bmain, blendfile_path, op->reports, &summary);
429 BKE_bpath_summary_report(summary, op->reports);
430
431 /* redraw everything so any changed paths register */
433
434 return OPERATOR_FINISHED;
435}
436
438{
439 /* identifiers */
440 ot->name = "Make Paths Relative";
441 ot->idname = "FILE_OT_make_paths_relative";
442 ot->description = "Make all paths to external files relative to current .blend";
443
444 /* API callbacks. */
446
447 /* flags */
449}
450
452
453/* -------------------------------------------------------------------- */
456
458{
459 Main *bmain = CTX_data_main(C);
460 const char *blendfile_path = BKE_main_blendfile_path(bmain);
461
462 if (blendfile_path[0] == '\0') {
463 BKE_report(op->reports, RPT_WARNING, "Cannot set absolute paths with an unsaved blend file");
464 return OPERATOR_CANCELLED;
465 }
466
467 BPathSummary summary;
468 BKE_bpath_absolute_convert(bmain, blendfile_path, op->reports, &summary);
469 BKE_bpath_summary_report(summary, op->reports);
470
471 /* redraw everything so any changed paths register */
473
474 return OPERATOR_FINISHED;
475}
476
478{
479 /* identifiers */
480 ot->name = "Make Paths Absolute";
481 ot->idname = "FILE_OT_make_paths_absolute";
482 ot->description = "Make all paths to external files absolute";
483
484 /* API callbacks. */
486
487 /* flags */
489}
490
492
493/* -------------------------------------------------------------------- */
496
498{
499 Main *bmain = CTX_data_main(C);
500
501 /* run the missing file check */
503 /* Redraw sequencer since media presence cache might have changed. */
505
506 return OPERATOR_FINISHED;
507}
508
510{
511 /* identifiers */
512 ot->name = "Report Missing Files";
513 ot->idname = "FILE_OT_report_missing_files";
514 ot->description = "Report all missing external files";
515
516 /* API callbacks. */
518
519 /* flags */
520 ot->flag = 0; /* only reports so no need to undo/register */
521}
522
524
525/* -------------------------------------------------------------------- */
528
530{
531 Main *bmain = CTX_data_main(C);
532 const std::string searchpath = RNA_string_get(op->ptr, "directory");
533 const bool find_all = RNA_boolean_get(op->ptr, "find_all");
534
535 BKE_bpath_missing_files_find(bmain, searchpath.c_str(), op->reports, find_all);
536 /* Redraw sequencer since media presence cache might have changed. */
538
539 return OPERATOR_FINISHED;
540}
541
543 wmOperator *op,
544 const wmEvent * /*event*/)
545{
546 /* XXX file open button text "Find Missing Files" */
549}
550
552{
553 /* identifiers */
554 ot->name = "Find Missing Files";
555 ot->idname = "FILE_OT_find_missing_files";
556 ot->description = "Try to find missing external files";
557
558 /* API callbacks. */
561
562 /* flags */
564
565 /* properties */
566 RNA_def_boolean(ot->srna,
567 "find_all",
568 false,
569 "Find All",
570 "Find all files in the search path (not just missing)");
571
573 0,
579}
580
582
583/* -------------------------------------------------------------------- */
586
587/* NOTE(@broken): Hard to decide whether to keep this as an operator,
588 * or turn it into a hard_coded UI control feature,
589 * handling TIMER events for all regions in `interface_handlers.cc`.
590 * Not sure how good that is to be accessing UI data from
591 * inactive regions, so use this for now. */
592
593#define INFO_TIMEOUT 5.0f
594#define ERROR_TIMEOUT 10.0f
595#define FLASH_TIMEOUT 1.0f
596#define COLLAPSE_TIMEOUT 0.25f
597
599 wmOperator * /*op*/,
600 const wmEvent *event)
601{
602 ReportList *reports = CTX_wm_reports(C);
603 Report *report;
604
605 /* escape if not our timer */
606 if ((reports->reporttimer == nullptr) || (reports->reporttimer != event->customdata) ||
607 ((report = BKE_reports_last_displayable(reports)) == nullptr))
608 {
609 /* May have been deleted. */
611 }
612
615 const float flash_timeout = FLASH_TIMEOUT;
616 bool send_notifier = false;
617
618 const float timeout = (report->type & RPT_ERROR_ALL) ? ERROR_TIMEOUT : INFO_TIMEOUT;
619 const float time_duration = float(reports->reporttimer->time_duration);
620
621 /* clear the report display after timeout */
622 if (time_duration > timeout) {
623 WM_event_timer_remove(wm, nullptr, reports->reporttimer);
624 reports->reporttimer = nullptr;
625
627
629 }
630
631 if (rti->widthfac == 0.0f) {
632 rti->widthfac = 1.0f;
633 }
634
635 const float progress = powf(time_duration / timeout, 2.0f);
636 const float flash_progress = powf(time_duration / flash_timeout, 2.0);
637
638 /* save us from too many draws */
639 if (flash_progress <= 1.0f) {
640 /* Flash report briefly according to progress through fade-out duration. */
641 send_notifier = true;
642 }
643 rti->flash_progress = flash_progress;
644
645 /* collapse report at end of timeout */
646 if (progress * timeout > timeout - COLLAPSE_TIMEOUT) {
647 rti->widthfac = (progress * timeout - (timeout - COLLAPSE_TIMEOUT)) / COLLAPSE_TIMEOUT;
648 rti->widthfac = 1.0f - rti->widthfac;
649 send_notifier = true;
650 }
651
652 if (send_notifier) {
654 }
655
657}
658
660{
661 /* identifiers */
662 ot->name = "Update Reports Display";
663 ot->idname = "INFO_OT_reports_display_update";
664 ot->description = "Update the display of reports in Blender UI (internal use)";
665
666 /* API callbacks. */
668
669 /* flags */
670 ot->flag = 0;
671
672 /* properties */
673}
674
675/* report operators */
676
void BKE_bpath_relative_convert(Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary=nullptr)
Definition bpath.cc:618
void BKE_bpath_absolute_convert(Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary=nullptr)
Definition bpath.cc:627
void BKE_bpath_summary_report(const BPathSummary &summary, ReportList *reports)
Definition bpath.cc:59
void BKE_bpath_missing_files_find(Main *bmain, const char *searchpath, ReportList *reports, bool find_all)
Definition bpath.cc:407
void BKE_bpath_missing_files_check(Main *bmain, ReportList *reports)
Definition bpath.cc:255
ReportList * CTX_wm_reports(const bContext *C)
Main * CTX_data_main(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
@ G_FILE_AUTOPACK
bool BKE_image_is_dirty(Image *image)
ID * BKE_libblock_find_name(Main *bmain, short type, const char *name, const std::optional< Library * > lib=std::nullopt) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Definition lib_id.cc:1710
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
Definition main.cc:887
int BKE_packedfile_unpack_all_libraries(Main *bmain, ReportList *reports)
PackedFileCount BKE_packedfile_count_all(Main *bmain)
void BKE_packedfile_unpack_all(Main *bmain, ReportList *reports, enum ePF_FileStatus how)
void BKE_packedfile_pack_all_libraries(Main *bmain, ReportList *reports)
ePF_FileStatus
@ PF_USE_ORIGINAL
@ PF_USE_LOCAL
@ PF_KEEP
@ PF_REMOVE
@ PF_WRITE_ORIGINAL
@ PF_WRITE_LOCAL
void BKE_packedfile_pack_all(Main *bmain, ReportList *reports, bool verbose)
void BKE_packedfile_id_unpack(Main *bmain, ID *id, ReportList *reports, enum ePF_FileStatus how)
@ RPT_WARNING
Definition BKE_report.hh:38
#define RPT_ERROR_ALL
Definition BKE_report.hh:51
Report * BKE_reports_last_displayable(ReportList *reports)
Definition report.cc:370
void BKE_report(ReportList *reports, eReportType type, const char *message)
Definition report.cc:153
#define BKE_ST_MAXNAME
Definition BKE_screen.hh:72
#define IFACE_(msgid)
#define MAX_ID_NAME
Definition DNA_ID.h:373
#define ID_IS_EDITABLE(_id)
Definition DNA_ID.h:705
@ ID_IM
@ FILE_SORT_DEFAULT
@ FILE_SPECIAL
@ FILE_DEFAULTDISPLAY
@ OPERATOR_CANCELLED
@ OPERATOR_INTERFACE
@ OPERATOR_FINISHED
@ OPERATOR_RUNNING_MODAL
@ OPERATOR_PASS_THROUGH
Read Guarded memory(de)allocation.
#define C
Definition RandGen.cpp:29
void UI_popup_menu_end(bContext *C, uiPopupMenu *pup)
uiPopupMenu * UI_popup_menu_begin(bContext *C, const char *title, int icon) ATTR_NONNULL()
uiLayout * UI_popup_menu_layout(uiPopupMenu *pup)
@ ALERT_ICON_INFO
@ ALERT_ICON_WARNING
#define UI_ITEM_NONE
@ WM_FILESEL_DIRECTORY
Definition WM_api.hh:1122
@ FILE_OPENFILE
Definition WM_api.hh:1133
#define ND_SEQUENCER
Definition WM_types.hh:437
#define NC_WINDOW
Definition WM_types.hh:375
#define ND_SPACE_INFO
Definition WM_types.hh:521
#define NC_SCENE
Definition WM_types.hh:378
@ OPTYPE_UNDO
Definition WM_types.hh:182
@ OPTYPE_REGISTER
Definition WM_types.hh:180
#define NC_SPACE
Definition WM_types.hh:392
nullptr float
#define powf(x, y)
#define INFO_TIMEOUT
Definition info_ops.cc:593
void FILE_OT_make_paths_absolute(wmOperatorType *ot)
Definition info_ops.cc:477
static wmOperatorStatus pack_all_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:156
static wmOperatorStatus pack_all_invoke(bContext *C, wmOperator *op, const wmEvent *)
Definition info_ops.cc:167
static wmOperatorStatus pack_libraries_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:45
void FILE_OT_unpack_all(wmOperatorType *ot)
Definition info_ops.cc:283
#define COLLAPSE_TIMEOUT
Definition info_ops.cc:596
void FILE_OT_unpack_item(wmOperatorType *ot)
Definition info_ops.cc:381
static wmOperatorStatus find_missing_files_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:529
static wmOperatorStatus update_reports_display_invoke(bContext *C, wmOperator *, const wmEvent *event)
Definition info_ops.cc:598
static const EnumPropertyItem unpack_all_method_items[]
Definition info_ops.cc:216
void FILE_OT_pack_all(wmOperatorType *ot)
Definition info_ops.cc:195
static const EnumPropertyItem unpack_item_method_items[]
Definition info_ops.cc:308
static wmOperatorStatus make_paths_absolute_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:457
static wmOperatorStatus make_paths_relative_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:417
static wmOperatorStatus unpack_libraries_invoke(bContext *C, wmOperator *op, const wmEvent *)
Definition info_ops.cc:87
void FILE_OT_autopack_toggle(wmOperatorType *ot)
Definition info_ops.cc:136
void FILE_OT_report_missing_files(wmOperatorType *ot)
Definition info_ops.cc:509
static wmOperatorStatus autopack_toggle_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:121
static wmOperatorStatus unpack_item_invoke(bContext *C, wmOperator *op, const wmEvent *)
Definition info_ops.cc:361
static wmOperatorStatus report_missing_files_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:497
static wmOperatorStatus unpack_item_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:329
#define FLASH_TIMEOUT
Definition info_ops.cc:595
void FILE_OT_pack_libraries(wmOperatorType *ot)
Definition info_ops.cc:54
static wmOperatorStatus unpack_libraries_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:70
#define ERROR_TIMEOUT
Definition info_ops.cc:594
static wmOperatorStatus unpack_all_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:239
static wmOperatorStatus find_missing_files_invoke(bContext *C, wmOperator *op, const wmEvent *)
Definition info_ops.cc:542
void FILE_OT_unpack_libraries(wmOperatorType *ot)
Definition info_ops.cc:100
void FILE_OT_make_paths_relative(wmOperatorType *ot)
Definition info_ops.cc:437
void FILE_OT_find_missing_files(wmOperatorType *ot)
Definition info_ops.cc:551
void INFO_OT_reports_display_update(wmOperatorType *ot)
Definition info_ops.cc:659
static wmOperatorStatus unpack_all_invoke(bContext *C, wmOperator *op, const wmEvent *)
Definition info_ops.cc:255
int count
#define G(x, y, z)
int RNA_int_get(PointerRNA *ptr, const char *name)
std::string RNA_string_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
Definition DNA_ID.h:414
void * next
Definition DNA_ID.h:417
void * first
ListBase images
Definition BKE_main.hh:286
void * data
Definition RNA_types.hh:53
wmTimer * reporttimer
Definition BKE_report.hh:82
short type
Definition BKE_report.hh:66
void op_enum(blender::StringRefNull opname, blender::StringRefNull propname, IDProperty *properties, blender::wm::OpCallContext context, eUI_Item_Flag flag, const int active=-1)
void operator_context_set(blender::wm::OpCallContext opcontext)
void * customdata
Definition WM_types.hh:807
const char * idname
Definition WM_types.hh:1035
struct ReportList * reports
struct wmOperatorType * type
struct PointerRNA * ptr
void * customdata
Definition WM_types.hh:965
double time_duration
Definition WM_types.hh:968
void WM_cursor_wait(bool val)
void WM_event_add_fileselect(bContext *C, wmOperator *op)
void WM_main_add_notifier(uint type, void *reference)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
wmOperatorType * ot
Definition wm_files.cc:4237
void WM_operator_properties_filesel(wmOperatorType *ot, const int filter, const short type, const eFileSel_Action action, const eFileSel_Flag flag, const short display, const short sort)
wmOperatorStatus WM_operator_confirm_ex(bContext *C, wmOperator *op, const char *title, const char *message, const char *confirm_text, int icon, bool cancel_default)
void WM_event_timer_remove(wmWindowManager *wm, wmWindow *, wmTimer *timer)