using list instead of vector so we can rearrange labels better

This commit is contained in:
fluxgen 2003-07-28 12:11:57 +00:00
parent 7c76910844
commit 88c3562634
2 changed files with 64 additions and 20 deletions

View file

@ -19,7 +19,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: FbWinFrame.cc,v 1.31 2003/07/26 16:17:01 rathnor Exp $
// $Id: FbWinFrame.cc,v 1.32 2003/07/28 12:11:57 fluxgen Exp $
#include "FbWinFrame.hh"
#include "ImageControl.hh"
@ -244,9 +244,9 @@ void FbWinFrame::removeAllButtons() {
}
void FbWinFrame::addLabelButton(FbTk::Button &btn) {
ButtonList::iterator found_it = find(m_labelbuttons.begin(),
m_labelbuttons.end(),
&btn);
LabelList::iterator found_it = find(m_labelbuttons.begin(),
m_labelbuttons.end(),
&btn);
if (found_it != m_labelbuttons.end())
return;
@ -255,19 +255,57 @@ void FbWinFrame::addLabelButton(FbTk::Button &btn) {
}
void FbWinFrame::removeLabelButton(FbTk::Button &btn) {
ButtonList::iterator erase_it = remove(m_labelbuttons.begin(),
m_labelbuttons.end(),
&btn);
LabelList::iterator erase_it = remove(m_labelbuttons.begin(),
m_labelbuttons.end(),
&btn);
if (erase_it == m_labelbuttons.end())
return;
m_labelbuttons.erase(erase_it);
}
void FbWinFrame::setLabelButtonFocus(FbTk::Button &btn) {
ButtonList::iterator it = find(m_labelbuttons.begin(),
void FbWinFrame::moveLabelButtonLeft(const FbTk::Button &btn) {
LabelList::iterator it = find(m_labelbuttons.begin(),
m_labelbuttons.end(),
&btn);
// make sure we found it and we're not at the begining
if (it == m_labelbuttons.end() || it == m_labelbuttons.begin())
return;
LabelList::iterator new_pos = it;
new_pos--;
FbTk::Button *item = *it;
// remove from list
m_labelbuttons.erase(it);
// insert on the new place
m_labelbuttons.insert(new_pos, item);
// update titlebar
redrawTitle();
}
void FbWinFrame::moveLabelButtonRight(const FbTk::Button &btn) {
LabelList::iterator it = find(m_labelbuttons.begin(),
m_labelbuttons.end(),
&btn);
// make sure we found it and we're not at the last item
if (it == m_labelbuttons.end() || *it == m_labelbuttons.back())
return;
FbTk::Button *item = *it;
// remove from list
LabelList::iterator new_pos = m_labelbuttons.erase(it);
new_pos++;
// insert on the new place
m_labelbuttons.insert(new_pos, item);
// update titlebar
redrawTitle();
}
void FbWinFrame::setLabelButtonFocus(FbTk::Button &btn) {
LabelList::iterator it = find(m_labelbuttons.begin(),
m_labelbuttons.end(),
&btn);
if (it == m_labelbuttons.end())
return;
@ -410,8 +448,8 @@ void FbWinFrame::removeEventHandler() {
void FbWinFrame::buttonPressEvent(XButtonEvent &event) {
// we can ignore which window the event was generated for
ButtonList::iterator btn_it = m_labelbuttons.begin();
ButtonList::iterator btn_it_end = m_labelbuttons.end();
LabelList::iterator btn_it = m_labelbuttons.begin();
LabelList::iterator btn_it_end = m_labelbuttons.end();
for (; btn_it != btn_it_end; ++btn_it) {
if ((*btn_it)->window() == event.window) {
(*btn_it)->buttonPressEvent(event);
@ -434,8 +472,8 @@ void FbWinFrame::buttonPressEvent(XButtonEvent &event) {
void FbWinFrame::buttonReleaseEvent(XButtonEvent &event) {
// we can ignore which window the event was generated for
ButtonList::iterator btn_it = m_labelbuttons.begin();
ButtonList::iterator btn_it_end = m_labelbuttons.end();
LabelList::iterator btn_it = m_labelbuttons.begin();
LabelList::iterator btn_it_end = m_labelbuttons.end();
for (; btn_it != btn_it_end; ++btn_it) {
if ((*btn_it)->window() == event.window) {
(*btn_it)->buttonReleaseEvent(event);
@ -574,8 +612,8 @@ void FbWinFrame::redrawTitle() {
int border_width = m_labelbuttons.size() != 0 ?
m_labelbuttons.front()->window().borderWidth() : 0;
ButtonList::iterator btn_it = m_labelbuttons.begin();
ButtonList::iterator btn_it_end = m_labelbuttons.end();
LabelList::iterator btn_it = m_labelbuttons.begin();
LabelList::iterator btn_it_end = m_labelbuttons.end();
for (unsigned int last_x = 0;
btn_it != btn_it_end;
++btn_it, last_x += button_width + border_width) {
@ -888,8 +926,8 @@ void FbWinFrame::renderLabelButtons() {
getCurrentFocusPixmap(label_pm, not_used_pm,
label_color, not_used_color);
ButtonList::iterator btn_it = m_labelbuttons.begin();
ButtonList::iterator btn_it_end = m_labelbuttons.end();
LabelList::iterator btn_it = m_labelbuttons.begin();
LabelList::iterator btn_it_end = m_labelbuttons.end();
for (; btn_it != btn_it_end; ++btn_it) {
(*btn_it)->setGC(theme().labelTextFocusGC());

View file

@ -19,7 +19,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: FbWinFrame.hh,v 1.10 2003/07/26 16:17:01 rathnor Exp $
// $Id: FbWinFrame.hh,v 1.11 2003/07/28 12:11:57 fluxgen Exp $
#ifndef FBWINFRAME_HH
#define FBWINFRAME_HH
@ -32,6 +32,7 @@
#include "FbPixmap.hh"
#include <vector>
#include <list>
#include <string>
#include <memory>
@ -93,6 +94,10 @@ public:
void addLabelButton(FbTk::Button &btn);
/// removes a specific button from label window
void removeLabelButton(FbTk::Button &btn);
/// move label button to the left
void moveLabelButtonLeft(const FbTk::Button &btn);
/// move label button to the right
void moveLabelButtonRight(const FbTk::Button &btn);
/// which button is to be rendered focused
void setLabelButtonFocus(FbTk::Button &btn);
/// attach a client window for client area
@ -208,8 +213,9 @@ private:
typedef std::vector<FbTk::Button *> ButtonList;
ButtonList m_buttons_left, ///< buttons to the left
m_buttons_right; ///< buttons to the right
ButtonList m_labelbuttons; ///< holds buttons inside label window
FbTk::Button *m_current_label; ///< which button is focused at the moment
typedef std::list<FbTk::Button *> LabelList;
LabelList m_labelbuttons; ///< holds label buttons inside label window
FbTk::Button *m_current_label; ///< which client button is focused at the moment
std::string m_titletext; ///< text to be displayed int m_label
int m_bevel; ///< bevel between titlebar items and titlebar
bool m_use_titlebar; ///< if we should use titlebar