Browse Source

Plugin GUI resizing - bug fix MK 2

master
edgeeffect 21 years ago
parent
commit
a571094045
5 changed files with 108 additions and 123 deletions
  1. +41
    -53
      GUI/Widgets/Fl_DeviceGUI.C
  2. +57
    -68
      GUI/Widgets/Fl_DeviceGUI.h
  3. +1
    -1
      Makefile.in
  4. +8
    -0
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C
  5. +1
    -1
      SpiralSound/Plugins/SpiralPluginGUI.C

+ 41
- 53
GUI/Widgets/Fl_DeviceGUI.C View File

@@ -54,15 +54,14 @@ int Fl_PortButton::handle(int event)
}

Fl_DeviceGUI::Fl_DeviceGUI(const DeviceGUIInfo& Info, SpiralGUIType *PW, Fl_Pixmap *Icon, bool Terminal) :
Fl_Group(Info.XPos, Info.YPos, Info.Width+(PortGroupWidth*2), Info.Height+TitleBarHeight, ""),
m_PluginWindow(NULL),
m_Icon(NULL),
m_Name(Info.Name),
m_ID(-1),
m_DelMe(false),
m_IsTerminal(Terminal),
m_Minimised(true),
m_Maximising(false)
Fl_Group (Info.XPos, Info.YPos, Info.Width+(PortGroupWidth*2), Info.Height+TitleBarHeight, ""),
m_PluginWindow (NULL),
m_Icon (NULL),
m_Name (Info.Name),
m_ID (-1),
m_DelMe (false),
m_IsTerminal (Terminal),
m_Minimised (true)
{
for (int n=0; n<512; n++) Numbers[n]=n;

@@ -119,7 +118,8 @@ void Fl_DeviceGUI::Clear()
}

inline void Fl_DeviceGUI::cb_Resize_i (void) {
if (m_PluginWindow && !m_DelMe && !m_Minimised && !m_Maximising) Maximise();
if (m_PluginWindow && m_PluginWindow->visible() && !m_DelMe && !m_Minimised)
ResizeToPluginWindow();
}

