Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Editor Refactoring #1426

Merged
merged 41 commits into from
Jan 11, 2015
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
44b52eb
Add Editor superclass
lukas-w Dec 7, 2014
c6ee614
Clean up ToolButton class
lukas-w Dec 7, 2014
02006f9
Use Editor superclass in AutomationEditor
lukas-w Dec 7, 2014
3e9cc61
SongEditor: Use Editor superclass
lukas-w Dec 7, 2014
86f2c86
Move play, record and stop signals to superclass
lukas-w Dec 7, 2014
d8db894
Editor: Don't delete on close
lukas-w Dec 8, 2014
ec9158c
PianoRoll: Use Editor superclass
lukas-w Dec 8, 2014
e9d841d
Migrate Timeline::addToolButtons to QToolBar
lukas-w Dec 8, 2014
4b27569
ToolBar css fixes
lukas-w Dec 8, 2014
d029c85
BBEditor: Use Editor superclass
lukas-w Dec 8, 2014
11898a5
Move Timeline.cpp to gui directory
lukas-w Dec 8, 2014
7a21d69
SongEditor: Some renames
lukas-w Dec 8, 2014
f131fbd
Editors: Add to workspace in MainWindow class, not in themselves
lukas-w Dec 8, 2014
32da8cb
Editor: Don't use ToolButton
lukas-w Dec 8, 2014
968e581
Editors: Don't use ToolButton
lukas-w Dec 8, 2014
b661e08
PianoRoll: Slot renames
lukas-w Dec 8, 2014
47cbc9e
AutomationEditor + PianoRoll: Move Copy/Paste shortcuts
lukas-w Dec 8, 2014
409e8f2
AutomationEditor style updates
lukas-w Dec 8, 2014
51f5929
Rename Timeline to TimeLineWidget
lukas-w Dec 8, 2014
b25765d
Move Editors to src/gui/editors subdirectory
lukas-w Dec 8, 2014
7c508f7
Merge master into ed_refac
lukas-w Dec 8, 2014
1d07a91
PianoRoll: Coding style updates
lukas-w Dec 11, 2014
ebbec2f
Editor: Add edit mode support
lukas-w Dec 11, 2014
9b6612c
PianoRoll rename fix
lukas-w Dec 11, 2014
02869b1
Editors: Some cleanups
lukas-w Dec 11, 2014
7877888
Introduce ActionGroup subclass
lukas-w Dec 11, 2014
11cb8b5
Automation Editor tension fix
lukas-w Dec 12, 2014
657fb06
More Automation refactoring
lukas-w Dec 17, 2014
eb79701
Merge branch 'master' into ed_refac
lukas-w Dec 17, 2014
1ee9340
Move Engine' GUI code to new GuiApplication class
lukas-w Dec 17, 2014
0df3998
Move some gui initialization to GuiApplication's constructor
lukas-w Jan 6, 2015
834be94
Merge commit 'f7741f184f83e6b9e2f081d39efffb2c499962f6' into ed_refac
lukas-w Jan 6, 2015
1706279
Merge commit '25ab7260f5cc57075360c976826e13434ade058c' into ed_refac
lukas-w Jan 6, 2015
0680669
Merge commit 'b5538c7da818cbcdde5ff1c885ce4eee5b626f3b' into ed_refac
lukas-w Jan 6, 2015
23e0e0f
Merge branch 'master' into ed_refac
lukas-w Jan 6, 2015
0c4833c
Adjust automation editor flip implementation
lukas-w Jan 6, 2015
748cccd
Merge branch 'gui_application' into ed_refac
lukas-w Jan 6, 2015
e0dbfa6
Remove Engine's has_gui option
lukas-w Jan 6, 2015
7f2f9f2
Merge branch 'master' into ed_refac
lukas-w Jan 8, 2015
23dbe95
Stop on second space key press
lukas-w Jan 11, 2015
56055b3
Merge branch 'master' into ed_refac
lukas-w Jan 11, 2015
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 14 additions & 6 deletions data/themes/default/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -378,9 +378,17 @@ QWidget#mainToolbar {

