+static int outliner_one_level_exec(bContext *C, wmOperator *op)
+{
+ SpaceOops *soops= (SpaceOops *)CTX_wm_space_data(C);
+ ARegion *ar= CTX_wm_region(C);
+ int add= RNA_boolean_get(op->ptr, "open");
+ int level;
+
+ level= outliner_has_one_flag(soops, &soops->tree, TSE_CLOSED, 1);
+ if(add==1) {
+ if(level) outliner_openclose_level(soops, &soops->tree, 1, level, 1);
+ }
+ else {
+ if(level==0) level= outliner_count_levels(soops, &soops->tree, 0);
+ if(level) outliner_openclose_level(soops, &soops->tree, 1, level-1, 0);
+ }
+
+ // XXX need proper notifiers here instead
+ ED_region_tag_redraw(ar);
+
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_show_one_level(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Show/Hide One Level";
+ ot->idname= "OUTLINER_OT_show_one_level";
+
+ /* callbacks */
+ ot->exec= outliner_one_level_exec;
+ ot->poll= ED_operator_outliner_active;
+
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_boolean(ot->srna, "open", 1, "Open", "Expand all entries one level deep.");
+}
+