void Fl_DeviceGUI::cb_Resize (Fl_DeviceGUI *o) {
@@ -129,67 +129,55 @@ void Fl_DeviceGUI::cb_Resize (Fl_DeviceGUI *o) {

int Fl_DeviceGUI::handle (int event) {
int t=Fl_Group::handle(event);
// Click on icon in minimised device - Maximise, hide icon
if (m_IconButton && m_IconButton->value()) {
m_IconButton->value (false);
if (m_PluginWindow && !m_DelMe) {
if (!m_PluginWindow->visible()) Maximise();
}
}

// this bit might be supposed to be in cb_resize_i, I'm not sure - Andy Preston
// plugin GUI killed - minimise device, show icon
if (!m_Minimised && !m_PluginWindow->visible()) {
Minimise();
if (m_IconButton) m_IconButton->show();
}

return 1;
}

void Fl_DeviceGUI::Minimise()
{
m_Minimised=true;
Resize(m_MiniWidth,m_MiniHeight);
parent()->redraw();
void Fl_DeviceGUI::ResizeToPluginWindow (void) {
if (m_PluginWindow->h()+2 > m_MiniHeight)
Resize (m_PluginWindow->w()+(PortGroupWidth*2)-5, m_PluginWindow->h()+2);
else
Resize (m_PluginWindow->w()+(PortGroupWidth*2)-5, m_MiniHeight);
}

void Fl_DeviceGUI::Maximise()
{
m_Minimised=false;
m_Maximising=true;
if (m_PluginWindow->h()+2>m_MiniHeight)
{
Resize(m_PluginWindow->w()+(PortGroupWidth*2)-5,m_PluginWindow->h()+2);
}
else
{
Resize(m_PluginWindow->w()+(PortGroupWidth*2)-5,m_MiniHeight);
}
m_PluginWindow->show();
m_IconButton->hide();
parent()->redraw();
((Fl_Canvas*)parent())->ToTop(this);
m_Maximising=false;
void Fl_DeviceGUI::Minimise() {
m_Minimised = true;
Resize (m_MiniWidth, m_MiniHeight);
parent()->redraw();
}

void Fl_DeviceGUI::Resize(int width, int height)
{
int oldw = w();
int oldh = h();
size(width,height);
m_DragBar->size(width,m_DragBar->h());

for (int n=m_Info.NumInputs; n<(int)m_PortVec.size(); n++)
{
m_PortVec[n]->position(x()+width-8,m_PortVec[n]->y());
}

position(x()+(oldw-w())/2,y()+(oldh-h())/2);
m_Menu->resize(x(),y(),width,height);
void Fl_DeviceGUI::Maximise() {
m_Minimised=false;
ResizeToPluginWindow();
m_PluginWindow->show();
m_IconButton->hide();
parent()->redraw();
((Fl_Canvas*)parent())->ToTop(this);
}

int Centx=x()+w()/2;
int Centy=y()+h()/2;
m_IconButton->position(Centx-m_Icon->w()/2,Centy-m_Icon->h()/2);
void Fl_DeviceGUI::Resize (int width, int height) {
int oldw = w();
int oldh = h();
size (width, height);
m_DragBar->size (width, m_DragBar->h());
for (int n=m_Info.NumInputs; n<(int)m_PortVec.size(); n++)
m_PortVec[n]->position (x()+width-8, m_PortVec[n]->y());
position (x()+(oldw-w())/2, y()+(oldh-h())/2);
m_Menu->resize (x(), y(), width, height);
int Centx = x()+w()/2;
int Centy = y()+h()/2;
m_IconButton->position (Centx-m_Icon->w()/2, Centy-m_Icon->h()/2);
}

void Fl_DeviceGUI::Setup(const DeviceGUIInfo& Info, bool FirstTime)


+ 57
- 68
GUI/Widgets/Fl_DeviceGUI.h View File

@@ -16,6 +16,9 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#ifndef DEVICEGUI
#define DEVICEGUI

#include <FL/Fl.H>
#include <FL/Fl_Group.H>
#include <FL/Fl_Button.H>
@@ -29,9 +32,6 @@
#include <string>
#include <stdio.h>

#ifndef DEVICEGUI
#define DEVICEGUI

#define WIRE_COL0 91
#define WIRE_COL1 FL_GREEN
#define WIRE_COL2 FL_YELLOW
@@ -44,9 +44,8 @@ static const int TitleBarHeight = 12;
static const int PortGroupWidth = 12;
static const int PortSize=6;

class Fl_PortButton : public Fl_Button
{
public:
class Fl_PortButton : public Fl_Button {
public:
enum Type {INPUT,OUTPUT};

Fl_PortButton(int x, int y, int w, int h, char *n);
@@ -58,9 +57,7 @@ public:
void Remove() { if (m_ConnectionCount>0) m_ConnectionCount--; }
int GetCount() { return m_ConnectionCount; }
int GetLastButton() { return m_LastButton; }

private:

private:
Type m_Type;
int m_ConnectionCount;
int m_LastButton;
@@ -79,65 +76,57 @@ struct DeviceGUIInfo
vector<int> PortTypes;
};

class Fl_DeviceGUI : public Fl_Group
{
public:
Fl_DeviceGUI(const DeviceGUIInfo& Info, SpiralGUIType *PW, Fl_Pixmap *Icon, bool Terminal=false);

virtual int handle(int event);

enum PortType {INPUT,OUTPUT};

int GetID() { return m_ID; }
void SetID(int s) { m_ID=s; /*DisplayID(s);*/ }
bool Killed() { return m_DelMe; }
int GetPortX(int n) { return m_PortVec[n]->x()+PortSize/2; }
int GetPortY(int n) { return m_PortVec[n]->y()+PortSize/2; }

// aesthetic, to keep track of number of connections to know whether to
// draw the port as occupied or not.
bool AddConnection(int n);
void RemoveConnection(int n);

bool GetPortValue(int n) { return m_PortVec[n]->value(); }
const DeviceGUIInfo* GetInfo() { return &m_Info; }
SpiralGUIType* GetPluginWindow() { return m_PluginWindow; }
string GetName() { return m_Name; }
void SetName(const string &s) { m_Name=s; m_DragBar->label(m_Name.c_str()); }
bool IsMinimised() { return m_Minimised; }

void Minimise();
void Maximise();

// automatically called from the constructor, but may be redone at any time.
virtual void Setup(const DeviceGUIInfo& Info, bool FirstTime = false);
virtual void Clear();
int GetPortType(int n) { return m_Info.PortTypes[n]; }

// do we belong to a plugin that is an output?
bool IsTerminal() { return m_IsTerminal; }
protected:
DeviceGUIInfo m_Info;
Fl_DragBar* m_DragBar;
SpiralGUIType* m_PluginWindow;
Fl_Pixmap* m_Icon;
Fl_Button* m_IconButton;
Fl_Menu_Button* m_Menu;
private:
void Resize(int width, int height);
inline void cb_Resize_i (void);
static void cb_Resize (Fl_DeviceGUI *o);
inline void cb_Port_i(Fl_Button* o, void* v);
static void cb_Port(Fl_Button* o, void* v);
inline void cb_Rename_i(Fl_Menu_Button* o, void* v);
static void cb_Rename(Fl_Menu_Button* o, void* v);
inline void cb_Delete_i(Fl_Menu_Button* o, void* v);
static void cb_Delete(Fl_Menu_Button* o, void* v);
vector<Fl_PortButton*> m_PortVec;
static int Numbers[512];
string m_Name;
int m_ID, m_MiniWidth, m_MiniHeight;
bool m_DelMe, m_IsTerminal, m_Minimised, m_Maximising;
class Fl_DeviceGUI : public Fl_Group {
public:
Fl_DeviceGUI (const DeviceGUIInfo& Info, SpiralGUIType *PW, Fl_Pixmap *Icon, bool Terminal=false);
virtual int handle (int event);
enum PortType {INPUT,OUTPUT};
int GetID() { return m_ID; }
void SetID (int s) { m_ID=s; /*DisplayID(s);*/ }
bool Killed() { return m_DelMe; }
int GetPortX (int n) { return m_PortVec[n]->x()+PortSize/2; }
int GetPortY (int n) { return m_PortVec[n]->y()+PortSize/2; }
// aesthetic, to keep track of number of connections to know whether to
// draw the port as occupied or not.
bool AddConnection (int n);
void RemoveConnection (int n);
bool GetPortValue (int n) { return m_PortVec[n]->value(); }
const DeviceGUIInfo* GetInfo() { return &m_Info; }
SpiralGUIType* GetPluginWindow() { return m_PluginWindow; }
string GetName() { return m_Name; }
void SetName (const string &s) { m_Name=s; m_DragBar->label (m_Name.c_str()); }
bool IsMinimised() { return m_Minimised; }
void Minimise();
void Maximise();
// automatically called from the constructor, but may be redone at any time.
virtual void Setup (const DeviceGUIInfo& Info, bool FirstTime = false);
virtual void Clear();
int GetPortType (int n) { return m_Info.PortTypes[n]; }
// do we belong to a plugin that is an output?
bool IsTerminal() { return m_IsTerminal; }
protected:
DeviceGUIInfo m_Info;
Fl_DragBar* m_DragBar;
SpiralGUIType* m_PluginWindow;
Fl_Pixmap* m_Icon;
Fl_Button* m_IconButton;
Fl_Menu_Button* m_Menu;
private:
void ResizeToPluginWindow (void);
void Resize (int width, int height);
inline void cb_Resize_i (void);
static void cb_Resize (Fl_DeviceGUI *o);
inline void cb_Port_i (Fl_Button* o, void* v);
static void cb_Port (Fl_Button* o, void* v);
inline void cb_Rename_i (Fl_Menu_Button* o, void* v);
static void cb_Rename (Fl_Menu_Button* o, void* v);
inline void cb_Delete_i (Fl_Menu_Button* o, void* v);
static void cb_Delete (Fl_Menu_Button* o, void* v);
vector<Fl_PortButton*> m_PortVec;
static int Numbers[512];
string m_Name;
int m_ID, m_MiniWidth, m_MiniHeight;
bool m_DelMe, m_IsTerminal, m_Minimised;
};

#endif

+ 1
- 1
Makefile.in View File

@@ -13,7 +13,7 @@ CXXFLAGS= @CXXFLAGS@ @FLTK_CXXFLAGS@
INCPATH =
LINK = g++
LFLAGS =
LIBS = @FLTK_LIBS@ -lm -ldl -lpng -lpthread
LIBS = @FLTK_LIBS@ -lm -ldl -lpthread
MOC = moc
UIC =



+ 8
- 0
SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C View File

@@ -284,6 +284,8 @@ void LADSPAPluginGUI::Update(void)
m_BSlider->resize(x()+60, y()+15, 50, 20);
m_BSetup->resize(x() + w() - 55, y()+15, 50, 20);
}
// Andy Preston bodged this bit in - might be better somewhere else
DoResizeCallback ();
}

// This lot is only done on patch load
@@ -522,6 +524,8 @@ void LADSPAPluginGUI::SetPage(int index)
m_BKnob->resize(x()+5, y()+15, 50, 20);
m_BSlider->resize(x()+60, y()+15, 50, 20);
m_BSetup->resize(x() + w() - 55, y()+15, 50, 20);
// Andy Preston bodged this bit in - might be better somewhere else
DoResizeCallback ();
}

void LADSPAPluginGUI::SetUniqueID(unsigned long n)
@@ -813,6 +817,8 @@ void LADSPAPluginGUI::UpdateKnobs(void)
m_KnobLabels[p]->hide();
}
}
// Andy Preston bodged this bit in - might be better somewhere else
DoResizeCallback ();
}

// Rearrange sliders depending on connections
@@ -919,6 +925,8 @@ void LADSPAPluginGUI::UpdateSliders(void)
m_SliderLabels[p]->hide();
}
}
// Andy Preston bodged this bit in - might be better somewhere else
DoResizeCallback ();
}

// Set value of slider and/or knob (both use the same settings)


+ 1
- 1
SpiralSound/Plugins/SpiralPluginGUI.C View File

@@ -66,7 +66,7 @@ SpiralPluginGUI::~SpiralPluginGUI()
void SpiralPluginGUI::resize (int newx, int newy, int neww, int newh) {
m_Help->position (x()+neww-11, y()+2);
SpiralGUIType::resize (newx, newy, neww, newh);
DoResizeCallback ();
//DoResizeCallback ();
}

void SpiralPluginGUI::Update()


Loading…
Cancel
Save