QToolBar {
background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #98a2a7, stop:1 #5b646f);
border: none;
padding: 1px;
spacing: 0;
}

QToolBar::separator {
border: none;
width: 5px;
}

QToolButton, ToolButton {
QToolButton {
padding: 1px 1px 1px 1px;
border-radius: 2px;
border: 1px solid rgba(0,0,0,32);
Expand All @@ -391,12 +399,12 @@ QToolButton, ToolButton {

/* separate corner rounding for play and stop buttons! */

ToolButton#playButton {
QToolButton#playButton {
border-top-left-radius: 5px 15px;
border-bottom-left-radius: 5px 15px;
}

ToolButton#stopButton {
QToolButton#stopButton {
border-top-right-radius: 5px 15px;
border-bottom-right-radius: 5px 15px;
}
Expand All @@ -405,20 +413,20 @@ ToolButton#stopButton {

/* all tool buttons */

QToolButton:hover, ToolButton:hover {
QToolButton:hover {
background: qradialgradient(cx:0.3, cy:0.3, radius:0.8, fx:0.3, fy:0.3, stop:0 #e0e0e0, stop:0.5 #c9c9c9, stop:1 #969696 );
border: 1px solid rgba(0,0,0,128);
color: white;
}

QToolButton:pressed, ToolButton:pressed {
QToolButton:pressed {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #969696, stop:0.5 #c9c9c9, stop:1 #969696 );
padding: 2px 1px 0px 1px;
border: 1px solid rgba(0,0,0,128);
color: white;
}

QToolButton:checked, ToolButton:checked {
QToolButton:checked {
background: qradialgradient(cx:0.3, cy:0.3, radius:0.8, fx:0.3, fy:0.3, stop:0 #e0e0e0, stop:0.8 #c9c9c9, stop:1 #c0c0c0 );
border-radius: 3px;
padding: 2px 1px 0px 1px;
Expand Down
131 changes: 75 additions & 56 deletions include/AutomationEditor.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,15 @@
#include <QtCore/QMutex>
#include <QWidget>

#include "Editor.h"

#include "lmms_basics.h"
#include "JournallingObject.h"
#include "MidiTime.h"
#include "AutomationPattern.h"
#include "ComboBoxModel.h"
#include "Knob.h"


class QPainter;
class QPixmap;
class QScrollBar;
Expand All @@ -47,6 +48,7 @@ class Timeline;
class ToolButton;



class AutomationEditor : public QWidget, public JournallingObject
{
Q_OBJECT
Expand All @@ -69,16 +71,13 @@ class AutomationEditor : public QWidget, public JournallingObject

int quantization() const;


virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
virtual void loadSettings( const QDomElement & _this );
inline virtual QString nodeName() const
QString nodeName() const
{
return( "automationeditor" );
return "automationeditor";
}

void setPauseIcon( bool pause );

// qproperty access methods
QColor gridColor() const;
QBrush graphColor() const;
Expand All @@ -89,6 +88,14 @@ class AutomationEditor : public QWidget, public JournallingObject
void setVertexColor( const QColor & c );
void setScaleColor( const QBrush & c );

enum editModes
{
DRAW,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think our convention is to use CapitalCase for enum members...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't invent that enum, I just moved it to public ;)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I know, just thought that since you're already refactoring things,
you wouldn't mind some extra work ;)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I'll do some style updates sooner or later ;) I think you renamed that particular enum in lmms2 already.

Btw, I suggest dropping the convention about parentheses being followed/preceded by a space character (like printf( "Hello World!" ); instead of printf("Hello World!");). It can get really hard to stick to, and it doesn't really add much to readability.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On 12/08/2014 09:55 PM, Lukas W wrote:

Sure, I'll do some style updates sooner or later ;) I think you
renamed that particular enum in |lmms2| already.

Did I? Can't remember if I've touched AutomationEditor in lmms2 yet...

Btw, I suggest dropping the convention about parentheses being
followed/preceded by a space character (like |printf( "Hello World!"
);| instead of |printf("Hello World!");|). It can get really hard to
stick to, and it doesn't really add much to readability.

Sorry but personally, I have to disagree with that. I actually think it
clears up the code a lot... it adds some separation between arguments
and it makes it a whole lot easier to read especially when there are a
lot of nested function calls. Or complex equations with lots of
parentheses. For example, compare this:

m_b1 = ( 4.0f * ( m_wc4 + sq_tmp1 - m_k4 - sq_tmp2 ) ) / m_a;
m_b2 = ( 6.0f * m_wc4 - 8.0f * wc2 * k2 + 6.0f * m_k4 ) / m_a;
m_b3 = ( 4.0f * ( m_wc4 - sq_tmp1 + sq_tmp2 - m_k4 ) ) / m_a;
m_b4 = ( m_k4 - 2.0f * sq_tmp1 + m_wc4 - 2.0f * sq_tmp2 + 4.0f * wc2 * k2 ) / m_a;

to this:

b1=(4*(wc4+sq_tmp1-k4-sq_tmp2))/a_tmp;
b2=(6*wc4-8*wc2*k2+6*k4)/a_tmp;
b3=(4*(wc4-sq_tmp1+sq_tmp2-k4))/a_tmp;
b4=(k4-2*sq_tmp1+wc4-2*sq_tmp2+4*wc2*k2)/a_tmp;

The first one looks a whole lot more readable to me...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I never suggested removing spaces between operators.

ERASE,
SELECT,
MOVE
};

public slots:
void update();
void updateAfterPatternChange();
Expand All @@ -97,7 +104,6 @@ public slots:
protected:
typedef AutomationPattern::timeMap timeMap;

virtual void closeEvent( QCloseEvent * _ce );
virtual void keyPressEvent( QKeyEvent * _ke );
virtual void leaveEvent( QEvent * _e );
virtual void mousePressEvent( QMouseEvent * _me );
Expand All @@ -117,7 +123,6 @@ public slots:
void getSelectedValues( timeMap & _selected_values );

void drawLine( int x0, float y0, int x1, float y1 );
void disableTensionKnob();

protected slots:
void play();
Expand All @@ -126,15 +131,14 @@ protected slots:
void horScrolled( int _new_pos );
void verScrolled( int _new_pos );

void drawButtonToggled();
void eraseButtonToggled();
void selectButtonToggled();
void moveButtonToggled();
void setEditMode(AutomationEditor::editModes mode);
void setEditMode(int mode);

void discreteButtonToggled();
void linearButtonToggled();
void cubicHermiteButtonToggled();
void tensionChanged();
void setProgressionType(AutomationPattern::ProgressionTypes type);
void setProgressionDiscrete();
void setProgressionLinear();
void setProgressionHermite();
void setTension();

void copySelectedValues();
void cutSelectedValues();
Expand All @@ -149,14 +153,6 @@ protected slots:

private:

enum editModes
{
DRAW,
ERASE,
SELECT,
MOVE
} ;

enum actions
{
NONE,
Expand All @@ -166,11 +162,8 @@ protected slots:
} ;

// some constants...
static const int INITIAL_WIDTH = 860;
static const int INITIAL_HEIGHT = 480;

static const int SCROLLBAR_SIZE = 16;
static const int TOP_MARGIN = 48;
static const int TOP_MARGIN = 16;

static const int DEFAULT_Y_DELTA = 6;
static const int DEFAULT_STEPS_PER_TACT = 16;
Expand All @@ -182,41 +175,17 @@ protected slots:
AutomationEditor( const AutomationEditor & );
virtual ~AutomationEditor();


static QPixmap * s_toolDraw;
static QPixmap * s_toolErase;
static QPixmap * s_toolSelect;
static QPixmap * s_toolMove;


QWidget * m_toolBar;

ToolButton * m_playButton;
ToolButton * m_stopButton;

ToolButton * m_drawButton;
ToolButton * m_eraseButton;
ToolButton * m_selectButton;
ToolButton * m_moveButton;

ToolButton * m_discreteButton;
ToolButton * m_linearButton;
ToolButton * m_cubicHermiteButton;
Knob * m_tensionKnob;
FloatModel * m_tensionModel;

ToolButton * m_cutButton;
ToolButton * m_copyButton;
ToolButton * m_pasteButton;

ComboBox * m_zoomingXComboBox;
ComboBox * m_zoomingYComboBox;
ComboBox * m_quantizeComboBox;

ComboBoxModel m_zoomingXModel;
ComboBoxModel m_zoomingYModel;
ComboBoxModel m_quantizeModel;

FloatModel * m_tensionModel;

QMutex m_patternMutex;
AutomationPattern * m_pattern;
float m_minLevel;
Expand Down Expand Up @@ -270,14 +239,64 @@ protected slots:
QColor m_vertexColor;
QBrush m_scaleColor;

friend class Engine;
//friend class Engine;
friend class AutomationEditorWindow;


signals:
void currentPatternChanged();
void positionChanged( const MidiTime & );

} ;



class AutomationEditorWindow : public Editor
{
Q_OBJECT

static const int INITIAL_WIDTH = 860;
static const int INITIAL_HEIGHT = 480;
public:
AutomationEditorWindow();
~AutomationEditorWindow();

void setCurrentPattern(AutomationPattern* pattern);
const AutomationPattern* currentPattern();

int quantization() const;

AutomationEditor* m_editor;

QSize sizeHint() const;

signals:
void currentPatternChanged();

protected slots:
void play();
void stop();

private:
QAbstractButton * m_drawButton;
QAbstractButton * m_eraseButton;
QAbstractButton * m_selectButton;
QAbstractButton * m_moveButton;

ToolButton * m_discreteButton;
ToolButton * m_linearButton;
ToolButton * m_cubicHermiteButton;
Knob * m_tensionKnob;

ToolButton * m_cutButton;
ToolButton * m_copyButton;
ToolButton * m_pasteButton;

ComboBox * m_zoomingXComboBox;
ComboBox * m_zoomingYComboBox;
ComboBox * m_quantizeComboBox;

friend class Engine;
};


#endif
61 changes: 39 additions & 22 deletions include/BBEditor.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,53 +26,70 @@
#ifndef BB_EDITOR_H
#define BB_EDITOR_H

#include "Editor.h"
#include "TrackContainerView.h"


class BBTrackContainer;
class ComboBox;
class ToolButton;

class BBTrackContainerView;

class BBEditor : public TrackContainerView
class BBEditor : public Editor
{
Q_OBJECT
public:
BBEditor( BBTrackContainer * _tc );
virtual ~BBEditor();
~BBEditor();

virtual inline bool fixedTCOs() const
{
return( true );
}

virtual void dropEvent( QDropEvent * _de );
QSize sizeHint() const;

void removeBBView( int _bb );

void setPauseIcon( bool pause );
const BBTrackContainerView* trackContainerView() const {
return m_trackContainerView;
}
BBTrackContainerView* trackContainerView() {
return m_trackContainerView;
}

void removeBBView( int bb );

public slots:
void play();
void stop();
void updatePosition();
void addAutomationTrack();
void addSteps();
void removeSteps();

private:
virtual void keyPressEvent( QKeyEvent * _ke );
BBTrackContainerView* m_trackContainerView;
ComboBox * m_bbComboBox;
} ;

BBTrackContainer * m_bbtc;
QWidget * m_toolBar;

ToolButton * m_playButton;
ToolButton * m_stopButton;

ComboBox * m_bbComboBox;
class BBTrackContainerView : public TrackContainerView
{
Q_OBJECT
public:
BBTrackContainerView(BBTrackContainer* tc);

} ;
bool fixedTCOs() const
{
return true;
}

void removeBBView(int bb);

public slots:
void addSteps();
void removeSteps();
void addAutomationTrack();

protected slots:
virtual void dropEvent(QDropEvent * de );
void updatePosition();

private:
BBTrackContainer * m_bbtc;
};


#endif
4 changes: 4 additions & 0 deletions include/ComboBox.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ class EXPORT ComboBox : public QWidget, public IntModelView

virtual QSize sizeHint() const;

public slots:
void selectNext();
void selectPrevious();


protected:
virtual void contextMenuEvent( QContextMenuEvent* event );
Expand Down
Loading