Blender V4.3
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
9#include <cstdio>
10#include <cstring>
11#include <fmt/format.h>
12
13#include "DNA_space_types.h"
15
16#include "MEM_guardedalloc.h"
17
18#include "BLI_blenlib.h"
19#include "BLI_utildefines.h"
20
21#include "BLT_translation.hh"
22
23#include "BKE_bpath.hh"
24#include "BKE_context.hh"
25#include "BKE_global.hh"
26#include "BKE_image.hh"
27#include "BKE_lib_id.hh"
28#include "BKE_main.hh"
29#include "BKE_packedFile.hh"
30#include "BKE_report.hh"
31#include "BKE_screen.hh"
32
33#include "WM_api.hh"
34#include "WM_types.hh"
35
36#include "UI_interface.hh"
37
38#include "RNA_access.hh"
39#include "RNA_define.hh"
40
41#include "info_intern.hh"
42
43/* -------------------------------------------------------------------- */
48{
49 Main *bmain = CTX_data_main(C);
50
52
53 return OPERATOR_FINISHED;
54}
55
57{
58 /* identifiers */
59 ot->name = "Pack Linked Libraries";
60 ot->idname = "FILE_OT_pack_libraries";
62 "Store all data-blocks linked from other .blend files in the current .blend file. "
63 "Library references are preserved so the linked data-blocks can be unpacked again";
64
65 /* api callbacks */
67
68 /* flags */
70}
71
73{
74 Main *bmain = CTX_data_main(C);
75
76 WM_cursor_wait(true);
78 WM_cursor_wait(false);
79
80 return OPERATOR_FINISHED;
81}
82
85/* -------------------------------------------------------------------- */
89static int unpack_libraries_invoke(bContext *C, wmOperator *op, 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 */
110
111 /* flags */
113}
114
117/* -------------------------------------------------------------------- */
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 */
145
146 /* flags */
148}
149
152/* -------------------------------------------------------------------- */
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
167static int pack_all_invoke(bContext *C, wmOperator *op, const wmEvent * /*event*/)
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 */
205
206 /* flags */
208}
209
212/* -------------------------------------------------------------------- */
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
255static int unpack_all_invoke(bContext *C, wmOperator *op, const wmEvent * /*event*/)
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 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 uiItemsEnumO(layout, "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 */
293
294 /* flags */
296
297 /* properties */
299 ot->srna, "method", unpack_all_method_items, PF_USE_LOCAL, "Method", "How to unpack");
300}
301
304/* -------------------------------------------------------------------- */
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 (method != PF_KEEP) {
346 WM_cursor_wait(true);
347 BKE_packedfile_id_unpack(bmain, id, op->reports, method); /* XXX PF_ASK can't work here */
348 WM_cursor_wait(false);
349 }
350
351 G.fileflags &= ~G_FILE_AUTOPACK;
352
353 return OPERATOR_FINISHED;
354}
355
356static int unpack_item_invoke(bContext *C, wmOperator *op, const wmEvent * /*event*/)
357{
358 uiPopupMenu *pup;
359 uiLayout *layout;
360
361 pup = UI_popup_menu_begin(C, IFACE_("Unpack"), ICON_NONE);
362 layout = UI_popup_menu_layout(pup);
363
365 uiItemsFullEnumO(layout,
366 op->type->idname,
367 "method",
368 static_cast<IDProperty *>(op->ptr->data),
371
372 UI_popup_menu_end(C, pup);
373
374 return OPERATOR_INTERFACE;
375}
376
378{
379 /* identifiers */
380 ot->name = "Unpack Item";
381 ot->idname = "FILE_OT_unpack_item";
382 ot->description = "Unpack this file to an external file";
383
384 /* api callbacks */
387
388 /* flags */
390
391 /* properties */
393 ot->srna, "method", unpack_item_method_items, PF_USE_LOCAL, "Method", "How to unpack");
395 ot->srna, "id_name", nullptr, BKE_ST_MAXNAME, "ID Name", "Name of ID block to unpack");
397 "id_type",
398 ID_IM,
399 0,
400 INT_MAX,
401 "ID Type",
402 "Identifier type of ID block",
403 0,
404 INT_MAX);
405}
406
409/* -------------------------------------------------------------------- */
414{
415 Main *bmain = CTX_data_main(C);
416 const char *blendfile_path = BKE_main_blendfile_path(bmain);
417
418 if (blendfile_path[0] == '\0') {
419 BKE_report(op->reports, RPT_WARNING, "Cannot set relative paths with an unsaved blend file");
420 return OPERATOR_CANCELLED;
421 }
422
423 BPathSummary summary;
424 BKE_bpath_relative_convert(bmain, blendfile_path, op->reports, &summary);
425 BKE_bpath_summary_report(summary, op->reports);
426
427 /* redraw everything so any changed paths register */
429
430 return OPERATOR_FINISHED;
431}
432
434{
435 /* identifiers */
436 ot->name = "Make Paths Relative";
437 ot->idname = "FILE_OT_make_paths_relative";
438 ot->description = "Make all paths to external files relative to current .blend";
439
440 /* api callbacks */
442
443 /* flags */
445}
446
449/* -------------------------------------------------------------------- */
454{
455 Main *bmain = CTX_data_main(C);
456 const char *blendfile_path = BKE_main_blendfile_path(bmain);
457
458 if (blendfile_path[0] == '\0') {
459 BKE_report(op->reports, RPT_WARNING, "Cannot set absolute paths with an unsaved blend file");
460 return OPERATOR_CANCELLED;
461 }
462
463 BPathSummary summary;
464 BKE_bpath_absolute_convert(bmain, blendfile_path, op->reports, &summary);
465 BKE_bpath_summary_report(summary, op->reports);
466
467 /* redraw everything so any changed paths register */
469
470 return OPERATOR_FINISHED;
471}
472
474{
475 /* identifiers */
476 ot->name = "Make Paths Absolute";
477 ot->idname = "FILE_OT_make_paths_absolute";
478 ot->description = "Make all paths to external files absolute";
479
480 /* api callbacks */
482
483 /* flags */
485}
486
489/* -------------------------------------------------------------------- */
494{
495 Main *bmain = CTX_data_main(C);
496
497 /* run the missing file check */
499 /* Redraw sequencer since media presence cache might have changed. */
501
502 return OPERATOR_FINISHED;
503}
504
506{
507 /* identifiers */
508 ot->name = "Report Missing Files";
509 ot->idname = "FILE_OT_report_missing_files";
510 ot->description = "Report all missing external files";
511
512 /* api callbacks */
514
515 /* flags */
516 ot->flag = 0; /* only reports so no need to undo/register */
517}
518
521/* -------------------------------------------------------------------- */
526{
527 Main *bmain = CTX_data_main(C);
528 const char *searchpath = RNA_string_get_alloc(op->ptr, "directory", nullptr, 0, nullptr);
529 const bool find_all = RNA_boolean_get(op->ptr, "find_all");
530
531 BKE_bpath_missing_files_find(bmain, searchpath, op->reports, find_all);
532 MEM_freeN((void *)searchpath);
533 /* Redraw sequencer since media presence cache might have changed. */
535
536 return OPERATOR_FINISHED;
537}
538
539static int find_missing_files_invoke(bContext *C, wmOperator *op, const wmEvent * /*event*/)
540{
541 /* XXX file open button text "Find Missing Files" */
544}
545
547{
548 /* identifiers */
549 ot->name = "Find Missing Files";
550 ot->idname = "FILE_OT_find_missing_files";
551 ot->description = "Try to find missing external files";
552
553 /* api callbacks */
556
557 /* flags */
559
560 /* properties */
562 "find_all",
563 false,
564 "Find All",
565 "Find all files in the search path (not just missing)");
566
568 0,
574}
575
578/* -------------------------------------------------------------------- */
582/* NOTE(@broken): Hard to decide whether to keep this as an operator,
583 * or turn it into a hard_coded UI control feature,
584 * handling TIMER events for all regions in `interface_handlers.cc`.
585 * Not sure how good that is to be accessing UI data from
586 * inactive regions, so use this for now. */
587
588#define INFO_TIMEOUT 5.0f
589#define ERROR_TIMEOUT 10.0f
590#define FLASH_TIMEOUT 1.0f
591#define COLLAPSE_TIMEOUT 0.25f
592
593static int update_reports_display_invoke(bContext *C, wmOperator * /*op*/, const wmEvent *event)
594{
595 ReportList *reports = CTX_wm_reports(C);
596 Report *report;
597
598 /* escape if not our timer */
599 if ((reports->reporttimer == nullptr) || (reports->reporttimer != event->customdata) ||
600 ((report = BKE_reports_last_displayable(reports)) == nullptr))
601 {
602 /* May have been deleted. */
604 }
605
608 const float flash_timeout = FLASH_TIMEOUT;
609 bool send_notifier = false;
610
611 const float timeout = (report->type & RPT_ERROR_ALL) ? ERROR_TIMEOUT : INFO_TIMEOUT;
612 const float time_duration = float(reports->reporttimer->time_duration);
613
614 /* clear the report display after timeout */
615 if (time_duration > timeout) {
616 WM_event_timer_remove(wm, nullptr, reports->reporttimer);
617 reports->reporttimer = nullptr;
618
620
622 }
623
624 if (rti->widthfac == 0.0f) {
625 rti->widthfac = 1.0f;
626 }
627
628 const float progress = powf(time_duration / timeout, 2.0f);
629 const float flash_progress = powf(time_duration / flash_timeout, 2.0);
630
631 /* save us from too many draws */
632 if (flash_progress <= 1.0f) {
633 /* Flash report briefly according to progress through fade-out duration. */
634 send_notifier = true;
635 }
636 rti->flash_progress = flash_progress;
637
638 /* collapse report at end of timeout */
639 if (progress * timeout > timeout - COLLAPSE_TIMEOUT) {
640 rti->widthfac = (progress * timeout - (timeout - COLLAPSE_TIMEOUT)) / COLLAPSE_TIMEOUT;
641 rti->widthfac = 1.0f - rti->widthfac;
642 send_notifier = true;
643 }
644
645 if (send_notifier) {
647 }
648
650}
651
653{
654 /* identifiers */
655 ot->name = "Update Reports Display";
656 ot->idname = "INFO_OT_reports_display_update";
657 ot->description = "Update the display of reports in Blender UI (internal use)";
658
659 /* api callbacks */
661
662 /* flags */
663 ot->flag = 0;
664
665 /* properties */
666}
667
668/* report operators */
669
void BKE_bpath_relative_convert(Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary=nullptr)
Definition bpath.cc:615
void BKE_bpath_absolute_convert(Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary=nullptr)
Definition bpath.cc:624
void BKE_bpath_summary_report(const BPathSummary &summary, ReportList *reports)
Definition bpath.cc:57
void BKE_bpath_missing_files_find(Main *bmain, const char *searchpath, ReportList *reports, bool find_all)
Definition bpath.cc:404
void BKE_bpath_missing_files_check(Main *bmain, ReportList *reports)
Definition bpath.cc:253
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:1657
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
Definition main.cc:832
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)
Report * BKE_reports_last_displayable(ReportList *reports)
Definition report.cc:329
void BKE_report(ReportList *reports, eReportType type, const char *message)
Definition report.cc:125
#define BKE_ST_MAXNAME
Definition BKE_screen.hh:66
#define IFACE_(msgid)
#define MAX_ID_NAME
Definition DNA_ID.h:377
@ ID_IM
@ FILE_SORT_DEFAULT
@ FILE_SPECIAL
@ FILE_DEFAULTDISPLAY
#define RPT_ERROR_ALL
@ OPERATOR_RUNNING_MODAL
@ OPERATOR_PASS_THROUGH
Read Guarded memory(de)allocation.
void uiItemsFullEnumO(uiLayout *layout, const char *opname, const char *propname, IDProperty *properties, wmOperatorCallContext context, eUI_Item_Flag flag, const int active=-1)
void UI_popup_menu_end(bContext *C, uiPopupMenu *pup)
#define UI_ITEM_NONE
uiPopupMenu * UI_popup_menu_begin(bContext *C, const char *title, int icon) ATTR_NONNULL()
uiLayout * UI_popup_menu_layout(uiPopupMenu *pup)
void uiItemsEnumO(uiLayout *layout, const char *opname, const char *propname)
void uiLayoutSetOperatorContext(uiLayout *layout, wmOperatorCallContext opcontext)
@ ALERT_ICON_INFO
@ ALERT_ICON_WARNING
@ WM_FILESEL_DIRECTORY
Definition WM_api.hh:934
@ FILE_OPENFILE
Definition WM_api.hh:945
#define ND_SEQUENCER
Definition WM_types.hh:404
@ OPTYPE_UNDO
Definition WM_types.hh:162
@ OPTYPE_REGISTER
Definition WM_types.hh:160
#define NC_WINDOW
Definition WM_types.hh:342
#define ND_SPACE_INFO
Definition WM_types.hh:487
#define NC_SCENE
Definition WM_types.hh:345
@ WM_OP_EXEC_REGION_WIN
Definition WM_types.hh:226
@ WM_OP_EXEC_DEFAULT
Definition WM_types.hh:225
#define NC_SPACE
Definition WM_types.hh:359
#define powf(x, y)
draw_view in_light_buf[] float
#define INFO_TIMEOUT
Definition info_ops.cc:588
void FILE_OT_make_paths_absolute(wmOperatorType *ot)
Definition info_ops.cc:473
static int unpack_item_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:329
void FILE_OT_unpack_all(wmOperatorType *ot)
Definition info_ops.cc:283
#define COLLAPSE_TIMEOUT
Definition info_ops.cc:591
static int pack_all_invoke(bContext *C, wmOperator *op, const wmEvent *)
Definition info_ops.cc:167
void FILE_OT_unpack_item(wmOperatorType *ot)
Definition info_ops.cc:377
static int report_missing_files_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:493
static int update_reports_display_invoke(bContext *C, wmOperator *, const wmEvent *event)
Definition info_ops.cc:593
static int autopack_toggle_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:121
static const EnumPropertyItem unpack_all_method_items[]
Definition info_ops.cc:216
static int make_paths_absolute_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:453
void FILE_OT_pack_all(wmOperatorType *ot)
Definition info_ops.cc:195
static const EnumPropertyItem unpack_item_method_items[]
Definition info_ops.cc:308
void FILE_OT_autopack_toggle(wmOperatorType *ot)
Definition info_ops.cc:136
static int make_paths_relative_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:413
void FILE_OT_report_missing_files(wmOperatorType *ot)
Definition info_ops.cc:505
static int unpack_all_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:239
static int unpack_libraries_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:72
static int pack_all_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:156
static int unpack_all_invoke(bContext *C, wmOperator *op, const wmEvent *)
Definition info_ops.cc:255
#define FLASH_TIMEOUT
Definition info_ops.cc:590
void FILE_OT_pack_libraries(wmOperatorType *ot)
Definition info_ops.cc:56
static int find_missing_files_invoke(bContext *C, wmOperator *op, const wmEvent *)
Definition info_ops.cc:539
static int unpack_libraries_invoke(bContext *C, wmOperator *op, const wmEvent *)
Definition info_ops.cc:89
#define ERROR_TIMEOUT
Definition info_ops.cc:589
static int find_missing_files_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:525
static int unpack_item_invoke(bContext *C, wmOperator *op, const wmEvent *)
Definition info_ops.cc:356
void FILE_OT_unpack_libraries(wmOperatorType *ot)
Definition info_ops.cc:100
void FILE_OT_make_paths_relative(wmOperatorType *ot)
Definition info_ops.cc:433
void FILE_OT_find_missing_files(wmOperatorType *ot)
Definition info_ops.cc:546
void INFO_OT_reports_display_update(wmOperatorType *ot)
Definition info_ops.cc:652
static int pack_libraries_exec(bContext *C, wmOperator *op)
Definition info_ops.cc:47
int count
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
#define G(x, y, z)
void RNA_string_get(PointerRNA *ptr, const char *name, char *value)
int RNA_int_get(PointerRNA *ptr, const char *name)
char * RNA_string_get_alloc(PointerRNA *ptr, const char *name, char *fixedbuf, int fixedlen, int *r_len)
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:413
void * next
Definition DNA_ID.h:416
void * first
ListBase images
Definition BKE_main.hh:218
void * data
Definition RNA_types.hh:42
struct wmTimer * reporttimer
void * customdata
Definition WM_types.hh:772
const char * name
Definition WM_types.hh:990
const char * idname
Definition WM_types.hh:992
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
Definition WM_types.hh:1022
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
Definition WM_types.hh:1006
const char * description
Definition WM_types.hh:996
StructRNA * srna
Definition WM_types.hh:1080
struct ReportList * reports
struct wmOperatorType * type
struct PointerRNA * ptr
void * customdata
Definition WM_types.hh:922
double time_duration
Definition WM_types.hh:925
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:4125
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)
int 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)