WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

toggle buttons in einer toolbar

 

geieraffe
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 97
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2015, 13:05     Titel: toggle buttons in einer toolbar
  Antworten mit Zitat      
Salut,

ich habe mir eine GUI programmiert bei der ich folgendermaßen eine Toolbar mit verschiedenen Zoom Buttons einblenden will:

Code:

figureToolBar = uitoolbar;
% zoom in button
   % icon laden und aufbereiten
   [img,~,alpha] = imread(fullfile(matlabroot,'toolbox','matlab','icons',...
      'tool_zoom_in.png'));
   icon = double(img)/256/256;
   icon(~alpha) = NaN;
   % button erstellen
   uitoggletool(figureToolBar,'Tooltip','Zoom In','CData',icon,...
      'OnCallback','zoom on','OffCallback','zoom off');

% zoom out button
   % icon laden und aufbereiten
   [img,~,alpha] = imread(fullfile(matlabroot,'toolbox','matlab','icons',...
      'tool_zoom_out.png'));
   icon = double(img)/256/256;
   icon(~alpha) = NaN;
   % button erstellen
   uipushtool(figureToolBar,'Tooltip','Zoom Out','CData',icon,...
      'ClickedCallback','zoom out');

% zoom x button
   % icon laden und aufbereiten
%    [icon,~,~] = imread(fullfile(matlabroot,'help','simulink','ug',...
%       'sasm_icon_zoom_x.png'));
   [img,~,alpha] = imread(fullfile(matlabroot,'toolbox','shared','sdi',...
      'web','MainView','release','SDI2','icons','toolstrip',...
      'ZoomInT_16.png'));
   icon = double(img)/256;
   icon(~alpha) = NaN;
   % button erstellen
   uitoggletool(figureToolBar,'Tooltip','Zoom X','CData',icon,...
      'OnCallback','zoom xon','OffCallback','zoom off');

% zoom y button
   % icon laden und aufbereiten
%    [icon,~,~] = imread(fullfile(matlabroot,'help','simulink','ug',...
%       'sasm_icon_zoom_y.png'));
   [img,~,alpha] = imread(fullfile(matlabroot,'toolbox','shared','sdi',...
      'web','MainView','release','SDI2','icons','toolstrip',...
      'ZoomInY_16.png'));
   icon = double(img)/256;
   icon(~alpha) = NaN;
   % button erstellen
   uitoggletool(figureToolBar,'Tooltip','Zoom Y','CData',icon,...
      'OnCallback','zoom yon','OffCallback','zoom off');
 


Das funktioniert soweit ganz prima.
...ABER wie bekomme ich es hin, dass toggle button A deaktiviert wird, wenn ich toggle button B aktiviere? Ich habe ja nicht direkt eine Callback Funktion in die ich dies "reinprogrammieren" könnte.
Weiß jemand wie das beiden "nativen" Scopes (Simulink) und Figures gemacht ist?

Merci schon im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.04.2015, 12:20     Titel: Re: toggle buttons in einer toolbar
  Antworten mit Zitat      
Hallo geieraffe,

Ich verstehe die Frage nicht.
Zitat:
Ich habe ja nicht direkt eine Callback Funktion in die ich dies "reinprogrammieren" könnte.

Wieso kannst Du nicht einfach eine Callback-Funktion einsetzen?

Code:
figureToolBar = uitoolbar;
[img,~,alpha] = imread(fullfile(matlabroot,'toolbox','matlab','icons',...
      'tool_zoom_in.png'));
icon = double(img)/256/256;
icon(~alpha) = NaN;

uitoggletool(figureToolBar,'Tooltip','Zoom In','CData',icon,...
      'OnCallback', @YourCallback,'OffCallback','zoom off');

...
function YourCallback(objectH, EventData)
disp('Oncallback of the uitoggle button')

In Deinem Beispielcode werden die Callbacks in der alten Form als Strings definiert. Als FunctionHandle bzw. Cell können sie aber wie alle Callbacks definiert werden.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
geieraffe
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 97
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2015, 08:31     Titel:
  Antworten mit Zitat      
Nach tagelangem Suchen nach einer anderen Lösung muss ich wohl eingestehen, dass es keine einfacheren Weg gibt Very Happy

