Skip to content
This repository has been archived by the owner. It is now read-only.

Commit

Permalink
expose widget event
Browse files Browse the repository at this point in the history
  • Loading branch information
MPIBR-tushevg committed Nov 2, 2017
1 parent 8f1c20b commit b502bc2
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 54 deletions.
72 changes: 43 additions & 29 deletions WidgetFolderBrowser.m
Original file line number Diff line number Diff line change
Expand Up @@ -8,90 +8,104 @@
% sciclist@brain.mpg.de
% Max-Planck Institute For Brain Research
%
properties

properties (Dependent)

file

end

properties (Access = private)

ui
model

end

events

event_file

end

methods

function obj = WidgetFolderBrowser(varargin)

% parse input
parserObj = inputParser;
addParameter(parserObj, 'Parent', [], @(varin) (isempty(varin) || isgraphics(varin)));
addParameter(parserObj, 'Parent', [], @(varhandle) (isempty(varhandle) || isgraphics(varhandle)));
addParameter(parserObj, 'Extension', '*.*', @ischar);
parse(parserObj, varargin{:});


% create MVC
% ui component
obj.ui = WidgetFolderBrowserUi(parserObj.Results.Parent);
if ~isa(obj.ui, 'WidgetFolderBrowserUi')
error('WidgetFolderBrowser: initializing ui failed!');
end

% model component
obj.model = WidgetFolderBrowserModel(parserObj.Results.Extension);
if ~isa(obj.model, 'WidgetFolderBrowserModel')
error('WidgetFolderBrowserModel: initailizing model failed!');
end


% link controler with view and model
addlistener(obj.ui, 'event_fileLoad', @obj.fcnCallback_FileLoad);
addlistener(obj.ui, 'event_fileNext', @obj.fcnCallback_FileNext);
addlistener(obj.ui, 'event_filePrevious', @obj.fcnCallback_FilePrevious);
addlistener(obj.ui, 'event_folderLoad', @obj.fcnCallback_FolderLoad);
addlistener(obj.model, 'file', 'PostSet', @obj.fcnCallback_FileUpdated);
% link ui events
addlistener(obj.ui, 'event_fileLoad', @obj.fcnCallback_fileLoad);
addlistener(obj.ui, 'event_fileNext', @obj.fcnCallback_fileNext);
addlistener(obj.ui, 'event_filePrevious', @obj.fcnCallback_filePrevious);
addlistener(obj.ui, 'event_folderLoad', @obj.fcnCallback_folderLoad);

% link model events
addlistener(obj.model, 'file', 'PostSet', @obj.fcnCallback_fileUpdated);

end
end

methods

%%% --- callback functions --- %%%

function obj = fcnCallback_FileLoad(obj, ~, ~)
%% @ ui event_fileLoad
function obj = fcnCallback_fileLoad(obj, ~, ~)

obj.model.fileLoad();

set(obj.ui.pushButton_PrevFile, 'Enable', 'off');
set(obj.ui.pushButton_NextFile, 'Enable', 'off');

end

function obj = fcnCallback_FileNext(obj, ~, ~)
%% @ ui event_fileNext
function obj = fcnCallback_fileNext(obj, ~, ~)

obj.model.fileUpdate(1);

end

function obj = fcnCallback_FilePrevious(obj, ~, ~)
%% @ ui event_filePrevious
function obj = fcnCallback_filePrevious(obj, ~, ~)

obj.model.fileUpdate(-1);

end

function obj = fcnCallback_FolderLoad(obj, ~, ~)
%% @ ui event_folderLoad
function obj = fcnCallback_folderLoad(obj, ~, ~)

obj.model.folderLoad();

set(obj.ui.pushButton_PrevFile, 'Enable', 'on');
set(obj.ui.pushButton_NextFile, 'Enable', 'on');

end

function obj = fcnCallback_FileUpdated(obj, ~, ~)
%% @ model event_fileUpdate
function obj = fcnCallback_fileUpdated(obj, ~, ~)

% update status
[~, fileTag] = fileparts(obj.model.file);
%fprintf('file: %s\n', obj.model.file);
obj.ui.updateFileName(obj.model.fileTag);
obj.ui.updateFileCounter(obj.model.index, obj.model.listSize);
notify(obj, 'event_file');

set(obj.ui.text_FileName, 'String', fileTag);
set(obj.ui.text_FileCounter, 'String', ...
sprintf('%d / %d', obj.model.index, obj.model.listSize));
end

%% @ request file
function varfile = get.file(obj)

varfile = obj.model.file;

end

Expand Down
7 changes: 7 additions & 0 deletions WidgetFolderBrowserModel.m
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
properties (Dependent)

listSize
fileTag

end

Expand Down Expand Up @@ -119,5 +120,11 @@
value = length(obj.list);

end

function vartag = get.fileTag(obj)

[~, vartag] = fileparts(obj.file);

end
end
end
30 changes: 30 additions & 0 deletions WidgetFolderBrowserTest.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
%% WidgetFolderBrowserTest
% test script and example usage
%
% Aug 2017
%

function WidgetFolderBrowserTest()

%% clean test
clc
clear variables
close all


%% evoke widget
obj = WidgetFolderBrowser();
if ~isa(obj, 'WidgetFolderBrowser')
error('WidgetFolderBrowser :: test failed!');
end

%% set listener callback
addlistener(obj, 'event_file', @fcnCallback_testEvent);

end

function fcnCallback_testEvent(~, ~)

disp('EVENT_FILE');

end
35 changes: 28 additions & 7 deletions WidgetFolderBrowserUi.m
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
% Max-Planck Institute For Brain Research
%

properties
properties (Access = private)

parent
panel
Expand Down Expand Up @@ -49,12 +49,12 @@

methods

function obj = WidgetFolderBrowserUi(ui_parent)
function obj = WidgetFolderBrowserUi(varhandle)



% render parent
if isempty(ui_parent)
if isempty(varhandle)

obj.parent = figure(...
'Visible', 'on',...
Expand All @@ -66,13 +66,13 @@
'Position', obj.UIWINDOW_SIZE);
movegui(obj.parent, 'northwest');

elseif isgraphics(ui_parent)
elseif isgraphics(varhandle)

obj.parent = ui_parent;
obj.parent = varhandle;

else

error('uirender::invalid input variable for file constructor');
error('WidgetFolderBrowserUi::invalid input variable for file constructor');

end

Expand All @@ -81,6 +81,24 @@

end

function obj = updateFileName(obj, vartext)

set(obj.text_FileName, 'String', vartext);

end

function obj = updateFileCounter(obj, varcount, varsize)

set(obj.text_FileCounter, 'String', ...
sprintf('%d / %d', varcount, varsize));

end


end

methods (Access = private)

function obj = render(obj)

%%% --- create widget panel --- %%%
Expand Down Expand Up @@ -149,12 +167,16 @@

function obj = onClick_pushButton_LoadFile(obj, ~, ~)

set(obj.pushButton_PrevFile, 'Enable', 'off');
set(obj.pushButton_NextFile, 'Enable', 'off');
notify(obj, 'event_fileLoad');

end

function obj = onClick_pushButton_LoadFolder(obj, ~, ~)

set(obj.pushButton_PrevFile, 'Enable', 'on');
set(obj.pushButton_NextFile, 'Enable', 'on');
notify(obj, 'event_folderLoad');

end
Expand All @@ -173,7 +195,6 @@

end


end

end
18 changes: 0 additions & 18 deletions test/test.m

This file was deleted.

0 comments on commit b502bc2

Please sign in to comment.