lot of bugfixes, UI-improvements and more
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@56 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
114
ChangeLog
114
ChangeLog
@@ -1,3 +1,117 @@
|
||||
2006-01-22 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
|
||||
* include/timeline.h:
|
||||
* src/core/song_editor.cpp:
|
||||
* src/core/timeline.cpp:
|
||||
updates are now completely done by timeline/QTimer without being
|
||||
called from song-editor out of non-GUI-thread which caused segfaults
|
||||
etc. sometimes
|
||||
|
||||
* include/name_label.h:
|
||||
* src/core/name_label.cpp:
|
||||
* src/tracks/bb_track.cpp:
|
||||
* src/tracks/sample_track.cpp:
|
||||
added support for user-defined track-icons
|
||||
|
||||
* artwork/track_icons/*png:
|
||||
added several icons to be used as track-icons
|
||||
|
||||
* include/track.h:
|
||||
* src/core/track.cpp:
|
||||
* src/core/track_container.cpp:
|
||||
do not hide track for completely repainting it, use special method for
|
||||
it
|
||||
|
||||
* include/pattern.h:
|
||||
* src/tracks/pattern.cpp:
|
||||
only repaint if neccessary, otherwise just paint the pixmap we painted
|
||||
before
|
||||
|
||||
* include/bb_editor.h:
|
||||
* src/core/bb_editor.cpp:
|
||||
added combobox for selecting bb-track inside bb-editor
|
||||
|
||||
* include/combobox.h:
|
||||
* src/widgets/combobox.cpp:
|
||||
- added clear()-method
|
||||
- do not crash when having no items
|
||||
- scale pixmap to fit into combobox
|
||||
- place menu below combobox if possible
|
||||
|
||||
2006-01-21 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
|
||||
* include/track.h:
|
||||
* src/core/track.cpp:
|
||||
* src/tracks/pattern.cpp:
|
||||
* src/tracks/sample_track.cpp:
|
||||
added support for used-defined track-height by pressing <Shift> and
|
||||
move mouse (with pressed button)
|
||||
|
||||
* include/song_editor.h:
|
||||
* include/track.h:
|
||||
* include/track_container.h:
|
||||
* src/core/song_editor.cpp:
|
||||
* src/core/track.cpp:
|
||||
* src/core/track_container.cpp:
|
||||
take advantage of new rubberband:
|
||||
- selecting track-content-objects of any type either via rubberband or
|
||||
by clicking while pressing <Ctrl>
|
||||
- move selected track-content-objects
|
||||
- delete selected track-content-objects
|
||||
|
||||
* include/rubberband.h:
|
||||
* src/widgets/rubberband.cpp:
|
||||
added rubberband which either acts as wrapper for Qt4's QRubberBand or
|
||||
as a widget imitating a rubberband
|
||||
|
||||
* include/track.h:
|
||||
* src/core/track.cpp:
|
||||
draw vertical lines for each bar
|
||||
|
||||
* include/bb_editor.h:
|
||||
* include/song_editor.h:
|
||||
* include/track_container.h:
|
||||
* src/core/bb_editor.cpp:
|
||||
* src/core/song_editor.cpp:
|
||||
* src/core/track.cpp:
|
||||
* src/core/track_container.cpp:
|
||||
fixed all that stuff with annoying scrollbars which partly hid important
|
||||
widgets
|
||||
|
||||
2006-01-20 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
|
||||
* src/tracks/pattern.cpp:
|
||||
also update after clearing all notes
|
||||
|
||||
* include/piano_roll.h:
|
||||
* include/song_editor.h:
|
||||
* src/core/piano_roll.cpp:
|
||||
* src/core/song_editor.cpp:
|
||||
use new combobox for zooming-comboboxes
|
||||
|
||||
* include/export_project_dialog.h:
|
||||
* src/core/export_project_dialog.cpp:
|
||||
- reject() dialog when pressing cancel
|
||||
- use new combobox
|
||||
|
||||
* include/arp_and_chords_tab_widget.h:
|
||||
* src/core/arp_and_chords_tab_widget.cpp:
|
||||
use new combobox with according arpeggio-mode-icons
|
||||
|
||||
* include/envelope_tab_widget.h:
|
||||
* src/core/envelope_tab_widget.cpp:
|
||||
* resources/filter_2lp.png:
|
||||
* resources/filter_ap.png:
|
||||
* resources/filter_bp.png:
|
||||
* resources/filter_hp.png:
|
||||
* resources/filter_lp.png:
|
||||
use new combobox with according filter-icons
|
||||
|
||||
* include/combobox.h:
|
||||
* src/widgets/combobox.cpp:
|
||||
added own cool-looking combobox with menu-extension which basically
|
||||
has the same API as QComboBox
|
||||
|
||||
2006-01-19 Andreas M. Brandmaier <andy/at/brandmaier.de>
|
||||
|
||||
* plugins/bit_invader/bit_invader.h:
|
||||
|
||||
@@ -47,6 +47,7 @@ lmms_MOC = \
|
||||
./bb_editor.moc \
|
||||
./bb_track.moc \
|
||||
./channel_track.moc \
|
||||
./combobox.moc \
|
||||
./config_mgr.moc \
|
||||
./cpuload_widget.moc \
|
||||
./envelope_and_lfo_widget.moc \
|
||||
@@ -72,6 +73,7 @@ lmms_MOC = \
|
||||
./pixmap_button.moc \
|
||||
./plugin_browser.moc \
|
||||
./project_notes.moc \
|
||||
./rubberband.moc \
|
||||
./qxembed.moc \
|
||||
./rename_dialog.moc \
|
||||
./sample_buffer.moc \
|
||||
@@ -160,6 +162,7 @@ lmms_SOURCES = \
|
||||
$(srcdir)/src/tracks/channel_track.cpp \
|
||||
$(srcdir)/src/tracks/pattern.cpp \
|
||||
$(srcdir)/src/tracks/sample_track.cpp \
|
||||
$(srcdir)/src/widgets/combobox.cpp \
|
||||
$(srcdir)/src/widgets/cpuload_widget.cpp \
|
||||
$(srcdir)/src/widgets/fade_button.cpp \
|
||||
$(srcdir)/src/widgets/group_box.cpp \
|
||||
@@ -170,6 +173,7 @@ lmms_SOURCES = \
|
||||
$(srcdir)/src/widgets/nstate_button.cpp \
|
||||
$(srcdir)/src/widgets/pixmap_button.cpp \
|
||||
$(srcdir)/src/widgets/project_notes.cpp \
|
||||
$(srcdir)/src/widgets/rubberband.cpp \
|
||||
$(srcdir)/src/widgets/qxembed.cpp \
|
||||
$(srcdir)/src/widgets/rename_dialog.cpp \
|
||||
$(srcdir)/src/widgets/side_bar_widget.cpp \
|
||||
@@ -283,6 +287,8 @@ lmms_SOURCES = \
|
||||
$(srcdir)/include/midi_alsa_seq.h \
|
||||
$(srcdir)/include/micro_timer.h \
|
||||
$(srcdir)/include/fade_button.h \
|
||||
$(srcdir)/include/combobox.h \
|
||||
$(srcdir)/include/rubberband.h \
|
||||
$(srcdir)/include/qxembed.h
|
||||
|
||||
|
||||
|
||||
9
TODO
9
TODO
@@ -1,7 +1,9 @@
|
||||
to be done as soon as possible:
|
||||
|
||||
- performance-settings
|
||||
- arp-sync-mode
|
||||
- disable auto-cleanup of bufferAllocator during memory-expensive operations (pattern-freezing etc.)
|
||||
- autosave every 30s (configurable!) and offer recovery at startup after crash
|
||||
- make piano-roll use rubberband instead of implementing a simple one on it's own
|
||||
- level-meters in output-graph and channel-track
|
||||
- do not skip samples because of rounding-errors when resampling in src/lib/sample_buffer.cpp
|
||||
- MIDI-program/MIDI-mapping/process program-/channel-change-events from MIDI-files
|
||||
- add note-len- and note-alignment-selectbox to piano-roll
|
||||
@@ -10,20 +12,17 @@ to be done as soon as possible:
|
||||
- use drawLineF() for drawing notes in pattern::paintEvent() in qt4-version
|
||||
- only redraw region given by paint-event in pattern, bbTCO, sampleTCO etc.
|
||||
- pre-listen when opening sample with QFileDialog
|
||||
- level-meters in output-graph and channel-track
|
||||
- panning-editing in piano-roll
|
||||
- speed up painting of sampleTCO
|
||||
- save window-positions, -states and -sizes in files
|
||||
- solve problems with different keyboard-layouts when playing channel-track with pc-keyboard -> use tr()
|
||||
- balance env+lfo
|
||||
- autosave every 1 minute
|
||||
- plucked-string-synth: knob for metallic -> use noise as wave-shape
|
||||
- finish qt4-port and make LMMS usable when compiling with Qt4
|
||||
- rewrite export-project-dialog using layout-mechanism
|
||||
- dynamic pitch-change
|
||||
- make piano-roll use the global clipboard??
|
||||
- add more localizations:
|
||||
- Italian
|
||||
- Swedish
|
||||
- Norwegian
|
||||
- Greece
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.50)
|
||||
AC_INIT(lmms, 0.1.2-cvs20060119, tobydox/at/users.sourceforge.net)
|
||||
AM_INIT_AUTOMAKE(lmms, 0.1.2-cvs20060119)
|
||||
AC_INIT(lmms, 0.1.2-cvs20060122, tobydox/at/users.sourceforge.net)
|
||||
AM_INIT_AUTOMAKE(lmms, 0.1.2-cvs20060122)
|
||||
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
@@ -405,6 +405,7 @@ fi
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
artwork/Makefile
|
||||
artwork/track_icons/Makefile
|
||||
buildtools/Makefile
|
||||
locale/Makefile
|
||||
midi-maps/Makefile
|
||||
|
||||
@@ -47,10 +47,10 @@
|
||||
#include "types.h"
|
||||
|
||||
|
||||
class QComboBox;
|
||||
class QPixmap;
|
||||
|
||||
class channelTrack;
|
||||
class comboBox;
|
||||
class groupBox;
|
||||
class knob;
|
||||
class ledCheckBox;
|
||||
@@ -124,12 +124,12 @@ private:
|
||||
|
||||
// chord-stuff
|
||||
groupBox * m_chordsGroupBox;
|
||||
QComboBox * m_chordsComboBox;
|
||||
comboBox * m_chordsComboBox;
|
||||
knob * m_chordRangeKnob;
|
||||
|
||||
// arpeggio-stuff
|
||||
groupBox * m_arpGroupBox;
|
||||
QComboBox * m_arpComboBox;
|
||||
comboBox * m_arpComboBox;
|
||||
knob * m_arpRangeKnob;
|
||||
tempoSyncKnob * m_arpTimeKnob;
|
||||
knob * m_arpGateKnob;
|
||||
@@ -140,7 +140,7 @@ private:
|
||||
pixmapButton * m_arpUpAndDownBtn;
|
||||
pixmapButton * m_arpRandomBtn;
|
||||
|
||||
QComboBox * m_arpModeComboBox;
|
||||
comboBox * m_arpModeComboBox;
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* bb_editor.h - declaration of class bbEditor, a basic-component of LMMS
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -33,10 +33,12 @@
|
||||
#include "lmms_main_win.h"
|
||||
|
||||
|
||||
class toolButton;
|
||||
class songEditor;
|
||||
class QPixmap;
|
||||
|
||||
class comboBox;
|
||||
class songEditor;
|
||||
class toolButton;
|
||||
|
||||
|
||||
class bbEditor : public trackContainer
|
||||
{
|
||||
@@ -71,7 +73,6 @@ public:
|
||||
}
|
||||
|
||||
csize currentBB( void ) const;
|
||||
void FASTCALL setCurrentBB( csize _bb );
|
||||
tact FASTCALL lengthOfBB( csize _bb );
|
||||
inline tact lengthOfCurrentBB( void )
|
||||
{
|
||||
@@ -85,11 +86,18 @@ public:
|
||||
void updateBBTrack( trackContentObject * _tco );
|
||||
|
||||
|
||||
public slots:
|
||||
void updateComboBox( void );
|
||||
void setCurrentBB( int _bb );
|
||||
|
||||
|
||||
protected:
|
||||
virtual void closeEvent( QCloseEvent * _ce );
|
||||
virtual void keyPressEvent( QKeyEvent * _ke );
|
||||
virtual void resizeEvent( QResizeEvent * _re );
|
||||
|
||||
virtual QRect scrollAreaRect( void ) const;
|
||||
|
||||
|
||||
protected slots:
|
||||
void play( void );
|
||||
@@ -111,6 +119,8 @@ private:
|
||||
toolButton * m_playButton;
|
||||
toolButton * m_stopButton;
|
||||
|
||||
comboBox * m_bbComboBox;
|
||||
|
||||
|
||||
friend class songEditor;
|
||||
friend lmmsMainWin::~lmmsMainWin();
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* bb_track.h - class bbTrack, a wrapper for using bbEditor
|
||||
* (which is a singleton-class) as track
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -135,12 +135,8 @@ protected:
|
||||
private:
|
||||
nameLabel * m_trackLabel;
|
||||
|
||||
struct bbInfoStruct
|
||||
{
|
||||
csize num;
|
||||
QString name;
|
||||
} ;
|
||||
static QMap<bbTrack *, bbInfoStruct> s_bbNums;
|
||||
typedef QMap<bbTrack *, csize> infoMap;
|
||||
static infoMap s_infoMap;
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
117
include/combobox.h
Normal file
117
include/combobox.h
Normal file
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
* combobox.h - class comboBox, a very cool combo-box
|
||||
*
|
||||
* Copyright (c) 2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this program (see COPYING); if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _COMBOBOX_H
|
||||
#define _COMBOBOX_H
|
||||
|
||||
#include "qt3support.h"
|
||||
|
||||
#ifdef QT4
|
||||
|
||||
#include <QWidget>
|
||||
#include <QVector>
|
||||
#include <QMenu>
|
||||
#include <QPixmap>
|
||||
#include <QPair>
|
||||
|
||||
#else
|
||||
|
||||
#include <qwidget.h>
|
||||
#include <qvaluevector.h>
|
||||
#include <qpopupmenu.h>
|
||||
#include <qpixmap.h>
|
||||
#include <qpair.h>
|
||||
|
||||
#endif
|
||||
|
||||
class QAction;
|
||||
|
||||
|
||||
class comboBox : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
comboBox( QWidget * _parent );
|
||||
virtual ~comboBox();
|
||||
|
||||
void addItem( const QString & _item, const QPixmap & _pixmap =
|
||||
QPixmap() );
|
||||
|
||||
inline void clear( void )
|
||||
{
|
||||
m_currentIndex = 0;
|
||||
m_items.clear();
|
||||
update();
|
||||
}
|
||||
|
||||
int findText( const QString & _txt ) const;
|
||||
|
||||
int currentIndex( void ) const
|
||||
{
|
||||
return( m_currentIndex );
|
||||
}
|
||||
|
||||
QString currentText( void ) const
|
||||
{
|
||||
return( m_items[m_currentIndex].first );
|
||||
}
|
||||
|
||||
|
||||
public slots:
|
||||
void setCurrentIndex( int _idx );
|
||||
|
||||
|
||||
protected:
|
||||
virtual void mousePressEvent( QMouseEvent * _me );
|
||||
virtual void paintEvent( QPaintEvent * _pe );
|
||||
virtual void wheelEvent( QWheelEvent * _we );
|
||||
|
||||
|
||||
private:
|
||||
static QPixmap * s_background;
|
||||
static QPixmap * s_arrow;
|
||||
|
||||
QMenu m_menu;
|
||||
|
||||
typedef QPair<QString, QPixmap> item;
|
||||
|
||||
vvector<item> m_items;
|
||||
int m_currentIndex;
|
||||
|
||||
bool m_pressed;
|
||||
|
||||
|
||||
private slots:
|
||||
void setItem( QAction * _item );
|
||||
void setItem( int _item );
|
||||
|
||||
|
||||
signals:
|
||||
void activated( const QString & );
|
||||
void currentIndexChanged( int );
|
||||
|
||||
} ;
|
||||
|
||||
#endif
|
||||
@@ -66,6 +66,7 @@ const QString PROJECTS_PATH = "projects/";
|
||||
const QString PRESETS_PATH = "presets/";
|
||||
const QString SAMPLES_PATH = "samples/";
|
||||
const QString ARTWORK_PATH = "artwork/";
|
||||
const QString TRACK_ICON_PATH = "artwork/track_icons/";
|
||||
const QString LOCALE_PATH = "locale/";
|
||||
|
||||
|
||||
@@ -107,6 +108,11 @@ public:
|
||||
return( m_dataDir + ARTWORK_PATH );
|
||||
}
|
||||
|
||||
QString trackIconsDir( void ) const
|
||||
{
|
||||
return( m_dataDir + TRACK_ICON_PATH );
|
||||
}
|
||||
|
||||
QString localeDir( void ) const
|
||||
{
|
||||
return( m_dataDir + LOCALE_PATH );
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* provides UI- and DSP-code for using envelopes, LFOs
|
||||
* and a filter
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -46,14 +46,15 @@
|
||||
#include "envelope_and_lfo_widget.h"
|
||||
|
||||
|
||||
class QComboBox;
|
||||
class groupBox;
|
||||
class tabWidget;
|
||||
class QLabel;
|
||||
class knob;
|
||||
class pixmapButton;
|
||||
|
||||
class channelTrack;
|
||||
class comboBox;
|
||||
class groupBox;
|
||||
class knob;
|
||||
class notePlayHandle;
|
||||
class pixmapButton;
|
||||
class tabWidget;
|
||||
|
||||
|
||||
class envelopeTabWidget : public QWidget, public settings
|
||||
@@ -97,7 +98,7 @@ private:
|
||||
|
||||
// filter-stuff
|
||||
groupBox * m_filterGroupBox;
|
||||
QComboBox * m_filterComboBox;
|
||||
comboBox * m_filterComboBox;
|
||||
knob * m_filterCutKnob;
|
||||
knob * m_filterResKnob;
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* export_project_dialog.h - declaration of class exportProjectDialog which is
|
||||
* responsible for exporting project
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -31,7 +31,6 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include "qt3support.h"
|
||||
|
||||
#ifdef QT4
|
||||
@@ -44,15 +43,15 @@
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#include "export.h"
|
||||
|
||||
|
||||
class QLabel;
|
||||
class QPushButton;
|
||||
class QComboBox;
|
||||
class QProgressBar;
|
||||
class QCheckBox;
|
||||
|
||||
class comboBox;
|
||||
class ledCheckBox;
|
||||
class pixmapButton;
|
||||
|
||||
|
||||
@@ -88,11 +87,11 @@ private:
|
||||
|
||||
QString m_fileName;
|
||||
QLabel * m_typeLbl;
|
||||
QComboBox * m_typeCombo;
|
||||
comboBox * m_typeCombo;
|
||||
QLabel * m_kbpsLbl;
|
||||
QComboBox * m_kbpsCombo;
|
||||
QCheckBox * m_vbrCb;
|
||||
QCheckBox * m_hqmCb;
|
||||
comboBox * m_kbpsCombo;
|
||||
ledCheckBox * m_vbrCb;
|
||||
ledCheckBox * m_hqmCb;
|
||||
QLabel * m_hourglassLbl;
|
||||
QPushButton * m_exportBtn;
|
||||
QPushButton * m_cancelBtn;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* lcd_spinbox.h - class lcdSpinBox, an improved QLCDNumber
|
||||
*
|
||||
* Copyright (c) 2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2005-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -58,7 +58,6 @@ public:
|
||||
return( m_number->intValue() );
|
||||
}
|
||||
|
||||
void setValue( int _value );
|
||||
void setLabel( const QString & _txt );
|
||||
|
||||
inline void addTextForValue( int _val, const QString & _text )
|
||||
@@ -68,6 +67,7 @@ public:
|
||||
|
||||
|
||||
public slots:
|
||||
void setValue( int _value );
|
||||
virtual void setEnabled( bool _on );
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* name_label.h - class nameLabel, a label which is renamable by
|
||||
* double-clicking it
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -46,20 +46,32 @@ class nameLabel : public QLabel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
nameLabel( const QString & _initial_name, QWidget * _parent,
|
||||
const QPixmap & _pm = QPixmap() );
|
||||
nameLabel( const QString & _initial_name, QWidget * _parent );
|
||||
~nameLabel();
|
||||
const QPixmap * pixmap( void ) const;
|
||||
|
||||
const QPixmap & pixmap( void ) const
|
||||
{
|
||||
return( m_pixmap );
|
||||
}
|
||||
|
||||
const QString & pixmapFile( void ) const
|
||||
{
|
||||
return( m_pixmapFile );
|
||||
}
|
||||
|
||||
|
||||
public slots:
|
||||
void setPixmap( const QPixmap & _pm );
|
||||
void setPixmap( const QPixmap & _pixmap );
|
||||
void setPixmapFile( const QString & _file );
|
||||
void rename( void );
|
||||
void selectPixmap( void );
|
||||
|
||||
|
||||
signals:
|
||||
void nameChanged( const QString & _new_name );
|
||||
void clicked( void );
|
||||
void nameChanged( void );
|
||||
void nameChanged( const QString & _new_name );
|
||||
void pixmapChanged( void );
|
||||
|
||||
|
||||
protected:
|
||||
@@ -69,7 +81,8 @@ protected:
|
||||
|
||||
|
||||
private:
|
||||
QPixmap m_pm;
|
||||
QPixmap m_pixmap;
|
||||
QString m_pixmapFile;
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <QMutex>
|
||||
#include <QDialog>
|
||||
#include <QThread>
|
||||
#include <QPixmap>
|
||||
|
||||
#else
|
||||
|
||||
@@ -44,6 +45,7 @@
|
||||
#include <qmutex.h>
|
||||
#include <qdialog.h>
|
||||
#include <qthread.h>
|
||||
#include <qpixmap.h>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -54,7 +56,6 @@
|
||||
|
||||
|
||||
class QAction;
|
||||
class QPixmap;
|
||||
class QProgressBar;
|
||||
class QPushButton;
|
||||
|
||||
@@ -84,9 +85,6 @@ public:
|
||||
void init( void );
|
||||
|
||||
|
||||
virtual void FASTCALL movePosition( const midiTime & _pos );
|
||||
|
||||
|
||||
virtual midiTime length( void ) const;
|
||||
|
||||
note * FASTCALL addNote( const note & _new_note );
|
||||
@@ -159,6 +157,10 @@ public:
|
||||
}
|
||||
|
||||
|
||||
public slots:
|
||||
virtual void update( void );
|
||||
|
||||
|
||||
protected slots:
|
||||
void openInPianoRoll( bool _c );
|
||||
void openInPianoRoll( void );
|
||||
@@ -180,21 +182,27 @@ protected:
|
||||
virtual void constructContextMenu( QMenu * );
|
||||
virtual void mouseDoubleClickEvent( QMouseEvent * _me );
|
||||
virtual void mousePressEvent( QMouseEvent * _me );
|
||||
virtual void wheelEvent( QWheelEvent * _we );
|
||||
virtual void paintEvent( QPaintEvent * _pe );
|
||||
virtual void resizeEvent( QResizeEvent * _re )
|
||||
{
|
||||
m_needsUpdate = TRUE;
|
||||
trackContentObject::resizeEvent( _re );
|
||||
}
|
||||
virtual void wheelEvent( QWheelEvent * _we );
|
||||
|
||||
void ensureBeatNotes( void );
|
||||
void updateBBTrack( void );
|
||||
|
||||
|
||||
private:
|
||||
static QPixmap * s_patternBg;
|
||||
static QPixmap * s_stepBtnOn;
|
||||
static QPixmap * s_stepBtnOverlay;
|
||||
static QPixmap * s_stepBtnOff;
|
||||
static QPixmap * s_stepBtnOffLight;
|
||||
static QPixmap * s_frozen;
|
||||
|
||||
QPixmap m_paintPixmap;
|
||||
bool m_needsUpdate;
|
||||
|
||||
// general stuff
|
||||
channelTrack * m_channelTrack;
|
||||
|
||||
@@ -47,17 +47,16 @@
|
||||
#include "note.h"
|
||||
|
||||
|
||||
class QComboBox;
|
||||
class QPainter;
|
||||
class QPixmap;
|
||||
class QScrollBar;
|
||||
|
||||
class toolButton;
|
||||
class pattern;
|
||||
class notePlayHandle;
|
||||
class timeLine;
|
||||
class comboBox;
|
||||
class lmmsMainWin;
|
||||
|
||||
class notePlayHandle;
|
||||
class pattern;
|
||||
class timeLine;
|
||||
class toolButton;
|
||||
|
||||
|
||||
class pianoRoll : public QWidget
|
||||
@@ -205,7 +204,7 @@ private:
|
||||
toolButton * m_copyButton;
|
||||
toolButton * m_pasteButton;
|
||||
|
||||
QComboBox * m_zoomingComboBox;
|
||||
comboBox * m_zoomingComboBox;
|
||||
|
||||
QPixmap m_paintPixmap;
|
||||
bool m_cursorInside;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* pixmap_button.h - declaration of class pixmapButton
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -56,11 +56,17 @@ public:
|
||||
void FASTCALL setInactiveGraphic( const QPixmap & _pm,
|
||||
bool _update = TRUE );
|
||||
void FASTCALL setBgGraphic( const QPixmap & _pm );
|
||||
#ifndef QT4
|
||||
|
||||
#ifdef QT3
|
||||
inline void setChecked( bool _on )
|
||||
{
|
||||
setOn( _on );
|
||||
}
|
||||
|
||||
inline bool isChecked( void ) const
|
||||
{
|
||||
return( isOn() );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ inline QString baseName( const QString & _file )
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
#else /* QT3 */
|
||||
|
||||
|
||||
#define vvector QValueVector
|
||||
@@ -117,6 +117,7 @@ inline QString baseName( const QString & _file )
|
||||
|
||||
// QScrollView/QScrollArea
|
||||
#define setHorizontalScrollBarPolicy setHScrollBarMode
|
||||
#define setVerticalScrollBarPolicy setVScrollBarMode
|
||||
|
||||
|
||||
// QScrollBar
|
||||
@@ -189,6 +190,10 @@ inline QString baseName( const QString & _file )
|
||||
#define setColumnMinimumWidth setColSpacing
|
||||
|
||||
|
||||
// QRect
|
||||
#define normalized normalize
|
||||
|
||||
|
||||
// Qt-namespace
|
||||
#define ShiftModifier ShiftButton
|
||||
#define ControlModifier ControlButton
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
#ifndef QT4
|
||||
|
||||
#include <qwidget.h>
|
||||
/*#include <kdelibs_export.h>*/
|
||||
|
||||
|
||||
#ifdef Q_WS_X11
|
||||
|
||||
121
include/rubberband.h
Normal file
121
include/rubberband.h
Normal file
@@ -0,0 +1,121 @@
|
||||
/*
|
||||
* rubberband.h - rubberband - either own implementation for Qt3 or wrapper for
|
||||
* Qt4
|
||||
*
|
||||
* Copyright (c) 2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this program (see COPYING); if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _RUBBERBAND_H
|
||||
#define _RUBBERBAND_H
|
||||
|
||||
#include "qt3support.h"
|
||||
|
||||
#ifndef QT3
|
||||
|
||||
#include <QRubberBand>
|
||||
#include <QVector>
|
||||
|
||||
#else
|
||||
|
||||
#include <qwidget.h>
|
||||
#include <qvaluevector.h>
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
class selectableObject : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
selectableObject( QWidget * _parent
|
||||
#ifdef QT3
|
||||
, WFlags _f
|
||||
#endif
|
||||
) :
|
||||
QWidget( _parent, NULL, _f ),
|
||||
m_selected( FALSE )
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~selectableObject()
|
||||
{
|
||||
}
|
||||
|
||||
inline void setSelected( bool _selected )
|
||||
{
|
||||
m_selected = _selected;
|
||||
update();
|
||||
}
|
||||
|
||||
inline bool isSelected( void ) const
|
||||
{
|
||||
return( m_selected );
|
||||
}
|
||||
|
||||
|
||||
public slots:
|
||||
virtual void update( void )
|
||||
{
|
||||
QWidget::update();
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
bool m_selected;
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
typedef
|
||||
#ifndef QT3
|
||||
QRubberBand
|
||||
#else
|
||||
QWidget
|
||||
#endif
|
||||
rubberBandBase;
|
||||
|
||||
|
||||
class rubberBand : public rubberBandBase
|
||||
{
|
||||
public:
|
||||
rubberBand( QWidget * _parent );
|
||||
virtual ~rubberBand();
|
||||
|
||||
vvector<selectableObject *> selectedObjects( void ) const;
|
||||
|
||||
|
||||
protected:
|
||||
virtual void resizeEvent( QResizeEvent * _re );
|
||||
#ifdef QT3
|
||||
virtual bool event( QEvent * _e );
|
||||
void updateMask( void );
|
||||
#endif
|
||||
|
||||
private:
|
||||
vvector<selectableObject *> selectableObjects( void ) const;
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* song_editor.h - declaration of class songEditor, a window where you can
|
||||
* setup your songs
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -29,20 +29,20 @@
|
||||
|
||||
#include "track_container.h"
|
||||
#include "types.h"
|
||||
#include "tool_button.h"
|
||||
|
||||
|
||||
class QComboBox;
|
||||
class QLabel;
|
||||
class QScrollBar;
|
||||
class QSlider;
|
||||
|
||||
class comboBox;
|
||||
class lcdSpinBox;
|
||||
class lmmsMainWin;
|
||||
class pattern;
|
||||
class projectNotes;
|
||||
class textFloat;
|
||||
class timeLine;
|
||||
class toolButton;
|
||||
|
||||
|
||||
const int MIN_BPM = 10;
|
||||
@@ -51,7 +51,6 @@ const int MAX_BPM = 999;
|
||||
const Uint16 MAX_SONG_LENGTH = 9999;
|
||||
|
||||
|
||||
|
||||
class songEditor : public trackContainer
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -204,11 +203,18 @@ public slots:
|
||||
|
||||
|
||||
protected:
|
||||
void closeEvent( QCloseEvent * _ce );
|
||||
void resizeEvent( QResizeEvent * _re );
|
||||
void keyPressEvent( QKeyEvent * _ke );
|
||||
void wheelEvent( QWheelEvent * _we );
|
||||
void paintEvent( QPaintEvent * _pe );
|
||||
virtual void closeEvent( QCloseEvent * _ce );
|
||||
virtual void resizeEvent( QResizeEvent * _re );
|
||||
virtual void keyPressEvent( QKeyEvent * _ke );
|
||||
virtual void wheelEvent( QWheelEvent * _we );
|
||||
virtual void paintEvent( QPaintEvent * _pe );
|
||||
|
||||
virtual QRect scrollAreaRect( void ) const;
|
||||
|
||||
virtual bool allowRubberband( void ) const
|
||||
{
|
||||
return( m_editModeButton->isChecked() );
|
||||
}
|
||||
|
||||
|
||||
protected slots:
|
||||
@@ -232,6 +238,8 @@ protected slots:
|
||||
|
||||
void zoomingChanged( const QString & _zfac );
|
||||
|
||||
void doActions( void );
|
||||
|
||||
|
||||
private:
|
||||
songEditor();
|
||||
@@ -273,10 +281,11 @@ private:
|
||||
|
||||
toolButton * m_addBBTrackButton;
|
||||
toolButton * m_addSampleTrackButton;
|
||||
toolButton * m_insertBarButton;
|
||||
toolButton * m_removeBarButton;
|
||||
|
||||
QComboBox * m_zoomingComboBox;
|
||||
toolButton * m_drawModeButton;
|
||||
toolButton * m_editModeButton;
|
||||
|
||||
comboBox * m_zoomingComboBox;
|
||||
|
||||
|
||||
QString m_fileName;
|
||||
@@ -310,8 +319,6 @@ private:
|
||||
} ;
|
||||
vvector<ACTIONS> m_actions;
|
||||
|
||||
void doActions( void );
|
||||
|
||||
|
||||
friend class lmmsMainWin;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* tab_button.h - declaration of class tabButton
|
||||
*
|
||||
* Copyright (c) 2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2005-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -52,10 +52,22 @@ public:
|
||||
connect( this, SIGNAL( clicked() ), this,
|
||||
SLOT( slotClicked() ) );
|
||||
}
|
||||
virtual ~tabButton()
|
||||
|
||||
~tabButton()
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef QT3
|
||||
inline void setChecked( bool _on )
|
||||
{
|
||||
setOn( _on );
|
||||
}
|
||||
|
||||
inline bool isChecked( void ) const
|
||||
{
|
||||
return( isOn() );
|
||||
}
|
||||
#endif
|
||||
|
||||
signals:
|
||||
void clicked( int );
|
||||
|
||||
@@ -69,7 +69,7 @@ public:
|
||||
|
||||
timeLine( int _xoff, int _yoff, float _ppt, songEditor::playPos & _pos,
|
||||
const midiTime & _begin, QWidget * _parent );
|
||||
~timeLine();
|
||||
virtual ~timeLine();
|
||||
|
||||
inline songEditor::playPos & pos( void )
|
||||
{
|
||||
@@ -117,11 +117,14 @@ public:
|
||||
|
||||
|
||||
public slots:
|
||||
void updatePosition( const midiTime & = 0 );
|
||||
void updatePosition( const midiTime & );
|
||||
void updatePosition( void )
|
||||
{
|
||||
updatePosition( midiTime() );
|
||||
}
|
||||
void toggleAutoScroll( int _n );
|
||||
void toggleLoopPoints( int _n );
|
||||
void toggleBehaviourAtStop( int _n );
|
||||
void checkForUpdatedPosition( void );
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* tool_button.h - declaration of class toolButton
|
||||
*
|
||||
* Copyright (c) 2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2005-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -70,11 +70,21 @@ public:
|
||||
m_colorHighlighted = _color;
|
||||
}
|
||||
|
||||
#ifndef QT4
|
||||
#ifdef QT3
|
||||
inline void setIcon( const QPixmap & _icon )
|
||||
{
|
||||
setIconSet( _icon );
|
||||
}
|
||||
|
||||
inline void setChecked( bool _on )
|
||||
{
|
||||
setOn( _on );
|
||||
}
|
||||
|
||||
inline bool isChecked( void ) const
|
||||
{
|
||||
return( isOn() );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
#include "types.h"
|
||||
#include "midi_time.h"
|
||||
#include "settings.h"
|
||||
#include "rubberband.h"
|
||||
|
||||
|
||||
class QMenu;
|
||||
@@ -76,7 +77,7 @@ const Uint16 TRACK_OP_WIDTH = 70;
|
||||
const Uint16 TCO_BORDER_WIDTH = 1;
|
||||
|
||||
|
||||
class trackContentObject : public QWidget, public settings
|
||||
class trackContentObject : public selectableObject, public settings
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
@@ -99,7 +100,9 @@ public:
|
||||
{
|
||||
return( m_length );
|
||||
}
|
||||
|
||||
bool fixedTCOs( void );
|
||||
|
||||
virtual void FASTCALL movePosition( const midiTime & _pos );
|
||||
virtual void FASTCALL changeLength( const midiTime & _length );
|
||||
|
||||
@@ -132,13 +135,17 @@ protected slots:
|
||||
|
||||
|
||||
private:
|
||||
enum actions
|
||||
{
|
||||
NONE, MOVE, MOVE_SELECTION, RESIZE
|
||||
} ;
|
||||
|
||||
static textFloat * s_textFloat;
|
||||
|
||||
track * m_track;
|
||||
midiTime m_startPosition;
|
||||
midiTime m_length;
|
||||
bool m_moving;
|
||||
bool m_resizing;
|
||||
actions m_action;
|
||||
bool m_autoResize;
|
||||
Sint16 m_initialMouseX;
|
||||
|
||||
@@ -167,10 +174,12 @@ public:
|
||||
{
|
||||
return( m_pixelsPerTact );
|
||||
}
|
||||
|
||||
inline void setPixelsPerTact( Uint16 _ppt )
|
||||
{
|
||||
m_pixelsPerTact = _ppt;
|
||||
}
|
||||
|
||||
tact length( void ) const;
|
||||
|
||||
|
||||
@@ -184,8 +193,7 @@ protected:
|
||||
virtual void dragEnterEvent( QDragEnterEvent * _dee );
|
||||
virtual void dropEvent( QDropEvent * _de );
|
||||
virtual void mousePressEvent( QMouseEvent * _me );
|
||||
virtual void mouseMoveEvent( QMouseEvent * _me );
|
||||
virtual void mouseReleaseEvent( QMouseEvent * _me );
|
||||
virtual void paintEvent( QPaintEvent * _pe );
|
||||
virtual void resizeEvent( QResizeEvent * _re );
|
||||
|
||||
|
||||
@@ -296,9 +304,11 @@ public:
|
||||
|
||||
bool isMovingTrack( void ) const
|
||||
{
|
||||
return( m_movingTrack );
|
||||
return( m_action == MOVE_TRACK );
|
||||
}
|
||||
|
||||
virtual void repaint( void );
|
||||
|
||||
|
||||
public slots:
|
||||
void changePosition( const midiTime & _new_pos = -1 );
|
||||
@@ -317,14 +327,17 @@ protected:
|
||||
|
||||
|
||||
private:
|
||||
enum actions
|
||||
{
|
||||
NONE, MOVE_TRACK, RESIZE_TRACK
|
||||
} ;
|
||||
track * m_track;
|
||||
|
||||
trackOperationsWidget m_trackOperationsWidget;
|
||||
trackSettingsWidget m_trackSettingsWidget;
|
||||
trackContentWidget m_trackContentWidget;
|
||||
|
||||
bool m_movingTrack;
|
||||
Sint16 m_initialMouseX;
|
||||
actions m_action;
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* track_container.h - base-class for all track-containers like Song-Editor,
|
||||
* BB-Editor...
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -46,10 +46,13 @@
|
||||
|
||||
#include "track.h"
|
||||
#include "settings.h"
|
||||
#include "rubberband.h"
|
||||
|
||||
|
||||
const Uint16 DEFAULT_PIXELS_PER_TACT = 16;
|
||||
|
||||
const Uint16 DEFAULT_SCROLLBAR_SIZE = 16;
|
||||
|
||||
|
||||
class trackContainer : public QMainWindow, public settings
|
||||
{
|
||||
@@ -102,14 +105,38 @@ public:
|
||||
const trackWidget * trackWidgetAt( const int _y ) const;
|
||||
|
||||
|
||||
virtual bool allowRubberband( void ) const;
|
||||
|
||||
inline bool rubberBandActive( void ) const
|
||||
{
|
||||
return( m_rubberBand->isVisible() );
|
||||
}
|
||||
|
||||
inline vvector<selectableObject *> selectedObjects( void )
|
||||
{
|
||||
if( allowRubberband() == TRUE )
|
||||
{
|
||||
return( m_rubberBand->selectedObjects() );
|
||||
}
|
||||
return( vvector<selectableObject *>() );
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
virtual void dragEnterEvent( QDragEnterEvent * _dee );
|
||||
virtual void dropEvent( QDropEvent * _de );
|
||||
virtual void mousePressEvent( QMouseEvent * _me );
|
||||
virtual void mouseMoveEvent( QMouseEvent * _me );
|
||||
virtual void mouseReleaseEvent( QMouseEvent * _me );
|
||||
virtual void resizeEvent( QResizeEvent * );
|
||||
|
||||
constTrackVector tracks( void ) const;
|
||||
trackVector tracks( void );
|
||||
|
||||
virtual QRect scrollAreaRect( void ) const
|
||||
{
|
||||
return( rect() );
|
||||
}
|
||||
|
||||
midiTime m_currentPosition;
|
||||
|
||||
@@ -141,6 +168,9 @@ private:
|
||||
trackWidgetVector m_trackWidgets;
|
||||
float m_ppt;
|
||||
|
||||
rubberBand * m_rubberBand;
|
||||
QPoint m_origin;
|
||||
|
||||
|
||||
friend class scrollArea;
|
||||
|
||||
|
||||
BIN
resources/arp_free.png
Normal file
BIN
resources/arp_free.png
Normal file
Binary file not shown.
BIN
resources/arp_sort.png
Normal file
BIN
resources/arp_sort.png
Normal file
Binary file not shown.
BIN
resources/arp_sync.png
Normal file
BIN
resources/arp_sync.png
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
resources/combobox_arrow.png
Normal file
BIN
resources/combobox_arrow.png
Normal file
Binary file not shown.
BIN
resources/combobox_bg.png
Normal file
BIN
resources/combobox_bg.png
Normal file
Binary file not shown.
Binary file not shown.
BIN
resources/edit_arrow.png
Normal file
BIN
resources/edit_arrow.png
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
resources/edit_draw.png
Normal file
BIN
resources/edit_draw.png
Normal file
Binary file not shown.
Binary file not shown.
BIN
resources/edit_move.png
Normal file
BIN
resources/edit_move.png
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
resources/edit_select.png
Normal file
BIN
resources/edit_select.png
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
resources/filter_2lp.png
Normal file
BIN
resources/filter_2lp.png
Normal file
Binary file not shown.
BIN
resources/filter_ap.png
Normal file
BIN
resources/filter_ap.png
Normal file
Binary file not shown.
BIN
resources/filter_bp.png
Normal file
BIN
resources/filter_bp.png
Normal file
Binary file not shown.
BIN
resources/filter_hp.png
Normal file
BIN
resources/filter_hp.png
Normal file
Binary file not shown.
BIN
resources/filter_lp.png
Normal file
BIN
resources/filter_lp.png
Normal file
Binary file not shown.
BIN
resources/filter_notch.png
Normal file
BIN
resources/filter_notch.png
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -31,19 +31,14 @@
|
||||
#include <Qt/QtXml>
|
||||
#include <QButtonGroup>
|
||||
#include <QLabel>
|
||||
#include <QComboBox>
|
||||
|
||||
#else
|
||||
|
||||
#include <qbuttongroup.h>
|
||||
#include <qdom.h>
|
||||
#include <qlabel.h>
|
||||
#include <qcombobox.h>
|
||||
#include <qwhatsthis.h>
|
||||
|
||||
#define setCurrentIndex setCurrentItem
|
||||
#define currentIndex currentItem
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -65,6 +60,7 @@
|
||||
#include "channel_track.h"
|
||||
#include "led_checkbox.h"
|
||||
#include "preset_preview_play_handle.h"
|
||||
#include "combobox.h"
|
||||
|
||||
|
||||
|
||||
@@ -197,7 +193,7 @@ const int CHORDS_GROUPBOX_HEIGHT = 65;
|
||||
const int ARP_GROUPBOX_X = CHORDS_GROUPBOX_X;
|
||||
const int ARP_GROUPBOX_Y = 10 + CHORDS_GROUPBOX_Y + CHORDS_GROUPBOX_HEIGHT;
|
||||
const int ARP_GROUPBOX_WIDTH = CHORDS_GROUPBOX_WIDTH;
|
||||
const int ARP_GROUPBOX_HEIGHT = 200 - ARP_GROUPBOX_Y;
|
||||
const int ARP_GROUPBOX_HEIGHT = 240 - ARP_GROUPBOX_Y;
|
||||
|
||||
|
||||
|
||||
@@ -211,7 +207,7 @@ arpAndChordsTabWidget::arpAndChordsTabWidget( channelTrack * _channel_track ) :
|
||||
CHORDS_GROUPBOX_WIDTH,
|
||||
CHORDS_GROUPBOX_HEIGHT );
|
||||
|
||||
m_chordsComboBox = new QComboBox( m_chordsGroupBox );
|
||||
m_chordsComboBox = new comboBox( m_chordsGroupBox );
|
||||
m_chordsComboBox->setFont( pointSize<8>( m_chordsComboBox->font() ) );
|
||||
m_chordsComboBox->setGeometry( 10, 25, 140, 22 );
|
||||
|
||||
@@ -262,7 +258,7 @@ arpAndChordsTabWidget::arpAndChordsTabWidget( channelTrack * _channel_track ) :
|
||||
"not played at the same time. Typical arpeggios are "
|
||||
"major or minor triads. But there're a lot of other "
|
||||
"possible chords, you can select." ) );
|
||||
m_arpComboBox = new QComboBox( m_arpGroupBox );
|
||||
m_arpComboBox = new comboBox( m_arpGroupBox );
|
||||
m_arpComboBox->setFont( pointSize<8>( m_arpComboBox->font() ) );
|
||||
m_arpComboBox->setGeometry( 10, 25, 140, 22 );
|
||||
|
||||
@@ -334,15 +330,11 @@ arpAndChordsTabWidget::arpAndChordsTabWidget( channelTrack * _channel_track ) :
|
||||
|
||||
|
||||
m_arpUpBtn = new pixmapButton( m_arpGroupBox );
|
||||
m_arpUpBtn->move( 70, 60 );
|
||||
m_arpUpBtn->move( 10, 74 );
|
||||
m_arpUpBtn->setActiveGraphic( embed::getIconPixmap( "arp_up_on" ) );
|
||||
m_arpUpBtn->setInactiveGraphic( embed::getIconPixmap( "arp_up_off" ) );
|
||||
#ifdef QT4
|
||||
m_arpUpBtn->setChecked( TRUE );
|
||||
#else
|
||||
m_arpUpBtn->setOn( TRUE );
|
||||
#endif
|
||||
#ifndef QT4
|
||||
#ifdef QT3
|
||||
m_arpUpBtn->setBackgroundMode( Qt::PaletteBackground );
|
||||
#endif
|
||||
toolTip::add( m_arpUpBtn, tr( "arpeggio direction = up" ) );
|
||||
@@ -350,11 +342,11 @@ arpAndChordsTabWidget::arpAndChordsTabWidget( channelTrack * _channel_track ) :
|
||||
SLOT( arpUpToggled( bool ) ) );
|
||||
|
||||
m_arpDownBtn = new pixmapButton( m_arpGroupBox );
|
||||
m_arpDownBtn->move( 90, 60 );
|
||||
m_arpDownBtn->move( 30, 74 );
|
||||
m_arpDownBtn->setActiveGraphic( embed::getIconPixmap( "arp_down_on" ) );
|
||||
m_arpDownBtn->setInactiveGraphic( embed::getIconPixmap(
|
||||
"arp_down_off" ) );
|
||||
#ifndef QT4
|
||||
#ifdef QT3
|
||||
m_arpDownBtn->setBackgroundMode( Qt::PaletteBackground );
|
||||
#endif
|
||||
toolTip::add( m_arpDownBtn, tr( "arpeggio direction = down" ) );
|
||||
@@ -362,12 +354,12 @@ arpAndChordsTabWidget::arpAndChordsTabWidget( channelTrack * _channel_track ) :
|
||||
SLOT( arpDownToggled( bool ) ) );
|
||||
|
||||
m_arpUpAndDownBtn = new pixmapButton( m_arpGroupBox );
|
||||
m_arpUpAndDownBtn->move( 110, 60 );
|
||||
m_arpUpAndDownBtn->move( 50, 74 );
|
||||
m_arpUpAndDownBtn->setActiveGraphic( embed::getIconPixmap(
|
||||
"arp_up_and_down_on" ) );
|
||||
m_arpUpAndDownBtn->setInactiveGraphic( embed::getIconPixmap(
|
||||
"arp_up_and_down_off" ) );
|
||||
#ifndef QT4
|
||||
#ifdef QT3
|
||||
m_arpUpAndDownBtn->setBackgroundMode( Qt::PaletteBackground );
|
||||
#endif
|
||||
toolTip::add( m_arpUpAndDownBtn,
|
||||
@@ -376,12 +368,12 @@ arpAndChordsTabWidget::arpAndChordsTabWidget( channelTrack * _channel_track ) :
|
||||
SLOT( arpUpAndDownToggled( bool ) ) );
|
||||
|
||||
m_arpRandomBtn = new pixmapButton( m_arpGroupBox );
|
||||
m_arpRandomBtn->move( 130, 60 );
|
||||
m_arpRandomBtn->move( 70, 74 );
|
||||
m_arpRandomBtn->setActiveGraphic( embed::getIconPixmap(
|
||||
"arp_random_on" ) );
|
||||
m_arpRandomBtn->setInactiveGraphic( embed::getIconPixmap(
|
||||
"arp_random_off" ) );
|
||||
#ifndef QT4
|
||||
#ifdef QT3
|
||||
m_arpRandomBtn->setBackgroundMode( Qt::PaletteBackground );
|
||||
#endif
|
||||
toolTip::add( m_arpRandomBtn, tr( "arpeggio direction = random" ) );
|
||||
@@ -394,25 +386,25 @@ arpAndChordsTabWidget::arpAndChordsTabWidget( channelTrack * _channel_track ) :
|
||||
m_arpDirections_group->addButton( m_arpUpAndDownBtn );
|
||||
m_arpDirections_group->addButton( m_arpRandomBtn );
|
||||
m_arpDirections_group->setExclusive( TRUE );
|
||||
#ifndef QT4
|
||||
#ifdef QT3
|
||||
m_arpDirections_group->hide();
|
||||
#endif
|
||||
|
||||
/* m_sortMode = new ledCheckBox( tr( "Sort-mode" ), m_arpGroupBox );
|
||||
m_sortMode->move( 10, 90 );*/
|
||||
|
||||
QLabel * mode_lbl = new QLabel( tr( "Mode:" ), m_arpGroupBox );
|
||||
mode_lbl->setGeometry( 10, 90, 64, 10 );
|
||||
mode_lbl->setGeometry( 10, 104, 64, 10 );
|
||||
mode_lbl->setFont( pointSize<7>( mode_lbl->font() ) );
|
||||
|
||||
m_arpModeComboBox = new QComboBox( m_arpGroupBox );
|
||||
m_arpModeComboBox = new comboBox( m_arpGroupBox );
|
||||
m_arpModeComboBox->setFont( pointSize<8>( m_arpModeComboBox->font() ) );
|
||||
m_arpModeComboBox->setGeometry( 70, 87, 80, 22 );
|
||||
m_arpModeComboBox->setGeometry( 10, 118, 128, 22 );
|
||||
|
||||
m_arpModeComboBox->addItem( tr( "Free" ) );
|
||||
m_arpModeComboBox->addItem( tr( "Sort" ) );
|
||||
m_arpModeComboBox->addItem( tr( "Sync" ) );
|
||||
m_arpModeComboBox->setCurrentItem( 0 );
|
||||
m_arpModeComboBox->addItem( tr( "Free" ),
|
||||
embed::getIconPixmap( "arp_free" ) );
|
||||
m_arpModeComboBox->addItem( tr( "Sort" ),
|
||||
embed::getIconPixmap( "arp_sort" ) );
|
||||
m_arpModeComboBox->addItem( tr( "Sync" ),
|
||||
embed::getIconPixmap( "arp_sync" ) );
|
||||
m_arpModeComboBox->setCurrentIndex( 0 );
|
||||
}
|
||||
|
||||
|
||||
@@ -771,9 +763,5 @@ void arpAndChordsTabWidget::arpRandomToggled( bool _on )
|
||||
|
||||
|
||||
|
||||
#undef setChecked
|
||||
#undef currentIndex
|
||||
#undef setCurrentIndex
|
||||
|
||||
#include "arp_and_chords_tab_widget.moc"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* bb_editor.cpp - basic main-window for editing of beats and basslines
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "templates.h"
|
||||
#include "debug.h"
|
||||
#include "tooltip.h"
|
||||
#include "combobox.h"
|
||||
|
||||
|
||||
|
||||
@@ -85,7 +86,8 @@ bbEditor::bbEditor() :
|
||||
setWindowIcon( embed::getIconPixmap( "bb_track" ) );
|
||||
setWindowTitle( tr( "Beat+Bassline Editor" ) );
|
||||
setMinimumWidth( TRACK_OP_WIDTH + DEFAULT_SETTINGS_WIDGET_WIDTH +
|
||||
BBE_PPT + 2 * TCO_BORDER_WIDTH );
|
||||
BBE_PPT + 2 * TCO_BORDER_WIDTH +
|
||||
DEFAULT_SCROLLBAR_SIZE );
|
||||
if( lmmsMainWin::inst()->workspace() != NULL )
|
||||
{
|
||||
setGeometry( 10, 340, minimumWidth(), 300 );
|
||||
@@ -127,9 +129,16 @@ bbEditor::bbEditor() :
|
||||
QLabel * l = new QLabel( m_toolBar );
|
||||
l->setPixmap( embed::getIconPixmap( "drum" ) );
|
||||
|
||||
m_bbComboBox = new comboBox( m_toolBar );
|
||||
m_bbComboBox->setFixedSize( 200, 22 );
|
||||
connect( m_bbComboBox, SIGNAL( currentIndexChanged( int ) ),
|
||||
this, SLOT( setCurrentBB( int ) ) );
|
||||
|
||||
tb_layout->addSpacing( 5 );
|
||||
tb_layout->addWidget( m_playButton );
|
||||
tb_layout->addWidget( m_stopButton );
|
||||
tb_layout->addSpacing( 20 );
|
||||
tb_layout->addWidget( m_bbComboBox );
|
||||
tb_layout->addStretch();
|
||||
tb_layout->addWidget( l );
|
||||
tb_layout->addSpacing( 15 );
|
||||
@@ -155,10 +164,15 @@ csize bbEditor::currentBB( void ) const
|
||||
|
||||
|
||||
|
||||
void bbEditor::setCurrentBB( csize _bb )
|
||||
void bbEditor::setCurrentBB( int _bb )
|
||||
{
|
||||
if( m_bbComboBox->currentIndex() != _bb )
|
||||
{
|
||||
m_bbComboBox->setCurrentIndex( _bb );
|
||||
}
|
||||
|
||||
// first make sure, all channels have a TCO at current BB
|
||||
createTCOsForBB( _bb );
|
||||
createTCOsForBB( static_cast<csize>( _bb ) );
|
||||
|
||||
realignTracks();
|
||||
|
||||
@@ -169,7 +183,8 @@ void bbEditor::setCurrentBB( csize _bb )
|
||||
bbTrack::findBBTrack( i )->trackLabel()->update();
|
||||
}
|
||||
|
||||
emit positionChanged( m_currentPosition = midiTime( _bb, 0 ) );
|
||||
emit positionChanged( m_currentPosition = midiTime(
|
||||
static_cast<csize>( _bb ), 0 ) );
|
||||
}
|
||||
|
||||
|
||||
@@ -270,6 +285,22 @@ void bbEditor::updateBBTrack( trackContentObject * _tco )
|
||||
|
||||
|
||||
|
||||
void bbEditor::updateComboBox( void )
|
||||
{
|
||||
m_bbComboBox->clear();
|
||||
|
||||
for( csize i = 0; i < numOfBBs(); ++i )
|
||||
{
|
||||
bbTrack * bbt = bbTrack::findBBTrack( i );
|
||||
m_bbComboBox->addItem( bbt->trackLabel()->text(),
|
||||
bbt->trackLabel()->pixmap() );
|
||||
}
|
||||
m_bbComboBox->setCurrentIndex( currentBB() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// close-handler for bb-editor-window because closing of bb-editor isn't allowed
|
||||
// instead of closing it's being hidden
|
||||
void bbEditor::closeEvent( QCloseEvent * _ce )
|
||||
@@ -323,7 +354,8 @@ void bbEditor::resizeEvent( QResizeEvent * _re )
|
||||
{
|
||||
setPixelsPerTact( width() - ( TRACK_OP_WIDTH +
|
||||
DEFAULT_SETTINGS_WIDGET_WIDTH + 2 *
|
||||
TCO_BORDER_WIDTH ) );
|
||||
TCO_BORDER_WIDTH +
|
||||
DEFAULT_SCROLLBAR_SIZE ) );
|
||||
trackContainer::resizeEvent( _re );
|
||||
m_toolBar->setFixedWidth( width() );
|
||||
}
|
||||
@@ -331,6 +363,15 @@ void bbEditor::resizeEvent( QResizeEvent * _re )
|
||||
|
||||
|
||||
|
||||
QRect bbEditor::scrollAreaRect( void ) const
|
||||
{
|
||||
return( QRect( 0, 0, (int) pixelsPerTact(),
|
||||
height() - m_toolBar->height() ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void bbEditor::play( void )
|
||||
{
|
||||
if( songEditor::inst()->playing() )
|
||||
@@ -431,6 +472,7 @@ void bbEditor::swapBB( csize _bb1, csize _bb2 )
|
||||
{
|
||||
( *it )->swapPositionOfTCOs( _bb1, _bb2 );
|
||||
}
|
||||
updateComboBox();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* envelope_tab_widget.cpp - widget for use in envelope/lfo/filter-tab of
|
||||
* channel-window
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -28,19 +28,14 @@
|
||||
|
||||
#ifdef QT4
|
||||
|
||||
#include <QComboBox>
|
||||
#include <Qt/QtXml>
|
||||
#include <QWhatsThis>
|
||||
|
||||
#else
|
||||
|
||||
#include <qcombobox.h>
|
||||
#include <qdom.h>
|
||||
#include <qwhatsthis.h>
|
||||
|
||||
#define isChecked isOn
|
||||
#define setChecked setOn
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -54,6 +49,7 @@
|
||||
#include "embed.h"
|
||||
#include "gui_templates.h"
|
||||
#include "channel_track.h"
|
||||
#include "combobox.h"
|
||||
|
||||
|
||||
|
||||
@@ -142,19 +138,27 @@ envelopeTabWidget::envelopeTabWidget( channelTrack * _channel_track ) :
|
||||
FILTER_GROUPBOX_WIDTH,
|
||||
FILTER_GROUPBOX_HEIGHT );
|
||||
|
||||
m_filterComboBox = new QComboBox( m_filterGroupBox );
|
||||
m_filterComboBox->setGeometry( 20, 20, 100, 22 );
|
||||
m_filterComboBox = new comboBox( m_filterGroupBox );
|
||||
m_filterComboBox->setGeometry( 14, 22, 120, 22 );
|
||||
m_filterComboBox->setFont( pointSize<8>( m_filterComboBox->font() ) );
|
||||
|
||||
|
||||
m_filterComboBox->addItem( tr( "LowPass" ) );
|
||||
m_filterComboBox->addItem( tr( "HiPass" ) );
|
||||
m_filterComboBox->addItem( tr( "BandPass csg" ) );
|
||||
m_filterComboBox->addItem( tr( "BandPass czpg" ) );
|
||||
m_filterComboBox->addItem( tr( "Notch" ) );
|
||||
m_filterComboBox->addItem( tr( "Allpass" ) );
|
||||
m_filterComboBox->addItem( tr( "Moog" ) );
|
||||
m_filterComboBox->addItem( tr( "2x LowPass" ) );
|
||||
m_filterComboBox->addItem( tr( "LowPass" ),
|
||||
embed::getIconPixmap( "filter_lp" ) );
|
||||
m_filterComboBox->addItem( tr( "HiPass" ),
|
||||
embed::getIconPixmap( "filter_hp" ) );
|
||||
m_filterComboBox->addItem( tr( "BandPass csg" ),
|
||||
embed::getIconPixmap( "filter_bp" ) );
|
||||
m_filterComboBox->addItem( tr( "BandPass czpg" ),
|
||||
embed::getIconPixmap( "filter_bp" ) );
|
||||
m_filterComboBox->addItem( tr( "Notch" ),
|
||||
embed::getIconPixmap( "filter_notch" ) );
|
||||
m_filterComboBox->addItem( tr( "Allpass" ),
|
||||
embed::getIconPixmap( "filter_ap" ) );
|
||||
m_filterComboBox->addItem( tr( "Moog" ),
|
||||
embed::getIconPixmap( "filter_lp" ) );
|
||||
m_filterComboBox->addItem( tr( "2x LowPass" ),
|
||||
embed::getIconPixmap( "filter_2lp" ) );
|
||||
|
||||
#ifdef QT4
|
||||
m_filterComboBox->setWhatsThis(
|
||||
@@ -264,18 +268,14 @@ void envelopeTabWidget::processAudioBuffer( sampleFrame * _ab, Uint32 _frames,
|
||||
mixer::inst()->sampleRate() );
|
||||
}
|
||||
|
||||
if( /*m_filterState->isChecked()*/ m_filterGroupBox->isActive() )
|
||||
if( m_filterGroupBox->isActive() )
|
||||
{
|
||||
int old_filter_cut = 0;
|
||||
int old_filter_res = 0;
|
||||
|
||||
basicFilters<>::filterTypes filter = basicFilters<>::getFilterType( m_filterComboBox->
|
||||
#ifdef QT4
|
||||
currentIndex()
|
||||
#else
|
||||
currentItem()
|
||||
#endif
|
||||
);
|
||||
basicFilters<>::filterTypes filter =
|
||||
basicFilters<>::getFilterType(
|
||||
m_filterComboBox->currentIndex() );
|
||||
|
||||
if( m_envLFOWidgets[VOLUME]->used() &&
|
||||
m_envLFOWidgets[CUT]->used() &&
|
||||
@@ -492,11 +492,7 @@ void envelopeTabWidget::saveSettings( QDomDocument & _doc,
|
||||
QDomElement & _parent )
|
||||
{
|
||||
QDomElement etw_de = _doc.createElement( nodeName() );
|
||||
#ifdef QT4
|
||||
etw_de.setAttribute( "ftype", m_filterComboBox->currentIndex() );
|
||||
#else
|
||||
etw_de.setAttribute( "ftype", m_filterComboBox->currentItem() );
|
||||
#endif
|
||||
etw_de.setAttribute( "fcut", m_filterCutKnob->value() );
|
||||
etw_de.setAttribute( "fres", m_filterResKnob->value() );
|
||||
etw_de.setAttribute( "fwet", m_filterGroupBox->isActive() );
|
||||
@@ -518,11 +514,7 @@ void envelopeTabWidget::saveSettings( QDomDocument & _doc,
|
||||
|
||||
void envelopeTabWidget::loadSettings( const QDomElement & _this )
|
||||
{
|
||||
#ifdef QT4
|
||||
m_filterComboBox->setCurrentIndex( _this.attribute( "ftype" ).toInt() );
|
||||
#else
|
||||
m_filterComboBox->setCurrentItem( _this.attribute( "ftype" ).toInt() );
|
||||
#endif
|
||||
m_filterCutKnob->setValue( _this.attribute( "fcut" ).toFloat() );
|
||||
m_filterResKnob->setValue( _this.attribute( "fres" ).toFloat() );
|
||||
/* m_filterState->setChecked( _this.attribute( "fwet" ).toInt() );*/
|
||||
@@ -550,9 +542,6 @@ void envelopeTabWidget::loadSettings( const QDomElement & _this )
|
||||
|
||||
|
||||
|
||||
#undef isChecked
|
||||
#undef setChecked
|
||||
|
||||
|
||||
#include "envelope_tab_widget.moc"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* export_project_dialog.cpp - implementation of dialog for exporting project
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -30,8 +30,6 @@
|
||||
#include <QFileDialog>
|
||||
#include <QMessageBox>
|
||||
#include <QProgressBar>
|
||||
#include <QComboBox>
|
||||
#include <QCheckBox>
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
#include <QCloseEvent>
|
||||
@@ -42,8 +40,6 @@
|
||||
#include <qfiledialog.h>
|
||||
#include <qmessagebox.h>
|
||||
#include <qprogressbar.h>
|
||||
#include <qcombobox.h>
|
||||
#include <qcheckbox.h>
|
||||
#include <qlabel.h>
|
||||
#include <qpushbutton.h>
|
||||
#include <qapplication.h>
|
||||
@@ -54,6 +50,8 @@
|
||||
#include "export_project_dialog.h"
|
||||
#include "song_editor.h"
|
||||
#include "lmms_main_win.h"
|
||||
#include "combobox.h"
|
||||
#include "led_checkbox.h"
|
||||
#include "embed.h"
|
||||
|
||||
#include "audio_file_wave.h"
|
||||
@@ -87,7 +85,7 @@ const int LABEL_MARGIN = 6;
|
||||
const int LABEL_X = 10;
|
||||
const int LABEL_WIDTH = 48;
|
||||
const int TYPE_STUFF_Y = 10;
|
||||
const int TYPE_HEIGHT = 26;
|
||||
const int TYPE_HEIGHT = 22;
|
||||
const int TYPE_COMBO_WIDTH = 256;
|
||||
const int KBPS_STUFF_Y = TYPE_STUFF_Y + TYPE_HEIGHT + LABEL_MARGIN + 6;
|
||||
const int KBPS_HEIGHT = TYPE_HEIGHT;
|
||||
@@ -151,7 +149,7 @@ exportProjectDialog::exportProjectDialog( const QString & _file_name,
|
||||
m_typeLbl->setGeometry( LABEL_X, TYPE_STUFF_Y, LABEL_WIDTH,
|
||||
TYPE_HEIGHT );
|
||||
|
||||
m_typeCombo = new QComboBox( this );
|
||||
m_typeCombo = new comboBox( this );
|
||||
m_typeCombo->setGeometry( LABEL_X + LABEL_WIDTH+LABEL_MARGIN,
|
||||
TYPE_STUFF_Y, TYPE_COMBO_WIDTH,
|
||||
TYPE_HEIGHT );
|
||||
@@ -165,13 +163,8 @@ exportProjectDialog::exportProjectDialog( const QString & _file_name,
|
||||
tr( fileEncodeDevices[idx].m_description ) );
|
||||
++idx;
|
||||
}
|
||||
#ifdef QT4
|
||||
m_typeCombo->setCurrentIndex( m_typeCombo->findText( tr(
|
||||
fileEncodeDevices[m_fileType].m_description ) ) );
|
||||
#else
|
||||
m_typeCombo->setCurrentText( tr(
|
||||
fileEncodeDevices[m_fileType].m_description ) );
|
||||
#endif
|
||||
|
||||
|
||||
// kbps-ui-stuff
|
||||
@@ -179,7 +172,7 @@ exportProjectDialog::exportProjectDialog( const QString & _file_name,
|
||||
m_kbpsLbl->setGeometry( LABEL_X, KBPS_STUFF_Y, LABEL_WIDTH,
|
||||
KBPS_HEIGHT );
|
||||
|
||||
m_kbpsCombo = new QComboBox( this );
|
||||
m_kbpsCombo = new comboBox( this );
|
||||
m_kbpsCombo->setGeometry( LABEL_X + LABEL_WIDTH + LABEL_MARGIN,
|
||||
KBPS_STUFF_Y, KBPS_COMBO_WIDTH,
|
||||
KBPS_HEIGHT );
|
||||
@@ -191,21 +184,17 @@ exportProjectDialog::exportProjectDialog( const QString & _file_name,
|
||||
s_availableBitrates[idx] ) );
|
||||
++idx;
|
||||
}
|
||||
#ifdef QT4
|
||||
m_typeCombo->setCurrentIndex( m_typeCombo->findText(
|
||||
QString::number( 128 ) ) );
|
||||
#else
|
||||
m_kbpsCombo->setCurrentText( QString::number( 128 ) );
|
||||
#endif
|
||||
|
||||
|
||||
m_vbrCb = new QCheckBox( tr( "variable bitrate" ), this );
|
||||
m_vbrCb = new ledCheckBox( tr( "variable bitrate" ), this );
|
||||
m_vbrCb->setGeometry( LABEL_X + LABEL_WIDTH + 3 * LABEL_MARGIN +
|
||||
KBPS_COMBO_WIDTH, KBPS_STUFF_Y + 3, 190, 20 );
|
||||
m_vbrCb->setChecked( TRUE );
|
||||
|
||||
|
||||
m_hqmCb = new QCheckBox( tr( "use high-quality-mode (recommened)" ),
|
||||
m_hqmCb = new ledCheckBox( tr( "use high-quality-mode (recommened)" ),
|
||||
this );
|
||||
m_hqmCb->setGeometry( LABEL_X, HQ_MODE_CB_Y + 3, HQ_MODE_CB_WIDTH,
|
||||
HQ_MODE_CB_HEIGHT );
|
||||
@@ -278,13 +267,17 @@ void exportProjectDialog::keyPressEvent( QKeyEvent * _ke )
|
||||
|
||||
|
||||
|
||||
void exportProjectDialog::closeEvent (QCloseEvent * _ce)
|
||||
void exportProjectDialog::closeEvent( QCloseEvent * _ce )
|
||||
{
|
||||
if( songEditor::inst()->exporting() == TRUE )
|
||||
{
|
||||
abortProjectExport();
|
||||
_ce->ignore();
|
||||
}
|
||||
else
|
||||
{
|
||||
QDialog::closeEvent( _ce );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -426,6 +419,7 @@ void exportProjectDialog::cancelBtnClicked( void )
|
||||
abortProjectExport();
|
||||
return;
|
||||
}
|
||||
reject();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* name_label.cpp - implementation of class nameLabel, a label which
|
||||
* is renamable by double-clicking it
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -30,10 +30,13 @@
|
||||
|
||||
#include <QPainter>
|
||||
#include <QMouseEvent>
|
||||
#include <QFileDialog>
|
||||
|
||||
#else
|
||||
|
||||
#include <qpainter.h>
|
||||
#include <qfiledialog.h>
|
||||
#include <qimage.h>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -43,13 +46,14 @@
|
||||
#include "bb_editor.h"
|
||||
#include "bb_track.h"
|
||||
#include "gui_templates.h"
|
||||
#include "config_mgr.h"
|
||||
|
||||
|
||||
|
||||
nameLabel::nameLabel( const QString & _initial_name, QWidget * _parent,
|
||||
const QPixmap & _pm ) :
|
||||
nameLabel::nameLabel( const QString & _initial_name, QWidget * _parent ) :
|
||||
QLabel( _initial_name, _parent ),
|
||||
m_pm( _pm )
|
||||
m_pixmap(),
|
||||
m_pixmapFile( "" )
|
||||
{
|
||||
#ifdef QT3
|
||||
setBackgroundMode( Qt::NoBackground );
|
||||
@@ -65,17 +69,99 @@ nameLabel::~nameLabel()
|
||||
|
||||
|
||||
|
||||
const QPixmap * nameLabel::pixmap( void ) const
|
||||
void nameLabel::setPixmap( const QPixmap & _pixmap )
|
||||
{
|
||||
return( &m_pm );
|
||||
m_pixmap = _pixmap;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void nameLabel::setPixmap( const QPixmap & _pm )
|
||||
void nameLabel::setPixmapFile( const QString & _file )
|
||||
{
|
||||
m_pm = _pm;
|
||||
m_pixmapFile = _file;
|
||||
if( QFileInfo( m_pixmapFile ).isRelative() )
|
||||
{
|
||||
m_pixmap = QPixmap( configManager::inst()->trackIconsDir() +
|
||||
m_pixmapFile );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pixmap = QPixmap( m_pixmapFile );
|
||||
}
|
||||
emit( pixmapChanged() );
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void nameLabel::selectPixmap( void )
|
||||
{
|
||||
#ifdef QT4
|
||||
QFileDialog ofd( NULL, tr( "Select icon" ) );
|
||||
#else
|
||||
QFileDialog ofd( QString::null, QString::null, NULL, "", TRUE );
|
||||
ofd.setWindowTitle( tr( "Select icon" ) );
|
||||
#endif
|
||||
|
||||
QString dir;
|
||||
if( m_pixmapFile != "" )
|
||||
{
|
||||
QString f = m_pixmapFile;
|
||||
if( QFileInfo( f ).isRelative() )
|
||||
{
|
||||
f = configManager::inst()->trackIconsDir() + f;
|
||||
}
|
||||
#ifdef QT4
|
||||
dir = QFileInfo( f ).absolutePath();
|
||||
#else
|
||||
dir = QFileInfo( f ).dirPath( TRUE );
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
dir = configManager::inst()->trackIconsDir();
|
||||
}
|
||||
// change dir to position of previously opened file
|
||||
ofd.setDirectory( dir );
|
||||
ofd.setFileMode( QFileDialog::ExistingFiles );
|
||||
|
||||
// set filters
|
||||
#ifdef QT4
|
||||
QStringList types;
|
||||
types << tr( "All images (*.png *.jpg *.jpeg *.gif *.bmp)" );
|
||||
ofd.setFilters( types );
|
||||
#else
|
||||
ofd.addFilter( tr( "All images (*.png *.jpg *.jpeg *.gif *.bmp)" ) );
|
||||
ofd.setSelectedFilter( tr( "All images (*.png *.jpg *.jpeg *.gif "
|
||||
"*.bmp)" ) );
|
||||
#endif
|
||||
if( m_pixmapFile != "" )
|
||||
{
|
||||
// select previously opened file
|
||||
ofd.selectFile( QFileInfo( m_pixmapFile ).fileName() );
|
||||
}
|
||||
|
||||
if ( ofd.exec () == QDialog::Accepted )
|
||||
{
|
||||
if( ofd.selectedFiles().isEmpty() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
QString pf = ofd.selectedFiles()[0];
|
||||
if( !QFileInfo( pf ).isRelative() )
|
||||
{
|
||||
#if QT_VERSION >= 0x030100
|
||||
pf = pf.replace( configManager::inst()->trackIconsDir(),
|
||||
"" );
|
||||
#else
|
||||
pf = pf.replace( QRegExp(
|
||||
configManager::inst()->trackIconsDir() ), "" );
|
||||
#endif
|
||||
}
|
||||
setPixmapFile( pf );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -90,53 +176,28 @@ void nameLabel::rename( void )
|
||||
{
|
||||
setText( txt );
|
||||
emit nameChanged( txt );
|
||||
emit nameChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void nameLabel::paintEvent( QPaintEvent * )
|
||||
{
|
||||
#ifdef QT4
|
||||
QPainter p( this );
|
||||
p.fillRect( rect(), palette().color( backgroundRole() ) );
|
||||
#else
|
||||
QPixmap draw_pm( rect().size() );
|
||||
draw_pm.fill( this, rect().topLeft() );
|
||||
|
||||
QPainter p( &draw_pm, this );
|
||||
#endif
|
||||
p.setFont( pointSize<8>( p.font() ) );
|
||||
|
||||
QFontMetrics fm( font() );
|
||||
|
||||
p.drawPixmap( 4, ( height() - m_pm.height() ) / 2, m_pm );
|
||||
p.setPen( QColor( 0, 224, 0 ) );
|
||||
bbTrack * bbt = bbTrack::findBBTrack( bbEditor::inst()->currentBB() );
|
||||
if( bbt != NULL && bbt->getTrackSettingsWidget() ==
|
||||
dynamic_cast<trackSettingsWidget *>( parentWidget() ) )
|
||||
{
|
||||
p.setPen( QColor( 255, 255, 255 ) );
|
||||
}
|
||||
p.drawText( m_pm.width() + 8, height() / 2 + fm.height() / 2 - 4,
|
||||
text() );
|
||||
|
||||
#ifndef QT4
|
||||
// and blit all the drawn stuff on the screen...
|
||||
bitBlt( this, rect().topLeft(), &draw_pm );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void nameLabel::mousePressEvent( QMouseEvent * _me )
|
||||
{
|
||||
|
||||
if( _me->button() == Qt::RightButton )
|
||||
{
|
||||
rename();
|
||||
QSize s( m_pixmap.width(), m_pixmap.height() );
|
||||
s.scale( width(), height(), QSize::ScaleMin );
|
||||
if( _me->x() > 4 + s.width() )
|
||||
{
|
||||
rename();
|
||||
}
|
||||
else
|
||||
{
|
||||
selectPixmap();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -150,7 +211,67 @@ void nameLabel::mousePressEvent( QMouseEvent * _me )
|
||||
|
||||
void nameLabel::mouseDoubleClickEvent( QMouseEvent * _me )
|
||||
{
|
||||
rename();
|
||||
QSize s( m_pixmap.width(), m_pixmap.height() );
|
||||
s.scale( width(), height(), QSize::ScaleMin );
|
||||
if( _me->x() > 4 + s.width() )
|
||||
{
|
||||
rename();
|
||||
}
|
||||
else
|
||||
{
|
||||
selectPixmap();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void nameLabel::paintEvent( QPaintEvent * )
|
||||
{
|
||||
#ifdef QT4
|
||||
QPainter p( this );
|
||||
p.fillRect( rect(), palette().color( backgroundRole() ) );
|
||||
#else
|
||||
QPixmap draw_pm( size() );
|
||||
draw_pm.fill( this, rect().topLeft() );
|
||||
|
||||
QPainter p( &draw_pm, this );
|
||||
#endif
|
||||
p.setFont( pointSize<8>( p.font() ) );
|
||||
|
||||
int x = 4;
|
||||
if( m_pixmap.isNull() == FALSE )
|
||||
{
|
||||
QPixmap pm = m_pixmap;
|
||||
if( pm.height() > height() )
|
||||
{
|
||||
#ifndef QT3
|
||||
pm = pm.scaledToHeight( height(),
|
||||
Qt::SmoothTransformation );
|
||||
#else
|
||||
pm.convertFromImage( pm.convertToImage().smoothScale(
|
||||
pm.width(), height(),
|
||||
QImage::ScaleMin ) );
|
||||
#endif
|
||||
}
|
||||
p.drawPixmap( x, ( height() - pm.height() ) / 2, pm );
|
||||
x += 4 + pm.width();
|
||||
}
|
||||
|
||||
p.setPen( QColor( 0, 224, 0 ) );
|
||||
bbTrack * bbt = bbTrack::findBBTrack( bbEditor::inst()->currentBB() );
|
||||
if( bbt != NULL && bbt->getTrackSettingsWidget() ==
|
||||
dynamic_cast<trackSettingsWidget *>( parentWidget() ) )
|
||||
{
|
||||
p.setPen( QColor( 255, 255, 255 ) );
|
||||
}
|
||||
p.drawText( x, height() / 2 + p.fontMetrics().height() / 2 - 4,
|
||||
text() );
|
||||
|
||||
#ifndef QT4
|
||||
// and blit all the drawn stuff on the screen...
|
||||
bitBlt( this, rect().topLeft(), &draw_pm );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
#include <QPainter>
|
||||
#include <QKeyEvent>
|
||||
#include <QWheelEvent>
|
||||
#include <QComboBox>
|
||||
#include <QLayout>
|
||||
#include <QLabel>
|
||||
|
||||
@@ -42,12 +41,9 @@
|
||||
#include <qapplication.h>
|
||||
#include <qbuttongroup.h>
|
||||
#include <qpainter.h>
|
||||
#include <qcombobox.h>
|
||||
#include <qlayout.h>
|
||||
#include <qlabel.h>
|
||||
|
||||
#define setChecked setOn
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -72,6 +68,8 @@
|
||||
#include "midi.h"
|
||||
#include "tool_button.h"
|
||||
#include "text_float.h"
|
||||
#include "combobox.h"
|
||||
|
||||
|
||||
extern tones whiteKeys[]; // defined in piano_widget.cpp
|
||||
|
||||
@@ -167,22 +165,22 @@ pianoRoll::pianoRoll( void ) :
|
||||
if( s_toolDraw == NULL )
|
||||
{
|
||||
s_toolDraw = new QPixmap( embed::getIconPixmap(
|
||||
"pr_tool_draw" ) );
|
||||
"edit_draw" ) );
|
||||
}
|
||||
if( s_toolErase == NULL )
|
||||
{
|
||||
s_toolErase= new QPixmap( embed::getIconPixmap(
|
||||
"pr_tool_erase" ) );
|
||||
"edit_erase" ) );
|
||||
}
|
||||
if( s_toolSelect == NULL )
|
||||
{
|
||||
s_toolSelect = new QPixmap( embed::getIconPixmap(
|
||||
"pr_tool_select" ) );
|
||||
"edit_select" ) );
|
||||
}
|
||||
if( s_toolMove == NULL )
|
||||
{
|
||||
s_toolMove = new QPixmap( embed::getIconPixmap(
|
||||
"pr_tool_move" ) );
|
||||
"edit_move" ) );
|
||||
}
|
||||
|
||||
#ifdef QT4
|
||||
@@ -272,27 +270,27 @@ pianoRoll::pianoRoll( void ) :
|
||||
SLOT( verScrolled( int ) ) );
|
||||
|
||||
// init edit-buttons at the top
|
||||
m_drawButton = new toolButton( embed::getIconPixmap( "pr_tool_draw" ),
|
||||
m_drawButton = new toolButton( embed::getIconPixmap( "edit_draw" ),
|
||||
tr( "Draw mode (D)" ),
|
||||
this, SLOT( drawButtonToggled() ),
|
||||
m_toolBar );
|
||||
m_drawButton->setCheckable( TRUE );
|
||||
m_drawButton->setChecked( TRUE );
|
||||
|
||||
m_eraseButton = new toolButton( embed::getIconPixmap( "pr_tool_erase" ),
|
||||
m_eraseButton = new toolButton( embed::getIconPixmap( "edit_erase" ),
|
||||
tr( "Erase mode (E)" ),
|
||||
this, SLOT( eraseButtonToggled() ),
|
||||
m_toolBar );
|
||||
m_eraseButton->setCheckable( TRUE );
|
||||
|
||||
m_selectButton = new toolButton( embed::getIconPixmap(
|
||||
"pr_tool_select" ),
|
||||
"edit_select" ),
|
||||
tr( "Select mode (S)" ),
|
||||
this, SLOT( selectButtonToggled() ),
|
||||
m_toolBar );
|
||||
m_selectButton->setCheckable( TRUE );
|
||||
|
||||
m_moveButton = new toolButton( embed::getIconPixmap( "pr_tool_move" ),
|
||||
m_moveButton = new toolButton( embed::getIconPixmap( "edit_move" ),
|
||||
tr( "Move selection mode (M)" ),
|
||||
this, SLOT( moveButtonToggled() ),
|
||||
m_toolBar );
|
||||
@@ -392,20 +390,17 @@ pianoRoll::pianoRoll( void ) :
|
||||
zoom_lbl->setPixmap( embed::getIconPixmap( "zoom" ) );
|
||||
|
||||
// setup zooming-stuff
|
||||
m_zoomingComboBox = new QComboBox( m_toolBar );
|
||||
m_zoomingComboBox->setGeometry( 580, 4, 80, 24 );
|
||||
m_zoomingComboBox = new comboBox( m_toolBar );
|
||||
m_zoomingComboBox->setFixedSize( 80, 22 );
|
||||
m_zoomingComboBox->move( 580, 4 );
|
||||
for( int i = 0; i < 6; ++i )
|
||||
{
|
||||
m_zoomingComboBox->addItem( QString::number( 25 *
|
||||
static_cast<int>( powf( 2.0f, i ) ) ) +
|
||||
"%" );
|
||||
}
|
||||
#ifdef QT4
|
||||
m_zoomingComboBox->setCurrentIndex( m_zoomingComboBox->findText(
|
||||
"100%" ) );
|
||||
#else
|
||||
m_zoomingComboBox->setCurrentText( "100%" );
|
||||
#endif
|
||||
connect( m_zoomingComboBox, SIGNAL( activated( const QString & ) ),
|
||||
this, SLOT( zoomingChanged( const QString & ) ) );
|
||||
|
||||
@@ -573,10 +568,9 @@ inline void pianoRoll::drawNoteRect( QPainter & _p, Uint16 _x, Uint16 _y,
|
||||
|
||||
void pianoRoll::update( void )
|
||||
{
|
||||
if( m_paintPixmap.isNull() == TRUE ||
|
||||
m_paintPixmap.size() != rect().size() )
|
||||
if( m_paintPixmap.isNull() == TRUE || m_paintPixmap.size() != size() )
|
||||
{
|
||||
m_paintPixmap = QPixmap( rect().size() );
|
||||
m_paintPixmap = QPixmap( size() );
|
||||
}
|
||||
m_paintPixmap.fill( QColor( 0, 0, 0 ) );
|
||||
QPainter p( &m_paintPixmap );
|
||||
@@ -755,7 +749,7 @@ void pianoRoll::update( void )
|
||||
|
||||
// draw vertical raster
|
||||
int tact_16th = m_currentPosition / 4;
|
||||
int offset = ( m_currentPosition % 4 ) * m_ppt /
|
||||
const int offset = ( m_currentPosition % 4 ) * m_ppt /
|
||||
DEFAULT_STEPS_PER_TACT / 4;
|
||||
for( int x = WHITE_KEY_WIDTH - offset; x < width();
|
||||
x += m_ppt / DEFAULT_STEPS_PER_TACT, ++tact_16th )
|
||||
@@ -1964,18 +1958,11 @@ void pianoRoll::wheelEvent( QWheelEvent * _we )
|
||||
{
|
||||
m_ppt /= 2;
|
||||
}
|
||||
#ifdef QT4
|
||||
// update combobox with zooming-factor
|
||||
m_zoomingComboBox->setCurrentIndex(
|
||||
m_zoomingComboBox->findText( QString::number(
|
||||
static_cast<int>( m_ppt * 100 /
|
||||
DEFAULT_PR_PPT ) ) +"%" ) );
|
||||
#else
|
||||
// update combobox with zooming-factor
|
||||
m_zoomingComboBox->setCurrentText( QString::number(
|
||||
static_cast<int>( m_ppt * 100 /
|
||||
DEFAULT_PR_PPT ) ) +"%" );
|
||||
#endif
|
||||
// update timeline
|
||||
m_timeLine->setPixelsPerTact( m_ppt );
|
||||
update();
|
||||
@@ -2446,8 +2433,6 @@ void pianoRoll::zoomingChanged( const QString & _zfac )
|
||||
|
||||
|
||||
|
||||
#undef setChecked
|
||||
|
||||
|
||||
#include "piano_roll.moc"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* song_editor.cpp - basic window for editing song
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -45,8 +45,8 @@
|
||||
#include <QLabel>
|
||||
#include <QStatusBar>
|
||||
#include <QAction>
|
||||
#include <QComboBox>
|
||||
#include <QLayout>
|
||||
#include <QButtonGroup>
|
||||
|
||||
#else
|
||||
|
||||
@@ -59,8 +59,8 @@
|
||||
#include <qslider.h>
|
||||
#include <qlabel.h>
|
||||
#include <qstatusbar.h>
|
||||
#include <qcombobox.h>
|
||||
#include <qlayout.h>
|
||||
#include <qbuttongroup.h>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -88,6 +88,7 @@
|
||||
#include "tool_button.h"
|
||||
#include "cpuload_widget.h"
|
||||
#include "text_float.h"
|
||||
#include "combobox.h"
|
||||
|
||||
#include "debug.h"
|
||||
|
||||
@@ -96,8 +97,6 @@
|
||||
extern QString file_to_load;
|
||||
|
||||
|
||||
const int SCROLLBAR_SIZE = 16;
|
||||
|
||||
|
||||
songEditor * songEditor::s_instanceOfMe = NULL;
|
||||
|
||||
@@ -329,18 +328,28 @@ songEditor::songEditor() :
|
||||
this, SLOT( addSampleTrack() ),
|
||||
m_toolBar );
|
||||
|
||||
m_insertBarButton = new toolButton( embed::getIconPixmap(
|
||||
"insert_bar" ),
|
||||
tr( "Insert bar "
|
||||
"(Shift+Insert)" ),
|
||||
this, SLOT( insertBar() ),
|
||||
m_toolBar );
|
||||
m_drawModeButton = new toolButton( embed::getIconPixmap(
|
||||
"edit_draw" ),
|
||||
tr( "Draw mode" ),
|
||||
NULL, NULL, m_toolBar );
|
||||
m_drawModeButton->setCheckable( TRUE );
|
||||
m_drawModeButton->setChecked( TRUE );
|
||||
|
||||
m_editModeButton = new toolButton( embed::getIconPixmap(
|
||||
"edit_arrow" ),
|
||||
tr( "Edit mode (select and move)" ),
|
||||
NULL, NULL, m_toolBar );
|
||||
m_editModeButton->setCheckable( TRUE );
|
||||
|
||||
QButtonGroup * tool_button_group = new QButtonGroup( this );
|
||||
tool_button_group->addButton( m_drawModeButton );
|
||||
tool_button_group->addButton( m_editModeButton );
|
||||
tool_button_group->setExclusive( TRUE );
|
||||
#ifndef QT4
|
||||
tool_button_group->hide();
|
||||
#endif
|
||||
|
||||
|
||||
m_removeBarButton = new toolButton( embed::getIconPixmap(
|
||||
"remove_bar" ),
|
||||
tr( "Remove bar (Shift+Delete)" ),
|
||||
this, SLOT( removeBar() ),
|
||||
m_toolBar );
|
||||
#ifdef QT4
|
||||
#else
|
||||
QWhatsThis::add( m_playButton, tr( "Click here, if you want to play "
|
||||
@@ -354,13 +363,13 @@ songEditor::songEditor() :
|
||||
"song-position-marker will be "
|
||||
"set to the start of your song."
|
||||
) );
|
||||
QWhatsThis::add( m_insertBarButton, tr( "If you click here, a "
|
||||
/* QWhatsThis::add( m_insertBarButton, tr( "If you click here, a "
|
||||
"bar will "
|
||||
"be inserted at the "
|
||||
"current bar." ) );
|
||||
QWhatsThis::add( m_removeBarButton, tr( "If you click here, the "
|
||||
"current bar will be "
|
||||
"removed." ) );
|
||||
"removed." ) );*/
|
||||
#endif
|
||||
|
||||
|
||||
@@ -368,20 +377,17 @@ songEditor::songEditor() :
|
||||
zoom_lbl->setPixmap( embed::getIconPixmap( "zoom" ) );
|
||||
|
||||
// setup zooming-stuff
|
||||
m_zoomingComboBox = new QComboBox( m_toolBar );
|
||||
m_zoomingComboBox->setGeometry( 580, 4, 80, 24 );
|
||||
m_zoomingComboBox = new comboBox( m_toolBar );
|
||||
m_zoomingComboBox->setFixedSize( 80, 22 );
|
||||
m_zoomingComboBox->move( 580, 4 );
|
||||
for( int i = 0; i < 7; ++i )
|
||||
{
|
||||
m_zoomingComboBox->addItem( QString::number( 25 *
|
||||
static_cast<int>( powf( 2.0f, i ) ) ) +
|
||||
"%" );
|
||||
}
|
||||
#ifdef QT4
|
||||
m_zoomingComboBox->setCurrentIndex( m_zoomingComboBox->findText(
|
||||
"100%" ) );
|
||||
#else
|
||||
m_zoomingComboBox->setCurrentText( "100%" );
|
||||
#endif
|
||||
connect( m_zoomingComboBox, SIGNAL( activated( const QString & ) ),
|
||||
this, SLOT( zoomingChanged( const QString & ) ) );
|
||||
|
||||
@@ -393,8 +399,8 @@ songEditor::songEditor() :
|
||||
tb_layout->addWidget( m_addBBTrackButton );
|
||||
tb_layout->addWidget( m_addSampleTrackButton );
|
||||
tb_layout->addSpacing( 10 );
|
||||
tb_layout->addWidget( m_insertBarButton );
|
||||
tb_layout->addWidget( m_removeBarButton );
|
||||
tb_layout->addWidget( m_drawModeButton );
|
||||
tb_layout->addWidget( m_editModeButton );
|
||||
tb_layout->addSpacing( 10 );
|
||||
tl->addToolButtons( m_toolBar );
|
||||
tb_layout->addSpacing( 15 );
|
||||
@@ -407,14 +413,14 @@ songEditor::songEditor() :
|
||||
m_leftRightScroll = new QScrollBar( Qt::Horizontal, cw );
|
||||
m_leftRightScroll->setMinimum( 0 );
|
||||
m_leftRightScroll->setMaximum( 0 );
|
||||
#ifdef QT4
|
||||
#ifndef QT3
|
||||
m_leftRightScroll->setSingleStep( 1 );
|
||||
m_leftRightScroll->setPageStep( 20 );
|
||||
#else
|
||||
m_leftRightScroll->setSteps( 1, 20 );
|
||||
#endif
|
||||
connect( m_leftRightScroll, SIGNAL( valueChanged( int ) ), this,
|
||||
SLOT( scrolled( int ) ) );
|
||||
connect( m_leftRightScroll, SIGNAL( valueChanged( int ) ),
|
||||
this, SLOT( scrolled( int ) ) );
|
||||
|
||||
|
||||
|
||||
@@ -472,17 +478,31 @@ void songEditor::paintEvent( QPaintEvent * _pe )
|
||||
|
||||
|
||||
|
||||
QRect songEditor::scrollAreaRect( void ) const
|
||||
{
|
||||
if( centralWidget() == NULL )
|
||||
{
|
||||
return( rect() );
|
||||
}
|
||||
return( QRect( 0, 0, centralWidget()->width(),
|
||||
centralWidget()->height() - m_toolBar->height() -
|
||||
m_playPos[PLAY_SONG].m_timeLine->height() -
|
||||
DEFAULT_SCROLLBAR_SIZE ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// responsible for moving scrollbars after resizing
|
||||
void songEditor::resizeEvent( QResizeEvent * _re )
|
||||
{
|
||||
if( centralWidget() != NULL )
|
||||
{
|
||||
m_leftRightScroll->setGeometry( 0,
|
||||
centralWidget()->height() - 2 -
|
||||
SCROLLBAR_SIZE,
|
||||
centralWidget()->width() -
|
||||
SCROLLBAR_SIZE,
|
||||
SCROLLBAR_SIZE );
|
||||
centralWidget()->height() -
|
||||
DEFAULT_SCROLLBAR_SIZE,
|
||||
centralWidget()->width(),
|
||||
DEFAULT_SCROLLBAR_SIZE );
|
||||
|
||||
m_playPos[PLAY_SONG].m_timeLine->setFixedWidth(
|
||||
centralWidget()->width() );
|
||||
@@ -575,18 +595,11 @@ void songEditor::wheelEvent( QWheelEvent * _we )
|
||||
{
|
||||
setPixelsPerTact( (int) pixelsPerTact() / 2 );
|
||||
}
|
||||
#ifdef QT4
|
||||
// update combobox with zooming-factor
|
||||
m_zoomingComboBox->setCurrentIndex(
|
||||
m_zoomingComboBox->findText( QString::number(
|
||||
static_cast<int>( pixelsPerTact() *
|
||||
100 / DEFAULT_PIXELS_PER_TACT ) ) + "%" ) );
|
||||
#else
|
||||
// update combobox with zooming-factor
|
||||
m_zoomingComboBox->setCurrentText( QString::number(
|
||||
static_cast<int>( pixelsPerTact() *
|
||||
100 / DEFAULT_PIXELS_PER_TACT ) ) + "%" );
|
||||
#endif
|
||||
// update timeline
|
||||
m_playPos[PLAY_SONG].m_timeLine->setPixelsPerTact(
|
||||
pixelsPerTact() );
|
||||
@@ -1028,11 +1041,9 @@ void songEditor::processNextBuffer( void )
|
||||
64 / frames_per_tact) % 64 );
|
||||
}
|
||||
|
||||
if( m_playPos[m_playMode].m_timeLine != NULL &&
|
||||
m_playPos[m_playMode].m_timeLineUpdate == TRUE &&
|
||||
m_exporting == FALSE )
|
||||
if( m_exporting == FALSE )
|
||||
{
|
||||
m_playPos[m_playMode].m_timeLine->updatePosition();
|
||||
updateTimeLinePosition();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1041,9 +1052,6 @@ void songEditor::processNextBuffer( void )
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void songEditor::play( void )
|
||||
{
|
||||
if( m_playing == TRUE )
|
||||
@@ -1147,7 +1155,9 @@ void songEditor::updateTimeLinePosition( void )
|
||||
if( m_playPos[m_playMode].m_timeLine != NULL &&
|
||||
m_playPos[m_playMode].m_timeLineUpdate == TRUE )
|
||||
{
|
||||
m_playPos[m_playMode].m_timeLine->updatePosition();
|
||||
/* QTimer::singleShot( 1, m_playPos[m_playMode].m_timeLine,
|
||||
SLOT( updatePosition() ) );*/
|
||||
//m_playPos[m_playMode].m_timeLine->updatePosition();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -112,10 +112,9 @@ timeLine::timeLine( const int _xoff, const int _yoff, const float _ppt,
|
||||
|
||||
m_pos.m_timeLine = this;
|
||||
|
||||
updatePosition();
|
||||
QTimer * update_timer = new QTimer( this );
|
||||
connect( update_timer, SIGNAL( timeout() ), this,
|
||||
SLOT( checkForUpdatedPosition() ) );
|
||||
connect( update_timer, SIGNAL( timeout() ),
|
||||
this, SLOT( updatePosition() ) );
|
||||
update_timer->start( 50 );
|
||||
}
|
||||
|
||||
@@ -184,6 +183,7 @@ void timeLine::updatePosition( const midiTime & )
|
||||
{
|
||||
emit positionChanged( m_pos );
|
||||
}
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -215,18 +215,6 @@ void timeLine::toggleBehaviourAtStop( int _n )
|
||||
|
||||
|
||||
|
||||
void timeLine::checkForUpdatedPosition( void )
|
||||
{
|
||||
if( m_changedPosition == TRUE )
|
||||
{
|
||||
repaint();
|
||||
m_changedPosition = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void timeLine::paintEvent( QPaintEvent * )
|
||||
{
|
||||
#ifdef QT4
|
||||
|
||||
@@ -43,9 +43,6 @@
|
||||
#include <qcursor.h>
|
||||
#include <qwhatsthis.h>
|
||||
|
||||
#define setChecked setOn
|
||||
#define isChecked isOn
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -73,6 +70,7 @@ const Sint16 RESIZE_GRIP_WIDTH = 4;
|
||||
const Uint16 TRACK_OP_BTN_WIDTH = 20;
|
||||
const Uint16 TRACK_OP_BTN_HEIGHT = 14;
|
||||
|
||||
const Uint16 MINIMAL_TRACK_HEIGHT = 32;
|
||||
|
||||
|
||||
textFloat * trackContentObject::s_textFloat = NULL;
|
||||
@@ -82,16 +80,15 @@ textFloat * trackContentObject::s_textFloat = NULL;
|
||||
// trackContentObject
|
||||
// ===========================================================================
|
||||
trackContentObject::trackContentObject( track * _track ) :
|
||||
QWidget( _track->getTrackContentWidget()
|
||||
#ifndef QT4
|
||||
, NULL, Qt::WDestructiveClose
|
||||
selectableObject( _track->getTrackContentWidget()
|
||||
#ifdef QT3
|
||||
, Qt::WDestructiveClose
|
||||
#endif
|
||||
),
|
||||
m_track( _track ),
|
||||
m_startPosition(),
|
||||
m_length(),
|
||||
m_moving( FALSE ),
|
||||
m_resizing( FALSE ),
|
||||
m_action( NONE ),
|
||||
m_autoResize( FALSE ),
|
||||
m_initialMouseX( 0 )
|
||||
{
|
||||
@@ -172,9 +169,10 @@ float trackContentObject::pixelsPerTact( void )
|
||||
{
|
||||
if( fixedTCOs() )
|
||||
{
|
||||
return( getTrack()->getTrackContentWidget()->width() -
|
||||
2 * TCO_BORDER_WIDTH ) /
|
||||
tMax<float>( length().getTact(), 1.0f );
|
||||
return( ( getTrack()->getTrackContentWidget()->width() -
|
||||
2 * TCO_BORDER_WIDTH -
|
||||
DEFAULT_SCROLLBAR_SIZE ) /
|
||||
tMax<float>( length().getTact(), 1.0f ) );
|
||||
}
|
||||
return( getTrack()->getTrackContainer()->pixelsPerTact() );
|
||||
}
|
||||
@@ -229,7 +227,32 @@ void trackContentObject::leaveEvent( QEvent * _e )
|
||||
|
||||
void trackContentObject::mousePressEvent( QMouseEvent * _me )
|
||||
{
|
||||
if( _me->button() == Qt::LeftButton &&
|
||||
if( m_track->getTrackContainer()->allowRubberband() == TRUE &&
|
||||
_me->button() == Qt::LeftButton )
|
||||
{
|
||||
if( m_track->getTrackContainer()->rubberBandActive() == FALSE )
|
||||
{
|
||||
if( lmmsMainWin::isCtrlPressed() == TRUE )
|
||||
{
|
||||
setSelected( !isSelected() );
|
||||
}
|
||||
else if( isSelected() == TRUE )
|
||||
{
|
||||
m_action = MOVE_SELECTION;
|
||||
m_initialMouseX = _me->x();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
selectableObject::mousePressEvent( _me );
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if( lmmsMainWin::isShiftPressed() == TRUE )
|
||||
{
|
||||
selectableObject::mousePressEvent( _me );
|
||||
}
|
||||
else if( _me->button() == Qt::LeftButton &&
|
||||
lmmsMainWin::isCtrlPressed() == TRUE )
|
||||
{
|
||||
multimediaProject mmp( multimediaProject::DRAG_N_DROP_DATA );
|
||||
@@ -257,14 +280,14 @@ void trackContentObject::mousePressEvent( QMouseEvent * _me )
|
||||
|
||||
if( _me->x() < width() - RESIZE_GRIP_WIDTH )
|
||||
{
|
||||
m_moving = TRUE;
|
||||
m_action = MOVE;
|
||||
QCursor c( Qt::SizeAllCursor );
|
||||
QApplication::setOverrideCursor( c );
|
||||
s_textFloat->setTitle( tr( "Current position" ) );
|
||||
}
|
||||
else if( m_autoResize == FALSE )
|
||||
{
|
||||
m_resizing = TRUE;
|
||||
m_action = RESIZE;
|
||||
QCursor c( Qt::SizeHorCursor );
|
||||
QApplication::setOverrideCursor( c );
|
||||
s_textFloat->setTitle( tr( "Current length" ) );
|
||||
@@ -289,9 +312,9 @@ void trackContentObject::mousePressEvent( QMouseEvent * _me )
|
||||
void trackContentObject::mouseMoveEvent( QMouseEvent * _me )
|
||||
{
|
||||
const float ppt = m_track->getTrackContainer()->pixelsPerTact();
|
||||
if( m_moving == TRUE )
|
||||
if( m_action == MOVE )
|
||||
{
|
||||
int x = mapToParent( _me->pos() ).x() - m_initialMouseX;
|
||||
const int x = mapToParent( _me->pos() ).x() - m_initialMouseX;
|
||||
movePosition( tMax( 0, (Sint32) m_track->getTrackContainer()->
|
||||
currentPosition() +
|
||||
static_cast<int>( x * 64 / ppt ) ) );
|
||||
@@ -302,7 +325,38 @@ void trackContentObject::mouseMoveEvent( QMouseEvent * _me )
|
||||
s_textFloat->move( mapTo( topLevelWidget(), QPoint( 0, 0 ) ) +
|
||||
QPoint( -2 - s_textFloat->width(), 8 ) );
|
||||
}
|
||||
else if( m_resizing == TRUE )
|
||||
else if( m_action == MOVE_SELECTION )
|
||||
{
|
||||
const int dx = _me->x() - m_initialMouseX;
|
||||
vvector<selectableObject *> so =
|
||||
m_track->getTrackContainer()->selectedObjects();
|
||||
vvector<trackContentObject *> tcos;
|
||||
midiTime smallest_pos;
|
||||
// find out smallest position of all selected objects for not
|
||||
// moving an object before zero
|
||||
for( vvector<selectableObject *>::iterator it = so.begin();
|
||||
it != so.end(); ++it )
|
||||
{
|
||||
trackContentObject * tco =
|
||||
dynamic_cast<trackContentObject *>( *it );
|
||||
if( tco == NULL )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
tcos.push_back( tco );
|
||||
smallest_pos = tMin<Sint32>( smallest_pos,
|
||||
(Sint32)tco->startPosition() +
|
||||
static_cast<int>( dx * 64 / ppt ) );
|
||||
}
|
||||
for( vvector<trackContentObject *>::iterator it = tcos.begin();
|
||||
it != tcos.end(); ++it )
|
||||
{
|
||||
( *it )->movePosition( ( *it )->startPosition() +
|
||||
static_cast<int>( dx * 64 / ppt ) -
|
||||
smallest_pos );
|
||||
}
|
||||
}
|
||||
else if( m_action == RESIZE )
|
||||
{
|
||||
changeLength( tMax( 64,
|
||||
static_cast<int>( _me->x() * 64 / ppt ) ) );
|
||||
@@ -344,10 +398,10 @@ void trackContentObject::mouseMoveEvent( QMouseEvent * _me )
|
||||
|
||||
void trackContentObject::mouseReleaseEvent( QMouseEvent * _me )
|
||||
{
|
||||
m_action = NONE;
|
||||
s_textFloat->hide();
|
||||
leaveEvent( NULL );
|
||||
m_moving = FALSE;
|
||||
m_resizing = FALSE;
|
||||
selectableObject::mouseReleaseEvent( _me );
|
||||
}
|
||||
|
||||
|
||||
@@ -448,7 +502,6 @@ trackContentWidget::trackContentWidget( trackWidget * _parent ) :
|
||||
#else
|
||||
setPaletteBackgroundColor( QColor( 96, 96, 96 ) );
|
||||
#endif
|
||||
setMouseTracking( TRUE );
|
||||
setAcceptDrops( TRUE );
|
||||
}
|
||||
|
||||
@@ -609,6 +662,7 @@ void trackContentWidget::updateTCOs( void )
|
||||
for( tcoVector::iterator it = m_trackContentObjects.begin();
|
||||
it != m_trackContentObjects.end(); ++it )
|
||||
{
|
||||
( *it )->setFixedHeight( height() - 2 );
|
||||
( *it )->update();
|
||||
}
|
||||
}
|
||||
@@ -638,7 +692,7 @@ void trackContentWidget::dropEvent( QDropEvent * _de )
|
||||
// value contains our XML-data so simply create a
|
||||
// multimediaProject which does the rest for us...
|
||||
multimediaProject mmp( value, FALSE );
|
||||
// at least save position before getting to moved to somewhere
|
||||
// at least save position before getting moved to somewhere
|
||||
// the user doesn't expect...
|
||||
tco->loadSettings( mmp.content().firstChild().toElement() );
|
||||
tco->movePosition( position );
|
||||
@@ -653,7 +707,15 @@ void trackContentWidget::dropEvent( QDropEvent * _de )
|
||||
|
||||
void trackContentWidget::mousePressEvent( QMouseEvent * _me )
|
||||
{
|
||||
if( _me->button() == Qt::LeftButton &&
|
||||
if( getTrack()->getTrackContainer()->allowRubberband() == TRUE )
|
||||
{
|
||||
QWidget::mousePressEvent( _me );
|
||||
}
|
||||
else if( lmmsMainWin::isShiftPressed() == TRUE )
|
||||
{
|
||||
QWidget::mousePressEvent( _me );
|
||||
}
|
||||
else if( _me->button() == Qt::LeftButton &&
|
||||
getTrack()->getTrackContainer()->fixedTCOs() == FALSE )
|
||||
{
|
||||
const midiTime position = getPosition( _me->x() );
|
||||
@@ -666,27 +728,33 @@ void trackContentWidget::mousePressEvent( QMouseEvent * _me )
|
||||
|
||||
|
||||
|
||||
void trackContentWidget::mouseMoveEvent( QMouseEvent * _me )
|
||||
void trackContentWidget::paintEvent( QPaintEvent * _pe )
|
||||
{
|
||||
// if user moved TCO out of visible area, TCO doesn't receive
|
||||
// mouse-events, so we have to do it here
|
||||
while( QApplication::overrideCursor() != NULL )
|
||||
#ifdef QT4
|
||||
QPainter p( this );
|
||||
p.fillRect( rect(), QColor( 96, 96, 96 ) );
|
||||
#else
|
||||
// create pixmap for whole widget
|
||||
QPixmap pm( rect().size() );
|
||||
pm.fill( QColor( 96, 96, 96 ) );
|
||||
|
||||
// and a painter for it
|
||||
QPainter p( &pm );
|
||||
#endif
|
||||
const trackContainer * tc = getTrack()->getTrackContainer();
|
||||
const int offset = (int)( ( tc->currentPosition() % 4 ) *
|
||||
tc->pixelsPerTact() );
|
||||
// draw vertical lines
|
||||
p.setPen( QColor( 128, 128, 128 ) );
|
||||
for( int x = -offset; x < width(); x += (int) tc->pixelsPerTact() )
|
||||
{
|
||||
QApplication::restoreOverrideCursor();
|
||||
p.drawLine( x, 0, x, height() );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void trackContentWidget::mouseReleaseEvent( QMouseEvent * _me )
|
||||
{
|
||||
// if user moved TCO out of visible area, TCO doesn't receive
|
||||
// mouseRelease-events...
|
||||
while( QApplication::overrideCursor() != NULL )
|
||||
{
|
||||
QApplication::restoreOverrideCursor();
|
||||
}
|
||||
#ifndef QT4
|
||||
// blit drawn pixmap to actual widget
|
||||
bitBlt( this, rect().topLeft(), &pm );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -759,7 +827,7 @@ trackOperationsWidget::trackOperationsWidget( trackWidget * _parent ) :
|
||||
m_muteBtn = new pixmapButton( this );
|
||||
m_muteBtn->setActiveGraphic( embed::getIconPixmap( "mute_on" ) );
|
||||
m_muteBtn->setInactiveGraphic( embed::getIconPixmap( "mute_off" ) );
|
||||
m_muteBtn->move( 44, 8 );
|
||||
m_muteBtn->move( 44, 4 );
|
||||
m_muteBtn->show();
|
||||
connect( m_muteBtn, SIGNAL( toggled( bool ) ), this,
|
||||
SLOT( setMuted( bool ) ) );
|
||||
@@ -814,7 +882,7 @@ void trackOperationsWidget::mousePressEvent( QMouseEvent * _me )
|
||||
&m_trackWidget->getTrackSettingsWidget() ),
|
||||
this );
|
||||
}
|
||||
else if( _me->button() == Qt::LeftButton && _me->x() < 10 )
|
||||
else if( _me->button() == Qt::LeftButton )
|
||||
{
|
||||
// track-widget (parent-widget) initiates track-move
|
||||
_me->ignore();
|
||||
@@ -841,14 +909,8 @@ void trackOperationsWidget::paintEvent( QPaintEvent * _pe )
|
||||
if( m_trackWidget->isMovingTrack() == FALSE )
|
||||
{
|
||||
p.drawPixmap( 2, 2, *s_grip );
|
||||
/* if( m_trackOps->isVisible() == FALSE )
|
||||
{*/
|
||||
m_trackOps->show();
|
||||
/* }
|
||||
if( m_muteBtn->isVisible() == FALSE )
|
||||
{*/
|
||||
m_muteBtn->show();
|
||||
// }
|
||||
m_trackOps->show();
|
||||
m_muteBtn->show();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -895,9 +957,9 @@ void trackOperationsWidget::setMuted( bool _muted )
|
||||
void trackOperationsWidget::muteBtnRightClicked( void )
|
||||
{
|
||||
const bool m = muted(); // next function might modify our mute-state,
|
||||
// so save it
|
||||
m_trackWidget->getTrack()->getTrackContainer()->setMutedOfAllTracks(
|
||||
m );
|
||||
// so save it now
|
||||
m_trackWidget->getTrack()->getTrackContainer()->
|
||||
setMutedOfAllTracks( m );
|
||||
setMuted( !m );
|
||||
}
|
||||
|
||||
@@ -916,8 +978,7 @@ trackWidget::trackWidget( track * _track, QWidget * _parent ) :
|
||||
m_trackOperationsWidget( this ),
|
||||
m_trackSettingsWidget( this ),
|
||||
m_trackContentWidget( this ),
|
||||
m_movingTrack( FALSE ),
|
||||
m_initialMouseX( -1 )
|
||||
m_action( NONE )
|
||||
{
|
||||
#ifdef QT4
|
||||
QPalette pal;
|
||||
@@ -937,11 +998,12 @@ trackWidget::trackWidget( track * _track, QWidget * _parent ) :
|
||||
m_trackSettingsWidget.setPalette( pal );
|
||||
#else
|
||||
m_trackSettingsWidget.setPaletteBackgroundColor( QColor( 64, 64, 64 ) );
|
||||
|
||||
|
||||
// set background-mode for flicker-free redraw
|
||||
setBackgroundMode( Qt::NoBackground );
|
||||
#endif
|
||||
setAcceptDrops( TRUE );
|
||||
setMouseTracking( TRUE );
|
||||
}
|
||||
|
||||
|
||||
@@ -954,6 +1016,15 @@ trackWidget::~trackWidget()
|
||||
|
||||
|
||||
|
||||
void trackWidget::repaint( void )
|
||||
{
|
||||
m_trackContentWidget.repaint();
|
||||
QWidget::repaint();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// resposible for moving track-content-widgets to appropriate position after
|
||||
// change of visible viewport
|
||||
void trackWidget::changePosition( const midiTime & _new_pos )
|
||||
@@ -1022,15 +1093,30 @@ void trackWidget::dropEvent( QDropEvent * _de )
|
||||
|
||||
void trackWidget::mousePressEvent( QMouseEvent * _me )
|
||||
{
|
||||
if( _me->button() == Qt::LeftButton )
|
||||
if( m_track->getTrackContainer()->allowRubberband() == TRUE )
|
||||
{
|
||||
m_movingTrack = TRUE;
|
||||
m_initialMouseX = _me->x();
|
||||
QWidget::mousePressEvent( _me );
|
||||
}
|
||||
else if( _me->button() == Qt::LeftButton )
|
||||
{
|
||||
if( lmmsMainWin::isShiftPressed() == TRUE )
|
||||
{
|
||||
m_action = RESIZE_TRACK;
|
||||
QCursor::setPos( mapToGlobal( QPoint( _me->x(),
|
||||
height() ) ) );
|
||||
QCursor c( Qt::SizeVerCursor);
|
||||
QApplication::setOverrideCursor( c );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_action = MOVE_TRACK;
|
||||
|
||||
QCursor c( Qt::SizeAllCursor );
|
||||
QApplication::setOverrideCursor( c );
|
||||
|
||||
m_trackOperationsWidget.update();
|
||||
QCursor c( Qt::SizeAllCursor );
|
||||
QApplication::setOverrideCursor( c );
|
||||
// update because in move-mode, all elements in
|
||||
// track-op-widgets are hidden as a visual feedback
|
||||
m_trackOperationsWidget.update();
|
||||
}
|
||||
|
||||
_me->accept();
|
||||
}
|
||||
@@ -1045,7 +1131,11 @@ void trackWidget::mousePressEvent( QMouseEvent * _me )
|
||||
|
||||
void trackWidget::mouseMoveEvent( QMouseEvent * _me )
|
||||
{
|
||||
if( m_movingTrack == TRUE )
|
||||
if( m_track->getTrackContainer()->allowRubberband() == TRUE )
|
||||
{
|
||||
QWidget::mouseMoveEvent( _me );
|
||||
}
|
||||
else if( m_action == MOVE_TRACK )
|
||||
{
|
||||
trackContainer * tc = m_track->getTrackContainer();
|
||||
// look which track-widget the mouse-cursor is over
|
||||
@@ -1065,6 +1155,11 @@ void trackWidget::mouseMoveEvent( QMouseEvent * _me )
|
||||
}
|
||||
}
|
||||
}
|
||||
else if( m_action == RESIZE_TRACK )
|
||||
{
|
||||
setFixedHeight( tMax<int>( _me->y(), MINIMAL_TRACK_HEIGHT ) );
|
||||
m_track->getTrackContainer()->realignTracks();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1072,12 +1167,14 @@ void trackWidget::mouseMoveEvent( QMouseEvent * _me )
|
||||
|
||||
void trackWidget::mouseReleaseEvent( QMouseEvent * _me )
|
||||
{
|
||||
m_movingTrack = FALSE;
|
||||
m_action = NONE;
|
||||
while( QApplication::overrideCursor() != NULL )
|
||||
{
|
||||
QApplication::restoreOverrideCursor();
|
||||
}
|
||||
m_trackOperationsWidget.update();
|
||||
|
||||
QWidget::mouseReleaseEvent( _me );
|
||||
}
|
||||
|
||||
|
||||
@@ -1226,6 +1323,7 @@ void FASTCALL track::saveSettings( QDomDocument & _doc, QDomElement & _parent )
|
||||
QDomElement track_de = _doc.createElement( "track" );
|
||||
track_de.setAttribute( "type", type() );
|
||||
track_de.setAttribute( "muted", muted() );
|
||||
track_de.setAttribute( "height", m_trackWidget->height() );
|
||||
_parent.appendChild( track_de );
|
||||
|
||||
// let actual track (channelTrack, bbTrack, sampleTrack etc.) save
|
||||
@@ -1275,6 +1373,12 @@ void FASTCALL track::loadSettings( const QDomElement & _this )
|
||||
}
|
||||
node = node.nextSibling();
|
||||
}
|
||||
|
||||
if( _this.attribute( "height" ).toInt() >= MINIMAL_TRACK_HEIGHT )
|
||||
{
|
||||
m_trackWidget->setFixedHeight(
|
||||
_this.attribute( "height" ).toInt() );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1376,13 +1480,6 @@ void FASTCALL track::swapPositionOfTCOs( csize _tco_num1, csize _tco_num2 )
|
||||
|
||||
|
||||
|
||||
#ifndef QT4
|
||||
|
||||
#undef isChecked
|
||||
#undef setChecked
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#include "track.moc"
|
||||
|
||||
|
||||
@@ -58,18 +58,22 @@
|
||||
#include "config_mgr.h"
|
||||
#include "midi_file.h"
|
||||
#include "instrument.h"
|
||||
#include "rubberband.h"
|
||||
|
||||
|
||||
|
||||
trackContainer::trackContainer() :
|
||||
QMainWindow( lmmsMainWin::inst()->workspace()
|
||||
#ifndef QT4
|
||||
#ifdef QT3
|
||||
, 0, Qt::WStyle_Title
|
||||
#endif
|
||||
),
|
||||
settings(),
|
||||
m_currentPosition( 0, 0 ),
|
||||
m_ppt( DEFAULT_PIXELS_PER_TACT )
|
||||
m_scrollArea( new scrollArea( this ) ),
|
||||
m_ppt( DEFAULT_PIXELS_PER_TACT ),
|
||||
m_rubberBand( new rubberBand( m_scrollArea ) ),
|
||||
m_origin()
|
||||
{
|
||||
#ifdef QT4
|
||||
if( lmmsMainWin::inst()->workspace() != NULL )
|
||||
@@ -78,8 +82,8 @@ trackContainer::trackContainer() :
|
||||
}
|
||||
#endif
|
||||
|
||||
m_scrollArea = new scrollArea( this );
|
||||
m_scrollArea->show();
|
||||
m_rubberBand->hide();
|
||||
|
||||
setAcceptDrops( TRUE );
|
||||
}
|
||||
@@ -281,23 +285,20 @@ void trackContainer::realignTracks( bool _complete_update )
|
||||
for( trackWidgetVector::iterator it = m_trackWidgets.begin();
|
||||
it != m_trackWidgets.end(); ++it )
|
||||
{
|
||||
if( _complete_update )
|
||||
{
|
||||
( *it )->hide();
|
||||
}
|
||||
( *it )->show();
|
||||
( *it )->repaint();
|
||||
#ifdef QT4
|
||||
( *it )->move( 0, y );
|
||||
#else
|
||||
m_scrollArea->moveChild( *it, 0, y );
|
||||
#endif
|
||||
( *it )->resize( width(), ( *it )->height() );
|
||||
( *it )->resize( width() - DEFAULT_SCROLLBAR_SIZE,
|
||||
( *it )->height() );
|
||||
( *it )->changePosition( m_currentPosition );
|
||||
y += ( *it )->height();
|
||||
}
|
||||
#ifndef QT4
|
||||
m_scrollArea->resizeContents( m_scrollArea->parentWidget()->width(),
|
||||
y );
|
||||
#ifdef QT3
|
||||
m_scrollArea->resizeContents( width() - DEFAULT_SCROLLBAR_SIZE, y );
|
||||
#endif
|
||||
updateScrollArea();
|
||||
}
|
||||
@@ -324,6 +325,14 @@ const trackWidget * trackContainer::trackWidgetAt( const int _y ) const
|
||||
|
||||
|
||||
|
||||
bool trackContainer::allowRubberband( void ) const
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
unsigned int trackContainer::countTracks( track::trackTypes _tt ) const
|
||||
{
|
||||
unsigned int cnt = 0;
|
||||
@@ -390,14 +399,6 @@ void trackContainer::setPixelsPerTact( Uint16 _ppt )
|
||||
|
||||
|
||||
|
||||
void trackContainer::resizeEvent( QResizeEvent * )
|
||||
{
|
||||
realignTracks();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void trackContainer::dragEnterEvent( QDragEnterEvent * _dee )
|
||||
{
|
||||
stringPairDrag::processDragEnterEvent( _dee,
|
||||
@@ -464,13 +465,56 @@ void trackContainer::dropEvent( QDropEvent * _de )
|
||||
|
||||
|
||||
|
||||
void trackContainer::mousePressEvent( QMouseEvent * _me )
|
||||
{
|
||||
if( allowRubberband() == TRUE )
|
||||
{
|
||||
m_origin = m_scrollArea->mapFromParent( _me->pos() );
|
||||
m_rubberBand->setGeometry( QRect( m_origin, QSize() ) );
|
||||
m_rubberBand->show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void trackContainer::mouseMoveEvent( QMouseEvent * _me )
|
||||
{
|
||||
if( rubberBandActive() == TRUE )
|
||||
{
|
||||
m_rubberBand->setGeometry( QRect( m_origin,
|
||||
m_scrollArea->mapFromParent( _me->pos() ) ).
|
||||
normalized() );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void trackContainer::mouseReleaseEvent( QMouseEvent * _me )
|
||||
{
|
||||
m_rubberBand->hide();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void trackContainer::resizeEvent( QResizeEvent * )
|
||||
{
|
||||
realignTracks();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void trackContainer::updateScrollArea( void )
|
||||
{
|
||||
m_scrollArea->resize( tMax( m_scrollArea->parentWidget()->width() -
|
||||
m_scrollArea->resize( width(), scrollAreaRect().height() );
|
||||
/* m_scrollArea->resize( tMax( m_scrollArea->parentWidget()->width() -
|
||||
m_scrollArea->x() - 2, 0 ),
|
||||
tMax( m_scrollArea->parentWidget()->height() -
|
||||
m_scrollArea->y() - 2, 0 ) );
|
||||
//m_scrollArea->updateContents();
|
||||
m_scrollArea->y() - 2, 0 ) );*/
|
||||
}
|
||||
|
||||
|
||||
@@ -486,6 +530,13 @@ trackContainer::scrollArea::scrollArea( trackContainer * _parent ) :
|
||||
Qt::ScrollBarAlwaysOff
|
||||
#else
|
||||
QScrollArea::AlwaysOff
|
||||
#endif
|
||||
);
|
||||
setVerticalScrollBarPolicy(
|
||||
#ifdef QT4
|
||||
Qt::ScrollBarAlwaysOn
|
||||
#else
|
||||
QScrollArea::AlwaysOn
|
||||
#endif
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1005,7 +1005,7 @@ QString sampleBuffer::openAudioFile( void ) const
|
||||
ofd.selectFile( QFileInfo( m_audioFile ).fileName() );
|
||||
}
|
||||
|
||||
if ( ofd.exec () == QDialog::Accepted )
|
||||
if( ofd.exec () == QDialog::Accepted )
|
||||
{
|
||||
if( ofd.selectedFiles().isEmpty() )
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* bb_track.cpp - implementation of class bbTrack
|
||||
* bb_track.cpp - implementation of class bbTrack and bbTCO
|
||||
*
|
||||
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -49,10 +49,11 @@
|
||||
#include "name_label.h"
|
||||
#include "embed.h"
|
||||
#include "rename_dialog.h"
|
||||
#include "templates.h"
|
||||
|
||||
|
||||
|
||||
QMap<bbTrack *, bbTrack::bbInfoStruct> bbTrack::s_bbNums;
|
||||
bbTrack::infoMap bbTrack::s_infoMap;
|
||||
|
||||
|
||||
bbTCO::bbTCO( track * _track, const QColor & _c ) :
|
||||
@@ -134,6 +135,11 @@ void bbTCO::paintEvent( QPaintEvent * )
|
||||
{
|
||||
col = QColor( 160, 160, 160 );
|
||||
}
|
||||
if( isSelected() == TRUE )
|
||||
{
|
||||
col = QColor( tMax( col.red() - 128, 0 ),
|
||||
tMax( col.green() - 128, 0 ), 255 );
|
||||
}
|
||||
#ifdef QT4
|
||||
QPainter p( this );
|
||||
// TODO: set according brush/pen for gradient!
|
||||
@@ -154,10 +160,10 @@ void bbTCO::paintEvent( QPaintEvent * )
|
||||
|
||||
tact t = bbEditor::inst()->lengthOfBB( bbTrack::numOfBBTrack(
|
||||
getTrack() ) );
|
||||
if( length().getTact() > 1 && t > 0 )
|
||||
if( length() > 64 && t > 0 )
|
||||
{
|
||||
for( int x = TCO_BORDER_WIDTH + static_cast<int>( t *
|
||||
pixelsPerTact() ); x < width();
|
||||
for( int x = static_cast<int>( t * pixelsPerTact() );
|
||||
x < width();
|
||||
x += static_cast<int>( t * pixelsPerTact() ) )
|
||||
{
|
||||
p.setPen( col.light( 80 ) );
|
||||
@@ -273,25 +279,33 @@ void bbTCO::changeColor( void )
|
||||
|
||||
|
||||
|
||||
bbTrack::bbTrack( trackContainer * _tc )
|
||||
: track( _tc )
|
||||
bbTrack::bbTrack( trackContainer * _tc ) :
|
||||
track( _tc )
|
||||
{
|
||||
getTrackWidget()->setFixedHeight( 32 );
|
||||
// drag'n'drop with bb-tracks only causes troubles (and makes no sense
|
||||
// too), so disable it
|
||||
getTrackWidget()->setAcceptDrops( FALSE );
|
||||
|
||||
csize bbNum = s_bbNums.size();
|
||||
bbInfoStruct bis = { bbNum, "" };
|
||||
s_bbNums[this] = bis;
|
||||
csize bbNum = s_infoMap.size();
|
||||
s_infoMap[this] = bbNum;
|
||||
|
||||
m_trackLabel = new nameLabel( tr( "Beat/Bassline %1" ).arg( bbNum ),
|
||||
getTrackSettingsWidget(),
|
||||
embed::getIconPixmap( "bb_track" ) );
|
||||
m_trackLabel->setGeometry( 1, 1, DEFAULT_SETTINGS_WIDGET_WIDTH-2, 29 );
|
||||
getTrackSettingsWidget() );
|
||||
m_trackLabel->setPixmap( embed::getIconPixmap( "bb_track" ) );
|
||||
m_trackLabel->setGeometry( 1, 1, DEFAULT_SETTINGS_WIDGET_WIDTH - 2,
|
||||
29 );
|
||||
m_trackLabel->show();
|
||||
connect( m_trackLabel, SIGNAL( clicked() ), this,
|
||||
SLOT( clickedTrackLabel() ) );
|
||||
connect( m_trackLabel, SIGNAL( clicked() ),
|
||||
this, SLOT( clickedTrackLabel() ) );
|
||||
connect( m_trackLabel, SIGNAL( nameChanged() ),
|
||||
bbEditor::inst(), SLOT( updateComboBox() ) );
|
||||
connect( m_trackLabel, SIGNAL( pixmapChanged() ),
|
||||
bbEditor::inst(), SLOT( updateComboBox() ) );
|
||||
|
||||
|
||||
bbEditor::inst()->setCurrentBB( bbNum );
|
||||
bbEditor::inst()->updateComboBox();
|
||||
|
||||
_tc->updateAfterTrackAdd();
|
||||
}
|
||||
@@ -301,24 +315,24 @@ bbTrack::bbTrack( trackContainer * _tc )
|
||||
|
||||
bbTrack::~bbTrack()
|
||||
{
|
||||
csize bb = s_bbNums[this].num;
|
||||
csize bb = s_infoMap[this];
|
||||
bbEditor::inst()->removeBB( bb );
|
||||
for( QMap<bbTrack *, bbTrack::bbInfoStruct>::iterator it =
|
||||
s_bbNums.begin(); it != s_bbNums.end(); ++it )
|
||||
for( infoMap::iterator it = s_infoMap.begin(); it != s_infoMap.end();
|
||||
++it )
|
||||
{
|
||||
#ifdef QT4
|
||||
if( it.value().num > bb )
|
||||
if( it.value() > bb )
|
||||
{
|
||||
--it.value().num;
|
||||
--it.value();
|
||||
}
|
||||
#else
|
||||
if( it.data().num > bb )
|
||||
if( it.data() > bb )
|
||||
{
|
||||
--it.data().num;
|
||||
--it.data();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
s_bbNums.remove( this );
|
||||
s_infoMap.remove( this );
|
||||
}
|
||||
|
||||
|
||||
@@ -340,7 +354,7 @@ bool FASTCALL bbTrack::play( const midiTime & _start, Uint32 _start_frame,
|
||||
{
|
||||
return( bbEditor::inst()->play( _start, _start_frame, _frames,
|
||||
_frame_base,
|
||||
s_bbNums[this].num ) );
|
||||
s_infoMap[this] ) );
|
||||
}
|
||||
|
||||
vlist<trackContentObject *> tcos;
|
||||
@@ -368,7 +382,7 @@ bool FASTCALL bbTrack::play( const midiTime & _start, Uint32 _start_frame,
|
||||
return( bbEditor::inst()->play( _start - lastPosition,
|
||||
_start_frame, _frames,
|
||||
_frame_base,
|
||||
s_bbNums[this].num ) );
|
||||
s_infoMap[this] ) );
|
||||
}
|
||||
return( FALSE );
|
||||
}
|
||||
@@ -402,10 +416,11 @@ void bbTrack::saveTrackSpecificSettings( QDomDocument & _doc,
|
||||
{
|
||||
QDomElement bbt_de = _doc.createElement( nodeName() );
|
||||
bbt_de.setAttribute( "name", m_trackLabel->text() );
|
||||
/* bbt_de.setAttribute( "current", s_bbNums[this].num ==
|
||||
bbt_de.setAttribute( "icon", m_trackLabel->pixmapFile() );
|
||||
/* bbt_de.setAttribute( "current", s_infoMap[this] ==
|
||||
bbEditor::inst()->currentBB() );*/
|
||||
_parent.appendChild( bbt_de );
|
||||
if( s_bbNums[this].num == 0 &&
|
||||
if( s_infoMap[this] == 0 &&
|
||||
_parent.parentNode().nodeName() != "clone" )
|
||||
{
|
||||
bbEditor::inst()->saveSettings( _doc, bbt_de );
|
||||
@@ -418,6 +433,10 @@ void bbTrack::saveTrackSpecificSettings( QDomDocument & _doc,
|
||||
void bbTrack::loadTrackSpecificSettings( const QDomElement & _this )
|
||||
{
|
||||
m_trackLabel->setText( _this.attribute( "name" ) );
|
||||
if( _this.attribute( "icon" ) != "" )
|
||||
{
|
||||
m_trackLabel->setPixmapFile( _this.attribute( "icon" ) );
|
||||
}
|
||||
if( _this.firstChild().isElement() )
|
||||
{
|
||||
bbEditor::inst()->loadSettings(
|
||||
@@ -428,7 +447,7 @@ void bbTrack::loadTrackSpecificSettings( const QDomElement & _this )
|
||||
help at all....
|
||||
if( _this.attribute( "current" ).toInt() )
|
||||
{
|
||||
bbEditor::inst()->setCurrentBB( s_bbNums[this].num );
|
||||
bbEditor::inst()->setCurrentBB( s_infoMap[this] );
|
||||
}*/
|
||||
}
|
||||
|
||||
@@ -438,14 +457,13 @@ void bbTrack::loadTrackSpecificSettings( const QDomElement & _this )
|
||||
// return pointer to bbTrack specified by _bb_num
|
||||
bbTrack * bbTrack::findBBTrack( csize _bb_num )
|
||||
{
|
||||
for( QMap<bbTrack *, bbTrack::bbInfoStruct>::iterator it =
|
||||
s_bbNums.begin();
|
||||
it != s_bbNums.end(); ++it )
|
||||
for( infoMap::iterator it = s_infoMap.begin(); it != s_infoMap.end();
|
||||
++it )
|
||||
{
|
||||
#ifdef QT4
|
||||
if( it.value().num == _bb_num )
|
||||
if( it.value() == _bb_num )
|
||||
#else
|
||||
if( it.data().num == _bb_num )
|
||||
if( it.data() == _bb_num )
|
||||
#endif
|
||||
{
|
||||
return( it.key() );
|
||||
@@ -461,7 +479,7 @@ csize bbTrack::numOfBBTrack( track * _track )
|
||||
{
|
||||
if( dynamic_cast<bbTrack *>( _track ) != NULL )
|
||||
{
|
||||
return( s_bbNums[dynamic_cast<bbTrack *>( _track )].num );
|
||||
return( s_infoMap[dynamic_cast<bbTrack *>( _track )] );
|
||||
}
|
||||
return( 0 );
|
||||
}
|
||||
@@ -475,9 +493,9 @@ void bbTrack::swapBBTracks( track * _track1, track * _track2 )
|
||||
bbTrack * t2 = dynamic_cast<bbTrack *>( _track2 );
|
||||
if( t1 != NULL && t2 != NULL )
|
||||
{
|
||||
qSwap( s_bbNums[t1].num, s_bbNums[t2].num );
|
||||
bbEditor::inst()->swapBB( s_bbNums[t1].num, s_bbNums[t2].num );
|
||||
bbEditor::inst()->setCurrentBB( s_bbNums[t2].num );
|
||||
qSwap( s_infoMap[t1], s_infoMap[t2] );
|
||||
bbEditor::inst()->swapBB( s_infoMap[t1], s_infoMap[t2] );
|
||||
bbEditor::inst()->setCurrentBB( s_infoMap[t2] );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -486,7 +504,7 @@ void bbTrack::swapBBTracks( track * _track1, track * _track2 )
|
||||
|
||||
void bbTrack::clickedTrackLabel( void )
|
||||
{
|
||||
bbEditor::inst()->setCurrentBB( s_bbNums[this].num );
|
||||
bbEditor::inst()->setCurrentBB( s_infoMap[this] );
|
||||
bbEditor::inst()->show();
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* pattern.cpp - implementation of class pattern which holds notes
|
||||
*
|
||||
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2005 Danny McRae <khjklujn@yahoo.com>
|
||||
* Copyright (c) 2005 Danny McRae <khjklujn/at/yahoo.com>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -69,7 +69,6 @@
|
||||
#include "string_pair_drag.h"
|
||||
|
||||
|
||||
QPixmap * pattern::s_patternBg = NULL;
|
||||
QPixmap * pattern::s_stepBtnOn = NULL;
|
||||
QPixmap * pattern::s_stepBtnOverlay = NULL;
|
||||
QPixmap * pattern::s_stepBtnOff = NULL;
|
||||
@@ -78,9 +77,10 @@ QPixmap * pattern::s_frozen = NULL;
|
||||
|
||||
|
||||
|
||||
|
||||
pattern::pattern ( channelTrack * _channel_track ) :
|
||||
trackContentObject( _channel_track ),
|
||||
m_paintPixmap(),
|
||||
m_needsUpdate( TRUE ),
|
||||
m_channelTrack( _channel_track ),
|
||||
m_patternType( BEAT_PATTERN ),
|
||||
m_name( _channel_track->name() ),
|
||||
@@ -98,6 +98,8 @@ pattern::pattern ( channelTrack * _channel_track ) :
|
||||
|
||||
pattern::pattern( const pattern & _pat_to_copy ) :
|
||||
trackContentObject( _pat_to_copy.m_channelTrack ),
|
||||
m_paintPixmap(),
|
||||
m_needsUpdate( TRUE ),
|
||||
m_channelTrack( _pat_to_copy.m_channelTrack ),
|
||||
m_patternType( _pat_to_copy.m_patternType ),
|
||||
m_name( "" ),
|
||||
@@ -142,31 +144,30 @@ pattern::~pattern()
|
||||
|
||||
void pattern::init( void )
|
||||
{
|
||||
if( s_patternBg == NULL )
|
||||
{
|
||||
s_patternBg = new QPixmap( embed::getIconPixmap(
|
||||
"pattern_bg" ) );
|
||||
}
|
||||
if( s_stepBtnOn == NULL )
|
||||
{
|
||||
s_stepBtnOn = new QPixmap( embed::getIconPixmap(
|
||||
"step_btn_on_100" ) );
|
||||
}
|
||||
|
||||
if( s_stepBtnOverlay == NULL )
|
||||
{
|
||||
s_stepBtnOverlay = new QPixmap( embed::getIconPixmap(
|
||||
"step_btn_on_yellow" ) );
|
||||
}
|
||||
|
||||
if( s_stepBtnOff == NULL )
|
||||
{
|
||||
s_stepBtnOff = new QPixmap( embed::getIconPixmap(
|
||||
"step_btn_off" ) );
|
||||
}
|
||||
|
||||
if( s_stepBtnOffLight == NULL )
|
||||
{
|
||||
s_stepBtnOffLight = new QPixmap( embed::getIconPixmap(
|
||||
"step_btn_off_light" ) );
|
||||
}
|
||||
|
||||
if( s_frozen == NULL )
|
||||
{
|
||||
s_frozen = new QPixmap( embed::getIconPixmap( "frozen" ) );
|
||||
@@ -174,14 +175,14 @@ void pattern::init( void )
|
||||
|
||||
ensureBeatNotes();
|
||||
|
||||
changeLength( length() );
|
||||
|
||||
#ifndef QT4
|
||||
// set background-mode for flicker-free redraw
|
||||
setBackgroundMode( Qt::NoBackground );
|
||||
#endif
|
||||
|
||||
setFixedHeight( s_patternBg->height() + 4 );
|
||||
changeLength( length() );
|
||||
|
||||
setFixedHeight( parentWidget()->height() - 2 );
|
||||
setAutoResizeEnabled( FALSE );
|
||||
|
||||
toolTip::add( this,
|
||||
@@ -192,15 +193,6 @@ void pattern::init( void )
|
||||
|
||||
|
||||
|
||||
void pattern::movePosition( const midiTime & _pos )
|
||||
{
|
||||
// patterns are always aligned on tact-boundaries
|
||||
trackContentObject::movePosition( midiTime( _pos.getTact(), 0 ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
midiTime pattern::length( void ) const
|
||||
{
|
||||
if( m_patternType == BEAT_PATTERN )
|
||||
@@ -319,6 +311,10 @@ void pattern::clearNotes( void )
|
||||
m_notes.clear();
|
||||
checkType();
|
||||
update();
|
||||
if( pianoRoll::inst()->currentPattern() == this )
|
||||
{
|
||||
pianoRoll::inst()->update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -474,6 +470,15 @@ void pattern::loadSettings( const QDomElement & _this )
|
||||
|
||||
|
||||
|
||||
void pattern::update( void )
|
||||
{
|
||||
m_needsUpdate = TRUE;
|
||||
changeLength( length() );
|
||||
trackContentObject::update();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void pattern::openInPianoRoll( void )
|
||||
{
|
||||
@@ -488,7 +493,6 @@ void pattern::openInPianoRoll( bool )
|
||||
pianoRoll::inst()->setCurrentPattern( this );
|
||||
pianoRoll::inst()->show();
|
||||
pianoRoll::inst()->setFocus();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -582,6 +586,7 @@ void pattern::unfreeze( void )
|
||||
delete m_frozenPattern;
|
||||
m_frozenPattern = NULL;
|
||||
m_frozenPatternMutex.unlock();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -870,22 +875,54 @@ void pattern::wheelEvent( QWheelEvent * _we )
|
||||
|
||||
void pattern::paintEvent( QPaintEvent * )
|
||||
{
|
||||
if( m_needsUpdate == FALSE )
|
||||
{
|
||||
QPainter p( this );
|
||||
p.drawPixmap( 0, 0, m_paintPixmap );
|
||||
return;
|
||||
}
|
||||
|
||||
changeLength( length() );
|
||||
|
||||
#ifdef QT4
|
||||
QPainter p( this );
|
||||
#else
|
||||
// create pixmap for whole widget
|
||||
QPixmap pm( rect().size() );
|
||||
m_needsUpdate = FALSE;
|
||||
|
||||
// and a painter for it
|
||||
QPainter p( &pm );
|
||||
if( m_paintPixmap.isNull() == TRUE || m_paintPixmap.size() != size() )
|
||||
{
|
||||
m_paintPixmap = QPixmap( size() );
|
||||
}
|
||||
|
||||
QPainter p( &m_paintPixmap );
|
||||
#ifdef QT4
|
||||
// TODO: gradient!
|
||||
#else
|
||||
for( int y = 1; y < height() / 2; ++y )
|
||||
{
|
||||
const int gray = 96 - y * 192 / height();
|
||||
if( isSelected() == TRUE )
|
||||
{
|
||||
p.setPen( QColor( 0, 0, 128 + gray ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
p.setPen( QColor( gray, gray, gray ) );
|
||||
}
|
||||
p.drawLine( 1, y, width() - 1, y );
|
||||
}
|
||||
for( int y = height() / 2; y < height() - 1; ++y )
|
||||
{
|
||||
const int gray = ( y - height() / 2 ) * 192 / height();
|
||||
if( isSelected() == TRUE )
|
||||
{
|
||||
p.setPen( QColor( 0, 0, 128 + gray ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
p.setPen( QColor( gray, gray, gray ) );
|
||||
}
|
||||
p.drawLine( 1, y, width() - 1, y );
|
||||
}
|
||||
#endif
|
||||
|
||||
for( Sint16 x = 2; x < width() - 1; x += 2 )
|
||||
{
|
||||
p.drawPixmap( x, 2, *s_patternBg );
|
||||
}
|
||||
p.setPen( QColor( 57, 69, 74 ) );
|
||||
p.drawLine( 0, 0, width(), 0 );
|
||||
p.drawLine( 0, 0, 0, height() );
|
||||
@@ -896,7 +933,7 @@ void pattern::paintEvent( QPaintEvent * )
|
||||
p.setPen( QColor( 0, 0, 0 ) );
|
||||
p.drawRect( 1, 1, width() - 2, height() - 2 );
|
||||
|
||||
float ppt = pixelsPerTact();
|
||||
const float ppt = pixelsPerTact();
|
||||
|
||||
if( m_patternType == pattern::MELODY_PATTERN )
|
||||
{
|
||||
@@ -920,7 +957,7 @@ void pattern::paintEvent( QPaintEvent * )
|
||||
{
|
||||
central_key = central_key / total_notes;
|
||||
|
||||
Sint16 central_y = s_patternBg->height() / 2;
|
||||
Sint16 central_y = height() / 2;
|
||||
Sint16 y_base = central_y + TCO_BORDER_WIDTH -1;
|
||||
|
||||
const Sint16 x_base = TCO_BORDER_WIDTH;
|
||||
@@ -929,12 +966,13 @@ void pattern::paintEvent( QPaintEvent * )
|
||||
for( tact tact_num = 1; tact_num <
|
||||
length().getTact(); ++tact_num )
|
||||
{
|
||||
p.drawLine( x_base + static_cast<int>(
|
||||
ppt*tact_num ),
|
||||
TCO_BORDER_WIDTH,
|
||||
x_base +
|
||||
static_cast<int>( ppt * tact_num ),
|
||||
height() - 2 *
|
||||
p.drawLine(
|
||||
x_base + static_cast<int>(
|
||||
ppt * tact_num ) - 1,
|
||||
TCO_BORDER_WIDTH,
|
||||
x_base + static_cast<int>(
|
||||
ppt * tact_num ) - 1,
|
||||
height() - 2 *
|
||||
TCO_BORDER_WIDTH );
|
||||
}
|
||||
if( getTrack()->muted() )
|
||||
@@ -973,42 +1011,42 @@ void pattern::paintEvent( QPaintEvent * )
|
||||
}
|
||||
}
|
||||
else if( m_patternType == pattern::BEAT_PATTERN &&
|
||||
( ppt >= 192 || m_steps != DEFAULT_STEPS_PER_TACT ) )
|
||||
( ppt >= 96 || m_steps != DEFAULT_STEPS_PER_TACT ) )
|
||||
{
|
||||
QPixmap stepon;
|
||||
QPixmap stepoverlay;
|
||||
QPixmap stepoff;
|
||||
QPixmap stepoffl;
|
||||
int steps = length() / BEATS_PER_TACT;
|
||||
|
||||
const int steps = length() / BEATS_PER_TACT;
|
||||
const int w = width() - 2 * TCO_BORDER_WIDTH;
|
||||
#ifdef QT4
|
||||
stepon = s_stepBtnOn->scaled( width() / steps,
|
||||
stepon = s_stepBtnOn->scaled( w / steps,
|
||||
s_stepBtnOn->height(),
|
||||
Qt::IgnoreAspectRatio,
|
||||
Qt::SmoothTransformation );
|
||||
stepoverlay = s_stepBtnOverlay->scaled( width() / steps,
|
||||
stepoverlay = s_stepBtnOverlay->scaled( w / steps,
|
||||
s_stepBtnOn->height(),
|
||||
Qt::IgnoreAspectRatio,
|
||||
Qt::SmoothTransformation );
|
||||
stepoff = s_stepBtnOff->scaled( width() / steps,
|
||||
stepoff = s_stepBtnOff->scaled( w / steps,
|
||||
s_stepBtnOff->height(),
|
||||
Qt::IgnoreAspectRatio,
|
||||
Qt::SmoothTransformation );
|
||||
stepoffl = s_stepBtnOffLight->scaled( width() / steps,
|
||||
stepoffl = s_stepBtnOffLight->scaled( w / steps,
|
||||
s_stepBtnOffLight->height(),
|
||||
Qt::IgnoreAspectRatio,
|
||||
Qt::SmoothTransformation );
|
||||
#else
|
||||
stepon.convertFromImage(
|
||||
s_stepBtnOn->convertToImage().scale(
|
||||
width() / steps, s_stepBtnOn->height() ) );
|
||||
w / steps, s_stepBtnOn->height() ) );
|
||||
stepoverlay.convertFromImage(
|
||||
s_stepBtnOverlay->convertToImage().scale(
|
||||
width() / steps, s_stepBtnOverlay->height() ) );
|
||||
w / steps, s_stepBtnOverlay->height() ) );
|
||||
stepoff.convertFromImage( s_stepBtnOff->convertToImage().scale(
|
||||
width() / steps, s_stepBtnOff->height() ) );
|
||||
w / steps, s_stepBtnOff->height() ) );
|
||||
stepoffl.convertFromImage( s_stepBtnOffLight->convertToImage().
|
||||
scale( width() / steps,
|
||||
scale( w / steps,
|
||||
s_stepBtnOffLight->height() ) );
|
||||
#endif
|
||||
for( noteVector::iterator it = m_notes.begin();
|
||||
@@ -1016,7 +1054,7 @@ void pattern::paintEvent( QPaintEvent * )
|
||||
{
|
||||
Sint16 no = it - m_notes.begin();
|
||||
Sint16 x = TCO_BORDER_WIDTH + static_cast<int>( no *
|
||||
width() / steps );
|
||||
w / steps );
|
||||
Sint16 y = height() - s_stepBtnOff->height() - 1;
|
||||
|
||||
Uint8 vol = ( *it )->getVolume();
|
||||
@@ -1055,10 +1093,11 @@ void pattern::paintEvent( QPaintEvent * )
|
||||
p.drawPixmap( 3, height() - s_frozen->height() - 4, *s_frozen );
|
||||
}
|
||||
|
||||
#ifndef QT4
|
||||
// blit drawn pixmap to actual widget
|
||||
bitBlt( this, rect().topLeft(), &pm );
|
||||
#endif
|
||||
p.end();
|
||||
|
||||
p.begin( this );
|
||||
p.drawPixmap( 0, 0, m_paintPixmap );
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1223,6 +1262,7 @@ patternFreezeThread::patternFreezeThread( pattern * _pattern ) :
|
||||
|
||||
patternFreezeThread::~patternFreezeThread()
|
||||
{
|
||||
m_pattern->update();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* sample_track.cpp - implementation of class sampleTrack, a track which
|
||||
* provides arrangement of samples
|
||||
*
|
||||
* Copyright (c) 2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2005-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -186,17 +186,29 @@ void sampleTCO::paintEvent( QPaintEvent * )
|
||||
{
|
||||
#ifdef QT4
|
||||
QPainter p( this );
|
||||
// TODO: set according brush/pen for gradient!
|
||||
p.fillRect( rect(), QColor( 64, 64, 64 ) );
|
||||
#else
|
||||
// create pixmap for whole widget
|
||||
QPixmap pm( size() );
|
||||
// and a painter for it
|
||||
QPainter p( &pm );
|
||||
#endif
|
||||
QPixmap bg = embed::getIconPixmap( "sample_track_bg" );
|
||||
for( Sint16 x = 1; x < width() - 1; x += 10 )
|
||||
|
||||
for( int y = 1; y < height() - 1; ++y )
|
||||
{
|
||||
p.drawPixmap( x, 1, bg );
|
||||
const int gray = 96 - y * 96 / height();
|
||||
if( isSelected() == TRUE )
|
||||
{
|
||||
p.setPen( QColor( 0, 0, 128 + gray ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
p.setPen( QColor( gray, gray, gray ) );
|
||||
}
|
||||
p.drawLine( 1, y, width() - 1, y );
|
||||
}
|
||||
#endif
|
||||
|
||||
p.setPen( QColor( 0, 0, 0 ) );
|
||||
p.drawRect( 0, 0, width(), height() );
|
||||
if( getTrack()->muted() )
|
||||
@@ -348,9 +360,8 @@ sampleTrack::sampleTrack( trackContainer * _tc ) :
|
||||
getTrackWidget()->setFixedHeight( 32 );
|
||||
|
||||
m_trackLabel = new nameLabel( tr( "Sample track" ),
|
||||
getTrackSettingsWidget(),
|
||||
embed::getIconPixmap(
|
||||
"sample_track" ) );
|
||||
getTrackSettingsWidget() );
|
||||
m_trackLabel->setPixmap( embed::getIconPixmap( "sample_track" ) );
|
||||
m_trackLabel->setGeometry( 1, 1, DEFAULT_SETTINGS_WIDGET_WIDTH-2, 29 );
|
||||
m_trackLabel->show();
|
||||
|
||||
@@ -438,6 +449,7 @@ void sampleTrack::saveTrackSpecificSettings( QDomDocument & _doc,
|
||||
{
|
||||
QDomElement st_de = _doc.createElement( nodeName() );
|
||||
st_de.setAttribute( "name", m_trackLabel->text() );
|
||||
st_de.setAttribute( "icon", m_trackLabel->pixmapFile() );
|
||||
_parent.appendChild( st_de );
|
||||
}
|
||||
|
||||
@@ -447,6 +459,10 @@ void sampleTrack::saveTrackSpecificSettings( QDomDocument & _doc,
|
||||
void sampleTrack::loadTrackSpecificSettings( const QDomElement & _this )
|
||||
{
|
||||
m_trackLabel->setText( _this.attribute( "name" ) );
|
||||
if( _this.attribute( "icon" ) != "" )
|
||||
{
|
||||
m_trackLabel->setPixmapFile( _this.attribute( "icon" ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
294
src/widgets/combobox.cpp
Normal file
294
src/widgets/combobox.cpp
Normal file
@@ -0,0 +1,294 @@
|
||||
/*
|
||||
* combobox.cpp - implementation of LMMS-combobox
|
||||
*
|
||||
* Copyright (c) 2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this program (see COPYING); if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include "combobox.h"
|
||||
#include "templates.h"
|
||||
#include "embed.h"
|
||||
#include "gui_templates.h"
|
||||
|
||||
#ifndef QT3
|
||||
|
||||
#include <QPainter>
|
||||
#include <QPixmap>
|
||||
#include <QApplication>
|
||||
#include <QDesktopWidget>
|
||||
|
||||
#else
|
||||
|
||||
#include <qpainter.h>
|
||||
#include <qpixmap.h>
|
||||
#include <qimage.h>
|
||||
#include <qapplication.h>
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
QPixmap * comboBox::s_background = NULL;
|
||||
QPixmap * comboBox::s_arrow = NULL;
|
||||
|
||||
const int CB_ARROW_BTN_WIDTH = 20;
|
||||
|
||||
|
||||
comboBox::comboBox( QWidget * _parent ) :
|
||||
QWidget( _parent ),
|
||||
m_menu( this ),
|
||||
m_currentIndex( 0 ),
|
||||
m_pressed( FALSE )
|
||||
{
|
||||
if( s_background == NULL )
|
||||
{
|
||||
s_background = new QPixmap( embed::getIconPixmap(
|
||||
"combobox_bg" ) );
|
||||
}
|
||||
|
||||
if( s_arrow == NULL )
|
||||
{
|
||||
s_arrow = new QPixmap( embed::getIconPixmap(
|
||||
"combobox_arrow" ) );
|
||||
}
|
||||
|
||||
setFont( pointSize<8>( font() ) );
|
||||
m_menu.setFont( pointSize<8>( m_menu.font() ) );
|
||||
|
||||
#ifndef QT3
|
||||
connect( &m_menu, SIGNAL( triggered( QAction * ) ),
|
||||
this, SLOT( setItem( QAction * ) ) );
|
||||
#else
|
||||
connect( &m_menu, SIGNAL( activated( int ) ),
|
||||
this, SLOT( setItem( int ) ) );
|
||||
#endif
|
||||
|
||||
#ifdef QT3
|
||||
setBackgroundMode( NoBackground );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
comboBox::~comboBox()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void comboBox::addItem( const QString & _item, const QPixmap & _pixmap )
|
||||
{
|
||||
QPixmap pm = _pixmap;
|
||||
if( pm.height() > 16 )
|
||||
{
|
||||
#ifndef QT3
|
||||
pm = pm.scaledToHeight( 16, Qt::SmoothTransformation );
|
||||
#else
|
||||
pm.convertFromImage( pm.convertToImage().smoothScale(
|
||||
pm.width(), 16,
|
||||
QImage::ScaleMin ) );
|
||||
#endif
|
||||
}
|
||||
m_items.push_back( qMakePair( _item, pm ) );
|
||||
m_menu.clear();
|
||||
for( vvector<item>::iterator it = m_items.begin();
|
||||
it != m_items.end(); ++it )
|
||||
{
|
||||
m_menu.addItem( ( *it ).second, ( *it ).first
|
||||
// when using Qt3, we pass item-index as id for using
|
||||
// it in setItem( int ) as index
|
||||
#ifdef QT3
|
||||
, it - m_items.begin()
|
||||
#endif
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int comboBox::findText( const QString & _txt ) const
|
||||
{
|
||||
for( vvector<item>::const_iterator it = m_items.begin();
|
||||
it != m_items.end(); ++it )
|
||||
{
|
||||
if( ( *it ).first == _txt )
|
||||
{
|
||||
return( it - m_items.begin() );
|
||||
}
|
||||
}
|
||||
return( -1 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void comboBox::setCurrentIndex( int _idx )
|
||||
{
|
||||
m_currentIndex = tLimit<int>( _idx, 0, ( m_items.size() > 0 ) ?
|
||||
m_items.size() - 1 : 0 );
|
||||
emit( currentIndexChanged( m_currentIndex ) );
|
||||
emit( activated( ( m_items.size() > 0 ) ?
|
||||
m_items[m_currentIndex].first : "" ) );
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void comboBox::mousePressEvent( QMouseEvent * _me )
|
||||
{
|
||||
if( _me->x() > width() - CB_ARROW_BTN_WIDTH )
|
||||
{
|
||||
m_pressed = TRUE;
|
||||
update();
|
||||
|
||||
QPoint gpos = mapToGlobal( QPoint( 0, height() ) );
|
||||
if( gpos.y() + m_menu.sizeHint().height() <
|
||||
qApp->desktop()->height() )
|
||||
{
|
||||
m_menu.exec( gpos );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_menu.exec( mapToGlobal( QPoint( width(), 0 ) ) );
|
||||
}
|
||||
m_pressed = FALSE;
|
||||
update();
|
||||
}
|
||||
else if( _me->button() == Qt::LeftButton )
|
||||
{
|
||||
setCurrentIndex( currentIndex() + 1 );
|
||||
}
|
||||
else if( _me->button() == Qt::RightButton )
|
||||
{
|
||||
setCurrentIndex( currentIndex() - 1 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void comboBox::paintEvent( QPaintEvent * _pe )
|
||||
{
|
||||
#ifndef QT3
|
||||
QPainter p( this );
|
||||
#else
|
||||
QPixmap draw_pm( rect().size() );
|
||||
QPainter p( &draw_pm, this );
|
||||
#endif
|
||||
p.fillRect( rect(), QColor( 0, 0, 0 ) );
|
||||
|
||||
for( int x = 2; x < width() - 2; x += s_background->width() )
|
||||
{
|
||||
p.drawPixmap( x, 2, *s_background );
|
||||
}
|
||||
|
||||
p.setPen( QColor( 0, 0, 0 ) );
|
||||
p.drawLine( width() - 2, 1, width() - 2, height() - 2 );
|
||||
|
||||
// outer rect
|
||||
p.setPen( QColor( 64, 64, 64 ) );
|
||||
p.drawRect( 0, 0, width(), height() );
|
||||
|
||||
// button-separator
|
||||
p.setPen( QColor( 64, 64, 64 ) );
|
||||
p.drawLine( width() - CB_ARROW_BTN_WIDTH - 1, 0, width() -
|
||||
CB_ARROW_BTN_WIDTH - 1, height() - 2 );
|
||||
p.setPen( QColor( 0, 0, 0 ) );
|
||||
p.drawLine( width() - CB_ARROW_BTN_WIDTH, 0, width() -
|
||||
CB_ARROW_BTN_WIDTH, height() - 2 );
|
||||
|
||||
// brighter line at bottom/right
|
||||
p.setPen( QColor( 160, 160, 160 ) );
|
||||
p.drawLine( width() - 1, 0, width() - 1, height() - 1 );
|
||||
p.drawLine( 0, height() - 1, width() - 1, height() - 1 );
|
||||
|
||||
const int dxy = ( m_pressed == TRUE ) ? 1 : 0;
|
||||
p.drawPixmap( width() - CB_ARROW_BTN_WIDTH + 4 + dxy, 4 + dxy,
|
||||
*s_arrow );
|
||||
|
||||
if( m_items.size() > 0 )
|
||||
{
|
||||
p.setPen( QColor( 224, 224, 224 ) );
|
||||
p.setFont( font() );
|
||||
p.setClipRect( QRect( 5, 2, width() - CB_ARROW_BTN_WIDTH - 8,
|
||||
height() - 2 ) );
|
||||
const QPixmap & item_pm = m_items[currentIndex()].second;
|
||||
int tx = 4;
|
||||
if( item_pm.isNull() == FALSE )
|
||||
{
|
||||
p.drawPixmap( tx, 3, item_pm );
|
||||
tx += item_pm.width() + 2;
|
||||
}
|
||||
p.drawText( tx, p.fontMetrics().height(),
|
||||
m_items[currentIndex()].first );
|
||||
}
|
||||
|
||||
#ifdef QT3
|
||||
// and blit all the drawn stuff on the screen...
|
||||
bitBlt( this, rect().topLeft(), &draw_pm );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void comboBox::wheelEvent( QWheelEvent * _we )
|
||||
{
|
||||
setCurrentIndex( currentIndex() + ( ( _we->delta() < 0 ) ? 1 : -1 ) );
|
||||
_we->accept();
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifndef QT3
|
||||
|
||||
void comboBox::setItem( QAction * _item )
|
||||
{
|
||||
setCurrentIndex( findText( _item->text() ) );
|
||||
}
|
||||
|
||||
|
||||
void comboBox::setItem( int )
|
||||
{
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void comboBox::setItem( QAction * )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void comboBox::setItem( int _item )
|
||||
{
|
||||
setCurrentIndex( _item );
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#include "combobox.moc"
|
||||
|
||||
@@ -88,11 +88,7 @@ void pixmapButton::paintEvent( QPaintEvent * )
|
||||
p.drawPixmap( 0, 0, *m_bgPixmap );
|
||||
}
|
||||
|
||||
#ifdef QT4
|
||||
if( isChecked() || isDown() )
|
||||
#else
|
||||
if( isOn() || isDown() )
|
||||
#endif
|
||||
{
|
||||
if( m_activePixmap != NULL )
|
||||
{
|
||||
|
||||
153
src/widgets/rubberband.cpp
Normal file
153
src/widgets/rubberband.cpp
Normal file
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* rubberband.cpp - rubberband - either own implementation for Qt3 or wrapper
|
||||
* for Qt4
|
||||
*
|
||||
* Copyright (c) 2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this program (see COPYING); if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include "rubberband.h"
|
||||
|
||||
#ifdef QT3
|
||||
|
||||
#include <qbitmap.h>
|
||||
#include <qevent.h>
|
||||
#include <qobjectlist.h>
|
||||
#include <qpainter.h>
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
rubberBand::rubberBand( QWidget * _parent ) :
|
||||
#ifndef QT3
|
||||
QRubberBand( Rectangle, _parent )
|
||||
#else
|
||||
QWidget( _parent )
|
||||
#endif
|
||||
{
|
||||
#ifdef QT3
|
||||
setBackgroundColor( QColor( 0, 64, 255 ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
rubberBand::~rubberBand()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
vvector<selectableObject *> rubberBand::selectedObjects( void ) const
|
||||
{
|
||||
vvector<selectableObject *> so = selectableObjects();
|
||||
for( vvector<selectableObject *>::iterator it = so.begin();
|
||||
it != so.end(); )
|
||||
{
|
||||
if( ( *it )->isSelected() == FALSE )
|
||||
{
|
||||
so.erase( it );
|
||||
}
|
||||
else
|
||||
{
|
||||
++it;
|
||||
}
|
||||
}
|
||||
return( so );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void rubberBand::resizeEvent( QResizeEvent * _re )
|
||||
{
|
||||
rubberBandBase::resizeEvent( _re );
|
||||
#ifdef QT3
|
||||
updateMask();
|
||||
#endif
|
||||
vvector<selectableObject *> so = selectableObjects();
|
||||
for( vvector<selectableObject *>::iterator it = so.begin();
|
||||
it != so.end(); ++it )
|
||||
{
|
||||
( *it )->setSelected( QRect( pos(), size() ).intersects(
|
||||
QRect( ( *it )->mapTo( parentWidget(),
|
||||
QPoint() ),
|
||||
( *it )->size() ) ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef QT3
|
||||
|
||||
bool rubberBand::event( QEvent * _e )
|
||||
{
|
||||
bool ret = QWidget::event( _e );
|
||||
if( isVisible() == TRUE )
|
||||
{
|
||||
raise();
|
||||
}
|
||||
return( ret );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void rubberBand::updateMask( void )
|
||||
{
|
||||
QBitmap rb_mask( size(), TRUE );
|
||||
QPainter p( &rb_mask );
|
||||
p.setPen( Qt::color1 );
|
||||
p.drawRect( 0, 0, width() - 1, height() - 1 );
|
||||
p.end();
|
||||
setMask( rb_mask );
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
vvector<selectableObject *> rubberBand::selectableObjects( void ) const
|
||||
{
|
||||
vvector<selectableObject *> so;
|
||||
if( parentWidget() == NULL )
|
||||
{
|
||||
return( so );
|
||||
}
|
||||
QObjectList * l = parentWidget()->queryList( "selectableObject" );
|
||||
for( QObjectListIt it = *l; it.current() != NULL; ++it )
|
||||
{
|
||||
so.push_back( static_cast<selectableObject *>( *it ) );
|
||||
}
|
||||
delete l;
|
||||
return( so );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#include "rubberband.moc"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user