Ich hab zu all meinen Buttons jetzt eine eigene zoom function mit einer switch case Anweisung geschrieben.
Für alle die an der Lösung interessiert sind, hier der Code:

Die Toolbar mit den Buttons
Code:

%%% (Zoom) Toolbar
figureToolBar = uitoolbar('Tag','zoomToolbar');
% pan button
   % icon laden und aufbereiten
   [img,~,alpha] = imread('Images\tool_hand.png');
   icon = double(img)/256/256;
   icon(~alpha) = NaN;
   % button erstellen
   uitoggletool(figureToolBar,'Tag','tt_pan','Tooltip','Pan','CData',icon,...
      'OnCallback',@(h,e)myOwnZoom(hObject,'pan'),'OffCallback','pan off');
% zoom in button
   % icon laden und aufbereiten
   [img,~,alpha] = imread('Images\tool_zoom_in.png');
   icon = double(img)/256/256;
   icon(~alpha) = NaN;
   % button erstellen
   uitoggletool(figureToolBar,'Tag','tt_zoomOn','Tooltip','Zoom In','CData',icon,...
      'OnCallback',@(h,e)myOwnZoom(hObject,'on'),'OffCallback','zoom off');
% zoom out button
   % icon laden und aufbereiten
   [img,~,alpha] = imread('Images\tool_zoom_out.png');
   icon = double(img)/256/256;
   icon(~alpha) = NaN;
   % button erstellen
   uipushtool(figureToolBar,'Tag','pt_zoomOut','Tooltip','Zoom Out','CData',icon,...
      'ClickedCallback',@(h,e)myOwnZoom(hObject,'out'));
% zoom x button
   % icon laden und aufbereiten
   [img,~,alpha] = imread('Images\ZoomInT_16.png');
   icon = double(img)/256;
   icon(~alpha) = NaN;
   % button erstellen
   uitoggletool(figureToolBar,'Tag','tt_zoomXOn','Tooltip','Zoom X','CData',icon,...
      'OnCallback',@(h,e)myOwnZoom(hObject,'xon'),'OffCallback','zoom off');
% zoom y button
   % icon laden und aufbereiten
   [img,~,alpha] = imread('Images\ZoomInY_16.png');
   icon = double(img)/256;
   icon(~alpha) = NaN;
   % button erstellen
   uitoggletool(figureToolBar,'Tag','tt_zoomYOn','Tooltip','Zoom Y','CData',icon,...
      'OnCallback',@(h,e)myOwnZoom(hObject,'yon'),'OffCallback','zoom off');
 


Die Funktion:
Code:

function myOwnZoom(hObject, direction)
   % find the toggle buttons
   zoomToolbar = findall(hObject,'Tag','zoomToolbar');
   toggleButtons = findall(zoomToolbar,'Type','uitoggletool');

   % do the specific zoom
   switch direction
      case 'off'
         set(toggleButtons,'State','off')
         zoom('off')
      case 'on'
         set(toggleButtons(~strcmp(get(toggleButtons,'Tag'),'tt_zoomOn')),'State','off')
         zoom('on')
      case 'xon'
         set(toggleButtons(~strcmp(get(toggleButtons,'Tag'),'tt_zoomXOn')),'State','off')
         zoom('xon')
      case 'yon'
         set(toggleButtons(~strcmp(get(toggleButtons,'Tag'),'tt_zoomYOn')),'State','off')
         zoom('yon')
      case 'out'
         set(toggleButtons(~strcmp(get(toggleButtons,'Tag'),'pt_zoomOut')),'State','off')
         zoom('out')
      case 'pan'
         set(toggleButtons(~strcmp(get(toggleButtons,'Tag'),'tt_pan')),'State','off')
         pan('on')
      case 'myZoom'
         set(toggleButtons(~strcmp(get(toggleButtons,'Tag'),'tt_myZoom')),'State','off')
         zoom('on')
   end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.04.2015, 13:47     Titel:
  Antworten mit Zitat      
Hallo geieraffe,

Die Lösung sieht sehr gut aus.

Anmerkungen:
Code:
icon = double(img)/256/256;
% Nur einmal /256?

@(h,e)myOwnZoom(hObject,'pan')
% meinst Du: @(h,e)myOwnZoom(h,'pan')

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.